July 8th, 2015
前言
主要是因為看過https://speakerdeck.com/jeffersonlam/reflections-from-52-weeks-52-projects投影片之後想要跟自己挑戰.
條件與限制
- 一個禮拜一個專案
- 不限制專案大小,但是重構不包含其中.
- 不限制一定要建立新的專案,可以學習人家寫一樣的專案(但是要自己打造內容,而不是fork再來修改)。
- 不限制任何程式設計語言
真的沒點子嗎? 這一篇文章也不錯 Write code every day
進度 (會不斷更新)
- (06/25):Facebook Album Downloader: https://github.com/kkdai/goFBPages 一個抓取臉書相簿的小工具.
- 主要學習FB API跟檔案下載.
- (07/02): Instagram Downloader: https://github.com/kkdai/goInstagramDownloader 抓取Instagram的相片的小工具.
- 其實Instagram 不少眉眉角角,沒下去寫不知道他的分頁的設計其實相當有趣.
- (07/10): Facebook Album Client: https://github.com/kkdai/goFbAlbum 將小工具的API抽取出來成為一個元件,順便加上相關文件.
- (07/18): Microsoft Translator: https://github.com/kkdai/mstranslator
- 發現不少特別的眉眉角角,先寫在心得裡面.這個工具可以幫助你使用一些基本的翻譯網路功能.
- (07/25): iloveptt 我愛批踢踢: https://github.com/kkdai/iloveptt
- (07/31): Paxos: https://github.com/kkdai/paxos
- 學習如何用Go channel模擬網路通訊
- (08/07): Bloom Filter https://github.com/kkdai/bloomfilter
- (08/15): Skip List: https://github.com/kkdai/skiplist
- (08/22): https://github.com/kkdai/pubsub A Redis pub/sub concept implement.
- (08/29) https://github.com/kkdai/webpic WebPic downloader
- (09/04) https://github.com/kkdai/jsonop A json operation library
- (09/12) https://github.com/kkdai/radix A simple radix tree implement in Golang
- (09/19) https://github.com/kkdai/dfa A Deterministic Finite Automata function implement in Golang
- (09/26) https://github.com/kkdai/nfa A Nondeterministic Finite Automata function implement in Golang
- (10/02) https://github.com/kkdai/e-nfa A Epsilon Nondeterministic Finite Automata function implement in Golang
- (10/09) https://github.com/kkdai/re2epsnfa A tranform function to translate RE to Epsilon-NFA
- (10/16) https://github.com/kkdai/cyk CYK algorithm in Golang
- (10/23) https://github.com/kkdai/pcp PCP: Post’s Correspondence Problems simple solver implement in Golang
- (10/30) https://github.com/kkdai/tm TM: Turing Machine implement in Golang.
- (11/05) https://github.com/kkdai/twitter A simple twitter API in Golang
- (11/13) https://github.com/kkdai/consistent Consistent Hashing implement in Golang
- (11/20) https://github.com/kkdai/photomgr A photo download made for gomobile in Golang
- (11/27) https://github.com/kkdai/trigram A trigram indexing using Go.
- (12/04) https://github.com/kkdai/ngram A ngram indexing using Go.
- (12/11) https://github.com/kkdai/beacon Beacon Simulator: A simple beacon simulator (iBeacon/Eddystone) in Golang
- (12/18) https://github.com/kkdai/youtube A Youtube download package in Golang
- (12/25) https://github.com/kkdai/react-diff React Diff binary tree in Golang
- (12/31) https://github.com/kkdai/EddystoneScanner Eddystone Beacon Scanner in Golang
- (01/08) https://github.com/kkdai/CoapPubsub A PubSub client/server using CoAP protocol
- (01/15) https://github.com/kkdai/ri A UDP client/server to get Public and Private IP and Port for hole punching
- (01/22) https://github.com/kkdai/coapmq A Publish-Subscribe Broker for the Constrained Application Protocol (CoAP) in Golang
- (01/29) https://github.com/kkdai/oxford-face Project Oxford Face API for Golang
- (02/05) https://github.com/kkdai/oxford-face-client A client App for oxford-face Golang package (http://github.com/kkdai/oxford-face)
- (02/12) https://github.com/kkdai/oxford-emotion Project Oxford Emotion API for Golang
- (02/19) https://github.com/kkdai/diskqueue NSQ Diskqueue implement in Golang
- (02/26): https://github.com/kkdai/pd (PUBSUB) Publish-Subscrbe message broker with Disk queue in Golang
- (03/04): https://github.com/kkdai/rd A simple RPC Message Queue Server/Client with DiskQueue.
- (03/11) https://github.com/kkdai/raftrpc Simple RPC Key Value Server using etcd/Raft in Golang.
- (03/18) https://github.com/kkdai/githubrss A github notification (starred, follower, followed) RSS feed in Golang
- (03/25) https://github.com/kkdai/rss-webserver A simple Github Status RSS feeder server in Golang
- (04/01) https://github.com/kkdai/slack-console A simple slack console tool in Golang
- (04/08) https://github.com/kkdai/plurk-makerserver Plurk post server for IFTTT Maker in Golang
- (04/15) https://github.com/kkdai/kmp KMP (Knuth–Morris–Pratt algorithm) implement and related string function
Strstr
andStrchr
in Golang - (04/22) https://github.com/kkdai/aca Aho–Corasick algorithm automation implement in Golang
- (04/29) https://github.com/kkdai/LineBotTemplate A simple Golang LineBot Template and tutorial how to setup on Heroku for Line Bot API
- (05/06) https://github.com/kkdai/LineBotPetNeedMe Animal Adoption Platform on Line Bot
- (05/13) https://github.com/kkdai/petneedme Package to get Pet Adoption OpenData from Taiwan in Golang
- (05/20) https://github.com/kkdai/bstream A Bit Stream helper in Golang
- (05/27) https://github.com/kkdai/trr TRR: Time-Series of gorilla algorithm with Raft RPC Server/Client in Golang
- (06/03) https://github.com/kkdai/maglev A Google Maglev Hashing Algorithm implement in Golang
- (06/10) https://github.com/kkdai/petl A Pipeline ETL process and receive data from pipe in Golang
- (06/17) https://github.com/kkdai/raftserver A RPC Server implement base on Raft Paper in Golang
心得 (不斷更新)
- [07/18]關於Micorsoft Translator:
- 在實作的時候,不確定是不是所有API都是這樣. Microsoft 竟然把Appid 寫在
Authorization
的token前面,變成APPID + " " _ token
. 參考 API Spec - 另外一個讓人百思不得其解的是Microsoft Json response 竟然前面有BOM(Byte Order Mark),讓我在做
json.Unmarshal
的時候死得很大啊. 解決方式看這裡. - 同時也發現原來想要手工打造一個API client其實可能還要忍受許多API上面資料格式混亂的問題.比如這個有些API用JSON,有些用XML.而且API URI還可以不同版本,太奇特了.
- 在實作的時候,不確定是不是所有API都是這樣. Microsoft 竟然把Appid 寫在
- [07/25]關於Ptt Crawler
- [07/31]Paxos
- 主要是學習如何用Go來表達與呈現網路中的分散式系統架構.這部分應該可以寫一篇說明文章.
- [08/07]Bloom Filter
- 主要學習test package 跟 bechmark function.
- [08/15]SkipList
- 主要是複習一下用linked list 怎樣在Go上面實現.. 並且完成sorted linked list.
- 也瞭解了Skiplist的資料結構與各種演算法.
- [08/22]Pubsub
- [08/29]WebPic
- 學習了剪貼簿的存取方式,與更深一層的JQeury使用方式.
- [09/04]jsonop
- 主要把recursive拿回來練手,還有發現
nil
(none)其實是一個特別的資料型態.
- 主要把recursive拿回來練手,還有發現
- [09/12] radix tree
- 完全依照spec來implement,發現大家都使用for loop,我還是依舊使用recursive來做.可能效能沒那麼好.不過挺有趣的.
- [09/19] DFA
- 主要是學習Coursera Automata用到的,順便寫成小程式.其實使用Map會比想像中簡單.只是這邊要注意的是Map iterator是沒有順序的,參考這裡Iteration order
- [09/26] NFA
- 繼續做automata上面的內容.一開始要寫,會擔心NFA很難implement.但是只要把概念想好,將目前的點開始發散(使用BFS)方式來實作,其實就可以做出來.
- [10/02] ε-NFA
- Automata其實有不少部分可以拿來寫程式,而且diagram的traversal也很有趣.尤其對於ε的處理,想了很久啊.
- [10/09]主要是透過Automata 課程上的題目來改成自己可以用的轉換方式.並且支援自己寫出的e-nfa.感覺挺酷的…. 不過也發現自己原先寫e-nfa有些部分沒有考量到.
- [10/16]CYK: 竟然寫好程式忘記過來更新,還是持續在弄automata的東西.CYK主要是拿來計算是否輸入文字能被特定的CFG所產生出來.
- [10/23]PCP: 持續弄Automata.這個問題是NP-Problem,而且似乎沒有辦法找到一個完整的解法.目前只能找出有沒有產生迴圈.有把相關的論文都找出來記錄起來.
- [11/05]Twitter: 主要是要搞懂twitter流程與設定.
- [11/13]Consistent Hashing: Hash的演算法很重要,整個資料結構動不動都靠它了…..
- [11/20] 學過 CocoaPods後跟gomobile 來寫iOS App變得更簡單.讚讚…
- [11/27] 有特別為了這個寫了一篇post
- [12/04] 主要是優化效能,有一篇相關文章
- [12/11] 先練習Beacon Simulator 也順便了解Eddystone的格式,詳細說明文章