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

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

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

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

  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-railsjsbundling-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 團隊使用。

Rails 老司機帶飛 投影片

今天在 COSCUP 2022 的 Rails 演講投影片。

距離上次公開講 Rails 也有5~6年了,之前講 Rails 大多偏教學,這次主要分享自己的一些經驗和主觀意見看法,請多指教了。

簡單摘要 1. OO用多型取代條件式、STI 和 Strategy Pattern 舉例 2. diss 了 service object 和一些其他 patterns 3. diss 了前端 Turbo 是舊瓶新裝,推薦用 Vue.js 4. N+1 queries 問題 5. Gemfile 用法

Tweets 整理 (2022 Q2)

2022/6

2022/5

  • 2022-05-14 15:52 換了 Mac Studio M1 Max,終於有 32G RAM 可以用了。這年頭大多是在家工作coding,有出門主要也都是開會,不需要帶台攻頂MBP。原先用了一年多的 Mac mini M1 六折賣很快就脫手了,比投資美股賠的還少… 😅

2022/4

  • 2022-04-24 20:18 週末看了 t.co/iIzVEvAbE3 學一下 Hotwire。感想是: 就這? Turbo Stream 跟16年前的 Rails RJS 沒啥本質上的進步 😆
  • 2022-04-01 20:11 @chrisythuang 也有試過 2B 筆尖不貼膜,但嘗試後還是覺得類紙膜 + HB或2H 筆尖的效果比較好。
  • 2022-04-01 20:08 @tonylu915 你可以先換筆尖用用看,找一下 2B 筆尖
  • 2022-04-01 17:11 iPad 竟然有種保護膜產品叫做 “類紙膜”,貼上去之後觸控筆的感覺更像在真實紙張上書寫,不會這麼滑,寫起來蠻不錯的。缺點是會犧牲一點螢幕的清晰度,但還可以接受,生產力比較重要。

Tweets 整理 (2022 Q1)

2022/2

2022/1

  • 2022-01-26 23:28 在京東買了一台 Boox Max Lumi2 電子書閱讀器,原來有出這種 android 開放式的,根本就是電子墨水平板。愛裝什麼 app 就裝什麼: Kobo, Readmoo, 博客來, Kindle, 多看閱讀,13吋看PD… t.co/IXyueGoWyO
  • 2022-01-23 17:15 “When to use JSON data type in database schema design?” t.co/2Pnil74k0C # 各種不需要正規化和加索引的場景,越來越愛用 JSON data type 了
  • 2022-01-19 20:16 Rails 的 webpacker GG 了,拖很久的 v6 開發也被官方放棄了 # 想不到 sprockets 還比較長壽 t.co/CeJ3P1FlFg
  • 2022-01-12 11:39 “Please help me with my n+1 problem…” t.co/1fduRwiUPI # 這部落格蠻多 Rails N+1 queries 的各種進階解法,不錯
  • 2022-01-02 19:06 “The State Of Mobile First and Desktop First” t.co/zDFGpfxwuQ # 聽說現在不流行講 Mobile First 了,反正就 RWD 吧