2020年12月30日 星期三

[cpplint] cpplint 設定

  • What
    • cpplint 是 Google 開發的一套 open source static code checker.
    • 是一套 python tool.
    • 主要 check 原則是依據 Google C++ Style Guide
    • source repository: cpplint
  • How
    • install
    • pip install cpplint
    • usage
      • run
      • cpplint [option] files
      • configuration
        • config file: CPPLINT.CFG, 可以在資料夾內新增此檔做設定, 裡面由 set noparent 這設定來指定是否獨立於其他設定檔
        • options
          • set noparent
          • extensions=c, cpp, h
            • 會被偵測到的 file extension
          • exclude_files=regex
          • root
            • 設定 root directory, 這會影響 header file include的變數名稱
              • e.g: #ifndef _PATH_FROM_ROOT_FILE_NAME_H_
          • filter
            • 可以透過--filter= (參數為空)來查看所有filters, 透過 filter=+filter1,-filter2 來 enable filter1, disable filter2
            • build/c++11
            • build/include
              • 滿常 argue include header 須加入路徑, 個人是都用這把此 filter 關閉
          • linelength=80

2020年12月28日 星期一

[Programming] Online Judge systems

[Json] Quick reference

  • Reader
  • Writer
        Json::Value vec(Json::arrayValue);
        vec.append(Json::Value(1));
        vec.append(Json::Value(2));
        vec.append(Json::Value(3));
        root["sample"] = vec;
        std::cout << root;
        
  • library 

2020年12月27日 星期日

[Programming] Book list

  •  Competitive Programming
  • The Algorithm Design Manual
  • Cracking the Coding Interview

[Programming][C++] bits/stdc++.h

  • 比賽用的萬用 header 

[Management] 決策的開放性

  • Principles
    • 對於決策的方案, 應該全力投入.
      • 這是全公司同意後的策略, 應積極參與不扯後腿.
    • 對於決策方案的結果, 檢討應對事不對人.
      • 因為方案的決策是大家同意的結果, 實際上也是選擇而非對錯.
      • 對人檢討會造成各方勢力的形成, 也會拉長決策的時間, 以及降低參與決策的意願.
    • 對於決策的提案, 應該採取開放的態度, 但可以針對各提案的優缺點給予建議.
  • Practice
    • 小公司的決策模式會較遵循上述的方向, 因為沒有太多時間 argue 決策是正確或錯誤.
    • 極大公司具有研發團隊的公司也較能達到上述管理, 因為多角化的實驗, 成功與否如果不是基於產品落地來做評價的話, 也是能達到好的效果.
    • 一般大公司則容易陷入內部惡性競爭, 彼此爭取 KPI, 最簡單的方式就是讓人覺得別的 team 的決策是錯誤的. 但所謂的錯誤, 其實就是公司文化定義的產物.

2020年11月4日 星期三

[Programming] void(p);

  • 今天 diff 兩個實作的程式碼, 某 function 的差異是多了一行
    void(p); 
    其中  p 是 function 參數
  • 這執行上完全沒有效果, 主要作用是避開有些 compiler 會有變數 unused 的 warning, 而 compiler 把 warning 也直接以 error 報錯時, 會 build error, 那可以用這方法避開.

2020年10月26日 星期一

