pretty code

顯示具有 電子書 標籤的文章。 顯示所有文章
顯示具有 電子書 標籤的文章。 顯示所有文章

2026年6月27日 星期六

一個字型,各自表述

這個星期中午吃飯時都使用「靜讀天下」看書,雖然都是同一種字型,但很明顯的每家顯示的方式都不一樣。


有時候這會讓我很出戲,因為有些人名「靜讀天下」翻譯起來就和 Kobo Clara 2E 不同。

倒也不是說「靜讀天下」就最完美,只能說目前看起來是相對完美的。

下面這個聖人有云,明顯就沒翻譯成功。


這篇文章應該是我看過解釋簡轉繁字型原理講得最好的人。


這是不是意味著,字型顯示原來不是一件簡單的事?

照我個人猜想,應該是有類似字型引擎在處理顯示方面的事?

2026年6月22日 星期一

ReadEra Premium 入手

我就是喜歡研究軟體間的差異。

想了一下,剛剛還是花錢購買了,照官方網站所說,即便使用免費版本,也不會有廣告。

衝著這點,不支持一下怎麼說得過去!

雖然跟「靜讀天下」價錢差不多,稍微用了一下,就找到兩個輸「靜讀天下」的地方。

- 開啟同一本書,明顯比「靜讀天下」慢。
- 閱讀介面下方,沒有「靜讀天下」好看。

但就像我說的,沒有廣告就值得支持了。

話雖如此,我應該還是會用「靜讀天下」閱讀 Kobo 購買的《劍來》。

ReadEra Premium 就讓他專門閱讀直式中文書好了。

個人覺得,閱讀軟體能夠直轉橫、橫轉直都不是重點。

一本書如果製作的時候是直式就應該顯示直式,反之亦然。

我想這也是一個閱讀軟體最基本的功能。

「靜讀天下」這點就讓人失望。

簡單比較一下

2026年6月19日 星期五

懶惰起來要人命

今天終於受不了了,一口氣把手上有帳號的書城 App 都裝了一輪,希望可以把 Kobo 購買的那本簡體中文版《劍來》利用更換字型的方式達到簡轉繁的良好閱讀體驗。

嗯,果然沒有一家 App 可以支援自訂字型!本來以為 Readmoo App 應該有這個功能,只可惜還是沒有。

還好之前就有聽過大家都很推薦「靜讀天下」,查了一下確定可以自訂字型,目前售價為台幣 400 元。

我想應該還有其他付費 App 也可以自訂字型,不過本人實在沒有多餘時間,就不節外生枝了。

現在手機終於可以跟 Kobo Clara 2E 有一樣的閱讀體驗了。

目前使用的簡轉繁字型如下

原俠正楷-TW
Version 1.12; Jul 31, 2023
OpenType 配置,TrueType 外框

原本 Kobo App 顯示


靜讀天下 App 顯示


請 Claude Web 搜尋可以安裝字型的 Android App


2026/06/20 更新

靜讀天下無法開啟直式 EPUB 書籍,應該是它不支援。

另外一套 ReadEra 就可以正常顯示直式 EPUB 書籍,目前售價為 370 元。 

《劍來》浩然天下地圖

在 Kobl Clara 2E 看到 3 萬多頁的時候,終於有段文字好好描述了浩然天下的世界觀。

不多說,趕快請 Gemini 幫忙畫圖。

只可惜這段文字並未描述到劍氣長城。


改天有空再補上。

2026/06/19 更新

使用搜尋功能終於找到了,居然要到第 42 章才有描述到倒懸山的地理位置,劍氣長城則是位於倒懸山以南,兩大天下的交界處。

2026年6月5日 星期五

亂起太平山


終於來到手邊最後一本繁體電子書了,這星期不用推 Code,除了回去那一個月沒回去的家外,應該可以把這本書看完吧?

忙到連打電動都沒時間,差點連財產都沒得分了XD

要不是該死的五月一整個月都在推 Code,我應該會有點時間趁假日把一些東西搞清楚,這個星期就不會那樣趕了?

話雖如此,目前遇到的問題能做的事不多,想得到的我都做了!

總之,真是個無聊的工作。

我好想邁入武夫第十境呀!

2026年6月2日 星期二

人間多不平


不知不覺已經來到第十本了,天下無不散之宴席,再兩本,我就得回頭看孤本了。

還好,到現在為止沒網路上說的那樣不堪,真想請一個月長假把它好好看完。

如果連孤本都看完,接下來我就不知道該怎麼辦了?

要去哪裡找到最後的幾冊?

真的走到那步,我只好回過頭擁抱 Vim 了?

2026年5月4日 星期一

越來越喜歡 AI 了

現在都直接用自然語言寫 code 了,起手式就先將需求寫在 spec.txt,開啟 Claude 後,直接跟 AI 說一聲。

