分類彙整:programming

研讀Laravel原始碼!

用了一陣子的CodeIgniter,慢慢感覺到這個有點年紀framework的極限。
包括PHP社群現在廣泛使用的套件管理Composer、PHP 5.3以後出現的namespace、到處都是全域物件(導致要一直打$this->blah)、缺乏單元測試的整合。
搜尋了一下,現在Laravel有很精美的template engine以及ORM,決定開始學習這個框架。

以前學習新框架都是翻官方文件、同時試著實作一個小project出來,常常有「不夠深入瞭解這套框架」的感覺。
這次試著從閱讀source code開始,每讀到一個段落就做筆記、評論、反覆翻閱官方文件、試著實作小功能。

下面就是我目前的進度,向對Laravel有興趣的各位分享!
Laravel原始碼分析

(Photo via Adam Ward, CC licensed.)

Rails之父:我怎麼學會寫程式的?

DHH,本名David Heinemeier Hansson,Basecamp合夥人、Google 2005年度駭客、業餘賽車手,他最知名的身份是網路開發框架Ruby on Rails的發明者。

DHH曾在部落格發表他學寫程式的心得:

https://signalvnoise.com/posts/2582-how-do-i-learn-to-program

看過之後覺得獲益良多,特此翻譯出來和大家分享。


我怎麼學會寫程式的?

我花了二十幾年才真的學會怎麼寫程式。不是因為我嘗試的不夠,而是因為我一直用錯誤的方法。我以前都看著那些教材、範本照做,寫出一些我根本沒興趣繼續往下寫的東西。這是為了學習而學習。

我知道這方法對有些人管用,這些人就是很樂意學習新東西。我真羨慕你們。但這對我不管用,而且我知道很多人也沒辦法用這種方式學習。

為了解決鳥事而寫程式———對我來說這才管用。寫程式是因為非這麼做不可。寫程式是因為我他媽的在乎自己所寫的東西,而且我希望它越快完成越好。

這就是我學寫Ruby的方法。我把目標定為,用Ruby把Basecamp寫出來。當你因為一個目標而去學習,每件事的先後順序就變得非常清楚。我到底該做什麼才能讓這幾個訊息順利在Ruby執行?哦,我需要在這裡加一個迴圈。哦,我需要在哪裡抓些資料庫的資料出來。

決定目標的當下,你的點子就完成一半了、而且你還知道了該怎麼做。

簡單來說,就是從一些確實的東西開始做起,接著讓時鐘發出「滴」聲,然後讓它發出「答」聲。

CS183第一課:創業–關於未來的挑戰

Paypal共同創辦人、Facebook第一個外部投資者Peter Thiel,2012年在Stanford大學開課分享他創業的心得,課名為「CS183: Startup」。

美國作家Blake Masters將19堂上課內容摘錄成筆記並放在網路上:

http://blakemasters.com/peter-thiels-cs183-startup

這些筆記最後整理成書「Zero to One」,並在Amazon販售:

http://www.amazon.com/gp/product/0804139296

本文譯自於Blake Masters在部落格上的原始筆記。


CS183:創業–關於未來的挑戰

目的與前言

我們好像覺得這世界的零售業都抓狂了、批發業都發瘋了。理由很簡單:我們一直沒搞懂這個世界。最基本的挑戰就是–在商業世界或是人生都一樣–如何整合微觀與巨觀的事物去理解每件事。

人類學已經大致理解了這個世界。但是他們並不從研究中直接學到職涯發展的技巧。工程學則恰好相反,會學到許多技術細節。但是他們大概沒學到「為何」、「如何」、「在哪裡」應用他們的技術。最棒的學生、工作者、思想家會將這些問題整理成一個有力的論述。這門課就是要促進這個過程。

I.          科技的歷史

