跳到主要內容

發表文章

目前顯示的是 5月, 2006的文章

呼叫外部程式

剛才在同事的Blog看到 呼叫外部程序—ShellExecute 讓我想起十幾年前寫Turbo C 2.0時,都是用exec系列或spawn系列的api。 而這些現在都被M$加上底線,變成deprecated?印象中DOS不會返回原程式,因此又增加spawn系列,是unix沒有的api;system會呼叫shell;蔡明志翻的Turbo C Bible有詳細介紹。 現在.Net似乎都用Process的class處理。 請參考MSDN: http://msdn2.microsoft.com/en-us/library/d6dtz42k.aspx

Delegate的好處

原本以為用不到C#的delegate功能,沒想到有一支程式,由於特例太多,寫出許不同狀況下用的method而參數又相同,利用switch變數值去判斷使用那一個method。 接著又因為某因素去修改一個參數值,結果眼花少改一個;實在是受不了,花了15分鐘就改完,結果令我滿意。 範例: delegate int delegate_method(int i, int j); public int test_a(int i, int j) { return i+j; } public int test_b(int i, int j) { return i-j; } public int test_c(int i, int j) { return i*j; } public void test_delegate(string q) { delegate_method dm; switch(q) { case "plus": dm = new delegate_method(test_a); break; case "minus": dm = new delegate_method(test_b); break; default : dm = new delegate_method(test_c); break; } Console.WriteLine(dm(3,4)); }

加班就是效率低:為效率高者叫屈

出處如下,但似乎不是原創。 http://spn.com.cn/sp1/index/11810.html 加班就是效率低:為效率高者叫屈 --------------------------------------------------------------------------------   CNET科技資訊網4月11日評論 有一次,聽一位記者誇一位老總說:“你真敬業,總是在加班。”誰知這個老總聽到這樣誇獎並不高興,連忙搖搖手說——加班就是效率低。   同一件事兒,一個人2 個小時完成,另一個人10分鐘完成,這說明什麼?說明前者工作效率低。而企業老闆往往不這麼看,也許在他的意識裏誰加班多,誰就是敬業。在IT業界有多少效率高者被冤枉成不敬業?又有多少效率低者被稱為敬業,這個案要翻。   效率高者還加班是管理問題   不對,有許多工作效率高者還要加班喔,這就不是效率的問題了,而是領導鞭打快牛,工作量管理分配上出問題了。工作量分配管理一有問題,很可能就不是一個環節的問題,而是連鎖性的問題。結果可能是忙的忙死,閑的閑得慌。    解決管理多環節、工作量不均的問題,就是要解決管理模型的問題。資訊化過程就是管理模型優化的過程。不知道用以下的例子來比擬,是不是在說外行話,每次 去醫院看病,取藥都要排三次隊:一是劃價;二是交錢;三要再回到劃價窗口重新排取藥。每次都聽到排隊的人埋怨,50多年了取藥排3 次隊,這樣的管理模式就沒人管。雖然已經有醫院將3 個視窗合併成了2 個,但為什麼不能用電腦劃價付款取藥,在一個視窗解決三道工序?   管理混亂重複勞動造成加班   造成加班的另一個原因也是管理問題。   如果管理混亂,肯定會有重複勞動,一有重複勞動,8 小時內肯定無法完成工作,肯定要加班。   舉紙媒體的編輯流程例子吧。甲報社每週出64個版,每週四只要加2.3 小時的班。   而同樣工作量的週報乙報社,每天都弄到12點以後,如果深入到乙報社內部流程看看,肯定有重複勞動的問題。很可能在出大樣之後又要改文、又要編輯,還要三校。其實這些工序應該在出大樣之前就已經做過一遍了,雙重的工作量使乙報社的工作量翻倍,肯定要加班。   越加班效率越低    如果一個人或者是一組人長期加班,工作效率肯定越來越低。每個工作者都是人,不是神,是人就要保證體力和精力,要保證體力和精力就不

新方法論與新XP

