Tuesday, March 30, 2004

What Microsoft considers as threats

Microsoft doesn't usually make item-by-item comparison with its competitive products due to its enormous market shares unless, of course, the competiting products become highly relevent in the playing field. Most of the threats come from the Open Source community. One of the most significant is OpenOffice.

Recognizing it's alarming rate of adoption in the corporate level by IBM and Novell, Microsoft provides a Competitive Guide to challenge what OpenOffice claims to provide, i.e., on the basis of these arguments:
free, good enough, compatible to total value delivered by Microsoft Office

In response to the Competitive Guide, NewsForce has a different and extensive view: Microsoft displays fear, uncertainty, and doubt toward OpenOffice.org. The author concludes with the following comment, "Microsoft used to have an advertisement asking where you wanted to go today; this is more true of OpenOffice since it allows you more control of your data through vendors and even inhouse staff who can help with it. Microsoft is dictating a future; this is why they do not allow Open Standards."

Microsoft has not made any public response on another Open Source project that has been gaining attention, Mozilla. The funny thing is, it's upcoming Windows software development architecture, most notably XAML, based mainly on the highly successful XUL developed by Mozilla.

Recently, Microsoft also has a migration guide to sway users of the highly successful ColdFusion MX to adopt ASP.NET in this entry of MSDN Library.

How do you decide your choice of software? In my opinion, it depends on how and where you use and see software in general. It's not a clear cut question. In the end it's what you do with software that counts.

Let's get serious

The following message is of my personal view points and not of my employer.

The underdeveloped software industry and the enterprise

This letter is intended for the serious, connected audience. If you don't know what it means by connected, try disconnecting yourself from the network and see what happen. (If you still know know what it means then you can excuse yourself from reading on.) The fact of the matter is, we're connected to each other either directly or indirectly, wired or wiredless, like it or not. Since we're a connected whole, we better know what's being transported in the information highway. Another words, you need to be able to define the information you create or to be able to interpret information you receive intentionary or accidentally, to allow a meaningful communication.

Yes, communication is all about passing on information. Another words, improperly defined and/or misinterpreted information leads to breakdowm on communication. What's the purpose of communication anyway, in a working environment? To get job done mostly. Ya, that's the routine part. What I'm interesting in is the the process of communication and the information it generates before the production phase. The problem definition and modeling proceess that is. Methodology, attitude, culture, social politics, are factors that we deal with one way or another in the problem context. Each and everyone of them are significant in itself. Here, we focus on a different issue. Here, we focus on seeing problem by it's purpose not by it's solution.

A lot of time, in the process of solving a problem, we treat solution of the problem as an end itself rather than as fulfillment to it's purpose. Hence we have two approaches to the problem resolution: project-oriented and service-oriented. The first see the problem as an isolated one while the latter treats the problem as an integrated part of a larger problem. Another words, project-orientation in problem solving are inherently inward looking while service-orientation in problem solving is forward looking. As pointed out earlier, we're a connected whole, except for the trivial ones, any resulting solution of problems affects more than the context that it defines directly or indirectly.

What that mean is we need to have a well-defined purpose of the problem and to provide a service-oriention interface of it's integrated part to it's external system as solution. By well-defined problem, I mean the problem must be a self-contained one to be model. Modeling is a necessary step to capture the behavior of the problem and it's purpose to the external system. We need to start looking into the service nature of the problem to allow a more natural integration of the soluition to the system. Another words, treat each business process as a service to the next.

What's the point? You might ask? If you look into it deeper and in a larger context like modeling enterprise business processes, you see that the project-based approach to problem resolution leads to a closed, inward looking system. Another words, there is no easy way to get information in and out of the system unless otherwise provided by the closed application. Such system is hard to scale, hard to integrate, and even hard to maintain, for the system is the sum of it's parts as a whole rather than it's integrated parts as a whole.

