高見龍

iOS app/Ruby/Rails Developer & Instructor, 喜愛非主流的新玩具 :)

RubyGems

image

RubyGems是很方便的Ruby套件管理工具,要安裝別人寫好的套件很多時候只要簡單的一行指令就能搞定。

例如要安裝devise套件的話:

> gem install devise

還可以指定要裝哪個版本的套件

> gem install devise -v='1.1.8'

如果要把套件砍掉:

> gem uninstall devise

相當便利。在安裝的過程中你應該還會看到兩行,會貼心的幫忙把文件也一起裝進來

Installing ri documentation for devise-1.1.8...
Installing RDoc documentation for devise-1.1.8...

但其實很多時候在寫code的時候不會真的去看ri或rdoc,大多是會偷懶的去googlestackoverflow翻答案,所以其實也是可以在安裝的時候加一些參數,告訴它我不想要ri跟rdoc。

> gem install devise --no-ri --no-rdoc

如果懶得每次都加這個參數,可以透過修改個人home目錄底下的.gemrc檔案(~/.gemrc),加上這行:

gem: --no-ri --no-rdoc

那如果之前已經裝的ri/rdoc要怎麼拿掉? 先找出你的gem裝在哪裡:

> gem env gemdir

以我的電腦為例:

> gem env gemdir
/Users/eddie/.rvm/gems/ruby-1.9.2-p0

每個人的安裝目錄可能都會不太一樣,像我的就是裝在RVM裡。切換到那個資料夾底下可以看到一個doc的資料夾,裡面就是你目前有安裝的gem的ri/rdoc了,不要的話就把doc裡的東西砍掉吧。

或是用一行文搞定:

rm -r `gem env gemdir`/doc

那如果哪天又想要了怎麼辦? 一樣以devise套件為例:

> gem rdoc devise

這樣就幫你再裝回來了,那如果想要把所有的gem的ri/rdoc全部裝回來

> gem rdoc --all

參考資料:

RubyGems手冊

跟大師學簡報技巧

image

週末參加了OSDC 2011,很讚! 除了從大師、神人學了許多專業的內容之外,也從他們身上偷學到不少presentation的技巧。表演這種東西沒有銀彈的,每個主講者的表演方式不同,每個聽眾的接受程度也不同,以下僅就我自己的一點點心得跟大家分享。

投影片的顏色配置

每個人在做投影片都有自己的一套做法,有的喜歡走精緻的設計路線,顏色喜歡暗色系,然後字弄得小小的;也有的喜歡把投影片的字弄很大,配合節奏輕快高橋流來表演,可以很快的抓住觀眾的視覺。

但很多時候在電腦上看到的效果,跟實際投影機打出來的會不太一樣。同一個場子,去年在RubyConf的時候應該就有講者吃過這個虧。記得Gregg Pollackihower的投影片就是用黑底白字,程式碼的syntax用的是黃色、紫色跟紅色。但因會場的光源不足(或是投影機的流明度不夠),我坐在第二排看的時候都有些吃力。

Gregg Pollack的talk

image

影片連結

ihower也稍微中招

image

影片連結

如果花了很多時間做的投影片沒辦法在台上發揮最大效果會很可惜的,我依稀記得ihower甚至有在會場問大家是不是有什麼軟體可以模擬這種投影器的光源的。

不過,今年ihower的session帶來的投影片是用白底黑色製作的,整個清楚很多,我跟去年是坐同一個位置,即使前面幾排的燈有稍微暗一點,也還是看得很清楚(可惜沒拍照)。

當然這點是我自己猜的啦,主講人是不是因為這個原因而改設計的我就不清楚了。不過至少對我這個觀眾來說,我覺得這樣的效果很不錯。

倒數計時

