RFMaintainer 的 statechart (補)

昨天的RFMaintainer 的 statechart並沒有實作部份,今天補上…
你可以看到這些都是寫在 Form 裡面,並沒有跟 UI 切開….
這就是我疑問的地方…
不過對照圖之後,你會發現這樣的寫法很清楚…不會有補東牆挖西牆,東改一塊西改一塊的問題…

		#region State Chart Implementation.
private int _StateVariable = 0;
private int _StateVariable_A = 0;
private int _StateVariable_B = 0;
private int _StateVariable_C = 0;
/// 
/// State 1: Transient
/// 
private void go_state_1()
{
_StateVariable = 1;
if( txtConnectString.Text == "" )
go_state_2();
else
go_state_3();
}
/// 
/// State 2: Connection string null
/// 
private void go_state_2()
{
_StateVariable = 2;
// disable controls.
radioButton1.Enabled = false;
radioButton2.Enabled = false;
dtpFrom.Enabled = false;
dtpTo.Enabled = false;
cboType.Enabled = false;
txtPath.Enabled = false;
btnBrowse.Enabled = false;
btnExport.Enabled = false;
}
/// 
/// State 3: Connection string not null
/// 
private void go_state_3()
{
_StateVariable = 3;
// enable controls.
radioButton1.Enabled = true;
radioButton1.Checked = true;
radioButton2.Enabled = true;
cboType.Enabled = true;
txtPath.Enabled = true;
btnBrowse.Enabled = true;
go_state_4();
go_state_7();
go_state_10();
}
/// 
/// State 4: Region A: Transient
/// 
private void go_state_4()
{
_StateVariable_A = 4;
if( radioButton2.Checked )
go_state_5();
else if( radioButton1.Checked )
go_state_6();
}
/// 
/// State 5: Region A: "Period" checked
/// 
private void go_state_5()
{
_StateVariable_A = 5;
dtpFrom.Enabled = true;
dtpTo.Enabled = true;
}
/// 
/// State 6: Region A: "All" checked
/// 
private void go_state_6()
{
_StateVariable_A = 6;
dtpFrom.Enabled = false;
dtpTo.Enabled = false;
}
/// 
/// State 7: Region B: Transient
/// 
private void go_state_7()
{
_StateVariable_B = 7;
if( txtPath.Text == "" )
go_state_8();
else
go_state_9();
}
/// 
/// State 8: Region B: "output file" null
/// 
private void go_state_8()
{
btnExport.Enabled = false;
}
/// 
/// State 9: Region B: "output file" not null
/// 
private void go_state_9()
{
btnExport.Enabled = true;
}
/// 
/// State 10: Region C: "Export type" is XML
/// 
private void go_state_10()
{
_StateVariable_C = 10;
cboType.SelectedIndex = 0;
}
/// 
/// State 11: Export
/// 
/// 
private void go_state_11()
{
}
#endregion
#region UI independence routines
/// 
/// I don't consider this button in State chart.
/// And I am lazy to change....
/// 
/// 
private bool testConnection( string connectString )
{
}
private bool export( int type, DateTime dtFrom, DateTime dtTo, string outputFile )
{
}
#endregion
#region Event handler
private void btnExport_Click(object sender, System.EventArgs e)
{
int iType = 0;
if( radioButton1.Checked == true )
iType = 1;
else if( radioButton2.Checked == true )
iType = 2;
if( export( iType, dtpFrom.Value, dtpTo.Value, txtPath.Text ) )
MessageBox.Show( "Finished!" );
else
MessageBox.Show( "Fail!!" );
}
private void btnBrowse_Click(object sender, System.EventArgs e)
{
// Displays a SaveFileDialog so the user can save the Image
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "XML file|*.xml";
saveFileDialog1.Title = "Save to XML File";
saveFileDialog1.ShowDialog();
saveFileDialog1.OverwritePrompt = true;
// If the file name is not an empty string open it for saving.
if(saveFileDialog1.FileName != "")
{
txtPath.Text = saveFileDialog1.FileName;
}
}
private void btnTest_Click(object sender, System.EventArgs e)
{
testConnection( txtConnectString.Text );
}
private void radioButton1_CheckedChanged(object sender, System.EventArgs e)
{
go_state_6();
}
private void radioButton2_CheckedChanged(object sender, System.EventArgs e)
{
go_state_5();
}
private void txtPath_TextChanged(object sender, System.EventArgs e)
{
go_state_7();
}
private void txtConnectString_TextChanged(object sender, System.EventArgs e)
{
go_state_1();
}
#endregion
}

RFMaintainer 的 statechart

Constructing the user interface with statecharts之後,應用到自己的小程式上…
書上建議先大致勾勒出畫面,然後寫出 screen rule.
我的畫面:
rfmaintainer screenshot
而 screen rule 大致如下:
*”Connection string” must be specified.
*如果”Connection string” is not specified, “All”, “Period”, “From”, “To”, “Export type”, “output file”, “browse”, “export” 都會被 disable.
*當按下 “Export” button 會開始進行 export 動作.
*當按下 “Browse” button 可以指定 output file
*如果 output file 未指定, “Export” 按鈕無法被 click.
*選擇 Option “All”, Option “Period” will be disabled.
*選擇 Option “Period”, Option “All” will be disabled.
*Export type 目前只有一個可以選擇: XML
所以,可以導出這樣的 statechart,只是不知道對不對…
RFMaintainer statechart
最後寫 code 的時候,我為每個 state 加上編號,如圖:
RFMaintainer statechart 為 state 加上編號
然後再寫,的確是比較容易寫 code, 也比較容易了解.
只是,看來並沒有跟 UI 分離,或許是我自己理解錯誤…

slzzp.info

slzzp_info_screenshot
這網站很好玩,我點過去,本以為真的找不到這網站,就在關掉分頁的瞬間,我看到”廢柴”,”仆街”?!
趕緊再從 url history 撈回來看,果然是……障眼法.
有興趣的人可以順便過去看看:
http://slzzp.info
也可以直接去看他的blog-小睡睡的胡言亂語

BBC中文網-免費報紙爭奪戰

在 BBC feeds 上看到這篇:BBC中文網-免費報紙爭奪戰

在香港,每天清晨出家門上班,下樓在屋苑大堂,索取一份免費的《頭條日報》,走了300米,快到地鐵站的路口,有人又遞送一份免費的《大紀元時報》,步入地鐵站進了票閘,在一排固定的存放報紙柜子裡,再取一份免費的《都市日報》。手持三份報紙,走進列車車廂。車裡兩排乘客,還有擠佔了六七成空間的站著的乘客,絕大部分都在埋頭讀這些報紙。這已是香港周一至周五清晨上班、上學一族的常態了。

不知道台灣什麼時候會颳起這陣風潮?
也許不會發生也不一定,仔細想想:

  1. 台灣對於看報紙這檔子事的需求似乎並沒那麼高.
  2. 地鐵沒香港那麼發達.

現在的確有一些小報會在捷運附近發送,老實說我覺得挺不錯的.

mod_aspdotnet

久久沒去Apache網站,想不到 HTTP server 專案下多了一個子專案: cli(.NET).
簡單的說,他就是把 Request 都轉成 ASP.Net 可以接的 WebRequest, 然後再讓 ASP.Net application 去處理. 太神奇了,你可以就這麼讓 Apache 把 IIS 替代掉…
目前只支援 Win32 平台上的 .Net 1.0 / 1.1 / 2.0, 而不支援 rotor, mono
這裡有他的Introduction
早知道就不把家裡的 IIS 裝起來了,嗚嗚嗚…

Free UML tool

最近在看 UML, 所以需要 UML 工具來試試.
找了不少 free 的 UML tool…

維基百科還有這裡上,也介紹了不少UML工具.
大部分都支援 java 比較多, Jumli 有支援 c#.
前三套都試用過了,Jude Community感覺上較好,但 Jumli 有支援 c#.
晚上再試試看海神(Poseidon),檔案很大,也許會有驚人的功能…

八月十三

我們這一班

我忘了是那個老師曾經說過:外交系不是要培養一個專才,而是希望培養一個通才。因為一個好的外交官不管人家提到什麼話題都應該能和人家聊上幾句。所以在外交系的課程規劃中,學國際關係、民法、政治學、經濟學、第二外國語、英文上三年……,等於是政治系、法律系、商學院、文學院的課都修了一些,但都不夠專精,如果想要更深入,就要靠個人努力了。

原來如此,看來外交系真的不錯啊~~
我自己也不太有定性,早知道也去念外交系…
記憶VS創憶:尋找迷失的真相

以我自己來說,對於童年,我的記憶完全都是「照片記憶」,也就是長大以後,偶然的情況下發現了一堆小時候的照片,照片告訴我,我那時候曾經參加幼稚園的樂隊活動,因為我有一張打鼓的照片,我曾經去過溪頭,因為我有一張跟神木合照的照片。對於其他事情,我幾乎完全沒有印象。但我從來沒有想要尋找,就算找到了,也是幾十年前的事情,對我現在的生活一點幫助都沒有。

原來也有人跟我一樣,我也是對於自己的童年沒啥記憶…
還好不是只有我一個…
我愛逛超市

如果沒記錯的話,台北的第一家超級市場應該是林森北路的「欣欣大眾」;坐在購物車上被推著走、身後是一堆等一下回到家之後可以享用的好東西,運氣好的話手上還可以拿著霜淇淋。這不僅對我那個時代的小孩是種新鮮的體驗,即使是現在的小孩,大概也很難抗拒。

原來第一家超市是在那兒,不過在我對那兒有記憶以來,那兒一直都是頂好.
應該是後來改租出去了吧~~