Flickr uploader (postr)
Nautilus 自從 2004 釋出的 Gnome 2.6 後整合了 Python Plugin 介面,相較於 C API,用 Python 來刻外掛軟體顯然要快速方便多了,而且彈性也比 G-Script 好多了。只要稍微了解 Nautilus 架構,再配合 Python 與 GTK/Gnome 的 binding library,就可以很輕易的在選單上添加新的功能。
其中一個利用 Nautilus Python binding 刻的好用軟體就是 postr, 是一個方便上傳照片到 Flickr 的小工具,以 Python 寫成。安裝後重新啟動 Nautilus 後,就可以於圖檔檔案之右鍵選單中找到 “Upload to Flickr” 上傳功能。
介面提供了基本的編輯介面,你可以逐一設定每個檔案的名稱、敘述、Tags 或加進特定的群組中。也可以一次上傳數個檔案,還算相當實用方便的小工具。
另外一個類似的工具是 Desktop Flickr Organizer for GNOME (以 Mono 開發),管理功能更強大,可以用以維護或備份已上傳的資料。但相較之下比較不穩定,許多例外都尚未妥善處理,偶爾會無法正常運作。
無線網路訊號與頻譜分析儀
我在 OSDC 的佈建一文中提到做場勘時,需要使用 Spectrum Analyzer。這是為了要挑選一個比較少訊號、雜訊干擾的頻帶。
很多人都知道,在設定無線網路 (WiFi) 時必須小心選擇將使用的頻道 (Channel),避免與其他的基地台使用相同的頻道,以免互相干擾。
比較少人注意的是,由於 IEEE 802.11 b/g 使用的頻譜是 22MHz 寬,因為法規與技術規格上的限制,其實真正不重疊的頻道只有三、四個 (端視你在甚麼國家)。在某些國家如台灣雖然允許 11 個頻道,但是其實只有 1, 6, 11 這三個頻道是沒有與其他頻道重疊的。

