FSF 公布 GNU General Public License, version 3
FSF 公布 GNU General Public License, version 3 (GPLv3)。根據 FAQ 可知三項大多數使用者關注之焦點:
- 與 GPLv2 之相容性
- DRM: 關於 User Products 與 Installation Information
- Microsoft-Novell deal
FSF 公布 GNU General Public License, version 3 (GPLv3)。根據 FAQ 可知三項大多數使用者關注之焦點:
racklin 說: 我的重點還是只放在 "關注類別是否有實作方法" 也就是 "介面" 的這個概念, 因為原文是討論這個議題
. 嗯,我大概是跳太快了。我清楚 interface 是什麼。所以我的回應是在說明「個體之間如何協議互動行為」亦即「軟體合約」的形式。
以C/C++為例,在早期,程序員學了 C++ 可是還是要寫 C 程式的時代,我們會自己用 C 語言實作類別繼承、動態連結等觀念。但我們用的是 C compiler 而非 C++ compiler ,所以很多事我們必須自己處理。其中一點就是個體行為的協議。方法一、在函數文件上說明傳入的個體需擁有哪些行為,我在函數中會檢查此個體是否擁有此行為(函數指標是否為給定了)。方法二、限定一個 struct (只有純函數指標宣告),呼叫者要自己填一張函數指標表傳入,這其實就是 interface 的概念。
我這兩天和 racklin 討論 PHP 和 SPL 的內容。經過這兩天的討論,我覺得我們愈來愈了解現在 PHP 語言的特性與未來發展方向的議題了。
我們的討論重點圍繞在 PHP5 的 magic method 與 interface 兩方面的內容。
Ruby 可以將程式碼參數化,Ruby 稱被參數化的程式碼為 block 。Ruby 語法以 {||} 表示一個 block ,其中的 || 為參數列宣告,若無參數則可省略。
Ruby 的 Proc 類似 ECMAScript 的 Function。在 ECMAScript 中使用關鍵字 function 即可配置一個 Function 實例。 Ruby 則使用 Kernel::proc、Kernel::lambda 方法 (兩者相同) 或是直接建構一個 Proc 實例(Proc.new),需提供一個 block 作為引數。
Ruby: proc { |arguments| codes }
ECMAScript: function(arguments) { codes }
實作一個 Stack 。具備下列特性:
[]窺探 Stack 的內容。
本文之示範直接實作 Iterator, ArrayAccess, Countable 三個介面,而不繼承 ArrayIterator 等類別。ArrayIterator 類具有 sort() 等方法,但我並不打算對 Stack 進行排序,故我不繼承。若我繼承 ArrayIterator ,則我必須覆寫 sort 等方法,無此必要。
If you want to design a class and make it's behavior as an array, you may extend ArrayObject. Also this new class probably need to use an instance of class which extends ArrayIterator (Note: ArrayIterator is a class, not an interface).
This feature requires PHP 5.
Darker Than Black 第11-12話「壁の中、なくしたものを取り戻すとき…」,著實玩了一把物理學的非常識觀念。到底在「門」內能不能取回失去的東西?或者說,「門」裡的世界究竟是個什麼世界?
在科學哲學中,自然科學所研究的世界,是客觀世界,或者稱實在界。另一方面,也有一派認識論者主張感覺世界。「存在就是被知覺」即此派的代表性主張。 Karl Popper 在《客觀知識》一書中尚且主張知識存在於另一世界,亦稱第三世界。這第三世界就暫且不談了。 Darker Than Black 中,門外的世界是我們所熟知的客觀世界;門內的世界,則是與客觀世界之物理規律不同的世界,到處充滿了客觀世界之常識所不能理解的現象。
根據 Darker Than Black 第11話 Nick 博士的說法,在門內,只要你相信心中所想,那麼你就能看到你所想的事物。亦即,能為心智所知覺者就能存在。似乎,門裡的世界就是感覺的世界。再者,這又可透過量子物理學說明。門裡的世界,所有量子狀態皆呈疊合態。當觀察者觀測時,觀測資訊就會介入使世界的疊合態塌縮。如果觀察者相信心中想法,亦即思考的量子資訊狀態非常穩固,那麼外界的量子將巧合地朝觀察者心智資訊所設定的狀態塌縮。觀察者所想的資訊就會被觀察者所知覺,亦即存在。
在門內, Nick 博士和小李都相信星空,於是兩人都看到了。Nick 又相信他可以和妹妹一起實現小時候搭乘太空梭進入太空的想法。於是 Nick 的狀態變成小孩的狀態,奔向小時候想像的太空梭和妹妹一起飛向太空。還回頭謝謝同時介入場中的小李也相信他,使得 Nick 所設想的狀態能夠穩固、能存在。至於小李,也許他還在迷惘。但可確定的是,銀的觀測行為使得他的狀態按銀所設想的狀態確立,因而繼續保持著與客觀世界的聯繫。
最後嘛,要唸唸小李。銀幫了你那麼多事,還那麼關心你,你竟然只送了她一顆糖。嘛,至少小李不忘說聲ありがとうな。預告中,小時候的銀真活潑啊。三無少女真正的萌點,就是在她笑的那一瞬間。等好久了!
jaceju 於《PHP5 將滿 4 歲》一文中說了一些他碰到的原因。
我的經驗,應用軟體的問題還好,大部份 PHP4 的軟體在 PHP5 的環境上一樣可以跑,只是語法 notice 多了點。再者,在 PHP4 的軟體中混雜 PHP5 的語法也不會影嚮程式運作。
喔,各位沒看錯,陳教授確實把資料結構與演算法列入他規劃的敏捷方法 (myAgile) 條目中。我看到這一點是非常 Orz
陳教授有提到理由,台灣的程式設計教育重視計算與解題,而不重視思考與建構。所以程序員常常學了資料結構與演算法之後,卻不會運用在實際的編程工作上。故此他特別把這一點列入 myAgile 條目中。
雖然我們總是說著動態語言(dynamic language)、靜態語言(static language),但區分方式並不是語法,而是運行環境。
如果程式影像在載入前便確立並儲存,那麼是靜態語言[If the image of program which including op code and data is static in disk before loaded, we call it 'static language'.]。這句話對學過作業系統概論或組合語言的人比較容易理解。因為在組合語言中,要求程序員設置 code 節區, data 節區等內容載入記憶體的位置。所以我們很容易聯想記憶體中的程式影像儲存在檔案系統中的情形。與之相對的是,若程式影像在載入後才建立,則是動態語言。
測試驅動開發 (Test Driven Development, TDD) 的觀念由來以久。寫程式時會順便寫測試碼,幾乎是所有有經驗的程序員在不自覺下養成的習慣。例如我在《運用訊息溝通網絡及軟體工程方法建立開放源碼專案之個人淺見》一文中,提到我以前用 C 語言寫程式時順手寫測試碼的習慣。不過那個時候,xUnit 這類測試工具還不普遍。當時看其他人寫的開放源碼程式,幾乎是人人各有一套測試碼的撰寫風格。但是隨著 xUnit 工具的普及,測試碼的撰寫方式也愈來愈一致了。同時,也改變了程序員編程時的習慣,帶動了先寫測試碼的「測試驅動開發」觀念。
TDD 的好處,基本用不著我多加說明。 Robert C. Martin 在《敏捷軟體開發-原則、樣式及實務》中寫的再明白不過了。儘管如此,在研討會中,我還是針對 TDD 提了一個問題。我的問題是:能不能藉由測試案例建立更準確的工作時程量測指標,以便掌握確切的工作時程。
雖然每本敏捷方法的書,都會提到測試驅動開發(TDD) 及反覆式開發過程(或稱迭代式開發) ,然而它們並不是敏捷方法獨有的要素。這兩者都是存在已久的編程實務。XP 並沒有新的觀念,它的觀念與程式設計的歷史一樣老
(Kent Beck)。但敏捷方法確實把這兩者發揚光大,讓人們注意到這兩種實務作法所蘊涵的強大威力。
陳教授在會中也一再強調反覆式開發過程。但對陳教授解說的內容,我持有兩點不同看法。雖然當時提問了,奈何時間有限,並沒有足夠的時間討論。
敏捷方法強調溝通,且溝通行為不僅發生在負責軟體開發工作的程序員之間,也要包含使用者。所以敏捷方法的實踐作法中,重視並要求「使用者參與」。陳教授在會中使用「駐廠使用專家 (On-site usage expert)」表示在敏捷開發過程中的使用者代表。一般則稱為「駐點客戶(On-site customer)」。
中央大學資工系在6月15日舉辦了一場「台灣敏捷方法實務研討會」,由陳振炎教授主講。我將聽到的內容與自己的感想做了一番整理。
敏捷方法的特色與重點,絕對是「人際溝通」。 Ivar Jacobson 說「敏捷是一門社會科學。它關注的是如何讓大家像一個團隊般工作、如何激勵成員、如何相互合作等等
」(CSDN《程序員》2007年4月刊)。
最近在《不存在時間的世界》一書中,看到了哥德爾的不完備定理,其中也有提到不完備定理的的計算機形式,即圖靈的停機問題(Halting problem)。但不知是書籍翻譯還是哪裡的問題,我覺得我看不懂它的說明。
看了書中的說明後,我的程式設計經驗直接告訴我兩件事: 一、程式不具可計算性。編譯器會明確告訴我變量未定義。二、這是無窮遞迴。程式實際執行時,會發生遞迴深度超出限制或堆疊滿溢的錯誤。我總覺得書中的說明怪怪的。