來自githubScott Chacon的session,也讓我印象深刻。session快開始的時候,Scott開始播放一些閃光照片(他自己出去玩的照片,還有他女兒的可愛照片..)。在自動撥放的同時我注意到左下角有個倒數計時,提醒大家在幾分幾秒後session就要開始了。我覺得這個設計很棒,大家在觀看賞心悅目的閃光照片的同時,同時也可以知道自己是不是還夠時間去上個廁所,或是再去外面掃一輪點心。

時間控制

時間的掌控是很不容易的。講太快後面空了一堆的時間不知道要幹嘛(如果是中午時間的話可以去外面先搶好位置吃便當),講太久則會延誤到下一個講者的時間,或是放飯時間。

同樣是Scott的session為例,他在整個投影片的左下角放了一小段資訊:

(60/247 – 24%) (45 – 30%)

確切數字忘了,如果我沒誤會的話,上面這段小字的意思應該是:

我的投影片總共有247張,目前是第60張,進度為24%,我的session有50分鐘,但我想留最後5分鐘給大家問問題,所以我設定45分鐘講完,目前已經過了30%的時間了

這樣的做法同時可以看到自己還有多少投影片,並且還有多少時間可以講,從兩個數字的比例可以更精準的控制自己講的速度。

這個好讚! 雖然Scott最後還是有超過一點的他預計的時間(內容實在太多了,二百多張投影片),本來最後要預留的5分鐘Q&A時間被用掉了,不過Scott的精彩演出,整場聽下來都沒冷場,雖然當天天氣很冷,但我有被高手灌頂的感覺,全身熱哄哄的。

PS: Scott用的簡報軟體應該是他自己寫的,叫做showoff

講故事的技巧

會講故事很重要!

我相信每個上台的講者都是實力深不見底的,但有時候實力深厚不等於會講故事。以電腦書籍來說,我就覺得O’really的Head First的系列書很厲害,能把原本很生硬的技術用很生活化或有趣的插畫來介紹給原本不熟悉的人。

再度以Scott的session為例。git是個很棒的工具,但因為跟以前的版本管理工具(CVS、SVN或是最強大的COPY)的運作原理不太一樣。所以Scott用了不少張的投影片,模擬了簡單的情境來說故事。請參考他的slide的第102頁(講git push的運作,可在瀏覽器按左右鍵換頁),一步一步的對話,第118頁的”crap”出來的時候我笑出來了,第119頁的”it would be mean..”真的很有趣,在有趣的同時,也能更清楚的瞭解git的運作原理了。

聽會講故事的高手講話,真的是種享受!

錄偽live demo

長輩、前輩們常說「Never Live Demo」,這跟某人只要去球場看球就一定會輸一樣的中了詛咒,只要live demo就一定會出包,各種千奇百怪的狀況都可能發生,不管是程式的問題,還是突然網路就是連不上,或是突然投影機壞掉..都出現過。不過如果沒有現場來段live demo表演,又好像少了點什麼。

這次我在ihower的session看到預先錄好的demo,有在現場看的人就知道這個效果真的讚! 保證不會出包,就算出包也一定是計劃好的出包(因為這次的主題是測試,所以測試不過是故意的)。透過這個方法,可以更確保整段session都在自己的掌控之中。

以上,是我覺得對我個人很受用的presentation技巧。希望可以抄襲內化成自己的能力,讓爾後上台表演的時候能給台下的觀眾們有更好的體驗。

最後,OSDC的工作人員辛苦了,很棒的聚會 :)

第2回AS讀書會

image

第二回的AS讀書會,140人報名110人到場簽名,出席率約8成左右。滿滿的簽到紙,看起來真令人感動! 也代表了其實對Flash/AS有興趣的人真的不少,而且這還幾乎只有北部的朋友而已。

感謝今天Gray奶綠茶兩位講者熱情的演出。

image

感謝兩位攝影師幫忙全程錄影,感謝小萩妹妹幫忙處理簽到跟收款,當然也感謝大家的熱情參與。

image

雖然這跟我當初想像的不一樣(我想像的是十幾個人左右而已),不過這樣的發展似乎也不錯。

