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:

2019年10月30日 星期三

[LeetCode] String to Integer (atoi)

思路: 先處理 prefix, 分別判斷合法字元 +, -, 後面再處理數字部分, 以 double 暫存判斷是否會 overflow or underflow
class Solution {
public:
    int isValidChar(char c) {
        if (c >= '0' && c <= '9')
            return 1;
        else
            return 0;
    }
    
    int myAtoi(string str) {
        double testVal = 0.0;
        int absVal = 0;
        int sign = 1;
        
        int i = 0;
        // prefix
        for (i = 0; i < str.length(); i++) {
            // whitespace
            if (str[i] == ' ')
                continue;
            else if (str[i] == '+' || str[i] == '-') {
                if (str[i] == '-') sign = -1;
                i++;
                break;
            } else if (isValidChar(str[i])) {
                break;
            } else {    // illegal prefix
                return 0;
            }
        }

        for (; i< str.length(); i++) {
            if (isValidChar(str[i])) {
                testVal = 10.0 * absVal + (str[i] - '0');
                if (sign * testVal >= INT_MAX) {
                    return INT_MAX;
                } else if (sign * testVal <= INT_MIN) {
                    return INT_MIN;
                } else {
                    absVal = (int) testVal;
                }
            } else {
                break;
            }
        }
        return sign * absVal;
    }
};

2019年8月29日 星期四

[Management] 個人在組織中的管理與策略


  • 做任何事都該有策略
  • 在什麼位置, 做不同思考
    • 有人說換個位置, 換個腦袋, 帶有貶義, 但其實本來就該因地制宜。
      • 以棒球球員為例
        • 訂定目標
          • 第四棒該以提升打點為目標; 而第九棒或許以安全上壘為目標
        • 個人訓練
          • 第四棒不用擔心沒有練習機會, 或許可以聽取多方專家建議, 看是否哪邊還能進步以及保持既有最佳狀態 (e.g. 全壘打數), 例如細部姿勢微調, 保持核心肌耐力等。
          • 第九棒就像櫻木花道一樣, 穩定的基礎 (安打數) 會是非常重要的, 因為可能教練根本對你也不期待, 因此安打比全壘打重要多了, 想揮大棒反而揮棒落空時, 你只會得到責難還不是加油打氣 (或許可以跟強棒揮大棒而落空時做對比)。
        • 心理素質訓練
          • 對於第四棒當然就是高期許高關注, 每次表現都會被放大檢視, 最好的情形當然是先自我檢視, 專注在自己還能進步的地方, 過濾無意義的輿論, 讓好的建議進得來。
          • 反之, 第九棒則是冷落與鄙視, 很多時候甚至好表現會被視為運氣好, 以及一堆雜事可能會落在你身上, 這也是可以理解, 畢竟時薪低, 站在整體最佳化的角度下, 這是必然的。不要讓這些外務影響你自我的訓練, 是非常重要的, 持續保持進步, 否則就算機會來了也留不住。 
        • 吵糖吃
          • 基本原則應該都是用數字說話, 因為球團可能也是看一樣的數字。不過有個情況比較特別, 那就是球團的支出花在教練比花在球員多。這必須拉到另一個檔次, 也就是球隊的獲益誰的貢獻多。這很多時候只有局中人最清楚,是因為球隊管理訓練佳, 再差的人進來都可以變強投強打; 還是球員的努力多過管理的需求?
          • 第四棒基本上是尊重, 並簡單的反應, 理論上應該就會有效果。
          • 第九棒則是應該在哪天好的機會降臨時, 確實有好表現時再討糖或許比較有效果; 但若真的都沒有什麼好機會, 都在打雜時, 轉換環境確實也是一個選擇。

2019年2月24日 星期日

[FFmpeg] build ffmpeg


  • 目的: 產生 FFmpeg binaries
    • FFmpeg: 主要做 encode/decode
    • FFprobe: 主要做 container及 metadata 的 parsing
    • FFplay: based on SDL 的 player, 主要做 display的動作
  • How to build
    • 同一般 linux project, configure->make->install
      • ./configure --prefix=/Users/hank/Projects/build/ffmpeg --enable-libx265 --enable-libx264 --enable-gpl
    • 值得注意的是 ffmpeg 主要搭配非常多 3rdparty libraries
      • demuxer
        • demuxer 可以理解成 container 的封裝格式, 諸如 dash, mpeg-TS, iso-bmff (mp4) 等格式, 可透過 ffmpeg -formats 或 ffmpeg --list-demuxers 查看
      • codec
        • codec 則可透過 ffmpeg -codecs 或 ffmpeg -encoders 或 ffmpeg --list decoders 查看.
          • e.g. x264(depends on nasm), x265, ...
      • filters
    • 而這邊則可以針對需要支援的 codecs / container 在 configure 階段進行 link
      • e.g. 3rdparty
        • codecs: x265, x264, aom
        • demuxer: dash
    • Q&A
      • ./configure 後, Tools 只有看到 ffmpeg, ffprobe, 卻沒有看到 ffplay
        • 那是因為 configure 的時候沒有找到 sdl2 library, 而 ffplay depends on sdl2
          • sudo port install libsdl2

2019年1月26日 星期六

[CS] programming books


  • Kernighan & Plauger, "The Elements of Programming Style"
  • Wirth, "Algorithms + Data Structures = Programs"
  • Oram & Wilson, "Beautiful Code" (中譯本: 美麗程式-頂尖程式設計師的思考方式")
  • Coders at Work

  • Reference

[CS] Master or famous people in computer science