對 HP 收購 Tabblo 的想法
新聞來源: HP acquires Tabblo
Tabblo 是一個使用 Python 語言下的 Django 網站開發框架製作的圖片分享網站。特點是可以將上傳的圖片輕鬆製作成各種形式精美的套卡. HP 最近將這個以 9 人團隊組織的網站收購下來.
Python 語言繼 YouTube 的大成功後,在使用 網站開發框架 (Django) 上也找到了另一個具說服力的範例。讓人打消 Python 語言不適合 Web 開發的疑慮.
話說回來,HP 這家公司難道也想玩 Web 2.0 嗎?不然為何要買這樣的 .com 公司?
當然,連友立 (Ulead, 出品 PhotoImpact 的公司) 都有線上圖片分享網站了,HP 這間印表機大廠也來一個有何不可?
依新聞來源內容來看,我做個猜測: HP 買 Tabblo 可能不只看在圖片分享網站上,更看中的應該是 Tabblo 的核心價值.
Tabblo 的核心價值是什麼?Tabblo 的核心價值是它所提供的獨家 "圖片轉精美的套卡" 服務. 而 Tabblo 是透過 PIL (合理猜測啦) 等圖片處理模組,才有辦法建立這樣的服務.
即使哪天 HP 印表機附的光碟裡提供類似 Tabblo 網站提供的圖片 -> 套卡功能, 我一點也不會意外.
使用 Python 語言開發網站一大優勢就是背後有很多現有執行在作業系統上的高效模組 (ex: PIL) 可以調用.
單就圖形處理方面,使用超有彈性又真正跨平台的 Python 語言開發這類原本只有單機才做得到的服務有許多的好處.
其中最重要的一點是:同樣的程式,可以套用在 Tabblo 網站上,也可以套用在各作業系統的單機版上.
Functional Programming 函數式編程(程式設計)
Functional Programming 中文一般被翻作 "函數式編程 (程式設計)". 看到這個名詞,我腦袋裡很自然就浮出 "def ..." 這樣的語句. 因此 "函數式編程" 一詞所想表達的程式設計概念一直讓我完全摸不著頭腦.
直到看了跨越边界:用 Haskell 研究函数性编程這篇文章,我才理解 "函數式編程" 其實就是 "以撰寫數學方程式的方式來編程 (程式設計)" 的程式設計方式.
看了內容很自然地發現其實 Python 語言裡可以找到 map, filter, lambda 等這些用起來比較怪異的函數都是在 Python 中可以拿來作函數式編程的基礎工具.
Python 程式裡有些時候會有用上這些語句的地方,雖然省了空間, 但是命令式 / OO 編程的習慣卻讓這些段程式較難理解.
為了更易於學習與理解,python3000 中會將其中一些函數式編程相關函數 (lambda) 從核心中去掉,但卻提供了更完整的函數式編程模組 functional 的支援。也許這是個更兩全其美的方式吧.
最近在準備 OSDC.tw 2007 要用的投影片,在整理的過程中也產生了不少想法. 今天看了 "跨越邊界" 系列之後. 更加感受到要好好理解並運用一種開發方法 (不管是函數式編程還是測試驅動編程), 果然還是應該從心法 (本質) 上著手呀.
參考資料:
- functional 模組, 提供 findr, findl 等常見函數式編程支援.
結構文本(rst)轉網頁投影片(s5)
在看 pycon-trac-presentation 時, 發現 Matt Good 用 docutils 模組提供的 "rst2s5" 套件來將結構文本 (rst) 轉換成網頁投影片 (s5) 效果還蠻不錯的。用他客製化的 rst2s5 模組可以透過 pygments 支援程式的語法高亮展示.
以下提供使用方法
$ easy_install docutils $ easy_install docutils pygments
並下載 rst2s5 with code high lighting
用法
rst2s5.py [輸入].rst [輸出].html
i.e. rst2s5.py xxx.rst ooo.html
會產生的輸出結果是 "ooo.html" 這個檔名的檔案, 跟一個包含 s5 投影片 js/css 資料的資料夾.
語法備忘
=======
標題
=======
:Author: Fred Lin
:Date: $Date: 2007-03-16 $
一張投影片
==========
.. code-block:: pycon
>>> # python console
.. class:: handout
handout 是放註解的地方. 不會 show 到投影片上
code-block 可用 pygments 提供的各種語法高亮, 如 pycon, python, bash, html...
投影片再一張
============
.. class:: incremental
* 1st. item
* 2nd. item
.. image:: python.png
.. class:: handout
依序顯示重點. image 會嵌入圖片.
.. include:: pylevels.rst
語法參考
========
http://docutils.sourceforge.net/docs/user/slide-shows.html
.. class:: handout
前一張後的 include 語句支援嵌套其他 rst 文件.
Python 社群的 web 框架開發
框架介紹
Python 社群中各種 web 框架開發路線都有.
Django 目前 Django 框架吸引的使用者最多,一方面原因是 Django 團隊的性質,Django 有一個像 Rails 那樣的專職團隊在維護,保證了專案的持續性。同時不錯的指引文件,對初學者友善的 Admin 介面,開發者 Adrian 四處不遺餘力的宣傳也是吸引人的原因. 除了持續框架維護的承諾,宣傳之外,Django 框架傑出的效能也屢屢在網頁框架評比中勝出. python 創造者 Guido 也將 Django 視為 Python 語言的首選網頁框架.
Django 網頁框架的每個部份都是 Django 開發團隊自行建置. 但是在 Django 之外,python 社群其實早已有各式各樣的網頁開發工具. TurboGears 與 pylons 開發者則是致力於將這些開發有年的網頁開發工具 "黏起來", 發揮小兵團結的綜合效應.
TurboGears 例如使用 TurboGears 框架,就可免去各模組間合作時的重複設定。由於各個挑選的模組都經過多年實戰測試,除了滿足基本的開發需求外。也比較容易達成較深入或較特殊的需求.
構成 TurboGears 框架的組件,包含 Template, model, URL dispatcher, AJAX library 等等全部可以透過 setuptools 工具簡單安裝與替換。彈性 100%!
TurboGears 框架還提供命令列 (tg-admin) 和網頁工具箱 (Toolbox) 等可供擴展的輔助工具,從而獲得相當棒的開發體驗. (Toolbox 裡面也有類似 Django Admin 的 Catwalk 工具.)
整合 Django 與 TurboGears? 那麼這兩個都很棒的框架有沒有整合的可能呢?
Kevin Dangoor (TurboGears 框架創造者) 在 Pycon 2007 的 web panel 說:
You can have more innovation with individual components with their own maintainers than with a full stack. 比起完整的框架,將各個組件讓各自的維護者維護可以產生更多的創造性
TurboGears 框架的這種開發哲學與 Django 團隊走的路是完全相反的。加上 Django 團隊堅持在他們的網 頁框架中不包含 AJAX 功能並不成問題 (我覺得問題是在其他 Django 用戶沒有什麼很容易的方法提供 Django AJAX 擴充包). 在這種理念完全不同的情況下是不可能整合的.
Pylons TurboGears 跟 Pylons 兩個框架走的路線更相近。一些擴充模組或樣板引擎早都可以共用了. pylons 差不多就是換掉 controller 核心的 TurboGears. Pylons 框架沒有 TG 的 toolbox 或 Django 的 Admin 介面,但支援 WSGI, web helpers (學習 Rails), 效能也不錯,卻還沒找到自己的最佳定位.
整合 TurboGears 與 Pylons?
那麼這兩個框架有沒有整合的可能呢?
it’s the style/feel thing that represents the difference between the two framework -- Kavin Dangoor
Kavin Dangoor 和 Mark Ramn 兩位 TurboGears 框架的代表人物在 pycon 2007 後紛紛對 TurboGears 與 Pylons 的整合發表了樂觀的文章。原因是兩個框架的理念相近,差別主要在預設選擇的套件不同。還有實作上所造成的差異.