hits counter

Archive for the ‘技術文章’ Category.

會「推」的天氣站

事緣有天從iPhone看 Yahoo!天氣,明明十多度卻被說成三十多,實在氣死了。不少程式都直接從天文台的文字版本或是feed直接找天氣資料,曾幾何時也打算弄個Web Service把資料拿出來的,不過氣溫之類的天文台也不會說自己身處的地方的天氣,心想不如自己弄一套簡單的天氣探測裝置好了,於是便有了用Arduino實行這個計劃的打算。

Arduino是啥?Arduino其實是一套當初為了讓不諳電子技術的學生,以廉宜的價錢弄一些簡單的小裝置的一套平台。基本上這平台包括了一塊掌心大小的電路板,和用以寫程式的 IDE。只消把電路板經USB 駁上電腦,就可以透過Arduino IDE直接編寫程式和控制連上電路板的各種電子零件,諸如LED,發聲喇叭,馬達,甚至還可以加插擴展模組連上藍芽,LCD,GPS,甚至網絡的能力。

只要能駁得上就能玩,能改,是這套開源硬件平台的魅力。

不過香港的店舖,即使是鴨寮街,根本就沒Arduino電路板賣,從外國直接訂購又太昂貴,所以從大陸淘寶找。因為Arduino是開源硬體,電路設計圖可以從官方網站下載,只要有材料就可以弄一塊出來,使用官方的軟體編寫程式,所以網絡上也有不少合法的複製品。淘寶也有不少大陸廠商直接放板子和模組一併賣,只要挑個便宜,有信譽的,放個信用卡號,速遞就會把貨品送到家,非常方便(只是某速遞公司送貨到住宅區的收費不便宜)。

有時候買一點小零件,好像電阻,電容,LED,光敏電阻,簡單IC之類的訂購未免有點小題大做,便會直接去鴨寮街採購。有一家兩層的店材料和工具(例如剪線鉗和萬用錶)都很齊全,有時候還有特價,不過就是比較複雜一點的零件賣很貴,或是根本沒賣,這又得另外找一家國際電子零件商幫忙。幸好那公司的取貨點就在我公司附近,可以省下一筆可觀的運輸費。

初時也是門外漢,電子甚麼的除了初中教的簡單電路特性還記得以外其餘的都一竅不通。所以先著手砌一些簡單的小裝置,例如上面的光度探測器。以後再看網絡上的文章,技術文件等等,累積了不少電子零件上和電子訊號處理的知識(也間接了解到不少電腦硬體上的原理),便開始向製作自己的私人天氣站的目標進發。

Arduino 天氣站 v.1

Arduino 天氣站 v.1

起初參考了這個網站買了內文提到的探測器和其他零件,又用了跟Arduino一起買的Ethernet模組將這東西接上家裏的LAN,那麼即使電腦沒開程式Arduino也可以直接把資料放到網絡上。當初這東西只有自己的網頁伺服器,要看資料非得要到訪它,沒記錄功能又不會通知,不甚實用。後來在官方論譠「刨」文章看到原來有一套叫pachube的服務,可以讓用家上載由不同地方獲得的環據數據,便趕緊申請了來試玩。

Arduino 天氣站 v.2

Arduino 天氣站 v.2

後來,又將這套服務的數據傳到放在網頁伺服器(也就是這裏)的python script,靠它定時將資料從pachube扯過來發 twit。而且,這套script還會將資料儲到資料庫,那我便也可以跟天文台一樣繪製「溫度走勢圖」,「氣壓走勢圖」,「全年最高濕度」等等有用的資訊了。最近為了將氣壓的量度精度提升,把購入已久但一直沒接上的ADC (Analog/Digital Converter – 模擬數碼訊號轉換器)接上,順手為這迷你天氣站加了一個「個人」網頁,利用Google的Visualization API提供廿四小時的天氣走勢,更容易看出天氣變化。

當然我不會就此心足。除了將網站美化外,還打算將天氣站移師窗邊,取得更真實準確的天氣數據(現時在電腦正上方,太熱了)。但在這之前我想還是先搞好網頁,貼出更多有用的資訊吧。

話說如果超過某個溫度/濕度自動發twit也頗有趣的…

Google 的 DNS 服務

Google 最近推出免費的公眾 DNS 服務,在芸芸網絡服務商之中也算是前所未有。除了在全球各地廣設伺服器,用上一堆加快存取和增強保安的技術,就連 IP 也挑個易記的 8.8.8.8 和 8.8.4.4,可見他們也花了不少心思。

DNS 算是網絡不可或缺的服務之一,在你看見這篇文章,不論是直接鍵入 mk.netgenes.org 也好,從 Google Reader 經 feedburner 的 feed 看見也好,電腦已無聲無息的跟網絡上的 DNS 伺服器溝通,將域名翻成電腦懂的 IP 位置,最後經 TCP/IP 協定把資料扯回來,顯示在螢光幕上。

