星期一, 12月 24, 2007

JavaScript讀XML

//1.讀XML
function loadXML(xmlFilePath)
{        
if(window.ActiveXObject)// code for IE
{
xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
xmlDoc.async = false;
xmlDoc.load(xmlFilePath);
}else if (document.implementation&&document.implementation.createDocument)// code for Mozilla, etc.
{
xmlDoc = document.implementation.createDocument('', '', null);
xmlDoc.load(xmlFilePath);
}
else
{
alert('您的瀏覽器不支持xml文件讀取,於是本頁面禁止您的操作,推薦使用IE5.0以上可以解決此問題!');
return null;
}
}


//2.瀏覽XML
//取得node方法
//Method 1 利用tag name
//1.1 取得陣列
 var Area = xmlDoc.getElementsByTagName("test"); 
 for (var i = 0 ; i < Area.length ; i++){
   var node = Area[i].firstChild.nodeValue; 
 }


//Method 2 XPATH
xmlDoc.selectSingleNode("test").text;  //從根找起
 xmlDoc.selectSingleNode("//test").text;  //回傳第一個找到的



//3.存取node (ex. lalala)
xmlNode.xml; // lalala
xmlNode.text; // lalala
xmlNode.getAttribute('what'); //ok

//4.讀子節點或父節點
xmlDoc.childNodes;
xmlDoc.parentNode;

//5.新增node

//6.儲存
xmlDoc.save("xxxx.xml");

星期二, 12月 18, 2007

XPath指定節點

原本利用getElementById來取得指定的節點
才發現要用DTD指名該節點的欄位為ID型態
MSDN的說明:雖然 ID 型別的屬性可以在 XSD 結構描述或 DTD 中定義,但是這一版的產品只支援在 DTD 中定義者。除非在 DTD 中定義,否則名稱為 "ID" 的屬性並不是 ID 型別。不知道屬性是否為 ID 型別的實作,應該會傳回 Null 參照 (即 Visual Basic 中的 Nothing)。

後來很辛苦的一步步建好
才發現id得存文字型態...會寫這句當然是因為id用數字存
後來銀光大大利用xpath指到屬性...也可以抓到了
XmlNode aaa = doc.SelectSingleNode("//Area [@ID='9']");

星期五, 11月 23, 2007

為網頁上多個元件加入相同的事件處理 - 鍵盤

加入事件handler (兩種方法 擇一即可)

//為input element加入事件handler
HtmlElementCollection tt = divDeviceChoosing.GetElementsByTagName("input");
foreach (HtmlElement a in tt)
{
//Method 1: AttachEventHandler 據說利用+=不會覆蓋父物件的事件(i++與i=1)
a.AttachEventHandler("onclick", new EventHandler(Device_Click));

//Method 2: +=
a.Click +=new HtmlElementEventHandler(teachAni_Click);
}

//事件處理 (兩種方法 擇一即可)
private void teachAni_Click(object sender, EventArgs e)
{
//Method 1: 最快最簡單 (不過要注意事件handl要用HtmlElementEventHandler,而不是EventHandler,不然sender好像會null)
HtmlElement buster = (HtmlElement)sender;
choosing(buster.Id);

//Method 2: 剛被"激化"的ActiveElement
HtmlElement buster = divDeviceChoosing.Document.ActiveElement;
MessageBox.Show(buster.Id);
//int number = int.Parse(buster.Document.ActiveElement.GetAttribute("value"));
String MacAddr = buster.Document.ActiveElement.Id;
}


**動態加入元件及事件處理**

動態加入有兩種
1.利用HtmlDocument.CreateElement
注意:此方法可work,還沒有找到方法移除element ,法二就可以了

//建立一個input的html element
HtmlElement imgDevice = divDeviceChoosing.Document.CreateElement("input");
...
//加入事件處理
imgDevice.AttachEventHandler("onclick", new EventHandler(teachAni_Click));
//再接入某位置
divDeviceChoosing.InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd, imgDevice);

2.利用innerHtml

//加入多個可利用樣版
for (;;;)
{
string Butstr = "";
//套文字
string OutStr=OutStr.Replace("##id##",id);
}
//加入某段div裡
div.InnerHtml = OutStr;
//事件處理同上

星期三, 11月 14, 2007

JavaScript 與 Flash 的通訊範例

JavaScript 與 Flash 的通訊範例

有3種不同的方式
1.JavaScript 對 Flash 的通訊
2.Flash 對 JavaScript 的通訊
*主要通過fscommand 指令
3.Flash 對 Flash 的通訊

另外還有javascirpt call c# function

星期二, 11月 13, 2007

javascript call c# function

1.c#裡的function
public void test()
{
Messagebox.show(""Are you shit on me?");
}

2.加入com
在namespace後的第一行
比public class 更之前 加入 [System.Runtime.InteropServices.ComVisibleAttribute(true)]
ex.
namespace ezLa
{
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public partial class ezLa : Form
...
}


2.為webBrowser加入指定物件
webBrowser1.ObjectForScripting = this; //寫在建構子

3.在html裡加入要觸發
ex.利用button實作
在onclick="window.external.test()" 就ok啦

星期一, 11月 12, 2007

偵測影片是否播完

偵測影片是否播完
=>flv可利用obj.duration
=>swf,載入時去偵測 _totalframes

在第幾秒處設定觸發點
=>addCuePoint

聲音的現在放的毫秒數
=>soundid.duration

C#書籍

Windows Forms Programming with C#(中譯:實作手冊-使用c#),Erik Brown

星期三, 11月 07, 2007

WebBrowser 呼叫javascript

1.win form 呼叫javascript
方法:public Object InvokeScript (string scriptName)
實例:webBrowser1.Document.InvokeScript("Method"); //不用加括號,也可加啦

由於內嵌flv player的html無法用c#來設定style="display: none"
不過可使用visibility使之隱藏
但用display才是王道...因為visibility會留空白

而直接利用網頁上的javascipt卻可以讓display正常隱藏
因此得利用webbrowser呼叫javascript...


2.傳參數給javascript
方法:public Object InvokeScript (string scriptName, Object[] args)
範例:MSDN上的例子
private void InvokeTestMethod(String name, String address)
{
if (webBrowser1.Document != null)
{
Object[] objArray = new Object[2];
objArray[0] = (Object)name;
objArray[1] = (Object)address;
webBrowser1.Document.InvokeScript("test", objArray);
}
}

Javascript

<-HTML>
<-SCRIPT>
function test(name, address) { //自動變成兩個參數
window.alert("Name is " + name + "; address is " + address);
}
<-/SCRIPT>
<-/HTML>


搞半天,原來不是直接寫在裡面scriptName的括號裡
是要在後面加傳參數array,而且參數會自動依序拆成一個個的參數

3.Thread呼叫javascript
跨執行緒作業無效的呼叫法,寫法如下,簡化不寫參數
private void InvokeTestMethod()
{
if (wbContent.InvokeRequired)
{
wbContent.Invoke(new MethodInvoker(InvokeTestMethod)); //delgete型態,傳Method Name
else
{
webBrowser1.Document.InvokeScript("test");
}
}



下次研究看怎麼動態增加javascript進去


**備註**
呼叫javascript時,有時會因web page尚未讀完,所以呼叫javascript function會沒有反應
最好是等page loaded通知webbrowser,webbrowser再去call javascript

星期三, 10月 31, 2007

WebBrowser讀取frame

HtmlWindow currentWindow = WebBrowser1.Document.Window;

1.get frame by id
HtmlWindow frame = currentWindow.Frames["aaa"]

2.get frame one by one
foreach (HtmlWindow frame in currentWindow.Frames)
{
//frame即為所求
}

*有n個frames的會跳n次completed+本身的html page 共n+1次

資源:HtmlWindow.Document 屬性

星期二, 10月 30, 2007

div隱藏技

div的visibility可以隱藏本身,但會變成一個空格
用法:
<[div] id="test" style="visibility: none;">
屬性選項:

visibility: hidden;
visibility: visible;
Javascript寫法
document.getElementById("test").style.visibility="hidden";
document.getElementById("
test").style.visibility="visible";

利用display可以讓後面的物件往上拉
用法:style="display: none;"
屬性選項:
none;//隱藏
空白即為顯示
javascript寫法
  document.getElementById("test").style.display="none";//隱藏
  document.getElementById("test").style.display="";//顯示

星期四, 10月 25, 2007

lapasta 義麵屋

http://www.lapasta.com.tw/

吃過最好吃的義大利麵了吧
而且很划算 平均200多塊錢一盤
份量很多 而且加麵不加價

原本在天母中山北路
後來搬到...天母新光那兒...

取得運算過的static變數

好難形容
總之就是不new一個class
而要直接使用ClassName.attribute
public class a
{
public static string aString="hi";

static
{
aString += " this is how it works";
}
}

ex. a.aString; ==> hi this is how it works

星期二, 10月 23, 2007

使用介面設計資源

書籍
1."Don't make me think", Steve Krug (有中文版)
2."Information Architecture for the World Wide Web", Louis Rosenfeld and Peter Morville, O'Reilly (有中文版)
比較理論,教科書
3."Designing Interfaces", Jenifer Tidwell, O'Reilly, 中文:操作介面設計模式
較像工具書,作者提供12心法與94招讓讀者學習

CSS

書:
Eric Meyer
css視覺設計之王道, Dave Shea and Molly Holzschlag , www.csszengarden.com

網站:
http://www.pt.ntu.edu.tw/hmchai/PTcomputer04/hCSS/CSSadvanced.htm
http://www.twbts.com/css/
http://www.openwebdesign.org/
http://www.oswd.org/

星期一, 10月 15, 2007

甜橘牛排餐廳

http://www.orange-group.net
南京總店:台北市南京東路三段112號 Tel:2507-3136
天母分店:台北市忠誠路二段132號 Tel:28772591

VNC(Virtual Network Computing)- 遠端遙控軟體

VNC 官方網站:http://www.realvnc.com

步驟:

安裝vnc (//Fedora發行版巳包含了VNC軟體)
=>apt-get install vnc-server

啟動vnc server (初次啟動server會要求密碼,啟動後會在各user家目錄下產生.vnc資料夾)
=>vncserver //vncserver
/etc/rc.d/init.d/vncserver似乎不一樣

修改畫面設定檔
=>
vi ~/.vnc/xstartup 取消此兩行前面的 #

unset SESSION_MANAGER

exec /etc/X11/xinit/xinitrc

p.s Fedora發行版巳包含了VNC軟體,不過預設使用TWM視窗管理程式,可以修改為GNOME如下:

mkdir /etc/vnc/

用文書編輯軟體開啟 /etc/vnc/xstartup 輸入一行 exec /etc/X11/xinit/Xclients 後存檔離開

chmod+x /etc/vnc/xstartup

修改帳號設定檔
=>
vi /etc/sysconfig/vncservers

# VNCSERVERS="1:myusername" 修改成-->VNCSERVERS="1:root"

# VNCSERVERARGS[1]="-geometry 800x600"

重新啟動
/etc/rc.d/init.d/vncserver restart

開放port

VNC使用兩個port,請記得開放,5801:tcp,5901:tcp

測試
使用網頁瀏覽器遠端遙控 Fedorahttp://IP:5801

註:

因為使用瀏覽器連上 vncserver 的時候會執行 java applet,所以 client 端一定要先安裝 java 相關軟體才行
http://www.java.com/zh_tw/download/manual.jsp

TightVNC for Windowshttp://umn.dl.sourceforge.net/sourceforge/vnc-tight/tightvnc-1.2.9-setup.exe

使用網頁瀏覽器遠端遙控 Windowshttp://IP:5800

VNC 官方文件:http://www.realvnc.com/documentation.html

Pthread

1.程式中載入
2.compile時,加入-pthread參數

範例=========================
#include <stdio.h>
#include <stdlib.h>  //因為在fc系統下,exit會有warnning,include此就不會有了
#include <pthread.h> //unix下的多執行緒

void *mythread(void *arg)
{
for (;;) {
printf("thread\n");
sleep(1);
}
return NULL;
}

int main(void)
{
pthread_t th;

if (pthread_create(&th,NULL,mythread,NULL)!=0)
exit(0);

for (;;) {
printf("main process\n");
sleep(3);
}
}
執行結果:
main process
thread
thread
thread
main process
thread
thread
thread
main process
thread
thread
thread

索引

專科時期買的書,到現在才用到,也算是沒浪費了

何時可利用索引
  • where引數資料篩選
    • SELECT * FROM employee WHERE EmpID = 'xxx' //先替EmpID建立索引,將能提昇查詢速度
    • SELECT * FROM employee WHERE Salary BETWEEN 6000 and 7000 //先替Salary 建立索引,將能提昇查詢速度
*當使用LIKE時,常數字開頭才會使用索引(例:'abc%'),以萬用字元開頭將不會(例:'%仁')
  • Order By
    • SELECT name FROM employee ORDER BY name //建立name索引
  • GROUP By
    • SELECT department,avg(salary) FROM employee GROUP BY department //建立department索引
  • 連結資料表
    • SELECT * FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID //替Customers資料表根據CustomerID欄位建立索引,並替Orders資料表根據CustomerID建立索引,資料表連結速度會大幅提升
SQL Server如何判斷是否要使用索引
  1. 先檢查存在根據適當欄位建立的索引,以及確認此索引是否有助於本次的存取作業
    • 確實存在有助益的索引,SQL Server即會使用索引表的資料記錄,再繼續步驟2
    • 如不存在,即進行「資料表掃描」完成存取作業
  2. 會從根分頁開始,沿著索引樹狀結構尋找查詢所要的資料
  3. 將符合查詢條件資料記錄篩選出來

資源

CSS2.0中文手冊(繁體中文版 by:藤原直樹 翻譯製作)

圖片資源
http://www.fotolia.com/search?k=golf&order=relevance&offset=1760

星期六, 10月 13, 2007

Thread Lock與Monitor的不同

Thread.Lock class
說明:對資源取得獨佔
Method:
public void lock(Object obj)
語法:
lock(objlock)
{
同步化執行相關程式碼
}

Thread.Monitor class
說明:進一步阻斷或繼續特定thread的動作,使資源能夠被控制
Method:
//回復第一個被暫停的thread
public static void Pulse(Object obj)

//釋放該thread佔有的資源
public static bool Wait(Object obj,int milliseconds)
public static bool Wait(Object obj):

*使用monitor方法時,需將其包在enter和exit中
ex.
Monitor.Enter(this);
...
Monitor.Pulse(this);
...
Monitor.Exit(this);

當存在一個以上的執行緒,而其中一個必須等待另一個完成,才能繼續執行

狀況:當存在一個以上的執行緒,而其中一個必須等待另一個完成,才能繼續執行

Trehad.Sleep()只能單純暫停執行,因此變不適用
Thread類別提供Join() -- Thread 等待其他Thread完成
例:有兩個threads
thread1.start();
thread2.start();
當thread2.Join()時,thread1會等待thread2執行完。

星期二, 10月 09, 2007

linux與windows的scp - WinSCP

在linux下使用scp互傳檔案相當方便
不過要跟windows互傳可就頭大
雖然有smb~不過現在NHCH有出WinSCP
感覺跟FTP好像~~滿不錯的



後記..
中文會有編號問題 還是用FileZilla吧....

星期一, 10月 08, 2007

利用panel放背景圖

JPanel panel = new JPanel()

{
protected void paintComponent(Graphics g)
{

// g.drawImage(ic.getImage(), 0, 0, null);

// Scale image to size of component
Dimension d = getSize();
g.drawImage(ic.getImage(), 0, 0, d.width, d.height, null);

// Fix the image position in the scroll pane

// Point p = scrollPane.getViewport().getViewPosition();
// g.drawImage(icon.getImage(), p.x, p.y, null);

super.paintComponent(g);
}
};
panel.setOpaque( false );
panel.setPreferredSize( new Dimension(400, 400) );
getContentPane().add( panel);

JButton button = new JButton( "Hello" );
panel.add( button );
panel.setBounds(getBounds());

[C#] 如何設定為全螢幕模式

轉貼http://chuiwenchiu.spaces.live.com/blog/cns!CA5D9227DF9E78E8!990.entry

[C#] 如何設定為全螢幕模式

MSN SpaceGoogle DocGoogle Blog
Chui-Wen Chiu(Arick)
2007.03.16 建立

要將視窗設定為全螢幕模式[1][5],主要有兩個部份
1. 視窗無框線
2. 視窗大小等於螢幕大小

在 .NET 的 Windows Form 中,只需要透過簡單的設定即可達到這個效果,
1. Form.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; //設定成無框線[2]
------ 指this (form)
2. Form.WindowState = FormWindowState.Maximized; // 視窗設定為最大化[3]
------ 指this (form)
如果要設定更穩妥一點,可以再將視窗設定為最上層顯示,也就是將 Form.TopMost [4]設定為 true。
一 般情況下,上述的作法就可以滿足,如果你想做的更好一些,將 Windows 工具列隱藏而非覆蓋[6],此時需要透過 Windows API 來達成,主要的概念是用 FindWindow 找尋工具列的視窗 Handle,再透過 ShowWindow 將該視窗 Handle 隱藏,C# 要實現這個機制的成片段如下

private const int SW_HIDE = 0;
private const int SW_SHOW = 1;

[DllImport("user32.dll")]
private static extern int FindWindow(string className, string windowText);
[DllImport("user32.dll")]
private static extern int ShowWindow(int hwnd, int command);

int hWnd = FindWindow("Shell_TrayWnd", "");
ShowWindow(hWnd, SW_HIDE);

理 想上,上述已經算是相當的完美,但依據[5][6]的說法,即便是將工具列隱藏和 Form.WindowState = FormWindowState.Maximized 仍可能會使應用程式無法涵蓋整個螢幕,最後還是必須透過 Windows API 將 Windows 設定成和視窗一樣大小。先利用 GetSystemMetrics(SM_CYSCREEN) 和 GetSystemMetrics(SM_CXSCREEN) 分別取得螢幕的寬和高,最後再透過 SetWindowsPos 將視窗設定成和螢幕等寬並且置於上層
SetWindowPos(hwnd, HWND_TOP, 0, 0, GetSystemMetrics(SM_CYSCREEN), GetSystemMetrics(SM_CXSCREEN), SWP_SHOWWINDOW);

參考資料
[1] Full Screen Mode in C#
[2] Form.FormBorderStyle 屬性(System.Windows.Forms)
[3] Form.WindowState 屬性(System.Windows.Forms)
[4] Form.TopMost 屬性(System.Windows.Forms)
[5] Full Screen Video Display
[6] How to make Windows Form app truly Full Screen (and to hide Taskbar) in C#?
[7] How To Cover the Task Bar with a Window

星期五, 10月 05, 2007

跨執行緒作業無效

Problem:跨執行緒作業無效: 存取控制項 'form2' 時所使用的執行緒與建立控制項的執行緒不同

Answer:
private void ThreadTask()
{
//form2.Visible = true; //出現所使用的執行緒與建立控制項的執行緒不同
ShowForm(); //改用ShowForm()即可
}

private void ShowForm()
{
if (form2.InvokeRequired)
form2.Invoke(new MethodInvoker(ShowForm)); //此ShowForm為delgete型態,即傳Method Name
else
form2.Visible = true;
}

*如果要傳值的話...
以傳string為例,先自行定義delegate
delegate void mydel(string str);
...

//呼叫ShowForm()+傳值
ShowForm("oh ya~")

private void ShowForm(string str)
{

if form2.InvokeRequired)
this.Invoke(new mydel(ShowForm), new object[] { str});
else
this.title =(string)obj[0];
}

注意:如果傳的值是物件的話,得clone新的物件
例:上例

delegate void mydel(Object [] args);
...
//呼叫ShowForm()+傳值
ShowForm( new Object[1])
private void ShowForm(Object [] args)
{
if (this.InvokeRequired)
this.Invoke(a, args.clone()); //clone一個新的
...
}


*較簡單的方法 (轉)

在form_load時加一行
ListBox.CheckForIllegalCrossThreadCalls = False
這樣就會關閉所有listbox的檢查是否為不合法的跨執行緒存取
從vs2005開始, 所有windows form控制項, 都多了一個[能否任意跨執行緒變更屬性]的靜態屬性
這是為了防止控制項在多執行緒情況下工作時, 同時有多個執行緒存取單一控制項, 導致程式發生死結
所以如果要跨執行緒存取控制項, 必須使用Control.Invoke的方法, 來變更控制項目前的屬性,
如果覺得這樣做太麻煩, 而且您自己確定, 不會發生死結

星期三, 10月 03, 2007

重灌注意事項

1.學校、工作資料

2.網頁書籤

3.遊戲檔案、地圖、存檔

4.行事曆備份

5.eMail信件、通訊錄

6."我的文件" ex. putty,下載的檔案

Ubuntu Adjustment

1. 輸入法
1.1 安裝嘸蝦米
1.2 輸入法微調
2:配置X預設輸入法,在/etc/X11/Xsession.d/95xinput-set中加入:
export XMODIFIERS=@im=SCIM
scim -d
2.Samba
apt-get install
3.影音
3.1 SMplayer
下載網頁: http://wesley.debianbox.be/packages/
"推薦的原因,簡單說,他讓Un*x 下,看影片的過程變輕鬆了!不再需要跟一堆設定檔案奮鬥。讓已經很好設定的 Mplayer 更簡單。該有的功能他都有了,而且還有一點我很喜歡。當你一部影片看到一半,關掉了,不管你這之間看過什麼,下次再開,他會從你關掉、暫停的位置繼續。 PowerDVD 也有這個功能,不過 Un*x 上,還是首見! 而這個新版,又有什麼新特色呢?繁體中文沒問題了!佈景主題沒問題了!鍵盤 HotKey 沒問題了。真的很不錯!真心地再推薦一次!

設定的重點,主要是字幕部分,選擇一個喜歡的字型,然後編碼選 Big5,這樣就可以了。 "

下載網頁裡分別有包給Ubuntu 7.04,6.10,6.06使用的deb檔
SMPlayer deb檔分為Qt3沒有KDE支援,以及Qt3有KDE支援,另外還有額外佈景/圖示套件

3.2 支援realplayer
如果此時有出現「有影無聲」的情形可用下列的方式修正。
可以編輯~/.xine/catalog.cache文件,找到
[/usr/lib/xine/plugins/1.1.4/xineplug_decode_real_audio.so]
把 decoder_priority 增加到 10,至此大功告成,可以好好享受用 totem-xine 來看 rmvb 囉!
4. Office
4.1pdf中文亂碼
5. Gaim
5.1自訂圖示
在~/.gaim/smileys/下 建目錄放表情圖示
放完圖示後,在此目錄下建立名為“theme”文字檔
內容為
-----
Name=(圖示名稱)
Description=(說明)
Icon=angry.gif //---這個是註解不要加,此行是設定這個圖示集的代表符號
Author=none

/*---這段是註解不要加…
以下的格式,就是圖檔對應按鍵符號,可以用 tab 隔開也可用 space 隔開
可定義多個按鍵對應一個圖示
*/
[default]
angry.gif (><)
applaud.gif (applaud)
blank.gif (b) (B)
6. rar for linux
7.重裝OpenOffice
下載完畢後先解壓縮
$tar zvxf OOF680_m14_native_packed-1_zh-TW.9135.tar.gz
移除本來的OpenOffice
$sudo apt-get autoremove openoffice.org-core
開始安裝載來的OpenOffice
$cd OOF680_m14_native_packed-1_zh-TW.9135/DEBS
$sudo dpkg -i *.deb
建立選單捷徑
可以用滑鼠去執行desktop-integration/openoffice.org-debian-menus_2.2-9119_all.deb
可以看到所有依賴關係都已滿足或者用指令安裝
$sudo dpkg -i desktop-integration/openoffice.org-debian-menus_2.2-9119_all.deb
整個安裝過程就完畢了,執行一下看看吧,建立使用者資料後就可以用了
Logo也恢復為原來的藍色了,播個投影看看,果然不會再當掉了

UML學習筆記

開發專案可先從Funcation下手,以先瞭解需求
●Funcation View (系統應該如何運作)
1.Use case diagram =>使用案例圖描述使用者期待系統提供的特性。
系統應該提供什麼。需求功能被視為目標。再以narrative來補充,以描述各使用案例被期待完成什麼,以達到各目標。

2.Activity diagram =>描述包括連續任務、條件邏輯及一致性的程序。
利用活動圖繪製邏輯。也可用來評估應用程式的複雜度,細節複雜時,如果用活動圖畫出來,將使邏輯變好懂。

●Static View (藍圖及關係)
1.Class diagram (general )
2.Object diagram (concrete)

●Dynamic view (互動、狀態改變)
1.Squence (互動)
2. collaboration (互動)
3. statechart(object如何與外剖刺激互動,並管理內部改變)

筆記

1.圖片放法
anchor調to char
wrap調 no wrap
2.快速鍵
重覆上一步


還真是有些不方便...這筆錢還是被軟微賺定了

rar for linux

[轉貼的]要在linux下處理.rar檔,需要安裝RAR for Linux,可以從網上下載,但要記住,RAR for Linux
不是免費的;可從http://www.rarsoft.com/download.htm下載RAR for Linux 3.2.0,然後安裝:
  # tar -xzpvf rarlinux-3.2.0.tar.gz
  # cd rar
  # make
  這樣就安裝好了,安裝後就有了rar和unrar這兩個程式,rar是壓縮程式,unrar是解壓程式。它們的參數選項很多,這裏只做簡單介紹,依舊舉例說明一下其用法:
  # rar a all *.jpg
  這條命令是將所有.jpg的檔壓縮成一個rar包,名為all.rar,該程式會將.rar 副檔名將自動附加到包名後。
  # unrar e all.rar
  這條命令是將all.rar中的所有檔解壓出來

星期一, 10月 01, 2007

常用軟體

影像編輯

Google Weather API

Animaonline's Nerdy Corner: Google Weather API

This is a little guide on how to use the Google Weather API

Use this XML file for output in Fahrenheit:
http://www.google.com/ig/api?weather=Drammen //華氏 (ex. Taipei)
And this one for Celsius:
http://www.google.co.uk/ig/api?weather=Drammen //攝氏 (ex. Taipei)

And here is the sample C# parser (Celsius Version):using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Net;

///Code by Roman Alifanov - API by Google
///Posted on http://animaonline.blogspot.com
namespace GoogleWeatherAPI_Parser
{
class Program
{
static void Main(string[] args)
{
int i = 0;

//SelectNodes("xml_api_reply/weather/current_conditions")
//↑其中字串為指定哪個node,參考回傳的xml即可瞭解
XmlNodeList GWP_NodeList = GoogleWeatherAPI_Parser(@"http://www.google.co.uk/ig/api?weather=Drammen").SelectNodes("xml_api_reply/weather/current_conditions");
Console.WriteLine("Current weather in Drammen: " + GWP_NodeList.Item(i).SelectSingleNode("temp_c").Attributes["data"].InnerText);
Console.ReadLine();
}
private static XmlDocument GoogleWeatherAPI_Parser(string baseUrl)
{
HttpWebRequest GWP_Request;
HttpWebResponse GWP_Response = null;
XmlDocument GWP_XMLdoc = null;
try
{
GWP_Request = (HttpWebRequest)WebRequest.Create(string.Format(baseUrl));
GWP_Request.UserAgent = @"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4";
GWP_Response = (HttpWebResponse)GWP_Request.GetResponse();
GWP_XMLdoc = new XmlDocument();
GWP_XMLdoc.Load(GWP_Response.GetResponseStream());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
GWP_Response.Close();
return GWP_XMLdoc;
}
}

Globus Toolkit 4 安裝手冊

OS: fedora 4

... 懶得上傳...

WebBrowser處理網頁元件attribute, style及event

1.設定或取得html tag的屬性值
ex.

//set htmlDoc
HtmlDocument htmlDoc = webBrowser1.Document;

//set Element where tag's name is "Name"
HtmlElement tbUserid = htmlDoc.All["Name"];
HtmlElement tbPasswd = htmlDoc.All["Nickname"];

//set the content of tag's attribute "value"
tbUserid.SetAttribute("value", "Kevin");
tbPasswd.SetAttribute("value", "ok1234");

//get the content
String name = tbUserid.GetAttribute("value");

p.s 某些tag無法用name取得,只能用id來取得

2.設定或取得html tag的文字
hello
同上取得HtmlElement後
HtmlElement tmp = htmlDoc.All["wellcomeTag"];
tmp.SetInnerHtml("you got it") //set
tmp.GetInnerHtml() //get

p.s document如果為XML的話,得用InnerText (好像吧 哈)

3.改變Style
同上取得HtmlElement後
tmp.Style = "display: none";

4.增加onclick事性

HtmlElement imgElement1 = htmlDoc.All["PlayBall"];
if (imgElement1 != null)
{
imgElement1.AttachEventHandler("onclick", new EventHandler(imgElement1_Click));
}

//click event
private void imgElement1_Click(object sender, EventArgs e)
{
listBox1.Items.Add("let's have some fun");
}

將影片轉成SWF,FLV格式

Software: Flash Video Encoder
Company: Sothink

Formats of Output File 支援多種影像格式轉換,不支援的影像格式只需再安裝相關的軟體
便可轉成FLVand SWF 還可產生embedded HTML
也可設定輸出畫質及播放器等,相當方便。

將影片轉成FLV格式

source: http://ucsharp.wordpress.com/2007/07/25/c-and-ffmpeg/

/*
* 利用ffmpeg轉換格式
* p.s 先下載ffmpeg.exe,並放置指定位置
*/

private void MPG2FLV_Load(object sender, EventArgs e)
{
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.EnableRaisingEvents = false;
proc.StartInfo.FileName = @"C:\edgar\mediaHandler\ffmpeg\ffmpeg";
proc.StartInfo.Arguments = "-i C:\\edgar\\mediaHandler\\ffmpeg\\1.mpg -ar 22050 -ab 32 -f flv -s 320×240 -aspect 4:3 -y movie4.flv";

/* use /y to overwrite if there it exists already or will fail */

proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.Start();
proc.WaitForExit();
proc.Close();
}

利用C#程式碼列印

/*
* 為 PrintDocument 增加PrintPageEventHandler事件handler
*/

private void btnPrint_Click(object sender, EventArgs e)
{
PrintDocument printDoc = new PrintDocument();
printDoc.PrintPage += new PrintPageEventHandler(printDoc_PrintPage);

//if print() is invoked, the event printDoc_PrintPage will be called.
printDoc.Print();

}
public void printDoc_PrintPage(object sender, PrintPageEventArgs e)
{
Point ulCorner = new Point(300, 300);//location
e.Graphics.DrawImage(pictureBox1.Image, ulCorner);
}

在圖片上畫圖

範例:在圖上畫路徑
/*
* 在圖片上畫路徑,最後利用pictureBox存檔
*/
1.先設定繪畫
String pictureFileName=@"C:\picture.jpg";
String saveFileName=@"C:\test.jpg";

//set grapthic tool on specific image
Graphics graphics = Graphics.FromImage(pictureFileName);

//set a path
GraphicsPath path;
path = new GraphicsPath(new Point[]{ new Point(285, 315),new Point(190, 150),new Point(85, 120), new Point(80, 60),new Point(95, 80)},
new byte[] {(byte)PathPointType.Start,(byte)PathPointType.Line,(byte)PathPointType.Line,(byte)PathPointType.Line,(byte)PathPointType.Line });
graphics.DrawPath(Pens.Blue, path);

//save the grpahic
graphics.Save(saveFileName);

星期三, 9月 26, 2007

GIMP去背

1.將圖片增加透明圖層
就是Layer/Transparency/Add ALPHA Channel那個選項

2.選取不要的背景
利用魔術棒等工具選取不要的背景

3.去掉背景
Edit/clear ,即可去掉選取的背景

星期四, 9月 13, 2007

利用datagridview存取xml

//read XML
DataSet ds = new DataSet();
ds .ReadXml(xmlFile, XmlReadMode.InferSchema);

datagridview1.DataSource = ds ;
datagridview1.DataMember = tag;

//save xml

用C#讀取XML的元素和屬性

用C#讀取XML的元素和屬性

Method 1 (ex. Google Weather API)
private String weatherApiUri = @"http://www.google.co.uk/ig/api?weather=";
private String xmlNode = "xml_api_reply/weather/current_conditions";

XmlDocument xd = (XmlDocument)xmlFromGoogle; //set xml document
XmlNodeList xnl = xd.SelectNodes(xmlNode); //get the node

XmlNode xmlDetail;
xmlDetail = GWP_NodeList.Item(0).SelectSingleNode("condition ");
Console.write(xmlDetail.Attributes["data"].InnerText);


Method 2


using System.Xml;
namespace DOMTest
{
class DOM
{
private static void PrintElement(XmlDocument document)
{
//獲取所有的Node
XmlNodeList nodeList=document.GetElementsByTagName('*');
//打印每一個node的名稱
for (int i=0;i (less) nodeList.Count;i++)
{
XmlNode node=nodeList.Item(i);
Console.WriteLine(node.Name);
}
}

private static void PrintAttributes(XmlDocument document)
{
XmlNodeList nodeList=document.GetElementsByTagName("*");
XmlNamedNodeMap nameNodeMap;
XmlElement element;
XmlAttribute attribute;
string attributeName;
string attributeValue;

for(int i=0;i (less) nodeList.Count;i++)
{
element=(XmlElement)nodeList.Item(i);
Console.WriteLine(element.Name+":"+element.ChildNodes[0].Value);
nameNodeMap=element.Attributes;
if(nameNodeMap!=null)
{
for(int j=0;j (less) nameNodeMap.Count;j++)
{
attribute=(XmlAttribute)nameNodeMap.Item(j);
attributeName=attribute.Name;
attributeValue=attribute.Value;
Console.WriteLine("屬性是:"+attributeName+"="+attributeValue);
}
}
}
}
[STAThread]
static void Main(string[] args)
{
XmlDocument document =new XmlDocument();
document.Load("student.xml");
Console.WriteLine("元素是:");
PrintElement(document);

// Console.WriteLine("元素屬性是:");
// PrintAttributes(document);
}
}
}

星期三, 9月 12, 2007

片片段段

Google => http://www.google.co.uk/ig/api?weather=Taipei
Yahoo => http://xml.weather.yahoo.com

MSN
片片段段: "首先呢我們先看參數的傳法,它需要指定是哪一個都市代碼與使用華氏或是攝氏,以下是我們使用的範例: http://weather.msn.com/data.aspx?wealocations=wc:TWXX0021&weadegreetype=C 一般我們習慣使用的是weadegreetype=C,當然你也可以改成 weadegreetype=F wealocations 參數要傳入都市代碼,你可以到http://weather.msn.com/region.aspx?wealocations=Taiwan 查看這個API提供了哪些都市供查詢,我想大部分的人看到這些地名的拼音,應該是猜不出來是哪裡吧! 沒關係,我在網路上發現了有好心人士把它翻譯成中文的地名,我再加上代碼方便大家查用
Taipei, TWN:台灣-台北 wealocations=wc:TWXX0021
Pan-ch'iao, TWN:台灣-台北-板橋市 wealocations=wc:10028648
San-ch'ung, TWN:台灣-台北-三重市 wealocations=wc:29496
Yung-ho, TWN:台灣-台北-永和市 wealocations=wc:37364
Hsin-chuang, TWN:台灣-台北-新莊市 wealocations=wc:14392
Hsin-tien, TWN:台灣-台北-新店市 wealocations=wc:TWXX0010
Chilung, TWN:台灣-基隆 wealocations=wc:TWXX0003
T'ao-yuan, TWN:台灣-桃園 wealocations=wc:TWXX0025
Chung-li, TWN:台灣-桃園-中壢市 wealocations=wc:7371127
Hsin-chu, TWN:台灣-新竹 wealocations=wc:TWXX0009
Chu-tung, TWN:台灣-新竹-竹東鎮 wealocations=wc:TWXX0006
Chu-nan, TWN:台灣-苗栗-竹南鎮 wealocations=wc:10034496
T'aichung, TWN:台灣-台中 wealocations=wc:TWXX0019
Chang-hua, TWN:台灣-彰化 wealocations=wc:TWXX0001
Chiayi, TWN:台灣-嘉義 wealocations=wc:TWXX0002
T'ainan, TWN:台灣-台南 wealocations=wc:32433
Yung-k'ang, TWN:台灣-台南-永康市 wealocations=wc:10480429
Kaohsiung, TWN:台灣-高雄 wealocations=wc:16133
Feng-shan, TWN:台灣-高雄-鳳山市 wealocations=wc:10209491
P'ingtung, TWN:台灣-屏東 wealocations=wc:24933
O-luan-pi, TWN:台灣-屏東-鵝鑾鼻 wealocations=wc:7365022
T'ai-tung, TWN:台灣-台東 wealocations=wc:32435
Ch'eng-kung-chen, TWN:台灣-台東-成功鎮 wealocations=wc:7372779
Pei-nan, TWN:台灣-台東-卑南鄉 wealocations=wc:10209499
Hua-lien, TWN:台灣-花蓮 wealocations=wc:TWXX0011
Yu-li, TWN:台灣-花蓮-玉裡鎮 wealocations=wc:7359057
Fu-li, TWN:台灣-花蓮-富裡鄉 wealocations=wc:7370247
Kuang-fu, TWN:台灣-花蓮-光復鄉 wealocations=wc:10209389
Makung, TWN:台灣-澎湖-馬公市 wealocations=wc:10107142
Wu-shih-pi, TWN 台東縣-烏石鼻 wealocations=wc:7359486

接下來我們來看看回傳的XML架構,

-
-










temperature為目前溫度沒問題,skycode為天氣概況編碼,可以利用這個編碼顯示出氣象狀態的小圖,方法如下
"http://st.msn.com/as/wea3/i/en-US/law/" + skyCode + ".gif"

skytext為氣象概況文字,若是我想顯示英文那就沒問題,若是想顯示中文就難了,因為根本不知道有幾種,沒辦法寫中英對應表
我看到對岸有人用了一個方法,因為skycode為連續的編號,所以他把所有氣象狀態的小圖都秀出來,自己看著圖翻譯成中文
還蠻妙的..我寫了Function方便使用:

Function toChineseString(ByVal skyCode As String) As String

Select Case skyCode

Case "26", "27"

Return "陰"

Case "35", "39", "45", "46"

Return "小雨"

Case "19", "20", "21", "22"

Return "霧"

Case "29", "28", "30", "33"

Return "多雲"

Case "5", "13", "14", "15", "16", "18", "25", "41", "42"

Return "雪"

Case "1", "2", "3", "4", "37", "38", "47"

Return "雷雨"

Case "31", "32", "34", "36", "44"

Return "晴"

Case "23", "24"

Return "中到大風"

Case "9", "10", "11", "12", "40"

Return "中到大雨"

Case "6", "7", "8", "17"

Return "冰雹"

Case Else

Return "晴"

End Select

End Function

星期三, 9月 05, 2007

從 XML 載入 DataSet

從 XML 載入 DataSet: "如果要呼叫 ReadXml 來載入一個非常大的檔案,將會使效能降低。為了確保 ReadXml 在針對大檔案時仍能保持最佳效能,請針對 DataSet 的每個資料表都呼叫 BeginLoadData 方法,再呼叫 ReadXml。最後再針對 DataSet 的每個資料表呼叫 EndLoadData (如下列範例所示)。"

C#

foreach (DataTable dataTable in dataSet.Tables)
dataTable.BeginLoadData();

dataSet.ReadXml("file.xml");

foreach (DataTable dataTable in dataSet.Tables)
dataTable.EndLoadData();

Double's thought: 超簡易入手的XML & DTD 教學

Double's thought: 超簡易入手的XML & DTD 教學: "超簡易入手的XML & DTD 教學 看過寫的最簡單的XML & DTD 教學。 XML教學在此。 DTD教學在此。 其實,還有還多超簡易教學,適合剛入手的生手看。 ZVON.org"