咖啡馆的体验,我的随身装备与软件工具分享:ra-multiplex, sunshine, moonlight, watchman
· ☕ 3 min read
最近,我常常带着笔记本去小区附近的咖啡店工作。人类是群居动物,我一个人宅在家太久了,不和人说话,难免会感到压抑,而且一天三顿外卖的生活对健康也不友好。在咖啡店工作,不仅能换个环境,还可以和店员聊聊天(那家咖啡店的店员也是程序员,也有做金融的,也有互联网公司合伙人,我们也有很多共同话题可以聊)。午饭和晚饭也能顺便去附近餐厅解决,比点外卖健康多了。

黄山 爬山
· ☕ 1 min read
安徽 黄山 我没坐索道 全程走上去走下来

记录第一次给 GNU/Emacs 上游贡献代码的经历
· ☕ 2 min read
I faced performance issues in Emacs with many open buffers, especially while switching tabs using `tab-line`. After identifying the bottleneck, I optimized buffer indexing, enhancing performance and contributing to Emacs.

云南 大理
· ☕ 1 min read
云南 大理 洱海 苍山

SearXNG,启动!
· ☕ 1 min read
在本地将 SearXNG 跑起来。(SearXNG 是一个开源的搜索引擎,它可以聚合多个搜索引擎的结果,同时保护你的隐私。)

康威的生命游戏(Rust + WebAssembly)
· ☕ 2 min read

很早之前就知道有一个有趣的东西叫 conway’s game of life (康威的人生游戏),前段时间我用 Rust 实现了一遍,并且尝试将原作者提出的 2d版本改成3d版;还尝试了 Rust WebAssembly,在网页上欣赏生命游戏。


秦皇岛 北戴河
· ☕ 1 min read

我是一匹来自西北高原的极寒荒瀚之地的西北狼。
但是,
为什么我这么喜欢看海?


介绍一下我的生产力工具
· ☕ 10 min read

我的计算机是我日常打交道最多的设备, 就像是我的一位老朋友. 他懂我的心意.


不容忽视的 Goroutine Leak 以及如何排查
· ☕ 4 min read

我们可以用 golang 很轻松地进行并发编程,但是在并发编程过程中,得留意 goroutine 的泄露。

什么是 goroutine 泄露

其实 goroutine 泄露就是内存泄露的一种:你开启了一个 goroutine ,但是你开启完了就把它忘了或者不管它了,它以后是死是活,忙不忙,是不是阻塞了,你都就不关心它!(渣男/渣女行为)。然后这个 goroutine 要是一直活着就会占用你的内存资源,虽然一个 goroutine 占用的内存资源很少,但是要是成千上万的 goroutine 泄露了,后果还是很严重的。这就是 goroutine 泄露。


Condition Variables: 搞明白 go 语言的 sync.Cond
· ☕ 3 min read

条件变量(Condition VAriables)是一种并发原语,条件变量允许一个线程在某个条件不满足的时候进入睡眠状态,当条件满足时再唤醒它。条件变量还支持当条件满足时,唤醒一个(wake one)和唤醒所有(wake all)。


MIT 6.S081 操作系统 课后实验笔记[Lab Utils & System Call]
· ☕ 7 min read

实验环境搭建

课程主页:MIT 6.S081 Operating System

最开始make qemu报错,提示我没有 riscv64 版本的 binutils:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
> make qemu
***
*** Error: Couldn't find a riscv64 version of GCC/binutils.
*** To turn off this error, run 'gmake TOOLPREFIX= ...'.
***
gcc    -c -o kernel/entry.o kernel/entry.S
kernel/entry.S: Assembler messages:
kernel/entry.S:11: Error: no such instruction: `la sp,stack0'
kernel/entry.S:12: Error: no such instruction: `li a0,1024*4'
kernel/entry.S:13: Error: no such instruction: `csrr a1,mhartid'
kernel/entry.S:14: Error: no such instruction: `addi a1,a1,1'
kernel/entry.S:15: Error: too many memory references for `mul'
kernel/entry.S:16: Error: too many memory references for `add'
kernel/entry.S:20: Error: no such instruction: `j spin'
make: *** [<builtin>: kernel/entry.o] Error 1

ArchLinux 这样安装相关依赖,其他系统参考: 6.S081 tools / Fall 2020


MIT-6.824 分布式系统 课后实验 Lab3 A (Fault-tolerant Key/Value Service)
· ☕ 3 min read

lab2已经完成了简单的raft, 在lab3里要完成一个key-value数据库。

数据库服务端应该有这三个接口:

  • Get(key string)
  • Put(key, value string)
  • Append(key, value string) // 如果 key 不存在,那么有等同于 Put

客户端和 Clerk交互, Clerkraft server 交互。


MIT-6.824 分布式系统 课后实验 Lab1 (Map Reduce)
· ☕ 6 min read

Map-Reduce 论文阅读

分析

实验要求 在 mr/master.go, mr/worker.go, and mr/rpc.go. 中编码,并且只指定了 reduce worker的数量:nreduce

master最后要以 go run mrmaster.go pg-*.txt 的方式运行,每一个.txt文件对应一个split,一个split分派一个mapworker


Kernel Panic: 我把 Arch 滚挂了
· ☕ 3 min read
每一位 Arch Linux 用户都喜欢做的事情: sudo pacman -Syu; 但是我自己犯了大错,在更新过程,终端卡死,键盘鼠标无响应,等了 20 几分钟也无响应,就长按电源强制关机了,再次开机后,我看到了 Kernel Panic