本周见闻
Git 2.36 亮点
4 月 18 日,Git 正式发布 2.36 版本,其中包含 96 个贡献者的改动,其中有 26 个新特性,在此罗列一些我比较感兴趣的新特性:
- git log —remerge-diff,更好地显示合并提交的差异,在此之前,如果我们查看一个具有合并冲突的提交差异时,输入的结果往往很难理解,而现在使用
--remerge-diff
则可以用 mergeconflictStyle 的样式显示差异。 - 更严格的存储库权限检查,在 2.35 版本时,出现了两个安全漏洞,此漏洞会影响在多用户计算机上工作的用户,这可能会导致某个用户在其他用户的存储库上执行任意命令,在 Git 2.35.2 版本中发布了安全补丁,总得来说就是 Git 更改了默认行为,防止这种情况的发生,我们也可以通过最新的 safe.directory 配置来有意义地绕过这个行为。
- 我们都知道 git bisect 这个命令可以用于二分查找,快速定位引入 BUG 的提交,同时它也可以通过指定一个可执行脚本来自动化这个过程,
git bisect run test.sh
,但在此之前,Git 并没有检查指定的文件是否为可执行脚本,导致 bisect 运行出错,该问题现在得到修复。 - 还有很多,感兴趣自行了解。
问HN:你如何在网上找到可靠的信息?
在 hacker news 上看到的一个帖子,在信息爆炸的时代,我们如何在网上找到可靠的信息?总结出了一些自认为有用的观点:
- 在信息源寻找「信息」,而不是「观点」,我们根据这些「信息」,得到我们自己的「观点」,同时以开放的心态去验证自己的「观点」,留意那些与你不同观点的人。
- 永远不要相信单一的信息来源,譬如不要只看国内的媒体:)
- 摆脱信息茧房,学习使用 RSS 订阅你感兴趣的内容,但是如何寻找有用的信息源也是一大难题。
- 尝试使用英文搜索你的问题,如果 Google 不好用,可以试试 Teclis。
一些 tips
JavaScript 根据背景色显示对应的文字颜色
在 2022 的今天,dark 模式已经成为任何一个关注用户体验的应用不可或缺的功能,其中有一个很常见的需求就是根据背景颜色决定对应的文字颜色,这里就简单讲述一下我的实现思考。
首先我们需要知道任何颜色都有对应的灰度值的,得到颜色对应的灰度以后,就能知道该颜色是属于偏亮还是偏暗。
而获取灰度值的公式为:(0.299 * r + 0.587 * g + 0.114 * b) / 255
下面我们简单测试一下:
/**
* 从 rgb 获取灰度
*/
function getGrayLevelFromRgb([r, g, b]) {
return (0.299 * r + 0.587 * g + 0.114 * b) / 255
}
console.log(getGrayLevelFromRgb([255, 255, 255])) // 1
console.log(getGrayLevelFromRgb([0, 0, 0])) // 0
console.log(getGrayLevelFromRgb([255, 0, 0])) // 0.299
console.log(getGrayLevelFromRgb([18, 18, 18])) // 0.07058823529411765
而我们只需要设定一个阈值,大于这个阈值的就属于 light,否则为 dark 即可。
这里我设定的阈值是 0.85,这个阈值具体是多少根据实际情况而定。
在 Vim 中保存只读文件
:w ! sudo tee % > /dev/null
Mac 在 dock 隐藏特定应用
有时候我们想要在 Mac 的 dock 中隐藏特定应用,可以这样:
sudo lsappinfo setinfo -app XXX ApplicationType=UIElement
分享文章
怎么花两年时间面试一个人
这是一篇 11 年前的文章(2011),但在今天看来仍然非常有用,本文比较长,但我还是建议你阅读。
这里简单摘要一些本文内容,本文开宗明义地提出一个问题:招聘难,难于上青天。
这是因为:
- 最好的人也许不投简历,就决定去哪里了。所以要在他们做决定前找到他们。
- 比较差的会投很多次简历,找不到工作的时间越多,投的简历越多,给整个 pool 带来很多噪音,top10% 的简历也许根本不算全部人的 top10%。
公司招到靠谱的人非常重要,所以,招聘也许是一个公司决策当中最最重要的一个环节。
本文作者就根据他的一些经验,给出了一些关于如何做招聘的建议。
最后作者给出如何花两年时间面试一个人的方法,那就是看面试者平时的积累,推荐的方式是:书 + GitHub,这样足以相当两年左右的面试。
你应该阅读学术计算机科学论文
作为一名在职程序员,你需要不断地学习,你可以通过查看教程、文档、StackOverflow,以及你可以找到的任何帮助你更好地编写代码并保持最新技能的内容。但是,你试过深入研究计算机科学论文来提高你的编程能力吗?
虽然以上提到的教程可以帮助你立即编写代码,但阅读学术论文能够帮助你了解编程的来龙去脉,从空指针到对象,这些编程中大部分日常使用的功能都可以追溯到上世纪 60 年代,未来的创新一样建立在今天的研究之上。
所以,不妨试一下直接通过阅读论文去了解这些编程的知识,如果认为阅读论文还是太难,可以试一下观看这些演讲:PapersWeLove - YouTube。
WebAssembly 使用JavaScript 垃圾回收器
我们知道,JavaScript 自带有垃圾回收机制,而 WebAssembly 却没有这个机制,因为它在比较底层的环境中运行,我们只能靠自己分配内存。
目前有一个关于 WebAssembly 的提案,涉及实现一个垃圾回收机制,但可惜还处于 Stage 2,仍没有浏览器实现该功能。
而本文作者发现了一个取巧的方式可以实现这个需求,那就是使用 WeakRefs,总的来说就是通过 WeakRefs 特性,自行实现一个永久循环的函数,去做垃圾回收的事情。
感兴趣可以阅读相关实现代码。
有趣的链接
-
IT Tools:一个开发者工具,包含日常使用的功能,如 Base64 转换、QR Code 生成,URL 解析等,使用体验极佳。
-
Operator Lookup:输入一个 JavaScript 的操作符(e.g. +、=>),将会解释该操作符的作用,对初学者非常有用。
-
Git Explorer:通过的问答选择的方式寻找你想要的 Git 命令,从此使用 Git 命令不再求人。
-
macOS Setup Guide:本指南介绍了在新 Mac 上设置开发环境的基础知识。旨在供所有人用作设置环境或安装语言/库的指南。
-
Tiny Helpers:Web 开发者的工具集合。
-
Internet Encyclopedia of Philosophy:互联网哲学百科全书,有很多关于形而上的哲学论文。
-
Stage:一个设计工具。