2015年11月29日 星期日

[讀書心得]改變世界的九大演算法

«改變世界的九大演算法»裡面,九大演算法其實是講九大類的演算法。也可以說是九個應用方面的演算法。作者在每一類演算法會試著講解一個到數個演算法的名字,然後挑一個容易用文字說明的演算法,仔細描述它是如何發生作用的,並說明它所帶來的影響。

當然作者的九個應用方面也不是隨便挑的,還是符合現代社會的主題「網路」、「連結」,由這兩個主題所要解決的問題有:網頁搜尋、網頁排名、 資料傳輸、資料儲存、資料分類(人工智慧)。於是,這些問題的解決方法,就很自然地展開為第二章到第九章。對,第二章到第九章。腦筋有在轉的朋友應該會算一下,從二數到九,只有八個。那第九個到哪兒去了?

我看完之後,也找了一下,到底是我有問題還是作者有問題?於是我翻來翻去,終於在封底找到了一句可證明第十章說的就是那個第九個演算法。那個「如果存在的話,將會很了不起的偉大演算法」,就放在第十章落落長的數學反證法的描述裡,非常值得一生細讀一次。第十章裡面還有哲學性的思考,人類的創造物,電腦,是否會因為人腦的極限而有極限?

過往的世界,很多光芒都從電腦這個學科裡爆發,作者也在第十一章說明一個淺顯的道理,因為電腦是前所未有的新領域,隨手撿來都是寶石。跟前期的物理爆發、更前期的化學爆發一樣。然而,接下來的時代,進入穩定成長期的演算法研究,想發現新的偉大演算法,就像在滿是繁星的夜空中,想要發現一顆沒被發現又耀眼奪目的星星。

我覺得最重要的是第十一章,建議大家從第十一章開始讀再回頭讀第一章。想要了解演算法不用知道任何電腦語言。書裡所說的演算法都是概念,語言是一個表達概念的工具,所以用任何語言都可以表達。重要的是知道,我們既習以為常、以為萬能的電腦,它能做什麼,又不能做什麼。才不會自尋煩惱。

2015年11月25日 星期三

[python]微型 web 框架對戰 flask vs bottlepy

這個是舊文了,只是我把以前的文章拿來重新整理以符合時代。
有些東西是恆久不變有價值的,就留下來,有些則可與時俱進,有些該丟的也要丟一丟。


舊文連結:https://www.dotblogs.com.tw/rickyteng/2014/01/19/141704
------
flask 是另一個微型的 web 框架,最近也開始比較為人所知。他的開發者是 Armin Ronacher,同時也是 Werkzeug 及 Jinja2 的開發者。

在 stackoverflow 上有人問了,這兩個微型框架各有所長,為何不合在一起做瀨尿牛丸? 為何不合併成一個完美的框架呢?

(以下為超譯)

Ronacher 先生回應說:「我有試過,但是 flask 是有相依於 Werkzeug 及 Jinja2,而 bottle 的開發者很堅持只要一個檔案,他對於合併後會變成很多檔案這事不開心。」

結果底下 bottle 的開發者之一 defnull 就電說:「不管是不是一個檔案,bottle 支援 python3,flask 辦不到!」

flask 的擁護者就來說:「那是使用 2to3 功能!不乾淨!」bottle 的擁護者說:「那是以前!現在不是!」

這個爭論一下就結束了。

而下個爭論就在一個檔案上,bottle 的擁護者說:「bottle 的一個檔案,就是比較容易變成其他程式的模組,deploy 也簡單,不用考慮系統相依性!」flask 的擁護者立刻上前:「系統相依性用 virtualenv 就解決啦!」bottle 的擁護者說:「就是比較麻煩啦!還要花硬碟!」flask 擁護者說:「硬碟是幾塊錢啊!」

Dexter 在混戰中衝上前說:「我不是 bottle 的粉絲!我發現 flask 也不錯!可以從零開始要什麼有什麼。

想要 form generation? Flask-WTF.
想要 DB ORM ? Flask-SQLAlchemy.
想要 Authentication system? Flask-login or flask-openid.
想要 migration for DB changes? SQLAlchemy-migrate (old), or Flask-alembic (fairly new still).
想要 AJAX? Try Flask-Sijax
想要 Admin panels? Flask-Admin
想要 to run scheduled executables on system? Flask-celery
想要 email? Flask-Mail」

bottle 擁護者說:「你想要這麼多,用 Django 就好啦!」Dexter 回:「因為 Django 做不好!」( Django 眾:趴著也中槍)

