使用 C# 呼叫 MATLAB Function

九月 10th, 2009
1,737 views 1 comment

最近在寫一些演算法的程式,經常要在一堆程式和檔案切換來切換去的,跑完數據還要開 MATLAB 畫圖,一直重複這些動作實在是很麻煩,所以把它寫成 Windows Form 用滑鼠點一點就 OK 了,其中繪圖部份就要利用 C# 去 call MATLAB 來作,查了許多資料,發現有很多種方法,但比較簡單方便的應該是用 MATLAB Builder NE for .NET 將 MATLAB 程式編譯成 .NET 可執行的元件。

1. 首先準備好你要 compiler 的 M-file,測試的 M-file 如下(由檔案讀取 x, y 數據曲線圖):


function rmse(file)

data = load(file);
x = data(:,1);
y = data(:,2);

plot(x,y,'LineWidth',1);

xlabel('Iteration');
ylabel('RMS error');

2. 開啟 MATLAB 並在 command windows 輸入:deploytool
新建一個 project,名稱為 rmse。
New Project
選擇 .NET component
.NET component
將 M-file 加入,然後按 Build the project,編譯完成會產生 rmse.dll
Add file

3. 將 .dll 加入 Visual Studio 參考(Reference)
在方案總管右鍵選「加入參考」>「瀏覽」,將剛剛編譯完成的 .dll 以及 MATLAB 安裝目錄底下的 toolbox\dotnetbuilder\bin\win32\v2.0\MWArray.dll 加入。

4. 加入 Namespace
using MathWorks.MATLAB.NET.Arrays;
using rmse;

5. 使用方式
Rmse demo = new Rmse();
MWArray fileName = @"rmse.txt";
demo.rmse(fileName);

demo 範例原始碼下載

※ 如果想在沒安裝 MATLAB 的電腦上執行,需安裝 MATLAB Compiler Runtime (MCR),檔案在安裝目錄的 toolbox\compiler\deploy\win32\MCRInstaller.exe,大小約 150MB

Other, 程式筆記 , , ,

Windows Live Messenger 多重開啟(Polygamy)

八月 10th, 2009
1,292 views 2 comments

之前舊版中如果要開啟多個 MSN 就必須去修改主程式才行,但是到了 WLM 2009 已經不必囉,只要從登錄檔下手即可:

1. 執行 regedit (系統管理員身份)
2. 找到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Live\Messenger
3. 右鍵新增一個 DWORD 值,名稱為 MultipleInstances
4. 將 MultipleInstances 的值修改為 1
5. 關閉 regedit

或是將底下內容存成 .reg 檔,點兩下匯入即可。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Live\Messenger]
"MultipleInstances"=dword:00000001

參考資料:How To Enable Polygamy In Windows Live Messenger

軟體筆記 , , ,

Windows PPPoE 自動重撥 Script

七月 25th, 2009
1,653 views 1 comment

隨著 ADSL 及經濟型光纖網路的普及,有許多人都會在自家架設 server 主機,但如果沒有用分享器而是直接透過 PPPoE 撥接上網的,就很怕網路突然斷線(如忘記繳錢被停掉),雖然說 Windows 內建的連線程式有一個「斷線後重新撥號」的選項,但其實並不好用。比較保險的作法是系統定期檢查對外連線的狀況(ping),一旦發現斷線就自動重新連線。

在網路上可以找到很多這種作法的 Linux 版本,如「Debian Linux: ADSL PPPoE 自動重撥 Script」,但相對 Windows 的討論卻很少,所以就自己寫了一個重撥的 WSH(Windows Script Host),搭配工作排程就可以達到目的。
※ 本方法適用於 XP 以後之 Windows。

Step 1:將下列程式存為 repppoe.vbs,修改連線資訊並放置在安全的地方


DIALNAME = "寬頻連線"              '連線名稱
DIALUSER = "12345678@ip.hinet.net" '連線帳號
DIALPASS = "xxxxxxxx"              '連線密碼

Set WshShell = CreateObject("WScript.Shell")
RetCode = WshShell.Run("ping www.hinet.net", 0, true)
If RetCode <> 0 Then
	WshShell.Run "rasdial " & DIALNAME & " /DISCONNECT", 0, true
	WScript.Sleep(3000)
	WshShell.Run "rasdial " & DIALNAME & " " & DIALUSER & " " & DIALPASS, 0
End If

Step 2:設定 Windows 工作排程。(控制台->排定的工作->新增排定的工作)

1
‧選擇步驟 1 的 repppoe.vbs 檔案

2

3

4
‧輸入具有 Administrator 權限的使用者及密碼

5

6

7
‧表示每 30 分鐘檢查一次連線狀況,可依需求修改,然後收工。

※ 備註:
之所以選擇 ping www.hinet.net 而不用 IP 是因為經實驗結果,若網卡有設定 Default gateway,則可能會因為 gateway response 影響連線判斷。

Other, Server, Windows, 程式筆記, 系統筆記 , , , ,

MSI U100 螢幕色彩校正檔 (.icm)

六月 14th, 2009
2,733 views 1 comment

最近跟人家借了一台 Spyder2 Pro 螢幕校色器回來用,才發現沒校色真的是差很大,尤其是小U (MSI U100) 整個色溫根本是偏掉,所以在這裡提供校色完的 .icm 檔供大家參考。

在 XP 底下可以用 LUT Manager 來載入校色檔,教學
Vista/7 用系統內建的色彩管理來載入校色檔即可。

MSI U100 校色檔下載

硬體筆記 , , , ,

Windows 7 記住帳密及開機自動連線

六月 8th, 2009
3,763 views No comments

上個月初 M$ 發佈了 Windows 7 RC 版本,立刻引起眾多的測試狂人搶先試用,而且頗受好評。當然我也加入測試行列囉!除了 RC 的 7100 版本,網路上很快又陸續流出了 7127、7137...版本,但很詭異的是各版本都有著不同的 bug、亂碼,有些明明舊版正常,新版卻冒出來,所以我想這可能是 M$ 保護未來零售版的小計謀吧!畢竟 Windows 7 目前的完成度已經相當高了(說穿了就是 Vista 的優化加強版)。

在 7137 版有個很麻煩的問題,就是沒辦法記住網路帳號密碼,所以每次開機都要重打一次(扯),目前的解決方案是利用指令的方式呼叫 rasdial 來連線。

command:

rasdial 寬頻連線 [帳號] [密碼]

其中"寬頻連線"就是原先建立的連線名稱,視個人情況修改。

至於要讓開機自動連線,就是把上述指令寫成 vbs/bat 並加入「啟動」,或者利用「工作排程器」來達到目的。

Windows, 系統筆記 , , , ,