粗体的玄学:谈谈 b 与 strong

之前遇到了在一段提示中需要加粗的问题,我们都知道,加粗有几种写法:

  • font-weight
  • <b>
  • <strong>

但是,这三者到底有什么区别——

在大多数场景下,我都会选择使用 font-weight,众所周知的是,HTML 应该与语义结合,如果是一般的加粗,那么使用 font-weight 刚刚好。

- 阅读剩余部分 -

npm shrinkwrap 与 package-lock

从开搞到文章结束过了一个月……所以……看看就行

前两天在一个群里看到一个问题,有人问「yarn 能不能人工锁版本号」,刚开始我们都没有理解,觉得明明直接用 yarn 或者 yarn install 就能生成 lock 文件,为什么要人工生成。

于是被介绍了一个 npm shrinkwrap,这是在 package-lock 出现之前就有的项目依赖锁定工具,实际上效果和 package-lock 差不多,唯一的不同是:npm shrinkwrap 是手动生成的。同样的,在更新包、删除包时也需要在完成后手动使用 npm shrinkwrap

在现代的版本中,如果两者同时存在,那么会优先取 shrinkwrap:

This command installs a package, and any packages that it depends on. If the package has a package-lock or shrinkwrap file, the installation of dependencies will be driven by that, with an npm-shrinkwrap.json taking precedence if both files exist. See package-lock.json and npm-shrinkwrap.

- 阅读剩余部分 -

NAS 入门篇

由于 Time Machine 先后救我于水火之中两次,但是我的路由器实在不方便做,仗着有一点微小的闲钱(2000 块……),我就开始研究 NAS 了。

货比三家

在购买之前,首先先查了一波 NAS 的户口:群晖、威联通、玩客云——玩客云首先由于功能薄弱先 Pass,与其说玩客,不如说是视频+,具体是在什么值得买看到的……Emmmm,一点都不 Server。

威联通的价格比群晖低好多,不过相对的软件生态也不太一样,刚开始苏老师跟我疯狂案例威联通,看了一下价格还算可以,同样的价格群晖的配置比威联通低一点,而且还只有两个盘位,隔壁威联通能买到四个盘位,配置可扩展性也更高一点——但是在 DIY 的黑群的对比下,完全是碾压级别的……便宜。

- 阅读剩余部分 -

我只想让一堆 Promise 跑起来:promise-foreach

最近在写项目的时候有个需求:我的 Promise 即使失败了也没关系——更进一步的,当且仅当失败率大于某一值,这才是一个失败的请求。

于是我查看了包括 ES6 Promise 和 Bluebird 的实现,发现都没有我想要的效果:

  1. 异步无序
  2. 每个方法使用相同处理函数
  3. 失败不影响结果

在完成项目之后把函数抽出来作为一个单独的 utils 模块发布,今天总算把 lint 和 test 补齐了,于是顺手写一篇宣传文。

他没什么大作用,函数实现还是表现形式都比较 Low:

const foreach = require('sky-promise-foreach')

foreach([...promises], (result) => {
  // success handler for each promise
}, (err) => {
  // error handler for each promise
})

在同事的建议下,之后有空可能会出一个改版,把这个库做的更通用一点。

Repo 地址:https://github.com/csvwolf/promise-foreach

[翻译]小心你复制的内容:使用零宽字符将用户名不可见的插入文本中

翻译源:Be careful what you copy: Invisibly inserting usernames into text with Zero-Width Characters

不想读?试试这个 demo

零宽字符都是不可见的「非打印」字符,大多数应用程序中都不会显示这些字符。比如,我在这句话中添加了十个零宽字符​​​​​​​​​​,你能分辨出来吗?(提示:将句子粘贴到 Diff Checker 来查看这些字符的位置。这些字符可以被用于做某些用户的「指纹」字符。)

- 阅读剩余部分 -

脏读、幻读与不可重复读

最近在读 《MySQL 技术内幕 InnoDB 存储引擎》,里面提到的各种概念都很新鲜,以前听说过脏读、幻读、不可重复读,但是对于概念不甚了解,于是查了一下,这里做个笔记。

数据库事务特征

数据库事务特征,即 ACID:

A Atomicity 原子性

- 阅读剩余部分 -

别闹!自签名证书!

程序员英语这本书虽然事实证明确实写的不怎么样,但是开头的一些内容还是值得参考的,比如其中的一道思考题:自签名证书会带来哪些危害。

既然说起这个,当然要从最简单的 HTTPS 说起。

为什么我们需要 HTTPS

理论上而言,HTTPS 即通信加密,可以预防窃听和中间人攻击,当然,对于大多数用户和网站而言,最重要的是避免了各层的劫持。

- 阅读剩余部分 -

JavaScript Note.我想插入一个动态的脚本

发现各位观众老爷们要求太高吓得我都不敢更新了……喵喵喵,我明明只是一个笔记本顺便分享一下……的说。

还是安静的当个笔记本吧……

最近两次跌到在同一个坑里,问题其实非常简单,也非常基础,就是——我需要动态加载并执行脚本。

一般来说,我喜欢用 innerHTML 这种简单明快的方式添加内容,但是却发现,innerHTML 竟然无法执行我添加的 <script> 脚本,很明显,这不符合我的预期——

- 阅读剩余部分 -

Grafana 插件开发从零到一

阅前高能提醒:这篇文章总的来说并不是在教你怎么开发,而是告诉你怎么去学习开发一个 Grafana 的插件,说是从零到一,MAX_VALUE 其实是 100,望珍重。

引子

前一阵子突然接到了一个新任务:开发一个 Grafana 的 Datasource——差不多是这个表情。

15311431794605.jpg
作为一个新时代的好码畜,上一次配置 Grafana 面板的时候,含着热泪抱着大佬的大腿,在几乎完全是大佬输入的情况下完成了面板——我连面板都不会配你竟然让我开发?What,我没听错吧。

在此之前,我们为服务添加监控除了已经注入到满足条件的数据库后使用已有数据源配置,还有的就是 mock 请求映射到数据源,但是这样有太多不可变操作,如果我们能自己写个 datasource 岂不是美滋滋,一把梭。

- 阅读剩余部分 -