對於大部分的人類近代史來說–從17世紀晚期的蒸汽機發明一直到1960年代晚期左右–技術的變革非常巨大,幾乎可以用無情來形容。在更早之前的人類社會,人們幾乎都是以掠奪別人來賺取財富。工業革命導致的產業變化使得人們不再掠奪、而是透過貿易賺錢。

這個變化的重要性難以言喻。大概有1000億人曾經在地球上生存過。絕大多數都生活在一個停滯的社會中:成功不是藉著創造價值,而是索取而來。過去幾百年的科技進步真的是奇蹟。

對於未來最樂觀的預期發生在1960年代。人們相信著未來。他們思索著未來。許多人有極度的自信,認為之後的五十年將有史無前例的技術革新。

結果除了電腦產業之外,什麼都沒發生。人均收入持續在增加,但是成長速度大幅下滑。薪資的中位數從1973年就開始停滯。人們發現自己處在「愛麗絲夢遊仙境」式的困境中、必須更加費力的奔跑–也就是工作更長的時間–只求能待在同樣的地方。這個衰退的原因很複雜,光靠薪資數據無法解釋。但這些數據的確說明了過去200年的高速成長正在急劇減速。

II.         電腦科學發生的事情

電腦是近代科技發展減速的一個例外。Moore’s/Kryder’s/Wirth’s 定律始終靈驗,產業前景持續看漲。電腦科技隨著不斷改善的硬體以及敏捷的開發方式,成為了其他產業的某種標竿。它很明顯是矽谷生態圈的核心、驅動了現代科技的變革。也因此電腦科學成為了讓科技再次發展的起點。

III.       未來發展

A.        全球化與科技: 水平 vs. 垂直發展

發展有兩種:水平/廣泛,以及垂直/密集。水平或是廣泛發展,基本上就是複製行得通的那些東西。用一個單字來說,就是「全球化」。想想看中國50年後會是什麼樣子。保守猜測就是會很像美國現在的樣子。城市會被複製、車子會被複製、鐵路系統會被複製。某些步驟也許會省略。但總之就是在複製。

相反地,垂直或是密集發展,則代表做一些新的事情。用一個單字來說,就是「科技」。密集發展涉及了從0到1(而不像全球化是從1到n)。我們在加州之類的地方看到很多垂直發展,特別是矽谷。但我們要不斷質疑每件事。確實,很多人似乎完全只專注在全球化而非科技;譬如「已開發國家/開發中國家」這個名詞就很藐視科技,因為它暗示了現代是「已開發」、現代已到了極限。以一個社會來說,我們似乎總是會覺得科技在歷史上有某種極限存在。

值得一提的是,全球化與科技確實存在某些相互影響。不應該錯誤的用二分法區別他們。想想看從1到n得面對的資源限制問題。大概不能讓每個人都擁有汽車,那會導致生態浩劫。如果從1到n不可行,那就只有從0到1的解法了。正因如此,科技發展才極其重要,即使我們的重點是全球化。

B.         從0到1的問題

我們如此專注於從1到n大概是因為它比較容易。大家應該都承認,從0到1跟複製某個東西n次有本質上的不同,而且幾乎總是比較困難。就算嘗試走垂直路線,從0到1的過程還是得面對例外主義的挑戰;每個新東西的創辦人、投資者一定會擔心:我真的知道自己在做什麼嗎?我是不是瘋了?

舉一個政治上的例子。美國常常被認為是一個「例外」的國家。至少很多美國人堅信不疑。所以美國知道自己在做什麼嗎?還是它瘋了?每個美國人都擁有槍枝、沒人相信氣候變遷、大部分的人體重超過600磅。例外主義當然有別的一面。美國是一個充滿機會的大地。它是一個開拓新疆土的國家。它提供了新的出發點,保證有才華的人會獲得財富。每年有自認獨具天賦的大概20000人前往洛杉磯,想變成知名演員。其中當然只有很少一部分能真的如願。創業領域大概比較不像好萊塢那樣被例外主義帶來的挑戰所折磨。但它大概也無法完全避免。

C.        教育與敘事的挑戰

