Friday, May 30, 2008

下班回家

最近壓力非常大, 大到做夢都在想工作,
昨天下班坐在公車上, 想著白天發生的事情,
真的覺得很煩很煩,
很自然的就把手機拿了出來,
看到手機桌面上蕾蕾的照片, 就順手把相簿打了開來,
看著可愛的蕾蕾, 我也漸漸的笑了,
忽然世界不是只有擾人的公事,
忽然我也有個家可以回,
忽然有人需要我的照顧,
下班回家去吧

Tuesday, April 29, 2008

她比較像妳

我們家的小美女, 真的很像她媽媽,
上面這張是她媽媽小時候的照片(黑白的 XD)
跟下面的照片比起來有著一樣的鼻子嘴巴, 連頭髮少少的都很像 :)

Thursday, April 24, 2008

坐月子中心

前天老婆跟蕾蕾終於出院了, 我們從台安搬到了康和坐月子中心,
康和在大直基湖路上, 離公司還有家裏都很近, 所以下班很快就可以來,
晚上夜景可以遠眺101跟松山機場, 白天看到的是河濱公園,
而所送的餐點是美味又健康, 真不知道是老婆在坐月子還是我在渡假 :P
下面附上蕾蕾新的影片跟照片連結



http://picasaweb.google.com/momodalo/NSoLkI

Wednesday, April 23, 2008

Setup Win32 autostart by QT

Example code to use QSettings to setup windows auto start.

QSettings settings(QSettings::NativeFormat, QSettings::UserScope, "Microsoft", "Windows");

settings.setValue("/CurrentVersion/Run/testprogram", argv[0]);

Monday, April 21, 2008

我女兒有我的眼睛

我們家蕾蕾有跟我一樣的雙眼皮還有鳳眼,
臉上還有媽媽的小酒窩喔


這是我小時候的照片, 做個比較啦 XD

Sunday, April 20, 2008

正妹降臨!-蕾蕾出生了

最近實在是太忙了, 所以先丟個影片讓大家分享喜悅



這邊是其它蕾蕾剛出生的照片
http://picasaweb.google.com/momodalo/bAsmvJ

Tuesday, April 01, 2008

Nokia收購Trolltech

這個新聞有一陣子了
可是新聞剛出來時, 小弟也不敢妄下評論,
本身不是甚麼有名分析師, 或是網路名人,
所以還是等一陣子大家的分析都出來後再來補篇馬後炮好了,
新聞在這: http://trolltech.com/28012008/28012008

很多人都在想Nokia到底要幹嘛?
他已經有了Symbian這個市佔率最高的Smart Phone OS,
而在Linux方面他也推出過Nokia N770/800系列的Tablet,
裡面Maemo所使用的GUI toolkit是基於GTK所開發出來的,
而GTK又是Qt在open source界最大的對手,
大家都會好奇, 這是否表示Nokai想要捨棄GTK轉向Qt了呢?
這個新聞經過了一陣子的發酵, 各家的分析師都提出了一些看法跟觀察.

首先O'Reilly的Andy Oram說:
"我跟他們都有聊了一下啦, 像是那個Nokia的RD老闆, 還有Trolltech的CEO,
都跟我很麻給", "我發覺齁, 他們跟open source的關係應該都不會改變啦",
"Qt/Qtopia都還會繼續使用GPL發佈, 大家不要擔心,
甚至Nokia說希望能夠加強跟KDE團隊的關係, 說不定還會成為KDE的贊助者喔",
"阿, 那個KDE的死對頭GNOME也不要想太多啦, 他們不會變心的, 頂多就腳踏兩條船,
Nokia依然會繼續長期對GNOME的支持的, N系列的Tablet還會出啦!",
"Nokia買Trolltech最重要的是跨平台的支援,
希望有一天Nokia所有的平台都可以用同一種工具開發...科科"