Please read the spec.txt and work for me.

不過,偶爾還是要自己動手寫不然會變笨。

所以嘿嘿我自己來,但是雜事就交給 AI。

就在剛剛,終於圓滿了我的嘿嘿小工具XD



之後要嘿嘿就知道書名了,懶得從 Python parss 資料給批次檔了,反正在 Windows 上,反白 ID 後,按滑鼠右鍵就可以貼上了。

這似乎是 Windows 新終端機才有的功能? 

2026年5月3日 星期日

Debug 就像連續不斷的使用組合技

昨天為了上傳 Code,快一點半才睡覺。

早上又稍微試跑上傳的 Code 是否有問題?

很好,今天不想再做事了,決定來檢查一下之前寫的 R 家小工具。

既然一直都說 R 家的好話,還是捧個場買幾本書好了!

好幾個月前就知道當初的工具已經無法使用,稍微 Debug 了一下,嗯,原來這樣解決即可,比我想像中的簡單。

既然 R 家工程師這樣給力,不多買幾本書說不過去,也順便測試一下之前批次下載的功能是否依然正常。


看了一下,真的是好久沒在這家買書了。

嘿嘿,既然工具已經恢復正常,之後就隨我心情購買了。

還有,既然都在電腦前面了,就透過 PC 將書推送進 Kobo Clara 2 了,這樣就不用拿出我的手機了。

KoboFileServer 果然好用XD


代辦事項

1. 指定資料夾找出所有下載的書,同 Kobo 工具一樣,列出書名供使用者選擇即可。
2. 看看是否能回復上傳 Google 雲端硬碟的功能。

上面這兩點都很簡單,請 Claude Code 做即可。

可能比較難的是 Google 服務 new OAuto2 的 API 呼叫?

2026年4月19日 星期日

一瀉千里

幹,開始新專案後,問題是層出不窮,整天都在忙一堆雜事,害我沒有時間靜下心來好好看書,為了快速解決問題,我都拿我這兩年的 Vim 功力以及 18 年來 UltraEdit 養成的習慣來做事,雖然不至於按方向鍵來移動游標,但也只是改用 ijkl 罷了,那種遊刃有餘按下 W 或是其他快速定位鍵的高手風範已經蕩然無存,更別說好不容易累積兩年的 Vim 功力早已經一瀉千里,被埋沒在問題的洪流之中。

於是我昨天做了一個決定,那就是要好好敗家,以修補我脆弱的老老心靈XD

本想買 Kobo Elipsa 2,但看網路似乎沒有變快多少,想來想去,還是買個 Pubook Mobile 減少我下班回家滑 PTT 造成的眼睛傷害!


本來在誠品現場試用有點想放棄購買,整隻機子卡頓到不行,但有可能被眾人摧殘過所以做不得準,再加上我就是要敗家,故雖然沒黑色我還是把它敗下去XD

果然,回家使用的感覺一切正常,但大概也跟我原本的海信 A5 速度差不多,沒有特別驚艷的感覺!

之前查資料時我可能是看錯,CPU 應該不是聯發科的,而是 Rockchip RK3576,反正跟海信 A5 差不多就夠我用了。

握在手上的感覺也不錯,目前使用到現在有幾個缺點:

1. 不能裝我有贊助的 BePTT,有空詢問一下作者,要再贊助我也沒問題,畢竟我也沒時間從頭自己寫一個。

2. Kobo App 幾秒鐘就閃爍一次,有空可能要接 ADB 看 log 才知道 Kobo App 在發什麼神經?

3. EInkBro 在 Play 商店找不到?不過,開啟快速模式 + Chrome 就夠我上網了,我也懶得再去找 APK 安裝了。

我老老的心靈,經過敗家之後,果然有點被安慰了XD

2022年7月28日 星期四

HyRead 7.8 吋彩色電子紙閱讀器預購

好久沒有寫文章了,最近工作的東西實在沒有辦法寫出像樣的感想,因為我大概還處在襁褓的階段吧XD

今天是 HyRead 這台機器預購的日子,限量 100 台,特價 10,999 的機器,在我中午吃飯時看已經售完,再來 11,999 的機器,在我當下寫文章的時候都還能下單。

也算是記錄一下幾家知名廠商預購的狀況吧?

在我看來,感覺是每下愈況,參與過的幾台機器,個人覺得當初 mooInk Pro 10 吋的預購最踴躍。

2022年5月26日 星期四

《文豪們的私房酒單》在 Kobo Elipsa 的閱讀結果

網路上有人說這本書在 Kobo 看起來不正常,我原本以為他是某家買的,但在我打字的同時想想又不太對,會問這個問題的人應該不懂 EPUB 格式,理論上是沒有能力把這本書拿出來放到別的機器上才對?

