From http://www.javacodegeeks.com/2012/10/java-code-quality-tools-overview.html
open source 的好優點也是缺點就是,一個問題可以找到很多解法。
但是因為也因為太多解法,所以要挑合適的 solution 必須花很多時間。
光光一個 Test 工具,就可以列出這麼多個。
要看完大概要花上一兩年吧。
這篇列出的Test Tool 大概比較著名的就是前幾個。
PMD , CheckStyle ,
2013年2月9日 星期六
2013年1月15日 星期二
Java 日期 Parse. DateFormat.setLenient
一般使用 Java 從字串轉成日期,通常會使用 SimpleDataFormat 做轉換。
例如:
但是如果你不小心給錯格式,那會怎樣? 例如 MM/dd/yyyy 給成了 yyyy/MM/dd , 你猜會怎樣?
在 DateFormat 有一個 method , 可以解決此問題。 setLenient
例如:
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class DataSample { public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat(); sdf.applyPattern("MM/dd/yyyy") ; try { Date d = sdf.parse("01/17/2013") ; System.out.println(d) ; } catch (ParseException e) { e.printStackTrace(); } } }會得到
Thu Jan 17 00:00:00 CST 2013這是再自然不過了。
但是如果你不小心給錯格式,那會怎樣? 例如 MM/dd/yyyy 給成了 yyyy/MM/dd , 你猜會怎樣?
答案會 beyond imagination 。直覺應該會出錯,但不會,而且會有一個日期跑出來!!!
Tue Sep 01 00:00:00 CST 184哪怎麼辦?
在 DateFormat 有一個 method , 可以解決此問題。 setLenient
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class DataSample { public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat(); sdf.applyPattern("MM/dd/yyyy") ; sdf.setLenient(false); try { Date d = sdf.parse("2013/01/17") ; System.out.println(d) ; } catch (ParseException e) { e.printStackTrace(); } } }會得到
java.text.ParseException: Unparseable date: "2013/01/17" at java.text.DateFormat.parse(DateFormat.java:357) at DataSample.main(DataSample.java:13)
2013年1月12日 星期六
Portal
什麼是 Portal。
簡單的說就是集合各類的網站的入口網站,行話叫做 web application(called "portlets") 的集合。
最著名的就是 igoogle , 或是 windows 8 都是這樣的概念。
進入 Portal 後,就可以透過這樣的介面,進入到不同的網站去,通常都是我們感興趣的內容。
而且這些內容會隨著時間而更新,所以不完全是被動的網頁。
每個獨立的網站,活在 Portal 下的,就稱為 Porlet。
而這些各自的 Porlet 內容,又會因為個人又有差異。例如天氣,Mail 等各自獨立的資訊都不同。
而為了達到傳遞各自不同的資訊,所以一些資訊的控制,如登入就顯得重要了。
為了達到這麼複雜的功能,需透過特別的 Portal Sever 來做控制,而每個個別的內容,又需要Porlet Container 來轉成特定的內容。Portal Server有幾個著名的例如 Liferay 分為 Community 和 Enterprise 版本。Jboss 的 GateIn。
在 Java 的標準裡,是有定義 Portal 的。JSR 168 定義 Portal 1.0 , JSR 268 定義 Portal 2.0
題外話:
iGoogle 一度是我的首頁,今天再去看的時候突然發現此好用的功能要 sunset 了,猜想因為要推銷自家的 Chrome, 才出此下策吧。
簡單的說就是集合各類的網站的入口網站,行話叫做 web application(called "portlets") 的集合。
最著名的就是 igoogle , 或是 windows 8 都是這樣的概念。
進入 Portal 後,就可以透過這樣的介面,進入到不同的網站去,通常都是我們感興趣的內容。
而且這些內容會隨著時間而更新,所以不完全是被動的網頁。
每個獨立的網站,活在 Portal 下的,就稱為 Porlet。
而這些各自的 Porlet 內容,又會因為個人又有差異。例如天氣,Mail 等各自獨立的資訊都不同。
而為了達到傳遞各自不同的資訊,所以一些資訊的控制,如登入就顯得重要了。
為了達到這麼複雜的功能,需透過特別的 Portal Sever 來做控制,而每個個別的內容,又需要Porlet Container 來轉成特定的內容。Portal Server有幾個著名的例如 Liferay 分為 Community 和 Enterprise 版本。Jboss 的 GateIn。
在 Java 的標準裡,是有定義 Portal 的。JSR 168 定義 Portal 1.0 , JSR 268 定義 Portal 2.0
題外話:
iGoogle 一度是我的首頁,今天再去看的時候突然發現此好用的功能要 sunset 了,猜想因為要推銷自家的 Chrome, 才出此下策吧。
2013年1月2日 星期三
Grails 2.2
Grails 又升級了!
最近的升版都很快,才剛適應 2.1 , 2.2 又來了。
根據官網的說法,升級重點如下
http://grails.org/doc/2.2.x/guide/introduction.html#whatsNew22
1.Namespace support
Bean names for Service artifacts provided by a plugin are now prefixed with the plugin name
grails 有一個很討厭的東西,就是 groovy 的 class name 不能重複,即使 package name 不一樣也不行。不然 runtime 時常常會給你驚喜!!
因此 Grails 決定如果名稱衝突的話,將會加上 plugin name 成為預設的 Serivce or Bean name, 讓 DI 找到對的 class。
Domain Class 的 Bean name 有了 plugin name , 將會影響建 DB 的 table name。當然也是可以設定的。
2.Forked Tomcat Execution
Grails 2.2 supports forked JVM execution of the Tomcat container in development mode.
嗯,我想最大的好處就是減少 memory 使用量,跟減少 Jar 檔衝突的可能。
3.SQL Projections In Criteria Queries
4.Groovy 2
最大的進展就是從 Groovy 1.8 跳到 Groovy 2 。除了對JDK 7 的 Support 外(Project coin),一些 enhancement 都有針對 Groovy 太動態,而產生無法管教的問題做一些修正。像是static type checking @TypeChecked , 或是 Static compilation @CompileStatic
訂閱:
文章 (Atom)