2007年5月21日 星期一

Qt 日記之一

約在兩年前我就想學 Qt! 理由有三:
1. 我想, 每天在 Driver 混, 都是用命令列, 總要學個 UI, 以後自己可以寫些小 tool 玩玩!
2. 在 GTK 和 Qt 中, 我選擇了 Qt! 理由很簡單. 其實我並不知這兩大系統誰好誰壞. 只是我寫了一輩子 C. 雖然為了讀懂 GOF 的 Design Patter 而把 C++ Primer 也看了大半, 但在 Embedded 這個行業, 至少在本公司, 要寫 C++ 的機會微乎其微! Qt 是我的理想選擇: 是一個完美地讓我學習 C++ 和 Design Patter 的範例! GTK 是用 C 來寫物件導向的經典! 奈何最缺的是時間, 只好捨棄了!
3. 本公司是作影像的! 如果沒有 GUI, 光看一堆數字實在太不人道! 如果可以, 我也想寫一個 linux 上的 scanner driver!

雖然捨棄了 GTK, 我還是在繁忙的工作壓力下擱置了 Qt 的學習!

最近偷閒再來, 也不知能否持續! Anyway, 作正事累的時候就偷閒玩一下也好!!

首先, 先嘗試安裝 open source 版的 Qt. 以往我成功安裝了 Linux 版, 但是 Win32 版因為環境不熟失敗. 這次希望能進步一點, 把 Win32 版也裝起來, 以下是我的步驟:

-------------------------------------------------------------
安裝 Qt4, 從官方網站下載 source tree 來 compile, 都是 4.2.3, 我是照 source tree 解開的根目錄中的 INSTALL 來裝的!
1. Windows 版本
問 Google MinGW 是什麼? 找到官網! 哇! 怎麼那麼多檔案? 沒有包好的嗎?
稍微找一下, 安裝也花了一些工夫!
先把 MinGW 和 MSYS 裝好, 在此不詳述! 開啟 MSYS 目錄中的 msys.bat, 出現一個 shell, 然後下
a) $ ./configure.exe

但是會出現 qmake 找不到的錯誤, 即使你在 PATH 中加入 C:/Qt/qmake 和 C:/Qt/bin 也一樣!! 最後我是手動把 C:/Qt/qmake/qmake.exe
複製到 C:/Qt/bin 中, 再下 configure, 就成功了!!

b). $ ./mingw32-make
-- 錯誤 --
cd tools\moc && c:/MinGW/bin/mingw32-make -f Makefile
/mingw/bin/sh: line 0: cd: toolsmoc: No such file or directory

我進去看 Qt/src/Makefile, 發現其實裏面的每一個 tools\moc 中間都有 \, 沒有相連的! 於是我想是不是 Linux 和 Win32 路徑的 "/" 和
"\" 相衝突的問題! (再加上 ming32-make)? 於是我把相關的 "\" 改成 "/", 果然就過關了! 可是只過一關下一個 Package 又有一樣的問題! 看來後面有無數同樣的關等著我, 我能一個一個去改嗎?

經過約三天的找尋, 學會了安裝 MinGW, MSYS, 乃至於 Dev C++ 全部都安裝並學了一遍. 最後終於在 Qt 官網上的
http://www.trolltech.com/developer/knowledgebase/707/?searchterm=mingw
主題為 Building Qt with MinGW fails, entry 707, 是一模一樣狀況!!

問題出在 MSYS 中的 sh.exe. 因為若它存在, 則會使用它而不用 Windows 的 shell, 而 sh.exe 不認得 Windows 路徑的 "\",
所以不用 msys.bat, 而是用 Windows 的 cmd, 路徑先設設好, 再到 C:\Qt\ 去執行 mingw32-make 即可
但是 sh.exe 不能 run, 則 MSYS 的 shell 就 run 不起來. 也就是說, 根本就不該用 MSYS 的 shell 來執行!

我把 sh.exe rename 成 sh.exe_, 然後用 WinXP 的 cmd 進入dos 模式, 後來就 make 成功了!!
稍後我想, Dev-Cpp 本身應該包的很完整, 其實不需要使用 MinGW 和 MSYS, 事實的確是如此!! 會發生這個問題, 是因為我裝了 MinGW 和 MSYS 在 Dev-C++ 之前的緣故!!


-- 錯誤 --
有一堆變數未定義, 或不認得

這也是因為我混裝了 MinGW, MSYS, 和 Dev-C++

我這次先 mingw-make clean 一次, 然後將原先指到 C:\MinGW\bin 的 path 改成 C:\Dev=Cpp 看看,
結果是 OK 了, 但是我看在 build 過程中用到超過 2 GB, 我清了一些程式才讓它完成! 看來我的 C 碟以後要放大的 16GB 比較保險!!

c) 打
$ mingw32-make install
d) 在 cmd 下, 下
$ qtdemo
隨便試幾個範例, 可以 run! 成功!!

