preload
十二月 02

這篇是我在這裡看到的文章, 覺得很不錯:
原文:
1、不要「玩 Linux」

很多人用 Linux 的時候會感覺很迷茫,該用哪個發行呢?是不是我少裝了什麼?怎麼升級這麼快啊!怎麼這麼不穩定!每當遇到新的軟體他就想試用,每當新的版本出現,他就更新,然後用滑鼠在新的功能表裡選擇從來沒見過的程式來用用。

其實你是為了Linux而使用Linux,而沒有找到正確的理由來利用 Linux。你首先要明確用電腦的目的,你用它是為了解決你的實際問題,而不是為了學習安裝作業系統,不是為了測試哪個版本好用,不是為了「趕上潮流」,更不是因為你硬碟太大了,你想多佔點空間。

如果你啟動了電腦之後不知道應該幹什麼,那麼最好先不要用電腦,因為你可能有更重要的事情需要做。

2、不用挑剔發行版本

很多人剛開始用 Linux 的時候,總是在懷疑別的發行版本是否比自己正在用的這個好,總是懷疑自己以後時候會失去支持,不得不換用別的發行。所以很多人今天是 Redhat,明天又換成了 debian, 一會兒又是 gentoo, …… 甚至有的人在一台機器上裝了兩個版本的 Linux,然後比較哪一個好。

其實你完全沒有必要這樣做,任何發行,只要你熟悉了,你在上面的工作方式幾乎是不會受到任何影響的。你常常聽說 Debian 的更新比 Redhat 快,包比 Redhat 多,但是你可以比 Debian 更新還要快,直接到你需要的程式的主站點下載源碼來編譯就是了。

Debian, TurboLinux, SuSE, Redhat, Gentoo, … 任何一個版本都是不錯的。

3、不要當「傳教士」

很多人在討論區不斷的引起 『Linux vs. Windows』 之類的討論,甚至爭的面紅耳赤,這是沒有必要的。因為各人的需要不同,生活的環境不同,你不可能得到一個定論。我們需要尊重別人的選擇,這是你在進行任何對工具的討論前需要提醒自己的事情。面對一些容易引起爭論的東西:Word 和 TeX;Emacs 和 VIM;MAXIMA,Mathematica 和 Maple;Gnome,FVWM 和 KDE;Mutt 和 Pine …… 一定要冷靜。

你需要關心的不是你的工具是什麼,而是你用它做了什麼。精通 Linux 並不說明任何問題,因為它只是一個工具而已。如果你用 Windows 能很好的完成你的任務,那你就沒有必要費時間去熟悉 Linux。直到有一天你發現一項任務只有 Linux 才能完成的時候再換也不遲,因為你身邊的 Linux 的愛好者一定會很樂意的幫助你。

並不是喜歡一種東西就必須反對其他的。世界需要多樣性,人們都需要FUN。用自己的興趣去壓制別人的,就會毀掉所有的興趣。個人喜歡什麼就用什麼,完全沒必要為這個爭論。

不要做「傳教士」!你說我現在就是在「傳教」?冤枉啊~

4、直接從源碼安裝程式

很多人放著的源碼不用,等著有人幫他做出 rpm, deb, 才能安裝。我說你為什麼不用源碼編譯,這樣版本比 rpm 高的多,有很多新功能,而沒有煩人的依賴關係。可是他說:「要是我用源碼編譯安裝,卸載的時候就不方便了,會留下很多垃圾。」

為什麼程式還沒有安裝你就想到卸載?難道你不知道這個程式是用來做什麼的?你應該改變到處找程式來試用的作法,而應該先瞭解一下到底那些程式有同樣的功能,聽聽別人的意見,看看它們各有什麼長處和短處,然後挑一個最適合你的程式來用。

從源碼編譯安裝程式,不但比你裝rpm更適合自己的機器設定,而且它們一般會裝到 /usr/local 目錄,這樣你以後如果換硬碟重裝系統,也可以把以前 /usr/local 下的程式原封不動拷貝過去用。我的 /usr/local 下有 2G 之多的程式,你想要是我有一台新機器要重新安裝,然後配置,得花費多少時間?實際上我曾經通過網路把它們傳到一台新機器上,然後就出去吃晚飯,回來時我就得到了另一台一摸一樣的 Linux 機器。

確實要卸載 make install 的程式怎麼辦呢?答案是直接刪掉。別以為直接刪掉程式會留下垃圾,引起「系統不穩定」。(btw: 這是誰教你的啊?呵呵。) make install 無非就是把可執行程式放在 /usr/local/bin, 把某些函數庫放在 /usr/local/lib,把資料檔案放在 /usr/local/share 下一個它自己的目錄,你把這些東西都刪掉就行了,不會留下垃圾,即使真的留下一點檔案沒有刪掉也佔不了多少空間,更不可能引起系統不穩定。UNIX 就是這麼簡單

但是有幾個程式不建議從源碼安裝,它們是 Mozilla, Open Office, … 它們編譯時會佔用你幾個G的空間和好幾個小時的時間,這種花費我覺得是不值得的,因為你不能從編譯得到更多好處,不如直接安裝編譯好的版本。

5、不要盲目升級

不知道這是心理作用還是什麼,有的人看到比較大的版本號,就會很想換成那個。很多人的 Redhat 本來配置的很舒服了,可是一旦 Redhat 發行新的版本,他們就會盡快下載過來,然後選擇升級安裝。結果很多時候把自己原來修改得很好的配置檔案給沖掉了。新的軟體又帶來了新的問題,比如有一次我的 rxvt 升級到 2.7.8 就跟 miniChinput 衝突了,升級到 Redhat 8.0,發現 xmms 居然缺省不能放mp3了,XFree86 的 xtt 模組在 I810 上有新的 bug,會導致 Mozilla 突然退出。

如果你已經配置好了一切,千萬別再整體升級了,這會浪費你很多很多時間的,不值得。如果需要的話,你可以只把某些部件升級,比如內核,glibc, gcc, XFree86,…

使用 UNIX 的經典程式

好的程式一般都是可以很方便的在很多種 UNIX 上移植的,bash, VIM, Emacs, Mutt, FVWM, xterm, 都是這樣。如果你用這些程式,你就可以在 Sun, HP, … 等工作站上也裝上,這樣你在各種機型上的工作環境就幾乎完全一樣了!你不需要在 Sun 上面用 CDE,在PC上又換成 KDE,在它們上面都裝一個 FVWM,使用相同的配置檔案,就能得到一致的介面。

這些程式大部分都是久經考驗的,是經過很多人多年開發的結果。它們功能完善,各種情況都考慮周全,絕對是你的好助手。

6、不要配置你不需要的東西

如果你只想做一個像我這樣的普通用戶,主要目的是用 Linux 來完成自己的科研任務和日常工作,那就可以不用系統管理員或者網路管理員的標準來要求自己,因為當一個系統和網路管理員確實很辛苦。普通用戶學習那些不經常用到的複雜的維護系統的工具,其實是浪費時間,學了不用是會很快忘記的!

我不是一個合格的網路管理員,我的伺服器都只設定了我自己需要的功能,設定好 ssh, ftp 已經足夠了,那樣可以省去我很多麻煩。我從來不過度考慮「安全」,因為 Linux 缺省已經很安全了。我沒有磁帶機,就不用管 tar 的那些稀奇古怪的參數了,czf, xzf, ztf 已經可以滿足我所有的需要。sed, awk, … 我也只會幾種常用的命令行。

7、不用忙著看內核源碼

除非你想研究作業系統,否則還是先把怎麼使用 Linux 掌握好再說吧。我以前看了那麼多內核源代碼,寫了驅動程式,結果最後發現我還是一隻很多事情不能用 Linux 解決的吸取我的教訓吧,你應該首先掌握 shell,Xwindow 的使用和原理,它們可不比內核簡單。+

8.放棄Windows

『有半杯可樂,如果想往裝著可樂的杯子裡面注滿清水,比須先把裡面可樂倒乾淨…..』—-李小龍
學習Linux同樣如此,
當開始學習Linux的第一步時就要記住一點:Shell不是DOS!它是比你目前見過的任何GUI操作環境都強大而且穩定,並且速度更快,同時又節省電腦資源的操作電腦的工具,哪怕是流覽網頁,也要放棄Windows,利用每一個機會熟悉Linux的習慣,這一點很重要,
因為想要知道Linux是什麼,首先你要接受它,
雖然最初很痛苦,但是堅持下來,你可能會受益終身

二月 16

之前, 在許多linux的論壇中, 看到許多資深網管人不建議用webmin 來管理linux server, 大部分的論調都是, 『用webmin來管理, 只會讓人變笨, 變得不想去了解其原理』. 其實我是很同意這種說法的.
但是這兩天我卻用了webmin 來管理公司的Linux router, 用來修改iptables 的設定. 當初我也是在掙扎, 到底是要寫script file 來控制iptables 的設定呢? 還是用webmin 來管理就好了.
後來還是決定用webmin來做. 原因如下:
(1) 我的主要工作不是網管, 而是firmware engineer. 無法花太多時間在網管的工作上
(2) iptables 的原理, 我也努力的去K過, 畢竟若不知道原理, 是根本無法在webmin上設定iptables的.