教垂直發展或是創新,就某方面來講本身幾乎就是個矛盾。教育本身基本上就是從1到n,我們觀察、模仿、然後重複。嬰兒並不會發明新的語言,他們學習現有的。從最一開始,我們就以複製行得通的東西來學習。

那樣沒辦法創業的。做別人在做的事大概能幫助你走30%的路。(譬如說,一定要把公司弄得很好看才行。然後才可以向創投竭力推銷。)但在某些時刻你必須從0到1–你要做些重要的事而且一定要做好–這可無從教起。想想托爾斯泰在《安娜·卡列尼娜》寫的前言,所有成功的公司都是與眾不同的;他們在不同方面理解了從0到1的問題。但是所有失敗的公司都一樣;他們搞砸了從0到1的問題。

所以研究成功企業的案例幫助很有限。PayPal跟Facebook是做起來了。但是很難得知過程中哪些不可或缺。下一個偉大企業大概不會是線上支付公司或社群網站。絕不能對同一個故事著墨太多。所以商學院的案例研究方法比較像個神話,幫助不大。

D.        決定論 vs. 非決定論

有關發展的一個困難問題就是如何評估一個冒險的成功機率。在從1到n的範疇下,那只是統計問題。可以分析然後預測它。但在從0到1的範疇下,那就不是統計問題了;樣本數為1的標準差是無限大。沒辦法做統計分析;統計上來說,我們一無所知。

我們很常用統計的方式去思考未來。統計學告訴我們那是隨機的。我們無法預測未來;我們只能用機率的角度去想。如果市場用一種隨機步伐在走,那就沒什麼道理去算出它。

但是有另一種數學式象徵可以用:微積分。微積分式象徵想知道能否、如何去搞懂接下來會發生什麼。舉NASA跟Apollo任務為例。必須非常確定月球到底會在哪。必須替火箭規劃出足夠的燃料。諸如此類。重點就是沒人會想搭乘一個在統計上只根據機率去飛的太空船。

創業在這個程度上就像是太空計畫。從0到1必須讓決定論壓過非決定論。但有一個很實際的問題。有個詞用來描述那些宣稱能看到未來的人:先知。在我們的社會裡面,沒有真的先知。Steve Jobs很巧妙的處理了決定論與非決定論之間的分界;人們都認為他有遠見,但他沒有太貪心去猜更遠。他應該是抓了個不會太遠的距離(也因此成功了)。

運氣跟實力的問題也很重要。要區分兩者非常困難,幾乎不可能。試著這麼做很可能產生錯誤的推論。我們現在最該做的也許是點出這個問題,然後建議企業家、可能的企業家,應該要注意這個事情。

E.         密集成長的未來

關於密集成長的未來有四種理論。第一種是收斂理論;從產業革新開始,會先有一個高速成長過程,但科技會減速、成長速度會趨緩。

第二種稱之為循環理論。科技發展呈現循環;有進展,然後接著緊縮。週而復始。在過去的人類歷史這大概一直成立。但之後會不會繼續成立就很難說了;很難想像我們會以某種方式失去所有累積下來的資訊跟知識、然後必須重新探索一次。

第三種是崩壞/毀滅理論。某些科技發明將導致我們如此。

第四種是特異點理論。某些科技發展將產生人工智慧或是到達新的知識水平。

人們很容易高估收斂理論以及循環理論的可能性以及解釋能力。相對地,他們可能會低估崩壞/毀滅理論以及特異點理論。

IV.         為甚麼是公司?

如果我們希望科技發展,為什麼是公司去做這件事?畢竟,也許有可能讓整個社會的人都替政府部門工作。或是相反,所有人都是獨立承包商。為甚麼是這種介於中間的版本、包含至少兩個人、而不是地球上所有人都做一樣的事?

