從小,人們被捧在手掌心上,在父母和親人眼裡總是最聰明、最優秀,自己不知不覺也有了這樣的自我認同。上學後,團體生活開始挑戰了自己的認同感,為了保護『最優秀』三個字,使人在許多『最優秀』孩童的競爭中,努力贏取眾人的認同。到了聯合考試,聯合的比賽又再次挑起戰爭,掀起所有同年孩子的『榜首』競爭,人們依然為了這稱號向上攀爬,即使攀得滿身血淋淋,狼狽不堪。最後,我們又進入了橫跨數十年又不分敵我的『社會之戰』,比上比下也要證明『能力第一』、證明『自己最重視的一切』,保護『自己重視的各種事物』。
贏得外界的喝采,是自我證明的方法,一旦與眾人有所共鳴,自己也會對自己更有所認同。但是,往往外界假相蒙敝了自己的眼睛,外界的喝采並不是完完全全因為你的能力,而是另有加分管道,在不是單靠唸書得分的社會上尤為明顯。極其悲哀,許多人的人生數十年來都在一直重覆這個漏洞百出的實驗,千年下來仍然如此。
不單只有含著金湯匙的人,人人都是某種程度上的公子(王子),可以搖旗吶喊率眾人出師。若是丟掉『公子』兩個字,自己到底值多少價值?恐怕多數人從來沒想過或真正證明過這問題,因為割袍斷義、大義滅親不是每個人都能做得出來。
若是在測量自己的器量,懂得天下比想像的大後,再回去當公子,或許未來才有機會懂得當一個真正的明君,服天下之眾,不然,永遠只是歷史的丑角,在此勵己之。
2009年7月14日 星期二
能力第一,獨一無二,皆因你是公子
2009年7月12日 星期日
實作於 User-space 的 pppd
前些日子在『Linux 下的網路連線整合』曾提到 Linux 網路機制的實作情況,若要做大整合,PPP (Point-to-Point Protocol)是首要考量的目標之一,因此這兩天就花了一點時間,透過現有 user-space 的 pppd 實作 PPP 的狀態提取,初步得到了些成果。
由於 PPP 存在的架構特殊,深入了解 pppd 的原理是必要的,如此才能完整處理資訊。不過,PPP 所牽涉的範疇比較廣,不少相關機制交錯於 kernel-space/user-space 之間,還好實作在 kernel-space 的機制,我們都可以統一透過 ioctl 去操作(如:Network Interface),並無太大困難。可是, PPP 實作於 user-space 的另一半機制,就沒有一定的 syscall 可以保證達成全部操作。
為何 PPP 有 kernel-space/user-space 的設計,要從瞭解 PPP 是什麼東西開始。正確來說,PPP 只是一種通訊協定,讓兩端通訊點能夠在此通訊協定上,建立 TCP/IP 等網路連線,它與硬體絲毫不相干,硬體裝置對它來說只是種傳輸資料的媒介。而一般人會誤以為 PPP 也處理 Modem 的 AT Command,是因為在過去語音通訊的年代,PPP 總是被拿來做在舊式撥號連線的通訊協定,大部份相關應用都是搭配 AT Command 使用。
也因為 PPP 本身很單純,在 kernel-space 的設計,只負責資料壓縮、解壓縮、轉換以及 Network interface 的建立和對應,而真正在與 Modem 溝通的,則是透過 user-space 的 pppd 這支程式。pppd 透過開啟 /dev/tty* ,並使用 AT Command 和 Modem 交換資料,取得通訊後再將通訊資料傳回 kernel-space 實作做解壓縮、轉換等處理,最後以 virtual network interface(ppp0, ppp1...) 的形式出現。
整個流程之中,其實 PPP 的 kernel-space 實作並不曉得資料是從哪個裝置進來,也不經手網路設定,除資料處理和 interface 對應的操作外,全都由 user-space 的 pppd 負責, pppd 的工作包括記錄 ppp0 與 /dev/tty* 的對應、分析遠端 Server 給的資訊以及各種網路設定。對於網路狀態的記錄,pppd 都存在 /var/run/pppd2.tdb 之中,而該資料庫是採用 samba tdb 的格式所寫成,若是想得知目前 PPP 的網路狀態,可透過分析該檔案達成。
當然,我們可以自己撰寫程式取代 pppd,就不用去讀取 tdb 檔案,不過因為 pppd 幾乎已經被各 Unix-like 系統(Linux、FreeBSD 等等)所使用,近乎標準,似乎沒什麼必要重寫。
2009年7月10日 星期五
人類夢想中的 3D Touch and Gesture Interface
大多數工程師整天埋頭苦幹,也許早就遺忘了眼前的各種高科技裝置在被發明前,所帶來的夢想有多麼令人嚮往,面對眼前的繁瑣雜事,只剩下無奈和痛苦。常在電影裡看到人類對未來科技的憧景,好像天方夜譚一般,尋思,若扣除某些尚未被創造的科技,我們能夠達到夢想中的幾成呢?
我也想發展像夢一般的 User Interface 呀!:-)
作者:
Fred Chien(錢逢祥)
發表於
上午 7:00
0
則網友意見
文章分類: User Interface, 心情筆記, 有趣新構思
2009年7月7日 星期二
Linux 下的網路連線整合
比較有聯絡的朋友們,大概都知道我最近正在忙著開發 LXNM(Lightweight Network Manager),這也是為什麼現在一直研究行動通訊的東西,前些日子發表的『GSM/GPRS/HSDPA Modem 總是告訴我你在哪裡』就大致記錄了個研究開頭。
原則上,LXNM 的設計是可以輕易 cross-platform,但因為開發環境上仍然使用 Linux ,所以還是以『 Linux 上可以動』做為第一階段的主要開發目標。而過程中發現,Linux 下所有的網路連線都是統一透過 Network Interface 去做管理,如常見到的 eth0、wlan0 等等。這對一般的網路卡(Enternet)和無線網路裝置(Wireless)來說,我們可以認定 Interface 所直接對應的就是硬體裝置,但是,數據機(Modem)卻是一種例外,並不算是一個 Network Interface。這令人胡塗,就硬體角度來看,他們應該都算是一種通訊用的裝置,但在 Linux 下是是如此不一致被處理。
若要使用 Modem 連上TCP/IP網路,則需要有撥號的階段,透過 PPP(Point-to-Point Protocol),然後建立一個 Virtual Network Interface,因為最終的可用網路連線(Connection)還是必需為 Network Interface 型態。可是這種虛擬的介面,並非直接對應到 Modem ,必需透過其對應的 PPP kernel driver 才能循線得知 interface 與 Modem 的關聯性,在這部份的實作有些困難。
然而,我們便可以將所有 Network Interface 視為可用的網路連線(Connection)了嗎?並不是這樣的,一個常見於家庭中的應用就可以打破了這定義 - ADSL。目前廣為一般家庭用的 ADSL 網路,多半都使用 PPPoE(Point-to-Point Protocol over Ethernet)做為連線的方法,這意味著我們還是得像 Modem 一樣撥號連線,只是一般 Modem 可能是透過 Serial port(如:/dev/modem、/dev/ttyUSB0),而 ADSL Modem 是透過 Ethernet Device(也就是某個 Network Interface,如:eth0)。
所以,照這樣來看,PPP 可駕馭在所有的 Device 之上,囊括了 Modem、Ethernet、Wireless 等等,甚至有可能在 PPP 所建立的 Virtual Network Interface 之上有另一個新的 PPP 連線。如何去追蹤和判斷最終的可用網路連線,才是 Linux 網路連線整合的困難之處。不過有了這樣的架構觀念後,重新設計一個網路連線整合的機制似乎就容易多了。
之前單純將所有 Network Interface 視為可用的網路連線,實在是個錯誤的決定,看來又要費一番功夫改寫了。
2009年7月6日 星期一
2009年7月5日 星期日
GSM/GPRS/HSDPA Modem 總是告訴我你在哪裡
通訊技術發展至今,仍無法完全擺脫古老規格的框架,凡舉常見的撥接、ADSL(with PPPoE)、手機、到近年來的 3G(HSDPA),仍然使用著老掉牙的 AT 指令集當做通訊協定,更或者是說當今人類最先進的『數位通訊技術』根本是建構在老式交換機之上,只是換藥不換湯。而令人興奮的是,橫行市場十多年的神秘 GSM/GPRS/HSDPA Modem,只要在我們深入了解 AT 指令集後,就能揭開許多其不為人知的秘密。
也許你有支手機,但不可能也不需要為了研究而輕易拆解他,因為最容易取得的 GSM/GPRS/HSDPA Modem 實驗品可能就在身邊,就是手邊的 3G 網卡(HSDPA Modem)。承襲了手機留傳下來的 GSM/GPRS 等規格,其一整套的 AT 指令集,在 HSDPA Modem 裡都有被留傳下來,你可以驗證 SIM Card 是否被鎖、是否有新簡訊或瀏覽 SIM Card 的通訊錄等等,只要是手機上有的功能,在 HSDPA Modem 也都一應具全。
當然,你也可以透過 Modem 去搜尋和取得電信服務商的名稱,如下(請開兩個 Terminal 以方便操作,並假設 /dev/ttyUSB0 為 HSDPA Modem,該範例使用遠傳電信 3G 服務和 Huawei E220 網卡):
Terminal 1:
cat /dev/ttyUSB0
Terminal 2:
echo -e "AT+COPS?\r" > /dev/ttyUSB0
在 Terminal 1 的結果:
AT+COPS?
+COPS: 0,0,"Far EasTone", 2
OK
另一個例子更有趣,我們可以透過 AT 指令去取得『目前地區編號』和『已連上線的基地台之服務範圍編號』:
Terminal 2:
# 設 mode 為 2,使 Modem 接受和回傳基地台訊息
echo -e "AT+CREG=2\r" > /dev/ttyUSB0
# 取得目前資料
echo -e "AT+CREG?\r" > /dev/ttyUSB0
在 Terminal 1 的結果:
AT+CREG=2
OK
AT+CREG?
+CREG: 2,1,2396,1A54AF9
其中『2396』為目前地區編號(Location ID),『1A54AF9』為基地台之服務範圍編號(Cell ID)。
至於知道 Location ID 和 Cell ID 有何用呢?這裡有個收集 Cell ID 並集合 GPS 數據的計劃(http://cellid.telin.nl:8080/wasp/jsp/CellStats.jsp),該計劃甚至結合了 Google Earth,我們可以恍然大悟 Cell ID 所帶來的有趣玩夜兒:
作者:
Fred Chien(錢逢祥)
發表於
上午 7:40
1 則網友意見
文章分類: AT Command, GSM/GPRS/HSDPA, Hacking 心得筆記, 系統研發手札
2009年7月3日 星期五
LXDE的價值不單只是桌面環境
很榮幸受邀,小弟將於八月15、16日所舉辦的『COSCUP 2009 開源人年會』給予一場議程,在這短短的時間內,會簡短說明 LXDE(Lightweight X11 Desktop Enviroment) 設計理念和目前、未來發展,以及如何善用 LXDE 的真正價值等相關議題。
為因應行動裝置當道的時代,羽量級操作環境和系統開始成為眾所矚目的焦點,不單硬體,今日的軟體也開始追求省電、省時、省資源,而且,載體也已經從電腦跨 足到PDA、MID、手機等裝置。過去瘋狂消費硬體能力的軟體設計,勢必不再能立足。反觀思考如何開發輕量的系統,就變成了當前最重要的課題之一。而長久以來,LXDE就在這輕量的課題上多有著墨,其除了可以是一個羽量級桌面環境外,更是一個羽量級軟體的集合,可以協助各個行動裝置快速佈署基本的輕量系統平台。


