preload
七月 29

Slash Dot Dash » Blog Archive » Create ISO CD/DVD image (.iso) with Mac OS X Tiger (10.4)

Tagged with:
七月 29

簡單的正規表示式原理 « 就是愛程式

正規表示式 Regular Expression « 就是愛程式

正規表示式 – Characters « 就是愛程式

Tagged with:
七月 29

TTYtter Is A Complete Twitter Client Which Runs In a Console [Linux] ~ Web Upd8
Perl-y Tweets with TTYtter | The Linux Foundation Video Site

官方網站:TTYtter: an interactive console text-based command-line Twitter client and Perl platform (whew!)

Tagged with:
七月 29

Arch Linux 中文文件

Lawliet’s blog: ArchLinux 推廣教學起跑!(09.7.5更新)
Arch Linux Handbook [PDF]

Tagged with:
六月 24

一周前我和 Tinyfool 閒聊蘋果操作系統,都認為對於開發人員來說,蘋果操作系統(Mac OS)是上佳的選擇。 Tinyfool 筆頭很快,當即就寫了一篇長文章, 我則筆頭很慢,今天才全部碼好。 他的文章的主要切入點在於 Mac 平台作為目標開發平台的優勢,而我這篇的切入點主要是 Mac OS 作為一種開發工具的優勢。

開發人員的趁手工具
對於開發人員來說,所有的開發工具的最大的用途,就是最大限度的提高開發人員的生產率 (productivity) 和創造力(creativity)。在我們這個時代,使用 GUI (圖形界面) 是一個提高生產率的好手段。雖然上一代的那些 UNIX 開發人員的確不需要 GUI。一個屏幕,一個鍵盤,一個編輯器,在陋巷,人不堪其憂,也不改其樂的黑客比比皆是, 但二十多年過去了, 現如今開發環境發生了巨大的變化。 比如說,相比較於當年程序員使用的基於文本的環境,在 GUI 下格式豐富的文檔顯得更直觀,閱讀體驗更加好;就算工作中不需要開發任何 GUI 程序,現代開發人員也會使用 GUI 來完成網頁圖片和文檔閱覽等等。 因此,即使是最傳統的用命令行的開發人員,其實也能沾 GUI 的光。 比如說現在最好的終端程序,都是 X 下模擬的,因為這些模擬的終端的出現,一些復雜的可視化功能可以在這些終端中實現了,比如 Unicode 的顯示(rxvt-unicode)等等。

對於開發人員,擁有一組非常好用的,能夠最大程度的提高生產率的開發工具乃是一大人生夢想。那麼,這套開發工具從何而來呢? 大體來說,這些工具來自於三個方面: 1. 通過系統和單一的應用軟件提供的;2. 通過搭配使用各種應用軟件 3. 通過定制和改變現有的應用軟件。 這三點,對於 UNIX 開發人員是再熟悉不過的了, 無非就是寫腳本,走管道而已。 所以,在前 GUI 時代,這一套哲學非常盛行, 開發人員都知道,需要通過安裝腳本解析器,寫一些的腳本,配置一些環境等等,才能把剛出廠的 UNIX 系統,改造成自己使用起來得心應手的系統。 基本上任何一個使用 UNIX/Linux 系統多年的人,機器裡面都有各種各樣的「私藏」的腳本。離開了這些腳本,他的效率會大打折扣。

GUI 時代傳統的喪失

上世紀 80年代的時候,GUI 時代和個人計算機普及的時代降臨了。從此,計算機變成了個人電腦,歷史上第一次,計算機不是專為開發人員設計,而是為了普通用戶設計。普通用戶的需求就是完成一個一個的現實問題,軟件產業提供的解決辦法就是為用戶提供一個一個的應用軟件,而不是讓用戶自己一行一行的編程和寫腳本,巨大的軟件需求瞬間成就了一個巨大的軟件產業。 這樣的一個間接後果就是,對於普通用戶來說,讓一台計算機變成能夠幫助自己完成任務的「個人計算機」的唯一手段,就是疊床架屋的不斷的裝各種應用軟件。

