TAG

首都機能移轉 (2) 歌詞 (2) 靠北文 (40) 戲言 (30) 糟糕 (7) ACG (23) Assembly (2) Boost (2) C (31) C++ (69) CMake (4) CSIE (67) Debian (34) Design_Pattern (2) Django (1) Eclipse (1) en_US (13) FFmpeg (3) FoolproofProject (26) FreeBSD (2) Git (4) GNU_Linux (65) IDE (5) Java (11) JavaScript (19) KDE (15) Khopper (16) KomiX (3) Kubuntu (18) Life (1) Lighttpd (2) Mac_OS_X (2) Opera (1) PHP (2) PicKing (2) Programing (21) Prolog (1) Python (7) QSnapshot (2) Qt (30) Qt_Jambi (1) Regular_Expression (1) Shell_Script (7) Talk (98) VirtualBox (7) Visual_Studio (13) Windows (18) zh_TW (36)

2009年4月23日 星期四

Updates to Qt, Qt Creator released

一次推出 Qt 4.5.1, Qt Creator 1.1, Qt Visual Studio Add-in 1.0 的更新。據說 Qt Creator 有被增強不少,不過我還沒用過。Visual Studio 的整合先前是只有商業授權的 Qt 才能使用,在改 license 之後也開放給 free license 的版本使用,不過 Express 無法使用該 add-in,而 Express 以上的版本要和微軟買。
說起來 Nokia 接手後就一直對開源釋出善意,包括 Qt 4.5 之後的 LGPL,VS add-in,以及開放部分 Qt Solution 的組件,看來以後 Qt 可能會越來越壯大吧XD。

Khopper 0.2 beta released

現在我會吱吱叫!
好吧,我又很不要臉地先釋出 beta 了。這次的重點在 plugin 的擴充,播放器以及更多格式的支援。事實上 Windows 版的移植也做好了,只是一直很懶得重開機。
Known issues:
  • CUE的播放不會調整時間
  • flac的解碼器怪怪的,也許是FFmpeg的問題
  • ogg似乎不會寫入tag
  • 轉換文字編碼時有機會當掉,尤其是 GB2312
  • 播放器是使用 Phonon,因此能播放的格式取決於 Phonon 使用的 backend,若是遇到不能播放的檔案(比方說ape,ape還有ape等格式),可以換一個 backend

2009年4月15日 星期三

Export DLL symbols to LIB

用 gcc 如果要發佈成 dll,只要編譯器加點選項,就可以發佈給別人連結了。但是 Visual C++ 卻要在每個 symbol 上加上關鍵字 __declspec(dllexport) 才會匯出到 lib,然後才能連結。
__declspec(dllexport) void blah();
class __declspec(dllexport) Blah {};
不管怎麼說,微軟的確是這方面的天才。

2009年4月9日 星期四

ActionScript小感

其實我個人比較 prefer ActionScript 3,ActionScript 2 看起來比較亂,不過其他人都還在用 2,只好入境隨俗。 對它導入的型別系統非常不喜歡。第一個原因是這失去了泛型的靈活性[!]
第二個原因是,它融入了 class-based 物件導向概念,而不是純粹的 prototype-based。這對我來說實在是有點蛇足,因為原本的 ECMAScript 還是有辦法做到 class-based 的功能,只是方式不同罷了。我比較喜歡統一的語法。

Recursive anonymous function

JavaScript 在每個 Function 都維持了一個變數叫 arguments,可以取得 context 的有趣資訊。比如說,arguments.callee 可以拿到目前正在執行的這個 Function 的實體,這有什麼用呢?它可以用來自殺(?),以及實現匿名函式的遞迴。
以自殺來說,比方現在你註冊一個監聽函式,而你需要在某個條件達成後解除監聽,這就很有用了:
ele.addEventListener( 'click', function( e ) {
    // blah blah ...
    this.removeEventListener( 'click', arguments.callee, false );
    // blah blah ...
}, false );
而遞迴就更有趣了,雖然應用上應該很少用到:
alert( ( function( n ) {
    return ( n <= 1 ) ? n : n + arguments.callee( n - 1 );
} )( 100 ) );
以上會跳出 5050。

2009年4月3日 星期五

該死的錯誤訊息

昨天新裝的虛擬機要裝Daemon tools,但是一直出現 Internal error,試過各種方法依然如故,最後只好放棄改用Alcohol 52%。
坦白說我真的很討厭這種錯誤訊息,只知道錯誤但是沒有寫原因,幾乎沒有疑難排解的線索。其他軟體也經常有這種毛病,像是IE8之前的JavaScript錯誤訊息,大部分的圖型介面套件管理程式等。
也許是考慮到使用者不一定看得懂吧,但是某嘴砲曾經說過:
If you think your users are idiots, only idiots will use it.
所以拜託,弄個地球人就能看得懂的錯誤訊息吧。

2009年4月2日 星期四

太嫩了

這是上星期我改的某個程式片段:
template< typename ProductCreator >
class CreatorLoader {
public:
    CreatorLoader( const std::string & plugin ) : plugin_( plugin ) {}
    ProductCreator * operator()() {
        plugin::PluginContext pc;
        ProductCreator * c = qobject_cast< ProductCreator * >( pc.load( this->plugin_.c_str() ) );
        if( !c ) {
            throw Error< RunTime >( "Invalid plugin!" );
        }
        return c;
    }
private:
    std::string plugin_;
};

template< typename Product, typename CreatorFactory >
bool registerProduct( const std::string & key, const std::string & plugin ) {
    return CreatorFactory::Instance().Register( key, CreatorLoader< Creator< Product > >( plugin ) );
}

template< typename Product, typename CreatorFactory >
std::tr1::shared_ptr< Product > createProduct( const std::string & key ) {
    Creator< Product > * tmp = NULL;
    try {
        tmp = CreatorFactory::Instance().CreateObject( key );
    } catch( std::exception & e ) {
        tmp = CreatorFactory::Instance().CreateObject( "*" );
    }
    return tmp->create();
}
現在看就需要點思考時間 ... = =,還是補點註解好了。

2009年4月1日 星期三

安姆真危險

前幾天和室友聊天時聊到,安姆應該是整個費倫大陸上最危險的都市!XD
城門口就有個會用時間暫停和異界之門的巫妖守門。
墓園區有吸血鬼的巢穴和古代巫妖的變性卷軸[?],晚上還有小孩子的幽靈閒晃。
行政區有暴民在燒黑暗精靈,也有和跟流氓差不多的官員和蒙面法師會。
神殿區有守備莫名地強的豪宅,地下有會挖人眼睛的眼魔邪教,還有奪心魔的家。
大橋區有通往異世界的入口,有剝皮人魔,還有一隊強得不像話的怪隊伍在某間房間開會。
碼頭區有影賊本部,而且還會內鬨,半神巫妖也被關在這,還有個老是想置主角於死地的豎琴手。
商業區有通道通向變態法師的地道,還有個瘋子侏儒想成為新世界的神。
貧民區有個異界法球通往外層界,還有奴隸組織在玩羅馬競技場。
其實柏德之門相對來說也很危險,只是一代還不能放太強的生物。XD