發表文章

真的,我愛上了黛比恩

過去曾忙於 MIS 和一些系統的開發工作時,每幾個星期就會面臨一個重大的問題『系統更新』,無論是安全更新還是開發工具、Backend 更新,總是殺死人不少腦細胞和約會的時間,痛不欲生。很開心的是,這幾次『度年』,沒有因同樣原因而忙錄苦惱了,許多開發成果也無痛過渡到每個新版本的系 統。讓我不得不寫一篇告白文,向我的愛人『黛小姐』傾訴過去被其他發行套件殘害的痛苦心聲(主要還是 Fedora 系列)。(順便,回答許多人問我,為什麼你要用 Debian 的問題) 假穩定 , 真老舊 或 許是被當初的 Redhat 所帶壞,眾所皆知的,Linux 各個發行版本,每幾個月、半年、一年就會發行個新版本,這也意味著任何版本被發行後,將不再提供任何的更新,除了『安全性的更新』之外。這樣做確實的好 處,可以確保系統是絕對穩定,尤其對於 Server 的管理維護上,有一定的幫助。 但是,只要在這幾個月之中,有什麼新東西出現,就不 要妄想去用,因為,不會有相應的打包套件出現,我們只能乖乖的等待下一版的 Release 或是自己去抓回 Source code 自行 compile。而隨著 OpenSource 越來越蓬勃,這情況更為顯著,周期更短。而且多半時候,因為這些新東西也相依著新的其他 Library ,想要裝在現有系統上,可是要費不少功夫。(不過要是你願意,可以因此練就一身 backport 的功夫。) :-) 當時,心中總是抱怨著:『別鬧了,要每半年裝一次新版的 Linux?!』。要不是因為工作開發需要,和自己好奇心的驅使,可真不會有心去做這半年一次,每次好幾個星期的苦工。更不用說處理前後版本不相容的開發性問題了。 Note: 想要玩最新的東西,就跟著 Debian 的 Testing/Unstable 走,每天 apt-get update ,比重新安裝整個系統輕鬆多了。想要玩最穩定的東西,就跟著 Stable 走,保證你可以玩到最穩定且足夠舊的東西。 品質堅若磐 『 蝕 』 回 到多年前,自從 Redhat 的系統下放給 Fedora 社群經營,那可真可以說是痛苦的開始。先不用提打包的套件品質有多差(沒有任何版本裝起來後,所有軟體都正常過),光是重 build SRPM 就不一定會成功(能夠理解 RPM 的設計,是很容易讓這種事發生的)。至於 Fedora 8 以後情況如何,我...

異想天開:每周小聚會

首先聲明,這不是技術性的聚會,只是純粹吃吃喝喝聊天打屁,甚至是約續攤、唱歌的玩樂聚餐活動。本意也只是,想要自己的各路和各界朋友不抱任何預設立場,前來聊天聚餐或玩樂。反正,我也固定會找個 Coffee Shop 或餐廳與朋友們約出來休閒放鬆一下。 因為本來就沒有預設立場,來聊是非八掛、交朋友、玩牌、惡搞、組團、踢館都可以,若是真的想要討論技術,只要剛好有人在,並且也想要互相交流,無妨。 許多人在假日比較有空,尤其是學生們,或許,弄一個在假日的 Party,是個不錯的選擇。:-) 沒這麼嚴肅,就當做是定期的網聚好了。 不過這只是初始構想,沒人附議就讓它淪為異想天開好了。我只好依舊去多鬆和其他地方報到,自個兒愉快的玩。 另外想到,正好許多資訊相關科系的同學,臨畢業前都在煩惱日後的出路,這誘使他們想多學些東西。尤其最近,零零散散一些朋友,因從沒使用過 Linux,便請我帶他們學習使用 Linux 或程式開發。不可否認,仔細而小心翼翼的解說,一次兩次還好,多講個幾次也頗感累人,且一個個帶也零散無章,一直在做重複吃力不討好的工作。何不就大家聚在一起,相互熟悉成長? 反正,聚會話題不限,我休閒時偶爾順便討論也樂得輕鬆,更何況能夠解說的也將不會只有我。總會有其他、剛好也會的人出現在這,不是嗎?

精簡縮小 Shared Library 的體積

針對一般的 Shared Library(*.so),可以直接用 strip 去精簡縮小,可是許多 Plugin 的實作,像是 Xserver 的 Driver 等,會因為 strip 而損毀,導致不能使用。但只要借助一些 Option ,就可以達成縮小又不損毀到重要 symbol 的目的: strip --strip-debug --remove-section=.note --remove-section=.comment *.so

必需承認的事實 - Linux 對 Tablet PC 的差勁支援

一句話:『Linux 仍不足以勝任日常的桌面應用,且奇差無比。』 數日前,因工作和一般需求,買了一台 Lenovo X200t。話說,Tablet PC 的使用習慣,令人一旦開始使用就立即上癮,欲罷不能呀!尤其是壓力筆的加持,讓愛繪畫的我更是愛不釋手,光是寫字都非常有感覺,可以說如果沒有壓力筆,Tablet PC 就完全沒價值了。 可惜的是,Linux 對這種手寫支援非常差,除了 GIMP 之外,沒有任何軟體支援。經過一翻找尋,找到了 Gournal 的存在,它號稱可科完全取代 Windows Note,成為一個手寫筆記本。測試過後發現,Gournal 最多只能稱為小畫家的替代品,其功能更少於小畫家,尤其未支援壓力筆,根本不夠滿足 Tablet PC 的需求。 更還沒提到 IM 的手寫支援,經過實驗,MSN 對壓力筆的支援和用滑鼠畫圖的訊息格式似乎不太一樣,Pidgin 等軟體可以收到滑鼠繪圖的訊息,但卻收不到壓力筆繪圖的訊息。當然,除了收訊息之外,Linux 下所有的 IM 都無法傳手寫訊息,這實在令人苦惱(話說全天下的女生都是用 MSN 呀),一隻手聊天的夢,碎了。 至於手寫輸入法,這對 Tablet PC 來說並不需要,既然是手寫,就請保持它的直覺,真實的手繪紀錄,手寫辨識永遠只會是難用的東西,無論是在哪裡。 就個人要求,Linux 必須還要實作出兩個重要的功能: Note with Pressure Pen IM with Pressure Pen 如果我是微軟 Windows 的支持者,那麼,我有著不可恣意批評 Linux 的原罪,但身為 Linux 的愛用者,這是愛之深責之切呀!或許開頭有氣話的成份在裡面,但類似許多地方,卻是 Linux 上不了檯面的原因。 看樣子,最近又有新的 Open Source Project 開發可以忙錄一番了,真是拜這台新電腦所賜。有 Tablet PC 的朋友們,一起加油吧!

再談 FastBoot 快速開機簡記

