2012年12月17日 星期一

在 KVM 中安裝使用 VirtIO 的 Windows 虛擬機

0 意見

前幾天在聽 JackZ 大哥講課時看到他DEMO了如何在Ubuntu的KVM上安裝支援VirtIO的Windows XP,因此撰寫這篇文章作為紀錄。

VirtIO的相關資訊可以看這裡:
http://www.ibm.com/developerworks/cn/linux/l-virtio/

不過KVM有以下兩個缺點:
1.介面還沒有完全繁體中文化,這個看看有沒有熱心的朋友可以去幫忙翻譯一下。
2.目前不支援像VirtualBox那樣方便的共享資料夾設定。

以下為步驟紀錄。



深入閱讀......

2012年12月2日 星期日

隱隱成形的中國黑手

6 意見

“If you're not careful, the newspapers will have you hating the people who are being oppressed, and loving the people who are doing the oppressing.”
-- Malcolm X
「如果不仔細注意,報紙就會讓你痛恨被壓迫的人們,同時愛戴那些壓迫別人的施暴者。」

阿Q的中國政府

中國政府雖然聲稱自己是「具中國特色的社會主義民主政治」,但事實上中國政府是專制的官僚制度。這個制度層層的束縛了人民和官員。底層的人民無法制約官員,官員無法制約更高層的官員;而最高層的官員則彼此互相內鬥,大家都害怕犯錯被拉下來。也因此,在面對問題的时候,這些官員會選擇推脫責任和風險最低的方式來處理,保護自己免於鬥爭。這些官員的處理方針就成為這個政府的行為模式-一如魯迅筆下的阿Q(註1)。這個政府遇到比它強大的會虛與委蛇(例如加入國際組織),遇到比自己弱小的就恃強凌弱。聽到不順耳的,就當作沒聽到,甚至扭曲原意;遇到自己無法處理的,就趕快否認錯誤,推卸責任,或是動用各種手段抹平一切,塑造和諧社會。畢竟中國文化鼓勵目的導向:只要可以達到目的,怎樣的手段其實都沒有關係。領導的面子、利益和權力的穩定成為中國政府最主要維護的事物。

深入閱讀......

Open Data-來自資訊界的社會運動

0 意見

美國獨立宣言主要起草人 Thomas Jefferson 曾在1787年寫下這段話:

“And were it left to me to decide whether we should have a government without newspapers or newspapers without a government, I should not hesitate to prefer the latter.But I should mean that every man should receive those papers and be capable of reading them.”

「如果要我在沒有報紙的政府或是只有報紙而沒有政府之間選擇,我會毫不猶豫的選擇後者。我的意思是,所有人都應該可以收到這些報紙,並且能夠閱讀它們。」

開放政府資料


在一個真正民主的社會,選民應該要能理解政府的任何行為,並且有能力去監督政府。這些都需要資訊流通才能做到。資訊的流通可以讓選民在投票的時候更理解他們的選擇,以及這些選擇所帶來的後果。也能讓人民理解政府究竟做了什麼,人們的稅金到底是怎麼花的。

深入閱讀......

2012年12月1日 星期六

台灣-被財團主導的社會

5 意見

“As long as politics is the shadow cast on society by big business, the attenuation of the shadow will not change the substance.” 
-- John Dewey
「一旦政治受到財團的影響,無論財團的影響力有多少,都不會改變政治為財團服務的本質。」


