pretty code

顯示具有 Kobo 標籤的文章。 顯示所有文章
顯示具有 Kobo 標籤的文章。 顯示所有文章

2025年6月28日 星期六

山醫命相卜

放假這兩天本想繼續解決工作的問題,無奈目前沒有什麼好想法,只能回過頭再看一次文件及 Testbench!

好久沒買雜書了,最近都在看 Vim,應該要調劑一下身心了,雖然我還是很喜歡 Vim 沒錯XD

順便巡一下 Kobo 網頁,是否又再更改 HTML 結構!

2025年6月14日 星期六

Kobo 網頁又改版了

我想這個標題未來應該會一直出現XD

不得不說,人家讀墨網站就沒有那麼多問題,就你 Kobo 喜歡將 HTML  改來改去,真是腦袋有洞?


罵歸罵,還是要看一下如何修改,雖然我現在已經很少看工作以外的書了?


這次顯示購買記錄一頁有幾個項目的地方又從一行改從跨行了?

幸好,Javascript 的 regex 似乎可以支援跨行,即使我沒有加上 m 選項?

總之,現在可以就好了,我也懶得查了?

畢竟,現在國事如麻,百廢待興呀XD

2024年9月8日 星期日

經營 Github 專案還真需要愛

當初開發了幾個 Kobo 專案,其中 KoboPageturner 已經不太用了,自從去年參考 KOReader issue 討論串後,已經可以直接用我的 Logitecn R500 在 KOReader 翻頁,再加上我的自製硬體翻頁器因為拙劣的焊接技術已經燒掉了,故這個專案可能只剩沒帶翻頁器時,臨時可以用手機充當翻頁器用。

至於其他兩個專案,Clare 2E or Libra 2 一定要上我的 patch 不然不能用藍牙,KoboFileServer 則是拿來 Wi-Fi 傳檔用,故還算是我還蠻常用的兩個專案。

今早收到 KoboFileServer 的 css patch,照該網友說法,似乎在小螢幕上會有問題?

由於我也不是專門寫網頁的人,故我也不太懂我原來的 css 哪邊會有問題,我猜應該是用 pixel 指定字型大小?

我這已經是夠冷門的專案了,到現在也才只有 3 個人發 patch,但想到還要回覆就有點懶XD

要回覆前,我得先自己測試,如果需要編譯我還得準備環境,畢竟這已經是兩年多前的專案了,我的電腦還有沒有環境我都不確定了?

結論就是,要經營 Github 專案還真需要愛呀,還好我不靠這個吃飯,有沒有 stars 我也不會很在意?

左邊是我原本的,右邊是網友改的,本想用抓圖方式,還要搞定無痕模式抓圖的限制,不然就是要裝另一套瀏覽器,想想就懶,直接開筆電相機抓圖就好XD


2024/09/12 更新

前天該網友有回信,原來所謂的小螢幕超出是指上下會出現 scroller bar,想了一下,既然有人有需求,乾脆加上 button 切換,馬上 Google 一番,搞定收工。

雖然我自己是比較喜歡原本的,但該網友有讓表格的字離邊框遠點,確實是比較好看,但預設畫面限縮在正中間導致字體變小,個人覺得是對老人比較不友善XD

2024年9月7日 星期六

消失的記憶

一直覺得有哪件事忘了記錄,剛剛終於想起來了。

我手上 Kobo Elipsa 裝的 Plato 版本似乎有問題,只要沒回到 Kobo 本身 OS,即使 Plato 有進入休眠,但隔天電就會被耗光,不知道是不是跟舊版有關就是了?

又或許進入 Plato 後,預設會開啟 Wi-Fi?導致電被耗光?

我也懶得深入追究了,目前先記得有這回事就好!

2024年7月4日 星期四

Kobo Expense 又不能用了

Kobo 網頁的工程師真應該要打屁股,CSS 語法一直換來換去,照道理不應該改 CSS 名字而是直接改實作才合理。

只是多了一個 bold 屬性就導致我的 Chrome Extension 又失效了。


決定以後都用我自己的 local 版就好,這樣修改也比較方便。

2023年11月23日 星期四

心有餘而力不足

趁著洗澡前無聊巡一下田水,兩個開發過的 Chrome Extension 都宣告陣亡,其實應該是 3 個,但我不想面對了XD

Kobo Expense 好一點,程式居然可以提醒網頁改版?我都忘了我怎樣判斷的!


