2018年度技术总结

35次阅读

共计 4165 个字符,预计需要花费 11 分钟才能阅读完成。

转眼间 2018 年只剩下最后的几天了,赶紧趁热写篇年度总结,毕竟据说元旦会变冷。
入手 Mac
参加工作的第五个年头,终于买了一台自己的 MacBook Pro。其实我从高中时起,就对 Mac 有一种憧憬。那时候每到周末,就常常往苹果的实体店跑,就为了去看看那些精致的笔记本,试着在触控板上滑动一下手指,点开几个自己只在苹果官网上看过 icon 的陌生应用。
依稀记得下决心买这台电脑的那天晚上,回到家掏出之前的联○笔记本,发现转动显示屏盖子的地方坏掉了,导致笔记本的盖子翻不起来。在家里要接一个外置的显示器来用实在是太麻烦了,立即就萌生了买一台新的来应急的想法。再三思索后,决定尝试一下 Mac,便立即在官网下单了。令人哭笑不得的是,明明是要应急用的,结果还是过了三天才到手。庆幸的是,在公司是用外置显示器来办公的。
用上 Mac 之后有挺多的感触,有兴趣的读者可以移步这里阅读,这里就不再赘述了。令我自己也感到惊讶的,是我在用了 Mac 之后还购买了几款软件——我并不是一个很舍得花钱买软件的人,多数情况下,都是用一些免费的开源软件的。在 Mac 上买的这几款软件,大概是因为它们真的挺好用吧。最早入手的是 Alfred,买了它的 Powerpack。后来买了 BetterTouchTool,自定义了很多 touchbar 上的按钮,用得挺欢的

再后来,遇到了堪称神器的 Contexts,现在在 macOS 中切换窗口就像是牛奶巧克力那般的丝滑。最近买的,则是 Bartender,是在淘宝上的数码荔枝那里买的,趁着双十一的时候有折扣赶紧入了手。它们都很实用,使用频率也非常地高。当然了,像 [Default Folder X]() 虽然也非常好用,但因为它可以无限期地免费使用(只是会偶尔弹个窗提醒购买),所以我就没有急着花钱了。一些比较有意思的应用,比如 Little Snitch,虽然很酷炫(看着世界地图上的各种连线),但对我而言用处不大,最后也就卸载了。
写博客
越是写博客就越发现,博客的力量是有限的,除非超越博客。我不做程序员啦 JOJO 比起写给自己查阅的笔记,写公开发表的文章是大不同的。笔记可以写得像铜墙铁壁那么规整,可以一层一层地嵌进去。但是发表在博客上的文章就像代码,是写给自己之外的人看的,要讲究阅读体验。偶尔要用段子活跃一下气氛给读者提提神,字里行间也要注意正确地使用行话。尤其是写一些教程一般的文章时,要循序渐进地讲述自己的操作过程,还要战战兢兢地担心别人无法复现自己的结果(人类的本质是复读机)。
重新开始写作后才发现,简书上的最后文章已经是 2017 年七月份的了。重开的博客,打算继续发表在 GitHub Pages 上。本来 GitHub Pages 上的博客的页面,是我用自己写的一个工具来生成的。结果这个半成品在 Mac 上因为 cl-mysql 安装失败跑不起来,我也一时不想折腾,于是决定换个成熟的工具来用。目前用的是 Hexo。一个惊喜是,Hexo 默认支持 Google Analytics——尽管并没有多少人会去看我的博客。
除了 GitHub Pages 之外,我也把文章发表到了 SegmentFault 的专栏上。感谢 SegmentFault 极其不友好的插入图片的方式,迫使我写了一个 Alfred 的 Workflow,用来快速地把截图的图片上传到 GitHub 的一个仓库里(拿 GitHub 的仓库当图床)。现在的写作流程,是在电脑上用 Typora 先写好,然后 hexo new 一下生成源文件,把写好的内容粘贴进去,再发布,最后把文章内容再到 SegmentFault 上创建篇新文章再贴一次,发表出去。
布谷,布谷
以前用(坏掉现在又修好了的)联○笔记本的时候,我用 Windows 10 自带的 Alarm 设置了很多提醒——叫外卖的、喝水的,以及起来走走的(久坐是不好的哟),大量的定时提醒让我有一种生活井井有条的感觉——写作感觉读作错觉。Mac 在这方面可以做得更好,因为它自带 crontab。于是我便用 crontab 和 alerter(刚开始的时候用的是 terminal-notifier)给自己设定了不少定时提醒。等到 crontab - l 的输出开始泛滥后,便萌生了自己写一个管理工具的想法。
一开始还在 Boostnote 上煞有介事地写了一篇需求文档和设计文档(已经都是废稿了),想着用 Common Lisp 来开发。但同样因为 cl-mysql 安装不成功,我又不希望把时间都花在了折腾环境上,便改用了 Node.js 来编写这个管理工具。框架选择了 egg-js,在操作 MySQL 和 Redis 方面都有相应的插件,此外还内置支持定时任务,上手很方便——真要是用 Common Lisp 的话,也许还在纠结某个功能是用某个半残的第三方库还是自己费劲从零写起。
用 Redis 的 ZADD、ZRANGEBYSCORE、ZREM,以及 ZSCORE 指令做了一个简陋但够用的消息队列——用 Z * 系列的指令是为了可以模拟出延时消息的效果(beanstalkd 和阿里云 MNS 都支持这种特性)。配合 egg-js 的定时任务功能,就可以实现定时提醒了——弹出提醒仍然是用 alerter。目前这套系统运作得还不错,大部分原本录入在 crontab 中的定时提醒已经交由它来处理了。尽管还有不少的小问题,不过相信都是可以解决的。
对了,这玩意儿的名字叫做 cuckoo,即布谷鸟。
GTD?
Mac 跟“效率”这个词似乎特别有缘,常常被人换做生产力工具,仿佛一拿起 Mac,便自动屏蔽了外界的干扰。开始用 Mac 的几天后,我便开始把玩 macOS 上各款大名鼎鼎的 TODO list 应用了。关于这个话题之前也写了一篇吐槽文,有兴趣的可以移步这里阅读。世间的 TODO list 应用是真的多,不过可能是我的口味实在是太刁钻了,我竟然没有一款是特别满意的。在把玩的期间最让我产生好感的,要属 My Life Organized,然而这货没有 Mac 版,不然我真的很可能会喜加一。
每过一段时间,我就会想要把自己对 TODO list 类应用的一些想法付诸实践,自己动手开发一个给自己用。不过到目前为止,这些想法仍然处于被封存的状态,被遗忘在了磁盘上哪个角落里的文件中。目前 Emacs 的 org-mode 还算够用,它兼顾了我使用上的凌乱与规整,尤其是当我需要在某个任务下写一些包含代码的笔记或者想法的时候,org-mode 几乎就是所有 TODO list 类应用中的唯一选择了。但工具只是用来管理任务,当夜深人静坐下来,想要自己第二天给安排得明明白白的时候,就会发现,即便有最好的工具(我并不是说 org-mode),也仍然需要方法论来指导这个安排的过程。尤其是,这个过程应当是“object-oriented”的——不是面向对象,而是“目标导向”。如果不事先制定一些目标——不管是像人生规划这般空泛的目标,还是像租一辆共享汽车开车上路这样具体的短期目标,如果缺乏目标,那么很快就会陷入了“随便找一些任务来填充第二天的空闲时间”这样的状态,久而久之 GTD 也就实践不起来了。
规划不等于目标。
Note-taking
无法高亮编程语言代码的 Evernote、OneNote,使用不通用的存储格式的 Boostnote、Quiver,还有收费的为知笔记,都没能够取代 Emacs 的 org-mode 成为我做笔记的工具。org-mode 最弱的地方,就在于使用起来不够随意,不像其它的几款笔记软件那样,截图之后的图片没有办法一键粘贴到.org 文件中去。但恰恰我个人不太喜欢截个图配一段话的笔记形态,所以这个缺点可以视若无睹。我现在的笔记都是 QA 形式,一个一级 headline 就是一个问题,headline 下的文本就是答案,而 org-mode 又支持嵌入代码(虽说 Markdown 也支持),很适合我的习惯

