Page 6 of 6

CoffeeScript 學習筆記:變數、字串與函式

目前開始學習使用CoffeeScript,來自我筆記一下,歡迎討論指教喔!

簡單介紹

CoffeeScript是JavaScript的一個編譯語言,簡單來說明就是寫CoffeeScript,然後CoffeeScript的編譯器再轉換成JavaScript。

至於為什麼要用CoffeeScript?我想可讀性和便利性是最大的主因,一個好的程式語言要有三大條件:寫少做多、易於閱讀、方便維護,而CoffeeScript就是為了改善JavaScipt而誕生的,從以下的介紹便會開始了解CoffeeScript方便的地方。

CoffeeScript安裝與指令

安裝步驟

  1. 安裝 node.js
  2. 安裝 npm
  3. npm install -g coffee-script

CoffeeScript指令

  • coffee -h – 查看CoffeeScript指令
  • coffee -c foobar.coffee – 將foobar.coffee編譯成foobar.js
  • coffee -cw foobar.coffee – 當foobar.coffee有變更就會自動編譯成js檔
  • coffee -c src -o js – 將src內所有coffee檔編譯成js檔,存到js資料夾
  • coffee -cw src -o js – src內的檔案有變更時,就會自動轉換並編譯到js資料夾

變數宣告

在CoffeeScript裡面,我們不用去理會變數宣告,CoffeeScript會自動幫我們處理變數宣告這一塊,不用自己寫一堆var,並且確保我們的變數在想要的地方執行,我們只要在我們想要的時候使用變數就可以了,還有,CoffeeScript可以不用分號結尾,這點真是不錯。

感謝CrazyLion補充:JavaScript也沒有要求要分號結尾!只是在學習時都有分號結尾
查了之後才知道,原來是壓縮程式碼時,沒分號有時候會產生問題。

CoffeeScript

foo = "Coffee"
bar = "Script"
alert ( foo + bar ) #CoffeeScript

JavaScript

var bar, foo;
foo = "Coffee";
bar = "Script";
alert(foo + bar);

樣板字串

我們如果要用一堆變數串成一個字串,要放入一堆加號,什麼"Answer is " + ans +".",感覺就是非常地麻煩,coffee只要寫成 "Answer is #{ans}." 就完美解決了,注意!一定要用雙引號包起來,單引號只會顯示#{ans},而不會顯示ans內的數值!順便一提,ES6也趕緊加入了${foo}樣板字串的概念XD

CoffeeScript

ans = "Script"
alert ( "Coffee#{ans}" )

JavaScript

var ans;
ans = "Script";
alert ( "Coffee" + ans );

函式

JavaScript最重要的function,在CoffeeScript裡變得十分簡單,本來的匿名函式寫法是 function(){ … } ,在CoffeeScript裡面,只要 () -> … 就解決了。

  • 用縮排取代大括號
  • 函式沒有儲存參數時,可以省略小括號
foobar = () ->
	alert ( "foobar" )
#等於
foobar = ->
	alert ("foobar")
  • coffee永遠有個return value,會自動return該function的最末端

CoffeeScript

cookies = ->
	confirm "Do you want some cookies?";

JavaScript

var cookies;
cookies = function() {
	return confirm("Do you want some cookies?");
};

呼叫函式

學會怎麼定義函式後,當然也要知道該如何呼叫它,有以下幾種方式。

  • 不傳入參數
    • coffee()
  • 傳入參數(小括號是可以省略的)
    • coffee( “foo”, “bar” , true)
    • coffee “foo”, “bar” , true
  • 傳入的參數有函式時,即使該函式也要傳入參數,也可以忽略小括號(但建議除了最外面的小括號,其餘小括號不要省略)

CoffeeScript

confirm = (reallyWant) ->
	if reallyWant
		true
 
plus = (a , b, ifPlus ) ->
	if ifPlus
		result = a + b
	else
		result = a
	"Answer is #{result}"
 
alert plus 20, 10, confirm true

JavaScript

var confirm, plus;
 
confirm = function(reallyWant) {
	if (reallyWant) {
		return true;
	}
};
 
plus = function(a, b, ifPlus) {
	var result;
	if (ifPlus) {
		result = a + b;
	} else {
		result = a;
	}
	return "Answer is " + result;
};
 
alert(plus(20, 10, confirm(true)));

延伸閱讀:jQuery with CoffeeScript

Clustering and Segmentation 分群和分割

今天學習的主題跟機器學習有關,以下是簡單的筆記,初次理解可能有誤或過於粗淺,歡迎提出有問題的地方。

機器學習有兩種方法:

  1. supervised learning:監督式學習
  2. unsupervised learning:非監督式學習

首先是監督式學習:

假設我們給電腦一百張人臉照,同時也給它照片上的人臉是誰,而當我們在Test的時候,給電腦一張圖片,電腦能夠分辨出是否是人臉照以及這張人臉照是誰。

對比非監督式學習:

我們一樣給電腦一百張人臉,但是不給電腦任何標籤,由電腦自動去分群,並希望我們Test的時候也會得到跟上述一樣的結果。

Dimensionality Reduction

一張30*30px的圖,該維度就是900維,我們使用演算法(例如:PCA)來降維,將較多的變數縮減成較少的變數,但也能保留原data大部分資訊,降維後的資料,我們就可以將其表現在二維圖表上,進行後續的分析、分群等等,但有個缺點:只能分析原本的data,如果我們丟新data進去,電腦只會告訴我們大概會在這個圖表的哪個位置。

