• 新產品上線:rrcad – 出一張嘴,讓 AI 幫我產生 CAD 模型程式碼

    RustmRubyOCCTthree.jsMCP,就成了一套讓我以自然語言下達指示,就產出 CAD as Code 模型程式碼的工具:

    rrcad – A 3D CAD language expressed in Ruby. Write .rb scripts to describe solid geometry; the engine evaluates them through an embedded mRuby VM, builds exact BRep models with OpenCASCADE (OCCT), and exports to STEP, STL, or glTF.

    這是我前幾天晚上,看著我那台 3D 列印機,感嘆:「你也變得跟我一樣沒用了啊…」隨後立即轉念:「不是它沒用,是我沒用!」、「如果我能幫它製作快速產出模型的工具,它就不至於這樣一天捕魚、一季曬網」而立即著手製作的產物。

    類似的產品已經有了,比如 OpenSCADCadQuery。但是一來我是眾所皆知的 Ruby 語言愛好者,我想做個「Ruby 版的同質產品」,能夠寫 Ruby 會讓我感覺更快樂;二來,我的身體狀態,確實就承受不了在電腦前高密度勞動,所以我想透過 MCP 可以讓我善用 LLM & Agents 省下很多力氣。

    成效還不錯,現在我下達指令:「幫我產生一組適用於 Schmidt 規格筆芯的鋼珠筆組件,筆頭與筆身請設計用卡榫結構連接。」就看著 Claude Code 幫我生出一組我即可送印的模型。

    🔭聯邦宇宙對此表示:

  • 新產品上線:Baudrate.tw

    Baudrate,支援 ActivityPub 協議的新世代 BBS,今日正式上線,專案原始碼亦公開釋出。

    雖然再過幾天,我就要把自己的不賺錢的一人公司收掉了,不過,就這樣吧。

    至少,在 Internet、在 Web 上面,我總算有了自己的一個平台。

    以下是複製、貼上宣傳文案:

    Baudrate 是一套以 ElixirPhoenix 框架打造的開源電子佈告欄系統(BBS),原生支援 ActivityPub 聯邦協議,能與 Mastodon、Lemmy 等 Fediverse 實例互通互聯。

    即時互動體驗:Baudrate 採用 Phoenix LiveView 技術,提供即時更新的使用者介面,無需手動重新整理頁面即可獲取最新內容。

    靈活的看板架構:支援階層式看板結構,包含子看板導覽、麵包屑路徑指引,以及每個看板獨立的角色權限控制(瀏覽權限與發文權限)。管理員可指派看板版主,版主擁有置頂、鎖定討論串及刪除文章與留言的權力。文章還能跨看板發佈,作者可自由控制轉發選項。

    完整的聯邦功能:透過 ActivityPub 協議,Baudrate 支援 WebFinger 與 NodeInfo 探索、接收追蹤、留言、按讚、轉發等互動,並能向遠端實例發送文章與活動。系統內建基於資料庫的投遞佇列,具備指數退避重試機制、HTTP 簽章驗證、HTML 消毒處理及 SSRF 安全防護。管理員可設定網域封鎖/允許清單,也能全站或個別看板切換聯邦功能。同時相容 Mastodon 與 Lemmy 的特定格式。

    嚴密的安全防護:Baudrate 實作 TOTP 雙因素認證(管理員與版主強制啟用)、加密存儲的金鑰與 TOTP 密鑰、HSTS 與 CSP 安全標頭、簽章加密 Cookie,以及登入、註冊、聯邦端點等多層速率限制。

    彈性的使用者管理:支援開放註冊、需審核、僅限邀請三種註冊模式。管理員後台提供站台設定、註冊模式切換、待審核用戶管理、聯邦儀表板、檢舉佇列、稽核日誌及邀請碼管理等完整功能。使用者可上傳頭像(自動轉換為 WebP 格式),並擁有公開個人檔案頁面。

    國際化支援:透過 Gettext 實現多語系介面,支援自動偵測瀏覽器語言偏好。

    訪客友善:設定為訪客可見的看板與文章無需登入即可瀏覽,讓 Baudrate 成為真正的公共資訊平台。

    Baudrate 以 AGPL-3.0 授權釋出,歡迎社群參與貢獻。

  • 經過 12 年多,EPGrab 再度更新

    前情提要:〈EPGrab,把 DVB 數位電視的 EPG 電子節目表輸出成 XMLTV 格式

    因為經濟上的困境,自己開個小公司,做什麼都不成,最近還蠻常陷入重鬱狀態的。為了緩解,就把一些過去累積的,想做而未做、做到一半只求驗證概念可行的專案與想法,拿出來整理。

    EPGrab 是其中之一。

    這次改版,以 Rust 重寫,借助 Rust 語言本身的語彙與表現力,把整套程式翻新過:

    • 內建 Zap 格式的頻道設定檔掃描機能(`scan-channels`)。能夠獲取其他類似程式所無法正常處理的頻道名稱文字編碼 (character encoding) 的 channels.conf。
    • 修掉了控制字元沒妥善濾掉的老問題。
    • 內建一個微型的 HTTP server,可以把擷取到的 EPG 資料檔直接上網,並用 XSLT 轉換為 HTML,便利直接瀏覽。順道一提,行文當下,Google Chrome 正策劃要因噎廢食地移除 XSLT 支援,看了只想說:「這就是市場一家獨大後的樣子,大家高興了吧?」
    我是一份看起來像 HTML 的 XML 文件呦!是 XSLT,我用了 XSLT。

    雖然在 12 年多之前,認識的人就已經很少人在收視無線數位電視了,然而這段時間以來,無線數位電視網也變了不少,除了廣為眾人所知的中視被旺旺買了,台視被非凡傳播買了這些已知的民營化;公視多了台語台、兒少台「小公視」;原住民族電視台在無線數位電視播送;然後多了兩台國會頻道,還有主要以英語製播節目的 TaiwanPlus 頻道。整體來說,有量變,有質變,算是很兼顧多元聲音的組成。

    與此同時,有線電視隨著頻道商經營不易,一個個搞消失,轉向自有的網路串流服務,也變得愈來愈難找到好節目收看了。

    身為一個電視兒童、電視少年、電視青年、電視阿伯,小時候的我,讀世新時的我,從沒想過電視這種媒體會變得 doesn’t matter。

    那為什麼還要在意這個程式專案呢?因為我還是相信,無線數位電視裡仍有不少好節目值得「更早」被發現,而不是到了每年金鐘獎,看了入圍與得獎名單,才知道原來有一個這麼好的節目。且因為傳媒生態的變化,廣告預算下給電視的比例,呈現一路在變少的趨勢,進而造成節目製作預算與成本回收狀況愈來愈窘迫,有些節目就算得了獎,也只此一季,難以為繼。於是故,我覺得好的節目在首播當下,愈多人收看,總的來說,是件好事。

    🔭聯邦宇宙對此表示:

  • 樸實注音鍵盤 3.6.9 版釋出

    自從 3.4.5 版後,改了一些地方:

    • rustup 去讀 rust-toolchain.toml 自動安裝所需的 Rust toolchains。
    • 精簡模式(使用硬體鍵盤模式)會顯示目前的全形、半形狀態。
    • 更改切換至其他輸入法編輯器的組合鍵,從長按 Alt 改為 Alt+I。
    • 把使用硬體鍵盤模式的選項整個幹掉,改成自動偵測。
    • 從 Google Play 下架。
    • 修正〈deGoogle – 替換鍵盤〉一文作者指出的逗號鍵功能失效問題。
    • 把「Dvorak 許氏」軟鍵盤整個拔掉,只保留支援硬體鍵盤,連帶將新酷音函式庫支援的各式鍵盤,都順便實作到硬體鍵盤支援列表裡。軟鍵盤現在只支援傳統大千、(QWERTY) 許氏、倚天 26 鍵、倚天 41 鍵。
    • 支援 Unihertz Titan 2 這款內建硬體鍵盤,但是又不是那麼完整的排列的機種。讓 QWERTYUIOP 列入候選字詞選擇鍵組,並讓音量增減鍵用於切換候選字詞前後頁。

    🔭聯邦宇宙對此表示:

  • 解決 rtkit-daemon 一直吐 “Supervising m threads of n processes of o users.” 的 logs

    剛剛把 journalctl -f 掛著觀察系統有沒有什麼地方需要維護的,發現 rtkit-daemon 一直吐 Supervising m threads of n processes of o users. 的 logs 洗版面,有點惱人,找了一下解法:

    1. sudo systemctl edit rtkit-daemon.service
    2. 覆寫 [Service] 段,新增一條設定 LogLevelMax=2。記得要寫在 ### Edits below this comment will be discarded 這行的上方,不然是不會存入變更的,我犯了這個蠢。
    3. sudo systemctl daemon-reload
    4. sudo systemctl restart rtkit-daemon.service

    這樣 log level 小於 2 (critical) 的就不會輸出。

  • 接上 Sony Xperia Z3 Compact (D5833) 的 Serial Console

    之前試著將這台 Xperia Z3 Compact (D5833) 刷寫 postmarketOS,刷機過程雖然順利,然而當 postmarketOS 開機畫面閃過之後,便是無消無息的黑色螢幕。我大概可以猜到這是很典型的卡在 initrd 或 kernel 某個地方,但是確切是什麼地方,還是得想辦法查得,不然我原本想要有一台 postmarketOS 的實機以方便開發上面的應用,就無法如願了。

    還好某段時期的 Sony Xperia 對開發者很友善,該提供的技術文件、bootloader 解鎖服務、UART 接點都公開給開發者利用(撰文當下的 2025 年,Sony Xperia 似乎已經不再這麼積極推動這項 Open Devices 專案了),我的 Xperia Z3 Compact 就在這段時期的產品線裡,可以輕易獲知如何透過 UART 接上 serial console,取得非常早期的開機時資料。

    Xperia Z3 Compact 的 UART 接點,取自 https://developer.sony.com/open-source/aosp-on-xperia-open-devices/guides/access-uart-ports

    GND 是還好,但是 Rx 與 Tx 的焊點真的很小,不使用 OK 線的話很難焊上去。

    此外,板子提供的 UART 邏輯電源電壓是 1.8V,所以還要找支援 1.8V 的 USB-UART 轉接介面。

    現在已經確定能夠在原裝的 Android 系統、從 serial console 獲取非常早期(從 S1 BOOT 開始)的開機時資料,接著要再度刷成 postmarketOS 看看當初是卡死在什麼地方。

    🔭聯邦宇宙對此表示: