能夠當人, 誰還要來寫程式?

不知道是我最近EQ太差還是怎樣.

寫這麼久的程式, 做這麼久的系統, 還是會碰到一些鳥事情. 之前這個libmysqlclient.so.14的天才問題已經扯斷一次我的理性了, 這次碰到的問題又再度挑戰我的極限.

首先從Solaris 7開始就知道, Solaris該死的不支援flock, 所以也就只能用fcntl或dotlock的dirty hack去模擬. 然後也知道NFS配上lockd時會弄出一些.nfsXXXX的檔案作stateless FS下充當lockfile用.

有幸或不幸, 在借用某軟體的maildir-scan/maildir-parse lib後, 掛上NFS下場就是namespace掛點, select掛點, 永遠停readdir, 不會timeout, 不會segment fault, 不會core dump, 當然也永遠不會停: 這些還是硬把gdb掛上去才看出來的, 這年頭竟然有軟體開發不做debug的?

認命! 慢慢啃source codes, 找到了lock state的部分, 一切正常. 自己寫個a.out去嘗試呼叫也都沒問題, 彷彿教科書般的標準.

那為什麼會readdir到dead lock? 而且是很神奇的dead lock!

然後我在 opendir後, while readdir之中看到了這個東西.


/* On Solaris/SunOS, use fcntl to lock file but flock */

下面呢? 下面沒有了, 還是一樣用flock, 而且還很聰明的先檢查flock能不能用. 意思就是, Solaris/SunOS沒flock可以用喔, 改用fcntl, 所以….沒有了.

更經典的在後頭….

while [1]d = readdir(dirp != NULL) {
/* skip . & .. */
if (d->d_name[0] == ‘.’ &&
(d->d_name[1] == ‘\0’ || (d->d_name[1] == ‘.’ && d->d_name[2] == ‘\0’)))
continue;
/* skip .nfs???? if under NFS */
}

對, 寫了註解告訴我們, .nfs???? 要跳過, 然後下面呢? 下面又沒有了.

我又不是紀曉嵐, 也不是被他調侃的太監, 只是補上一個

if (d->d_name[0] == ‘.’ &&
d->d_name[1] == ‘n’ &&
d->d_name[2] == ‘f’ &&
d->d_name[3] == ‘s’ &&
d->d_name[8] == ‘\0’)
continue;

都不肯嗎?

喵的, 能夠當人, 誰還去寫程式! 給這些亂搞的人糟蹋!

References