答案可以用Coase定理說明。公司之所以存在是因為他們最佳化了內部以及外部的協調成本。大致來說,隨著組織單位成長,它的內部協調成本也會成長。但它的外部協調成本會下降。極權政府很明顯的太大了;外部協調很容易,根本沒有成本。但是內部成本則如同Hayek以及Austrians所說的,困難又代價高昂;中央統一分配行不通。

另一方面,獨立承包商則是毫無內部協調成本,但是外部協調成本代價高昂(需要跟所有需要打交道的對象獨立簽約),幾乎累到癱瘓了。理想狀態–公司大小–就是如何找到適當比例。

V.        為甚麼是新創公司?

A.        成本的影響

大小與內部/外部協調的成本影響很大。設想遠方有個100人的公司,員工彼此都不認識。公司政策會變得很重要、員工動機全都變質。讓工作看起來做完變得比實際上有沒有做還要重要、這些成本幾乎一直被低估。如果公司有一個以上的辦公室,專業投資人要不要投資就該再想想了。嚴重的協調問題常常是從擁有多層樓辦公室這樣乍看之下微小、無害的事情開始的。聘請顧問並且試著將關鍵專案外包也是一個嚴重警訊,理由類似。儘管過去40年的確減少了協調成本–這也說明了為什麼企業似乎比以前更小了–整體來說依然太過低估了。這些成本始終很高,值得我們努力去思考。

Path限制使用者只能擁有最多150個「朋友」就闡述了這種觀點。古代部落總有很明顯的大小上限,幾乎不太會超過。新創公司重要之處就在於他們很小;如果一間企業的大小與複雜度就像企業內人數的平方值,那新創公司就處於一個獨特的位置,可以減少人際、內部成本並因此能把東西做完。

大家熟知的Austrian批評也與此吻合。就算一台電腦能夠很嚴密的把一間公司面對的所有經濟問題都考慮進去(說明白點,根本沒辦法),那還是不夠。想考慮所有成本,還必須把人類的不理性、情緒、感受、以及互動算進去。電腦幫得上忙,但資訊還是不夠。如果我們真有全部資訊,也不知道怎麼利用這些資訊。所以在實務上,公司終究是有個固定大小。

B.         為什麼要創業?

這個問題最簡單的答案有點負面:因為你無法在現存的組織裡面發展新科技。在大公司、政府、或是非營利組織裡會遇到一些問題。他們可能無法理解財務需求:被官僚體系癱瘓的政府會付某些人太多的薪水、同時又付給某些人太少的薪水。不然就是這些組織無法處理個人的需求:你在大官僚體系很難得到尊重、名譽、鑑別度。有使命感的人容易想從0到1。你只有在被一群想從0到1的人環繞時,才有可能真的從0到1。這只會發生在新創公司,大公司或是政府都辦不到。

為了金錢而去創業不是一個好主意。研究顯示更多錢會讓人們更快樂,但在每年$70000到達極限。超過之後,更高收入帶來的邊際效應或多或少會被其他因素抵銷(壓力,高工時,等等。就算不考慮這些,金錢的邊際效應也很自然會遞減。)

也許想被紀念、出名會是比較好的動機。也許不呢。成名與否是不是真的如同人們以為的那樣重要,十分有待商榷。想要改變世界應該是比較好的動機。1776-79的美國就是某種形式的新創。開創者的動機是什麼?動機很大一部份也被文化影響。在日本,創業被視為輕率的冒險。在某處當終身員工則會倍受尊敬。這種觀點背後的字面解釋就是「所有財富背後都隱藏著嚴重犯罪」。Founding Fathers是犯罪集團嗎?所有開創者都是某種形式的罪犯嗎?

C.        失敗的代價
新創公司付的薪水比大公司少。所以創辦或是加入一間新創公司代表了某種程度的財務損失。這些損失常被覺得很多。其實,並沒有那麼多。

非財務的成本其實更高。如果你參與了一間失敗的新創公司,你可能沒學到任何有用的東西。你可能只學到了怎麼再失敗一次。你可能會變得更討厭冒險。你不是在買彩券,所以你不應該認為失敗只是n次裡面1次的機率問題。股份代表的不只那樣。