早年在1960年代台灣剛開始工業化的時候,當時的人們只要有一技之長,幾乎都能在台灣社會裡找到好工作。在那個時代,台灣的政治力量十分強大,戒嚴體制提供政治力量強大的保護傘。台灣的公司主要為黨國所經營的公有企業,如中油,中船等等。私人企業發展的空間並不大。
但接著,在各種國際情勢的影響下,台灣專制的政權逐步的解體,而社會運動也逐漸興起。台灣政治的開放降低了國民黨對於黨國經營企業的控制權,而私人企業在政府有意的扶植之下,也逐漸成為市場上的大宗。由於市場不穩定,只要稍有資本並引入國外技術,就可以在市場上成為不錯的公司。在蔣經國過世後,李登輝為了鞏固權力,選擇和商業及黑道結盟,開啟了台灣的黑金政治(註1)。台灣的私人財團開始在政治舞台上扮演角色。
在政治開放的狀況下,媒體也漸漸的開放,脫離由黨國所控制的年代。當時的報社已經為三強鼎立的狀況(自由,聯合,中時),但電視台的經營需要不少資本,因此有些電視台由政治人物集資成立,如民視(註2);但大部分的電視台為財團所成立。而由於政治開放的緣故,各個媒體不必只說政府好話,也因此這些媒體開始出現各自的商業及政治取向。如自由時報社長向來支持李登輝,因此在李登輝離開國民黨後,其政治取向逐漸朝綠營靠攏(註3)。

深入閱讀......

2011年3月13日 星期日

Linux 上 Youtube 變成黑白畫面的解法

0 意見

今天CYJ的Linux出現了播放youtube影片變成黑白的狀況
此問題癥狀如下:

1. 第一個播放的youtube影片是彩色的,但是之後的會變成黑白。
2. 其他播放網站的影片不受影響
3. 在flash上面按右鍵,設定選項為反白無法按下。

這個問題的解法最重要就是在設定中取消硬體加速。
作法如下

1. 開啟其他影片網站,按右鍵選取設定。
2. 如果按不下去,可以連到這個網址:
http://www.youtube.com/user/YouTubeHelp#p/u
在這個影片上面,右鍵裡的設定是可以按下的。點選設定。
3. 取消硬體加速功能

這樣,問題就可以解決了!
深入閱讀......

2010年6月2日 星期三

XMPP 初探

0 意見

最近剛好有機會碰到XMPP,把一些學習心得記錄在這邊。

XMPP(Extensible Messageing and Presence Protocol) 是一種IM的通訊協定,
其前身為Jabber,後於IETF標準化為RFC3920。

除了一般通訊協定常有的Server與Client外,XMPP還另外定義了Gateway,
只要通過Gateway,便可以與其他的IM Protocol通話。

XMPP最大的特色在於傳輸的內容。其傳輸的內容為XML;藉由XML的擴充性,
可以達到許多的擴展應用。不過也由於傳輸內容為XML,因此無法提供二進制的資料。
檔案傳輸需藉由外部HTTP。如果不可避免,XMPP協議提供了Base64的方式傳輸帶編碼文件。

XMPP每個用戶在網路上都有個獨特的Jabber ID,簡稱為JID。
JID由id, domain 與 resource3個部份組成。其格式為:
id@domain/resource。
resource有時可以省略。


深入閱讀......

2010年4月23日 星期五

我對自由軟體的一些想法

6 意見

這是好久以前我在ubuntu-tw論壇跟人貼過的文,覺得很能代表我對自由軟體的看法
和大家分享一下。

================================================

http://www.ubuntu-tw.org/modules/newbb/viewtopic.php?post_id=73340#forumpost73340

#315 回覆: 企業引進Linux取代Windows之評估
雨蒼 2009/4/9 12:15
小弟目前有上MCSE課程,也上過NCLP課程並取得認證。微軟認證也考了兩張。這兩個課程幾乎都聽了兩次。

小弟深深感到,如果我是企業,我真的比較會考慮微軟。為什麼?

1.微軟解決方案非常完整。他們的解決方案可以解決幾乎大部分的需求。甚至針對企業級的架構也有非常耐用的解決方案。
2.當你出問題的時候,微軟可以保證幫你解決。
3.微軟的文件中文化較為完整

相較之下,我們可以看看自由軟體的Project,維護者常常就是那幾位,壓力測試,或是軟體的極限在哪邊?這個問題常常都是未知數。因為開發者沒有錢,沒有能力到各平台測試。


深入閱讀......

2010年3月6日 星期六

更改Debian預設安裝桌面的方法

1 意見

Debian netinstall光碟安裝KDE LXDE XFCE為預設桌面的方法:

在開機時,按tab在開機選項後面加上 desktop={kde|lxde|xfce}
之後安裝時就自動會安裝 KDE|LXDE|XFce 為預設桌面囉!
深入閱讀......

2010年2月6日 星期六

好文一篇:Re: [問卦] 有沒有念資訊一定要討厭windows的八卦

9 意見

這篇文章看了覺得寫的不錯,因此經過原作者同意後,就轉過來了。

文章代碼(AID): #1BR7wzrt (Gossiping)

作者 Freak1033 (金が信念! XD) 看板 Gossiping
標題 Re: [問卦] 有沒有念資訊一定要討厭windows的八卦
時間 Sat Feb 6 04:25:29 2010
───────────────────────────────────────

※ 引述《HollisterCo (海鷗)》之銘言:
: 身邊有些朋友念資訊的
: 但是莫名其妙的就會說你怎麼還在用微軟的東西
: 媽的爛死了之類的 你看linux都不會當機 也不會中毒
: 用linux才屌!! 用甚麼GUI 弱者才再用
: 強者都用CLI!!!!
: 是不是真的打打指令就比較厲害??????? Q_Q

唉呀, 你說這個真的說到我的心路歷程了...
這種人通常我會稱為 Linux 中二廚. lol

我自己國中的時候也是這個樣子, 逢人就說 Linux 多好多好,
還自願"幫忙"把班上的電腦裝成 Linux...

現在回想起來, 其實那只是滿足某種自我表現慾而已,
想告訴大家"我很行, 我很特別, 我用大家都不用或不會用的東西",
但是那跟應用, 有沒有解決實際問題完全是兩回事情.


至於你原本的問題喔...
是不是打打指令就比較厲害, 我必須很中肯的跟你說,
當然是啊, 至少我會你不會.
但是這有什麼了不起的嗎? 你會而我不會的事情一樣有很多,
本來世界上就是行行出狀元嘛, 看見自己的強處就好了.
當然啦, 如果你以後是要做軟體設計或資訊管理類的工作,
卻連"打打指令"都不會, 那被酸也是應該. XD


深入閱讀......

2009年7月25日 星期六

如何提報Bug-以Google code、sourceforge.net與自由軟體鑄造廠為例

0 意見

很多人使用自由軟體多少都會遇到問題。但是遇到問題了,很多人卻不知道如何提報出去。

軟體放置的地方常為英文介面,也造成提報問題上的不便。

因此很多人常常在論壇上發文提問,或是在自己的blog談論,而開發者卻常常收不到。

這篇文章以Lazyscripts放置的地點與提報Bug的方法為例,說明如何提報bug給開發者。

Lazyscripts主要放置的位置為Google code(現已不用)、sourceforge.net與自由軟體鑄造廠(目前不使用)。

本文即以這三個站點作為教學範例。


深入閱讀......

2009年7月12日 星期日

PowerPC MacOSX 與 Debian 雙開機

0 意見

這幾天剛好朋友拿了一台iBook G4 請我幫忙安裝Linux,因此就有了這篇心得

上網查了一些資料以後,決定選擇Debian lenny來安裝。(因為上一個支援PowerPC的Ubuntu是6.06)

首先先安裝Mac OS X,安裝過程中先點選磁碟管理程式,並且將磁區做分割

需注意的是,要在Mac的硬碟前端加上1MB大小的分割區,作為系統開機使用。

此時分割出開機磁區,Mac分割區與Linux使用的分割區。Swap小弟使用Swap file來處理。


接著在Mac安裝好後,放入Debian光碟按住C開機,並輸入install開始安裝。

之前分割出來1MB大小的分割區,此時要選取分割為newworld分割區,作為開機使用。

過程與其他電腦大同小異。安裝完以後,就有一個差不多可以使用的Linux囉。

緊接著就是Linux最可怕的校調啦!


深入閱讀......

2009年7月10日 星期五

lazyscripts 0.1 released

1 意見

檔案下載:http://sourceforge.net/projects/lazyscripts/files/

這次主要是修了一些bug,還有把文件補齊。
詳見:http://lazyscripts.sourceforge.net/doc/



與Lazybuntu最大的不同

不需頻繁更新主程式:

新版的Lazyscripts不再將 scripts與主程式合併釋出。Lazyscripts懶人包只包含主程式,所有的功能會在執行時才從網路下載。而整個程式架構也分成了使用者介面(GUI)、程式核心(Core)、以及功能(Scripts)。

功能將會隨著維護者的新增而更新,重新執行程式即可更新,不需要更新主程式。

用戶可隨意自訂Scripts:

如果您是進階使用者,未來Lazyscripts也提供幾個簡單步驟,讓您自訂專屬於你自己的scripts。也就是說,使用者對於懶人包所連結的軟體選項,是可以自由修改的。例如,您可以自行定義與客製化組合辦公室或班級內所需要的Lazyscripts。

全新的 Logo


感謝 Honkia 為新生的Lazyscrtipts 設計Logo。

更彈性化的系統架構

現在的lazyscripts裡面的結構已經全部更新,現在變得更容易將客製化的腳本(scripts)放入其中,下一個版本的Lazyscripts可以更容易的置換腳本來源。

自動更新腳本 (Script)

Lazyscripts全部的腳本(script)將會從網路上直接更新,當您每次執行主程式時,都會從網路上自動下載最新的scripts。

新支援的Linux發行版本

Note: SuSE 以及 Fedora 支援正在開發中。

0.1版開始支援 :

Debian 5.0 (安裝桌面環境)
EzGo 自由軟體光碟

開發方式變更

程式碼採用Git管理,並放在 http://www.github.com 上。
主網站移到 http://sourceforge.net/projects/lazyscripts/

採用 Sphinix 作為文件撰寫工具

Sphinix 是 Python 2.6 版所採用的文件生成系統,使用 reStructuredText 語法處理文件內容關聯、排版,並且支援多種格式輸出,包含HTML、PDF、Latext。用 Sphinx 所生成的文件網站除了頁面能自訂樣式,自訂文件導覽順序,甚至還有附有搜尋功能。


深入閱讀......

2009年7月9日 星期四

開源人年會2009

1 意見

開源人年會2009

COSCUP 【開源人年會】已邁入第四年,不但成為台灣各地社群朋友一年一度相聚的盛事,更在各地社群共同舉辦之下,逐漸成長茁壯。繼去年EeePC推出linux版netbook之後,Google 也開始推出Android手機,許多新的open source專案和產品都爆炸性發展。順應今年的Open Source發展趨勢,本活動分成四大主題:Android 和嵌入式系統、雲端運算和 Web 技術、開發者工具及使用者桌面。無論您是寫 open source 軟體的開發者、熱衷 open source 軟體的推廣者、熟悉 open source 軟體的使用者、還是想瞭解 open source 軟體的新手,也不論您是因為工作而接觸 open source 軟體、因興趣而沉迷於 open source 軟體、還是被朋友拉著加入 open source 社群,歡迎一同共襄盛舉。
其他詳細活動資訊,如下:


日期:2009/8/15 (六) - 8/16 (日)
地點:臺灣大學應用力學研究所 國際會議廳
活動網頁:http://coscup.org/2009/zh_tw/
報名網站:http://coscup.org/2009/zh_tw/register
開放報名:2009/07/15
報名費用:全程免費!歡迎參加!
深入閱讀......

【GeeKlothes宅衣】訂購系統上線囉

0 意見

【GeeKlothes宅衣】訂購系統上線囉!
終於終於...GeeKlothes宅衣的訂購系統上線啦!!!
即日起開放訂購,到2009/07/14晚上23:59截止。


訂購網址:http://get.geeklothes.e04.us/
除了宅衣,還有三款社群及活動(布料)徽章讓大家選購:
有MozTW狐耳摩莎、ubuntu-tw、COSCUP2009
三款徽章販售之盈餘 (扣掉成本之後),將全數贈予相對應的社群組織 (MozTW、Ubuntu-TW、COSCUP),支持他們的推廣活動。
而宅衣販售之盈餘(扣掉成本之後),亦是贈與給自由軟體界的社群*,
希望能為所有不斷為自由軟體努力的社群朋友們盡一點心力,表達支持之意!
也希望所有朋友可以支持GeeKlothes

宅衣活動結束後會公佈活動財務收支狀況,計算完所有成本支出後之盈餘會捐贈給自由軟體界社群。

*︰宅衣盈餘贈與之社群,將於活動結束後,計算完所有金額後若有盈餘,公佈於宅衣活動首頁。
深入閱讀......

2009年3月21日 星期六

2009 三月 SA@Tainan 我所知道的 C 語言 (3/28)

0 意見

緣起:
余光中教授曾對「知性」分析為兩端:一是知識,一是思考。有知識而無見解,只是一堆死資料;思想得多而知識不夠,又淪於空想。有幸得以在短暫的人生中,以半數的光陰透過程式設計,賦予冰冷的硬體一些新的生命,背後強大的工具,正是C 程式語言,而廣泛接觸了多樣的作業系統與硬體架構後,更覺探索資訊系統「知性」的可貴。如何將「知識」與「思考」融合,並投射於以豐富面貌出現的資訊系統,正是本議程所要探討與分享的。

建議聽者背景: (任一)
(1) 已熟悉 C 語言程式設計者,企求探索多元的開發
(2) 粗淺知曉 C 程式語法,對現實資訊應用的知性,有高度興趣者
(3) 具任何一種程式語言之實務經驗者

講題簡介:
C 語言雖然是一種通用的程式語言,但本質上是為了開發 UNIX 作業系統而提出,我們非但不可忽略這個事實,反而要適度從硬體的觀點去反思軟體設計,是的,透過 C 語言這個「不軟不硬」的美妙語言。本議程將以物件導向與資料表示等題材,探討遊覽 C 語言開發的知性美。

預定提綱:
(1) 海角 C 語言 -- 被遺忘的淒美故事
(2) 高度物件導向的 C 語言
(3) 窺探 C 程式、尋訪 C 程式的資料表示、奇妙的 pointer 與 macro
(4) C 語言與硬體擦出的火花,呈現 C 設計的彈性

軟硬體規格:x86/IA32, C99, gcc 4.3.3, Ubuntu Linux 9.04, kernel 2.6.28


講者簡介:
Jim Huang (黃敬群),慣用網路暱稱為 "jserv",熱血工讀生,家境貧困而買不起套裝軟體,所以習慣動手寫程式解決自身需求。自 1999 年開始對自由軟體發展作貢獻,於 2005 年起提供以自由軟體為基礎的技術資訊服務,涉及手機、GPS 導航、數位電視、電子廣告系統、機器人等嵌入式系統設計。

參考資料:
(1) 我是軟體 -- 那些處理器教我的事
http://blog.linux.org.tw/~jserv/archives/002064.html
(2) 深入淺出 Hello World
http://jserv.sayya.org/helloworld/
(3) 快快樂樂學 GNU Debugger (gdb)
http://blog.linux.org.tw/~jserv/archives/002043.html

時間:3月28日13:30:00-17:00

地點:台南市社區大學 3F 305教室

台南市社區大學網頁:
http://www.tncomu.tn.edu.tw/
地址:
台南市公園路750號
http://www.tncomu.tn.edu.tw/modules/tinyd5/content/map.gif

報名網址:
http://registrano.com/events/satn09031

原文網址:
http://phorum.study-area.org/index.php/topic,55774.0.html
深入閱讀......

2009年3月1日 星期日

2009 三月 SA@Tainan 為什麼資訊部門永遠是苦力(3/7)

0 意見

內容簡介:
除了技術能力,你還要加強甚麼
1.引言:為何資訊部門地位日益低落
a.外包風氣盛行
b.技能門檻日益降低
c.組織內角色過於被動:

2.你不要犯的幾種錯誤:
a.陷入規格框架
b.不清楚公司運作
c.只專注於資訊技能
d.說明過程,卻忘了結果?
e.滿口術語
f.制式回答

3.資訊人的角色:
-->討論

4.其他能力 :
a.觀察力
b.思考力,
c.溝通技巧

講師簡介:
Roger Cherng

前職:上市公司營運長,負責企業購併,CRM系統導入,新事業開發建置
現職:科技公司應用加值處負責人
專長:資料庫行銷,專案管理,預算控制,組織再造,組織整併,教育訓練

時間:3月7日14:00:00-17:00

地點:台南市社區大學 3F 305教室
台南市社區大學網頁:
http://www.tncomu.tn.edu.tw/
地址:
台南市公園路750號
http://www.tncomu.tn.edu.tw/modules/tinyd5/content/map.gif

報名網址:
http://registrano.com/events/satn0903

原文網址:
http://phorum.study-area.org/index.php/topic,55665.0.html
深入閱讀......

2009年2月6日 星期五

2009 二月份的 SA@Taipei - 雙連發之 Python超超超新手入門

2 意見

主辦單位:酷學園
協辦單位:巨匠電腦 http://www.pcschool.com.tw/

主題:Python超超超新手入門-寫給想知道怎麼寫程式的

內容:
Python是2007年TIOBE所選出的年度程式語言,同時也為GOOGLE所採用,作為內部開發使用之語言。
國外許多大學也開始使用Python作為新手學習之用。
本講以講者學習Python之心得分享,逐步說明程式語言的思維以及語法。
希望能有更多朋友了解,寫程式原來可以這麼快樂!

對象是不會程式語言,但想學習的朋友,
另外也歡迎有經驗的同好前來經驗分享。
課程內容以Python基礎語法為主,搭配實作,不涉及物件導向。


時間:
2009 年 02 月 22 日 (星期日) 13:00 - 16:00
時間規劃: 3 hr

講師簡介:
雨蒼,目前擔任台南窗口,以及lazybuntu維護成員之一。
於2008年中開始學習Python。

地點:巨匠電腦-台北認證中心 (台北市公園路30號3F)

費用: 0 -

地理位置/交通路線:
http://www.pcschool.com.tw/school/school_pic.asp?b1=qq&sts=&page=1&DEPT_AREA=1&aaa=BD++

活動報名網址:
http://registrano.com/events/sataipei200902-1

請注意,同場加映:2009 二月份的 SA@Taipei - 網站行銷之技術層面 with Joomla!
http://phorum.study-area.org/index.php/topic,55345.msg282553.html
深入閱讀......

2009 二月 SA@Tainan 企業級資料儲存概論(2/7)

0 意見

主題內容簡介:

入門篇,大約50分鐘左右,如果你有管過EMC或NetApp,這一段可以不用聽,:
1. DAS
2. NAS
3. SAN
4. RAID
5. 金錢上的概念
6. 這些東西的關係

觀念篇,大約50分鐘左右:
7. 使用上的分界點
8. 需求在哪邊
9. SWAT分析
10. 該買怎樣的東西
11. VTL是什麼
12. 異地備援可以吃嗎

講演者簡介:

黃立夫,David.Huang

