前言

主要是因為看過https://speakerdeck.com/jeffersonlam/reflections-from-52-weeks-52-projects投影片之後想要跟自己挑戰.

條件與限制

  • 一個禮拜一個專案
  • 不限制專案大小,但是重構不包含其中.
  • 不限制一定要建立新的專案,可以學習人家寫一樣的專案(但是要自己打造內容,而不是fork再來修改)。
  • 不限制任何程式設計語言

真的沒點子嗎? 這一篇文章也不錯 Write code every day

進度 (會不斷更新)

  1. (06/25):Facebook Album Downloader: https://github.com/kkdai/goFBPages 一個抓取臉書相簿的小工具.
    • 主要學習FB API跟檔案下載.
  2. (07/02): Instagram Downloader: https://github.com/kkdai/goInstagramDownloader 抓取Instagram的相片的小工具.
    • 其實Instagram 不少眉眉角角,沒下去寫不知道他的分頁的設計其實相當有趣.
  3. (07/10): Facebook Album Client: https://github.com/kkdai/goFbAlbum 將小工具的API抽取出來成為一個元件,順便加上相關文件.
  4. (07/18): Microsoft Translator: https://github.com/kkdai/mstranslator
    • 發現不少特別的眉眉角角,先寫在心得裡面.這個工具可以幫助你使用一些基本的翻譯網路功能.
  5. (07/25): iloveptt 我愛批踢踢: https://github.com/kkdai/iloveptt
  6. (07/31): Paxos: https://github.com/kkdai/paxos
    • 學習如何用Go channel模擬網路通訊
  7. (08/07): Bloom Filter https://github.com/kkdai/bloomfilter
  8. (08/15): Skip List: https://github.com/kkdai/skiplist
  9. (08/22): https://github.com/kkdai/pubsub A Redis pub/sub concept implement.
  10. (08/29) https://github.com/kkdai/webpic WebPic downloader
  11. (09/04) https://github.com/kkdai/jsonop A json operation library
  12. (09/12) https://github.com/kkdai/radix A simple radix tree implement in Golang
  13. (09/19) https://github.com/kkdai/dfa A Deterministic Finite Automata function implement in Golang
  14. (09/26) https://github.com/kkdai/nfa A Nondeterministic Finite Automata function implement in Golang
  15. (10/02) https://github.com/kkdai/e-nfa A Epsilon Nondeterministic Finite Automata function implement in Golang
  16. (10/09) https://github.com/kkdai/re2epsnfa A tranform function to translate RE to Epsilon-NFA
  17. (10/16) https://github.com/kkdai/cyk CYK algorithm in Golang
  18. (10/23) https://github.com/kkdai/pcp PCP: Post’s Correspondence Problems simple solver implement in Golang
  19. (10/30) https://github.com/kkdai/tm TM: Turing Machine implement in Golang.
  20. (11/05) https://github.com/kkdai/twitter A simple twitter API in Golang
  21. (11/13) https://github.com/kkdai/consistent Consistent Hashing implement in Golang
  22. (11/20) https://github.com/kkdai/photomgr A photo download made for gomobile in Golang
  23. (11/27) https://github.com/kkdai/trigram A trigram indexing using Go.
  24. (12/04) https://github.com/kkdai/ngram A ngram indexing using Go.
  25. (12/11) https://github.com/kkdai/beacon Beacon Simulator: A simple beacon simulator (iBeacon/Eddystone) in Golang
  26. (12/18) https://github.com/kkdai/youtube A Youtube download package in Golang
  27. (12/25) https://github.com/kkdai/react-diff React Diff binary tree in Golang
  28. (12/31) https://github.com/kkdai/EddystoneScanner Eddystone Beacon Scanner in Golang
  29. (01/08) https://github.com/kkdai/CoapPubsub A PubSub client/server using CoAP protocol
  30. (01/15) https://github.com/kkdai/ri A UDP client/server to get Public and Private IP and Port for hole punching
  31. (01/22) https://github.com/kkdai/coapmq A Publish-Subscribe Broker for the Constrained Application Protocol (CoAP) in Golang
  32. (01/29) https://github.com/kkdai/oxford-face Project Oxford Face API for Golang
  33. (02/05) https://github.com/kkdai/oxford-face-client A client App for oxford-face Golang package (http://github.com/kkdai/oxford-face)
  34. (02/12) https://github.com/kkdai/oxford-emotion Project Oxford Emotion API for Golang
  35. (02/19) https://github.com/kkdai/diskqueue NSQ Diskqueue implement in Golang
  36. (02/26): https://github.com/kkdai/pd (PUBSUB) Publish-Subscrbe message broker with Disk queue in Golang
  37. (03/04): https://github.com/kkdai/rd A simple RPC Message Queue Server/Client with DiskQueue.
  38. (03/11) https://github.com/kkdai/raftrpc Simple RPC Key Value Server using etcd/Raft in Golang.
  39. (03/18) https://github.com/kkdai/githubrss A github notification (starred, follower, followed) RSS feed in Golang
  40. (03/25) https://github.com/kkdai/rss-webserver A simple Github Status RSS feeder server in Golang
  41. (04/01) https://github.com/kkdai/slack-console A simple slack console tool in Golang
  42. (04/08) https://github.com/kkdai/plurk-makerserver Plurk post server for IFTTT Maker in Golang
  43. (04/15) https://github.com/kkdai/kmp KMP (Knuth–Morris–Pratt algorithm) implement and related string function Strstr and Strchr in Golang
  44. (04/22) https://github.com/kkdai/aca Aho–Corasick algorithm automation implement in Golang
  45. (04/29) https://github.com/kkdai/LineBotTemplate A simple Golang LineBot Template and tutorial how to setup on Heroku for Line Bot API
  46. (05/06) https://github.com/kkdai/LineBotPetNeedMe Animal Adoption Platform on Line Bot
  47. (05/13) https://github.com/kkdai/petneedme Package to get Pet Adoption OpenData from Taiwan in Golang
  48. (05/20) https://github.com/kkdai/bstream A Bit Stream helper in Golang
  49. (05/27) https://github.com/kkdai/trr TRR: Time-Series of gorilla algorithm with Raft RPC Server/Client in Golang
  50. (06/03) https://github.com/kkdai/maglev A Google Maglev Hashing Algorithm implement in Golang
  51. (06/10) https://github.com/kkdai/petl A Pipeline ETL process and receive data from pipe in Golang
  52. (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還可以不同版本,太奇特了.
  • [07/25]關於Ptt Crawler
    • 順便學習了goquery,挺好玩的.
    • 因為想要給朋友用,也順便把Windows 支援弄了一下,主要是要把所有目錄都用filepath.FromSlash轉過.細節可以看這裡
  • [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
    • RedisPub/Sub概念實現,主要是特過channel 的特性來實現Massaging Management System
    • 裡面主要透過兩個map來相互的控制:
      • 一個Map 管 chan-> topics: 也就是透過 chan 來查看該chan訂閱多少topics
      • 一個Mao 管 topic->chans : 也就是透過某個topic 來查看有多少chan 訂閱
    • 透過這兩個Map的機制,來做topic的訂閱管理
  • [08/29]WebPic
    • 學習了剪貼簿的存取方式,與更深一層的JQeury使用方式.
  • [09/04]jsonop
    • 主要把recursive拿回來練手,還有發現nil(none)其實是一個特別的資料型態.
  • [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的格式,詳細說明文章

Evan

Attitude is everything