2008年06月23日
Python初寫心得
這兩天寫了一些Python,不得不佩服Java和PHP的文件。Python的文件不能說差,但是不好用、不好查。比如說我想查is這個keyword是什麼意思,最好我會知道他是列在Comparison啦。為什麼is不列在operator,這我不懂,明明==等都是啊。然後是例外處理,最好是我會知道有個sys.exc_info()啦。都查了很久才找到。
Python的官方文件主要分為Tutorial, Library Reference, Language Reference三塊,但他們的Table of Content都只有一個,而且TOC的標題不太能反映想找的內容。像Java、PHP、Ruby的文件都會切成幾個窗格,或至少有sidebar讓你點,我終於知道原因了,就是這樣才好用啊。還有簡單卻實用的示例也是很重要的,這點PHP做得不錯。
Python的官方文件主要分為Tutorial, Library Reference, Language Reference三塊,但他們的Table of Content都只有一個,而且TOC的標題不太能反映想找的內容。像Java、PHP、Ruby的文件都會切成幾個窗格,或至少有sidebar讓你點,我終於知道原因了,就是這樣才好用啊。還有簡單卻實用的示例也是很重要的,這點PHP做得不錯。
2008年03月4日
Ruby/Prototype.js 風格的 Array
自從用過Ruby之後,對它的Array唸唸不忘,Array#each是好物啊,有了它,幾乎可以把迴圈for/foreach給丟掉了。看了《Bring some Ruby/Prototype flavour in your PHP array》之後,心想PHP5也能這樣玩,真是讚,不用在PHP/Ruby之間的抉擇天人交戰了,把Ruby的語法移植到PHP來,這樣不就可以同時擁有PHP的廣大群眾,又擁有寫Ruby語法的簡潔/美麗/爽度了嗎?Prototype.js也是這樣做的,雖然《Learning Javascript》書中嚴厲反對Prototype.js破壞了javascript當中Array和for..in的組合技,但是Prototype.js的作者們顯然不在乎這點,照樣蠻幹。另還有《JavaScript “Associative Arrays” Considered Harmful》一文認為JavaScript當中的Array本來就不該當作associative array(hash)來用,所以組合技被破壞不算Prototype.js的錯。我個人的看法:說真的,有了Array.each,誰還需要for..in/foreach呢?
但是現實是殘酷的,由於PHP沒有anonymous function(幹,PHP根本什麼都沒有嘛!),所以callback無法像JavaScript或Ruby寫得那麼漂亮。或許應該說,雖然PHP語言特性貧乏,原本的目的是內嵌在HTML裡,卻能長到這麼大,也代表著PHP切合了初級web開發的需求,打入了一個很大的市場。《Bring》文中class的名稱是ExtendedArrayObject,只實作了部分method,但是我想乾脆把整個Ruby Array class實作好了。為了符合PHP的習慣,可以再定義一個xarray() function,x代表extended,用法類似array()(PHP的array()是language construct,不是function),只是回傳ExtendedArrayObject(factory pattern!?)。
神奇的是,我用Google搜尋xarray,居然找到我想做的東西,已經有人做過了!它是模仿Prototype.js的,也叫做xarray,而且是BSD license。但是不幸的是,事情總是沒有那麼順利,這個phpclasses.org要註冊才能下載東西,我又不想註冊。所以……我想我還是有空的時候來自己實作看看好了,當作練功!
但是現實是殘酷的,由於PHP沒有anonymous function(幹,PHP根本什麼都沒有嘛!),所以callback無法像JavaScript或Ruby寫得那麼漂亮。或許應該說,雖然PHP語言特性貧乏,原本的目的是內嵌在HTML裡,卻能長到這麼大,也代表著PHP切合了初級web開發的需求,打入了一個很大的市場。《Bring》文中class的名稱是ExtendedArrayObject,只實作了部分method,但是我想乾脆把整個Ruby Array class實作好了。為了符合PHP的習慣,可以再定義一個xarray() function,x代表extended,用法類似array()(PHP的array()是language construct,不是function),只是回傳ExtendedArrayObject(factory pattern!?)。
神奇的是,我用Google搜尋xarray,居然找到我想做的東西,已經有人做過了!它是模仿Prototype.js的,也叫做xarray,而且是BSD license。但是不幸的是,事情總是沒有那麼順利,這個phpclasses.org要註冊才能下載東西,我又不想註冊。所以……我想我還是有空的時候來自己實作看看好了,當作練功!
2007年12月3日
GFDL與CC-by-sa即將完全相容!
這是我今年聽過最酷的事情!Jimbo,你太了不起了!
首先要說明的是:在現有的GFDL之下,wikipedia是無法轉用CC的。原因是GFDL要求他的衍生版本也在GFDL授權之下,而FSF(自由軟體基金會)雖然認同CC-by-sa的「精神」和GFDL相同,但是法律條文的細節卻造成了兩者實質上不相容。
CC組織其實在約2005年就注意到這問題,也努力在促進兩者的相容性,但事情一直沒有進展。所謂的Share-alike(相同方式分享),來自於FSF所推動的 'copyleft' 觀念。在早期的CC條款裡,衍生作品必須使用同樣的CC條款,也就是說,CC-by-sa的作品,無法改用GFDL授權。(除非所有原作者同意)
在CC-by-sa 3.0起,導入了新的相容性機制,CC-by-sa的衍生作品可以更改成CC組織所認可的授權方式。這有什麼影響呢?如果有兩篇文章,一篇是GFDL,另一篇是CC-by-sa;你想把其中一篇的部分文字截取,放到另一篇,可以嗎?在CC 3.0之前這是不行的(除非在合理使用下的引用)。因為GFDL的文字要求合成後需要用GFDL,不可以用CC-by-sa;而CC-by-sa(3.0以前)的文字要求合成後需要用CC-by-sa,不可以用GFDL。CC 3.0版之後,達成了單向相容,你可以把兩篇合成之後,改用GFDL授權。
Jimbo所公佈的這件事情,對我而言最重要的是,FSF的代表出席並同意了修改GFDL,讓GFDL的作品也可以改用CC-by-sa授權——這就代表了「雙向相容」的來臨,兩種最大的文件copyleft授權條款,彼此都可以任何更改成對方的授權方式。 可以說,在某種意義上,這使得作品更加「自由」了,創作者也不用採取像GFDL/CC-by-sa雙授權這種麻煩的方式。 如同Jimbo所說,GFDL的確是一個好的授權條款,但是他當初所設計的目的還是為了應用在程式文件上。「恆常章節」、「透明版本」、「最後修改的5個人」等較為複雜的設計,卻讓使用者在應用時會遭受到一些小麻煩(雖然不是不可解決)。我認為CC-by-sa對於使用者而言是相對方便的,由其是在小量(印出單一條目)的使用情況下。
這是一個很大的進步,受惠的不只Wikipedia,而是所有採用CC-by-sa及GFDL的創作者。
※本文採用CC-by-sa授權條款。
首先要說明的是:在現有的GFDL之下,wikipedia是無法轉用CC的。原因是GFDL要求他的衍生版本也在GFDL授權之下,而FSF(自由軟體基金會)雖然認同CC-by-sa的「精神」和GFDL相同,但是法律條文的細節卻造成了兩者實質上不相容。
CC組織其實在約2005年就注意到這問題,也努力在促進兩者的相容性,但事情一直沒有進展。所謂的Share-alike(相同方式分享),來自於FSF所推動的 'copyleft' 觀念。在早期的CC條款裡,衍生作品必須使用同樣的CC條款,也就是說,CC-by-sa的作品,無法改用GFDL授權。(除非所有原作者同意)
在CC-by-sa 3.0起,導入了新的相容性機制,CC-by-sa的衍生作品可以更改成CC組織所認可的授權方式。這有什麼影響呢?如果有兩篇文章,一篇是GFDL,另一篇是CC-by-sa;你想把其中一篇的部分文字截取,放到另一篇,可以嗎?在CC 3.0之前這是不行的(除非在合理使用下的引用)。因為GFDL的文字要求合成後需要用GFDL,不可以用CC-by-sa;而CC-by-sa(3.0以前)的文字要求合成後需要用CC-by-sa,不可以用GFDL。CC 3.0版之後,達成了單向相容,你可以把兩篇合成之後,改用GFDL授權。
Jimbo所公佈的這件事情,對我而言最重要的是,FSF的代表出席並同意了修改GFDL,讓GFDL的作品也可以改用CC-by-sa授權——這就代表了「雙向相容」的來臨,兩種最大的文件copyleft授權條款,彼此都可以任何更改成對方的授權方式。 可以說,在某種意義上,這使得作品更加「自由」了,創作者也不用採取像GFDL/CC-by-sa雙授權這種麻煩的方式。 如同Jimbo所說,GFDL的確是一個好的授權條款,但是他當初所設計的目的還是為了應用在程式文件上。「恆常章節」、「透明版本」、「最後修改的5個人」等較為複雜的設計,卻讓使用者在應用時會遭受到一些小麻煩(雖然不是不可解決)。我認為CC-by-sa對於使用者而言是相對方便的,由其是在小量(印出單一條目)的使用情況下。
這是一個很大的進步,受惠的不只Wikipedia,而是所有採用CC-by-sa及GFDL的創作者。
※本文採用CC-by-sa授權條款。
2007年08月24日
Ajax時代來臨
時代的改變是很快的。大約十二年前,網際網路開始發展。2004年4月,GMail;2005年2月,Google Maps。同年同月,Jesse James Garrett將某幾項技術取了個簡稱叫AJAX。從此以後,一切就都不同了。
《Ajax實戰手冊》這本書1.1.5節的標題是:忘掉Web。忘掉習以為常的一切,為的是重新獲得新能力。網路界常常說一句話:「內容是王」。這句話在Ajax時代仍然適用,只不過有一點不同:瀏覽器不再是內容的容器。
「航網」(navigations)皆在單一頁面內完成,這是Ajax的特性。瀏覽器裡的是應用程式。瀏覽器裡的應用程式會愈來愈多,辦公室軟體已經出現,當然,會出現的也包括「瀏覽器」應用程式。這種瀏覽器裡的瀏覽器是特化的,提供讀者更好的網路經驗,或著作某些特定用途。
一般網民認定網頁是內容而反對這種變化,是可以理解的。「網頁是應用程式」這個概念還不在一般人的常識之中。人們終究會採納這個新觀念嗎?時間會告訴我們答案。