Tweets 整理 (2022 Q4)

雖然還沒過完Q4,還是先備份一下,最近 Twitter 裁員裁到好像快倒了。

2022/11

  • 2022-11-23 20:38 這幾天在玩皇家騎士團2:重生,一開始有點複雜,上手後還不錯,回味古早戰棋遊戲。之前也有玩一下三角戰略,但是對話超多好煩一直得跳過….
  • 2022-11-23 00:45 Reading: “Organizing Rails files by meaning ” t.co/uRZwrYVVHj # 我一直覺得 Rails 社群愛用 design patterns 來組織檔案目錄是很奇怪的事情,例如 decorator, service, queries, forms 等等,顯然都是被那篇 “7 Design Patterns to Refactor MVC Components in Rails” 教壞的
  • 2022-11-23 00:15 Reading: 37signals (Basecamp) 的 “Vanilla Rails is plenty” t.co/Xy7PzWGCz7 # 以後有新名詞可用了,就叫 Vanilla Rails 架構: 1. 不區分 application and domain layers,就用 MVC 2. 不搞 services object,就用 POROs。
  • 2022-11-22 23:30 Reading: InfoQ “GitHub 前 CTO:全面微服务是最大的架构错误” t.co/zMyQdVEhBy # 繼續用 Rails Monolith,有多 apps 時再拆出基礎設施 service (例如SSO, payments 等) 即可
  • 2022-11-22 23:20 RT @jasoncwarner: So this is typically what I recommend 1. Be a monolith as long as possible 2. Services start in infra for infra reasons, not app eng typically 3. If breaking out mono, break to large apps, not small services 4. Think that each new app is a virtual wall in your company
  • 2022-11-18 14:08 @ingramchen 嗯,我也經常用簡化版 restful,可惜沒有更好的學名。我寫 API 文件的時候,也不會說這是 REST API ,反正就是個…… Web API
  • 2022-11-18 13:30 @ingramchen 你要這樣用就不要叫做 restful 啊,就叫 Web API 或 HTTP API 就好了。Web API 有很多種設計風格,restful 是其中一種,你不喜歡用這個風格,就不要叫做 restful 麻

2022/10

  • 2022-10-12 18:43 發現博客來對付詐騙的新功能: 在結帳時多一個 checkbox 確認已詳閱並了解以下『反詐騙聲明』,不點不能結帳…

Tweets 整理 (2022 Q3)

2022/9

  • 2022-09-29 20:00 @wildjcrt Cool~ 請允許我補充到我文章內,又多一種作法 XD
  • 2022-09-19 17:29 @smallufo 我買 OWC DisplayLink 轉接器可以用
  • 2022-09-18 21:10 看了本書: 幫助你的老闆幫助你(Help Your Boss Help you) t.co/BqIs6wYWR2

2022/8

  • 2022-08-20 15:47 想不到 HTTP/2 的 Server Push 要被 Chrome 移除了,又一個還沒派上用場就要不見的技術… t.co/rmMEqk82Wk
  • 2022-08-20 12:27 @pjchender 我買1T 24G 喔
  • 2022-08-20 08:40 新入手 MacBook Air M2 非常滿意,效能一極棒又安靜。
  • 2022-08-13 18:07 Xnip t.co/RuINUh5b0v 今天改用這套截圖app還不錯,本來在用的 CleanShot X 用中文輸入法打字有換行問題不好用…. :|
  • 2022-08-06 16:20 看了本書 “你不是在當主管,你在當你自己” t.co/ulzKOZwvBS
  • 2022-08-04 22:25 寫了篇 “Rails 前端架構組合 (2022版)” t.co/Q2a3cSUNc3 分析看看到底之後怎麼升級….
  • 2022-08-04 01:21 記得你是何時加入 Twitter 的嗎?我記得!#我的Twitter週年紀念日 # 15å¹´! t.co/NjFOStsMD5
  • 2022-08-02 19:03 上週末在 COSCUP 講 Rails 的投影片 t.co/Vp1Yab4Lnb 簡單摘要 1. OO用多型取代條件式 2. diss 了 service object 和其他 patterns 3. diss 了… t.co/SfilgcD82d

2022/7

幫助你的老闆幫助你(Help Your Boss Help you) 心得摘要

看了一本很有意思的職場書,這書名取的真好:幫助你的主管幫助你

內容講如何建立員工和主管之間的職業關係(不是友誼關係),由於主管和員工這兩種角色的工作特性不同,那這種上級和下級關係的該如何相處。書中關注的場景是: 在一個有組織層級的公司中,專業有技術的員工和他的直屬主管,並且這個直屬主管還有他自己的主管,有個有指揮鏈的場景。

  1. 你和主管想要的不一樣,有衝突是正常的

你需要理解主管的優先事項,通常會和公司的優先事項更一致。而且級別越高,越貼近公司的需求,尤其會重視是否獲利。因此你和主管之間的任何衝突,你都會預設處於不利的地位。但難道只能 1. 乖乖聽話 或2. 離職 兩種選擇嗎?