我前幾天看到這篇文章的第一直覺應該是 meta data 或 span 區塊,至少我知道某家很多版式書籍會這樣編排。

剛下班後馬上手刀速速的購買此書來驗證,果然跟我想的一樣,有 span 區塊存在,但並不是我以為的圖片 + append 文字的版式書籍。

那看來應該是沒轉 EPUB 的關係?果然在沒轉的情況下,所有 span 區塊裡的文字會浮在圖片上面,這個問題在轉了 KEPUB 之後就迎刃而解。


2022/06/01 更新

雖然轉 KEPUB 後,Kobo 就能正常顯示,但因為翻頁速度有點慢,故嘗試改用 Plato 來閱讀,看起來 Plato 也無法處理帶有 span 區塊的固定版面書籍,其顯示效果會先顯示圖片,再來換另一頁顯示 span 區塊裡的內容。 

HyRead Gaze Pocket 不關機待機測試

被測試資料搞得一頭霧水,所以今天比較早下班XD

來看一下久沒關機跟上網的 Pocket 狀況,想不到待機情況比我想像中的好,真是對現在的開放式機器刮目相看,不過 CPU 還是差了點沒錯,雖然前一陣子有新的 Note Plus 預購,但問了 CPU 規格也得不到答案,著實是讓人沒勁。

2022年5月2日 星期一

HyRead Gaze Note Plus 7.8 吋一日限量預購

目前時間晚上 10:30 分,還在跟我的 C++ 教材奮戰,為了轉換一下心情,看了一下官網,限量 200 台,優惠價為 NT $8,299 的 7.8 吋閱讀器,目前還是可以順利的加入到購物車。

去年經歷了 Kobo Elipsa 的預購,那時就覺得整個活動熱潮比不上之前讀墨一代 10 吋的預購。這次 HyRead 的活動,只是 200 台的數量,想不到還是無法順利完銷?

我想原因應該是出在 CPU 的使用效能不如文石的開放式閱讀器吧,雖說兩者的價差還是有將近 2000 塊,但看起來似乎消費者不太願意買單,支持 HyRead 的讀者,我想應該都已經入手了閱讀器,再加上過年前才剛推出 Gaze X Plus 10 吋閱讀器,應該也是影響了新 7.8 吋機器的銷售。

無獨有偶,Readmoo 也在最近推出新的 7.8 吋閱讀器預購,雖然我已經退出社團很久了,但我估計應該會比 HyRead 賣的好,畢竟讀墨社團的催敗力及向心力一直都是讓我很佩服的行銷範例。

雖然我不覺得影片在知識傳播上會比文字來得讓人易懂,但以行銷方面來說,影片確實會比較吸睛,這點讀墨確實是比凌網強。

考慮了良久,還是沒有下單 Gaze Note Plus 這台機器,在很大的機會上還是延用同一家 CPU 情況下,實在不是讓人很感興趣。算了,還是用我的 Gaze Pocket 吧!畢竟目前上網速度都還在可以接受的範圍內。

2022年4月18日 星期一

Kobo Expense

既然現在都在 Kobo 買書居多,是該時候寫個 Kobo Expense Chrome Extension 了,晚上稍微拿 Readmoo Expense 改了一下,看起來只要改 gethtml.js 就好,原本產生報表的 popup.js 只要維持一樣的 object record 回傳回去,完全可以無痛接軌,雖然我當初並未定義 interface,但也可以稍微的從中感受到介面的威力。


簡單分析一下購書狀況,從去年 5 月後跳巢到 Kobo,故每月開始有持續買書,但因為 Kobo 不像讀墨有好用的不定時三本七五折券,故在 Kobo 不太容易一次買大量的書。雖說 Kobo 有 555  點送 111 點的活動,但需要使用者自行拆單,故我不認為有多好用。

這樣也好,越不方便的機制,使用者就越不容易亂花錢,這也算是個意外之喜吧?

2022/05/18 更新

Kobo 網頁居然又改版了,所以我又要更改 parsing regex,看了一下網頁原始碼,原本會換行的資料現在又不換行了?真搞不懂 Kobo 的工程師在幹嗎?不太可能為了這個一直去更新插件,看來只好用 local 版的 Kobo Expense。

2022年4月17日 星期日

Bug or Feature ?

最近 Kobo 系統又有更新了,那個因為 Wi-Fi 已經打開,導致進去藍牙設定頁面的時候 Bluetooth 也跟著打開的 Bug 終於修掉了!(但是據已更新的國外網友所說,在兩者都關閉的時候,單獨打開藍牙,Wi-Fi 還是會跟著打開)

好笑的是國外論壇在上一版的討論串中,就有兩派人在爭論這到底是 Bug 還是設計問題?

