顯示具有 Web Services 標籤的文章。 顯示所有文章
顯示具有 Web Services 標籤的文章。 顯示所有文章

2009年7月21日 星期二

moFuse: 快速建立 mobile device 專用的 mobile site

mofuse 只要簡單的幾個步驟就可以將部落格轉換成 mobile site。 這個網址是我的 blogger 經由 mofuse 轉換後的結果。

2009年1月6日 星期二

2008年9月13日 星期六

替相片改裝吧...

又是一個有趣的線上相片改裝服務:PhotoFunia,版型也很多。免費幫三芝小豬打個廣告: Image Hosted by ImageShack.us

浮點數轉換器

將十進位數字表示法轉換為浮點數表示:IEEE-754 Floating-Point Conversion。可藉由這個線上工具瞭解電腦上使用的浮點數表示法。

有需要考計算機組織的也有可能會用到...:P

其它的 IEEE-754 Converter:

2008年9月4日 星期四

2008年8月31日 星期日

不需安裝 PDF 檢視軟體,線上觀看 PDF 檔

PDFMENOT 提供了線上觀看 PDF 的服務。可讓使用者經過 URL 或是上傳的方式直接線上觀看 PDF 內容。

除此之外,PDFMENOT 還提供了 FF 的擴充套件以及 Blogger 的 script 等工具。詳情參考這裡。

2008年8月14日 星期四

咕咕克拉克---線上鬧鐘

需要設定時間提醒你嗎?...Kuku Klok 提供線上鬧鈴的服務。

我是大明星

我是大明星網站提供了將使用者上傳的相片,依據版型輸出成雜誌的服務。

參考下圖為其輸出的範本(恩,相片是誰我也不清楚...:P):

驗證 JavaScript 程式:JSLint

JSLint 提供了線上驗證 JavaScript 語法的服務。

2008年8月12日 星期二

幕末古寫真;走回老式相片

幕末古寫真提供了線上將現代相片轉換成老式相片風格的有趣服務。

參考右圖是旗山製冰廠拍的彩色相片經由轉換後的結果。

2008年8月7日 星期四

Mloovi RSS&Blog 翻譯服務

藉由 Mloovi 提供的服務,來訂閱國外網站的 RSS feed,可以直接將其內文翻譯成自訂的語言。

比如下面是 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日 星期四

有時上網;電腦用一用常常會忘記時間的流逝。

KuKu Klock 提供了線上鬧鐘的服務,操作相當簡單,易用。

2008年7月27日 星期日

線上影音轉檔服務

現在越來越多的網站提供多元化的服務,也許哪天真的硬碟裡甚麼軟體都不用安裝,只要裝個網路卡驅動,加上瀏覽器就好了。

Movavi Online Video Converter 就提供了免費的線上合併、轉檔的服務,支援相當多的格式,並能直接將轉檔合併好的結果寄送到指定的 EMail 信箱,相當的方便

2008年7月26日 星期六

不要在伺服器上儲存圖檔了

利用 The data: URI kitchen 吧。 產生的字串類似:
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日 星期一

網頁時光機

這個網站讓我們可以重溫以前的舊網頁...

下面都要選用「Big5」編碼文字才能正常顯示

人都是念舊的...看看這些東西喚起一些遺忘的回憶

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 檔。