Ovum的分析師Adam Leach說:
"這對Troll是個好新聞, 對Nokia是個好方向, 對Symbian是個壞新聞, 對Motorola是個天大的壞新聞(沒差, Moto後來有更大的壞新聞-他要賣掉他的手機部門 XD)"
"那個Nokia說不定會走後門進去LiMo喔, 因為Trolltech也加入LiMo了"
"S60以後可能會支援Qt..." 那真是天大的好消息阿!!!!!

另外的看法 Bill Weinberg:
"根據謠言指出, 這引發了Nokia內部一些團隊的競爭意識(Maemo: 按..有我你買Qt幹嘛, 嫌我不夠好嗎)(S60, S40: Qt那是甚麼?, 可以吃嗎?)" "這樣可以幫助Nokia的跨平台技術"

還有些新聞是針對Moto的, 因為他們的Linux手機 (明, A760/780)是使用Qt當作基礎來開發的,
可是我想Moto現在應該沒空管這些, 所以就沒翻了 XD
總結來說, Nokia現在公司已經夠大到可以四處壓寶, 而且他們不想讓OHA獨領風騷,
而併購Trolltech更可以完善他們公司有那麼多平台的問題,
Trolltech在被併購後主要宣示了兩件事
1. Qtopia改名為Qt for embedded.
2. Qt for WinCE launched.
可以想像, Trolltech會花更多心力在不同平台間的移植, 以其讓Qt變成一個完整的跨平台開發工具
也幫助Nokia鞏固在移動通訊產業的霸主地位

Sunday, March 30, 2008

Android and PTT

這個標題有點奇怪, 這兩個東西怎麼會有關系,
裡面甚至沒有一個字母是一樣的, 客官請聽我慢慢說來, 這是個有趣的故事,

上個月我寫了一篇Android porting Experience的文章,
其實純粹是紀錄自己porting的過程, 方便自己也方便別人查詢, 算是個經驗交流,
沒想到過了幾天居然有人在我另一篇blog留下了下面的言論.


這位網友實在是太可愛了 XD
所以我就跟他說可以email問我問題,
我們也交換了gmail, 後來gtalk了幾次,
雖然不知道我的談話有沒有解答他的疑惑,
但是他很信守承諾的給了我1688的Ptt幣,
下面是真相, 網友帳號我mark起來幫他保密 :)


我的帳號就從經濟裝況"赤貧"變成了這個樣子


從學生時代就接過不少case, 其中交易自然都是現金為主,
也做過一些open source的東西, 那就是大家興趣交流交流, 跟錢無關,
沒想到這次居然是用Ptt幣來做交換 XD
這樣我又有P幣可以去賭博了...科科

Friday, March 28, 2008

在沙發上睡著了


這畫面裡面我們家有四個人睡著了
躺在沙發上得是我老婆, 肚子裡面是我女兒
左邊兩隻貓一個是我大女兒Nanaco,
黑黑的那一團是小太監
我家的沙發實在是太舒服了


其他圖片

Monday, March 24, 2008

蕾蕾的預產期-2008/4/18

我家的正妹要出生了!!!!!!!
預計是4/18, 因此她的阿宅爸爸就在blog上準備了一個倒數計時迎接她的到來.

等到蕾蕾出生後, 阿宅爸爸會先幫他申請身份證, Gmail帳號, Yahoo帳號, 無名帳號, ptt鄉民帳號
還有先幫她弄好自己的相簿....(正妹要從小就有自己的相簿)
21世紀的小孩, 一定要從出生就做好網路教育 (孩子的學習不能等阿~~~~)

Friday, February 29, 2008

國防役倒數計時器

===這篇是消毒文===
我在右上角新增了一個國防役倒數計時器,並非我在服役的公司受到了甚麼不公平的對待,或是畢業後就立刻要離職,而是將國防役結束當作人生一個階段的結束,期許自己在這之前能夠有些成績,現在還有600天,看來我要多加努力了。

Thursday, February 28, 2008

Reading XComposite Tutorial - GtkThumbnail