其實以一個使用者的觀點來說,沒在我預期之下跑出任何我沒預期的行為,這無疑是一個 Bug 沒錯!使用者才不管你這是因為設計還是程式沒有寫好的緣故。

之前開發 Wi-Fi 翻頁器時,我就對 Kobo 會關掉 Wi-Fi 這件事很感冒,正常的設計應該是在系統進入休眠的時候,才順勢的讓週邊進入省電狀態。假設使用者設定休眠的時間是 10 分鐘而使用者的 Wi-Fi 是開啟的,怎樣系統都不應該在不到 3 分鐘的時候就偷偷把使用者的 Wi-Fi 關掉,這很明顯的不符合使用者預期。

同樣的,一個功能打開也會影響另外一個功能的開啟,這也是不符合使用者預期的行為。

即使目前主流 Wi-Fi 和 BT 都是在同一顆晶片上,通電和使用狀態本來就可以透過 UI 和 driver 的配合來達到一個良好的使用者體驗,Kobo 在這一點上確實是沒做好沒錯。

這又讓我不禁想到前一陣子 Kindle 又更新他的 UI 了,這應該是我近幾年來有印象的第三次更新了!

這個更新就真的是設計問題沒錯,姑且不論有沒有更好用,但至少我個人認為這個新的更新是比前一個差沒錯,因為破壞了我習慣的介面閱讀習慣。

究竟這個新的 UI 是不是有符合大部份的人的使用習慣呢?我想我應該也無法知道這個問題的答案吧?

2022/04/18 更新

下圖是 Kindle Oasis 2 更新到 5.14.2 的 UI 介面,上一版的 UI,現在要透過 list + sort,才能有近似前一版的畫面,最大的差別就是 collection 會多顯示資料夾的圖示,套句史蔕芬周的話:真是多餘呀XD


對比一下 Kindle Paperwhite 3 版本 5.13.7 的 UI 畫面,list 的 collection 介面就不會有不必要的資料夾圖示,整體看起來清爽多了。理論上 PW3 應該也還能升級版本,但可能是我 4G 的空間已經所剩不多,直到現在都還未收到下一版本的更新通知,也算是塞翁失馬的意外之喜吧。


2022/06/09 更新

早上因為 Elipsa 在充電,故拿我的 PW3 來改看《USB Complete》這本書,沒想到在沒關掉 Wi-Fi 的情況下,我的中亞系統也更新了!不是說要收攤了,還那麼認真要幹嗎?

同樣的設定在 PW3 只剩 5 個資料夾可以顯示,但我又不想用 Collection 顯示方式,因為真的跟我本來的習慣不一樣,再加上緊密放在一起的排列,真的是很兩難呀。

2022年4月6日 星期三

武林絕學 - 金星幻式 - 七星連線

標題雖然是布袋戲的招式名稱,但我想不到比這個貼切的標題了XD

從 3 月下旬開始,為了研究 Libra 2 的藍牙,不但買了 Libra 2 本人回來研究,還陸續買了 E-PCG233 藍牙滑鼠以及 8BitDo Zero 2 搖桿回來,正所謂孩子的學習不能等呀?

好不容易大概釐清了 Libra 2 的藍牙問題?但後續還有一個小尾巴卡在我心中,那就是為什麼滑鼠以及我的 R500 翻頁器都會按下一次鍵後觸發 2 次事件?雖然我大概已經能猜測出問題出在哪裡就是了(按下及放開的事件,Key Scan Value 都一樣)。

我認為天底下的問題只有兩種,一種是目前可以解決的,另一種則是目前無法解決的。

很顯然的,我認為這個小尾巴是屬於前者的範疇!

今天還蠻早起來的,故想直接用 cat 抓 raw data 來看,畢竟我在 KoboPageTurner 專案就已經有相關經驗了,但不知為什麼,早上突然想用 PC Linux 來測試,想說順手用 evtest 來看一下,結果發現 Linux 版的 evtest  (1.34),居然可以判讀更多的 raw data,故可以一目了然的確定問題便是出在放開按鍵的事件沒錯。


Raw Data 長這樣(不同時間抓的)。


那我們要怎麼解決 kobo-btpt 收到兩次事件的問題?一個是我之前寫的 filter,過短時間內收到相同的 event 便忽略它,可惜的是一樣的 code 只在 Elipsa 生效,Libra 2 沒有辦法成功(後來發現自己耍笨,同時執行了原本的 kobo-btpt 及自己修改的版本)。另外一個則是希望 Kobo 的 Input Subsystem 也能收到 type 1, code 272 的事件,那我們只要在 value = 1(1 是按下,0 是放開)時觸發 Kobo 藍牙翻頁函式即可,換句話說,kobo-btpt config file 要如下設定,注意這裡都是 10 進制:

