pretty code

2019年5月31日 星期五

個人應用軟體花費統計

剛剛不小心知道了個人花在書籍上的費用後,2007/03/09 12:00:00 ~ Now() ---> Total 197,323。


一時好奇心興起,想知道自己買過什麼應用軟體?看了查詢的結果,我想我還是轉行好了。


即使加上 Palm 時代的好讀 App 和 PMT App,我花在軟體的錢還是不能跟書籍相提並論。

javascript async 小陷阱

有時候真的對 javascript 沒好氣。

原本以為算是已經掌握了 async / await 的用法,沒想到還是會遇到原本沒想過的 case。

一般來說,想要用 async 就是想要避免 callback 寫法,但如果在 async 裡面使用非同步語法會怎樣?

嚴格來說是沒有使用 await 配合非同步。

底下的例子就告訴我們結果。

原因是 javascript 會自動幫我們回傳 1 個 promise,所以 setTimeout 還未倒數完,程式已回傳結果。


async function test() {
    setTimeout(() => {
        console.log('after 2 seconds');
        return Promise.resolve('good');
    }, 2000);
}

test().then((res) => {
    console.log(res);
}).catch(err => {
    console.log(err);
});

結果

undefined
after 2 seconds

2019年5月28日 星期二

Kindle Paperwhite 3 Level Up

之前在測試電子書轉檔時,發現繁體中文書當前的章節文字在 Go To 選項中都會顯示方塊字,原本還以為是出版社電子書原始檔的問題,故一直不以為意。直到上個星期,在美國亞馬遜買了繁體中文書來看後,才發現這個問題在 Kindle Oasis 2 上是正常的。

半夜睡不著覺想了一下,應該是 Amazon 在新版的 OS 上有修正此問題,我猜是為了配合 5/24 繁體中文書書城上市的緣故。因為我大量測試電子書轉檔是在 3 月初,後來測試告一段落後,就沒開啟過 Wifi,故我最新的 OS 是 5.10.3 (February  2019)。

開啟 Wifi 後過了一會兒,按下更新 OS 選項,等了約莫 10 分鐘,終於有了跟 Kindle Oasis 2 一樣的功能。目前 Kindle Paperwhite 3 最新的 OS 是 5.11.1.1 (April 2019),感覺又是一台新機了。


2019年5月27日 星期一

How to check error in UEFI Shell (Blogger 圖片靠左文繞圖測試)

之前一直困惑當 Blogger 圖片靠左時,緊接著的文字到底要按幾次 Enter,其排版才會正常。後來才領悟到,這是因為 CSS 的設定在圖片靠左時,會有文繞圖的效果,因此寫了這篇文章來觀看文繞圖的顯示效果。故從底下開始,才會是這篇文章的真正主題「How to check error in UEFI Shell?」

我們都知道 UEFI Shell 其實跟 Windows batch 很像,有著差不多的指令,因此也有簡單的邏輯判斷來做流程控制。

由於 UEFI Shell 指令的限制,沒有提供的功能我們就得自己來寫。一般我們會使用 C 來寫,當程式裡面遇到錯誤時,我們會習慣 return -1,而 -1 便會回傳回 Shell 環境下,因此我們可以使用 lasterror 這個環境變數來判斷程式是否有正確執行。因為環境變數或是 Shell 變數的值在 Shell 中是字串,故我們在做比較時,要記得加上雙引號,結果如上圖。

在之前的文章中有提到 MicroPython in UEFI,我認為這是個比較好的解決方式,畢竟在做測試時,如果程式邏輯有誤,script language 可以直接修改,不需要像 C 語言一樣,有錯還要回到電腦重新編譯。

2019年5月24日 星期五

亞馬遜正式推出繁體中文電子書

美國亞馬遜於今天 2019/05/24 正式推出繁體中文電子書書城,目前約有 2 萬本書,大致看了一下,書量不算是特別多,希望以後可以越來越多。剛才買了 2 本英文學習和 2 本健康的書,大概是台幣 585 吧(18.24 x 31.6 x 1.015)。

在電子閱讀討論區看到很多人認為價錢不太漂亮,其實以我個人觀點來看,重點根本不是價錢,而是可以使用原本的 Kindle 閱讀器看繁體中文書,畢竟 Kindle 硬體使用體驗是目前最棒的,像我雖然買了 Onyx Boox Note Lite 和 Onyx Boox Nova Pro,我個人的最愛還是 Kindle Paperwhte 3。

只可惜看書的人真的是小眾市場,不然如果購買量衝上去,也許有機會亞馬遜會出大尺寸閱讀器吧!再加上如果亞馬遜繁體中文書數量可以跟 Kobo 或 Readmoo 看齊,只要這 2 者成真,我應該也不會再買 Android 開放式閱讀器了。

即使讀墨電子書的價錢最貴,但我還是在他家買了最多的電子書,不為什麼,就是服務品質 2 字,當然還有我自己暗黑心法的加持XD

C code 冷知識 - argc and argv

程式寫久了,都會有一些感覺很理所當然的事,等到真正去寫,才會發現事情不是我們想的那樣!

最近在測試 C regex Library,為了方便 runtime 取得 pattern,故需要從 argv 取得想要的 pattern。原本以為我們需要自己去處理雙引號括起來的字串,故先寫支簡單的程式確認 argv 的字串是什麼?沒想到傳進去的 argv 已沒有雙引號。

原先以為這個是 C 的 implement,故先查了一下 C11 Draft Spec,發現裡面並沒有規定此原則。


後來才想到,這個應該是作業系統處理掉的,以我的環境來說就是 Windows cmd。

那如果我們真的需要前後的雙引號呢?可以使用 "\" 去 escape 雙引號,不過,因為雙引號已失去意義,故裡面的字串如果有空白,argv 的組成就不會跟原本的一樣了。


Windows 下有個 Win API - GetCommandLine,透過它就可以取得原始的一整個字串。


Test.exe "abc" def

GetCommandLine -> (Test.exe "abc" def)

2019年5月21日 星期二

Good Regex library written in C

https://github.com/monolifed/tiny-regex-c

supported syntax
^ $ . \s \S \d \D \w \W [^ABC0-9] [ABC0-9] * + ? *? +? ?? {m,n} {m,n}?

2019/06/03 更新
After doing simple test, it seems that it can support normal cases.