VimConf 2018

11/24 不但是台灣的大日子,日本還舉辦了 2018 年度的 VimConf,這次比較特別的是 Vim 的作者 Bram Moolenaar 也有去講 Keynote,我雖然今年依然無法去參與,但是 Twitter 上已經可以挖到不少東西了,其中有官方的投影片收集,我想在這介紹其中三個分享,第一個是Effective Modern Vim scripting,這篇主要是做一點 Vim script 入門,另外還介紹了 Vim 8 開始的 synchronous/asynchronous process 機制的程式要怎麼寫,有興趣寫 Vim8 asynchronous script 的人可以參考一下,要找整理好的範例其實不是很好找。

第二個想介紹的是 mattn 的What is the next feature?這段分享主要是在介紹vim-jp社群,也是 VimConf 的主辦社群,這個社群還蠻活躍的,而和一般的社群比較不一樣的地方是他不只是使用者社群,也是個開發者社群,有在協助幫忙日本想貢獻 Vim 的人,包括像是資源整合、避免重工、協助轉發 bug report 和 patch,還有翻譯文件和一些文件撰寫等,接著就介紹了一些 vim-jp 貢獻的東西,像是 color emoji、lambda 之類的

最後一個就是 Bram 的From hjkl To a plaform of plugins,介紹了 Vim 的一些發展史,主要是 plugin 相關的,也提到 Vim scripts performance 的問題(有個建議是換台更快的電腦),最後一段還提到一些未來可能的新功能,其中兩個我很有興趣,第一個是 Bram 打算處理 Plugin dependency 的問題了,投影片中有一些目前可能的解決方法,,當然看起來都是走 Vim8 的 package 機制。另外一個則是 text properties,就是可以給一段文字 meta data,這個功能我非常的感興趣,因為這可以用來改善現在的 syntax highlight 機制,理想上,我可以非同步的把程式碼丟給外部的 JS parser tokenize,然後利用結果來加上 text properties,syntax highlight 再根據這個資訊來決定用那個 Highlight Group,這可以解決我的yajs一直無法解決的 arrow function 的判斷難題,不過還沒預計何時會出來,只能慢慢等了。


Chrome 10 週年

Chrome 10 Years

Chrome 10 週年 Google 真的是很精心的規劃要幫它慶祝啊,我猜大概是找了個很有狼性的 PM 來,最近一下就被發現兩個問題,第一個小一點點,就是 Clear browser data 的地方,全部清除的功能不會幫你清除 Google 的資料喔:

第二個問題比較大一點,灣區日報看到的Why I'm done with Chrome,問題就是 Chrome 69 開始,登入網頁版的 Google 服務會自動把 Chrome 瀏覽器端的 Google 帳號也登入,然後根據 Google 工程師所說,這樣還不會觸發同步備份密碼和 autofill 等隱私資料(包括密碼、信用卡資料),不過在這狀態下你很可能不小心就觸發了,由於這個機制官方沒說過,介面上也沒明顯提示,就只有大頭那邊的頭像會變,幾乎都會被使用者忽略,而會不會自動備份隱私資料只是一部份,比較嚴重的點還是這個行為是破壞使用者的信任,事情鬧出來之後 Google 有官方回應說下一版會有修改讓使用者可以關閉(不過預設還是開啟啦~~),登入後的介面也有相對應的修改讓狀態更清楚,另外就是刪除所有 Cookie 不會保留 Google 的了,以上這些修改都要等十月中的 Chrome 70。

最後就是,隨著這次事件才注意到有ungoogled-chromium這個專案啊。


保護專注力

SONY WH-1000XM3

前陣子 Ash Wu 寫了篇如何在 Context Switch 間維持自己的生產力,講他這陣子的經驗,所以我也來分享我這陣子的經驗,不過不是 Context Switch,而是底層工程師如何保護自己的專注力。

之前在開放式辦公室工作,雖然我已經面對牆壁了,還是覺得很容易受到干擾,不論是環境還是工作模式造成的都有,所以我逐步做了一些調整來減少心流被打斷的機會,首先,硬體設備最常見的就是抗噪耳機了,之前是買 SONY 的 WH-1000XM2,最近剛上市 Mark 3 也更新過去了,抗噪耳機一開始會有點不習慣,像是本來打鍵盤的聲音都聽不到了之類的,不過不用很久就會習慣了,這筆開銷是比較大,不過要是花的起的話,我建議直接買三代,舒適度比較好,二代我戴久耳朵還是會不舒服;除了聲音設備外,螢幕弄大一點把視野佔滿也是個不錯的方式,前陣子網路上不少人都買了 40 吋的大螢幕來用的樣子,我自己是只有用到 27 吋的,其實遮蔽效果也沒比 24 吋的好很多就是。

第二個是我現在工作時的電腦不登入 SNS 了,包括 Facebook 和 Twitter,所以我不會查資料或是看 Email 的時候發現有小紅點就順手點過去看,其實一開始是因為在用 Toggl 追蹤時間,注意到去看 SNS 會造成時間計算不準確,所以乾脆都不登入了,也是沒很久就習慣了,當專心時,其實完全不會注意到有 SNS 等著我去看。

第三個是我會把能關的提示音都關掉,不過這是因為我耳機音樂的訊源就是工作用的電腦,所以電腦的 IM、收信軟體的提示音都會過去,如果耳機可以弄獨立音源給它其實也沒這問題,這時候就有點懷念 iPod 了;如果提示音都關了,還會被 Dock 上的紅色數字或是訊息通知窗干擾,那我還會更進一步把 IM 的程式都關掉,即使那是工作用的 IM 我也是會不客氣的關掉,可能過兩個小時後你會發現其實你不在線上也沒關係的,真的很要緊的事,其它同事會透過各種方式找到你的(然後你還會發現有時候其實被這樣聯絡也不是很要緊的事)。

除了電腦提示外,手機我也會關到完全靜音,完全靜音是指連震動都沒有,所以如果有來電的話就只有螢幕會亮而已,也因此我常常沒接到推銷電話,其實平常會打電話給我的人很少,大部分都是我事前會知道的。

以上的部分主要在於減少干擾,其實還有一些其它工作方式的細節可以幫助,不過還沒有太多想法整理出來,所以這次就先不提了。最後補充一下,Ash 也有提到的workflowy(這是我的推薦連結)我也覺得很不錯,大概是遇到這個服務之前,有認真考慮過自己做一個這種東西自用,不過後來發現這個服務之後就再也沒想過這回事了。


Homebrew rollback to MySQL 5.7

最近 Mac 的 homebrew 預設的 MySQL 已經改到 8,然後產生了些相容性問題,像是 GUI 不支援之類的,所以提供一下方法回到 5.7

brew uninstall mysql
brew install mysql@5.7
brew link --force mysql@5.7

然後清空舊資料重建新的

rm -rf /usr/local/var/mysql/
mysqld --initialize

其中第二個步驟會產生新的 root 密碼,先複製下來,啟動服務並修改密碼:

brew services start mysql@5.7
mysqladmin -u root -p password

照指令操作,應該是先填前一步產生的密碼,然後輸入新密碼、再次輸入新密碼,這樣就 ok 了,剩下就是找個 GUI 或是匯入資料之類的。

參考資料:


Intrinsic Size 媒體寬高比

HTML 文件在編寫插入<img>時,通常都會順便加上寬高的資訊,早期這樣做除了指定圖片呈現時的大小外,還有一個好處是提升頁面繪製的速度,不用在圖片讀取好、知道實際寬高時,又重新排版重畫版面,不過這個狀況在用 CSS 設定動態寬度時,就又回到原點了,像是設定width: 100%;這種,因為沒辦法設定相對於圖片寬度的高度值,所以瀏覽器只能自己先隨便決定一個高度,等圖片抓好再重排一次。

一直以來這問題都沒好的方案處理,在排版上比較多人採用的是外面多一層 block 元素然後用padding-top來把空間先佔好,不過這也只算是個替代方案,真的要處理應該還是要從 HTML 或是 CSS 下手,然後前兩天才終於看到有個不錯的方案 Chrome 要來實做了,叫做Intrinsic Size

<img intrinsicsize="250 x 200" src="cat.jpg">

就是一個長乘寬的概念,中間那個乘號其實是小寫的x,然後提供的長寬資訊其實是等於預先給的 naturalWidth、naturalHeight,為什麼不用 aspect ratio 呢?在提案的文件裡面其實都有寫到,基本上就是這種設計提供的資訊更多,有更多好處,例如都沒設定寬高時,可以拿intrinsicsize來先用之類的,intrinsicsize目前設計只能用在圖片和影片上,Chrome預計在 71 的時候推出這個功能,也已經做好有貓測試網頁了,感覺一切都箭在弦上了,不過這新提案在 WICG 上幾乎沒討論,提案者是 WICG 也是 Chromium 成員就是,另外就是另外三家的 web platform status 都還查不到,並且,其實也有一個 CSS 的aspect-ratio提案,所以到底會怎樣還很難說啊(不過我覺得是會變標準啦)。


➡ 看看其它文章