pretty code

2020年7月17日 星期五

kepubify not an epub error

剛剛在測試轉檔時,kepubify 又出現了 "not an epub" error,記得上次出現錯誤是在幫母親轉佛經的時候,而這次轉檔的書,是從某家書商購買的,理論上應該是不會有缺少 "META-INT\container.xml" 這支檔案的情況。

實際檢查後,這支檔案確實存在,其內容有關書本描述檔的資訊也沒錯,故不禁讓我百思不解?

於是我嘗試把我原本暗黑程式的 zipBook 這支函數 export 出來,並用這支函數來處理壓縮 EPUB 檔,這次便可以順利轉檔成功。

雖然我並不了解 ZIP 檔的真實格式,但就直接用萬能的 UltraEdit 將其打開,兩相比較後,我終於發現為什麼了!

由於取得原始檔案後,為了方便整理,我都會習慣解壓縮到 XXX 資料夾,故 ZIP 的資訊其實是多了一層 XXX 路徑,所以用 7-zip 壓縮時,應該要進到 XXX 資料夾那層,並針對 "META-INF" 等項目壓縮才對。

改用這個方法後,kepubify 果然就可以正常工作!讓我不禁懷疑之前幫母親轉檔遇到的問題搞不好也是這個問題居多,而非我以為的找不到 "META-INF\container.xml" 檔案。

Kobo Clara HD 翻頁器 DIY

自從知道 KoboCloud 這個專案後,我就一直在想能不能套用這個概念,自己寫一個 Client/Server 架構的專案來實現翻頁器的功能?由於 porting 一個藍芽 driver 沒那麼簡單,可能還需要 OTG 等,故我這個專案的概念很簡單:

01. Run a Web-Server on Clara, accept two API, /left and /right。
02. Another Client, send two API to Clara.
03. Web-Server clicks screen to simulate to turn page when receiving two API.

看起來應該沒有什麼大問題,目前第一個問題是要選擇哪一種語言來寫 Web-Server?有了 KoboCloud 的信心後,我決定使用 Golang,因為 Golang 本身就內建 Cross-Compiler 的功能,不用像 C 一樣,要準備編譯環境。

底下是我陸續嘗試的過程,留下記錄以供日後參考。

Web-Server

目標:
01. 仿造 KoboCloud,寫一個 KoboServer 機制 - Done
02. 快速寫一個 Server,在 Clara 上驗證可行性,看是否能收到 API - Done
03. Google Linux Mouse Event 之用法 - Done
04. 研究 Linux udev 機制,確定 rule 之行為 - Done
05. 根據 04,寫出一個穩定的 Server,避免 udev rule 一直觸發,運行太多的 Server 實體,導致 Clara 當機 - Done

Client

目標:
01. 當 Server Ready 後,先使用 PC 打 API 即可 - Done
02. Write an Android App to send two API to Server - Done
03. Write another Android App to receive Bluetooth event, then send two API to Server - Done

2020/07/17 日記

由於工作環境都是 Windows,所有的 Script 換行字元都要改成 Linux 下的,否則 Shell 會不開心,另外不論是 Script 或是 Server 的執行檔,移到 Linux 下包裝成 KoboRoot.tgz 時,記得先給執行權限,不然不確定會不會有問題?故最好的方式是直接在 Linux 下 開發,反正我的 UltraEdit 26 也有 Linux 版的授權。

Golang Cross-Compile 方式 on Windows

SET PATH=%PATH%;C:\Go\bin
SET GOPATH=%CD%

SET GOOS=linux
SET GOARCH=arm
SET GOARM=7

2020/07/20 更新

原本以為觸發 Linux Mouse Event 是一件很簡單的事,沒想到 Event Structure 會跟 Kernel 版本有關,如果是用到不對的 Structure,不論我 Event 怎麼組,一定什麼事都不會發生!結果還是需要花點時間整理消化資料。

幸好之前就有想到一招,就是在組 KoboRoot.tgz 時,裡面預留一道指令,把相關程式搬到 Kobo 顯示的電腦磁碟機內,則不論我是要抽換 HTTPServer 程式,或是要測試一些指令都會很方便,之後也可以如法泡製 udev 的 Script ,目前先留一個測試 Script 方便我除錯就好。


