Wednesday, October 31, 2012

Continuation Passing Style(CPS) using Scheme

針對近期學習的Scheme中的Continuation Passing Style(CPS)查詢相關資料,做了筆記。

Resource:
http://en.wikibooks.org/wiki/Haskell/Continuation_passing_style
http://mainline.brynmawr.edu/cs245/cps.pdf
http://en.wikipedia.org/wiki/Continuation-passing_style

Definition:
Continuation Passing Style is a formed for expressions such that no function ever returns, instead they pass control onto a continuation.
or,
"A data structure represents what is left to do."

Features:

  • return early
  • exceptions and failure can be signalled
    • pass in a continuation for success
    • pass in another continuation for fail
  • suspend
Why:
  • CPS quickly fills the stack or has to be given hand-coded infrastructure in languages that don't support the automatic merging of unneeded stack frames.

To Complement:
  • every function takes an extra argument, its continuation
  • every argument in a function call must be either a variable or a lambda expression (not a more complex expression)
Note:
  • There's no implicit continuation - every call  is a tail call.
  • There's no magic there, every continuation is simply explicitly passed.
  • For using CPS without tail call optimisation will cause not only the constructed continuation potentially grow during recursion, but also the call stack.
Another Topic, Call-with-current-continuation:
  • Scheme allows the continuation of a computation to be captured by call/cc.
  • (call/cc proc), where proc is a one-parameter function.
  • (define get-back 'any), usage: (get-back k)
  • (exit 0), escaping from deep recursion.
My Review:
Quite hard to read Scheme code especially with lots for function calls and recursion. This might because I am more familiar with basic imperative programming languages.

Friday, September 28, 2012

iTerm 2 v.s. Terminal (on Mac)

學長提到在Mac底下很多人會使用iTerm 2而非原本的Terminal加上screen,於是乎我便自己安裝了的iTerm 2看看差異在哪裡。

以下幾點是iTerm 2內建的功能,也是我個人認為這些是大家會選擇iTerm 2的原因:
  1. 分割畫面:可以水平和垂直分割出不同的畫面,由於是內健在iTerm 2裡面操作上與快捷鍵的設定普遍順暢合理。
  2. 系統叫出iTerm 2的全域快捷鍵:可以設定在系統任何處叫出iTerm 2的快捷鍵,然而,需要先設定iTerm 2為"Open At Login",這樣它才會在使用者登入後開始等待讀設定好的快捷鍵。
  3. 更接近*unix:雖然大家都說Mac就是從BSD來的,command應該不會差太多,但是個人在使用本來的Terminal上,發現仍有一些小地方很不順手(與*unix差異較大處),其中值得一提的是,我使用Terminal時進入Downloads/,輸入"ls"指令,有時不會出現任何東西,有時會當掉,而我查看資料夾權限時發現,Mac的部分檔案權限比*unix多一個欄位,暫時推測是如此不同的權限設定導致我在Downloads/底下無法正常"ls"。另外,更多快捷鍵的設定是跟*unix一樣的,如ctrl+D會登出並結束,但是Ternimal底下必須command+D而且並沒有幫你關掉Terminal。
  4. 支援全螢幕:Mountain Lion開始,Mac OS X程式有無支援全螢幕模式成為大家在意的事情,或許不能說是非常重要的一件事情,但表示iTerm 2更新和維護的頻率是高的。

Sunday, August 5, 2012

Commands of Appengine

dev_appserver.py <folder path>
demo on local machine

appcfg.py update <folder path>
upload folder to Google server

Tuesday, June 19, 2012

期末颱風

期末考時遇到雙颱,大家都紛紛在問隔天會不會考試... 於是用程式碼解釋這個現象,不過裡面有個有趣的BUG,能發現嗎?


Saturday, June 16, 2012

Facebook Chat-room Image ( Facebook 聊天室圖案製作 )

最近朋友又在Facebook聊天室用神奇的code貼了一張影像給我,仔細看了一下,發現方法頗單純。


作品:師大附中Facebook聊天室校徽





[[119853858155674]] [[406381676079369]] [[405569136151638]] [[123046641168163]] [[351541474918594]] [[350116605059320]]
[[330262407053149]] [[119515894855852]] [[248128375300088]] [[251189481647356]] [[252104128229413]] [[404711332904212]]
[[315426835210887]] [[358358740897499]] [[144806638987969]] [[330205803723974]] [[400975169955496]] [[309864779103545]]
[[433440300023950]] [[395893770456168]] [[162290537236794]] [[253404078092844]] [[345436568858428]] [[441776292507972]]
[[453347648010473]] [[473114889368633]] [[310365985721855]] [[221169918003673]] [[294436837320086]] [[244573498991442]]
[[459915707353191]] [[409172655792153]] [[372764052783133]] [[432841633416823]] [[460590967285763]] [[146421248826697]]
以上碼貼在Facebook聊天室,對方會看到附中校徽!


Facebook聊天室中出現[[ID]]的字串,回將換成ID對應的相片,可能是某個Facebook帳號,也可能是粉絲專頁(Pages),而要製作自己喜愛的圖案則是用這樣的方法,於是乎我就自己做了一個,方法如下。

一、
將圖片切成M*N的方形子圖片(sub-image),且每個子圖片pixel要超過180*180的大小(如果沒有,可以手動拉大就好了)



二、創立M*N個粉絲專頁,分別把分割好的圖片當作對應的粉絲專頁



三、
把所有粉絲專頁的ID(可以從網址裡面讀出)記錄下來,套入[[ ]]中,排序成M*N的形式後就可以在聊天室貼給朋友分享了!

ex. [[395893770456168]]


注意事項:

  1. 過程中圖片和粉絲專頁名稱一定要標好,且可以從中讀出影像的位置(幾之幾)
  2. 使用Photoimpact分割圖片與創立數十個粉絲專頁,比想像還要費時,往後若要操作可以寫自動化的程式運作,讓全部程序自動化
  3. 粉絲專頁在太短的時間內建立太多會被偵測到,Facebook可能會把該使用者封鎖(我連續創立約20個就遇到警告訊息)



HSNU ROCKS!!

Friday, June 8, 2012

Google Blockly

今天在WIRED(http://www.wired.com/wiredenterprise/2012/06/google-blockly/)上頭看的Google Blocky,說是視覺化的程式語言,於是玩了他的名叫Maze的DEMO(http://blockly-demo.appspot.com/blockly/demos/maze/index.html)。

採用左手摸牆走的走迷宮方法。


小心得是和感覺這個Demo跟Karel是很像近的範例。

Tuesday, May 29, 2012

談論網路課程

這篇文章本是服務學習課程中,聽演講的心得(還沒有交的朋友不要抄呀),寫著寫著,對於我們國內被新聞報導好像很好的OCW,產生很多不一樣的看法。


李百里先生在這次的演講,撇開他的專業與我們談論新的教育方式,我格外喜歡如此,畢竟一個企業家能與我們分享的實務經驗不是能在短短演講中吸收的;相對的,以一個最需要人才的企業家角度,談論和我們相關的教育,是我們眼前最關切,也是最具有實際價值的。

講者提到的新式網路課程我頗有感觸,過去一兩年內也修過很多網路課程,甚至實際到美國的學校修課,十分能感受講者期盼我們去接觸這類課程的心情,反觀國內的網路課程,實在有太多可以進步的地方了。

最大的差別在於,任何一門課的設計是否能從學生學習的角度出發:於課程長度安排上是否符合人的專注力長度、作業是否能漸漸引導中含有教學、老師是否真直接給予準確精簡的資訊而不廢話、資訊系統與作業系統是否順暢美觀。自己修校內網路課程,對於上面幾點,發現我們的課程時間安排完全不人性化;作業從課本選而像是隨意丟給學生,並不具有引導學習的功效;老師教學難易度沒有辦法從學生角度出發,沒有設計好的教材與內容;資訊系統中網路速度非常慢,對於校外使用者根本不堪用,至於美觀雖然不影響功能,但卻間接影響觀感。

拿當今我們看到做得很好的網路課程做比較,上述個人的想法某種程度來說是不公平的,畢竟別人擁有的資金多太多了,但許多設計上的規劃,並不一定是錢的問題,於是我覺得國內對於這方面的投資、用心程度令人擔心。