閱讀全文〈幫助你的老闆幫助你(Help Your Boss Help you) 心得摘要〉

開立B2B電子發票 (無需加值中心)

Update(2022/9/13): 又買了兩台讀卡機(InfoThink IT-500U 跟 E-books T38)來試試看 Mac (MBA M2),竟然都可以! 果然是 EZ100PU 不行啊。

手開發票好幾年,終於也幫自己公司也弄上電子發票了。真是慚愧,我都已經幫客戶串接電子發票好多年了… XD

對於只開B2B發票,沒有零售的小公司,不需要用第三方的電子發票加值中心(例如ezPay),可以直接用財政部的大平台(電子發票整合服務平台)就可以開立了。

  • 要先有工商憑證
  • 最有用的指導文件是 www.ntbna.gov.tw/multiplehtml/724e140e325f497d82ba12d7509ec6ec 的 “使用web方式開立電子發票so easy 【PDF1】” ,以下是大概的流程:
  1. 填好蓋章電子發票紙本申請書,實體送到你的國稅局收件
  2. 大約等一週,會收到紙本公文說好了
  3. 登入進大平台 www.einvoice.nat.gov.tw/
  4. 每兩個月領一次字軌
  5. 開發票、上傳發票、列印發票等等,雖然 UX 流程不是非常好,不過總比手寫紙本方便多了
  6. 每兩個月上傳沒用到的字軌、匯出電子發票媒體檔給你的事務所報稅

大平台也可以查詢列印人家開給你的電子發票,有時候沒收到發票檔案可以來這裡下載補印。

說到憑證IC卡,我還是得去弄台 windows 才能用晶片讀卡機(EZ100PU)。而且 Mac M1/M2 就算用 parallels 跑 windows 也不行,可能是我沒買對 Mac 支援的讀卡機吧 😐

最近新出的 行動自然人憑證 fido.moi.gov.tw/pt/ 是個好東西,希望能盡快普及啊。這玩意不用插卡,用手機掃QROCDE就行。

你不是在當主管,你在當你自己 讀後心得

這本書透過一個寓言故事,來探討當CEO的動機問題。作者認為有些CEO之所以幹不好CEO,是因為他不是真的喜歡當CEO,因此會逃避一些重要的管理任務,作者特別指出以下五件事情:

  1. 發展領導團隊、管理好主管團隊。這就是同作者另一本書,我之前有寫過的 克服團隊領導的5大障礙 在講的領導團隊
  2. 管理指導下屬,確保屬下的工作方向、可以做出好的計畫,以及要求下屬管理他們的下屬
  3. 直言不諱,不怕當壞人: 要願意得罪下屬,而不是只想當好人,做自己想做的事情
  4. 開好團隊會議,CEO 最重要的工作就是開會。把會議開好開有用,是 CEO 的責任。不好的會議會產生不好的決策。
  5. 經常和員工溝通,不斷地重複傳達重要訊息,例如公司目標、策略、價值和優先事項等等。一個訊息要聽七遍,員工才會覺得你是認真的。

不好的 CEO 會偏好花比較多時間去做自己喜歡做的事情,例如跑去做研發、銷售、行銷、財務等等可以授權給屬下的專業工作。畢竟通常也是因為有某種專長特別優秀,才會升到CEO吧,所以很自然的就想多花時間在原來專長上,而沒有花更多時間在領導和管理公司,造成公司管理的真空。

看到這裡,真是有點被懟到。要多反省多花時間在CEO應該要做的事情上。我喜歡軟體開發,也花不少在寫code。甚至可以說,很多管理任務,對我來說經常都是 “不得不去做” 的時候,才會去做,例如開會和 1-on-1 meeting…

然後作者認為之所以會有這種CEO,是因為錯把升職,當做多年辛苦的獎賞,可以有地位、身份、權利和金錢。而好的動機應該是責任和犧牲,想要為他人服務才對。

不過我覺得,人會當 CEO 有很多原因,不一定是因為升職所以才當 CEO。像我就是不喜歡固定在辦公室朝九晚五上班,喜歡有比較高的自主權所以自己開公司。有人則是家族二代接班。這些場景又該怎麼辦呢? 還是只能時時刻刻提醒自己,當 CEO 不能只做自己喜歡的事情,這些管理工作才是 CEO 更重要的任務。

現實總不會都可以像這本書的主人翁,最後大徹大悟決定不當 CEO 了,只當公司董事和負責行銷部門,請了另一位更適合的CEO來當他的老闆,多開心啊。

Rails 前端打包工具組合 (2022版)

發現 Rails 的前端打包(build)工具已經到了眼花繚亂的地步,文件也沒寫如何搭配,老專案又該何去何從? 我做了一個排列組合分析看看。

