RSSAmplifier

Blog

kanru's blog

kanru's blog

kanru.infoRSS feed ↗20 posts

Latest posts

Scoped Error in Rust

I’ve never been fully satisfied with any error handling crate in Rust. I’ve tried many and even developed a few helpers. Here are the key issues I found with each. Theses are issues my scoped-error crate tries to address. The Inspiration anyhow - good for a drop-in Error type that just works, but requires adding .with_context() everywhere. It’s verbose and repetitive. Error reporting requires…

處理 Imm32 與 TSF 的相容性問題

稍微紀錄一下這一次 Debug 的過程。 背景與問題描述 Imm32 是 Windows 舊有的輸入法 API,一路沿用到 Windows XP 後被 TSF (Text Service Framework) 取代。許多平台的輸入法支援在切換輸入法時自動送出組字區的文字,例如打字到一半按 Ctrl + Shift 切換英文,可同時完成「送出組字」與「切換輸入法」兩個動作,無需先按 Enter 再切換。這對需快速切換中英文的使用者來說非常方便。 然而,在 新酷音 Windows TSF 改用 TSF 實作後,此功能一直時好時壞。若使用者無法預期切換輸入法後未送出的字是「消失」還是「送出」,自然會選擇先按 Enter 再切換,失去便利性。我已多次嘗試修正此問題。 錯誤的修正方向 在 TSF API 中,未送出的文字稱為「組字區 (Composition)」,可設定「組字中止…

開箱 Framework 13 吋 DIY 版筆電

官網購入 由於 Framework 還沒有在日本開賣,趁著今年回台灣前先預購了 DIY 版的 13 吋 AMD Ryzen™ 7040 系列。這次的 DIY 版本只有加購了記憶體而已,硬碟就用原本買給舊 System76 的 Lemp9 用的 Samsung SSD 970 EVO Plus 2TB,直接繼續使用裡面安裝的 Fedora Workstation 41,所以也沒有另外選擇 OS。 原本想要用日本的信用卡付帳,結帳後卻收到需要人工審核的通知。搜尋論壇了之後發現 Framework 對於購買地區的把關非常嚴格,如果使用沒有支援的國家地區的信用卡有可能導致帳號被鎖定。最後只好先把訂單取消後重新用台灣的信用卡付款。 開箱組裝 結帳後五日內出貨,但是等到我回到台灣實際上多等了兩個星期才開箱。…

回顧用 Rust 重寫新酷音的經驗

libchewing 0.8.0 將是新酷音的重大里程碑。酷音原本是 XCIN 的一個模組,新酷音團隊在 2002 年把模組獨立出來變成一個共有函式庫 (shared library) 維護至今。從 2021 年開始我就斷斷續續的用 Rust 重寫 libchewing,現在終於要預設啟用 Rust 重寫的版本了!我現在一邊為釋出做最後的準備工作,一邊寫個文章紀錄一下整個重寫的經驗,順便最後測試實際使用的情境。這篇文章將會以紀錄發生了什麼事為主,不會解釋太多技術細節,如果有想要深入了解的部份,歡迎留言讓我知道。 2017 年的第一次嘗試 應該是在 2017 年八月的時候,那個時候剛剛接觸 Rust 沒有多久,就想著可以用新酷音練練功,試著把使用者詞庫的模組 (userphrase) 改用 Rust 的 HashMap 改寫。那個時候新酷音的建置環境還是用 autotools 以及…

網站搬到 HostHatch

TL;DR HostHatch 便宜好用,想測試的話可以用我的連結 https://cloud.hosthatch.com/a/3823 這樣我可以收到一點回饋 🙂 幾年前因為想要用 Vultr 的機器玩 BGP,就把網站從 AWS 搬到 Vultr 的東京機房。當初用的是稍微高一級的 1c1g,夠同時跑多個 container 沒有問題,於是就用一台當 blog + BGP router。 去年原本租了 Element 代管的 ElementOne 來玩 Matrix 順便贊助開發。後來 Element 取消這個每月 $10 的方案不做一般消費者這塊了,剛好我也在考慮自己裝個 Synapse 來自架 Matrix,就把這筆預算拿來用在新的 VM 上面。 考慮到 Synapse 跟大型的聊天室直接對接的時候好像還滿需要資源的,需要找一個可以跑…