2020/07/21 更新

Google 一個 ParseDir 的 Script 函數,想要看看 Kobo 系統裡面有什麼,結果印了 10 萬多行後,後面全部是亂碼,我猜是因為 Stack 爆掉了,因為 ParseDir 是使用遞迴,而印象中 Clara 記憶體只有 512 MB,晚點最好是只 Parse /etc or /usr/local 等等的資料夾,或者也可以直接下 cp 指令把整個 root 複製一份到 /mnt/onboard 上,我認為 udev 執行時應該是 root 的權限。

至少目前可以看出一些資訊了:(From dmesg command)

01. Linux version 4.1.15-00089-ga2737fc02713 (gallen@gallen-M51AC) 
02. gcc version 5.3.0 (GCC)
03. tps6518x 1-0068: PMIC TPS6518x for eInk display
04. mousedev: PS/2 mouse device common for all mice
05. Battery Table (Open Circuit Voltage)
PMU: ricoh61x_set_OCV_table : 00% voltage = 3590900 uV
PMU: ricoh61x_set_OCV_table : 10% voltage = 3687400 uV
PMU: ricoh61x_set_OCV_table : 20% voltage = 3742300 uV
PMU: ricoh61x_set_OCV_table : 30% voltage = 3774100 uV
PMU: ricoh61x_set_OCV_table : 40% voltage = 3788700 uV
PMU: ricoh61x_set_OCV_table : 50% voltage = 3814400 uV
PMU: ricoh61x_set_OCV_table : 60% voltage = 3874200 uV
PMU: ricoh61x_set_OCV_table : 70% voltage = 3927900 uV
PMU: ricoh61x_set_OCV_table : 80% voltage = 3982900 uV
PMU: ricoh61x_set_OCV_table : 90% voltage = 4057300 uV
PMU: ricoh61x_set_OCV_table : 100% voltage = 4141600 uV
06. PMU: ricoh61x_init_fgsoca : * Rbat = 233 mOhm   n_cap = 1385 mAH (1500 ?)
07. SD Card
mmc0: new ultra high speed DDR50 SDHC card at address aaaa
mmcblk0: mmc0:aaaa SS08G 7.40 GiB 
mmcblk0: p1 p2 p3
VFS: Mounted root (ext4 filesystem) on device 179:1.
08. PMU:_config_ricoh619_charger_params set SDP 500mA charging.
09. Event Information.
/dev/input/by-path/platform-1-0024-event
/dev/input/by-path/platform-ntx_event0-event
/dev/input/event0
/dev/input/event1
/dev/input/mice

晚上試著使用 cp 指令複製 /,一直無法成功,不知道是為什麼?
目的地要寫絕對路徑,不能用相對路徑。

ls -al / 結果
ls -al /usr/local 結果
cat /proc/bus/input/devices 結果

2020/07/22 更新

從 /proc/bus/input/devices 來看並搭配 Google 結果,/dev/input/event1 應該是 TouchPanel,所以我們應該從這下手,而不是找跟 Mouse Event 有關的。

先用手機來抓 Event Raw Data,我的手機是 /dev/input/event4(一個一個試出來的),使用 cat 記錄按下時的 data,結果如下圖。


struct input_event {
    struct timeval time;
    unsigned short type;
    unsigned short code;
    unsigned int value;
};


下班再來試試 Kobo 的 Raw Data 是否有不一樣的地方。

回家依樣畫葫蘆抓取 Raw Data,不抓不知道,看起來 Clara HD 是 32 位元 OS?


針對翻頁這件事終於開始有點曙光了,現在只剩是否能用寫檔方式模擬點擊 Touch Panel 動作?

2020/07/25 更新

終於把概念實做出來了,早上就已經完成了向右翻頁,但一整天都搞不定向左翻頁,現在雖然搞定了,但還需要花時間整理資料。

影片連結

程式碼

Event

參考資料

2020/07/26 更新


2020/07/27 更新