從0到1的創業不只財務成本低,連非財務成本都低。你至少會學到很多,而且你大概會因為你的努力而變得更好。從1到n的創業代表了很低的財務成本,但是滿高的非財務成本。如果你試著在馬達加斯加創辦Groupon然後失敗,沒人確定會怎樣。但是那樣不好。

VI.       從何開始?

我們可以在從0到1的這個過程上問三個問題。第一,什麼東西有價值?第二,我能做什麼?第三,什麼東西還沒人做?

問題本身很直觀。第一個問題闡述了業界與學界的區別;在學界,抄襲是萬惡之首,微不足道則不是。所以很多發明晦澀難懂,而且完全沒用。沒人會在乎一間奇怪又做不出好產品的公司。第二個問題在確保你能著手解決問題;不然,也就只是嘴上說說。最後一點,也是最常被忽略的,就是原創到底重不重要。忘了它吧,我們只是在複製而已。

用一個比較智慧的說法來闡述這幾個問題:你深信什麼沒人相信的真理?

比較商業的版本則是:哪種有價值的公司還沒被人建立出來?

這些是很棘手的問題。不過你可以驗證你的答案;就像許多人正在做的,如果有人聲稱像是「我們的教育系統崩壞了,現在就得設法修復」這樣的事,你知道那不是真的(那也許是真的,但很多人並不認為)。這多少解釋了為什麼現在有這麼多非營利教育機構、教育相關的創業公司。不過,要對他們是處在科技模式還是全球化模式保持懷疑。當你的答案符合下列形式,你就做對了:

「大部分的人都相信X。然而X不是真的。」

別誤會了;這非常困難的。很少人真的弄懂從0到1的艱難之處,所以它非常罕見、獨特、微妙。但這個過程中,就算沒有成果,也能帶給你豐厚的回報。

CMS試用心得:concrete5

無意間看到youtube上一篇對於concrete5這個CMS的介紹影片

http://www.youtube.com/embed/VB-R71zk06U

之前也曾在Reddit的PHP版聽人推薦過,決定花幾天的時間試用看看。

http://www.concrete5.org/

我拿之前跟朋友用Wordpress接案的作品做比較

http://twao.org.tw/

試著用concrete5做一個能滿足同樣客戶需求的網站出來。

靜態頁面

我目前看過的幾款CMS,在這部份都沒什麼問題。都是提供一個功能不錯的editor,允許排版、插入圖片、連結,等等。

如果打算做一個全由漂亮的靜態頁面構成的網站,我想任何一款CMS應該都沒有問題。

在某幾頁上附加檔案

這次的規格需求,有幾個網頁需要附上「會議記錄」、「最新出刊號」等等的pdf檔。

concrete5有提供客製化Page Type的功能。也就是可以定義blog entry, portfolio project, job posting等等不同類型的頁面、決定各頁面需要哪些欄位,之後可以快速建立各種頁面。

遺憾的是,自訂欄位並沒有file的選項,只有images。所以這項功能無法用Page Type做到。

我向社群詢問之後,他們建議我使用Block Content的功能,直接在某幾頁上新增block、放入檔案。由於需要提供管理後台給客戶的管理人員,這對客戶來說太難了。

應該有辦法擴充原生功能、或是直接找到適合的plugin吧。有待研究。

Theme編輯

預設Theme的導覽列太窄了,我打算調寬。

複製了一份預設的theme,打算以此為基礎修改成我要的樣子。乍看之下滿容易編輯的,進行一些try and error之後,admin panel顯示

An unexpected error occurred.

An error occurred while processing this request.

之後就再也無法編輯了。我把新增的theme file刪掉也沒用。我甚至連從何debug開始都不知道,大扣分。

 In-Context Editing

concrete5的介面有項很酷的特點,就是可以直接拖拉式編輯頁面、幾乎是所見即所得、不需要再去摸索一個admin後台。

工程師以及設計師會很喜歡這個功能。但如果您需要提供客戶的管理人員這樣的後台、並且教導他們如何使用,可能會把他們嚇到、對他們來說反而太過複雜難用。

適用場合

目前的感想是,concrete5很適合用在一種客戶身上。

當客戶只想要功能(幾個公司介紹頁、產品介紹頁、blog)而對網站外觀沒有特別要求時,用concrete5拖曳版面、組裝一下,功能就搞定了。

待研究

CMS的社群活躍程度直接影響它的好用程度。我尚未調查concrete5有多少現成plugin可用、也尚未研究plugin寫起來是否順手。這些都非常重要,改天有心得再補上。

Toptal申請經驗(上)

前陣子在網路上看到國外一間公司,專門經營接案的社群:

http://www.toptal.com/

網站標語是:’Toptal is a marketplace for top developers and top companies.’

看起來是會篩選工程師的社群。心想case的價錢會很不錯,就抱著試試看的心情去申請了。目前通過了3關,下禮拜要進行最後一次面試。

分享一下前三關的經驗,希望對之後想申請的人有幫助。

申請

在網站上按下申請之後,需要填一些個人資料、履歷等等的東西。

最後需要填Skype帳號,填完之後就等待他們通知。

記得我填完之後,好像過了很久(幾個禮拜吧),才收到email問我是否還有興趣要繼續進行面試。信中附上他的Skype帳號跟Google行事曆。在行事曆中預約對方的時段就可以了。

第一關

因為時差的關係,我在想Google行事曆顯示的「早上10點」到底是不是我的時區。

因為是姑且一試的心態,所以也沒仔細確認。

結果當天早上10點,對方準時在Skype上敲我,聯絡人資訊顯示對方是美國人。寒暄之後,首先問我是否知道Toptal在幹嘛,接著問我為何想要申請,然後再跟我簡介一次Toptal,最後問我希望的時薪。整個過程大約10分鐘。

這邊要注意的是,全程是英語對話,並且對方講話速度很快

第一關測驗應該是在確認英語對話能力(因為Toptal有向案主保證工程師的英語溝通沒問題)。

最後的時薪對方也只是紀錄做參考,他有說那不是最後的offer,之後會再確認。

第二關

第一關結束之後我收到一封email,裡面附上一個Codility的連結。

Codility是專門提供coding題目給公司線上測驗工程師的網站(公司需要付費給Codility)。

Toptal要求我3天內完成那份測驗(有事情可以要求延展)。

是一份90分鐘內寫3題的測驗。

對我來說滿難的,我只解出第一題、第二題只寫一點點、第三題留白。

心想我應該出局了。結果兩天後通知我得到140分(滿分應該300)、並且告知我通過這關了。

我猜只要解出一題就算過關。

第三關

通知我140分的那封信同時告知我進入下一階段,一樣是加入下一位面試官Skype並且在Google行事曆預約時間。面試我的是義大利資深女工程師Anna。我預約到3週後的時段,我想申請者應該很多。

這關需要用Skype分享畫面給面試官(我到當下才知道Skype有這個功能),對方現場出兩題給你解。她看著你寫code的過程,一題限時20分鐘、可以使用google,但不能直接找問題的答案。

解題完面試官會跟你討論一下。我兩題都在時間內解決了。

過完第三關,面試官把我丟給下一個工程師。一樣是加Skype並且預約時段,要求我在面試之前完成指定的小型但完整的web application:必須是single page application、全部實作RESTful API介面。(規格細節不便透漏)

test project的規格應該是根據你申請時填寫的自身技能而定。我因為填了JavaScript與PHP才收到這樣的題目。

目前我正在準備這個project interview。有後續心得再跟各位分享了。

插曲

分享一個小插曲,希望不要有人跟我犯一樣的錯。