[RPi] GPIO

  • Tutorial
  • tutorial slide
  • tutorial git 
  • homework
  • GPIO.setmode
  • register events callback
  • GPIO.add_event_detect(GPIO_num, event, callback, time)
  •  

    2020年10月23日 星期五

    [OpenCV G-API] Graph API

    [OpenVX] portal

    [OpenCL] Portal

    2020年10月16日 星期五

    [RPi] GPIO pin

    GPIO.setmode時搭配使用
    • GPIO.setmode(GPIO.BOARD)
      : 主要參考 pin#, Z字形編號
    • GPIO.setmode(GPIO.BCM)
      : 採 GPIO編號, e.g. GPPIO7

    2020年10月13日 星期二

    [SW] Feature development framework

    • Requirements (SRS) / Motivation
      • source (where)
        • internal
        • external
      • policy: inside-out, outside-in
      • non-feature requirements
        • performance
          • cpu usage, memory bandwidth, size, latency
          • preemption overhead
          • init, peak (when)
        • security
    • Design (HLD)
      • architecture design, cooperation model (protocol stack/SW stack)
        • HW/SW/ feature team / Project team
      • comparison with competitors
    • Maintenance
      • issue distribution / human resource estimation
    • Case study

         

    [RPi] Connection

    • Raspberry Pi (RPi) 連網路
      • Ethernet, 直接連接網路線到區網
      • WLAN, 需設定 AP (Access Point) 的 SSID/password
        • 可以編輯 /etc/wpa_supplicant/wpa_supplicant.conf  (Ethernet 連接後編輯, 或在 /boot partition下編輯)
          network={
              ssid="YOUR WIFI NETWORK NAME"
              psk="YOUR WIFI PASSWORD"
          }
        • 或可透過像 BIOS設定的 raspi-config 做設定
          sudo raspi-config 
    • 連接 RPi
      • Find RPi in LAN
      arp -na | grep -i b8:27:eb
      • Connect RPi (assume IP is found by previous script)
      ssh 192.168.1.111 -l pi
      • Connect RPi with GUI
      ssh -X 192.168.1.111 -l pi
      • Note: MaxOSX Lion 之後預設不支援 X11, 須自行安裝 Xquartz 
    • Copy files (scp)
      • // file tmp.txt on RPi home directory (192.168.1.111)
      •  scp pi@192.168.1.111:tmp.txt ./ 
    • Reference

    2020年10月12日 星期一

    [Python] 執行 executable binary

    • 透過 os package, 可以設定 environment variable 與執行的 binary
    • Sample: wrapper_call_executable
    • import sys
      import os
      
      lib_path = sys.argv[1]
      exe_path = sys.argv[2]
      bin_parameters = sys.argv[3]
      
      os.environ['LD_LIBRARY_PATH'] = lib_path
      os.system(exe_path + " " + bin_parameters)
      

    2020年10月7日 星期三

    [CMake] FAQ

    • Build Type
      • cmake -DCMAKE_BUILD_TYPE=Debug/Release ..
         
    • Dump all variables
        function(dump_cmake_variables)
          get_cmake_property(_variableNames VARIABLES)
          list (SORT _variableNames)
          foreach (_variableName ${_variableNames})
              if (ARGV0)
                  unset(MATCHED)
                  string(REGEX MATCH ${ARGV0} MATCHED ${_variableName})
                  if (NOT MATCHED)
                      continue()
                  endif()
              endif()
              message(STATUS "${_variableName}=${${_variableName}}")
          endforeach()
      endfunction()
        
    • Q: 加了 link_directories, link 時仍找不到 library
    • Q: How to enable C++11?
      • set(CMAKE_CXX_STANDARD 11)
        set(CMAKE_CXX_STANDARD_REQUIRED ON)
        
      • 或是
        ADD_DEFINITIONS(
            -std=c++11 # or -std=c++0x
        )
        

    2020年10月2日 星期五

    [Business] 管理上的盲點

    • 現象
      • 團隊年齡無斷層, 處理能力卻有斷層
        • 看到主管累個半死, 但下屬無力分擔? 或是 team leader離開後, 群龍無首, 明明團隊平均年資 5-10年, 但競爭力有如 0-5年的團隊?
    • 原因
      • 環境造就強者恆強, 弱者恆弱
        • 有價值(重要)的事務永遠留給核心單一人物, 能力培養的資源分配不均, 最後只有高階(重要)與低階(雜務)的人才, 沒有中階人才
    • 解決的方法
      • (仲裁) 權力下放給 junior member, 並搭配 instructor/mentor
        • 賽車手能力提升, 仍須多跑(有實際實務經驗作累積), instructor / mentor 能針對錯誤給予即時性的回饋, 能有不斷進步的成績
      • 調整團隊重要與緊急的事務排序
        • 低階 / 中階 / 高階沒有明確對應的責任, e.g. GUI 應該留在低階, 專案內客戶 coordinate / 內部時程與團隊間溝通由中階負責, 長期與系統規劃由高階管理
        • 雖有明確規劃, 但專案進行時, 由於時間壓力, 並沒有在對的時間安排對的人做對的事情.

    [Society] 適合居住的國家

    • 矛盾
    • 適合生存或適合居住並沒有統一的定義, 適合居住不代表生育率就高, 但生育率低是不是生活的環境或是社會上的價值觀, 環境或生活空間本身就創造了某種環境賀爾蒙? 社會定義了每個人的價值在於工業上的產出, 或是感情上的付出?

    2020年9月11日 星期五

    [Django] 0. Intro

    [Django] 1. Architecture


    • Architecture
      • Route + Model-View-Template
        • urls.py:
          • 負責做 url 的 route, pattern matching, 並把 request pass給對應的 view function.
        • views.py:
          • 屬於 django 的核心, 比較算是 MVC model 中的 controller, 由各 view針對 request 做出 response, 中間的過程可能包含了 template generation 與 model (database) 的 read/write.
        • models.py:
          • MVC model 中的 Model, 將資料庫細節抽象化, 以 class 方式來做存取.
        • templates:
          • html 檔案的位置, MVC 中的 views, 相關 CSS 設計, html div 規劃皆在此.
    • Resource

    2020年9月9日 星期三

    [Web] Bootstrap with CSS / JS template

    • What is Bootstrap?
      • responsive open source front-end toolkit
      • 簡單說, 就是快速的套用設計與互動模組, 並且支援各種 devices
    • Usage
      • starter template 入手, 參考 examples 使用對應的 codes
        • CSS
        • <!-- CSS only -->
          <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">
        • Javascript
        • <!-- JS, Popper.js, and jQuery -->
          <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
          <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
          <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" integrity="sha384-B4gt1jrGC7Jh4AgTPSdUtOBvfO8shuf57BaghqFfPlYxofvL8/KUEfYiJOMMV+rV" crossorigin="anonymous"></script>
        • Responsive
        • <meta content="width=device-width, initial-scale=1, shrink-to-fit=no" name="viewport"></meta>
      • examples 包含了 layout (framework), components
    • Reference: Bootstrap

    [Tool] using gnu-sed on Mac OSX

    • 問題: 
      • Mac OS 上的 sed 為 BSD sed, 與 Linux上的 gnu sed 差異非常大, 像是不支援 -i, -e 等, 相當煩人
    • 解決方法:
      • 方法一: 用 brew 安裝 gnu-sed, 並將 PATH 環境變數優先指到 gnu-sed$ brew install gnu-sed
      • $ vim ~/.bash_profile
          PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
        $ source ~/.bash_profile
      • 方法二: build from source, 並將 PATH 環境變數優先指到 gnu-sed

    2020年9月5日 星期六

    [Python] pyenv - Python 版本管理工具

    • What
      • pyenv 是一套管理 Python 版本的好工具
    • Installation
      • MacOSX
        • Homebrew (本來都是用 MacPorts, 但要克服滿多問題, 趁這機會改用 Homebrew玩玩)
          • brew install pyenv
          • 若需要安裝 Homebrew, 可用以下指令:
            /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)
          • Note: Mac OSX 上一般套件管理會選擇使用 MacPorts 或 Homebrew, 各有優缺, 兩個都是會拉 source code, build, install, 比較大的差異是
            • MacPorts 較不依賴系統 libraries (intall package會需要較長時間), 且安裝在 /opt/local/ 下 (權限較沒問題)
            • Homebrew 依賴系統 libraries, 且安裝在 /usr/local 下
            • Reference: 比較 Fink, macports, 和 homebrew 
        • Usage
          • 可安裝清單:
            pyenv install --list
          • 已安裝版本:
            pyenv versions
          • 安裝版本(e.g. 3.7.4):
            pyenv install 3.7.4
          • 系統切換版本:
            pyenv global 3.7.4
          • session 切換版本:
            pyenv local 3.7.4
        • Reference

      2020年9月3日 星期四

      [NAS] 讓 NAS 能在區網外做外部存取 (external access)

      • Router setting
        • 若 server 是架在區網內, 且區網透過數據機與 Router 來連接 Internet, 則 Router 的部分應該要注意以下三個部分: (以 Synology來說, 也可透過 Synology的服務, 來進行設定).
          • WAN(Wide Area Network): 設定 Router 對外連網
            • 注意是動態 IP or 靜態 IP 上網
              • 以 Hinet為例, 20Mbps以上的資費即可申請固定 IP
              • 撥接的帳號通常也不太一樣 (e.g. Hinet 固定 IP 用 yourHinetID@ip.hinet.net帳號, 動態 IP 則用 yourHinetID@hinet.net 當帳號)
          • DDNS (Dynamic Domain Name Service): 註冊 Domain Name, 每次連線自動配對 Domain Name與動態取得的 IP
            • DDNS server 註冊帳號, e.g. 免費的 FreeDNS
            • Router 註冊 DDNS updater
          • NAT (Network Address Translation): 轉換對外 port 與 Router 內部機器的 port
      • Reference

      2020年8月31日 星期一

      [Project Management] Redmine

      • Redmine 是一套 Open source的 Project Mangement 系統, 支援的功能有
        • Bug tracking
        • Gantt graph
        • Wiki pages
        • 從這三點來看, 個人滿推薦的, 比單純的 bug tracking system (e.g. Mantis) 來說, 在專案的時程管理 (用甘特圖來追蹤), 或未來的回顧 (Wiki pages) 來看, 都是相當不錯的.
      • 甘特圖, 設定完各 Project 的起始與結束時間, 可以全局的角度來規劃與追蹤各 Project 進度.
      • Issues / Wiki page 支援 Markdown, 可以快速的編輯頁面與相關內容

      • 安裝
        • 我是透過 Synology NAS的其他服務來安裝, 但整體應該不會太難, Note: 預設帳號密碼都是 admin

      2020年8月16日 星期日

      [Mac] 電池使用情況 (Power Health Information)

      • 可透過 About This Mac -> System Report -> Power -> Power Health Information 來看硬體使用情形
        • Condition 簡短描述電池狀態
        • Cycle Count 則表示循環次數, 評估完整放電/充電次數, 通常超過循環次數上限, 則電池效率便會下降, 建議更換電池, 新的 Macbook Pro 一般上限為 1000, 但不同機型上線不太一樣, 可參考 Reference 連結.
      • Reference:
        • 判斷 Mac 筆記型電腦電池的循環使用次數

      2020年8月13日 星期四

      2020年8月12日 星期三

      [Business] 獨立思考判斷 "別人的話, 適不適合用在你身上"

      • 那些話適不適合用在你身上, 換個人就該換個判斷, 判斷適不適合我
        • 這應該是非常容易聯想的事, 例如:
          • 我在小學一年級, 學習的內容就基於現在的年齡, 可能只能學注音符號.
          • 我在國中一年級, 就可以基於擁有的基本正整數代數運算, 開始學習負數.
          • 站在三壘的跑壘與站在一壘完全不同, 外野高飛必然先看是否高飛接殺.
          • 我家住宜蘭, 上班在宜蘭市區, 那買房就該買宜蘭, 難不成買花蓮.
        • 但是...
          • 你是否曾想過很多聽到的話, 不是用在你身上的...
            • 重劃區一定漲, 現在買現在賺
            • 景氣正復甦, 台指破 13000, 熱錢必然一起帶動房地產...
      • 必須要有 context-adaptive thinking, 換個位置就該換個腦袋
        • context 代表 "當前狀態"
          • 中文翻譯成  "前後文", 而在資訊工程領域, 則是常見的詞彙
            • 如 OS 裡的 context switch; 
            • 壓縮技術裡的 Context adaptive codec
        • context adaptive 則代表依據當前狀態而做出的對應的行為
      • 沒有對的投資方式, 只有適合自己的投資組合
        • IC 製造轉單效應, 台積300 上看 400, 但你手上現金只有 15萬, 適合投資嗎?
      • 平均值謬誤
        • 公司員工薪資平均年薪 300 萬, 我只有 200萬, 我要求加薪, 合理嗎?
        • 假設世界上男女比例 1:1, 平均每人有一顆睪丸, 跟我差了一顆, 合理嗎?
      • 贏者全拿或 80/20 法則
        • 現實是大部分的情況都是贏者全拿或是 80/20法則
        • 你不是那 20的部份或是你不是最後的贏者, 那一且都是空想而已
          • 1000萬人裡面有一人中頭獎, 而我會是那一人?
          • 我的資訊會是世界上最多的, 能在股價最高點賣出, 最低點買進?
      • 慎思! 什麼樣的賺錢方法或是投資方式會是最適合我的?
        • 基於我擁有的資源、我的投資心態或是看到漲跌的抗壓性!

      2020年8月10日 星期一

      [UML] Tool: PlantUML + GraphViz

      2020年8月7日 星期五

      [Career] 職涯規劃的重點

      • 職場重點
        • 人脈
          • 向上管理
            • 未來的工作都是靠介紹, 那麼認識上層比同溫層重要的多
            • 上級能看到的資料比你多太多, 很多時候職涯的規劃, 在自己這位置是看不清楚的
          • 資訊交流
            • 在各合作領域有熟識的人, 則各積木到位後, 模型的組裝才會迅速有效
          • 團隊選擇
            • 與在校時實驗室原理相同, 若你畢業時, 已經很多實驗室學長姐在業界, 那麼自然可以幫你介紹
        • 技術
          • "輸出"大於"輸入"
            • 除了別人提供的 training, 無時無刻要依自己的話, 自己整理的架構圖來展示自己了解整個架構(廣度)及技術細節(深度)
            • 文件保持 well-org, 不要浪費時間在找過去的資料, 保持上 codes, 資料清理
          • 時間管理
            • 不要浪費每一天, 應該至少將每天拆解成 3個 cycles, 至少解決 3項 tasks
            • 若組織都在浪費時間, 做雜事, 則應該深思是否考慮不同環境

      2020年5月19日 星期二

      [AI]


      2020年4月2日 星期四

      2020年2月15日 星期六

      [Linux] cron 例行性工作


      • crontab -e
        • edit 的意思
        • format
          • sec min hour date month day task
          • e.g.
            • 5 * * * * * * $(date) >> ~/logTime.txt

      [Multimedia] Portal


      • Codec
        • AOM
          • VP9/AV1
        • MPEG
          • AVC/H.264
          • HEVC/H.265
          • VVC/H.266
        • China
          • AVS
      • Muxer
        • mp4
        • mpeg2-ts
      • Tool
        • MediaInfo
          • Feature: 提供讀取 media 的 metadata, 有 CLI 與 GUI 介面
          • Install
            • (GUI)
              sudo port install MediaInfo-gui
            • (CLI)
              sudo port install mediainfo
        • FFmpeg
          • probe/codec plugin/player

      [FFmpeg] usage


      • transcoding
        • ffmpeg -i input.rmvb -vcodec mpeg4 -b:v 200k -r 15 -an output.mp4
          • -r: rate
      • show signaling information
        • ffprobe -show_packets input.flv

      2020年2月12日 星期三

      [GNU/Linux] Bash


      • Who/Whom
        • GNU project 下, 供 GNU Operating System / Unix (當然在 GNU/Linux也有) 使用的 Shell.
      • When?
        • first release 1989
      • What?
        • GNU Bourne-Again SHell
        • 屬於 GNU packages, 基本上是一個 command processor, 可處理指令 (e.g. UNIX commands, like ls, sed, ...etc.) 或是執行 shell script
      • Features
        • pipeline
        • Grammar
        • interactive
      • Usage
        • 環境設定, 切換 shell 為 bash (change shell) (MacOSX 最新預設為 zsh
            chsh -s /bin/bash
            
        • Pipeline & redirect
          • file descriptor
            • 0: stdin
            • 1: stdout
            • 2: stderr
        • Shell Script
          • command: ((...))
          • variable syntax: $((...))
          • 相關 shell script 教學可參考鳥哥
        • 常用 scripts
          • iteration
            • for i in $(seq 1 2 10)
            • for file in `find . -name *.mp4`
            • find . -type f -exec mv {} dst/ \; 
          • 取代內容
            • sed 's/orig/replaced/' file.txt
          • pipe
            • find . -exec echo `echo "{}" | sed 's/./foo/g'` \;
          • 字串處理
            • 去頭
            • 去尾
          • 印 timestamp
            • $(date)
        • Config
          • /etc/profile, .bashrc, .bash_profile
      • Reference: