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

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

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

    隨筆:25 文章:1 評論:66 引用:0
    BlogJava 首頁 發新隨筆
    發新文章 聯系 聚合管理

    2006年6月2日

    Sorry, I have already moved to JavaEye and Fanfou, please update if you have questions.
    posted @ 2009-05-09 22:13 steeven 閱讀(234) | 評論 (0)編輯 收藏
     
    最近讓新來的實習生寫訂餐機器人,羽毛球活動預定機器人,兩個人寫了幾個星期,看得我心急火燎?,F在的研究生啊。。。。

    自己拿來skype4java看了一下,感覺很好用。里面提供了一個application機制,類似socket,又強于socket。為什么說強呢?因為是基于skype, 穿透防火墻啦。
    windows自帶的遠程桌面很好用,在速度上,比以前基于位圖傳送的netmeeting/pcanywhere之類的都要強。
    linux下面的遠程桌面做的比較好的是nx系列。但是這些遠程桌面的致命問題就是網關、防火墻問題。
    就是說你要在家訪問公司電腦,基本上要在防火墻上鑿洞,或者借助于vpn,softether之類的東東。

    skype的application利用skype自身的通訊機制,屏蔽了這些問題,當然,你的應用也必須依賴skype了。

    java做遠程桌面要能截屏、控制鼠標鍵盤,所幸有java.awt.Robot, 原來這個東西是為了做自動化測試,剛好。
    剩下就是穿數據的問題。屏幕圖片,如果是bmp,比較碩大,即使是上網等文本界面,壓縮下來也要幾十k, 如果網絡帶寬不夠的話,比如公司有幾個下載愛好者,會比較慘。所以呢,決定傳差異,緩存前面的屏幕,看看如果差別不大,就只傳變化的部分。這樣數據量就比較小。但是呢,壓縮圖片的時候就不能采用有損壓縮啦,否則屏幕會變得越來越怪異。。。

    比較遺憾的是沒能象windows自帶的rdp那樣攔截繪圖操作,在點陣圖的方案上效率還是比較低的。希望有高手指點!

    skype4java是個日本人寫的,幾個聽了我介紹的朋友都有這疑問:日本人寫的?
    呵呵,如果你能寫出更好的,咱就不用它。那個日本作者還不錯,上班比較忙,還是答應抽空fix幾個bug,感謝中~

    體驗一下吧:skypeRDP
    posted @ 2006-12-06 20:18 steeven 閱讀(2609) | 評論 (6)編輯 收藏
     

    適用版本GWT 1.0.21。
    由于目前google web toolkit還沒有正式release, 所以問題多多。記錄一下碰到的問題:

    1. Shell調試模式和實際編譯結果有差異。
    shell中報告的異常在運行中只是一些凌亂的腳本錯誤,或者干脆沒有響應。
    shell中通過的程序在實際運行時還會有錯誤。
    2. 避免錯誤的方法是捕獲異常,
    在onModuleLoad方法中try catch
    或者GWT.setUnCaughtExceptionHandler()//全局異常捕獲
    3. LOG, 利用GWT.log(). shell模式下會輸出到控制臺。
    4. 遠程調用屬于異步。同步遠程調用可以自己包裝ClientCallback,在一個結束后調用另外一個.
    5. RPC調用中Set傳遞有bug, 暫時用List
    6. Eclipse直接運行Compiler/Shell, 加入gwt-dev-windows.jar。
    main: com.google.gwt.dev.GWTCompiler/GWTShell
    arguments: -out ${project_loc}\WebContent real/Index.html
    classpath->UserEnties->advanced->add folder->選擇項目的src目錄,要在第一位。
    7. Tomcat5問題多多, 用tomcat4.
    8. gwt-user中非法包含javax.servlet, tomcat認為其無效。直接放到tomcat/common/lib中?;蛘咴趈ar中去掉。
    9. Exception.getStackTrace() 在Shell模式下有效, GWT.isScript()可以判斷
    10. 靜態中文在html中亂碼,要在html header中加入<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

    posted @ 2006-07-14 18:10 steeven 閱讀(2950) | 評論 (6)編輯 收藏
     
    開發設計兩個類:
    雞,構造的時候要帶入蛋.
    蛋,構造的時候要帶入雞.

    編譯沒問題,初始化數據的時候問題出來了.
    new 雞(new 蛋(???)) //蛋是誰下的?
    作為一個正統的進化論學生,解決如下:構造原始雞類,雞開始是不下蛋的,把雞的構造函數改成空的,這時候初始化一條原始雞的數據沒問題.然后進化出來蛋,雞下的,類不用改,把蛋的數據初始化好.這時候雞進化,由蛋孵出來,構造方法要帶蛋進來,初始化一只新雞,刪除原始雞數據.

    OK,問題解決了嗎?這樣程序每次初始化數據的時候要改造雞類,好像不大容易啊....

    那上帝造物學說怎樣解決問題呢?:
    雞1 = new 雞(null);
    蛋1 = new 蛋(null);
    雞1.set蛋(蛋1);
    蛋1.set雞(雞1);
    save(雞1,蛋1);
    雞和蛋同時出來了.上帝造物法勝利

    是不是我的類設計有問題,怎么會碰到雞生蛋蛋孵雞這種郁悶的問題呢?
    posted @ 2006-07-02 20:28 steeven 閱讀(1459) | 評論 (2)編輯 收藏
     

    db4o目前還沒有unique index/primary key機制。(5.4)

    ???? public ? static ? void ?main(String[]?args)? {
    ????????ObjectContainer?db?
    = ?Db4o.openFile( " test.yap " );
    ????????db.set(
    new ?User( " abc " , 234 ));
    ????????db.set(
    new ?User( " abc " , 234 ));
    ????????ObjectSet
    < User > ?list? = ?db.query(User. class );
    ????????System.out.println(list);
    ????????db.close();?
    // halt?without?this?line?in?5.2
    ????}

    上面的例子會存儲兩個同樣的User對象。
    僅有的ID是一個存儲文件中的ID, 經過碎片整理之后會發生變化,顯然不適用。
    要實現一個auto_increament的主鍵恐怕要自行實現?;蛘哂靡延械腢UID實現。

    可能db4o太年輕的關系,目前還沒有支援這些功能。建議用@Annotation來實現。并且控制存儲。
    @ID
    @Unique
    @Index
    在EJB3里面已經有現成的定義可以參考。
    posted @ 2006-06-19 18:15 steeven 閱讀(917) | 評論 (0)編輯 收藏
     
    原來說是xaml只是隨著下一個版本的windows放出,后來改編到winfx里面,最近聽說作為.net3.0出現.這樣的直接后果就是這個b/s+c/s通吃的UI框架不但要寄生在新版windows里面,也要被用來在xp上攻城略地.

    微軟這回蓄勢待發xaml有多強大呢?3d(感覺不夠純粹)/強大的數據綁定/動畫/多媒體支持...
    這里可怕的不僅僅是框架,還有配套的GUI開發工具.有趣的是Interactive Designer據說就是用wpf開發的.
    xaml只是個xml描述文件,里面可以包含代碼,編譯成UI界面.所有的界面內容也可以由程序動態運行.
    這樣未來運行在browser里面的UI不是復雜的ajax,是和后臺一致的托管代碼.

    Java怎樣應對呢?Java+Flash? 開發bs都困難重重.除非Flash能放棄as,直接同java結合,或者兩個公司合作開發一個新框架.這個新框架應該是什么樣子呢?完全的3D視角,時間軸控制...重演c#后來居上的歷史.

    Java在Sun的手里一直半死不活,真希望能趕快被google并購,或者sun主動把java捐贈出來.

    如果沒有"意外",在wpf正式發行以后,桌面應用將逐步過渡到wpf開發.HTML由于其跨平臺,可能會平分秋色.

    面對wpf,如何反抗?java.net是太監,在.net陣營里面連二奶都不算,等于投降.
    利用xaml? xaml被編譯加載,其執行框架還是.net,機會似乎不大.在瀏覽器上可能會有類似lasszlo的組合.

    作為Java愛好者,祈禱奇跡發生吧,還好在Java世界中奇跡是家常便飯 :)
    posted @ 2006-06-18 22:57 steeven 閱讀(2456) | 評論 (3)編輯 收藏
     

    一般Apply按鈕應該在用戶有輸入時有效,輸入沒有變化時無效。
    為了達到這個效果,一般界面上每個輸入控件要監聽,并且和以前的值做比較,實現起來相當麻煩。

    因為我們已有的界面是基于數據綁定,綁定到一個克隆的對象上。這樣判斷有沒有變化就很簡單,updateInput之后,比較兩個對象是否一致即可。

    什么時候去判斷呢?在用戶輸入之后:捕捉鍵盤、鼠標事件。

    攔截鍵盤鼠標事件目前找到兩種方法:
    1. Toolkit.getDefaultToolkit().addAWTEventListener(listener,eventMask);
    這個方法注冊全局的監聽機制,無論哪個窗口。里面注冊為weakHashmap,應該不用考慮垃圾回收問題。因為是全局的,不建議采用。
    2. 攔截每個component自己的事件。
    正常來說,如果在textbox里面打字,事件不會交給window處理。enableInputMethods(true)可以幫忙。
    enable以后調用getInputContext(),取得InputContext處理。
    注意,InputContext的dispatchEvent(AWTEvent)會接到各種消息,感興趣的getID()有以下三個:
    ???MouseEvent.MOUSE_CLICKED
    ???MouseEvent.MOUSE_WHEEL
    ???KeyEvent.KEY_TYPED

    posted @ 2006-06-13 16:52 steeven 閱讀(1632) | 評論 (2)編輯 收藏
     
    上海這方面活動比較少,難得逮到一個,跑去湊個熱鬧。天不作美,下班前一場大雨,讓參加的人少了很多。

    零星記了一些筆記,對我這個ajax門外漢來說收獲還是很大。主講是ajaxcn.org的兩位高手。robbin的Rubby講座因為時間關系要改期。

    1. JS2的一些新特性:class/extend/interface/package/import/塊作用域/操作符函數. 明年底會有browser開始支持。
    //干脆把java直接搬到browser里面算了。
    //以后是不是弄個標準接口允許加載不同語言的腳本引擎?大家就不用受js的鳥氣了。
    2. 推薦的ajax框架:Dojo/DWR/Prototype/GWT/YUI
    //排名有先后
    3. 新技術:
    canvas 畫圖,已有多數瀏覽器支持。據說有人用它實現了3D游戲
    SVG 基于xml的矢量圖。據說和canvas都支持3d繪圖。
    E4X: xml的包裝, firefox支持
    4. 技術和需求水漲船高 //我們不會失業了
    5. HiJax:
    用傳統方式快速開發。在傳統網頁基礎上hack成ajax應用。
    對禁用js的瀏覽器表現為傳統網頁。
    前期開發和后期改造獨立性很強。
    //后期要改造為完美的ajax,對server端要做些小的改動來適應。
    6. 推薦用FireFox調試AJAX, 插件三劍客:
    firebug/web develope tool/temper data分別用來調試腳本,觀察頁面dom,監聽通信。
    //js調試的日子好過多了,但不要忘記總體效率。。。

    回來路上和一位tx聊起來ajax在企業中的地位好像不高,他對敏捷開發很有好感,對辦公室環境的要求很有趣。
    本次活動的主要心得是:自助餐很好吃,以后有活動還要去吃 :)
    posted @ 2006-06-07 23:44 steeven 閱讀(1326) | 評論 (4)編輯 收藏
     
    gwt的這些特性還是很有意思的,感覺比echo更貼近html, 比如說尺寸等數據,寫"20%"和"200px"都可以。echo則盡量封裝的象swing, 屏蔽掉html.

    anyway, 對于大多數邏輯都在客戶端的應用,gwt可以大展身手。比如小游戲~

    guess number demo看這里:http://steeven.googlepages.com/MyApp.html
    完全在瀏覽器上運行的玩意,沒有寫一句js,感覺還是很爽的~

    代碼如下:
    package?org.steeven.gwt.test.client;

    import?com.google.gwt.core.client.EntryPoint;
    import?com.google.gwt.user.client.Random;
    import?com.google.gwt.user.client.ui.Button;
    import?com.google.gwt.user.client.ui.ClickListener;
    import?com.google.gwt.user.client.ui.DialogBox;
    import?com.google.gwt.user.client.ui.Grid;
    import?com.google.gwt.user.client.ui.HasHorizontalAlignment;
    import?com.google.gwt.user.client.ui.RootPanel;
    import?com.google.gwt.user.client.ui.TextBox;
    import?com.google.gwt.user.client.ui.VerticalPanel;
    import?com.google.gwt.user.client.ui.Widget;

    /**
    ?*?
    @author?steeven@gmail.com
    ?
    */

    public?class?MyApp?implements?EntryPoint?{

    ????TextBox?txtCount?
    =?new?TextBox();

    ????
    private?Grid?pnlMain;

    ????
    private?Button[]?numbers?=?new?Button[100];

    ????
    private?int?target;

    ????
    private?int?count;

    ????
    private?DialogBox?box;

    ????
    private?Button?btnRetry;

    ????
    private?Button?btnClose;

    ????
    /**
    ?????*?This?is?the?entry?point?method.
    ?????
    */

    ????
    public?void?onModuleLoad()?{
    ????????VerticalPanel?pnlStatus?
    =?new?VerticalPanel();
    ????????pnlStatus.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
    ????????pnlStatus.setSpacing(
    20);

    ????????txtCount.setEnabled(
    false);
    ????????txtCount.setVisibleLength(
    10);
    ????????pnlStatus.add(txtCount);
    ????????btnRetry?
    =?new?Button();
    ????????btnRetry.setHTML(
    "<img?src=\"replay.gif\"/>?<u>R</u>etry");
    ????????btnRetry.setAccessKey(
    'r');
    ????????btnRetry.addClickListener(
    new?ClickListener()?{
    ????????????
    public?void?onClick(Widget?sender)?{
    ????????????????doInit();
    ????????????}

    ????????}
    );
    ????????pnlStatus.add(btnRetry);

    ????????Button?btnAbout?
    =?new?Button();
    ????????btnAbout.setHTML(
    "<img?src='about.gif'/>?<u>A</u>bout");
    ????????btnAbout.setAccessKey(
    'a');
    ????????btnAbout.addClickListener(
    new?ClickListener()?{
    ????????????
    public?void?onClick(Widget?sender)?{
    ????????????????doAbout();
    ????????????}

    ????????}
    );
    ????????pnlStatus.add(btnAbout);

    ????????RootPanel.get(
    "status").add(pnlStatus);

    ????????pnlMain?
    =?new?Grid(10,?10);
    ????????RootPanel.get(
    "main").add(pnlMain);

    ????????
    for?(int?i?=?0;?i?<?100;?i++)?{
    ????????????numbers[i]?
    =?new?Button();
    ????????????numbers[i].setText(i?
    +?"");
    ????????????numbers[i].addClickListener(
    new?ClickListener()?{
    ????????????????
    public?void?onClick(Widget?sender)?{
    ????????????????????doGuess(sender);
    ????????????????}

    ????????????}
    );
    ????????????pnlMain.setWidget(i?
    /?10,?i?%?10,?numbers[i]);
    ????????}


    ????????box?
    =?new?DialogBox();
    ????????box.setPopupPosition(
    400,?200);
    ????????btnClose?
    =?new?Button("<u>C</u>lose",?new?ClickListener()?{
    ????????????
    public?void?onClick(Widget?sender)?{
    ????????????????box.hide();
    ????????????????doInit();
    ????????????}

    ????????}
    );
    ????????btnClose.setAccessKey(
    'c');
    ????????box.add(btnClose);
    ????????doInit();
    ????}


    ????
    protected?void?doGuess(Widget?sender)?{
    ????????Button?btn?
    =?(Button)?sender;
    ????????btnRetry.setEnabled(
    true);
    ????????
    int?n?=?Integer.parseInt(btn.getText());
    ????????txtCount.setText(
    ""?+?(++count));
    ????????
    if?(n?==?target)?{
    ????????????numbers[n].setEnabled(
    false);
    ????????????btnClose.setFocus(
    true);
    ????????????box.clear();
    ????????????box
    ????????????????????.setHTML(
    "<center><img?src='win.gif'/><h1>YOU?WIN!!!</h1><br/><br/><br/>");
    ????????????box.add(btnClose);
    ????????????box.show();
    ????????}
    ?else?{
    ????????????
    if?(n?<?target)
    ????????????????
    for?(int?i?=?0;?i?<=?n;?i++)
    ????????????????????numbers[i].setEnabled(
    false);
    ????????????
    else
    ????????????????
    for?(int?i?=?n;?i?<?100;?i++)
    ????????????????????numbers[i].setEnabled(
    false);
    ????????}


    ????}


    ????
    protected?void?doAbout()?{
    ????????box.clear();
    ????????box
    ????????????????.setHTML(
    "<img?src='about.gif'/><h1>Guess?Number</h1><h3>Google?web?toolkit?test</h3>");
    ????????box.add(btnClose);
    ????????box.show();
    ????}


    ????
    private?void?doInit()?{
    ????????btnRetry.setEnabled(
    false);
    ????????target?
    =?Random.nextInt(99);
    ????????count?
    =?0;
    ????????txtCount.setText(
    "0");
    ????????
    for?(int?i?=?0;?i?<?100;?i++)?{
    ????????????numbers[i].setVisible(
    true);
    ????????????numbers[i].setEnabled(
    true);
    ????????}

    ????}


    }


    第一次玩gwt, 總共花了3個小時,菜呀
    posted @ 2006-06-02 15:23 steeven 閱讀(1846) | 評論 (13)編輯 收藏
    CALENDER
    <2006年6月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

    常用鏈接

    留言簿(10)

    隨筆分類

    隨筆檔案

    文章檔案

    相冊

    我的鏈接

    搜索

    •  

    最新評論

    • 1.?re: 編程使用SDO[EMF兄弟篇]
    • 最近也在看這個,有沒有好點的文章和代碼啊,有的話麻煩給些,謝謝,郵箱:
      huanggenping2002@163.com
    • --zebrahgp
    • 2.?re: SNMP親密接觸
    • 請問,我在接收Trap時,同時有多個設備發送,在同一時間接收到的會有丟失的情況,怎么解決呢?snmp4j自帶的ThreadPool類有沒有在這方面起到多線程作用?
    • --analyser
    • 3.?re: 編程使用SDO[EMF兄弟篇]
    • 我也在研究soa,如果你有sdo方面的代碼,麻煩您給我一份作為參考,謝謝
      郵箱: litao5168@sohu.com 謝謝
    • --litao
    • 4.?re: 編程使用SDO[EMF兄弟篇]
    • 我也在研究soa,如果你有sdo方面的代碼,麻煩您給我一份作為參考,謝謝
    • --litao
    • 5.?re: 編程使用SDO[EMF兄弟篇]
    • 評論內容較長,點擊標題查看
    • --1984prince

    Powered By: 博客園
    模板提供滬江博客

    主站蜘蛛池模板: 一级毛片免费在线观看网站| 特级毛片全部免费播放| 国产一区二区三区免费| 亚洲精品无码专区在线在线播放| 久久九九久精品国产免费直播| 亚洲综合久久夜AV | 在线视频网址免费播放| 亚洲国产精品一区第二页 | 亚洲av无码专区在线观看素人| 黄色毛片视频免费| 亚洲熟妇无码乱子AV电影| 日本人成在线视频免费播放| 久久青青草原亚洲av无码app| 国产在线观看麻豆91精品免费| 亚洲不卡1卡2卡三卡2021麻豆| 成人在线视频免费| 在线精品自拍亚洲第一区| 国产成人综合亚洲AV第一页| 精品成人免费自拍视频| 亚洲av无码专区在线| 国产免费av片在线播放| 两个人日本WWW免费版 | 免费一看一级毛片人| 一个人免费观看视频在线中文| 亚洲级αV无码毛片久久精品| 91成人免费观看| 久久人午夜亚洲精品无码区| 亚洲中文字幕伊人久久无码| 一级毛片在线免费观看| 国内精品久久久久影院亚洲| 亚洲国产综合精品中文字幕| 亚洲成人免费在线| 午夜亚洲国产理论片二级港台二级| 国产亚洲精品拍拍拍拍拍| 免费福利在线播放| 免费精品视频在线| 亚洲精品视频久久| 免费不卡中文字幕在线| 日韩插啊免费视频在线观看 | 亚洲欧美日韩中文字幕在线一区 | 国产AⅤ无码专区亚洲AV|