2015年11月22日 星期日

[程式] Rails Girls Taipei 初體驗

好幾年沒有寫程式了,

但心心念念那種把程式從無到有刻出來的感動。

所以前些日子寫了一個小玩具,完成之後迫不及待發表給大家看。

像個炫耀的孩子,明知道身邊那麼多寫程式的高手,我還是想要讓大家知道,我能寫。


Rails Girls 聽說是個很搶手的活動,

這次被 Jeff 鼓吹參加,我想也是一個逼自己認真寫點好東西出來的方法。

所以就又報名了,但這次是我自己報名,不是 Jeff 幫我報名的。


收到入選通知的那天真的很開心。

因為原本不抱希望,被選上特別有意外的驚喜感。


雖然誤以為星期五整天要上課,事先排了整天休假,

但收到行前通知發現下午六點才開始,覺得賺個偷閒時光也好,

想不到星期四下午收到老闆搭飛機回台灣的信,

於是星期五早上又趕緊進公司把事情再多做一點,近中午才離開。

也幸好 Jeff 找我一起吃午餐,關心我的事前準備,知道我連 xcode 都還沒安裝,

硬拽著我進咖啡廳把這 xcode 搞定,

我才知道這 xcode 竟然要下載 4G的資料.....感恩 Jeff, 讚嘆 Jeff ... 讓我不至於開天窗!


===========================
DAY 1

慕凡開場介紹 Rails Girls 的歷程,看了影片裡的一些照片,相當有趣,

特別是阿宅平常足不出戶,這類社群活動就更顯重要。


這天認識了同組的教練:湯湯,和組員:佑佑,兩位人美心也美的好女孩兒,陪我度過美好的夜。

因為 Rails Girls TW 有教學指南

再搭配湯湯仔細的說明,補充一些背景知識,讓我能夠很快瞭解 RoR 的架構。

因為我想做的事情有點複雜,所以湯湯講的工具我都筆記下來,

深怕漏了什麼就做不出我想要的效果。

但是湯湯給人一種很穩健的感覺,聽完我的功能需求,還跑去詢問其他教練,

讓人覺得相當可靠。

佑佑和湯湯很像,也是個氣質清新的女孩,兩個二十出頭的正妹跟我同組,

我真心覺得......空氣充滿幸福的粉紅色。 >///<


第一天還蠻順利的,

照著安裝食譜進行,沒有遇到什麼大問題。

因為我十幾年前有管過系站,對 command line 還算熟悉

(天啊十幾年前這種話我也說出口了)

再安裝和湯湯一樣的 Sublime Text 2 作為編輯器,只要開啟目錄就會在視窗左邊有目錄和檔案清單可以選,真的好方便!而且預設字和註解都會變色提醒,真是幫大忙了!


然後試著安裝 App....我在這一步把 App 的名字取得又臭又長

所以到後面有點痛苦。

建議 App 的名字不要超過 10 個字母....會很煩

(曾經有想過乾脆打掉重練算了嗚嗚嗚)

(湯湯聽到我這樣說也面不改色地回答:「其實多做幾次也會比較熟。」)


安裝完 App 之後湯湯介紹了 Rails 的資料擺放概念,

app/ 是我們主要會修改的地方

config/ 是設定的地方

gemfile/ 是使用別人寫的小套件時會用到的

models/ 是資料庫

views/ 是外觀

controllers/ 是 models 和 views 之間的橋樑

在 config/ 底下的 routes.rb 定義了網址 URL 傳給哪一個 controller

可以在 command line 指令 rake routes 就能列出所有的 URL 及對應的 controller


平常我們網頁都是先將網址導到一個網頁,網頁收到資料再邏輯運算,

但 Rails 的網址會先導到 controller 做運算然後再指向網頁 views

這裏的流程跟原本的網頁運作不太一樣,我覺得很新奇。雖然 RoR 不是新東西。

而除了指南上的 scaffold 做法,湯湯也教了只產生 controller 的語法,用來建立首頁。

真是我覺得很不習慣的地方,因為一行指令下去,網頁咻咻咻的就生出來了,好誇張。




一邊教學湯湯也一邊介紹我們有其他的自學工具

(1) codeschool 可以學 Ruby 基礎概念

(2) ruby warriors 可以一邊寫 ruby 一邊打怪升級,我覺得很難因為我連變數宣告的規則都不懂...想要一個 global 變數為什麼這麼難啊啊啊(只好偷看攻略了 www)

(3) railsGuides

(4) codecademy


晚上把 codeschool 的 Ruby 基礎課程玩了一遍

弄到十二點多,幾乎是半痴呆狀態完成的,大概了解到 ruby 是個很愛搞怪的語言

以 C 為基礎的概念很多都變成阻礙....時常會有「嗄什麼竟然這樣寫就好!!」的驚嚇


===========================
DAY 2

早上五點多就起來先把想要做的資料庫 table list 寫出來(太久沒寫程式太興奮了)

一直很煩惱關聯性資料庫離我太遙遠,規劃是這樣想,但實際做要怎麼做呢?

不管囉反正跟著課程走,基礎打好比較重要!

也很巧早上看到一個新聞是關於某間育幼院收到過多的物資,發佈了請大家不要再捐過去,請改捐給其他單位的消息。

剛好和我的 project 相呼應,Jeff 還特別傳新聞網址給我,說我下午若要 Demo 可以用。但我其實還蠻怕 Demo 的。你知道要一個具有資工背景又有完美主義傾向的人上台,給大家看一個幾乎啥都沒有的半成品,需要多大的勇氣嗎!!!

但我把這則新聞視為一個 Sign,老天爺在對我說,我正在做對的事情。



首先問湯湯,如果要查找 Ruby 的各種資料型態和 funtion ,有沒有網頁可以查找,

最好是左邊有類似 PDF 目錄的東西可以點開,比較快

但是湯湯也不知道哪裡有,先推薦兩個網站給我們:

(1) Ruby on Rails 實戰聖經

(2) Google


不知道是我對程式語言的熱情不夠,還是我太懶,

永遠想要抄別人寫好的 sample code ... \@@/


另外湯湯也教我在 command line 下指令 irb (裝 Ruby 的時候就內建了),會進入 ruby 的環境,可以打一小段程式碼做結果驗證


接下來進入今天的主題囉~

今天要套用 Bootstrap 做外觀,但是我以前用過所以就很快,反正幾行東西照著步驟複製貼上複製貼上就完成了(哎好隨便的筆記)

接著就可以把網頁裡面想要變漂亮的東西開始套用相對應的 class

比如說 table ~比如說 button~  比如說 image ...

有很多東西可以用,外觀美美的很重要


也因為 scaffold 自動產生的外觀不好看,所以到

app/assets/stylesheets/scaffolds.scss 裡面的內容整段 註解掉了 (用  /*  */ )


玩到一半的時候,Eddie 來做今天的開場分享,也是播了一段影片

介紹 Ruby 這個社群和相關的活動,

老實說寫程式這件事情,我覺得沒有每天摸的話,很快就退步了,

但要我每天撥時間搞這個,我又覺得很困難

因為我沒有愛程式愛到不寫會死的地步

但我可能因為今天沒有看漫畫或是沒有唱歌就覺得心裡有遺憾....

遺憾你懂嗎!!!

你不寫程式會不會有遺憾?

那到底人為什麼要寫程式。

我思考了很久,結合了最近看的 TED Talk ,有一個人這樣說:「如果你每天早上醒來都會有人為了你所做的事情感謝你,而這件事情也是你想做的,是你才能做的,那不是很棒嗎!」

所以我就把自己要做的 project 題目搞得很大(自己挖坑跳)

至於到底是什麼內容我現在還不想說  T_T


不過以後若有時間有機會也還是想參加 Rails Girls Weekly 這種學習營的活動

總覺得一天半的時間太短了,如果寫程式的時間再多一點,也許作品會更完整

另外又覺得教練的角色真的有點辛苦,如果我在 coding 那湯湯在旁邊要幹嘛呢?

非親非故的怎麼會這麼佛心花時間教人寫程式,實在太令人感動了。

Eddie 有提到 Rails Girls 的發起人 Linda 寫了一本 Hello Ruby 是教小孩子學 Ruby 的書。

( 內心馬上OS:沒錯我需要這本書 Q_Q 這本書有中文版嗎? )


說到玩 便當遊戲,因為已經知道基礎的概念,有些名詞也都認識,回答起來是還蠻容易的,更何況還是 OPEN GOOGLE 的方式。但最後公佈解答的時候也還是中招了!我落入了每一種菜都一定要塞進便當裡的陷阱啊啊啊啊啊,人不能貪心,有吃飽就好是吧!!


接下來要再回到教學現場了

前面講到外觀是很重要的,湯湯也介紹一個網站 CSS W3schools

(湯湯補充: W3schools 能查找很多常用的 CSS 語法,但是偶爾有錯,也沒有寫清楚細節,所以要了解 CSS 的話不推薦從這裡學唷)

CSS 是個好東西,但我每次看別人寫的都覺得好亂,看不懂



外觀講完了接下來要教 (4) 上傳圖片的功能,要用到別人寫好的套件,所以要使用 gem

而在教學裡沒有說明到的部分,是在 _form.html.erb 裡需要修改,因為 scaffold 建立的時候把 Picture 做成 text,而 _form.html.erb 裡要把 picture 當成 file

  <div class="field">
    <%= f.label :picture %><br>
    <%= f.text_field :picture %>
  </div>

改成

  <div class="field">
    <%= f.label :picture %><br>
    <%= f.file_field :picture %>
  </div>



接下來是重頭戲啦!!!因為我跟湯湯說我想要讓人可以從 Facebook 或是 Gmail 帳號自動登入,所以湯湯就教了 安裝 deviseOminAuth 以及到 facebook developers 的 My App 申請,完成這個美好的工具!

最痛苦的就是 debug 了,我常常搞不清楚什麼時候變數名稱要有 s 什麼時候不用,什麼時候用我取的名字,什麼時候用大小寫連在一起(好啦因為我取名字的方式造成這種困擾)(所以我覺得學程式語言的潛規則很重要啊啊啊)

基本的功能大致教完了。

接著就要考驗東西怎麼生出來還有怎麼 debug 的功力了(泣)

湯湯教我一個 command line 指令 rails c

會進入 console mode 可以直接下指令給資料庫

用 tablename.all 連結之後可以 tablename 看欄位,或是 tablename.first 查第一筆資料...等等

可以直接在 console mode 新增資料到 table 裡做驗證


因為照教學做出來的 table 太簡陋,需要增加欄位,所以也學到了 migration 的一些潛規則

migration 指令下完要先到 db\migrate\ 底下看產生出來的修改項目對不對

若不正確就直接改檔案

正確的話再下指令 rake db:migrate 把修改的內容實際執行下去

可以在 db\schema.rb 看到最後 table 的長相

如果不小心做錯了還可以 rake db:rollback 復原~
(有沒有這麼方便啊!!!Rollback 最高!!!)


第二個重頭戲就是,噹~噹噹噹噹~噹噹噹噹~

關聯性資料庫!!

沒錯是的就是這個很重要的,我的 project 要用到的功能。

但是老實說,我今天早上(拍謝這篇文章我每天都有打一段,現在這段是星期天才打的)

在跟 Jeff 介紹我的 project 的時候我還是有點丈二金剛摸不著頭腦

反而 Jeff 比我進入狀況!!

不斷大喊:What !!哩供蝦!!為什麼你知道!!啊我怎麼不知道!!


總之這個部分是在教怎麼做 comment 留言功能,留言是掛在某個東西底下的,因為一個東西可以有很多個留言。

好唷這個部分教完時間也差不多四點多了。

這時候我的 project 原訂需要 4 個 table 只做了 2 個哈。

因為我擔心再加兩個 table 這關聯來關聯去的我會崩潰嘎嘎嘎。


所以就先醬子。

最後湯湯有跟我們說一件很重要的事情。

所有的網頁最外層框架就是 views/layout/application.html.erb 在定義的

裡面只有一個地方會串到其他各自網頁

那就是 <%= yield %>

是不是超重要!!難怪我每次改網頁都改不到我想改的那個地方!!搔不到癢處~~

就是搞不懂這些網頁到底是怎麼切割的。


最後聽其他組發表作品,真的都蠻有趣的,至少外觀都算美麗,

回想十五年前(為什麼要逼我嗚嗚嗚)

寫出一個烘培雞是多麼新潮,但現在想起來畫面簡直慘不忍睹的記憶

(各種彩虹字+細明體和粗體+斜體外帶閃爍跑馬燈效果....)

現在人隨隨便便就寫出一個文青部落格!到底是想怎樣,想逼死誰啊!

算了,我想,這也是時代的眼淚。


=====================

After Party

中午是和同桌的 Linda, 昱陞和 Kiky 一起用餐,有稍微自我介紹,閒話家常。

但同桌只有我和佑佑參加 After Party...

所以我和佑佑兩個人先聊了一陣子之後再去騷擾別人(誤)

首先罐子書館當代分館的文青味好重。

餐點是好吃沒話說,精緻豐盛,飲料也很不錯,

但是我把啤酒當汽水喝有嚇到佑佑,不好意思老娘酒量太好... @@

甜點種類多就是要給個讚!女孩兒可以不吃正餐,但不能沒有甜點!(其實是說我啦)



我想大概寫一下,跟其他女孩兒們交流的心得和情報

好像很多人都是來「感受」寫程式這件事情的。

我想那些沒有寫過程式的女孩兒們都會有「彷彿到火星上觀光」的感覺吧。

(誒你在說什麼啊,火星語嗎?)

(天啊原來火星人腦袋裡裝這些東西)

(火星人果然不是普通人可以理解的)

(啊...我覺得我好像有一點明白為什麼火星人脾氣這麼暴躁了)

她們互相交換「平常工程師都是怎麼嫌棄我」的經驗

聽了很心酸啊

你們這些阿宅就不能對美女溫柔一點嗎?

美女講的話也都是有憑有據的只是沒有邏輯,啊你邏輯很強你不會自己補嗎?

老實說最近有個朋友想找我聊聊,希望我幫忙當普通人跟阿宅中間的翻譯,

如果有我幫得上忙的地方,我當然義不容辭啦。

但是阿宅們也該檢討一下,到底是你專業厲害,還是產品賣得動比較重要。

不要忘了世界上有一半的人口都是沒有邏輯的。



我覺得最開心的是認識了幾個年齡小我快一輪的朋友,
(保安!保安!為什麼我這麼老!快把我抓走嗚嗚嗚!)

他們有熱情,有想法,願意投入社群。

也總是有一票人無償付出,提攜後進,這個社會才能 5倍速前進。


非常感謝 5倍紅寶石和 Ruby 社群辦了這樣一個活動。

我覺得各方面都很有意義!

(如果哪天我退休了就來認真寫幾個 project ...)

沒有留言:

張貼留言