内核恐慌和吴涛的博客

内核恐慌是个面向程序员的播客节目。前面一些比较好听,后来就更新得少了,以至于是年更节目了。

最近好像有个什么播客活动,各种个样的电台在窜台。内核恐慌的两个主播Rio和吴涛就到枫言枫语去合作了一期节目叫 《如果不做程序员我们会做什么?》。

由于多年都在听内核恐慌,所以这期的内容倒是了无新意。里面提到了主持人吴涛的博客,还给了链接,很有意思。

吴涛的博客写了好几年,近几年不写了。我曾经看过,记忆里觉得都是一个个标题问题,然后就是个简单的回答,今天再去回顾,发现还真的写了不少文字在里面。

其实无论文字长短,都是那一刻的思绪,值得记录下来。

Datasette SQLite

有一两年了,在油管上看到一个pycon的演讲,主题是 https://datasette.io ,作者是Simon Willison。datasette是一个Python的包,也是一个数据展示的生态。可以通过pip install datasette 来安装。

这个工具的的核心是在浏览器里展示sqlite数据库文件的内容。

为什么要用sqlite呢?sqlite作为一个文件数据库,在互联网上的应用处理并发是不合适的,但是,作为一个只读的内容承载,是非常好的。有两篇参考文档可以看:

https://simonwillison.net/2021/Jul/28/baked-data/
https://mozilla.github.io/meao/2018/03/28/bedrock-the-sqlitening/

最近,在阮一峰的网摘上,也收录里一篇SQLite背后的故事,很有趣。

https://liyafu.com/2022-07-31-sqlite-untold-story/

文摘链接在这里:

https://www.ruanyifeng.com/blog/2022/08/weekly-issue-217.html

可以好好研究一下这两个工具,挖掘一下。

大脑经常短路

最近真的脑子容易短路,思路很不清晰。

我的电脑不新,工具链就比较老。比如我的.NET工具就是用SharpDevelop,一个已经死掉的IDE。

这两天我想用它写一个简单的桌面程序,就连一个本地的Postgres数据库。

我查了网上,需要用到Npgsql这个包,但是版本就很高,比我电脑上的.NET框架要高。我就磨了好几个小时,白白浪费了。

后来我看着天花板,想着,其实最简单的就是更新我的工具链,不用SharpDevelop了,这样问题就解决了呗。

我真的要在思路上向前看,用新技术,用更好的工具。那时,问题要么解决,至少遇见的问题也会上一次档次。

不是年终总结

翻进来第一件事就是加了一个副标题,“年更节目”。

工作换了一个,到一个比较远的地方工作。早上有班车,晚上没有,自己坐一个半小时的地铁回家。

并没有戒掉看台湾节目的兴趣,这个是不是要放到2022的resolution里还没有下定决心。

听了不少播客,从不同的平台,小宇宙、喜马拉雅、CastBox、Overcast。总结下来就是听听声音就好了,不要去强求脸。

社交网络玩得很多,饭否开始了先审后显示,也是一种自保。不过现在对饭否的依赖度倒是降下来了,要做好备份。长毛象也玩起来了,其实吧,长毛象虽然是分布式的,但是也要依附在具体的实例上,不能永存。豆瓣就标记一下看了什么读了什么,没有好好经营。费老的豆瓣账号被停了,不能读不能写,反正就是环境不好呗。最近两个月倒是看起了小红书。小红书提供了一种不同于抖音快手的选择,可以不看视频只读图文帖子。现在小红书的算法已经非常按照我的兴趣推荐了。

每周五都会早上看阮一峰的网摘,随便看看,也没有转化成什么。

换了一个小房子,没有房租了,安心了一些。但是也需要打理。还是要喊安得广厦千万间。

还是买了新的周历本,无印良品的本子从12月份开始,我已经陆陆续续记了一个月,感觉不错。

不说了,琦姐要来看了。(12月31日下午三点左右吧)

2022年目标以平稳为主吧。

Org Mode的Refile功能

