Archive for the ‘技術文章’ Category

何謂 IT

Saturday, July 12th, 2008

大學同學在 Facebook 傳來群組邀請,主題是針對某電視台介紹 IT 行業的影片,好奇之下看了附上的其中一段短片: 這... 這是甚麼鬼呀... 不能想像主題取材居然可以那麼白痴,教人汗顏。而且節目還有大學贊助,博士傾力演出,將節目的白痴指數(如果有這種指數的話)推至頂峰。 Short 也算是「IT 潮語」?咸豐年前我老爸也會說啊。博士啊博士,你是不是關在象牙塔裡太久(應該不會吧,你又是公司總裁,還會參選立法會),還是生活很難過,要靠拍反智短片養家活兒? 我... 我不知道要說甚麼才好了... 究竟外間對 IT 人的印象,是不是一定要和電腦終身為伍呢?

吃掉和被吃

Thursday, June 5th, 2008

工作關係,這幾天在鑽研讀入 PDF 檔案的方法。如果是匯出的話,坊間有很多免費的工具和程式庫,而且就算是 Microsoft Office 也有相關插件,只要輕鬆按幾下,一張跟原本沒太大差異的 PDF 就會出現在硬碟裡,電郵附件中,螢光幕上。但是把 PDF 轉換為其他格式的檔案,又是另一回事。 如果有看過由 Adobe 提供的 PDF 格式定義(PDF),就會知道 PDF 跟其他文件格式有點不同:與其說它是文件資料,不如說它是把文件「畫」出來的指令。我們要做的事,其實簡單到不過,僅只是把文件裡的表單抓出來,直接匯到資料庫去了罷。奈何 PDF 不像 DOC 一樣有 table object,儲存在 PDF 檔案裡的,就只有「在座標 (3,4) 畫一條黑色的直線,然後旁邊留 5p 的空位」這種指令而已。 而且,如果表單的設計比較簡單,可能根本就不會有線的存在。我們又能憑甚麼分開處於不同儲存格裡的資料呢?阿哈哈,我不清楚。

Debian 家族非常嚴重的安全問題

Thursday, May 15th, 2008

本來昨天就打算說一下的了,無奈網頁寄存的資料庫好像有點問題,一整天都發不了文章。 言歸正傳。Linux 系統尤以安全見稱,但是昨天從 Debian Linux 團隊中傳出一個駭人聽聞的消息。兩年前由於一些人為的錯誤,用於產生密匙(Private Key) 的亂數產生器不小心被移除了。 很簡略的解釋一下。在現代加密技術裡,混亂性是決定加密資料的安全性的一項重要因素。就好像銀行會要求客戶的帳戶密碼非常難猜,最好跟自己沒有關係,以免被不法之徒撞破。電腦加密原理都差不多,不過製作密碼則交由電腦程式去負責。在使用者要求產生密匙(一串長到你不會記得住的數字)的時候,程式會使用亂數產生器弄一個隨機數。以後要加密文件的時候,電腦便會將這串數字和要加密的文件丟到演算法裡面,結果便是加密了的文件。 這一次的問題,就是最近有人發現這個亂數產生器在兩年前不小心被除掉。換而言之,有心人都可以很容易「猜」到這兩年來由 Debian OpenSSL 程式庫亂數產生器系統所產生的密碼,包括 SSL 證書,SSH 鑰匙等等。 令人震驚的是,負責程式碼維護的工作者居然可以這樣的不小心,而且這問題居然可以一直存在兩年而沒有被察覺。有人半開玩笑的質問那傢伙是不是來自微軟的間諜,此外這事更引發一場「開源是否真的安全」的討論。 如果你像我一樣曾經使用 Debian/Ubuntu 產生密匙用作無密碼自動登入,也許是時候重新整理一下那堆密匙了。

浮點運算(IEEE 754)

Thursday, April 17th, 2008

今天又碰到這個問題(是人家的錯),寫下來跟大家分享一下。 double d1 = 0.6L; String s1 = "0.6"; BigDecimal bd1 = new BigDecimal(d1); BigDecimal bd2 = new BigDecimal(s1); System.out.println(bd1); System.out.println(bd2); 其實基本上不只 Java,使用浮點運算的平台都會有這個問題。主因是二進位數字系統並不能完全表示十進位數字(大約值等於 0.5999.... 吧),要精準度高就不能用 double 而使用其他特別類別或函式庫,如 BigDecimal(如以上程式碼所示)或 GMP (C/C++)。 但以上的程式碼一早就轉成了 double,所以結果一樣會未如預期。