References
1 d = readdir(dirp

漁僮小舖

其實是上禮拜的事情了.

因為Ellen在搭公車的途中看到了這家店, 愛好日式食物的我們當然也就不能錯過, 特地去永吉路跟忠孝東路交叉口的永吉店吃看看.

一進門整體裝潢的感覺雖然不是富麗堂皇但也看得出來有用心, 店員和老闆都很年輕, 的確有漁”童”的味道. 一翻開menu嚇了一跳: 真便宜啊, 幾乎是以往阿萬的價位.

不過和阿萬不同的是, 漁僮小舖的菜色是以日式為主, 不若阿萬是台式的, 例如: 鐵火丼, 壽司飯, 鮭魚親子丼等等. 當然價位也是驚人的便宜.

我跟Ellen點了鮭魚刺身, 魚蛋沙拉, 味增湯跟鐵火丼.

魚蛋沙拉並非一般台式的薄片切法, 而是塊狀切, 所以口感上有些許不同; 鮭魚刺身是採用厚切的方式, 加上材料新鮮, 油脂豐富, 口感好極了; 味增湯使用的是標準日式的白味增配上鮭魚括骨肉, 不同的是口味是重鹹的台式口味; 而鐵火丼雖然好吃卻讓我有些許失望, 鮪魚塊並沒有醃過, 所以整體的口味並不算很道地, 話雖如此但切的超細的山藥絲加上份量恰到好處的青蔥, 淋上山葵醬油真是美味極了.

自從阿萬不知道為何換名稱又換了口味後, 終於又有了一家可以讓我們這種平民消費等級可以大啖生魚片的好地方了.

Slogan更換

我一直喜歡Ellen拍的照片, 雖然我們都不是扛著DSLR + 一堆大砲鏡頭出門的人, 但是手拿著傻瓜級數位相機, 卻能拍出這麼多好照片的人, 真的少見.

Ellen在美感上遠勝於我, 美貌也是. 所以這次挑了一張他拍的北海道照片來當素材, 藍的過頭的天空, 配上色彩鮮明的建築物, 仰望著的角度, 正好就是我想要從文字中看世界的角度.

修好圖後, 在想要用什麼顏色怎麼表現 NEKOB-log-E 呢? 藍天當然就是配上白雲了, 飄渺的白雲配上我拙劣的手繪大概就是這個樣子吧!

不曉得大家喜歡嗎?

Wordspew Live Shoutbox 的 Spam Patch

我很喜歡 JalenackAJAX Shoutbox, 但是Spammer快把我搞瘋, 我不管換什麼版本, 裝了Bad Behavior, 這些Spam從沒有遠離過我, 當然Ellen也是受害者.

我一直觀察這些Spammer的行為, 從早期沒有Referer, 到後來會隨機挑一個你的頁面來當Referer, 在.htaccess或是httpd.conf裡頭檔Referer只是暫時止痛, 隔幾個小時Spammer又會再度出現, 好好的快樂小字報被Spam淹沒實在是一件很糟糕的事情.

我想過把SecureImage掛到Shoutbox上, 可能是我對WordPress的coding style不瞭解, 加上一直也沒專心去看, 所以一直找不到頭緒, 今天下午趁著等fsck的時間試著裝新版的Wordspew跟Bad Behavior, 結果沒隔幾個小時, Spam又來了.

這會兒我了!!

愛因斯坦說: 「忍無可忍就無須再忍!」, 所以我改寫了一部份, 首先是讓Wordspew能記錄ip, 然後提供一個額外的table去記錄spammer ip, 當你發現你的Wordspew中出現了spam, 只要簡單的在管理介面按下”Spam”按鈕, 就可以把該死的Spam跟他該死的IP給丟進黑名單中, 然後你再也不用煩惱這個IP的Spammer了.

缺點是: 必須看到就殺, 殺久了Spam就會越來越少.

注意事項是, 若你原本就有Wordspew的Table, 看是要手動自己加上欄位, 或是清掉重新安裝一次都可以. 以下是建table用的SQL

CREATE TABLE `wp_liveshoutbox` (
`id` mediumint(7) NOT NULL auto_increment,
`time` bigint(11) NOT NULL default ‘0’,
`name` tinytext NOT NULL,
`text` text NOT NULL,
`url` text NOT NULL,
`ipaddr` varchar(16) NOT NULL,
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `wp_liveshoutbox_spam` (
`ipaddr` varchar(16) NOT NULL,
`lastupdate` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
UNIQUE KEY `ipaddr` (`ipaddr`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

希望對大家有幫助, 有抓回去用的留個Comment通知一下吧! 當然有問題也歡迎發問.


Wordspew Live Shoutbox: Patched by nekobe

雜事, 雜感

說實在的, 這陣子真的是煩到亂七八糟.

好像我的日子裡頭只有煩悶? 其實是只有煩悶到極點時我才會出來無病呻吟似的唉唉叫.

工作上也就這麼一回事了, 把興趣當成職業的報應就在這種時候跑出來: 你不能盡情的去發揮你的興趣, 只能依照別人的興趣去遂行你的興趣. 就如同我不大在這兒貼什麼程式碼什麼我正在做的project一樣原因, 詳細列出讓我煩悶的理由只是一種很呆板的發洩而已, 而這種發洩已經不能為我帶來些什麼了.

工作是自己選擇的, 既然如此也沒什麼資格去哀嚎, 但更讓我幾近發瘋的是一大堆所謂的「雜事」. 雜事的定義大概就跟責任差不多: 不想做, 但基於某些原因你不得不做. 舉凡幫爹娘做事, 而且是一些他們一句話你要耗一整天的事; 幫政府做事, 一些你會很想丟出一筆錢拜託人家幫你搞定的事情…當然也有小到我的貓尿床必須要洗被子這種狗屁倒灶的賭爛事.

人因為擁有而感到擁有的不足, 因為擁有的不足而感到沮喪 – 這似乎已經成為類似呆伯特定律跟莫非定律般的不得不. 不小心讓我裝上了OSX, 不小心讓我感覺速度慢, 不小心讓我萌生了買台MacBook Pro的念頭, 結果當然是不小心的「靠, 他媽的真貴!」.

現在完全沒有讀書的心情了, 這真是一件很糟糕的事情.

病了一陣子忙了一陣子, 不知不覺又走回了循環, 低潮期提早來到, 而我也沒辦法擺爛領薪水天天打Game把這個階段給混過去.

每天接受的資訊量還是一樣的龐大無比, 訂閱的RSS Feeds跟Mailling List有增無減, 從一篇一篇的看甚至自己做整理, 到只能瀏覽Subject然後Ctrl-A -> Del, 從前看到一個新的Release Version會興奮的快點去嘗鮮, 現在看到FreeBSD 6.1 Release只是一句: 「喔! 出了!」. 不能長時間過呆板生活的確是一個很糟糕的生活態度, 現在嚐到苦頭了.

是不是該學壞? 我也不知道.

Bug! Bug? Ghost….

這幾天我睡的很糟, 半夜把我弄起來總是要有點理由的.

在說故事之前, 要先說的是, 人太自信真的不是什麼好事情.

當我確定已經把正確的資料從ibdata一堆雜亂中倒回InnoDB後, 我下了幾個帶Join的Query就放心了, 這下資料沒問題了. 所以就把Rmail跟imapd都重新compile回去拿掉debug flags, 重起後沒有全面測試一次就很久信心的離開, 準備好好的睡了.

睡到一半我被一連串的MSN Alert叫醒. imapd session掛點了.

當我看到以下的Log時幾乎快崩潰了: 不是吧, 我才闔上眼沒幾個小時又掛了?


May 8 15:03:22 ms01 dovecot: [ID 107833 mail.error] auth-worker(default): mysql: Connect failed to xxx.xxx.xxx.xxx (rmail): Ac
cess denied for user 'rmail'@'xxx.xxx.xxx.xxx' (using password: YES) - waiting for 5 seconds before retry

但是奇怪的, mysql CLI可以連, 除了imapd之外其他東西也都運作正常, 我懷疑是不是網路斷線? 不管怎麼重新啟動imapd都是一樣的結果. 從Server開log去看也只是兩種差別


060508 20:19:53 1 Connect rmail@xxx.xxx.xxx.xxx on rmail
060509 3:00:23 3 Connect Access denied for user 'rmail'@'xxx.xxx.xxx.xxx' (using password: YES)

同一個config file, 同一個make opt, 同樣一套mysql.h, 同樣一份libmysqlclient.so.14, 為什麼偏偏就是有些東西連不上, 有些東西連的上? 而且連不上的還是Access Denied!

我用盡所有想的到的手段, 詳細也就不說了, 包含拿client/server都用debug version去倒資料出來, 明明送出相同的東西, 卻有不同的結果; Server明明收到相同的東西, 卻有不同的反應. 我終於理性崩潰, 決定用最低階的方式去抓, 拿tcpdump倒出來看.

竟然不同!!

同一個 mysql_real_connect, 我甚至最後為它寫了一個shared lib去測試, 參數一模一樣, 我最後乾脆寫死在header file裡頭….竟然tcpdump下去, 才發現傳的東西不同.

我到如今還想不出來為什麼, 但是我卻聽從了 http://bugs.mysql.com/bug.php?id=13944的建議用OLD_PASSWORD解掉這個問題了. 這根本不叫bug, 這叫做ghost.

還我的睡眠來.

Proof(求證)

大衛‧奧本(David Auburn)
PROOF 《求證》
2001年美國普立茲戲劇獎及東尼獎最佳劇本

一棟位於芝加哥的住宅後院陽台 一個震撼數學界的質數證法
一百零三本老師的數學筆記 揭開隱藏父女心底多年的深摯情感

楊世彭、彭鏡禧、林弈華、王友輝等劇場前輩一致好評,推薦加演!!
台灣劇場界演技派演員挑戰美國東尼獎最佳劇本的成功範例!!

Catherine(姚坤君飾)的父親是個罹患精神疾病的天才數學家Robert(羅北安飾),為了照顧父親,Catherine放棄學業,生活在只有父親與自己的閉鎖世界裡。全心照顧父親的同時,Catherine體認到自己和父親是那麼的相似,她從父親的瘋狂裡看到自己,並認為自己總有一天也會步入父親的後塵。姊姊Claire(郎祖筠飾)逃離發了瘋的父親
遠走紐約。 父親死後,姊姊執意賣掉老宅,帶Catherine離開。Claire認為Catherine不僅遺傳到父親的數學天才, 更遺傳了父親的瘋狂,她堅信妹妹應該換個新環境過“理想、正常的生活”, 而因整理老師手稿與Catherine相戀的Hal(樊光耀飾),不相信紀錄著驚人數學新論的筆記出自Catherine之手,面對兩人的質疑,Catherine將要如何證明自己?

這就有魅力的舞台劇所具有的強烈力量.

只有一個場景: 芝加哥的住宅後院陽台. 只有四個演員: Catherine, Robert, Claire, Hal. 一個好劇本與一個好導演, 當然配上一個好劇團, 把元素這麼少的一齣戲演得這麼精彩.

或許我曾經差點成為數學研究者的經歷影響著, 也或許那種不明白自己是否瘋狂的情緒似曾相似, 從一開始就被吸引進劇本中, 我從未看過原著的小說, 劇本, 電影, 也所以一面觀劇的同時一面期待著接下來的劇情會是怎麼樣的讓人訝異.

質數是一種相當美的數字: 單獨存在於數列中, 除了自己和原始, 不與任何其他數字有關係. 這種孤獨的數學正好印證了被父親的瘋狂與自己的恐懼困在小房子中的Claire. 而證明, 這個數學上唯一的真理尋求手段最後卻演變成人性之間的盲點: 數字可以被證明, 但是人性不可以.

如同知名導演林奕華所評論的「一個人要證明他的激情並不是瘋狂,他的理性是出於感性,他的寂寞是被困在沒有人關心,那兩種狀況中的他。而不明白便會不信任,不信任才要求證。」大多數時候證明一些事實很容易, 卻很難去像別人證明自己, 我們相信愛能夠帶來信任, 信任能帶來關心, 而關心能夠救贖一個人, 這或許就是這部戲需要傳達的意念之一.

四位演員都是大家耳熟能詳的劇場老手. 尤其讓我印象最深刻的是姚坤君. 他的戲我並沒有全部看過, 但看過不少如《女人要愛不要懂》, 《北極之光》, 《女兒紅》等等. 他的表演張力是強烈而內斂的, 台詞和肢體的一舉一動, 甚至表情上的變化都散發著一種帶有力量的光芒, 而這種光芒卻只投射到舞台的範圍內為止: 也就是讓我覺得, 在當時他的世界就是舞台, 舞台就是他所生存的空間所在, 台下的觀眾和後台的工作人員在那當下都不存在.

而這部戲的最後也沒有狗血灑滿地的大哭大鬧然後大喜大悲, 而是簡單的表達了「信任, 而不是證明」這個簡單的意念, 燈光漸漸暗去的同時Catherine沈靜穩定的向Hal解釋那偉大的數學證明, 這時候, 證明一切都變得沒有意義了.

推薦大家去看, 好劇本好演員好演技, 絕對不會後悔.

生日?

生日剛過.

原則上我不是個會去真正「過生日」的人, 我的生日總是只跟我親密的另一半一起過, 而所謂的一起過, 大抵是一個小禮物加上共進一頓晚餐.

倒也不是啥「生日是母親受難日」這麼高調的理由, 只是單純因為我不是那種會很熱絡的記住身邊每個人生日, 然後想很多方式去慶祝, 去送禮, 去給人家驚喜的人. 加上其實我有某種程度厭惡生日造成的星座成為我的標籤, 金牛座: 固執, 小氣, 好色, 緩慢…這些既定的標籤從小就困擾著我.

相較幾個老朋友, 總是會記得大家生日, 然後訂個KTV大肆的喝個酒開個Party, 真的是低調許多了.

那麼為什麼要寫這篇呢?

大概只是紀念30前的最後一個生日吧! 真無聊的原因.

Kylin? 哈, 哈, 哈

首先, 先介紹Kylin是個什麼東西. 最佳的官方宣傳資料在這兒: Kylin官方網站.

偉大的中華人民共和國再度超英趕美, 繼早年的”紅旗Linux”, “奇瑞汽車”, “漢芯CPU”之後, 又一大作! 幾天前看到這個消息時就忍俊不住了, 只是沒哪種時間跟精神去戳破了 – 這謊話能當飯吃的時代, 騙子又何嘗少了幾個?

不過拿著那個國家的臉面來當騙子, 可就真的可笑到底了.

果不其然, csdn上馬上跑出來這篇: 麒麟操作系统内核同其他操作系统内核的相似性分析. 真是相當佩服原作者, 果然多麼混亂的時代, 總是有些具有正義感的人.

我常常覺得, IT人要有風骨, 為什麼日本人什麼職業都能弄出達人? 為什麼這些達人們都在本職上龜毛到令人覺得根本是神經病的地步? 因為他們不只尊重他人的專業, 也尊重自己的專業, 這種尊重創造出了職人社會, 創造出了一個真正行行出狀元的社會, 孩子們的未來夢想不是總統飛行員, 不是科學家醫生律師, 而是繼承家業成為了不起的木工, 廚師, 拉麵師傅…等等.

中華人民共和國如此的作為反映出了那個社會的風氣, 至於是什麼了不起的風氣我也就不下形容詞了. 我們說借鏡借鏡, 正好想想我們台灣要怎麼把這些事情當成警惕自己的範例! 誰是我們該學習的, 誰是我們該唾棄的! 大家心裡有自己的一個數!