在 FreeBSD ports 裡用 local patch 修正問題...

FastCGITrac,遇到 Trac 常常出現 MySQL server has gone away 的問題,官方看起來非常的 open source style:我沒遇到,不太想要處理這個問題... XD

Anyway,這個問題可以透過「#3645 (MySQL connections don't reconnect after idle timeout) – The Trac Project」的 comment:8 給 workaround 掉,但我不希望在升級後問題又跑出來,所以就用「Apache 2.2 worker MPM 與 mod_fastcgi 的問題」這邊的解法來解了:

www/trac: NO_CHECKSUM=yes | PATCH_SITES=http://freebsd-patches.s3.amazonaws.com/trac/ | PATCHFILES=patch-trac__db__mysql_backend.py

不過 NO_CHECKSUM=yes 有點討厭,來找看看有沒有辦法「增加 checksum」而非「忽略 checksum」...

MySQL 5.5 與 5.6 的預設值差異...

Oracle 放出 MySQL 5.6 後,Percona 將 MySQL 5.5 與 5.6 設定值的差異整理列出來:「MySQL 5.5 and 5.6 default variable values differences」。

因為這是直接 dump 系統設定值比較,理論上所有「可以設定的值」都可以透過這個方法找出差異,不是靠設定值的改變就沒辦法了...

文章後面有對作者覺得比較需要講的部份提出來。其中 innodb_file_per_table 終於變成預設值了 XD

先繼續觀望...

在瀏覽器玩 HTML5 + JS + Canvas 寫的 Diablo...

沒錯,是 Blizzard 的那個 Diablo (暗黑破壞神):「Isometric minimal-code style game at html5 canvas and javascript」,遊戲可以在「http://mitallast.github.com/diablo-js/」這頁玩...

直接用 Blizzard 的圖資搞當然是很精彩 (而且很震撼),但這樣搞不會被 DMCA takedown 嗎 XDDD

用 C Macro 實作的紅黑樹...

用 C Macro 實作的紅黑樹 (Red-black tree) 很經典,不過每次都忘記怎麼用... XD

紅黑樹是平衡二元搜尋樹的一種,除了二元搜尋樹有的結構外,節點的資訊多了顏色。然後利用顏色達到平衡的特性。

先定義單一節點的資料結構:

struct element {
    char *key;

    int value1;
    char *value2;

    RB_ENTRY(element) meta;
};

紅黑樹的每個節點都需要紀錄母、左、右節點的指標,以及顏色,其中 RB_ENTRY() 所代表的資料結構會負責紀錄這些值。

再來是定義母節點的資料結構,這樣之後就可以使用 struct tree tree1;struct tree tree2;struct tree tree3; 產生許多 tree 了:

RB_HEAD(tree, element);

這樣就會產生 struct tree 這個資料結構。如果只用一次可以偷懶寫成:

RB_HEAD(tree, element) tree1;

定義完資料結構後,接著比較函數 (要如何在兩個元素之間挑出大的那個):

int element_cmp(struct element *a, struct element *b)
{
    return strcmp(a->key, b->key);
}

接著就可以產生 C 語言的 function prototype,以及實際的 function:

RB_PROTOTYPE(tree, element, meta, element_cmp);
RB_GENERATE(tree, element, meta, element_cmp);

然後程式裡面就可以這樣初始化:

struct tree tree1;
RB_INIT(&tree1);

其中 tree1 就變成之後所有操作的基礎。

增加元素:

struct element *el;
el = malloc(sizeof(struct element));
el->key = strdup("key1");
el->value1 = 1;
el->value2 = strdup("value2");
RB_INSERT(tree, &tree1, el);

如果要尋找的話可以用 RB_FIND()

el->key = "key2";
pointer = RB_FIND(tree, &tree1, el);

其他的就翻 tree.h 檔裡面類推...

給新手看的入門:要怎麼用 Google Reader 接收資訊

在公司內被問過好幾次了,用口頭講都比較概略性的講一講。這篇文章算是欠稿欠很久了...

對於剛開始用 Google Reader,或是很少用的人,我給的建議「不要一次想要訂太多東西」,一步一步去試,每個人讀文章的習慣都不一樣,用 Google Reader 整理的「最佳方式」當然也會不一樣。