Google SoC 2008 名單公佈

Tuesday, March 18th, 2008

一年一度的 Google Summer of Code 學生暑期工作計劃的對象名單公佈啦。以香港的暑期工工作內容來說,個人覺得申請成為 GSoc 其中一份子比跑到辦公室當暑期工充實得多。獎金也比當暑期工豐厚(US$4,500),最少省了來回辦工室的交通費用。題目明確,很具挑戰性,而且種類繁多,由 PHP (WordPress, Drupal),C/C++(Audacity, X.Org, Debian),Python(MoinMoin, Zope, Django),Java(Codehaus, Eclipse),JavaScript (Dojo) 都有,申請成功的開源團隊不少都搞遊戲,連開發 Second Life 的 Linden Labs 也在名單之中。詳細請參考 GSoc 主頁。 想暑假過得充實別錯失機會,3月24日就可以報名囉。 唉,可惜我再不是學生了。

編程員不難找

Tuesday, March 11th, 2008

編程員/系統分析員(俗稱搞 IT 的人)有不少個人特徵,只要稍微細心一點便能從其他人裏面找他們出來。 例如: 傾向以電腦模形描述現實。他們看見人龍會說那是 MQ,看見侍應跟進顧客會說那是 Stack(那家餐廳的服務水準有問題啦),同事危機處理不好會說他沒 Exception Handling,將現實購物說成 Multi-tier Model... 對電腦使用者有一種莫名奇妙的厭惡。User/客戶又惡又蠢,三心兩意,難於照顧,有時異想天開卻不設實際。 與同行交談有一大部份時間用於訴說辛酸史。薪金少,工時長,上司討厭,公司政策妨礙工作﹐工作煩悶都是常見被投訴的地方。 喜歡以自己覺得簡單的方法解決問題(是自己覺得簡單喲)。而且,這個方法多半來自在工作上成功的例子。 編程員也起碼有以上一項的特質。如果朋友跟你說他從事 IT 行業,卻又沒有以上特徵的話,那麼他不是老闆便是從商科轉來的行政人員。相反,滿嘴科技,整天編程的未必一定是編程員,很可能只是個單純的科技愛好者而已。

[bashing]選擇 framework

Friday, February 29th, 2008

剛剛想寫 twitter 的時候才發現 twitter 又掛了。Twitter 服務不穩屢見不鮮,而且近日有漸漸頻密的現象。特別是重要時刻,好像 SJ 登台「演出」,Twitter 甚至會連主頁都連不上。 很難不將這事實跟 RoR 扯上關係,因為 RoR 的「性格」也是臭名遠播的。就連 Mongrel 的爸爸 Zed Shaw 也這樣說(但這傢伙也自大得太厲害了吧?)。自己本身沒體驗過 RoR,固然沒資格插嘴說三道四。不過有好幾點也是很值得留意的。 其一是效能。那是不少高流量網站的痛處。我好像以前說過只要硬件搭救就沒關係,不過我不曾想到語言和框架會有穩定性的問題。所以在留意功能之際不不忘留意一下在這方面以外有沒有一些為人詬病的問題,例如效能,穩定性,部署的複雜程度等等。 第二點是功能。不要見開發速度很快,十分鐘就能寫一個 blog/forum 便爭著當 fans。有時候如果沒有想要的功能,開發到一半才知道原來框架不支援,是多麼麻煩的事。不知道現在 RoR 還支不支援 composite key 呢?(笑 上面提到的 Zed Shaw 特別提到那群 RoR 的用戶很多是從 PHP 跳槽過來,讓用戶群強大之餘,卻也帶著 PHP 開發的「惡習」到 RoR,像是沒 OO 概念之類的。我想說的是學習一套 framework 還要看看自己開發符不符合 framework 的 ideology,看自己跟框架合不合得來。就像挑伴侶一樣,framework 是開發工作的另一半,為時間緊迫的專案挑框架也得相對小心,免得一失足成千古恨。 以前上課導師說過,"The purpose of a framework is ...