2019年總結

序言

9102年都已通過去好幾天了,如今纔來產出年終總結。html

我的項目

cuckoo——定時提醒工具

18年的總結中,我提到本身開發了一個名爲cuckoo的工具,用來代替macOS的提醒事項、日曆,以及由crontab調用的shell腳本。這個目標在19年得以實現,cuckoo已經徹底取代了它們。git

cuckoo實現瞭如下功能:github

  1. 建立一次性和週期性的提醒。cuckoo甚至能夠在正確的二月最後一天彈出提醒——不論是平年仍是閏年;
  2. 利用alertercuckoo能夠在提醒彈出後推遲它(5分鐘、10分鐘),或推遲到指定的時刻;
  3. 利用Server醬cuckoo能夠把提醒以微信消息推給手機;
  4. 利用ControlPlane,實現按場景提醒——好比10點鐘若在公司就提醒本身開晨會,若在家則毫不彈出。

我還提供了給Emacs用的minor mode和Alfred Workflow,以提升易用性:shell

  1. 在Emacs的org-mode中啓用這個minor mode後,只須要按下C-c r即可爲光標所在的條目建立提醒;
  2. 一個條目切換至DONECANCELLED狀態時,也會自動更改cuckoo中任務的狀態(感興趣的讀者能夠移步以前的文章);
  3. Alfred Workflow便於建立一次性提醒——好比提醒本身在25分鐘後打開支付寶的螞蟻莊園看看有沒有雞賊。

wa——Alfred Workflow腳本

在18年入手MBP後不久,我便入手了Alfred,併購買了Powerpack。平均天天使用Alfred 110次,大可能是Snippets(auto expansion真香)、Clipboard(臨時存儲文字和圖片的絕佳位置)、Workflow。經常使用的Workflow都是我本身開發的:數據庫

  1. unit用於快速輸入不一樣時間長度的秒數的,例如輸入6天的秒數6 * 24 * 60 * 60 * 1000
  2. upload用於上傳圖片到GitHub,把GitHub當圖牀用(感興趣的讀者能夠移步這篇文章);
  3. gt用於獲取指定日期的UNIX時間戳、int用於獲取一些預設的時間戳(例如「昨天0點」);
  4. yl用於精確設定macOS的音量;
  5. bqb用於鬥圖(感興趣的讀者能夠移步這裏)。

這些腳本都收集在名爲wa的私有倉庫中。因爲需求比較穩定,這個倉庫的迭代很少。npm

jjcc——將LISP語言編譯爲x64彙編

不害臊地說,jjcc是一個用Common Lisp寫就的編譯器,運行在SLIME中,若是投餵它某種LISP方言代碼,就能夠編譯出跑在macOS上的x64彙編代碼。這是個人第一款生成彙編指令的編譯器,爲此還惡補了很多彙編語言知識,尤爲是x64的calling convention。這款編譯器的開發過程寫成了文章發表在博客和知乎上,感興趣的讀者能夠移步這個專欄json

在完成了蹩腳的自定義函數特性後,我讀了《An Incremental Approach to Compiler Construction》這篇論文,它按部就班地開發一個Scheme語言到x86彙編的編譯器,而且階段劃分得更好,後來我也按照論文的思路從新實現了一遍。後端

savemoney——未完待續的RescueTime代替品

19年10月份時RescueTime Premium到期,因爲太雞肋了便再也不續費。我仍然有time-tracking的需求,因而打算本身動手寫一個代替品。皇天不負有心人,我找到了active-win這個庫,它能夠獲取當前有焦點的窗口的元信息。基於這個庫我寫了兩個腳本:數組

  1. savemoney.js,每隔一秒調用active-win獲取當前激活窗口的元信息,而後寫入到Redis中;
  2. accounting.js,不停地從Redis中取出數據,運算後寫入到MySQL中。

目前僅僅是將數據記錄在了MySQL中,沒有作報表和統計。這兩個腳本經過Launchd在每次登陸後自動運行。微信

寫做

19年在GitHub博客一共發表了28篇博文,數量差強人意,質量亟待提升。在讀了利用金字塔原理寫出好文章後,我逐漸改進本身的寫做方法,以期寫得更有條理。

除了GitHub博客和SegmentFault,我還在知乎上發表了一些文章,大可能是關於jjcc編譯器的。剛纔我說文章的質量亟待提升,若是你看過jjcc編譯器系列的文章的話,必定會很贊成個人觀點。

博客和SegmentFault的受衆很小,因而我又開通了微信訂閱號,但願能夠在技術圈子裏更多的展現本身——有沒有值得展現的內容另說。在訂閱號上發表文章多了一種無形的壓力,畢竟這些內容更容易被同窗、同事、同行看到(前提是人家樂意看)。萬一寫的很糟糕,可就糗大了。目前訂閱號關注者寥寥,有興趣的能夠微信搜索「小打小鬧寫點bug」關注。

