2014/03/30 的台灣,不再像以前一樣這麼安份守己,台北捷運被人群癱瘓,凱道也充滿著躁動的氛圍,而你我,則是為台灣寫下這頁歷史的推手。
「台灣加油。」
科技 x 健身 x 影像創作 x 自我實現 | 僕にもできる 💪
2014/03/30 的台灣,不再像以前一樣這麼安份守己,台北捷運被人群癱瘓,凱道也充滿著躁動的氛圍,而你我,則是為台灣寫下這頁歷史的推手。
「台灣加油。」
好久好久沒有寫一下電影的讀後感了,但是不知道為什麼看完這部片就讓我有一種需要立刻把腦中的印象寫下來的衝動。雖然之前看過了中文預告片略感熱血卻覺得這可能是部只和棒球有關的電影,而我本來又不是一個棒球咖,所以就沒有特別想要去看的動機,不過在好友硬凹之後還是陪著去看了。事後我深深的覺得,還好我沒有在 2014 因此錯過一部這麼有意義的電影。
我覺得這件事對我及 AngelFlame 來說很有意義,所以我覺得有必要花一點時間記錄下來這幾個月無聊時候所做的事情,沒錯這件事情就是一個很簡單卻也不簡單的 iOS app – HackerReader,從 Commit Log 看起來,整個小專案是從 2013 年 11 月開始,而第一版則是在 2014 年 2 月初上架,中間發生太多好玩又心酸的事情值得分享了,故事,就待我娓娓道來吧。
繼續閱讀 “[Behind Scenes] HackerReader, not just an iOS app – programming part”
好久沒有寫書評了,還記得上次認真看書不知道是什麼時候了,這次難得有個幾天年假的時間可以休息看書,就去買了這本書名有點聳動的書,雖然書名是這樣寫,不過其實它是一本很有趣的小說呢。
我覺得這本書之所以會吸引國外 70 萬名讀者(書商寫的)喜愛的原因,就是在於它的故事很簡單、很小品,而且也是一個常常發生在我們生活週遭的故事。書中的主角安德魯.布雷克是一個企業老闆,約六十歲事業有成,角色設定就是平常人們口中的「成功人士」,在公司經營了幾十年後覺得相當疲乏,沒有多久就決定把公司指定給他信任的秘書然後決定去追尋一些自己想要追尋的東西。於是在好朋友的幫忙之下,他隱藏了自己的身份來到了法國的包維利莊園應徵管家的職位,不過想當然爾,他本身就不是一個管家,要如何在這四個月試用期內好好扮演這個角色還有應付那些莊園裡的人就是這本書主要故事所在了。
這本書真的就是這麼的簡單,沒有什麼太多的舖陳,所有的故事都是繞圍在主角還有其他人物之間的互動上面。但是不知道為什麼它會讓我想一口氣看完,一次拼到半夜快三點才去睡。
整本書吸引我的地方就是那個主角的想法,如果今天我是他的話,我敢就這樣不顧一切的拋下一切跑去別的國家當管家嗎?當然不是說一定要當管家,但是我覺得這個想法對我來說衍伸出了一個問題,那就是人為什麼要活著?活著的目的也是什麼呢?難道就是和他一樣汲汲營營一輩子然後在 60 歲的時候突然搞個神穩然後再去思索這個問題嗎?
當然不要,還記得前幾天看到 Tripnotes – 請用一年讓我輸在起跑線 這篇文章,我覺得很有意思,華人社會從小就是補習考試,大家都希望你不要輸在起跑點然後提早在好工作上卡位,但是為什麼要呢?如果可以的話我們是不是也可以試著輸在起跑線上,從一個更宏觀的角度來看這個世界,而不是在操場上計較那幾公分的輸贏而沾沾自喜。
我們的路還很遠,但是革命的槍聲早已響起,而改變,迫在眉睫。
2013 對我來說真的是瘋狂的一年,好多好多的事情都發生在這一年,幾乎所有重要的事情都被我寫成一篇又一篇的文章,所以我只想簡單的節錄大標題還有一些簡單的說明再加上我對於 2014 年的展望。
以上,一起加油吧,在這全新的 2014 年。
之前投了一篇稿在 Mozilla TW 的謀智台客,主要是在探討 FxOS 如何透過 IAC 在 App 間溝通資料,廢話不多說,請看:
在開發 App 的時候,我們有時候需要在App之間傳遞資訊,而今天我們要介紹的主角就是新引入的 WebAPI: IAC (Inter App Communication),有了這個好東西,我們就可以輕易的在 App 間傳遞訊息,以下就用筆者遇到的例子來說明吧:
當使用者拿到 Firefox OS 手機,第一次開機的時候,會自動先開啓 FTU (First Time Use) App 作導覽。當導覽進行到最後一步的時候,會看到這個畫面,可以按下「Home」鍵回到主畫面。
而在 Firefox OS 平板上,最後一步的導覽畫面會是這樣,但是改透過由螢幕下方往上滑動的手勢回到主畫面:
大家可能還不是很明白為什麼這個 User Story 下面要使用 IAC,讓我解釋一下。因為在手機剛啟動的時候,我們的 FTU 是一個獨立的 App,而這個 App 是被 System App 所呼叫起來的,兩個 App 之間如果需要溝通,就需要透過 IAC 來傳遞資料。
之所以 FTU App 需要跟 System App 做溝通,是因為「使用者在 FTU 導覽過程中,是無法按 Home 鍵離開的」,但很不巧的這個需求在 Firefox OS 平台是 Tablet 的時候反而變成是一種限制,怎麼說呢,因為對 Tablet 來說,我們並沒有實體的 Home 鍵,因此「Swipe 向上的手勢」就被我們定義成「使用者按 Home 鍵」,但是在先前 Mobile 的需求下,使用者在 FTU 是不允許按 Home 鍵的!!因此這就產生了一個問題,我要怎麼判別使用者現在的情境是:
這個時候…我們就需要 IAC 的幫助!
這邊要解釋一下 FTU App、System App 及 IAC 的角色。
FTU App 的功用主要是在教導使用者如何初始設定 FxOS 及透過 step by step 的教學來了解如何使用 FxOS 的裝置,所以他可以知道使用者目前的 step 到哪個階段了。
System App 在這裡的功用是在處理使用者按下 Home 鍵時要處理的事情,他只知道目前使用者是不是按下 Home 鍵(在 Tablet 就是 Swipe 向上的手勢),然後依照各個平台做相對應的事情。
而 IAC 的角色就是 FTU App 及 System App 溝通的橋樑,因為 System App 不知道目前 FTU App 是不是到了最後一步,所以自然就無法解除阻擋 Home 鍵這件事情,所以在這個 User Story 下,當使用者來到最後一個 Step 的時候(而且是在 Tablet 的平台),FTU App 就會透過 IAC 和 System App 溝通,然後請求 System App 可以讓我們以透過 Swipe 向上的手勢(等同按 Home 鍵)離開 FTU App。
在 Gaia 我是這麼做的:
In FTU App :
https://gist.github.com/EragonJ/7986909.js
從程式碼中可以看到我們透過 app 實體去連接一個 keyword(在這個例子中就是 ftucomms),FTU App 跟 System App 之間就是透過這個 keyword 來當做識別並透過 port 來溝通,我們只需要把東西通通塞進 port.postMessage 做雞精就對了!
聰明的你可能會問,所以 App 只需要隨便用個 keyword 就可以連結並傳東西嗎?當然不行,接收訊息的 App (傳送訊息的不需要)還需要去它的 manifest.webapp 設定如下:
https://gist.github.com/EragonJ/7986929.js
這樣子我們 System App 就可以接收來自 FTU App 的訊息了!在 System App 只要我們確定傳送進來的 message 是我們當初預期的 ‘done’ 就可以放行讓使用者可以透過 Swipe 向上的手勢離開 FTU App 了!
不過你可能又會問我要怎麼讓 System App 來接這個訊息呢,這是個好問題。如果你需要透過 IAC 來做資料傳遞的時候,你需要使用 mozSetMessageHandler 來掛載相對應的 Handler。
下面是 IAC 的基本使用方法:
https://gist.github.com/EragonJ/7986936.js
但是要注意的是因為這個 API 只會執行最後一個掛上去的 Handler,所以當你一個 App 要做多組 IAC 資訊傳遞的時候就需要自己做額外的處理。
但在寫程式的時候沒注意到件事情,所以當時 Music App 的另一個 contributor – Jim Porter 同時也自己在 System App 建立了一個 Handler,而我的 Handler 又是在他建立之前建立的,因此所有我 FTU 有關的 Handler 不會執行到,因為通通都被它的 Handler 蓋過去了。
所以為了讓後面的人不要發生這個問題,之後就和 Jim Porter 討論出一個 IACHanlder,每個 App 只要引入這段 javascript ,我們就會自動幫他建好一個共用的 Handler,所有的資料都是這個 Handler 統一管理,然後以一個固定的 naming 用 Custom Event 的方式傳播出去,讓有需要的人可以自己接 Event。(有興趣了解實作的人可以看這裡)
所以最後 System App 只要用這樣簡單一行程式碼就可以接 Event 然後做解除限制的動作了:
https://gist.github.com/EragonJ/7986944.js
是不是很簡單呢!希望這篇能夠幫助到也需要使用 IAC 的開發者朋友哦 🙂
(這是我在育樂街發現的新店叫做 Gecko xD)
2013/11/29 在台南成功大學的演講,題目是和 Firefox OS 有關的 overview。來的人很多,說實在真的也很緊張,還好有提前半小時來測試環境才知道原來計中的 Firefox 是用 19 版的 … 現在最新的都是 25 版了,難怪 Firefox OS simulator 跑不起來,真的是還好有先測試,要不然就要出包了 …
很感謝 Timdream & Fred 給我這個機會下台南演講,真心希望學弟妹能夠從中得到些什麼,也期待未來大家再相見的一天 xD
附上當天的 slide :
因為最近開始接觸很多 FxOS 核心的程式碼,所以發現了很多精鍊的程式碼,其中有一個很有趣的是 Template.js。
市面上有一大堆 Template engine,基本的功能該有的都有,幾乎都大同小異。但是 FxOS 自己的 Template 卻相當吸引我的注意,因為他才短短的一百多行就實作了一個 Template engine 該做的所有事情(這邊只討論 Search then Replace,不考慮 inline logic )而且有一個很關鍵的事情,就是他巧妙的解決了 Template 存在性的問題。
通常一般 Front-end 的 Template engine 都有一個問題,那就是要把 Template 存在哪裡?
愛用 jQuery 的我通常都是這樣做的:一開始先透過 selector 把 template 載入(一般都會 cache 住,只是我這個範例沒有特別寫這一段),而這個 template 本身會搭配一個 hide 的 class 避免一開始頁面在 render 的時候會被使用者看到,最後利用 sub-selector 把相對應的地方換成新值,最後再拿掉 hide class 並塞到 DOM tree 內。
https://gist.github.com/EragonJ/7300164.js
恩,整體看起來好像還不賴,整個 code 簡單好懂,也做了 template cache(我沒特別寫,但是通常都會被我 cache 到某個 Controller 下),後續維護也只需要加上相對應的 selector 然後替換值就好了。
雖然 Way 1 已經很好了,但是有時候需要 toggle hide class 其實還蠻麻煩的,能不能不要把 CSS 和 Template 扯在一起?有了這個想法後,我就開始到處尋找可能的做法,最後找到了 Handlebars.js,他巧妙的利用 Script tag 做到這件事情:
https://gist.github.com/EragonJ/7300364.js
它的作法是去改變 script tag 的 type,你可以看 w3c 上面的說明,只要 browser 看不懂 script type 的話,它一致都會把它 render 成 text,又因為 script tag 本身就不會被 render 出來,所以就達到把 template 藏起來的效果,最後只要搭配 selector 去把它拉出來然後替換值就可以了。
雖然 Way2 感覺起來好像不錯,但是利用 script type 這種 hack 的方式感覺有點不是這麼優雅,因為 Template 的東西本來就不該存活在script tag 內,到底還有沒有別的辦法來做到這件事情呢?
有,我在 Template.js 找到了。
從程式碼我們可以發現他會一直去尋找所有的 sibling 直到找到整個註解,在 HTML 裡面,註解就是 <!– –>,所以一開始很巧妙的,我們的 template 就是被註解起來的,也就不會被使用者看到內容,也因為一開始就看不見,所以我們就根本不需要去做 CSS 的視覺欺騙,整個就是把 nodeType 利用到極致,使用先天的特性漂亮的解決了這個問題,也就產生了這個 Template.js 。
很有趣吧,有興趣的人可以去看 Template.js 作者 Rick 的 Github,其他的就讓我們留到下次再來分享吧 😛
( Summit 2013 at Santa Clara, 點原圖來找找看我在哪裡)
懶骨頭、Aeron 椅、Mac 系列、歡樂的 MozSpace、天天取之不盡的下午茶大軍(也要看菜單,通常全麥麵包配葡萄乾都我在吃 xD)、永遠不會空的冰箱 … 等,這些基本公司福利就不提了,這對於每天瘋狂用腦寫程式的工程師來說,真的是一種救贖。有的時候在位子上待累了就會和同事跑去坐在 MozSpace 的高腳椅上面,轉換心情再出發!
台灣區主要是負責 Firefox OS (又稱 FxOS)的開發,但是這個專案不只是台灣區的員工在開發,是全世界的人都可以一起開發貢獻的,而我之前說實在的沒有很多這種大型開發的經驗,最多也才 2 ~ 3 人同時開發而已,連 Conflicts 都很少看到 … 所以在這邊我學習到了如何數百人同時開發一個 Project on Github,這當然也有很多額外衍生出來的 Policy 要遵守,像是:
1. One PR must be accompanied by a bug on bugzilla
2. Squash commits into one commit in a PR
3. Add a bunch of Unit Tests
除此之外,因為專案太大,所以我們是 by App (就是手機上的那個 App 沒錯)來開發,而每個 App 都會有幾個它專屬的 Owner 及 Peer ,這些人通常都是該 App 的主要開發者或是維護者,也是最了解該 App 程式碼的人。通常,你的 Bugfix 要 land 之前,都必需經過這些人來 Review,只有通過 Review (就是 r+)的程式碼才有資格被 land 進去我們的專案裡面。
不過我覺得這邊也有一點缺點,通常就是 Review 的量和 Reviewer 不成比例,很常看到 Reviewer 們一邊要解很多 must-be-fixed bug 還要應付從世界各地如雪花般飛來的 Review Request,所以通常整個 Review 的流程會被拖的很長,不過這也是為了要維持 App 程式碼一致性的犧牲吧。
身為 Mozillian 最酷的一件事情就是可以參加 Summit !!(其實不只 Summit,還有很多機會要到處飛來飛去 Cowork XD)這次的 Summit 真的是讓我印象深刻,而最深刻的莫過於那屬於 Mozilla 自己的文化。我們 Open Source、我們到處推廣、我們做很酷的東西同時我們也一直改變著世界。
在 Summit 裡,你可以看到很多人都是 Volunteer ,也有很多人都是學生或是非資訊領域的人。而把我們聚在一起的,就是這種 Mozilla 的文化,在這裡人人平等,不論種族膚色,我們都是一群人,一群推動著世界前進的人。這邊最特別的就是他們會用很多 Group Discussion 的方式來進行活動,你會發現通常都是亞洲人比較不敢發言(我也是 …),但是
這次大會的活動中可以看到很多正在實驗中或是還不能對外正式公佈的專案,當中讓我印象最深刻的有以下幾個:
1. Shumway – a Flash VM and runtime written in JavaScript
2. OpenBadge – A online service that you can collect your certificated badges
3. Together.js – A service for your website that makes it surprisingly easy to collaborate in real-time
他們實際的作用就如後面的說明文字一樣,如果有興趣就點進去了解更多細節吧 xD 這篇不是技術文,ahaha
真的要說感想好像也不太對,這應該比較算是一種體悟吧。雖然我大學時期接觸很多社群活動,但是多是技術性質的,而 Mozilla 散發出來的感覺卻不太一樣,就算你不是 Developer,你也是可以一起加入大家,一起做點什麼。如果你是學生,那你也可以以校園大使的身份加入 Mozilla,把打 LOL 或是魔獸的時間省下來多做點有意義的事情,你會發現其實人生真的多了很多空間與方向。
我覺得就算哪天我不在 Mozilla 工作了,它的精神也將永遠伴隨於心。期待在商業利益掛帥的現實社會中,你、我都能夠闖出一片清流,用自己的雙手及行動力去改變些什麼,哪怕只是一個文字、一個程式甚至是一場參與,你會發現,慢慢地世界就開始被我們改變著,朝著我們心中的烏拖邦前進。
這一篇文章,我已經構思許久,打從辭職後我就開始記錄我的心境轉折還有遇到的所有事情。四個月過去了(這篇文章是寫於 2013/8/21,而我辭職的時間是 2013/4/19,剛好滿四個月),我也依照著我自己心中的想法走到這一步,也才有這篇文章的出現,就讓我和大家分享這四個月我學到的東西吧。
很多人不了解,為什麼我會從人人稱羨的 T 公司離開,其中工作經歷還只有短短的十個月。有兩個原因,第一個原因是我在幾個月前就安排了一個為期七天的長假,和我當兵的好朋友書玄一起去菲律賓體驗 Couchsurfing 的文化,而 4/19 的半夜就是我們出發的那一天。第二個原因是,因為上層的改組決定,讓原本一起工作的團隊被迫中止,打散所有人到各個部門去。雖然我的 Manager R 真的很賞視我,但是因為工作的性質和我未來規劃(及個人專長)有所落差,所以最後就因為這兩個原因離開了 T 公司。也許真的很可惜,但是人生就是這樣充滿轉折吧?而我的人生,也是因為這一次勇敢的辭職,有了改變。
在 Manila 的那七天,我和 Kobe 認識了很多到很好的菲律賓朋友,我們一起 Couchsurfing,一起和整個 Manila 的 CS 社群租下整台 Jeepney 去玩傳說中的 Pagsanjan Fall,一起誤打誤撞跑到了高山 Mt. Ping-as(下圖),一起去體驗當地的夜店,一起在整個只有我們兩個台灣人的體育館內打羽毛球,一起去 Taal Volcano 看那奇妙的火山地形,一起去看那永生難忘的 Manila Bay 的日落。
好多好多的旅行衝擊,讓我找到失去興趣的自我(寫程式原本是我的興趣,但是在變成工作之後就漸漸消逝了)。原來,「旅行」是一件我很喜歡做的事情,而它可以衍生成為我的一個興趣,讓我在下班(寫程式)之餘調劑身心,成為我生活的另一個重心。
從菲律賓回來之後,旅行這件事又衍生出一個名為 TwoBackSurfers 的團隊,就是我、書玄還有翔 Sir 三個人的小小團隊,我們開始到處去旅行,還花了七天以 Couchsurfing 的方式去環島,除此之外也開始做我們自己的衣服、自己的吊牌、自己的網站、自己的影片甚至是經營自己的 Facebook Page。很多人曾問過我「為什麼你要做這麼多吃力不討好的事情」,但我總是笑笑的沒有回答,因為我也不知道為什麼,但是我打從心底卻認為這是一件我由衷想做而且必需去做的事情。
「原來,我喜歡旅行,如此而已。」
而工作方面,我才知道,原來所謂的「辭職創業」,不是簡簡單單一兩個人當口號用喊的,而是要真的下去做過一些明確的市場調查,而且真的要有短期斷糧的決心才可以,我當時就是抱著一種嘗試的心態在做這件事情,才了解到原來現實世界和你想的根本就不一樣。你每天最擔心的問題就是「今天有沒有錢吃飯」,然後還要承受少數親朋好友給你的無形壓力,而這些真的都是壓死人的稻草。
我這個時候才知道身邊的那些創業朋友是以多大的壓力在生活(應該無法想像),也了解到自己在做這個決定時沒有思考清楚的問題。
雖然最後我們放棄了,但是未來,也許是幾年、幾十年後,當我有足夠的人脈、有足夠的錢不怕短時間內斷糧並且還有一個可行計畫的話,我還是會再試一次,再從轟轟烈烈的戰場中學到更多的事物吧。(我很建議大家去看猴子靈藥在書中討論「辭職創業」的這件事情,特別是打算要「辭職創業」的人,我就是看了然後不信邪,硬是要自己走一次證明他的論點讓自己痛過才學到教訓)
之後,我剛好有機會和台灣的天才級駭客 C 一起遠端共事,雖然工作是以接案類型為主,但是因為裡面有許多跨國的案子,所以多了很多機會要自己和外國人透過信件溝通,這時,我才了解到在大公司的我,已經開始習慣說一做一的部隊化管理,所以很多時候不懂得變通,其中有幾次還造成 C 的困擾,但還是很感謝他願意花時間教我,讓我不止在技術上,甚至是溝通、時程規劃之外的事情上有所成長。
「雖然,我離他們的世界還很遠,但是至少我有這個機會在他們的背後跟著,一起朝著下一個未知的世界前進,也早已讓我心存感激了。」
可惜的是,C 也認為我這樣子以 part-time 的方式工作很難養活自己,因此他建議我該是時候考慮一下去尋找下一份穩定的工作,先讓自己免於斷糧危機才能夠有更多的空間與時間來做自己想做的事情。我想了想也覺得合理,所以我認為該是開始思考尋找下一份工作這件事情了。
就在七月環島完後,我覺得差不多是時候開始投履歷了,因為唯有穩定的工作才能維持我到處旅行的計畫,也才能生存下去。所以七月中開始我就在求職網站上面尋找所有有關「前端工程師」的工作機會,而依面試順序最後統整出六間公司的一些資訊,希望能幫助到有需要的朋友(如果看不懂就直接跳過吧,這邊都是技術的東西)
通常大家都知道有這間公司的存在,但是卻不知道他們在做什麼,他們目前最知名的服務就是線上的紅利點數交換平台,不過他們最近開始要發展新型態的業務,但為了達到這個目標所以會需要異業合作,而前端工程師會需要花 40% 的心力維護平台,然後花 60% 的心力來因應不同的業務需求來客製化網站或是平台,並且是以小型編制的方式來和不同的人員合作。
就技術面來說,因為面試我的技術主管是從 Y! 公司來的,所以在前端的領域著墨很深,很多問題我覺得都問到了「點」上,因此如果是以學習成長空間為考量,因為這邊的人都是之前待過 T、Y! … 等許多大公司,所以他們也有很多東西可以讓你挖,整體來說是可以學到很多的。而我也覺得他們接下來要發展的新型態業務是非常具有潛力的,就長遠來看是一件相當值得投資看看的公司。
結果:得到 Offer 。
有在玩音樂的人都知道 iNDIEVOX 專攻的是音樂電子商務的領域,辦公環境也相當特別,會讓你有一種身處在咖啡廳的錯覺,到處都是音樂相關的唱片、海報還有相關產品。福利就是和一般的公司一樣依勞基法規定,除此之外就是很多時候會拿到很多和廠商合作的公關票,所以對於喜歡音樂的人來說這真的是一個很好的環境。而面試雖然和主管討論了很多有關於前端的問題,但是因為他們的職位比較需要的是專注在後端的人,所以最後我的資料就被 bypass 到友站「streetvoice」,這一部份我之後會再詳談。
結果:因為和他們要的人不太一樣,所以被轉介到友站 Streetvoice。
因為以前在 T 公司的時候就看我們的神手 iOS 工程師 I 分享過 Vpon 他們廣告平台的一些資料,所以對於他們公司有一定初步的了解了,才想去應徵,同時想看看這間公司到底是怎麼樣的一個公司。我不得不直說,可能是因為他們對於我的學經歷有一定的認同,所以這是唯一一間沒問我任何技術問題的公司。
這間公司專注在行動廣告投遞,每天處理的訊息量只能用驚人來形容,而他們要尋找的是一位可以帶顉前端團隊的 Leader,並打造下一代的行動廣告投遞平台。說實在的我對於這個機會相當感到興趣,因為平時很少有機會可以接觸到大量資料。除此之外,這個職位也相當具有挑戰性,可以自己設計一個全新的平台及供開發者使用者 3rd libraries。
雖然如此,但公司認為我到職的可能性比較低,除非我確定會到職才會和我談更多細節並發佈正式的錄取通知。但對我來說,交通真的是一個很大的問題,文湖線和我住的地方相差甚遠。而我幾年前也曾經體驗過那人擠人的忠孝復興轉車惡夢,所以就決定放棄這個機會了。
結果:有拿到口頭 Offer ,但是因為交通的關係所以我最後放棄了。
這是一間專注在分析大量社交資料的美商公司,而我有一位曾經一起合作過的 W 學長在裡面工作,所以當我在 PTT 得知他們要徵前端工程師的資訊時其實我還蠻開心的,一來是因為美商福利很好(可以參考他們的官方網站)、二來是我對於分析社交資料這件事情相當感興趣。但和公司聯絡上之後其實讓我有點失望,雖然他們開出來的職位是前端工程師,實際上面試的過程卻都是專注在後端及演算法的部份。
可能是因為 FlipTop 的系統是用 Scala 打造出來的,所以前端和後端的部份結合的有點密切,因此就算是前端工程師也要了解如何使用 Scala Lift。我覺得這是可以理解的,畢竟這是由整間公司所選擇的解決方案,只是以現階段的我來說,(Scala)能力就會和他們預期的人有所落差,雖然我用簡單的方式實作出來一個 workable 的平台,但是似乎和他們想要的不太一樣,被要求在 Performance 上面要有所成長。之後我就覺得,公司的「前端工程師」和我想像中的「前端工程師」有點落差,所以我就和他們說明我的決定後中止了接下來的測驗。
結果:提前結束前測就沒有後續了。
還記得前面我說到,我的資料被 iNDIEVOX bypass 給 Streetvoice 嗎 ?這是因為, Streetvoice 和 iNDIEVOX 的投資者都是中子集團,所以他們的辦公室是在同一個地方,不同區塊罷了。在業務上面,Streetvoice 和 iNDIEVOX 的不同點在於,他們主要發展的是獨立音樂的社交平台,因此整個網站的開發有很大的一部份是專注在這個平台上面。
而和他們的技術長聊天後發現,他們的團隊給予開發者很大的自由,在這邊大家可以玩新的技術並實作在新的產品上也可以一起腦力激盪來實作一些有趣的小 Project,相對於一成不變的工作環境來說,是有比較大的彈性的。
我想可能是因為我在 iNDIEVOX 已經被他們的技術長面試技術一輪的關係,所以 Streetvoice 的技術長也完全沒有問我任何技術的問題,可能覺得再多問一次很花時間,所以我們都把時間拿來討論公司未來的發展等等。
結果:聊完天的當下就直接得到口頭 Offer,並在數天後收到他們寄來的 Offer letter。
對於前端工程師來說,Mozilla 這間公司是沒有人不知道的。大家都知道 Mozilla 基金會對於推動網頁標準這件事情不遺餘力,而其下產品 Firefox 更是改變 Web 的重要推手之一。其實我覺得真的是蠻幸運的,一來是因為剛好 Mozilla 為了要開發 Firefox OS 所以正在到處尋找人才,二來是因為我的 Resume 並沒有因為只有十個月短短的資歷而被刷掉,所以才有機會進行接下來的前測。
首先我真的要說,我覺得 Mozilla 的前測真的很有水準,因為題目是要求我要在一個星期內用 Native API (不能用 jQuery 等第三方 libraries )實作出一個 Autocomplete 的 plugin。剛好我很久以前就想做 Autocomplete 很久了,這次就順水推舟來實做一個自己的 plugin 吧。
在實作的過程中我才發現到,原來我們是多麼的依賴那些 libraries,光是 toggleClass / addClass / removeClass 這幾個極度常用的 function 都要自己先實作出來才有辦法繼續做下去,除此之外,還要自己去實作 ajax / getJSON 等 function 來溝通存取資料,這真的是要親自下手才知道原來這些 libraries 是多麼的偉大,處理掉這麼多繁雜的事情才能讓我們這些開發者以如此便利的方式操作元件,並專注在自己的 business logic 之上。最後,我也順利的通過所有面試。
結果:在最終面試結束後的隔天中午接到電話錄取通知。
這四個月來,有許多不為人知的心酸,有苦、有累、有歡笑、也有淚水,但很開心的是我身邊還有這麼多人支持著我,如果沒有大家,就不會有今天的這篇文章,也不會有今天的我了。
知道為什麼我把文章的標題下為「Dream bigger, because you deserve it indeed」嗎?因為我總是覺得,不論當下的事情是好是壞,對未來的自己一定都是一個轉機。而年輕的我們,千萬不要忘記作夢的能力,也不要把自己的夢做小了,通常,如果那件事真的是你朝思暮想的夢,很有可能,你已經具有一定的能力去實現他,只是你自己不知道而已,放手勇敢去做吧。
不要害怕去嘗試,怕的應該是沒去嘗試的自己,如果當時辭職後沒有經前同事 L 學長提醒,我也不敢主動去嘗試那些人們眼中遙不可及的公司,也就沒有這麼多有趣的面試故事可以分享了,真的很感謝他。
即使未來人生的路上到處充滿著未知與挑戰,但至少我發現,我已經一步步朝著我高中時既定的目標在前進了,無愧於心,這樣也就夠了吧?
最後,我只想說一聲,
「謝謝你們。」
-moz-eragonj: true;