2010年6月30日 星期三

C#_Session

6月44篇好像不太吉利,只好.....

最近希望在新專案使用C#來開發,馬上就遇到問題了,Session要用[]包起來,不是用()。

所以語法是Session["UserSession"] = sessionId;。

Flex_繼承

第三個就是物件導向的另一個重頭戲『繼承』,重點有五項:
1. 如何繼承父類別?
2. 子類別如何複寫父類別的方法?
3. 子類別如何呼叫父類別完成之方法?
4. 不希望繼承的方法如何設定?
5. 如何規範應該實作的方法?

一堆問題,冒出更多的問號!先來簡單定義名詞
父類別:被繼承的類別,如果以下面的例子就是產品(product)的類別。
子類別:繼承別人的類別,如果以下面的例子就是螢幕(Monitoe)或是書本(Book)類別。

首先舉了一個簡單的例子,假設已經定義好一個產品(product)的類別,該類別裡面有一個品牌(brand)的屬性,而後面實做的螢幕(Monitoe)或是書本(Book)就可以直接繼承該產品,而獲得品牌的屬性,概念就像下圖一樣,而繼承只能繼承屬性、方法及建構函式。而繼承的語法就是:public class Book extends Product。

繼承是將父類別的屬性、方法及建構函式做延伸,但有時候雖然父類別已經有相對的方法,但是方法內所執行的內容並不足夠讓子類別使用,子類別有可能需要更多的變化,例如產品有一個getinfo()可以用來顯示廠牌,但是在螢幕的類別裡希望除了廠牌以外也要顯示尺寸的內容,那就必須利用『覆寫』的方式,來將原本父類別的方法在子類別裡面改寫,語法是:override。

使用覆寫後雖然可以改變父類別既有的方法,但往往父類別已經完成了很多子類別可以沿用的屬性、方法及建構函式,所以使用複寫以後要怎麼樣呼叫父類別的內容呢?就可以利用『super』這個特殊字。
呼叫父類別的屬性:super.屬性 (super.brand)
呼叫父類別的方法:super.方法 (super.getinfo())
呼叫父類別的建構函式:super()

又或者有些方法不希望被子類別所繼承,那麼可以利用『final』來設定不被繼承,例如:public final class Monitor就代表螢幕的類別並不會被其他類別繼承使用。

在開發大型專案的時候,常常需要定義許多大家要一起共同遵循的規範,或是規定某些類別需要至少應該實作出的方
法有哪些,這時候就可以製作interface來規範類別必須至少擁有的方法有哪些。

不配合程式碼其實很難理解,附上上課時練習用的程式碼對應著看,就可以很容易了解囉!


這篇跟建立類別是物件導向的重要觀念,趕快拿新專案試用吧!

Flex_轉型

第三堂課的第二個重點其實是老師順便提到的,但是因為最近有想在新專案使用C#來開發也碰到轉型的問題,聽到老師講到轉型,趕快把他記下來。

在Flex裡面轉型的方法有兩種,以轉成User類別為例。
1. 利用as:this.userCollection.getItemAt(this.userGrid.selectedIndex) as User
2. 第二種利用()包住:User(this.userCollection.getItemAt(this.userGrid.selectedIndex))

上述程式碼主要是依照在DataGrid的指標來讀取ArrayCollection內的物件資料,但是編譯器沒辦法確定你要放入或是讀取的資料型態是什麼,所以必須在取用的時候做一個型態上的指定。

Flex_ArrayCollection

很快的又來到了星期二,要上第三堂Flex的時候。本來以為已經看過三本Flex的書,也寫過好多範例,初期的課程應該沒有什麼重點好聽的,沒想到!從第二堂課開始的建立類別檔,到昨天所上的各式內容都更紮深了以往似懂非懂的一些觀念。目前給這個課跟老師100分!

第三堂課程大致上圍繞在一個主題上,就是物件導向中的『繼承』,但是標題下的不太一樣?原因是講師除了說明這個觀念以外,還講了我覺得應該要記載下來的兩樣東西,為了日後找尋方便,只好把它拆開來講,不然寫個"第三堂筆記"可能對以後沒什麼幫助吧。XD

好!趕快進入主題:ArrayCollection

這一個類型,在之前自學時就常常運用到,可以把他想像成就是一個Array,但是這是一個可以存放物件(Object)的陣列,也就是我們在上一篇所建立的類別檔案,對於這個陣列就是存放在裡面的一格。若是我們建立一個書本的類別,將其存放在ArrayCollection內,就可以將ArrayCollection想成一個書櫃,存放在上面的書本可供我們放入、拿取、丟掉跟放到別格。

語法分別是:
新增:addItem()
取得:getItemAt()
移除:removeItemAt()
設定:setItemAt()

問題是,放進ArrayCollection的好處是什麼?為什麼要這樣做?
目前在各項專案裡面最常顯示資料的方式不外乎就是下拉選單跟表格形式元件(DataGrid),而我們建立類似像是"書本"的這種類別檔,或是說這種ValueObject都是為了讓程式處理資料時更為方便,在Flex裡面有提供一個與.NET中DataBinding相當類似的機制,只需要將放資料容器的dataProvider屬性設定好,即可連動的顯示資料。所以可以想像一個情況,new一個ArrayCollection,然後將某個容器的dataProvider設定給他,之後就只需要去操作ArrayCollection即可,對其新增網頁就會自動顯示多一筆,對其修改網頁就會自動顯示變更後的結果。

再更近一步,將給ArrayCollection的值都更改為類別檔,那麼我們就只需要利用類別檔裡面的各式方法,進行我們期望的動作,再一次存入ArrayCollection當中。


很不錯吧!乾淨俐落耶!

2010年6月29日 星期二

自以為的公平不是公平。

有句話「太陽底下沒有公平的事情」,這句話就某方面來說我很贊成,但是如果身為可以讓制度轉向的人,沒有盡最大努力往所謂的"公平"邁進,就令我非常不能諒解。如果你認為同仁要認真工作,身為長官的你,是不是應該也要認真工作?那麼,你的工作其中一項是不是要盡你最大努力往公平的方向?

你可以說沒人反應我就認為我是公平的,但當業主沒反應的時候你說什麼?你們這些主辦工程師不去發掘潛在的需求,沒有充分去了解,那請問你暸解了嗎?你有努力過這件事情嗎?坐在你的小空間裡面就讓你頓悟了嗎?

你說出「我來就是要讓考核制度變公平」這句話的時候,你有沒有覺得心虛?你有先問過自己是不是充分了解才講出這個論調嗎?如果你沒有,請不要在任何時候對任何一個人提出應該要"充分了解"、"妥善規劃"、"盡心盡力"。

自以為的公平不是公平,或許在每個"長官"心中,僅存的工作時間內還是必須要"照顧特定人"、"對上表現",不肯花一點點的力量來改善應該改善的事情吧?

當然,我也要對自己講「自以為對的事情不一定是對的」,可能所謂的長官做的安排都是對的,對每個人打分數的標準都是一致的,他們都充分了解我們工作內容了,妥善作出最好的安排,只不過我不了解其中涵義罷了。

妥協跟離開是岔路。

2010年6月28日 星期一

莫非.....這樣的機率是?

上週六(6/26)很開心的有兩個飯局,中午是五專同學會,晚上則是成功嶺同分隊的聚會。

某天,騎著小黑往回家的路上,突然傳出熟析的聲音,「喂~!」,「Ola六月二十六中午同學會要不要來?」,秉持著不知道幾百年前"聚會都要參加的"決定,「同學會當然要呀!好~~在哪?」,「台北火車站京站」「OK!拜拜~」

上上星期,根本就沒在上MSN的我上去找人,馬上就傳來"登登登",成功嶺62號光太郎傳來「下星期聚餐要來嗎?」,聚餐!有沒有大家都想在同個時間聚餐的八卦?「好呀!什麼時候?」,光:時間地點都還沒訂,「我都可以,不要星期六中午就好,我有同學會」,就在MSN聊天室變多人,不斷七嘴八舌,最後訂出"星期六晚上六點饗食天堂內湖店"的結論。

6/26馬上就來到了,11點才驚覺還不太知道"京站"確切位置耶!「在哪?京站在哪?那在京站的哪裡?」,又是騎著小黑來到了火車站,在火車站後面繞了一大圈終於在,某一家人的的水塔下找到了一個小位子可以停車,還趕快打電話叫嘉嘉幫忙記下"東東小吃店"左轉,第二條小巷子在左轉,威尼斯餐廳旁邊水塔的小抄,很怕出來找不到車子。

來到了京站四樓手扶梯上來右轉,還遲到了10分鐘,看看等待區,嗯~~~~很好!一個認識的都沒有,趕快拿起電話問問是不是大家都遲到了(喔!是"是不是大家都進去了"),「喂~~什麼?我不知道進去了沒耶,因為我還沒到」,電話聽到這裡轉頭剛好瞄到一個同學正在走道上四處張望該夾什麼美食,正當高興之餘,又不小心看到了一個相當震驚的事情,他的位置正好在招牌底下,並不是招牌要掉下來了,也不是招牌上正有小強在移動...而是.....








招牌寫著"饗食天堂"....

饗食天堂是個怎麼樣的店呢?就是一家很像尚闔屋的自助餐,裡面從生食到熟食、從蔬菜到肉排、從果汁到冰品應有盡有,就是那種標準吃起來不償命,一吃飽三天的那種店。價位也很接近,中午時段要770、晚餐時段要845。

很好,中午饗食天堂台北店,晚上饗食天堂內湖店,天堂都不天堂了。

中午的時候看到很多不錯吃的東西,就很節制的小吃兩口,晚上就帶著嘉嘉一起去大快朵頤了!

MapGuide_複合Tooltip

當需要顯示資訊在圖面上時,最常讓人想到的方式有三種,第一種是依照屬性給定不同的顏色或類型,第二種是直接於圖面上顯示標註,第三種就是當滑鼠移過去時跳出提示的Tooltip。
第一種,設定Theme

第二種,設定Label

第三種,設定Tooltip


在MapGuide裡面,這三種方式都可以利用MapGuide Studio內進行設定,但是Tooltip的需求往往不只有單一屬性的顯示,而是像上圖一樣,必須設定相當多欄位的顯示,這時候可能就會產生一些疑惑,不知道該怎麼樣才能夠設定多欄位的顯示。

所以,要如何設定一欄以上的顯示呢?方式是利用多欄顯示函式"Concat"的組合,例如希望顯示兩個欄位,且前面都有欄位名稱說明,並要有換行顯示,那我們可以利用簡單的組合,來達成這個效果。

從需求可以得知,我們必須組合五個項目,分別是:欄位名稱1、欄位屬性1、換行符號、欄位名稱2、欄位屬性2,所以我們必須利用四個Concat來達到這個目的,詳細寫法可以參考上圖對話視窗內的語法,就可以獲得下圖的顯示結果。當然,如果需要更多欄位的屬性顯示於Tooltip上,就可以依照這樣的方式來組合所需要顯示的字串。

如果有接觸過網頁程式的人,看到換行符號使用"/n",應該會發現這個Tooltip其實就是一個html的網頁,動態產生在MapGuide圖台上,所以我們可以簡單的做出一些變化。比如說,我們有一個各個部落客分佈的台灣地圖,希望在移到位置的時候直接顯示該部落客網頁的Tooltip,就可以直接用一個iframe來接這個網址,做出以下的效果。

證明Tooltip可以接收網頁以後,我們就可以嘗試做更有用的變化,例如有些專案會有統計圖表的需求,可能會使用一些二進位的串流方式(類似下圖)來承接在img的標籤裏面,這時候我們就可以利用上述連接網址的方式,將統計圖表承接下來於地圖顯示。

可惜的是,還找不到方式可以將自訂的資訊直接種在地圖上面,不知道後面的版本會不會支援?

2010年6月25日 星期五

Flex_建立類別檔案

第一週的課程除了一些FlexBuilder簡單操作以外,有花一點時間介紹物件導向的觀念,然後徒手建立類別檔案,老師也很清楚的說明了相關的內容,趁記憶猶新的時候趕快把他記下來。

雖然寫程式也有一段時間了,聽到"物件導向"這個名詞也不下百次,但是真的被問到什麼叫做物件導向,倒也沒辦法說出一句什麼話可以讓對方立刻明白的,所以今天一定要來定義一下,順便可以讓兩三年後的自己笑一下,所以物件導向就是:以程式邏輯與技巧來描述可獨立呈現之內容的概念,例:杯子、用戶。

因為Flex是以物件導向為基礎,所以第一課就是了解怎麼樣可以寫出一個具物件導向概念的類別檔,以更清楚的架構開發系統。在建置類別檔案時,主要的主成成分有三個,分別為:建構函數、屬性及方法
說明:
建構函數(建構子):當類別被建立出來時會優先被執行的程式內容。(初始化的函數)
屬性:負責描述物件相關內容。(螢幕的廠牌、學生的姓名等)
方法:提共含有邏輯的執行內容。(新增學生、設定屬性並做檢查等)

依照上面所述,可以先寫出一個簡單的類別,含有一個可輸入參數的建構函式,並且設定了初始值;設定了四個屬性,並設定了第二個初始值;最後有一個取得屬性的方法。

完成上述類別檔以後,會有一個疑問,若是需要讓外部讀取或是設定屬性就必須在屬性定義時給定Public的存取權限,但這樣有些想做到只能讀不能寫的屬性就無法呈現了,又或者在資料讀取時要先做一些加工,在資料寫入時要做一些檢核都變的無法做到。那當然,這些都一定會有配套措施,方法就是也常常聽到的"Getter"與"Setter"的函數撰寫。在撰寫上有幾點要注意的,於Flex當中set與get為特殊關鍵詞,當使用後function的名稱於外部使用時就會像是屬性一樣,所以會有也就是只要以"m1.brand"這種方式讀取,"m1.brand=XX"這種方式寫入。所以如此一來就可以設定要經過修飾的屬性為private存取權限,並為了區分類別屬性及setget方法名稱,習慣性將類別屬性前加一底線"_",所以就可以完成下列的類別檔案。


相關規則:
一、建立Class規則
1.package名稱為相對應的資料夾名稱位置。
2.檔案名稱=class名稱=建構函式名稱。

二、建構函式注意事項
1. 函數名稱必須與類別名稱相同
2. 函數的存取權限不可為private
3. 函數內是不允許retrun任何資料
4. 不可描述回傳的資料型態

三、存取權限
1.internal:只有相同package內才可以使用(Flex特有的存取權限)
2.private:只有自己可以存取
3.protected:只有自己與繼承才可存取
4.public:大家皆可以存取

最後,讓我們的程式更物件導向吧~~~~~
附上第二張圖的程式碼,這樣複製簡單一點。

package products
{
public class Monitor
{
//建構函數(建構子) --- 當此類別被建立出來時負責執行的程式內容
public function Monitor(brand:String, size:int)
{
trace("Monitor出生了...");
//分配或儲存資料屬性
//this指的是類別本身
this.brand = brand;
this.size = size;
this.power = false; //第一個初始值設定的方法
}
//屬性
private var _brand:String;
public var size:int;
public var power:Boolean;
private var creationDate:Date = new Date(); //第二個初始值設定的方法

//方法
public function getDesc():String
{
var desc:String = this.brand + " " + this.size + "in.";
return desc;
}
//setter
public function set brand(brand:String):void
{
//去檢查資料是否是空的,如果是空的,我用"N/A"去表達
if(brand == "") {brand = "N/A"; }
this._brand = brand;
}
//getter
public function get brand():String
{
return "品牌:" + this._brand;
}
}
}

2010年6月24日 星期四

Flex_開課了!

很久之前就報名了Flex的課程,但是因為一直都是假日班,6/22才有星期二跟星期四的平日班!所以在年初自學的Flex每週又有7小時可以練習囉!而且講師還是之前覺得寫最好的Flex書的作者!!!真是太棒了!

SQL2008R2_安裝完整攻略

雖然安裝SQL2008大部分都是下一步、下一步。但是因為還是截圖了,就再來一篇詳盡安裝篇,這樣以後到業主那邊安裝還可以偷看一下。所以,來看截圖吧!

1.放入光碟,執行Setup安裝檔。可能會出現一個警告,點選確定即可。

2.第一次安裝選擇”新的安裝或將功能加入到現有安裝”選項。

3.安裝程式即會進行”安裝程式支援規則”檢核。

4.輸入產品金鑰。

5.然後是一定要接受的授權條款。

6.接下來會進行第二次的安裝程式支援規則。

7.選擇SQL Server功能安裝。

8.選擇要安裝的內容。

9.會進行第三次的安裝規則檢核。(可能會出現很多”不適用”,表示可能未安裝相互搭配的軟體。)

10.接下來開始進行相關的設定。第一個是執行個體設定,若是伺服器上只有一種版本的SQLServer就不需要特別進行修改。

11.安裝程式會偵測磁碟空間是否足夠。

12.設定SQL各項服務的帳戶,為了讓程式可以正常讀取資料庫且設定方便,選擇”所有SQL Server服務都使用相同的帳戶”,並於帳戶名稱選擇NETWORK SERVICE。

13.並且將SQL Server Browser改為自動啟動。

14.然後設定SQL Server管理員帳號,為了讓程式可以直接連接資料庫,選擇混合模式,並且選擇”加入目前使用者”,將系統管理員帳號加入SQLServer管理員。

15.為了管理方便,可以將預設的目錄改到其他的目錄。

16.指定Analysis Services管理帳號。

17.選擇報表設定,沒有使用SharePoint,選擇第一個即可。

18.出錯要不要傳送給微軟,嗯…不缺我一個。

19.進行最後一次檢核,下一步。

20.終於看到安裝按鈕了,點下去開始裝!泡咖啡吧!

21.經過10杯咖啡的時間以後,安裝完成了,趕快來測試一下可不可以正常執行。

22.測試方法,就來看看SQL Server的管理介面能不能正常連線吧!從開始連接到管理介面(SQL Server Management Studio)

23.正常連線囉!

ArcGIS Server_安裝931版完整攻略

完成前篇的設定後就可以正式安裝ArcGIS Server囉!這次是安裝9.3.1版本,依照慣例我還是擷取了很多張步驟圖,趕快拿起你手邊的軟體一起安裝吧!

1.點選ArcGIS Server for the Microsoft.NET Framework就可以開始安裝。

2.經過”我同意”及”下一步”等等流程後,就會來到相關設定的畫面。

3.首先要設定SOM(Server Object Manager)及SOC(Server Object Container)密碼。SOM及SOC依照伺服器大總管的描述:SOM就是管人的人,SOC就是做事的人,所以SOM只有一個,但是SOC有很多個。

4.接下來設定ArcGIS WebServices的密碼。

5.設定要將caches或影像檔案儲存的位置。還有Web要使用的Port號,如果沒有特別設定,當然就是用80。

6.接下來設定proxy。依照大總管說法:如果你需要從外面連到一個有設定proxy的GIS Server管理介面,就必須要設定。目前環境沒有,所以這邊不設定。

7.最後他會問你是否要將剛剛的設定檔儲存起來,以後設定就可以直接讀出來用。

8.確認一些設定項目,就可以繼續安裝了。

9.設定安裝完後,可以觀看執行的狀況。

10.最後,選擇第三項進行註冊動作。

11.輸入存放註冊檔(ECP)的位置。

12.系統會確認你所持有的EPC擁有哪些項目。

13.完成安裝後,必須先將特定的帳號加入伺服器群組內,首先增加agsadmin群組的帳號。

14.按下新增。

15.新增ArcGISSOM及伺服器管理者帳號(admin)。

16.再來增加agsusers群組的帳號。

17.新增ArcGISSOM及伺服器管理者帳號(admin)。

18.安裝及設定都完成了,來看一下可不可以正常啟動管理介面,啟動位置:開始→所有程式→ArcGIS→ArcGIS Server for the .NET Framework→ArcGIS Server Manager

19.啟動以後,依照他提醒的方式輸入使用者名稱及密碼。

20.看到以下管理介面,表示ArcGIS Server安裝應該沒有問題,可以開始玩囉!

註:若是後來需要用ArcCatalog進行服務的發布或是管理,安裝到這邊必須先重開機,才不會出現連線上的問題。

好!現在可以發布一個簡單的服務來測測看有沒有正常運作囉!