Read Sean

          Read me, read Sean.
          posts - 508, comments - 655, trackbacks - 9, articles - 4


          IDG旗下的Computerworld今天發(fā)表了一篇關(guān)于Vista的文章,作者Scot Finnie是從2003年便開始測試Vista的beta tester,文章的標(biāo)題是: "The Trouble with Vista",以下是原文鏈接:

          http://www.computerworld.com/action/article.do?command=viewArticleBasic&articleId=9009961
          http://www.computerworld.com/action/article.do?command=viewArticleBasic&articleId=9009961&pageNumber=2
          http://www.computerworld.com/action/article.do?command=viewArticleBasic&articleId=9009961&pageNumber=3
          http://www.computerworld.com/action/article.do?command=viewArticleBasic&articleId=9009961&pageNumber=4

          文章中不乏對Vista在原來版本W(wǎng)indows改進(jìn),以及微軟整個team在Vista上所下功夫的肯定,但主要還從背后驅(qū)動Vista的動機(jī)來解釋為什么Vista會做成現(xiàn)在這個樣子。微軟變了,不再是10年前那個關(guān)注用戶體驗(yàn),站在最終用戶角度考慮問題的公司,而將注意力集中在以下兩點(diǎn):1- 盡量避免在公眾領(lǐng)域的負(fù)面影響;2- 確保高端企業(yè)用戶滿意。在后"微軟vs反壟斷"時代,用戶不再是上帝,微軟也不再傾聽。什么該有什么不該有早早就被確定下來。文章從Security、升級方式、DRM、Software Protection Platform (SPP)、定價5個方面一一進(jìn)行分析。最終的結(jié)論是盡管Vista有很多受歡迎的改進(jìn),也一定能夠成功,但它已不再讓人興奮,也不再有趣,"I don't absolutely have to have it. You don't either."

          你會升級到Vista嗎? 如果你問我,我的答案是: 現(xiàn)在還不會,將來有可能,不過如果上天給我這個機(jī)會,我將收拾行李,逃離MS和Windows。


          posted @ 2007-02-01 21:30 laogao 閱讀(660) | 評論 (0)編輯 收藏


          http://www.alittlemadness.com/?p=76

          今天讀到這篇文章,原來和我想的一樣,不過DRO這個提法的提法比我提煉的要更好,呵呵。


          posted @ 2007-01-30 23:09 laogao 閱讀(677) | 評論 (0)編輯 收藏


          The greatest of faults, I should say, is to be conscious of none.
          - Thomas Carlyle

          Thomas Carlyle是19世紀(jì)英國歷史學(xué)家、評論家、作家,試著翻譯一下:“我得說,所有過失中,最嚴(yán)重的,莫過于意識不到它們的存在?!?br/>

          posted @ 2007-01-29 19:33 laogao 閱讀(722) | 評論 (0)編輯 收藏


          接著上一篇的思路聊。既然我們可以把開發(fā)者社群看作一個整體,copy-paste別人的blog文章就是在違背DRY的精神,其實(shí)所謂"重造輪子"道理也是一樣,既然別人都已經(jīng)做了相同的事情,并且把它開源了,并且你看了它的代碼以后,覺得做得不錯,為什么還要自己費(fèi)心去實(shí)現(xiàn)同樣的功能呢?自己來實(shí)現(xiàn)能給你帶來什么好處呢?

          我可以列舉一些我認(rèn)為可能會讓我們選擇自己來做的理由:

          1. 我比其他人更了解我們自己的需求。
          2. 自己實(shí)現(xiàn)起來更容易,代碼量更小,也更好用。
          3. 我是做技術(shù)的,能夠DIY,就DIY,這樣更能體現(xiàn)我的價值。

          這些理由有它的道理,但是我們有必要仔細(xì)掂量掂量:

          1. 我比其他人更了解我們自己的需求。這是軟件開發(fā)中很常見的一個誤區(qū),客戶的需求難以把握,隨著時間的推移,我們自己的技術(shù)層面的需求實(shí)際上也在不斷變化,開源的框架往往經(jīng)歷了更多的考慮和驗(yàn)證,并且有一群熱心的維護(hù)者幫你做bug-fix和升級,甚至我們自己就可以成為這群熱心人中的一員。
          2. 自己實(shí)現(xiàn)起來更容易,代碼量更小,也更好用。一開始確實(shí)是這樣的,開源的框架為了滿足不同的需要,往往需要比我們自己寫代碼要更加復(fù)雜和冗余,但是自制框架意味著我們自己定義的接口規(guī)范,這個接口規(guī)范能不能夠在整個項(xiàng)目周期保持穩(wěn)定暫且不談,就算接口實(shí)現(xiàn)的再簡單,項(xiàng)目中其他人也需要時間去理解和消化,然后記住一個定義好的調(diào)用方式,今后新加入的工程師也需要學(xué)習(xí)這個接口規(guī)范。開源框架則做得更好,一方面在這個項(xiàng)目中積累和學(xué)習(xí)到的知識,可以直接用在其他采用同一框架的項(xiàng)目中,另一方面新加入的人如果有過該開源框架的開發(fā)經(jīng)驗(yàn),上手時間可以縮短。
          3. 我是做技術(shù)的,能夠DIY,就DIY,這樣更能體現(xiàn)我的價值。我必須承認(rèn),我本人就親身經(jīng)歷過這樣的情況。在即將結(jié)束的這個項(xiàng)目中,我甚至自己DIY了一個簡易的.NET報表引擎,為的是甩開Crystal Reports。一開始能夠DIY報表引擎的想法讓我興奮得睡不著覺,最終前后花了3天很滿意的完成了設(shè)計(jì)和開發(fā),并交付報表開發(fā)人員重畫報表??墒钦嬲昧艘欢螘r間之后,基本的需求滿足了,基本的可擴(kuò)展性也具備,但是缺少可視化設(shè)計(jì)器、更靈活的公式、更豐富的報表元素,基本上就定型了,沒有人有時間和精力再去維護(hù)它。

          在很多開發(fā)團(tuán)隊(duì),大家經(jīng)常碰在一起討論具體的技術(shù)和設(shè)計(jì),這很有必要,有時也不可避免。但是也許Joel Spolsky說的對,軟件設(shè)計(jì)很難,但是比設(shè)計(jì)軟件更難的,是同整個team一起設(shè)計(jì)軟件。做技術(shù)的,對于自己了解、掌握、做過、嘗試過的東西,對于自己熟悉和信任的東西,多多少少有些偏袒,而對于新的、自己不了解、不熟悉的東西,則難免心存疑慮。這就難怪很多設(shè)計(jì)討論會最終很難達(dá)成一致。這個時候,要么由技術(shù)上的最高權(quán)威直接拍板,定下來是什么就是什么,要么就分歧雙方或多方各自陳述,然后由項(xiàng)目外部的實(shí)體進(jìn)行獨(dú)立仲裁。

          我看好開源框架,尤其是那些經(jīng)過考驗(yàn)廣泛被采用的框架,因?yàn)橄啾茸灾瓶蚣?,它們有著更大的?yōu)勢。


          posted @ 2007-01-26 00:32 laogao 閱讀(984) | 評論 (0)編輯 收藏


          如果你使用Firefox或Opera并且看到我上一篇隨筆WYSIWYG這一個詞,你可以看到它下面是用一串點(diǎn)標(biāo)注出來的,如果你鼠標(biāo)懸停在上面,會有工具提示"What You See Is What You Get"。HTML源代碼是:

          <abbr title="What You See Is What You Get">WYSIWYG</abbr>

          可惜微軟的IE并不能正確render這個tag,盡管它是標(biāo)準(zhǔn)(X)HTML的一部分。


          posted @ 2007-01-25 23:23 laogao 閱讀(1155) | 評論 (2)編輯 收藏


          http://www.garrettdimon.com/archives/aspnet-vs-front-end-architecture

          該文作者細(xì)數(shù)了他在使用ASP.NET進(jìn)行開發(fā)的過程中遇到的6點(diǎn)不爽的地方,主要都集中在前臺架構(gòu)上,包括大量內(nèi)聯(lián)的風(fēng)格標(biāo)簽、不同瀏覽器生成不同頁面代碼、失敗的標(biāo)記設(shè)計(jì)、缺乏語意一致性、服務(wù)器端label和客戶端label的脫節(jié)、服務(wù)器端ID和客戶端ID脫節(jié)等等。尤其當(dāng)你想使用標(biāo)準(zhǔn)的CSS,構(gòu)建數(shù)據(jù)結(jié)構(gòu)和表現(xiàn)分離的清晰頁面時,ASP.NET的一些默認(rèn)的內(nèi)部處理可以讓你對ASP.NET為何這樣做完全無語。比較有趣的是本文后面的回復(fù),其中有不少與樓主同病相憐的網(wǎng)友,還有來自微軟員工的為ASP.NET辯護(hù)的聲音。

          我一直對MS在很多設(shè)計(jì)思路和決定上心存疑慮,不明白為什么MS硬是要自成風(fēng)格搞自己那一套蹩腳的所謂"規(guī)范"或"標(biāo)準(zhǔn)",似乎在鼓勵大家follow一個并不清晰、多少有些混雜無章的設(shè)計(jì)架構(gòu),其實(shí)為了方便它實(shí)現(xiàn)更c(diǎn)ool的WYSIWYG開發(fā)工具。就拿今天來說,本來我們項(xiàng)目定義好所有模塊都按BO和UI分開,BO里面的類和UI里面的類各施其責(zé),原則上UI依賴BO,而不是反過來,按照我的理解和期望,Windows.Forms命名空間應(yīng)該是由UI層來依賴,而非BO層。很顯然,因?yàn)槲覀兊膄orm都放在UI層,肯定是依賴Windows.Forms了,而我們盡可能把所有業(yè)務(wù)邏輯代碼放到BO層。但是為了臨時實(shí)現(xiàn)一個文本文件形式的log,因?yàn)槲覀兊臉I(yè)務(wù)邏輯代碼都在BO層,所以為了記錄有意義的log,我們的log邏輯自然而然只能放在BO層。但是一個基本的獲取程序運(yùn)行路徑的方法屬于System.Windows.Forms.Application類,讓我們不得不using System.Windows.Froms。這其實(shí)還好,我們也許不應(yīng)該強(qiáng)求Windows.Forms一定就是只針對UI上的應(yīng)用。問題是你每天都在面對類似的情況,每天都或多或少在和.NET API和框架其他部分在打架,當(dāng)你使用.NET的API時間久了,自然而然你就被它帶到它的那一套思路中,你的設(shè)計(jì)也就自然而然跟著它走了,業(yè)務(wù)邏輯和UI邏輯交織在一起,當(dāng)你回過頭來想把層次理清理順已經(jīng)成為Mission:Impossible。因?yàn)閽侀_MS推薦的方式,自己實(shí)現(xiàn)一套自認(rèn)更清晰的架構(gòu),相較"官方"的blueprint設(shè)計(jì),代價實(shí)在有些高。

          所以雖然我沒有真正開發(fā)過ASP.NET,尤其是2.0版,但我很能理解他們遇到的尷尬。


          posted @ 2007-01-25 23:01 laogao 閱讀(770) | 評論 (0)編輯 收藏


          http://mikeomatic.net/?p=138

          挺有趣的一篇文章。Java在桌面應(yīng)用這個領(lǐng)域始終得不到廣泛的認(rèn)同,雖然Java 6和SWT/RCP都為改善桌面版Java應(yīng)用做出了自己的努力,但Java在這個領(lǐng)域的壞名聲已經(jīng)難以挽回。造成這一現(xiàn)狀的始作俑者是誰,是什么原因?qū)е氯藗儗ψ烂姘鍶ava心存偏見,使用Java開發(fā)桌面應(yīng)用的朋友也會經(jīng)常會覺得力不從心呢?該文作者提出了三點(diǎn):

          1. Sun沒有意識到這樣一個事實(shí):任何一款桌面框架的實(shí)現(xiàn),假如不能無縫的運(yùn)行在Windows上,都注定成為“也能運(yùn)行”的一種GUI技術(shù),始終無法和native的版本抗衡。
          2. 他們認(rèn)定解決(實(shí)現(xiàn))高級桌面控件的方法是通過Swing這種方式,為了“跨平臺”,所有東西本質(zhì)上都是通過JFrame自己在canvas上畫,而不是利用現(xiàn)成已經(jīng)實(shí)現(xiàn)的東西,帶來額外的開銷和重復(fù)勞動。
          3. 他們早應(yīng)該把官方的開發(fā)工具做得更加完善,現(xiàn)在NetBeans發(fā)展很好,但是不是有點(diǎn)太晚意識到這個問題了,而不論OS X還是Windows,都在這方面積累了一大批忠實(shí)用戶。

          我認(rèn)為,不管桌面版Java過去的名聲如何,能夠跨平臺運(yùn)行,越來越好的虛擬機(jī)環(huán)境和性能,越來越好的API和工具支持,龐大的開發(fā)群體和開源框架/工具,Java仍然是開發(fā)企業(yè)級桌面應(yīng)用的一個相當(dāng)不錯的選擇。


          posted @ 2007-01-25 21:30 laogao 閱讀(1117) | 評論 (4)編輯 收藏


          http://www.artima.com/weblogs/viewpost.jsp?thread=192781

          Artima上剛發(fā)表了一篇關(guān)于開發(fā)人員按照對待單元測試的態(tài)度和接受程度劃分的三種不同的基因:
          T1 - 天生接受型,給他們演示一下單元測試的概念和用法,他們立即一拍即合,編寫單元測試案例成為他們開發(fā)中一個理所當(dāng)然、不可或缺的步驟。
          T2 - 易于接納型,給他們足夠的時間和鼓勵,能夠理解單元測試的好處并在開發(fā)活動中執(zhí)行,但遇到項(xiàng)目壓力,他們會選擇代碼優(yōu)先而忽略單元測試。
          T3 - 先天免疫型,不論你如何給他們灌輸單元測試的好處,他們都不會領(lǐng)情,如果讓他們把單元測試作為開發(fā)中的日?;顒?,他們寧愿不做開發(fā)。

          我提議大家想一想,自己屬于哪一類?自己所在的團(tuán)隊(duì)中的其他人,屬于哪一類?我們希望自己和自己的團(tuán)隊(duì)是哪一類?希望單元測試在我們?nèi)粘i_發(fā)中扮演什么樣的角色?


          posted @ 2007-01-25 20:47 laogao 閱讀(571) | 評論 (0)編輯 收藏


          作為開發(fā)者,我們必須要學(xué)會defensive programming,尤其是對要求高可靠性和無人職守的企業(yè)級應(yīng)用中,需要特別留意我們的設(shè)計(jì)和編碼,必須盡可能做到足夠defensive。

          什么是defensive programming?舉個大家都看過的例子:

          String str = ...
          if ("".equals(str)) {}

          在這里我們不寫str.equals("")而是反過來,就是為了防止出現(xiàn)不必要的NPE – NullPointerException。

          運(yùn)行期異常是最最需要特別關(guān)照的一種非正常狀況,除了像上面這類要求我們采用相對較好的編碼習(xí)慣之外,為了減少運(yùn)行期異常的發(fā)生,通常也需要使用try-catch代碼塊來把我們相對脆弱,或者需要格外保護(hù)的邏輯包起來,對于外部傳進(jìn)來的參數(shù),一定要assert它們的合法性,即assert它們是否能夠安全的被后面的邏輯所使用。

          通常意義上,defensive programming主要cover的是避免不必要的運(yùn)行期異常發(fā)生。我們可以更進(jìn)一步,更廣義的運(yùn)用defensive programming的核心思想:在企業(yè)應(yīng)用中,除了運(yùn)行期異常,對于有些看似嚴(yán)重的極端的錯誤,如網(wǎng)絡(luò)超時,連接丟失,數(shù)據(jù)庫提交失敗等情況,需要我們具體問題具體分析,并非所有checked exception都一定需要我們?nèi)ヒ灰籧atch然后處理。更多的時候,尤其當(dāng)開發(fā)無人職守的后臺程序,我們可以采取重試、報告、修改外部數(shù)據(jù)等方式處理,能夠自行解決的,就不要動不動就報錯,或等待用戶確認(rèn),不能自行解決的,則要及時報告并停止運(yùn)行,避免更大的錯誤發(fā)生。

          舉個相對具體的例子,兩個異構(gòu)的系統(tǒng),通過一個中間層的消息平臺相互發(fā)送消息,通信協(xié)議采用最基本的socket方式,這三個系統(tǒng)隨時都可能出現(xiàn)宕機(jī)或鏈接中斷的情況。為了保證數(shù)據(jù)的完整性,我們拿其中一個需要發(fā)送和接收消息的系統(tǒng)來細(xì)說:

          一個可能的實(shí)現(xiàn)方式是:該系統(tǒng)所有要發(fā)送的消息保存到數(shù)據(jù)庫,給它一個初始狀態(tài);另一個獨(dú)立進(jìn)程從數(shù)據(jù)庫按照時間先后拿出消息,更新拿出的這條消息的狀態(tài)為處理中,并嘗試發(fā)送消息;成功后根據(jù)需要,更新消息狀態(tài)為成功發(fā)送或者直接刪除,如果遇到失敗或異常,消息恢復(fù)為初始狀態(tài),線程sleep一段時間,然后再次嘗試,多次嘗試或者嘗試跨度超過一定時間范圍,則停止處理,向管理員匯報(通過郵件、短信等途徑)。對于接收到的消息,同樣是先存入數(shù)據(jù)庫,然后再由后續(xù)的進(jìn)程用類似的方式取出并處理。如果程序崩潰,可以自動重新啟動(應(yīng)用或整個服務(wù)器)。這樣不管哪一段通信線路出現(xiàn)故障或阻塞,或者宕機(jī),系統(tǒng)都可以一步一個腳印,確保任務(wù)主動而自動的執(zhí)行,并且忠實(shí)記錄下有價值的狀態(tài)信息,出現(xiàn)問題時管理員可以很直觀的看到在哪個環(huán)節(jié)出現(xiàn)故障,從而快速找到問題關(guān)鍵并有效解決。

          Defensive programming可以讓我們的應(yīng)用更健壯,在保證數(shù)據(jù)正確性、完整性的前提下,面對困難也能更加獨(dú)立自主。和defensive programming相關(guān)的話題我想大家如果感興趣,可以展開更多更深入的探討,這里只是給大家做個介紹性的鋪墊,能拋磚引玉當(dāng)然更好。


          posted @ 2007-01-25 00:03 laogao 閱讀(1381) | 評論 (1)編輯 收藏


          鏈接:
          http://wordpress.org/development/2007/01/ella-21/


          posted @ 2007-01-24 21:04 laogao 閱讀(515) | 評論 (0)編輯 收藏


          本文假定你有CD-ROM光驅(qū)以及Linux Live CD (如Ubuntu),并使用GRUB作為bootloader。

          安裝好Windows基本系統(tǒng)后,用Live CD啟動,進(jìn)入Linux桌面,打開Terminal,sudo -s切換到root,然后執(zhí)行如下步驟:
            # grub
            grub> root (hd0,7)
            grub> setup (hd0)
            grub> quit
            # shutdown -r now
          機(jī)器重啟后,熟悉的grub界面又出來了。:)

          注意在root命令和setup命令后都有空格。另外稍微解釋一下hd0和hd0,7的含義:hd是Hard Disk的縮寫,0表示第一塊硬盤,7表示編號為7的分區(qū)。如果不確定原先的Linux安裝所在的分區(qū)編號是多少,可以在敲完"root (hd0,"后敲[TAB]鍵,在列表中即可通過文件系統(tǒng)類型和分區(qū)大小一目了然的找到。


          posted @ 2007-01-23 21:14 laogao 閱讀(5126) | 評論 (4)編輯 收藏


          詳見:
          http://www.linux-foundation.org/wordpress/?p=286


          posted @ 2007-01-22 23:59 laogao 閱讀(710) | 評論 (0)編輯 收藏


          DRY為何物?DRY是Don't Repeat Yourself的縮寫,不要重復(fù)自己,這是一項(xiàng)軟件開發(fā)中的重要原則,或者至少是一個很好的習(xí)慣。同樣的數(shù)據(jù)、邏輯,我們應(yīng)該盡量避免在代碼、配置文件、數(shù)據(jù)庫中重復(fù),如果實(shí)在沒有其他更好的辦法,也應(yīng)該盡可能不要手寫這些重復(fù)的內(nèi)容。

          既然是閑侃,我想就沒必要那么一本正經(jīng),索性天馬行空一把,想到哪兒寫到哪兒吧。

          一直不習(xí)慣用桌面版RSS閱讀器,最近又從Newsgator回到了熟悉的Bloglines,由于工作忙,經(jīng)過幾周的積累,Keep New的條目數(shù)超過500。唉,又欠下一堆的閱讀債。幾經(jīng)刪減,訂閱的RSS Feed源還是有80個之多。

          一直在猶豫要不要取消BlogJava的綜合區(qū)RSS訂閱,一方面舍不得,畢竟自己在BlogJava安家,怎么說也得捧一下場,而我也需要持續(xù)了解這個圈子的人眼下都在做些什么想些什么;另一方面,實(shí)在有些難以忍受無數(shù)不做刪減,原封不動照搬照抄其他網(wǎng)站內(nèi)容的blog文章,其中不少我早已從其他渠道看到過,或者沒什么特別的內(nèi)容,整段整段的代碼,這樣的文章看了就是一句話,頭痛。

          當(dāng)然了,別人怎么寫blog,我無權(quán)干涉,但是我是不是可以在這里呼吁一下,引用其他網(wǎng)站內(nèi)容,能不能不要整篇照貼,要么給個鏈接,讓大家自己去看,要么適當(dāng)?shù)囊媚阏J(rèn)為最有價值的段落或句子,或者適當(dāng)給出自己的見解和評論?否則很難讓別人相信你的誠意和動機(jī),這是對原文作者、你的讀者、以及你自己起碼的尊重。

          換個角度來看問題,如果我們把軟件開發(fā)社區(qū)看作一個整體,而我們就是這個整體中的一員,那么原封不動的拷貝粘貼這個整體中另外一個個體的文章內(nèi)容,又何嘗不是在廣義上與DRY背道而馳?既然互聯(lián)網(wǎng)給我們大家提供了分享信息的便利,為什么我們自己不懂得去維護(hù)這個本該服務(wù)于我們自己的環(huán)境呢?


          posted @ 2007-01-22 23:22 laogao 閱讀(767) | 評論 (1)編輯 收藏


          "Personally I'm always ready to learn, although I do not always like being taught."
          - Sir Winston Churchill

          這是邱吉爾的一句名言,“就我個人而言,我總是樂于學(xué)習(xí),盡管我并非總是喜歡被教導(dǎo)。” 我們通常認(rèn)為與learn對應(yīng)的詞當(dāng)然是teach,但是學(xué)習(xí)和受教其實(shí)是兩回事。不斷學(xué)習(xí)是好事,但總是被別人指手畫腳是什么感覺,相信所有人都能夠理解。


          posted @ 2007-01-21 19:14 laogao 閱讀(544) | 評論 (0)編輯 收藏


          雖然官方網(wǎng)站顯示最新版Rails還是1.1.6,RubyForge上已經(jīng)可以下載1.2.1版。

          [UPDATE] 官方已正式宣布: http://weblog.rubyonrails.org/2007/1/19/rails-1-2-rest-admiration-http-lovefest-and-utf-8-celebrations


          posted @ 2007-01-19 09:20 laogao 閱讀(621) | 評論 (0)編輯 收藏

          僅列出標(biāo)題
          共34頁: First 上一頁 6 7 8 9 10 11 12 13 14 下一頁 Last 
          主站蜘蛛池模板: 灵石县| 汝城县| 滦南县| 永川市| 普格县| 泰来县| 清丰县| 衡山县| 南开区| 娱乐| 邯郸市| 阿鲁科尔沁旗| 赞皇县| 涿州市| 安远县| 林甸县| 将乐县| 海淀区| 海原县| 鹤庆县| 浦江县| 虞城县| 丰原市| 遂溪县| 扬州市| 乌拉特后旗| 洛浦县| 虞城县| 台北县| 通化县| 龙陵县| 桃园县| 五河县| 象州县| 阿克| 逊克县| 龙泉市| 宁德市| 合肥市| 张家港市| 七台河市|