再次強調,這個不是我個人的讀書會,所以有任何意見歡迎大家一起討論,我只是負責幫忙把大家揪在一起,凹人分享主題而已。

就過往的經驗,通常讀書會在沒有人願意分享,或是大家都分享過一輪之後熱力就會開始慢慢的消退。那這個活動會持續辦到什麼時候?

我希望可以每二、三個星期就來一次,只要你願意來,我就願意繼續弄。人數多就找大一點的場地,人數少就找小一點的場地。即使小貓三、兩隻也沒問題,咱們就坐著閒聊也行。或甚至是我直接安排幾堂入門的課程,直接講課給大家聽(我以前常幹這種事)。

有朋友好奇為什麼要弄這個? 其實好處很多的。例如我可以練習在很多人面前有條理的講話(我很需要這種練習);若輪到我上台分享,可以趁機把要講的主題看得更熟一些;還有可以認識許多同業、同好。

另外當主持人還有一些額外的好處,例如安排活動的時間、人員、場地,學習企劃、組識的能力(我也很需要這種練習);練習在適當的時機見縫插針的吵熱氣氛。看綜藝節目裡那些主持人口條、反應都一級棒,做這些事情都幾乎是本能反應的簡單,實際自己做了才知道其實那個能力是得練很久的。除了寫程式外,這些都是我想要學會的能力。

那壞處是什麼呢? 我目前還沒想到 :)

咱們下回見!

Amazon Web Services之門外漢心得

image

雲端,雲端,大家都在講雲端,不過我這種第三類組畢業的學生,沒有什麼的理論基礎,也不喜歡講理論(不過聽李教授說人死了之後就會在雲端了),僅就我自己最近試玩幾天Amazon的EC2心得與大家分享。

以前要蓋網站,除了要找設計師來做設計、工程師來寫程式外,還要有一個網站空間可以放你做好的東西才行。而這個”空間”的來源就有很多種,一個是自己架,不管是公司內部有專線,架在自己公司裡,還是花點錢去內湖那邊的機房租個機櫃,把機器放進去住,就是所謂的「主機代管」,不管是哪一種,都至少有養一台機器跟線路的成本。另一種是「虛擬主機」,就是跟業者租用一小塊硬碟空間,把你的網頁檔案放上去。

用房子來比喻,主機代管就像獨棟的透天厝,而虛擬主機就像在社區裡租一層公寓。各有優缺點,透天厝的優點就是可以自己高興怎麼裝潢就怎麼裝潢,而社區公寓除了樓層空間大小限制外,還有一些先天的限制,例如管委會不願意讓你破壞原有的牆壁(某些元件沒辦法安裝),或是當你在你家辦party,搞得太high(CPU或其它硬體使用率過高)影響到其它住戶,可能還會被管理員(主機商)來關切一下,或是狠一點直接把你趕走;相對的,透天厝的缺點就是成本比較高,而且還得自己小心會不會遭小偷,你可能得自己請一個看門的(MIS人員)或花錢裝一些保全設備(防火牆),而社區公寓則是同個社區的人一起share管理人員或保全的費用,成本相對較低。

其實之前一直就知道Amazon Web Services(AWS)很強大,但因為自己已經有在內湖養自己的主機所以一直沒去試試看,直到最近在某次讀書會上聽了前輩們的介紹,聽起來相當心動,反正現在有第一年免費的優惠,就註冊了個帳號上去玩。註冊過程其實不會太難,就是步驟有點多,然後都是英文介面,感覺AWS真的是另一個世界..沒聽過的資訊名詞多到爆炸 :) 。在你註冊新帳號的時候,會需要你的聯絡電話跟信用卡號做驗證。

那AWS的Elastic Compute Cloud(EC2) 跟前面提到的透天厝或社區公寓有什麼不同? 簡單的說,它可以同時有上述兩種方案的優點,而且成本還相當便宜。有這麼好康的事? 以下就以功能面跟成本面來說明:

以功能面來看:

EC2有好幾個等級的機器,可以依照不同的需求及預算來租用,從最便宜的Micro等級到High-Memory Instances等級(68.4 GB RAM),如果你是要大量運算的,也可以考慮High-CPU Instances。其實你在EC2啟用一個instance就等於你就擁有一台VPS了。

VPS? 簡單的講,這就跟一般把機器放到機房代管差不多,只是這台機器是”虛擬”的,你摸不到也看不到,但這台虛擬的主機跟一般獨立主機一樣可以SSH登入,要裝什麼軟體都可以裝,而且有擁有完整的root操作權限。

EC2的安裝也很方便,你可以用AWS提供的Image檔(Linux跟Windows平台都有),也可以找一些社群熱心人士貢獻的。安裝時間也是出乎意料的短,只要點幾下滑鼠,系統就整個裝好了!! 我自己是習慣FreeBSD,所以找了FreeBSD 8.2 Release版本的Image來裝,不過那個Image還滿”乾淨”的,Apache、PHP、Python、Ruby、MySQL都沒有,連/usr/ports也是空的,所以我自己花了點時間,把基本環境建好之後再做成自己的Image檔。

做自己的Image檔要幹嘛? 以前當過網管或是管過電腦教室的人應該都對Ghost這個軟體不陌生,通常會在系統最完美(或乾淨)的狀態把它ghost起來,然後如果要重灌或是灌其它台電腦的時候,只要一下子的時間就可以把那個乾淨的環境裝到新的電腦裡了,省時省力。而在AWS上做自己順手的Image也差不多是這個道理,只要在管理後台點幾下,下次要開新的instance的時候只要選用自己做的Image就可以很快的再開一個新的instance起來,而且還是你習慣的作業環境。

想想以前想要學Linux/FreeBSD的話,可能得自己想辦法從網路或光碟來安裝,再快也差不多得要半小時才能裝好,現在有現成的Image,只要滑鼠點幾下,幾分鐘就搞定,如果不想要或是被玩爛了,隨時可以砍掉重練,EC2真的是練功的好地方..

EC2有提供”Security Group”的功能,其實就是防火牆啦,你可以只限定某些IP或某些Port的連線才能存取資源,設定也相當簡單。如果在自己的機房自己弄,這可能還得花點錢買一台實體的防火牆來設定,而且要搞懂那些防火牆的rule設定也挺煩人的。

雖然micro instance的等級並不高,但放一些簡單的網頁或是基本的服務(例如DNS管理),是相當足夠的。像我就是把它拿來管理我手上的一些domain name,還有放一些簡單的HTML頁面。

AWS EC2的instance的IP預設是浮動的,如果重新啟動後,它的IP可能會變動,你可以跟EC2要固定的IP,並把它掛上到你指定的instance上。要注意的是,申請固定IP不用另外收費,但如果要了IP卻沒有掛到任何一個instance上,會被額外收費,免得大家亂要IP,佔著不拉屎。(IPv4已經發光了,請大家好好珍惜)

對我來說的另一個重點,是因為我近來喜歡用Ruby on Rails(RoR)來做網路活動的後端,原因請見另一篇門外漢心得。不過國內虛擬主機很少支援RoR,又加上我喜歡每次都放一些新玩意進來做實驗,虛擬主機限制太多,所以這也是我自己養機器的最主要原因。

以成本面來看:

錢很重要,所以先來看一下價目表

它的計價單位是”小時”,主要有兩種租用方式,一個是On-Demand Instances,一個是Reserved Instances。On-Demand就是要的時候租,不要的時候就退還,Reserved則是一次租比較長的一段時間(1年或3年)。

On-Demand的micro instance的一個月算下來才18塊美金(第一年免費),等級稍微好一點的standard instance是33塊/月。

