2008-10-30

頭昏腦脹之閒聊

這幾天比較累,所以有時候就會開始胡思亂想 + 亂講話。

昨天上課前夕和阿勝聊天,聊到了說玉琳快要去工研院了,我們 LAB 就要變成和尚 LAB 了,一整個悶啊。

阿勝:叫你們老師去請個助理啊。
我:對喔,要跟蝗蟲一樣請一堆來面試,然後由 LAB 的人來評審。助理不用作什麼事,只要天天打扮漂漂亮亮來上班,上班時間要做啥都可以,中午幫忙定便當或者和大家一起出去吃飯,這樣就可以了。

我在「練瘋話」

(繼續閱讀...)

2008-10-27

開車比較大!?

剛剛去育樂街吃晚飯,回 LAB 時在校門口遇到一個白目的開車人士。

開進校門口快要撞倒我了,幸好小明把我拉開,車窗還拉下來說「少年ㄝ」。
心裡一陣不爽,這裡是校園耶,本來就該禮讓行人。不禮讓行人還搖下窗戶嗆人!?搞不懂?
不過小明有嗆回去了,哈。
看他原本要將車子停在工科系館前面,走到系管門口之後回頭一看,車子又開走了,可能怕有人會想要去刮他的車吧?
「歹年冬,搞消郎」

(繼續閱讀...)

2008-10-21

2008-10-18-大內天文館

上次用抽車的方式挑戰天文館失敗,這次只好慢慢的龜上去。從高處看附近的風景,果然是不一樣。


檢視較大的地圖

下午趁謝依宸和謝喬安這兩個小天使還在午睡,趕緊出發騎車,這次設定為慢慢騎,好好觀賞附近的景色,所以也拍了一些照片。

這是大內的路上,在這種兩旁都是樹木,又都沒什麼車的路上騎車,真的是滿舒服的。

遇到十字路口,左轉可以往玉井或者往台南藝術大學,也是很棒的一條路線。直走就是往天文館啦。
經過二溪大橋,遠方的山有點像是月世界的地形。

有沒有看到山頂上圓圓的東西,就是今天的目的地啦,看起來等一下爬坡應該會很刺激。
來到入口啦,這是要爬到天文館三個坡的第一個,也是最長的一個,這種坡度真的滿可怕的。
呼,終於爬上第一個坡了,這次沒有用抽車的,不像上次那種快要往生的感覺,不過還是喘呼呼。這麼陡的坡,爬的時候重心要往前,不然一不小心可能就會「翹孤輪」了。
這是第二個坡,不像第一個那麼長那麼陡了,應該會比第一個輕鬆吧。
爬上第二個坡,景色已經跟在平地看到的全然不同了,心情也因為看到這樣的風景好了起來。
最後一個坡啦,最短也是最緩的一個啦,上面的建築物就是天文館啦。衝啦!!
到目的地,幫愛車拍張照吧,入手到現在,陪我征戰了3800公里左右,也換了不少東西了。
這是天文館的入口,有開冷氣唷,真是涼爽,我也不小心入鏡了。
眺望遠方,最高的那個不知道是不是烏山-我想挑戰的地方。
天文館附近的等高線圖。
稍做休息之後就回程啦,並沒有進去參觀,家裡還有兩個小天使等著我回去陪他們玩,而且也不放心單車放外面。
回程不按照原路回去,而是走曾文溪提防道路,也是沒什麼車,滿適合悠閒的騎車的。
原本還想多拍沿途的照片的,不過記憶卡太久沒有整理,竟然已經滿了。
如果只是要動動身體,這是一條很棒的休閒路線,當然上天文館的坡除外。

(繼續閱讀...)

2008-10-16

敗入 HP LP2475w

一直想要入手寬螢幕,本來只是想看看22吋的,畢竟比較便宜。Benq的只要一萬二左右,不過是TN面板,有先天上的限制,例如可是角度不大。好死不死,剛好在PCDVD看到有人發起團購這台螢幕,又是IPS面板的,就叫小明一起加入敗家的行列啦。