After reading the XComposite tutorial, I start to write a small widget to make thumbnail of a window. The original tutorial use QImage to show the thumbnail. My widget inherits GtkImage. Here is the code.

Tuesday, February 26, 2008

Nanaco流星拳


招式: Nanaco流星拳
發動方式: 鬥貓棒引誘
攻擊對象: 鬥貓棒
傷害點數: 10
耗費力氣: 50 (主人耗費100)
招式分解: http://picasaweb.google.com.tw/momodalo/Nanaco

冬天的享受


物品名稱: 不明功能木頭一塊
長度: 剛剛好橫跨浴缸
質料: 木頭
用途: 泡澡時放notebook, NDS, 湯麵, 便當, 九把刀的小說, 零食, 水果
備註: 建議連續使用時間不要超過一個小時,不然身體某些部位會變皺皺的

Wednesday, February 13, 2008

Android Porting Experience



Recently, I have spent 3 working days on porting Android to our PXA270 HW platform
Brief Condition:
HW:
PXA270 with PCI and IDE support
SW:
Linux 2.6.21 source code with our own driver (for PCI & IDE)
Linux 2.6.23 source code with android patch

Method:
1. porting customized driver from 2.6.21 to 2.6.23
2. porting android patch to 2.6.21

First of all, I must to explain what Android Kernel require.
1. EABI support
config:
CONFIG_AEABI=y
2. Thumb support
config:
CONFIG_ARM_THUMB=y
3. OpenBinder (from PalmSource)
file:
drivers/binder, include/linux/binder*
config: CONFIG_BINDER
4. Android Special Device
file:
drivers/android, include/linux/android*
config:
CONFIG_ANDROID_POWER
CONFIG_ANDROID_POWER_STAT
CONFIG_ANDROID_LOGGER