可以嘗試的幾個方向:

開 Official 的分類來放官方 blog/feed

官方的 blog (或是 feed) 通常文章數量都不多,而因為官方的 blog 都官腔官腔,看的時候也需要抱著「這是官方的 blog」的心態看。拆一個獨立的分類放,集中一起看會是不錯的方式。

你可能一時間想不到有哪些官方的 blog 可以訂。再拆細一點,你可以先從有付費的服務表列,這些是我有付錢的服務,如果有可以訂閱的 feed 我都一定會訂起來看:

然後可以把現在沒付錢的常用服務也訂起來:

然後常用的硬體、軟體都可以訂:

訂可以放空腦袋的圖片 blog/feed

等到你的 Google Reader 放了不少資訊類的 feed 之後 (而且是只有資訊類的 feed),你開 Google Reader 的次數就會愈來愈低... XD 為了解決這個問題,你要放「大量」可以放空腦袋的 feed,第一類推薦的就是圖片 (開個獨立的分類來放吧),這可以去 Tumblr 上找,像是:

  • ak47 (偶而有 NSFW 類的圖,不過大多數情況應該還好)

如果你喜歡吃東西,就找美食 blog 訂。如果你喜歡旅遊,就找遊記 blog 訂。

附帶提醒,如果你發現裡面很多置入性行銷的文章,就再另外分一個類別吧 :p

最後的提醒...

中文 (母語) 與其他語言的 blog 要分到不同分類,如果你對簡體中文不熟悉的話,把簡體中文的 blog 也拆開。因為看母語與看其他語言的速度是不一樣的,如果看很多 feed 的時候,步調不一樣會很累。

希望對一直不知道要怎麼使用 Google Reader 的人有幫助... XD

看到許多其他的 CDN...

維基百科的「Content delivery network」條目裡面有份列表 (「Notable content delivery service providers」這個段落),不過剛剛在「HTTP Archive: new stats」這篇文章裡面又看到一些沒看過的名字 (在「Sites hosting HTML on CDN」這個段落),實際看了看發現還不少沒看過名字的 CDN...

一個是 cubeCDN,一家公司在土耳其的 CDN,但官網上一堆連結都失效 XD

另外一個是 Azion,一家以巴西為主的 CDN,除了巴西以外,還有美東、英國、荷蘭、新加坡、日本。缺了美西是哪招...

各種 credential 儲存的方式 (像是連到資料庫的密碼)

John Resig (現在在 Khan Academy) 在月初的時候發表了「Keeping Passwords in Source Control」討論要怎麼儲存 credential。

這不只是開發者的問題而已,這跟 code deploy 機制也很有關。目前沒有完美的方案,不同的解法都是在不同的環境與限制下而誕生出的產物。

Galera Cluster + Heartbeat

我一向不太喜歡 Galera Cluster + HAProxy 的設計。有四個理由:

  • MySQL server 看不到 client 的 IP。
  • HAProxy 本身就是 SPoF。
  • HAProxy 會增加 latency,並且限制 bandwidth。
  • 通常需要額外的機器跑 HAProxy。

我把跑了超過半年的 Galera Cluster + Heartbeat 的經驗貼到 Codership 的 Group 上,裡面包括了設定與 script,希望能有些迴響:「HA solution - Galera Cluster with Heartbeat」。

InnoDB Quick Reference Guide:對於剛接觸 InnoDB 的入門與參考書

在「The InnoDB Quick Reference Guide is now available」這邊看到有人把 MySQLInnoDB 資訊整理成書,電子書版本大約是 NTD$230 (用美金計算是寫這篇文章換算出來最便宜的價錢)。購買後有 PDF、Mobi 以及 ePub 版可以下載。

這本書適合打算要換 InnoDB、剛換 InnoDB,或是換了 InnoDB 但還沒遇過瓶頸的人閱讀。開頭的章節先解釋 InnoDB 有什麼特性,後面的章節會說明有哪些設定可以設,以及測試的工具。而最後面會說明要如何維護,以及要如何處理爛掉的狀況。