螢幕在昨天到手,免不了想要來個開箱文,只是照片拍了,卻懶得發了,直接看結果吧。
要詳細的,到小明那邊看吧。

在LAB原本是使用19吋雙螢幕,一個是自己的 Benq Fp93v,一個是實驗室去年購入的 Benq 忘了型號的。其實雙螢幕工作還滿方便的,一個螢幕寫程式,另一個螢幕查詢資料,也可以遠端控制NB的linux 系統。

這台螢幕有滿多介面的,有兩個DVI、一個HDMI、一個Display Port、六個USB port、AV端子。如果有兩種輸入,還可以用子母畫面,將來不就可以一邊看電視,一邊用電腦了。

今天用了一天,還不怎麼習慣,不過爽度倒是很高。中午吃飯放個電影來看,也是一種大大的享受。

螢幕 + 好打的鍵盤 + 好靠的護腕 + 好用的滑鼠


工作環境,雙螢幕真是好用啊



(繼續閱讀...)

C 呼叫 Matlab 的 function

要將程式的結果用Matlab畫出圖形來,所以也稍微研究一下。
主要是透過Matlab engine 來呼叫 Matlab 提供的函式。

其實不只可以呼叫Matlab來畫圖,也可以直接呼叫 Matlab 提供的數學函式來運算,只是速度有沒有比較快就不知道了,沒有實際去測試過。

【環境設定】
如果是用Visual Studio來寫這樣子的程式的話,要先設定一些專案的屬性

Include
{MATLAB_PATH}\extern\include
{MATLAB_PATH}\extern\include\win32
{MATLAB_PATH}\simulink\win32
Lib
{MATLAB_PATH}\lib\win32\microsoft
{MATLAB_PATH}\lib\win32\
連結器->命令列
libeng.lib libmat.lib libmx.lib libmex.lib

{MATLAB_PATH} 是安裝Matlab 的路徑

【標頭檔】
要 #include "engine.h"

【撰寫程式】
用Matlab 提供的範例程式,這是一個畫出加速度的圖

Engine *ep;
mxArray *T = NULL;

double time[10] = { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 };

if (!(ep = engOpen("\0"))) {
fprintf(stderr, "\nCan't start MATLAB engine\n");
return EXIT_FAILURE;
}

T = mxCreateDoubleMatrix(1, 10, mxREAL);
memcpy((void *)mxGetPr(T), (void *)time, sizeof(time));

engPutVariable(ep, "T", T);

engEvalString(ep, "D = .5.*(-9.8).*T.^2;");

engEvalString(ep, "plot(T,D);");
engEvalString(ep, "title('Position vs. Time for a falling object');");
engEvalString(ep, "xlabel('Time (seconds)');");
engEvalString(ep, "ylabel('Position (meters)');");

mxDestroyArray(T);
engClose(ep);


宣告Matlab engine 以及會用到的變數
Engine *ep;
mxArray *T = NULL;


確定Matlab engine開啟成功
if (!(ep = engOpen("\0"))) {
fprintf(stderr, "\nCan't start MATLAB engine\n");
return EXIT_FAILURE;
}


建立Matlab的陣列,mxCreateDoubleMatrix(mwSize m, mwSize n, mxComplexity ComplexFlag);建立 m * n 的陣列,看是要 real(mxREAL) 或者 complex(mxCOMPLEX)
如果只是要一個單純的變數,mxCreateDoubleMatrix(1, 1, mxREAL)就可以了。
T = mxCreateDoubleMatrix(1, 10, mxREAL);


將數值複製給剛剛宣告的變數
memcpy((void *)mxGetPr(T), (void *)time, sizeof(time));


將變數T傳給Matlab的變數
第二個變數 "T" 是在 Matlab 所使用的變數
第三個變數 T 是在 C 裡面用的變數
engPutVariable(ep, "T", T);