IBus Chewing 更新

上週末跟 Ding-Yi Chen 聯絡上,把 ibus-chewing 的 repository 搬到 Chewing Project 之後,就動手改一些東西。新的 repo 網址是 https://github.com/chewing/ibus-chewing 。 首先著重在整理 code base,先把 CMake 環境整理一下,然後把原本手刻的 ibus-setup-chewing 用 GTK4 重寫,並引入 libadwaita 讓界面跟 gnome 統一。 之前的樣子: 現在的樣子: ▴ 新 ibus-chewing 設定界面 主要的兩個 PR: https://github.com/chewing/ibus-chewing/pull/171…

2024 年的專案計畫

有太多想做的小專案,隨手紀錄一下以免要一直回想。 新酷音 Rust 版 0.7.0 – Rust 重寫的版本可以支援全部功能 考慮一下最終要支援的資料庫格式們 Fuzzing 0.8.0 – 預設使用 Rust 版本 0.9.0 – 第一版 Rust API 的半穩定版 重新設計 Editor type 重新設計 Error type 重新設計 Keymap module 更新文件 新酷音新功能 簡單注音模式 只輸入聲符的模式 不需要輸入音調的模式 好用的詞庫編輯器,從自己文章產生詞庫等等 多詞庫功能 cdb2-rs 把這個 fork 的 library 整理一下釋出新版本 ibus-z 用 zbus 寫一個 ibus 的 wrapper library ibus-chewing 更新 ibus-chewing 到 GTK4 推動 Fedora 把繁體中文的輸入法改回…

Fedora 上使用硬體加密的 SSH 與 PGP

從一開始入手 Yubikey 4,後來換成 Yubikey 5 NFC,我已經很久沒有把 SSH 跟 PGP 的密鑰放在檔案系統裡過了。我最近新買了一隻 Yubikey 5 Nano,簡單設定後紀錄分享一下怎麼使用硬體加密的 SSH 和 PGP 簽章。 Yubikey 的原理是它有一個硬體的「安全元件 (secure element)」可以用來實做各種智慧卡 (smart card) 的功能,這裡我們關心的是它的 PIV (personal identity verification) 與 PGP 兩個智慧卡界面。 PIV 與 PKCS#11 與 PC/SC PIV 是一種智慧卡的標準,定義了智慧卡需要支援的金鑰格式,演算法等等。Yubikey 的 PIV 支援標準的 9a, 9c, 9d, 9e 金鑰儲區,還有額外的 10…

用 podman-kube 來跑 WordPress

上一篇寫了要怎麼用 podman 的 systemd generator 來跑單一的 container,其實 podman 還有另外一個 pod 模式,也就是類似 Kubernetes 的 pod 一樣,可以把多個 container 跑在同一個 namespace 裡面。Podman 的 podman-kube-play(1) 指令可以接受一個 Kubernetes 的 YAML 設定檔然後跑起單一個 container 或是一整個 pod 與多個 container。同樣的,systemd generator 也可以用來管理整個 pod,變成 systemd service unit。 ▴ 原本的架構圖 這次我要做的是把單一的 WordPress container 改成用 PHP-fpm 和 Caddy 兩個 container 的方式佈署。原本單一的…

用 systemd 管理 podman containers

Podman 原本有提供指令可以產生 systemd service 的設定檔,但是產生出來的檔案內容感覺有很多改善的空間,例如要怎麼讓 podman 可以乖乖的把 log 送到 journald 就不是產生的範本有提供的。 podman generate systemd wordpress-container 在研究這個問題的時候發現這個指令已經被 Quadlet 取代了。Quadlet 是在 podman 4.4 的時候整合進去的,利用 systemd generator 的方式把類似於 systemd 的設定檔直接轉換為 systemd 可以使用的格式。 # cat /etc/containers/systemd/wordpress.container [ Unit ] Description = Wordpress Container…

Fedora Silverblue 新增硬碟到 Btrfs 陣列