試試 "C++ GUI Programming with QT4" 中的 hello world example:
$ qmake -project
$ qmake hello.pro
$ make
然後在下面有一個 debug 子目錄中的 hello.exe, 可以 run, Ye!

所以總結起來, 就是 configure, make, make install 3 步驟, 只是我找錯了 tool 而已!!

-- 如何清掉 build 過程中的 obj 檔呢? --
如果在 C:\ 中留這 2GB 多的暫存檔我不同意,
$ mingw32-make clean
就 OK 了. Qtdemo 也能 run,

-- Linux 版本 --
在 Debian 或 Ubuntu 都一樣順!!
./configure./make 都很順, 除了一樣有需要安裝 libx11-dev 套件之外, 在
./make install 出現錯誤:
/usr/bin/ld: cannot find -lXext
用 apt-cache search xext, 找到幾個,
aptitude install xlibs-dev

就 OK 了!!

2007年5月4日 星期五

My first try for the MySQL

想要為公司引進 bug tracking system. 本來想用 mantis, 可是看了看不知它的一些變數是什麼東西. 看來好像要有 PHP 或 MySQL 的基礎!! 想換一個容易安裝 trac, 可是看別人的評論聽說更麻煩!
想要放棄嘛, 又覺得這個很有用! 想說, 就一點一點作好了!!
以下是我根據 MySQL 5.1 Manual Online, 在 Debian sid 上的實驗,

