[TGmeetup] 從孵化到出生之全記錄
Repository: https://github.com/TGmeetup/TGmeetup
前言
趁著今天公開專案日(2018/01/28),就來紀錄一下從啟動到執行這專案的整個過程吧!算是一篇 TGmeetup 專案的雜感吧!
可能會講比較多的廢話。還請包涵。
目錄
- 發想
- 規劃與設計
- 動工前的失憶症
- 開工寫程式
- 寫文檔
- 其他修修補補
- 推廣
- 在這過程中自我的檢視
- 結論
- 感謝
發想
最一開始,是在 DigitalOcean Hsinchu 的某次檢討會最後討論下次的聚會日期時,當時大家想要避開大型 conference 和其他知名社群活動,所以開始蒐集各社團資訊(畢竟草創初期,有點辛苦)。不過,我那時非常納悶,因為我參與社群也是近一年的事,但台灣的技術社群其實有些成立了很久。但不曉得為何沒有整合社群活動資訊的平台或工具,所以開啟了我想要整合的想法。(不過有很棒的整合社群資訊平台: https://www.mindmeister.com/zh-hk/303031964?t=WS4msLPJIs )
當然,如果整合的好,我相信這會是一個很不錯的工具。畢竟在技術圈,在有空的時間多參與技術社群的活動,都可以幫助自己的成長。所以在心中下定決心,我一定要把它做出來。
規劃與設計
有了想法,就要來實踐。 (下面是我比較跳耀性的思路,如果看不懂,還請忽略了。)
- 構思第一版:想像著有一個 Web 版,呈現這些資訊。然後想到麻煩的資料庫。不過這樣就要處理權限問題,登入問題。這樣要 open source 出來,可能會遇到障礙。 還有什麼方法呢?
- 構思第二版:啊!就仿照 CDNJS 把社群資訊用 package.json 來儲存吧。然後透過活動 API 抓到的活動資訊就儲存到另外的 events.json 檔。然後 Web 也是讀這些 Json 檔,剛剛好。
- 構思第三版:package.json 的格式初步訂定。 events.json 格式初步訂定。這樣我是不是要用 API server 呀?這樣在 terminal 使用的時候使用找就不用自己設定自己的 config 檔了。可是這樣架構上好像會有點複雜。維護的成本也會比較高?來賭一下好了,反正會用 terminal 的人基本上對於設定這件事情並不會排斥,反正拿一次驗證,終身免役。不管了,專案最怕的是沒有人維護,最起碼要讓這專案沒人維護時,也可以自己活得好好的。就讓大家自己在安裝前到 Meetup 上拿 OAuth 的 API 吧!(只要文檔寫得好就好。)
- 構思第四版:構思整個程式的架構。再加上 package.json 的 city 欄位。
- 構思第五版:這專案只有台灣在玩,一點都不好玩。當然要來個全世界一起加進來囉!檔案架構重新設計,新增 country code 進來。而且也可以造福要到國外的朋友,可以知道當地有哪些技術社群可以交流。超棒的呀!
就在經歷一個月左右的時間,來來回回的幾次構思後,大致擬定了整體的規劃。然後把文檔結構先準備好,把 .gitignore 這些文件先寫好放著。
動工前的失憶症
其實是筆記紙不見了!就在經歷一個刺激的期末後,想要開始開工,結果腦袋一片空白。靜下心來,憑著之前的記憶,大致寫下原本的想法。往下一步行動。
開工寫程式
這邊好像沒什麼心歷路程,研究 Meetup API 花了一點時間(這也就是為何會有詳細的安裝步驟教學了 XD),前前後後約一天把基本功能搞定。然後再花一些時間把 setup 和 Teavis CI 設定好,就這樣。
寫文件
想著這是一個世界性的專案(我的眼界放真遠,真的有那們多人買單嘛XD 不過還是用這樣的想法進行囉!),好的 README 和 CONTRIBUTING 非常的重要。上網搜尋相關範例,也從那些好的文件中學習到文件的內容架構應該長哪樣。(如果有時間再來寫一下這方面學到的內容好了。) 擬訂屬於這專案的內容架構,然後附上中英文版。英文不的我,東湊西湊湊出一個大概,中文版的反倒沒什麼問題。再請英文好的朋友幫忙從中文翻譯成英文版。這中間花費的時間應該有快一個禮拜吧!不過完成後,也是蠻有成就感的。
其他修修補補
其他的就把程式模組化並變得更可讀、修復 json 格式、加 Package.json 的格式驗證(雖然非常的簡單)、再優化程式碼等。
中間都花一點點的時間進行。
就只想要把它盡可能地做好。
推廣
打從一開始就知道這專案完成後就是要到處宣傳。講的時候天不怕地不怕,沒想到在要宣傳前的時候,卻因為自己的個性卡了半小時有。(真的很浪費時間 QQ)
在上面修修補補的過程中,其實有空的時候也自己寫了一些推廣文的草稿。但就在把專案從自己的 private repo 轉到 poblic repo 後,卻非常害怕自己和大家說我寫了這一個專案,這股恐懼可能來自於其實這專案還不是那麼成熟,很害怕被指責做不好的心境所造成的。(不過理論上,這專案要挑惕的話,自認還有很多未達標準,其實也沒做多好就是了。)
透過曾經看到一些大公司的 repo ,想到 Facebook 最一開始的平台(是馬克在宿舍的那時),想到也許初期可以蒐集使用者回饋,自我催眠了一會,才鼓起勇氣,選了五個社團做分享。(沒錯,小孬孬還是不敢用自己的身份到處分享這個專案,畢竟就是一個不純熟的專案呀。)
不過分享後,才發現以上是自己多慮了,看到有人按讚,並且認同分享,我才知道,原來自己做了一個還不錯的小工具呀。
不能被自己的恐懼而困住,這真的很重要呀!
在這過程中自我的檢視
- 沒落實好 TDD 。後續還是要加強單元測試與整合測試。
- README 與 CONTRIBUTING 中的中英文描述有待加強。
- 應該要再加多一些的社群資訊,讓更多人好使用。
…
還有其他可能是我沒注意到的部分,而這些就是我需要注意的。只好等往後在自己慢慢發覺。
其他發想
- 用 Terminal 來選取想參加的活動加到 Google 行事曆。
- 可以再收斂,直接針對有活動的社群來呈現 (或更收斂在某個地區)
結論
其實這專案很簡單,也沒有什麼技術上的難度。我相信只要給任何一個會寫程式的人這個題目,也都會很快地寫好。甚至很多人的程式都可以寫得比我更漂亮、更成熟、更好讀、更優化…。
所以充其量,這個專案的價值就在於這是一個還不錯的 Idea。
而這次我覺得學到最寶貴的一課就是,從小到大,腦袋中有無數個 ideas,但每次規劃到一半,就覺得專案好大。然後就無疾而終了。
但這一次,非常開心的讓一個想法真正的落實,也感謝這個 idea 要做實作的東西不多,才讓我有動力想自己努力完成。
也讓我學習到,要做出一個東西,雖然要想的層面會很多,東西可以做大,也可以做小,重點是做出它本來應該具備的價值,才是關鍵。
感謝
- 感謝 Lego:當我說要做這樣的專案,而且就在我 Terminal 版的指令做到一半,感覺有點雛形後,就私訊你說願不願意幫忙做這樣的 site project 的 Web 版。感謝您義不容辭的一口答應,不愧是網頁開發高手。也謝謝你幫忙改善這個專案的資料輸出。這真的很棒!
- 感謝 CDNJS 的 Maintainer 與 members:感謝這個超級厲害的 GitHub 專案以及 Maintainer ,因為這個專案,讓我知道資料儲存的方式可以這麼棒的被定義儲存好,使我在想這專案要怎麼搜集社群資訊時,讓我第一時間想到可以用 Json 格式來進行,而不是想說如果是使用 Database 該怎麼開放出來。
- 感謝 Lab 中的兩位丙組同學,一位在我發想期間,不斷的被我煩,想請他一起來開發。一位是在我邊實作的時候,一邊聽我 Murmur 說文件好難寫。感謝你們在我孵化這專案時,讓我有一個抒發管道。在要釋出前期,也幫我實測工具的可用性。真的很感謝你們的幫忙。
- 感謝幫我從中文翻成英文的學妹,使得這個專案的說明文件更加的完整。
- 感謝在 Facebook 社團上的每一位按讚、回應、分享、私訊的前輩與先進,甚至是在 Facebook 加好友或追蹤、GitHub 上追蹤我的朋友。感謝大家的支持與肯定。讓我知道原來我做了一件還不錯的事情,能夠讓大家多一個實用的小工具,覺得很開心。
感謝大家收看這超級冗的心情文 <(_ _)>