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年7月15日 星期日

Garbage Collection (1)

這篇只是介紹比較知名的方法,預計之後還會再發一兩篇討論 C++/Qt 的回收手法。

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月27日 星期五

add-apt-repository fails with gnutls_handshake error

在 Ubuntu 12.04 還是存在的問題. LTS 最高! (棒読み)

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 的抓圖程式。