Martin Fowler在 新方法論 裏介紹各種敏捷軟體開發方法論。 簡體中文版 (較舊) 林耀珍在 敏捷的軟體開發流程 也有介紹幾種。 當然,最重要的Agile Methodology仍然是 XP ( eXtreme Programming ) ,對我而言,以 XP 精神開發是最重要,配合 MSF 或是 RUP 都是其次。 Kent Beck在2004年寫的 Extreme Programming Explained — Embrace Change Second Edition 提出的新XP: The New XP (PDF)。 個人覺得,軟體工程距離成熟仍有很長的路要走,而目前最人性化的方式應該就是XP,所以,趕快擁抱XP吧。

Yahoo採用的技術

在 Yahoo! and FreeBSD 裏David Filo有提到他們採用修改過的FreeBSD,另外Web Server呢? 在 Yahoo!の独自カスタマイズApache(yapache)とPHPについての資料 有提到,Yahoo是用Yahoo修改的的Apache。 這裏有提到要改用PHP http://news.com.com/2100-1023-963937.html Michael J. Radwin talks 有更詳細的歷史,我只看了幾篇,有興趣自己去看,大致整理如下: 最早使用C,稱為Filo Server和Filo Pages。後來做出yscript(C)/yscript2(C++),這都是架構在apache 1.3上,也有用mod_python、mod_perl與perl cgi。 這已經是相當穩定的Framework,但是C++太過複雜,維護不易。他們開始找其他的方案,評估後發現PHP是最適合的技術,效率和記憶體使用都很好。在2002年開始轉換。 到最新一份2006年的簡報裏表示,他們除了有使用Zend和另外的加速器,並且用C++開發自己的extension,預計在年底完成PHP Unicode,號稱PHP6。最讓我驚訝的是在這份簡報裏,mod_perl最快,再來是PHP,最慢的居然是yscript Yahoo也有回饋Open Source社群,讓這些努力能夠進入新版的程式,創造雙贏。希望不久的將來能夠看到FreeBSD/Apache/PHP的performance能像Yahoo Server那麼好。

窮則變,變則通

http://blog.xuite.net/efchang/network/6449318 這是另類思考的極致。 我們在思考問題時,通常會陷入傳統解法的窠臼。反向思考常能提供更好的解決方式。

花500萬做的Blog

剛看到一則新聞:公司砸500萬設「J-log」部落格 蔡依林公佈... http://www.hijolin.com 速度頗慢,可能太多人在連。看了一下,是用JSP寫的,再仔細看,怎麼沒有RSS? 這個J-log的功能,看起來是從頭手工打造的;若請Rails高手做,可能一兩天就寫好。我的話....拒絕重造輪子,直接用現成的架站機或無名小站就好。又有人問啦~為什麼你不自己做支援靜態輸出的Blog呢?我的理由是,使用現有的引擎,若效能不夠好,升級時自然會去校調,加上output cache這些功能。OpenSource的意義也在這裏,並不是抓個source來自己做個版本,出新版本時又再幹一次。 500萬,下次讓我去賺好嗎?買台HP DL380架個Wordpress+FreeBSD我只要一天,找幾個美工朋友做幾張圖,在Hinet代管一年...我隨便說說,大夥別認真。

動態網站的缺點

星期二發生一件大事,就是MacBook終於在千呼萬喚下現身,結果造成我現在一直連不上OKIOS。 由前一份工作中學到的技巧告訴我,loading高的網站應該採用靜態與動態並用的方式。簡單地說,一個討論區如果沒有新資料時,先將web page存成html是最簡單的方式也最快,或是用output cache(這是asp.net常用的方式)。 一般的架站機都是純動態網站,拿來當做個人網站還OK,若以100 request/sec來stress,保證大部份都會掛,就算你後端連的是Oracle,用雙核心的CPU,系統的loading也會馬上直線上升;若改用混合模式,至少可以增加一倍以上的capacity。 很多的軟體在系統設計時都犯了大量使用DB的錯誤,這是典型的反模式,但大家卻樂此不疲,實在令在下不解呀~

和我有類似看法的人

在Xexex's Java看到 a little Ruby on a little Rails ,他也覺得Rails不適合當企業平台。 事實上,如果用Visual Studio 2005加SQL 2005 Express並不會比Rails慢多少,而且不需要懂多少API也不需要寫太多code。 我還是喜歡自己一步步建出來的網頁搭Struts之類,感覺比較能掌控。 再強調一次,Ruby/Rails是好東西,但並不一定適合所有人,也不可能適用所有場合。

