Latest

Go起步走 - if...else, switch

if..else Go的if...else語法與其他語言非常相近。 // 如果if後方的敘述是true,就執行block中的內容 if a == 2 { return 2 } // 加上else if a == 2 { return 2 } else { return nil } // 加上else if if a == 2 { return 2 } else if a == 3 { return 3 } else { return nil } 而Go比較特別的是可以在if後方加上一個initialization敘述。 if a += 1; a == 3 { return 3 } 1. a+=1會在condition判斷之前先執行,接著才進行判斷 2. 如果以這種方式宣告,

Go起步走 - Map

在Go當中,map相當於JavaScript中的object、Ruby中的hash。 結構 結構上簡單來說就是一個key對上一個value。例如: my_map["food"] // 回傳"hamburger" // 意思是給予一個key,就會像查字典一樣,回傳一個value 用法 因為強型別的關係,所有key和value必須保持統一的型別,宣告時要指定清楚。 var my_map map[string]string // 第一個string是說明key的型別是string // 第二個string是說明value的型別是string my_map = make(map[string]string) // 一般的宣告方法,必須要另外用make關鍵字才可開始給予數值 my_map["food"] = "hamburger" 還要先make完全就是個麻煩,當然,Go還是提供了一個快速宣告的方法。 my_

Go起步走 - 檔案基本結構

我們以官方Hello World程式來看一下Go的基本檔案結構: package main import "fmt" func main() { fmt.Println("Hello World!") } 整個檔案可以簡單切成3個部分。 1. package代表內容名稱 package代表這個檔案的內容摘要,同時也是這個檔案的標題,必須在第一行。 例如官方例子中的package main代表這個檔案內容標題為main,這是Go內建的規則,亦即在執行.go的程式時,一定要執行名稱為main的package,如果沒有,會出現錯誤訊息: go run: cannot run non-main package 除此之外,每一個專案、套件都會有自己的package名稱,而這個名稱也是我們在後面import時會使用到的名稱。可以自定義: package my_package 這樣在其他檔案內要import讀取此檔案時,就需要使用my_package這個名稱。 2. import代表載入的相依套件 官方例子中所載入的fmt套件名稱為format的縮寫,

ruby on rails

Rails 用巢狀include和查表方式來避免 n+1 query

先前在用includes和joins避免N+1 query當中有提到,資料庫一直是Rails效能一大殺手,除了瀏覽器下載很肥的檔案會造成效能低落以外,第二個會讓網頁很慢的原因就是資料庫讀取太頻繁(當然如果被牆了那可能又是另一個原因...) 以下介紹兩種稍微複雜一點的情況,使用不同的方法來避免 n + 1 query。 巢狀 include (nested include) 如果我們遇到非常複雜的table結構,關連得非常遙遠,例如: class Post < ActiveRecord::Base has_many :comments belongs_to :user end class Comment < ActiveRecord::Base has_many :replies belongs_to :user end class Reply < ActiveRecord::Base belongs_to

Go起步走 - 變數宣告

Go的變數宣告有數種,要注意的是由於Go是強型別語言,所以型別都是固定的,就算不宣告型別,也必須要有初始值,讓compiler來判斷這個變數的預設值是什麼型別。變數不經過宣告便無法使用,跟Ruby那類比較自由的語言不同。 以下使用Go最常見的fmt.Println()來顯示結果,相當於JavaScript的console.log()或Ruby的puts。 一般變數 var var name string var name string = "John" var name = "John" name := "John" 最後一種寫法最簡單,因此也最常見。 多重變數宣告: var a,b,c int var a,b,c int = 1,2,3

Go起步走 - 本機開發環境安裝

安裝環境 以下示範最簡單在系統上安裝Go語言的方法,以Mac OSX為例,直接從Terminal用Homebrew進行安裝: $ brew install go 如果不想使用brew安裝,按照官網上的指示或是golang-book的說明安裝也是ok! Go預設要求在系統內有一個專屬於放置所有Go專案的資料夾,因此我們開啟這些資料夾: $ mkdir go $ mkdir go/bin $ mkdir go/src $ mkdir go/pkg 簡單來說,bin專門放置編譯後的系統執行檔,pkg則是專門管理套件的資料夾,而src資料夾是我們真正寫程式的專案資料夾。如果你不喜歡資料夾叫做go,也可以取其他比較好辨認的名字,例如go_work_space之類的。 接著要設定兩個系統變數:$GOPATH是系統抓取Go專案放置在哪,$GOBIN則是安裝Go程式時,系統判斷要放在哪的變數。請打開你的terminal設定檔,如果是用bash那就是.bashrc,如果是zsh就是.zshrc,寫入以下指令 export GOPATH=$HOME/go export GOBI

