2013年2月4日 星期一

使用 ffmpeg 製作手機鈴聲 @ Ubuntu 12.04

雖然好像有不少方便的線上轉檔,但我還是很龜毛的自己動動手

工具:
  • 用 ffmpeg 將影片轉成(抽出音樂) mp3


    • $ ffmpeg -i input.mp4 out.mp3

    • $ ffmpeg -i input.flv out.mp3

    • $ ffmpeg -itsoffset 00:00:00.000 -i input.mp4 -t 00:00:51.000 output.mp3


      • -itsoffset 00:00:00 代表從開頭開始

      • -t 00:00:51.00 代表取 51 秒

VS2012 編譯給 Windows XP 使用 @ Windows 7

VS2012_exe


最近用 VS2012 編譯程式時,發現預設的狀況是不給 Windows XP 用的,據說當時推出 VS2012 時有意拋棄掉 XP 的,總之,後來有推出修正方式了。


下載 vsupdate_KB2707250.exe 更新檔後,接著再編譯專案時,記得選擇 Visual Studio 2012 - Windows XP (v110_xp) 即可。


VS2012_xp_exe


此外,若想要成 static 的,別忘了勾選 /MT 系列。


VS2012_without_NR


2013年2月3日 星期日

目標?

清交小徑


週末快閃新竹,跟老同學聊聊天,在網路上又跟學弟喇嘞幾句,聊聊近況,實在愜意。


最近的變化說大不大,說小不小,在工作上開始帶 team ,說來很妙,我自己一直沒有想要組 team 的生活,頂多想找一兩位同好把玩,也隨時準備單打獨鬥,並不是排斥組 team ,實在是人一旦便多後,管理上就要多花上許多時間 :P 若花了心思處理,就等同自己少了時間把玩東西。上週一突然多了個 dealine 後,很慶幸目前的成員都進行的很積極,反而漸漸看到一個 team 的價值,真的很讚。


至於人生的目標呢?去年碰到健康問題,說真的頓時目標就縮到很簡單:及時行樂。週末不會想窩在電腦前面,就算窩在電腦前面也不會想 coding 了,看看 PPS 給的清單也挺滿意的。此外,隨時都想帶著手機或相機去外頭拍個幾張,昨天去趟新竹後,對於照片的感觸又更深刻了,不再是追求多亮眼的場景,反而滲一點記憶足跡,挺滿足了。


至於同輩之間的目標呢?工作三四年後,不少人開始追求年薪了。雖然 22k 議題常提,但在資訊界中要找間年薪100的仍不是多大的問題 :P 有家庭的,繼續加碼到 150,有的在賺錢公司的則繼續追趕到200不等。至於自己嘛 @_@ 就像當年離開新竹時的心境,臭屁地認為既然都是成功,那先繞路走走也不錯吧 :) 妙的是,我發現周邊人換工作的主因,不見得是對未來有新的期待,而只是單純對環境膩了,薪資絕對不是最後一根稻草。


錢錢這事永遠是不嫌多的,我仍記著前室友跟我分享十多年的工作心得:


月薪從3萬多變到4萬多時,你會很有感覺,但月薪從5萬多,變到7萬多、8萬多、9萬多時,漸漸地你會沒有感覺的


此刻嘛,再給一些任性享受青春的熱血吧 :)


啊,又想旅行了。


2013年2月2日 星期六

[C++] JSON Spirit Unicode Usage @ Mac OS X 10.8.2

最近接手同事用 C++ 寫的程式,過程中看到使用 JSON Spirit 來處理 JSON 格式,然而,卻發現字串處理有些問題,追了一下才發現這是函式庫沒有使用好而已。


簡單的說,如果要處理 Unicode 的部份,請改用 w開頭系列,如 json_spirit::wmValue 等。


簡易範例:


#include <iostream>
#include <string>
#include <json_spirit/json_spirit.h>
#define JSON_MESSAGE_STRING "{\"message\":\"\\u771f\\u5a01\"}"
#define JSON_MESSAGE_WSTRING L"{\"message\":\"\\u771f\\u5a01\"}"


int main() {
   std::string data = std::string(JSON_MESSAGE_STRING);
   std::cout << "Source: " << data << std::endl;


   json_spirit::mValue mValue;
   json_spirit::read(data, mValue);
   std::cout << "mValue: " << json_spirit::write(mValue) << std::endl;


   std::wstring wdata = std::wstring(JSON_MESSAGE_WSTRING);
   json_spirit::wmValue wmValue;
   json_spirit::read(wdata, wmValue);
   std::wcout << "wmValue:" << json_spirit::write(wmValue) << std::endl;

   return 0;
}


輸出:(在 Mac 上需安裝 Xcode 及其相關 command-tools 後,再用 MacPorts 安裝 boost 即可,接著下載 json_spirit 後,用 cmake 編出 libjson_spirit.a)


> g++ -I/opt/local/include -Ijson_spirit/ test.cpp libjson_spirit.a
> ./a.out
Source: {"message":"\u771f\u5a01"}
mValue: {"message":"\u001F\u0001"}
wmValue:{"message":"\u771F\u5A01"}


可以清楚看到,若不用 std::wstring 這類的處理,解碼就會出錯了。接下來的問題就縮到如何將 std::string 轉到 std::wstring 了 Orz


非常簡易的 std::string to std::wstring 硬轉法:


std::string data;
std::wstring wdata;
wdata.assign(data.begin(), data.end());


至於要輸出 wstring 的方式,繞路一陣子後,終於也找到解法:


std::wstring outwstr = wmValue.get_obj().find(L"message")->second.get_str();
std::cout << "UTF-8:" << boost::locale::conv::utf_to_utf<char>(outwstr) << std::endl;


2013年2月1日 星期五

輸出解碼後的 Unicode ("\u771f\u5a01") 字串 @ Ubuntu 12.04

今天驗證某套 JSON library 到底有沒解碼錯誤,一直再想該怎樣把 '\u' 這類開頭的字串解碼出來,後來就想到幾乎快隨處都可以用的 python 啦


print u"\u771f\u5a01"


如此就解碼完了,搭配 Ubuntu 環境預設是 UTF-8 編碼,在 Terminal 顯示 UTF-8 字串就幾乎無痛了。