我目前的主力電腦是一台 2020 年購入的 System76 的 Lemur Pro (lemp9) ,前陣子無線網路卡掛點,自己換了新的 Intel AX210 模組。 今天有感於最初設定的規格 500 GB 的 SSD 儲存空間有點不夠用了,想要加裝新的 SSD 來擴增容量。lemp9 內部有兩個 M.2 NVMe 的空間,所以我還有一個空位可以用。 原本內裝的是 Samsung 的 970 EVO Plus 500 GB,所以這次就添購了同樣是 Samsung 的 970 EVO Plus 2 TB,一次加好加滿。 我大約半年前把主力作業系統換成 Fedora 並且裝了 Fedora Silverblue 這個版本,是一種新型的 immutable 作業系統安裝方式,安裝基底系統後,額外的軟體都是用 Flatpak 或是 container 的形式疊加上去的。 有如其他 Fedora…

2022 十月箱根旅行

試著發表一些旅行時拍的照片! 相機 Fujifilm X-Pro2,鏡頭 XF35mmF1.4R,後製 Darktable 4.0 ▴ 在小田原駅等車前往箱根湯本 ▴ 搭乘登山小火車 ▴ 搭乘空中纜車到大湧谷 ▴ 大湧谷的火山地形 ▴ 經由蘆之湖坐巴士到仙石原すすき高原 ▴ 箱根湿生花園 ▴ 箱根神社

加入 Fediverse 聯邦宇宙

最近因為 Twitter 被收購,許多人開始找替代的服務,所以 Mastodon 又開始有很多新人加入。和一般社交網路不一樣,Mastodon 是建立在一個無單一主站的架構上面。而上一篇我換回到 WordPress 其實跟這個還有點關係 😉 這個由架構所建立起來的社交網路又稱作 Fediverse ,裡面並不只是 Mastodon ,只要是使用 ActivityPub 這個協議的網站都有機會串接起來!現在已經有各種類似 Twitter 的微型部落格,或是類似 Instagram 的照片分享平台,都可以互相串連。而 WriteFreely 則是介於傳統部落格與微型部落格之間。 &#x25B4; <a href="https:&#x2F;&#x2F;axbom.com&#x2F;fediverse&#x2F;">世界樹<&#x2F;a> 而 WordPress 上有人做了一個…

回頭用 WordPress 寫部落格

網路上有一個笑話:有在寫部落格的工程師,都至少有寫過一次自己的靜態網頁編譯軟體,而且比起真正寫部落格,會花更多時間在重構這個軟體或是調整模板。回頭看看我自己網站上面的文章,自從發出 Blog Redesigned 這篇文章之後,文章數量從每年幾篇,直接掉到每三年一篇。為什麼呢? &#x25B4; 2010 年之後就幾乎沒有幾個月有新文章 這幾年我換過好幾次靜態網頁產生軟體,調整過好幾次網站設計,換過各種服務平台(雲端虛擬主機、Vercel、Cloudflare、Cloudfront+S3、Lambda、雲端虛擬主機),但是文章數量總共增加了兩篇,免強加上翻譯為英文跟日文,也才只有五篇。 去年初幫老婆的姊姊架了一個新的 WordPress 網站,主要讓她寫一些小品心得文章還有讓她有可以宣傳她自己的產品的網站。過程中還開發了一個使用 Cloudflare Zero Trust…

桔梗種植的第二年更新

桔梗的葉子在冬天會枯萎,但是地下長的像人蔘的根部則是會進入休眠狀態。等到春天白天氣溫約 17 度的時候,就會重新萌發出新芽。 我種在陽台的桔梗在去年過冬前就已經枯的七七八八,完全枯死那種。剩下的最後一棵頑強的桔梗,在氣溫進入 10 度以下後也似乎漸漸進入休眠,只是實在難以判斷是否還有機會重新萌發。就這樣半信半疑,每隔一段時間仍然給盆栽水分,讓土壤保持微微溼潤。 今年春天,三月初的時候,從桔梗開始休眠已經過了三、四個月。有一天我仍然例行檢查盆栽,驚喜的發現桔梗的枯莖旁邊冒出了一個小小的像筍子的東西,隔幾天又多冒出兩個筍子。根據它們的位置看起來,它們應該都是去年最後一棵桔梗重新萌發的。 &#x25B4; 2021-03-17 桔梗新芽冒出 第二年重新長出來的桔梗和新芽很不一樣,粗壯好幾倍,生長速度也快非常多。每天可以長高一兩公分,等到三月底的時候已經可以看出來是三棵強壯的桔梗了。…

桔梗花的種植與照顧