因為某些案子的關係,春節後多日被迫關在飯店當 L (Who's L? 請參閱死亡筆記本),果然,龍崎這角色不是人當的,再關下去真的連坐姿和行為都會變得和他一樣奇怪(話說那樣的坐姿真的會讓智商提高!好像有?!)。沒枉費多日的努力,一個使用 ubuntu 的標準 config 所編譯出來之 Kernel 已經可以達到 1 秒的速度,理論上,若是再修剪 built-in 的 driver 應該可以達到更快速度。當然,單單只是 Kernel 快很容易做到,但 X Server 必需要在第 1.3 秒左右啟動,並在 第 2 秒前看到畫面,最重要的是有可用系統狀態,才算有實用的意義。 而關於 Kernel 部份,2.6.28 已做過許多快速開機的處理,其啟動已經非常快速,但是還會慢的瓶頸在於 initrd 的檢查,和各 device 初始的等待。經過 patch 後,這兩部份依硬體不同,可減少近 1 秒左右甚至更多的消耗。此外,盡可能讓 Root Filesystem 先被 Mount 也是一種手段,尤其再配合 initram 可以在瞬間就上到 User Space 的 Early boot 甚至進到 X Server,一般使用者可以看到 boot loader 一消失,緊接著就出現 X 的背景圖和 Cursor。 X Server 的快速開機處理有些方法,主要的做法是減少緩慢 I/O 的 Input Device 的等待時間,甚至是拖出正常 Initializing Progress,讓畫面先啟動。另外的瓶頸是各家 Video Driver 的問題,減少許多多餘的檢查有助於加快初始化速度。全部 patch 過後,基本上 XServer 啟動速度可達到 1 秒出頭(測試環境中,配合使用新的 Intel Video Driver)。 到此,一切看起來都很好,但最後發現 EDID 吃掉大半時間,單單為這 Monitor 的 Detect 就會影響使用 0.5 秒以上的時間,對某些 Specific 的 Hardware 可直接拿掉,但如何提前甚至時移到 Kernel 去跑,才是比較正確的做法。 目前,Boot Loader 的速度太慢,變成主要瓶頸,尤其以 Grub 的速度更令人不敢恭維,Loading 的速度比用 USB Drive 上的 Syslinux 還慢,這是還有...

爬不停,停下朋友聚了聚

有人跟我說,路總是有走完的一天,可我只會爬,又有人說,要力爭上游,可我還是只會爬。膝下多少閃亮亮的黃金,沒得選擇,再髒也只有跪下拖著爬了又爬。坑坑洞洞崎嶇不平的路,沒有積成到處汙水坑,已經是萬幸。從生下來到開始爬,四隻腳一路爬了多遠,卻沒有個四腳獸里程錶來計算。 今天 Penk 大員外,回國後第一次和他的大房、二房、三房、四廳暫別,出了三合大宅院,帶著他的全新『金屬髮絲紋之包膜麥克書(MacBook)』上來台北聚聚,真的有夠炫耀!其閃光程度遠遠超過路上正妹配醜男、高挑姐姐配上肥豬口水哥! 難得久久一次出國,他也準備了 Pretty Cool 的『回國大禮』附會,禮數真沒少過,不過這禮物大概只有他才想得到。員外有心,特意延路收集了一疊厚厚的『火辣辣』拉斯維加斯廣告傳單,當作名產拿回來送。每一張廣告,全都少不了身材姣好又全裸入鏡的美女,一定還有勾人神魄的特寫表情和動作,標註更猛,寫著:『二十分鐘內送到家,使命必達(To Room In 20MINs or Less)』,賭城的夜間特種電視台一定都倒光了,因為彩虹都是直接淋在頭上啊。話說,是否真的20分鐘抵達,看看有沒有人願意從台灣打電話試試!搞不好台灣真有分部! 天底下沒有不散的宴席,短短的閒聊之後,工作還是要搞定,只能繼續爬著人生的旅途。

Linux 的 Real-time 排程支援

POSIX.1b 定義了一系列的系統呼叫,去提供即時(Real-time)需求的支援,實作細節和實際效能則由各作業系統自行負責。當然,Linux 也依循了這標準,讓各個 Process 有能力的在有限度的範圍內,調整自己的在系統上排程。這裡所講,並不只是一般常見的系統優先權機制,而是建構在其之上的進階排程實作。 首先,可以從 sched_getscheduler(pid_t pid) 的回傳值中,取得目前程式的排程方法,有助於了解當前的排程情形,其可能回傳值如下: SCHED_OTHER SCHED_FIFO SCHED_RR SCHED_BATCH 範例原始碼(sched_policy.c): #include <stdio.h> #include <sched.h> const char *sched_policy[] = { "SCHED_OTHER", "SCHED_FIFO", "SCHED_RR", "SCHED_BATCH" }; int main(int argc, char *argv[]) { printf("Scheduler Policy is %s.\n", sched_policy[sched_getscheduler(0)]); return 0; } Compiling it: gcc sched_policy.c -o sched_policy Results: Scheduler Policy is SCHED_OTHER 標準預設的排程方法是 SCHED_OTHER,意味 Kernel 並不會為這些一般性 Process 做特別的即時排程處理。因為,我們所寫的程式,都沒有被特殊設定,所得到的將都會是使用 SCHED_OTHER。 值得探討的是 SCHED_FIFO 和 SCHED_RR,這是為即時(Real-time)需求所設計的兩種排程類型,在運作規則上,其實兩者是同樣的東西,只是 SCHED_RR 擁有時段分配的制約機制。 SCHED_FIFO (First In-First Out) SCHED_FIFO 顧名思義就是『先進先出(First In First Out)』,一但 Procees 是 FI...

開發程式的好搭檔 - Terminus 字型

圖片
最近 Android 爆紅,連其附帶的 Droid 字型,都讓自由軟體的使用者拍手叫好!雖然不過 3 MB 的大小,卻已經近乎滿足中、日、韓(CJK)使用者的需求,字體細膩美觀叫人看得心曠神怡。又因為大小的優勢,可以預見未來的 Embedded System 必定是 Droid 字型的天下呀!但題外話不多說,若是身為 Geek ,Terminal 的世界才是一切,誰會去管 Droid Font 的好壞呢? 在 Terminal 下長期工作,清楚又順眼的字型是必要的,在這推薦『Terminus』,這是 Fixed-size 的字體,很適合程式開發使用,即使是小字依然很清楚,國外也有為數不少 Geek 都推薦它。 有興趣的人可以自己裝起來試試,若您是使用 Debian/Ubuntu 可直接使用 apt-get 安裝: sudo apt-get install xfonts-terminus

Linux Suspend 之記憶體機制

休眠(Suspend)現在已經是 Laptop 必備的電源管理機制之一,而 Suspend 又分為 s2ram(Suspen to RAM)和 s2disk(Suspend to Disk) 兩種模式。若是啟動 Suspend 的機制,可以看到 Operating System 神奇的被暫停,然後 Resume 叫醒回到之前的工作狀態。如果說想深入瞭解這樣一個機制,可以從 Linux 的休眠實作來著手,swsusp 就提供了這樣一個 User-space 的實作,我們可以研究它的sourcecode。 大體上來說,Suspend 機制不過就是儲存當時系統 Memory 狀態,然後再啟動時還原回去,在實作時,必需先鎖定當時系統下所有的記憶體空間,以確保記憶體內容不再變動,可以分別用 mlockall() 和 munlockall() 來達成這樣的任務。 #include <sys/mman.h> int mlockall(int flags); int munlockall(void); flags 又分成: MCL_CURRENT 鎖定全部現有的記憶體分頁 MCL_FUTURE 鎖定未來將被新增的記憶體分頁 此外,swsusp 利用了 /dev/snapshot 來對 User Space Process 和 Swap 的操作,以產生目前 System 的記憶體映像檔,/dev/snapshot 可以用 ioctl() 去控制,其命令: SNAPSHOT_FREEZE 鎖定使 User Space Processes 靜止 SNAPSHOT_UNFREEZE 解除 User Space Processes 的鎖定 SNAPSHOT_ATOMIC_SNAPSHOT 建立一個系統的記憶體快照映像檔 SNAPSHOT_ATOMIC_RESTORE 還原系統記憶體狀態 SNAPSHOT_FREE 釋放快照映像檔的記憶體 SNAPSHOT_SET_IMAGE_SIZE 設定映像檔最大 Size,如果無法達到指定的 Size,kernel 會盡可能建立最小的 image SNAPSHOT_AVAIL_SWAP 取得可用的 Swap 大小 SNAPSHOT_GET_SWAP_PAGE 建立一個 Swap 頁 SNAPSHOT_FREE_SWAP_PAGES 釋放所有...

水滴

一顆水珠滴下來後,會往哪流?直至今天,仍苦腦於這簡單明瞭的問題。 小時候,總是覺得未來很容易,訂定目標向前邁進,遲早都能達成。時間證明,小時候的目標,卻不過是逃避的藉口,等到畢業如何、幾歲又將要如何?而最終面臨到當下,卻又會再次改變計劃,今天要如何、過幾年後又如何?逃避心理依然不變。 相信多數人都並不熱愛自己當下所學,總是怪罪當初的選擇。沒錯,其實我也並不熱愛學校的主修學科,總是懊惱自己當初的選擇愚蠢,逼得自己像無頭蒼蠅一般,到處找尋心所嚮往的方向。看著許多『理論』學者,宣揚著培養第二專長的理論,總深覺諷刺。學者忘記了,自己一直是只有一個專長『嘴砲』,而橫行天下,自己不培養第二專長,卻一直提倡以第二專長提升競爭力。在我看來,與其說是培養第二專長,還不如說是找尋一個自己打從心理熱愛的方向,可以一輩子扛著的甜蜜負擔。 表面上的專業,和熱愛而成的專業,往往程度上就差了十萬八千里,縱使是孫悟空,也得翻一個前無古人後無來者的筋斗才能躍過。靜下來想想,若只是為了五斗米,而一輩子培養專長和專業,那也太過於可悲,一個缺少感動的生命,何苦去維持住它,草草自我了結便是。 歷史上,無論在哪個多麼艱苦的時代,藝術總扮演著潤滑劑的角色,各式『發自內心』的創作,才能發揮出熱愛的感動,或許不能感動他人,卻能感動自己支撐自己。幸運的我們,生在這個時代,有太多的未來可以前進,藝術早已不限於傳統的音樂、繪畫、文學,可以是科技創新或是思想創意,或是更多更多熱情的創作。 升學季節將至,許多多的朋友們,都將未來寄託在學歷和未知的幾年後,從一些交心朋友的接觸中,可以很明顯看到他們臉上的憂慮,他們雖不願承認,卻早已明瞭考研究所或更進一步進修,不過是逃避現實的方法,這就就像買了張彩券,希望在幾天後能後有大獎降臨一般。令人感到痛心和可悲的是,過程中他們臉上充滿了無奈,不見其熱情的笑容。 反省自己,我是否找到了值得我投入的方向?我是否有熱情寫在臉上?擁有廣泛的興趣,是否能一一發揮?欣慰的是,現在勉強日子過得去,又可以回頭思考,一顆水珠滴下來後,會往哪流?

心得分享簡報上線:桌面開發、快速開機、快速開發

本次分享活動應熱烈,差點沒把敝人搾乾。而簡報以『作中學』為主要訴求,對像以對程式開發有興趣的普通人為主,應要求,『領進門』是本次分享的重點,所以不談論太高深的進階內容,並附上些簡單上手之實例。 本次三個簡報和相關範例檔案可在此取得: 桌面開發 desktop_dev.pdf easy-ui-design.tgz 快速開機 fastboot.pdf 快速開發 fastdev.pdf fastdev.tgz Autotool 懶人包: project_example.tgz 若有更多疑問,可直接與本人連繫和交流,能力所及,將不吝答覆。

心得分享活動:桌面開發、快速開機和社群經驗

在今天,走在路上隨便問一個人:『你知不知道 Linux?』,已經能聽到比較不同以往的回答,至少,有人會這麼答:『你說的是EeePC的那個系統?』。拜台灣各 PC 大廠所賜,Netbook 這名詞帶起了 Linux 在 PC 市場上的知名度,對一般消費者來說,不再單單只會在手機的產品 DM 上看到 Linux 這個字眼。 雖然從 Netbook 上的作業系統佔有率看來,Linux 又再次敗在微軟的手下,但過程中卻應證了許多 Open Source 的價值,倒並非一無展獲。我們可以看到,擁有高可客制化優勢的 Linux,其桌面開發、UI Design所帶來的想像力,甚至可望提升商品賣相和市場價值,其成果更讓人興奮。 受到『 OpenDesktop.org.tw 』的邀請,將於本月(1/15 星期四)分享一系列開發心得,活動時間共六小時,其主軸將以 Desktop Environment、UI Design、Fastboot 等開發經驗和社群交流為主,歡迎各界參加、指教。 暫定主要大綱如下: Desktop Environment Development and UI Design * Netbook/MID/Thin Client with Lightweight Desktop Environment * Introduce Lightweight Desktop Environment (eg. LXDE, XFCE) * GTK+ Development * Next Generation UI * 3D User Interface Development - Clutter * A sample: Application Launcher with Clutter Fastboot * Introduce fastboot and systems(eg, Moblin, PUD Linux, gOS Cloud..) * What's Five-second boot * How to do that * Next Generation Method for fastboot Programing Experience and Open Source...