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)

2012年8月3日 星期五

Garbage Collection (2)

上一篇提到了 reference counting 以及 weak reference,這篇我將以 C++11 的 smart pointer 為骨幹做介紹,但核心概念都是差不多的。
C++11 引入了一系列的 smart pointer,使用 RAII (Resource Acquisition Is Initialization) 手法來確保資源在生命週期結束後的回收行為。想法非常簡單:配置在 stack 上的變數,在離開 scope 後一定會呼叫 destructor,因此只要設計一系列的容器,讓它們在 destructor 裡做回收行為,就可以讓編譯器為我們回收資源。C++11 的 smart pointer 實際上不只是自動化的 new/delete 容器,因為其 allocator/deleter 可自訂,programmer 實際上可用它來管理任何種類的資源。

2012年8月2日 星期四

CMake: grouping sources by directory

function(group_sources root)
  function(__group_sources__ root prefix)
    file(GLOB entries RELATIVE "${root}" "${root}/*")
    foreach(entry ${entries})
      set(abspath "${root}/${entry}")
      if(IS_DIRECTORY "${abspath}")
        __group_sources__("${abspath}" "${prefix}/${entry}")
      else()
        list(APPEND group "${abspath}")
      endif()
    endforeach()
    string(REPLACE "/" "\\" prefix "${prefix}")
    source_group("${prefix}" FILES ${group})
  endfunction()

  get_filename_component(prefix "${root}" NAME)
  __group_sources__("${root}" "${prefix}")
endfunction()
Usage:
group_sources("${CMAKE_SOURCE_DIR}/src")
group_sources("${CMAKE_SOURCE_DIR}/include")
Note this function only creates filters in project, you still need to add source files by ADD_EXECUTABLE or ADD_LIBRARY commands. For more complete example, see this gist.

2012年5月14日 星期一

QSnapshot 0.1.1 released

其實我一直覺得這頁面很醜 ... 不過我真的不知道怎麼改.
本次修正包含了數項 bug 及 UI 改善.
Debian 有套件包可用, Ubuntu 提供 PPA.

2012年5月12日 星期六

How to debug a program which grabs X11 input events

最近在做的抓圖程式, 因為要在非 focus 狀態也能接收到抓圖要求, 必須取得所有的輸入事件控制權.
但如果必須要在這種地方下中斷點, 因為 X11 所有的輸入都被搶走了, 你無法操作 gdb.

2012年4月18日 星期三

About the rvalue reference

之前拜讀過 yoco315 所翻譯的 Rvalue References 文章, 把原本相當複雜的概念寫得非常淺顯易懂, 讓我當時忍不住手癢實驗了一下.
由於這是一個全新的特性, 當時還沒有很完整的 coding standard 可參考, 因此越寫疑惑就越深, 最後就先把注意力轉移到其他特性, 如 lambda expression.
今天的 OSDC.tw 很幸運地遇到 fr3@K 給了一場 C++11 的 talk, 讓我又再次燃起熱血, 便藉著指導新生的機會也來順便練習 class design.

2012年3月9日 星期五

QSnapshot

買了 Mac,卻發現 Mac 上的抓圖程式沒辦法抓視窗的子元件,於是我偷了 KSnapshot 的程式碼,偷了 Apple 上的範例程式,做出這個適用於 Mac OS,Windows 與 Linux 的抓圖程式。

2011年11月15日 星期二

Setting host-only adapter on Linux host

在虛擬機器上我一直是 VirtualBox 的支持者, 儘管我並不賞識 Sun 或是 Oracle.
要讓 host OS 和 guest OS 可以透過網路互相溝通, 比較簡單的方式是使用 bridged adapter, 而用這種方式拿到的 guest IP 會跟 host IP 處在同一個網域. 也就是說和 host 處在同一個區網的其他機器都看得到這個 guest, 如果本來的用途就是要分享給區網使用, 那這就是最直接的方法.
但如果你只希望 guest OS 只被 host 看到, 那就得用點迂迴的方式, 那就是在 guest 使用兩個網路卡介面, 一個使用 NAT, 另一個使用 Host-only adapter.

2011年11月8日 星期二

QNetworkAccessManager can not determine file size from Pure-FTPd

If you are using QNetworkAccessManager to download files from a Pure-FTPd server, the file sizes are always -1. This is cause by Qt, Pure-FTPd, and the FTP RFC spec.

2011年10月1日 星期六

Threads in Qt

寫出好用的泛型程式碼需要天份, 寫出具有異常安全性的程式碼需要細心, 而要寫出完全多緒安全的程式碼, 你需要的是新鮮的肝.

2011年7月24日 星期日

Reuse existing KSnapshot on press PrintScreen

在 Debian 或 Kubuntu 的預設設定, 按下 PrintScreen 鍵會啟動 KSnapshot, 若再按下一次 PrintScreen, 則會再喚起一個 KSnapshot. 但這不是我想要的行為, 當我按下 PrintScreen 時就代表我想抓圖了, 不停地開啟新的 KSnapshot 有點蠢. 幸好 KSnapshot 有提供足夠的 D-Bus 介面, 這讓我們可以寫一個 script 操作已存在的 KSnapshot.

2011年6月23日 星期四

Download attachment file with JavaScript

AJAX 回應回來的內容會被 JavaScript 拿到, 而不是直接顯示在網頁上. 當你希望瀏覽器跳出下載對話框, 可以這麼做:
window.location.href = 'download.cgi';
是的, 根本不需要 AJAX.

Configure Django with Lighttpd on Debian/Ubuntu

網路上找到的資料都有點不完全, 最近在逃避現實的過程中找到了一個比較簡單的方式, 供有需要的人參考.

2011年5月27日 星期五

Khopper 0.4.2 is out!

v0.4.2:
  • 修正 Windows 平台開檔時會直接清空檔案的問題
  • 新增 Windows Installer 方便安裝
v0.4.1:
  • 修正 YouTube 抓取失敗的問題
  • 增加 Ubuntu Natty 的套件
v0.4.0:
  • 加入 FreeDB 支援
  • 加入 YouTube 支援
  • 加入多緒轉檔功能支援
  • 儘可能消除 Phonon 對不同格式的影響
  • Ubuntu 安裝使用 PPA 來源

2011年5月23日 星期一

JavaScript function binding: arguments only

既然 JavaScript 1.8.5 已經有 bind 可以用, 為什麼不用它呢? 因為它有一個小問題, 就是它非得 bind 一個 instance 給 this, 但很多時候你是不想動到原本 this 所指向的 instance, 比方說某些 library 會要求 event handler 的 this 必須要指向某個 DOM Element. 於是當你只想 bind arguments 時, 這個無法忽略的第一個參數實在很惱人, 我自己試過丟 undefined 或 null 進去, 但結果 this 都被 bind 到 window 上. 幸好這個要求在 JavaScript 並不難實作, 我就自己刻了一個.