VCS的操作

嗯...有些同事不太瞭解VCS的操作,所以我大概寫點概念,有經驗的人請儘量上來討論,最近我會專注在團隊開發與敏捷流程。 VCS最早是在Unix上有RCS,後來演變成為CVS,因此大多數的術語都以此為主,其他廠商推出的VCS雖然術語有所不同,但觀念和操作步驟大同小異。 1. VCS的資料儲存在Repository,必須先在Repository產生一個Module或叫Project。 2. 若是團隊開發,通常SA/SD會先做好module/project,你要做的是checkout module/project。 3. 自己新增的程式/文件要add進module,真正上傳的動作叫Commit(TFS叫Check in)。 2. 如果有現成的Code,可以Import Module,在CVS import module時會產生新的module。TFS必須先產生project,add後再check in。 5. 把別人更新的部份抓下來叫Update,若是真正在公司開發,建議每天下班一定要commit,而上班時先update。 6. 遇到兩個人都修改同個程式時,稱為conflict,此時最好手動處理,通常VCS自動處理都是merge,有些時候不注意就造成bug。 7. 若覺得穩定性夠時,就可以tag成release 1.0、beta1等等名稱,在checkout時會比較方便。 8. 有時候要做大規模的修改或是準備下一個發行版本時,就可以產生branch。分支是一個非常有用的東西,例如說Apache 1.x版可以繼續在同一個VCS儲存,但同時另一組人也在開發Apache 2.x。當branch要整合回主幹時,就使用merge,當然也可以反過來。 VCS是Team Development的基礎,這一關都過不了其他的就不用提。除VCS外,還有Unit Test、Integrate Test、Code Convention等,有空我再寫一點介紹。

該全面換到Subversion

使用CVS(Concurrent Versions System)這個 VCS(Version Control System)將近十年,當初也是看在它跨平台而且不像VSS只能check out一份unlock。但CVS不支援rename,只能刪除新增,對於之前的版本就無法追蹤。另一個CVS的缺點是只看日期,而Subversion 是比對差異,因此CVS的許多問題不會在Subversion出現。 目前我有一部份程式是CVS與Subversion同時儲存但有些更新的問題,我打算找時間把CVS全換成Subversion,等到公司的TFS上線後,TFS專案會採用與Subversion並存的方式。

ALM 應用程式生命週期管理

ALM: Application Lifecycle Management 應用程式生命週期/軟體生命週期 管理 我找到的資料 http://www.borland.com/tw/products/alm/index.html http://www.microsoft.com/taiwan/msdn/security/dnsecure/sdl.mspx http://www.microsoft.com/taiwan/press/2005/03/0329.mspx http://www.ca.com/tw/news/share/index.htm 會注意ALM是因為前兩天去上VSTS二日課程,內容在介紹VSTS團隊開發的方式,使用MSF for Agile。時間很趕,似乎是把美國的教材壓縮後在兩天講完。幸好我對SCM、Unit Test和Test Tool有些經驗,不然上起來會很吃力。 不可否認,原本非常昂貴的Case/ALM Tool在微軟把ALM整合至Visual Studio後,讓一般公司也可能會引進完整的開發流程(當然便宜是相對值,對一個5人小組而言,完整的VSTS環境也要50萬~100萬)。SCM僅是 ALM中的一小環,而MS整合設計、分析、測試、開發於同一工具,比起早期Rational的工具更勝一疇(因為我在這裡待太久,不知道現在IBM的 Tool有沒有整合到WebSphere)。 除了買Borland/IBM/MS的ALM工具外,難道就沒有辦法了嗎?目前似乎是的。好消息是Eclipse在2006年3月成立ALF,以後還是有機會,只是還得等上一陣子。Eclipse的Project很多,像TPTP就是針對Test,等到那一天整合起來,可能又會再度讓某些公司活不下去。

我的OS使用經歷與寫過的程式語言