執行 Matlab 的指令,第二個變數是要在 Matlab 要執行的指令
所以看想要在Matlab 做什麼動作,畫圖、數學運算,都可以在這邊進行。
engEvalString(ep, "Matlab 的指令");
engEvalString(ep, "D = .5.*(-9.8).*T.^2;");
engEvalString(ep, "plot(T,D);");
engEvalString(ep, "title('Position vs. Time for a falling object');");
engEvalString(ep, "xlabel('Time (seconds)');");
engEvalString(ep, "ylabel('Position (meters)');");


最後,清空記憶體以及關閉 engine
mxDestroyArray(T);
engClose(ep);


參考資料
Calling MATLAB software from C

(繼續閱讀...)

2008-10-15

Matlab 呼叫 C 寫成的 function

因為需要,所以有稍微研究了一下。而且,用C的速度比Matlab快太多了。
大致的流程為:
1、Programming in C
2、Using 「mex」 to compile the file to MEX-files
3、Use the function in Matlab

【設定compiler】
要在 Matlab 中呼叫 C 寫成的 function,首先要先設定 compiler。在 Matlab 下編譯 C/C++ 函式庫的指令為 mex ,但在使用 mex 之前,必須先設定編譯器的種類和參數。
在命令提示字元或者在Matlab下 "mex -setup"來選擇所需要的compiler。
會先問你要不要選擇已經安裝的compiler,接下來在選擇所需的compiler即可。


【撰寫 C/C++ 函式】
寫 C/C++ 程式並不難,一開始的困難點在於與 Matlab 的溝通介面。
Gateway Routine 是 Matlab與 C 的一個溝通介面,也是程式的進入點。Gateway Routine就像

void mexFunction(
int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
/* more C code ... */
}


要撰寫Gateway Routine要注意下面幾點:
1、Gateway Routine的命名
2、標頭檔
3、所需的參數
4、Mex-file的命名

Gateway Routine的命名
Gateway Routine的名稱必須為mexFunction。

標頭檔
在程式前端加入 #include "mex.h"

所需的參數
nlhs:呼叫函式時,等號左邊的變數數目,即 plhs 之個數。
plhs:呼叫函式時,等號左邊之變數本體。
nrhs:呼叫函式時,等號右邊的變數數目,即 prhs 之個數。
prhs:呼叫函式時,等號右邊之變數本體。
例如在Matlab的function
[M, I] = larger(A, B);
nlhs=nrhs=2
plhs[0] -> M ,plhs[1] -> I
prhs[0] -> A ,prhs[1] -> B

Mex-File 的命名
檔案名稱必須和在Matlab要呼叫的function 一樣。

最後,進行編譯 mex filename.c 或者 mex filename.cpp 就可以了。

[參考資料]
Building MEX-Files
Creating C Language MEX-Files


(繼續閱讀...)

2008-10-14

懷孕、小腹,傻傻分不清楚!!

搭火車自己經歷了一件很糗很白癡的事。

前幾天搭火車,可能剛好是連假,連電聯車也一堆人。一位先生帶著老婆,女生肚子有點微突,以為是懷孕了,所以要讓座給他們坐,那位先生就說:「不用不用,我們是大人,讓給旁邊的小朋友坐好了」。
這時我應該要發覺女生不是懷孕,我還笨笨的說,啊她不是懷孕嗎?這時先生就有點生氣的說「先生,她不是懷孕」
糗大了,只好一直跟他說不好意思。不知道那時候自己臉有沒有很紅,哈。

(繼續閱讀...)

2008-10-08

Matlab 記憶體問題

前一陣子要將Matlab語法改成C,結果遇到莫名的記憶體錯誤,迴圈跑的次數太多會掛掉,次數少一點就可以正確跑完,還以為是程式寫錯了,原來是記憶體的限制。應該算是windows XP的問題吧。