執行 Web Server 後,記憶體增加了 380 KB,佔總記憶體 0.07 %,我想應該還算可以吧?


2020/07/28 更新

看了一堆 Kobo hacks 的相關資料,貌似在閱讀界面時,Wi-Fi 是被 Kobo 關起來的?可能是為了省電!也許我可以在 HTTPServer 裡跑一個 goruntime,只要偵測到 Wi-Fi 關閉,就再把它打開,就看對耗電量的影響如何。

晚上實測的結果,即使一直使用我的 KoboPageTurner 翻頁,約莫 2 分 10 秒後,Wi-Fi 便會自己關閉,有空再用 ping command 來確認更精確的時間。

2020/07/29 更新

這是從 Clara HD 說明書看到的,看起來是被系統自己關掉 Wi-Fi 沒錯,但是沒有活動是如何判斷?我猜可能是判斷是否有在做同步,或是有進 Kobo Store,亦或是有開瀏覽器,而不是真正的判斷是否有使用中的 TCP/IP 封包。


晚上實測的結果,在不動作的情況下,不論是在首頁還是 Kobo Store,也是約 2 分鐘多一點,Wi-Fi 便會自動關閉。另外,也試了不要休眠,關掉自動喚醒功能,還是無法解決問題,看來是像說明書說的是由系統自動關閉。

2020/07/31 更新

早上突然想到,也許 Kobo 檢查的是外網的封包,而 Web Server 是屬於內網的封包,故會被認為 inactive?雖然我個人是覺得不合理就是!最簡單的方式就是在 Web Server 內開一個 goruntime,定時一分鐘便去連 Kobo Store,應該就可以避免 Wi-Fi 被關閉,待驗證?測試的結果,沒用。

哈,知道方向就好搞,在我多方 Google 之下,終於發現一個設定可以避免 Wi-Fi 被關閉,但是網路上說沒有效?晚上測試的結果,果然不會再自動斷線了,但是 Wi-Fi 也無法再手動關閉,故這個方式也不是正解。

[DeveloperSettings]
ForceWifiOn=true

另外,從 cyttsp5_mt_process_touch (kernel/drivers/input/touchscreen/cyttsp5_mt_common.c) 這支 function,看起來有解釋如何計算 ABS_X 和 ABS_Y,但我心算似乎不符合我從 raw data 抓到的?

2020/08/01 更新

忙了幾天,唯一的收獲是知道 Clara HD 的原點是在右上角,且設值時 X, Y 要互換。

2020/08/02 更新

改了一版程式,Web Server 開啟時,會去設定 "ForceWifiOn=true",離開 Web Server 時再把設定設成 false,實測的結果並沒有幫助,我確定設定檔都有更改成功!唯一可能的解釋是當我們在程式中動態改變設定檔時,對 Kobo System 來說,那些值可能已經在它的 memory 裡,故它並不知道要強制開啟 Wi-Fi,如果有方法可以強制它重讀設定檔,也許這個解決方式就能生效?

我不確定插上 USB 生成磁碟機,接著退出磁碟機的那個時間點,Kobo 系統是否會重新載入設定檔,如果這個流程是確定的,也許有機會解決?

另外,我發現這個動態更改設定檔的方式,似乎有機會讓 Wi-Fi 在開開關關幾次後就無法使用,可能是 Kobo 比對 memory 和 file 後,因為未同步而導致錯亂?

2020/08/15 更新

忙了兩個禮拜,終於有時間再來搞一下這個專案,Google 了一下,寫了一個簡單的 Android App,終於實現完我當初所有想做的事。



下一個新目標:使用 ESP8266 實做硬體翻頁器。

1. 如何實做 3.3 V 供電電路?
2. 供電電路是否需要穩壓?
3. 外殼使用 3 D 列印?

2020年7月11日 星期六

無聊的週末晚上,思考一下電子紙閱讀器未來的發展

今天是 mooInkPro 13.3 吋到貨的日子!雖然我並未購買,但還是上了官網討論區瀏覽了一下開箱文,目前看起來就是螢幕夠大,適合看 PDF 跟雜誌,另外,因為沒有背光跟玻璃面板的緣故,重量跟 10 吋開放式閱讀器差不多,算是一個走自己特有路線的閱讀器。

