最近在寫一些演算法的程式,經常要在一堆程式和檔案切換來切換去的,跑完數據還要開 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。

選擇 .NET component

將 M-file 加入,然後按 Build the project,編譯完成會產生 rmse.dll

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, 程式筆記 .Net, C, MATLAB, Programming
之前舊版中如果要開啟多個 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
軟體筆記 msn, Polygamy, Windows Live, WLM
隨著 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 的 repppoe.vbs 檔案



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



‧表示每 30 分鐘檢查一次連線狀況,可依需求修改,然後收工。
※ 備註:
之所以選擇 ping www.hinet.net 而不用 IP 是因為經實驗結果,若網卡有設定 Default gateway,則可能會因為 gateway response 影響連線判斷。
Other, Server, Windows, 程式筆記, 系統筆記 adsl, pppoe, Server, WSH, 自動連線
最近跟人家借了一台 Spyder2 Pro 螢幕校色器回來用,才發現沒校色真的是差很大,尤其是小U (MSI U100) 整個色溫根本是偏掉,所以在這裡提供校色完的 .icm 檔供大家參考。
在 XP 底下可以用 LUT Manager 來載入校色檔,教學。
Vista/7 用系統內建的色彩管理來載入校色檔即可。
MSI U100 校色檔下載
硬體筆記 LCD, MSI, Spyder, U100, 校色
上個月初 M$ 發佈了 Windows 7 RC 版本,立刻引起眾多的測試狂人搶先試用,而且頗受好評。當然我也加入測試行列囉!除了 RC 的 7100 版本,網路上很快又陸續流出了 7127、7137...版本,但很詭異的是各版本都有著不同的 bug、亂碼,有些明明舊版正常,新版卻冒出來,所以我想這可能是 M$ 保護未來零售版的小計謀吧!畢竟 Windows 7 目前的完成度已經相當高了(說穿了就是 Vista 的優化加強版)。
在 7137 版有個很麻煩的問題,就是沒辦法記住網路帳號密碼,所以每次開機都要重打一次(扯),目前的解決方案是利用指令的方式呼叫 rasdial 來連線。
command:
rasdial 寬頻連線 [帳號] [密碼]
其中"寬頻連線"就是原先建立的連線名稱,視個人情況修改。
至於要讓開機自動連線,就是把上述指令寫成 vbs/bat 並加入「啟動」,或者利用「工作排程器」來達到目的。
Windows, 系統筆記 adsl, pppoe, Windows 7, 網路, 連線
近期迴響