So service is the key to allow a more natural integration of the systems around us. We're not alone after all. Unfortunately I don't see that happens in software development. In fact, software development in Taiwan are project-oriented. Both the client and solution provider approach the problem as an end of itself. There is no coincidence that the software is an underdeveloped industry in Taiwan. The truth is, business needs software to materialize it's processes and to compete in the industry. And software developer needs business to grow it's solution scope. Why don't we see the integration between the two? Where is the partnership between the two? The only thing that connects the two is the project itself. The end of the project is ultimately the end of relationship. To me, that's a serious problem to both the business and the software industry as a whole. Every solution is an isolated one and an end of itself. Where is the growth factor?

Are we ready to start the dialog of a service-oriented solution?

NOTE: This is a message I sent on 2003/11/28 to my colleague and all the friends that I've worked with outside of the company. I repost it here without any editing as a reminder to myself what I believe in software development.
  Monday, March 29, 2004

不需要安裝的 Linux 系統

想嘗試 Linux 機能性, 但是不想太花時間學習安裝, 和確認硬體支援的程度? 可以花一片的燒錄光碟, 幾分鐘的燒錄時間?

如果答案是可以, 放置已燒錄的光碟之後, 重新啟動電腦, 在幾分鐘內就可以嘗試到 Linux 了! 再者, 這過程完全不需要使用者的反應. 從啟動到看到 Linux desktop 在我面前, 除了音效卡之外, 一切都工作正常, 我的個人電腦還是 AMD 系統呢! 真的是令人佩服感嘆!

測試 Linux 步驟 (任何版本都適用, 這裡用的是 SUSE 9.0 LiveEval):

1. 下載 iso 檔案
ftp.suse.com: International Mirrors
2. 檢驗iso 檔案 (隨意)
建議確定檔案的完整性. 下載 MD5 Checksum,
在 DOS, 執行檢驗檔案: C:/> md5sum SuSE-9.0-LiveEval-i386-Int-RC1.iso. 產生的32個 md5sum 數字必須相等: 13d85e6f712e15c4ecff55cd9dd751ae. 如不是, 檔案不完整, 必須重新下載 iso 檔案.

3. 重建/燒錄 iso 光碟
啟動Nero (或其他燒錄軟體), 燒錄選擇項目: 光碟影像檔, 開始燒錄.

4. 放置已燒錄的光碟, 重新啟動電腦, 去拿杯咖啡, 回來享受全新的 Linux desktop!

註: 這也許是多餘的, 較新的系統通常預設啟動次序為: CD-ROM, C, A. 如不是, 重新啟動之前, 變更次序, 讓 CD-ROM 為首位 .

Ever evolving Google

From a mere search engine on popular Web sites started in the mid 1990's, Google has become a household name of superior Web search engine. Since then it has evolved itself and now offers a wide range of search services including Web search news search, and more.

Today it just got a new UI in about ten years! Surprisingly, little CSS layout and structure are used on the new UI. Nonetheless, Go Google!
  Friday, March 26, 2004


台灣, 美國, ...

加州, 紐約, ...

... (沉思中)... (思考中)... (當機)

讓我幫忙. 你到過的國家: 台灣, 美國.
你到過美國州: 加州, 紐約

這是個有趣的關於旅遊的 site. 目前提供的地圖服務:
美國地圖 世界地圖

如果你像我不喜歡用 form, 你可以用 URL 查尋. 範例:

國家: 台灣(TW), 美國(US), 西班牙(ES)
URL = http://world66.com/myworld66/visitedCountries/worldmap?visited=USESTW

美國: 加州(CA), 紐約(NY), 佛羅里達(FL)

可以應用範圍包括: 個人參考, 網站簡單地圖服務, blog, IM.
  Wednesday, March 24, 2004

Bye bye, Microsoft!?

終於可以完全的 go open source 了!

這是另一個取代微軟產品的軟體: OpenOffice

OpenOffice 供給全部 Microsoft Office 的功能: Word, PowerPoint, Excel, Photo Editor. 更要的是 OpenOffice 能轉換 Microsoft Office 檔案. 如果你想要不當機的 Microsoft Office, 那麼 OpenOffice 是你最佳的選擇. 還有另一個理由: open source!