prevPage 1 272 1
nextPage 1 273 1

雖然我還沒測試,但我想八九不離十可以成功。

那這個跟我們的布袋戲標題有啥關係?

此招式是天宇一好漢的武功之一,我認為作學問也是如此,雖然我們從 Google 搜尋來的都是片斷屬於點的知識,但當你一點一滴的累積之後,知識自然會從點擴展到線,最後則變成面的學問。

因此,只要是屬於目前可以解決的問題,我希望都能把它搞懂,也許將來的某一天就會派上用場也說不定。

期許自己能夠永遠的不忘初心。

題外話:我想懂 Linux Input Subsystem 的人,應該會覺得這麼簡單的事,哪來這麼多感想XD

2022年4月4日 星期一

kobo-btpt 真是個有趣的專案

去年 Elipsa 剛出來時,網路上就有人提到有些藍牙裝置雖然可以跟 Elipsa 連接,但可能送出的事件,不是 Elipsa 有監聽的(這裡指的是閱讀軟體,也就是那個 Qt5 GUI),故無法使用那些裝置來翻頁。因為我本來就有可以順利連線的 Logitech R500,所以也沒有很在意這件事。

今年陸續有人問我藍牙翻頁器的事,詢問為什麼 Libra 2 都不能用?我的第一直覺應該就是藍牙相容性的問題,畢竟連旗艦機種 Elipsa 上的藍牙相容性都 2266,更何況是最便宜的 Libra 2?我當初也覺得應該是翻頁器太便宜,如果是使用 Logitech R500 應該是輕鬆就能搞定。直到有人說他買了 R500 後續機種也不能使用翻頁器後,才引起我的興趣。

本來是想直接去三創測試,但內心覺得可能沒那麼簡單,故最後還是買了一台 Libra 2 回來研究,原本就預期測試完就賣掉,故選擇人氣比較旺的白色機種,坦白說,白色外殼真的是很刺眼,真不知道為什麼大家都說白色好看,根本就就不適合用來閱讀。

一到手就知道 Libra 2 的藍牙沒那麼簡單,R500 光配對就搞了老半天,有時候明明連接上了卻一直顯示未連接,還好過程中發現可以使用 /bin/bluetoothctl 來 debug,才能順利連線,果不其然,我也無法使用 R500 來翻頁。

但因為我之前就知道 kobo-btpt 這個專案,也知道該作者順利使用 8BitDo Zero 2 搖桿來翻頁,故我直覺搞不好可以使用便宜的藍牙滑鼠 + kobo-btpt 就可以順利翻頁。

一開始我的藍牙滑鼠 E-PCG233 可以長出 /dev/input/eventX 裝置,evtest 也可以抓到不同的左右鍵事件,但不論我怎樣設定,kobo-btpt 都沒有反應。

還好,open source 的威力在此就展現出來,下載 source code 研究後,發現設定檔最後一行不能有換行字元,因為程式會以為它是不正確的設定就不把這個裝置加入。

搞定這個後,還是無法順利翻頁,沒關係我們有無敵絕招 printf 大法,在修改程式碼並印出收到的事件後,我才知道 evtest 抓到的 value 欄位是 16 進制,修改之後,果然可以順利翻頁。雖然我買的便宜滑鼠一次會發送兩次事件,導致一次翻頁多頁,但這又是另外一個故事了 ~~

總之,很多事的成功都必須先有先前一點一滴的累積努力,最後才能順利的水到渠成。做事最忌諱一步登天,慎之慎之。

修改 kobo-btpt 原始碼需要知道的事

01. 知道 NickelHook 是什麼。
02. 會基本的 Linux 操作。
03. 知道 Cross-Compiler (Docker - NickelTC)。
04. 知道 /dev/input/eventX 。
05. 看得懂 C/C++ 語言。
06. 知道 QT。
07. 知道 makefile。

上面只要到知道的程度及可,不需到專精,應該就有辦法改 source code 了。

2022/04/05 更新

E-PCG233 這支滑鼠在我的 Elipsa 一樣是按下鍵後會收到兩次事件,但奇怪的是我幫 kobo-btpt 加上的 filter 似乎可以起作用,我的 filter 在過短的時間內,如果收到相同的事件,我會不讓 kobo-btpt 觸發翻頁的動作。


不過同樣的 filter 在 Libra 2 就無法成功,且印出訊息時感覺呼叫 Kobo 藍牙翻頁的函式似乎是非同步呼叫,故訊息印出的順序很怪(後來找到問題了,其實 filter 是有成功的,但我誤把原始的 libbtpt.so 改名後一樣放在 /usr/local/Kobo/imageformat 下,導致 Kobo 同時執行了兩支 libbtpt.so)?

