Loading [MathJax]/extensions/TeX/AMSsymbols.js

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日 星期二

[超譯]github-gist-可以做什麼

[超譯]github-gist-可以做什麼

超譯原文連結:http://www.labnol.org/internet/github-gist-tutorial/28499/

github 提供另一個有用的服務,叫做 gist。 開發者可以用來展示 code snippers。 但它不只是給 geeks 及 coders。 github 是給每一個人都可以使用。 如果你有聽過 web apps (像是 Pastebin 或 Pastie), 那麼,gist 就是類似的東西但是更好,它沒有廣告以及擁有更多特色。

以下列出幾個服務你可以使用,你不必是個 geek。

1. 匿名寫些文章。

你不必建立 github 帳號,就可以使用 gists。 只要到 gist.github.com,在文字框寫下幾段文字並且建立一個 gist。 你可以選擇建立一個 secret gist (私密 gist) 這不會被搜尋引擎看到, 只會被知道這個 URL 的人看到。

2. 像 wiki 一樣追蹤文章內容變化

一個被發佈過的 gist,當你編輯寫的內容時,之前的內容會被保留。 你可以按 revisions tab 來追蹤曾經做過哪些內容編輯。 內建的 diff 引擎會標記兩個版本之間的差別之處。 這也可以用來比對文字檔。

3. 以格式化文字發佈 gist

gist 接受非格式化文字(plain text), 也接受用 markdown 格式文字發佈, 它會自己轉成 HTML 格式。 你可以加列表(list),圖像(放在外部),甚至表格(原先不在 markdown 規格內)。 當你用 markdown 格式寫好文章,記得用 .md 這個副檔名存檔。

4. 把 gist 當做寫作平台

現在有很多寫作的引擎,從 Blogger 到 Medium 到 Tumblr 等等。 你也可以用 github 的 gist 當做一個平台快速發佈你的文章到 web 上。 建立一個 gist (使用 plain text 或 markdown 格式), 然後用 roughdraft.io 來發佈,把 gist 做成一個 web page (網頁) 如果想增加可讀性,還可以使用表情符號。

5. 單頁網站的服務提供

Gist 有一個用有趣的應用叫做 Bl.ocks。 你可以寫 HTML, CSS, javascript,然後把 gist 存成 index.html。 然後用 bl.ocks.org 讓它變成 html 的網頁,看起來就像在瀏覽器上看。 例如這個連結就是個活生生的例子。 http://bl.ocks.org/labnol/raw/122d4de95c6a127b1c9b/ 原始檔放在gist:https://gist.github.com/labnol/122d4de95c6a127b1c9b

這招看起來就是會有流量的限制,但這仍是一個好工具。

另一招是用 google drive:http://www.labnol.org/internet/host-website-on-google-drive/28178/

6. 維設任務列表

你可以使用 gist 來追蹤「卡關任務」(範例:https://gist.github.com/labnol/8e1cdf64cd7b0c1a811e) 這些任務在純文本中用特別語法寫成,但它們會被換成勾選框。 你可以勾選或不勾選這些項目,它們自己會更新原始文字。 如果你的 gist 是公開的,任何人可以看到你的待辦事項,但只有擁有者才能改變每個任務的狀態

7. 把 gist 當成網路剪貼簿

gistbox 是 google chrome 的外掛,可以讓你從網頁保留些小段文字,存成公開或私密的 gist。 你甚至可以加 label, hashtag,讓你的 gist 容易被查找。

8. 把 gist 嵌進網頁裡

你可以把任何 gist 嵌進自己的網頁中,只需要一行 javascript 的程式。 被嵌入的 gist,會維持所有的格式與語法標示。 你的網頁訪客可以容易地克隆或分支你的 gist 進入他們的 github 帳號。 在 WordPress blog 也有插件及短程式碼可嵌入 gist。 http://wordpress.org/plugins/oembed-gist/ http://en.support.wordpress.com/gist/

<script src="https://gist.github.com/username/gist-id.js"></script>

9. 量測流量

你可以使用 google analytics 來量測你的 gist 的流量。 因為 github 不允許在純文本的 gist 使用 javascript,我們可以用 GA Beacon 來記錄 gist 即時的訪問。 https://github.com/igrigorik/ga-beacon 加入以下的程式在你的 gist,並且存成 markdown 格式,這樣就會追蹤你的 gist。

10. 使用桌面軟體來管理 gist

Gisto(http://www.gistoapp.com/)是一個免費的桌面應用軟體,可以用來管理自己的 gist (不依靠瀏覽器)。 你可以搜尋 gist,編輯 gist 的內容,觀看歷史記錄,分享 gist。 這軟體有 Mac OSX,Windows, Linux 版本。 另外,GistBox (http://www.gistboxapp.com/)這個 web app 是另外一種選擇。

超譯者 Ricky Teng

markdown 語法參考 http://markdown.tw/

view raw gistfile1.md hosted with ❤ by GitHub