Generative Models 生成模型

我們給電腦一堆臥室的圖片,並且給電腦一組亂數,電腦就會依據我們給的亂數去排列我們給我臥室圖,而這個臥室的圖片每一張只改變一組亂數,所以會呈現出連續性。

room

[Radford, Metz and Chintala, 2016]

Segmentation 分割

一樣以圖形辨識舉例,我們有一張圖片,電腦有多種分割開圖片成元件的方法,可能是用人、樹、路分割開來,或者是人身、人頭、人腳等等,至於是否符合我們需要,則端看情境,而且電腦在元件的label上有時候會跟現實認知不同,例如人被label成車子之類的。

OS X 作業環境建置

必裝套件管理:Homebrew

官方網站:http://brew.sh/index_zh-tw.html

Homebrew是一款套件管理軟體,可以使用指令簡單地安裝其他各種插件,接下來的插件都可以用這個來安裝。

安裝指令:

 

[code language=”bash” autolinks=”false”]/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"[/code]

 

基本指令:

  1. 搜尋套件:brew search [套件名稱]
  2. 套件資訊:brew info [套件名稱]
  3. 安裝套件:brew install [套件名稱]
  4. 安裝的套件列表:brew list
  5. 更新brew:brew update

進階版終端機:iTerm 2

官方網站:https://www.iterm2.com/

安裝方式:直接下載zip檔,解壓縮之後拖曳到「應用程式」資料夾內

cmd + , : 可以快速開啟iTerm的設定

螢幕截圖 2016-06-30 13.59.29

在「keys」->「Hotkey」的「Hotkey」欄位,修改成想要的快捷鍵,之後便可快速地叫出iTerm

終端機美化:OH-MY-ZSH

官方網站:https://github.com/robbyrussell/oh-my-zsh

安裝指令:

[code language=”bash”]sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"[/code]

70f58fb6-ba03-11e4-82c9-c083bf9a6574
我想只要一張圖就可以知道這個套件是在做什麼的了吧!

他還可以換成其他theme,只要更改~/.zshrc的(記得要讓Finder可以看隱藏檔)

[code language=”bash”]ZSH_THEME="robbyrussell"[/code]

Theme的名稱請看此處

版本控管軟體:Git

官方網站:https://git-scm.com/

安裝指令:

[code language=”bash”]brew install git[/code]

雖然官方網站有dmg檔可以下載安裝,但我是直接用Homebrew指令直接安裝,十分快速!

Git是一個版本控管的軟體,可以協助管理專案內不同版本的程式碼,誰在何時更改了什麼、新增了什麼功能,甚至如果不小心改壞了,也可以還原回之前的版本,讓開發人員在專案開發上可以省下一堆在處理程式碼備份或協作時的衝突所花費的心力。

Git插件: Git Flow

GitHub頁面:https://github.com/nvie/gitflow

安裝指令:

[code language=”bash”]brew install git-flow-avh[/code]

Git的Branch是一個十分好用的功能,而Git-Flow便是協助我們該如何良好地去運用它,Git-Flow的概念是:master的版本永遠是專案最完整的版本,以網站比喻就是可以上線給使用者使用,而其他的開發都是在其他的分支上。

延伸閱讀:Git flow 開發流程

Terminal多工:tmux

官方網站:https://tmux.github.io/

安裝指令:

[code language=”bash”]brew install tmux[/code]

終端機關閉之後,通常工作記錄就會隨之煙消雲散,但是只要使用tmux插件,即使把Terminal整個關掉,下次依舊可以恢復原本的工作狀態,而且也可以實現單一視窗分割頁面,或者單一視窗切換頁面但不會中斷工作,對於開發者都是非常方便的功能。

基本指令:

在終端機打上「tmux」即可開始使用tmux進行作業,但如果此時把終端機整個關閉並重新開啟,只要輸入「tmu attach」便可恢復到原本的工作進度,如果要確實關掉一個tmux的client,輸入「exit」並enter就可以了。

tmux的指令需要一個前綴指令:Ctrl + B,輸入之後,再輸入以下的指令才會實現對應的功能

  1. d:暫時離開tmux(detach)(輸入tmux attach就可以重新回去tmux繼續工作)
  2. ?:指令列表,按q離開
  3. c:建立新的tmux client(create)
  4. n:切換到下一個tmux client(next)
  5. p:切換到上一個tmux client(preview)
  6. 0-9:切換到特定的tmux client
  7. [:進入複製模式,游標可以任意移動,按著space開始反白,enter複製並離開複製模式
  8. ]:貼上

延伸閱讀:終端機必備的多工良伴:tmux

延伸閱讀:tmux Quick Start

終端機錄影:asciinema

官方網站:https://asciinema.org/

安裝指令:

[code language=”bash”]brew install asciinema[/code]

將自己在終端機上所做的事情完整的錄製下來,並且上傳到asciinema的網站上,有註冊帳號的話,還能夠到自己的帳號底下看自己錄了哪些影片,是個十分有趣又實用的工具。

基本指令:

  1. 開始錄影:asciinema rec
  2. 結束錄影:輸入「exit」後enter,或Ctrl + D

錄影結束之後會出現一段網址,在瀏覽器輸入那個網址就可以看到自己上傳的影片囉!