最近我觉得,与记笔记同样重要的,是能够方便并且准确地查找自己的笔记。笔记如果只是记而没有翻阅出来利用,那还不如每次都打开搜索引擎当场查找算了。我打算把笔记的导入到 ElasticSearch 中去,然后依托它的全文搜索功能来查找。感谢 org-mode,是纯文本的存储格式。要写一个工具,把.org 文件中的每个问题和对应的答案组装成一个 JSON 喂给 ElasticSearch 真是太简单了。现在缺的是一个方便的入口,以及一个美观大方的结果显示方式。
不过这个新想法的项目名还没想好
Web 后端的固有结界
年初开始渐渐负责起了面试的工作。为了可以比较系统地面试,便整理了一份 Web 后端工程师需要掌握的知识的清单。目前这份清单还在绝赞完善中——想必这个完善的过程是不会停止下来的,而且目前积累的面试题也不足。
原本还有另一份清单,是自我提升用的指引。但渐渐地我发现要求面试者所具备的知识,和充电用的技能树指引,其实是应当合二为一的,于是乎便诞生了一个叫做 charging 的项目。在其中的一个叫做 knowledge.org 的文件中(又是 org-mode),我以自己的理解自上而下地给 Web 后端的软件工程师所需要的知识做了一下划分,并逐级细分,到了合适的粒度的 headline,便添加这个分类下的相关面试题。除了在这些叶子节点上挂上面试题之外,我还依照这些合适粒度的 headline 给自己安排学习的内容,一般是相关主题的电子书或者 PDF。经过最近一次的梳理后,接下来可能会学习一下 Erlang(都不记得是第几次了),读一下《重构》,以及《Redis 实战》。当然了,这些只是最近一次整理增加的内容,仅仅是完整学习内容的冰山一角 XD
我本来不喜欢听网课的,认为视频和语音方式的教学,接收信息的效率比用眼看的方式要来得低效,毕竟不管是视频还是音频,总是要收完前一段内容才能继续收下一段内容(真香警告)。大约在两周前,买了极○时间的专栏《MySQL 实战 45 讲》,听下来发觉其实还挺有意思,尤其适合在通勤和夜晚慢跑时听,算是 2018 年新增的一种学习方式吧。
后记
尽管有年月日的划分,但日子毕竟是连在一起过的,所以今年未完成的学习安排并不会在 2019 年到来的那一刻戛然而止。Org Agenda 中还有很多标记为 TODO 的条目,Pocket 中还有很多未读的文章,还有很多没看完的 PDF,LeetCode 和 Project Euler 上也还有很多的题目没做。2019 年,想必会是忙碌的一年。
全文完

正文完
 0