蒼時弦也
蒼時弦也
資深軟體工程師
發表於

PHPConf 2014 會後心得

這次參加 PHPConf 不是以會眾的身份,而是以講師的身份參加。回想起來,三年前左右因為朋友的推薦參加了 COSCUP 接著得知了 PHPConf 然後就開始陸陸續續的參加各種社群的活動。

三年前左右,剛好是我升上大學的時候。那時其實已經經歷過好幾次的瓶頸,光靠自學其實是很難學好一項技能的。除了老師之外,我想就是社群這種平行交流的地方可以獲取「書本」跟「文字資料」以外的知識,很多東西真的要靠交談、人與人之間的友情,才能夠得到一些「特別的經驗」或者「特別的方法」

當了三年多的聽眾,我在這短短的時間內透過每一個 Conference 獲得了各種不同的技能與技巧,在今年的 PHPConf 我了解到我已經從一個「接收者」變成一個「分享者」的角色,正好也是在我即將從大學畢業的這個階段。

正因為我是受到「社群的恩惠」而成長,所以我想在之後我還是會繼續投入社群的活動。以一個工作人員,或者是講師的角色來做這件事情,即使不是每一個人都能透過這種方式成長,但是在未來,讓 Conference 繼續經營下去、舉辦的更好,都有可能多幫助到一個像我這樣受到社群滋潤而成長的人,這也是我從 SITCON 擔任工作人員的經驗,還有從 COSCUP、PHPConf、RubyConf、JSDC、WebConf 這些活動所體會到的。

總而言之,我會盡可能以工作人員的身份來參與未來幾年的社群活動,是時候該回饋給社群了 XD

那麼,來談談今年 PHPConf 的議程吧!

創意與專案管理的冰與火之爭

我想這是許多 Conference 都很少見的情況,以「不討論技術」的方式來跟技術人員聊「專案」這一件事情。

這場其實讓我覺得非常的有感覺,因為我自己在 SITCON 擔任組長,某種層面上也就是做類似 PM 的角色。在學校,畢業的專題也是我來擔任組長,因此也是非常類似 PM 這種角色。也因為這樣,我對於「專案管理」還算是小有心得,在聽完這場演講之後,我開始比較清楚「專案管理」真正該怎麼做。

其實我自己的一些做法跟講師介紹的就有點類似,不過也還指示一種不確定跟以「合理程度」來判斷去做的。這場結束後我的感覺就是「我好像知道專案該怎麼管理了!」這種感覺。

不過碰到停水,會場呈現一種悶熱的狀態(還好天氣算是涼爽)我有一點昏睡的情況。 總感覺今年許多 Conference 都碰到一些突發狀況呢⋯⋯

微博LAMP優化之路

講師沒有辦法來台灣真的很可惜,不過這也算是一種新的嘗試,利用遠端視訊的方式讓講師講解簡報。

當我聽到講師介紹自己的一些專案的時候,我馬上就感覺到「講師很強」這個事實,這場演講也沒有討論太多技術上的細節。 主要就是介紹怎麼優化一個 LAMP (後來改為 LNMP) 架構的網站,從速度上的優化、架構上的優化以及語言本身的優化,一點一點的介紹整體優化的過程。

即使現在還沒有辦法體會,不過作為「未來優化的參考」卻是很有價值的資訊。

網站上的議程表還沒有對調,主要是網路不穩所以在排除問題前,先交換了議程。

Framework or Framework Less

午餐過後,就輪到我的議程。議程組的負責責任 Frich 超負責的跟我聯絡,還有確保我是在會場中並且可以隨時準備完成。

不過這次有一些誤會發生,另外就是我感覺我似乎漏掉了不少通知(不過沒有太大的影響就是了 XD)

昨晚回到家之後其實非常晚了,寫這篇文章的時候才開始上傳簡報。

今年的共筆大家都用 Hackpad 來紀錄,我稍微看了一下,也許是我講得有點快所以大家紀錄的東西看起來不多。 (雖然也有可能是我的內容被判定成重點的部分太少了 XDD)

因為我沒有事先背講稿的習慣,所以大部分都是在演講的時候依照簡報的設計來講解。所以下面紀錄的「簡報摘要」可能會跟演講當時不同,不過之後有影片可以回味就是了!

對 Framework 的看法

其實這邊主要是希望能重新去思考「Framework」是什麼東西,三年前我第一次知道 Framework 這種東西,卻沒有思考過其意義所在。

我現在給 Framework 的定義是「一種作為開發參考規則的東西,則為 Framework」 同時,我也希望思考 Library、Framework、Application 的關係與意義,我是認為這三者有著類似「時間軸」的關係。

由 Library 組成 Framework 再由 Framework 完成 Application 這樣的進展。 (不過有時候,會是在 Framework 設計的差不多時,為了將可重用的部分分離,而發展出 Library 獨立存在。)

