最近在寫一些演算法的程式,經常要在一堆程式和檔案切換來切換去的,跑完數據還要開 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
隨著 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, 自動連線
Drag & Drop(拖放) 效果若是應用得當可以讓 UI 操作更直覺簡單,目前最常見的大概就是對項目作排序,或是像購物車將物體從某區塊移到另一區塊。
網路上雖然有很多 Drag & Drop 的範例,但有些過於複雜或是不夠完整,前陣子為了交作業嘗試用 jQuery+jQuery UI 做了一個簡單的 Demo,果然快速、簡潔、流暢,不得不再次向大家推薦 jQuery 啊!
Demo 網址:http://blog.linym.net/demo/jquery/jquery_DragDrop.html

Ajax, 程式筆記, 網頁設計
Drag and Drop, JavaScript, jQuery, UI
本站顯示程式碼是用「SyntaxHighlighter」,有人將它寫成 WP plugin,使用上非常方便,不過 SyntaxHighlighter 預設的呼叫語法是用
<pre name="code" class="html">......</pre>
由於 W3C 規範中 pre tag 是沒有 name 屬性的,所以鐵定要跟驗證貼紙說 bye bye,如果真的很在意的話可以這樣修改:
1. 修改 syntaxhighlighter.php
找到
<pre name="code"
改成
<pre title="code"
2. 修改 files/shCore.js
找到
tags[i].getAttribute('name')
改成
tags[i].getAttribute('title')
以 title 替換 name 屬性,這樣就能通過驗證了。
參考文章:Google SyntaxHighlighter - workaround for XHTML validation issue
PHP, 程式筆記, 網頁設計
SyntaxHighlighter, W3C, wordpress
Apache 有個非常強大好用的 mod_rewrite 模組,可以實現 URL Rewriting,運用在網站或部落格對 SEO 會有幫助。WP 的固定網址也是這類的運用,一般架設在 Apache 不會有什麼問題,只要有啟用 mod_rewrite 就 OK,不過如果是裝在 IIS 上,那就會看到很醜的 /index.php/aaa/bbb/123 這樣的網址,本篇就是教大家如何讓 IIS 真正擁有 rewrite 的功能。
首先必須安裝 for IIS 的擴充,微軟有針對 IIS7 開發一套 URL Rewrite Module,不過 IIS6 就只能用別的,測試很多套最後選擇 ISAPI_Rewrite,因為它幾乎相容 .htaccess、mod_rewrite 語法,也比較穩定,ISAPI_Rewrite 有分要錢的 full 版和免費的 Lite 版,差異請看這篇,目前選 Lite 就夠用了。
Step 1
先設定 WordPress ,進入後台選擇想要的固定網址格式,如「/%year%/%monthnum%/%day%/%postname%.html」,記得把前面 index.php 拿掉。

Step 2
安裝好 ISAPI_Rewrite 3 Lite,編輯安裝目錄下的 httpd.conf 設定檔,內容範例:
# 假設WP網址為 http://aaa.domain.com/blog/
RewriteCond %{HTTP_HOST} ^aaa\.domain\.com$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/blog/ /blog/index\.php [L]
# 假設WP網址為 http://bbb.domain.com
RewriteCond %{HTTP_HOST} ^bbb\.domain\.com$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index\.php [L]
Step 3
基本上完成前兩個動作固定網址就可以運作了,但是如果網址帶有中文就會發生 404 錯誤,原因可以參考這篇,修改 wp-includes/classes.php
// 找到
$pathinfo = $_SERVER['PATH_INFO'];
// 改成
$pathinfo = mb_convert_encoding($_SERVER['PATH_INFO'], 'UTF-8', 'BIG5');
// 找到
$req_uri = $_SERVER['REQUEST_URI'];
// 改成
$req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], 'UTF-8', 'BIG5');
這樣就正常了。註:PHP 必須啟用 mbstring。
Server, Windows, 程式筆記, 系統筆記
IIS, mod_rewrite, Permalinks, SEO, wordpress, 固定網址
近期迴響