pretty code

2021年12月30日 星期四

Dropbox on Kobo

Kobo 在高階的機種上都有提供 Dropbox 服務,可以隨意選擇想要閱讀的書才下載,整體操作還蠻順暢的,可惜的是,免費版只有 2 GB 可以用,如果有很多書要放的話,一下子空間就滿了。

如果想要付費取得更多容量,一起跳就是 2 TB,不像 Google Drive 有 200 GB 的選項可以選擇,同樣 2 TB 的價錢,Dropbox 也是比 Google Drive 貴了幾百塊。

這禮拜在上傳了一堆 PDF 檔案後,我也開始遇到空間不足的問題了,本想直接付費搞定,但本著黑手的精神,還是想看看有沒有 DIY 的解決方法?

如果要使用我有付費訂閱的 Google Drive,目前只想到幾種解決方式:

01. 完成我之前想做的 GUI App,但之前的調查想要從無到有似乎有些困難?

02. 寫一個 Sync 的 App 或是找尋現成的 solution,不論哪種方式,都不會很困難,缺點就是一股腦同步,空間馬上會不夠用(KoboCloud 砍掉後下次還是會下載,故不算是現成的解決方案)。

03. 想辦法寫一個 KOReader 的 plugin,比照現有的 cloud storage,借用 KOReader 本身的 API 來達到 GUI 的目的。

看起來第三點比較符合我的需求,沒有意外,我應該會朝此方向努力吧?

如果不是想要使用 Google Drive,花錢升級 Dropbox 應該是比較快,為了做這個所花的時間代價,都不只差額 2000 多塊(目前我 GDrive 200 GB 每年只要 NT $900)。

如果我真的想不開把這個功能做好,就把這個差額再捐出去做好事吧,看這樣會不會比較有動力去完成它XD

2022/01/05 更新

跨年夜晚上睡不著覺時在想,GUI App 真的是我的需求嗎?最後才發現我比較需要的是 Wi-Fi 傳檔功能!感謝所有開發 Kobo 第三方軟體的前輩們,減少了我很多嘗試錯誤的時間。我終於可以隨時隨地的上傳檔案到 Kobo Elipsa 上了。

2021年12月29日 星期三

最有才的解 DRM 方式

今天 Google 跳出來了一篇文章《Quick and dirty way to rip an eBook from Android》,裡面只是簡單寫個 shell script 再加上 adb command 就把電子書再轉成掃瞄圖檔的電子書。

原理就是利用抓圖及觸發觸控翻頁,就可以輕鬆的抓完整本書囉。

備註:據我實驗的結果,圖片品質、執行時間及校稿時間都是此方法的致命傷,玩玩可以,但不實用,直接買 Kobo 及 Google 的書就好了。另外,某些國外資訊類的電子書都是無 DRM 的,購買後都可以直接下載,想在哪看就在哪看。

2021/12/30 更新

經實測確實還蠻好用的,不過要注意左右邊座標要設偏一點,否則流式 EPUB 的書有可能剛好點到註解,整個頁面就跳轉到亂掉了XD

另外,抓圖的那台機器,如果速度太慢,要調整一下 delay 值,我也遇到點了後已經 delay 4 秒,但翻頁還是翻不過去,是哪台機器就不說了XD

雖然用手機應該不會有這些問題,但手機螢幕如果不是 4 比 3,抓圖比例也怪,故也是兩難呀!

2021/12/31 更新

我的天呀,居然還有點一頁會跳兩頁的書,難怪沒有人想用這個方法!也許用 PC 閱讀軟體才是最好的方式,程式好寫又簡單不需要另外一台機器,不過,據我先期驗證的結果,某些書商版式的書,點開時不知道是在做解密還是幹嘛,光 delay 可能都不只要 4 秒,故這個方法,後續還要校稿,自動化的意義就不大了。

結論:這還是一個很有才的方式,但因為書商閱讀軟體寫的不好,還是需要後續校稿,故這個方式不實用。

2021/12/31 下午 更新

雖然覺得不實用,但還是想知道使用 PC 實作起來會如何?下午花了約快 2 個小時使用 Golang 實作它,大部份的時間都花在找套件。

原本以為 Node.js 會比較容易,但在編譯時還是遇到一些問題,Golang 一開始也是遇到問題,在換了作者建議的 C Compiler 後,便順利的編譯成功。

看來要在 Windows 下實作,呼叫 Win32 API 還是比較快,記得以前用 C 只需要不到 40 行即可。

目前覺得用 PC 才是唯一的最佳解,雖然也是不好用就是。另外我也找到了偶爾會 delay 的原因了,有些書商會定時在背景同步,如果同步的流程做得不好,確實有可能會造成翻頁 delay,不論是在 PC 或 Android 皆有可能。

