Deno 取代 NodeJS

查看原文

本文介绍了 ry 最近的工作 - deno, 一个试图修正 nodejs 曾经犯过错误的替代品,使用 V8 引擎,TypeScript 作为编程语言。

  • 他最大的遗憾是没能将 Promise 用下去,写起代码来程序员们就不得不使用 callback,很是头疼。
  • 其他设计的不太好的地方有 GYP 编译模块太复杂,没能用上沙盒,所有依赖安装在项目的 node_modules 里面(实现很复杂,没有环境变量那样简单)
  • deno 的修正:使用 event I/O, 但是默认不开 network/disk access; 所有的 syscall 都是通过 protobuf 传给 v8 来做,简化了模块系统,等等。
read more

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 more

Awk - A useful little language

查看原文

本文快速就 Julia Evans 的 awk 简介做了更深入一丢丢的介绍。

awk 的核心算法是:

init()
for line in input:
    for condition, action in conditions:
        if condition(line):
            action()
  • awk 可以通过 awk 'BEGIN{}' 或者 awk -f hello.awk 调用。
  • awk 可以通过 -F 调整 field separator.
  • awk 可以塞入 $1, $2 +-*/ >< && || 甚至无需初始化的变量
read more

Turn 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 …
read more

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 more

How Internet Works

查看原文

这张9宫格漫画形象地说明了 Internet 是如何运作的。

  • 图1:用户要通过浏览器访问 Google
  • 图2:浏览器要穿透所在地区附近的防火墙,只有允许的端口才允许放行。
  • 图3: DNS 服务器把 google.com 翻译成 ip 地址
  • 图4: 漫长的互联网数据包传输
  • 图5: 到达地之后会发现地址哪里有很多服务器
  • 图6: 其中一台服务器会给出响应
  • 图7: 漫长的互联网数据包传输
  • 图8: 浏览器成功带回响应给用户

衍生思考:出于科普,隐藏掉的细节至少有:TCP 握手,丢包重传,服务端自身响应也需要时间。

read more

Postmortem - Cloudflare 1.1.1.1 outage 17 minutes

查看原文

本文是 Cloudflare 1.1.1.1 挂了 17 分钟的事故分析,写得不太好。

  • 事故:17 minute outage
  • 原因:Gatebot, 一个主动防御 DDos 的模块,因为没将 1.1.1.0/24, 1.0.0.0/24 放入特别处理的列表里面,所以将正常流量误杀了。
  • 后续:好好测试

衍生思考:好好测试简直是随便糊弄出来的方案。正解应该是上 1% Canary 测试啊!可能是局内人推不动这件事情吧。

read more

Linux 和 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

The most effective engineers

查看原文

这则推文描述了作者认为的高效的工程师处理问题的方式:在合适的时间选择合适的问题处理,顺畅沟通,对人谦逊,能从他人的角度思考问题。这几个点不太好衡量,算是工程师的软技能。

read more

« Page 20 / 54 »