終於可以跟微軟 kiss goodbye 了? 如果 Linux 的 desktop 能夠像 Mac 的話... 有 IBM 跟 Novell 的完全投入, 我想也快了.

OpenOffice 1.0 繁體中文版下載
OpenOffice.org 補給站

其他的 open source 產品:
Mozilla Thunderbird
UML tools
  Tuesday, March 23, 2004

Eclipse and SWT

For those of you who have tried on Eclipse which I introduced in my last post, How about CFMX on Eclipse?, have probably noticed somthing unusual for a Java GUI application, it's extremely fast!

In an email response, Rohan, author of CFEclipse, kindly answers the question that underneath, Eclipse uses SWT for GUI manipulation. What's SWT (Standard Widget Toolkit)?

SWT (and JFace) are GUI components originally developed by IBM for the open source Eclipse project. Unlike Swing or AWT, SWT relies on native widgets of the underlying operating system which results in Java applications which look and feel like native applications.
  Thursday, March 18, 2004

高飛吧, 雷鳥!

這是另一個軟體 by Mozilla: Mozilla Thunderbird

像 Mozilla Firefox 取代 Internet Explorer, 這是取代 Outlook 的客戶端郵 件軟體. 我使用 Thunderbird 已經有快三個月了, 我還沒有考慮恢復使用 Outlook. 如果你想使用一個沒有安全性問題的 Outlook, get Thunderbird.

我想微軟一定有 Deja Vu 的感覺: it's 1990's or over again!
NOTE: 當Netscape 在 1990's 給 Internet 下定義的時期, 微軟完全不認同 Internet 的價值. 再次的, 微軟凝視地上燃燒的火鳥, 瞭望天上高飛的雷鳥, 這 巨人在想什麼?
  Tuesday, March 16, 2004

Other UML tools

Tired of using Visio as tool for UML diagrams like I am? How about some other options which are free or open source?
1. (Open source) ArgoUML
I highly recommemd.
2. (Commercial) Poseidon for UML Community Edition (nonprintable)
I like it for better GUI as compared to ArgoUML but printing is not available. By the way, it's core is ArgoUML.
  Wednesday, March 10, 2004


"Analysis Patterns 是針對領域結構, 而 Design Patterns 是針對某方面的領域 結構的實行技巧. 簡潔的來說, Analysis Patterns 是較高積層亦較功能導向."

"Analysis pattern are for domain architecture, and design pattern are for implementation mechanism for some aspect of the domain architecture. In brief, analysis pattern are more high level and more (end-user) functional oriented."

假設這是正確的答案, 那麼以下應該也是正確的:
1. Design Patterns 在 Software development 是扮演協助性的而不是指導性的 角色.
2. 實際的領域知識是在 Analysis Patterns 的積層裡面

original source
  Monday, March 08, 2004

A programmer's summary of the Estee's GM speech

A quick class diagram to the Brand Building model:

<< Marketing >> --- << Brand >> --- << Party >>

| | |
----------- -------- ---------
| | | | | |
Global Local BrandA BrandB Person Organiztion

Now how do I model the most important and abstract incredient, according to
Estee Lauder: Integrity?
  Thursday, March 04, 2004


Refactoring 結構再造

Refactoring 是有規律的技巧重新結構現有的程序碼,改變內部的結構而保留外部的性質.它的核心是一系列小規模的性質保留的轉換.各自的轉換(refactoring) 做一點點,可是一連串的轉換能夠引起重大的結構再造.

一些 Refactoring 實例:

Decompose Conditional 分解條件
你有復雜的條件述句 (if-then-else statement)