我想, 用webmin 來管理linux server 之前, 應該還是要了解其設定到底是修改哪些files, 其修改值對映到設定檔的哪些欄位, 都要了解清楚, 才去用webmin 來管理, 不然用它管理linux server, 跟用windows 當server, 只會按』下一步』 有啥不同.

好工具是值得去用它, 但是千萬不要此工具給控制了, 那就變成工具在用你了(大部分依賴windows server的user ??).

就跟寫程式所用的IDE 環境一樣, 例如許多ARM的 IDE, 當然是很好用沒錯,可以提昇開發速度, 但是有許多自認為很厲害programmer 卻說沒有它就無法開發ARM的程式. 甚至認為會用漂亮IDE環境的人才是高手, 完完全全成為tools的奴隸. 等換到另一個陽春環境後, 就跟笨蛋沒兩樣. 只會一直罵環境太差, 而無法工作.
其實, 用gcc + gdb + makefile + text editor 就可以做到IDE 環境的所有功能了, 了解這些基本工具的功能後, 再去用IDE 環境, 才不會讓你在克難的環境下變成笨蛋.

二月 06

上禮拜, 我的virtual platform 程式的基本功能已經能在公司的linux PC上正常的run了. 由於實驗用的PC比較慢, 所以就把程式丟到快一點的工作站上去跑, 結果compile玩後, 一執行, 當場就掛了. 但拿回自己實驗的PC又跑的好好的. 而且家裏的PC也run 的好好的, 一直覺得很納悶, 哪裡出問題了. 比較兩台PC環境, 一台是Fedora Core 5, P4 CPU, 另一台是CentOS 4 , Duo Core的 CPU. 本以為是CentOS 太舊了 , 想說應該不是我程式的問題(心理還是毛毛的)……..後來在我的ASUS NB(Fedora Core 6, Duo Core CPU) 上跑, 一樣掛掉. 就決定一定要把問題找出來. 奮戰超過12小時後, 終於找到問題, 原來是我的程式有race condition的問題, 在快一點的CPU上跑, 就有可能測出bug.

雖然問題解決了, 但是讓我體會到一件事情, 許多人(包過我自己)在程式寫到一個段落後, 在自己的環境下測試OK, 或者是經過許多環境測試都OK. 就信誓旦旦的說, 程式寫完了, 測過了, 沒問題, 但是一旦在某特定環境下出錯, 就直覺是環境的問題, 而不相信自己的程式有錯….
但是事實卻是自己的程式有bug. 通常這類的bug不容易測出來, 也不容易找到癥結點. 但是一但認為自己的程式沒問題, 那就完蛋了, 這個bug可能就用永遠不會被發現了.

所以對自己的程式, 隨時保持懷疑的態度, 有助於提升程式的品質, 即使是大師級的人物, 也可能會犯下小錯而不自知. 唯有不斷的review 自己, 才能把那隻該死的bug抓出來.

十二月 02

昨天, 和YF兄聊到做事的品質時, 他說出了一句讓我深思的話.
要做一件事情之前, 要從』如何做好事』 的角度來思考,而非』如何好做事』的角度來思考
其實一般工程師(尤其是台灣的工程師), 做事的角度, 大多是後者. 從日本回來後, 發現, 日本的工程師, 其思考的角度卻是前者.
這也難怪, 產品在品質上會有如此的差異.
還有, 這句話也讓我聯想到, 如果在規劃一個架構的時候, 從』如何做好事』的角度來想, 剛開始相對難度或許較高較高.開發時間較長, 但卻可以讓這個架構更完整, 有彈性. 尤其規劃很大的架構時, 更顯出』完整』 及』彈性』 的重要性.
一個台灣工程師, 做起事來會比一個國外的工程師來的強, 但3個台灣工程師組成的團隊, 卻遠遠輸給3個國外工程師的團隊.
每個台灣的工程師, 只從如何讓自己好做事的角度來思考, 其團隊戰力一定會互相抵減, 所以造成1+1+1 < 3.
如果每個人從如何做好事的角度來思考, 對於做事的品質一定可以做到1+1+1 > 3的情況.
從』如何做好事』的角度來看, 往往需要蹲馬步很久, 在初期是很難看出其好處的, 往往在Project 的後半段, 才知道瓶頸在哪裡, 若馬步蹲的穩, 就容易突破困難. 蹲不穩的人, 其schedule 就一直不斷的延後, 或者是挖東牆補西牆的方式來度過困難, 終究很難蓋成摩天大樓的.