花費了那麼多功夫測試,還不如把時間拿來多看幾本書,如果可以有一台完美的開放式閱讀器,就什麼問題都解決了。

H 家測試記錄

前幾天為了研究 H 家的檔案格式,特別開啟了一台 GCP Engine 來做測試,雖然簡單規格的價錢不是很多,但 Wireshark 在解析 TLS 封包時還是會一直卡住,如果使用類似 mitmproxy 的軟體則可以正常抓取封包,看來下次還是要用好一點的規格。

大概用了約 3 個小時,合計約 NT $20,感覺還可以。 

使用之前可以先用計算機估計價錢。

暫時還是無法像 R 家一樣,神來一筆的找到入口點,就先這樣吧,反正一切隨緣XD

2021年12月27日 星期一

《64》真是本神奇的書

之前因為某些書商 App 開啟這本書很慢,再加上目錄並沒有分章節,故一直以為是只有一個章節檔案的緣故所導致。

今天直接在 HyRead Gaze Pocket 閱讀器開啟購買的這本書也遇到開啟很慢的問題,還好我之前為了比較 App 也有在其他家購買這本書,解壓縮一看,居然不是我想像的只有一個檔案,那閱讀軟體怎麼知道要如何跳下一頁呢?看來,還是得看 EPUB Spec 如何規範吧!合理的解釋是看 content.opf,而不是目錄的檔案。

總之,要測試電子書閱讀器有沒有問題可以使用這一本書,也許會有意想不到的驚喜?

2021年12月25日 星期六

慶祝耶誕節

今年的耶誕節剛好是星期六,所以無法直接放假一天,公司也很貼心的給我們一天補休,雖然是要等過後才能申請就是XD

原本很想買台四萬塊左右的電競筆電,沒有意外應該是買 Dell G15?但考慮了老半天,覺得只是為了玩暗黑破壞神 2 重製版才購買筆電實在是有點浪費,再加上我原本用了七年的筆電還是頭好壯壯,買了之後就會有兩台筆電,感覺收納不太方便,於是一直在猶豫中…

前幾天逛 PTT 八卦板時,看到蘋果基金會有個個案,看了都覺得心酸,於是趁著耶誕節的這一天,將原本要買筆電的一半預算,挪去做為個人的小小心意當做送給自己的耶誕禮物,也算是杜絕我原本蠢蠢欲動想要購買筆電的念頭XD

總歸一句話,就是錢賺太少了,才沒辦法想做什麼就做什麼?人生總是充滿著種種無奈!

算了,還是看看 Youtube 的電玩影片解解纔就好,雖然也是越看越無聊就是…

從前年知道 IU 開始,就覺得 IU 唱歌很好聽,剛好有一首也算是應景的歌,希望大家一切都好。

2021年12月23日 星期四

ARP 廣播封包苦主

下午想要修一個 bug 時,板子一直無法取得 IP,抓了封包一看,又是一堆 ARP 廣播封包在網路流竄。

比較特別的是,不像兩年前一樣,是某台設備網路設定有誤才導致狂發廣播封包。稍微看了一下,只看到很多台電腦像是很正常的在問某些電腦的 MAC,單只看一台的網路流量不會很多,偏偏看起來是一整個子網路的每台電腦都有狂問 ARP 的現象,於是又把我的板子打掛了。

一時之間,福至心靈,突然覺得會不會跟最近疑似 IT 透過群組原則自動安裝的 ivanti 管理軟體有關?在 Google 大神的幫助之下,果然有人也有這個問題,看起來是跟尋找設備的 agent 有關,因為 agent 要 ping 電腦,故才會一直發 ARP 封包,而我猜那些電腦應該是沒有上網的,故也沒有回應?

該 agent 使用 XDD 協定來尋找設備,簡單來說 agent 會監聽 ARP 廣播封包,當它發現有新的設備出現在網路上時,便把該 IP 記錄起來,並在各個 agent 間協調,只有一台 agent 會負責 ping 新設備。

聽起來是很棒啦?但該軟體一定是那邊沒做好,才會導致這個情況,光所謂的協調我覺得要考慮的點就很多了。



從 C:\ProgramData\LANDesk\Log\SelfElectController.log 中,確實也可以看到相關跡象。


2021/12/24 更新

今天除了找到 Go package 來發送 ARP 封包,也找到 Win32 API 來發送 ARP 封包,要做測試就更方便了。

更換 LED 崁燈注意事項

崁燈最好是選擇 10W 4000K 的型號,顏色比較不會太亮,最好還有內附快速接頭,只要剝好線將線插進去就可以搞定。