if (date.before (SUMMER_START) || date.after(SUMMER_END)) {
charge = quantity * _winterRate + _winterServiceCharge;
} else {
charge = quantity * _summerRate;
if (notSummer(date)) {
charge = winterCharge(quantity);
} else {
charge = summerCharge (quantity);

Reverse Conditional 反向條件

if ( !isSummer( date ) )
charge = winterCharge( quantity );
charge = summerCharge( quantity );
if ( isSummer( date ) )
charge = summerCharge( quantity );
charge = winterCharge( quantity );

Split Loop 分化回圈

void printValues() {
double averageAge = 0;
double totalSalary = 0;
for (int i = 0; i < people.length; i++) {
averageAge += people[i].age;
totalSalary += people[i].salary;

averageAge = averageAge / people.length;
void printValues() {
double totalSalary = 0;
for (int i = 0; i < people.length; i++) {
totalSalary += people[i].salary;
double averageAge = 0;
for (int i = 0; i < people.length; i++) {
averageAge += people[i].age;
averageAge = averageAge / people.length;

做兩件事的回圈不比分開做的清楚,它也會對進一步的 Refactoring 造成問題.

更多的 Refactoring 實例
Refactoring home page

註: Refactoring 和 Analysis Patterns 的創作者是同一個人.
  Tuesday, March 02, 2004


Domain-Driven Design Chapter 1 Crunching Knowledge 裡, Eric Evans 強調領域知識 (domain knowledge) 的重要性.知識的累積是分析過的領域模型(domain model). 而累積是從分析出來的範本(patterns). 知識累積的環節是Analysis Patterns?


Analysis Patterns (分析範本)定義
- 確定應用或領域的概念模型語義
- 扮演能重複使用的抽象概念的引出和代表軟體需求的角色
Analysis patterns對軟體開發過程的貢獻
- 加速開發; 提供能重複使用的抽象概念加速捕捉具體問題的主要需求的抽象分析模型(analysis model)
- 透過 design patterns 和可靠常見問題的解答的提議, 助長分析模型到設計模型的轉化

具體和抽象 Analysis Patterns

Fowler's Analysis Patterns (抽象)
Introduction to Fowler's Analysis Patterns
The Patterns
Analysis Patterns
An Analysis Pattern for Reservation and Use of Reusable Entities
Analysis Patterns for the Order and Shipment of a Product

語義化 Analysis Patterns
Semantic Analysis Patterns
- Analogy and abstraction play an important role in reusing an analysis pattern
- Using Semantic Analysis Patterns, a methodology is developed to build the conceptual model in a systematic way
* 強調類比和抽象在重複使用分析pattern的角色
* 有系統的構造概念模型的方法

電腦維修和醫院的類比(Figure 2 and Figure 5)
進入權利 (Admissions) pattern (Figure 6)
Semantic Analysis Pattern
World Cup 分析模型 (Figure 7)
Article (收集品Collection和Reservation and Use預定patterns)

Semantic Analysis Patterns 模型構造方法
從審查Use Cases和其他需求
1. 尋找Semantic Analysis Patterns
首先尋找相稱或接近需求的具體patterns. 然後嘗試專門化可能適用的類似或抽象patterns
Figure 8
2. 尋找較小的patterns (例如Admissions pattern Figure 6).
3. 看是否有適用的設計或結構性patterns.
4. 加上Fowler-style patterns加強彈性和延伸能力


看Design Patterns

為什麼 Design Patterns(GoF) 那麼難消化?如果可以從實體去看的話...

最簡縮完整的Design Patterns(GoF)
Software Culture
  03/01/2004 - 04/01/2004
  04/01/2004 - 05/01/2004
  05/01/2004 - 06/01/2004
  06/01/2004 - 07/01/2004
  08/01/2004 - 09/01/2004
  11/01/2004 - 12/01/2004
  07/01/2005 - 08/01/2005
  09/01/2005 - 10/01/2005
  10/01/2005 - 11/01/2005
  01/01/2006 - 02/01/2006
  03/01/2006 - 04/01/2006
  Smart talk always right?
  Drools on AppFuse
  Braille, braille
  The Dynamic SRC of IMG
  Preferred Locale on AppFuse
  告訴你為什麼程式不 work
  絲綢之路 2000:致命病毒
  AJAX on AppFuse
  Meet Mr. Writely
  健檢, e檢
  Open source ColdFusion
  Rich DHTML client
  cfspring, seriously
  Where are they?
  An Architect's View
  Martin Fowler
  Loud Thinking
  Raible Designs   fullasagoog

Powered by Blogger