Readmoo Expense 就有點糟糕,不管怎樣都只抓到第 1 頁資料,應該是判斷總頁數的地方需因應 HTML 改版重抓?


網頁爬蟲相關的 code 就是這樣討厭,每次改版都要跟著因應!

先知道這件事就好,放張小老婆的圖好記得回來追蹤XD


有沒有這麼可愛(被老婆毆飛中…)

2023/11/25 更新

星期六還是輕鬆一下好了,花了快 2 個小時改好 regex 並上傳到 Chrome Store 等待審查,我終於又可以知道購書金額了。

Kobo Expense


Readmoo Expense


晚上 8 點半左右就收到審查通過的電子郵件,速度還蠻快的,看起來還不用 5 個小時。

雖然這次更改還算快,那是因為之前 Kobo Expense 上架時正逢 Manifest v3 更動,權限與新 API 呼叫已經跟著修改,故這次只要專注在 regex 本身即可,但難保下次還要很久之後才會再有需求回過頭來修改,到時可能連 Chrome Extension 架構都忘光了?

最近在補交接文件,連自己寫過的文件都忘了有這回事,人的記憶力確實很不可靠,趁此機會將這兩個 Chrome Extension 的架構留下記錄。

js/popup.js 是按下按鈕後會出現的統計報表主體用的 js,裡面也是負責觸發 js/gethtml.js 去詢問網頁的地方,另外,popup.js 裡的 chrome.runtime.onMessage.addListener 負責接收 gethtml.js 傳過來的訊息,gethtml.js 則是透過 chrome.runtime.sendMessage 來傳遞兩種訊息,一個是 action: getSource,另一個則是 action: progress。

getSource:
1. HTML 格式正確,parsing 到需要的資料,回傳的會是一個 array,裡面元素是一個 object,結構模擬 Readmoo 原本 API 的回傳資料結構,故 popup.js 裡面不管是 Readmoo Expense 或是 Kobo Expense 的 code 都長得一樣,因為當初 Kobo Expense 就是拿 Readmoo Expense 來改的,故花費心力很少。

obj = {
        purchase_date: "2018-12-28",
        price: 123
}; 
2. parsing HTML 失敗,回傳的就是錯誤訊息。

progress:
顯示目前處理了幾頁,例如 1 / 3、2 / 3、3 / 3。

另外,Regex 需要考量的無非是一頁有幾個項目,總共有幾頁要拜訪,還有購書日期,購書金額如何透過正規表示法取得,這個只要 review gethtml.js 就可得知,但因為兩家書商網站寫法不同,故只能各自處理。 

Readmoo
Readmoo 購書金額明細頁面是 API,回傳格式是 JSON,只要結構不變,這裡不用特別管它,我們只要知道總共有幾頁即可。

Kobo
Kobo 購書金額明細頁面是 HTML,且購書金額跟日期都不是寫在一行,故需要兩個 regex 分別抓取。另外 Kobo 可以決定一頁顯示幾個項目,需要知道這個資訊以及對應這個資訊下共有幾個頁面,故這裡也需要兩個 regex 來處理。最後則是要組成購書金額明細頁面的 URL,這個似乎每次改版變動都很大,直接在第 x 頁的連結上按複製網址來研究即可。

2023年11月13日 星期一

才下眉頭,卻上心頭

昨天在回父母家前終於把上上星期打好的管委會舊資料電子檔再核對一次,只有兩年半的資料也花了我了六日不少時間,雖說在打舊資料時就會核對一次,也趁使用 Python tool 填上分析總表時自動重新計算一下每月活存餘額作檢查,但沒有再核對一次,心裡總覺得不踏實,畢竟資料正確性才是第一重要, 目前總算是搞定了一件事。

因為一直把這件事放在心上,導致其他想到的事情都只能先用頭腦當暫存區,再加上本週已經開獎,因為沒時間原本已經想放棄了,後來還是覺得有點可惜,記錄一下自己的思路避免以後再次回想。

01. 退出 KOReader 後,bluetooth 無法使用問題。

我能理解開發團隊為什麼要 kill bluetoothd,一來可以省電,二來希望回去 Kobo Nickel 時可以讓 bluetooth 正常,無奈這招行不通。

我想以那團隊的能力 review chip spec 功力一定是不在話下,連他們都沒想到的事代表真的不可行嗎,還是只是純粹對藍牙翻頁器沒有興趣?畢竟會看電子書的人分為兩派,一派很喜歡用翻頁器,另一派卻對翻頁器嗤之以鼻XD

首先,需先釐清問題所在,假設是硬體問題,想辦法 reset chip 再 init 一次應該就可以了?

如果只是 bluetooth status 不同,導致 Nickel 認為有問題而不使用藍牙,是否可以去 /etc/rule.d 看開機時對藍牙做了什麼事,只要再呼叫一次該 script 即可?

02. 點雲點數的差異是如何而來。

雖然還未購買 3D scanner,但我內心總隱隱覺得我的土砲結構光系統跟幾萬塊的消費型機種應該沒有到 100 倍的差距?

回想一下,點雲起手式是什麼,不就是從 pixel cord decode projector cord,故 1 個 pixel 只要是 valid,就會作三角測量產生 1 點才對

換句話說,1920 x 1080 的 camera resolution,假設 valid mask 是 60%,則一次的總點數就是 1920 x 1080 x 0.6 = 1,244,160。

KEYENCE 這樣厲害的廠商一定是重覆拍照拼接或是做額外插值才能得到那麼豐富的點雲資訊?(印象中 33 mm size chip 似乎就拍了 10 幾張?用有 1000 多顆錫球那面來看,點雲點數約為 551 萬

以後如果請廠商 demo 還是得先有基礎知識才不會霧裡看花,什麼重點都沒看到

2023年10月23日 星期一

Use pure bluetooth in KOReader v2021.10.1

KOReader is an awesome application on Kobo device. The architecture of application is very flexible.

I follow the guides of NiLuJe to modify source code a little to let my Kobo Elipsa to use bluetooth.

The only file you modify is koreader/frontend/device/kobo/device.lua

01. Add "hasKeys = yes," in KoboEuropa object.

-- Kobo Elipsa
local KoboEuropa = Kobo:new{
    model = "Kobo_europa",
    isSunxi = yes,
    canToggleChargingLED = yes,
    hasFrontlight = yes,
    hasKeys = yes,
    hasGSensor = yes,
    canToggleGSensor = yes,
    pressure_event = C.ABS_MT_PRESSURE,
    misc_ntx_gsensor_protocol = true,
    display_dpi = 227,
    boot_rota = C.FB_ROTATE_CCW,
    battery_sysfs = "/sys/class/power_supply/battery",
    ntx_dev = "/dev/input/by-path/platform-ntx_event0-event",
    touch_dev = "/dev/input/by-path/platform-0-0010-event",
    isSMP = yes,
}

02. Modify key code for your pageturner, I use Logitech R500.

-- NOTE: For the Forma, with the buttons on the right, 193 is Top, 194 Bottom.
    self.input = require("device/input"):new{
        device = self,
        event_map = {
            [35] = "SleepCover",  -- KEY_H, Elipsa
            [59] = "SleepCover",
            [90] = "LightButton",
            [102] = "Home",
            [105] = "RPgBack",
            [106] = "RPgFwd",
            [116] = "Power",
            [331] = "Eraser",
            [332] = "Highlighter",
        },
        
03. Open your pageturner manually. My pageturner is event4.

-- NOTE: usb hotplug event is also available in /tmp/nickel-hardware-status (... but only when Nickel is running ;p)
    self.input.open("fake_events")
    self.input.open("/dev/input/event4")
    
Enjoy it.

------------------------------------------------------------------------

The issue of entering Kobo again is that we can't use bluetooth anymore. The below messages are from logread command. Maybe we can google these keywords to get the solution ?

Oct 23 20:49:02 nickel: (   144.927 @ 0x374c538) QObject::disconnect: Unexpected null parameter
Oct 23 20:49:02 nickel: (   144.927 @ 0x374c538 / ui.warning) cancelled before full sync has started
Oct 23 20:49:02 nickel: (   144.977 @ 0x374c538 / libraryLayout.warning) void AbstractLibraryController<C>::layout(bool) [with C = BluetoothDevice] view is null
Oct 23 20:49:02 nickel: (   144.999 @ 0x374c538 / libraryLayout.warning) void AbstractLibraryController<C>::layout(bool) [with C = BluetoothDevice] source has no rows
Oct 23 20:49:02 nickel: (   145.000 @ 0x374c538 / libraryLayout.warning) void AbstractLibraryController<C>::layout(bool) [with C = BluetoothDevice] source has no rows
Oct 23 20:49:53 bluetoothd[3342]: Endpoint unregistered: sender=:1.2 path=/org/bluez/hci0/A2DP/SBC/Source/1
Oct 23 20:49:53 bluetoothd[3342]: Endpoint unregistered: sender=:1.2 path=/org/bluez/hci0/A2DP/SBC/Source/2
Oct 23 20:49:57 bluetoothd[3342]: Terminating
Oct 23 20:49:57 nickel: (   200.505 @ 0x374c538 / bt.warning) void BluetoothManager::objectManagerInterfacesRemoved(const QDBusObjectPath&, const QStringList&) adapter already destroyed
Oct 23 20:49:57 bluetoothd[3342]: Stopping SDP server
Oct 23 20:49:57 bluetoothd[3342]: Exit
Oct 23 20:50:13 bluetoothd[3352]: Bluetooth daemon 5.63
Oct 23 20:50:13 bluetoothd[3352]: src/main.c:check_options() Unknown key InitVolume for group General in /etc/bluetooth/main.conf
Oct 23 20:50:13 bluetoothd[3352]: Starting SDP server
Oct 23 20:50:13 bluetoothd[3352]: Bluetooth management interface 1.14 initialized
Oct 23 20:50:13 bluetoothd[3352]: src/adapter.c:reset_adv_monitors_complete() Failed to reset Adv Monitors: Unknown Command (0x01)
Oct 23 20:50:23 bluetoothd[3352]: Failed to set mode: Failed (0x03)
Oct 23 20:50:23 bluetoothd[3352]: Player registered: sender=:1.4 path=/com/kobo/bluetooth/MediaPlayer
Oct 23 20:50:24 bluealsa: Couldn't get HCI version: Network is down
Oct 23 20:50:24 bluetoothd[3352]: Endpoint registered: sender=:1.8 path=/org/bluez/hci0/A2DP/SBC/Source/1
Oct 23 20:50:24 bluetoothd[3352]: Endpoint registered: sender=:1.8 path=/org/bluez/hci0/A2DP/SBC/Source/2
Oct 23 20:50:31 bluetoothd[3352]: Endpoint unregistered: sender=:1.8 path=/org/bluez/hci0/A2DP/SBC/Source/1
Oct 23 20:50:31 bluetoothd[3352]: Endpoint unregistered: sender=:1.8 path=/org/bluez/hci0/A2DP/SBC/Source/2

2023年10月15日 星期日

放空的六日

連續兩個假期都在搞結構光系統,剛好把這三季學到的東西做個總結,雖然最後為了孩子的學習還是多買了一台 webcam,個人還是覺得收穫良多!

這次六日便打定主意完全不煮飯好好來放鬆一下,開開心心來打我的暗黑 2 重製版,也順利的讓我的亞馬升到 93 級。

時間來到星期日的晚上,離睡前還有點時間,來試試 KOReader issue #9059 提到的修改 lua code 使用藍牙翻頁器的討論串好了。

果不期然,事情沒那麼簡單,過程中需要一些指令來做驗證,奈何相關指令散落在我 blog 中的好幾篇文章中。

還是整理一下好了,下次就不會那麼累了。

01. logread

logread 可以來看訊息,一些 third-party app 也會吐訊息在這裡,配合 grep 檢查訊息。

02 藍牙相關

bluetoothctl  (show, info, devices, connect) 配合括弧裡的參數可以來確認藍牙狀態。
不清楚有哪些參數可以打 bluetoothctl help。

/libexec/bluetooth/bluetoothd is a bluettooth daemon
可以砍掉此 process,重新執行 /libexec/bluetooth/bluetoothd -d -n 開啟 debug message。

03. Linux input subsystem

cat /proc/bus/input/devices 可以看到系統長出哪些 /dev/input/eventX 裝置。

04. third-party .so path

像 libbtpt.so 就位在 /usr/local/Kobo/imageformat 裡面,直接砍掉就是 uninstall 了。

05. KOReader debug message

logger.info("xxxxxxx") 便可以在 koreader/crash.log 中看到相關訊息。


2023/10/19 更新

在 KOReader 加入一些 debug message,目前看來在我 Elipsa 上的 v2021.10.1 版本,啟動時並不會砍掉 bluetoothd,故我的藍牙連接是正常的,在 Input:handleKeyBoardEv 確實也有看到我的 R500 按鍵的訊息,感覺是在更上層的地方,沒有人去處理 ?


2023/10/23 更新

果然是沒有人處理,幸好 KOReader 是一個很有彈性的軟體,加個參數騙過它即可XD

2023年8月26日 星期六

測試一下 Kobo Expense

最近 Chrome Store 似乎又更改政策了,不過似乎跟我的專案沒啥關係?

趁此機會再一次確認 Kobo 網頁是否又亂改版了XD


今年雖然到目前為止的購書金額跟去年差不多,但 7 月的購買金額中,其實有很多本工作相關原文書,故繁體中文書其實並沒有買很多,可見,我真的是被數學搞到人生都走味了?

還好我的 Code 看起來一切正常,這也是寫網頁爬蟲最辛苦的地方,網頁如果改版,就必須要跟著修改,這一點讀墨就做得比較好,購買記錄是以 API 形式回傳,比較不會跟 HTML or CSS 內容有關!

今天是 2023/08/26,我放上 github 的 code 有針對之前改版修改,但我在 Chrome Store 的版本並未更新,反正沒人用我也懶得更新,github 的東西起碼還有五六十顆星星,Chrome Store 的幾個專案明明也有超過 50 個人安裝,但卻連一顆星都沒有,真是沒勁XD

2023年8月23日 星期三

vcpkg path too long issue

好不容易完成每日計劃表,正準備開始我的 Kobo EInk-Bro 專案時,就遇到第一個問題。

雖然我需要 cross compiler,但我可以先在 Windows 下測試 ChatGPT 幫我寫好的 Qt 小程式,把大工作切成小工作是一件好習慣。

我在 C:\src\vcpkg 預設目錄下編譯 qt5-webengine 時,會出現以下錯誤:

CMake Warning at ports/qt5-webengine/portfile.cmake:5 (message):
  The qt5-webengine source was will be extracted to
  C:/src/vcpkg/buildtrees/qt5-webengine , which has more then 35 characters
  in length.

就像字面上意義說的,路徑名稱過長,印象中新 Windows 早就沒 255 這個限制了?

時間寶貴,我還在找殺死大衛朗基羅的兇手,懶得看它的 cmake 檔案在抱怨什麼,另外開一個 C:\vcpkg 路徑,重 build 所有函式庫。

由於編譯需要一點時間,等待結束後再來更新是否有解決?

2023/08/24 更新

總共花了 22 個小時編譯,辛苦都是值得的。另外,在回捲查看相關訊息時,似乎看到 qt5-webengine 對硬體有些要求,記錄一下!

Installing 37/37 qt5-webengine:x64-windows...
Building qt5-webengine:x64-windows...
-- qt5-webengine requires a lot of free disk space (>100GB), ram (>8 GB) and time (>2h per configuration) to be successfully build.
-- As such qt5-webengine is currently experimental.
-- If qt5-webengine fails post build validation please try manually reducing VCPKG_MAX_CONCURRENCY and open up an issue if it still cannot build.
-- If it fails due to post validation the successfully installed files can be found in C:/vcpkg/packages/qt5-webengine_x64-windows
-- and just need to be copied into C:/vcpkg/installed/x64-windows
-- Downloading https://sourceforge.net/projects/gnuwin32/files/gperf/3.0.1/gperf-3.0.1-bin.zip/download -> gperf-3.0.1-bin.zip...
-- Downloading https://www.python.org/ftp/python/2.7.18/python-2.7.18.amd64.msi -> python-2.7.18.amd64.msi...
-- Found external ninja('1.10.2').
-- Downloading https://download.qt.io/archive/qt/5.15/5.15.10/submodules/qtwebengine-everywhere-opensource-src-5.15.10.tar.xz;https://mirrors.ocf.berkeley.edu/qt/archive/qt/5.15/5.15.10/submodules/qtwebengine-everywhere-opensource-src-5.15.10.tar.xz -> qtwebengine-everywhere-opensource-src-5.15.10.tar.xz...
-- Extracting source C:/vcpkg/downloads/qtwebengine-everywhere-opensource-src-5.15.10.tar.xz

目前雖然可以成功編譯出執行檔,但會抱怨找不到 QtWebEngineProcess.exe,稍微找了一下,位在下列這個路徑 C:\vcpkg\installed\x64-windows\tools\qt5,雖然過了這一關,執行時又會觸發 Exception,看起來跟找不到 locales 語言設定檔有關,快速 Google 一下,Qt5 使用 QtWebEngineProcess.exe 做為 WebView 的橋樑,故佈署時有些眉角要注意,我猜可能跟處理 request 或是跟 UI 渲染有關,一時半刻還沒時間處理,目前先這樣。


關關難過關關過,我對 C++ 函式庫早就免疫了,一次就能成功我才會嚇到XD

QtWebEngineProcess.exe 需要 qtwebengine_locales 這個資料夾並放在程式根目錄的 translations 資料夾裡,另外還需要一個 resources 的資料夾,可能是 vcpkg 沒有幫忙 handle 這塊,故不像 DLL 一樣會複製一份到我的編譯資料夾內,這也簡單,直接在 vcpkg 搜尋並複製到正確的位置即可。

事情還沒結束,好不容易可以執行起來,並沒如我預期的去瀏覽網頁並顯示在 QWebEngineView 元件上,看了一下 console,又有一個錯誤如下:

QOpenGLShader::compile(Fragment): ERROR: 4:1: 'textureSampler' : syntax error syntax error

*** Problematic Fragment shader source code ***
#version 110
#ifdef GL_KHR_blend_equation_advanced
#extension GL_ARB_fragment_coord_conventions : enable
#extension GL_KHR_blend_equation_advanced : enable
#endif
#define lowp
#define mediump
#define highp
#line 1
varying highp vec2 uv;uniform sampler2DRect textureSampler;uniform bool swizzle;uniform highp float opacity;void main() {   highp vec4 tmpFragColor = texture2DRect(textureSampler,uv);   tmpFragColor.a *= opacity;   gl_FragColor = swizzle ? tmpFragColor.bgra : tmpFragColor;}
***

這次倒真的是 Qt5 的鍋了,居然會跟 Intel 顯示卡有關,詳此網頁

這個問題已經在去年 09/14 修正,修正的版本是 5.15.11。

查了一下 vcpkg 維護的版本,居然是 5.15.10,有沒有這麼背呀?


再來我需要想想下一步要如何做了?

2023/08/25 更新

昨天下班前查了一下,vcpkg support list 中有 Qt6 版本可以安裝,名稱為 qtwebengine,只要針對這項安裝,其他相依 vcpkg  會幫你搞定,這也是我一直推薦在 Windows 下用 vcpkg 來管理 C++ 函式庫的原因,不用從一堆 README 中找到相關的編譯設定(雖然很多時候還是會有問題,但就只能 by 問題看 log 來解)。

早上滿心期待的要看到安裝成功的畫面,沒想到連一半都沒安裝完畢便又遇到 qtbase 安裝問題,從 log 中看到有此錯誤:

ERROR: C++11 <random> is required and is missing or failed to compile.

稍微 Google 一下,有人說是 Visual Studio 16 2019 generator is not supported.

我的媽呀,那篇文章是 2020 年的,現在都民國哪一年了,居然還有這個問題?

我決定跳去 Linux 作業環境了,不然猴年馬月我才能完成第一步,deadline 剩沒幾天了。

順帶一提,Qt 似乎開始被很多人不爽了,因為下載又需要帳號了,我個人也沒那麼喜歡 Qt,要不是 Kobo 底層使用到它,我也不需要用它來開發程式,偏偏 Kobo EInk-Bro 又需要 GUI,不然我早就爽爽用 Golang 來寫了,老天爺有必要這麼搞我嗎?明明我昨天才買了一包愛心餅乾呀XD 

又要思考下一步了…

2023/09/01 更新

Linux 下安裝也不是很順利,故之前試了一下就沒試了。

雖然原本的目標已經過期,但這種事急不得,有開始並且持續有進度,對白天要上班晚上還有一堆事要忙的我來說,我覺得已經很棒了XD

今天將之前 build 好的程式拿回家裡電腦嘗試,由於筆電是有 NVDIA 顯卡,故確實可以正常執行無誤,只是啟動速度有夠慢。另外,UI 似乎沒有拉好,WebView UI 元件並沒有如我預期的顯示畫面,這部份還要再確認一下。

2023年7月2日 星期日

Linux shell script 對換行字元真的很敏感

終於還是讓我新買的 Kobo Clare 2E 可以爽爽的用 Logitehch R500 翻頁器了!

原本以為是不是 github 某網友參考我 Kobo Libra 2 build 出來的 uhid.ko 有問題,今天居然福至心靈發現,原來是我的 run.sh 不是拿我之前為 Libra 2 寫好的檔案,而是直接使用文字編輯器複製貼上指令的緣故,由於我的工作環境是 Windows 作業系統,故換行字元會比 Linux 多了一個 \r。

shell script 遇到這個 Windows 獨有的換行字元會不開心,導致 insmod 的指令沒有執行,在手動砍掉句尾 \r 後,Logitech R500 也順利的在 Kobo Clare 2E 上使用。

不只如此,我的 KoboPageTurner Wi-Fi 翻頁器以及 kobofileserver 專案也是可以順利的執行,這下就只差開發 Kobo EInkBro 了?

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月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

2022年2月19日 星期六

Kobo Elipsa 待機三四天後沒電問題分析

這個問題大概發生了至少三次!我待機的時候都會關掉 Wi-Fi 與自動同步,故應該不是這兩個原因影響。

記得網路上有人說過第三方軟體有可能會影響待機耗電,我目前安裝的有:

NickelMenu
FBInk
KOReader
Plato
KoboPageTurner
kobofileserver

後兩個是我自己開發的軟體,平常不會自動啟動而是透過 NickelMenu 選單啟動,故應該跟這兩個軟體無關,同理還有中間那兩個 PDF 閱讀軟體,所以基本上可以排除後面四個。

至於 NickelMenu 會 Hook 到 Kobo 系統,理論上是寄生在 Kobo 系統內,故休眠時應該沒有任何動作。

而 FBInk 是去動 framebuffer 做一些顯示,故應該也與它無關才對。

我個人比較傾向是 Kobo 的 Bug,但我懶得整個 reset 測試,故也無法百分之百肯定?

最後一個方法就是寫支小程式,定時 5 分鐘記錄一下 CPU or RAM 使用排名前十名的 processes,也許就可以知道是哪些 processes 在作怪啦!

講是這樣講,但我年後上班後除了工作的程式,下班後都沒什麼心情再寫程式了,都是這個爛天氣害我不太想動XD

2022/02/20 更新

雖然還不想寫程式,但還是可以做些前置作業。在正常的 Linux 可以用 ps 來排序 processes "ps -o pid,pcpu,comm,rssize",但 Kobo 這種的 Embedded Linux 則是用 busybox 來取代 Linux 常用的指令,故並沒有 pcpu 可以用。

雖然我們可以改用 top output 來取得 CPU 使用率的排序,但據我測試的結果,感覺頻繁的使用 top 指令,也許會改變我本來想要監控的目的,目前暫時有點兩難。


2022/05/18 更新

05/13 對完信用卡帳單後就沒有關過機了,今天打開看電力還剩下 88 %,看起來似乎沒有耗電的問題了?目前版本為 4.32.19501 (2022/04/14)。

要說跟以前不一樣的地方?差別在這次開機還未使用過 Plato 等軟體,當然 NickelMenu 是一直都在的,因為它在開機時就會 hook 到 Kobo 系統!

改天嘗試使用過 Plato 後不關機再看會怎樣?

2022/06/01 更新

看起來 19501 新版本有解決耗電問題,即使有用過 Plato,在不關機的狀態下,過幾天再開的電力看起來都還算正常。

2022年1月29日 星期六

Use Qt5 on Kobo

從 Qt 5開始,不像 Qt 4 擁有一個 Qt Windows System (QWS),取而代之的是 Qt Platform Abstraction (QPA),這是為了方便移植 Qt 去各個平台。

Kobo 為閱讀器軟體寫了一個 QPA,名稱是 kobo,故可以看到 Nickel 啟動時,會帶參數 "-platform kobo" 來啟動相關程式。


我們想要撰寫自己的 QPA,可以參考下面。

官方資料,目前資料不多,只能看 code


網友寫的


曾試著使用 Kobo 自己的 QPA,要設定變數 export QT_PLUGIN_PATH=/usr/local/Kobo,雖然有寫了一個簡單的 Hello World App,但啟動時看不到任何視窗,也許如國外網友所說,QPA 跟 Nickel 綁得太緊無法直接拿來使用。

看來還有很長一段路要走 ~~~