2008/10/27

取消 Google Chrome 瀏覽器的 DNS 快取

將 "使用「DNS預先擷取」以增進網頁載入效能" 取消
Google 瀏覽器就會跟據作業系統的 hosts 設定去更新 DNS 了。

2008/10/24

C# WebService Client 設定

開發環境為 Visual Studio 2008
設定完成後會有一個 MasterService 類別,使用這個類別的 Service 就可對 WebService 的各個方法進行存取了。

MasterService.Service service = new MasterService.Service();
service.XXXWebMethod();


點選左下角的 Advanced... 按鈕

點選左下角的 Add Web References ...

輸入 URL: http://www.diija.com.tw/API/MasterService.asmx, 注意:不用加上 ?WSDL"

crossdomain 設定

須取名為 crossdomain.xml,並放在網站上的根目錄
http://www.diija.com.tw/crossdomain.xml

*.2kuso.com : wildcard 設定,www.2kuso.com, ww2.2kuso.com 都符合規則,因此會套用。
domain 可以設為 ip 格式, domain="140.119.182.100"
headers="SOAPAction", 有些瀏覽器(IE)如果沒有設 SOAPAction 會無法取得 WebService 的回傳內容。


<?xml version="1.0"?>

<!DOCTYPE cross-domain-policy SYSTEM
"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">

<cross-domain-policy>
<!-- secure = false, means allow https access -->
<allow-access-from domain="*.2kuso.com" secure="false" />

<allow-access-from domain="*.diija.com" secure="false" />
<allow-access-from domain="*.diija.com.tw" secure="false" />

<allow-access-from domain="140.119.182.100" secure="false" />

<allow-http-request-headers-from domain="*.2kuso.com" headers="SOAPAction"/>

<allow-http-request-headers-from domain="*.diija.com" headers="SOAPAction"/>
<allow-http-request-headers-from domain="*.diija.com.tw" headers="SOAPAction"/>

<allow-http-request-headers-from domain="140.119.182.100" headers="SOAPAction"/>
</cross-domain-policy>


2008/10/23

VirtualBox NAT forword 設定

注意,在 Guest 裡 NAT 設定是 ping 不到主機的。

#CentOS-5.2 為 Guest 名稱。
如果改壞了設定,可以到 $HOME/.VirtualBox\Machines\CentOS-5.2\CentOS-5.2.xml 修改。
改完必須重新啟動 VirtualBox 才會生效。

<ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/Protocol" value="TCP"/>
<ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort" value="22"/>
<ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/GuestPort" value="22"/>



##pcnet/0 是掛載的第一張網路配接卡, 1 是第二張,依此類推。
## ssh 是 key
Protocol, HostPort, Guest 必須對應到同一個 key, 這個 key 可以是任何合法字串。

#SSH TCP 標定
C:\Program Files\Sun\xVM VirtualBox>
VBoxManage setextradata "CentOS-5.2" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/Protocol" TCP

#從 Host Port 22 轉到 Guest Port 22
C:\Program Files\Sun\xVM VirtualBox>
VBoxManage setextradata "CentOS-5.2" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort" 22

C:\Program Files\Sun\xVM VirtualBox>
VBoxManage setextradata "CentOS-5.2" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/GuestPort" 22






#HTTP TCP 標定
C:\Program Files\Sun\xVM VirtualBox>
VBoxManage setextradata "CentOS-5.2" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/Protocol" TCP



#從 Host Port 22 轉到 Guest Port 22

C:\Program Files\Sun\xVM VirtualBox>
VBoxManage setextradata "CentOS-5.2" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/HostPort" 80



C:\Program Files\Sun\xVM VirtualBox>
VBoxManage setextradata "CentOS-5.2" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/GuestPort" 80

Flex 取得某範圍亂數

程式function 如下:


public function GetRangeRandom(min:Number,max:Number):Number
{
return Math.round(Math.random()*(max-min))+min;
}

ex.我要如何取得 10 到 100的亂數 即可以呼叫

GetRangeRandom(10,100) ;


有沒有很溫馨..因為不知道AS Lib有沒有懶得查..

2008/10/22

C# PNG 轉 JPG 會變黑的問題

參考程式碼:

Image img = Image.FromFile(@"c:\source.png", true);

Bitmap bmp = new Bitmap(img );

Graphics graf = Graphics.FromImage(bmp);

graf.Clear(Color.White);

graf.DrawImage(img, 0, 0, img.Width, img.Height);

bmp.Save(@"c:\source.jpg", ImageFormat.Jpeg);



有沒有很溫馨

2008/10/20

使用 FABridge 來呼叫 Flex App 內的函式

FABridge 介紹:
透過 FABridge 可以讓 JavaScript 幾乎可以完全存取 FlexApp 內的函式以及變數,讓 Flex 與 JavaScript 的溝通變得相當簡單,不用額外透過 ExternalInterface 來定義要存取的函式。
最極端的使用 FABRidge 就是在 Flex 拉好 UI,並透過 JavaScript 來控制這些 UI,可以省掉編譯的冗長等待,並且讓只會 JavaScript 的開發人員也可以開發 FlexApp。但缺點是工具不支援,以及 Client 端必須啟用 JavaScript。

FABridge 安裝:
Flex 端的設定:

MyMain.xml
<bridge:fabridge id="externalBridge" rootobject="{this}" bridge="bridge.*" />

將 C:\Program Files\Flex Builder 3\sdks\3.0.0\frameworks\javascript\fabridge\src\bridge\FABridge.as 複製到 src 的 bridge/FABridge.as


HTML 端的設定
將 C:\Program Files\Flex Builder 3\sdks\3.0.0\frameworks\javascript\fabridge\src\bridge\FABridge.js 複製到 html-template/ 資料夾。

在 html-template/index.template.html 中加入

<script type="text/javascript" src="FABridge.js"></script>

<script type="text/javascript">

window.onload = function() {
FABridge.addInitializationCallback('flash', initCallback); //初始化,等到 FlexApp 初始化完成時會去呼叫 initCallBack。

};
function initCallback() {
app = FABridge.flash.root(); //取出 MyMain

facade = app.getFacade(); //取出 MyMain 內的 facade,注意存取變數必須以 getter 方法取出。 facade 在 MyMain 中只是定義為 public var facade:IFacade; , 而不是 public function getFacade();
//alert('facade : ' + facade);
app.addEventListener('loginSucceed', function() { //取得登入結果事件,並接收登入資訊

userProxy = facade.getUserProxy();
//alert('userProxy : ' + userProxy);
userToken = userProxy.getUserToken();

//alert('userProxy.userToken : ' + userToken);
}

2008/10/17

Flex 檔案下載

private var fr:FileReference = null; //注意,要寫在外面,否則會被記憶體回收掉,下載時會找不到來源,按存檔時會無作用。
private function downloadClipboard(event:MouseEvent):void
{
var clip:Cls_Clipboard = this.selectedClipboard;
if (clip != null) {
fr = new FileReference()
fr.addEventListener(Event.COMPLETE, function():void {
fr = null; //載入完成時,才設成 null 等待記憶體回收。
trace('fr set null');
});
fr.download(new URLRequest(clip.ClipboardPath_Fix), getDownloadFilename(clip.ClipboardPath_Fix, "clipboard-"));
} else {
DiijaUtils.popMsg('請選擇一張剪影才能下載');
}
}

/**
* 回傳如下格式 clipboard-20081017150538.png
*/
private function getDownloadFilename(url:String, prefix:String="clipboard-"):String
{
var formater:DateFormatter = new DateFormatter();
formater.formatString = "YYYYMMDDHHNNSS"; //日期格式請參考 http://livedocs.adobe.com/flex/3/langref/mx/formatters/DateFormatter.html

var split:Array = url.split('.');
return prefix + formater.format(new Date()) + '.' + split[split.length - 1];
}

2008/10/15

如何讓 SWFLoader 與 被載入的程式作溝通

如果使用 SWFLoader 要跟其內部 程式 傳遞參數時,
只要被載入的程式有開放介面提供外部呼叫,
就可以透過 System Manager 來呼叫。
例如:
被載入的程式(SWFLoaded)開放的介面:public function setVarOne(newText:String):void
主程式範例:


private function onCompleteAppLoader(oEvent:Event):void
{
var smAppLoaded:SystemManager = SystemManager(oEvent.target.content);
smAppLoaded.addEventListener(FlexEvent.APPLICATION_COMPLETE, onCurrentApplicationComplete);
}

private function onCurrentApplicationComplete(oEvent:Event):void
{
_appLoaded = Application(oEvent.target.application);
SWFLoaded(_appLoaded).setVarOne("This value set from main app!");
}

參考連結:http://www.cflex.net/showFileDetails.cfm?ObjectID=690

2008/10/13

Flex 取得外部參數

假設你使用Flex 製作出一顆 SWF檔案

需要讀出外部參數

譬如

http://www.sample.com.tw/Main.swf?UserId=Lucifer


因為程式需求需要把UserId讀進來

你可以透過

Application.application.parameters["UserId"];

這方法讀進來

很溫馨吧 !!

2008/10/08

Flex Color Picker 範例

        <mx:ColorPicker id="colorPicker" change="onColorPickerChange(event)" enter="onColorPickerEnter(event)"/>

        /** 選取顏色觸發 **/
        private function onColorPickerChange(event:ColorPickerEvent):void {
            var color:uint = event.currentTarget.selectedItem as uint;
            var colorHex:String = StringUtils.intToHexColor(color);           
            this.setStyle("backgroundColor", colorHex);
        }
        /** 輸入顏色值按 Enter 觸發 **/
        private function onColorPickerEnter(event:ColorPickerEvent):void {
            var colorHex:String = StringUtils.intToHexColor(event.color);
            this.setStyle("backgroundColor", colorHex); 
        }

        /** 將 int 轉為 #FFFFFF 顏色字串格式 **/
        public static function intToHexColor(value:uint):String
        {
            var mask:String = '000000';
            var str:String = mask + value.toString(16).toUpperCase();
            return '#' + str.substr(str.length - 6);
        }