電腦在連上網絡的時候,就已經跟網絡上發送設定的電腦溝通好,自動把 DNS 伺服器的位置記下,不用使用者操心。所以,老爸老媽上網從來不用知道啥是 DNS,只知道把網址輸入 Firefox,按個 Enter 網頁就顯示出來了。這背後通常都是你的 ISP,為了便利等等原因,就預先幫你設定好的。既然如此,Google 又何須大費周章,另設服務 reinventing the wheel?

瀏覽速度是不是真的快了,沒有試過不敢亂評。不過有一點看 Google 往績,就是很會乖乖守規則。有些網絡供應商的 DNS 伺服器比較奇怪,當電腦詢問一個不存在的網址的時候,它不是照慣例送回正常的「找不到」訊息,反而會把使用者導向廣告網站,從中獲利。在某些地方,網管更可設定名單禁止使用者得知某些網域的 IP,效果便如同鎖網一樣,普通使用者進不了去。

由此可知,Google Public DNS 很可能是為將來 network neutrality 形勢不利自己的後備武器。Google 逐步推出網絡基本服務,原因便是要切斷使用者對傳統網絡服務供應商的「依賴」,那麼即使將來 ISP 真的搞分化,破壞互聯網的互連基礎,那 Google 也可以很容易轉變成為一家網絡頻寬供應商,不會被眾網絡商杯葛,從互聯網上消失。

DNS 甚為普及,連上互聯網必會用到。Google 可以利用這點,收集大家的網絡習慣。就算不用 Google 的搜尋器,Google 無時無刻也知道你剛去了哪些網站,對他們這班病態資料收集狂來說不是很美妙的事情嗎?

突然想起 Hyperion Cantos 裏的人工智能集合 Technocore。表面上它們為人類提供了無數好處:傳送門,武器,超光速技術,但暗地裏其實佔盡人類便宜,當他們牲畜而已。被 Google 暗中佔了便宜,是不是得不償失?

Windows 與 UAC

微軟為了解決長久以來困擾 Windows 用戶的保安問題,在 Vista 裏加入了所謂的 UAC – User Account Control。簡單來說,程式如果要用到系統管理員才能用到的 API,例如更改系統設定,安裝程式,系統維護,設定防火牆等等,都必須經過 UAC 向使用者取得確認,那就是在螢幕上顯示詢問,「你要讓這程式更改系統設定嗎?拒絕還是接受」使用者要按「接受」才能讓程式繼續執行。

但是,由於牽涉過多 API,程式的流程裏就可能要用上十多次 UAC,反而麻煩了使用者。隔壁的蘋果也不忘在廣告挖苦對方一番,在廣告中 PC 連跟 Mac 說句話也得要身旁的保鏢批准。雖然現實沒麻煩到這個程度,但也夠擾人了。雖然微軟在 SP1 及後來推出的 Windows 7 大量減少詢問出現的次數,不過有時會因 API 的問題令某些程式不能執行。

其實,root cause 不是微軟 NT 架構不夠安全,而是其使用者和程式開發人員的不配合。Windows 曾經有兩大品種,其一是繼承 Windows 3.1 血統的 9x 系列,另一邊則是來自 Windows NT 4 的 NT 核心。9x 系列至末代 Me 都沒有多用戶的概念,作業系統僅設計讓同一人執行,程式亦 assume 執行者擁有更改電腦任何設定的權利。所以當微軟準備將兩系整合成家用商用皆宜的 XP,便曾考慮過將預設帳戶預訂為沒管理員權限的普通使用者。奈何很多來自 9x 系統那邊的程式都因為 API 大受限制停止運作,所以方案就此作罷。

在平衡兼容性和保安問題兩大因素,才出現了 UAC 這四不像。對比 *NIX 的 sudo,UAC 是跟軟件兼容妥協下的產物。UAC 除了影響正常操作外,也對保安沒甚麼助益。用戶遇著上千百萬個詢問視窗,難免養成一種不管內容是甚麼都按 “Yes”,”Allow” 的反射行為,不論是菜鳥還是資深用家也是如此。有些用戶嫌麻煩更索性關掉。即使 Vista SP1/Win7 已大大減少這類視窗出現次數,但這亦無補於事。

要改變這個死局,微軟不是跑去改善 UAC 的 User Experience,而是應該協助使用者洗脫惡習,戒除凡事每每用 admin 權限的習慣。既然也著手增強保安加入了 UAC 這擾人之物,何不徹底改革,將 admin right 改成如非必要不能動的帳戶?

我媽的電腦便是如此。她也是染上了「按 Yes/Allow/Next 準沒錯」的普通用戶,也許由於這樣她以前的電腦積滿了不少不明來歷的怪軟件。為她安裝新電腦我便做了個小實驗,將她要用的軟件裝好,再將她的帳戶降格為普通用戶。這樣我至少不用再為奇怪的軟件煩惱,她要安裝真的有用的軟件,也只要我幫她 Run as Admin – 也就是 Windows 的 sudo,就能解決。