最後一任TCLUG連絡人,最常拿來說嘴的事情,就是把TCLUG在手上結束掉,結果數年之後聽到人家抱怨,為什麼有TNLUG,沒有TCLUG,自己心想我們在燒命搞TCLUG的時候你們在哪裡,XD。
歷任過哈利波特產品維修人員,NB維修人員,也玩過PDA,現在看到3C就像看到裸體的女人,一點興趣都沒有。花過太多學費,現在在做商用網路視訊設備的 FAE,不過發覺好像沒有搞頭[昏],之前作儲存軟體的QA工程師,參與過規格的制定到產品的Release,ARM、MIPS、PowerPC等NAS 平台都測試過.

實際講授時間約100到150分鐘。因為我也不知道聽者的層次的分布,所以還是從頭開始講,希望以對話的方式來做講演,所以時間的分段沒有強制性,基本上就是滿50分鐘就休息十分鐘,休息完繼續講。個人保留修改講演內容的權利,也等於提供聽者修改講演內容的機會,XD
時間:2月7日下午14:00~17:00

地點:台南崑山科技大學 資訊科技大樓 5F I3502教室; 台南縣永康市大灣路949號

地理位置/交通路線:
http://www.ksu.edu.tw/introduction/images/location.jpg
校園配置
http://www.ksu.edu.tw/introduction/images/campus_1024.jpg

報名網址
http://registrano.com/events/satn0902
原文網址
http://phorum.study-area.org/index.php/topic,55299.0.html
深入閱讀......

2009年2月5日 星期四

使用Git與Github管理軟體開發專案

4 意見

之前聽聞git這個版本控制時,看到有人介紹github這個服務。
https://github.com/

http://zh-tw.whygitisbetterthanx.com/#github

git是個分散式的版本控制軟體。大部分的版本控制軟體都需要一個伺服端,在commit的同時,提交到伺服器上面。git當然也可以集中管理,但是他另外多了分散管理的方式。簡單來說,billy開了一個專案,tom覺得這個專案有意思,他想玩玩看,他可以把整個repo(reoisitories)都clone過去,並且在他那邊自己有一個repo。tom可以自由的對這個repo做各種提交修改,直到他覺得滿意為止。這時候tom可以告訴billy,他改了一些什麼,若billy覺得不錯,可以從tom那邊fetch回去並merge。

由於repo可以綁在寫程式的人身上,不用一定要有中央伺服器的主從架構,因此就出現了github這個網站。github是用ruby寫的,上面的ruby專案也非常活躍。github中,每個人都可以有多個repo,這些repo都是綁在user上的。user之間可以互相clone repo,watch repo,或是 follow 其他 user,就好像twitter或是plurk這些社交網站一樣。


深入閱讀......

2009年1月27日 星期二

_NET_WM_ICON 資料在64bit OS上之輸出

0 意見

日前由於手上有一個64bit的Linux,便幫忙PCMan前輩測試了一段程式碼,茲將心得貼於下方。

此bug由來是因為Lxpanel中的工作列上,工作圖示無法正確顯示。




先來看看來自xmisc.c的原始碼:

data=alloca((pib.width*pib.height+2)*sizeof(long));
data[0]=pib.width;
data[1]=pib.height;
for(j=0;j
a=&(pib.pixelPtr[j*pib.pitch]);
r=&(a[pib.offset[0]]);
g=&(a[pib.offset[1]]);
b=&(a[pib.offset[2]]);
a=&(a[pib.offset[3]]);
p=&(data[2+j*pib.width]);
for(i=0;i
*p=(*a<<24)|(*r<<16)|(*g<<8)|*b;
p++;
a+=pib.pixelSize;
r+=pib.pixelSize;
g+=pib.pixelSize;
b+=pib.pixelSize;
}
}


這邊將這些顏色資料宣告為long並儲存

