本周观察 #6 (2019-02-15)

记录过去一周我看到的觉得值得分享的东西。

技术

1、度量难以量化的事物

我们管理一个组织时,经常需要度量一些指标,然而并不是所有事物都能很方便地量化。本文举了一个例子:如何度量公司的安全工作?

一种指标是“二进制指标”,比如服务器是否遭到了入侵,结论要么是“是”,要么是“否”。但这种指标并不好,因为我们更希望指标是分成多个梯度的,并能在不同的梯度提示我们要做什么。

更细节一些,我们可以有很多有用的数字,比如库升级的频率是多长时间,通过 SSH 访问服务器的 folk 数量等。不过作者认为直接使用这些原始数据并不是很好,应该将它们组合起来,拼成若干更有针对性的人工合成指标。

如下图所示,将各个输入指标组合为合成指标,并将服务器的安全性分为 A ~ F 几个级别。

一个使用示例:

80% 的服务器处在安全级别 A,与 Q4 的 60% 相比有提升,达到 75% 的目标。

最后,作者也提到,这样的方法虽然很有用,但也有成本,最大的问题是设计、实现以及改进此类指标非常复杂。不过随着你负责的工作变得越来越复杂,实现这样的指标还是值得的。

2、开发团队效率度量

上面那个作者的另一篇文章,主要讲了度量开发团队效率的四个角度:

1) 需求完成时间 即从收到用户需求到该需求发布上线,总共花了多少时间。这需要一个维护良好的需求追踪工具。
2) 发布频率 多长时间发布一次?随着团队人数增加,这个时间有没有变化?
3) 故障恢复时间 发生故障后,花了多长时间恢复服务?
4) 修改失败频率 多长时间会遇到一次修改失败(没有解决需求,或引秝新的问题)?或者多长时间回滚一次代码?

关于这个主题,近期阿里技术公众号上也有一篇文章提出了5组指标

1) 持续发布能力,包括发布频率、发布前置时间
2) 需求响应周期,包括交付周期时间、开发周期时间
3) 交付吞吐率,包括单位时间交付用户需求数量
4) 交付过程质量,包括缺陷创建和修复时间分布、缺陷库存
5) 交付质量,包括单位时间问题数目、线上问题解决时长

3、15 个 ES6 语法的关于 map()、reduce()、filter() 方法的实用示例

如果对 ES6 中数组的 map()reduce()filter() 还不是很熟悉,可以看一看这篇文章,比较实用。

不少方法在 lodash 等库中也有对应的实现,不过在 ES6 中也可以自己用简洁的代码来完成。

4、ES2019 中的新东西

截止目前,下面这些新特性都还处在 Stage 3 candidates 状态:

1) JavaScript 类的变化,如私有属性/方法、静态属性/方法;
2) String 新增 trimStart()trimEnd() 方法;
3) 新增大整数对象 BigInt (评:有这个对象后,笔者之前写的 big-int 库就彻底没用了);
4) 新增将嵌套数组变平的 flat()flatMap() 方法;

按惯例,ES2019 标准应该会在今年 6 月发布。

5、使用 Node.js 将 HTML 转 PDF

使用 Node.js 将 HTML 转为 PDF 主要有这样几种方法:

1) 使用 Html2canvas 等库,将 HTML 内容转为图片,再用 jsPdf 等库把图片生成为 PDF。

这种方式生成的 PDF 有很多缺点,比如文字不能选中(因为实际上是图片),无法搜索,如果内容过长,分页的时候甚至有可能在文字中间切开来,因此并不是很推荐。

2) 只用 PDF 库,比如 PDFKit,纯手工将 HTML 内容转为 PDF。

理论上这种方式可以实现任意效果,但手工将 HTML 转为 PDF 的过程很枯燥繁琐,尤其是使用了复杂的 CSS 样式的时候。

3) 使用 Puppeteer 将页面转为 PDF。

Puppeteer 是 Google 推出的一款基于 Chrome 的无界面浏览器,自带完整的 HTML/CSS 渲染引擎,同时有强大的 PDF 转换 API。

这也是本文推荐的方法,目前来看,这可能是最简单同时效果也最好的 HTML 转 PDF 方案。

另外,还有一个类似的方案 wxHTMLtoPDF,它使用了 Qt WebKit 渲染页面,并包装为一个命令行工具,可直接在命令行调用,支持的参数也比 Puppeteer/PDF 方案要多,也可以考虑。

工具/库

1、react-window

一个高效的展示列表或表格数据的 React 组件。按官方demo,可轻松生成/展示上千行数据。

2、TypeIt.js

简单易用的在页面上用打字机效果输出文案的库。个人或开源项目免费,商用需要购买授权。

3、React-wordart

在网页中使用艺术字特效,基于 CSS(css-wordart)。看在线 demo,有种早年 Word 文档中的艺术字的感觉。

4、x-spreadsheet

基于 JavaScript (canvas) 的表格库,类似 Excel。MIT 授权协议。

5、dumper.js

用于 Node.js 的以漂亮整洁的形式输出变量值的库,可用于开发阶段,替代 console.log() 之类的方法。

6、ImmortalDB

一个在浏览器端持久化保存数据的方案,类似 Evercookie,但是开发更活跃,文档更齐全,接口也更现代(Promise)。

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google photo

You are commenting using your Google account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s