L 是控制線,也就由是開關所控制的線(火線先進到開關,開關再拉線到天花板)。
N 是中性線。

至於線的顏色我有看過兩種(天花板及燈具),沒有絕對,最好還是用電表量:

L 有顏色,N 白色。
L 棕色,N 藍色。

另外有些電線如果是紅黑,則是紅為火線,黑色為中性線。

以一坪多的浴室來說,如果是有乾濕分離的,會拉兩盞燈,一個在淋浴區,一個在盥洗區,故如果是有快速接頭的燈具,我們可以很方便的這樣接。


2021年12月22日 星期三

x86 assembly in Linux - part 7

"Programming from the Ground Up" 第三章有一節 "Addressing Modes" (P.41),會描述各種定址方式的寫法,久沒寫組語,想要重頭溫習一定要來看這一節。

另外,就是 stack (第四章) 的傳遞,久沒碰真的會忘記,當然 x64 函數參數還會用到暫存器 (以 Windows 來說是前 4 個參數),剩下的才用 stack。

總之,記錄一下避免下次還要重頭回想。

2021年12月16日 星期四

常用 Wireshark filter 寫法

(ip.addr == xxxx or ip.addr == yyyy) and eth.dst == ff:ff:ff:ff:ff:ff and frame.number < 405505

上述 filter 表示我要篩選 IP 等於 xxxx 或 yyyy 並且 mac address 的目的地是廣播位址並加上封包編號小於 405505(Wireshark 抓封包時的編號) 的封包。

!ip.addr == zzzz

則是表示不要 IP 等於 zzz 的封包。

2021年12月14日 星期二

UEFI Network 相關 code 位置

最近在研究一個 Bug,實在很難找到實作的地方,今天中午正準備吃飯時,先找到了 error code 的定義,後來憑著 error code 也順利的找到了 TCP Recev 的位置,記錄一下,避免以後忘記。

我要找的值其實就是 104
#define EFI_CONNECTION_FIN      EFIERR (104)
#define EFI_CONNECTION_RESET    EFIERR (105)
#define EFI_CONNECTION_REFUSED  EFIERR (106)

StdLib\LibC\Uefi\select.c - select function
StdLib\LibC\Uefi\SysCalls.c - poll function -> StdLib\BsdSocketLib\poll.c - BslSocketPoll function

DEBUG Status
Status 都用 %r 印出較多,如果 index 有定義在 mStatusString 這個 Array,便會印出定義好的字串;如果沒有,其值就是一個 16 進位值。

Stdlib\EfiSocketLib\Socket.c
EslSocketRxStart 這支函數,在檢查 pPort->pSocket->RxError 如果發現有 error,其值可能是來自下面其中之一:

MdeModulePkg\Universal\Network\Tcp4Dxe\Tcp4Main.c - Tcp4Receive
MdeModulePkg\Universal\Network\Tcp4Dxe\SockInterface.c - SockRcv

順序是先 Tcp4Receive,裡面會再呼叫 SockRcv。

我先用 build -p MdeModulePkg\MdeModulePkg.dsc -a X64 -t VS2015x86,build 出我自己的 Tcp4Dxe.efi,過程中會出錯,那是因為我是整個 Module 全 build,故跑到最後可能因為設定問題會失敗,但不影響我要的檔案產出。

後來查了一下,也可以只 build Tcp4Dex.efi。
build -p MdeModulePkg\MdeModulePkg.dsc -m MdeModulePkg\Universal\Network\Tcp4Dxe\Tcp4Dxe.inf -a X64 -t VS2015x86

接著使用 drivers 找到系統內建的 Tcp4 Driver,查到第一個欄位 DRV 的值,接著使用 unload XX 去卸載它。

最後則是用 load Tcp4Dxe.efi 的方式載入我 build 出來的檔案。

這樣我就可以看到相關訊息,至少我找到了 EFI_CONNECTION_FIN  這個錯誤發生的地方了XD

2021年12月2日 星期四

電子閱讀器盤點篇

趁著最近比較有空的時候,把手上沒在用的閱讀器清一清,既然自己沒在用了,便以還可以的價錢出售,感覺心裡舒服多了,不會製造一堆電子垃圾,機器就是要被使用才能發揮價值。

雖然手上還有 5 台機器,但都是目前的我需要的,5 台缺一不可XD

用來用去,還是覺得 Kindle Paperwhite 3 最好用,速度也最快,依照目前使用頻率以及心中喜愛程度排序如下:

Kindle Paperwhite 3
Kobo Elipsa 
HyRead Gaze Pocket
Hisense A5

至於 Kindle Oasis 2 則是等到 PW3 電池掛掉後,要來取代 PW3 用的。