VFP的認證測驗

VFP的認證測驗,主要測驗的是設計和實作分散式應用程式的解決方案。
在測驗之前,你必須要熟練以下列出的內容:
發展概念和邏輯規劃(Developing the Conceptual and Logical Design)

  • 將資料分組為實體,並且為它們正規化。
  • 在實體之間指定關聯。
  • 選擇能在實體間進行關聯並且擔保指示一致性(Referential Integrity)的外來鍵(Foreign key)。
  • 辨識出關聯到資料一致性(Data Integrity)的商業規則(Business rules)。
  • 將商業規則和限制(Constraint)混合到資料模型中。
  • 給予狀況以決定非正規化是否恰當。

衍伸出實體規劃
審慎評估邏輯規劃中對效率、維護、可伸展性和可利用性潛在的影響。需要考慮的部分包括COM、DCOM和中間層(middle tier)。

  • 發展VFP元件從資料庫中存取資料。
  • 規劃元件的屬性(Properite)和方法(Method)。
  • 規劃類別庫。考慮的部分包含繼承、封裝、容器(containership)、委任(delegation)和多形。

完成發展環境

  • 完成原始程式碼版本控制的環境。
  • 為發展分散式應用程式安裝並設定VFP。
  • 完成發展環境以執行MTS(Microsoft Transaction Server)、IIS(Inter Information Server)和MSMQ(Microsoft Message Queue Server)。

建立使用者服務

  • 實作方向(navigational)規劃
  • 建立選單。
  • 增加一個快捷選單(shortcut menu)到應用程式中。
  • 增加控制項(controls)到表單(forms)中。
  • 為控制項設定屬性。
  • 為控制項指定程式碼以回應一個事件。
  • 建立一個工具列。
  • 建立並管理資料輸入表單和對話盒(dialog boxes)
    • 運用控制項顯示、操作和連結資料。
    • 在執行時期(runtime)新增、刪除和操作控制項。
    • 使用表單集合( Forms collection)以在執行時期操作表單。
    • 給予一個狀況,增加程式碼到適當的表單事件中。這些事件包含Init、Destroy、Load、Unload、QueryUnload、Activate、Deactivate。
  • 檢查使用者輸入。考慮部分包含了單層(single-tier)、二層(two-tier)和多層(n-tier)的應用程式。
  • 在進入表單之後撰寫處理資料的程式碼。
  • 為表單或是Container加入一個ActiveX控制項去操作資料。這些ActiveX控制項包括 TreeView、ListView、ImageList和Web Browser。
  • 從網頁上和VFP互動。考慮到的技術包括FoxISAPI、DHTML、ASP和XML。
  • 產生、喚起和操作一個COM元件。
  • 在分散式應用程式中實作線上使用者輔助說明。
    • 設定恰當的屬性以讓使用者容易瞭解該屬性的用處。求助內容包括求助檔、HelpContextID(求助檔中作為指定訊息或文章的編號)和WhatsThisHelp。
    • 為一個應用程式建立HTML Help。
  • 在桌面應用程式(Desktop Application)為使用者介面(User Interface)實作錯誤處理。
    • 辨識並捕捉執行時期錯誤。
    • 處理行間錯誤(inline errors)。
    • 提示使用者錯誤訊息。
  • 經由Windows API來提昇功能。
  • 建立並管理COM元件

    • 建立一個實作了商業規則或邏輯的COM元件。
    • 建立一個和其他COM元件溝通的COM元件。
    • 為一個COM元件增加錯誤處理。
    • 為了要錯誤處理和除錯,將錯誤記錄下來到一個錯誤檔中。
    • 規劃並建立給MTS使用的元件。
      • 讓一個COM元件支援交易處理。
    • 為一個COM元件建立適合的伺服器類型(Server type)。類型有in-process、out-of-process和multithreaded。
    • 使用MTS Explorer來建立和管理套件。
      • 將原件增加到一個MTS套件中。
    • 利用使用者權限指定使用者只能限制使用某個MTS套件。
    • 使用元件陳列庫去管理元件。
    • 註冊和解除註冊一個COM元件。

    建立資料服務

    • 使用ADO和RDS存取和操作資料。
    • 使用VFP的原生資料處理和查詢能力(Query capabilities)(包含Local View)來存取和操作資料。
    • 使用SQL pass-through存取和操作資料。
    • 使用遠端資料集(Remote views)和本地資料集(Local views)來存取和操作資料。
    • 管理資料庫交易以確保資料一致性和可復原性。
    • 撰寫能取得和變更資料的SQL敘述。
    • 撰寫使用連結(join)來從多個資料表格連結資料的SQL敘述。
    • 撰寫能建立資料集(views)的SQL敘述。
    • 使用適合的鎖定和緩衝策略。策略包括悲觀(pessimistic)、樂觀(optimistic)、列和表格。
    • 建立和操作一個VFP stored procedure。
    • 建立並實作VFP trigger。
    • 從其他外在的資料來源匯入資料。
    • 撰寫能更新及變更資料的SQL敘述。

    建立實體資料庫

    • 以程式來建立和維護VFP的資料庫。
    • 規劃、建立和實作資料庫和資料表格。包含了資料一致性(Data Integrity)、參考完整性(Referential Integrity)和正規化(Normalization)。
    • 選擇並規劃一個索引策略。考慮最佳化(經由Rushmore)和索引維護。
    • 建立並維護索引。考慮最佳化(經由Rushmore)、程式化的操作、視覺化的操作和索引維護。

    測試並除錯

    • 決定適合的除錯技巧。
    • 辨識和描述測試計劃的要素。要素包括beta的測試、回歸測試(Regression testing)、單元測試(unit testing)、整合測試(integration testing)和重點測試(stress testing)。
    • 給予一個狀況,選擇適當的建立選項。(此處應是指在專案管理員裡按下建立後的一些選項)
    • 在應用程式中使用條件編譯。(此處應是指#ifdef、#ifndef…等指令的應用)
    • 使用除錯視窗(Debug Window)監控運算式和變數的值。
      • 使用即時運算視窗(Immediate window)來檢查或變更值。
      • 使用監看視窗(Watch window)來檢查或變更值。
      • 使用呼叫堆疊視窗(Call stack Window)來尋找錯誤。
    • 在應用程式中使用 Asserts。
    • 使用涵蓋分析工具應用程式來辨識效率瓶頸(Performance bottlenecks)和程式碼涵蓋範圍(Code coverage)。
    • 使用事件追蹤來確定事件發生的順序。
    • 設定中斷點以除錯應用程式。

    散發應用程式

    • 使用安裝程式精靈去建立一個能安裝分散式應用程式、註冊COM元件並容許反安裝的安裝程式。
    • 註冊一個實作DCOM的元件。
    • 為客戶端電腦(Client computer)和伺服器端電腦(Server computer)設定DCOM。
    • 為客戶端電腦設定以使用一個MTS元件,並且為客戶端電腦及伺服器端電腦設定遠端自動化(Remote automation)。
    • 為一個分散式應用程式計劃並實作以軟式磁碟機或CD為基礎的散發程式。
    • 為一個分散式應用程式計劃並實作以Web為基礎的散發程式。
    • 為一個分散式應用程式計劃並實作以網路(Network)為基礎的散發程式。

    為應用程式提供維護和支援

    • 為災難復原程序提出計劃並實作之。
    • 修正錯誤並提早評估以預防未來的錯誤。
    • 維護異常的報告。
    • 為分散式應用程式散發應用程式更新。

    Step by Step 用 C# 做出一個 GUI 的應用程式

    這是我在 MSDN 網站上,看到的一篇文章
    這篇文章一步一步的引領你如何使用 C# 來寫作 GUI 應用程式.
    我覺得很實用
    http://msdn.microsoft.com/library/en-us/dnmag01/html/winforms.asp
    這篇文章主要是假設你有 Visual Studio.Net beta 1 整合開發環境來引領的
    不過如果沒有 vs.net beta 1 的話,可以用 .Net Framework beta 1 來實作
    如果使用 .Net Framework beta 2 的話,有幾點要注意:
    1.編譯時所引用的 Dynamic Link Library 有變化
    這是文章所建議的編譯方法,即 beta 1:
    csc /target:winexe /out:Hello.exe /reference:System.dll
    /reference:System.WinForms.dll /reference:System.Drawing.dll
    /reference:Microsoft.Win32.Interop.dll Hello.cs
    beta 2 的編譯方法改變了, 以下是我試出來的結果:
    csc /target:winexe /out:Hello.exe /reference:System.dll
    /reference:System.Windows.Forms.dll /reference:System.Drawing.dll Hello.cs
    主要是 beta 2 將 DLL 的架構做了一些調整
    2.using 的架構:
    beta 1 是
    using System;
    using System.WinForms;
    using System.Drawing;
    而 beta 2 是
    using System;
    using System.Windows.Forms;
    using System.Drawing;
    其實這邊主要是跟 1 有關係,在beta 1 你可以試著尋找 System.WinForms.dll, 你將會發現有這麼一個檔案;但是在 beta 2 中卻沒有, beta 2 中只有System.Windows.Forms.dll.
    3.MessageBox 類別有變化,其實應該也是因為架構調整的關係吧
    beta 1:
    MessageBox.Show (String.Format (“{0} is not ” +
    “a valid image file”, fileName), “Error”,
    MessageBox.OK | MessageBox.IconError);
    beta 2:
    MessageBox.Show (String.Format (“{0} is not ” +
    “a valid image file”, fileName), “Error”,
    MessageBoxButtons.OK,MessageBoxIcon.Error);
    其他應該還有很多有所調整, 可能要參考 .Net Framework 的說明才能得知囉.

    2001/8/30與saint閒聊

    Saint said:
    Dear, What’s your best program framework ?
    —-
    Ellery said:
    I have no framework in VFP~
    大多只是一些小技巧以及函數罷了
    你這樣問,有點不知道該怎麼回答你
    你想要知道什麼呢??
    —-
    Saint said:
    不一定是VFP
    我是說,你沒有想過,有關於framework這樣的事嗎?
    從我把資料給物件化時,我就很想要做一個可以自動產生程式的一個framework
    到了這裏,又做了menu object 之 後,這一個想法,一直在心中盤算!
    所以我想要做一個是my style object framework ,You know ?
    可是當我要去做時,發現並不簡單!所以想要聽聽看你的看法!
    —-
    Ellery said:
    有想過~
    但真的不簡單
    1.需要對該語言的特性作深入的了解
    2.需要對物件導向的各種 pattern 有相當的認識,才能作出簡潔而又漂亮的設計
    其實也不一定要有相當的認識,但也要有看過大量的Framework
    另外,人都會有野心,會想要弄出跨平台,甚至跨語言的一個東西
    這樣子的領域就又更龐大了
    當我越想越多的時候,就越覺得龐大,越覺得不能馬上動手
    所以一直沒有作
    跨平台的東西, Borland Kylix and Delphi,Qt 和 Java 是著名的代表
    Borland 的產品 CLX
    Qt 是 linux 上著名的桌面管理 KDE 的底層,以C++撰寫,但寫出的東西,一樣能在Windows上compile
    Java 則更誇張,compile 一次之後, run everywhere,只要檔案複製過去,然後執行環境的Java Virutal Machine有支援,就一切ok
    跨語言的東西,COM, CORBA, 以及 beta版的 .Net 應該算是代表
    COM, 衍生出 DCOM, COM+
    CORBA, 則是 Unix 以及 Unix like 環境下,類似COM的東西,但其實CORBA出來的較早
    這個標準實作的比較漂亮且完整,只是支援的語言不多,目前我知道的只有 Java, C++, Object Pascal 而已, Windows 平台上較不常見
    .Net 是微軟的一個弘願,Linux上也有了相關的計劃,將來是可以期望的一個東西
    說了那麼多,我的最後結論其實是
    Framework仍然要作,但是不要像我一樣考慮那麼多,考慮的太多,反而讓自己無法前進
    應該依照目前想實作的狀況,一族一族的去實作出來
    比如說,現在要作 menu, 就先把 menu 類別及其衍伸類別實作出來
    要作檔案,就把檔案類別及其衍生類別實作出來
    一個一個去實作
    將來如果需要合作的時候,再去參考 Design Pattern 中與合作相關的Pattern去實作
    不行,再重寫
    但是什麼都要自己寫嗎??
    不, 如果現成語言裡已經提供了現成的一個類別, 那麼就直接使用
    有跨平台或跨語言的需要,就寫一個wrapper類別把他包起來,將來若跨平台或語言的時候,只要重新實作這個wrapper就可以了
    喔~~
    回頭看了一下,我居然打了這麼多字
    謝謝你的收看
    ^_^
    —-
    Saint said:
    我倒是沒有想到過說要跨平台這一個問題!
    不過我的想法,也倒如你所說的一樣!想的越多,我越難下手去做,
    不是沒有想過說,先做一個起來,以後再用合併的方式來做
    可是是否會有一個問題,就是所以的物件的起源,我是說如果這樣做的話
    我會有一個base object 那有可能我所有的物件都會去參考這一個當做base
    想著想著,有時想到如果程式要做,如果只是自己才看的懂那又矢去了意義!
    想的越多越難做!
    —-
    Ellery said:
    單一繼承的關係比較簡單,而且效率會較好
    八月的時候,我看了侯捷翻譯的”深度探索C++物件模型”
    雖然只看到第五章,就因為借書期限到的關係,只好還書
    不過有作筆記(這是我第一次看書作筆記!)
    對於物件導向實際上的運作了解很多
    所以,我想還是建立一個 Base Object
    但盡量只賦予必要的特性就可以了
    也就是雖然此族的衍生類別都從一個父類別開始繼承,但此父類別必定繼承 Base Object
    若真需要增加屬性或方法,只更動此父類別就可以,而不更動父類別
    其實對於VFP來說,此動作並不是必要
    因為VFP並不是強型別的語言也沒有支援虛擬
    所以就不能這樣寫(以下是C++語法)
    BaseObject *obj; //宣告成指標
    Menu mymenu; //產生一個 mymenu物件,假設 menu繼承 BaseObject
    Form myform; //產生一個 myform 物件, 假設 form 繼承 BaseObject
    obj=&mymenu; //取得mymenu的位址,指定給obj
    obj->activate(); //就可以直接呼叫 menu 的方法
    obj=&myform; //取得myform的位址,指定給obj
    obj->show(); //就可以直接呼叫 form 的方法
    很神奇不是嗎?? 如果你用過強型別的語言
    對這種神奇的感覺會很強烈
    因為類別不同是不可以隨便指定的!換言之也不能隨意呼叫其他類別的方法
    Java, Object Pascal 也都有類似的用法
    VFP和VB 所有的變數都是 Variant, 這樣的感覺就不是很強烈
    反正怎麼寫怎麼適用
    local obj
    obj=createobject(“menu”)
    obj.activate()
    obj=createobject(“form”)
    obj.show()
    但我就不清楚VFP內部是怎麼去實作的
    說到程式看不看的懂
    又牽扯到寫作風格的問題
    我以前很痛恨這種寫作風格的問題
    尤其是學校導師(後來老師因為肝的問題,英年早逝了,很遺憾沒去醫院看他最後一面)教我們COBOL的時候, 他一直不厭其煩的要求我們要這樣子去寫 COBOL 程式
    那時候覺得如果強制要求寫作的風格,會很麻煩,而且排版的很累,寫出來的程式碼也會不簡潔,不漂亮
    但是後來看過”撰寫0錯誤程式”這本書以及經過歷練之後就不會這樣想了
    現在會盡量要求自己留下註解, 使用較清楚的方法去寫程式
    假設前兩天寫出這樣的程式
    if getanswer()
    *do something
    else
    *do something
    end if
    隔兩天,我一定忘記我在寫什麼,於是又要去看 getanswer() 在寫什麼,浪費了許多時間
    我會盡量這樣寫
    *利用 getanswer() 函數詢問使用者的答案, true 表示使用者回答 yes
    if getanswer()==true
    *do something
    else
    *do something
    end if
    這樣至少我自己看程式會知道我之前要幹麼
    哇~又打了這麼多
    8-p

    少林足球

    shaolin_soccer_ellery_354219.jpg
    8/25 中國情人節.
    我一直很喜歡周星馳,他的每部片我幾乎都看過.即使都看過了,現在在播放時,我還是會笑出聲 ^_^. 我最喜歡他拍的”東西遊記”,非常之特出!
    他睽違了兩年推出新片,當然,我很想去看.原本想,去看這樣的一個港片,到底值不值得?(應該很多人都會這麼想吧)
    趁著情人節下午的空檔,說服了女友,和她去長春戲院看了這部片,長春戲院播放的是粵語版,換言之就是原音重現.之前,我有聽說食神粵語版的那首歌”情與義,值千金…”非常之好聽,很可惜後來看的都是國語版,所以都沒聽到,引以為憾.這次總算能看到粵語版,真是太高興了!
    這部片非常之棒,讓我和女友從頭笑到尾,看完之後,覺得我們沒有浪費錢 ^_^
    不過,我覺得結尾與魔鬼隊決戰的部分可以拍的更好些,不要太多特效,應該可以加上六師弟吃蛋的笑料,足球小將翼裡面的雙人射門,或是主角頹喪重新站起等等之類的情節.
    大家趕快去看吧,港片通常很快就下檔囉!! ^_^

    Artificial Intelligence

    8/18 和女友一起去看 AI。之前在看預告的時候,原本以為會是一部具有相當衝突性的影片,沒想到,卻不是。我個人覺得,這部片應該算是類似童話故事的影片,有點悶,但卻很有省思的意味。

    我想人類真能發展出極為類似真人的人工智慧而不加任何限制嗎??如果沒有限制,是不是會像 The Matrix 裡的機器人一樣,加害於人類,甚至利用人類??喔~~想起來就覺得可怕。

    另外導演在最後加上溫馨的結局,雖然達到溫馨的效果,但卻顯得牽強。我認為應該在David發現無法完成心願的時候,讓他擁有仇恨的意識,在經過一段時間的潛伏後,利用博士的技術與知識轉換身體,引領機器人在人類世界裡革命,這樣的一個安排或許會更好!

    看完之後,讓女友和我兩人覺得有點失望。Anyway,怕悶的人千萬別去看~

    CODERED(C)紀實

    上週
    我發現Windows2000怪怪的
    我習慣設定將網路連線的燈號顯示在工作列上,可他怎麼老是一直閃呢?
    這實在很奇怪,我又沒有發信或者是去逛網頁.
    接著,因為疑心的關係,覺得電腦上的所有軟體都變的奇怪;於是星期天,我就大刀闊斧的重灌,花了不少的時間(因為不太會用ghost,也懶得用,所以重灌會花許多時間).
    重灌之後,是好多了,但IIS老是沒辦法啟動,或者啟動後沒多久,就又停止.網路連線的燈,偶爾會一直閃,粉奇怪.
    奇怪的事情,必然有原因,我開始調查,正巧最近的電子報上一直提到”紅色警戒”肆虐,原本以為他只感染 Windows 2000英文版,想不到,CODERED的變種C,居然會感染Windows2000中文版,怪怪了不得,趕緊去微軟網站 download 修正程式來安裝,安裝之後,果然一切怪怪的情況減少了很多.
    唉唉~~這樣子的一個專門攻擊IIS的病毒,日後對於目前網路上所推廣的 Web Service 必然有所影響.也許以後病毒都會對網頁伺服器下手了吧,屆時,影響的層面將會變的很大很大…..

    偏執

    年紀越來越大了,雖然並不很大,才二十來歲,但是,我覺得我的心越來越偏執,不再和早前一樣心胸開闊,不會因為某些沒道理的理由而對某些人或某些事情有錯誤的看法.
    這很可怕,會影響自己對週遭人事物的判斷.
    我應該要
    多認識一些人
    多走走
    多觀察
    而不要
    任意下判斷而否決一個人或一件事
    呵~
    在我 icq 的Info(個人簡介)裡面,我放了這樣的一句偈語
    由愛故生憂
    由愛故生怖
    若離于愛者
    無憂亦無怖
    這裡的”愛”,其實也可以解釋為偏執啊!

    電話

    前前一篇有提到我和我女友的一些事情,我仍然在想這個問題.
    我們天天通電話,但他常聽不清楚我說的話,於是我又得被迫再說一次,如果又不清楚,我又得再說一次,一次又一次,會覺得心煩,慢慢會變的大聲.
    她也知道這點,也告訴過我,
    “就是聽不清楚啊~電話有雜音~”
    “你說話太小聲了~~”
    “你說話太快了~~”
    “不懂你的詞彙~”
    也許是電話的問題~
    也許是我個人說話的問題~
    也許是我們兩人國文程度有落差的問題~
    雖然不曾因此而吵過架,但這卻是我必須要先適應的一點.婚前的交往並非沉醉在愛情之中,我認為也必須為婚後作一些心理準備,以提早適應.
    所以,我告訴我自己.當發生這種情況的時候,我要說慢一點,大聲一點,運用一些她容易瞭解的詞彙,來說明.順道培養我的耐心.
    不過
    還是想抱怨一下~~~
    真希望她”聽”和”說”的能力和她”閱讀”的能力一樣好~~

    7/29 天母水管路古道

    7/28 剛好在金石堂看到古道系列中的天母水管路古道,因此和女友商議後,決定就去那兒.
    7/29 雖然是颱風來的前夕,但天氣仍然是熱的要命,絲毫不受影響.
    我們沿著中山北路往北騎到底,就到了天母,在尾端可以看到一個圓環,那兒除了古道的入口之外,還有天母公園,也是個休憩的好地方.
    繞過圓環,繼續往前騎到底,就可以發現右手邊有指標顯示,這條步道可以往陽明山遊客中心和文化大學.我和女友就下車往上爬了.
    爬了沒多久,發現這條路出乎意料的陡,爬的我們兩個講不出話來.沿路上看到許多登山的人,讓我們印象比較深刻的是,有個爸爸帶了兩個小孩往上爬,小孩也不哭不鬧,爸爸還沿路作一些機會教育,讓人覺得他真是個好爸爸.另外也有看到阿媽帶了孫子去爬,經過的時候,聽到他們的對話,讓人覺得現在的小孩真的是跟以前不一樣了~總之,看到許多形形色色的人.
    這條路到了後半,就分岔開來了,我們選擇左邊,通到文化大學附近,接下來就好走許多,風景也很優美,微微徐風吹來,讓人不禁懷疑剛剛陡坡的辛苦.
    路上的小歇,把帶來的香瓜給吃掉了,補充一下體力,順便也讓平常不愛吃水果的女友吃個水果.
    再走了不久,最後終於到了終點,原本想要搭公車再轉回天母去的,但擔心公車難等且路不熟的情況下,就放棄了這個想法,採取原路繞回.
    原路繞回去,就輕鬆多了,全都是下坡,也注意到一些上山的時候沒注意到的東西,
    印象較深是路邊一張懸掛的招牌,是聲明土地所有權的,農民因為有人去北市建設局告密,造成不必要的困擾,因此特別懸掛招牌告知古道的所有權以及兩邊作物和開墾的合法性.(為什麼印象深刻?大概是很難以想像會有人去告密吧.)
    下次還要再來幾次,但是要找幾個朋友一起來爬爬~