最近工作上需要展示窗(櫥窗)效果的plugin。
購物網站滿常見的,在網路上卻遍尋不著。
只好自己手寫一個,這篇文章的特色圖片就是最後成果。
丟到github分享給有需要的人囉。
https://github.com/howtomakeaturn/jquery.displayWindow
http://howtomakeaturn.github.io/displayWindow/demo.html
用起來有什麼疑問可以直接問我唷。
最近工作上需要展示窗(櫥窗)效果的plugin。
購物網站滿常見的,在網路上卻遍尋不著。
只好自己手寫一個,這篇文章的特色圖片就是最後成果。
丟到github分享給有需要的人囉。
https://github.com/howtomakeaturn/jquery.displayWindow
http://howtomakeaturn.github.io/displayWindow/demo.html
用起來有什麼疑問可以直接問我唷。
以前在用Python的Django、Rails或是PHP其他framework的時候,總覺得很難想像,要怎麼寫一個framework出來。
連最入門的這兩件事我都覺得難以想像:
也就是說,所謂MVC pattern要從何開始實作?
最近試著親自動手做,發現其實沒那麼難,也從中學到不少。上述兩件事,100行內就可以作到。
提供我嘗試實作的source code給各位參考。
那100行程式碼長這樣
https://github.com/howtomakeaturn/PigFramework/blob/super_light/index.php
資料夾結構長這樣
https://github.com/howtomakeaturn/PigFramework/tree/super_light
(Photo via Glyn Lowe Photoworks, 2 Million Views, Thanks, CC License)
單元測試( Unit Test)應用在軟體開發各個領域,本文僅討論MVC架構中的Model。
在web的MVC架構中,我們開發時本來就不斷在test。
也就是testing的工作你其實一直都在做。
而MVC架構中的Model特別難處理,因為Model的行為很難測。
在資料到達Model之前,會先經過View、Controller,所以你會來回狂測,想確定bug到底在哪。
是jQuery在抓網頁元素的value時抓錯?是JavaScript相關的code有bug?是html的某個form name打錯?是Controller拿到form POST的值時做了變數型態轉換?是Controller裡面變數名稱打錯?是丟變數給Model時順序丟錯?還是Model裡面有bug?
反覆跑完以上流程抓出bug就算了,偏偏並非每個功能都是直接在網頁上key完資料就丟給Model。
結果光是想丟測資給Model就很麻煩。尤其你修好一個method常會想確認其他method有沒有因此壞掉。
行為單純的Model就算了,以上過程還不會花掉太多時間。複雜一點的 Model真的是debug到我會在電腦前大罵髒話。針對Model寫單元測試等於在開發Controller跟View前,先把Model弄得很強壯。
為了搞清楚自己的Model有多健康,你會寫好幾個test、丟好幾筆測資。加上為了要讓model能被test,你會來回去修改、把model寫的更模組化、更testable 、讓使用Model的人用得更愉快。
然後使用Model的人就是你自己。
所以unit test寫完、測完,你再寫controller跟view的時候就快樂到爆。
因為你知道寫Model的那傢伙很猛、把它寫得很強悍(亂丟資料也不會怎樣,那個Model會丟Exception、會丟error、會吐訊息, 反正Model會強力守住最後一道關卡,資料庫絕對不會爛掉。)
所以你Controller跟View就可以輕鬆寫,寫超快、超隨便也沒差,頂多就是使用者key錯資料會看到exception或是一些怪怪的錯誤訊息,絕對不會有資料庫存到壞掉的資料或是資料一致性的問題出現。
開發上出現bug時,你也可以確定是controller或是view的資料處理出錯,千錯萬錯絕不是Model的錯。(那真的是Model有bug怎麼辦?回去再寫幾個test抓bug,然後修好就行囉)
然後我認為,單元測試也不需要把所有可能的測資、全部使用情境都測過。
每個method隨便寫幾個最笨的testing就很夠了,通常有bug就是return value完全跟預期不一樣。寫幾個笨testing就夠抓出一堆麻煩了。
像是:
只測試這些夠混吧?夠不嚴謹吧?但是你最常搞出來的bug就是這麼單純而已。
當這些testing都跑過了,你的Model已經非常頭好壯壯了,超健康。眼看自己動手去挑戰自己的Model,最後還全部過關,絕對會信心UP、UP。處理複雜的Model時,將省下很多時間。(就算不寫單元測試,你也是用瀏覽器東測西測、花時間抓bug不是嗎?)
某Model光用想就覺得頭痛,開發起來你覺得很沒安全感
所以快找幾個能用的工具,試著寫單元測試看看吧。
還是不知道從何寫起的朋友可以在下方留言,我拿最近寫的程式碼寫一篇實作的範本。(我是以PHP/Codeigniter以及Codeigniter內建的單元測試函式庫當作工具)
(Photo via Robert E. Kennedy Library at Cal Poly, CC License)
我常看到某些人發表他們特別的想法。 他們常發表一些很有啟發性的言論。當然,某些人只覺得那些是胡扯。
我發現這些人用各自的方式說出了同一件事,關於未來的事。
首先我想摘錄Seth Golding的一篇文章 — Our inability to see ahead
「兩百年以前,愛德華·拉特利奇(美國獨立初期政治家)簽署了獨立宣言。他現在的直系後代是凱特·哈德森(美國女演員)以及歌蒂·韓(美國女演員)。兩百年前他臨終時,若你在他身邊,你根本猜不到這樣的結果。」
接著我要摘錄Quora上對於一則提問「你希望自己21歲就知道什麼事情?」 的最佳回答。 得到最高票數的是這則。
「我們嚴重高估自己十個月內能有的成就,然後嚴重低估自己十年內能有的成就。」- Tim Scott
我要摘錄的第三段話,取自Rework(中譯:工作大解放)
「計畫是一種猜測」
「除非你是算命師,否則長期的商業計畫就只是幻想。…你以為寫計劃書就可掌控這一切,但其實你做不到。
我們何不把這些計畫正名為猜測。當你將猜測轉變成計畫,你就陷入險境。計畫是讓過去指引未來,讓你變得盲從。…這就是問題所在:計畫跟即興發揮並不一致。而你必須有能力隨機應變,以便抓住突然出現的機會,有時你必須說:我們得要轉進新方向,因為今天要這樣做才合理。…
停止猜測吧,決定這星期內你要做的事,而不是這一年。…即興而為沒關係。先上飛機吧,等你抵達目的地,再挑件好一點的襯衫、刮鬍膏和牙刷。」— Rework
從我大四、當兵到退伍後出社會,的確有每天都在改變想法的感覺。因為每一個明天我都不知道會有什麼新的機會出現,而我又會失去什麼。
所以不侷限下一步的走法,不要求自己遵循什麼金玉良言或是誰的經驗之談。於是變得很放任,做決定甚至以情緒為依歸,不顧後果、不替長遠的未來做準備。
說來放縱,卻也充分的感受到各種可能性,覺得下一步可以是各種可能,常常覺得充滿活力。
最後,我想以Seth Golding同一篇文章的結尾做結。
「你能擺出的最佳姿態只有一個: 認定你全部的計畫都是錯的。
如此去想,將發生令你意想不到的事情。」
reference:
(Photo via Dr. Jaus, CC License)
標題看起來很荒謬,不過我的確這麼認為。
那些理想之所以讓我們覺得沮喪,是因為它們真的有可能達成。
這些你一點興趣也沒有,這些對你來說不切實際,你不會把這些當作自己的理想。
反過來說,那些不去做會讓你沮喪的事情,正是對你來說實際可行的事情。
正是這種沮喪感、這種不去做會覺得有遺憾的感覺,說明了你其實不相信自己做不到。
你會因為這些想做卻又沒有勇氣做的事情而沮喪,而這些沒有一件是你做不到的。
全都只要去做就行了。
當然會得到一些別人的嘲笑、一段挺窮的日子、一堆不祝福的眼光,但這年頭幾乎怎樣亂搞都生存得下去,何況是勤奮的實踐理想。
每個人都多少知道自己的天命,背棄了它,它就像詛咒一樣來找你,讓你朝思暮想,朝思暮想那個心目中想成為的自己,又可惜自己沒有勇氣。
我總相信試過是最幸福的。也許試了會發現它其實不切實際、發現它其實很幼稚、發現它根本不是自己要的,而本來的生活其實很不錯。甚至發現本來的生活才是你的天命。
於是你回到原本的位置,然後在原本的位置過得比以前快樂多了。你也許會很滿足,不再朝思暮想。又也許,會找到新的理想。
所以動手幹吧,可以先從幹一點點開始。
然後不要問幹一點點是什麼意思了,你早就知道了。
那可是你想了好久好久,早就想試著去幹看看的,你的天命啊。
(Photo via @Doug88888, CC License)
還在唸書的時候,跟一些身邊的朋友對新創公司、網路創業充滿了憧憬。
覺得startup(新創公司)試著解決人們還沒被解決的問題,少少的幾個人聚在一起,試著用自己的力量去創造價值、做不一樣事情。
特別在網路火熱的這幾年,web領域根本充滿了機會,像一片大海。只要敢出海,就可能得到超乎想像的回報–startup根本超有趣又高尚。
退伍一陣子之後,對此有了全然不同的見解。
大企業正是因為解決了人們很大的問題,所以才一路成長為大企業。正是因為創造了很大的價值,所以才有巨大的報酬。
為了要找到更好的解決辦法,所以需要徵招更多人、更多優秀的人。所以進大公司也是用自己的力量創造價值,更重要的是,是在解決”已經確定存在的問題”。
因為問題確定存在,所以努力會直接有回報-也就是高薪、福利、年資等等。
反觀startup,大家充滿幹勁的在打拼,很大的機會卻只是在瞎闖、想解決根本不存在的問題。說是想用自己的力量去創造價值,實際上可能什麼價值都沒創造出來。
一心渴望在幾年內功成名就,簡直可以說startup是汲汲營營的一種終極形式。
startup跟所謂大公司、大企業 根本沒有高尚與否以及好壞的區別,不過就是不同的屬性、不同的選擇而已,都在各自的位置創造些什麼。
既然如此,那大家都好好努力吧,一起加油囉。
(筆者在新創公司工作)
(Photo via Paladin27, CC License)
我常在想,隨著年紀的增長
從小學、國中、到高中、大學乃至於出社會
人的見識、能力越來越成熟,一個人的可能性越來越多
也就是眼前的道路不斷的寬闊了起來
到了離開學校的時候,更是路最寬廣的時候
可以做本科系的專業、可以做相關產業、可以從事只應用到一點專業的產業。本身就對食品、服飾有興趣的,可以從事餐飲業、服飾業。可以賣雞排、可以到處打工,可以參與非營利組織、可以打工旅遊、可以回家鄉種田種菜種花、可以邊旅遊邊接案…等等。甚至要出世成為僧侶或是神職人員也可以。
不論你是學什麼畢業的,要生存下去的方式有太多太多。
回過頭來,看看周遭卻覺得恰恰相反,路越來越窄,到了離開學校的時候,看起來能走得路就那麼窄而已。
當然這不是事實。事實是沒有選擇的勇氣。
每件事都需要練習,反抗也是,選擇也是。
教育過程中沒有讓大家練習到如何做選擇、沒有訓練選擇的勇氣、也沒有教學生什麼叫做替自己的選擇負責。
關心你的人反對,嘲笑你的人也反對。你做出選擇,哪怕全世界都反對,你只知道反正你會替自己負責。
我剛出社會開始找工作的時候,覺得做選擇的壓力很大。
“我的生涯規劃開始了,第一份工作(薪水、資歷…等等)會影響第二份工作,要小心選擇”
“我如果第一份工作只做一陣子就辭職,之後會被認定是沒抗壓性的人”
就這樣不愉快了好一陣子。接著我想到一件事。
我開始唸國中的時候並不怎麼擔心我的高中生活,唸高中的時候不怎麼擔心大學生活,唸大學的時候也不怎麼擔心在社會生存的事情。怎麼一出社會,就擔心出社會幾年後、接近30歲時候的事情?
想了想,覺得那些不愉快與擔心全是狗屁。不過就是個嘗試與學習的過程而已。
所以想怎樣就怎樣吧。反正替自己的下場負責。
(Photo via mkrigsman, CC License)