It looks like porting android patch into 2.6.21 is more simple. Therefore, I decide to use the second method. After porting drivers/android/*, EABI and Thumb. I can see a red-dot on the screen. Then I start to porting the openbinder to get into the Android desktop.

There are a lot of web pages talking about porting the Android binary into ARM platform. The steps is copy system/, data/, etc/, /init. And Writing a startup script to start Android. You can find these information in http://benno.id.au/blog/, http://nemustech.blogspot.com/2007/12/android-porting-to-real-target-hw.html. After I do all of this, the android still block in

clock_gettime(CLOCK_MONOTONIC, {127, 101400000}) = 0
clock_gettime(CLOCK_MONOTONIC, {127, 103070000}) = 0
clock_gettime(CLOCK_MONOTONIC, {127, 104026000}) = 0
futex(0x134ac, FUTEX_WAIT, -1, {4, 997000000}) = 0
Finally, I found that my rootfs is jffs2, but jffs2 can't support mmap and /init will be failed. I put everything into the IDE hard disk and format as ext2 and BINGO!!!!!
Here is a very useful reference discuss.
http://groups.google.com/group/android-internals/browse_thread/thread/93570c41bce07f16

Sunday, January 27, 2008

Gtk Embedded MPlayer


Recently, I want to embed a mplayer into my gtk program. I use the -wid option of mplayer to assign the parent X Window ID and draw the mplayer on a GtkDrawingArea. However, It still need some control widgets to control the mplayer. MPlayer provide the -input option to read input command from a file. The file could be a UNIX FIFO, so others can send command to mplayer through fifo. The command list is here. ( you can see it by type "mplayer -input cmdlist").

seek Float [Integer]
pause
loop Integer [Integer]
volume Float [Integer]
mute [Integer]
get_percent_pos
get_time_pos
get_time_length

I write a simple widget to embed mplayer and provide some require api to specified command. The project is named GtkEmbMPlayer. Here is the code for version 0.1.0
There is also a sample program to demo the widget.
PS: the sample and the widget still buggy.

Monday, January 21, 2008

x window panel from scratch


最近正在看怎麼寫一個x window上的panel, 也就順便看了一下Window Manager的架構, 在網路上找了一下, 覺的最好的範例是fbpanel (http://fbpanel.sourceforge.net/) , 有興趣的人可以自己下載source code回來看看.
接下來就來說說如何自己寫一個panel, 其實panel也是一個window, 只是他多了一些不一樣屬性, 在這裡我就用程式碼來說明 (以下的程式碼大部分都使用GTK+, 如果不喜歡GTK, 可以直接使用XLib, 或是任何Toolkit找到相對應的api就可以了, 觀念都一樣, 甚至連api名字都差不多)
首先建立一個window

GtkWidget* panel = gtk_window_new(GTK_WINDOW_TOPLEVEL);

如同一般window一樣, panel也是一個TOPLEVEL的window,
將panel的decoration(視窗旁邊的裝飾)關掉,
gtk_window_set_decorated( GTK_WINDOW( panel), FALSE );

接下來是一些比較簡單的屬性, resizable, position
gtk_window_set_resizable( GTK_WINDOW( panel), FALSE);
gtk_window_set_position( GTK_WINDOW( panel), GTK_WIN_POS_NONE);


之後的屬性就需要window被realized以後才能夠更改, 所以我們這裡要先realized
gtk_widget_realize(panel);

skip task bar hint就是讓window manager在taskbar上不顯示這個視窗(panel不會出現在taskbar是很正常的一件事)
gtk_window_set_skip_taskbar_hint( GTK_WINDOW( panel) , TRUE );

skip pager hint有個很好的例子, 當按下Alt-Tab出現window list, 他不會出現在裡面(panel不會出現在pager也是很正常的一件事)
gtk_window_set_skip_pager_hint( GTK_WINDOW( panel) , TRUE );

然後讓panel永遠比別人大...阿...是在別的視窗上面啦
gtk_window_set_keep_above( GTK_WINDOW( panel), TRUE);

每個desktop都要看得到panel
gtk_window_stick( GTK_WINDOW(panel));

跟window manager講說這是個dock type的window
gtk_window_set_type_hint ( GTK_WINDOW(panel), GDK_WINDOW_TYPE_HINT_DOCK);


設定panel的大小跟位置
gtk_widget_set_size_request(panel, gdk_screen_width(), 64);
gtk_window_move( GTK_WINDOW(panel), 0, gdk_screen_height() - 64);


你以為這樣就結束了嘛?
並沒有, 最後設定_NET_WM_STRUT這個HINT讓Window Manager知道panel已經用掉視窗邊邊的某個區域了, 格式為
_NET_WM_STRUT, left, right, top, bottom, CARDINAL[4]/32
你塞進去的資料假設為一個unsign long[4],第0個代表螢幕左邊保留的寬度,下面以此類推
另一個HINT是_NET_WM_STRUT_PARTIAL可以用來通知windowmanager你只要預留邊邊域的一部分就好
_NET_WM_STRUT_PARTIAL, left, right, top, bottom, left_start_y, left_end_y,
right_start_y, right_end_y, top_start_x, top_end_x, bottom_start_x,
bottom_end_x,CARDINAL[12]/32
詳細請參照EWMH
gulong data[12] = { 0 };
data[3] = 64;//_panel->allocation.height;
data[4 + 3*2] = _panel->allocation.x;
data[5 + 3*2] = _panel->allocation.x + _panel->allocation.width;
gdk_property_change( _panel->window,
gdk_atom_intern("_NET_WM_STRUT_PARTIAL",FALSE),
gdk_atom_intern ("CARDINAL", FALSE),
32, GDK_PROP_MODE_REPLACE, (unsigned char *)data, 12);
gdk_property_change( _panel->window,
gdk_atom_intern("_NET_WM_STRUT",FALSE),
gdk_atom_intern ("CARDINAL", FALSE),
32, GDK_PROP_MODE_REPLACE, (unsigned char *)data, 4);

這樣就可以產生一個位在螢幕底部的panel, 裡面的東西就隨便你放啦