我在 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 NetworksAnalyzeAirAirMagnetSpectrum Analyzer、Cognio (被 Cisco 收購) 的 Spectrum Expert

這些工具都十分強大,如 Cognio Spectrum Expert 辨識解析度為 10 kHz,應用軟體甚至可以幫你辨識出發出特定訊號的裝置類型,可以輕鬆的找出無線網路問題。不過價格也高達 4000 上下美金,不算是很經濟的解決方案。

退而求其次,就是比較單純的 USB 介面簡易頻譜分析儀。如 Nuts About Nets、或 MetaGeekWiSpy 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,售價還是要達 400 美金,總而言之這個價格跟其他類似的產品比起來已經是相當實惠了。

使用 WiSpy 2.4x 搭配 ASUS EEEPC,再裝上 Debiankismet, 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) 利用無線網路卡掃描的結果,更友善的顯示出每個訊號的強度。也整合了頻譜訊號特徵比對功能,透過拖拉,就可以對照出可能的干擾類型。這些新的功能是目前開放原碼工具中尚欠缺的。

關於這些新功能,請參考以下展示畫面

簡單講,就是這次活動網路遜掉了。

主要問題是場地對外頻寬不足,只拉了一條 8M/640K Hinet ADSL,於是變成大家都可以連上無線網路系統,可是卻無法快速的下載網站,或順暢的使用 Y!LiveSkype.

先說明場地的佈建方式,原先第一次場勘的時候,外面的贊助商帳篷預計是要搭設於 B 廳與 C 廳間的廣場(場地平面圖)。由於廣場與 A 廳中間還有其他建築物,當日也還有展覽,為了避免佈線的麻煩,建議籌辦單位準備兩條 8M/640K,分別拉線於兩棟建築物。

結果後來出席活動前一週的籌備會議時,才知道要將各贊助商攤位移至緊臨 A 廳的廣場,對外網路也暫時只改申請一條 8M/640K。會議上,籌辦人不停的詢問我,8M/640K 是否夠用?只要我說一句「不夠用」,他會馬上再去申請一條沒問題。不過當下活動支出已經稍微超出預算,若換了網路,恐怕得少買一些食物。

甚麼!居然要拿網路會議三寶 (網路會議有三寶,正妹、網路、食物不能少) 來互換,身為阿宅的我當下決定拿出男子漢的氣概,咬著牙說「行!」。畢竟一條中華電信得 8M/640K 臨時短期租用可以換很多很多食物阿。(這個決定是災難的開始)

現場使用的設備跟上次 OSDC 差不多,一樣是從 FON 臨時借用了一些產品跟網路設備。並且將軔體全部換為客制化過的 OpenWrt。不同的是,由於上次 OSDC 使用的會議室已經有學術網路跟網路佈線,因此完全不用顧慮現場拉線跟頻寬的問題。

這次 Blog BoF 是臨時佈建,現場沒有任何現存的線路與管道。且場地分為兩個部份,在內場 A 廳的部份,佔地約 10Mx50M,屬於長狹空曠型。但是由於場地內人員會走來走去,若只靠一台機器或前後各一台,勢必會因為人員走動而干擾無線網路訊號。而外面廣場與 A 廳則隔了一個小山坡,無線勢必受到干擾。於是使了一些方法讓全場都可以覆蓋到無線網路訊號。

最後的作法是於圖中藍色甲一工作人員區設定為總部,中華電信 8M/640K ADSL 接於此。中華電信小烏龜給了一台康全電訊 CT-511C,只有單孔網路,於是接出至 SMC FMCFS5,示意圖如下

其中甲一、乙與丙一,各接了一台寬頻路由器,與一台無線網路基地台。其中藍色甲一作為主要服務基地台,接於 Buffalo BBR-4HG,搭配 FON 指向性天線與甲二的 Repeater 大致可以覆蓋整個內場。使用人數一直都保持於 30-50 人,整天都正常運作。只有中途因為手殘改亂了設定,重新開機一次。