總之,我只是想確定 kobo-btpt 的用途,結論就是只要是可以連接 Kobo 系統並可以長出 /dev/input/eventX 的藍牙裝置,如果遇到無法翻頁,可以透過安裝 kobo-btpt 去監聽使用者註冊的事件,只要收到註冊的事件,kobo-btpt 便會幫我們呼叫 Kobo 底層系統的藍牙翻頁函式(透過 NickelHook)

2022/04/08 更新

kobo-btpt 使用說明(搭配 8BitDo Zero 2 gamepad):

01. 去 kobo-btpt 網站下載 v0.0.2 版的 KoboRoot.tgz。
02. 將閱讀器插上電腦,確認檔案總管可以看到隱藏資料夾。
03. 將下載下來的 KoboRoot.tgz 放到機器的 ".kobo" 資料夾並退出閱讀器,此時閱讀器應該會重開機。
04. 重開機後一樣將閱讀器插上電腦,此時應該可以看到 ".btpt" 資料夾。
05. 將此檔案下載下來並放到 ".btpt" 資料夾,檔名只能是 "8BitDo Zero 2 gamepad",然後將閱讀器重開機並進到藍牙設定頁面。
06. 按下 8BitDo Zero 2 的 X 鍵start 鍵,進入 X-Input 模式後,然後長按 select 鍵進入藍牙配對模式。
07. 配對成功後,回到書本閱讀頁面能夠翻頁就是成功了,不行就在藍牙設定畫面忘記裝置再重新配對。

2022年4月3日 星期日

如何使用 kobopatch-patches

前情提要:
kobopatch 是工具原始碼,kobopatch-patches 是高手針對各系統版本包好的執行檔,可以直接用此工具來依設定檔做 patches 並產生 patched 好的 KoboRoot.tgz 系統更新檔。

01. 去 https://github.com/pgaskin/kobopatch-patches/releases/ 下載最新的 kobopatch release,目前最新版本是 v74,並在 v74 裡面下載對應的系統版本,假設是 4.30.18838,便下載 kobopatch_4.30.18838.zip,裡面會有設定檔及產生 KoboZoot.tgz 系統更新檔的工具。

02. 解壓縮 zip 檔後,src 資料夾裡面會有一個 download_firmware_here.txt 的檔案,去檔案裡面的網址下載對應硬體及系統版本的系統 zip 檔案,並把它放在步驟 01 解壓縮資料夾 src 的資料夾內。

03. 針對要 patch 的項目修改,有兩種方式:一種是用 overide 的方式,直接修改步驟 01 解壓縮資料夾的 kobopatch.yaml 檔案,記得要 patch 的項目前要用 4 個空格,不要用 tab 鍵。另外一種則是直接修改步驟 01 解壓縮資料夾內 src 裡對應要修改的系統檔案的 yaml 檔。

04. 如果電腦是 Windows 系統,直接執行步驟 01 解壓縮資料夾的 kobopatch.bat,假設沒有錯誤,便會在步驟 01 解壓縮資料夾 out 資料夾裡看到 KoboRoot.tgz 及 log.txt,可以從 log.txt 看到是否有正常 patch。

以你的例子要直接修改 src\libnickel.so.1.0.0.yaml,在最後面貼上你找到的解決方式

Enable markup for sideloaded kepubs:
  - Enabled: yes
  - ReplaceBytes:
      Base: "KepubMarkupDelegate::isMarkupSupported(Volume const&)"
      Offset: 390
      FindInstBLX: {SymPLT: "Content::isSideLoaded() const"}
      ReplaceH: 4F F0 00 00

05. 將閱讀器插上電腦,把 KoboZoot.tgz 放到閱讀器內的 .kobo 資料夾內,在電腦退出閱讀器後,閱讀器便會重開機安裝 patch。

2022年3月29日 星期二

Kobo Libra 2 vs Logitech R500

為了測試 Libra 2 這台的藍牙是否真如傳說中的不堪?狠下心來購買了它,一試之下,果然跟傳說中的一樣爛XD

在 debug 過程中,無意間發現了一支程式 /bin/bluetoothctl,查了一下似乎可以用來設定藍牙?好不容易在 unpair 和 pair 的過程中,終於可以成功與我的 Logitech R500 成功連接。


感覺研究研究,搞不好可以找到問題在哪?

另外,使用 logread 讀取 log,可以看到一個錯誤訊息。

Mar 29 23:18:52 bluetoothd[1397]: src/service.c:service_accept() input-hog profile accept failed for EF:06:4D:1A:69:69

雖然藍牙初嘗試不是很順利,但至少我的 KoboPageTurner 可以成功使用,直接使用 Elipsa 觸控封包格式即可,總算不是一事無成。