Rails用Bing API自動繁簡中文轉換

翻譯這種專業的事情通常是交給專業的人來做,但例如繁簡互轉這類比較可以用機器來處理的事情,在Rails上也可以輕鬆完成。 通常我們用的Google翻譯,但他的api我覺得不是非常友善,相對之下Bing的翻譯比較容易串接,直接使用gem bing_translator就可以在Rails專案或是任何Ruby專案中使用。如果你的網站有繁簡轉換的需求,可以考慮使用看看,不用每次都需要靠瀏覽器的外掛來完成,看起來比較不專業。 申請帳號 1. 首先到Bing翻譯服務的網頁 2. 如果還沒有帳號,可以點選畫面右上角申請一個。 3. 在翻譯服務的網頁,選擇最上面的免費版,按下「訂閱」。 4. 同意使用條款後,到程式管理頁面,點選「註冊」按鈕。 5. 「識別碼」和「名稱」可以隨便取,「URI」可隨意填入一個URI,「描述」則隨意填寫即可。 6. 將「用戶端識別碼」和「用戶端密碼」複製起來,這就是你要使用Bing翻譯時,要連帶傳送的key。 7. 選擇「建立」

幫Capistrano加上自動化Rails指令

在Deploy Rails至VPS當中我使用capistrano進行自動化佈署,非常快速簡便。 但接下來會遇到一個問題:裡頭並沒有其他自動化指令,因此每次佈署,後續都會有一些必須執行的指令。例如標準動作bundle、rake db:migrate等等,如果每次佈署後都可以自動化執行,就可以省下非常多功夫。 Rails 版本 4.2.0 Capistrano 版本 3.4.0 在capistrano當中可以設定不同的task,就像一般Rakefile當中所使用的task一樣,佈署後可直接指定執行。 1. 佈署後自動更新gem 可以在deploy檔案的namespace :deploy底下另外定義我們要執行的task。 /config/deploy.rb namespace :deploy do # ...原本的code task :bundle do on roles(:web) do execute "cd /var/www/rails/

ruby on rails

From Hexo to Rails

先前在Why Hexo?這篇文章中有提到,因為先前各種部落格平台和framework的缺點,所以改換使用Hexo這個Blog framework,優點在前面的文章中已經提及,但用了半年之後,遇到一兩個問題... 1. 網址改變 首先是每次產生網站時,Hexo的規則會有所修改,一般來說如果我的文章檔名是: 20140101-hello-world.markdown 那Hexo就會把這篇文章的網址變成是: https://motion-express.com/20140101-hello-world 會將檔案名稱完整的放到網址列上,但不知在哪個版本之中,Hexo把網址改成: https://motion-express.com/hello-world 這樣的改變重點在於SEO的效果整個蒸發掉了,而且愚笨的我是在已經網址改變不知道幾個禮拜之後才發現這件事情,一開始想說摸摸鼻子算了,結果過了不久,居然Hexo又把它改回來!代表這一切又是白做工,Google和Yahoo應該早就討厭我了吧! 2. 認真經營影音內容 除此之外,從兩三年前開始我就想認真經營影音內容,但一

Ruby gem 'Carrierwave' 上傳檔案神器的簡易安裝與使用

Ruby版本:2.1.2 Rails版本:4.1.0 開發環境:MAC OSX 10.9.4 Carrierwave是Rails應用程式裏面上傳檔案的簡單工具,上傳的檔案種類不限,在這邊跟大家分享一下安裝與使用carrierwave的方法,主要針對圖片的上傳和簡易編修。主要是從Railscasts學來的,請各位多指教。 以下已經預先完成的項目: 1. 已經建立了一個rails的應用程式 2. 擁有一個product model,底下有title和description兩個項目 3. 已經有基本的products CRUD Controller及view 進入正題: 1. 設定及安裝 首先打開Gemfile,輸入 gem 'carrierwave' gem 'rmagick' 備註1:在安裝rmagick的時候要確認有安裝ImageMagick,若無,則先進行安裝。 備註2:安裝ImageMagick需要使用Homebrew,