我覺得這台閱讀器承襲了 Sony DPT 系列的輕巧,加上讀墨優質的服務,因此有符合一般人的需求。原本以為讀墨跟樂天比起來,因為價格折扣的關係,讀墨算是很辛苦的在後面追趕,沒想到最近因為一些現象,讓我開始覺得事情似乎起了變化?

第一是樂天的折扣優惠有漸漸減少的趨勢,而讀墨類似三本 78 折的活動變得比以前頻繁?

由於我是在 2018 年 12 月底才知道這些廠商的存在,故只有這一年半裡有頻繁閱覽 FB 相關討論區的討論,不知道感覺對不對,但我總覺得樂天在價格這一塊吸引程度開始變小,而支持讀墨的人比我想像中的還多?

第二是在討論區說讀墨壞話的現象。

原本我以為在討論區會說讀墨壞話的都是固定的那些人,但我後來想想,雖然我不算是個網路用戶,也許並不那麼了解網路生態?不過既然古人說樹大招風,表示讀墨在這個市場應該也算是號人物,因此才會有這些批評,而這些批評最常見的不外乎就是翻頁換章節讀取慢、10 吋沒有背光加上螢幕有網點、或者是機器螢幕容易損壞!而這些問題除了讀墨程式本身用的 DRM 解密模組效能(架構)問題外,其他都是可以藉由選擇硬體合作廠商並加強品管就可以解決的問題,況且有些問題對某些使用者來說根本就不算是問題(10 吋螢幕無背光、有網點)!

綜合上述,樂天與讀墨間用戶版圖的移動,我覺得應該會有所變化才對?至於另外一家凌網廠商,由於我並未使用過他們家的產品,再加上他們家主打的圖書館功能對我也沒有吸引力,因此在這就不做鍵盤推測了XD

以上是繁體中文書城的使用情況,但我比較感興趣的還是硬體本身!畢竟一本書的價格折扣其實相差不多,為了一點小錢而浪費生命寶貴的時間我覺得並不划算,故我一向是在讀墨買書,畢竟我有自動暗黑心法的加持。

我最常用的硬體是 Kindle Paperwhite 3,配合讀墨的中文書,我只能說是如虎添翼,但這僅限於繁體中文書而已!

也許有些讀者像我一樣,有閱讀英文技術文件(PDF 或 EPUB)需求,也需要能夠在網路上閱讀線上技術文件,因此,最低限度需要擁有下面功能的閱讀器:

1. 良好的 PDF 閱讀體驗,筆記也許不是必要,但自動裁邊必不可少。
2. 能夠使用 A2 模式(流暢模式)上網。

原本以為 mooInk Pro 加上 HappyZ 工具應該是個好選擇,誰知人算不如天算,該專案無法作用在 mooInk Pro 身上。另外,根據國外網友所說,2019/09 之後出廠的 Sony DPT 系列也無法再使用該工具,導致我現在很後悔去年沒有購買 Sony DPT-CP1 而是選擇 mooInk Pro,當初想要達到的功能一項也沒成功!雖然前一陣子試圖要猜測機器密碼,但沒有足夠的機器算力及知識只好作罷。目前 mooInk Pro 只剩下看漫畫以及固定版面 EPUB 的功能,而說真的漫畫跟固定版面的書又有多少?可想而知,這台機器的使用頻率必然會逐漸下降。

我在 mooInk Pro 之前,其實也有購買 Onyx Boox Note Lite,這台機器除了偶爾反應稍慢,其實都有達到我的所有需求,不料用不到半年就莫名奇妙陣亡,至於另外一台 Onyx Boox Nova Pro 在幾次更新之後,速度還比 Note Lite 慢,只好半買半相送的轉移給有興趣的網友。

另外,這兩個月外出吃飯時,也開始習慣攜帶手機出去,趁著吃飯時看個幾頁書,抽離工作環境的體驗其實也有助於下午的工作效率,但也因為如此,了解到目前手邊著實是缺少一隻電子紙手機。

坦白說,我不覺得這個在台灣沒有市場,在歐美等地也是有一堆人很期待電子紙手機的產品,不能內銷總也能外銷吧?不是每個人都覺得 iPad 好棒棒,一定也有像我一樣只想要護眼的人!只能說三聲無奈,需要的東西總是得不到。

即使我後來不顧資安需求,也在最近入手了 Hisense A5 手機!但在抓取網路封包後,想要用來取代目前手機還真的需要一點勇氣,即使我已經在 XDA 上知道如何 root!畢竟我不想要前拒狼後迎虎,root 算是高階的知識,故分享的高手也不會想要公開,當然也無法從原始碼得知是否安全?這真的是我目前需要思考的課題。

不管如何,只要 Hisense A5 不要像 Boox Note Lite 那樣不堪用,至少已解決了我一部份的痛點,由於這兩個禮拜回家已不再使用原本手機上網查資料,故原本手機充電頻率也降到最低!至於其他的需求,就看時間能不能幫我解決吧!


2021/03/15 更新

今年開始,市面上陸續推出了幾款彩色電子紙閱讀器,雖然並未拿過實機,但單憑各 Youtube 開箱影片的分享畫面,我覺得已經是一個可以入手的時機點。目前看來,最好的機器應該是 Hisense A7C 和 Boox Nova 3 Color。

另外,連讀墨都出了一款 mooInk C 6 吋!不過,Kindle 和 Kobo 兩家大廠倒是沒有任何動作,至於另外一家國內廠商凌網,雖然有發信去詢問規劃,但並沒有得到確切的上市資訊。

我可以理解凌網廠商的無奈,開放性閱讀器的相容性需要花時間和人力去解決,故對於推出彩色電子紙閱讀器的考量也就更多了。

總之,以有上網功能的彩色電子紙閱讀器需求來看,目前好像也只有大陸的廠商可以選擇?

2021/04/08 更新

為了體驗彩色螢幕的發展現況,三月底入手了 Nova 3 Color,坦白說,看彩漫真的是綽綽有餘,我都不知不覺的看了 6 本七龍珠人造人篇XD

但上網真的就不是很合適,畫面看起來髒髒的,殘影現象比黑白更差,我猜應該是顏色太多所導致?如果要用來上網,我還是會比較偏向黑白電子紙,況且我看的還是技術類的網站,不是其他娛樂型網站,如果是拿來娛樂用,我想感受應該會更糟?這樣也好,不會再對彩色閱讀器有不切實際的幻想。

2021/04/12 更新

10 號有去參加凌網六吋新機的發表會,在試用六吋機前,有先去光年試用各個機型,坦白說 Gaze Note 或 Gaze Pocket 雖然不是使用高通的 CPU,但就我試用的感覺來看,比我之前的 Boox Nova Pro 感覺還要快,只是可能因為場地過小,發表會只能站著觀看,再加上光線昏暗,比我之前在國家圖書館參加讀墨 mooInk Pro 10 吋的體驗還要差上好幾倍。話雖如此,我還是參加了預購,等到 5 月底到手再來抓取封包,確認是否有像文石一樣,有一堆不知用途的網路連線封包?

另外,可能是我後知後覺,我都不知道凌網是上櫃公司,說明會上因為真的無聊,查了好多凌網的資料,照官網所說,目前員工約有 400 人,RD 佔了 24% 左右,但據我跟試用的接待員工聊天得知,電子書團隊大概有 50 人左右,但可能還有包括設計等其他人員,以我直覺來看,我會猜 RD 的人數大概是 8 ~ 20 人左右吧?另外,109 年前兩個月份自結累積營收為一億四千多萬,以上都是來自記憶力,詳細數字還是以官網為主。

既然都要買凌網的產品了,順便在 Youtube 看一下他們家的上傳影片,影片數真的少得可憐,瀏覽次數都跟讀墨一樣,不是熱門影片,真佩服在這樣的觀看流量下,讀墨還是可以堅持繼續不斷的出新影片。

