2014年1月31日 星期五

介紹一本不錯的javascript的書

目前仍然處於軍中,說實話回到家沒多少心情寫code,實在慚愧,於是乎小弟我轉換個用功方法,就是看看書囉~ 我目前在看的書是 eloquent javascript ,看了幾章,覺得他講解的十分清楚,而且他的定位是把你當成一個程式新手 :P

前幾章我是看的十分之快~  畢竟都有一些基礎了.. 但是我不知道有沒有漏看什麼重點 :)
目前我閱讀英文書的速度並不快,要是一加快速度老是會有地方,不是那麼懂,真不知道什麼時候可以練到跟看中文書一樣的速度。

好啦 :) 回到正題,說一下這本書的教學安排
基本上
前四章,是把JS裡面的基本資料型態介紹給你知道。
第五章,跟你說說例外處理。
第六章,就是最近夯起來的function programming,裡面介紹一些基本概念這樣。
第七章,這個如果你真的是一個新手(剛碰程式語言),這章可以跳過,因為這裡面有關於path-finding(演算法的東西) ,沒學過的會一個頭兩個大 :P
第八章,則是講在JAVASCRIPT怎麼寫出物件導向的方法,多半是用到prototype拉 :P
第九章,是講模組的方面,只是關於JS,他並不像其他語言有模組系統,不過這邊我也沒過多摸索,就不講太多了 :P
第十章,regular expression,很值得練的東東,建議可以看熟一點
第十一章,講一些關於http和web比較瑣碎的東西,想是protocol阿,webpage的post和get等
再來後面還沒看~

基本上我是不會寫每章的心得,因為這本書我是把它當作休閒看看,沒有打算精讀 :P 但是這樣略讀後,我是真心推薦新手可以看這本書,會學到很多東西的~~

最後小小的期許 :) 希望過些日子可以取回寫code的心,即使在軍中心有多累,周末回到家仍然會有心情寫code :p

2014年1月2日 星期四

python wsgi 初體驗~

最近終於稍微將上進的心,慢慢抓回來了 : ) 所以特別來寫一篇,雖然質量可能沒說很好,但總也是一個進步,好了,回到正題,其實是最近開始對python的django 感到有點興趣 :P

我照著官方的教學,跟著一步一步慢慢做,在其中赫然發現,有個東西叫做wsgi,那時我突然覺得奇怪,怎麼這東西似曾相似,於是我果斷就搬出我最會的技能( google it ),哈哈,原來python標準模組裡就有這種東西,難怪會有熟悉的感覺,看過wiki介紹後,才知道這是python所定出的一個interface,wsgi千萬不要硬記阿! 看過他全名後就很容易記起來 web server gateway interface,簡言之,它只是一種application和server間溝通的介面這樣,想要看更加詳細的解說,可以看看這個 網站,說得滿詳細的。


跟往常一樣就先來個測試範例吧

from wsgiref.util import setup_testing_defaults
from wsgiref.simple_server import make_server
from wsgiref.validate import validator


def simple_app(environ, start_response):
    setup_testing_defaults(environ)

    status = '200 OK'
    headers = [('Content-type', 'text/html; charset=utf-8')]

    start_response(status, headers)

    ret = '<script>alert("hello world")</script>\n'.encode('utf-8')
    return [ret]


validator_app = validator(simple_app)

httpd = make_server('', 8000, validator_app)
print('serving on port 8000')
httpd.serve_forever()

其實關於我給的那個網站,就有對於參數詳細的說明,或者去官方網站看也會得到解釋的,所以在這我就不會特別說明了 :P (其實是有點懶XD

start_response就是將http的status和header傳給server,想當然爾,傳完了initial資訊,就要接著傳內容,這邊有個特別的地方那就是回傳的值(內容)! 似乎必須要是iterable的值,以我的python版本,如果只是單純回傳bytes物件會發生錯誤,因此我才會用list。再來就是python強大又好用的地方了,他很貼心,有做個小型Server可以讓我們測試結果,而不用再去安裝其他server,還要去做相關設定....。開啟localhost:8000後,就會跳出一個視窗上面寫著hello world囉~ 顯而易見的答案對吧。


另外關於ret你是可以改成讀取index.html檔案,然後encode後再回傳,這樣做的話,就更有server的FU吧 :) 我想django大概也是利用類似的做法,不過django也說了他是一個架構,而非server,所以自附的server僅供測試方便,要發佈網站時,還是用專業的server比較好。