至於紫色乙區,則是提供給講者、Y!Live 廣播及前排觀眾使用。使用了 SMC SMCWBR14T-G 與一台無線網路基地台,SMC SMCWBR14T-G 已經關閉它的無線功能,讓另外一台 FON 無線網路基地台負責。沒想到它整日還是當機了三、四次,造成 OpenWrtF 與 Y!Live 中斷服務。SMC SMCWBR14T-G 是個很糟的產品。

而綠色丙一區則使用 D-Link DI-624S 與 FON 無線網路基地台。一樣關閉 DI-624S 的無線網路功能,靠 FON 運作,丙二則使用 Wireless Repeater 將訊號接取廣播到戶外舞台另外一側。不過下午因為曬太陽的緣故,丙一舞台旁的 FON 熱壞了,重開機一次,重新開機期間丙二則自動切換廣播甲一的無線訊號。

如此的規劃,大致上沒有嚴重的問題。由於會場都收的到訊號,且週邊 2.4Ghz 頻段很安靜,所以無線大致上沒有問題,只要持續監測他們正常運作即可。麻煩的是,由於這次拿到三個公開 IP,各接於不同的 Router,非常不方便監控每一台的流量與狀態。下次應該把他們都換成開放原碼的軔體才是。

這次最嚴重的問題就是頻寬完全不足!整天都非常專心的再監測到底頻寬被哪些人吃掉了,並且試著把他們暫時踢掉,把頻寬讓給其他人使用。當下發現場內許多人都不停的使用 Y!Live, TwitterButoo

剛稍微測試了一下最吃頻寬的 Y!Live,收到以下的數據

狀態 下傳 (kBit/s) 上傳 (kBit/s) 8M/640K 大約承載使用者數
瀏覽視訊/不開視訊 700~800 10~15 10
瀏覽視訊/視訊討論 1100~1500 80~200 3
廣播視訊 300~400 300~400 2
瀏覽熱到爆頻道 3200~3500 60 2

若純粹瀏覽 Y!Live 單一頻道,且頻道其他聽眾沒有開啟視訊/語音的狀態平均需要下載 700~800 kBit/s, 上傳 10~15 kBit/s。若把自己的 WebCam 也開啟,進行單位觀眾對頻道主人視訊對話的話則需要下載 1100~1500 kBit/s, 上傳 80~200 kBit/s。而自己開設頻道所需的頻寬,且觀眾都未開語音時,需要 120~150 kBit/s,上傳 80~200 kBit/s。

上述都是單純的使用。根據昨天 Blog BoF 頻道的盛況,同時有四五頻道訪客加入視訊討論,由於會同時收到數人的影像,需要的頻寬至少需要下載 3200~3500 kBit/s, 上傳需要 60 kBit/s.

如此證明,只要超過十個人開啟 Y!Live 瀏覽視訊,會場的 8M 線路就會爆掉。超過兩人進入 Blog BoF 視訊頻道,現場網路就會滿載。

問題在於昨天上午活動開始時,每位有電腦的朋友都會開啟 Blog BoF 首頁去看議程,偏偏 Blog BoF 首頁就內嵌了 Y!Live 視窗,於是很不幸的,上午的狀況非常的糟。第一場過後就開始在場內每台機器上擋掉 Y!Live 網址,如此至少眾人不會不停的於場內同時開啟 Y!Live.

不過麻煩的是大家還是會不停的、連續的讀取 Twitter 或巴布的回應,剛剛測試了一下類似的行為會用掉平均下傳 65~150 kBit/s, 上載 15~30 kBit/s。8M 預計可以支撐 20 餘人,就算兩條 ADSL 也只能承受 40 人這樣搞阿。就算拉了多條線,也得再處理分流的問題才能有效分擔流量。

下午的時候,負責轉播的 Tyler Lin 已經暫時轉移到備援的 3G 網路上 (因此下午影音效果可能不佳)。問題是大家還同時開 Youtube/Y!Live/Skype/PTT/Twitter/Buboo 阿,其中光是 Skype 對話大約需要 200~300/100~150 kBit/s。會場平均上線人數都超過三十到六十人,這樣講起來上傳要拉到 3M 以上在尖峰時段才稍微堪用阿。於是整場都忙著調整 QoS 與踢掉用太多頻寬的人,中途還不小心踢掉林凱洛小姐,害她嬌驕嗔的在 Twitter 上幹譙 (我還白目的持續在不同的機器上踢了好幾次,到底是甚麼軟體會同時開一兩百個 TCP Sessions 阿)

凱洛小姐,我把妳的 Laptop MAC Address 背起來了,不會再犯,請原諒我吧!

不過,CarolPunch Party 6 有一場與毛向輝作 Skype 對談的節目,雖然直接接了有線網路,效果也相當不好,雖然當下 PP6 已經是整天活動的高潮,場內已經由於節目太嗨沒有人在上網。看來這應該是中國對台灣的網路問題,與會場的網路無關。因為下午笑談華文部落格江湖二三事議程時,喬敬用的是自己的 3G 網路與毛向輝作 Skype 對談,語音效果也不佳。

檢討與改建

  • 應該認真分析、預估鄉民的行為與需求,一點都不能大意阿。
  • 種活動,下次或許可以直接租用學術單位的會議室,這樣可以借用現成的網路基礎建設。會議前一天才拉好臨時線路,實在令人劈劈挫。
  • 要先跟各場主持人講清楚需求,像是需要現場作 Y!Live/Skype 等需要高優先值的流量。可以先設定起 QoS,將優先值調到最高。
  • 對外的機器應該準備一台 PC 或更換開放原碼軔體的機器,這樣才方便臨時作最佳化修改與監測現場狀態。每一台 AP 應該先內建 Management Agent,不要當下才切換網路各台連入設定。

另外,萬一覺得 BoF 網路不好用,完全是我錯估情勢的錯阿。陳力完全是看了這篇被騙的。Orz

若是要對我砍劈或指教,請報名免費的 COSCUP 2008,我將於 8/24 09:30-10:40 間分享相關經驗。

補充附註:

CHT 臨時租用線路,目前只提供 ADSL,最高速度到 8M/640K。8M/640K 資費1500 + 1500 + 1000,上述 4000 元是基本費用,另加 3000 保證金。另外 電路費用+網路費用+電話費 則是以每日 1/15 計算。例如 8M/640K 一週租金大約是 (1599+500)/15*7 =~ 980 元。

光纖部份不屬一般臨時租用業務,需另外接洽中華電信二線業務人員。

以上補充作為未來活動參考之用。由於主要支出為設定費,因此請盡量申請光纖或更高速網路。

試著把 rtorrent 升級到 0.8.2/libtorrent 0.12.2,新版修正了幾個嚴重的 memory leaks 與 EINTR signal handling 問題,以及 Super-seeding (Initial seeding).

由於 rtorrent 在 Debian sid 中一直都是 0.7.9,於是只好繼續自己維護一個新版本的 debian packages。Ubuntu intrepid 倒是已經是 0.8.2

編譯的時候,由於我的系統已經升級到 g++ 4.3 的緣故,必須配合 Header dependency streamlining
補入 C++ Headers。這個問題已經已經有人回報到 trac 上,詳細修改可以參考 Gentoo 的 patches. (libtorrent-0.11.9+gcc-4.3.patch, rtorrent-0.8.0+gcc-4.3.patch)。

由於時常需要同時開啟數個 Terminal 來作系統設定,因此一直在找一個方便安排視窗位置的軟體或方法。

雖說 GNU Screen 的 regions 機制,可以讓你在同一個 Screen window 中切割出不同的橫向視窗。但是你得熟記指令或熱鍵才好於不同的視窗間切換,無法使用滑鼠切換視窗焦點,當然也無法方便的利用滾動軸查看稍早的指令輸出。且 GNU Screen 目前還不支援垂直分割,必須套上額外的補釘

另外一個方式是使用 Tiling Tabbed Window Manager,若你習慣純粹使用 CLI 來工作,使用應該沒有甚麼大問題,它會協助你將終端機規矩的置於數個獨立視窗中,你可利用 Window Manager 設定的快速鍵來切換視窗。常見的軟體有 Ion, Aweson, Ratpoison, Stumpwm, Wmii 等。

但若你已經習慣了現有的 Window Manager,或習慣讓大部份的軟體使用浮動視窗的介面。你可以試試 terminator。terminator 是使用 Python 與 VTE Terminal Widget 所寫成,於其他的終端機模擬軟體不同的是,terminator 方便讓你把視窗排列組成格狀,你可以任意對視窗作橫向或垂直分割。於是你可以方便的開啟一堆視窗,並將他們安插在你想要的位置。

由於 terminator 支援 Gnome Terminal 的 Profile (設定組合),我習慣設定一個 coding profile,定義方便閱讀程式碼的小字型 (方便瀏覽更多程式碼),並使用 terminator -f -p coding,開啟一個全螢幕的視窗來工作。這是我查看 terminator 原始碼的畫面。

新版的 terminator 0.9 在七月初發行,增加了幾個重要的功能包含了 Tabs, Drag & Drop, Terminal zooming/maximizing, support for ~/.config/terminator/config 等 (細節請參照 trunk 中的 ChangeLog)。

拖拉視窗功能則是非常重要的殺手級功能,從此,你可以方便的將任一視窗拉近另外一個分割視窗、或另外一個分頁中。我在使用 Gnome Terminal 時,也時常使用拖拉功能,將分頁拉出成為獨立的視窗,可方便對照程式碼、文件,或者將相關於特定專案、伺服器的視窗拉近同一個視窗中作為分頁。Terminator 在新版中也一併實做了 Tabs 分頁功能。

另外一個好用的新功能是全螢幕或放大螢幕,由於你通常會開數個終端機進行不同的事情,若是想專注在單一視窗時,就可以使用全螢幕 (Ctrl+Shift+X),再按一次就可以回到多視窗功能。而 Zooming (Ctrl+Shift+Z) 則是將當下的視窗解析度放大到全螢幕,於是你可以得到大字型的單一視窗。

新版的中也做了設定檔,可以讓你稍微自訂一些參數設定。但是這尚未包含所有的設定,如 profiles 就還不能在設定檔中設定。

目前 terminator 已經相當好用,若是可以再實做類 Screen/Vim 的視窗切換快速鍵,那就更方便不過了。

專案首頁位於 Launchpad.

試著在剛裝好的 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 兩個的功能,應該可以提供較有彈性的功能吧。

Flash Player 9 後又過了一年半,Adobe 終於又將發行支援 Linux 的 Flash Player 10

新版的 Flash 在各種多媒體處理的能力與效能上都有重大的改進。包含了新的 繪圖/3D API、新的音效處理 API,在 Linux 平台上尚新增了以下功能

  • Linux WMODE (windowless mode)
  • Video4Linux v2 Support
  • unloadAndStop
  • Limited Fullscreen Keyboard Access
  • File Reference runtime access
  • Dynamic Sound Generation
  • Large Bitmap Support
  • Context Menu
  • GB18030 Compliance
  • Ubuntu OS Support

終於,Flash 不會老是浮起來蓋住 HTML。當然,我最關心的其中一個功能是新的 Flash Player 支援 v4l2,於是我終於有機會不需靠 Flashcam 或 patch libflashsupport.c 使用 Webcam,可以開始玩 Yahoo Live, wooMeseesmic 等網站。

但稍微測試了一下還是有些問題。Flash 似乎無法與我使用的 uvcvideo 融洽相處,總是會再抓了一張 frame 後抱怨 ‘Camera is unavailable, may be in use by another application‘。目前測試的版本是 Flash Player 10 Beta2,希望正式版發行前可以修正這個問題

另外一個令人感興趣的功能是,在新的 Flash 10 的 Release Note 中提到了 RTMFP,與 RTMP 不同的是,RTMFP 是以 UDP 為基礎的 P2P 通訊協定。根據 Release Note 中的敘述,這項技術來自 Adobe 於 2006 所收購的 Amicima 公司,在 RTMFP FAQ 中有稍微詳細的技術說明。以目前的技術規格來看,雖然無法做到類似 Bittorrnet 的 P2P Swarming 來作檔案分享。但是可以拿來作點對點的通訊協定替代品,對於建立像 wooMe 這樣的服務來講,可以省下大量的頻寬才是。