以為是程式寫錯,花了兩天在找bug,結果是記憶體的問題。

適用環境
MATLAB 7.0(R14) on 32bit CPU and Windows XP

MATLAB 在 Windows XP 所需要的記憶體超過 1.7GB 時,MATLAB會發生 "out of memory" 的 warning。不管你怎麼增加 physical memory 或 virtual memory 都無法改善這個問題。

其原因在於 Windows XP 限制最多配置 2GB virtual memory 給每一個 process。
所以 MATLAB 預設在 Windwos XP 上只能使用大約 1.5GB 的記憶體。

但是 MATLAB 7.0 之後,開始支援 3GB switch 開機選項。可以藉著修改 C:\boot.ini 的方式,使 Windows XP 對每一個 process 的 virtual memory 配額上限到達 3GB。

如何修改Windows XP 中的 Boot.ini 檔
http://support.microsoft.com/kb/289022
如果您要檢視和編輯 Boot.ini 檔:
1. 以滑鼠右鍵按一下 [我的電腦],再按 [內容]。
-或-
在 [控制台] 中啟動 [效能及維護] 工具,然後按一下 [系統]。
2. 在 [進階] 索引標籤的 [啟動及修復] 下,按一下 [設定]。
3. 在 [系統啟動] 下,按一下 [編輯]。

然後在最後面加上 /3GB
http://www.microsoft.com/whdc/system/platform/server/PAE/PAEmem.mspx

再重新開機即可。

接下來在 Matlab 下 feature('memstats'); 這個指令就可以看到 virtual memory 變成3G囉。


(繼續閱讀...)

2008-10-01

linux監測CPU和HD的溫度

在WINDOWS的環境下,習慣看到CPU和HD的溫度以及種種硬體資訊,就找了一下在LINUX下有什麼方法可以得到相同的資訊。

我是在NB上實做的

安裝 lm-sensors
安裝 hddtemp

$> sudo sensors-detect

最後會問要不要自動某些訊息加入檔案 -> YES
重新開機

$> sensors

就可以看到CPU的溫度了

再安裝 sensors-applet

在面版上點滑鼠右鍵->加入面版->hardware sensors monitor
這樣就可以在面版上顯示 CPU 和 HD 的溫度

只是不知道準不準
桌機應該還可以看到電壓、風扇轉速之類的

(繼續閱讀...)

從windows遠端控制linux

有兩台不同OS的電腦,卻要同時工作,可以從windows的環境下利用遠端桌面來控制LINUX的電腦,就不用椅子轉來轉去,鍵盤、滑鼠換來換去了。

1. 首先先從官方網站下載 xrdp 的原始碼
http://sourceforge.net/project/showfiles.php?group_id=112022

2. Xrdp 需要 pam 跟 openssl-dev 的支援,在 ubuntu 7.10 我們要安裝
libpam0g-dev , libcurl4-openssl-dev 這兩個套件.

sudo apt-get install libpam0g-dev
sudo apt-get install libcurl4-openssl-dev

3. 解開它並編譯

tar -zxf xrdp-0.4.0.tar.gz
cd xrdp-0.4.0
make
sudo make install

4. 設定好 ubuntu 本身的 remote desktop

系統->偏好設定->遠端桌面
允許其他使用者觀看您的桌面 -> 打勾
允許其他使用者控制您的桌面 -> 打勾
使用者需要輸入密碼 -> 輸入密碼

5. 然後啟動 xrdp:

sudo /usr/local/xrdp/xrdp_control.sh start

6. 利用windows 的 遠端桌面連線

module 選 console
輸入步驟4 的密碼

7. 開機自動執行

sudo vim /etc/rc.local
加上 /usr/local/xrdp/xrdp_control.sh start&


這樣就可以不用椅子轉來轉去
也不用拔插鍵盤滑鼠了
直接用windows連過去工作
如果有雙螢幕
一個螢幕windows 一個螢幕linux
方便多了

(繼續閱讀...)