1. 在 Debian 中到底需不要要執行 $ mysql_install_db? 看它的套件 postinst 中有用到這個 command,
但是我不知在哪個目錄? 因為它完全沒有問我!!
2. 上網查到在 /var/lib/mysql 下, 我把它刪除, 再刪除 mysql-server 套件再重裝, 也沒有重新建立?
但我看到在
/etc/mysql/my.conf
中, 有一行
datadir =/var/lib/mysql
就是這一行指定了 database 的位址!! 所以你執行
# mysql_install_db
無論在何處執行, 它都是建立了
/var/lib/mysql/mysql/*
3. 建立 database root user 的帳號和密碼! 和 Manual 不太一樣, 我按照 # mysql_install_db 執行後的說明!!
無法執行, 會出現
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
4. 看來 mysql 也沒有 run 起來, 在 manual 上直接打 mysql 就可以跑, 但在 Debian 要打:
/etc/init.d/mysql start
有 run 起來, 可是總是在後面帶了一行:
Starting MySQL database server: mysqld already running.
/usr/bin/mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
5. 看了一下 Manual 後面的常見問題,
a) 先檢查 port 對不對!
可用
# netstat -ln|grep mysql
在 Debian, 用
# ps aux|grep mysql
也可以看到它的參數!
我確定我是用 /var/run/mysqld/myslqd.sock
但是我用
# mysql -u root test --socket=/var/run/mysqld/mysqld.sock
仍然得到
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
我再重試 user 為 debian-sys_maint 也不行
b) 執行以下指令來建立 user
# mysql -u root mysql
錯誤訊息:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
此錯誤和 Manual section 5.7.8. Causes of Access denied Errors 中下面的好像都不一樣!!
c) 我執行以下命令好像有效
# mysql -u root --password
它就要我輸入密碼, 然後進入一個 prompt
mysql >
6. 看來是進去了, 可是我無法執行
# mysqladmin version
# mysqladmin variables
這兩個指令!!
7. 有人說: 要把 /var/lib/mysql 以下的 owner 改成使用 sql 的人名, 但我改成 root 之後, 居然連
# /etc/init.d/mysql start
都失敗!!
要作別的事了, 下次待續!!

2007年5月2日 星期三

橘逾淮而為枳之胡言亂語

最近公司公佈去年考績, 我只被打了個及格分數! 而更多同事, 因不滿考績而離職!

我會不爽的原因在於: 我去年是有接計劃的!即使今年對於新計劃不怎麼 aggressive, 但是今年的計劃明年打, 不該影響去年的考績!! 況且, 加薪分紅都看考績!

撇開我和上面高層的恩怨不說! 據說這是因為新的績效制度. 比如說: 一個組識內只能有多少百分比是優, 多少是劣, 多少中間等等!!

不上不下的小主管位置, 要如何作呢?

我想, 對於考績分佈常態這個沒有人有意見!

但是你如何定義不同部門的考績呢? 如果一個部門每天都拼個 12 小時, 另一個部門正常上下班, 如何分配呢? 如果我下面的每個人都工作超過14小時, 六日又來加班, 我要如何對他們實施 "常態分佈" 的考評呢?

這樣的目的在激勵努力的員工, 分出好壞! 但是如果公司裏的好員工, 己經拼到一年到頭都加班半夜, 六日也來工作! 所謂不好的員工, 也只是能力稍差, 或是只是加班到晚上 9 點而己? 你要怎麼再激勵他們呢? 你只是間接要求他們要再加更多的班, 然後不要申請加班費, 否則你的分紅會很難看!!

你說要, 要提升自己的能力, 使工作更有效率! 但是你把員工壓榨到這種境界, 他們哪有時間去充實自己, 提升自己的能力? 也只能學習公司的文化! 當然, 上面的人很自豪他的管理方式. 生存下來的, 也只會這一套!

可是你照上面的期望努力, 又獲得什麼 "豐厚" 呢? 還要看你的"產品"賣得好不好! 賣得好, 一個中階主管也不過百萬元上,最好最好不會超過兩百萬 ! 不好, 小於百萬!

現在的台北市, 年薪百萬, 扣掉吃穿, 買30坪的房子都要背貸款一輩子了! 難怪現代人不敢生小孩!! 生一個小孩年薪至少要增加 30 萬! 很多人可以應付, 是父母幫忙帶小孩, 或是付給褓姆. 所以, 很多家庭, 100 萬的年薪是付給 3 個人的勞力!!

你一年到頭加班, 拋家棄子, 犧牲健康的結果, 換來的是 "不一定會有的分紅", 和自己無法成長!

你說考績以結果論, 那結果不好, 大家都盡力了, 誰該負責呢? 是最基層的人嗎? 最高領導人還不是因為 "裁員減資" 得當, 照樣領他的分紅呢? 曾有一陣子, 台灣企業領導人還流行去參禪打坐或上教堂, 然後捐大筆的股票給宗教! 我想, 有錢又得福報, 中下階層連在另一個世界都輸在起跑點!! 他們最該捐錢給他們的員工! 即使最後稀釋到很少, 員工都會感激! 但我想, 所有老闆, 都不會這麼做!!

你說上面也是這樣努力, 他們健康都有問題! 是呀, 但是他們一年的所得超過你工作 10 年!

他們常常說, 他們以前多努力多努力!
我承認他們早年一定很努力! 但是, 一方面是因為自己的企圖心, 因為他們在搭建自己的舞台! 現在他們享受自己的舞台!
但是, 舞台己經搭起來了! 大部份人只是抬轎的人而己! 這中間有沒有將來會坐轎? 有, 但是有幾個人可以坐轎? 不多吧. 而且在 "壓榨管理" 下, 員工成長有限, 沒辦法接受應付新的轉變, 最後還不是有一堆 "空降部隊" 來壓在上面?

近期商周引述某經濟學大師的話說: 當初資本主義的理想是希望大量生產, 讓大家有更多的時間去作自己想作的事! 而想獲得更多的人去花他的時間, 智慧, 勞力去獲得更多!

但現實的狀況是: 想獲得很多的人, 拉著大家和他一樣努力. 結果 , 他獲得很多, 其他人卻過的更辛苦! 卻只獲得多一點點, 遠不足以補償他的付出! 這就是 M 型社會嗎?

上面最愛"數字管理"了. 反正花太多, 就砍預算, 管你人夠不夠! RD 相對生產線人比例太高, 就砍, 管你計劃難度如何? 沒有PE人員, 或素質不夠, RD 兼著作! 良率不高, 再實行什麼 XXXX 來從 RD 作起! 數字管理是高層不想花大腦解決問題的一個完美的藉口!

說句真實的笑話, 我們總經理還常常下令買一枝原子筆都要簽到他那邊! 也許台灣的總字輩的都是這樣!!

實在和我看書, 什麼傑克威爾許的作風差好多, 和他們上電視的那個樣子差好多!

我常說: 公司內 RD 的最高主管只到 Manager 而己! 再上去一堆處長, 協理, 副總, 總經理,,全是 business and management! 技術的發展和他們無關! 一切只有 Marketing! 明年, 後年的技術在哪? 不重要! 重要的是今年要有案子! 想搞內部計劃, 可以, 但是沒有人, 也不給錢, 自己赤手空拳去做!

RD 如果要成功在公司內往上爬, 在 Managers 就好好把技術交下去, 專心搞管理, business, 反正到時技術成功, 你有功! 失敗, 沒有你的事! 再找個 RD manager 來就好了!!我們這個台灣前 20 大的科技公司的 RD 管理秘訣就在這裏!! 如果你還要管技術, 那你就慘了!

我常常在想, 這些管理方法原始立意都很好, 但是, 到了台灣就變了樣! 為什麼呢? 我也不得其解, 只得把上面亂七八糟的話稱為 "橘逾淮而為枳之胡言亂語"

佇 Linux 來看GPX 檔案

最近定定有戶外活動。使用𤆬路機 (GPS) 來記錄行過的路線。普通我記錄路線,攏是用手機仔抑是專門个𤆬路機,罕得用電腦來看。 毋過,"仙人拍鼓有時錯,跤步踏差啥人無"。有一擺我無細膩,袂記得共一擺活動的路線收煞起來,閣直接開始記錄下一擺的活動,按呢共幾落...