2009年7月21日 星期二
2009年1月6日 星期二
2008年9月13日 星期六
浮點數轉換器
有需要考計算機組織的也有可能會用到...:P
其它的 IEEE-754 Converter:2008年9月4日 星期四
2008年8月31日 星期日
不需安裝 PDF 檢視軟體,線上觀看 PDF 檔
PDFMENOT 提供了線上觀看 PDF 的服務。可讓使用者經過 URL 或是上傳的方式直接線上觀看 PDF 內容。
除此之外,PDFMENOT 還提供了 FF 的擴充套件以及 Blogger 的 script 等工具。詳情參考這裡。
2008年8月14日 星期四
2008年8月12日 星期二
2008年8月7日 星期四
Mloovi RSS&Blog 翻譯服務
比如下面是 TechCrunch 的繁體中文 feed
http://mloovi.com/r/00885942775b267049eee20daf09d9d0
2008年8月5日 星期二
由 Greasemonkey script 直接產生 Firefox extension
參考這個線上工具。將 script 檔
// ==UserScript==
之後的所有原始碼直接貼上,即可產生 xpi 檔。==UserScript== 區塊中請把空白欄位去除。比如
// @include http://www.example.idv/* // @exclude ^^^^^^^^^^^^^ 移除此欄
2008年7月31日 星期四
2008年7月27日 星期日
線上影音轉檔服務
現在越來越多的網站提供多元化的服務,也許哪天真的硬碟裡甚麼軟體都不用安裝,只要裝個網路卡驅動,加上瀏覽器就好了。
Movavi Online Video Converter 就提供了免費的線上合併、轉檔的服務,支援相當多的格式,並能直接將轉檔合併好的結果寄送到指定的 EMail 信箱,相當的方便
2008年7月26日 星期六
不要在伺服器上儲存圖檔了
var src="<a href="data:image/png,%89PNG%0D%0A%1A%0A%0DIHDR %10%08%06%1F%F3%FFa%02%A4IDAT8%8D%A5RMkSA%14%3Do%E6%E5%7D%A4I %8CIj%954j%2B%ADE%B1-%B8%90%AA%20%A2%B8%90%20%8A%8B%82hWn%0AU %04%C5b%DDt%A5%9B%FE%02%B1%08BtQp%A1%2B7B%09%8A%18%85%12%84BA lMJcb%9A%F7%F2%F1%5E%DE%D7%8C%8B%B4%86%D0%EE%1C%18%98%7B9%9Cs %E6%DE%23p%CE%F1%3FG%DC%B5%BB0%28%C1%2C%9D%E5%9C%F7%0B%02L%10 %FA%197%CB%3Fv%83%0A%1D%0E%DE_%26%CE%EA%C7%7B%96%D5%F3%98%85O F%B8%BC%1F%E0.%88%B1%02Z%FD%B6%A8F%D8%5Dab3%BB%2B%01%7Bw%81%D 8%3F3%AF%EC%E0%A5qq%28%09%A2%86A%A3%87a%D6*%F0%D5%F2%60%D5%02 %BC%EF%CF%1A%FE%60%E9%8Ax%5B%FB%B0M%40%B6%1FN%EE%EB%03%5B%19% 1B%97%8E%9E%83%E4%AFC%8A%8A%F0%25FQ%A6a%C8A%1DRT%01%3D%3E%D1% D5%D4%D4%05w%BE%BB%BB%83%C0%99%EFU%1D%2B0%A3%0C%9D%82%1C%D2%2 1%8A%1A%08%ABoA%18%08%D7%E0%93u%A8%FB%1C8%13q%1B%F6%FD%0E%02% D6%AC%9D%27%D1%81%3D%BE%80%01%C1%D1%5B%03%DCF%0B%C1%19%60i%80 %A5%810%1Dj%7F%02%9E%A7%5C%ED%D8%02s1%E0%8B%86%218U%60%7B%A6% 96%DE%D2w%9B%40%23%0F8%3A%40%7C%A0r%0Fh%28r%04%F5%1C%10Hl%AD% END%AEB%60%82</a>直接利用
var icon=document.createElement('img');
icon.src=src;
即可(注意 IE 不支援)
2008年7月7日 星期一
網頁時光機
- 1998 年的東海大學首頁:那時候的我才剛進大學。HTML 4.0 才推出不久,還記得暑假的時候拿了一本 HTML 的語法書試著用記事本在章魚網(1998)上製作第一個個人網站;現在連帳號密碼都忘了...
- 奇摩站 kimo:那時候必逛的奇摩...現在已經變成 Yahoo 奇摩了
- 2000 年的史萊姆的第一個家:大學時另一個必逛的軟體下載網站;到現在還持續存活,而且,版面也都維持一樣,真是「很厲害」(2007 年的史萊姆和現在的史萊姆)
- 1997 年的中央研究院
- 1996 年的清華大學
2006年2月9日 星期四
Bio NER Tagger
Web Service
Web Service 所建立的資料並不是全部都能在網路上傳遞,因此使用 Web Service 實應注意。以下是在 .Net 中常用且可在網路上傳遞的資料型別:- 基本資料型別(bool、string、DataTime、int 以及所有數值類型的資料型別)
- 列舉資料型別(透過 enum 所定義的資料型別)
- 以 XML 結構描述的資料
- DataSet 物件(DataSet 物件是利用 XML 來描述的因此可以傳遞)
- 上述資料型別所組成的陣列
Web Service 物件的方法必須在程式碼前加上:
- [WebMethod]
- public
.NET 呼叫(啟動)外部程式
如何利用 C# 執行外部程式
System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.EnableRaisingEvents=false; proc.StartInfo.FileName="filename"; // 檔案名稱 proc.Start();
除了使用 System.Diagnostics.Process 以外,傳統的 Shell 方法也可以,不過必須注意存在的風險:
一般的命令提示列指令大多會存取系統資源,要使用 Web 應用程式呼叫命令列程式,可能會因為 Web 程式權限不足無法無法執行,也可能因為開放權限而造成安全漏洞。
這問題有兩種解法:
- 將呼叫命令列的程式獨立寫成元件 將元件加入 COM+,若是 Windows 2003 可以設定成以 Windows service 方式執行。在 COM+ 上設定 Web 應用程式的存取權。
- Web Service 將此一 Web services 獨立一個應用程式集區,並只提供本機呼叫,授與一個較高的權限執行系統命令。
重新導向輸出
當一個程式啟動時,作業系統會相對應的產生一個行程,而我們可以經由 process ID 和行程名稱來辨識該行程。
在 .NET 中,Process 元件可以用來產生、刪除、暫停一個新的行程;我們也可以經由下面的屬性來取的相關的資訊:
- NonpagedSystemMemorySize:
- PagedMemorySize:
- PagedSystemMemorySize:
- PeakPagedMemorySize:
- PeakVirtualMemorySize:
- PeakWorkingSet
- PriorityClass
- PrivateMemorySize
- PrivilegedProcessorTime
Process 元件中,包含了靜態和實例方法。比較常用的靜態方法如:
- EnterDebugMode:讓該行程進入除錯模式
- GetCurrentProcess:回傳目前正在執行的行程
- GetProcessById:回傳指定的行程 ID 參考
- GetProcesses:回傳目前機器上所有執行的行程所組成的陣列
- Start:啟動一個新行程
Process 類別方法:
- Close:釋放 Process 元件所使用的相關資源
- Kill:終止正在執行的行程
- CloseMainWindow:藉由傳送訊息到行程所在的主視窗來結束該行程
Process 類別屬性:
- Responding:取得目前行程的狀態;true 表示還在執行中,false 代表無回應
- StandardError:取得行程的標準錯誤輸出的檔案描述子(file descriptor)好將其重新導向到 Stream Reader,以檔案的方式來讀取之
- StandardInput:取得行程的標準輸入的檔案描述子(file descriptor)好將其重導向,使得我們寫入資料到行程就好像寫資料到 StremWriter 一樣
- StandardOutput:類似標準錯誤輸出,但是用來讀取行程的標準輸出
- StartInfo:在行程啟動前,傳遞初始化參數給行程的屬性;若是在行程啟動後才改變行程的參數,將不會有任何影響
要重新導向標準的輸出入,首先必須初始化一個 ProcessStartInfo 類別,並以我們想要啟動的應用程式名稱作為該類別的建構子引數,並設定一些參數,最後把它傳遞給 Process 實例:
ProcessStartInfo psI = new ProcessStartInfo("cmd"); psI.UseShellExecute 屬性必須設定為 false,以便重新導向 StandardInput 等其它標準輸出入。所以,下面的這些屬性
psI.RedirectStandardInput psI.RedirectStandardOutput psI.RedirectStandardError
都被設定為 true。
為了避免顯示命令列提示字元那個惱人的視窗,我們也將 psI.CreateNoWindow 屬性設定為 true,因此 cmd 將不會顯示視窗。最後,設定 p.StartInfo 為剛剛建立的 ProcessStartInfo 實例。
為了能夠擷取 p.StandardInput、p.StandardOutput 和 p.StandardError,我們必須取得檔案描述子(StreamReaders 和 StreamWriter 類別),來讀取 StandardOutput、StandardError 和寫入 StandardInput;就跟我們讀取或寫入檔案一樣的方式。當我們關閉 p.StandardInput 檔案描述子時,cmd 行程也會被終止。
最後,我們讀取 p.StandardOutput 和 p.StandardError 檔案描述子的內容到 text box。
下面是整個完整範例:
private void start()
{
Process p = new Process();
StreamWriter input;
StreamReader output;
StreamReader err;
ProcessStartInfo psI = new ProcessStartInfo("cmd");
psI.UseShellExecute = false;
psI.RedirectStandardInput = true;
psI.RedirectStandardOutput = true;
psI.RedirectStandardError = true;
psI.CreateNoWindow = true;
p.StartInfo = psI;
p.Start();
input = p.StandardInput;
output = p.StandardOutput;
err = p.StandardError;
input.AutoFlush = true;
if (tbComm.Text != "")
input.WriteLine(tbComm.Text);
else
//execute default command
input.WriteLine("dir \\");
input.Close();
textBox1.Text = output.ReadToEnd();
textBox1.Text += err.ReadToEnd();
}
C# Thread
.NET Framework 在 System.Threading 命名空間中定義了一些跟執行緒相關的類別。下面我們示範如何在 C# 中產生一個執行緒:
步驟一:建立一個 System.Threading.Thread 物件
建立一個 System.Threading.Thread 物件會在 .NET 環境中產生一個 managed 執行緒。Thread 類別只有一個建構式,其接受一個 ThreadStart delegate 做為參數。ThreadStart delegate 是一個回呼方法,當我們啟動該執行緒時,會呼叫該方法。
步驟二:建立回呼函式
該方法將會是我們新產生的執行緒的起始點。它可能是一個類別物件的實例方法(instance function)或是一個靜態方法。
若是該方法為實例方法,我們必須在建立 ThreadStart delegate 前,建立該類別物件;對於靜態方法而言,我們只需直接使用方法名稱來初始化 delegate。另外要注意的是,回呼方法必須以 void 來當作其回傳類型和參數;因為 ThreadStart delegate 函數的宣告為如此!
步驟三:啟動執行緒
我們可以使用 Thread 類別的 Start 方法來啟動新建立的執行緒。這個方法是非同步的方法,該方法會要求作業系統來啟動建立的執行緒。
例子
// 執行緒的回呼方法
public static void MyCallbackFunction()
{
while (true)
{
System.Console.WriteLine("Hey!, My Thread Function Running");
………
}
}
public static void Main(String []args)
{
// 建立執行緒物件
Thread MyThread = new Thread(new ThreadStart
(MyCallbackFunction));
MyThread.Start()
……
}
刪除執行緒
藉由呼叫執行緒物件的 Abort 方法,我們可以刪除一個執行緒。呼叫 Abort 方法會造成目前的執行緒拋出 ThreadAbortException 例外,並結束執行。
MyThread.Abort();
暫停和恢復執行緒
我們可以用 Suspend 方法來暫停一個正在執行中的執行緒,或從另一個執行緒中使用 Resume 方法來恢復一個執行緒的執行。
MyThread.Suspend() // 暫停執行緒執行 MyThread.Resume() // 恢復執行緒執行
執行緒狀態
執行緒可能處於下列幾種狀態:
- Unstarted:執行緒已經被建立於 Common Language Runtime 中,但是還未啟動
- Running:執行緒的 Start 方法被呼叫後,即進入此狀態
- WaitSleepJoin:當呼叫執行緒的 wait、Sleep 或是 Join 方法時,會進入此狀態
- Suspended:當 Suspend 方法被呼叫時,會進入此狀態
- Stopped:執行緒終止(不論是正常終止或是 Abort)
藉由使用 Thread 的 ThreadState 屬性我們可以得知目前執行緒所處的狀態。
執行緒優先權
Thread 類別的 ThreadPriority 屬性用來設定該執行緒的優先權。可用的值包括:Lowest、BelowNormal、Normal、AboveNormal、Highest。預設值為 Normal。
Cross compile
因為從 GENIA 中下載的 geniatagger 只有 Linux 版本,所以我們必須使用 cygwin 來將它編譯成為可以在 windows 上使用的版本。
要做 cross compile 很簡單,只要在安裝 cygwin 時記得安裝 g++、gcc 以及 vim (可以不安裝)後,就可以在 cygwin 的視窗中下達 gcc/g++ 來做編譯。要注意的是,若是要將編譯好的 exe 檔在其它的電腦上執行,必須要複製 cygwin1.dll 檔。
