你真的懂保险吗?

缺失 9 天

2019-03-31

CSS Grid Layout is the most powerful layout system available in CSS. It is a 2-dimensional system, meaning it can handle both columns and rows, unlike flexbox which is largely a 1-dimensional system.

https://css-tricks.com/snippets/css/complete-guide-grid/

乱语:参加完第五届 css 大会,感觉整个世界都在说 grid 布局,我至少落后了 2 年Continue reading “你真的懂保险吗?”

最小生成树 kruskal 算法 js 实现

本站以前有一篇文章提到了 prim 算法的实现,具体点这里,我写了完整的示例,和优化版的 prim 在时间上的对比。现在我们来看另一种思路:Kruskal。

话不多说,先看实际效果和结论。在 1k 个节点里,lazy prim 耗时在 4s 左右,优化后的 prim 在 900ms 左右,而更高效的 Kruskal 在 600ms 左右。测试的前提条件是基于我的电脑硬件配置和 1k 个节点的完全稠密图。

要实现高效的 Kruskal 算法,需要基于高效的并查集数据结构,但是并查集我们不在这篇文章里谈及,我们主要谈谈 Kruskal 的思路。

Continue reading “最小生成树 kruskal 算法 js 实现”

最小生成树 prim 算法的 js 实现

最小生成树 prim 算法的 JavaScript 实现

说明:以下示例请在较新的浏览器中查看,因为用了 class 语法。

写这篇文章的缘起

在 pcb 设计中,有一种东西叫飞线,他的生成原理主要就是使用了最小生成树算法。最小生成树是什么效果,可以看下面的例子。想知道飞线的具体应用可点击这里。工作中有用到,那必须得学习。

飞线也称跳线,是指印刷电路板上因设计缺陷、测试目的或是其他设计考量,将电路板上的两个节点直接用电线连通的一种方法。

维基百科
Continue reading "最小生成树 prim 算法的 js 实现"

vs code 怎么使用 .editorconfig

项目文件夹里包含一个 .editorconfig 文件解决了我很久的一些困扰,比如删除行末的空格、缩进使用 tab、tab 的宽度是 2 个空格、文件最后新增空白行。这是一个很棒的创意,推荐大家使用这个。

先再 vs code 安装一个插件,地址在这里

再新建一个 .editorconfig 文件,写上一些规则,如:

# 针对所有文件
[*]
# 使用类 unix 的换行符
end_of_line = lf
# 新增最后的空白行
insert_final_newline = true

就这么简单,可以使用了。如果大家有代码洁癖,估计就能理解我上述的规则以及为什么要这么做。

参考链接

出国读书,从开始到结束

开头

这是一篇拖欠了两个月的文章,内心一直在找借口再缓缓,等我对国外生活的怨恨少一点,再少一点时,动笔。这样我就不是在情绪中写字。

谈我自己的留学生活前,我想先粗略谈点这一切的源起。 Continue reading “出国读书,从开始到结束”

欢迎加入我的前端群

2019-07-31

A curated collection of useful CSS snippets you can understand in 30 seconds or less.

https://30-seconds.github.io/30-seconds-of-css/

乱语:30s 学习一个 css 小案例,成功抄袭一个动效给自己私用。不敢独享,安利给大家。

2019-07-30

Why are lookbehind assertions not supported in Javascript?

https://stackoverflow.com/questions/30118815/why-are-lookbehind-assertions-not-supported-in-javascript

乱语:偶然发现火狐浏览器目前仍旧不支持正则 lookbehind 的写法,至于为什么不支持,有的人说是 Brendan Eich(JavaScript 语言的缔造者) 忘记做了;有人说正则引擎实现这个太难了。你们知道是为什么吗? Continue reading “欢迎加入我的前端群”

也谈 996 及其它

行外的人可能不太清楚“996”的意思,所以还是有必要解释一下。大致的意思是说早上 9 点上班,晚上 9 点下班,一周工作 6 天。本来我是不想谈这个的,对此没有兴趣。因为很多人都是带着或多或少的目的来发表意见,你聊的是法律,我灌得是鸡汤,一场辩论下来牛头不对马嘴,徒增口舌。我不带有什么目的,也不想辩论,所以我自是不感兴趣。

而且互联网的热度就是那么一阵,我写这篇文章的时候,大家早就好了伤疤忘了疼,另有其他热点事件转移了注意力。但是既然动笔了,就稍微写几句,关键在于“其它”。

Continue reading “也谈 996 及其它”

文件上传进度和解析 Form Data

最近有一个小需求:上传文件的时候显示上传进度(上传了百分之多少)。这个需求不难,比如以下代码就能实现:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Upload file</title>
    <script>
      function uploadFile() {
        var fd = new FormData(document.forms[0]);
        var xhr = new XMLHttpRequest();

        xhr.upload.onprogress = function (e) {
          console.log('e.loaded:' + e.loaded + ', e.total:' + e.total)
          console.log(Math.round(e.loaded / e.total * 100) + '%') // 这里是上传进度
        }

        xhr.onreadystatechange = function(){
          if ( xhr.readyState === 4 ) {
            if ( xhr.status >= 200 && xhr.status < 300 || xhr.status === 304 ) {
              console.log(xhr.responseText)
            }
          }
        }

        xhr.open("POST", "/");
        xhr.send(fd);
      }
    </script>
  </head>
  <body>
    <form action="/" method="POST" enctype="multipart/form-data">
      <input type="file" name="file" id="file" required />
      <input type="hidden" value="1" name="hidden">
      <input type="text" name="text">
      <input type="range" name="range">
      <button onclick="uploadFile();" type="button" id="upload">Upload</button>
    </form>
  </body>
</html>

Continue reading “文件上传进度和解析 Form Data”