最後是 Application 到底是什麼,我認為在 Application 被停止使用之前,都是一種「有機的」生命,會不斷地成長、變化。也因此,如果架構不良或者程式碼有問題,就會長成「異形」這也會是 Framework 出現的裡有,讓 Application 的成長變得「有規則一點」或者「能受到控制」

另外也討論了一下像是 WordPress / Drupal 該分類為 Application 還是 Drupal 的問題,要說的話其實還是可以當 Framework 使用,只是在性質上已經是 Application 了!

至於演講中沒能提到的是 Themosis 某種意義上來說,他又把 WordPress 變回一種 Framework 了吧 XD

Framework 的運作

這些東西用久了,總是會想要了解本質跟架構上的問題。

目前主流還是 MVC Framework 這樣的架構,所以就簡單的說明 MVC Framework 的結構。 (其實很多部分都是從 Rails 的經驗學來的,不過 Laravel 雖然有點不同,但是大致上還是類似的!)

  • Model - 包裝業務邏輯:通常是存取資料用的,業務邏輯類似先把資料預先處理的感覺)
  • View - 顯示、呈現:通常會希望盡可能的不要有邏輯在裡面(雖然實務上不太能)
  • Controller - 主要的邏輯判斷:像是判斷要傳回 HTML 還是 JSON 有時候也會做驗證(在 Model 實作可能會比較好)
  • Router - 可以幫忙判斷目前網址該呼叫哪個 Controller 實作 RESTful 就很好用。(如果沒有用,通常 Controller 就是開啟的檔案)
  • Helper - 有時候 View 無法解決減少邏輯的問題,就會包裝起來放到 Helper 裡面(通常也是可以重複使用的)
  • Service - 有時候 Controller 會做太多超出判斷以外的事情,就會包成 Service 處理(通常會處理比較複雜的 Model 操作)
  • SQL Builder - 可以減少「簡單 SQL 的撰寫」並且讓程式變得更語意化(複雜的 Query 還是要手動寫)
  • Migrate - 減少在 Deploy 網站的複雜度,不過數量多了之後並不是件好事,像是 Rails 會用 Schema.rb 來儲存結構,當不需要 Rollback 結構時,可以刪掉老舊的 Migrate。
  • Task - 一般是 Command Line Tool 會把一些常用的操作包成 Task 然後用一行指令解決。

總而言之,整個 Framework 可能會有很多功能,是否要使用就是看需求。

Framework 的實作

照 Github 和簡報應該就可以了解實作的過程。 基本上是參照 Laravel 的架構去設計的,不過比較重要的是「專案評估」要去看專案的需求來決定。也許客戶可能只是想要一個 Blog 而已,還要看專案是否是接手的、前人的專案如何、客戶給的酬勞能做多少事情等等。

假設確定要自製 Framework 的話,那就要看是否要繼續開發下去,或者是這是用來「中繼」的 Framework (協助轉移、過渡時期整理架構所使用)如果是,那就要考慮是否把 Framework 的 API 盡可能設計成和目標 Framework 一樣,來加快後續的轉移。

另外就是選工具、選 Framework 還要盡量以「熟悉的」為基準點(加權)除非你是要練習,不然再弄專案來說,用熟悉的工具絕對會比較有利。

Q&A

我簡報上面好像打 FAQ 阿 XDDD

雖然很多問題似乎跟演講無關,不過關於「如何在新的框架中來使用原有程式」這個問題,我覺得很值得分享出來。

