Deno 取代 NodeJS
本文介绍了 ry 最近的工作 - deno, 一个试图修正 nodejs 曾经犯过错误的替代品,使用 V8 引擎,TypeScript 作为编程语言。
- 他最大的遗憾是没能将 Promise 用下去,写起代码来程序员们就不得不使用 callback,很是头疼。
- 其他设计的不太好的地方有 GYP 编译模块太复杂,没能用上沙盒,所有依赖安装在项目的 node_modules 里面(实现很复杂,没有环境变量那样简单)
- deno 的修正:使用 event I/O, 但是默认不开 network/disk access; 所有的 syscall 都是通过 protobuf 传给 v8 来做,简化了模块系统,等等。
Go 内存管理
本文介绍了 Go 进程的内存模型。开篇从最简单的的 HTTP Server 实现开始讲起,介绍了两个概念:Virtual Memory Size(VSZ) / Resident Set Size(RSS),前者是虚拟内存,包含了换页出去的内存数据,后者是驻留在内存,不包含换页数据。我们知道内存在物理上可以等价为 8比特存储槽的数组,每个槽可以存一丢丢数据;而虚拟内存机制让每个程序都可以以为自己独占了所有内存,小 trick 是其实大家都在共享这有限的资源,但是操作系统会轮着把不频繁使用的页暂时丢回硬盘(换页) - 这一套机制可以通过 MMU,Page Table,PTE,TLB 等模块完成,应用程序无需担心。 在进程实际运行的时候,内存的划分会变成有固定的代码段,数据段,初始数据以及向下生长的 stack,向上生长的 heap - 这也是由操作系统提供的(exec家族函数)。操作系统还提供 mmap, brk …
read moreTurn Your Keyboard into a Text-Editing Rocket
本文对全键盘操控 macOS(vim-like) 提出了一整套方案,使用的工具:Hammerspoon,Karabiner-Elements. 整套方案如下:
- 可以在任何应用中使用 hjkl 代替上下左右,uiop 代替首tab,左tab,右tab,末tab: 同时按下sd并持续按着, 启动 SuperDuperMode。
- sd a j/k: 翻页
- 可以用 ctrl+s 启动 window layout mode: hjkl 可以将窗口放在左上下右;enter放大,space置中
- hyper key: right option+s=>slack, right option+t=>iterm, right option+b=>chrome …
Understanding Git under the hood
本文快速过了一遍 Git 原理,适合当成带新人的第二课的讲义。讲义如下:
- 新建目录,git init, 解释 .git 是什么,一个数据库。
- 修改文件,git add & git commit,解释 commit 是什么,一个无法修改的有被修改的文件以及 hash 的快照。
- 通过 git log & git cat-file 讲解 commit, tree, blob 和 annotated tags 的关系。
- 最后可以过一遍 HEAD, tags, branches 的关系。
延伸思考:这篇文章在最后一点上讲简单了。在带过的人中,普遍会觉得 branch, HEAD 这几个概念是最难掌握的。
read moreLinux 和 Unix 的区别
本文是一篇科普文,讲述 Linux 和 Unix 的区别。发现很多人有个误解,觉得 Unix 是个过时的东西,其实不是的。许多人只识 Linux 不识 Unix。
从历史说起,来自 AT&T Bell Labs 的好基友 Ken Thompson and Dennis Ritchie 要写一个多任务多用户的操作系统,于是左手写 Unix,右手写 C,再换回左手写 Unix。特别是 Ken 的 Unix Philosophy 至今仍成为软件工程设计的基石(不一定是最好也不是唯一的但是几乎是个软件工程师都能认知的一些基本原理),例如 Pipe。在工业界传回学界的路上,Berkeley 的分支 BSD 扩展了 Unix …
read more