1. SQLite nested transaction

    遇到 SQLite 需要 nested transaction 的情況,查了一下,似乎沒辦法直接用 TRANSACTION 做。後來是看到另外一個語法 SAVEPOINT 可以解決這樣的問題,而且一般的 SQL DB 好像也都支援。以下是相關的用法:

    SAVEPOINT savepoint_name
    
    RELEASE savepoint_name
    
    ROLLBACK TO SAVEPOINT savepoint_name
    

    savepoint_name 就取自己要的名稱,需要做 nested 的情況下就用不同的 savepoint_name,也可以外層用 SAVEPOINT,內層用 TRANSACTION;但是不能外層是 TRANSACTION,內層用 SAVEPOINT 這樣。

    參考資料:


  2. OS X xhyve virtualization

    xhyve 是最近看到的虛擬化技術,源自於 FreeBSDbhyve,試了一下,大致上沒啥問題,還滿順利的。

    範例是照這篇 xhyve を試してみた 來做,從 xhyve->docker->ubuntu 這樣,感覺之後拿來在 OSX 上弄 docker 相關的部署會蠻方便的,另外還有一篇 Mac OS X 上基於 FreeBSD/bhyve 的虛擬技術 xhyve,中文講解,流程是直接從 xhyve->ubuntu,然後是透過 iso 檔安裝的方式,不過步驟就阿雜多了。

    以後要想辦法逼自己多筆記一些資料啊,這樣懶下去不是辦法XD。


  3. Python3 aiopg

    aiopg 是一個使用了 aysncio + psycopg2 的一個 library,最近在用的時候想到一個問題:aiopg 的 connection 能不能在各個 coroutine 間 share,從想法上是覺得好像不行,查了一下,看起來應該是會有問題:Support for coroutine libraries,所以就變成必須在各個 coroutine 裡建 connection,頂多就變成從 pool 裡面拿這樣。

    另外 aiopg 在 transaction 的部分也要注意:TransactionsBEGINCOMMIT 必須用 execute 的方式,而 method 的部分則不給使用。

    再來就是 psycopg2 不是每個 method 在 aiopg 上都會有 ...


  4. Shellcheck

    最近發現的工具: Shellcheck,可以檢查 shell 的 syntax,還不錯用。

    usage: shellcheck xxx.sh

    除了會顯示錯誤外,也會警告一些用法或是沒用到的 variable,紅色的代表錯誤,咖啡色的通常是沒用到的 variable,綠色比較偏向 style 和寫法的改進。

    如果想關掉某些 warning 的話,譬如 SC2129: Consider using { cmd1; cmd2; } >> file instead of individual redirects. 就可以下 shellcheck -e 2129 xxx.sh,如果嫌麻煩的話,可以另外自己設一個 alias,譬如: alias sc="shellcheck -e 2129"

    如果自己想裝來試試看的話 ...



  5. HTML Input Label UX

    幾篇關於 HTML input 和 label 該怎麼擺放會比較好的討論。

    總結下來的簡單結論就是:

    • 垂直排會比左右排好,可是也不是所有情況都適合垂直排就是。
    • 左右排的話,label 靠右 ...


  6. C search.h

    TL;DR: 不要用 search.h 裡的 function.

    最近需要改寫別人的程式,裡面有用到 search.h 裡的 function: hsearch,hsearch 其實就是 hash table,搭配其他的一些 function 就可以不用自己實作。但是,這個 hsearch 的缺點卻非常多:

    1. hash table 的 size 必須是固定的
    2. 沒有 method 可以 traverse 整個 table 的 entry
    3. 記憶體管理很麻煩,可能還必須自己再 maintain 一個 linked list 才行

    這邊是 wiki 上的範例: http://rosettacode ...


  7. kdialog with crontab

    環境是用 KDE plasma 5, script 範例:

    #!/bin/sh
    
    export DISPLAY=:0
    export QT_PLUGIN_PATH=/usr/lib/plugins:/usr/lib/qt5/plugins:/usr/lib/qt5/plugins:/lib/kde5/plugins/
    export KDE_FULL_SESSION=true
    
    # Fix warning
    export XDG_RUNTIME_DIR=/run/user/1000
    
    kdialog --msnbox "hello" --title "title"
    

    因為 crontab 不知道這個 UI 顯示是要顯示在哪個螢幕上,所以要指定 DISPLAYKDE_FULL_SESSION ...


  8. Python FTP Download Percent

    本來是別人寫的一個 ftp download python script,因為不知道到底是不是有在下載中(?),所以我多加了一個顯示現在 download 幾 percent 的 function:

    def ftp_get(src_dir, name, dst_dir):
        def ftp_callback(chunk, file_size, dst_file):
            if not hasattr(ftp_callback, "progress_size"):
                ftp_callback.progress_size = 0
            if not hasattr(ftp_callback, "progress_percent"):
                ftp_callback.progress_percent = 0
            dst_file.write(chunk)
            ftp_callback.progress_size += len(chunk)
            tmp = ftp_callback.progress_size * 100 / file_size ...

Page 1 / 22