顯然把 OS X/Linux 的一套學習過來套用明明就沒問題,但箇中有甚麼原因令視窗出現了 UAC,則不得而知。

Life as in-house IT Developer

與其他熱門工作不同,資訊科技不像其他行業,會有人對其產生憧憬。空姐空少機師可以四處飛來飛去環遊世界,醫生律師金融機構分析員高薪厚職,IT 看起來就愔然失色了。整天坐在電腦面前有啥令人嚮往的地方,跟電視上的隱青有甚麼分別?

所以,IT 在外人眼中是個悶透了的行業。支援商業活動的 in-house IT 則更甚。至少,寫面向群眾和消費者的 B2C 軟件大家都會明白你在說甚麼。是繪圖的,是文書處理,是即時通訊軟件,是遊戲,因為平時大家用電腦都接觸得上,所以也會知道個大概。至於 in-house IT 咯,其他人還要首先知道你公司在做甚麼。話說有個人拍攝 IT 常識節目,就是不知道人家 IT 做甚麼,鬧了個大笑話

而且,成品還是一些內容悶到透,樣子醜得要命的報表和畫面。我說醜得要命,就希望大家不要想像成 GMail 那款,而是像外行人初學 HTML 很隨便堆起一張 form。很隨便的原因,除了因為我們開發者和用家都很隨便以外,我們還受一些叫「資源」的東西管制著。IT 系統計造價,跟建築業很相似,都是以日薪時數計算的。那怕你多花了一日,你的上司,你系統的用家都會老大不滿意。對他們來說系統能用,他們知道怎樣用就好。他們不知道怎樣用也沒問題,因為他們期望 IT 的同事可以幫自己。

(待續)

mceComments 0.4.6

居然在寫這篇文章之前就有 bug report…

不說這個,因應 WordPress 2.7 所作的改動,順便兼容另一個插件,又將版本編號推上了一小格。既然只是轉 revision number,也表示這一次不會有功能上的新增(別打我別打我)…

2.7 後面轉變也挺多的,最少我看見後台編輯版面又復古,只用了純 JavaScript 沒壓縮沒怎樣的把設定和翻譯檔送到客戶端… 怪哉。

-1 版則僅僅解決編程時的一時大意之誤… 羞家死了

提升 YouTube 播放質素的秘技(續)

早前介紹過「秘技」讓 YouTube 播放影的畫質提升至「高清」水平﹐但這小技巧僅限於在 YouTube 網站上使用(其實現在按 “Watch in High Quality” 就可以了)。不過看來在網頁上內嵌的影片也可以受到同等待遇。剛剛又有人發現,只要在引用 URL 尾端加上 “&ap=%2526fmt%3D18″ 這串字,就可以讓播放器播放經 H.264 壓縮的影片。

又讓我們比較看看:

高清版:

Trackping Separator 2.x 開發記事

TSP久沒更新,其實都是我懶,不是苦無點子。從連入連結和 technorati 就能看見不少人嫌舊版TSP安裝麻煩,改theme /主題改得亂七八糟。老早發現其實 WordPress 有兩個 filter API可以幫忙省免大部份麻煩的步驟,在另一插件 MCEComments 出現之前就有了構思,不過自從 Pingback/Trackback 成為垃圾郵件業者的新武器,就差不多沒有人在用。這年頭連進來的訪客都寥寥可數,沒有留言建議不在話下。況且,不少主題現在都內置(例如 K2)這種功能,這個插件就更沒必要存在了。

幾天前看見舊版面有點亂,就打算把整個主題推倒重來,再到官方主題站挑個新的。選了這套 Big Blue,清爽圖片少,就覺得很適合。字體有點小,不過調一下CSS就可以,問題不大。反倒是留言,雖然有內置分離功能,不過從主頁看留言數卻跟內文顯示的不同,不順眼。

所以有了動機。程式碼其實都不太難,改寫幾句就 OK。但是,卻被 PHP 這種本來是樣版語言的設計踹了一腳。我不小心的放了兩個 \n 在插件的 PHP 後面,自然它們也出現在準備輸出成網頁的那截記憶體裡。XML 的設計又很龜毛,哪管是空白字元,只要有東西在 <?xml version=”1.0″ ?> 之前就得去死,所以改好插件的頭兩天 feed 都變成了奇怪的亂碼 (我不知道為甚麼,明明只是空白字元而已)。還好有大雄經 twitter 提醒,不然讓這不到 200 個的忠實讀者受罪,那叫我如何受得起?

軟件這種東西永遠有 room for improvement。或許放一頁設定內頁,或許可以把外連列表 (listtrackping)都改成自動加上…

後記:插件是故意寫成 non-backward compatible,因為兩個版本(1.1.1 和 2.0)在功能上是毫無分別的。