Read Sean

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


          一段時間以來大家的MSN都多少出現(xiàn)了無法登陸的情況,這對于依賴MSN作為團(tuán)隊(duì)內(nèi)部溝通的主要工具的我們來說實(shí)在是一件很惱火的事情。再加上我們經(jīng)常有異地開發(fā)的情況,出現(xiàn)MSN的問題那就更糟了。

          在這個時候我的目光投向了騰訊的TM,沒錯,就是做QQ的那一家騰訊。其實(shí)我們在安裝QQ的時候就自動裝上了TM,這個東東看上去真的就是MSN+QQ的混血兒,個人覺得更加貼近中國人的需求,只不過由于MSN的歷史背景和由捆綁帶來的龐大的用戶群,使用者甚少:雖然QQ很多人都在用,但是用TM界面的真有點(diǎn)鳳毛麟角的味道,至少在我周圍很少見到。TM可以選擇和MSN一樣使用郵件地址作為帳號(其實(shí)是把郵箱綁定到一個新的QQ號碼上),并且可以和QQ服務(wù)器來回切換。

          很多功能都還來不及嘗試,因?yàn)樾枰腥烁乙黄餬eta一下才知道是不是真的好用。好的話可以考慮在公司內(nèi)部使用。目前嘗試過的兩個比較好玩的功能是在線金山詞霸和小I機(jī)器人。在線詞霸你可以輸入要查詢的單詞,然后就好像有人回復(fù)你解釋一樣;小I機(jī)器人是一個具備一定AI的自動聊天"機(jī)器人",當(dāng)作消遣還是不錯的。看看它都說了些什么:

          某某某 12:18:42
          hi
          小I機(jī)器人 12:18:44
          hi,我是來自2029年的最新t700型終結(jié)者,我現(xiàn)在的任務(wù)不是保護(hù)約翰-康納,而是和你聊天! 
          某某某 12:18:58
          really?
          小I機(jī)器人 12:19:00
          yes
          某某某 12:19:07
          what can you do?
          小I機(jī)器人 12:19:08
          what is your job?
          某某某 12:19:29
          are you a cop?
          小I機(jī)器人 12:19:31
          i’m fine and u?
          某某某 12:20:10
          你在說什么哦?我問你做什么的,你回答說我很好?
          小I機(jī)器人 12:20:11
          你說我說什么,就說什么
          某某某 12:20:29
          。。。
          小I機(jī)器人 12:20:32
          淹到了?我說的吧,不會游泳就不要下水。這水可是要交費(fèi)的
          某某某 12:21:08
          算了,跟你說不明白。走了,拜拜
          小I機(jī)器人 12:21:09
          那就別說了

          呵呵,接下來找些感興趣的朋友測試一下。:)

          posted @ 2005-06-20 14:39 laogao 閱讀(473) | 評論 (0)編輯 收藏


          經(jīng)??匆娋W(wǎng)上許多人對SWT的認(rèn)識無非就是說它運(yùn)行速度快,其實(shí)這是個誤區(qū)。在SWT誕生之初,也許運(yùn)行速度是它的一項(xiàng)主要目標(biāo),但是它真正的優(yōu)勢其實(shí)并非這么簡單,讓它真正發(fā)光的是它對宿主操作系統(tǒng)的忠誠度,一方面,對用戶來說,他們操作的界面表現(xiàn)形式,包括外觀、快捷鍵等等可以和他們常用的軟件高度一致;另一方面,由于它直接封裝操作系統(tǒng)API的這個特性,任何你發(fā)現(xiàn)的界面上的問題或者說某個控件特殊的處理方式,你都可以在操作系統(tǒng)這一層的文檔中找答案,而不是在SWT中間找。這跟Swing很不一樣,Swing追求界面在所有平臺的一致性,而不是對當(dāng)前平臺的其他本地應(yīng)用的一致性。給我的感覺,Swing這樣的做法實(shí)際上是瞄著一個移動的靶子,永遠(yuǎn)在趕路,因?yàn)樗偸切枰煌5母僮飨到y(tǒng)的變化和創(chuàng)新而變化與模仿。在這一點(diǎn)上,SWT的做法的確要高明得多。

          順便來看一個WOW魔獸世界的XP界面風(fēng)格下的Eclipse的截屏:
          WOW_Style_Eclipse_Snapshot.jpg

          這個界面風(fēng)格可以隨時跟你自己默認(rèn)的XP風(fēng)格對換,這樣的效果和方便的更替如果要Swing來實(shí)現(xiàn)豈不是有點(diǎn)勉為其難?我不是說SWT是萬能的,只是想讓大家知道,Swing有它好的地方,SWT同樣也有。

          posted @ 2005-06-20 13:55 laogao 閱讀(4581) | 評論 (9)編輯 收藏


          空姐也RAP

          滬語其實(shí)還是蠻好聽的叻

          posted @ 2005-06-16 12:36 laogao 閱讀(1543) | 評論 (6)編輯 收藏


          依稀記得多年以前,剛接觸編程的時候,就看見老爸成天都在用一種工具,主體是一堆16進(jìn)制的數(shù)據(jù),右邊是解析出來的ASCII字符。后來知道這個是一種Hex Editor,用來看二進(jìn)制文件的。其實(shí)它什么文件都可以看,只是你可以很方便的看到文件的內(nèi)部結(jié)構(gòu)和數(shù)據(jù),一個字節(jié)不差。

          后來進(jìn)入Windows時代,很多東西都可以用工具方便的完成,而不必關(guān)心內(nèi)部細(xì)節(jié),這樣的二進(jìn)制閱讀工具也就漸漸遠(yuǎn)離了我的視線,直到最近,發(fā)覺在有些時候,你真的需要看看一個文件里面到底是放了些什么東西,怎么放的。然而網(wǎng)上一搜,10個有9個不是功能太龐雜就是license不友好[1]。拜托,我只想看看一個文件的Hex,難道要我自己用VC或者Java寫?這個時候我想到了Eclipse,不論是開源的插件,還是自己寫,都是很好的選擇。果然,一搜即得,EHEP - Eclipse Hex Editor Plugin。試用一下,完全滿足我的需求??纯唇貓D:

          EHEP_snapshot_s.jpg

          插件主頁:http://ehep.sourceforge.net/
          Update Site: http://ehep.sourceforge.net/update

          注:
          [1] 了解我的人可能都知道,我最討厭那些license來license去的小工具/應(yīng)用軟件。UltraEdit、EditPlus這些東東(我想它們一定都支持HEX吧)不是不好,只是我不喜歡用而已。

          posted @ 2005-06-08 11:13 laogao 閱讀(2319) | 評論 (2)編輯 收藏


          最近被同事問起一道SCJP的題目,是跟繼承和多態(tài)有關(guān)的。具體的題目我就不重復(fù)了,來看一段我自己敲的代碼:

           1package sean.work.test;
           2
           3public class DoYouReallyUnderstandPolymorphism {
           4    
           5    public static void main(String[] args) {
           6        A a = new A();
           7        B b = new B();
           8        a.s = "[AA]";
           9        b.s = "[BB]";
          10        System.out.println(a.s);      // prints "[AA]"
          11        System.out.println(b.s);      // prints "[BB]"
          12        System.out.println(a.getS()); // prints "[AA]"
          13        System.out.println(b.getS()); // prints "[BB]"
          14        System.out.println("====================");
          15        a = b; // a now refers to object b
          16        System.out.println(a.s);      // prints "[A]"  <<--1-- the class A copy
          17        System.out.println(b.s);      // prints "[BB]"
          18        System.out.println(a.getS()); // prints "[BB]"
          19        System.out.println(b.getS()); // prints "[BB]"
          20        System.out.println("====================");
          21        ((A)b).s = "[AA]"// <<--2-- changes the class A copy in object b 
          22        System.out.println(a.s);      // prints "[AA]" <<--3-- class A copy changed
          23        System.out.println(b.s);      // prints "[BB]"
          24        System.out.println(a.getS()); // prints "[BB]"
          25        System.out.println(b.getS()); // prints "[BB]"
          26    }

          27
          28}

          29
          30class A {
          31    String s = "[A]";
          32    String getS() {
          33        return s;
          34    }

          35}

          36
          37class B extends A{
          38    String s = "[B]";
          39    String getS() {
          40        return s;
          41    }

          42}

          43

          這里我們的B類繼承自A類,重寫了getS()方法,于是我們可以利用到多態(tài)。如果你留意15、16、21、22這幾行的話,你也許就會知道我在說什么了。假如你覺得這樣的打印結(jié)果是理所當(dāng)然,那么我想你可以完全忽略這篇隨筆,因?yàn)槲乙v的就集中在這幾行,而你已經(jīng)很清楚的理解背后的含義。

          下面跟感興趣的朋友們說說我的理解:

          直觀的講,我們很容易輕信當(dāng)"a = b;"以后,變量a指向的對象是B類的b那個對象,自然a.s就應(yīng)該等同于b.s,然而事實(shí)并非如此。當(dāng)B繼承A時,父類A的字段s并沒有被B的字段s取代,而是保留了一份拷貝,所謂重寫(Override),那是對方法而言的。于是,當(dāng)我們new B()時,在實(shí)際創(chuàng)建的對象中,包含了兩個版本的字段s,一個"[A]"(屬于A類)一個"[B]"(屬于B類)。而方法getS()只有一個版本。這就是在繼承過程中字段和方法的區(qū)別。也就是說,重寫的概念和字段無關(guān)。在第16行,我們通過a.s訪問的是b這個對象中保留的A類的字段s;而在21行,我們改變的正是這個A類版本的s字段。

          多態(tài)的精髓在于動態(tài)確定對象的行為,而對象的行為體現(xiàn)在方法而非字段,字段代表的更多的是對象的狀態(tài)。于是只有方法的多態(tài)而沒有字段的多態(tài)。從上面的代碼可以看出,不管你用什么類型的變量存放對象b的引用,最終調(diào)用的方法版本都是b的真實(shí)類型那個版本,這就是多態(tài)的威力。

          從編譯的角度來看,上面代碼中的s字段和getS()方法的不同在于:s字段是在編譯期靜態(tài)鏈接(你可以改變它的值,但是它在對象中的相對地址已經(jīng)確定好),而getS()方法是在運(yùn)行期動態(tài)鏈接的。

          說了這么多,真的不知道我表達(dá)清楚沒有,畢竟沒有系統(tǒng)研究過OO和編譯原理,說得不當(dāng)?shù)牡胤竭€請多多包涵。最后,請不要學(xué)我這里的編碼風(fēng)格,因?yàn)楹茱@然應(yīng)該對main方法中的代碼段執(zhí)行Extract Method重構(gòu)了,我這里只是為了注釋方便。

          // BTW,時不時抽空想想這樣的問題感覺真不錯。

          posted @ 2005-06-07 15:18 laogao 閱讀(7679) | 評論 (14)編輯 收藏

          前不久重裝機(jī)器,偶然間發(fā)現(xiàn)一款挺方便的Eclipse插件。我們工作中用的是Oracle,于是經(jīng)常會用到SQLPlus/Worksheet這樣的東西,TOAD當(dāng)然也有,但是SQLPlus用上去確實(shí)不方便,TOAD的安裝也很麻煩并且我沒有l(wèi)icense。算了吧,既然一直在用Eclipse,就看看Eclipse上有沒有好一點(diǎn)的替代工具吧。于是我發(fā)現(xiàn)了SQLExplorer。

          這個插件理論上支持所有提供了JDBC的數(shù)據(jù)庫,其實(shí)就是把Java代碼調(diào)用JDBC的操作進(jìn)行了圖形界面的封裝。用上去的感覺就是比使用命令行操作數(shù)據(jù)庫確實(shí)方便和直觀了許多,甚至比某些專門的GUI管理工具要好用不少。

          下面是一幅截圖,供參考:Eclipse SDK 3.0.2 + SQLExplorer 2.2.3

          SQLExlporer_snapshot_s.jpg

          當(dāng)然,這個插件也有不少缺陷,比如不能兼容Eclipse3.1版本(至少M(fèi)7上跑起來有問題),SQL編輯器的關(guān)鍵字顏色轉(zhuǎn)換,對類似Oracle的RAW格式支持不好,等等,還有一些使用便捷性上的缺陷。并且因?yàn)槭峭ㄟ^SQL/JDBC的方式操作,有很多數(shù)據(jù)庫專有的特性無法體現(xiàn)。不過總的來說,它是一款不錯的SQL瀏覽器,當(dāng)你需要在同一個環(huán)境操作多個數(shù)據(jù)庫,或者你覺得數(shù)據(jù)庫提供的管理界面不方便,甚至僅僅因?yàn)槟闶荅clipse的狂熱愛好者,這個插件都值得一試。

          可以在這里找到下載鏈接:http://sourceforge.net/projects/eclipsesql/

          posted @ 2005-06-06 16:15 laogao 閱讀(2522) | 評論 (3)編輯 收藏

          不知不覺間,Struts已經(jīng)五歲了,這是一個相當(dāng)成熟的Web框架,事實(shí)上的標(biāo)準(zhǔn),至今還有很廣泛的應(yīng)用。

          我忍不住想,其實(shí)像Struts、Spring、TestNG這樣的東西背后的核心思想很簡單、清晰、直截了當(dāng),(當(dāng)然也有不少創(chuàng)新和大膽的設(shè)計)而且多數(shù)是業(yè)余時間完成的第一個版本,為什么我們中國的程序員就不能做到呢?思維方式?體制?環(huán)境?不管是什么,這都是中國軟件行業(yè)的悲哀。

          期待中國原創(chuàng)的開源框架/工具。

          posted @ 2005-06-01 09:36 laogao 閱讀(702) | 評論 (3)編輯 收藏

          目前我們每個人的頁面標(biāo)題前,都有BlogJava字樣,這個我沒意見,但是我覺得格式并不好。就拿我自己的blog來說,現(xiàn)在的格式是"BlogJava-Sean's stack trace",我覺得從美觀和習(xí)慣上講最好能加兩個空格:"BlogJava - Sean's stack trace"。

          大家的意見呢?

          posted @ 2005-05-27 11:05 laogao 閱讀(938) | 評論 (6)編輯 收藏

          http://www-128.ibm.com/developerworks/opensource/library/os-jface1/

          這里有一篇很好的SWT入門文章。

          posted @ 2005-05-25 16:35 laogao 閱讀(2524) | 評論 (1)編輯 收藏

          謝謝kukoo提供的鏈接,在這篇eWeek的報道中,Eclipse Foundation的executive director,Mike Milinkovich這樣形容Eclipse陣營對Sun的心態(tài):“We're not focused on hurting them; we're focused on helping us.” - 我們的注意力并非在如何傷害他們,而是如何幫助自己。我想這很好的詮釋了Eclipse對Sun的心態(tài)。

          最近看到太多的關(guān)于NetBeans和Eclipse的爭吵,其中很多都是NetBeans的支持者出于對NetBeans項(xiàng)目組的辛勤勞動的肯定和也許是某種意義上的同情,或者真的喜歡使用NetBeans,指出Eclipse有什么什么地方不好,而NetBeans又有多好多好。但是醒醒吧,我覺得整件事是NetBeans陣營太過將Eclipse作為對手和參照物,而Eclipse似乎沒有太理會,它有更大的目標(biāo)。兩相比較,兩個平臺也好IDE也好的競爭是什么結(jié)論也就不言而喻了。

          對于Sun的開源策略,有行家分析說Sun只是想從開源得到社區(qū)支持等好處而并不愿意做出太多貢獻(xiàn)和犧牲。這些從近年Sun對JDK/JRE采取的相對嚴(yán)格的發(fā)行機(jī)制、Solaris的開放源代碼、對JCP的控制、同微軟的合作、以及最近有關(guān)Harmony的爭執(zhí)中都能找到很好的佐證。Sun到底在想什么呢?也許從Sun的角度,他們有足夠的理由這樣做,我們還是不要過多地妄加猜測了吧。

          時間會證明一切。

          posted @ 2005-05-25 15:38 laogao 閱讀(3981) | 評論 (19)編輯 收藏

          剛才忘了說,在3.1M7這個版本中,已經(jīng)自動支持類似KeepResident插件的功能,當(dāng)我們在Windows環(huán)境最小化Eclipse窗口的時候,Eclipse使用的這一塊內(nèi)存不會再被Windows無聊的回收了。好處是顯而易見的,我們不再會碰到離開Eclipse再回來的時候那煩人的等待了。

          posted @ 2005-05-25 15:09 laogao 閱讀(1494) | 評論 (6)編輯 收藏

          下到Eclipse3.1M7后的第一件事當(dāng)然是看看那個Ctrl-Z回滾的小bug,以前的stable或release版本都存在這樣的問題:當(dāng)你對文件修改但未保存,按下Ctrl-Z可以回到上次保存的狀態(tài)但Eclipse仍然認(rèn)為該文件是改動過的。經(jīng)過測試這個bug確實(shí)fix掉了。

          另外我還無意中發(fā)現(xiàn)一個有趣的新功能。我們知道通常一個包含CVS信息的連接字符串是類似如下的樣子:

          :pserver:anonymous@cvs.sourceforge.net:/cvsroot/azureus

          當(dāng)我們在Eclipse的CVS Repository視圖下面添加Repository Location的時候,我們必須分別手動的填寫上面的字符串中包含的信息。在3.1M7中,只需要Ctrl-V粘貼這個字符串到新建Repository Location的對話框,所有信息都會被自動分解和填充,這樣對我來說真的方便多了。

          Good job, Eclipse!

          posted @ 2005-05-25 15:08 laogao 閱讀(711) | 評論 (0)編輯 收藏


          經(jīng)常使用Eclipse的朋友大約都知道,Eclipse的文本編輯器一直有一個小小的bug:當(dāng)你做了修改,但是沒保存的話,就算你使用Ctrl+Z回退到改動前的版本,該文件仍然是標(biāo)記為"*",除非你再次Ctrl+S保存,或者選擇關(guān)閉然后選擇不保存。

          這個Bug雖然小,但是當(dāng)你的項(xiàng)目是多方開發(fā)并使用CVS等版本控制的時候就變得很麻煩:你想看別人的代碼,但是寫的很糟糕,于是你為了自己看得方便就重新排版或者做一些格式修改,或者你不小心做了什么修改,如果你回退回去,編輯器還是認(rèn)為你修改了,于是你很容易一不小心按了保存,這樣CVS便當(dāng)作改動將本地版本號增長了一次,當(dāng)你接下來同步的時候就會出現(xiàn)出局更改,當(dāng)然,如果你只看入局更改,問題倒不大,但是等下次別人再次修改那個文件并上傳以后,這個文件同步的時候就會被處理成沖突,而且很可能你就忘記了你改過什么,這就帶來了不必要的麻煩,你可能面臨做一次文本比較。

          通常我的習(xí)慣是如果看了某個文件又不小心自己保存了的話,我會立即從CVS拿最新的覆蓋,但是畢竟這應(yīng)該是IDE可以在一定程度上幫我避免的。

          現(xiàn)在好了,這個bug已經(jīng)被fix掉,在所有版本號大于20050420的build中間,我們可以不必再理會它了。

          https://bugs.eclipse.org/bugs/show_bug.cgi?id=21493

          posted @ 2005-04-22 09:03 laogao 閱讀(1040) | 評論 (4)編輯 收藏


          Not likely, but the prospect may NOT look as good for JBuilder. Here's an interview transcript with Borland's Raaj Shinde:

          http://www.itwriting.com/jbuilderfutures.php

          posted @ 2005-04-13 23:18 laogao 閱讀(837) | 評論 (2)編輯 收藏


          自從接觸J2SE 5.0以來,似乎Cedric Beust這個名字就在腦海中揮之不去,大約是跟他在java.sun.com的一篇對J2SE 5.0新特性的介紹文章有關(guān)吧,其實(shí)這個法國人給人留下印象最深的是他基于JUnit和J2SE 5.0的注解(Annotation)的思想創(chuàng)作的測試工具:TestNG。

          用過JUnit的朋友,尤其是經(jīng)常使用的朋友大概會跟他有同感,那就是JUnit有些時候功能顯得太單調(diào),不夠靈活,但是很少有人像他那樣自己另起爐灶去寫一個自己的測試框架。也許這就是我們跟發(fā)達(dá)國家在技術(shù)創(chuàng)新上的差距吧,我想這至少是意識上的差距。

          國外各大網(wǎng)站已經(jīng)前前后后做了不少介紹,國內(nèi)網(wǎng)站則似乎還沒有十分重視這個看上去不起眼的家伙。這究竟是個什么樣的工具呢?有些什么特色?大致總結(jié)一下就是:

          對Java注解的支持
          利用XML配置測試過程
          不需要實(shí)現(xiàn)接口或繼承類(如JUnit的TestCase/TestSuite)
          支持獨(dú)立的方法和分組
          支持并行測試
          測試方法支持傳入?yún)?shù)
          任意制定的調(diào)用次數(shù)和成功率統(tǒng)計

          現(xiàn)在,我們有機(jī)會在Eclipse環(huán)境嘗試這個測試框架了,還要多多感謝TestNG插件的作者Alexandru Popescu犧牲掉那么多自己的時間。怎么樣?躍躍欲試?該插件的update site是:http://beust.com/eclipse/,需要注意的是它目前只支持Eclipse 3.1版本,因?yàn)镴ava注解的原因。

          為了簡單做一個演示,我隨便寫了一些代碼:

          [FooCalculator.java]

          package sean.home.test;

          public class FooCalculator {
              
              
          public static int increaseByOne(int origVal) {
                  
          return ++origVal;
              }


          }


          [FooCalculatorTest.java]

          package sean.home.test;

          import com.beust.testng.annotations.
          *;

          public class FooCalculatorTest {
              
              
          private int origVal;
              
              @Configuration (beforeTestClass 
          = true)
              
          public void setUp() {
                  origVal 
          = Integer.MAX_VALUE;
              }

              
              @Test
              
          public void testIncreasByOne() {
                  
          int result = FooCalculator.increaseByOne(origVal);
                  assert result 
          > 0;
              }

              
          }


          [TestFooCalculator.xml]

          <!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >

          <suite name="Custom Suite" >
              
          <test name="To Test FooCalculator" >
                  
          <classes>
                      
          <class name="sean.home.test.FooCalculatorTest" />
                  
          </classes>
              
          </test>
          </suite>


          完成以后,我們可以在Eclipse中右鍵選中我們的測試類或者配置文件,選運(yùn)行TestNG,這樣我們就能看到Console視圖和TestNG視圖中顯示的結(jié)果了。

          更多信息,參考:http://beust.com/testng/

          posted @ 2005-04-13 22:10 laogao 閱讀(1201) | 評論 (3)編輯 收藏

          僅列出標(biāo)題
          共34頁: First 上一頁 26 27 28 29 30 31 32 33 34 下一頁 
          主站蜘蛛池模板: 临湘市| 扎赉特旗| 琼结县| 龙里县| 贵港市| 梅州市| 开平市| 寿阳县| 峡江县| 普兰店市| 岳普湖县| 新田县| 思南县| 兴义市| 江北区| 呼伦贝尔市| 理塘县| 中方县| 上饶市| 海安县| 河间市| 阳曲县| 伊宁市| 新津县| 开平市| 同仁县| 巴东县| 门头沟区| 大邑县| 西乌珠穆沁旗| 建宁县| 剑川县| 桓仁| 泰安市| 乐都县| 牡丹江市| 渝北区| 麻江县| 平乡县| 北川| 博湖县|