Aaron Meier,也來幫 Dexter 一把:「我要幫 flask 投一票!他的支援度比較好。Dexter 說得對,flask 幾乎有所有你會需要的東西。而且 Armin 是一流的 coder!你不一定要用 Flask-SQLAlchemy,PyORMish 非常棒!我是PyORMish 的作者」(這算是置入式行銷嗎?)

(超譯結束)

此次小混戰就結束了,從各人所言可以多少看到 bottle 與 flask 的特色。好不好用就大家自己開著辦吧!

說真的,如果功能真的要這麼多,web2.py、django、pylon、pyramid、turbogear、zope…等等整套式的框架也很多,真的數不完…。我沒有別的意思,只是 python 的 web framework 真的太多…。



原連結

http://stackoverflow.com/questions/4941145/python-flask-vs-bottle

[python] web 的微型框架 bottle.py

其實這是舊的文章了。只是把我以前的文章再整理一下而已。

舊文連結:https://www.dotblogs.com.tw/rickyteng/2013/12/19/135354
文章中所提的上一次研究 python web framework,該文章是:
http://codebeta.blogspot.tw/2013/11/webpy-webpy-django-web2py.html
cherrypy 後來我就沒有用了,因為我用 GAE 當 local server 撐好久。
------
上一次研究了 python 的 web framework。由於我的應用比較小,所以 web.py 是我比較喜愛的。而最近不小心找到一個小的 framework 叫做 bottle.py,它自稱為 micro framework,微型框架。沒想到,居然更對我的胃口。它有多小呢?它小到只有一個 py 檔 149k,它小到不用安裝,只要有 python,就可以執行!

from bottle import route, run, template

@route('/hello/<name>')
def index(name):
    return template('<b>Hello {{name}}</b>!', name=name)

run(host='localhost', port=8080)

以上是官網上的範例。從範例中可以看到它有內附 template,支援 routing (寫在 decorator 的地方) 以及變數,是很漂亮簡潔的寫法。

不過,它因為太小,以及為了可攜性,所以 http server 是使用 python 內的 WSGIRefServer(),這是只能每次處理一個 request。不過,這不是問題,既然它是使用 wsgi,所以有支援 wsgi 的 server,都可以當做是 bottle.py 的後台。

Server: Built-in HTTP development server and support for paste, fapws3, bjoern, Google App Engine, cherrypy or any other WSGI capable HTTP server.

有人是使用 bottle.py + cherrypy 的組合,我想我接下來會嘗試。但在開發期,或是在家只有5~6台電腦使用的狀況下,我想內建的就很夠用了。

2015年11月22日 星期日

[超譯]Open Sound Control

Open Sound Control 簡稱 OSC,是一個協定,讓電腦,混音器以及其他多媒體裝置之間利用現代網路技術溝通。

把現代網路技術的益處帶進電子樂器的世界裡,OSC 的優勢包含了互動性、準確、彈性以及強化的組織與文件。

這簡單但強大的協定,提供了處理聲音及其他媒體在即時控制時所需要的所有東西,同時保持彈性與易用性。

特色:
開放、動態、URL風格的符號命名規則
符號與高解析數值的參數資料
模式比對語言以指定多個接收者在一個訊息裡
高解析時間標籤
訊息包可同時產生效用
查詢系統動態查詢 OSC 的能力並且找到文件

有很多 OSC 的實作,包括即時聲音與媒體處理環境,網頁互動工具,軟體混音器,多變的程式語言,以及給感測器的硬體裝置。OSC 成功應用的領域有以電腦為基礎的音樂新表達介面、廣域與本地域的網路分散音樂系統,跨執行緒通訊,甚至單一個應用程式。

Highlights:
OSC 規格 http://opensoundcontrol.org/spec-1_0
應用 http://opensoundcontrol.org/osc-application-areas
實作 http://opensoundcontrol.org/implementations
2004 研討會 http://opensoundcontrol.org/2004-osc-conference
CNMAT OSC-kit http://opensoundcontrol.org/osc-kit
OSC 相關出版物 http://opensoundcontrol.org/publications
更多資源 http://opensoundcontrol.org/resources

CNMAT 的 OSC 研究
OSC 原來是在 UC Berkeley Center for New Music and Audio Technology (CNMAT) 的一個研究計畫。CNMAT 是 UC Berkeley 的一個跨學科的研究中心。它以充滿活動的教育,效率,研究計畫而聞名,其專注於音樂與技術創新互動。

原文:
http://opensoundcontrol.org/introduction-osc

2015年11月3日 星期二