根據 freedesktop.org 規範視窗管理程式的 EWMH spec,視窗的圖示 (顯示在視窗左上角那個),是用 property 的方式儲存,其他程式可以透過讀取視窗的 _NET_WM_ICON 這個 property,來取得視窗的圖示。

EWMH spec 原文:

_NET_WM_ICON CARDINAL[][2+n]/32

This is an array of possible icons for the client. This specification does not stipulate what size these icons should be, but individual desktop environments or toolkits may do so. The Window Manager MAY scale any of these icons to an appropriate size.

This is an array of 32bit packed CARDINAL ARGB with high byte being A, low byte being B. The first two cardinals are width, height. Data is in rows, left to right and top to bottom.

照這段說明所寫,我們呼叫 Xlib 的函數 XGetWindowProperty 來取得視窗的 _NET_WM_ICON 這個 property 時,他會以一個陣列的形式傳回視窗的圖示,而陣列中的每個元素儲存的,是圖示上每個畫素的 32 位元 ARGB 值。在陣列的開頭兩個元素儲存的,分別是圖示的寬度和高度。

所以我們預期,XGetWindowProperty(); 會傳回給我們的是一個 32 位元整數的陣列,開頭兩個元素是圖示的寬度和高度,而後面的其他元素則是點陣圖的 pixels 資料。

LXPanel的taskbar.c中的原始碼則為:

if(result == Success)
{
guint32* pdata = data;
guint32* pdata_end = data + nitems;
guint32* max_icon = NULL;
guint32 max_w = 0, max_h = 0;

/* get the largest icon available. */
/* FIXME: should we try to find an icon whose size is closest to
* iw and ih to reduce unnecessary resizing? */
while(pdata + 2 < w =" pdata[0];" h =" pdata[1];" size =" (w" w="%d," h="%d," size="%d">


這邊是使用guint32來撈出資料。在32bit OS上,這段程式碼很正常;但在64bit OS上,我們卻發現回傳的值是64bit的array

底下這段測試程式碼來自好友rick68
int main(void)
{
printf("sizeof(int) = [%d]\n", sizeof(int));
printf("sizeof(long) = [%d]\n", sizeof(long));
printf("sizeof(long long) = [%d]\n", sizeof(long long));

return 0;
}


將這個程式在32bit OS下編譯執行,產生結果為:
sizeof(int) = [4]
sizeof(long) = [4]
sizeof(long long) = [8]

在64bit OS下編譯執行,結果則為:
sizeof(int) = [4]
sizeof(long) = [8]
sizeof(long long) = [8]


這邊可以發現,long的長度在32bit OS下是32bit,而在64bit OS下則為64bit。

查詢 XgetWindowPropert 的文件,找到如下的敘述:

If the returned format is 8, the returned data is represented as a char array. If the returned format is 16, the returned data is represented as a array of short int type and should be cast to that type to obtain the elements. If the returned format is 32, the property data will be stored as an array of longs (which in a 64-bit application will be 64-bit values that are padded in the upper 4 bytes).


如果傳回的 format 是 32,代表資料是 long integer 陣列 (在 64 位元程式內就會是 64 位元)。也就是實際上資料只有 32 bit,但是他傳回的會是加上 4 bytes 作 padding 的 64 bit 整數,所以程式的處理必須用 long int 的 array,而不是 32bit int。

因此若使用guint32儲存,在64bit OS上就會發生錯誤。將guint32改用gulong來撈取資料後此問題就正常了,也可正常顯示icon



參考資料
http://code.google.com/p/gatos2/source/browse/trunk/avview/xmisc.
http://mlblog.osdir.com/video.gatos.devel/2005-10/msg00031.shtml
http://www.mail-archive.com/rxvt-unicode@lists.schmorp.de/msg00321.html
http://standards.freedesktop.org/wm-spec/wm-spec-latest.html#id2552223
http://linux.die.net/man/3/xchangeproperty

特別感謝PCMan大哥檢視並修改此篇文章!
深入閱讀......