因為我的工作大部份是跟網路活動相關的,而且網路活動的特性就是「時間短、流量會忽大忽小、下線之後就撤掉了」,所以On-Demand的計費方式就很適合,案子下線之後直接到後台把它停掉,就不會繼續算錢了。而如果是長期維護的的網站的話,就可以考慮Reserved的方式,一次買1年或買3年,價格更便宜,1年期的micro instance只要54塊美金。

這樣的價錢貴嗎? 以我現在養在內湖機房的12U機櫃費+頻寬費來算(不含主機跟其它硬體),一年差不多是2,100美金,如果換到EC2的話可以買到相當不錯的規格。那像智X的VPS方案呢? 一年約650美金(規格),戰國X的VPS的費用也差不多(規格) 。

比較起來EC2的價錢是真的不貴,而且EC2現在第一年還免費。那一年後怎麼辦? 真的覺得用得不錯的話,就付費吧。

其實雲端主機最重要的是它的scalability。

這讓我想到年輕時的一個故事,2005年Yahoo!有一個叫做”咖啡聽“的網路活動(已下線,僅剩網頁備份),那是個滿特別的網路行銷案例,目的是為了證明「網路廣告是有效的」,所以虛擬了一個罐裝咖啡的品牌,沒有在一般的電視或平面媒體打廣告,只在Yahoo!的首頁買了好幾百萬的網路廣告(都是雙星那種很貴的版位)。那案子的程式是我寫的,第一次遇到這麼大流量的案子,結果還是有幾次被衝到掛點。

再假想今天如果你蓋了一個線上購物的網站,一開始可能會想只買一台主機來放,但隨著會員越來越多,當你發現你的主機的硬碟燈閃不停、已經負荷不了,為了提供更好的網站瀏覽品質,也許你會想再加幾台機器來幫忙。即使如此,你可能得找人來想辦法新的主機跟原來的機器”串”起來(這個”串”其實挺複雜,這又是另一個故事了),這過程還是免不了得停機休息一下。但如果今天用的是雲端服務,通常只要刷卡付錢就可以”無痛”的馬上切換或擴充成高檔設備,來應付更多的需求,這點自己弄主機是很不容易辦到的。

突然想起以前我老闆給過我的一句話:「錢能解決的事都是小事」。

這樣講起來好像真的上了雲端就變神仙一樣了,真的這麼好,那生意就全部給它做就好了! 其實AWS還是有些我擔心的問題的,最主要的就是因為台灣沒有AWS的機房,亞太地區的機房目前只有新加坡跟最近新開的東京,畢竟還是得出國,反應速度就是比台灣本地的會慢了那麼一些些。

有個檢測的工具叫做CloudPing,可以測試不同地區AWS的Latency,我在台北用中華電信的線路測試,新加坡133ms,日本75ms。真希望AWS也來台灣開個機房啊..機會好像不大就是了。

AWS也沒這麼弱,也是有一些配套的解決方案,例如可以用AWS Simple Storage Service (Amazon S3)搭配CloudFront服用來改善速度,把靜態檔案放在S3上,然後CloudFront會找到離使用者最近的機房,並從那邊丟檔案出來。例如我常逛的天瓏書局網站就是個很成功的例子。

AWS的另一個問題,就是使用者的技術能力最好得有一定的網管基礎,不然玩起來會有點辛苦。另外就是因為台灣沒有AWS的客服,所以萬一有問題可能得打越洋電話或是英文書信往來,這也是另一個小小的門檻。

這就是我個人最近試玩的一些簡單心得,目前還沒有真正拿客戶或自己的案子在上面實戰過,應該不久的將來就會有了。

以上,才疏學淺,若內容有誤還請多多指教 :)

參考資料:

補充:

  • 感謝johnpupu補充,其實還有ebs跟頻寬的費用,AWS有做了一個計算機,可以更方便的算出成本 :)
  • Linode似乎也是VPS不錯的選擇,價格上也比AWS來得便宜一些。