Hello World
CodeTengu Weekly 碼天狗週刊
如果命運的齒輪沒有出差錯,CodeTengu Weekly 都會在 UTC+8 時區的每個禮拜一 AM 10:00 出刊。每週會由三位 curator 負責當期的內容,每個 curator 有各自擅長的領域,如果你在這一期沒有看到感興趣的東西,可能下一期就有了。當然你也可以瀏覽一下前幾期的內容。或是關注我們的 Facebook、Twitter、GitHub。有任何建議也歡迎來 Gitter 聊聊。
目前的 curator 陣容:
- @vinta - I failed the Turing Test - 科幻迷,最近在讀 Blindsight
- @saiday - Imnotyourson - 有什麼意見進來 Runtime 講啊
- @tzangms - Oceanic / 人生海海 - 最近真的都在玩薩爾達
- @fukuball - ImFukuball - 有新工作了,但歡迎直接挖角
- @mingderwang - Ethereum enthusiast,最近在研究區塊鏈遊戲
- @kako0507 - 熱愛嘗試新事物的前端工程師
- @chiahsien - 我們公司在徵人
- @uranusjr - Smaller Things - Pinkoi 少了個棒球記者現在去應徵前端應該有機會
- @kkdai - 態度萬歲 - Learning Deeply....
- @yhsiang - AMIS / MAICOIN 徵才中,歡迎聯繫!
- @johnlinvc - 挑戰自動化家中電器
- @drumrick - 歡迎加入台灣 Kaggle 交流區
- @wancw
- @allanlei
- @theJian
- @lucienlee - 🦌
彷彿致力於解決開發者之間的資訊不對稱
@uranusjr
Wkhtmltopdf Considered Harmful
wkhtmltopdf 是一個頗有名氣的小工具,主要用途是把一個 HTML 檔轉成 PDF;它有一個姊妹 wkhtmltoimage 是轉成影像,有時候兩者也被合稱 wkhtmltox。如名稱所示,這個工具的基礎技術是基於 WebKit——實際上是 Qt 的 WebKit 函式庫 QtWebKit,以 headless 方式渲染 HTML 後,再轉換成目標格式。
這個工具很簡單易用,所以在很多專案都被用上,我自己也在工作上用它處理 PDF 輸出。但是這篇文章指出它的幾個問題,並建議用 WeasyPrint 取代。主要的重點是:
- 難以編譯。Qt 與 WebKit 兩者都是很肥的函式庫。官方有釋出 binary,但是基於很舊的版本。
- 效能不好。QtWebKit 本質上還是用來做 web view 的,達成 headless 的方式其實是 off-screen rendering,浪費不少資源。
- 功能不齊、字體支援很差。這個有用過的大概都知道,想知道詳細就看原文吧。
文中沒提到,但是還有另一個問題也困擾我很久:授權。Qt 是 GPL/LGPL 雙授權,所以如果你不是把它當成 standalone binary 使用,你的程式在授權上就很受限。當然 LGPL 可以用 dynamic linking 避開,但是這又回到 Qt 和 WebKit 都非常大一包,而且 wkhtmltox 有對 Qt 打 patch(印象中是為了支援 header footer),所以即使你的程式本來就用了 Qt,也要另外帶一包給它。這真的很不行。
WeasyPrint 本身是 BSD 授權,所以很多問題都直接不見了。如果你有預算,原文也提到了其他的商業選擇;我一個都沒用過,不過應該不錯吧。另外如果你的環境保證有 Google Chrome,或許 Headless Chrome 也是個好選擇。另外別忘了 macOS 也可以使用內建的 WebKit binding。
CLI: improved
這篇文章列出了一些「現代」的 CLI 工具,用來取代大家熟悉的選擇。引用 Ubuntu 宣布把 ifconfig
從預設安裝拿掉時的文章副標:
世界在演進
你熟悉的工具們仍然能夠做好他們該做的事情,但是如果能把握一些新的技術發展,在比較特定的狀況下,肯定更能事半功倍。
對了,這裡面有很多工具是使用 Rust 和 Go,感覺這類替代工具很常都有這個傾向。這些語言相比 C 與 C++ 等等傳統的系統語言,有更完善的標準函式庫與現代的編譯器支援(例如 LLVM),所以還有個附加好處是跨平台更方便,而不會像 POSIX 家族那樣難以移植,不同平台還可能有微妙的差異還分 GNU 和 BSD 系什麼的。最近因為常用 Windows,也在研究用 Rust 移植一些簡單指令(touch
之類的),感覺這很有搞頭啊。
Where Vim Came From
從 Ken Thompson 為 Unix 寫的行編輯器 ed
開始,解釋為什麼 Vim 會長成現在這樣——為什麼拷貝叫 yanking?那個 command mode 到底是怎麼回事?為什麼切換模式要用遙遠的 ESC?這一切都有理由。我對這種講古文毫無抵抗力。
其實這類講古聽多了,大部分好像也都是走同一個套路:Thompson/Richie/Joy/etc. 覺得某個東西很讚,想在自己的系統上也用,所以就抄了一個;之後這東西慢慢長手長腳,就成了我們現在看到的樣子。真美好。
這類故事給我最大的啟發是,當你發現自己在抱怨某樣東西怎麼這麼難用時,首先要做的其實是把自己放到作者的角度,思考他當初設計的理由。Stallman 為什麼會把 Emacs 快捷鍵弄得一堆 C-x 讓大家小指殘廢——因為它最初的實作機器是把 CTRL 放在現在 WIN/CMD 的位置啊!作者並不是白痴,只是考量的需求和你不同罷了。
軟體作者不會永遠正確,但是他們背後都有各自的理由。不要隨便假設只有你自己看得到真相,其他人都是笨蛋;在絕大多數狀況中,你的自信源於自己的無知。共勉。
另外,你知道 Vim 幾乎只靠一個人(Bram Moolenaar)寫出來,而且他獨自維護這個軟體超過 30 年,還堅持不斷更新嗎?這真是太驚人了。如果你有用 Vim,是不是該支持他一下。一個人 10 歐元,拿得出來吧?
@allanlei
Testing in Production
Testing in production is not always a bad thing, though it should probably never be the only testing. It offers scenarios where its difficult to replicate in a non-production environment. In the end, the test environment is a trade-off between confidence, reality and risk.
Feature Flags
Feature flags are great at controlling the release of features for purpose of canaries, AB testing, etc. Though conceptually very simple (essentially just a if/else), it is a very powerful tool for products.
Wireguard
Built to be faster, simpler, leaner, and more useful compared to some other popular solutions like IPSec and OpenVPN. It has also received some high praise from Linus Torvalds "it's a work of art".
Redis Extreme
Redis (X) Streams will be available in 5.0. Similar to Kafka, it is a append only log like structure with support for consumer groups. While it probably will not draw users away from Kakfa, it offers a low operation overhead to get a pubsub like service up and running.
@theJian
Why Flutter Uses Dart
在寻找 React Native 替代品的你可能已经把目光转向了 Flutter. 对于一个跨端 UI 框架, Flutter 却选择了一门在 mobile 开发者或者 Web 开发者中都不流行的语言 Dart. 撇开 Dart 本身有利于客户端开发的特性, 对于很多开发者来说, 也许如何和现有的生态更好的集成是更多人关心的问题.
Progressive enhancement with CSS Grid
在考虑使用新的 CSS 特性的时候, 很大一个不使用的原因就是浏览器兼容性. 为了使用新特性而对历史代码进行大规模的重写的代价实在太大了! 对于这个问题, 你现在可以使用 feature query 来解决, 仅在支持的浏览器上使用新的特性. 而对于老旧的浏览器, 回退到之前的代码.
An OAuth 2.0 introduction for beginners
解释 OAuth 2.0 的工作原理以及各种认证流程下的实现.
This RSS feed is published on https://weekly.codetengu.com/. You can also subscribe via email.