cerulean

          2009年6月24日

          從上班開(kāi)始沒(méi)多久,就開(kāi)始用Evernote,是portable 2.2版本。
          好記性不如爛筆頭。真的是做到了隨手記,尤其是搜索功能簡(jiǎn)單易用,用來(lái)挖很久以前記下的tips,界面也很簡(jiǎn)潔,明了、夠用。
          備份也方便,反正換了電腦,文件夾直接拷貝,數(shù)據(jù)沒(méi)丟。

          就這樣,一用多少年過(guò)去了。
          如今,“印象筆記”在iphone應(yīng)用推薦榜的筆記類(lèi)里一直居高位,圖標(biāo)也早就不是我v2.2的老土模樣,如果不是英文名字就叫evernote,我完全對(duì)不上號(hào)。
          人家其實(shí)從v3開(kāi)始就不是老土的本地應(yīng)用了,都講究“云”了。

          雖然手頭的v2.2完全滿(mǎn)足我隨手記一記的需求,但是,本著與時(shí)俱進(jìn)和稍微保證一下數(shù)據(jù)的安全性,我還是下了個(gè)最近的v4.x的版本,結(jié)果發(fā)現(xiàn)還是要從v3開(kāi)始才能導(dǎo)入v2的數(shù)據(jù)。嗯,看來(lái)是落后太久了。
          有一點(diǎn)夸獎(jiǎng)一下:免費(fèi)賬戶(hù)的每月上傳容量是有限的,但是對(duì)于我這種文本筆記,夠傳3w條的。

          ——嗯,其實(shí),本來(lái)只是個(gè)小軟件的更新而已,竟然跑到blogjava寫(xiě)上一篇,可能是因?yàn)榘殡S感吧,再有點(diǎn)兒時(shí)過(guò)境遷的唏噓。
          posted @ 2012-11-22 11:35 cerulean 閱讀(451) | 評(píng)論 (1)編輯 收藏
          春節(jié)過(guò)后這幾天干的活兒就沒(méi)一件痛痛快快的?
          第一天是發(fā)現(xiàn)編譯環(huán)境有異動(dòng),我以為是代碼有問(wèn)題,折騰了1天多。。。
          第二天是自己機(jī)器上的IE8抽瘋弄得我以為是build有問(wèn)題。。。
          第三天從TimesTen轉(zhuǎn)到Psql的各種毛病。。。

          好吧。言歸正傳:
          1)找一個(gè)跟表無(wú)關(guān)的通用的單純的select語(yǔ)句作為測(cè)試語(yǔ)句不容易啊,
          Dual是Oracle自帶的表,其他DBS木有的。。不用Dual的話Oracle又不認(rèn)。

          2)Cause: org.postgresql.util.PSQLException: Method org.postgresql.jdbc2.Jdbc2PreparedStatement.setQueryTimeout(int) is not yet implemented.
          這個(gè)錯(cuò)誤,把sqlMapConfig.xml中在settings里配置的defaultStatementTimeout去掉就可以避免了。但是,這個(gè)配置對(duì)PSQL應(yīng)該OK啊。。。待查

          【續(xù)】——
          defaultStatementTimeout 確實(shí)不是所有的driver都支持的。
          但去掉的話,TimesTen又不干了:太囧了。。。
          [TimesTen][TimesTen 7.0.5.9.0 CLIENT]Query Timeout must be numeric; if the Network Timeout
          is non-zero, the Query Timeout must be greater than zero and less than the Network Timeout, else if the Network Timeout is zero, the Query Timeout must be greater than or equal to zero.
          兜兜轉(zhuǎn)轉(zhuǎn)又遇到了這個(gè)之前遇到過(guò)的問(wèn)題。這些driver就不能統(tǒng)一統(tǒng)一咩!

          posted @ 2012-02-01 17:32 cerulean 閱讀(1201) | 評(píng)論 (0)編輯 收藏
          parseInt(String s, int radix) 
          Parses the string argument as a signed integer in the radix specified by the second argument.

          今兒頭回用,真是……反省ing

          posted @ 2012-01-18 17:28 cerulean 閱讀(364) | 評(píng)論 (0)編輯 收藏
          文檔寫(xiě)到現(xiàn)在,猛然說(shuō)不上abbreviation 和 acronym 的區(qū)別。。。真是慚愧。。。
          abbreviation:?jiǎn)卧~、語(yǔ)句的縮略形式,縮到短一點(diǎn)兒。
          acronym:“首字母”縮寫(xiě)
          posted @ 2011-12-05 15:21 cerulean 閱讀(505) | 評(píng)論 (0)編輯 收藏
          之前都沒(méi)注意過(guò)有這么個(gè)方法,否則判斷日期格式就太不靠譜了。
          又是晦澀的單詞:setLenient(false),嚴(yán)格匹配日期格式
                  SimpleDateFormat df = new SimpleDateFormat("MMddyyyy");
                  
          /*
                   * With lenient parsing, the parser may use heuristics to interpret inputs that 
                   * do not precisely match this object's format. 
                   * With strict parsing, inputs must match this object's format. 
                   
          */
                  df.setLenient(
          false);
                  
          try {
                      Date a 
          = df.parse("23232011");
                      System.out.print(
          "date: " + a);
                  } 
          catch (java.text.ParseException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }

          posted @ 2011-07-18 17:23 cerulean 閱讀(3210) | 評(píng)論 (0)編輯 收藏
          i18n,之前在J2EE里,自然用struts來(lái)做。但是Web Service里貌似應(yīng)該不需要這部分,但是實(shí)際上,有些操作還是避免不了要支持多國(guó)語(yǔ)言。
          查了一圈兒,好像WS-i18n還在working draft的階段,而且好像已經(jīng)好幾年了……也沒(méi)找到什么開(kāi)源中間件的實(shí)現(xiàn)。
          大意是在SOAP header中加上<i18n:international>相關(guān)的標(biāo)簽。
          因?yàn)楫吘故荳eb Service,利用http header還是不太妥,還是要放在SOAP里面。

          記錄一下查到的鏈接,備用。

          http://www.coderanch.com/t/224875/Web-Services/java/Web-Services-Internationalization-jax-ws
          For a SOAP web service the language/country code should be part of the SOAP request and possibly the SOAP response. You can always base your solution on the above WS-I18N working draft.
          Internationalization isn't as big a priority with SOAP web services as it is with web pages as web services are consumed by other applications - not humans. In most cases normalized "generic data" is exchanged which is displayed on the client using the client's locale. SOAP web services exchanging localized text are pretty much in the minority.

          http://www.w3.org/TR/ws-i18n/


          posted @ 2011-06-15 16:49 cerulean 閱讀(283) | 評(píng)論 (0)編輯 收藏
          這回是更加深深地體會(huì)到IDE的重要性了!
          想當(dāng)初要不是eclipse,估計(jì)上手過(guò)程會(huì)很痛苦;
          后來(lái)myeclipse的官方網(wǎng)站竟然封掉了;
          現(xiàn)在,眼巴巴瞅著NetBeans美麗的GUI Builder,假如當(dāng)年Swing那部分是用NetBeans開(kāi)發(fā)的,或者NetBeans可以不要那個(gè).form的文件直接解析代碼,就好了啊!!!
          唉……
          posted @ 2010-08-11 16:32 cerulean 閱讀(330) | 評(píng)論 (0)編輯 收藏
          繁瑣的登陸過(guò)程讓人抓狂,telnet到第一臺(tái)機(jī)器輸入用戶(hù)名之前,點(diǎn)擊SecureCRT里menu->Script->Start recording script,錄下接下來(lái)的步驟,然后點(diǎn)擊Stop recording script,就會(huì)提示保存腳本。以后登陸時(shí),選擇Run腳本就可以了。
          posted @ 2010-07-07 08:54 cerulean 閱讀(298) | 評(píng)論 (0)編輯 收藏
          遍歷集合,批量刪除時(shí),遇到ConcurrentModificationException
          因?yàn)椴僮鞯募蠒?huì)在過(guò)程中遇到結(jié)構(gòu)性的改變,例如:
          HashMap<String, String> testMap = new HashMap<String, String>();
                  testMap.put(
          "1""a");
                  testMap.put(
          "2""b");
                  testMap.put(
          "3""c");
                  Set
          <Map.Entry<String,String>> enterySet = testMap.entrySet();
                  

                  
          for(Iterator<Map.Entry<String, String>> i = enterySet.iterator(); i.hasNext();){
                      Map.Entry
          <String, String> entry = i.next();
                      
          if(entry.getValue().equalsIgnoreCase("a")){
                          testMap.remove(entry.getKey());
                      }

                  }


          解決方法:不要在集合上刪除,而是在迭代器上刪除:i.remove();

          p.s.還有另外一個(gè)可能性是多線程同時(shí)操作該集合了,那需要進(jìn)行同步來(lái)避免。
          posted @ 2010-06-11 13:57 cerulean 閱讀(379) | 評(píng)論 (0)編輯 收藏
          引子只是個(gè)小問(wèn)題,JTextArea多行文本,想設(shè)置文字的對(duì)齊方式為居中對(duì)齊,卻發(fā)現(xiàn)死活沒(méi)有合適有效的方法,又試了JTextField和JLabel,都不理想。搜了一溜夠看到JTextPane的解決方法,其實(shí)真是有點(diǎn)兒大材小用了。JTextPane里可以設(shè)置style,對(duì)齊方式、字體字號(hào)、顏色等等,并且還可以設(shè)置style的作用范圍,挺方便的。另外,想把文字區(qū)域背景設(shè)為透明的也是在API中找了一通,才發(fā)現(xiàn)敢情就是setOpacity,呃,對(duì)這個(gè)單詞實(shí)在是太不敏感了。。。。

          把在coderanch上搜的例子貼在這里吧,以防以后忘了:
          import java.awt.*;  
          import javax.swing.*;  
          import javax.swing.text.*;  
             
          public class Styling  
          {  
              
          public Styling()  
              
          {  
                  String text 
          = "To refer to locations within the sequence, the " +  
                                
          "coordinates used are the location between two " +  
                                
          "characters.\nAs the diagram below shows, a location " +  
                                
          "in a text document can be referred to as a position, " +  
                                
          "or an offset. This position is zero-based.";  
             
                  SimpleAttributeSet aSet 
          = new SimpleAttributeSet();   
                  StyleConstants.setForeground(aSet, Color.blue);  
                  StyleConstants.setBackground(aSet, Color.orange);  
                  StyleConstants.setFontFamily(aSet, 
          "lucida bright italic");  
                  StyleConstants.setFontSize(aSet, 
          18);  
             
                  SimpleAttributeSet bSet 
          = new SimpleAttributeSet();  
                  StyleConstants.setAlignment(bSet, StyleConstants.ALIGN_CENTER);  
                  StyleConstants.setUnderline(bSet, 
          true);  
                  StyleConstants.setFontFamily(bSet, 
          "lucida typewriter bold");  
                  StyleConstants.setFontSize(bSet, 
          24);  
             
                  JTextPane textPane 
          = new JTextPane();  
                  textPane.setText(text);  
                  StyledDocument doc 
          = textPane.getStyledDocument();  
                  doc.setCharacterAttributes(
          105, doc.getLength()-105, aSet, false);  
                  doc.setParagraphAttributes(
          0104, bSet, false);  
             
                  JFrame f 
          = new JFrame();  
                  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
                  f.add(
          new JScrollPane(textPane));  
                  f.setSize(
          400,400);  
                  f.setLocation(
          200,200);  
                  f.setVisible(
          true);  
              }
            
             
              
          public static void main(String[] args)  
              
          {  
                  
          new Styling();  
              }
            
          }
            
          posted @ 2010-03-10 17:20 cerulean 閱讀(7902) | 評(píng)論 (1)編輯 收藏
          之前用axis2生成代碼的時(shí)候都沒(méi)有在意過(guò),一路用default configuration下來(lái)。
          前一陣子發(fā)現(xiàn)以前的代碼在生成時(shí)選擇的data binding不是用默認(rèn)的adb方式,而是用xmlbeans。
          google了一番不同數(shù)據(jù)綁定的區(qū)別,好像也沒(méi)什么結(jié)果,大意就是adb的最簡(jiǎn)單,但是有局限性;xmlbeans支持的比較全面,但是用起來(lái)有點(diǎn)兒復(fù)雜。不過(guò),我也沒(méi)有體會(huì)出來(lái)xmlbeans強(qiáng)大在哪里……只是知道生成的代碼更多了,調(diào)用起來(lái)更繞彎子而已。。。

          server端用xmlbeans生成,client端用adb生成,互通是沒(méi)有問(wèn)題的。
          client端用xmlbeans生成時(shí),需要把產(chǎn)生于resources里面的所有.class文件打成jar包加到client端的build path里,否則運(yùn)行client加載類(lèi)的時(shí)候就會(huì)報(bào)錯(cuò)了,好詭異,太不友好了。
          類(lèi)似這種錯(cuò)誤:

          ClassNotFoundException : Cannot load SchemaTypeSystem. Unable to load class with name schemaorg_apache_xmlbeans.system.s68C41DB812F52C975439BA10FE4FEE54.TypeSystemHolder. Make sure the generated binary files are on the classpath.


          所幸是在官方網(wǎng)站上有說(shuō)明:http://ws.apache.org/axis2/tools/1_2/CodegenToolReference.html
          posted @ 2009-12-30 15:59 cerulean 閱讀(694) | 評(píng)論 (0)編輯 收藏
          一個(gè)JNLP文件中的資源必須由同一個(gè)證書(shū)簽名
          當(dāng)需要不同證書(shū)時(shí),可以創(chuàng)建多個(gè)JNLP文件,并在主JNLP文件中引用之。

          遇到過(guò)的問(wèn)題:找不到子JNLP文件中的資源
          解決方法:竟然把子JNLP文件放到比主JNLP文件所在目錄低一級(jí)就可以了?!
          posted @ 2009-11-20 15:13 cerulean 閱讀(483) | 評(píng)論 (0)編輯 收藏

           

          JLabel.setText("<html>auto new line</html>");
          JLabel.setText("<html>line<br>force new line</html>");

           

          posted @ 2009-10-29 11:43 cerulean 閱讀(3451) | 評(píng)論 (1)編輯 收藏
          費(fèi)了半天勁,敢情Firefox在3.0版本后又支持彈出modal window啦
          window.showModalDialog


          posted @ 2009-09-22 15:59 cerulean 閱讀(344) | 評(píng)論 (0)編輯 收藏
          HttpClient.getHttpConnectionManager().getParams().setSoTimeout()
          HttpClient.getHttpConnectionManager().getParams().setConnectionTimeout()

          第一個(gè)針對(duì)連接建立后,但是沒(méi)有收到response的超時(shí)時(shí)間,測(cè)試時(shí)可將server simulator收到request后等一段時(shí)間后再回response。
          出錯(cuò)信息:
          java.net.SocketTimeoutException: Read timed out

          第二個(gè)針對(duì)連接建立的超時(shí)時(shí)間,測(cè)試時(shí)可將目的IP地址設(shè)為不存在的IP地址。
          出錯(cuò)信息:
          org.apache.commons.httpclient.ConnectTimeoutException: The host did not accept the connection within timeout of 8000 ms
                  at org.apache.commons.httpclient.protocol.ReflectionSocketFactory.createSocket(ReflectionSocketFactory.java:154)
          默認(rèn)值為0,如果不設(shè)置的話大概2分多鐘才會(huì)得到異常


          posted @ 2009-09-10 16:09 cerulean 閱讀(5181) | 評(píng)論 (1)編輯 收藏
          導(dǎo)入了某證書(shū)至truststore,建立SSL連接時(shí)遇到錯(cuò)誤
          javax.net.ssl.SSLKeyException: RSA premaster secret error
          Caused by: java.security.InvalidKeyException: Illegal key size or default parameters

          在windows上雙擊查看該證書(shū)時(shí)發(fā)現(xiàn)Public Key是4096bit,查了一番后發(fā)現(xiàn)Java默認(rèn)好像不能處理這么長(zhǎng)的key,必須要按照J(rèn)CE的一個(gè)Unlimited Strength Jurisdiction Policy
          http://java.sun.com/javase/downloads/index_jdk5.jsp里面就有下載,這樣貌似就可以處理這種強(qiáng)度比較高的了。


          posted @ 2009-09-08 17:24 cerulean 閱讀(2089) | 評(píng)論 (0)編輯 收藏
          打印數(shù)組的方法,小地方,卻老忘記,來(lái)自FindBugs的提示:
          The code invokes toString on an array, which will generate a fairly useless result such as [C@16f0472. Consider using Arrays.toString to convert the array into a readable String that gives the contents of the array.

          Arrays提供一系列接收不同類(lèi)型數(shù)組作為參數(shù)的toString方法

          String[] array = new String[]{"a","b","c"};
          System.out.println(Arrays.toString(array));

          posted @ 2009-08-17 15:17 cerulean 閱讀(1180) | 評(píng)論 (0)編輯 收藏
          FindBugs,http://findbugs.sourceforge.net/
          發(fā)現(xiàn)代碼中潛在bug的工具,有eclipse的插件,安裝后右鍵單擊java project name,點(diǎn)擊Find Bugs,切換到FindBugs得perspective可以看到結(jié)果,速度還比較快,比之前用過(guò)的一個(gè)(雖然已經(jīng)記不得名字了)快一些~具體的效果還是要逐個(gè)分析。

          Bug categories:

          Correctness bug
          Probable bug - an apparent coding mistake resulting in code that was probably not what the developer intended. We strive for a low false positive rate.
          Bad Practice
          Violations of recommended and essential coding practice. Examples include hash code and equals problems, cloneable idiom, dropped exceptions, serializable problems, and misuse of finalize. We strive to make this analysis accurate, although some groups may not care about some of the bad practices.
          Dodgy
          Code that is confusing, anomalous, or written in a way that leads itself to errors. Examples include dead local stores, switch fall through, unconfirmed casts, and redundant null check of value known to be null. More false positives accepted. In previous versions of FindBugs, this category was known as Style.
          Multithreaded correctness
               Incorrect lazy initialization and update of static field
               Calls Thread.sleep() with a lock held: better to use wait(lock)
               Synchronization on interned String could deadlock: 最好不用字符串,以免重復(fù)
          Performance
               invokes inefficient new String() constructor
               concatenates strings using + in a loop: better to use append StringBuffer
               inner class usage


          posted @ 2009-08-14 16:04 cerulean 閱讀(993) | 評(píng)論 (0)編輯 收藏
          Server

          創(chuàng)建本地證書(shū):

          keytool -genkey -alias testserver-keyalg RSA -keystore keystore

          其中alias自己起一個(gè)別名,keystore為證書(shū)庫(kù)的文件路徑

          還可以加上-keysize 1024、2048、4096等來(lái)指定公鑰的大小,由此導(dǎo)出的證書(shū)查看時(shí)可以看到公鑰的大小是與之一致的。keysize越大genkey時(shí)耗費(fèi)時(shí)間越長(zhǎng)。


          會(huì)要求鍵入一個(gè)密碼,為這個(gè)證書(shū)庫(kù)的訪問(wèn)密碼

          會(huì)要求填寫(xiě)一些信息,姓名、單位、地區(qū)之類(lèi)

          最后要求鍵入一個(gè)密碼,為這條證書(shū)別名的密碼

          導(dǎo)出cert

          keytool -export -alias testserver-file testcert.cer -keystore keystore

          這里的別名和文件名同上一步


          Client

          直接導(dǎo)入cert

          Truststore文件中存儲(chǔ)的是作為client,信任那些server的證書(shū)。所以需要將server提供的證書(shū)導(dǎo)入進(jìn)來(lái)(當(dāng)然可以導(dǎo)入n個(gè)),client才能信任。

          keytool -import -alias testserver-file testcert.cer -keystore truststore

          導(dǎo)入時(shí)需要輸入密碼,該密碼應(yīng)該是truststore文件的訪問(wèn)密碼,密碼正確才能修改其信息。

          提示是否信任該證書(shū)信息,確認(rèn)。

          查看證書(shū)信息:

          keytool –list –v –keystore truststore

          如果導(dǎo)入過(guò)多個(gè),則可以看到多條entry

          刪除某一個(gè)證書(shū)entry,通過(guò)指定別名來(lái)刪:

          keytool -delete -alias testserver-keystore truststore


          上述是自簽名的證書(shū),證書(shū)鏈的長(zhǎng)度只為
          1

          真正商用時(shí),需要找相關(guān)機(jī)構(gòu)(例如verisign)認(rèn)證通過(guò)才能成為有效的證書(shū):

          生成證書(shū)簽名請(qǐng)求:

          keytool -certreq -keyalg RSA -alias testserver -file certreq.csr -keystore keystore

          之后能夠收到一個(gè)證書(shū)文件,證書(shū)鏈信息包含了該機(jī)構(gòu)的一些信息,然后再導(dǎo)入。


          有兩種方法建立
          HTTPS連接,

          一種是,在java中可以設(shè)置相關(guān)的4個(gè)系統(tǒng)參數(shù),指向相關(guān)的keystore,truststore,一旦設(shè)置,在運(yùn)行時(shí)就不可改變了。除非一定要使用多個(gè)不同的證書(shū)庫(kù)文件,否則可以把多個(gè)不同證書(shū)都導(dǎo)入到同一個(gè)證書(shū)庫(kù)里,這樣,設(shè)置系統(tǒng)參數(shù)為唯一的值也夠用,而且也比較簡(jiǎn)單一些。

          另一種是,自己繼承相關(guān)接口實(shí)現(xiàn)自己的證書(shū)管理器,這樣可以自定義相關(guān)行為,也可以load不同的證書(shū)庫(kù)。


          如果不設(shè)置
          password,就認(rèn)為不檢查文件完整性,也能通過(guò)。如果設(shè)置了password,但是不正確,則會(huì)遇到密碼錯(cuò)誤的異常;如果server證書(shū)沒(méi)有導(dǎo)入到client得信任列表里,則會(huì)遇到找不到可信證書(shū)的異常。

          posted @ 2009-07-16 17:27 cerulean 閱讀(578) | 評(píng)論 (0)編輯 收藏
          一個(gè)反編譯的好工具,600KB,簡(jiǎn)單好使又免費(fèi),比之前用過(guò)的好~
          http://java.decompiler.free.fr/?q=jdgui
          posted @ 2009-06-24 13:45 cerulean 閱讀(300) | 評(píng)論 (0)編輯 收藏

          導(dǎo)航

          <2009年6月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          統(tǒng)計(jì)

          常用鏈接

          留言簿(3)

          隨筆分類(lèi)

          隨筆檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 广河县| 铜鼓县| 汝南县| 阿城市| 苍山县| 安多县| 丰县| 渑池县| 莫力| 阿城市| 渭南市| 独山县| 余干县| 乾安县| 新余市| 牙克石市| 衡水市| 灯塔市| 九龙城区| 台中市| 柳州市| 延吉市| 南投县| 民乐县| 富平县| 许昌市| 大石桥市| 温泉县| 诸城市| 阆中市| 朝阳市| 建始县| 南木林县| 阿拉善左旗| 资讯 | 沙河市| 黄龙县| 循化| 绥芬河市| 莱阳市| 景德镇市|