在Org Mode中经常会遇见org-refile这个命令。我这么多年一直不知道这个命令是干什么用的。最近重新捡起来用orgmode来管理自己的GTD事项,不自主的就捡起Org Mode – Organize Your Life In Plain Text! 这篇文章,想根据这篇文件来调整自己的GTD流程。

这篇文章里就谈到了org-refile这个命令,我终于明白这个命令就是方便的把一个节点移动到另一个节点下面的命令,快捷键是C-c C-w。但是这个命令有很大的灵活度,在默认的情况下它只能把当前的节点移动到当前文件的第一级节点下面。如果需要更灵活,那么要进行一些配置:

(setq org-refile-targets '((nil . (:level . 3))(org-agenda-files :maxlevel . 3)))

这句话的意思就是把org-refile命令的目标设置成当前文件和所有org-agenda文件的三个级别以内。这样在按了C-c C-w(或者 M-x org-refile)命令时候,在mini buffer里会列出来可以移动到的所有目标位置,用上下键可以选择,回车确定,就移动过去了。这样的好处是我们不用像操作文本一样拷贝粘贴,减少了错误率。

其实很简单。但是在我的实践中,我是用org-refile命令来归档的。然而,在上面的文章里,作者的GTD的操作是另外一种。就是他用org-capture命令把待办事项先简单地添到一个池子里,然后再把相应的todo项用org-refile命令移动到特别的项目文件里去。这是和我相反的一个思路,但是更合理。所以我也配置了<f9>-c作为我的org-capture命令进行快速的添加待办事项,然后再移动到不同的项目文件中。

简单记一笔,不断改进自己的工作流程。

投奔Prelude

好久以来我就是个Emacs用户,但是并不坚定。各种编辑器中都用用,有的时候为了一个特定的功能就会打开Sublime Text。现在我的电脑里装了Emacs、GVim、Sublime Text、VSCode、UltraEdit,这么多编辑器,还不算上PyCharm、IntelliJ一类的IDE。

Emacs和Vim的圣战中我一直站在Emacs一边,多年来也捅咕着自己的配置文件。有一年多,我是在用Spacemacs的,但是我的观念就是绝对不会设置成Vim模式。后来又听说了Doom Emacs,虽然说快一些,但是默认的Vim模式我也是很不喜欢。我喜欢那种按住CTRL键天花乱坠的章鱼感觉。

还有一点,在不同的配置之间切换也是我一直头疼的事情。既然Spacemacs、Doom Emacs只是GNU Emacs配合的一套配置文件,那应该有办法把它们装在不同的目录下,然后用脚本进行切换的。

这个礼拜在RSS上看到https://emacsredux.com/blog/2020/09/15/emacs-prelude-1-0/ 这一篇,原来Prelude终于升级到1.0啦。其中有一句话特别中我的意:

Prelude aims to enhance the classic Emacs experience without deviating a lot from it – e.g. it would never enable something like evil-mode (vim keybindings) by default and so on.

对吗,这才是Emacs该有的样子。Spacemacs还是Emacs吗?好怀疑。文档里有安装方法,可以把这套配置文件安装到一个制定的地方。

$ export PRELUDE_INSTALL_DIR="$HOME/.prelude.emacs.d" && curl -L https://github.com/bbatsov/prelude/raw/master/utils/installer.sh | sh

这样就行了。感觉上就是一个增强版的Vanilla Emacs啦。

后面一个多配置共享的问题,我在StackOverflow上搜到一个答案。https://emacs.stackexchange.com/a/44678,安装一个叫chemacs的工具。

$ git clone https://github.com/plexus/chemacs.git
$ cd chemacs
$ ./install.sh

然后在自己的家目录维护一个 .emacs-profiles.el 文件。在里面列举你的配置。

(("prelude" . ((user-emacs-directory . "~/.prelude.emacs.d")))
 ("spacemacs" . ((user-emacs-directory . "~/spacemacs"))))

最后就可以用相应的配置来启动Emacs啦。

$ emacs --with-profile prelude
$ emacs --with-profile spacemacs 

这样在保留Spacemacs的情况下又可以用Prelude了,很好。

YMCA Song

Young man, there’s no need to feel down
I said, young man, pick yourself off the ground
I said, young man, ’cause you’re in a new town 
There’s no need to be unhappy
Young man, there’s a place you can go
I said, young man, when you’re short on your dough
You can stay there, and I’m sure you will find 
Many ways to have a good time
It’s fun to stay at the YMCA
It’s fun to stay at the YMCA
They have everything for you men to enjoy
You can hang out with all the boys
It’s fun to stay at the YMCA
It’s fun to stay at the YMCA
You can get yourself clean, you can have a good meal
You can do what ever you feel 
Young man, are you listening to me? 
I said, young man, what do you want to be? 
I said, young man, you can make real your dreams
But you got to know this one thing
No man does it all by himself
I said, young man, put your pride on the shelf
And just go there, to the YMCA
I’m sure they can help you today
It’s fun to stay at the YMCA
It’s fun to stay at the YMCA
They have everything for you men to enjoy
You can hang out with all the boys 
It’s fun to stay at the YMCA
It’s fun to stay at the YMCA
You can get yourself clean, you can have a good meal 
You can do what ever you feel 
Young man, I was once in your shoes
I said, I was down and out with the blues
I felt no man cared if I were alive
I felt the whole world was so tight 
That’s when someone came up to me
And said, young man, take a walk up the street
There’s a place there called the YMCA
They can start you back on your way
It’s fun to stay at the YMCA
It’s fun to stay at the YMCA
They have everything for you men to enjoy
You can hang out with all the boys 
YMCA, it’s fun to stay at the YMCA
Young man, young man, there’s no need to feel down
Young man, young man, pick yourself off the ground
YMCA, it’s fun to stay at the YMCA
Young man, young man, are you listening to me
Young man, young man, what do you wanna be?
YMCA, you’ll find it at the YMCA
No man, young man, does it all by himself
Young man, young man, put your pride on the shelf
YMCA, and just go to the YMCA
Young man, young man I was once in your shoes
Young man, young man I was down with the blues, YMCA

欢乐颂

欢乐女神圣洁美丽
灿烂光芒照大地!
我们心中充满热情
来到你的圣殿里!
你的力量能使人们
消除一切分歧,
在你光辉照耀下面
四海之内皆成兄弟。

清明无锡游记录

记一下,否则就忘记了。

清明后一天,坐火车去无锡。

上次去无锡还是一九九零年,那个时候有可能成为一个无锡人,造化弄人,擦肩而过。

中午到无锡,先地铁到清名桥,吃了午饭,在一家中规中矩的餐馆,有烤鸭,有萝卜干,都很可口,还便宜。

下午去无锡博物馆。东区几层楼的动手区很棒,小朋友可以亲自动手玩玩,了解环境、地理、物理、人体构造……总的来说比上海自然博物馆好。

还去4D影院看了《羽龙》动画片,所谓的4D是会有喷雾,椅子也会配合场景动一动,感觉有人在后面踢你。小孩子还是可能害怕。总的来说寓教于乐,十几分钟也不拖沓,另外免费的,值得。

西区就是人文区了。有一个沙盘,清朝街景,有各种店铺,各种人物走在路上,还有人在运河边洗衣服,淘米。主街上有一队人阵仗很大的摆过来,队前还有华盖,估计是皇上南巡吧。

晚上和网友路人甲在一起吃饭,在座的还有她已经十几岁的女儿。我和女孩儿谈得倒是投机,网友啊,手机啊,情商不高的男生啊,王者荣耀啊,什么都还可以谈。临分别,还给女孩儿出了个小帖士,去读傅雷的《世界美术二十讲》,一班主任是美术老师,二是班主任建议不要读活人的书,也算是有的放矢,投其所好。

饭后路人甲还给安排了运河游船活动,短短一段运河之旅,我想到了杭州武林门到拱宸桥段的运河水上巴士。同样的运河,不同样的风物。下船后我们又在南长街上逛回住处。街上有小摊也有食肆,简直是河坊街和高银街的合体。有趣的一个事情,公共厕所的男女比重失调,男厕有时会划归女厕,门口有社区阿姨把守。

第二天早饭时候听隔壁桌在说鼋头渚的花已经被前两天的雨水打光了,交通又不方便,我们就放弃了去那的念头。叫了一辆滴滴快车我们就到了惠山古镇。那里有三个景点是连在一起的,寄畅园、天下第二泉和惠山寺。我们跟卖门票的说我们只去寄畅园,人家说里面是通的,要去就一起去。好吧,一起一起。

寄畅园又叫秦园,占地十五亩,好大。里面有各种假山乱石,还有亭台楼阁。别的不说,墙上的书刻就一定花了很多人力物力。我看着那些好看的行书草书,真是喜欢得不得了。当然,我已经不会天真地以为这些是这里原创的了,在杭州的胡雪岩故居我还震惊的发现苏东坡的寒食帖。

天下第二泉的泉眼已经变成了许愿池,满满的铺了一层硬币。纪念品商店的老板对好奇的游客讲述着瞎子阿炳的故事。里面还有一个小院子,据说在颐和园里有一个园子就是照搬这个的,里面有不少乾隆皇帝的御书。

还有朝房。看来惠山真是好地方,康乾二帝六次巡幸到此。文武百官在这里也就有了落脚的朝房。

下午回到南禅寺一带,吃了穆桂英美食,在茶叶一条街上逛一路,又到三凤桥买了面筋塞肉和排骨。走累了就在那边坐下,晚上吃了饭就火车回家了。

美好的无锡之行,感谢天气,感谢路人甲。下次还要再来,要去鼋头渚,要去拈花湾,想想应该会多住两天吧。

作为一个经验丰富的团队怎么办?

最近听到一个讲演,其中有一个部分讲到如果团队年纪大了该怎样发展下去,现在我记录一下。

经常有人问我们和H有什么区别,对吧?我们跟W团队有什么区别?我来讲讲我的看法。首先啊就是说,我们不再是一个年轻的团队。假设我们去跟W比,和H比,据说我们的平均年龄已经超过他们八岁九岁十岁。我们也有比较资深的,也有比较年轻的。从平均年龄来说我们已经超过八岁以上,到底是八岁九岁还是十岁我们不知道,估计差不多就是这个级别。我们和他们比的时候,我们不说把自己说成一个老年人团队,我们说我们是一个经验丰富的团队。而且我们是要往这个方向去的。

假设我们和H有合作的竞争,我们和W有合作的竞争,这种竞争就是我们要和他们的做法要不一样的。就是说我们不再和他们拼低成本。中国已经不是低成本了,上海已经不是低成本了。上海、北京已经不是低成本地方了。就是说,上海和北京能开公司的,就是有一定实力才能开得出来的。你看看上海的房价,对吧?各种成本。而且中央政府和上海政府把上海定义成金融方面发展的,亚洲金融中心。金融中心就是玩钱的,玩钱必然成本高。我们已经不是低成本的国家了,也不是低成本的site了。我记得刚开始我们和法国人做,他们说我们的成本是法国人的五分之一,六分之一。那现在我们是法国人成本的二分之一,到二分之一这种差别呢在成本上面很多时候会忽略掉,就是说很多时候做决策的时候我不再以成本作为一个很好的参考点。往往现在W的成本是我们的二分之一。他们的人力成本是极具优势的。所以说我们还听到说W的团队还在增长,这很正常的,因为他们还在吃人口红利。中国的红利在过去的二十年吃完了。

上海北京成为高成本的城市,同时呢刚才说从年龄结构来说我们又比他们年长。所以我们的路和他们走的路是不一样的。年轻团队,我指的是平均,他们年轻团队是可以犯错误,因为他们犯错误是可以用时间来解决。那对于我们年长团队和经验比较丰富的团队来说,我们要走的那条路是尽量避免犯错误,一次做对。我们不能去跟他们走一样的路。他们可以犯错误然后用加班十六个小时来解决这个问题。我们不能走这条路。我们要做的是让自己成为一个稳定的团队。

这个“稳定”指的是我们deliver出去的feature质量是非常高的,然后我们在处理项目的时候是很少犯错误甚至是不犯错误的。这样呢我们从单位时间工作效率来说我们要做得极高。有时候谈效率的时候别忘了是一种“伪效率”。什么叫伪效率呢?你一天工作十六个小时出来的一些东西和一天八小时出来的东西是不一样的。这个时候你如果论天谈效率这是不对的。因为有的团队他可以长时间地一天干十几个小时,我指的是平均。但是我们不是这种情况。对于我们来说,我们后面走的那条路是让自己成为一个技术能力稳定,deliver效率稳定。所以我们做事情的时候要以稳定、稳健输出的一个模式去做。这里面大家要正确理解哦,稳定不是慢。

稳定不是慢,而是说一次做对。这非常关键,这跟以前的时候那个项目理念是一样的。就是说一次做对,即便稍微做得慢,效率是最高的。这个就扯得远一点了,这和我们年龄结构也有点关系。我们都有孩子上小学了,也有上初中的。你做作业做错了,第二天订正还是要花很多时间。一次做对嘛,时间全省了嘛,一个道理。我不是说不许大家犯错误,而是说尽量的少犯错误。这样稳定的输出叫我们效率都很高。这个效率和输出不是建立在时间,不能建立在时间,比如我投多少时间进去,而是说我不犯错误,或者少犯错误,让我们的输出是非常稳定的,输出效率非常高。

我希望,这是对我们很高的要求。我们平时的持续的集成,deliver的时候,非常的认真仔细,符合流程,每个checkpoint,我们进一步完善DOD的过程。这是一连串的动作,稳定高效的输出是一连串的动作,稳定不是慢哦,稳定最终的结果是快。

我们要在这个环境里面,生存也好,竞争也好,发展得更好也好,我们要跟别人走的路是不一样的。我们的参考团队是德国。德国这个研发中心,当然我们还没有老到他们的程度,他们好像平均五十多了。但是这个是他们已经走过了一条路嘛,我们去看他们,他们的表现。德国人,其实,每次你跟他说快快快,他会快吗?不快的。但是他给你一个是一个,给你一个是一个。就是往这个方向去。我可能在commit的时候我不会非常激进,但是我一旦commit我很好的做到,质量非常高,效率非常高。我不是说用我先说行,然后用大量的加班去做到,不是,不是这条路。我们走的不是这条路,我们要往德国那一套发展。我们的能力是要持续提升的,每个人。技术能力,管理能力,各方面,团队沟通。然后呢,我们的输出是很稳定的。

我们有时候有些bug什么,哎呀,这个地方不小心。这个要避免。有些是技术能力,或是太复杂,有些scenario我想不到,这有的,很正常。因为现场太复杂了,我在设计的时候就是想不到的。我只有出去吃了亏,回来,哦,知道了,这地方要补一个。那这种呢叫持续学习。另一个呢,这个地方少写一个,哎呀,我失误了,这种是要避免掉的。这种在我们的工作中还是有的,不是很多,还是有的。我们要去避免这种失误或者错误。比如说不小心引起的,不在意引起的,这个呢,你说大了跟职业化有关,跟态度有关,但是这里边太复杂了我们不去说了。我们给出去的deliver,不管是feature还是bugfix的deliver,是稳定的,而且是高效的。尽量少犯错误,甚至不犯错误。这是我们要走的一条路,而且呢,我们自己个人能力团队能力要持续提升。我们要合理的安排自己的工作时间,我们要通过学习,互相学习,各种sharing,lesson learned,各种模式让自己团队不断提升,这是符合我们团队特性的一条路。

结合城市成本,结合年龄特征,稳定输出,是我们要走的一条路。