直接說七個成人就好了,關王建民屁事啊!(王建民:[超幹]躺著也中槍!)。然後沒事又扯營養午餐幹麻?= =
2008年11月27日 星期四
2008年11月23日 星期日
我的笑點真的很低
以下是摘自Debian Multimedia Packages的FAQ:
Q.How many people are working on debian-multimedia ? A. Two. Thibaut Varene for ia64, alpha, hppa, powerpc and ppc 64 archs and myself for i386, amd64, sparc and powerpc archs.高手果然是孤獨的嗎?那麼多套件才兩個人維護...
Q. Why a so ugly background color ? A. Because I hate white background. Otherwise my second prefered color is orange. You have the choice...如果真的改成橘色背景的話,我大概會用Stylish把它改掉吧XD
2008年11月20日 星期四
2008年11月19日 星期三
2008年11月16日 星期日
Signal/Slot and template in Qt
Qt的特點就是提供了Signal/Slot機制來提供一個thread-safe的物件溝通功能。
GUI的事件連結通常是用call back機制,也就是元件本身提供可監聽的事件類型,由使用者提供若干函式註冊給這些事件,讓事件發生時會自動喚起使用者自訂函式。JavaScript使用的DOM便是典型例子。
而Signal/Slot的運作方式則是讓使用者在元件上自訂signal[?]和slot[?]。使用者可以在任何執行點上發射signal,而slot則可以和參數相同的任意signal連結。
GUI的事件連結通常是用call back機制,也就是元件本身提供可監聽的事件類型,由使用者提供若干函式註冊給這些事件,讓事件發生時會自動喚起使用者自訂函式。JavaScript使用的DOM便是典型例子。
而Signal/Slot的運作方式則是讓使用者在元件上自訂signal[?]和slot[?]。使用者可以在任何執行點上發射signal,而slot則可以和參數相同的任意signal連結。
Qt這麼設計的好處在於它很靈活,事件觸發的種類不再受限於事件模型;在任何執行點上皆可發射signal,也就是說也可以在slot裡再發射另一個signal,甚至於連結時也不只能夠在signal和slot間綁定,還可以使用在signal和signal之間,多對多的連結就更不在話下。
像這種明顯就超出了C++語言範圍的功能,其實作方式就帶來了一些缺點。這個機制大量地依賴一種Meta-Programming的技術,Qt稱之為Meta-Object System;自訂signal/slot時,需要使用moc這個Qt內附的外部工具,先parse類別的宣告,把signal和slot轉成字串,額外定義signal和meta-object處理的code,存成另一個原始檔,再和原本寫好的原始檔連結再一起,才能正常連結。
好了,我想各位看倌看出一個問題點了:moc要求類別的宣告和定義要分開,但是C++能支援分散template編譯的compiler少之又少。這是第一個問題。
另一個問題是,meta-object底層的實作方式是把類別和方法的名稱轉成字串,然後再做一些有點骯髒的處理,這很明顯地和template的具現化方式互相衝突。
好了,我想各位看倌看出一個問題點了:moc要求類別的宣告和定義要分開,但是C++能支援分散template編譯的compiler少之又少。這是第一個問題。
另一個問題是,meta-object底層的實作方式是把類別和方法的名稱轉成字串,然後再做一些有點骯髒的處理,這很明顯地和template的具現化方式互相衝突。
因此如果想在template class上使用signal/slot機制的話,必須要先在non-template class宣告signal/slot,再宣告一個template class去繼承它。不過如果連signal/slot的參數都要模版化,要作的手術會更複雜些。
2008年11月9日 星期日
2008年11月7日 星期五
Change Splashy theme on Debian
# splashy_config -s <theme> # update-initramfs -u不更新initrd.img的話,開機時還是會使用預設畫面。欲查詢initrd.img內容可看:
# mkdir -p /tmp/initrd # cd /tmp/initrd # cat /boot/initrd.img | gzip -d | cpio -i # find . -name splashy
後記:
前幾天更新的新版會在更改主題之後提示使用者更新initramfs...= =
前幾天更新的新版會在更改主題之後提示使用者更新initramfs...= =
2008年11月3日 星期一
真糟糕
現在只要伺服器上沒有SubVersion或Git我就不會寫程式了...囧。要同步其他地方寫的code實在太煩了。
故事通常是這樣的:
我在A電腦上的Linux一時興起寫了個程式出來,之後又重開機到Windows Vista上測試跨平台,隔天出門臨時興起又用B筆電的Windows新增功能,再重開機到Linux上之後發現bug,又修正自己犯下的愚蠢錯誤,拿著編譯好的程式到公用電腦上執行發現缺少動態連結檔,遠端連回去下載檔案,成功執行後發現Windows XP好像和Windows Vista不一樣,又回家去改,開了幾個虛擬機器編譯測試...(無窮迴圈)
故事通常是這樣的:
我在A電腦上的Linux一時興起寫了個程式出來,之後又重開機到Windows Vista上測試跨平台,隔天出門臨時興起又用B筆電的Windows新增功能,再重開機到Linux上之後發現bug,又修正自己犯下的愚蠢錯誤,拿著編譯好的程式到公用電腦上執行發現缺少動態連結檔,遠端連回去下載檔案,成功執行後發現Windows XP好像和Windows Vista不一樣,又回家去改,開了幾個虛擬機器編譯測試...(無窮迴圈)
2008年11月1日 星期六
好Java, Java的奧妙之處就在...
public int function()[] {}
public int[] function() {}
同義。沒了嗎?還有!
int[][] i; int[] i[]; int i[][];神哉javac!
Git pull conflict
如果在用git-pull時出現訊息:
果然SubVersion和Git的工作邏輯就是不一樣啊...
error: Entry '<whatever>' not uptodate. Cannot merge.有兩個選擇,一個是放棄本地修改(git-reset,git-checkout),另一個就是送交本地更動(git-commit),這樣git-merge才會正常運作。
果然SubVersion和Git的工作邏輯就是不一樣啊...