2022/03/30 更新

比對了一下 Elipsa 和 Libra 2,目前看到有兩個差異,Elipsa 的 kernel 和 Bluetooth management interface 都比 Libra 2 新,感覺是 kernel issue?


Bluetooth management interface 1.9 (1.14).

2022/03/31 更新


雖然不懂藍牙,但這幾天查了一些資料,我覺得問題可能是出現在以下幾個地方:

1. CONFIG_RFKILL kernel 未編譯進去。
2. 一樣是 kernel 哪邊的問題 (uhid)。
3. BT chip 本身的問題 (RTL8723DS vs RTL8821CS)。

看起來似乎不是改改設定就可以解決的事,至少嘗試調整 /etc/bluetooth/main.conf 或是 /etc/bluetooth/input.conf 中的參數,看起來都沒有幫助。

2022/04/01 更新

無意間在網路上看到一份 porting guide,看起來要支援 HOG,kernel 應該要打開一些功能,就不知道 RTL8723DS 本身是否有支援就是?假設不是 BT chip 的問題也不是 Kobo 為了市場區隔的問題,後續只要系統更新,應該就能支援翻頁器了。


另外,大部份的 Linux 使用的 Bluetooth Stack 都是 BlueZ,其 daemon 是 bluetoothd,路徑為 /libexec/bluetooth/bluetoothd,在 Kobo 下如果嘗試要修改設定,可以使用 kill 砍掉它,再重新背景執行 deamon 即可。

晚上使用 bluetoothd -d -n 開啟 debug 訊息,可以看到 Elipsa 對待 R500 的方式。

profiles/gap/gas.c:gap_probe() GAP profile probe (EF:06:4D:1A:69:70)
src/service.c:change_state() 0x183a8c8: device EF:06:4D:1A:69:70 profile gap-profile state changed: unavailable -> disconnected (0)
profiles/input/hog.c:hog_probe() path /org/bluez/hci0/dev_EF_06_4D_1A_69_70
src/device.c:gatt_debug() (chan 0x1837f58) ATT PDU received: 0x1b
src/device.c:gatt_debug() (chan 0x1837f58) ATT PDU received: 0x1b

上面最後兩行是按下 R500 翻頁鍵後 Elipsa 吐出來的訊息,Libra 2 雖然無法使用 R500,按下翻頁鍵後一樣能吐出相同的訊息,真的覺得更新 kernel 應該就可以正常了?

另外,Bluetooth 的 spec 看起來是公開的,目前是 Core_v5.3。

2022/04/03 更新

前幾天買了一支便宜的藍牙滑鼠,原本以為使用 kobo-btpt 專案就可以正常使用,但還是不如預期,留個 log 當記錄。


晚上又認真比對了 Elipsa 和 Libra 2 配對 R500 的行為。

Elipsa:
bluetoothd 沒有錯誤訊息,會長出一個 /dev/input/eventX 的裝置,使用 evtest 可以成功補捉左右鍵的 scan code。

Libra 2:
bluetoothd 有錯誤訊息,無法長出 /dev/input/eventX 裝置,故錯誤訊息其實不是斷線,pair 和 connect 都有成功。

2022/04/04 更新

evtest 的 value 是 16 進位數字,在修正了此錯誤後,終於可以使用我的藍牙滑鼠(E-books E-PCG233)翻頁,真是得來不易呀。雖然這個滑鼠按下一次鍵會發送 2 次 event,但我只是想要研究 Libra 2 的藍牙,故對我來說,這個學習已經完成XD

2022/04/05 更新

昨天順手在 kobo-btpt 裡加了一個 filter,避免過短時間內收到相同的 event,不過在 Libra 2 無法成功,且呼叫 Kobo 藍牙翻頁的函數感覺是非同步?但同樣的 filter 在 Elipsa 就可以正常工作。

晚上又認真的在 Elipsa 上試了一下 R500,使用 evtest 補捉的結果,一樣是按一下鍵會送 2 次 event,既然是一樣的行為,那為什麼 Kobo 只會翻一次頁,我想這裡面可能還有我不知道的事在?

Event: time 1649163457.612279, type 4 (Misc), code 4 (ScanCode), value 70050
Event: time 1649163457.612279 ------- Report Sync ------ x: 400 y: 80 p: 0 ------------
Event: time 1649163457.657992, type 4 (Misc), code 4 (ScanCode), value 70050
Event: time 1649163457.657992 ------- Report Sync ------ x: 400 y: 80 p: 0 ------------

如果要我猜的話,會不會 1 個是按下事件,1 個是放開事件?故 kobo-btpt 應該要有能力去判斷放開事件,可能要從別的 event,因為 type MISC 的 press value 應該都一樣,以上面例子來看都是 0x70050。不過問題來了,evtest 只有顯示出 Report Sync 並未顯示出其他 event ,會不會是 evtest 並沒有能力解析,故才沒有顯示呢?