第三關面試我以為是準備好webcam,穿著得體的跟Anna面試。結果是要現場寫code!我的Windows桌電根本沒有裝開發環境,怎麼寫code?

第一題只是考演算法,沒有file input/output,所以我就問Anna可否用php online interpreter在瀏覽器上解題?她同意了。

第二題需要讀取一份文字檔案,然後分析內容。我問Anna能否使用我的Ubuntu筆電?她說但她需要看我解題過程。於是我就在桌電上開了一份Google文件,在筆電上每寫2分鐘就把code全部貼到Google文件上…。好在Anna非常有耐心並且包容我。有申請的人記得在這關準備好開發環境。

2014-09-16更新:

我通過了最後一關的project interview,相關的文章請見

TOPTAL申請經驗(下)

(Photo via bpsusf, CC licensed)

PHP亡命之徒:v1.2.0 released

最近用自己開發的Outlaw幫客戶寫微型應用,發現欠缺幾個功能。

分別是singleton data跟使用者驗證機制。我將他們補上之後,以v1.2.0發布。

https://github.com/howtomakeaturn/Outlaw

Singleton Data

有時候需要幾張永遠只有一筆資料的資料表。

像是客戶需要在後台編輯的「關於我們」、「網站基本功能設定」等等的需求。

為了這些撰寫完整的CRUD實在很多餘,因為根本不會insert新資料或是刪除資料。

singleton data將這類資料寫在config檔內:

$config['singleton_data'] = array(
    'site' => array(
        'name' => 'Kelly',
        'contact' => 'Hi, I am Kelly'
)

這樣就會自動建出一張只有一筆資料的資料表。
使用方法則是:

// get data
$this->data['site'] = $this->ol->readSingleton('site');

// update data
$this->ol->updateSingleton('site')

老樣子,只要指定table名稱,其餘的欄位,outlaw會直接從以「ol_」作為prefix的input欄位抓取。

使用者驗證

有時候網站需要一個管理後台,而只會有一個admin user需要登入。
當網站資料並不是敏感資料的時候,為了這個去實作password hash、 會員系統、登入頁面等等,實在太耗時。

outlaw authentication將這類資料寫在config檔內:

$config['auth'] = array(
    'user' => 'admin',
    'password' => 'admin_pass'
);

在需要保護的頁面加上:

$this->ol->protect();

結語

Outlaw 在v1.2.0加上這兩個功能。

老樣子,開發速度會很快,但非常dirty。

主要適用在insensitive application與prototyping new ideas。

順帶一提,出來的成品是攝影師Kelly的作品集網站:

http://kelly.turn.tw/

她是我認識很久的老同學。需要拍照的人,可以聯絡她噢;)

(Photo via Jesse Clockwork, CC licensed)

PHP亡命之徒:又髒又快的完成CRUD程序

我對於每次實作新想法、或是幫客戶做小型專案時的瑣碎動作感到很厭煩。

我開發了一個library,用又髒又快的方法完成常見的CRUD任務。

由於打破了一些軟體設計原則、又有點暴力、骯髒,我把它取名為亡命之徒(Outlaw)。

主要功能就是

  • 能夠在 HTML裡面定義出schema
  • 不需要migration或其他資料庫工具、自動建出schema
  • 在controller內不需要傳遞參數,亡命之徒直接使用$_GET,、$_POST、$_REQUEST變數
  • 不用實作model layer,亡命之徒直接提供基本CRUD

https://github.com/howtomakeaturn/Outlaw

同時也支援了檔案上傳、資料驗證以及one-to-many relationship的功能。各位需要高速prototyping或是製作小型專案的時候,歡迎使用。

它可以在各個framework使用,這邊提供Codeigniter的用法示範。

https://github.com/howtomakeaturn/Outlaw-Example-With-Codeigniter

使用文件看不懂、有任何疑問、或是有任何建議的朋友,歡迎直接留言與我討論。

(Photo via  Jesse Clockwork, CC licensed)