2009年7月5日 星期日

使用nusoap建立web service-範例

首先 分別撰寫cliet與server端程式,放在nusoap資料夾下

server端部分程式碼撰寫原則:
  1. 撰寫欲被client調用的函式connectandsave($content)
  2. 引入nusoap require_once("lib/nusoap.php");
  3. 建立soap_server實體 new soap_server()
  4. 配置WSDL文件敘述 configureWSDL
  5. 為服務註冊register方法函式(connectandsave)
  6. 使用service方法執行方法並回傳值 $server->service($POST_DATA);

server端-WSservertest.php:
<?php
//定義service處理函式
function connectandsave($content)
{
$xx = main::toStore($content);

return "get \r\n" . main::$accuracy2 . "\r\n" ;
//return "get \r\n" . $content . "\r\n" ."dd";

}
date_default_timezone_set("Asia/Taipei");
require_once("lib/nusoap.php");


$server = new soap_server();// 初始化一個service物件實體
$server->soap_defencoding='UTF-8';
$server->decode_utf8=false;
$server->configureWSDL("SimpleService");// 配置 WSDL 描述,叫用時以此為類別名稱
$server->wsdl->schemaTargetNamespace = $namespace; // set namespace
// register service's WebMethod,註冊過的程序才能被訪問到
// $server->register('answerHello',array('name' => 'xsd:string'),array('return' => 'xsd:string'));
$server->register(
// method name:
'connectandsave',
// parameter list:
array('name'=>'xsd:string'),
// return value(s):
array('return'=>'xsd:string'),
// namespace:
$namespace,
// soapaction: (use default)
false/*,
// style: rpc or document
'document',
// use: encoded or literal
'encoded',
// description: documentation for the method
'Anser Hello to World '*/);


//把client端 post 過來的資料,傳給server物件的 service 方法處理。
//service 方法處理的資料會借調用相應的函式回傳給叫用端
$POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA'])
? $GLOBALS['HTTP_RAW_POST_DATA'] : '';

$server->service($POST_DATA);
exit();
?>

其中main是自定類別,裡面就是自己寫的一些程序

接下來示範如何調用剛剛寫好的函式connectandsave
client端部分程式碼撰寫原則:
  1. 引入nusoap require_once("lib/nusoap.php");
  2. 建立soapclient()實體 new soapclient()
  3. 將要傳送的資料陣列化(array)
  4. 使用call方法叫用欲呼叫的方法call(函式名)
  5. 印出call完後的值;


client端-WSclienttest.php :
<?php
require_once("lib/nusoap.php");
//初始化 client 物件,是class soapclient 的一個實體
//把服務程序的 URL 地址傳遞给soapclient類別的構造函式
$client = new soapclient('http://xxxx/nusoap/WSservertest.php'); //後面利用client物件的 call 方法調用 WEB 服务的程序'GPSconnectandsave'

$myname = 'clark' ;
// $Content = '25.07433874,121.52545941,2009-05-23,17:53:56,1.2,5,2.3,2.6,8.3,xxx' ; //中原國小門口
$Content = '24.956846,121.242451,2009-05-23,17:53:56,1.2,5,2.3,2.6,8.3,xxx' ; //中原大草皮

$parameters=array('24.956846,121.242451,2000-01-01,17:53:56,1.2,5,2.3,2.6,8.3,xxx');
$str=$client->call('connectandsave',$parameters); //call('函式名',匹配的參數) 函式名為在WSservertest.php中所註冊的函式

//$str=$client->call('hello'); //客户端对象的 getError() 方法可以用来检查调用过程是否出现错误。
//如果没有错误, getError() 方法返回 false ;如果有错误, getError()方法返回错误信息。
if (!$err=$client->getError()) {
echo " return:",htmlentities($str,ENT_QUOTES); //the optional second quote_style parameter lets you define what will be done with 'single' and "double" quotes. It takes on one of three constants with the default being ENT_COMPAT: ,ENT_QUOTES Will convert both double and single quotes.
} else {
echo " error :",htmlentities($err,ENT_QUOTES);
}

//觀察request 和 response響應
echo '<p/>';
echo 'Request:';
echo '<pre>',htmlspecialchars($client->request,ENT_QUOTES),'</pre>';
echo 'Response:';
echo '<pre>',htmlspecialchars($client->response,ENT_QUOTES ),'</pre>';

?>

2009年6月29日 星期一

fsockopen穿越proxy-以台灣簡訊為例

fsocjopen 可以跟伺服器主機連線,只要知道IP、port 就好,但容易遇到的問題是,萬一讀取網頁時是靠proxy來達成的時候,那該怎麼做呢?

其實,一樣可以用fsockopen,但我們連線到proxy,在直接下指令給proxy即可
下面範例是在作專題時,使用台灣簡訊來發送客製化簡訊,欲到的proxy是中原大學的proxy.cycu.edu.tw port:3128

<?
$username = "xx"; // 帳號
$password = "xx"; // 密碼
$type = "now"; // 發送型態
$mobile = "0988xxxxxx"; // 電話
$message = "簡訊測試喔"; // 簡訊內容
$encoding = "big5"; // 簡訊內容編碼
$popup = ""; // 使用 POPUP 顯示
$mo = ""; // 使用雙向簡訊
$vldtime = "86400"; // 簡訊有效期限
$dlvtime = ""; // 預約時間
$MSGData = "";
$msg =
"username=".$username."&password=".$password."&type=".$type."&encoding=".$encoding."&popup=".$popup."&m
o=".$mo."&mobile=".$mobile."&message=".urlencode($message)."&vldtime=".$vldtime."&dlvtime=".$dlvtime;


$num = strlen($msg);
// 打開 API 閘道
$fp = fsockopen ("proxy.cycu.edu.tw", 3128);
// print_r($fp);
if ($fp) {
$MSGData = $MSGData."POST http://211.78.23.230/send_sms.php HTTP/1.1\r\n";
$MSGData = $MSGData."Host: api.twsms.com\r\n";
$MSGData = $MSGData."Content-Length: ".$num."\r\n";
$MSGData = $MSGData."Content-Type: application/x-www-form-urlencoded\r\n";
$MSGData = $MSGData."Connection: Close\r\n\r\n";
$MSGData = $MSGData.$msg."\r\n";
fputs ($fp, $MSGData);

// 取出回傳值
while (!feof($fp)) $Tmp[]=fgets ($fp,128);

// 關閉閘道
fclose ($fp);

// 顯示回傳值
$Respone = split(":",$Tmp[9]);
// print_r($Tmp);
$Res["Number"] = $Respone[0]; // 傳回碼
$Res["OrderID"] = $Respone[1]; // 如果傳回碼是 00 成功, 才會有 OrderID 產生
// echo '<BR>$Res["Number"] ='.$Res["Number"];
// echo '<BR>$Res["OrderID"] = '.$Res["OrderID"];
}
?>



上面程式碼其中的211.78.23.230 是台灣簡訊的server,要注意的是
這邊要放 http://211.... 也就是絕對路徑!!

此範例由台灣簡訊API提供的範例程式作修改。

2009年6月19日 星期五

PHP Excel PHPPowerPoint

兩個PHP class
PHPExcelPHPPowerPoint
分別可以很簡單地透過 PHP 讀取及寫入 Excel 2007 及 PowerPoint 2007 的檔案

用 PHP 讀寫 Excel 檔案
裡頭有讀取Excel的範例

2009年6月15日 星期一

http://msdn.microsoft.com/en-us/library/bb202077.aspx

http://msdn.microsoft.com/zh-tw/library/bb278115.aspx

http://msdn.microsoft.com/en-us/library/bb202066.aspx

http://msdn.microsoft.com/en-us/library/bb202041.aspx

http://msdn.microsoft.com/en-us/library/bb202016.aspx

2009年6月10日 星期三

在IE與FF的一些設計限制

PRB: 錯誤設定 table.innerHTML 在 Internet Explorer 中
table 的限制,在不同瀏覽器中的問題較大,需要另外處理~

IE中Table、 thead、tbody的innerHTML屬性是唯讀的!!
若用
document.getElementById("tablename").innerHTML = "XXXXX" ;
IE就會跳出「執行階段錯誤」.... ~~

另外要注意的是 table與 tr標籤元素,不能用innerHTML方式賦值,但.. td標籤是可以的喔!

在IE與FF的一些設計限制(設定css屬性、註冊事件、checkbox)

在FF與其他瀏覽器(不含IE)

1.若要設定元素的class屬性,可以用 setAttribute方法來設定,如下
var inputElmt = document.createElement('input');
inputElmt.setAttribute('class', 'column');

但IE不吃這套,而吃 className 屬性名稱,如下
inputElmt.setAttribute('className', 'column');

所以 ~完整解決方法
var inputElmt = document.createElement('input');
inputElmt.setAttribute('className', 'column'); 
inputElmt.setAttribute('class', 'column');

寫上兩個~不需要另外辨別瀏覽器!


2.若要為其加入事件
if(document.all) //for IE
{
inputElmt.onclick = function(){ pantosetedArea(this.value) ; };
}
else inputElmt.setAttribute('onClick', "pantosetedArea(this.value)");

其中pantosetedArea(參數)是自訂函式

3.另外,若要產生預設勾選的checkbox

function createInputcheck(elmtName,elmtValue) {

elmtName = elmtName ? elmtName : '';
elmtValue = elmtValue ? elmtValue : 'yes';
var ischecked = (elmtValue=='0')? "false" : "true" ;

var inputElmt = document.createElement('input');
inputElmt.setAttribute('type', 'checkbox');
inputElmt.setAttribute('name', elmtName);
inputElmt.setAttribute('value', elmtValue);
if(elmtValue=="yes") inputElmt.setAttribute('checked', ischecked);
inputElmt.setAttribute('onClick', "checkSMS(this)")
inputElmt.setAttribute('class', 'column');
return inputElmt;
}
var sendSMSInput = createInputcheck('sSMS');
var contentTdM = document.createElement('td');
contentTdM.appendChild(sendSMSInput);

var contentTr = document.createElement('tr');
contentTr.appendChild( contentTdM );

sendSMSInput.setAttribute('checked', true);

在FF中,函式中的此行 if(elmtValue=="yes") inputElmt.setAttribute('checked', ischecked);會馬上成立,但在IE中,要為checkbox 賦值,必須等到 appendchild後才可以操作checkbox 賦值

2009年6月6日 星期六

javascript 陷阱

當form裡頭有 sunmit按鈕時 如下


從外部函式觸發送出~ document.gegister.submit()

會發生 document.form.submit() is not a function 的錯誤~
解決方法就是把form裡頭的 submit弄掉就行了

2009年5月21日 星期四

使用NuSOAP建構webservice

NuSOAP的使用说明

NuSOAP教程

http://www.phpq.net/tag/NuSOAP/

http://www.shanghuo.net/?action=show&id=51

使用C#叫用PHP寫的webservice
http://www.sanity-free.org/125/php_webservices_and_csharp_dotnet_soap_clients.html

php SOAP 簡單的示範

2009年5月18日 星期一

在IE與其他瀏覽器中動態設定class屬性

有時候需要動態改變元素的class屬性
例如~ 點選完月曆日期連結後,要顯示點選日期的背景顏色~

Firefox中通常使用
var element = document.getElementById("elementID")
element.setAttribute("class","styleClass") ;
就可以了~ 但IE與Firefox中設定的方式有差異喔~

在IE中要用
element.setAttribute("className","styleClass");
因為IE只識別 " className"~

2009年4月22日 星期三

各大瀏覽器 javascript引擎比較

2008年,Javascript引擎逐漸成為流覽器領域的競爭焦點。
Webkit6月發佈了SquirrelFish引擎,然後SquirrelFish Extreme也出現。
Firefox8月發佈了TraceMonkey,
Google9月隨Chrome發佈了V8,
Opera的Futhark以及今年2月發佈了Carakan,
3月蘋果在Safari 4 beta中發佈了Nitro引擎。
IE 的Trident(MSHTML)於於四月發佈JavaScript5.8 (http://www.ithome.com.tw/itadm/article.php?c=54457)

性能比較
http://www.fwvv.net/info/2008/09/05/20080905-67045.shtml
http://pingyeh.blogspot.com/2008/09/google-chrome.html

2009年4月17日 星期五

暫存

ASP/ASP.NET/PHP 的選擇



利用微软WebService技术实现远程数据库存取 利用web服务在不同站点间共享同一数据库


http://dev.rdxx.com/NET/Services/2001-9/10/10313281_2.shtml
http://dev.rdxx.com/NET/Services/2001-2/8/103035767.shtml

ASP.NET MVC中使用ASP.NET AJAX异步访问WebService

http://www.zxbc.cn/html/webservice/index_15.html
http://blog.williamgates.biz/category/tech/webservice/http://dob.tnc.edu.tw/themes/old/showPage.php?s=2369&t=298
http://www.google.com.tw/search?q=.net%E4%B8%8B%E5%AD%98%E5%8F%96php+webservice&hl=zh-TW&rlz=1B3GGGL_zh-TWTW319TW319&start=30&sa=N

http://www.google.com.tw/search?q=C/S+webservice+linux&hl=zh-TW&rlz=1B3GGGL_zh-TWTW319TW319&start=10&sa=N

http://www.google.com.tw/search?q=%E5%8F%96%E4%BB%A3webservice&hl=zh-TW&rlz=1B3GGGL_zh-TWTW319TW319&start=20&sa=N

win2003上iis与tomcat的整合

web server and web service

WebService初探(推荐)〔开心本人特别看好WebService〕

什麼是Web Service

整合也可是IT簡單任務?

ref: http://bilingual.rdec.gov.tw/KM/KM/prog/epaper/23/index.php

【資料來源: 台灣微軟產品行銷經理 許建志 2004/06/25】

整合概念看似簡單,真正實作可不是如此。或許你建立的一個Java Web service,只要再利用ASP.NET呼叫這個Web service,就可輕鬆將Hello World字串傳送過去。剛開始你也許會覺得很感動,但很快的…,就會發現企業應用程式所面對資料型別的複雜性,根本不是簡單的一個小範例可處理的。

不論是考慮整合.NET與J2EE的技術選項,或是計畫利用第三方協力廠商所開發的整合軟體進行互通,入門第一堂課就必須了解-在不同平台與應用程式的展示層、中介層與資料層之間,資料是如何傳遞的。

在異質平台之間進行資料交換通常會面對的挑戰可分成三大類,基本上多是資料相容性的問題,包括:

  • 基本資料型別的對應:不論是.NET的Common Language Runtime(CLR),還是Java都有字串的資料型別,但這是否代表CLR的System.String類別等同於Java的java.lang.string類別?
  • 不存在的資料型別:基本資料型別之外,不同平台也會有特殊的資料型別,而需完成資料對應的動作。舉例來說,是不可能在Java中找到內建且可對應至CLR的System.Collections.Specialized.HybridDictionary等資料型別。
  • 複雜的資料型別:許多應用程式都會將基本資料型別組合成自訂化的資料型別,也許是客戶資料、股票資料等;若是客戶資料則可能包含客戶名稱、地址、電話、年齡等資訊,又該如何在其他平台上處理這些自訂化的資料型別呢?

最後一種狀況也是最常見且困難度最高的整合挑戰。一般而言,要進行複雜資料型別的資料交換工作,常見方式是「序列化」(Serialization)。

所謂序列化,就是將某物件或類別,編碼成可儲存、傳輸的格式。如此一來,資料便可以被編碼、儲存、傳輸與解碼,並可被不同的應用程式與平台使用。

序列化可分為兩種方式。一種是「二進位序列化」。不論是.NET的[Serializable] 屬性或實作的ISerializable介面,還是java.lang.Serializable,都支援將任何資料型別序列化的功能。然而壞消息是:兩大平台所序列化的格式不同,無法整合。

開發人員除自行建立可讓不同平台資料格式進行共通的序列子之外,第二種選擇就是如前幾期文章所提及-利用第三方廠商所開發的整合工具,如Intrinsyc Ja.NET,這類工具都包含支援不同平台資料交換的序列子。


第二種方式是「XML序列化」。利用XML進行資料交換,可享有支援多種異質平台的好處。自行解析XML是一個方法,但效率較低,也不易驗證符合企業商業邏輯的資料格式。

幸運的是,包括.NET與Java平台都已將XML的存取技術進一步得抽象化,同時可支援序列化。換句話說,開發人員可在Java平台上使用Mind Electri公司的XML序列子,或是利用.NET的System.Xml.Serialization.XmlSerializer類別。


開發工具如Visual Studio .NET,或是Mind Electric的Electric XML也多已支援可以視覺化方式建立XSD(XML Schema Definition),同時產生對應程式類別的功能。目前看來,排除第三協力廠商內建的序列機制之外,開發者自行建立XSD,再搭配XML序列化,將會是進行資料交換最容易的方式。

以下介紹是利用Web services進行資料交換的幾個進階範例,包括介面整合、資料整合、流程整合等應用。

介面整合

企 業主管或是知識工作者所注重的資訊,通常來自多種不同的企業解決方案,甚或不同的平台。將這些不同的資訊來源整合顯示是最簡單的方式。例如 Longhorn或是MSN Explorer便會在桌面右方提供「儀表板」,可透過Web services與其他相關技術同步顯示,提供包括氣象、交通狀況、即時傳訊的聯絡人清單、行事曆、股票等資訊。當然不只一般的Windows程式,從企 業入口網站(EIP)的發展也可看到類似的應用,透過Web Part的技術,將可利用XML或Web services整合不同來源的資訊介面。


資料整合

英瑞得(Gismosoft)所開發的商業智慧行動解決方案就是一種典型的資料整合應用。該公司計畫在Pocket PC中同時顯示營運資料與地理位置整合的介面,必須整合地圖系統與商業智慧資料倉儲中的資訊。

由於不可能要求客戶自行維護一套價值數百萬的地圖系統,客戶也不可能將業務資訊輕易的由開發廠商處理,同時間,又要兼顧行動裝置的應用。

最佳的方式就是將地圖系統、營運資料全部Web services化。前者位於開發商的伺服器上,後者位於客戶的伺服器。Pocket PC透過GPRS與Web services擷取雙邊資訊,再進行交叉比對,最後呈現的便是具備地理資訊的商業智慧系統。

單純的利用Web services將不同平台與企業解決方案裡的資料挖取出來,再整合顯示固然不錯,但是若能更進一步的將不同來源的資料進行交叉比對,將會產生許多機會與應用。如微軟,組織內部有一套供予銷售人員存取的Sales Portal,內建許多Web Part,其中就有個名為「News in My Accounts」(跟我客戶相關的新聞)。

該系統可在銷售人員存取Sales Portal時,自動辨識出銷售人員身份,同時利用Web services取出內部Siebel CRM系統裡的客戶清單,再透過Web services與MS Library(新聞系統)進行交叉比對,所得應用就是可大幅減少銷售人員閱讀新聞時間的「News in My Accounts」。

可以簡單的計算一下,如果全球每天有五千個銷售人員存取這系統,每天減少一小時的時間尋找與客戶相關的新聞,不只可以即時掌握客戶狀況,整體省下的時間成本也相當可觀。

流程整合

可分析的不只是現在與過去的資訊,整合不同資料來源之後的分析數據,甚至可以取得營運趨勢或是客戶行為預測的「領先指標」。一旦發現所要注意的現象與趨勢,最後甚至還可以觸發「行為」,也就是進行所謂的流程整合。

電子商務網站應用,甚可以將不同系統中的客戶資料(CRM)、銷售資料(ERP)與客戶瀏覽習性進行交叉比對,進而辨識出新的商業機會,同時開始運作流程,將相對應的促銷商品、不同網站或網友的評價、運費等資訊自動整合成為個人化促銷郵件遞送給予相關客戶。

利用Web services進行整合工作而後衍生的應用可能,充滿想像空間,就留待各位發展創意。

WEB SERVICE

webservice是一概念
socket是一種協議

socket用於底層的數據傳輸 2進制的數據傳輸
HTTP也是協議 傳輸的是HTML文本
SOAP是一種基於HTTP的協議 常用於實現webservice數據傳輸

WebService的優點在於:
1、跨平台
2、使用XML
3、可穿過防火牆
4、技術難度比CORBA小得多
5、低成本實現
6、也可用於C/S結構



缺點:
效率比CORBA、Socket低
數據量較大

webservice 就是個對外的接口,裡面有函數可供外部客戶調用(注意:裡面同樣有客戶不可調用的函數).假若我們是服務端,我們寫好了個webservice,然後把它給了客戶(同時我們給了他們調用規則),客戶就可以在從服務端獲取信息時處於一個相對透明的狀態.即是客戶不了解(也不需要)其過程,他們只獲取數據.

webservice傳遞的數據只能是序列化的數據,典型的就是xml數據,這裡我們也只討論xml數據的傳輸.

這個函數就是外部可調用的接口函數,對用戶來說相當於一個API.如果某用戶在引用了這個服務後,他調用HelloWorld()方法,他就將獲得"HelloWorld"這個返回值.
其實webservice並不是那麼的神秘,它也不過只是個接口,對我們而言,側重點依然是接口函數的編寫.下面,我將給出我們的例子所需要的接口函數.





網路上看到的問題,可以釐清一些觀念

Q: 用C#在本機做好的WEBSERVICE服務要佈屬到其他機器上運行,運行的機器一定要安裝.NET嗎?
把目錄COPY到SERVER後訪問該SERVICE.ASMX,只顯示<%@ WebService Language="c#" Codebehind="Service1.asmx.cs" Class="WebService1.Service1" %>,

A:必需安裝.net Framework。
Q: C#不是可以跨平台運行嗎? 為什麼就一定要裝.net Framework框架呢?
那用.net Framework框架寫的WEBSERVICE可以在LINUX上運行嗎?
A:編譯為DLL,就可以了
A: C#的跨平台,是建立在.net Framework的支持上的,沒有.net frameWork的支持,c#什麼也做不了
所以,C#寫的程序必須在安裝了.net framework上運行
由於現在還沒有在LINUX上的.net framework
所以,C#寫的程序,是不可能在LINUX下運行的
不過,Web Service是一項Web服務,並不是在你本機上運行
因此,你的Web Service配置在支持.net framework的機器上
在LINUX下調用這個web service是可以的

特殊需求,需要在linux下運行.NET的web服務,不知有什麼解決方案。 另外,IIS能用mono在linux下跑成功吗?另外,IIS能用mono在linux下跑成功嗎?

不知道你的Linux是哪個發行商的,
Ubuntu Linux上可安裝libapache2-mod-module
其實這就是Apache的MONO模塊,安裝了以後應該就可以跑ASP.NET了。
不過我沒試過在Linux上使用ASP.NET請你自己試試。

這兒是Mod_MONO的項目主頁:
http://www.mono-project.com/Mod_mono http://www.mono-project.com/Mod_mono
linux下有mono項目,可以在linux下跑.net,不管是c/s還是b/s,都可以簡單移植過去。
http://www.mono-project.com/Main_Page
这是官方网站,要想在linux下跑.net可以装这个。 這是官方網站,要想在linux下跑.net可以裝這個。

[RemObjects_SDK.rar] - 利用RemObjects SDK创建的客户和服务器应用程序可以容易的通过网络相互通讯。 RemObjects SDK可提供.NET和Delphi版本,带来一个创建分布式应用的快速方法,利用Service Builder简单的建模您的服务器接口,Service Tester用于性能和稳定性测试,并可

在linux下用C或C++访问Web Service的资料
gSOAP: Generator Tools for Coding SOAP/XML Web Services in C and C++


2 月 11 日「微軟線上專家對談」主題: 以 Web services 實現應用程式整合

开发,配置,调用-三步走构建简单的asp.net webservice(C#)-适合初学者阅读

據說delphi可以將Web Service編譯成dll,放在IIS下可運行,是不是這樣?

Socket提供了进程通信的端点,最重要的是,socket 是面向客户/服务器模型而设计的,针对客户和服务器程序提供不同的socket 系统调用。Socket 接口是访问 Internet 使用得最广泛的方法。
Remoting是一种分布式处理方式。在Remoting中是通过通道(channel)来实现两个应用程序域之间对象的通信的。
Web services是建立可互操作的分布式应用程序的新平台。Web service 从表面上看,就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web来调用这个应用程序。
根据微软官方的解释,WCF(之前的版本名为“Indigo”)是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。WCF是微软分布式 应用程序开发的集大成者,它整合了.Net平台下所有的和分布式系统有关的技术,例如.Net Remoting、ASMX、WSE和MSMQ。以通信(Communiation)范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于 Internet;以宿主程序而论,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作为宿主(Host)。WCF可以支持的协议包括TCP,HTTP,跨进程以及自定义,安全模式则包括SAML, Kerberos,X509,用户/密码,自定义等多种标准与模式。也就是说,在WCF框架下,开发基于SOA的分布式系统变得容易了,微软将所有与此相 关的技术要素都包含在内,掌握了WCF,就相当于掌握了叩开SOA大门的钥匙.WCF完全可以看作是ASMX,.Net Remoting,Enterprise Service,WSE,MSMQ等技术的并集。

Socket,Remoting,Enterprise Services,Web Service,WCF
-------这些都不是通信技术...

现在通信技术基本上只用TCP/IP...


http://www.ad0.cn/netfetch/read.php/341.htm

Socket模拟Http协议,读取http header,根据content-length的值,读取Http body

[心得]在php中使用Web Service
[心得]使用php提供Web service

典型的Web Service结构(转)

是否可以認為webservice是通過socket實現的?
webservice的實現在socket層面上的解釋是:
1、作為客戶端,調用webservice服務即是向socket服務端(80端口)發送一定格式(xml格式的?)的字符串,然後在本次socket連接中接收服務端返回的字符串?
2、作為服務端,打開socket服務,監聽80端口,接收客戶端發來的字符串,然後向該連接返回字符串?

網友回复:沒有關係! 你那是强行将两个东西扯在一起!你那是強行將兩個東西扯在一起! 網友回复:看這個你就明白了

webservice用soap協議,soap協議只是用來封裝消息用的。 封装后的消息你可以通过各种已有的协议来传输,比如http,tcp/ip,smtp,等等封裝後的消息你可以通過各種已有的協議來傳輸,比如http,tcp/ip,smtp,等等
http://topic.csdn.net/t/20031123/15/2485964.html http://topic.csdn.net/t/20031123/15/2485964.html

網友回复:要一層一層分析它的本質,而不是只看表面現象網友回复:socket是通訊協議,web service是數據協議你可以坐火車出門,但是你不能說你是鐵路實現的網友回复:剛才學習了http://www.w3school.com.cn /webservices/ws_use.asp,截下了“華氏、攝氏溫度轉換”的通訊報文。分析了下, 我填了攝氏轉華氏,500攝氏度,結果是933.8華氏度。下面是交互的數據。

發送:
POST http://www.w3schools.com/webservices/tempconvert.asmx/CelsiusToFahrenheit
HTTP/1.0..Accept: */*..Referer: http://www.w3school.com.cn/webservices/ws_use.asp. .Accept-Language: zh-cn..Content-Type: application/x-www-form-urlencoded..UA-CPU: x86..Proxy-Connection: Keep-Alive..User-Agent: Mozilla/4.0 (compatible ; MSIE 7.0; Windows NT 5.1; WPS; Maxthon; CIBA)..Pragma: no-cache..Content-Length: 11..Host: www.w3schools.com..Cookie: ASPSESSIONIDACCRBRCA=GMAEHIABLCIJEKEMDDKAPKAM;
__utma=119627022.1292411626.1210746833.1210746833 .1210749095.2;
__utmc=119627022;
__utmz=119627022.1210746833.1.1.utmcsr=(direct) &brvbarutmccn=(direct) &brvbarutmcmd=(none)....Celsius=501


接收:
HTTP/1.1 200 OK..Via: 1.1 XXXXXXXXXXX..Connection: Keep-Alive..Proxy-Connection: Keep-Alive..Content-Length: 90..Date: Wed, 14 May 2008 08:07:23 GMT. .Content-Type: text/xml;
charset=utf-8..Server: Microsoft-IIS/6.0..MicrosoftOfficeWebServer: 5.0_Pub..X-Powered-By: ASP.NET..X-AspNet-Version: 2.0. 50727..Cache-Control: private, max-age=0.... <?xml version="1.0" encoding="utf-8"?>.. <string xmlns="http://tempuri.org/ ">933.8 </string>


就這個溫度轉換的例子而言,可以看出調用webservice服務並不是“xml”格式化的字符串,服務端返回的包含有“xml”化的數據。
這些數據理論上通過socket是可以發送和接收的,但實際上自己生成第一次發送的內容基本上是不可能的,對於接收的內容倒是可以按照要害字進行篩選。

首先webservice可以通過http實現,也可以通過其他很多種協議實現,socket比http更底層,就像人和大便的關係,呵呵。
webservice假如用http協議來實現的話,那在socket層面上的解釋是:
客戶端調用 webservice服務,即是向socket服務端(80端口?)發送一定格式(按照http協議打包?針對501,就會有第一次的數據那麼多,想要搞明白,估計還得去研究http協議,對我是不可能的任務了)的字符串,然後在本次socket連接中接收服務端返回的字符串(字符串是將 webservice處理產生的的實際內容“933.8”經過soap協議打包,即按照xml格式處理,也就是標紅的部分,然後再經http協議處理(又包了一層網絡通訊需要的內容,不過這和soap打包的性質不一樣,soap是在數據內容層面上加上xml的格式),形成最終收到內容)
網友回复:更正下,上面應該是:

接收:
HTTP/1.1 200 OK..Via: 1.1 XXXXXXXXXXX..Connection: Keep-Alive..Proxy-Connection: Keep-Alive..Content-Length: 90..Date: Wed, 14 May 2008 08:07:23 GMT. .Content-Type: text/xml; charset=utf-8..Server: Microsoft-IIS/6.0..MicrosoftOfficeWebServer: 5.0_Pub..X-Powered-By: ASP.NET..X-AspNet-Version: 2.0. 50727..Cache-Control: private, max-age=0.... <?xml version="1.0" encoding="utf-8"?>.. <string xmlns="http://tempuri.org/ ">933.8 </string>


.net以soap调用php的WebService

2009年4月15日 星期三

javascript

http://www.kuqin.com/language/20081029/24922.html#event-handlers
Yahoo!网站性能最佳体验的34条黄金守则——内容
網站速度提升的34種方法 Yahoo開發團隊推薦

http://myshare.url.com.tw/tag/javascript
提高:如何优化JavaScript脚本的性能
連線速度

如何提高頁面響應速度


JavaScript的陷阱

JS文件加载速度慢,让javascript加载速度显著提高


JavaScript是怎樣讓互聯網變慢的
本貼轉載至:http://mygaf.jack-ck.com/viewthread.php?tid=93128



http://www.goodman-lai.idv.tw/2008/06/firefox-3.html

smartclient
http://www.microsoft.com/taiwan/msdn/columns/mvp/200506_smartclient.htm

http://www.google.com.tw/search?q=javascript+%E5%BF%AB%E5%8F%96&hl=zh-TW&rlz=1B3GGGL_zh-TWTW297TW297&start=10&sa=N

http://zh.wikipedia.org/wiki/JavaScript

http://funp.com/push/?tag=javascript&hot&stars=1

http://blog.miniasp.com/post/2008/07/quipt-Client-side-library-caching-with-JavaScript.aspx

http://funp.com/push/?tag=javascript&hot&stars=1


http://bioinformatics.iis.sinica.edu.tw/GANA/_vti_bin/_vti_adm/help/1028/Publish/wsggloss.htm

http://died.tw/2009/04/chrome-experiments-google.html

http://lookmine.twbbs.org/2009/04/jquery-javascript.html

http://blog.riaproject.com/ajax/1067.html

使用即時追蹤 記憶體使用量
FF 185,000K 每抓一次資料CPU 20 觸發事件 189,000K CPU+5
IE 90,000K 每抓一次資料CPU 09 觸發事件 99,000K CPU+15 4-16記

技術文章:學習javascript必看

使用物件導向技術來建立進階 Web 應用程式
本文探討:
  • JavaScript 為一原型語言
  • 使用 JavaScript 設計物件導向程式
  • JavaScript 的程式設計技巧
  • JavaScript 的未來

參考

AJAJ, PHP JSON Javascript

javascript裡物件還有陣列(js的陣列其實也是物件)的一種簡略表示方法->JSON

2009年4月13日 星期一

暫存-javascript記憶體管理

開完會~對記憶體部分有了一點消息
在開會時分別用 FF 與 IE demo系統 發現
兩者CPU都衝到50% 記憶體 IE:130,000 FF:55,000
執行時 IE明顯被打垮了

詢問後~
萍華兄:FF 原本就對javascript支援度高,IE..不適合跑過多javascript ,建議用PHP ,但..GMAP 用javascript寫的,也沒辦法改,試試刪除物件吧~ 怎麼刪 .. 我也不清楚 >< 現在找到的資料.. Java Script∕節省記憶體 for IE6.0
太多的程式碼同時載入會浪費記憶體嗎?
其實在<script language="javascript">...</script>內的程式碼,執行過之後便沒用了,但內裏的程式碼卻保留在系統之中,這樣實在太浪 費記憶體了。本單元的程式碼可令網頁載入後消掉一些沒用的程式敘述,可讓網頁走得更暢快,非常適合一些大量使用 JavaScript 的網頁
輕量級JAVASCRIPT編輯器 : 1st JavaScript Editor

深入研究Google瀏覽器
有幾張漂亮的數據圖
CSS測試是用http://www.howtocreate.co.uk/csstest.html的測試網頁。
JavaScript測試是用Celtic Kane所寫的測試程式(http://celtickane.com/webdesign/jsspeed2007.php)。
記憶體測試時,先開啟十個資料量很大的網頁,再用Google Chrome的about:memory指令查看記憶體用量。

AJAX七項原罪

新增程式方法
JavaScript Memoization

參考
Ajax記憶體無法釋放

Google新開發的原生用戶端(Native Client)軟體--這項研究計畫宣稱,可讓架構在網路上的
軟體跑起來幾乎像在電腦上執行一樣快

javascript引擎 Chrome的V8和Mozilla的TraceMonkey
SunSpider 是一個javascript測試網站

KB-Javascript Anonymous Function Memory Issue

探討 程式寫法
http://forum.moztw.org/viewtopic.php?t=18498
http://blog.xuite.net/vexed/tech/22697513

http://fillano.blog.ithome.com.tw/post/257/11011
http://o-asp.com/Art/Show.asp?id=3945 要註冊

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4/14 撿到寶了

Reducing Browser Memory Leaks

The Google Maps API encourages the use of function closures, and the API event handling system GEvent attaches events to DOM nodes in such a way that almost inevitably causes some browsers to leak memory, particularly Internet Explorer. Version 2 of the Maps API introduces a new method, GUnload(), that will remove most of the circular references that cause these leaks. You should call GUnload() in the onunload event of your page to reduce the potential that your application leaks memory:

<body onunload="GUnload()">

Using this function has virtually eliminated Internet Explorer memory leaks in Google Maps, though you should test for memory leaks on your own site using tools like Drip if you are noticing memory consumption problems.

看樣子要常逛GOOGLE MAP API

2009年4月11日 星期六

連線穩定度 省電能力

1.連線穩定度:

描述:
  • 回家要牽車時,跑出:
無法讀取資料連線,按了確定 又繼續跑

解決方法 : catch
{
;
}
  • 進入室內一陣子:
也會跳出 忘了
NullReferenceException 於WSuserV32.Form1.UpdateData() at TASK.Invoke()
  • 一直收不到server回應:

連線逾時 time out

解決方法,try 會逾時的地方,catch exception 狀態若為逾時 則睡眠增加。


2.省電能力:

不同交通模式:
  1. 步行8秒
  2. 機車4秒
  3. 火車4秒
  4. 特殊
靜止
可見衛星數:0 表是在室內!!
PDOP:25.5 表是什麼呢?

議題~~~~~~~~~~~
在室內: 要分辨衛星數 有可見衛星數 、 鎖定衛星數

目前在房間內PDA顯示
0/1(0)
但經緯度有值,HDOP VDOP PDOP 皆為25.5

回家後,手機還有電,程式與GPS Speed Sentry持續開啟,但關閉螢幕
出門前打開螢幕,GPS Speed Sentry 顯示無可用NMEA值 是否重新連結。
此時點選是~查看衛星分布,在3D圖式上可見完整衛星分布,但都無鎖定。
程式開啟,繼續傳送,往學校方向走去,
程式GPS資訊顯示~衛星數0/1(0) 但經緯度友值。
到學校後發現,地圖一值標示在家裡。
所以可以推斷,若GPS 衛星數0,經緯度值並不會更新,表靜止!4-16記

2009年4月10日 星期五

什麼是 JavaScript

JavaScript

是一種直譯式語言,它可以被嵌入 HTML 的檔之中。可以用來處理一些畫面的特效,例如變換圖片、彈出式的選單、電子時鐘、拼圖遊戲等。不同於伺服器端腳本語言,例如PHPASP,JavaScript是client端腳本語言,其原始碼在發往客戶端執行之前不需經過編譯,而是將文字格式的字元代碼發送給瀏覽器由瀏覽器解釋執行,也就是說JavaScript是在用戶的瀏覽器上運行,不需要伺服器的支援而可以獨立運行隨著網頁下載到你的電腦後,便會自動執行這些程式來做出特效,通過 JavaScript 可以做到回應用戶的需求事件(如表單的輸入),這樣當一位使用者輸入一項資訊時,它不需要通過網路傳送到伺服器端進行處理再傳回來的過程,而可以直接在用戶端進行事件的處理。但因為各家瀏覽器的不同,寫程式時要注意到相容性的問題,比方說獨大的IE就單純只參考W3C的規範,自訂自己的標準,寫程式時要特別注意~


優點是:

可以減少對伺服器的負擔。而隨著伺服器的強壯,雖然現在的程式員更喜歡運行於伺服端的腳本以保證安全,但JavaScript仍然以其跨平台、容易上手等優勢大行其道。


缺點是:

解釋語言的弱點是安全性較差,而且在JavaScript中,如果一條執行不了,那麼下面的語言也無法執行。而且由於每次重新載入都會重新解譯,載入後,有些代碼會延遲至運行時才解譯,甚至會多次解譯,所以速度較慢。



Javascript與Java

  JavaScript Java 很相似,但它們卻是完全不同的語言! Java 是由 Sun Microsystem 公司開發的一種面向物件的程式設計語言,類似於C++,它需要多種編譯器和支援檔才能運行;但於 C++ 不同的是,Java 可以獨立於任何操作平臺,因此它就在當今 Internet 網路各種操作平臺的基礎上得以迅速發展。但它是一種比 JavaScript 複雜得多的標準程式語言。JavaScript 則是相對容易瞭解的函數式語言,JavaScript承襲了Java與Perl的語法JavaScript 撰寫人員可以不那麼注重編程技巧,例如宣告所有的變數、類和方法,您也不必關心諸如 public private protected 之類的費解的東西;更重要的是,它只能存在於一個 HTML Script中,而且只有在裝入一個相容的瀏覽器時才能運行,所以許多 Java 的特性在 JavaScript 中並不支持。現在,JavaScript 完全相容於 ECMA-262 標準(歐洲電腦製造協會的 JavaScript 標準);如需瞭解的更多資訊,請參閱 Netscape 的有關 Netscape JavaScript 的介紹(微軟也有一個 JavaScript 的變種,稱之為 JScript)。


因 為Javascript與Java都可以在網頁上做出動態效果,而且JavaScript還可以控制網頁上的Java Applet,所以可以互相搭配。此外,他們也都能配合伺服端程式,做出一些特別的東西;例如Google Map就利用了JavaScript和後端程式的配合,讓地圖上每一格的圖片可以在使用者移動到看到它時才開始載入,以節省流量;此外,Google Mail和Yahoo!Mail的收件者裡打了一個字,通訊錄中以那個字為開頭的帳號就會出現在下方讓你選,這也是一樣的應用。這種技術,稱為AJAX


JavaScript直譯式語言

編譯語言例 如Java。Java的源代碼在傳遞到客戶端執行之前,必須經過編譯,因而客戶端上必須具有相應平台上的模擬器或解釋器,它可以通過編譯器或解釋器實現 獨立於某個特定的平台編譯代碼的束縛。但是它必須在服務器端進行編譯,這樣就拖延了時間。但因為已經封裝,所以能保證安全性。

因為程式需要編譯後才能用,故就會牽涉到編譯器、連結器、函式庫 .... 等等各式各樣的跨平台問題,等著我們去傷腦筋。

然而,另外有一類的語言所寫出的程式是不需要「編譯」的,稱之為「直譯式語言」,這類語言只需要一個直譯器 (interpreter) 來做程式碼的翻譯,就可以完成我們想做的工作。故使用直譯式語言顯然就單純許多,比較沒有跨平台方面的問題。


語法特色~
JavaScript 是一種動態資料類型語言,也就是說,當聲明一個變數時不必指定資料的類型,當程式執行時它會自動將其轉換為所需要的類型。而當在一個運算式中將一個字串類型的值和數值型的值進行“+”運算時,JavaScript 會將數值轉換為字串

什麼是PHP

PHPHypertext Preprocessor)是一種伺服端(server-side),跨平台(cross-platform),簡單易學的HTML嵌入式非編譯性語言(HTML embedded scripting language)。

這種在電腦上執行的腳本語言(指令碼語言),主要是用途在於處理動態網頁,也包含了命令列執行介面(command line interface),或者產生圖形使用者介面(GUI)程式。

PHP 目前被廣泛的應用,特別是在伺服器端的網頁程式開發方面。一般來說 PHP 大多執行在網頁伺服器端上,透過執行PHP程式碼來產生使用者瀏覽的網頁提供瀏覽器讀取。PHP 幾乎可以在不同種的伺服器、任何的作業系統、平台上執行,也可以和許多資料庫系統結合而且使用 PHP 完全是免費的。官方組織 PHP Group 提供了完整的程式原始碼,允許使用者修改、編譯、擴充來使用。根據2007年4月的統計資料,PHP 已經被安裝在超過2000萬個網站和100萬台伺服器上。

目前PHP5包含了許多新特色,像是強化的物件導向功能、引入PDO(PHP Data Objects,一個存取資料庫的延伸函式庫)、以及許多效能上的增強



什麼是HTML-標記語言

超文件標示語言(HyperText Markup Language),簡稱為HTML
是為了建置網頁並可在其他網頁瀏覽器中看到的信息而設計的一種標示語言標示語言
HTML被用來結構化欲傳達給瀏覽者的信息——例如標題、段落和列表等等,也可用來在一定程度上描述文檔的外觀和語義。由蒂姆·伯納斯-李給出原始定義,由IETF進行進一步發展,後來成為國際標準,現由全球資訊網聯盟W3C)維護。

包含HTML內容的文件最常用的副檔名是.html,但是像DOS這樣的舊作業系統限制副檔名為最多3個字元,所以.htm副檔名也被使用。雖然現在使用的比較少一些了,但是.htm副檔名仍舊普遍被支持。網頁編輯者可以用任何文字編輯器或所見即所得的HTML編輯器來編輯HTML文件。

早期的HTML語法被定義成較鬆散的規則,以有助於不熟悉網路出版的人採用。網頁瀏覽器接受了這個現實,並且可以顯示語法不嚴格的網頁。隨著時間的流逝,官方標準漸漸趨於嚴格的語法,但是瀏覽器繼續顯示一些遠稱不上合乎標準的HTML。使用XML的嚴格規則的XHTML(可擴展超文件標示語言)是W3C計劃中的HTML的接替者。雖然很多人認為它已經成為當前的HTML標準,但是它實際上是一個獨立的、和HTML平行發展的標準。W3C目前的建議是使用XHTML 1.1、 XHTML 1.0或者HTML 4.01進行網路出版。


標記語言
標記語言,也稱置標語言是一種將文本(Text)以及文本相關的其他信息結合起來,展現出關於文檔結構和數據處理細節的電腦文字編碼。與文本相關的其他信息(包括例如文本的結構和表示信息等)與原來的文本結合在一起,但是使用標記(markup)進行標識。超文本標記語言HTML)和可擴展標記語言eXtensible Markup LanguageXML)。標記語言廣泛應用於網頁網路應用程式。標記最早用於出版業,是作者、編輯以及出版商之間用於描述出版作品的排版格式所使用的。

與標記語言相反的是程式設計語言
編程語言programming language),又稱程式設計語言program design language,簡稱PDL),是一組用來定義電腦程式的語法規則。它是一種被標準化的交流技巧,用來向電腦發出指令。一種電腦語言讓程式設計師能夠準確地定義電腦所需要使用的資料,並精確地定義在不同情況下所應當採取的行動。

編程語言原本是被設計成專門使用在電腦上的,但它們也可以用來定義演算法或者資料結構。正是因為如此,程式設計師才會試圖使程式代碼更容易閱讀。

編程語言往往使程式設計師能夠比使用機器語言更準確地表達他們所想表達的目的。對那些從事電腦科學的人來說,懂得程式語言是十分重要的,因為在當今所有的計算都需要程式語言才能完成。

暫存

LBS :
即時行動追蹤組成
架構圖

定位方式
GPS , CELL-ID , WIFI,RFID,Blooth tooth



gps 歷史,規格,準確度,訊號格式

連結技術 :
webservice優 缺點 (socket)
SOAP

WEB2.0技術
什麼是HTML
什麼是XML
什麼是JAVASCRIPT
什麼是PHP

AJAX
XMLHTTP




開發工具

SDK:
windows mobile6.0
pocket pc
win CE

開發環境 .net framwork
IDE :visual studio 2005

web server : micorsoft IIS , apachy
database : mysql,mssql
google map api

skype api


2009年4月9日 星期四

見鬼了 parseInt('08')

今天月曆顯示 8號 9號 應該 要出現連結變色才對~
月曆語法應該沒有問題啊~ 抓蟲結果.. 無解~?!!

alert("parseInt('10') = "+parseInt('10') + " parseInt('09') = "+parseInt('09')+"  parseInt('07') = "+parseInt('07')+"  parseInt('03') = "+parseInt('03'));

alert出來的結果是:
parseInt('10') = 10 parseInt('09') = 0 parseInt('07') = 7 parseInt('03') = 3
怎麼會這樣~

----------------------------------------------------------------------------------
原來啊~~

parseInt
語法
parseInt(numString, [radix])

描述: 轉換型別為string的數字,變成型別為number的數字
參數 :
  • radix為 option,表示"進制";
  • numString有幾個可能性:
  1. 前面部分是'0x' 的字串會被當作16進制,
  2. 如果前面是'0' 的字串則被當作8進制。
  3. 所有其它字符串都被當作是10進制。
  4. 如果前面是無法解析的數字,比如XYZ ,則會顯示 'NaN'。
所以.. 08 09 被當作8進制~才會映出 '0' ~ 怪怪
因此~只要parseInt(numString, 10) 就好了~~

2009年4月6日 星期一

IE快取問題

再使用FF都沒問題的,但IE問題卻發生了~
載入的檔案沒有更新,在HTML裡已經宣告過標頭不快取了~但還是硬生生被鎖住,
按Ctrl+ F5,怪哉~發現居然還是讀到舊檔...
想想...我的程式是透過連結SERVER上的php檔來抓資料,所以就只要改PHP檔的標頭就好了吧~果然~ 一試OK~
如果有欲到IE快取問題,可以根據不同的需求,來做避免快取的動作吧~

以下是在不同檔案的避免快取辦法~

可以在HTML裡


<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
<META HTTP-EQUIV="EXPIRES" CONTENT="Mon, 22 Jul 2002 11:12:01 GMT">
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">


在JSP裡:

要連結的網址後面加參數,名稱不一樣,瀏覽器就會被騙過去再載一次
window.location.href='linkpage.jsp?t='+new Date().getTime();


在PHP裡

程式碼最前面加上:
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);


在CSS連結~
簡易克服 CSS 被瀏覽器快取(Cache)的問題

參考 JSP: 避免用戶端快取網頁內容的幾種方法比較 裡面有幾個方法的測試

gdownload函式

寫網頁時,動態載入的函式使用的是google API,要注意,因為是非同步的方式,所以要處理資料的程式,應該要確保為request後所得到的資料的後面,才不會發生,要把資料秀出來時卻說資料未定義~

http://coolersport.info/csite/index.php?a=CDownloadUrl,這是人家寫好的,具有簡易判斷瀏覽器與XML識別,可以看做是gdownload()拆解~

暫放

簡易CSS語法教學,不含排版部分。新手適用!
CSS 語法教學

正規表達式,PHP繼承*NIX的一貫傳統,完全支援正規表達式的處理,split("-",$xx)函式是其中一例
PHP程式設計講義區

參考 Neo 's Blog,下面這篇提供了好幾個日期選擇器..
[Javascript] 免費、直覺的日期選擇元件

PHP與MySQL實務運用

新娘秘書專區 這個要講一下,這是個人Blog,重點不是在新娘..是在右下角的月曆,樣式蠻喜歡的~看了一下源碼是yahoo的API ..

問題是這樣的~
網頁一載入,就要有個日曆秀出哪幾天有資訊,點擊有資訊的那幾天會再秀出所有的時間點,
方法是用資料庫搜尋的方式, 先判斷當月哪幾天有資訊,if有,變更日期為可連結,點擊連結,責執行非同步下載當天資訊,再載入下拉式選單。

首先,google了關鍵字月曆、行事曆,但沒找到適合的,幾乎都是找到修初登入網頁時的當月月曆,後來看到"日期選擇器",是用來讓使用者方便點擊來輸入生日等日期資訊用的,還是找不到適合的,
而這些都是人家做好的,有的是直接在網頁裡嵌入這些原碼或者是引用JS檔,但如要與資料庫連線,應該就不提供了,原本想偷懶的,但看到程式碼..好多啊~ 所以看了這麼久,只好自己寫了,
從最簡單的NVU這個IDE下手,NVU有提供一個月曆元件,也是只有提供最簡單的秀出當天日期,

作修改的話,首先要產生<< >> 兩個連結, 就是可以點擊上一個月份 下一個月分,
第二步,連結資料庫秀出哪幾天有資訊
第三部,寫javascript 動態載入所點擊之當天日期內所有時間點資訊

而月曆寫法,應該都大同小異,
用date()得到本機日期時間,判斷是否為閏年,計算本月第1號是在星期幾,在之前的表格都設為空,判斷月曆的列數,印出整個月~

比較要注意的就是,日期函式中,getMonth()函式所得的月份要+1 數字才對。

javascript 日期函式
Javascript实例教程(15) 日期函数



PHP程式設計講義區


以下是時間選擇器~

[Javascript]Time Picker視覺化的時間選擇器



http://jsgears.com/thread-134-1-1.html

http://www.study-area.org/coobila/tutorial_468.html2

http://blog.darkthread.net/blogs/darkthreadtw/archive/2007/09/04/code-javascript-time-picker.aspx

2009年4月1日 星期三

window.jstiming is undefined 網站又掛了~google map?

剛過12點~
刷新地圖就不見了..
FIREFOX 錯誤主控台顯示 window.jstiming is undefined

..怎麼會在這時候發生問題~

google唯一找到的文章... 居然也沒有回覆..

這是錯誤代碼行
s.src=[c?c:"http://csi.gstatic.com/csi","?v=3","&s="+(window.jstiming.sn?window.jstiming.sn:"mfeundefined")+"&action=",a.name,k.length?"&it="+k.join(",")+d:d,"&rt=",i.join(",")].join("");s=j}};var Wr=/[~.,?&_]/g,Xr=f;zk.f=function(a,b,c){this.qm=a.replace(Wr,"-");this.Eg=c||new window.jstiming.Timer(b);window.jstiming.setTimerName(this.Eg,this.qm);this.Jq=1;this.tD=0;this.uf={};this.Jl={};this.Um={};this.iq=""};


都快放棄了才發現...解決辦法~
"http://maps.google.com/maps?file=api&v=2.x&key=abcdef"

改成
"http://maps.google.com/maps?file=api&v=2&key=abcdef"

就如同連結裡說的~2.X版 不穩定~改回第2版即可

2009年3月31日 星期二

網頁開發除錯工具

記得曾經找過網頁開發工具,除錯的部分都用firefox的控制台,之前就夠用了但現在網站越來越大條了,發現用IE跑的話,有些問題出現,甚至跑不動,重新找了一遍除錯工具

適用 FireFox -- Firebug 1.3.3

適用 IE --(IEDevToolBarSetup.msi)
微軟官方抓下來忘了留網址,自己找吧!

php) date 時間日期不對

使用PHP 內建日期函式 date(Y-m-d)
跑出來結果都跟本機時間不同,但在MySql使用其內建date()又沒錯...怪~
原來是php server 問題~ 要設定php.ini 的timezone 為Asia/Taipei

若不改設定檔~可以用下面方式

程式碼中加上
date_default_timezone_set("Asia/Taipei");
預設指定系統時間為台灣就可以了~

or
date('Y-m-d G:i:T', strtotime('+8HOUR') )
指定時間偏移到為台灣時區就可以了~

到右下角小時鐘,點"時區"分頁,就會看到 (GMT+08:00)台北

據說是5.X版後全改成格林威治時間~

Timeout偵錯

WebClientProtocol.Timeout 屬性

HttpWebRequest.Timeout 屬性

Session Timeout 設定及讀取

WebService calling from Pocket PC


12月04日「 微軟線上專家對談」主題:ASP通往ASP .NET的升級之路

c# 关于HttpWebResponse蹦出的异常的一个问题

C# 呼叫 WebService

http://sls.weco.net/calendar-orig/2009/01/4

2009年3月27日 星期五

javascript 物件導向宣告

javascript控制html元素顯示/隱藏

1。編寫js函數

< script type="text/javascript">

function display(id){

vartraget=document.getElementById(id);
if(traget.style.display=="none"){
traget.style.display="";
}else{
traget.style.display="none";
}
}
< /script>

2.要顯示/隱藏的html元素加上id屬性

< table>

< tr id="menu" >

< td>控制這個tr的顯示/隱藏< /td>

< /tr> < /tr>

< /table> < /table>

3,添加按鈕,鏈接等觸發js函數

< input type="button" onclick="display( 'menu' )" value="顯示/隱藏"/>

< a href="#" onclick="display( 'menu' )" >顯示/隱藏< /a>
javascript顯示隱藏層
< div id="" style="display:none;">廣告< /div>
< input type="botton" onclick="函數">

< script language=javascript>
function函數{
if(thisdiv.style.display=='none'){
thisdiv.style.display=""
}
else
thisdiv.style.display="none"
}

< /script>

你先給div取個ID=“AA”thisdiv=AA
javascript隱藏/顯示表單對象


[SCRIPT language=javascript]
function expandIt(el) {
whichEl =document.getElementById(el)
if (whichEl.style.display == 'none') {
whichEl.style.display = '';
}
else {
whichEl.style.display = 'none';
}
}

[/SCRIPT]

el是對象的id,不管是tr或者table等等先設置一下id,然後進行調用。

例:

[a onclick="expandIt('ttchild'); return false" href="#" ]try it[/a]

[tr id="ttchild"][td width="18"]Example[/td][/tr]

使用時把[]變成< >

javascript控制頁面控件隱藏顯示的兩種方法

javascript控制頁面控件隱藏顯示的兩種方法,方法的不同之處在於控件隱藏後是否還在頁面上佔位方法一:
document.all["PanelSMS"].style.visibility="hidden";
document.all["PanelSMS"].style.visibility="visible";

方法二:
document.all["PanelSMS"].style.display="none";
document.all["PanelSMS"].style.display="inline";
方法一隱藏後頁面的位置還被控件佔用只是不顯示類似於.net驗證控件的Display=Static
方法二隱藏後頁面的位置不被佔用類似於.net驗證控件的Display=Dynamic

2009年3月25日 星期三

ASP.NET權限不足,無法使用WINDOWS應用程式

最近遇到了個問題
撰寫了一個web service掛載於IIS下,web service會透過SKYPE API呼叫本機電腦裡面的應用程式(SKYPE)作發送簡訊的功能。

未發行至IIS下叫用都是正常的,也寫了一個windows form 來叫用確認是可以執行的
但一發布到IIS下,偵錯時卻發生了.. client端程式 出現wait timeout..

開啟web service 偵錯模式,再來看看web service怎說~
web service先參考skype4com.dll,在程式裡new skypeclass()實體為 myskype都OK,下一步
myskype.sendSMS("+886xxxxxxxxx","hello","") 馬上消失,就像正在處理工作一樣程式碼沒有反紅,看不到偵錯情形。
利用try and catch把runtime error抓出來,錯誤顯示
System.Runtime.InteropServices.COMException (0x80040200): Not attached.
於 SKYPE4COMLib.SkypeClass.SendSms(String TargetNumbers, String MessageText, String ReplyToNumber)
於 Service.HelloWorld() 於 c:\Inetpub\wwwroot\WSsendSKYPE2\App_Code\Service.cs: 行 70

怪哉~GOOGLE了很久,沒有一個解決的方法~
問題可能出在"安全性"問題上~
ASP.NET預設使用者使用資源的安全性與windows應用程式預設安全性不同,所以才會有掛載在IIS下的webservice與windows form使用SKYPE.EXE權限不同!

MSDN tech提到安全性原則部分
有兩個步驟:
1.讓ASP.NET使用者權限提到最高,可以執行、讀取、寫入等等
2.讓SKYPE檔案降低權限可以被設定的使用者群組執行、讀取等

之後再在web service程式碼裡頭加上
System.Diagnostics.Process.Start("Skype.exe"); 允許讀取到此執行檔


System.Diagnostics.Process.Start("Skype.exe");
錯誤顯示 :
{"System.Web.Services.Protocols.SoapException: 伺服器無法處理要求。 ---> System.ComponentModel.Win32Exception: 系統找不到指定的檔案。\n 於 System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)\n 於 System.Diagnostics.Process.Start()\n 於 System.Diagnostics.Process.Start(ProcessStartInfo startInfo)\n 於 System.Diagnostics.Process.Start(String fileName)\n 於 Service..ctor() 於 c:\\Inetpub\\wwwroot\\WSsendSKYPE2\\App_Code\\Service.cs: 行 15\n --- 內部例外狀況堆疊追蹤的結尾 ---"}

挖哩,還是讀取不到~>~<~ 不知道是使用者群組原則是否沒有設定好,但我已經把權限都改成"完全控制"了呀?! 之後也試過了web.config 組態設定,還沒試"註冊表"修改~畢竟如果轉移網站的話,不好意思把別人的系統弄掛吧>< 如果web service 可以叫用額外寫的windows form(APP1),而APP1可以使用SKYPE API進行發送簡訊,這樣也許可以完成。只要APP1的路徑掛在IIS下,但不成為ASP.net的成員。不知道這樣的觀念有沒有錯~ 終於找到了這個想法的實現方式~"遠端物件"~~~~~ 利用.net framwork 提供的 remoting namespace把windows application當作遠端物件使用~ 依然要考慮到使用者群組安全性原則~ 但是..這又是一個大議題..依目前程度要花不少時間來看。 想著這個方法的可行性入睡~~~ 也許有另一個方式會比較間接,但可行性有9成!! 利用資料庫當作媒介,讓WEB SERVICE作寫入,另一隻程式做讀取判斷來執行SKYPE 一樣另外寫一個windows application,這隻程式不斷讀取資料庫作判斷。 這樣一來,windows application是在系統管理者的權限下執行而可以使用SKYPE API 再者,移動網站時,也不需要考慮到路徑的問題,只需要多安裝這個application了~ 但,這畢竟是較低級的方法,application 會不斷使用系統資源,還是使用event觸發的方式較能節省系統資源。

2009年3月24日 星期二

SKYPE API

Skype4COM reference

https://developer.skype.com/Docs/Skype4COM

Examples

https://developer.skype.com/Docs/Examples#head-3ff2bc7e3da15010b5c305b7604c85275f971b60

CLASS ref

https://developer.skype.com/Docs/Skype4COMLib

Skype4COMLib Version History

https://developer.skype.com/Docs/Skype4COMLib/VersionHistory

2009年3月22日 星期日

XML DOM reference

AJAX 的X 表示XML
最近享用XML取代string >< ~ 應該比較好整理吧!
有高亮度顯示,這個就足夠
Document Object Model (DOM) Reference

很完整
JavaScript DOM


HTML DOM Document Object


document、element、node方法

document方法:
getElementById(id) 返回指定结点的引用
getElementsByTagName(name) 返回文档中所有匹配的元素的集合
createElement(name) 创建指定类型的新结点
createTextNode(text) 创建一个纯文本结点

element方法:
getAttribute(id) 返回指定属性的值
setAttribute(id,value) 给属性赋值
removeAttribute(id) 移除指定属性和它的值
getElementsByTagName(name) 返回结点内所有匹配的元素的集合

node方法:
appendChild(child) 给指定结点添加一个新的子结点
removeChild(child) 移除指定结点的子结点
replaceChild(newChild,oldChild) 替换指定结点的子结点
insertBefore(newChild,refChild) 在同一层级的结点前面插入新结点
hasChildNodes() 如果结点有子结点则返回true

node属性:
nodeName 以字符串的格式存放结点的名称
nodeType 以整型数据格式存放结点的类型
nodeValue 以可用的格式存放结点的值
parentNode 指向结点的父结点的引用
childNodes 指向子结点的引用的集合
firstChild 指向子结点结合中的第一个子结点的引用
lastChild 指向子结点结合中的最后一个子结点的引用

2009年3月21日 星期六

2009年3月14日 星期六

開啟關閉 windows mobile WIFI

1.
[DllImport("coredll.dll")]
public static extern int DevicePowerNotify(string device, CEDEVICE_POWER_STATE state, int flags);


[DllImport("coredll.dll")]
public static extern int SetDevicePower(string pvDevice, int df, CEDEVICE_POWER_STATE ds);


没有专门针对WIFI设备的API, 但是可以通过上面两个方法,控制WIFI状态

2. ref: http://topic.csdn.net/u/20080728/20/a5efe62a-629c-4811-add5-bc6c53fcdd5b.html
用无线管理器ChangeRadioState函数可以指定打开或关闭某一设备,包括WIFI


首先使用函数HRESULT GetWirelessDevices()获得一个设备链表,在设备链表中根据设备类型,找到wifi设备,然后调用ChangeRadioState()打开或者关闭指定的设备。
有关上述函数的详细使用,可以查windows mobile 6 documentation

GetWirelessDevices(),ChangeRadioState()都是MS公布给OEM的标准接口,WM6都是支持的。

openNETCF有,且有例子,你找找去。


看看人家做的
http://www.cnblogs.com/MS-Frank/archive/2008/11/14/1333664.html

軟體 wifiswitch
http://www.winbile.net/bbs/forums/threads/1014040.aspx
http://www.pudn.com/downloads90/sourcecode/windows/comm/detail342414.html

Native Wifi api
该api的可以实现windows的无线客户端的网络参数配置(WlanSetProfile),连接指定的ap,断开连接和获得其他关于无线网络的信息(ssid,rssi等)。

並且有一個斷開WIFI的範例。

另一個繼續深入的搜尋資源
http://search.pudn.com/search.asp?keyword=%20wifi


coredll 全部的函式名稱
http://topic.csdn.net/t/20050826/13/4233161.html

2009年3月12日 星期四

OpenNetCF` Smart Device Framework(SDF)

http://blog.csdn.net/khler/archive/2008/06/27/2592008.aspx
很遺憾,.Net Compact Framework類庫對於在Windows Mobile做應用程序開發是很不成熟的,有時候你不得不依賴於會引起諸多問題的Platform Invoke機制。 Smart Device Framework(SDF),一個對.NetCF進行了擴展的功能庫,覆蓋了.Net Compact Framework所未觸及的區域。
如果你之前使用.NetCF為Windows Mobiel開發過應用程序,那麼你就會發現僅僅依靠微軟提供的類庫是不能滿足所有功能需要的。在這種情況下,你不得不依賴於Platform Invoke(即通常所說的P/Invoke)——一種為了與操作系統共享數據而不得不使用的令人不快的東西。幸運的是,OpenNetCF組織推出了一個叫Smart Device Framework(SDF)的類庫,它填補了微軟.NetCF類庫的不足,將所有對操作系統的服務的調用封裝到了這個類庫中,方便基於託管代碼平台的開 發者直接訪問平台服務而不需要繁瑣的P/Invoke調用。

Windows Mobile Registry 系統存取 (C#)

.NET Compact Framework使用P/Invoke服务 (二)

Windows Mobile 中开关 WIFI 的“通用”代码

codedll.dll完整函數名稱




HOW TO:在類別庫中尋找 .NET Compact Framework 的支援成員

使用 .NET Compact Framework 進行裝置的程式設計

裝置的 COM 互通性
使用 Unmanaged DLL 函式

要看DLL中有什麼內容,可以使用DumpBin.exe, 如果是ATL COM DLL, 可以使用OLE/COM Object Viewer

dll查看

求 DLL 入口函数查询工具

http://topic.csdn.net/u/20081114/09/def024cb-fb52-4276-bec6-a42cf3c585e5.html



http://topic.csdn.net/u/20080728/20/a5efe62a-629c-4811-add5-bc6c53fcdd5b.html

http://www.pudn.com/login.asp




豐富的搜尋資源


Native Wifi api


WiFiSwitch



使用 Windows Mobile 5.0 中的图片、视频和照相机

使用 .NET Compact Framework 的條碼掃描器




利用連結 iframe 內的錨點作說明頁面

在main.php裡面內嵌一個Iframe (helpinfo.php)
在main.php 有說明列表連結,點選其中一個說明連結,讓Iframe裡的資訊呈現至說明內容的指定項目

main.php

<html>
<body>

<a href="helpinfo.php#說明項目一" target="myIframe">xx1說明</a><br/>
<a href="helpinfo.php#說明項目二" target="myIframe">xx2說明</a><br/>

<iframe name="myIframe" src="helpinfo.php" width="600" height="400"></iframe>

</body>
</html>


helpinfo.php

<html>
<body>

<A NAME="說明項目一"></A>xx1說明<p>
<a NAME="說明項目二">xx2說明</a><p>
</body>
</html>

2009年3月10日 星期二

webservice 傳送問題

傳輸時,發生

用戶端找到的回應內容型別為'text/html; charset=iso-8859-1',但需要的是'text/xml'。

解:
如果您檢視錯誤訊息的內容,會發覺這個 HTML 網頁是您瀏覽 .ASMX 檔案時所見到的。這時會產生一個疑問:當我將 XML (SOAP Envelope 的格式) 公佈到 Web 服務時,為什麼會傳回 HTML?結果就是您沒有使用 SOAP Envelope 傳送 HTTP POST 要求,卻只是傳送沒有本文的 HTTP GET 要求,而 Web 服務會適當地假設您是瀏覽器,並傳回它一般的 HTML 回應。

refer
http://www.microsoft.com/taiwan/msdn/library/2002/Sep-2002/service08062002.htm

2009年3月8日 星期日

網頁問題(暫存)

目前發現的

1.在做歷史軌跡部分,時間比對在0:00~01:00時間不會顯示。
之前還莫名其妙的在想是不是網站掛了>< 因為每次開啟都不一樣問題~不同瀏覽器也有問題~

2. 行動排程 按下區域應該要顯示設定的區域!

3.行動排程應該要加上時間設定(這個頭大)

3.要可以修改會員資料,並顯示資訊以及刪除功能

4.系統說明頁面未寫

5.寄發E-mail驗證未寫

6.歷史軌跡應該從有資訊的時間點開始

7.歷史資訊控制相要加入暫停紐(不知道有沒有thread的功能)

8.區域設定可以加入MRT設定

9.PDA端可以加入POWER節省控制

10.PDA佈署要在自動安裝在最右下角

11.要加入關閉螢幕背光設定

12.網頁控制項應該加入過濾精準度的能力

13.歷史軌跡應該加入畫線速度拉軸 (慢 中 快) 或是 開始/暫停 後快轉 停止 前快轉

使用PHP撰寫網頁程式

剛開始學習網頁設計時,網站的設計比預期的還來的大~
重複的演算法與功能函式挺多的,以致於現在看到網頁源碼頭都很大>< 
早知道 就該用物件導向的寫法了~

Object Oriented Programming (OOP) 最重要的概念有三種:

  1. 封裝 (encapsulation)
  2. 繼承 (Inheritance)
  3. 多型 (Polymorphism)

參考這篇,學一下物件導向寫法的基本使用方式吧~
物件導向 類 class

php官網有更詳細的範例說明 The Basics(PHP官網)

開啟/關閉 WIFI 裝置

問題
http://topic.csdn.net/u/20080728/20/a5efe62a-629c-4811-add5-bc6c53fcdd5b.html

解法

Windows Mobile 中开关 WIFI 的“通用”代码

SystemState.WiFiStatePowerOn Property  讀取WIFI狀態的屬性,但無法設置開關
英文的 ><

Deactivate /Activate all Services like (Internet,WIFI,Bluetooth,WLAN..)

Enabling Radio in the Windows Mobile 5.0

WiFi Power On Event

開啟D0 關閉D4

We can implement this functionality with ease. Hope this can give your some idea.

See the code below:

// D0 indicates open; D4 indicates close;

CEDEVICE_POWER_STATE state = D0;

HRESULT hr = SetDevicePower(TEXT(""),POWER_NAME,state);

Note: We use SetDevicePower function here. It sets the device power state for a device.

  1. 1st parameter: specify the device.
  2. 2nd parameter: we use POWER_NAME here to indicate that the first parameter is just a device name.
  3. 3rd parameter: sets the power state.

In order to get information in details, you can find it in MSDN. Thanks!

Regards,

Zero Dai - MSFT



之後
Battery Status

GPS Application

Mobile GPS

2009年3月5日 星期四

在不同執行緒下存取UI控制項(textbox combobox)

問題描述 :在不同執行緒下呼叫方法,方法裡面需要存取主執行緒下的UI控制項

解法:

1.Form.CheckForIllegalCrossThreadCalls = False

2.建立委派

3.使用BackgroundWorker


這裡介紹第二種

首先在windows.form 的 onload事件建置一條執行緒

compareandprintout = new Thread(new ThreadStart(MRTcompareThread));
compareandprintout.Start();

這條thread 會執行compare()方法,存取UI控制項的程式就寫在裡面(存取textbox,combobox)
public void MRTcompareThread()
{
compare(); //裡面有無限迴圈
}

委派的建立!!


1.建立方法

publik int XXmethod(int a, int b);

2.宣告委派;委派參數,需要與被呼叫的方法一樣,包含回傳型別 (相同 signature)

   private delegate void XXDelegate();
   private delegate int XXDelegate(int a, int b);

3.引用委派(實體化),後指定方法

XXDelegate d = new XXDelegate(XXMethod); //參考的方法只要名稱就可以了
4.呼叫函數

invoke();


真的開始囉~~

於class form1裡宣告委派

delegate void SetTextCallback(Control ctl,String str); 設置textbox.text
delegate string GetTextCallback(Control ctl); 讀取textbox.text
delegate string GetCBTextCallback(ComboBox ctl, int i); 讀取ComboBox
delegate string GetCBTextCallback(Listcontrol ctl, int i); 讀取ComboBox


另外要寫委派方法
public string gettext(Control ctl)
{
if (this.InvokeRequired) //InvokeRequired required compares the thread ID of the // calling thread to the thread ID of the creating thread. // If these threads are different, it returns true.
{

GetTextCallback d = new GetTextCallback(gettext);
// this.Invoke(d);
string x;
x =(string) this.Invoke(d, new Object[] { ctl });
return x;
}
else
{
return ctl.Text;
}

}
public void settext(Control ctl,String str)
{
if (this.InvokeRequired)
{
SetTextCallback s = new SetTextCallback(settext);
this.Invoke(s, ctl, str );
}
else
{
ctl.Text = str;
}
}
public string getCBtext(ComboBox ctl, int i)
{
if (this.InvokeRequired)
{
string try1 = ctl.GetItemText(i); //i = 1 2 3 4 遞增,奇怪~難道我誤會MSDN? 給出來的是combobox的item索引
string try2 = (string)ctl.Items[i];//

GetCBTextCallback Gcb = new GetCBTextCallback(getCBtext); //建立
string x;
x = (string)this.Invoke(Gcb, ctl, i);
return x;
}
else
{
return (string) ctl.Items[i];
// return ctl.GetItemText(i);
}
}


在非產生UI控制項的副執行緒主程式 compare裡面有

while(true)
{
for (i = 1; i < style="color: rgb(51, 204, 255);"> getCBtext(comboBox1,i) && startstation == true)
//if (nowBox.Text == comboBox1.Items[i].ToString() )
{
//onBox.Text = comboBox1.Items[i].ToString(); //debug會出錯(不同控制項執行緒叫用 ... 我忘了)
string y = getCBtext(comboBox1,i) ;
settext(onBox, y); //叫用方法,自動判斷叫用invoke

}
}

for (i = 1; i < style="color: rgb(255, 0, 0);">// if (onBox.Text == comboBox1.Items[i].ToString())
{
if (goal > getonposition)
{
//nexterrorstop = comboBox1.Items[i - 1].ToString();
nexterrorstop = getCBtext(comboBox1,i-1);
}
else
{
nexterrorstop = "error";
}
}
}



}


VB版
一樣 ,先建立一個拿來更新 UI 的方法( UpdateUI),再建立一個有相同 signature 的委派( UpdateUICallBack)

Private Delegate Sub UpdateUICallBack(ByVal newText As String, ByVal c As Control)

Private Sub UpdateUI(ByVal newText As String, ByVal c As Control)
If Me.InvokeRequired() Then
Dim cb As New UpdateUICallBack(AddressOf UpdateUI)
Me.Invoke(cb, newText, c)
Else
c.Text = newText
End If
End Sub


ref:

舊文重發:Windows 表單與多執行緒


HOW TO:進行對 Windows Form 控制項的安全執行緒呼叫

VB/ VBA/ C#/ Java/ C++ 語言學習筆記

2009年3月4日 星期三

執行緒 事件 委派 回呼

Windows Mobile Registry 系統存取 (C#)


如何使用 Native Code 開發的 DLL (C#)

Windows Mobile 開發常用工具介紹

如何使用 Native Code 開發的 DLL (C#)

NET 事件與委派詳論

委派 (C# 程式設計手冊)

用故事講事件與委派


callback function
當你沒有辦法知道什麼時候會呼叫到這個function的時候。假如你有一個thread的程式,你希望thread在做完什麼事情之後,去通知主程序的的某個function要執行這時候因為主程序不會知道thread什麼時候做完事情,所以會讓thread裡面知道主程序裡要執行的那個function的function pointer,這樣子thread就會知道在自己完成什麼事情後自己執行那個function,而不用讓主程序知道。

行動運算-機器人能教您什麼?

炫喔~
用藍芽技術做機器人 WIMO
http://msdn.microsoft.com/zh-tw/magazine/cc748660.aspx

尚須解決PDA端問題-暫存

function1
需於PDA 設定->連線->Wi-Fi->要存取的網路:僅存取點
要找開啟或關閉無線網路的API

2009年2月23日 星期一

Device Emulator 透過 ActiveSync方式上網


工具->裝置模擬 器管理員



選擇 windows mobile5.0示範


STEP1. 選擇 windows mobile5.0 Pocket PC Emulator右鑑->connect



出現綠色開始鍵,並且跳出模擬器畫面


STEP2. 開啟 Microsoft ActiveSync->檔案->連線設定


允許連線到下列其中一個裝置->選擇DMA(direct memory access)

STEP3. 回到裝置模擬器管理器


右鍵->連結底座(Cradle)

End!!!


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我..真的是太淺了..現在才知道
MSDN原來還有影片教學~~好物啊~
MSDN教學影片

webservice使用

逐步解說:使用 Visual Basic 或 Visual C# 存取 XML Web Service


遵循步驟,取代使用PDA windows應用程式範本


並且新增一行程式碼

ws.Url = "http://XXX.XXX.XXX.XXX/webservice所處位置/方法代理名稱";

新增程式碼



模擬器手機顯示



如何開啟模擬器PDA 網路連線呢??

目前還不知道怎麼連,但佈署到手機上啟用3G連線是沒問題的