我們可以用一個簡單的例子說明這種使用模式。 我們都知道,安裝 Windows 系統的一個經驗原則是把操作系統和應用程序分成兩個邏輯盤,一個在 C 盤,一個在 D 盤。這個磁盤分區的經驗原則不光網吧老板知道,連我大學裡面只會點鼠標的那些女同學都知道。為什麼有這個奇妙現象呢?其實,這是由 Windows 系統的用戶的典型使用模式決定的。 在 Windows 系統上, 應用程序和文檔是關鍵,操作系統只是一個隨時可以重裝的東西而已,所以干脆兩者分開,互不影響。在這樣的使用模式引導下,Windows 系統上格盤重裝是非常低成本的,只要文檔不丟,應用程序不丟就行。這種使用習慣,浪費了多少 geek 男美好的時光為人重裝系統,又促成了多少美妙的姻緣 :) 。 總之,在 GUI 時代,要解決一個問題,就裝一個應用程序。至於應用程序之間的通信,和用非鍵盤鼠標的方法控制應用程序等等,都不再是要考慮的問題,有這樣的需求的人成了非主流,非主流到以致於主流的操作系統和應用軟件都不讓你這麼干了。 操作系統把所有其他的路都封死,就是明擺著告訴你,要想某樣功能,請出門買軟件。

Smalltalk 的啟示


其實 GUI 時代原本不應該是這樣的。 我們都知道,GUI 原本是施樂的 Alan Kay 那一幫人做科研做出來的,Bill Gates 和 Steve Jobs 各自到施樂」抄襲」 了一部分過來,於是窗口啊按鈕啊就到處都是了。 他們都看到了圖形界面和面向對象的形, 看到了圖形界面就是把按鈕圖標等等對象放好,然後鼠標點擊拖動等等這些表面的東西。 因為所有的 GUI 界面都是從文字界面起步的,所以所有的 GUI 程序,其實就是原來的可執行程序的包裝。 C++ 這個語言的出現也很討巧,把 C 包裝成了一個面向對象的語言,包裝對包裝, C++ 很討巧的適應了把可執行程序 GUI 化的趨勢, 成了 GUI 時代的主流開發語言。從表面上看,只要運行這些可執行的程序,就能夠看到圖形界面,就能夠用鼠標點擊操作他們,可是這些東西的底層,都是一個編譯過了的可執行程序,原先 Smalltalk 中的那些運行時環境啊,對象容器啊,都統統不見了,所有的圖形界面程序,還是直接運行在計算機的 CPU 上,而不是一個虛擬的面向對象的容器上。而這個面向對象的容器(也叫做「運行時」或者「運行環境」),才是 Smalltalk 的神。 簡單的說,Smalltalk 本身具有一個面向對象的運行時,所以即使到了執行的時候,裡面所有的對象還是可以互聯互通的。 而 C++ 寫出來的程序,除了編譯之前是面向對象外,只要一編譯,就全部變成機器碼,和對象就再也沒有任何關系了,也就不存在運行時去動態的查看(inspect) 和改變(modify) 這些程序對象的說法。 總之,因為歷史的局限,這些 GUI 的平台,都是漸進的照貓畫虎的演變的,所以沒有一個平台像 Smalltalk 那樣細致地考量過對象的互相通信的問題,再加上我們上面說了,反正擴展系統的方法就是引入新的應用軟件而已,本身也沒有互聯互通的需求,所以這種拋棄運行時的,不讓對象被外部程序控制的實現方法也無所謂不好。

可是開發人員不是普通用戶啊,他們依然要改造計算機成為自己的工具的。在現有的現有工具不能解決問題的時候,要不然自己重新發明輪子,要不然就復用現有的一些工具,或者重新按自己的需求重新配置這些工具。 所以,和一般用戶不一樣,開發人員需要這些 GUI 的可配置性,也需要這些 GUI 程序之間的互聯互通。 用黑話來說,第一個問題關系到 GUI 應用程序的腳本化, 第二個問題關系到 GUI 程序之間的進程間通信。 這兩個問題,說起來簡單,但都牽扯到 GUI 系統的根本設計問題。 歷史在這裡開了一個不大不小的玩笑,把這個唯一的機會給了 Mac OS X。其他操作系統,都因為這樣那樣的原因,在這兩個問題上沒有很好的解決方案。 繼續閱讀 »

Tagged with:
四月 14

核心程式目前由 kernel.org 管理與維護。

版本號以 A.B.C.D 或 A.B.C-D 來表示。

Example: 2.6.25.11

A: 主要版本號碼

B: 主要版本的次要版本號碼,可用來判斷是否為穩定版本。一般而言,奇數為開發中(development)版本;偶數為穩定(stable)版本。

C: 代表 A.B 的釋出次數,如:2.6.10,即 2.6 的第十次釋出版本。

D: kernel.org 通常只規範到 A.B.C 的版號,各廠商通常會根據需要修改核心源碼。通常用 .D 或 -D 表示,代表修正次數。

Tagged with:
四月 14
  • logout:通知 Linux 準備登出,關閉目前所開啟的 shell、主控台或終端機。
  • exit:結束已開啟的 shell 環境。
  • CTRL+D:效果等同 logout 指令。
Tagged with: