Internet Transfter Control的聯想

摘要:對於 Internet Transfer Control 元件的一個聯想

內容:

安裝說明
發想
參考

下載本文章的範例程式: ASP端 Client端
(均為自動解壓縮檔)

安裝說明

請將下載下來的 ASPCODE.EXE 解壓縮,放到 WEB Server 的某個資料夾 上, 然後在 IIS 中開啟一個虛擬目錄,對應到此資料夾.

而 INETCTRL.EXE 解壓縮後就放在 client 端執行,只是可能要改一下程式!!你需要在 Query Customer Informat 那個按鈕的click事件中作修正.
請原諒我沒有作詳細的說明,主要是因為程式中已經有說明了.

另外需要注意的是,WEB Server 必須要安裝 ADO 2.5
以上版本,另外要有裝 IE5.0以上版本, client 端的需求也是一樣!!

發想

某天,我在 Microsoft Newsgroup上看到一個Inetctrl 元件的應用範例
以前都沒想到可以用這個 Active X元件
挺有趣的
所以就動手寫了一個小程式,配合 ASP 做了一個有趣的應用
ASP 負責在 WEB Server 上 抓資料,並產生 XML
VFP 程式利用 Inetctrl 元件對 ASP 送指令,並取得 XML, 再轉換為 Recordset
於是就可以用啦!!
但是修改後的資料要怎麼送回去呢??
我在 post 的按鈕裡面已經寫了一部份了
到底在 ASP 程式還要作怎樣的配合才能把資料送回去?!

 

參考

Active Server Pages 3.0 深度探索(國外出版社Wrox,國內則是由碁峰翻譯後發行)


® 2001ellery寫的!!引用時,請加註出處!!謝謝~

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 的說明才能得知囉.

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)為基礎的散發程式。

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

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

    SQL pass-through的使用

    在VFP所附的範例或者是微軟的建議中,都一直有看到這方面的函數。
    事實上,這些函數對於遠端資料的控制來說是很方便的。
    如果經過適當包裝的話,就非常類似於Delphi或BCB的TQuery元件或TStoreProc元件,
    有看過Delphi或BCB的人可以自行比較一下。
    但是偏偏市面上的書對於這個部分如何使用…等都略過不提。
    在這裡,提出一個範例供大家研究一下,略盡棉薄之力 。
    p.s. Arsen=Ellery, And this article is co-write with Saint.
    ————————————————————————————————————

    *使用SPT更新表格的範例
    *作者:Arsen(Ellery)
    *環境:在ODBC設定中,我設了fpm這個別名,路徑設到目錄下的foreign.dbc
    Local ln_handle
    *先連接
    ln_handle=sqlconnect("fpm")
    *執行查詢
    =sqlexec(ln_handle,"select emp_no,name from basic","_basic")
    *設定相關屬性:這幾個屬性必須設定,在MSDN上有詳細說明(記得多看MSDN)
    =cursorsetprop("tables","basic") &&設定欲更新的資料表格
    =cursorsetprop("sendupdates",.t.,"_basic") &&確定要進行更新
    =cursorsetprop("keyfieldlist","emp_no","_basic") &&要依據何鍵值來進行更新 =cursorsetprop("updatablefieldlist","emp_no,name","_basic") &&哪些欄位要更新
    *以下這行,比較複雜一點,空格前寫的是上一行的欄名,後面寫的是資料表格的欄名(要用alias.field這樣) =cursorsetprop("updatenamelist","emp_no basic.emp_no,name basic.name","_basic")
    Replace Next 1 alltrim(name) with alltrim(name)+"Test"
    use
    *釋放連接
    =sqldisconnect(ln_handle)
    

    ————————————————————————————————————
    首先,謝謝Arsen,幫我解決了想了好久無法解決的問題。
    其實,我的作法和他,並無很大的不同,只有這一行
    =cursorsetprop(“updatenamelist”,”emp_no basic.emp_no,name basic.name”,”_basic”)
    由於資料集預設的BUFFERING是3,所以只要移動記錄指標便會做存檔的動作
    為了Client/Server效率上的考量,改用
    =CURSORSETPROP(“BUFFERING”,5)
    似乎是比較好的選擇。
    另外附上另一份範例如下:

    ?sqldisconnect(0)
    ?sqlconnect("testdbc")
    _sqlsele="sele * from mydbf"
    =sqlexec(1,_sqlsele ,"myview")
    ?cursorsetprop("buffering",5)
    REPLACE NAME WITH "TEST"
    =cursorsetprop("tables","mydbf","myview")
    =cursorsetprop("keyfieldlist","id","MYVIEW")
    =cursorsetprop("updatablefieldlist","name","MYVIEW")
    =cursorsetprop("sendupdates",.t.,"MYVIEW")
    *=cursorsetprop("updatenamelist","ID MYDBF.ID,name MYDBF.name")&&這一行指令,有興趣的人可以比較
    =cursorsetprop("updatenamelist","ID MYDBF.ID,name MYDBF.name") &&註解前和註解後有何差別
    IF NOT TABLEUPDATE(.T.,.T.,"MYVIEW")
    =AERRO(MYERROR)
    CLEAR
    ?MYERROR(1)
    ?MESSAGE()
    ENDIF
    

    另外附上其他的做法,一檥可做到,請自行參考

    AA=sqlconnect("testdbc")
    IF AA>0
    =SQLSETPROP(AA,"ASYNCHRONOUS",.F.)
    =SQLSETPROP(AA,"BATCHMODE",.T.)
    =SQLEXEC(AA,"sele * from mydbf","myview")
    M.SQLDESC="UPDATE ...." &&請參考 SQL INSERT,UPDATE 語法"
    =SQLEXEC(AA,M.SQLDESC) &&把指令送到後端讓Server去執行
    ENDIF
    

    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(個人簡介)裡面,我放了這樣的一句偈語
    由愛故生憂
    由愛故生怖
    若離于愛者
    無憂亦無怖
    這裡的”愛”,其實也可以解釋為偏執啊!