乾脆順便來比較一下兩邊檯面上的人員好了!

凌網
詹經理、花編、靠左編,這編,理論上應該還有 2 個,但我不知道名字?另外在發表會現場還有看到一個男生,應該是這個影片的男生,只是不知跟凌網的關係如何?

讀墨
龐執行長、萊斯里、臥斧、里長伯、愛麗斯,吃大人。

感覺讀墨的戰鬥力強多了XD

凌網每次都得靠詹經理獨撐大局,我覺得應該要適時的訓練其他人員,不然我看詹經理會累死。一樣都有 FB 社團,讀墨人員幾乎不用特別關注,社團的人自己就玩得很 High,反觀凌網,假日都還看到詹經理在回答使用者問題。

當然讀墨這樣也是有些隱憂,古人說:成也蕭何,敗也蕭何。目前讀墨社團的氛圍不是每個人都喜歡,像我雖然仍舊有買書,但我已經不留言了,真懷念電子閱讀討論區還在的年代(遠目),果然社會會亂都是被一些老鼠屎害的,天涯何處是吾家呀?

2021/04/13 更新

昨天才提到讀墨,沒想到讀墨又出包了,新型小六要延後兩個月出貨,雖然目前看起來對舊客戶的影響不大,但如果小六是新客戶購買較多的話,我預期這些客戶可能最終還是會流失?畢竟第一印象是很重要的。

討論區上有人提到模具的問題,我覺得既然讀墨已經有一群死忠的讀者,寧願賣貴也不要想辦法壓低成本,品質我覺得還是最重要的,以讀墨客戶的忠誠度,我想應該是沒那麼介意價錢的?

另外,昨天在凌網買了第一本書,沒想到第一本書就無法在 PC 閱讀軟體上閱讀,偏偏該書還是 EPUB 固定版面格式,用手機閱讀的結果,比讀墨 App 的翻頁速度還要來得慢,雖然不是同一本書這樣比較有失公允,但我就是因為讀墨沒賣才在你家買的呀!對我來說,第一印象就被扣分了,開始想放棄預購送的購物金了,人還是不要貪小便宜。

2020年7月6日 星期一

Android Debug Bridge (adb)


以前都沒注意,原來整體 adb 架構是長這樣,不過想一想也是很合邏輯,畢竟一個 Host 可能對到不只一個 Device,中間多一個 Server,架構上也比較好調整,同時程式碼也能乾淨的切開來。

2020年7月2日 星期四

Open CMD window quickly on Windows 10

I test my code every day. I must change folder to do different tests. Although I can use Windows PowerShell quickly in current folder by using "right-click + shift key", the Windows PowerShell is not good to do my common tests.

I added a Windows Batch in "C:\Users\XXX\AppData\Roaming\Microsoft\Windows\SendTo" folder, and the content only has two lines.

@echo off
start cmd

I can do my tests quickly now.


By the way, there are other ways to do this wok. You could refer to the link below.
https://www.itechtics.com/open-command-window-folder/

2020/07/07

I do not like to modify registry of Windows. However, this way is the best way. I did another improvement by adding a registry.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\background\shell\Dos]

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\background\shell\Dos\command]
@="cmd"

Just for fun.

2020年7月1日 星期三

非擔任主管職務之全時員工薪資資訊 - 中位數揭露

自 108 年度開始,在公開資訊觀測站的非擔任主管職務之全時員工薪資資訊裡面需要揭露中位數資料。使用中位數的資料可以減少極端值的影響,故更能真實反映員工在公司裡的排名。

不查不打緊,一查之下,嚇死寶寶我了!原來不管是平均值還是中位數,我都還遠遠不及XD

不過沒關係,我自許是個軟體人,來看看上市公司其他軟體人的資料好了,我想資訊服務業應該是最接近軟體業的定義吧?


在僅看中位數的情況下,嗯,我還是不要換工作好了XD

可惜無法看到外商公司的資訊,政府應該也要把他們納入揭露範圍才對,這是屬於公司法的範疇嗎?

當個 AT叛客 實在是太久了!不管是公司法還是所得稅法,看起來都離我好遙遠!