第一台開始流行的個人電腦應該要算Apple II,我自己的是宏碁的小教授三號,算Apple Compatible,但是只有98%左右,有2%的程式會有問題。 仔細想想,我也用過了不少作業系統,到老了可能自己都記不得,先寫下來好了。 Apple DOS -> Apple CP/M -> MS-DOS 3.3 -> MS-DOS 4.01 -> MS-DOS 5.0 -> Win 3.0 -> MS-DOS 6.0 -> Win 3.1 -> OS/2 2.0 -> Linux 0.9 -> Win 95 (Dos 7.0) -> WinNT 3.5 -> WinNT 3.51 -> OS/2 2.1 -> Win 95 OSR2 -> WinNT 4.0 -> IRIS -> HPUX -> FreeBSD 2.x -> Win98 -> Linux 1.x -> OS/2 Warp -> FreeBSD 3.x -> Solaris 2.8 -> Win 2000 -> BEOS Personal -> FreeBSD 4.x -> Linux 2.x -> WinXP -> FreeBSD 5.x -> Win 2003 -> OS X 10.4 -> FreeBSD 6.x 懶得畫表格,所以有些是同時在使用的,像Linux除了早期0.9版是只有 Slackware外,其他的發行版我試過太多種,很多像藍點這種一閃即逝,所以就只記Kernel版本。而其中像IRIS、HPUX、BEOS並沒有太深入研究,Solaris則是沒有管理權限。如果有仔細看的人就知道,我的Apple II用了六年才換386 SX-25,所以中間的IBM PC XT/AT都沒用過。 目前手邊有在用的只有 Win 2000/XP/2003,FreeBSD 4.x/5.x/6.x,OS/X及Linux。比較可惜的是沒有新版OS/2,我一直覺得它是很棒的OS,當年我有它根本不想用Win31。 國中時才有電腦,所以我學的程式就沒有Randy那麼久。有寫過的程式語言有Apple Basic、6502 Assembly、

12 core practices of XP

以下摘自 http://www.jera.com/techinfo/xpfaq.html The 12 core practices of XP are: 1. The Planning Game: Business and development cooperate to produce the maximum business value as rapidly as possible. The planning game happens at various scales, but the basic rules are always the same: 1. Business comes up with a list of desired features for the system. Each feature is written out as a User Story, which gives the feature a name, and describes in broad strokes what is required. User stories are typically written on 4x6 cards. 2. Development estimates how much effort each story will take, and how much effort the team can produce in a given time interval (the iteration). 3. Business then decides which stories to implement in what order, as well as when and how often to produce a production releases of the system. 2. Small Releases: Start with the smallest useful feature set. Release early and often, adding a few features each time. 3. System Metaphor: Each

Extreme Programming

Windows自動登入

除了可以下載PowerToy裡的TweakUI設定自動登入Windows外,也可以直接改機碼: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon 增加以下3個: AutoAdminLogon 字串值 1 DefaultDomainName 字串值 DefaultUserName 字串值 DefaultPassword 字串值 另外在Winlogon裡其他好玩的機碼: Shell ShutdownWithoutLogon

WinPE

這是自己用的備忘錄。 WinPE是未來在Vista用的安裝光碟,也是維修Windows可以用的LiveCD,兩年前有拿到企業用版。 Windows 預先安裝 Windows 預先安裝環境概觀 以下是Google找到的2004年XP SP2版 繁體中文版 英文版 簡體中文版 BartPE 其他的討論 http://www.pczone.com.tw/vbb3/showthread.php?t=55925 http://home.so-net.net.tw/dseditor/pepnp/ http://www.aptv38.dsl.pipex.com/Plugins/pluginlist.htm BartPE的中文化很麻煩,一位Semson本來有放出來,但現在似乎連不到。幸好我手上還有這個pecwin.inf。 本來官方版的PE並沒有自訂環境的功能,但現在看到中文的解釋會有。 而BartPE的優點是可以自訂軟體,而且已經有許多plugin,目前可以拿來安裝chkdsk和Adaware、DefragNT及其他防毒軟體,這是我所需要的功能。

Linux比較快?

今天看到 Checko's Blog: Linux : Still the Fastest 我倒沒有太驚訝,之前也對OSX抱很大希望,不過Randy有告訴我其實OSX並不快,而XP若沒灌什麼垃圾也是跑得相當快的。最近Apple也傳出要丟掉Mach的謠言,若純用FreeBSD再加上ZFS,就很有可能打敗Linux,至少不會最後一名。