2014年2月19日 星期三

[Recognition] Data Sets


  • DataSets

2014年1月10日 星期五

願景


  • 願我們能為社會帶來更多魔術師、藝術師, 利用專業為各位創造更美好的生活

2013年11月1日 星期五

[Development] 編程規範

  • 政策
    • 命名規則
      • 不使用單一底線開頭的名稱
      • macros只用類似 ONLY_UPPERCASE_NAME 這樣的名稱且不可用常用單字或縮寫(例如 template的 T)
      • 可參考如下的命名習慣
        • classes, functions, enums: LikeThis
        • variables: likeThis
        • private data member: m_likeThis
        • marcos: LIKE_THIS
    • 註釋
      • 儘量以程式碼代替註釋(不要撰寫與程式碼重複地註釋, 容易不同步)
      • 請寫說明性註釋, 解釋演算法原理與做法
    • 編譯
      • 以更高警告級別 compile, e.g. -Wall -Werror
      • warning options可參考: gcc warning options
      • 另外, 可能無法避免一些 include library的 warning message, 可用 pragma來 wrap, 不過, gcc似乎無法使用該方法, 參考: gcc wrap warning, windows上的做法可參考: 選擇性關閉 warning
  • 設計風格
    • 一次專注一件事, 每個 class或 function 應該都具有內聚力, 只完成單一任務
    • 正確比快速好, 簡單比複雜好, 清晰比小巧玲瓏好, 安全比不安全好.
    • Scalability
      • 使用動態配置
      • 了解個演算法複雜度
      • 盡可能使用線性演算法
    • Optimization
      • 不要過早最佳化!!
    • 隱藏資訊
      • 絕對不要把 class的 member data設為 public 或釋出指向成員變數的 pointer或 handle
  • Coding Style
    • pass by reference
    • 用 ++a, --a取代 a++, a--
    • 善用 design patterns or idioms
    • 將 global 與 shared的資料最少化
    • 絕對不要在單一述句中配置一個以上的資源
      • void Fun(shared_ptr<Widget> sp1, shared_ptr<Widget> sp2);
      • // ...
      • Fun(shared_ptr<Widget>(new Widget), shared_ptr<Widget>(new Widget));
      • 例如以上範例, 若 compiler編譯順序為 new, new 再 constructor 兩次, 則在其中一個 constructor exception時造成 memory leak. 應改為
      • shared_ptr<Widget> sp1 (new Widget), sp2(new Widget);
      • Fun(sp1, sp2);

[Development] 程式語言書籍

[Development] 公司開發工具


  • 編程規範
  • 自動編譯系統
    • autoconf, automake
    • CMake
  • Test System
    • GTest
  • 版本控制系統 (version control)
  • 錯誤回報系統 (bug tracker)
  • static code analysis
  • Resource repository
    • 暫時先以 Dropbox取代