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

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

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

    大夢想家

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

    2007年11月1日

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

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

    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 (");
    具體是否可以解決,還要看一會兒的部署情況。

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

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

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

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

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

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

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

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

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

        B:“… …”

        A:“說說看吧~”

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

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

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

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

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

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

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

        無狀態(tài)會話Bean發(fā)布為WebService是非常有意義的,因為如果我們將每一個EJB模塊按照SOA的思想做成一個一個獨立的服務模塊(這里不討論SCA,我認為Apache的SCA框架還不夠強大,文檔還不夠全面),同樣的代碼在JavaEE體系之內(nèi)的應用程序可以直接使用EJB3直接訪問,JavaEE體系之外的應用程序可以直接使用WebService訪問,這一點是非常有意義的。

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

        網(wǎng)上有大量的使用EJB3發(fā)布WebService的教程,但是這些教程都是一個人寫的,基本上沒有太大的參考價值。最重要的是,他寫的元注釋都是寫在實現(xiàn)類上的,接口上沒有做任何描述。這種做法有兩個問題,第一如果你的會話Bean使用了EM,那么麻煩了,JAXB在做綁定的時候不認識接口;第二WSDL文件的描述實際上應該是基于接口的描述,應該和實現(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ù)模@點會很麻煩,要用必須用實現(xiàn)類。

    看看我的代碼:

    接口:

     

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

     

    實現(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 {

     

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

    這個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文件。這樣很容易將會話Bean變成WS~一樣的代碼兩樣的功能,超值!

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

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

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

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

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

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

    posted @ 2009-07-01 10:13 阿南 閱讀(1991) | 評論 (1)編輯 收藏
    不怕錯,就怕不認錯

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

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

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

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

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

       粗心大意,老犯錯!

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

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

       場景描述:

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

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

        在操作B表的時候需要處理異常;

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

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

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

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


    重新啟動應用程序,太復雜,而且上次打開的參數(shù)都會丟失。

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

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

        這個問題非常的重要!
        做過RCP開發(fā)的朋友應該都遇到過,使用AbstractSplashHandler做的登陸界面,在windows的任務欄上面是不會顯示的,這個問題讓客戶用起來很麻煩,總是動不動就找不到登陸界面了!現(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

    稍稍進行改造,就可以了~

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

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

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

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

    我見過最好的軟件界面繪制工具http://www.balsamiq.com/
    真正能達到又快又好!





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

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

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

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

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

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

  • 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è)的,可流傳的”,我估計這本書上市的時間應該很近了,而且官方的PDF版本也會同步推出的~

    喜歡的朋友可以下下來看看,寫的很詳細,個人認為是本好書,而且此作者應該是Eclipse基金會的人,所以對OSGI的理解也不錯有什么問題~

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

    posted @ 2008-04-18 12:41 阿南 閱讀(1640) | 評論 (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ù)庫中,在后面加上commit;也是沒有用處的,提示的效果是SQL并沒有結(jié)束,sqlplus并沒有真正執(zhí)行。

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

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

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

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

        Shell.open()非常重要!

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

       JVM都會直接退出~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)絡也沒有解決辦法,剛開始以為是JVM版本的問題,于是換了3個版本都是同樣的問題~真是郁悶!

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

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

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

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

    尊敬的朋友,
    非常感謝您在4月1日積極參與谷歌人肉搜索志愿者招聘,這是谷歌于2008年4月1日"愚人節(jié)"推出的讓大家"會心一笑 暫解煩憂"的小笑話,在此謹祝大家"愚人節(jié)"快樂,天天快樂。
    如果您對谷歌公司招聘感興趣,歡迎進一步登錄我們的招聘網(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)于人肉搜索

    什么是人肉搜索?

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

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

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

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

    人肉搜索招聘需求

    人肉搜索志愿者管理專員

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

    能力要求:

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

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

    人肉搜索志愿者(兼職)

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

    能力要求:

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

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

    致獵頭公司:對于未簽約的獵頭公司提供的簡歷,谷歌將不支付任何費用。

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

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

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

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

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

        關(guān)注過上一篇文章的朋友,基本都對最后說到的微軟要支持SWT的開發(fā)提出了不少自己的看法。
        下面我們再來看看來自cnBate.com的新聞:

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

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

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

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

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

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

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

    posted @ 2008-03-20 12:46 阿南 閱讀(4202) | 評論 (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) | 評論 (2)編輯 收藏
    EclipseCON2008 only 1 week left!

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

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

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

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

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

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

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

    下面給出一個可以在運行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 {
                        //允許傳對象,作為參數(shù)給JRuby
                        IRubyObject rootRubyObject = JavaEmbedUtils.newRuntimeAdapter().eval( runtime, text.getText() );
                        JavaEmbedUtils.invokeMethod( runtime, rootRubyObject, "run", new Object[] {run}, null );
                        //不傳對象,直接運行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代碼的最下面有一個TestMain的類,主要是用于調(diào)用的~這一點是和其他的寫法不同的!

    至于它有多強大,就看大家怎么用了~而且java和JRuby是運行在同一個JVM之上的,它可以使用此JVM下的所有對象!

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

       不要用年終考評來訂立學習目標,要利用年終考評來記錄個人的成長。

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

        糾正程序設(shè)計師以為加除錯碼會花太多時間的觀念,應該訓練程序設(shè)計師第一個反應是考慮加上除錯碼是否有道理,第二是考慮加除錯碼是否符合項目的目標與工作的優(yōu)先級。

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

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

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

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

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

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

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

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

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

       周末是屬于組員私人的時間,不是公司的。公司不應該以打敗競爭對手為理由,要求員工周末加班。

       強調(diào)思考的重要性,而不是長時間工作。

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

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

       主管應該把自己視為團隊中的一分子,與其他人平等,而不是高高在上。

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

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

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

        問了錯的問題,而導致錯的答案,訓練自己問出正確的問題!

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

        勉強自己接下不可能完成的任務,實在是以長痛代替短痛的做法,而且長痛的是整個團隊,該拒絕的時候絕對不能含糊;

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

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

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

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

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

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

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

        請注意定期會議的價值,確定它值得每個人放下手上的工作。

        召開任何會議之前,請確定本次會議的目的是什么,達成這個目的的條件是什么,然后,務必達到開會的目的。

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

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

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

        把長期的大項目,分成幾個完整而獨立的小項目,各小項目必須有一個主題。

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

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

        訓練新進程序設(shè)計師時,先培養(yǎng)他對整個公司所有項目都有價值的技術(shù),然后才培養(yǎng)本項目獨有的技術(shù)。

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

        確定每位組員、每兩個月都有一項技術(shù)上進步。

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

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

    首先還是先看一下書評。

    下面是來自china-pub的書評:

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

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

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

    例如:

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

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

    例如:

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

        盡可能減少項目中小組彼此間的依賴。

        目標越是明確,達成目標的過程就會越有效率。

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

    排出一個優(yōu)先級表:

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

       一旦您掌握了這個概念,把它應用在項目上,您可以大聲說自己確實是在聰明地工作,而不是辛苦地工。

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

    作者給出的提示:

    錯蟲愈晚清除,時間花得愈多。

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

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

    若能保持沒有任何錯蟲,您就能比較準確估出項目的完成時間。

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

        學習前人的經(jīng)驗;

        好方法要讓大家分享;

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

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

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

    posted @ 2008-03-03 08:34 阿南 閱讀(1437) | 評論 (0)編輯 收藏
    微軟團隊:成功秘訣(總結(jié))

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

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

    希望大家共勉!

    posted @ 2008-03-02 09:29 阿南 閱讀(1418) | 評論 (1)編輯 收藏
    微軟團隊:成功秘訣(4)

    法則二十七:

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

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

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

        另外一件應該向醫(yī)生學習的事情是,即使是再小再簡單的醫(yī)療行為,都帶著幾分風險,所以醫(yī)生會說:“當然,任何情況都是有可能的,治愈率再高我都不能跟你說百分之百沒問題。

    法則二十八:

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

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

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

    法則二十九:

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

    法則三十:

        Don't go dark    建立適當?shù)臋z查點

    法則三十一:

        Beware of a guy in a room    留心沒有檢查點的組員

    法則三十二:

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

    法則三十三:

       Get a known state and stay there    掌握實際情況

    法則三十四:

        Use ZD milestones    零缺點里程碑

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

    法則三十五:

       Nobody reaches the ZD milestone until everybody does    所有組員一起到達零缺點里程碑

    法則三十六:

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

    法則三十七:

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

    法則三十八:

        Get a handle on "normal"    培養(yǎng)正常的團隊運作

    法則三十九:

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

    法則四十:

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

    法則四十一:

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

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

    法則四十二:

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

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

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

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

    法則四十三:

        Don't trade a bad date for an equally bad date    不要因為進度落后而更改最后期限

        進度落后的程度是與計劃的不確定性成正比。

    法則四十四:

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

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

    法則四十五:

       A good slip is a net positive   把延誤當作寶貴的學習機會

    法則四十六:

        See the forest    見樹亦見林

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

    法則四十七:

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

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

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

    法則四十八:

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

    法則四十九:

       Beta is not the time to change    Beta測試版不是修改功能的時候

    法則五十:

        The Beta is for spin development    Beta測試是暖身活動

    法則五十一:

        Triage ruthlessly    急救術(shù)

    法則五十二:

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

    法則五十三:

        Compete with the superior story    偉大的軟件應該有一個偉大的故事

    法則五十四:

       Create a winning image    建立贏家形象

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

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

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

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

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

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

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

     

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

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

    new ProgressMonitorDialog(s).run(true, true, runnable);
    使用此句的話,JFace的線程永遠不會啟動;

    替換為

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

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

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

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

    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時需要在線程中調(diào)用Display.readAndDispatch()方法,以避免UI被阻塞!

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

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

    設(shè)計

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

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

    法則十九:

        Go for greatness    追求卓越

    法則二十:

        State your theme    設(shè)定主題

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

    法則二十一:

        Minimize dependencies    不要倚賴不確定的事

    法則二十二:

        Propitiate the gods    平息顧客的慍怒

    法則二十三:

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

    法則二十四:

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

    開發(fā)

    法則二十五:

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

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

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

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

    法則二十六:

        Now go play    把工作當作游戲吧

    posted @ 2008-02-29 08:28 阿南 閱讀(1262) | 評論 (0)編輯 收藏
    微軟團隊:成功秘訣(2)

    法則六:

        Watch the ratio    注意人員的組成比例

        “基本原則是開發(fā)人員和品保人員的比例不超過2:1”這個是作者為我們提出的建議,而在SUN這個比例被修改為1:1,甚至是1:2,可見在項目中品保人員比開發(fā)人員更加重要!

       “其實真正負責軟件如期完成的是品保人員。當進度落后時,我們第一個要看的是品保人員:人數(shù)夠不夠?有沒有充分授權(quán)?有沒有確實參與設(shè)計?進度上能不能跟開發(fā)人員配合良好?能不能一有問題出現(xiàn)就立刻提出警告?品保人員和開發(fā)人員的理念一致嗎?是不是跟開發(fā)人員過度親密而放水?”

        “一個健全的軟件開發(fā)團隊一定要符合上述的人數(shù)比例原則,平均每一位品保人員所支援的開發(fā)人員不超過兩位。”能做到嗎?至少在我們公司這個,基本上,很難!

    法則七:

        Use feature teams    運用特色監(jiān)督小組

         融入任務(I d e n t i t y) 充分的授權(quán)和責任感,使人具有控制權(quán)和影響力,愈能使自己與任務融為一體。

        建立共識(C o n s e n s u s) 共識是特色監(jiān)督小組的氣氛。

        地位平等(B a l a n c e) 由于特色監(jiān)督小組的每一位成員都是不同的背景、專長,不同的工作角色和不同的觀念,沒有誰比誰優(yōu)越的情形,所以每個人的地位都是平等的。

        權(quán)威是來自學識,而非職位。

        在一個理想的項目中,基本上有兩種角色存在:創(chuàng)造者(c r e a t o r)和推動者(f ac i l i t a t o r)。創(chuàng)造者是一些專業(yè)人員,例如開發(fā)程序、行銷、軟件品保和文件撰寫;而推動者則負責凝聚團隊共識和維持最佳的開發(fā)環(huán)境。

    法則八:

        Use program managers    項目經(jīng)理的職責

        項目經(jīng)理是軟件開發(fā)團隊的一份子,他的職責是:
          • 領(lǐng)導大家定義出一個成功的產(chǎn)品。
          • 引導大家對產(chǎn)品注入深切的期望和信念。
          • 帶領(lǐng)團隊將理想實現(xiàn),變成可預見的產(chǎn)品誕生。

        項目經(jīng)理應該要有技術(shù)的背景,而且必須在兩種層面非常專精:一是對開發(fā)產(chǎn)品所使用的技術(shù)很熟悉,二是擁有建構(gòu)軟件的技術(shù)領(lǐng)導能力。項目經(jīng)理必須精于哄騙、驅(qū)策、鼓勵、要求他的團隊做出最好的軟件和表現(xiàn)出最好的工作效能,他清楚知道軟件制作過程中每一項的投入和產(chǎn)出細節(jié),他必須懂得用最好的方式定義產(chǎn)品和維持健全的技術(shù)。最后,項目經(jīng)理還必須是團隊的發(fā)言人,面對媒體、客戶、以及整個組織。

        項目經(jīng)理是軟件開發(fā)的核心人物。

        你想了解這個團隊?看看他們的軟件就知道了,反之亦然。

    團隊精神:

    1. 一群人同心協(xié)力,集合大家的腦力,共同創(chuàng)造一項智能財產(chǎn)。

    2. 個人的創(chuàng)造力是一種神奇的東西,源自于潛在的人類心智潛能,它被情感豐富,而被技術(shù)束縛。

    3. 一群人全心全意地貢獻自己的創(chuàng)造力,結(jié)合成巨大的力量。結(jié)合的創(chuàng)造力由于這一群人的互動關(guān)系、彼此激蕩,而更加復雜。

    4. 這種復雜的情況之下,領(lǐng)導變成像是人際互動的交響樂指揮,輔助并疏導各種微妙的人際溝通。

    5. 在團體中的溝通和互動是正確而健康時,能夠使這一群人的力量完全結(jié)合,會產(chǎn)生相加相乘的效果,抵銷互斥。溝通順暢能使思想在團隊中充分交流傳達。

    6. 團隊工作的品質(zhì)比時程更重要,而作品的偉大是需要對“團隊精神”特別加強,才能達成。“團隊精神”可視為個別成員精神的平均值,而個人的精神( p s y c h e)則是使他能感覺、能思考、能推論的內(nèi)在力量。

    7. 倘若忽視了“團隊精神”,則只會有平庸的成果。

    法則九:

        Be an authority , not an authority figure    要權(quán)威,不要霸權(quán)

        權(quán)威的目的是讓每一位團隊成員都有自己的專業(yè)權(quán)威,和團隊的專業(yè)自信,這才是管理者真正的權(quán)威。

    競爭

        創(chuàng)新無處不在,絕對不可以停滯不前!

        如果你無法時時掌握時代的脈搏,如果你怠于響應周圍迅速而劇烈的變化,特別是競爭者的行動,如果你不能持續(xù)地創(chuàng)新原有的技術(shù),永遠保持領(lǐng)先,那么別人馬上就會趁虛而入,取代你而成為市場上的優(yōu)勝者,擄獲顧客的心和他們的荷包。

        確定了你的情況之后,應該先考慮采取標準步法。

    標準步法:

    法則十:

       Alone? A market without a competitor ain't     沒有競爭對手?未必是好事

    (注:任何人都有敵人!)

    法則十一:

        Dead beat? Break out of a feature shoot-out    競爭者緊追不舍?推出創(chuàng)新的功能特色(注:想法設(shè)法的壓制你的敵人!)

    法則十二:

        Behind? Ship more often with new stuffs    落后競爭對手?加大投入,更快推出新版本(注:沉下心來,奪回領(lǐng)地!)

    法則十三:

        Ahead? Don't ever look back    領(lǐng)先競爭對手?不要回頭(注:挑戰(zhàn)自己,戰(zhàn)勝自己!)

        準時地、經(jīng)常地推出新產(chǎn)品是軟件開發(fā)產(chǎn)業(yè)中最大的金科玉律。

    法則十四:

        Take the Oxygen along    保持新鮮

        快速變遷的節(jié)奏是信息社會的常態(tài),你必須快速前進,否則就落伍了。

    顧客

        想方設(shè)法的讓顧客迷戀上你的產(chǎn)品!

    法則十五:

        Enrapture the customer    給顧客驚喜

        顧客最低的希望是你能夠理解他所感受到的痛苦經(jīng)驗。

    法則十六:

        Find the sweet spot    尋找靶心

    法則十七:

        It's a relationship, not a sale    與顧客建立關(guān)系,而不是賣產(chǎn)品

    法則十八:

        Cycle rapidly    加速產(chǎn)品推出的周期

    posted @ 2008-02-28 08:31 阿南 閱讀(1716) | 評論 (0)編輯 收藏
    微軟團隊:成功秘訣(1)

        帶過項目的朋友一定都看過或者聽說過這本書吧,其實這本書是來自“微軟管理經(jīng)典著作”之中的一本,其他兩本是《微軟項目:求生法則》、《微軟研發(fā):制勝策略》這三本書我會精讀細讀的(雖然我不帶項目~),從中取其精華寫成筆記與大家分享。

        首先看一下《微軟團隊:成功秘訣》分別在china-pub和豆瓣上的書評把:

    china-pub

    本書敘述了吉姆.麥卡錫帶領(lǐng)微軟Visual C++開發(fā)團隊的故事,告訴讀者如何構(gòu)建一個優(yōu)秀的軟件開發(fā)團隊,如何在一段時間內(nèi)成功地開發(fā)一個軟件,而且此后不斷地完成新版,并一直受到市場的肯定。他將自己思考的結(jié)晶和種種慘痛的教訓歸納出54條言簡意賅的法則,從產(chǎn)品設(shè)計、程序開發(fā)到成功的營銷,無所不包,在微軟,本書是每一位項目經(jīng)理的必讀圣經(jīng)。

    豆瓣

    作為一位經(jīng)驗豐富的老手,作者將自己思考的結(jié)晶和種種慘痛的教訓歸納出54條言簡意賅的法則,從產(chǎn)品設(shè)計、程序開發(fā)與構(gòu)建、準時推出產(chǎn)品,到成功的營銷,無所不包。您將會發(fā)現(xiàn)本書就像軟件開發(fā)本身一樣迷人有趣。本書是為軟件設(shè)計者、開發(fā)人員、營銷人員、技術(shù)主管,以及所有亟欲一窺軟件開發(fā)奧秘的人士所寫的。

    法則一:

        Establish a shared vision    建立一個共同的目標

        在團隊總建立共同的目標是非常重要的,團隊中的成員只有當有了共同的目標之后才能有歸屬感,才能對憧憬中的產(chǎn)品產(chǎn)生榮譽感,才能在管理中更好的調(diào)動各個成員的積極性,從而將團隊推向正軌,讓產(chǎn)品如期發(fā)布!

       “團隊中每一位成員都必須非常清楚我們要做什么、成品會是什么模樣、基本的產(chǎn)品策略是什么、什么時候必須完成。凡是與共同目標相沖突的看法都必須轉(zhuǎn)化成一致,而不是把它消音。和諧的共識是絕對必要的,否則軟件不可能做得好,很多事會復雜化而難以收拾。”

        所謂目標是共同的希望,對未來的事情所描繪出來的景象,比方說作者在給VC++項目組開會時候的描述“Visual C++是最偉大、最值得驕傲的產(chǎn)品,你們難道不這么認為嗎?我知道我們可以如期完成它,而且用它來給對手一個迎頭痛擊,不只我一個人這么想吧?我們將創(chuàng)造微軟的明日世界,我們會大有作為的,不是嗎?”其實他已經(jīng)給VC++了一個很好的目標,他讓成員們覺得,我們都是在偉大事情,一但在團隊中形成了榮譽感,你會發(fā)現(xiàn)你的團隊將會空前的團結(jié)!

    法則二:

        Get their heads into the game    使大家主動投入

        “如果每個人都在認真思考如何使團隊更有效率,這個團隊自然就比較容易表現(xiàn)出高效率,反之亦然。”讓每一個人都參與進來,需要管理者能夠調(diào)動每一個人的積極性~讓大家都主動的去思考問題,為產(chǎn)品主動的出謀劃策。

        需要管理者去傾聽每一個愿意說的成員的言論或者主意,需要判斷的這些言論或者主意的能力,面對好的想法,也許它不切實際,但是也不要一棒子打死,而是要進行誘導,讓他下次可以提出更好的更切實際的想法來。

        鼓勵創(chuàng)新而非抹殺它!

    為什么組員會怠于思考或是不敢說出想法?
        • 因為他們認為沒有人會重視他的想法。
        • 因為他們認為該由別人告訴他該做什么事。
        • 因為他們認為這樣做沒有什么好處,只會使老板皺眉頭罷了。
        • 管理者只管發(fā)號施令而已。

    法則三:

        Create a multi-release technologyplan    建立開發(fā)多版本的技術(shù)規(guī)劃

        授權(quán)共決,其實就是全民參與,無論是對待成員的新想法還是對待項目的技術(shù)規(guī)范時都使用全民參與。(這樣好嗎?安全嗎?)

    法則四:

        Don't flip the bozo bit    別做笨蛋

        軟件產(chǎn)業(yè)中最重要的事情是“讓大家思考!”。

        “在微軟我們把這種人叫作b o z o,意思是笨蛋。永遠沒有人會注意笨蛋的所作所為,即使他真的有貢獻,他也不會有任何份量。笨蛋當然是不可信任的,你對笨蛋惟一的期望是但愿他不要搞砸事情。

         在我的部門里,這種德行是不允許的。我要每一個人都全心全力地投入,每個人都得有貢獻,每一個人都可以侃侃而談我們的產(chǎn)品─如何在市場上競爭、何時出新版本等等,而且每個人對產(chǎn)品的看法都一致,不會眾說紛云。

         將自己的意見強行加諸于他人者,其實是笨蛋。”

         需要隨時防范組員出現(xiàn)“江郎才盡”病!

    法則五:

        Use scouts    刺探敵情

        必須有一個人或者有一些人去觀察未來的發(fā)展趨勢,預言新技術(shù)。這個角色是非常重要的!

        “這次他們學乖了,事先派了兩位最優(yōu)秀的組員擔任“偵察員”,做了一次徹底的技術(shù)調(diào)查和完善的規(guī)劃,終于在危機爆發(fā)之前將之化解。”

        ““偵察員”就是為科技的改變而準備的,如果你決定永遠停著不動,那你不需要“偵察員”。”軟件公司中如果沒有這個角色還叫軟件公司嗎?

    posted @ 2008-02-27 09:20 阿南 閱讀(1912) | 評論 (1)編輯 收藏
    VE終于復活了!

    VE在Eclipse的眾多項目中沉寂了一年的時間,現(xiàn)在終于有動作了!至少是計劃已經(jīng)放出了~真是讓人欣慰啊!

    我每天都要看Eclipse的各大新聞組,VE雖然說是沉寂了一年,但是新聞組里面還是比較熱鬧的,每天都有一兩篇問題更新。

    Visual Editor Project 2007-2008 Roadmap

    Project focus

    In general, the main theme is to get the project back on track and in good shape.

    From a goals perspective, we have the following alternatives:

    1. focus exclusively on Swing, SWT and RCP and do it extremely well; deprecate everything else.
    2. continue to provide a more generic editing framework, and supporting visual editing of non-java target such as GWT, HTML, Groovy, XForms, Web pages, EXSWT, etc.

    My head tells me to go with (1) and my heart with (2).

    Release Timeline

    • VE 1.3.0 Milestone 1:
      • Q1 2008, have a stable working VE based on Europa
    • VE 1.3.0 Milestone 2: Q2 2008
      • Investigate performance enhancements (single VM)
      • Fix major bugs
      • Add support for non Java visual target (Groovy contribution, XForms)
    • VE 1.3.0 Release: Q2 2008
    • VE 1.3.1 : maintenance for 1.3.0 Q3 2008
    • VE 1.3.2 : maintenance for 1.3.0 Q4 2008
    • VE 1.4.0 Milestone 1: Q2 2008
      • Work on Ganymede compatibility
    • VE 1.4.0 Milestone 2: Q3 2008
    • VE 1.4.0 Milestone 3: Q3 2008
    • VE 1.4.0 Release: Q4 2008

    Retrieved from "http://wiki.eclipse.org/VE/Roadmap"

     

     

    我最期待的還是VE對于生成XML文件的擴展~加油啊~VE!

    posted @ 2008-01-22 09:37 阿南 閱讀(1710) | 評論 (0)編輯 收藏
    RAP官方老窩

    有朋友在blog中給我留言,說找到RAP的官方地址,現(xiàn)在我就在此公布一下,有興趣的朋友可以去看看Demo。

    官方首頁

    http://www.eclipse.org/rap/

    Demo地址

    http://www.eclipse.org/rap/demos.php   此頁面提供3個Demo,其中的SWT的官方Demo的RAP實現(xiàn)在RAP的發(fā)行包中,自己下載下來,自己RUN起來就能看到了;

     

    RAP開發(fā)領(lǐng)頭公司

  • Innoopract   從開發(fā)人員列表和官方網(wǎng)站的支持力度上,此公司最強!(好像是家德國公司!)
  • 1&1
  • CAS
  • posted @ 2008-01-13 18:11 阿南 閱讀(1646) | 評論 (0)編輯 收藏
    一段來自ews.eclipse.technology.rap的關(guān)于Upload a file的代碼

    I impleted my File upload/download system with rap internal Browser + servlet.
    upload dialog&#65306;

    public class FileUploadDialog extends TitleAreaDialog {
    	private Browser browser;
    	public FileUploadDialog(Shell parentShell) {
    		super(parentShell);
    	}
    	/**
    	 * Create contents of the dialog
    	 * @param parent
    	 */
    	@Override
    	protected Control createDialogArea(Composite parent) {
    		Composite area = (Composite) super.createDialogArea(parent);
    		Composite container = new Composite(area, SWT.NONE);
    		container.setLayout(new FillLayout());
    		container.setLayoutData(new GridData(GridData.FILL_BOTH));

    browser = new Browser(container, SWT.NONE);
    String url = "http://"+RWT.getRequest().getServerName()+":"+RWT.getRequest().getServerPort()+"/web/fileupload.jsp";
    String html = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><html><head><title>upload file</title></head><body>"+
    "<form action=\""+url+"\" enctype=\"MULTIPART/FORM-DATA\" method=\"post\"><br />File Name:</br><input type=\"file\""+
    " name=\"filename\"/><br><input type=\"submit\" value=\"upload\"/></form></body></html> ";
    browser.setText(html);
    setMessage("select a local file");
    return area;
    }
    	/**
    	 * Return the initial size of the dialog
    	 */
    	@Override
    	protected Point getInitialSize() {
    		return new Point(382, 280);
    	}
    	protected void configureShell(Shell newShell) {
    		super.configureShell(newShell);
    		newShell.setText("upload file");
    	}
    }

    file upload sevlet:
    public class FileUploadServlet extends HttpServlet {
    	private static final long serialVersionUID = -7245361228773015964L;
    	private String uploadPath = "/upload/"; // server file repository
    	private String tempPath = "/upload/tmp/"; //temp file folder

    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException {
    try {
    DiskFileUpload fu = new DiskFileUpload();
    // max file size fu.setSizeMax(-1);
    // buffer size
    fu.setSizeThreshold(4096);
    // temp path
    fu.setRepositoryPath(tempPath);
    			// get all uploa file
    			List fileItems = fu.parseRequest(request);
    			Iterator i = fileItems.iterator();
    			while (i.hasNext()) {
    				FileItem fi = (FileItem) i.next();
    				// get the upload file name
    				String fileName = fi.getName();
    				String sep = System.getProperty("file.separator");
    				int index = fileName.lastIndexOf(sep);
    				if(index >-1){
    					fileName = fileName.substring(fileName.lastIndexOf(sep));
    				}
    				fi.write(new File(uploadPath + fileName));
    				response.getWriter().println(fileName+"upload success");
    			}
    		} catch (Exception e) {
    		 //do something?
    			e.printStackTrace();
    		}
    	}
    	public void init() throws ServletException {
    		if (!new File(uploadPath).isDirectory())
    			new File(uploadPath).mkdirs();
    		if (!new File(tempPath).isDirectory())
    			new File(tempPath).mkdirs();
    	}
    }
    registe servlet:

    public class HttpServiceTracker extends ServiceTracker {
           public HttpServiceTracker(BundleContext context) {
               super(context, HttpService.class.getName(), null);
           }

    public Object addingService(ServiceReference reference) {
    final HttpService httpService = (HttpService) context
    .getService(reference);
    try {
    //regist file upload servlet
    HttpContext commonContext = new BundleEntryHttpContext(context
    .getBundle(), fileFolder);
    httpService.registerResources(fileContext, "/", commonContext);

    Servlet adaptedJspServlet = new ContextPathServletAdaptor(
    new FileUploadServlet(),
    fileContext);
    httpService.registerServlet(fileContext + "/fileupload.file",
    adaptedJspServlet, null, commonContext);
               } catch (Exception e) {
                   e.printStackTrace();
               }
               return httpService;
           }

    public void removedService(ServiceReference reference, Object service) {
    final HttpService httpService = (HttpService) service;
    httpService.unregister(fileContext);
    httpService.unregister(fileContext + "/fileupload.jsp");
    super.removedService(reference, service);
    }
    }
    start servlet:
      add these code to the bundle start up method.
     	public void start(BundleContext context) throws Exception {
    		super.start(context);
    		plugin = this;
           httpServiceTracker = new HttpServiceTracker(context);
           httpServiceTracker.open();
           System.out.println("IM resource servlet started...");
    	}

     

    這個實現(xiàn)是在RAP中使用Browser+servlet實現(xiàn)的文件上傳功能;

    其實在RAP的cvs上已經(jīng)放出了org.eclipse.rwt.widgets.upload,專用于上傳的組件,測試了一下,效果還不錯,有進度條提示;不過在IE6下,有點難看了,在FF3下不能使用;

    posted @ 2008-01-11 13:17 阿南 閱讀(1780) | 評論 (0)編輯 收藏
    Eclipse-RCP開發(fā)者的福音

        Eclipse-RAP項目真的可以算是Eclipse-RCP開發(fā)者的福音,一套軟件的開發(fā)成本,兩套軟件的特性~對于正在尋求C/S向B/S轉(zhuǎn)移的公司來說,可以算是一個福音了。

        公司最近正在做調(diào)整,打算將原有7大軟件產(chǎn)品,在B/S上重新打造一番~前景很不錯,市場價值非常大~我們所關(guān)心的并不是市場價值究竟有多大(有上面的大領(lǐng)導撐著,我們不用擔心),我們關(guān)心的是,如何打破原有的B/S開發(fā)模式,讓程序員們能高速的開發(fā)出需要系統(tǒng),而且這些系統(tǒng)又能遵守共同的特點,原有的B/S開發(fā)模式只可能讓程序員原來越不OO了,很有可能陷入JS的陷阱中。

        我們把目光轉(zhuǎn)移到了GWT上,他確實可以讓JAVA開發(fā)人員只專注的寫JAVA就可以了,一切都是它的事情了~但是最麻煩的事情,就是速度問題,編譯的時候很慢,而且還提出了模塊的概念,不好理解,放棄它的另一個最重要的原因是它并不是一個框架,只是一個工具集而已。

        然后,我們發(fā)現(xiàn)了RAP-Rich Ajax Platform,從它的首頁上并看不出什么特別,但是深入Demo,才真的發(fā)現(xiàn)別有洞天啊~原來一切來的都是那么簡單~~~~它其實就是依照與Eclipse-RCP的基礎(chǔ)運行時做了一套自己的基礎(chǔ)運行時RAP,換句話說就是原本開發(fā)好的RCP項目,可以在僅增加一個擴展點的基礎(chǔ)上,平滑的過度到RAP上,立即從一個C/S程序變成了一個B/S程序~真的很令人震驚!今天早上和同事配合,將我們幾個月前做的4個插件,用了一早上的時間遷移到RAP上,幾乎原有功能完全保留!

        如果你也是用RCP做開發(fā)的話,建議你可以試試RAP,它會給你一想不到的體驗!

        需要注意的是,RAP是去年10月份才正式發(fā)布的1.0版本,所以還是有很多東西是沒有,還是需要一段時間的等待,特別是在1.1發(fā)布后,幾乎支持所有SWT的特性了~

        為了深入的討論RAP,我已經(jīng)開放了Eclipse-RAP分類,慢慢會有更多的關(guān)于RAP的文章出現(xiàn),努力豐富一下RAP的中文文檔!

    posted @ 2008-01-10 21:13 阿南 閱讀(3201) | 評論 (7)編輯 收藏
    驚嘆吧!RAP!

    2007年10月份eclipse放出RAP-Rich Ajax Platform,這么長的時間過去,它的影響力還是不夠~為什么,因為它的文檔太少,資源太少,知道的人更少~

    昨天,把玩了一下RAP,被它的思想震驚了~它是把Eclipse-RCP的思想帶入了B/S的開發(fā),它提供的不僅僅是Ajax的內(nèi)容,更多的是提供了一個框架,一個可以同Eclipse-RCP框架互換的框架~

    中規(guī)中矩開發(fā)好的RCP程序,可以在幾乎不用改動任何代碼的基礎(chǔ)上增加2項配置,一個類以及一個底層框架,就可以完全過度到B/S上~

    snap

     

    我們的項目,用了半個小時改造完成的~

     

    RCP+RAP也許是一個新的方向~

    posted @ 2008-01-09 10:57 阿南 閱讀(2053) | 評論 (8)編輯 收藏
    打造仿淘寶注冊的Text(二)

         摘要: 上次貼了幾張圖片出來顯擺,這次徹底公布代碼~大家看看原理就好,有興趣的朋友可以和我聯(lián)系,把SWT里面的控件都封裝一下,做一套驗證框架出來~   1package com.glnpu.dmp.controls;   2   3import org.eclipse.swt.SWT;   4imp...  閱讀全文

    posted @ 2008-01-08 20:20 阿南 閱讀(1847) | 評論 (3)編輯 收藏
    打造仿淘寶注冊的Text(一)

        為什么要打造仿淘寶注冊的Text呢,不為什么,因為它好看!呵呵,這個不算理由,其實最重要的原因是因為最近在開發(fā)過程中,發(fā)現(xiàn)驗證是個最麻煩的事情,雖然Eclipse和JFace為我們已經(jīng)提供了比較好用的“高級”對話框和向?qū)ы摿耍瑢τ诤唵蔚膽茫麄儍蓚€用起來是非常簡單,如果要驗證的東西非常多,而且還有交叉驗證(我自己起的名字,就是填了A就不再驗證BCD的錯在了,或者填了C就要驗證AD存在)處理起來了就麻煩了,前兩天以為新同事接手一端代碼,發(fā)現(xiàn)里面竟然有20+個監(jiān)聽器,驗證邏輯復雜的要死~為了解決這個問題。再結(jié)合B/S的開發(fā)經(jīng)驗,我認為,完全沒有必要當用戶把所有的必填項全都填了以后再把OK按鍵打開,不然永遠置灰~大家做過的哪個B/S程序是這樣的?不都是他愛填填,不愛填拉到,點確定的時候我告訴,或者是,我以上來就告訴你哪些必填,不填的,點擊確定繼續(xù)提醒!

       OK,閑話少說,先看看淘寶的注冊吧~我一直認為淘寶的注冊界面是國內(nèi)客戶體驗度最好的~

    ScreenShot002

    首先界面一打開就是這樣的提示,在input框的左下腳又一個藍色的小箭頭,代表此文本框必填;

    ScreenShot001

    當獲得焦點以后改變,后面的提示框高亮,著重提醒用戶;

    ScreenShot003

    如果沒有填,必填項,提交的時候的提示;

    ScreenShot004

    填寫正確的提示;

    OK,分析了上面的四種狀態(tài),那么我們來確定我們需要做成什么樣子的~首先,我們需要;

    ScreenShot005

    必填提醒狀態(tài)

    ScreenShot006

    填寫正確提醒狀態(tài)

    ScreenShot007

    錯誤填寫提醒狀態(tài)

    還有就是鼠標移動到三種圖標上的浮動框詳細說明,因為我們不可能像淘寶那樣,一個控件占那么大位置,用戶界面還需要放更多的東西。

    大致的任務交代清楚了,下一次再寫詳細的實現(xiàn)過程。

    posted @ 2008-01-01 22:24 阿南 閱讀(2778) | 評論 (4)編輯 收藏
    SWT編寫界面窗口時讓窗口處于屏幕中間

    一、使用SWT本身

    import org.eclipse.swt.graphics.Rectangle;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Shell;

    public class LayoutUtil ...{

    public static void centerShell(Display display,Shell shell)...{
            Rectangle displayBounds = display.getPrimaryMonitor().getBounds();
            Rectangle shellBounds = shell.getBounds();
    int x = displayBounds.x + (displayBounds.width - shellBounds.width)>>1;
    int y = displayBounds.y + (displayBounds.height - shellBounds.height)>>1;
            shell.setLocation(x, y);
        }
    }

    直接調(diào)用LayoutUtil.centerShell(Display display,Shell shell)即可使SWT窗口處于屏幕中央,其中,shell 要顯示的Shell對象。
    二、借助AWT包里面獲取屏幕大小的方法

    import java.awt.Toolkit;
    /** *//**
    * 在屏幕中間顯示Shell
    * @param shell 要顯示的Shell對象
    */
    private void centerShell(Shell shell)
    ...{
    //得到屏幕的寬度和高度
    int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;
    int screenWidth = Toolkit.getDefaultToolkit().getScreenSize().width;
    //得到Shell窗口的寬度和高度
    int shellHeight = shell.getBounds().height;
    int shellWidth = shell.getBounds().width;
    //如果窗口大小超過屏幕大小,讓窗口與屏幕等大
    if(shellHeight > screenHeight)
                       shellHeight = screenHeight;
    if(shellWidth > screenWidth)
                      shellWidth = screenWidth;
    //讓窗口在屏幕中間顯示
            shell.setLocation(( (screenWidth - shellWidth) / 2),((screenHeight - shellHeight) / 2) );
    }

    posted @ 2007-12-25 14:21 阿南 閱讀(1607) | 評論 (2)編輯 收藏
    Sun發(fā)布開源PDF Renderer項目

    Sun將一個新的開源項目——PDF Renderer——作為SwingLabs的一部分于近日發(fā)布.
    Sun 對該項目的描述是:“一個100%用Java編寫的PDF渲染器和查看器”.PDF Renderer可以用來將可移植文檔格式(Portable Document Format,PDF)從文件中解析出來,并以AWT圖像或任何Graphics2D的實現(xiàn)形式在panel中顯示.該項目與SwingLabs的其他部 分一樣,都是以LGPL許可發(fā)布的.

    在項目首頁上列出了一些潛在的用途:
    在用戶自己的應用中查看PDF.
    提供PDF文件的打印預覽.
    將PDF繪制為PNG圖像,用以在服務器端的Web應用中顯示.
    將PDF合并到3D場景中.
    在PDF之上繪圖,并可以在網(wǎng)絡查看器中進行標注.

    雖然這個項目是在2007年12月被開源的,但是它卻有一段頗久的歷史:
    在2003年,Sun實驗室的一群研究員開發(fā)出了PDF Renderer,當時它還是一款視頻協(xié)作工具,Sun(TM)Labs Meeting Suite的一部分.這個工具在Sun內(nèi)部的分布式會議中得到了廣泛應用.Meeting Suite的設(shè)計初衷是方便人們使用OpenOffice創(chuàng)建的文稿做發(fā)言.
    現(xiàn)在,這個公眾項目還只是處于早期階段,所以文檔資源還很凌亂,也沒有很大的用戶社區(qū).但是,Joshua Marinacci希望通過把這個項目開源,把那些可能為項目貢獻力量的開發(fā)者們凝聚成一個社區(qū):
    雖然最原始的代碼是來自Sun的,但我們希望能獲得社區(qū)的高度參與.為保證這一點,我們聘請了Elluminate的Tom Oke來管理這個項目.他將擔任項目所有者和首席架構(gòu)師的角色.他很快掌握了現(xiàn)有的代碼,并期待著與其他的參與者進行討論.
    我們最開始的目標是將PDF輸出成OpenOffice格式,所以有些特性被遺漏掉了.它實現(xiàn)了絕大多數(shù)的PDF 1.4規(guī)范,但是少了透明度(transparency),填充表單(fill-in forms)和某些特定的字體編碼.我們希望有興趣的開發(fā)者可以幫助我們完成這些特性.
    另外,Josh還將這個項目與其他PDF庫進行了比較:JPedal使用了GPL許可,所以有些應用根本就沒法用它.我們認為對于類似這樣的庫而言,使用LGPL是更好的選擇.iText不是一個查看器/渲染器.它可以生成PDF文檔,但并不能查看文檔.這讓iText和SwingLabs PDF Renderer變成了優(yōu)秀的合作伙伴.我期盼著看到人們?nèi)绾螌⑺鼈冞M行合并.

     

    訪問:PDF Renderer: a 100% Java PDF renderer and viewer

    posted @ 2007-12-17 12:08 阿南 閱讀(1703) | 評論 (2)編輯 收藏
    凱文米特尼克-《欺騙的藝術(shù)》[完整中文版][DOC][PDF]

    夜火:凱文米特尼克《欺騙的藝術(shù)》,想必是無人不知無人不曉了吧,但是完整中文版一直沒找到,今天看到鬼仔那發(fā)了完整的中文版,還有docpdf 2種格式,轉(zhuǎn)來給大家共享之~

     

    直接給下載(我的box好像流量超了):
    fs2you: 欺騙的藝術(shù)[中文完整版].zip
    box: 欺騙的藝術(shù)[中文完整版].zip

    夜火PS:碰巧找到了譯者發(fā)布的下載鏈接,提供之,作為備用:http://www.hhacker.com/down/load/php.php?file=Deception.zip ,并嚴重感謝Hhacker team的王小瑞龍之冰點翻譯此書

    posted @ 2007-12-15 14:46 阿南 閱讀(1898) | 評論 (1)編輯 收藏
    Adobe擁抱開源,宣布Flex已正式開源

    今天下午在Adobe的官方網(wǎng)站上才看到了Flex開源的消息:

    Adobe這次開源 Flex,事實上是“早有預謀”的。早在 labs.adobe.com 建設(shè)的時候,F(xiàn)lex 團隊就有將 Flex 開源的計劃,并且當時也將 Flex-Ajax-Bridge 在 GPL 協(xié)議下開源了。

    而這次 Flex 開源和以前不同,Adobe 會將幾乎整個Flex平臺組件在 Mozilla Public License 下發(fā)布,包括以下部分:
        * Flex 編譯器;
        * Flex 命令行調(diào)試工具
        * 源碼查看工具;
        * 測試框架;
        * Flex 核心組件庫(包括 Apollo 組件);
        * 封裝腳本;
        * Flex-Ajax Bridge(將會改用 MPL 協(xié)議發(fā)布);
    更多的細節(jié)內(nèi)容可以參考官方 Wiki。
    Adobe Flex 這次開源,可以說是意義深遠。首先,這次開源對于 Adobe 和開發(fā)者來說都是雙贏的。通過開源,F(xiàn)lex 開發(fā)者可以通過閱讀研究 Flex 源碼,更深刻的理解 Flex 并進一步增強它,從而在 Flex 平臺上創(chuàng)造出更多更出色的應用;而對于 Adobe 來說,開源 Flex 開發(fā)者的加入,不僅可以使得 Flex 利用最小的成本得到最佳的完善和發(fā)展,同時由于開源的刺激,勢必會為 Flex 帶來更多的開發(fā)者,這對于一個平臺的普及是非常有意義的。
    開源界的不斷發(fā)展,使得越來越多的商業(yè)公司看到了它的美好前景。Google、IBM、Oracle 等巨頭紛紛在開源領(lǐng)域獲利,作為應用軟件巨頭 Adobe 自然也不會錯過。Flex 的開源可以看作是 Adobe 邁出的第一步。同時,Adobe 選擇開源的產(chǎn)品始終圍繞著 Flash 應用領(lǐng)域,而且選擇的協(xié)議為 Mozilla Public License,使我們看到了 Adobe 想進一步掌控下一代互聯(lián)網(wǎng)標準,甚至桌面應用平臺的野心。試想搭載著 Adobe 種種絢麗技術(shù)的 Firefox,微軟的 IE+SilverLight 也會吃不消吧。蓋茨加油吧,呵呵。

    posted @ 2007-12-10 17:01 阿南 閱讀(1432) | 評論 (2)編輯 收藏
    240多個jQuey插件

    “jQuery 是繼 prototype 之后又一個優(yōu)秀的 Javascrīpt 框架。其宗旨是——WRITE LESS,DO MORE,寫更少的代碼,做更多的事情。它是輕量級的 js 庫(壓縮后只有21k) ,這是其它的 js 庫所不及的,它兼容 CSS3,還兼容各種瀏覽器 (IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。 jQuery 是一個快速的,簡潔的 javaScript 庫,使用戶能更方便地處理 HTML documents、events、實現(xiàn)動畫效果,并且方便地為網(wǎng)站提供 AJAX 交互。 jQuery 還有一個比較大的優(yōu)勢是,它的文檔說明很全,而且各種應用也說得很詳細,同時還有許多成熟的插件可供選擇。 jQuery 能夠使用戶的 html 頁保持代碼和 html 內(nèi)容分離,也就是說,不用再在 html 里面插入一堆js來調(diào)用命令了,只需定義 id 即可。 ”

    這里提供了 240 多個jQuey的插件,實在是太多了!如下:

     

    表單驗證(Form Validation)

    jQuery Validation.
    Auto Help.
    Simple jQuery form validation.
    jQuery XAV - form validations.
    jQuery AlphaNumeric.
    Masked Input.
    TypeWatch Plugin.
    Text limiter for form fields.
    Ajax Username Check with jQuery.

    文件上載(File upload)

    Ajax File Upload.
    jQUploader.
    Multiple File Upload plugin.
    jQuery File Style.
    Styling an input type file.
    Progress Bar Plugin.

    表單-選取框(Form - Select Box stuff)

    jQuery Combobox.
    jQuery controlled dependent (or Cascadign) Select List.
    Multiple Selects.
    Select box manipulation.
    Select Combo Plugin.
    jQuery - LinkedSelect
    Auto-populate multiple select boxes.
    Choose Plugin (Select Replacement).

    表單基本,輸入框等(Form Basics, Input Fields, Checkboxes etc.)

    jQuery Form Plugin.
    jQuery-Form.
    jLook Nice Forms.
    jNice.
    Ping Plugin.
    Toggle Form Text.
    ToggleVal.
    jQuery Field Plugin.
    jQuery Form’n Field plugin.
    jQuery Checkbox manipulation.
    jTagging.
    jQuery labelcheck.
    Overlabel.
    3 state radio buttons.
    ShiftCheckbox jQuery Plugin.
    Watermark Input.
    jQuery Checkbox (checkboxes with imags).
    jQuery SpinButton Control.
    jQuery Ajax Form Builder.
    jQuery Focus Fields.
    jQuery Time Entry.

    時間日期以及顏色選取(Time, Date and Color Picker)

    jQuery UI Datepicker.
    jQuery date picker plugin.
    jQuery Time Picker.
    Time Picker.
    ClickPick.
    TimePicker.
    Farbtastic jQuery Color Picker Plugin.
    Color Picker by intelliance.fr.

    投票(Rating Plugins)

    jQuery Star Rating Plugin.
    jQuery Star Rater.
    Content rater with asp.net, ajax and jQuery.
    Half-Star Rating Plugin.

    搜索(Search Plugins)

    jQuery Suggest.
    jQuery Autocomplete.
    jQuery Autocomplete Mod.
    jQuery Autocomplete by AjaxDaddy.
    jQuery Autocomplete Plugin with HTML formatting.
    jQuery Autocompleter.
    AutoCompleter (Tutorial with PHP&MySQL).
    quick Search jQuery Plugin.

    文本編輯(Inline Edit & Editors)

    jTagEditor.
    WYMeditor.
    jQuery jFrame.
    Jeditable - edit in place plugin for jQuery.
    jQuery editable.
    jQuery Disable Text Select Plugin.
    Edit in Place with Ajax using jQuery.
    jQuery Plugin - Another In-Place Editor.
    TableEditor.
    tEditable - in place table editing for jQuery.

    多媒體(Audio, Video, Flash, SVG, etc)

    jMedia - accessible multi-media embedding.
    JBEdit - Ajax online Video Editor.
    jQuery MP3 Plugin.
    jQuery Media Plugin.
    jQuery Flash Plugin.
    Embed QuickTime.
    SVG Integration.

    圖象類(Photos/Images/Galleries)

    ThickBox.
    jQuery lightBox plugin.
    jQuery Image Strip.
    jQuery slideViewer.
    jQuery jqGalScroll 2.0.
    jQuery - jqGalViewII.
    jQuery - jqGalViewIII.
    jQuery Photo Slider.
    jQuery Thumbs - easily create thumbnails.
    jQuery jQIR Image Replacement.
    jCarousel Lite.
    jQPanView.
    jCarousel.
    Interface Imagebox.
    Image Gallery using jQuery, Interface & Reflactions.
    simple jQuery Gallery.
    jQuery Gallery Module.
    EO Gallery.
    jQuery ScrollShow.
    jQuery Cycle Plugin.
    jQuery Flickr.
    jQuery Lazy Load Images Plugin.
    Zoomi - Zoomable Thumbnails.
    jQuery Crop - crop any image on the fly.
    Image Reflection.

    Google Map

    jQuery Plugin googlemaps.
    jMaps jQuery Maps Framework.
    jQmaps.
    jQuery & Google Maps.
    jQuery Maps Interface forr Google and Yahoo maps.
    jQuery J Maps - by Tane Piper.

    游戲(Games)

    Tetris with jQuery.
    jQuery Chess.
    Mad Libs Word Game.
    jQuery Puzzle.
    jQuery Solar System (not a game but awesome jQuery Stuff).

    表格(Tables, Grids etc.)

    UI/Tablesorter.
    jQuery ingrid.
    jQuery Grid Plugin.
    Table Filter - awesome!.
    TableEditor.
    jQuery Tree Tables.
    Expandable “Detail” Table Rows.
    Sortable Table ColdFusion Costum Tag with jQuery UI.
    jQuery Bubble.
    TableSorter.
    Scrollable HTML Table.
    jQuery column Manager Plugin.
    jQuery tableHover Plugin.
    jQuery columnHover Plugin.
    jQuery Grid.
    TableSorter plugin for jQuery.
    tEditable - in place table editing for jQuery.
    jQuery charToTable Plugin.
    jQuery Grid Column Sizing.
    jQuery Grid Row Sizing.

    統(tǒng)計圖(Charts, Presentation etc.)

    jQuery Wizard Plugin .
    jQuery Chart Plugin.
    Bar Chart.

    邊框,圓角,背景(Border, Corners, Background)

    jQuery Corner.
    jQuery Curvy Corner.
    Nifty jQuery Corner.
    Transparent Corners.
    jQuery Corner Gallery.
    Gradient Plugin.

    文字、鏈接(Text and Links)

    jQuery Spoiler plugin.
    Text Highlighting.
    Disable Text Select Plugin.
    jQuery Newsticker.
    Auto line-height Plugin.
    Textgrad - a text gradient plugin.
    LinkLook - a link thumbnail preview.
    pager jQuery Plugin.
    shortKeys jQuery Plugin.
    jQuery Biggerlink.
    jQuery Ajax Link Checker.

    Tooltips

    jQuery Plugin - Tooltip.
    jTip - The jQuery Tool Tip.
    clueTip.
    BetterTip.
    Flash Tooltips using jQuery.
    ToolTip.

    菜單導航(Menus, Navigations)

    jQuery Tabs Plugin - awesome! . [demo nested tabs.]
    another jQuery nested Tab Set example (based on jQuery Tabs Plugin).
    jQuery idTabs.
    jdMenu - Hierarchical Menu Plugin for jQuery.
    jQuery SuckerFish Style.
    jQuery Plugin Treeview.
    treeView Basic.
    FastFind Menu.
    Sliding Menu.
    Lava Lamp jQuery Menu.
    jQuery iconDock.
    jVariations Control Panel.
    ContextMenu plugin.
    clickMenu.
    CSS Dock Menu.
    jQuery Pop-up Menu Tutorial.
    Sliding Menu.

    對齊,幻燈以及折疊(Accordions, Slide and Toggle stuff)

    jQuery Plugin Accordion.
    jQuery Accordion Plugin Horizontal Way.
    haccordion - a simple horizontal accordion plugin for jQuery.
    Horizontal Accordion by portalzine.de.
    HoverAccordion.
    Accordion Example from fmarcia.info.
    jQuery Accordion Example.
    jQuery Demo - Expandable Sidebar Menu.
    Sliding Panels for jQuery.
    jQuery ToggleElements.
    Coda Slider.
    jCarousel.
    Accesible News Slider Plugin.
    Showing and Hiding code Examples.
    jQuery Easing Plugin.
    jQuery Portlets.
    AutoScroll.
    Innerfade.

    拖拽(Drag and Drop)

    UI/Draggables.
    EasyDrag jQuery Plugin.
    jQuery Portlets.
    jqDnR - drag, drop resize.
    Drag Demos.

    XML XSL JSON Feeds

    XSLT Plugin.
    jQuery Ajax call and result XML parsing.
    xmlObjectifier - Converts XML DOM to JSON.
    jQuery XSL Transform.
    jQuery Taconite - multiple Dom updates.
    RSS/ATOM Feed Parser Plugin.
    jQuery Google Feed Plugin.

    瀏覽器(Browserstuff)

    Wresize - IE Resize event Fix Plugin.
    jQuery ifixpng.
    jQuery pngFix.
    Link Scrubber - removes the dotted line onfocus from links.
    jQuery Perciformes - the entire suckerfish familly under one roof.
    Background Iframe.
    QinIE - for proper display of Q tags in IE.
    jQuery Accessibility Plugin.
    jQuery MouseWheel Plugin.

    對話框(Alert, Prompt, Confirm Windows)

    jQuery Impromptu.
    jQuery Confirm Plugin.
    jqModal.
    SimpleModal.

    CSS

    jQuery Style Switcher.
    JSS - Javascript StyleSheets.
    jQuery Rule - creation/manipulation of CSS Rules.
    jPrintArea.

    DOM, Ajax and other jQuery plugins

    FlyDOM.
    jQuery Dimenion Plugin.
    jQuery Loggin.
    Metadata - extract metadata from classes, attributes, elements.
    Super-tiny Client-Side Include Javascript jQuery Plugin.
    Undo Made Easy with Ajax.
    JHeartbeat - periodically poll the server.
    Lazy Load Plugin.
    Live Query.
    jQuery Timers.
    jQuery Share it - display social bookmarking icons.
    jQuery serverCookieJar.
    jQuery autoSave.
    jQuery Puffer.
    jQuery iFrame Plugin.
    Cookie Plugin for jQuery.
    jQuery Spy - awesome plugin.
    Effect Delay Trick.
    jQuick - a quick tag creator for jQuery.
    Metaobjects
    .
    elementReady.

    posted @ 2007-12-06 11:03 阿南 閱讀(4118) | 評論 (5)編輯 收藏
    由于代碼糟糕,所以閉源

    二個多月前中文輸入法小企鵝輸入法開源項目終止的導火索就是被指責代碼寫得很糟糕。當然這里不是討論小企鵝,而是引出另外一個問題,為什么許多公司把他們的軟件當作寶貝,閉源、私有的真正理由也許就是避免尷尬。在冠冕堂皇的理由之下掩蓋了真實的理由:隱藏低劣質(zhì)量的代碼。舉例:Windows,它證明花數(shù)十億美元和使用數(shù)以千計的程序員確實可以生產(chǎn)一個不錯的軟件。有兩種形式的丑陋代碼,一種是Good ugly code(Windows),它整體上不能算第一流,但運行良好,沒有多少缺陷;另一種就是bad ugly code,則是令人討厭的。

    posted @ 2007-12-03 10:41 阿南 閱讀(305) | 評論 (0)編輯 收藏
    網(wǎng)易不是好惹的!

    最近西安的華南虎吵得沸沸揚揚的,今天你告我,明天我告你!事情是一件接一件,什么“搜虎隊”,什么“《科學》轉(zhuǎn)載”,什么“周老漢告網(wǎng)易”,什么“關(guān)克Bolg被黑”,現(xiàn)在又是李昌鈺博士介入!

    事情越來越好玩了,每周一到周末最大快樂就是把上周有關(guān)周老漢的新聞看看,然后笑笑~

    今早上華商網(wǎng)一看~嚇我一條“神探李昌鈺或鑒定虎照 結(jié)果可能出乎所有人意料 2007-12-01 07:23:06”一切來的都是那么突然~連神探李博士都驚動了~喜歡看犯罪類電視的朋友應該對李昌鈺博士不陌生,他是現(xiàn)在美國警界官職最高的亞裔,著名的犯罪鑒定專家,連他都要關(guān)注華南虎事件了~

    再看看

    “神探”李昌鈺對“華南虎照片”發(fā)表意見(圖)

     核心提示:李昌鈺表示,照片中的老虎長時間保持靜態(tài)不合常理,而照片中的老虎和年畫中的老虎斑紋形狀相同,姿態(tài)也很相像。

    神探李昌鈺針對第29張照片的虎紋提出了質(zhì)疑

      神探李昌鈺針對第29張照片的虎紋提出了質(zhì)疑

    相關(guān)新聞進入華南虎專題

        紅網(wǎng)12月2日報道,今天上午8點左右,正在廣西講學的“神探”李昌鈺對“華南虎照片”發(fā)表了初步意見,他表示,照片中的老虎長時間保持靜態(tài)不合常理,而照片中的老虎和年畫中的老虎斑紋形狀相同,姿態(tài)也很相像。

      網(wǎng)易新聞主編林少梅說,網(wǎng)易工作人員昨天趕到廣西南寧,今天上午把照片和年畫帶給李昌鈺鑒定,由于李昌鈺時間安排很緊張,他在看了32張照片以后從物證比對的角度進行分析。“李昌鈺老師對華南虎事件很感興趣,今天早上他說了一下初步的意見。我們會向李老師所在的美國紐海文大學刑事鑒定中心發(fā)出正式的委托申請,等他回美國和鑒定中心的數(shù)碼照片專家們商議之后,將作出正式的答復”,林少梅說。

      根據(jù)網(wǎng)易提供的錄音,李昌鈺說,“這些照片都是靜態(tài)的,沒有什么移動,照片中很多綠色的樹葉,所以一定是生長的季節(jié),這樣的季節(jié)通常樹林里應該有一些蚊子蒼蠅,老虎會一直動驅(qū)趕這些昆蟲”。

      另外,李昌鈺對照片中的老虎和年畫中的老虎進行了對比,“它的斑紋,開始是兩個小的線條,然后有一個圓圈圈,接著是兩個小線條,這里一個像字母‘Y'的紋,這是很特殊的象征”。李昌鈺指出,年畫虎也有同樣的花紋,“是巧合呢,還是同樣一張,我就不太知道。假如老虎專家告訴你,老虎斑紋是不一樣的,那這兩個就太巧合了。所以,初步觀察,兩個老虎斑紋、形狀同樣,同時姿態(tài)很相像。至于照片是不是合成的,要進一步研究”。 (本文來源:紅網(wǎng) )

    聯(lián)系李昌鈺、照片鑒定好戲那個都是網(wǎng)易的人玩的,都是因為周老漢為了40萬,告網(wǎng)易!這次慘了吧~網(wǎng)易不好惹的!錢是小事,關(guān)鍵是讓網(wǎng)易丟人了~讓我們看看鑒定專家的正式鑒定意見吧~

    posted @ 2007-12-02 17:07 阿南 閱讀(547) | 評論 (0)編輯 收藏
    JAVA如何調(diào)用DOS命令

    用Java編寫應用時,有時需要在程序中調(diào)用另一個現(xiàn)成的可執(zhí)行程序或系統(tǒng)命令,這時可以通過組合使用Java提供的Runtime類和Process類的方法實現(xiàn)。下面是一種比較典型的程序模式:
    ...
    Process process = Runtime.getRuntime().exec(".\\p.exe");
    process.waitfor( );
    ...
    在上面的程序中,第一行的“.\\p.exe”是要執(zhí)行的程序名,Runtime.getRuntime()返回當前應用程序的Runtime對象,該對象的exec()方法指示Java虛擬機創(chuàng)建一個子進程執(zhí)行指定的可執(zhí)行程序,并返回與該子進程對應的Process對象實例。通過Process可以控制該子進程的執(zhí)行或獲取該子進程的信息。第二條語句的目的等待子進程完成再往下執(zhí)行。
    但在windows平臺上,如果處理不當,有時并不能得到預期的結(jié)果。下面是筆者在實際編程中總結(jié)的幾種需要注意的情況:
    1、執(zhí)行DOS的內(nèi)部命令
    如果要執(zhí)行一條DOS內(nèi)部命令,有兩種方法。一種方法是把命令解釋器包含在exec()的參數(shù)中。例如,執(zhí)行dir命令,在NT上, 可寫成exec("cmd.exe /c dir"),在windows 95/98下,可寫成“command.exe /c dir”,其中參數(shù)“/c”表示命令執(zhí)行后關(guān)閉Dos立即關(guān)閉窗口。另一種方法是,把內(nèi)部命令放在一個批命令my_dir.bat文件中,在Java程序中寫成exec("my_dir.bat")。如果僅僅寫成exec("dir"),Java虛擬機則會報運行時錯誤。前一種方法要保證程序的可移植性,需要在程序中讀取運行的操作系統(tǒng)平臺,以調(diào)用不同的命令解釋器。后一種方法則不需要做更多的處理。
    2、打開一個不可執(zhí)行的文件
    打開一個不可執(zhí)行的文件,但該文件存在關(guān)聯(lián)的應用程序,則可以有兩種方式。 以打開一個word文檔a.doc文件為例,Java中可以有以下兩種寫法:
    exec("start .\\a.doc");
    exec(" c:\\Program Files\\Microsoft Office\\office\\winword.exe .\\a.doc");
    顯然,前一種方法更為簡捷方便。
    3、執(zhí)行一個有標準輸出的DOS可執(zhí)行程序
    在windows平臺上,運行被調(diào)用程序的DOS窗口在程序執(zhí)行完畢后往往并不會自動關(guān)閉,從而導致Java應用程序阻塞在waitfor( )。導致該現(xiàn)象的一個可能的原因是,該可執(zhí)行程序的標準輸出比較多,而運行窗口的標準輸出緩沖區(qū)不夠大。解決的辦法是,利用Java提供的Process類提供的方法讓Java虛擬機截獲被調(diào)用程序的DOS運行窗口的標準輸出,在waitfor()命令之前讀出窗口的標準輸出緩沖區(qū)中的內(nèi)容。一段典型的程序如下:
    ...
    String ls_1;
    Process process = Runtime.getRuntime().exec("cmd /c dir \\windows");
    BufferedReader bufferedReader = new BufferedReader( \
    new InputStreamReader(process.getInputStream());
    while ( (ls_1=bufferedReader.readLine()) != null)
    System.out.println(ls_1);

    process.waitfor( );
    ...

    以上內(nèi)容為轉(zhuǎn)載~下面內(nèi)容為原創(chuàng)!

    今天在做客戶端程序的自動更新,簡單描述一下,就是從服務器上將更新包下載下來,然后在本地解壓縮,最后刪掉~功能很簡單~

    但是問題出在使用JAVA的ZIP模塊做文件的解壓縮不是想象的那么簡單,資源需要釋放,一個不小心就沒有辦法刪除掉原有ZIP文件了~資源的占用確實是個大問題,但是好在,客戶端程序更新完是要重啟的,一切都煙消云散了~對于刪除不掉ZIP文件的問題,我也流氓一下~用DEL硬刪除~此處一定要注意!

    Process process = Runtime.getRuntime().exec("cmd /c del f:\\aaa.doc");
    這樣的調(diào)用是沒有問題~

    Process process = Runtime.getRuntime().exec("del f:\\aaa.doc");
    這樣寫是不可能對的~

    記錄一下,警告一下后人!

    posted @ 2007-11-29 17:17 阿南 閱讀(16266) | 評論 (14)編輯 收藏
    為什么讀取.properties文件時出現(xiàn)“java.lang.IllegalArgumentException: Malformed \uxxxx encoding”

    今天同事在做調(diào)用EJB讀取properties文件時報出

    java.lang.IllegalArgumentException: Malformed \uxxxx encoding

    異常!沒有見過!

    這個properties文件中配置了文件夾的真實路徑,但是java的Properties竟然無法讀取!真是郁悶!

    g.cn了一下,才發(fā)現(xiàn)其中原由,原來java在讀取properties文件是遇到\就會出現(xiàn)

    java.lang.IllegalArgumentException: Malformed \uxxxx encoding

    異常,問題在這里!

    僅僅把里面出現(xiàn)的\轉(zhuǎn)換為/就可以了!

    posted @ 2007-11-28 19:18 阿南 閱讀(12117) | 評論 (7)編輯 收藏
    你是怎么打開Windows Vista包裝的?

    微軟討論社區(qū)hive上出現(xiàn)了有趣的討論題:購買到漂亮的Vista盒裝"機油桶"包裝后,有很多人會問該如何開包,你是怎么打開Windows Vista包裝的?是小心翼翼地開,盡量保留"全尸"還是生猛破壞?那么Vista的包裝到底要怎么開才能盡量保證不損壞呢?這里有圖解哦!

    Step 1: 了解密封的包裝



    按此在新窗口瀏覽圖片
     
    按此在新窗口瀏覽圖片


    Windows Vista的盒子設(shè)計得非常巧妙,你不會因為打開包裝而導致說明書和光盤跌落.

    Step 2: 揭開密封條



    按此在新窗口瀏覽圖片


    小心解開位于包裝右側(cè)的密封條 

    Step 3: 拉出拉環(huán)


    按此在新窗口瀏覽圖片
     
    按此在新窗口瀏覽圖片
     
    按此在新窗口瀏覽圖片 

    沒錯,就這么簡單, 不需要破壞.

    Step 4: Enjoy Windows Vista!

    雖然我拆過很多包,但我從沒有失過手。哈哈,當然不排除有些包裝打開有點難度,但只要按照上述方法打開,就能保持你的酷酷的Vista包裝完好無損。

    原文:How to open your Windows Vista Box

    posted @ 2007-11-25 21:55 阿南 閱讀(386) | 評論 (0)編輯 收藏
    測試Windows Live Writer

    我也用用看~測試一下!

    posted @ 2007-11-01 14:36 阿南 閱讀(199) | 評論 (0)編輯 收藏
    主站蜘蛛池模板: 久久免费视频观看| 亚洲人成网www| 美景之屋4在线未删减免费| 五月婷婷综合免费| 久久伊人久久亚洲综合| 久久最新免费视频| 亚洲国产精品人人做人人爽| 亚洲AV成人精品日韩一区| 在线观看视频免费完整版| 亚洲国产中文在线视频| 亚洲区日韩精品中文字幕| 无码区日韩特区永久免费系列 | 久久亚洲国产最新网站| 亚洲黄色片免费看| 亚洲综合成人网在线观看| 可以免费观看的毛片| 国产av无码专区亚洲av桃花庵| 亚洲精品无码你懂的| 大地资源二在线观看免费高清 | 99国产精品免费观看视频| 亚洲av永久无码精品秋霞电影影院| 一级做a爰性色毛片免费| 亚洲一本大道无码av天堂| 男人j进女人p免费视频| 亚洲国产精品一区二区三区久久 | APP在线免费观看视频| 亚洲精品乱码久久久久久蜜桃不卡| h片在线播放免费高清| 在线观看亚洲成人| 中国好声音第二季免费播放| 亚洲色爱图小说专区| 成人爽a毛片免费| 亚洲AV无码精品色午夜果冻不卡 | 中文字幕在线视频免费| 国产AV无码专区亚洲AV手机麻豆| 国产免费内射又粗又爽密桃视频| 亚洲综合日韩久久成人AV| 日韩电影免费在线观看网站| 亚洲电影一区二区三区| 182tv免费观看在线视频| 亚洲人成网站18禁止久久影院 |