關注的太多,似乎太累了。于是整理一下路線,在有空的時候關注:
          web presentation Framework:
          JSF ajax(Struts似乎沒有研究必要了,雖然早就用了好久,但是源碼沒有通讀過,現在看來還是觀望struts Ti后再說)
          Spring
          Hibernate
          足夠了,不繼續累自己了……

          posted @ 2005-12-05 15:47 BlueO2 閱讀(342) | 評論 (0)編輯 收藏

          http://bennolan.com/behaviour/   為了避免在html中引入過多的script tag,尤其現在富客戶端應用很火的時候,script寫的就越發的多。
          官方網站舉了一個這樣子的例子

          <div id="image_16209134_normal">
          <script language="Javascript">
          photo_hash['
          16209134'] = new Object();
          photo_hash['
          16209134'].title =
           '2am on Saturday';
          </script>
          <h4 id="title_div16209134" 
              style
          ="margin-bottom: 0px; margin-top: 0px;">

              2am on Saturday
          </h4>
          <script type="text/javascript">initPhotosUserPageTitle_div('16209134');</script>

          這是Flickr上面一段代碼。確實,它使得代碼閱讀起來結構不清晰了。Behavior應用之后,不需在元素上寫明觸發事件要執行的方法,比如
          <a onclick="this.parentNode.removeChild(this)" href="#">
          Click me to delete me
          </a>
          而變成了
          <ul id="example">
          <li>
          <a href="/someurl">Click me to delete me</a>
          </li>
          </ul>
          那么javascript如果找到這個a鏈接并加上onclick事件方法的呢?采用css selector

          var myrules = {  
          '#example li' : function(el){  
          el.onclick = function(){   
          this.parentNode.removeChild(this);  
          } }};
          Behaviour.register(myrules); 確實看起來,html清爽了,但是,卻引入了其他的元素。ok,我們可以為每個控件定義id,其實也未嘗不可,asp.net不也是web component開發的時候都定義id的么?可似乎又脫褲子放屁之嫌。在維護一個對某一組應用相同樣式或響應
          相同方法的html控件上應用behavior,有意義,起碼不必每個上面都寫上onclick之類的,但是對于更普遍的應用,每個html控件要做得事情是不同的啊。那個時候,不但用behavior代碼量增加了,而且維護一個var myrules里的內容和去刪除控件上的onclick其實工作量差不多。真正的應用可不是demo啊,列出來一排link寫著remove me,然后執行一樣的動作。
          不過正如我上面說的,還是有一定的應用場景的,大家可以在有此需求的時候考慮,還有一Behaviour.js





          posted @ 2005-11-24 23:10 BlueO2 閱讀(961) | 評論 (1)編輯 收藏

               摘要: 本想翻譯IBM的一篇文章 Build apps using Asynchronous JavaScript with XML 但是發現不如就按照那個方式想怎么寫就怎么寫。之后有時間了會把其中的一個系列從基本應用到使用DWR框架的翻出來,也許對一些被AJAX buzz word一直騷擾但是沒親密接觸的人有些用處。嗯,把dojo也列入計劃吧,但愿我能堅持。由于JAVA版 servlet+web.xml...  閱讀全文

          posted @ 2005-11-24 00:21 BlueO2 閱讀(1585) | 評論 (1)編輯 收藏

          我不知道CMMI都影響了些什么,除了留給我無盡的meeting和文檔,但是迭代周期,構建頻率,測試方法等等跟開發息息相關的卻沒有任何實質性指導。我不知道這個是不是就是根據我們這個沒做前號稱超級輕松 時間超級富裕tailor過的結果。
          可是CMMI就像大象,即使體格小,也是象,一旦計劃制定了,似乎無論情況怎樣,都無法迅速反應。像我們這個小小的,需求拿了一個多月,編碼卻只有 2周的項目,CMMI沒有任何控制的跡象??赡苷f:沒有CMMI你們更加混亂。會么?我看不出來還能再混亂到什么地步了。
          在客戶在海外,需求不明,QA反應遲鈍的情況下,CMMI只能讓我們用meeting來充斥一次次等待客戶確認需求的時間。
          我相信如果用敏捷方法指導開發絕對不會導致目前的混亂局面。首先測試一方面,我感覺V MODEL十分適合,在需求拿到了 demo產出的時候,function test case就應該設計出,那個時候會讓我們盡可能少的去想實現,而把用戶體驗和功能徹底做好。而high level design完成的時候 Intergrated Unit test case就應該設計完成(也許對一個技術十分不成熟的團隊來說此要求過高,大家沒有任何設計測試用例的經驗),當detail design完成的時候,Unite Test case 也應該隨之產生,這樣也不知不覺地開始了測試驅動開發。而我想周圍的同事都習慣性的寫好了一個功能點了部署到服務器,跑一下,出錯了以后,根據tomcat可憐的報錯信息開始跟蹤調試,無數的log.debug更甚至無數的system.out。這個還好,僅僅影響效率而已。可是沒有任何對迭代的指導,導致各自為戰,馬上要集成了,哇,崩潰了。一個程序集成的時候是麻煩最大的時候。大家自己的模塊集成單元測試都沒做好,怎么能做這種IT呢?如果我們至少一周構建一次(根據開發計劃,因為我們不是一個敏捷團隊),怎么會導致今天這種崩潰的局面呢?まいたな!
          事總要有人做的,程序員修煉三部曲之項目自動化之道已經躺在我的枕邊。但愿我的努力和大家這次的教訓能讓我們下個項目在deliver之前不用再集體加班……

          posted @ 2005-11-09 22:56 BlueO2 閱讀(352) | 評論 (0)編輯 收藏

          軟件即服務,微軟可能遲遲不肯承認不愿意擁抱這種趨勢的原因,可能就是服務目前還停留在通過網絡提供的階段(可能也只有通過網絡才能體現這一理念),而軟件通過服務暴露給客戶,就意味著對操作系統的淡化--這一微軟賴以發家的金母雞,當然還有office。而為何微軟又開始承認此趨勢呢?可能只有bill gates才知道??赡艽蠹叶歼@么設想軟件的未來,并且Google之類的公司也一直在向此方向努力,給了微軟太大的壓力。www.live.com 這個被微軟提升到了戰略高度的雛形產物,說實話,我太笨,在沒看到各種解說可評論之前還沒看出來與以前myMsn有何差別。不過可能就是理念不同,將來發展方向不同吧。MyMsn主要給用戶一個信息的集合點,一個個人信息的門戶,當你add content的時候,你得到的是FOX BBC等新聞 天氣預報等咨詢。而window live add content將來可能會添加服務,軟件的服務,比如微軟也說過要把office作為服務提供,將以授權形式的收入轉化為廣告盈利。微軟一直都是一個創新型的公司,不知這次的絕地反擊,會給google YAHOO AOL等公司帶來怎樣的沖擊。
          BTW,一直想實踐一下webwork(or JSF)+hibernate的應用,中間搭配spring or EJB,可是總是想起碼要做點有意義的東西吧。什么有意義呢?想來想去,重新發明個輪子的,誰讓我沒創意呢,做個個人portal。也許以后每個人的操作系統都是網絡定制的呢……

          posted @ 2005-11-07 16:30 BlueO2 閱讀(417) | 評論 (0)編輯 收藏

          http://www.google.com/reader
          google又提供了一項新服務,其實這種服務早就有,比如bloglines國內的gougou.com,google并非所有都是最有創意的,但是google的推出總是伴隨著改良,不但用戶體驗絕對做的沒話說,功能上總是毫不遜色。而google幾乎成了創新的代名詞,及時這種rss訂閱,大家肯定也會像我一樣迫不及待用上google,看看到底和大家的有什么不同。我真的是越來越離不開,可怕的是google成為了幾乎最了解我的人,通過他的強大的數據庫,他存儲著我喜歡搜索什么信息,都與什么人email來往,喜歡讀什么新聞,將來shopping的站點本地化了,它還會知道我喜歡去什么店,喜歡搜索什么品牌的衣服,加上Map服務,它知道我比較經常去哪里出差,居住在哪里……知道了這些有什么用?如果我是一個音樂發燒友,某一天google把taobao收購了,它天天在我耳邊告訴我xxx以低價拍賣xxxmp3 xxx MD,我能不去看么?google知道我喜歡川菜,適當的時候,友好的方式,提醒我川外川正在打折,我能不去么?而google收購的okut社會關系網絡網站,我的朋友的資料它都可以掌握。google為我們提供的服務越多,它就越了解我們,而我們就越離不開google.記得看雜志,office11(2003)設計的時候要依托sharepoint server,大家都在線上,系統使用office,office就是一個大網絡,最終沒能實現而已。當初微軟不惜動用重金打造IE,因為B/S架構下的應用,客戶們不會依賴操作系統,而是瀏覽器。瀏覽器的習慣養成了,并且一切工作都通過網絡進行,客戶們甚至會因為windows不和mozila兼容而使用linux吧。應用越來越多的需要online方式工作,我感覺office最后就應該是一個富客戶端而已,每個企業都有一個未來版本的sharepoint or xxx server,員工擁有的僅僅是一個office富客戶端,大家聯機協同辦公,甚至通過自己的share point server 與外界溝通,廣域網協同辦公。office不是正在訂制標準么?微軟不參加很正常,當office辦公軟件成了標準,比如說文件交換格式(office 2003對xml支持很好了吧),那么,微軟無法一家獨大了,我甚至可以通過google的在線服務,或者為了便捷下載很小的客戶端將文件編輯然后客戶用他們購買的windows office打開觀看,通過Google talk or msn溝通。我們日常公司里大多數數據并非存在與數據庫,而是成千上萬的office documents,如果office成了標準,google就可以提供企業局域網搜索服務,按照標準文件格式搜索。
          不過google想撼動微軟,我感覺一定還要開發操作系統的,硬件越來越便宜,客戶端還是要執行大量復雜的運算,并不會成為網絡中的一個通過瀏覽器看世界的小終端。我不是為微軟咸吃蘿卜淡操心,而是,google確實給了我們很多驚喜,不管戰況怎樣,勝利的都是我們用戶。

          posted @ 2005-10-09 22:50 BlueO2 閱讀(357) | 評論 (0)編輯 收藏

          也算是Struts in Action的讀書筆記吧~~~
          1 實現業務層接口
          public class ArticleForm extends ActionForm implements ArticleBean{
          //...
          }
          調用ArticleBean articleBean = (ArticleBean)form;
          articleModel.update(articleBean.getKey(),articleBean);
          2  手動初始化
          ArticleForm aForm = (ArticleForm)form;
          ArticleBean aBean = new ArticleBean(aFrom.getxxxx..,.,.,.);
          4 提供工廠方法
          ActionForm中封裝此方法
          public ArticleBean getArticleBean(){
          ArticleBean aBean = new ArticleBean(
          this.getXXXX,
          this.getXXXX,
          ......
          )
          }
          5 傳遞Map對象
          用BeanUtils包或者手動產生于ActionForm
          public Map describe(){
            map = new HashMap();
            map.add("xx",this.getXXX());
            map.add("xx",this.getXX());
              //......
          }
          6 反射傳遞數據
          寫于action
          BeanUtils.copyProperties(myBusinessBean,myActionForm);
            //Business Object's somemethod
          BeanUtils.copyProperties(myActionForm,myBusinessBean);

          posted @ 2005-10-08 15:40 BlueO2 閱讀(524) | 評論 (0)編輯 收藏

          我什么時候也起這么惡心的題目了,可能和某些同志混久了,也喜歡抓眼球了。言歸正傳,banq老爺子(這么叫挺可愛的),就是jdon創始的那個banq,其實我一直有些佩服有些BS的復雜情緒看待這樣一個人,banq技術上確實有幾下,起碼不是只會吵架的人,能研究些東西,但是,看他吵架和寫東西確實不是很舒服,總是感覺什么東西都是他banq的最好,他的jdonframework比spring先進阿,HiveMind框架的思想他早就有啊之類的……翻翻帖子,看看gigix robbin怎么和banq結的梁子,有時候不禁噴飯。但是似乎所有大牛都有個特點,什么東西都要評頭品足,我就納悶,世界上有這樣的人么?什么東西都研究的明明白白的。今天好不容易閑了,去jdon看看熱鬧,看有人吵架每(這心里夠bt),結果看到banq解答的struts問題的帖子,sigh,要是普通人我早就反駁了,可是因為是banq,我又再次翻出來以前看的資料和源碼才敢指出:banq,u r wrong.而且是很基礎的很本質的錯誤。問題如下:
          感覺Struts標簽太繁瑣了,想用 struts+velocity ,但是頁面如果沒有html:form等struts標簽,頁面的form elements 是否能賦值到formbean中,formbean中的validate方法是否還有效。
          banq的理解:
          當然不會有效。每個字段實際是通過:
          <html:text name="ACTIONFORM名稱" propert=""
          其中name很重要,指定了使用哪個ActionForm。
          俺給個解答,也請指出不足和理解上的偏頗:
          name:The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized.
          Any JavaBean can be used with the Struts JSP tags to populate a control. But to provide automatic validation of the input, Struts uses its own JavaBean subclass,called the ActionForm.
          The ActionForm solution
          The Struts solution to HTTP parameter handling is to transform the input fields into JavaBean properties. When a property on the ActionForm matches a parameter in the request, the framework automatically sets the property to the value of the parameter. A Struts developer can work with a trusty JavaBean and leave the HTTP rigmarole to the framework.To harvest request parameters, all the Struts developer needs to do is provide an ActionForm with JavaBean properties that match the names of the HTTP parameters. The rest is automatic.

          具體如何automatic解析,ActionForm如何被控制,有空再寫,畢竟struts研究的系列心得才進行了很少篇blog,現在忙著webwork2 hibernate spring

          posted @ 2005-10-08 12:13 BlueO2 閱讀(405) | 評論 (0)編輯 收藏

          今天晚上被討厭的vba郁悶,以后誰再跟我說vb簡單易用我跟誰急。由于計劃上每天都要繼續討論java基礎語言特性,所以最近也返璞歸真,重讀thinking in java。發現了一個問題如下:
          在第9章 持有你的對象arrays的比較章節,有如此代碼片斷:
          String[] s1 = new String[5];
          Arrays.fill(s1,"hi");
          String[] s2 = {"hi","hi","hi","hi","hi"};
          System.out.println(Arrays.equals(s1,s2));
          輸出結果true
          Bruce給出的解釋是s1的所有元素指向同一個對象,s2卻擁有5個不同對象,但是Arrays.equals比較的是內容,還特意強調通過Object.equals(),所以結果為true.
          首先,我們看看Arryas.fill(s1,"hi")如何工作:
          SRC:
          public static void fill(Object[] a, Object val) {
                  fill(a, 0, a.length, val);
              }
          public static void fill(Object[] a, int fromIndex, int toIndex,Object val){
                  rangeCheck(a.length, fromIndex, toIndex);
                  for (int i=fromIndex; i<toIndex; i++)
                      a[i] = val;
              }
          顯然所有的s1中原素指向了相同的一個對象"hi"這里Bruce沒錯,那么后面的s2是否擁有5個不同的對象呢?我們做以下代碼測試(其中捎帶著String類型的測試)
          import java.util.Arrays;
          public class profit{
                  public static void main(String args[]){
                          String s1 = "Hi";
                          String s2 = "Hi";
                          String s3 = new String("Hi");
                          String s4 = new String("Hi");
                          if(s1==s2) System.out.println("s1 s2 equal");
                          if(s3==s4) System.out.println("s3 s4 equal");
                          //System.out.println(s3.hashCode());
                          //System.out.println(s4.hashCode());
                          String[] strArray = new String[2];
                          Arrays.fill(strArray,"hello");
                          if(strArray[0]==strArray[1]) System.out.println("strArray equal");
                          String[] strArray2 = {"hello","hello"};
                          if(strArray2[0]==strArray2[1]) System.out.println("strArray2 equal");
                          String[] strArray3 = {new String("hello"),new String("hello")};
                          if(strArray3[0]==strArray[1]) System.out.println("strArray3 equal");

          輸出結果:
          ---------- Run ----------
          s1 s2 equal
          strArray equal
          strArray2 equal

          Output completed (1 sec consumed) - Normal Termination
          首先,各位應該明白最基礎的東西 ==實現的比較是淺比較,就是非reference指向的具體對象內容,而是是否指向了同一個對象。第二,String類型被設計為非可變類,就是說 String s1 = "hi";與String s2 = "hi";其實指向了同一個對象,只有用new構造函數的時候才會產生新的對象,而不管內容是否已經在內存中存在。如下文字闡述了一些:
          s = new String("Initial Value");
          每次都會調用構造器,生成新對象,性能低下且內存開銷大,并且沒有意義,因為String對象不可改變,所以對于內容相同的字符串,只要一個String對象來表示就可以了。也就說,多次調用上面的構造器創建多個對象,他們的String類型屬性s都指向同一個對象。
          上面的結論還基于這樣一個事實:對于字符串常量,如果內容相同,Java認為它們代表同一個String對象。而用關鍵字new調用構造器,總是會創建一個新的對象,無論內容是否相同
          ok,回到我們的話題上來String[] s2 = {"hi","hi","hi","hi","hi"};是否產生了5個不同的對象呢?我寫的簡單的測試代碼

          String[] strArray2 = {"hello","hello"};
           if(strArray2[0]==strArray2[1]) System.out.println("strArray2 equal");
          的結果大家應該得出了結論了吧。
          那么,bruce給出的代碼的結果之所以為true就是因為,這么多個數組中的成員"hi"其實都是同一個對象。那么我們繼續看Arrays.equals是否比較的內容呢?
          SRC:
          public static boolean equals(Object[] a, Object[] a2) {
                  if (a==a2)
                      return true;   //如果指向同一對象,當然是相同的,返回true
                  if (a==null || a2==null)
                      return false;  //如果為null就沒有相等的一說,false

                  int length = a.length;
                  if (a2.length != length)  //長度不同
                      return false;

                  for (int i=0; i<length; i++) {
                      Object o1 = a[i];
                      Object o2 = a2[i];
                      if (!(o1==null ? o2==null : o1.equals(o2)))  //此處為關鍵,object的equals比較,Arrays.equals并沒有專門為String類型重載此方法,全部都依賴Object的方法比較
                          return false;
                  }

                  return true;
              }

          那么我們再看看Object這個樹根的equals方法吧:
          public boolean equals(Object obj) {
           return (this == obj);
              }

          短短幾行代碼,但是,是淺比較毫無疑問,所以,bruce說的,依賴的是Object.equals,比較的是內容,更是錯誤的。
          但是必須強調的是,當String數組傳遞進來的時候,由于java的RTTI執行期型別辨識,Arryas.equals調用的其實是String.equals方法,而String.equals方法是比較內容的,所以,此處我想是bruce沒有說明白,而又偏偏列舉了String的例子。如果是自己寫的類有沒有復寫equals方法,此時就調用Object.equals了,那么根本不可能比較內容,所以Arrays.equals大家一定要知道怎么回事再用。

          posted @ 2005-10-08 12:05 BlueO2 閱讀(511) | 評論 (0)編輯 收藏

          僅列出標題
          共3頁: 上一頁 1 2 3 

          posts - 29, comments - 3, trackbacks - 0, articles - 0

          Copyright © BlueO2

          主站蜘蛛池模板: 望都县| 吉林省| 墨竹工卡县| 当阳市| 绿春县| 沽源县| 武清区| 光山县| 沁阳市| 双峰县| 太保市| 蕲春县| 成武县| 青岛市| 于都县| 武乡县| 达尔| 通许县| 衡水市| 长顺县| 沂源县| 青河县| 新田县| 冀州市| 洪湖市| 嘉峪关市| 当阳市| 昌宁县| 屯留县| 桦川县| 广饶县| 崇义县| 荆门市| 章丘市| 德钦县| 葵青区| 阿克| 高雄县| 康定县| 东至县| 屯留县|