桔梗(學名:Platycodon grandiflorus),别名包袱花、鈴鐺花,擁有可愛的小花,帶有獨特的紙張質地和可見的花脈。我所在地區(日本東京)的常見品種有紫色和白色的花朵。這種植物的一個顯著特徵是它的花苞在完全打開之前像氣球一樣膨脹。 在超市或是居家賣場不難發現它們的身影。當我第一次發現它們之後我就決定要在我的陽台花園種個幾朵。 我在日本亞馬遜買了花的種子以後,用了我原本計畫要種些蔬菜的花盆來種。之後發現這種花盆不是最好的選擇,因為很難控制澆水的水量。之後會詳細解釋。 網路上有許多關於桔梗的資訊,但是關於它們在各個生長期的照片,還有如何照顧它們的文章非常的少。希望我的經驗分享可以對其他想要種桔梗的人有幫助! 桔梗在生長的初期長的非常緩慢 作為參考,東京的柯本氣候分類法分類裡面是「Cfa」,意思是溫暖帶濕地型夏季炎熱氣候。夏天最熱的時候可以高於 34…

JSON Web Tokens 研究筆記

JSON Web Tokens 是什麼?它真的可以用來取代傳統的 session cookies 嗎? 本篇為研究 JWT 時所做的筆記。 什麼是 JSON Web Tokens ? JSON Web Token 縮寫為 JWT,唸作 jot,是一個 IETF 標準( RFC 7519 ),定義了不同的群體間可以精 簡且安全的方式交換資訊的方法,這些資訊是包裝在一個 JSON Object 裡面,因 而得名。這些資訊因為經過數位簽章所以可以被驗證是否為可信任的內容,簽章 的方式可以是單一密文(HMAC)或是公鑰私鑰系統(RSA)。 JSON Web Tokens 要怎麼用? 當使用者跟伺服器登錄之後,伺服器可以傳回一個 JSON Web Token,此 Token 可 以存在瀏覽器的 local storage 或是 cookie。…

簡單把 CSS 變成非同步讀取

在 Smashing Newsletter 看到的,只要 <link> 標籤就可以簡單把 CSS 變成非同步讀取: < link rel = " stylesheet " href = " &#x2F;path&#x2F;to&#x2F;my.css " media = " print " onload = " this . media = ' all ' " > 有用過 Google PageSpeed Insight 分析網站的,應該都有看過如下的結果: 原因是因為瀏覽器在處理 CSS 與 JavaScript 檔案的時候會阻擋其他資源的載入。解決的 方法裡,JavaScript 類型的資源可以標示 defer 或是 async 屬性讓瀏覽器知道我們 希望可以非同步的載入執行此 JavaScript 檔案,可惜 CSS 並沒有類似的屬性可以使用。 一般處理 CSS 的載入有兩個策略:…

CSS Text 3: Segment Break Transformation Rules

At the end of last year, I used my free time 1 to fix Firefox Implementation of Segment Break Transformation Rules ( Bug 1081858 ). Starting from Firefox 52, the line breaks between Chinese and Chinese in HTML will not be displayed as blank in the browser. Source Chromium 59 Firefox 56 When using a plain text editor to compose a document, for the comfort of reading, we often set the line width to…

CSS 文字級別 3:段落分隔變換規則

去年年底,我利用閒暇時間 1 修好了 Firefox 的 Segment Break Transformation Rules 實做 ( Bug 1081858 )。從 Firefox 52 開始,HTML 裡面中文與中文之 間的換行,瀏覽器排版時不會顯示為空白。 Source Chromium 59 Firefox 56 使用純文字編輯器撰寫文檔時,為了閱讀的舒適性,常常我們會在行寬 80 個字元的時候換行,這個寬度可以容納四十個中文字,剛好也是可以舒 適閱讀中文的寬度。隨著軟體硬體的進步,顯示內容不再侷限於固定的寬度, 很多排版軟體都可以把內文重新排版後顯示在不一樣的環境。 從原始文檔轉換為螢幕顯示內容的排版過程,這些軟體會把同一段落的文字重組 為文字流,移除換行或是插入新的換行,重新排版於新的容器寬度內;問題在於 很多拼音文字使用空白作為字與字之間的分隔,排版軟體的演算法也如此假設,…

kanru&#x27;s blog · RSS Amplifier