Source: How Wifi channels overlap
於是,你最好只使用 1, 6, 11這三個頻道。根據 Cisco 的一篇舊文章 「Channel Deployment Issues for 2.4-GHz 802.11 WLANs」,即便你選用 1, 4, 9, 11 等看似只稍微重複的頻道,也會因為高密度的接取使用,使 802.11 所應用的 CSMA/CA (停看聽才過馬路協定) 協定會因為避免碰撞而造成網路使用停頓 。(Co-channel interference)
更甚者,因為重疊的干擾訊號不夠強,而其他的設備無法辨識為 802.11 訊號,誤認頻段是乾淨的而持續的送出訊號,如此一來偶爾可辨識、偶爾視為雜訊的狀態下,反而加重碰撞現象,使網路效率更加惡化。(Adjacent-channel interference) 更糟的是且 802.11g 所使用的 OFDM 技術所使用的頻譜訊號強度比 802.11b 所應用的 CCK 更強 (應該說相較之下,OFDM 的訊號衰減較小),干擾影響更為嚴重。
除了頻道必須小心選用較少無線網路基地台佔用的頻道外,還要注意其他的干擾源。由於無線網路使用的是 2.4Ghz 免授權頻譜 ISM Band,而這段頻譜是有可能被其他的射頻源所干擾的。在家庭中,最常見的干擾源是微波爐、藍芽、無線電話以及某些無線監視系統等。
不像是選用頻道,你可以用無線網路卡掃描現有的無線網路基地台狀態,有許多干擾訊號是你的網路卡無法辨識、也無法告知有許多雜訊的。特別是舉辦研討會時,不少人都會攜帶會干擾無線網路訊號的藍芽手機。這個時候,你就需要使用頻譜分析器來辨識真正乾淨無干擾的頻道了。
然而,好的一套頻譜分析儀加上軟體,市場價格常常會超過一兩萬美金。而且這些設備都十分龐大,只適合擺在實驗室,不方便帶著到處跑。
所幸有些公司開發了給筆記型電腦使用的便利頻譜分析儀,像是 Fluke Networks 的 AnalyzeAir、AirMagnet 的 Spectrum Analyzer、Cognio (被 Cisco 收購) 的 Spectrum Expert。
這些工具都十分強大,如 Cognio Spectrum Expert 辨識解析度為 10 kHz,應用軟體甚至可以幫你辨識出發出特定訊號的裝置類型,可以輕鬆的找出無線網路問題。不過價格也高達 4000 上下美金,不算是很經濟的解決方案。
退而求其次,就是比較單純的 USB 介面簡易頻譜分析儀。如 Nuts About Nets、或 MetaGeek 的 WiSpy 2.4x。這些產品只要上述的十分之一,約 USD 400 上下即可入手。雖然無法達到自動辨識設備類型,但是已經足以排除頻譜干擾的問題。若你經驗夠的話,也可以從訊號的模式猜測出可能的干擾類型。
身為偏好使用自由軟體的偏執狂,我自然選用了 WiSpy 2.4x。除了因為 WiSpy 2.4x 有免費的 Chanalyzer (Windows) 與 EaKiu (Mac OS X) 可用外,還有強者 dragorn 做的開放原碼 Spectools。
根據 Tim Higgins 在 SmallNetBuilder 所寫的 MetaGeek Wi-Spy 2.4x Review: Better, but Bigger Bucks 一文,你可以知道 WiSpy 2.4x 的主要元件是 Chipcon CC2500 (現為 TI) 2.4 GHz tranceiver 與 Silicon Labs 的 C8051F326 (8051 MCU with 25 MHz System Clock). 成本其實相當便宜。不過由於這是 Niche Market,這個價格跟其他類似的產品比起來相當便宜。
使用 WiSpy 2.4x 搭配 ASUS EEEPC,再裝上 Debian 與 kismet, Wireshark, Spectools 後根本是輕巧的神兵利器!由於 ASUS EEEPC 上得無線網路卡是 Atheros AR5007EG,只要裝上部份開放原碼的 madwifi 驅動程式,就可以把無線網路卡設定為 Monitor 模式。
於是你可以使用 kismet 一邊監測無線訊號中的 Beacons,一邊以 spectools 監測訊號強度與雜訊。
只要再配上一顆 USB Wirless NIC,就可以同時監測與連入各機器中作設定。若是 EEEPC 的螢幕換成 OLED,那就更完美了 (不過相對價格也會高很多)。由於我的 X60 也是用 Atheros AR5418 802.11bgn,因此大部分時候,我還是在 X60 上享受「大」螢幕的快感。
剛剛提到 WiSpy 2.4x 的軟體無法作設備自動辨識,與其他工具比起來稍遜。但 MetaGeek 在六月的時候,釋出了一版新的 Chanalyzer (beta, 現在已是 3.1 版),整合了 InSSIDer (或類似 NetStumbler) 利用無線網路卡掃描的結果,更友善的顯示出每個訊號的強度。也整合了頻譜訊號特徵比對功能,透過拖拉,就可以對照出可能的干擾類型。這些新的功能是目前開放原碼工具中尚欠缺的。
關於這些新功能,請參考以下展示畫面
Command Not Found Magic
試著在剛裝好的 Ubuntu 上亂打一些指令時,發現在 CLI 介面,Ubuntu 會聰明的提醒你忘了裝甚麼軟體套件。
user@user-laptop:~$ proxychains The program 'proxychains' is currently not installed. You can install it by typing: sudo apt-get install proxychains -bash: proxychains: command not found
稍微玩了一下,發現是 command-not-found 這個神奇法術。軟體套件包含 /usr/lib/command-not-found 、是一個用 Python 刻的指令稿,此軟體會查詢預先建成的指令/軟體名稱資料庫,只要餵給它指令名稱,他可以迅速的提示如何安裝含有該指令的軟體套件。由於資料庫是 gdbm,且大小只有 2.3M (command-not-found-data 0.2.17ubuntu1),因此查詢的速度相當快,使用者不太感覺到差異。
要使用此功能,尚必須在 bash 中定義一個 command_not_found_handle 函式,在查無指令時自動執行 command-not-found. Ubuntu 已經將這段程式建於 /etc/bash.bashrc.
不過目前使用的套件資料庫是預建的,因此不會依照你所使用的 apt sources 自動更新資料庫。若是可以整合 apt-file 與 dlocate 兩個的功能,應該可以提供較有彈性的功能吧。
Adobe AIR for Linux
今年三月底時,Adobe 在 Adobe Lab 發行了 Adobe AIR for Linux alpha 版本。Adobe AIR 是一種執行環境,提供一個可使用 Adobe Flash, Adobe Flex, HTML 與 Ajax 開發桌面 RIA 應用程式的平台。
試玩了一下,可以安裝 twhirl (Running Twhirl on Ubuntu 7.10) 等軟體沒有問題。可惜的是,目前 Linux 版本還不能支援 XIM,以至於無法輸入中文。
另外一個惱人問題是 Adobe AIR 將 zip 格式檔案都以 xdg-mime (xdg-mime of Portland project) 註冊成使用 Adobe AIR 開啟,以至於你的 zip 檔、OpenOffice 文件檔 (也是 zip 壓縮格式) 都變成以 Adobe AIR 開啟了!
解決辦法是
先移除原本的 xdg-mime 設定 # xdg-mime uninstall --novendor "/opt/Adobe AIR/Versions/1.0/support/AdobeAIR.xml" 以編輯器開啟 "/opt/Adobe AIR/Versions/1.0/support/AdobeAIR.xml",並移除檔案中以下文字 <magic priority="100"> <match type="string" value="PK\003\004" offset="0" /> </magic> 重新安裝 xgd-mime 設定 # xdg-mime install --novendor "/opt/Adobe AIR/Versions/1.0/support/AdobeAIR.xml"
上述 # 開頭指令,指使用 root 執行。
Reddit 開源了
哇,若你是個 Geek, 而且對 Linux, Python, Open Source Software 感興趣,你大約已經常常閱覽 Reddit.com,Reddit 是一個 Social bookmark 網站,使用族群較為偏熟悉技術的工程師。
就像所有的 Social Bookmark 一樣,首頁的排序與計算方式總是受到質疑與挑戰。於是 Reddit 乾脆就把整個網站的程式碼開放原碼,於是所有人都可以看到演算法與修改,也可以回饋建議、甚至 Patch。程式碼可於 code.reddit.com 下載。目前 Reddit 用的其他開放原始碼軟體還包含 Debian, lighttpd, HAProxy, PostgreSQL, Slony-I, 數個 Python libraries, Psychopg, pylons, Solr, Tomcat, Ganglia, Mercurial, Git, gettext, daemontools 與 memcached 等。
於是,好事者再也沒有理由質疑 Reddit 動了手腳。
reddit goes open source: message from the alien mascot
Software sucks
大約任何一個軟體開發者都可能碰到詭異的 undocument API 、噁爛的架構,或者碰到設計有問題的硬體,大約都會情不自盡的爆粗口。偶爾,你甚至會被其他莫名其妙的開發者惹火,例如未充分溝通就擅改程式碼包成套件的情境。
前些時候,quodlibet 的 Debian 套件維護者 Sebastian Dröge 因為誤解了 quodlibet 所使用 GStreamer 中的一個 API 相容問題,於是直接擅改程式碼中的一段,以便可以於新版的 GStreamer 中使用。但是這樣的行為卻未事前於 quodlibet 開發者 Joe Wreschnig 溝通,而那其實算是 GStreamer 的問題,並非 quodlibet 的錯誤。
於是,Joe Wreschnig 惱怒之下,身為一個上游開發者,就在 quodlibet 中也改了一段因應 GStreamer API 更改的措施。而且順便戳了 Sebastian Dröge 一下,要他去死一死吧。於是身為一個 Debian Developer,自然的解決方式當然是發一個 Bug Report。而且解決的討論很自然就往 DFSG 與 Debian Policy 發展。所幸,最後 Tristan Seligmann 另外改了程式碼,並做了一份新的壓縮檔,算是解決了這個幼稚問題。
有趣的是 Joey Hess 在討論中,順便彙整了過去 Debian 修改紀錄中,曾經出現的粗口表,非常好笑,只能說 Software 真是 Sucks。XD
另外一個好玩的研究是 Vidar Holen 研究了 Linux 核心中有多少詛咒粗口,Linux kernel swear counts。我們可以拿程式碼中的髒話平均數量當作判斷品質的一個參考值嗎? ![]()




