1. mod_wsgi with newer python version

    在執行 Apache + mos_msgi + Django 的時候出現了問題:no module named importlib

    因為系統是比較舊的 Ubuntu,Python 版本是 2.6,我 Django 是用 1.7,不相容 Python 2.6 以下,所以自己又另外裝了 Python 2.7。本來以為把 virtualenv 設定好後就沒事了,結果因為系統提供的 mod_wsgi 是用 Python 2.6 編譯的,沒有 importlib 這個 module,所以就掛了。

    解法很直接,另外下載 mod_wsgi 的 source code ...



  2. SQLite datetime group by

    SQLite 裡的 datetime 其實也只是 string 而已,所以用的方式跟 MySQL 之類的不同,MySQL 可以直接 Date(xxx) 或是 Month(xxx) 之類的做擷取,不過 SQLite 要用 strftime 來做,例如:

    SELECT strftime('%Y',datetime) AS year, 
       strftime('%m',datetime) AS month, 
       sum(amount) AS Amount 
    FROM mytable 
    GROUP BY year
    

    Ref:


  3. Ajax Request Header

    小筆記一下~。

    看了一下 browser 丟出的 request header 有包含 X_REQUESTED_WITH,不過在 Server side 收到的會在前面加個 HTTP_,所以會變成 HTTP_X_REQUESTED_WITH。值的話則是 XMLHttpRequest

    Ref:


  4. Packt Free Learning Campaign

    Packt 最近有一個新活動,活動的內容是每天提供一本免費的電子書給讀者,不過只限到 3/5,而且每天的部分,過了就沒了,所以要看的動作要快囉~~。 有需要的可以點進去這個連結看看: http://bit.ly/1zNpVt0


  5. C ppoll and pselect

    通常 ppollpselect 會搭配 sigprocmask 使用,先透過 sigprocmask block signal,然後在 ppollpselect 這邊再 unblock signal 做處理,例如常見的 daemon reload 可以這樣做:

    // C
    volatile sig_atomic_t reload_flag = 0, terminate_flag = 0;
    
    static void sig_handler(int sig)
    {
        if (sig == SIGHUP) {
            reload_flag = 1;
        }
        else if (sig == SIGTERM) {
            terminate_flag = 1;
        }
    }
    
    // A
    sigset_t mask, orig_mask ...

  6. C UNIX Socket

    可以參考這個連結的 code: Unix Domain Socket,我後來發現我們 project 裡的 code 也是參考這邊的= =|||,不過的確是還缺少一些東西,像是可以再加上 select 或是 pselect 來另外處理 signal,我自己是用 pselect 就是,有想過用 ppoll 來做,不過實際會聽的連線很少,感覺沒必要就直接用 pselect 了。

    修正一下,之後還是改用 ppoll 好了XD,查了一下資料,就算是一個 socket,poll 還是比 select 快~~,參照 Comparative measurements and analysis of I/O event notification mechanismsepoll ...


  7. C SQLite Transaction

    sqlite3_exec(db, "BEGIN TRANSACTION;", NULL, NULL, NULL);
    
    // if error
    sqlite3_exec(db, "ROLLBACK;", NULL, NULL, NULL);
    
    //else
    sqlite3_exec(db, "END TRANSACTION;", NULL, NULL, NULL);
    

    如果中間發生錯誤,就單做 ROLLBACK 就好, 不需要再做 END TRANSACTION,下面 ref 第二篇裡面的邏輯有點問題,做了 ROLLBACK 然後 break 出去之後又做 COMMIT,怪怪的。

    Ref:



  8. Check Type Size at Compile Time in C

    查資料的時候看到的,不過資料裡的方式,宣告 0 陣列還是會過,所以我乾脆多減一:

    #define TYPE_SIZE ((sizeof(int) == 4) - 1)
    char arr[TYPE_SIZE];
    

    完全不確定的話,也可以用 > or < 抓範圍 lol。

    Ref:
    Compile Time Assertions in C


Page 3 / 22