會有這麼多情況,主要是因為

  1. Webpacker 被 Rails 官方 deprecated 了,這個與 webpack 深度綁一起的 gem 可能因為維護成本太高,Rails 官方不再維護了,死在 v6.0.0.rc.6。Webpacker 版號大 webpack 一號,webpacker v6 是搭配 webpack v5。webpacker v5 是搭配 webpack v4…
  2. sassc-rails 採用的 LibSass 核心被 Sass 官方 deprecated 了,官方改用 Dart 來實作。我不是 Sass 專長,不了解升級 Dart 版 SaSS 是否要緊,感覺可以拖一拖等有需要升級再處理。

DHH 為了想要避免初學者安裝和了解 Node.js 世界,所以預設提供的是不需要額外裝 Node.js 的 importmap 方案,以及另出一個 dartsass-rails gem 來換成 Dart Sass。

但如果真的要上線,還是得換掉 importmap 改擁抱 Node.js 世界的 jsbundling 方案。

CSS 部分Sass 部分JS 部分要求另外裝Node.js短評
Sprocketssassc-railsSprocketsno傳統 Rails 作法,無法處理 Vue.js/React 編譯需要
Sprocketssassc-railsWebpackeryesRails 6 時代 DHH 建議的方案: css/image 留在 Sprockets,js 改用 webpack。
Webpacker 同左同左yes一度很多人建議把 Sprockets 都拆了換成 Webpacker… 現在又要逃難了
Sprocketssassc-railsimportmapnoDHH 給的新 Rails 7 預設方案
Sprocketssassc-railsjsbundlingyes我目前的推薦方案
Sprocketssassc-rails + sass-embeddedSprocketsno竟然有人 Hack sassc-ruby 改核心用 dart-sass ,看起來可以無痛升級喔
Sprocketssassc-rails + sass-embeddedjsbundlingyes同上類似,如果需要JS編譯
Sprocketsdartsass-railsimportmapnoDHH 給的升級 Dart Sass 過渡方案
Sprocketsdartsass-railsjsbundlingyes同上類似,如果需要JS編譯
Sprocketscssbundling jsbundlingyesDHH 發現這種組合時,可以把 Sprockets 換成精簡後的 Propshaft
Propshaftdartsass-railsjsbundlingyes應該沒人這樣用,dartsass-rails gem 想解決是 Sprockets 搭配 Dart Sass 的場景
Propshaftcssbundlingjsbundlingyes這是 DHH 給的 Rails 前端終極方案: 都外包給 Node.js 編譯打包,最後給 Propshaft 整合進 Rails 即可
Propshaftjsbundlingjsbundlingyes不用 cssbundling,而是透過 jsbundling 的 bundle 工具來處理 css,例如 esbuild 的 sass plugin (感謝 Jerry Lee 分享)
Vite Ruby同左同左yes完全不用 Rails 給的前端方案,全部改用 Vite 處理

以下再個別說明一下

  • Sprockets 是 Rails 歷史最久的打包編譯 CSS/JS 工具,而且最近還有在釋出更新。不過在 Node.js 新世界後,其編譯功能追不上需求了,無法處理 React 和 Vue.js 需要的編譯任務。
  • sassc-rails gem (等同於 sass-rails gem 兩者一樣),是搭配 Sprockets 用的,核心是已被 deprecated 的 LibSass
  • dartsass-rails gem,也是搭配 Sprockets 用的,核心換成 Dart Sass,但根據文件有 Troubleshooting,升級會有一些麻煩要處理
  • sass-embedded,竟然有人 Hack sassc-ruby gem,把裡面的 LibSass 換成 Dart 版本…. 看起來完全無痛升級,比用 dartsass-rails 還簡單
  • Importmap 是 Rails 直接利用瀏覽器的 JavaScript modules 功能,因此就不需要處理 JS 編譯了。不過因為瀏覽器支援還不好關係,應該還不能真的拿來上 Production 使用,也查到 ES Module Shims polyfill 可以試試看。
  • cssbundling-rails 和 jsbundling-rails 都是把編譯打包任務,全都交給 Node.js 世界處理,最後丟出一個 build 好的檔案給 Asset Pipeline (Sprockets或Propshaft) 整合進 Rails。
  • Propshaft 是個陽春精簡版的 Sprockets,沒有編譯和打包 css/js 的功能,只剩下最基本和 Rails 整合的任務。因為編譯和打包都透過 cssbundling-rails 和 jsbundling-rails 處理完了。

我的想法:

  • 現階段 Sprockets 繼續用,有用 Vue.js/React 就再搭配 jsbundling-rails + esbuild 處理
  • 之前的 Webpacker code 得拆除,這死路了。得改成用 jsbundling-rails + esbuild 處理
  • 若有需要升級 Dart Sass,我會嘗試用 sass-embedded 看看,不行再試 dartsass-rails gem。真不行有需要再全面換 cssbundling-rails 以及 Sprockets 可換成 Propshaft (以上遷移成本由小到大)
  • Vite Ruby 蠻有趣的,Vue.js 社群出的 Vite 工具很厲害。但這也等於都不用 Rails 提供的前端方案了,也不清楚 Vite Ruby 是否走的長遠。這可能比較適合重度前端開發,有專屬 F2E 的 Rails 團隊使用。