<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    大夢(mèng)想家

    5年開發(fā)工程師,2年實(shí)施經(jīng)理,X年售前顧問,......
    數(shù)據(jù)加載中……

    2008年2月29日

    Could not instantiate class XXX from tuple at AliasToBeanConstructorResultTransformer 的處理辦法

    今天客戶方服務(wù)器上突然有一個(gè)功能保存了,查看日志信息后發(fā)現(xiàn),錯(cuò)誤信息:

    Could not instantiate class XXX from tuple at AliasToBeanConstructorResultTransformer...

    Google了很久才發(fā)現(xiàn)有可能是HQL語句中別名的問題,具體原因未知,現(xiàn)在處理辦法是,將下面的語句中的別名去掉:

    StringBuffer hql = new StringBuffer("select new ContractItem(l, "
    + " pi.unitPrice, " + " pi.currencyType, " + "pi.currencyTypeDisplay," + " pi.units, "
    + " sum(pi.quantity + pi.adjQuantity), " + " pp, " + " pi.task) "
    + " from PurchasePlanItem pi " + " join pi.purchasePlan pp"
    + " join pi.priorList l " + " where l.supplierNo = ?  "
    + " and pp.id in (");
    具體是否可以解決,還要看一會(huì)兒的部署情況。

    posted @ 2013-01-09 10:57 阿南 閱讀(2277) | 評(píng)論 (0)編輯 收藏
    在企業(yè)內(nèi)部部署Chrome的課前預(yù)習(xí)

        上篇文章中我簡(jiǎn)單闡述了軍工企業(yè)信息化遇到的困境,而我們公司(西安融智軟件有限公司www.xardmu.com)則主要是面向軍工企業(yè)進(jìn)行軟件產(chǎn)品的研發(fā)和定制項(xiàng)目的開發(fā)的。
        在產(chǎn)品實(shí)施和項(xiàng)目研發(fā)過程中,我們的前端技術(shù)人員需要做大量的瀏覽器兼容性的工作。痛苦至極啊~而且,即便完成了兼容性的修改,瀏覽器端的JS解析又變成了巨大的瓶頸!例如我們有一個(gè)項(xiàng)目為了提高用戶使用的時(shí)的方便性,使用了EXTJS4,結(jié)果在IE6下性能極其低下。我們的P8是一個(gè)項(xiàng)目管理軟件,需要使用到基于EXTJS的Gantt組件,但是此組件在IE6下十分不穩(wěn)定,而且經(jīng)常導(dǎo)致IE6崩潰。
       介于上面的種種問題,我們開始尋找從瀏覽器上解決問題的方法,例如使用FireFox或者Chrome,因?yàn)檐姽て髽I(yè)都有域,所以通過域安裝一款軟件是十分容易的。經(jīng)過權(quán)衡,我們決定使用Chrome做為我們軟件的入口。
       在企業(yè)內(nèi)部署Chrome其實(shí)有三種方式:
       1.直接使用Chrome的某一個(gè)版本,對(duì)此版本進(jìn)行精簡(jiǎn)和簡(jiǎn)單的參數(shù)配置,或者內(nèi)置一些自定義的插件,直接進(jìn)行部署。
       優(yōu)點(diǎn):技術(shù)門檻較低,只需要簡(jiǎn)單的精簡(jiǎn)安裝文件和配置參數(shù)即可。
       缺點(diǎn):無法通過統(tǒng)一的策略管理局域網(wǎng)內(nèi)所有的部署情況和策略。
       2.使用Google提供的Chrome商業(yè)版,通過Google提供的商業(yè)版可以輕松定制自己企業(yè)內(nèi)部的Chrome,并生成分發(fā)文件,同時(shí)可以通過配合域策略完成對(duì)局域網(wǎng)內(nèi)的客戶端的行為進(jìn)行限制。
       優(yōu)點(diǎn):此版本是11年放出的,一直和多個(gè)大型企業(yè)緊密合作,相信不久將會(huì)形成更加完善的方案,從而在企業(yè)級(jí)應(yīng)用市場(chǎng)站穩(wěn)腳跟。
       缺點(diǎn):需要在線安裝。
       3.使用Google的Chrome Frame,一個(gè)讓披著IE外殼的Chrome,擁有Chrome的所有性能,只是披著IE的外殼而已。
       優(yōu)點(diǎn):對(duì)于較老一些的企業(yè),而且企業(yè)內(nèi)部又擁有大量的IE時(shí)代產(chǎn)物的企業(yè),絕對(duì)是一個(gè)好選擇。
       缺點(diǎn):需要在線安裝。原有軟件代碼需要修改,才能在用戶瀏覽時(shí)使用Chrome模式。

       看到痛苦了吧?都需要在線安裝。看來下一步只能開始研究Chrome的源碼,修改并編譯屬于自己的瀏覽器了。。。

    posted @ 2013-01-03 12:37 阿南 閱讀(521) | 評(píng)論 (0)編輯 收藏
    查詢Oracle的BLOB類型

    最近在做項(xiàng)目的過程中,有些時(shí)候需要用Oracle的BLOB/CLOB類型存儲(chǔ)一些很長(zhǎng)的文章,一直不知道怎么來進(jìn)行相關(guān)的檢索,經(jīng)過不懈的努力,終于能夠解決這個(gè)問題了。查詢語句如下:
     
    select count(*) from 表名 where dbms_lob.instr(表名.列名, utl_raw.cast_to_raw(convert('關(guān)鍵詞','utf8')), 1, 1) > 0;
     
    需要注意的是,這個(gè)解決方案只能查詢BLOB/CLOB中存儲(chǔ)的是經(jīng)過處理的字符串。
     
    本方法在Oracle 10g上測(cè)試通過
    轉(zhuǎn)自http://commandos.blog.51cto.com/154976/128732

    posted @ 2010-06-17 11:03 阿南 閱讀(859) | 評(píng)論 (0)編輯 收藏
    誰不知道構(gòu)架?

        作為一個(gè)技術(shù)人員,誰不知道構(gòu)架?

        前一段時(shí)間公司找開發(fā)人員談心,有位領(lǐng)導(dǎo)問一位開發(fā)人員,大致對(duì)話如下:

        A:“你了解咱們現(xiàn)在產(chǎn)品的構(gòu)架嗎?能不能談?wù)勀銓?duì)構(gòu)架的看法?”

        B:“… …”

        A:“說說看吧~”

        B:“我不懂構(gòu)架!構(gòu)架是什么?咱們現(xiàn)在的產(chǎn)品還有構(gòu)架呢?”

        作為一個(gè)有3年工作經(jīng)驗(yàn),2家公司經(jīng)歷的VC程序員來說,我覺得,這幾年的積累是白做了!這樣的思想永遠(yuǎn)都只能停留在寫程序上~

        一個(gè)產(chǎn)品沒有構(gòu)件,就如同一個(gè)人沒有靈魂一樣!他不是沒有,只是你沒有去思考,沒有去發(fā)現(xiàn)他而已!

        我記得袁洪剛說過,“一個(gè)偉大的產(chǎn)品背后一定有一個(gè)偉大構(gòu)架師!”,我堅(jiān)信這一點(diǎn)~產(chǎn)品好壞一方面決定于對(duì)現(xiàn)實(shí)問題的解決程度,另一方面是構(gòu)架的好壞!

        幾年前,中國(guó)的軟件公司里面很少出現(xiàn)構(gòu)架師/架構(gòu)師這樣的角色,這幾年開始有改觀了,越來越多的人開始認(rèn)識(shí)到很多錯(cuò)誤的問題,其實(shí)從一開始就是錯(cuò)的。很多事情并沒有謀定而后動(dòng)。一味的追求簡(jiǎn)單,到最后變成了下線很簡(jiǎn)單了!

       說自己不知道構(gòu)架的開發(fā)人員有兩種,新手和沒有思想的新手,拼命的同時(shí)我們也應(yīng)該停下腳步想想,抬起頭看看天空。別總把經(jīng)驗(yàn)的缺失都?xì)w結(jié)于時(shí)間的長(zhǎng)短,更應(yīng)該想想自己是否真的積累過。

    posted @ 2009-07-03 16:33 阿南 閱讀(1666) | 評(píng)論 (6)編輯 收藏
    EJB3下無狀態(tài)會(huì)話Bean發(fā)布為WebService

        無狀態(tài)會(huì)話Bean發(fā)布為WebService是非常有意義的,因?yàn)槿绻覀儗⒚恳粋€(gè)EJB模塊按照SOA的思想做成一個(gè)一個(gè)獨(dú)立的服務(wù)模塊(這里不討論SCA,我認(rèn)為Apache的SCA框架還不夠強(qiáng)大,文檔還不夠全面),同樣的代碼在JavaEE體系之內(nèi)的應(yīng)用程序可以直接使用EJB3直接訪問,JavaEE體系之外的應(yīng)用程序可以直接使用WebService訪問,這一點(diǎn)是非常有意義的。

        下面要考慮的就是如何只寫一份代碼,讓它能做兩樣事情。

        網(wǎng)上有大量的使用EJB3發(fā)布WebService的教程,但是這些教程都是一個(gè)人寫的,基本上沒有太大的參考價(jià)值。最重要的是,他寫的元注釋都是寫在實(shí)現(xiàn)類上的,接口上沒有做任何描述。這種做法有兩個(gè)問題,第一如果你的會(huì)話Bean使用了EM,那么麻煩了,JAXB在做綁定的時(shí)候不認(rèn)識(shí)接口;第二WSDL文件的描述實(shí)際上應(yīng)該是基于接口的描述,應(yīng)該和實(shí)現(xiàn)類沒有太大的關(guān)系。

        看看網(wǎng)上流行的代碼:

     

    1@WebService(name = "PurchaseArrival", serviceName = "PurchaseArrivalService"
    2@SOAPBinding(style = SOAPBinding.Style.RPC) 
    3public class PurchaseArrivalImpl implements IPurchaseArrival {

     

    注意,基于RPC綁定模式下List,Set一類的接口都是不可傳輸?shù)模@點(diǎn)會(huì)很麻煩,要用必須用實(shí)現(xiàn)類。

    看看我的代碼:

    接口:

     

    1@WebService(name = "ILogRemoteService",targetNamespace = "http://www.glnpu.com/dmp/xml"
    2@SOAPBinding(style = SOAPBinding.Style.DOCUMENT) 
    3public interface  ILogRemoteService {

     

    實(shí)現(xiàn)類:

     

    1@Stateless 
    2@Remote(ILogRemoteService.class
    3@WebService(endpointInterface = "com.glnpu.dmp.server.service.base.log.ILogRemoteService",serviceName = "LogRemoteService"
    4public class LogRemoteService extends BaseService implements ILogRemoteService {

     

    這個(gè)WebService是針對(duì)接口發(fā)布出去,而且使用的DOCUMENT樣式,可以直接使用List、Set的接口。

    這個(gè)WebService生成的WSDL文件很有意思:

     

     1<definitions name="LogRemoteService" targetNamespace="http://impl.log.base.service.server.dmp.glnpu.com/" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:ns1="http://www.glnpu.com/dmp/xml" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://impl.log.base.service.server.dmp.glnpu.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
     2
     3<import location="http://127.0.0.1:8080/LogRemoteServiceService/LogRemoteService?wsdl&resource=ILogRemoteService_PortType25057.wsdl" namespace="http://www.glnpu.com/dmp/xml" />
     4
     5<service name="LogRemoteService">
     6
     7<port binding="ns1:ILogRemoteServiceBinding" name="LogRemoteServicePort">
     8
     9<soap:address location="http://127.0.0.1:8080/LogRemoteServiceService/LogRemoteService" />
    10
    11</port>
    12
    13</service>
    14
    15</definitions>
    16
    17

     

    里面有import來指引到真正的WSDL文件。這樣很容易將會(huì)話Bean變成WS~一樣的代碼兩樣的功能,超值!

    posted @ 2009-07-02 13:54 阿南 閱讀(1947) | 評(píng)論 (0)編輯 收藏
    Wazaabi 2.0 讓我看到了自定義界面設(shè)計(jì)器的希望

        Wazaabi 2.0 基于 Eclipse3.4/EMF/GEF 的動(dòng)態(tài)界面設(shè)計(jì)和現(xiàn)實(shí)組件,依賴EMF進(jìn)行界面描述,依賴GEF進(jìn)行界面顯示。

        比較起XUI,XSWT,它的設(shè)計(jì)器更加的完善,功能比較1.0版本也有很大的提高,而且作者也提出了使用EMF進(jìn)行數(shù)據(jù)綁定的思路和實(shí)現(xiàn)。

        麻煩的是它本身只提供了Fill和Row兩種布局,Button、Text、List、Label這些基本控件。還好作者的文檔功底不錯(cuò),簡(jiǎn)單幾張圖就把自己的設(shè)計(jì)思路描述的清清楚楚,高手所為,贊一個(gè)!

       在它基礎(chǔ)上可以很簡(jiǎn)單的進(jìn)行擴(kuò)展,而且比擴(kuò)展VE要簡(jiǎn)單的多~這是我喜歡的!現(xiàn)在對(duì)它的使用本人還是處于觀望態(tài)度,一方面等待它的持續(xù)更新,另一方面等待E4的激動(dòng)人心的放出!

        有興趣的朋友可以看看http://www.wazaabi.org/index.php?title=Main_Page

    posted @ 2009-07-01 10:13 阿南 閱讀(1992) | 評(píng)論 (1)編輯 收藏
    不怕錯(cuò),就怕不認(rèn)錯(cuò)

        明顯第一種構(gòu)架比第二種構(gòu)架好很多,但是我們偏偏在第二種構(gòu)架上面掙扎了半年的時(shí)間。

        總是有各種各樣的接口和推辭說業(yè)務(wù)太復(fù)雜,客戶催的太緊,沒辦法把業(yè)務(wù)放到服務(wù)器上,成本太高了!已經(jīng)是2009年了,10年前大家就意識(shí)到維護(hù)是關(guān)鍵,業(yè)務(wù)一定要封裝,不能分散于客戶端… …10年后的今天我們竟然還在掙扎!完全沒有思想,完全沒有設(shè)計(jì),完全沒有接口,完全沒有OO… …!!!

        項(xiàng)目告一段落我要拼命的重構(gòu),徹底抽離公共業(yè)務(wù),徹底剝離特殊業(yè)務(wù),我要OO,我要接口,我要設(shè)計(jì),我甚至還要SOA!

        我錯(cuò)了!我認(rèn)錯(cuò)!可是為什么公司還有那么多的人還是不認(rèn)錯(cuò)呢?做了10年的產(chǎn)品,10年前的東西竟然比10年后的東西還好用!做了10年還是死纏爛打在10年前的原型之上~他們比我更悲哀~

    posted @ 2009-06-30 16:36 阿南 閱讀(492) | 評(píng)論 (3)編輯 收藏
    Lock wait timeout exceeded; try restarting transaction

       粗心大意,老犯錯(cuò)!

       今天上午在調(diào)試EJB3調(diào)用WebService時(shí)一直遇到MySQL報(bào)出的這個(gè)問題。郁悶壞了,只是執(zhí)行了一句update而已,就導(dǎo)致這樣錯(cuò)誤… …

       經(jīng)過半個(gè)小時(shí)排查,終于找到問題所在了。原因是分布式事務(wù)引起的。

       場(chǎng)景描述:

    EJB3操作A表-->調(diào)用WebService-->WebService操作B表

        在操作A表的時(shí)候需要等待WebService的調(diào)用,如果沒有異常,則可以提交事務(wù),如果出現(xiàn)異常,則不能提交事務(wù);

        在操作B表的時(shí)候需要處理異常;

        一個(gè)簡(jiǎn)單的分布式事務(wù),一般情況下是沒有問題的~但是由于我的粗心大意,做成了EJB3也在操作B表,這樣就導(dǎo)致了表被鎖死的情況出現(xiàn)~真是郁悶啊!

    posted @ 2009-04-23 21:41 阿南 閱讀(4286) | 評(píng)論 (0)編輯 收藏
    如何使用代碼重啟RCP程序?

        以前我們的產(chǎn)品重啟RCP應(yīng)用程序的時(shí)候都是找到本地路徑的EXE程序,然后使用:

    1Runtime runtime = Runtime.getRuntime();
    2runtime.exec("cmd.exe /c " + excuteStr );


    重新啟動(dòng)應(yīng)用程序,太復(fù)雜,而且上次打開的參數(shù)都會(huì)丟失。

        今天早上翻看了一下Eclipse的org.eclipse.update.ui CVS,找到了:
    PlatformUI.getWorkbench().restart();
    使用這個(gè)重新啟動(dòng)RCP應(yīng)用程序,非常的方便,而且參數(shù)都在,即使在開發(fā)環(huán)境下也一樣沒有問題!

    posted @ 2009-03-17 18:53 阿南 閱讀(1581) | 評(píng)論 (1)編輯 收藏
    How to show taskbar icon when use splash?

        這個(gè)問題非常的重要!
        做過RCP開發(fā)的朋友應(yīng)該都遇到過,使用AbstractSplashHandler做的登陸界面,在windows的任務(wù)欄上面是不會(huì)顯示的,這個(gè)問題讓客戶用起來很麻煩,總是動(dòng)不動(dòng)就找不到登陸界面了!現(xiàn)在有解決辦法了~

     1Here is the modified Code of the InteractiveSplashHandler Class:
     2
     3
     4    private Shell splash;
     5
     6
     7    public void init(final Shell splash) {
     8        // Shell replaced by one with task bar icon
     9        // (old Style: SWT.TOOL, new Style: SWT.NO_TRIM)
    10        replaceShell(splash);
    11        // Store the shell
    12        super.init(getSplash());
    13        // Configure the shell layout
    14        configureUISplash();
    15        // Create UI Colors and Fonts
    16        createColorsAndFonts();
    17        // Create UI
    18        createUI();
    19        // Create UI listeners
    20        createUIListeners();
    21        // Force the splash screen to layout
    22        splash.dispose();
    23        getSplash().layout(true);
    24        // Keep the splash screen visible and prevent the RCP application from
    25        // loading until the close button is clicked.
    26        doEventLoop();
    27    }

    28
    29
    30    private void replaceShell(Shell splash) {
    31        Shell newSplash = new Shell(Display.getCurrent(), SWT.NO_TRIM);
    32        newSplash.setBackgroundImage(splash.getBackgroundImage());
    33        newSplash.setBounds(splash.getBounds());
    34        newSplash.setFont(splash.getFont());
    35        newSplash.setVisible(true);
    36        setSplash(newSplash);
    37    }

    38
    39
    40    public Shell getSplash() {
    41        return splash;
    42    }

    43
    44
    45    public void setSplash(Shell splash) {
    46        this.splash = splash;
    47    }

    48
    49

    稍稍進(jìn)行改造,就可以了~

    posted @ 2009-03-15 20:59 阿南 閱讀(1309) | 評(píng)論 (0)編輯 收藏
    VE真的回來了

        VE已經(jīng)死亡很久了,整個(gè)Eclipse社區(qū)中,最悲壯的真的要屬VE了。
        偉大的目標(biāo),沒落的貴族!記得去年在北京的時(shí)候,經(jīng)常有朋友問我VE怎么安裝。呵呵VE2.0開始安裝真的很復(fù)雜,偌大的Eclipse-WIKI里面還真的沒有寫多少關(guān)于VE安裝的內(nèi)容。
        去年下載過VE的源碼,打算在VE的基礎(chǔ)上做一個(gè)自己的設(shè)計(jì)工具,但是研究了很久,發(fā)現(xiàn)CVS上的源碼都過于陳舊了,然后就再也沒有關(guān)注過它了。
        很久沒有真正的關(guān)注過Eclipse了,今天上來看看,發(fā)現(xiàn)VE真的回來了!
        現(xiàn)在VE的領(lǐng)導(dǎo)者是深圳的亞松(在西安有分公司,我還真想去試試... ...),而亞松最讓我崇拜的大牛就是Yves YANG,呵呵,EclipseWord的大牛哦!
        我在自己公司的產(chǎn)品里面也引入了建模的概念,下一步就是根據(jù)模型來生成界面,再下一步就是改造VE,讓二次開發(fā)人員開發(fā)起來更容易更加簡(jiǎn)單。
        祝福VE,希望有了亞松,VE會(huì)更好。
     

    預(yù)告下一個(gè)系列文章:
        企業(yè)信息系統(tǒng)建模的思考;
        新VE源碼分析;
       

    posted @ 2009-03-15 15:38 阿南 閱讀(1511) | 評(píng)論 (1)編輯 收藏
    最好的軟件界面繪制工具h(yuǎn)ttp://www.balsamiq.com/

    我見過最好的軟件界面繪制工具h(yuǎn)ttp://www.balsamiq.com/
    真正能達(dá)到又快又好!





    posted @ 2009-02-11 11:38 阿南 閱讀(2390) | 評(píng)論 (0)編輯 收藏
    初談激情

        做人何懼艱險(xiǎn),豪情不變年復(fù)一年,做人有苦有甜,善惡分開兩邊,都為夢(mèng)中的明天!
        上面這段簽名是抄老莫的,每讀一次都會(huì)有不同的體會(huì)。
        沒有維護(hù)Blog已經(jīng)有兩個(gè)多月了,這兩個(gè)月一直在北京出差,已經(jīng)待了兩個(gè)月了,還得再待一個(gè)月!每次出差離開西安總是感覺不舒服,而且從心里要好長(zhǎng)時(shí)間才能適應(yīng),所以就一直沒有維護(hù)Blog。
        晚上和一位美女吃飯,聊天中突然聊到了這個(gè)問題,仔細(xì)想想為什么做什么都覺得沒有意思?為什么會(huì)不適應(yīng)外界環(huán)境的改變?為什么覺得一切都不爽?
        是因?yàn)闆]有了激情,最近缺少了激情!缺少了創(chuàng)造的激情,缺少了生活的激情,缺少了工作的激情,缺少了寫B(tài)log的激情... ...
        重拾激情,這才是重要的!做人何懼艱險(xiǎn)!人生路上本來就充滿了艱險(xiǎn),要勇敢面對(duì),無論是失意還是快樂... ...何必在乎得失,終究一切都會(huì)過去!抓緊時(shí)間,去實(shí)現(xiàn)自己夢(mèng)想!

    posted @ 2008-07-20 23:45 阿南 閱讀(482) | 評(píng)論 (4)編輯 收藏
    Eclipse3.3-3.4MX多國(guó)語言項(xiàng)目放出

        老版本的Eclipse多國(guó)語言項(xiàng)目只維護(hù)到3.2.1版本,以后就再也沒有維護(hù)了,我覺得主要的問題是,語言包太大,一個(gè)包中會(huì)有多種語言,對(duì)于RCP版本的產(chǎn)品漢化起來很不舒服,明明我只要中文,結(jié)果要加入N個(gè)語言進(jìn)來,而且還是20M的包~
        Eclipse的http://download.eclipse.org/eclipse/downloads/最近剛剛放出一個(gè)叫做Babel project的項(xiàng)目,這個(gè)項(xiàng)目就是在解決國(guó)際化的問題,這個(gè)項(xiàng)目旨在為每一個(gè)插件提供獨(dú)立的單語言包,這樣在做RCP項(xiàng)目的時(shí)候,可以根據(jù)需要,打不同的包就可以了~!
        周五的下午測(cè)試了一下,漢化率絕對(duì)在99%以上,而且很多地方的漢化還是很到位的~再有哪些客戶看不懂的地方的了~
        只是有一個(gè)很小的麻煩,就是RCP原來的異常對(duì)話框中的內(nèi)容,每一句后面都會(huì)有\(zhòng)n,莫非多國(guó)語言的時(shí)候\n被轉(zhuǎn)義了?
        希望可以得到改進(jìn)!

    posted @ 2008-04-27 09:33 阿南 閱讀(3172) | 評(píng)論 (4)編輯 收藏
    來自Neil Bartlett 的OSGI BOOK 一個(gè)預(yù)覽版本放出

        Neil Bartlett的當(dāng)下工作就是完成《OSGi in Practice》,今天他在Blog中已經(jīng)放出了本書的一個(gè)預(yù)覽版本(第二章)。一下是書的目錄:

  • Introduction
  • First Steps in OSGi
  • Bundle Dependencies
  • Introduction to Services
  • Example: Mailbox Reader GUI
  • The Whiteboard Pattern
  • Declarative Services
  • The Extender Pattern
  • Integrating Third-party Libraries
  • Building Web Applications

    從PDF的授權(quán)看是“署名的,非商業(yè)的,可流傳的”,我估計(jì)這本書上市的時(shí)間應(yīng)該很近了,而且官方的PDF版本也會(huì)同步推出的~

    喜歡的朋友可以下下來看看,寫的很詳細(xì),個(gè)人認(rèn)為是本好書,而且此作者應(yīng)該是Eclipse基金會(huì)的人,所以對(duì)OSGI的理解也不錯(cuò)有什么問題~

  • ps:連接地址:http://neilbartlett.name/blog/osgibook/

    posted @ 2008-04-18 12:41 阿南 閱讀(1640) | 評(píng)論 (3)編輯 收藏
    SQL文件中有Functions,Type如何在sqlplus中執(zhí)行?

        SQL文件中有Functions,Type,那么在sqlplus中要start直接執(zhí)行SQL文件怎么辦?例如:

    CREATE OR REPLACE FUNCTION strcat(input varchar2 )
    RETURN varchar2
    PARALLEL_ENABLE AGGREGATE USING strcat_type;

        將上面的Functions寫入SQL文件中,然后在sqlplus中用start執(zhí)行此文件,后果是此Functions并沒有被創(chuàng)建到數(shù)據(jù)庫(kù)中,在后面加上commit;也是沒有用處的,提示的效果是SQL并沒有結(jié)束,sqlplus并沒有真正執(zhí)行。

        這怎么辦?Google了老半天,也沒有人寫到這個(gè)問題,但是看看人家寫Functions和我寫的有一點(diǎn)點(diǎn)區(qū)別,修改一下!

    CREATE OR REPLACE FUNCTION strcat(input varchar2 )
    RETURN varchar2
    PARALLEL_ENABLE AGGREGATE USING strcat_type;
    /

        在Functions最后一行加上一個(gè)/,再執(zhí)行就OK了~看來sqlplus是把/作為一個(gè)Functions或者Type的結(jié)束符了!大家注意了!

    posted @ 2008-04-15 16:04 阿南 閱讀(1868) | 評(píng)論 (2)編輯 收藏
    注意!Shell.open()

        Shell.open()非常重要!

        今天在做SWT中顯示OCX控件,照著Demo寫的,但是不知道為什么每次執(zhí)行到:Variant pVarResult = auto.invoke(dispIdMember, rgvarg);

       JVM都會(huì)直接退出~error如下:

    #
    # An unexpected error has been detected by HotSpot Virtual Machine:
    #
    #  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x73d321b9, pid=3696, tid=2208
    #
    # Java VM: Java HotSpot(TM) Client VM (1.5.0_04-b05 mixed mode, sharing)
    # Problematic frame:
    # C  [MFC42.DLL+0x21b9]
    #
    # An error report file with more information is saved as hs_err_pid3696.log
    #
    # If you would like to submit a bug report, please visit:
    #   http://java.sun.com/webapps/bugreport/crash.jsp
    #

    [error occurred during error reporting, step 270, id 0xc0000005]

    尋便了網(wǎng)絡(luò)也沒有解決辦法,剛開始以為是JVM版本的問題,于是換了3個(gè)版本都是同樣的問題~真是郁悶!

       最后通過和Demo代碼的比較,發(fā)現(xiàn)Demo中有一句shell.open(),注釋掉此句,Demo也是引起JVM退出!在代碼中加入shell.open(),搞定!

       原來這個(gè)open方法還有這么多的玄機(jī)啊,但是javadoc上卻只字未提!

    posted @ 2008-04-14 20:10 阿南 閱讀(2087) | 評(píng)論 (0)編輯 收藏
    今天愚人節(jié),被Google欺騙了!

    早上看到Google的人肉搜索的招聘廣告,興沖沖的發(fā)了郵件,申請(qǐng),結(jié)果:

    尊敬的朋友,
    非常感謝您在4月1日積極參與谷歌人肉搜索志愿者招聘,這是谷歌于2008年4月1日"愚人節(jié)"推出的讓大家"會(huì)心一笑 暫解煩憂"的小笑話,在此謹(jǐn)祝大家"愚人節(jié)"快樂,天天快樂。
    如果您對(duì)谷歌公司招聘感興趣,歡迎進(jìn)一步登錄我們的招聘網(wǎng)站尋找自己真正心儀的職位。http://www.google.cn/intl/zh-CN/jobs/
    谷歌肉搜組
    Dear Friends,
    Thank you very much for your interest in the job positions of Google's "Grassroots search" volunteers on April 1. This is a joke that Google China does on April 1, 2008 to give you some light-hearted mood. Hope you laughed because of it :-). Here, we want to wish everyone "Happy April 1st day and Happy Everyday."
    Google Grassroots Search Engineer and Product Group

     

    暈~被欺騙了!寫的跟真的一樣的:

    關(guān)于人肉搜索

    什么是人肉搜索?

    人肉搜索與刺青、美白、護(hù)膚、減肥等直接在人肉上施行的種種行為無關(guān)。顧名思義,人肉搜索就是利用現(xiàn)代信息科技,變傳統(tǒng)的網(wǎng)絡(luò)信息搜索為人找人,人問人,人碰人,人擠人、人挨人的關(guān)系型網(wǎng)絡(luò)社區(qū)活動(dòng),變枯燥乏味的查詢過程為一人提問、八方回應(yīng),一石激起千層浪,一聲呼喚驚醒萬顆真心的人性化搜索體驗(yàn)。人肉搜索不僅可以在最短時(shí)間內(nèi)揭露某某門背后的真相,為某三某七找到大眾認(rèn)可的道德定位,還可以在網(wǎng)絡(luò)無法觸及的地方,探尋并發(fā)現(xiàn)最美麗的叢林少女,最感人的高山牧民,最神秘的荒漠洞窟,最浪漫的終極邂逅…… 人肉搜索追求的最高目標(biāo)是:不求最好,但求最肉。

    谷歌為什么要?jiǎng)?chuàng)建人肉搜索引擎?

    谷歌自進(jìn)入中國(guó)市場(chǎng)以來,一直致力于根據(jù)本地需求改進(jìn)用戶的搜索體驗(yàn)。谷歌很早就意識(shí)到,自發(fā)的、分散的、有意或無意的人肉搜索行為早在中國(guó)互聯(lián)網(wǎng)誕生之初就存在并茁壯成長(zhǎng)著。中國(guó)互聯(lián)網(wǎng)界發(fā)生的幾乎每一起重大事件,尤其是娛樂性事件,都有可能成為人肉搜索技術(shù)的試金石。為了豐富人民群眾的業(yè)余文化生活,為了使廣大網(wǎng)民在最短時(shí)間內(nèi)趕超人肉搜索的世界水平,谷歌決定投入巨資打造亞太地區(qū)最大的人肉搜索引擎。

    谷歌人肉搜索引擎有哪些特點(diǎn)?
    • 規(guī)模最大:第一期工程擬招募人肉搜索志愿者2500萬名,完成后將成為亞太地區(qū)最大的人肉搜索引擎。
    • 創(chuàng)新最多:256項(xiàng)專利技術(shù),1024篇相關(guān)論文,4096次用戶調(diào)研,65536輪預(yù)覽版測(cè)試。
    • 領(lǐng)域最全:搜索范圍涵蓋娛樂、影視、體育、社會(huì)、名人、百姓、歷史、地理、物種、太空等領(lǐng)域。
    • 速度最快:平均查詢響應(yīng)時(shí)間32秒。
    • 挖掘最深:曾在預(yù)覽版測(cè)試中,用時(shí)128秒,成功定位了中國(guó)大陸生產(chǎn)的第一只自動(dòng)沖水馬桶。

    人肉搜索招聘需求

    人肉搜索志愿者管理專員

    組織和領(lǐng)導(dǎo)以志愿者為核心的超大規(guī)模人肉搜索團(tuán)隊(duì),整合來自數(shù)千萬搜索志愿者的小道消息,從茫茫人海中發(fā)掘信息背后的奧秘。嚴(yán)格管理,制止人肉搜索過程中可能出現(xiàn)的扯皮、造假、謠傳、起哄、攻訐、謾罵等不文明行為,創(chuàng)造合理、有序、創(chuàng)新、務(wù)實(shí)的人肉搜索新秩序。

    能力要求:

    • 博士以上學(xué)歷
    • 管理學(xué)、傳播學(xué)或相關(guān)專業(yè)畢業(yè)
    • 掌握五種以上方言
    • 有八卦主義精神和凡事不著調(diào)作風(fēng)者優(yōu)先

    請(qǐng)將您的中英文簡(jiǎn)歷以文本或HTML的格式發(fā)至renrou-jobs@google.com, 并在郵件的標(biāo)題中注明“人肉搜索志愿者管理專員”。郵件正文請(qǐng)使用中文,所有英文信息請(qǐng)以附件形式提交。

    人肉搜索志愿者(兼職)

    在業(yè)余時(shí)間為人肉搜索引擎奉獻(xiàn)智慧、汗水和好心情。利用谷歌研發(fā)的人肉搜索平臺(tái),與其他數(shù)千萬志愿者并肩工作,使用并行人肉計(jì)算的方式,對(duì)疑難問題堅(jiān)持不動(dòng)搖、不軟弱、不拋棄、不放棄的肉骨茶原則,為廣大網(wǎng)民提供第一手的,帶有人情味兒的,具有震撼力和可傳播性的搜索結(jié)果。

    能力要求:

    • 學(xué)歷不限,專業(yè)任選
    • 有強(qiáng)烈的好奇心和求知欲
    • 對(duì)常人無法獲取的信息有敏銳的感知能力和打破砂鍋問到底的堅(jiān)定信念
    • 自備聯(lián)網(wǎng)電腦一臺(tái),電話機(jī)一部,粉筆若干,餐巾紙一箱,《八卦人物風(fēng)云榜》16開大字本一套共40冊(cè)

    請(qǐng)將您的中英文簡(jiǎn)歷以文本或HTML的格式發(fā)至renrou-jobs@google.com, 并在郵件的標(biāo)題中注明“人肉搜索志愿者(兼職)”。郵件正文請(qǐng)使用中文,所有英文信息請(qǐng)以附件形式提交。

    致獵頭公司:對(duì)于未簽約的獵頭公司提供的簡(jiǎn)歷,谷歌將不支付任何費(fèi)用。

    posted @ 2008-04-01 10:24 阿南 閱讀(741) | 評(píng)論 (2)編輯 收藏
    RAP再次放入令人振奮的Demo

        此次RAP放出了draw2d_in_RAP的Demo,主要展示的是draw2D在RAP框架上的應(yīng)用,還沒有下載真正的Demo試用,但是從視頻上看,好像是融合了flex來做圖形展示和拖拽,有興趣的朋友可以看看Demo的代碼,然后告訴我~

        上次e4放出的基于web的IDE就使用flash作為代碼展示和編輯的編輯器,看來Eclipse社團(tuán)也感覺到純的js基本上不能完成任務(wù)了。

    Demo下載地址:http://www.innoopract.com/fileadmin/user_upload/Bilder/Films/draw2d_640x480.mp4

    posted @ 2008-03-27 12:29 阿南 閱讀(2552) | 評(píng)論 (2)編輯 收藏
    微軟真的來攪局嗎?

        關(guān)注過上一篇文章的朋友,基本都對(duì)最后說到的微軟要支持SWT的開發(fā)提出了不少自己的看法。
        下面我們?cè)賮砜纯磥碜詂nBate.com的新聞:

    Java程序員們可能會(huì)經(jīng)常遇到Windows下的UI問題,Java程序總是和Windows的外觀統(tǒng)一不起來,特別是Vista,難度更高.
    而現(xiàn)在,微軟微軟宣布它將為Eclipse基金會(huì)提供了標(biāo)準(zhǔn)的widget工具,這意味著Java將與Windows Presentation Foundation實(shí)現(xiàn)互通,允許應(yīng)用程序原生采用Windows VIsta的外觀.

    這也是微軟未來開放計(jì)劃的一部分,微軟認(rèn)為一個(gè)日益開放,透明的方式正在出現(xiàn).之前,微軟還成立了Linux的互操作性實(shí)驗(yàn)室,并與JBoss,Zend Technologies等公司實(shí)現(xiàn)了技術(shù)合作.

        微軟真的在開源,不但支持了Linux,而且還來關(guān)注SWT,而且還有微軟最近在收購(gòu)Yahoo!,它最近非常關(guān)注開源事業(yè),也許他真的要攪局,也許他真的是想做些事情,也許幾年之后微軟搖身一變真的變成了一個(gè)開源斗士了!
       微軟更換了首席構(gòu)架師,他的做事風(fēng)格在改變,我想微軟是在向開源界證明自己的實(shí)力,是想讓人們相信自己,也許過幾年微軟還果真出了一個(gè)開源版本的windows了~

    posted @ 2008-03-21 12:34 阿南 閱讀(1952) | 評(píng)論 (4)編輯 收藏
    Eclipse4.0放出部分Demo

        早上,習(xí)慣性的打開GoogleReader,看看世界的變化。發(fā)現(xiàn)Planet Eclipse上已經(jīng)有參加EclipseCON2008的朋友把Eclipse4.0(簡(jiǎn)稱e4)Demo地址以及一些截圖放到Blog上了~我們就來欣賞一下Eclipse的巨大變化吧!

        呵呵,是不是很可怕,一個(gè)基于web的開發(fā)工具?我在Eclipse的Wiki上已經(jīng)看到這個(gè)截圖的Demo了,但是還沒有時(shí)間試用~
        此次放出的e4的demo基本上都是swt的調(diào)整,比方說可以使用swt來做flex,使用swt來做DOJO~,從這些方面就可以看到Eclipse正在向基金會(huì)想想的那樣為e4提供一個(gè)基于web應(yīng)用的平臺(tái),我想這個(gè)平臺(tái)應(yīng)該就是RAP了~而且從Demo上看,e4將會(huì)大大的涉足到web應(yīng)用領(lǐng)域中,期待他們?yōu)槲覀儙碓僖淮蔚捏@呼!!!
        http://wiki.eclipse.org/E4/Running_the_demos  (e4的demo)

        還有一個(gè)令人振奮的消息,不知道是好事還是壞事-----微軟已經(jīng)決定進(jìn)入Eclipse基金會(huì),并打算開始資助SWT項(xiàng)目了。
       

    posted @ 2008-03-20 12:46 阿南 閱讀(4202) | 評(píng)論 (9)編輯 收藏
    Planning for Eclipse 4.0(來自InfoQ)

    Earlier this week, the teams and developers working on the various projects of Eclipse began an intense debate regarding the next steps in the future of Eclipse, all triggered by the announcement of the incubation project titled 'e4' on the Eclipse committer mailing-list:

    The Eclipse Project PMC is announcing a new component, called E4, as part of the Eclipse Project Incubator.

    Component Description: 

    During the Eclipse Project 3.4 release cycle, one of the important plan items was "Create the Eclipse 4.0 Plan". The intent of this work was to identify the most pressing issues that would impact the ongoing success of Eclipse, and come up with a plan to address them.  The result was the design of a new platform "e4", which will be the basis for Eclipse 4.0. 

    The goal of the e4 component is to provide a public venue for the initial explorations that were done, leading up to the e4 design. We expect to continue to work in this area until we have reached consensus on how the full e4 effort will be structured.
    The e4 moniker is a reference to Eclipse 4.0, which would be the next major release number for the classic Eclipse distribution and platform projects. The last three major Eclipse releases shared these version number relationships: Callisto corresponded to the Eclipse platform v3.2, Europa corresponded to the Eclipse platform v3.3, and the upcoming Ganymede release corresponds to the Eclipse platform 3.4.

    Historically it has been common practice for these plan documents to outline the thematic goals for a given release of what is commonly called the Eclipse top-level project. Traditionally, the top-level project has encompassed the Eclipse platform, the Java development tools, the Plug-in development tools, and all other components of the commonly referred-to Eclipse 'classic' distribution (the Java and Eclipse Plug-in IDE). This plan format has been used since the 2.1 release of Eclipse, and each prior plan is available on the Eclipse top-level project site. The e4 announcement is a somewhat different approach in that community involvement is being asked prior to the drafting of any plan.

    Initially, the e4 project is little more than a community gathering point; a place to track early changes and ideas in code. The goal of opening this project now has been described by many of those involved as an effort to get community input and ideas at EclipseCon 2008, and to then begin drafting a plan based on the community input after that point. Kevin McGuire, an Eclipse committer who primarily works on the Platform UI team, described e4 in this way:

    We on the platform team care passionately about Eclipse. We know you do too. We want to see it live a long, healthy life. We want it to serve its community as best it can. When we can’t achieve that it makes us sad. It’s clear to us that for Eclipse as a platform to remain long lived, vibrant, and relevant, it must be able to change. But the weight of a zillion plug-ins, projects, and API means the path of least resistance is stagnation, and the effort to effect change given the current constraint system is becoming monumental.

    Therefore, two things must happen:

    1. A new space must be carved out in which experimentation can happen, leading to change.
    2. New people must get involved, bringing with them their energy, ideas, requirements, knowledge, passion.

    These two are intrinsically tied.

    That is e4.

    While there was some heated discussion over the format and approach of the initial project announcement, the e4 project is likely to become a central test-bed for the various transformations that Eclipse will go through to reach its next major milestone. In the past, major version number increments for Eclipse have represented significant changes for the Eclipse project. The transition to Eclipse 3.0 encompassed the move of Eclipse to the OSGi platform, the announcement and creation of Eclipse rich-client platform, and both a look-and-feel and performance overhaul. The expectation is that Eclipse 4.0 will also represent such a major shift.

    InfoQ will continue to cover future Eclipse planning decisions as they become available.

    posted @ 2008-03-15 18:38 阿南 閱讀(1975) | 評(píng)論 (2)編輯 收藏
    EclipseCON2008 only 1 week left!

        EclipseCON2008 only 1 week left!
        又一次開源界的盛會(huì)EclipseCON2008就要召開了~據(jù)我了解此次盛會(huì)將會(huì)吸引更多的開源廠商,領(lǐng)袖,開發(fā)者參與,其中就有來自微軟的Sam Ramji(微軟開源的Labs),關(guān)于OSGi的討論依然是重頭戲。
        雖然Eclipse的RAP的發(fā)布也有半年多了,也在開源界引起了不小的反響,但是RAP還是沒有得到廣泛的應(yīng)用,來自RAP的主力開發(fā)商Innoopract Informationssysteme GmbH的消息,此次EclipseCON2008大會(huì)也會(huì)給RAP帶來更多的利好消息,畢竟關(guān)于RAP的討論被安排在第二場(chǎng),僅次于第一場(chǎng)OSGi的議題。
        Eclipse4.0也被提上了討論日程,在介紹中提到,Eclipse3.0主要在力推RCP平臺(tái),而Eclipse4.0將會(huì)將會(huì)帶來一個(gè)全新的用戶界面以及新的用戶體驗(yàn),將帶領(lǐng)Eclipse進(jìn)入到WEB應(yīng)用中,我想在Eclipse4.0的時(shí)候RAP應(yīng)用,將變成Eclipse的主推平臺(tái)了。
        還有很多關(guān)于其他項(xiàng)目的討論,但是我一直關(guān)注的VE的消息,好像還是不被人們注意,可見VE基本上已經(jīng)死亡,而且我認(rèn)為可以算是Eclipse基金會(huì)中比較失敗的一個(gè)項(xiàng)目了!
       預(yù)祝此次大會(huì)碩果累累,祝Eclipse越走越好!

    posted @ 2008-03-08 12:52 阿南 閱讀(1116) | 評(píng)論 (0)編輯 收藏
    使用JRuby為你的客戶端助力

        預(yù)言了兩天,終于決定在我們的RCP客戶端中增加執(zhí)行JRuby的功能。說是預(yù)言其實(shí)也沒有什么好預(yù)言的,JRuby早有耳聞,Ruby也一直在學(xué)習(xí)。其實(shí)要解決的問題只有一個(gè)---解決Java實(shí)例如何給JRuby,然后有JRuby操作,其實(shí)不難,JRbuy官方的WIKI上有一個(gè)例子,但是那個(gè)例子有太多硬編碼的問題,稍稍改造,將硬編碼的內(nèi)容抽取到JRuby中,就好了~

        我想說的其實(shí)是在RCP中加入JRuby的作用是:

        實(shí)施人員只需要寫腳本就可以隨意操作界面上的任意東西;

        使產(chǎn)品更進(jìn)一步達(dá)到零二次開發(fā)的階段;

        使用JRuby來開發(fā)SWT的界面,還是有比較復(fù)雜,在熟悉SWT開發(fā)和JRuby的情況下畫一個(gè)比較復(fù)雜的界面時(shí)候就會(huì)非常復(fù)雜!這里還是建議使用類似于XSWT等XML界面描述語言,然后配合腳本完成功能。

    下面給出一個(gè)可以在運(yùn)行JRuby的SWTShell:

    package com.glnpu.jruby;

    import java.util.ArrayList;
    import java.util.List;

    import org.eclipse.swt.SWT;
    import org.eclipse.swt.events.SelectionAdapter;
    import org.eclipse.swt.events.SelectionEvent;
    import org.eclipse.swt.widgets.Button;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.widgets.Text;
    import org.jruby.Ruby;
    import org.jruby.javasupport.JavaEmbedUtils;
    import org.jruby.runtime.builtin.IRubyObject;

    public class RunJRUBY extends Shell {

        private RunJRUBY run;
        private Text text;
        /**
         * Launch the application
         * @param args
         */
        public static void main(String args[]) {
            try {
                Display display = Display.getDefault();
                RunJRUBY shell = new RunJRUBY(display, SWT.SHELL_TRIM);
                shell.open();
                shell.layout();
                while (!shell.isDisposed()) {
                    if (!display.readAndDispatch())
                        display.sleep();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        /**
         * Create the shell
         * @param display
         * @param style
         */
        public RunJRUBY(Display display, int style) {
            super(display, style);
            run = this;
            createContents();
        }

        /**
         * Create contents of the window
         */
        protected void createContents() {
            setText("SWT Application");
            setSize(500, 375);

            text = new Text(this, SWT.V_SCROLL | SWT.BORDER | SWT.WRAP | SWT.H_SCROLL);
            text.setBounds(0, 0, 492, 312);

            final Button button = new Button(this, SWT.NONE);
            button.addSelectionListener(new SelectionAdapter() {
                public void widgetSelected(final SelectionEvent e) {
                    Ruby runtime = Ruby.getDefaultInstance();
                    try {
                        //允許傳對(duì)象,作為參數(shù)給JRuby
                        IRubyObject rootRubyObject = JavaEmbedUtils.newRuntimeAdapter().eval( runtime, text.getText() );
                        JavaEmbedUtils.invokeMethod( runtime, rootRubyObject, "run", new Object[] {run}, null );
                        //不傳對(duì)象,直接運(yùn)行JRbuy
                        //runtime.evalScriptlet(text.getText());
                    } catch (Exception e1) {
                        System.err.println(e1.toString());
                        e1.printStackTrace();
                    }
                }
            });
            button.setText("button");
            button.setBounds(335, 326, 48, 22);
            //
        }

        @Override
        protected void checkSubclass() {
            // Disable the check that prevents subclassing of SWT components
        }

    }

    下面是可以執(zhí)行的JRuby代碼:

    require 'java'
    module SWTTest
      include_package 'org.eclipse.swt'
      include_package 'org.eclipse.swt.layout'
      include_package 'org.eclipse.swt.widgets'
      include_package 'org.eclipse.swt.events'
    end
        class TestDialog < SWTTest::Dialog
          @shell
          @parentShell
          def initialize shell
              super(shell, SWTTest::SWT::NONE)
              @parentShell = shell
              open
          end
          def open
              createContents()
              @shell.open();
              @shell.layout();       
          end
          def createContents
              @shell = SWTTest::Shell.new(@parentShell, SWTTest::SWT::DIALOG_TRIM | SWTTest::SWT::APPLICATION_MODAL)
              @shell.setSize(500, 375);
              @shell.setText("SWT Dialog");
              button = SWTTest::Button.new(@shell, SWTTest::SWT::PUSH)
              button.setText("Test Button 1")    
              button.setBounds(147, 116, 48, 22);
          end
        end
      class TestMain
          def run shell
              TestDialog.new shell
          end
      end
      TestMain.new

    在JRuby代碼的最下面有一個(gè)TestMain的類,主要是用于調(diào)用的~這一點(diǎn)是和其他的寫法不同的!

    至于它有多強(qiáng)大,就看大家怎么用了~而且java和JRuby是運(yùn)行在同一個(gè)JVM之上的,它可以使用此JVM下的所有對(duì)象!

    posted @ 2008-03-07 09:20 阿南 閱讀(1295) | 評(píng)論 (4)編輯 收藏
    微軟研發(fā):制勝策略(實(shí)用方法三)

       不要用年終考評(píng)來訂立學(xué)習(xí)目標(biāo),要利用年終考評(píng)來記錄個(gè)人的成長(zhǎng)。

        要讓每一位程序設(shè)計(jì)師都明白,寫出零錯(cuò)誤程序是很不容易的,所以應(yīng)該多花功夫用各種方法做最徹底的測(cè)試。

        糾正程序設(shè)計(jì)師以為加除錯(cuò)碼會(huì)花太多時(shí)間的觀念,應(yīng)該訓(xùn)練程序設(shè)計(jì)師第一個(gè)反應(yīng)是考慮加上除錯(cuò)碼是否有道理,第二是考慮加除錯(cuò)碼是否符合項(xiàng)目的目標(biāo)與工作的優(yōu)先級(jí)。

       不要讓凡事不能的態(tài)度阻礙了創(chuàng)新。

       不要讓程序設(shè)計(jì)師以為使用者并不在乎軟件的質(zhì)量。

       不要給使用者次品,寧愿延期交貨,務(wù)必追求質(zhì)量完美。

       程序設(shè)計(jì)師必須經(jīng)常以使用者的觀點(diǎn)來看自己寫的程序,程序設(shè)計(jì)師必須能體會(huì)使用者的感受。

       在包裝盒里的每一件東西,都是產(chǎn)品的一部分。

       將程序的可共享性當(dāng)作優(yōu)先考慮的目標(biāo)之一,否則程序設(shè)計(jì)師將經(jīng)常做重復(fù)的工作。

       從您的每件工作中創(chuàng)造最大的資源,不管是利用現(xiàn)有的杠桿,或是創(chuàng)造新的杠桿。

       如果進(jìn)度發(fā)生落后,那表示有個(gè)地方出錯(cuò)了。您應(yīng)該找出問題,并加以解決,不要一味要求組員加班,在問題沒有解決之前,加班是沒有用的。

       別誤信加班等于增加生產(chǎn)能力,長(zhǎng)期的加班只會(huì)傷害生產(chǎn)能力,對(duì)項(xiàng)目沒有幫助。

       周末是屬于組員私人的時(shí)間,不是公司的。公司不應(yīng)該以打敗競(jìng)爭(zhēng)對(duì)手為理由,要求員工周末加班。

       強(qiáng)調(diào)思考的重要性,而不是長(zhǎng)時(shí)間工作。

       訓(xùn)練開發(fā)小組懂得在正常工作時(shí)間內(nèi)掌握好工作的效率,不要讓他們超時(shí)工作,因?yàn)槌瑫r(shí)工作只是浪費(fèi)時(shí)間的假面具。

       與程序設(shè)計(jì)師共同研擬出一份每日活動(dòng)的時(shí)間表,把無法預(yù)期的臨時(shí)公務(wù)變成固定時(shí)間處理的事情,并且把程序開發(fā)的工作放在最優(yōu)先的地位,不要讓其他次要的事情干擾到寫程序。

       主管應(yīng)該把自己視為團(tuán)隊(duì)中的一分子,與其他人平等,而不是高高在上。

    posted @ 2008-03-05 12:54 阿南 閱讀(1215) | 評(píng)論 (0)編輯 收藏
    微軟研發(fā):制勝策略(實(shí)用方法二)

        用看程序的方式找錯(cuò),是既懶惰又無效率的方法;

    隨時(shí)睜大雪亮的眼睛,看看是不是有個(gè)懸而未決的問題,一定要有個(gè)人(或是由主管自己)來負(fù)責(zé)研究到底哪里出錯(cuò),也許這種研究既花時(shí)間又無聊,但總比災(zāi)難發(fā)生之后再來花好幾個(gè)星期收拾殘局要好得多。

        問了錯(cuò)的問題,而導(dǎo)致錯(cuò)的答案,訓(xùn)練自己?jiǎn)柍稣_的問題!

    如果您能很清楚告訴別人,您想要的究竟是什么,這樣別人才能給您真正需要的幫助,而不是做一些似是而非的虛工。

        勉強(qiáng)自己接下不可能完成的任務(wù),實(shí)在是以長(zhǎng)痛代替短痛的做法,而且長(zhǎng)痛的是整個(gè)團(tuán)隊(duì),該拒絕的時(shí)候絕對(duì)不能含糊;

        不要為了討好別人而傷害雙方的工作進(jìn)程,您永遠(yuǎn)要根據(jù)自己的目標(biāo),做適當(dāng)?shù)臎Q策。

        必須保護(hù)項(xiàng)目不受外界的左右,尤其是當(dāng)這種操控來自特權(quán)人物之手。

        副產(chǎn)品對(duì)公司或產(chǎn)品都沒有策略上的價(jià)值,充其量只是一種消費(fèi)者回饋。

        不值得開發(fā)的功能就不要做。

        軟件產(chǎn)品的開發(fā),不能只為了有趣、挑戰(zhàn)性,或是夠有個(gè)性夠令人眩目。

        遵循標(biāo)準(zhǔn)重于一切,特別是關(guān)于使用者界面的部分。

        確定您所要求的報(bào)告真的值得屬下暫停工作,花那么多時(shí)間去寫。

        請(qǐng)注意定期會(huì)議的價(jià)值,確定它值得每個(gè)人放下手上的工作。

        召開任何會(huì)議之前,請(qǐng)確定本次會(huì)議的目的是什么,達(dá)成這個(gè)目的的條件是什么,然后,務(wù)必達(dá)到開會(huì)的目的。

        不要利用進(jìn)程表來驅(qū)使項(xiàng)目的進(jìn)行,這對(duì)小組的士氣傷害太大了。

        讓日程表維持適度的緊迫,但又是可以做到的,好讓組員振奮、不松懈,專心致力于項(xiàng)目的推進(jìn)。

        絕對(duì)不要草率定出不可能的期限,導(dǎo)致組員為了趕進(jìn)度而損害產(chǎn)品的質(zhì)量。

        把長(zhǎng)期的大項(xiàng)目,分成幾個(gè)完整而獨(dú)立的小項(xiàng)目,各小項(xiàng)目必須有一個(gè)主題。

        為了保持創(chuàng)意的活力和團(tuán)隊(duì)士氣,必須讓每一個(gè)小項(xiàng)目都有令人興奮的結(jié)果。

        不要讓程序設(shè)計(jì)師的學(xué)習(xí)停滯不前,要讓程序設(shè)計(jì)師有機(jī)會(huì)磨練不同領(lǐng)域的技術(shù),培養(yǎng)十八般武藝樣樣精通的組員。

        訓(xùn)練新進(jìn)程序設(shè)計(jì)師時(shí),先培養(yǎng)他對(duì)整個(gè)公司所有項(xiàng)目都有價(jià)值的技術(shù),然后才培養(yǎng)本項(xiàng)目獨(dú)有的技術(shù)。

        不要舍不得放您最優(yōu)秀的程序設(shè)計(jì)師到別的項(xiàng)目去。如果他在您的項(xiàng)目已經(jīng)沒有新的東西可學(xué),為了公司和他個(gè)人的前途,您應(yīng)該把他推薦到別的項(xiàng)目,讓他的成長(zhǎng)永不間斷。

        確定每位組員、每?jī)蓚€(gè)月都有一項(xiàng)技術(shù)上進(jìn)步。

        一發(fā)現(xiàn)某處需要改進(jìn),就立即采取更正的行動(dòng)。

    posted @ 2008-03-04 08:47 阿南 閱讀(1390) | 評(píng)論 (1)編輯 收藏
    微軟研發(fā):制勝策略(實(shí)用方法一)

    首先還是先看一下書評(píng)。

    下面是來自china-pub的書評(píng):

    作者詳細(xì)描述了他在美國(guó)領(lǐng)導(dǎo)項(xiàng)目的各種實(shí)際的策略方法,教您如何開發(fā)高質(zhì)量的軟件,而且絕不延誤。本書是為每一位從事研發(fā)工作的朋友而寫,相信您在讀過本書之后,一定急于推薦給您的主管、同事和您的朋友。

        卓越的領(lǐng)導(dǎo)者從不同的角度看世界。若是公司被大火燒得精光,他非但不為丟飯碗驚慌,反而利用火焰來燒烤一頓大餐。當(dāng)每個(gè)人都搖頭離去,卓越的領(lǐng)導(dǎo)者仍有充分的信心保持樂觀,對(duì)每件事都從正面角度來思考。就因?yàn)榉彩露伎垂饷髅妫吭降念I(lǐng)導(dǎo)者并不把失敗當(dāng)失敗,反將其當(dāng)作學(xué)習(xí)克服障礙的經(jīng)驗(yàn)。正因如此,卓越的領(lǐng)導(dǎo)者樂意嘗試各種稀奇古怪的想法,并從中獲得重大的突破,即使不成功,他只把這次經(jīng)驗(yàn)當(dāng)成獲得信息的方式之一。這種領(lǐng)導(dǎo)人不一定要有經(jīng)驗(yàn),而是需要強(qiáng)烈的進(jìn)取心和明確的理想,能夠?qū)⒗硐肱c他人溝通,鼓舞他人共同追尋理想的能力,再加上一點(diǎn)機(jī)會(huì),這就是能將理想實(shí)現(xiàn)的卓越領(lǐng)導(dǎo)者。

        每當(dāng)有人完成了一項(xiàng)新的功能或特色,就發(fā)個(gè)e -mail 給大家。

    例如:

    “我已完成Faxmangler 的搜尋與取代功能。Frank”
    主管應(yīng)該看一下結(jié)果,然后回一個(gè):
    “我檢查過F a x m a n g l e r的搜尋與取代,不太順暢,請(qǐng)?jiān)傩薷摹ubie”
    或是:
    “很好,繼續(xù)加油!Hubie”
    想想看,如果大家經(jīng)常收送這類正面的e - m a i l,一定會(huì)覺得充滿干勁,這和可恨的進(jìn)度報(bào)告多么不同!程序設(shè)計(jì)師會(huì)很樂意看見這類的好消息,當(dāng)自己送出完成工作的信息時(shí),也會(huì)很有成就感;沒有人會(huì)覺得這是很討厭的報(bào)告。

        每當(dāng)進(jìn)度快要落后了,就到我的辦公室私下討論原因,我們一起開動(dòng)腦筋尋求解決之道。

    例如:

    當(dāng)某位程序設(shè)計(jì)師覺得自己可能要落后了,我會(huì)和他談,研究將來如何避免這種事情。是我們?cè)谥贫ㄟM(jìn)程時(shí)疏漏了某一個(gè)重要環(huán)節(jié)嗎?或是時(shí)間表定得太樂觀了?是不是有個(gè)錯(cuò)蟲( b u g )在作祟,害得程序很難寫或無法測(cè)試?不論問題是什么,我們一定想辦法解決掉,并且預(yù)防它將來再發(fā)生。

        盡可能減少項(xiàng)目中小組彼此間的依賴。

        目標(biāo)越是明確,達(dá)成目標(biāo)的過程就會(huì)越有效率。

        建立最適當(dāng)?shù)某绦蛟O(shè)計(jì)優(yōu)先考慮順序,并且讓所有的程序設(shè)計(jì)師確實(shí)遵守。

    排出一個(gè)優(yōu)先級(jí)表:

    • 體積大小(size)
    • 速度(speed)
    • 堅(jiān)固性(robustness)
    • 安全性(safety)
    • 可測(cè)試性(testability)
    • 容易維護(hù)(maintainability)
    • 簡(jiǎn)潔(simplicity)
    • 再用性(reusability)
    • 可移植性(portability)

       一旦您掌握了這個(gè)概念,把它應(yīng)用在項(xiàng)目上,您可以大聲說自己確實(shí)是在聰明地工作,而不是辛苦地工。

        一發(fā)現(xiàn)Bug就立即清除掉,別拖延。

    作者給出的提示:

    錯(cuò)蟲愈晚清除,時(shí)間花得愈多。

    在開發(fā)的過程就立即除蟲,可以讓您早些學(xué)到經(jīng)驗(yàn),然后就不會(huì)再犯同樣的錯(cuò)誤;相反地,如果到了項(xiàng)目后期才發(fā)現(xiàn),您可能已經(jīng)犯過多次同樣的錯(cuò)誤而不自知。

    發(fā)現(xiàn)錯(cuò)蟲而立即除錯(cuò)是一種緩沖器,提醒那些講求快速而不夠謹(jǐn)慎的程序設(shè)計(jì)師,以后多加小心。

    若能保持沒有任何錯(cuò)蟲,您就能比較準(zhǔn)確估出項(xiàng)目的完成時(shí)間。

    要求錯(cuò)蟲隨時(shí)發(fā)現(xiàn)隨時(shí)改,等于是在開發(fā)過程中引進(jìn)一個(gè)小小的質(zhì)量管理機(jī)制,多方的防微杜漸,保護(hù)產(chǎn)品的正確性。

        學(xué)習(xí)前人的經(jīng)驗(yàn);

        好方法要讓大家分享;

        項(xiàng)目只要有偏差,就需要調(diào)整,絕對(duì)不可以放任自流!

        定期暫停手邊的工作,然后往前思考,隨時(shí)做必要的修正,以避免未來的大障礙。

    有什么事情是我今天能做,而且可以幫助項(xiàng)目在未來幾個(gè)月內(nèi)順利進(jìn)行的?

    posted @ 2008-03-03 08:34 阿南 閱讀(1438) | 評(píng)論 (0)編輯 收藏
    微軟團(tuán)隊(duì):成功秘訣(總結(jié))

    總結(jié)本書中的54條法則得到:

    1. 建議一只和諧的團(tuán)隊(duì);
    2. 給團(tuán)隊(duì)一個(gè)明確的目標(biāo),讓大家都知道這個(gè)目標(biāo)并把它印入腦海;
    3. 讓品保人員明白自己不僅僅是為了Bug而加入團(tuán)隊(duì)的;
    4. 建立合適的檢查點(diǎn)和里程碑,并利用檢查點(diǎn)和里程碑檢驗(yàn)團(tuán)隊(duì)的健康度;
    5. 不要害怕延誤,要不斷的修正方法但不要過度的修正目標(biāo);
    6. 努力讓團(tuán)隊(duì)中成員產(chǎn)生共鳴;

    希望大家共勉!

    posted @ 2008-03-02 09:29 阿南 閱讀(1419) | 評(píng)論 (1)編輯 收藏
    微軟團(tuán)隊(duì):成功秘訣(4)

    法則二十七:

       Be like the doctors    用醫(yī)生的方法

        當(dāng)病人已經(jīng)藥石罔效時(shí),醫(yī)生通常會(huì)對(duì)病情有所保留,避免病人太過悲觀或恐懼,并且盡量鼓勵(lì)病人保持希望,最好能讓病人有個(gè)期望完成的目標(biāo)。

        醫(yī)生絕對(duì)不會(huì)斬釘截鐵地?cái)嘌允裁瘁t(yī)療行為一定會(huì)有什么樣的結(jié)果,反而是以
    一種自在且充滿信心的口吻說:“試試看吧,一切都還沒有確定呢。

        另外一件應(yīng)該向醫(yī)生學(xué)習(xí)的事情是,即使是再小再簡(jiǎn)單的醫(yī)療行為,都帶著幾分風(fēng)險(xiǎn),所以醫(yī)生會(huì)說:“當(dāng)然,任何情況都是有可能的,治愈率再高我都不能跟你說百分之百?zèng)]問題。

    法則二十八:

        Remember the triangle:features, resources, times    軟件開發(fā)金三角:特色、資源和時(shí)間

        作為一位軟件開發(fā)的領(lǐng)導(dǎo)人,你得集中注意力在三件事情:資源(人和錢)、特色(產(chǎn)品與其品質(zhì))和時(shí)間。這三件事是軟件開發(fā)的核心,其他的都是外圍。

        資源、特色和時(shí)間是三角形的三個(gè)邊,任何一邊的變化,都會(huì)影響到另外一邊或兩邊。所以如果時(shí)間落后了,去看你的三角形,看看對(duì)特色和資源的影響;當(dāng)有人談到可以增加什么功能特色時(shí),你得立刻談起時(shí)間和資源,以顯得你思慮周
    詳反應(yīng)敏捷。所以,管理者的第一要?jiǎng)?wù)是把這個(gè)三角形放在心里,隨時(shí)利用這個(gè)模式來思考問題,你會(huì)發(fā)現(xiàn)答案都在這個(gè)三角形內(nèi)。

    法則二十九:

        Don't know what you don't know    不懂別裝懂

    法則三十:

        Don't go dark    建立適當(dāng)?shù)臋z查點(diǎn)

    法則三十一:

        Beware of a guy in a room    留心沒有檢查點(diǎn)的組員

    法則三十二:

        If you build it, it will ship    軟件要經(jīng)常建構(gòu),就能順利推出

    法則三十三:

       Get a known state and stay there    掌握實(shí)際情況

    法則三十四:

        Use ZD milestones    零缺點(diǎn)里程碑

        零缺點(diǎn)不代表軟件中沒有錯(cuò)蟲,也不表示沒有遺漏的功能,而是指團(tuán)隊(duì)的成品達(dá)到了事先規(guī)劃的品質(zhì)水準(zhǔn),也經(jīng)過測(cè)試驗(yàn)證,就是零缺點(diǎn)里程碑。

    法則三十五:

       Nobody reaches the ZD milestone until everybody does    所有組員一起到達(dá)零缺點(diǎn)里程碑

    法則三十六:

        Every milestone deserves a no-blame postmortem    完成每個(gè)里程碑后,心平氣和地檢討

    法則三十七:

        Stick to both the letter and the spirit of the milestones    把握里程碑的實(shí)質(zhì)意義與精神

    法則三十八:

        Get a handle on "normal"    培養(yǎng)正常的團(tuán)隊(duì)運(yùn)作

    法則三十九:

        A handful of milestones is a handful    里程碑不宜太多,才好掌握

    法則四十:

        Every little milestone has a meaning (story) all its own    每一個(gè)里程碑應(yīng)有專屬的宗旨

    法則四十一:

        Look for the natural milestones    尋找自然出現(xiàn)的里程碑

    以下是六種自然出現(xiàn)的里程碑:
    1. 產(chǎn)品設(shè)計(jì)趨于穩(wěn)定。
    2. 中間產(chǎn)品被明確定義。
    3. 團(tuán)隊(duì)真正了解要花多少時(shí)間和努力才能完成目標(biāo)(通常這會(huì)發(fā)生很多次,而且多半是進(jìn)度落后的時(shí)候)。
    4. 產(chǎn)品設(shè)計(jì)被刪減,或是資源增加,或是進(jìn)度延誤,
    或是三者同時(shí)發(fā)生。
    5. 開發(fā)活動(dòng)停止。
    6. 產(chǎn)品進(jìn)入除錯(cuò)或穩(wěn)定階段。

    法則四十二:

        When you slip, don't fall    如果滑了一跤,別就此倒地不起

    1.     進(jìn)度落后與道德無關(guān),請(qǐng)切記!
    2.     不要隱瞞事實(shí)。
    3.     化阻力為助力,利用進(jìn)度落后來激發(fā)效率。

        進(jìn)度落后不是問題,被進(jìn)度落后嚇倒才是問題。進(jìn)度落后并不代表產(chǎn)品的難度太高而無法開發(fā)。但是如果進(jìn)度已經(jīng)落后卻未被察覺,那表示組員們不思考、不觀察、不討論,此時(shí)組織可說是瀕臨瓦解了。

        善用你的遲延,這是最能看出你領(lǐng)導(dǎo)能力的時(shí)候,此時(shí)也是組員最脆弱也最需要你的時(shí)候,在這個(gè)時(shí)候組員最能把你的話聽進(jìn)去,此時(shí)組員的學(xué)習(xí)能力最強(qiáng)。如果你在辦公室內(nèi)激動(dòng)得大喊大叫,指天罵地,那就錯(cuò)失了贏得組員的心的大好機(jī)會(huì)。你必須說:“O K,進(jìn)度落后了,讓我們來看看問題出在那里???今天下午五點(diǎn)在會(huì)議室,我們要檢討每一個(gè)細(xì)節(jié),問題一定要設(shè)法解決!”當(dāng)組員了解到你不是企圖卸責(zé)或算帳,而是真誠(chéng)地想解決問題,就會(huì)樂意把一切開誠(chéng)布公地?cái)傞_來談,大家一起研究問題,從各種角度去設(shè)法克服問題。“進(jìn)度落后”反而變成大家寶貴的成長(zhǎng)經(jīng)驗(yàn)。

    法則四十三:

        Don't trade a bad date for an equally bad date    不要因?yàn)檫M(jìn)度落后而更改最后期限

        進(jìn)度落后的程度是與計(jì)劃的不確定性成正比。

    法則四十四:

        After a slip, hit the next milestone, no matter what延誤了這個(gè)里程碑,就一定要如期到達(dá)下一個(gè)里程碑

        我們必須明白,每一次的延誤,就是你和團(tuán)隊(duì)信心的一次受挫,所以,延誤這個(gè)里程碑時(shí),最好的補(bǔ)救辦法就是無論如何絕不延誤下一個(gè)里程碑。團(tuán)隊(duì)必須挽回對(duì)自己的信心和對(duì)理想的承諾;因此,下一個(gè)任務(wù)必須準(zhǔn)時(shí)完成的意義更重大,團(tuán)隊(duì)需要重建信心。

    法則四十五:

       A good slip is a net positive   把延誤當(dāng)作寶貴的學(xué)習(xí)機(jī)會(huì)

    法則四十六:

        See the forest    見樹亦見林

        如果本項(xiàng)目有六個(gè)模塊,各有9 0 %的部分已經(jīng)完成,那么你已經(jīng)完成了5 4 %。每個(gè)模塊完成了九成,聽起來是個(gè)挺不錯(cuò)的成績(jī),但不能當(dāng)成整個(gè)項(xiàng)目完成了百分之九十,它們之間不是相加的關(guān)系。你必須“見樹亦見林”。如果任何一個(gè)模塊完成比率是零,那么整個(gè)項(xiàng)目的完成率也是零。

    法則四十七:

        The world changes, so should you    世界在變,所以你也得跟著改變

        雖然你想做些改變,你未必有勇氣實(shí)行。

        偉大的軟件必定只有一個(gè)中心思想,至于品質(zhì)能夠?qū)崿F(xiàn)到什么程度,依賴領(lǐng)導(dǎo)者能否帶領(lǐng)團(tuán)隊(duì)融合無數(shù)個(gè)小而重要的改變。如果你能在混亂中辨識(shí)出對(duì)項(xiàng)目最有意義的改變,并且引導(dǎo)團(tuán)隊(duì)去適應(yīng)它,將它融入團(tuán)隊(duì)的精神中,將來就會(huì)在產(chǎn)品中表現(xiàn)出這項(xiàng)改變,呈現(xiàn)在顧客眼前。

    法則四十八:

        Violate at least one sacred cow    關(guān)懷多于要求

    法則四十九:

       Beta is not the time to change    Beta測(cè)試版不是修改功能的時(shí)候

    法則五十:

        The Beta is for spin development    Beta測(cè)試是暖身活動(dòng)

    法則五十一:

        Triage ruthlessly    急救術(shù)

    法則五十二:

       Don't shake the Jell-0    小心保持軟件的穩(wěn)定

    法則五十三:

        Compete with the superior story    偉大的軟件應(yīng)該有一個(gè)偉大的故事

    法則五十四:

       Create a winning image    建立贏家形象

    posted @ 2008-02-29 18:00 阿南 閱讀(1383) | 評(píng)論 (1)編輯 收藏
    JFace進(jìn)度條使用經(jīng)驗(yàn)一則

        我討論的進(jìn)度條主要是JFace的進(jìn)度條,RCP已經(jīng)提供了完善的Job組件,為什么還要用JFace的進(jìn)度條呢?原因是我要在登陸界面上做進(jìn)度處理,也就是使用Eclipse3.3提供的AbstractSplashHandler特性,可以將原有的啟動(dòng)畫面替換成為一個(gè)登陸界面,啟動(dòng)這個(gè)登陸界面時(shí),Eclipse的Platform此時(shí)還沒有啟動(dòng),所以不能使用RCP本身的Job組件了。

        由于是一個(gè)檢測(cè)服務(wù)器是否聯(lián)通的測(cè)試,所以并不知道測(cè)試的真實(shí)時(shí)間,所以就是要使用“傻瓜進(jìn)度條”了,也就是反復(fù)走的進(jìn)度條陳剛的代碼如下:

    button.addSelectionListener(new SelectionAdapter() {
                private boolean stopFlag;// 停止標(biāo)志

                private void go() {
                    for (int i = 0; i < 10; i++) {// 循環(huán)10次,每次間隔一秒
                        System.out.println("第" + (i + 1) + "個(gè)任務(wù)執(zhí)行完畢");
                        if (stopFlag) {// 監(jiān)控是否要讓停止后臺(tái)任務(wù)
                            System.out.println("被中斷了");
                            return;
                        }
                        try {
                            Thread.sleep(1000);
                        } catch (Throwable t) {}
                    }
                    stopFlag = true;// 執(zhí)行完畢后把標(biāo)志位設(shè)為停止,好通知給進(jìn)度框
                    System.out.println("全部任務(wù)執(zhí)行完畢");
                }

                public void widgetSelected(SelectionEvent e) {
                    stopFlag = false;// 每次都設(shè)初值為false
                    new Thread() {// 把后臺(tái)任務(wù)放到一個(gè)新開線程里執(zhí)行
                        public void run() {
                            go();
                        }
                    }.start();
                    showProgressDialog();// 打開一個(gè)進(jìn)度框
                }

                private void showProgressDialog() {
                    IRunnableWithProgress runnable = new IRunnableWithProgress() {
                        public void run(IProgressMonitor monitor) {
                            monitor.beginTask("正在執(zhí)行中......", 30);
                            int i = 0;
                            while (true) {
                                // 監(jiān)聽是否單擊了進(jìn)度框的“取消”按鈕,stopFlag則是監(jiān)聽后臺(tái)任務(wù)是否停止
                                if (monitor.isCanceled() || stopFlag) {
                                    stopFlag = true; // 單擊了“取消”按鈕要設(shè)標(biāo)志位為停止,好通知后臺(tái)任務(wù)中斷執(zhí)行
                                    break;// 中斷處理
                                }
                                // i到30后清零。并將進(jìn)度條重新來過
                                if ((++i) == 30) {
                                    i = 0;
                                    monitor.beginTask("正在執(zhí)行中......", 30);
                                }
                                // 進(jìn)度條每前進(jìn)一步體息一會(huì),不用太長(zhǎng)或太短,時(shí)間可任意設(shè)。
                                try {
                                    Thread.sleep(99);
                                } catch (Throwable t) {}
                                monitor.worked(1);// 進(jìn)度條前進(jìn)一步
                            }
                            monitor.done();// 進(jìn)度條前進(jìn)到完成
                        }
                    };
                    try {
                        new ProgressMonitorDialog(s).run(true, true, runnable);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });

     

        主要是使用兩個(gè)線程交替使用,第一個(gè)線程處理業(yè)務(wù),第二個(gè)線程監(jiān)控第一個(gè)線程查看它是否結(jié)束,如果結(jié)束或者被點(diǎn)擊cancele則停止進(jìn)度條的進(jìn)程,如果一直沒有關(guān)閉的指令,則反復(fù)開始---累加---結(jié)束---開始---累加---結(jié)束。

        我們幾乎是把陳剛的代碼原原本本的抄襲了一下,僅僅是替換了go()中的內(nèi)容,但是發(fā)現(xiàn)一個(gè)問題

    new ProgressMonitorDialog(s).run(true, true, runnable);
    使用此句的話,JFace的線程永遠(yuǎn)不會(huì)啟動(dòng);

    替換為

    new ProgressMonitorDialog(s).run(false, true, runnable);
    使用此句的話,JFace的線程可以啟動(dòng),運(yùn)行正常,但是cancele不能響應(yīng),UI界面完全卡死!

        第一個(gè)參數(shù)的名字fork~乍看去,什么意思都沒有,但是看看API才發(fā)現(xiàn)內(nèi)藏很大的玄機(jī),如果為true則此線程為一個(gè)非UI線程,大家知道非UI線程是不會(huì)阻塞UI的;如果為false則此線程為一個(gè)UI線程,大家也知道UI線程如果使用不當(dāng)很容易阻塞UI的。

        關(guān)鍵的問題是我們和陳剛的代碼幾乎一摸一樣他的進(jìn)度條就啟動(dòng),我的進(jìn)度條就不啟動(dòng)!為什么?(這點(diǎn)至今不明白!)

        詳查API發(fā)現(xiàn)如果fork為false的時(shí)候還是另有洞天的:

    This implementation of IRunnableContext#run(boolean, boolean, IRunnableWithProgress) runs the given IRunnableWithProgress using the progress monitor for this progress dialog and blocks until the runnable has been run, regardless of the value of fork. The dialog is opened before the runnable is run, and closed after it completes. It is recommended that fork is set to true in most cases. If fork is set to false, the runnable will run in the UI thread and it is the runnable's responsibility to call Display.readAndDispatch() to ensure UI responsiveness.

    API中說的很明白,如果fork為false時(shí)需要在線程中調(diào)用Display.readAndDispatch()方法,以避免UI被阻塞!

    大家如果在JFace的開發(fā)中如果使用了進(jìn)度條,發(fā)現(xiàn)UI被阻塞的話,就想想我哦!!!呵呵只用在進(jìn)程中調(diào)用一下Display.readAndDispatch()就解決了!

    posted @ 2008-02-29 08:47 阿南 閱讀(3824) | 評(píng)論 (6)編輯 收藏
    微軟團(tuán)隊(duì):成功秘訣(3)

    設(shè)計(jì)

       軟件的設(shè)計(jì)─每一位團(tuán)隊(duì)成員都必須參與─這表示團(tuán)隊(duì)整體對(duì)功能需求的了解程度。

        軟件設(shè)計(jì)的第一要訣是:將全團(tuán)隊(duì)中最好的想法組織起來,去滿足顧客內(nèi)心最深處的需要。(帶領(lǐng)團(tuán)隊(duì)做案例研討,帶領(lǐng)大家思考如何解決一切的疑難,讓每一件事都在該做的時(shí)候做好。)

    法則十九:

        Go for greatness    追求卓越

    法則二十:

        State your theme    設(shè)定主題

        重點(diǎn)是產(chǎn)品的功能特色不能像是一袋子隨便抓過來的東西,應(yīng)該把與主題無關(guān)的東西都刪掉,而且你的目標(biāo)也必須符合統(tǒng)一性(unity of purpose)才行,這一點(diǎn)是與主題互為一體的兩面。將資金投注在這個(gè)目標(biāo)上,讓所有的人都完全明白這個(gè)目標(biāo),并且為這個(gè)目標(biāo)努力,做得到這些的話,你的產(chǎn)品就會(huì)完全包含這個(gè)目標(biāo)。

    法則二十一:

        Minimize dependencies    不要倚賴不確定的事

    法則二十二:

        Propitiate the gods    平息顧客的慍怒

    法則二十三:

       Portability is for canoes.    軟件的可移植性

    法則二十四:

       Design time at design time    在設(shè)計(jì)時(shí)將時(shí)間因素考慮在內(nèi)

    開發(fā)

    法則二十五:

        Don't accept dictation    拒絕不合理的命令

        千萬不要一味的唯命是從,在必要的時(shí)候拒絕!敢于拒絕!

        如果在上位者不讓真正執(zhí)行任務(wù)的人來估計(jì)所需的進(jìn)度,那就是專制。

        開發(fā)進(jìn)度表應(yīng)該由下而上來擬定,每一個(gè)人負(fù)責(zé)自己的工作,也負(fù)責(zé)設(shè)定它的時(shí)間表,負(fù)責(zé)準(zhǔn)時(shí)完成工作。責(zé)任和充分授權(quán)是一體的兩面,二者兼?zhèn)洳拍軘M出合理的開發(fā)計(jì)劃。一種非常有趣的進(jìn)度估算方法!

    法則二十六:

        Now go play    把工作當(dāng)作游戲吧

    posted @ 2008-02-29 08:28 阿南 閱讀(1263) | 評(píng)論 (0)編輯 收藏
    主站蜘蛛池模板: 日韩在线看片免费人成视频播放| 亚洲中文字幕成人在线| 亚洲国产综合91精品麻豆| 亚洲AV成人片无码网站| 日本黄网站动漫视频免费| 精品亚洲视频在线观看| 亚洲老熟女五十路老熟女bbw| 女人隐私秘视频黄www免费| 日本二区免费一片黄2019| 久久国产亚洲高清观看| 国产日韩在线视频免费播放| 免费黄色大片网站| 亚洲一区影音先锋色资源| a一级爱做片免费| 免费无码看av的网站| 亚洲国产日韩女人aaaaaa毛片在线 | 在线亚洲精品福利网址导航| 亚洲国产成人精品无码区二本| 99re6在线视频精品免费下载| 自拍偷自拍亚洲精品被多人伦好爽| 亚洲丶国产丶欧美一区二区三区| 最近2019年免费中文字幕高清| 亚洲人成精品久久久久| 免费看内射乌克兰女| 日韩视频免费一区二区三区| 亚洲国产中文在线二区三区免| 亚洲免费视频网站| 亚洲乱码无码永久不卡在线| 一级毛片成人免费看a| 国产在线ts人妖免费视频| 亚洲一区二区三区高清在线观看| 免费在线视频你懂的| 亚洲国产精品久久66| 国产美女视频免费观看的网站| 国产男女猛烈无遮档免费视频网站| 亚洲第一男人天堂| 性短视频在线观看免费不卡流畅| 91久久亚洲国产成人精品性色| 性xxxxx大片免费视频| 亚洲av中文无码乱人伦在线r▽ | 在线观看特色大片免费视频|