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


2019年1月25日 星期五

[Portal] Sports

[Portal] Child




  • Food
  • Education
  • 衛生用品
  • 出國用品
  • House
  • Playground
  • Exercise
    • Swim
      • 嬰兒游泳: babyFish
      • 小兒游泳: 大安運動中心 古蕓瑋教練
    • 馬術
    • 體操
      • 飛奇兒 信義
    • 舞蹈
      • 雲門舞集 信義館
    • 音樂
      • YAMAHA 功學社 光復分校
    相片書
    • 健豪 PhotoBook
  • Store
    • baby carrier (BECO 雙子星)
    • toys
      • 風車寶貝 (Food 超人)
      • LEGO: A13有零件牆
      • 文具 / 玩具批發
        • 台北
          • 久大文具
          • 張媽媽批發
          • 東東玩具城
            • 算是種類最齊全, 各式商品都有 (e.g. 連 Hape 品牌區 / Food 超人 / WoW / LEGO / 等), 長安與太原路商圈的話個人大概是在東東跟 101 兩間選擇產品
            • 價格街 8 折, 會員 95 折
          • 101 玩具王國
            • 較多高科技性 (e.g. 飛行機/娃娃機), 品質也較細緻(包含模型也是較高檔)的商品, 價格皆 8 折
          • 芃芃玩具
            • 滿有柑仔店的味道, 比較不像我的菜, 跟六信進的低階產品比較像, 但規模又沒有像六信, 感覺高階產品不多
        • 台中
          • 六信批發商
            • 種類滿完整, 比東東玩具城還多了很多大型玩具
            • 但滿多高檔與陸製產品混搭
      • rental service
    • department stores

    [Tool] 用 ExifTool 修改影片日期


    • 用 ExifTool 來修改照片或影片的日期
      • What is ExifTool? What is EXIF?
        • ExifTool: 一個可以修改 EXIF metadata 的 command line 軟體
        • EXIF: 簡單說就是相機為了儲存一些資訊, 在 video/image 檔案前面填了一些額外的資訊
      • How?
        • 安裝:
          • Mac
            • sudo port install exiftool
        • 執行:
          • 更改時間
            • exiftool -alldates="2018:01:01 00:00:00" "-filemodifydate" fileOrDirName
          • 顯示目前時間相關的 tag
            • exiftool -a -s -G0:1 -time:all fileOrDirName
      • Reference

    2019年1月20日 星期日

    [House] 天然氣管線更換

    • 天然氣的安全性
      • 天然氣主要的成分是甲烷, 可能會引發爆炸
      • 燃燒天然氣會產生一氧化碳 (燃燒未完全) 或二氧化碳, 而造成缺氧
    • 天然氣管線更換 (請人來通浴室水管, 結果維修員一進來就說聞到瓦斯味@@)
      • 大台北瓦斯公司來檢查, 還真有瓦斯漏氣
        • 檢查方式: 除了用專用儀器檢測外, 最方便的還是肥皂水
        • 更換方式:
          • 瓦斯管其實分段分的滿清楚的, 一段一段接起來, 所以哪段有問題就換那段就好了. 只是這次剛好卡在牆壁那段比較麻煩就是 XD.



      2019年1月1日 星期二

      [Marketing] 廣告的市場永遠都在

      • 公司的規模來考慮對廣告的需求
        • 大公司需要穩定成長
          • 成長來自新產品
          • 或是新客戶
            • 每年或是每季必定會有新產品拉攏既有的老客戶
            • 以及拉攏新會員新客戶, 
          • 而新品的推銷或是品牌的樹立都有賴廣告的媒介
        • 小公司需要增加曝光度
          • 買產品其實就是買信任, 不論是信任產頻品質或是優質服務, 而一般來說, 人是很好騙的, 曝光度與熟悉度常常會默默地增加你的信任度.
      • 媒合的角度來思考
        • 賣家常常不確定自己是不是打到最匹配的消費群
        • 而買家常常不清楚是不是這就是自己要的品牌、產品
        • 而媒合其實就是同時幫買家與賣家打廣告的中間角色.

      [Life] 人不該永遠都在 tune 參數


      • What?
        • 什麼是 tune 參數? 簡單說就是客製化. 在既有的模式或模型下, 針對某個人某個事件而選定某組設定.
        • 例如: 賣一棟房子, 你會詢問客戶需要多少坪數?多少房間?地點要靠近哪邊等等, 這些都是屬於特定的參數設定.
      • Who? When? Where?
        • 這三個條件本身就是參數之一, 依據不同的人、事、時、地、物而有不同的參數設定.
      • Why?
        • 為什麼需要 tune 參數? 若要一言以敝之, 就是每個人、每件事、每個地方、每個不同時間點, 需求都不同.
        • 例如: 在你還沒有小孩之前, 目前的房屋需求, 僅僅需要一個套房的空間, 地點最好靠近上班的場所, 而當你有孩子後, 可能就需要有 2-3房, 必須靠近學區等等.
      • How?
        • 從目前的服務市場來看, 還是非常多從業人員正在做著 tune 參數這件事
          • 例如: 旅遊服務人員需要一一詢問顧客的需求, 再提供合適的方案
          • 又例如: 龐大的保險業務, 因為商品種類太多, 導致顧客無法短時間理解適合自己的商品
        • Problems
          • 一來當然是因為顧客常常不清楚自己的需求
          • 二來則是因為既有的方案太多, 顧客無法迅速配對個人的需求或是方案太少, 無法 match 客戶的需求
        • Solutions
          • 讓使用者自行定義需求 (filters)
            • 例如 Skyscanner, 可以自行加入: 日期、直飛/轉機、限定航空公司等不同客戶不同的需求
          • context adaptive, 藉由演算法的設計, 相當於自動判斷了不同人的需求 (如 GPS receiver 提供你目前的位置, 可依據你目前的位置搜尋需要的資料, 也就是常聽到的 location awareness)
      • 顯然, 這些事情其實漸漸的都會逐漸被自動化, 那麼服務人員的取代性就漸漸被提高了, 而隨著時間流逝, 個人的競爭力也就跟著下降了...