我被問到「案例中的原有程式,你是怎麼把它用在新專案」的時候,其實我第一個反應是「我已經砍掉重練了 XDDDD」不過這樣應該會被打吧(汗

主要是因為原有程式使用很舊的 PHP 版本和寫法,複製過去幾乎沒有意義。再加上我已經使用 Framework 了,很多重複的事情已經不需要使用,而且原有程式還有不少漏洞問題。簡單來說,只要知道原有程式的「運作」剩下的轉移到 Framework 其實是很簡單的。

註:大概就是原有程式寫了 30 ~ 50 行左右的程式碼,但是我在自己製作的簡易 Framework 之中,用 10 行左右就做完了!

演講上的心得

因為場地據說是原本準備的場地臨時無法使用所改的,所以活動會場來不及設置好網路等等(資訊人的生命)之類的設施,所以我直到演講後一段時間才看到 Facebook 上面的貼文。

其實很榮幸的就是目前正在實習的公司「五倍紅寶石」的前輩「龍哥」有來聽我的演講,從照片上來看據說是「爆滿」的狀況。 不過我在台上的時候,我以為只是「會議廳比較小」所以沒有注意到實際的人數。

過去幾次有機會站在台上其實我都是全身發抖的,但都要忍著然後盡可能大聲的把東西清楚講出來。這次沒有,原因就如上述一樣就是「我沒有很多人」所以我就很安心地講了!(準備充分而不緊張的問題,我想這次還不算到非常充分,所以絕對不是這個關係。)

目前對自己演講不滿意的地方,還是沒辦法讓大家「很開心」的去聽演講這件事情。畢竟,演講這種東西就是要告訴大家「你跟我做一樣的事情,會很快樂!」才有意義⋯⋯畢竟沒有人想聽「我做這好痛苦⋯⋯」這種充滿抱怨的主題吧!

Mircosoft Azure 攤位

原本是想去聽演講的,不過這次 Mircosoft 拿出的獎品實在太誘人,只好去努力的達成任務了!

首先,我覺得這次微軟根本是來「賣萌」的,整個攤位都是滿滿的 Azure Girl (原 Sliverlight 小光) 貼紙、紙膠帶,連展示都是 Azure Girl 養成遊戲⋯⋯

雖然很多工程師也是喜歡動漫拉,但是你們這樣真的不會嚇跑大家嗎⋯⋯

不過,會讓我去攤位最重要的是「旅用插座」這個神裝,可以支援歐洲、美國、英國三個國家不同形狀的插座,上面除了一般插座孔之外,還有兩個 USB 孔可以使用,這東西不趕緊去換一個過來對得起自己嗎!

不過沒想到,換到的條件竟然是要開一個 Azure Girl 來玩(崩潰)我一直覺得 Azure 的申請程序超麻煩才不想申請試用來玩,不過為了插座⋯⋯

剛好這個時段都是我的朋友在申請,不過為什麼都站著麼久?原來是申請到最後一階段卡住拉⋯⋯

微軟,我最近才對你們支援 Docker 和 OpenSource 有信心耶,但是你們的雲端這樣不穩沒問題嗎

感覺這次微軟只是來增加 Azure 報表上的使用者,跟研究看看大家到底懂不懂 Azure 可以來幹嘛而已⋯⋯

不過獎品清一色 Azure Girl 真的沒問題嗎⋯⋯

Phalcon 進行式

我一直對 Phalcon 很有興趣,因為他真的是我目前用過「神快」的 PHP 解決方案之一。

講者 SDpower 我總覺得經常看到,不過想不起來在哪裡經常看到(趴 雖然講者表示他很少上台演講,演講過程中其實我也是沒辦法聽得很清楚,但是內容卻是實實在在的把 Phalcon 的特質介紹出來,算是蠻有收穫的。

結束後我提了一個一年前的問題,就是 Resultset 為什麼無視 Model 設定的 protected 屬性一樣將其顯示出來,不過看起來似乎也不清楚這個問題(昨晚特地去查文件,似乎還是沒有變化⋯⋯)

與龍哥聊天

下午茶結束後看到龍哥在外面,就和 Karl Li (中文好難打⋯⋯)一起跟龍哥聊天這樣。

因為現在 Karl Li 在 FlyingV 工作,所以就聊了一下台灣募資網站的現況,還有目前在使用的 Laravel 等等。 因為剛好講到 Laravel 跟 Rails 的差異(其實 Laravel 很有潛力成為 PHP 界的 Rails 啊 XD)

龍哥就順便展示 Rails 4.2 的 Debugger 功能(類似 Breakpoint)和 Console ( 網頁中直接跑 Console 的神奇功能 ) 給我們看,看起來 Rails 4.2 會變得更好用。

另外就是,其實 PHP 開發者常用的 XDebug 也是有類似 Breakpoint 的功能提供給開發者喔! 請參照 XDebug Remote Debug 的功能,就我最後一次使用的印象,跟 Breakpoint 用法差不多(雖然我一直沒懂 Breakpoint 怎麼用⋯⋯)

MySQL 的效能救贖:Percona XtraDB Cluster

原本其實是想去聽 HHVM 的,不過龍哥說這場是大神演講。再加上多方考量後,認為 HHVM 能使用的情況不多,就跟 Karl Li 上來聽這場。

雖然看似是在介紹 Percona 的 XtraDB Cluster 不過其實裡面提到很多在「大規模」的網站中,會遭遇到跟 MySQL 相關的問題,像是備份造成的 Lock Table 而無法使用、查詢變慢的問題、資料庫跑很久才是實際拖慢 PHP 的兇手等等⋯⋯

在這場演講中,獲得不少實務上的經驗。不過目前還沒有到需要使用 Cluster 的時候,等到必要的時候再來嘗試看看吧 XD

小結

PHPConf 大概會是今年最後一場參加的 Conference 了吧,接下來就是要跟同學努力把畢製作完,還有把 SITCON 2015 準備完成,之後就是畢業,然後我就正式進入業界了⋯⋯

所以,現在該感嘆一下時間過的真快嗎 XD

雖然現在主要不是在使用 PHP 不過 PHP 這個語言真的是充滿了我在資訊這條路上的回憶 XD