學習、進修

19年讀完的書很少:

  1. 《MongoDB in Action》,沒什麼太大的收穫;
  2. 《High Performance MySQL》,看事後確實有些幫助,切實根據書中的指導調優過生產環境的MySQL;
  3. 《Algorithms》,光看沒練手;
  4. 《Linux Shell Scripting Cookbook》,看着看着幡然醒悟這東西只要用到的時候查閱就足夠了,遂棄之。

還有許多在讀經典書籍,如《Clean Architecture》、《重構》。剛開始我會在上下班搭地鐵時讀這些書,後來將看書時間固定在了天天下午一點至一點半。這些在讀的書像一條隊列,我天天會讀隊頭的書,而後放到隊尾。這樣一來,天天都在涉獵不一樣領域的內容。

在18年9月,我閉門造車地整理了一份Web後端軟件工程師的技能樹,再據此來尋找要讀的書。例如,上述的《MongoDB in Action》是依據「後端知識/文檔數據庫/MongoDB」找的,《Linux Shell Scripting Cookbook》是依據「後端知識/命令行操做」找的。技能樹整理得好很差暫且按下不表,但漸漸地我忘記了看書的初衷,成了「爲看而看」。看似天天中午都在學習,實際上因爲目的性不強,收穫不大。因爲天天讀不一樣類型的書,同一個主題的學習過程也變得支離破碎。這個學習方法已經到了迫切須要優化的地步。

macOS更新換代——AppleScript來襲、Chrome上位

19年10月升級到macOS Catalina,而後問題便接踵而至。首當其衝的是alerterterminal-notifier無法用了,沒法在右上角彈出提醒。一番折騰後不見轉機,只好先用AppleScript代替,讓cuckoo能夠彈出提醒。AppleScript的display notification功能遠不及alerter那麼豐富,聊勝於無吧。

Firefox也開始鬧彆扭。只要打開Firefox稍微用兩下,就會有一個名爲FirefoxWebCP Extension的進程瘋狂地使用CPU,Firefox內的各標籤頁也紛紛失靈轉圈,幾天下來都是如此。沒辦法,只好起用Chrome。稍微磨合後發現Chrome其實挺不錯,各方面都今非昔比。之前之因此一直堅守在Firefox的陣營,主要是由於:

  1. Firefox的Pocket插件更好用——早年間不須要打開Pocket的網站便可查看本身的列表,不過自從Firefox集成Pocket後,這個優點已經蕩然無存;
  2. Firefox的Vimperator更好用——這也同樣,Vimperator逝者已逝,繼承者Vim vixen和Chrome的Vimium大同小異;
  3. Firefox的地址欄搜索瀏覽歷史更好用,這一點迄今未被Chrome超越——Chrome的地址欄要麼搜不到,要麼必須輸入更多關鍵詞,而後仍是搜不到。

但願Mozilla在2020年能夠修復這個問題,讓我重回Firefox的懷抱。

CL虐我千萬遍,我待CL如初見

2019年的Common Lisp依然讓人哀其不幸怒其不爭,我也依然癡迷於這門古怪的語言。但癡迷不能當飯吃,要將CL投入到實際應用實在太難。且不說Quicklisp上庫的數量遠不及PyPI和NPM,質量也使人抓狂。這不,都9102年了,訪問一個返回JSON數據的HTTP接口,還得先用drakma發出請求(也許不支持HTTP/2),再用flexi-streams將字節數組轉換爲UTF-8編碼的字符串,再用cl-json解析一番。拿到一個列表對象後,再用carcdrassoc一頓操做猛如虎,才能拿到須要的數據。

2020年,MAKE CL GREAT AGAIN!

記帳

在年中的時候,萌生了換記帳軟件的想法,由於挖財用起來愈來愈不爽了,並且成天記流水帳也沒什麼收穫。一番摸索後,我決定嘗試一下複式記帳法,並選擇了GNU Cash——早年間用過一次,但沒看入門手冊就開始用,根本玩不轉。這一次卻是讀了手冊,但GNU Cash的UI和操做方式仍是沒法讓我心動;以後知道了beancount,卻沒法在個人系統中順利運行;最終我選擇了ledger,它是一個命令行程序,不負責記錄,只負責讀取手打顯誠意的交易明細,而後產出報表。Emacs有一個ledger-mode插件,二者配合用來記帳超痛快。

結尾

在2020年我但願至少能完成:

  1. 發佈cuckoo
  2. 發佈wa
  3. 開發一個alerter的代替品;
  4. 寫更多的博文,讓微信訂閱號的粉絲漲到130;
  5. 給CL寫一些庫解決一些常見的需求

最後

閱讀原文

相關文章
相關標籤/搜索