2022/04/06 更新

太相信 Kobo 內附的 evtest tool 了,明明藍牙滑鼠有其他更適合的 event 可以監聽,詳此篇

最後正確的設定檔如下:

prevPage 1 272 1
nextPage 1 273 1

2022/04/07 更新

昨天晚上本來以為已經妥當了,沒想到用了 EV_KEY  後,行為還是不符預期,一樣會觸發翻頁兩次,再加上剛到的 8BitDo Zero 2 gamepad 在 Libra 2 也是時好時壞,有時候可以長出 device,有時候又不行,如果不是像我一樣 telnet 進去閱讀器的人,一定不知道到底發生了什麼事?

就在正準備睡覺的時候,熊熊想到,之前改了 kobo-btpt source code 來 debug,把原始的 libbtpt.so 改個名字,一樣放在 /usr/local/Kobo/imageformats 裡面,這個資料夾裡的 .so 檔,應該是會被 Kobo 自動載入,故我其實是同時在跑兩支 libbtpt.so 而不自知,難怪之前的 debug 訊息才會覺得如此之怪,移除之後,果然一切恢復正常,搞定收工(還是不應該使用 EV_MSC type,因為會收到兩次事件,之前的問題是組合技,既用了不該用的 type,也執行了兩支 libbtpt.so)。

2022/04/08 更新

找到檢查 Linux Kernel Config 的方法了(/proc/config.gz),看起來 Libra 2 禁用了很多 Elipsa 有打開的項目,就不知道是 Kobo 為了市場區隔,還是只是單純的因為 Libra 2 的藍牙晶片不支援的緣故呢?


2022/04/09 更新

昨天晚上下班後決定要來編譯模組了,目標放在 uhid.ko。

CONFIG_HIDRAW=y (這個也許沒影響?)
CONFIG_UHID=m


使用環境

Windows 10 + Docker Desktop (ghcr.io/pgaskin/nickeltc)
linux-4.1.15.tar.gz
Copy /proc/config.gz of Libra 2 to /linux-source/.config

make ARCH=arm CROSS_COMPILE=/tc/arm-nickel-linux-gnueabihf/bin/arm-nickel-linux-gnueabihf- oldconfig
make ARCH=arm CROSS_COMPILE=/tc/arm-nickel-linux-gnueabihf/bin/arm-nickel-linux-gnueabihf-

中間有遇到找不到 bc 及 lzop 兩個執行檔錯誤,我檢查一下 Windows 10 Docker Desktop,感覺底層還是 Windows 的那個 Linux Subsytem(WSL),故我直接複製 WSL 裡的這兩個執行檔及相關的 so 檔進去我的 docker instance,然後建立 soft link(ln -s liblzo2.so.2.0.0 liblzo2.so.2 ... ),看起來這樣就過了?雖然我前後總共重 build 了 3 次就是!

感謝有 make,只有初始檢查比較久,編譯過的都不用再重新編譯,但我的 8 歲老筆電果然很吃力呀,打文章的同時,整個程序都還沒跑完,我只是先偷跑去 /linux-source/drivers/hid 下,把 build 好的 uhid.ko 複製出來測試XD


阿母,我成功了!我的 Logitech R500 終於可以爽爽用了,要感謝的人太多了,就感謝天吧XD


2023/07/02 更新

6 月份買了一台 Clare 2E,為了取代電池快卦掉的 PW3,試了一下,藍牙跟 Libra 2 有一樣的問題,由於 kernel 版本一樣,直接拿原本的 solution 來用,完全無痛接軌。

另外,我的 KoboPageTurner 專案一樣可以用在 Clare 2E 上,raw data 使用 Elipsa 格式,觸控座標設成跟 Clare 一樣即可。

2022年3月21日 星期一

程式人最開心的事

kobofileserver 已經開發完快 3 個月了,用到現在一直覺得很滿意,雖然對不懂程式的人在初期安裝上有些困難,但我覺得這是非戰之罪,為了 patch Kobo 系統,不得不透過 NickelMenu 這樣的啟動器來啟動第三方軟體。也因為這樣的緣故,我也很懶得去推廣,只有剛好看到有關的論壇討論才會稍微提及這個專案。

前幾天無聊用關鍵字查詢一下,居然看到有人在 reddit 提及這個軟體,而且還提了兩次,看起來這個網友應該是覺得 kobofileserver 專案還可以吧XD

我想這應該也是程式人最開心的一件事吧 ~~


2022/04/08 更新

感謝 usimon 的使用,在 usimon 的建議下,新增了上傳多檔的功能,感覺還行,雖然我不太會用到就是XD