歡迎跟我連絡

本頁最下方有Web MSN可以直接跟我交談喔!
免安裝程式...哈哈 歡迎聊天

2008年7月14日 星期一

物件的XML序列化(Serialize) 與 反序列化(Deserialize)

由於工作關係,Server端與Client端之間的交易(Transcation:TX)是XML的格式.
Server端的程式都是C++寫的,在Compiled過程中有隻Utility會將TX的Header File(*.H),轉譯成TAG File,再透過API將TX Struct轉成XML,送給Client.
Server端,因為有API所以還OK,但是自行開發的一些Client沒有API,就得做苦工進行組XML或解XML的工作,一直覺的很麻煩...-_-"
日前看到物件序列化(Serialize)與反序列化(Deserialize)的技術,開始作手研究,哈哈,終於解決的我的困擾,能夠開始高速開發程式.
先寫一隻Parser將Header File(*.H)轉成C#的Class File,再利用XmlSerializer進行,序列化及反序列化的動作,很快的解決我的問題了.

以我的TX為例:
先將TX物件化...
using System;
using System.Collections;
using System.Text;
using System.Xml;
using System.Xml.Serialization;

namespace 物件序列化與TX
{
public class APIQCRRD
{
public class APIQCRRD_I
{
[XmlRoot("transaction")]
public class transaction
{
public string trx_id;
public string type_id;
public string crr_id;
public string lot_id;
public string splt_id;
public string inpr_sht_flg;
public string logon_eqpt_id;
public string logon_date;
public string logon_time;
public string inq_type;
public string all_shop;
public string offline_report_type;
public transaction()
{
trx_id = "APIQCRRD";
type_id = "I";
crr_id=string.Empty;
lot_id=string.Empty;
splt_id=string.Empty;
inpr_sht_flg=string.Empty;
logon_eqpt_id=string.Empty;
logon_date=string.Empty;
logon_time=string.Empty;
inq_type=string.Empty;
all_shop=string.Empty;
offline_report_type = string.Empty;
}
}
}

public class APIQCRRD_O
{
[XmlRoot("transaction")]
public class transaction
{
public string trx_id;
public string type_id;
public string rtn_code;
public string crr_id;
public string crr_stat;
public string valid_flg;
public string sht_cnt;
public string pnl_cnt;
public string pnl_sht_cnt;
public string clup_flg;
public string clup_date;
public string clup_time;
public string real_emp;
public string product_id;
public string ec_code;
public string route_id;
public string ope_no;
public string ope_id;
public string proc_id;
public string eqpt_id;
public string pv_eqpt_id;
public string pep_lvl;
public string recipe_id;
public string pv_ope_no;
public string cr_ope_no;
public string wip_bank_flg;
public string shp_bank_flg;
public string crrg_id;
public string crr_use_cnt;
public string max_crr_use_cnt;
public string max_use_over_flg;
public string crr_use_time;
public string max_crr_use_time;
public string max_time_over_flg;
public string ptt_grade;
public string crr_grade;
public string mes_id;
public string crr_cate;
public string max_sht_cnt;
public string position;
public string zone_id;
public string fr_eqpt_id;
public string fr_port_id;
public string to_eqpt_id;
public string to_zone_id;
public string xf_cmd_stat;
public string xfer_stat;
public string prty;
public string crr_cate_ext;
public string crr_purpose;
public string comment;
public string qrs_ary_cnt;
public string sht_ary_cnt;
private ArrayList Oary1;
[XmlElement("oary1")]
public OARY[] oary1
{
get
{
OARY[] oary_1 = new OARY[Oary1.Count];
Oary1.CopyTo(oary_1);
return oary_1;
}
set
{
if (value == null) return;
OARY[] oary_1 = (OARY[])value;
Oary1.Clear();
foreach (OARY o in oary_1)
Oary1.Add(o);
}

}
public int AddItem(OARY oary_1)
{
return Oary1.Add(oary_1);
}
public string vryope_flg;
public string crr_own;
public string rgst_own;
public string mfg_plan_comp_date;
public string pln_cmp_date;
public string pln_cmp_time;
public string no_xfer_flg;
public string ppbox_id;
public string crr_set_code;
public string ftflag;
public string no_xfer_comment;

public transaction()
{
Oary1 = new ArrayList();
}

}
}

public class OARY
{
public string sht_id;
public string sht_stat;
public string lot_id;
public string splt_id;
public string slot_no;
public string reproc_flg;
public string sht_note_flg;
public string sheetjdg;
public string pnl_cnt;
public string pnl_grade;
public string ptt_group;
public string crr_grade;
public string ito_flg;
public string mtrl_product_id;
public string curr_eqp_attr;
public OARY()
{
}
public OARY(string Sht_id,
string Sht_stat,
string Lot_id,
string Splt_id,
string Slot_no,
string Reproc_flg,
string Sht_note_flg,
string Sheetjdg,
string Pnl_cnt,
string Pnl_grade,
string Ptt_group,
string Crr_grade,
string Ito_flg,
string Mtrl_product_id,
string Curr_eqp_attr)
{
sht_id = Sht_id;
sht_stat = Sht_stat;
lot_id = Lot_id;
splt_id = Splt_id;
slot_no = Slot_no;
reproc_flg = Reproc_flg;
sht_note_flg = Sht_note_flg;
sheetjdg = Sheetjdg;
pnl_cnt = Pnl_cnt;
pnl_grade = Pnl_grade;
ptt_group = Ptt_group;
crr_grade = Crr_grade;
ito_flg = Ito_flg;
mtrl_product_id = Mtrl_product_id;
curr_eqp_attr = Curr_eqp_attr;
}
}
}
}

然後MakeTX(序列化)
private void button_Serialize_Click(object sender, EventArgs e)
{
//Make TX
APIQCRRD.APIQCRRD_I.transaction input = new APIQCRRD.APIQCRRD_I.transaction();
input.crr_id = "AA1234";
input.all_shop = "Y";

// Serialization
XmlSerializer s = new XmlSerializer(typeof(APIQCRRD.APIQCRRD_I.transaction));
TextWriter w = new StreamWriter(物件序列化與TX.Properties.Settings.Default.INPUT_LOG);
s.Serialize(w, input);
w.Close();

//Dispaly in TextBox
TextReader r = new StreamReader(物件序列化與TX.Properties.Settings.Default.INPUT_LOG);
textBox_Serialize.Text = r.ReadToEnd();//不去除空Element
r.Close();
}

然後GetTX(反序列化)
private void button_Deserialize_Click(object sender, EventArgs e)
{
// Deserialization
XmlSerializer s = new XmlSerializer(typeof(APIQCRRD.APIQCRRD_O.transaction));
APIQCRRD.APIQCRRD_O.transaction txResult = new APIQCRRD.APIQCRRD_O.transaction();
TextReader r = new StreamReader(物件序列化與TX.Properties.Settings.Default.OUTPUT_LOG);
txResult = (APIQCRRD.APIQCRRD_O.transaction)s.Deserialize(r);
r.Close();
}

短短的幾行就完成的....



雨季說:
以上程式的程式碼上有很多Project的設定,並無法直接執行..
除此之外,程式碼是正確無誤的...
有興趣的話,可以留言跟我要原始碼...

2008年7月8日 星期二

陸客離台後的第一句話...<轉載>



雨季說:
希望不要買到黑心商品才是...哈哈

2008年7月7日 星期一

Obfuscator (混淆器)

各為將來有機會寫程式賣錢的話,但是對方不打算買Source Code(買Source Code要付出數倍價錢),
然後透過反組譯程式取得你的 Source Code(.NET 程式 相當容易被反組譯)
可以透過Obfuscator (混淆器),複雜化你的程式碼,反組譯後,讓對方一頭霧水,想要Source Code乖乖付錢吧!

例如
using System;
struct Module1
{
private string str = "Hello World! Today is:";
private System.DateTime today = Now;
void Main()
{
Console.WriteLine(str + System.Convert.ToString(today));
}
}

透過Obfuscator後
.class private auto ansi sealed beforefieldinit Module1
extends [mscorlib]System.Object
{
.custom instance void [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.
StandardModuleAttribute::.ctor() = ( 01 00 00 00 )
.field private static string str
.field private static valuetype [mscorlib]System.DateTime today
.method private specialname rtspecialname static
void .cctor() cil managed
{
.maxstack 8
IL_0000: ldstr "Hello World! Today is:"
IL_0005: stsfld string ConsoleApplication1.Module1::str
IL_000a: call valuetype [mscorlib]System.DateTime [Microsoft.VisualBasic]Microsoft.
VisualBasic.DateAndTime::get_Now()
IL_000f: stsfld valuetype [mscorlib]System.DateTime ConsoleApplication1.Module1::today
IL_0014: nop
IL_0015: ret
} // end of method Module1::.cctor
.method public static void Main() cil managed
{
.entrypoint
.custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 )
.maxstack 8
IL_0000: nop
IL_0001: ldsfld string ConsoleApplication1.Module1::str
IL_0006: ldsfld valuetype [mscorlib]System.DateTime ConsoleApplication1.Module1::today
IL_000b: call string [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.StringType::
FromDate(valuetype [mscorlib]System.DateTime)
IL_0010: call string [mscorlib]System.String::Concat(string,
string)
IL_0015: call void [mscorlib]System.Console::WriteLine(string)
IL_001a: nop
IL_001b: nop
IL_001c: ret
} // end of method Module1::Main
} // end of class Module1

夠酷吧....
這裡有免費軟體提供:http://www.xmlfox.com/freeware_obfuscator.htm

2008年7月3日 星期四

忍者的生活[轉載]









雨季說:
在晶圓廠或LCD廠工作的你,想起了什麼嗎? ... 哈哈哈

BLOG的計數器壞了...

夢想的家免費計數器 網站好像掛了...
希望趕快修好...

Heavenly Sword 玄天神劍

Heavenly Sword(玄天神劍)是去年Sony PS3的年度大作遊戲
是單人的動作冒險遊戲,遊戲中展現了多樣的動作技巧,跟華麗的戰鬥模式

其實最吸引人的會是讓你覺得你是在看一部史詩般的電影,而你化身為女主角奈離子,手持玄天神劍與敵人搏鬥
也因為族裡的一些禁忌,造成與族人不合的情況下還要與入侵者戰鬥,掩護族人撤退
甚至在入侵者伯漢大軍裡,BOSS們相互猜忌,父子不合的戲碼,儘管父親伯漢的不時的百般羞辱,最後一幕羅屈還是捨身救父,請求奈離子放過伯漢一馬(他已雙目失明)
最後奈離子也於獲勝後,因為傷勢太重而身亡...留下的令人惋惜的結局
但也或許如此,才會喜歡這款由遊戲

更值得一提,這款遊戲的3D美工配樂,絕對是會讓你不敢錯過他設計的任何場景以及故事中的對話,背景的演奏樂讓你的精神越來越高亢或是悲傷,說像是看了一本武俠小說一點也不為過,而一幅幅映入眼簾的畫面都是東方的山水美景

遊戲的過程中,充分利用了PS3六軸搖桿的功能,不管是奈離子的操控大砲及凱的弓箭射擊,都非常好玩,但是剛開始時會覺得很不容易,甚至看到很多網友都說關掉六軸功能,個人是覺得那就太可惜了

遊戲共有6個章節,每章有三小節,除第一章是引領妳進入狀況外,每章都有一位BOSS守關...
遊戲的技巧介紹:
操控方面:過程中,因為劇情的需要,玩家會輪流操控奈離子或凱...

奈離子==>
玄天神劍:此劍有三種模式,分別是玄天鏈劍,玄天雙劍,玄天大劍
鏈劍=>L1按住不放,按"△""□"組合鍵,進行較長距離攻擊,效果雖不很強大,但有不少密技.
雙劍=>只按"△""□"組合鍵,殺傷力中等,但是速度很快.
大劍=>R1按住不放,按"△""□"組合鍵,重型攻擊破壞力強,但是速度相對緩慢.
大砲:用左類比搖桿(或 四方向鍵)瞄準敵人的炸藥桶,或投石車的紅色盾牌(每車有四面,四面都擊中後炮車燬),然後按住"□"(不可放手喔)發射砲彈並搖動搖桿控制砲彈飛行到目標.


凱==>清一色的使用弓箭射擊,操作方式同奈離子的大砲,但是後期有一些技巧就是將弓箭射越火盆或火把上方,變成火箭,可點燃火藥桶重創敵人.

遊戲過程中,有時候會提示按鍵出現玩家必須跟著按(OX△□),不然過不了關喔

BOSS介紹:共有四位,其中飛狐出現兩次,所以一共有5次BOSS要打
飛狐第一戰宴會聽:移動迅速出手快的一位對手,開始用人海戰術對付妳,打完三輪嘍囉時,他才跟你對戰(我相信你此時右手拇指快癱了...哈),這一戰他不會死,用閃躲加大劍攻擊就可以過關了,但是末了的組合鍵,一定要仔細,廳內有兩個補血罐可以用...

蛇女水戰:他主要是以橫水波及縱水波攻擊妳,分別用鏈劍□及鏈劍△,即可化解,然後靠近她,雙劍快砍,就可以幹掉她,場內也有兩個補血罐可以用...

胖男羅屈競技場之戰:他只會滾地攻擊妳,就這麼101招,但是你必須要好幾次組合鍵(畫面會提示),才可以拆掉他的甲殼(有網友叫他蟑螂男),競技場內也有兩三個補血罐,他的動作很慢,看他要滾地攻擊時,跑到圓柱附近,當他過來時用右類比快閃,然後他會昏迷一下,此時衝上去,砍他三刀,他就慢慢會被妳幹掉...

飛狐第二戰鳥籠:此時飛狐剛開始會用藍色及紅色遠距離飛刀攻擊,他發動這種攻擊時,你可以反擊他但是要小心,因為搞不好你會掛掉,藍色飛刀攻擊反擊是直接按△,紅色飛刀攻擊反擊是直接按R1+△,按的時機都是你被擊中瞬間(提早或晚都沒用),按下後不放開,你可以遙控飛刀的方向,這是很有用的,因為有很多補血瓶在鳥籠上方,妳拿不到...,第二階段會有飛狐分身攻擊,遇到分身攻擊就是採個個擊破,鎖定一個分身幹掉他,再換下一個,等到10個分身都被妳幹掉,這時候凱醒來了,拿起弓箭朝飛狐射去...完成

Final BOSS伯漢:伯漢會由烏鴉附身變成有翅膀的烏鴉王,基本上他的攻擊有四種模式,藍色火焰,紅色火焰,烏鴉群,近身攻擊,反擊方式分別是藍色火焰->△,紅色火焰->R1+△,烏鴉群->L1+△(鏈劍),以及最後的大劍攻擊,最難處理的部分是他近身攻擊時大翅膀會擋住妳的視線,讓你不好去反擊,但是一看到他準備紅色重攻擊時,快用右類比閃吧,另外避免背對他逃跑,免的被他使用藍色或紅色火焰攻擊...,跟他打鬥要有耐心,因為補血罐三個場景都只有一個而已,請謹慎使用...

對付BOSS通則:
1.每次BOSS要掛掉之前,都有一些組合鍵要按,一定要及時按不然BOSS又會補血在打一次...
2.當BOSS身上發出紅光時,那就表示他要進行不可防禦的強攻擊,用右類比搖桿快閃吧...
3.攻擊BOSS時,不可貪多,一次最多3刀,不可戀戰,用時間換取贏面...

一些技巧:
1.有蠻多地方,必須丟擲盾牌敲鑼開門的機關,就是用X檢起盾牌,然後按住□,用搖桿控制它飛向目標.
2.當你的血盤裡的三棵紅珠亮起,表示你可以使用必殺技就是與敵人搏鬥時按下O,可以造成敵人大量傷亡.
3.所有的補血罐就算用不到也要將它擊破,因為這樣才會開啟某些技能,圖像及特典.

大概就這樣了...
全部過關後,會出現"地獄模式"的選項,不過我還沒玩,有機會在介紹...

程式設計師的美麗與哀愁

程式設計師的四不一沒有:
操不死、罵不退、窮不怕、加班不停、沒有前途

程式設計師的工作內容:
錢少、事多、離家遠
位低、權輕、責任重
睡覺睡到作惡夢、哈錢哈到腦抽筋




雨季說:
剛剛在網路上找資料,看的一位大大的名片就像上文那樣寫道.
其實,程式設計師這一行,或許在20年前,你不覺得有啥.
但是,你知道嗎?當你能看到我這段文字,背後是透過多少的程式設計師的心血堆積出來的...
當你在玩著Wii或PS3,你有想過嗎?這些是多少程式設計師,犧牲睡眠不停Coding的結果...
唉...
美麗的背後,或許總是有著說不盡的哀愁...

2008年6月30日 星期一

Heaven - 濱崎步


最期に君が微笑んで
真っすぐに差し出したものは
ただあまりに綺麗すぎて
こらえきれず涙溢れた

あの日 きっとふたりは愛に触れた

私達は探し合って
時に自分を見失って
やがて見つけ合ったのなら
どんな結末が待っていても

運命と呼ぶ以外他にはない

Lalala... Lalala...

君が旅立ったあの空に
優しく私を照らす星が光った

側にいて愛する人時を超えて形を変えて
ふたりまだ見ぬ未来がここに
ねえこんなにも 残ってるから

側にいて愛する人時を超えて形を変えて
ふたりまだ見ぬ未来がここに
残ってるから

信じて愛する人私の中で君は生きる
だからこれから先もずっと
サヨナラなんて言わない

あの日 きっとふたりは愛に触れた

中譯歌詞:
最後你帶著微笑
伸直雙手獻給我的一切
因為是那樣地美麗
令我不由地淚水盈框

那一天想必你我都觸碰到了愛情

我們互相尋覓
時而迷失了自己
現在終於找到了彼此
無論最後是什麼結局

這只能稱作是命運

Lalala... Lalala...

你出發前往的那片天空
有溫柔的星光照亮了我

陪在我身旁心愛的人啊哪怕跨越了時空改變了樣貌
我倆尚未見過的未來
我瞧會有這麼多 留在這裡

陪在我身旁心愛的人啊哪怕跨越了時空改變了樣貌
我倆尚未見過的未來
會留在這裡

請相信我心愛的人啊在我的心中你一直活著
所以說今後無論再過多久
我永遠都不會說再見
那一天想必你我都觸碰到了愛情

歌曲介紹:
「HEAVEN 天堂」搭配日劇新天后仲間由紀惠、新生代偶像小田切讓攜手演出的奇幻忍者動作鉅片「忍(SHINOBI)」主題曲。這也是濱崎 步首次演唱電影主題曲
由濱崎步在讀過電影劇本後所寫下的歌詞,配合上溫柔優美的旋律以及大格局的編曲,「HEAVEN 天堂」完美詮釋出了電影裡的無奈戀情。

雨季說:
一直想看這部電影,但是始終與機會擦肩,昨天晚上東森電影台終於了了我的心願...
片頭一開始,就知道應該會悲劇收場,因為那樣的時代,那樣的背景,應該是淒美的愛情故事...
的確也是,只有這樣的故事才會留下深刻的記憶...
就是遺憾,才會多出那一分美麗...
"也許遺憾才讓人生美好",劉若英在"花季未了"不也這樣唱道...

北市月薪五萬以下 淪中低收入

人人喜愛高收入,在居住的城市中,自己的收入到底居前、還是落後,北中南標準不一,依據調查,北市個人月收入49,532以下,屬於後段班,中市、高市民眾月收入不到37,478,都是中低收入一族。
依據主計處的調查,北市的個人月收入部分,依據收入的高低排序,中間值的金額,大致落在49,532元,這個金額也形成一個收入高低的分野,可區分成前50%、後50%。
這個意思就是說,居住在台北市的人,如果個人的月收入49,532元以下,就是落在後50%的一群,屬於收入的後段班。
至於高雄市、台中市、基隆市、嘉義市、新竹市,台南市、鳳山市的居民,個人月收入到底是在前50%,還是後50%的分界點,落在37,478元。
台灣省的其它省轄市、部分縣轄市的居民,個人月收入屬於前段班、後段班,金額落在34,401,金門和連江兩地的標準是,個人月收入超過22,750,就屬於前段班。
這個標準,是營建署拿來衡量收入高低的根據,今年,個人月收入落在後段班的民眾,才能申請購屋貸款利息補貼、以及租屋居住的租金補貼。
一個金額很清楚就劃分出,一個上班工作的人,在自己落籍居住的城市,月收入歸屬前後段班的分野,營建署人員說,採取收入限制,是為了「排富」,中低收入人士才能申請補貼。
倒是,對居住北市的民眾而言,個人月收入要達五萬元,才能擠身收入前段班。
除了個人月收入以外,如果以家庭年收入的角度來看,台北市居民的家庭年收入在148萬以上,歸屬在前百分之五十,如果落在148萬元以下,便落到後百分之五十的家庭這一群。
至於台中市和高雄市居民,家庭年收入的中間值是107萬元,這些地區的居民家庭收入在107萬元以下,便符合營建署中低收入的標準,可以申請補貼購屋貸款利息,也可申請補貼租屋支出,申請獲准後,一個月可獲得3000元補助,一年為期。



雨季說:
這新聞已經出來有一段時間了,一直到今天才轉載,一方面是不敢相信,一方面是覺得不要刺激大家了.但是想了一想,要能面對現實才是...
有時候覺得稅制,一點都不公平,想我們這種小老百姓,賺的每一分每一毛,都逃不過稅吏的掌心,但是政府只會想辦法去對富人免稅,補助弱勢戶,殊不知這樣一來,我們至一群,只能稍微溫飽的,反倒成為政府的魚肉...
不知道,或許我看的短淺,但是貧富的差距越來越大,我想是不爭的事實吧...

日本的草莓電車 (Strawberry train only in Japan)

全世界唯一的既可以一邊欣賞玩具,一邊乘著上下班、上學放學的“玩具電車”,上月 底開始,正式在和歌山縣內運行。
這是和歌山電鐵貴志川線(行駛在和歌山到貴志之間的全長約14.3公里的電氣機車) 所進行的別具一格的嘗試。

大約花費了2500萬日元改裝的,這由2節車廂所組成的電車,周身通紅十分耀眼,車 身外側面寫有醒目的“玩具電車(OMODEN)”的字樣,車內也一改我們往日所能見到的 日本電車的形象。


最吸引視線的,是貼窗而立的密封玩具自動售貨機共有10臺,除了可以買到電視裡經 常出現的卡通、玩偶之外,還可以買到該電車的原創商品。

此外,還有可以展示70個以上玩具的櫥窗,裡面擺放著各式各樣的精巧小玩。而有一 部分電車的座位,用木頭制成動物的形狀,可以讓孩子們體驗到游園地的快感。

還有幼兒供使用圍欄,裡面鋪著地板等,就像是在自己的家裡一樣。

這個車站有一隻名副其實的招財貓,它叫TAMA它是首位貓站長,工作內容招攬客人,還可以與它拍照,休假日是禮拜日 就是它^^


它的制服 好可愛

MSN狀態(我在線上時,可以跟我交談喔)