- 1. 你们的项目组使用源代码管理工具了么?
MVM:应该用。VSS、CVS、PVCS、ClearCase、CCC/Harvest、FireFly都可以。我的选择是VSS。
2. 你们的项目组使用缺陷管理系统了么?
MVM:应该用。ClearQuest太复杂,我的推荐是BugZilla。
3. 你们的测试组还在用Word写测试用例么?
MVM:不要用Word写测试用例(Test Case)。应该用一个专门的系统,可以是Test Manager,也可以是自己开发一个ASP.NET的小网站。主要目的是Track和Browse。
4. 你们的项目组有没有建立一个门户网站?
MVM:要有一个门户网站,用来放Contact Info、Baselined Schedule、News等等。推荐Sharepoint Portal Server 2003来实现,15分钟就搞定。买不起SPS 2003可以用WSS (Windows Sharepoint Service)。 Read More - 现在基本用 Eclipse,所有的操作都在无声无息中进行的,除了操作系统带来的咔嚓声还有你的呼哧声。怀念起使用 JBuilder 的时代了,在 JBuilder 中编译、执行程序或 Ant 脚本,在成功或失败时都有不同的声音提醒。
那我们不妨也来用 JFugue 让 Ant 构建成功或失败时发出不同的声音,关于 JFugue 的使用在 让 Java 轻松乐动起来,使用 JFugue 制作自己的音乐 介绍过。这样我们就能在闭目养神中完成 Ant 的构建,听声音就知道成功还是失败。当然,敏捷过程中多是在晚上无人值守的时候完成自动构建,那晚上可要小心,别吓着鬼了。
实现原理,启动 ant 时用参数 -logger YourLoggerClass 指定你自己的 Logger 类(也是一个监听器),在你的 Logger 类的 buildFinished(BuildEvent event) 时,发现无异常,表示成功,用 JFugue 发出一种声音,有异常时,表时失败,用 JFugue 发出另外一种声音。 Read More - 不夸张的说,Groovy 在使用 JDBC 对数据库的操作上是简化到了极致。Groovy 中的 SQL 支持在 groovy.sql 包中,而其中最耀眼的明星就数 groovy.sql.Sql 了。
现在我们就来体验一下 GroovySQL 给我们带来的快感。这里所用的示例数据库是 derbyDB, JDK 1.6 中附带了这个数据库(叫做 JavaDB),MyEclipse 6.X 也带了 DerbyDB。假设我们把它安装在 C:\Java\JavaDB,那么在 C:\Java\JavaDB\demo\databases 下有一个 toursdb(目录) 数据库。我们就用这个,当然你可以使用你手边已有的或最拿手的数据库。 Read More - 一:Java 与 Groovy 读文件操作比较
Groovy 对 java.io.File 进行了扩展,增加了一些接受闭包参数和简化文件操作的方法。作为对比,我们还是先来看看 java 中读取文件的两种常方法,分别是行读取和字节缓冲区读取:1//--BufferedReader 行读取 2BufferedReader br = null; 3try { 4 br = new BufferedReader(new FileReader("foo.txt")); 5 List<String> content = new ArrayList<String>(); 6 String line = null; 7 while((line=br.readLine())!=null){ 8 content.add(line); 9 } 10} catch (FileNotFoundException e) { 11} catch(IOException e){ 12} finally{ 13 if(br != null){ 14 try { 15 br.close(); 16 } catch (IOException e) { 17 } 18 } 19}1//--借助于 buffer 缓冲区来读字节 2InputStream is = null; 3try { 4 is = new FileInputStream("foo.txt"); 5 StringBuffer content = new StringBuffer(); 6 int read = -1; 7 byte[] buffer = new byte[1024]; 8 while((read=is.read(buffer))!=-1){ 9 content.append(new String(buffer,0,read)); 10 } 11} catch (FileNotFoundException e) { 12} catch(IOException e){ 13} finally{ 14 if(is != null){ 15 try { 16 is.close(); 17 } catch (IOException e) { 18 } 19 } 20}
从上面可看到,采用 Java 传统方式来读取文件内容,不仅代码行多,而且还必须自己用 try/catch/finally 来处理异常和资源的关闭。现在马上来看看 Groovy 完成以上工作的代码是怎么的,只要一行代码: Read More - 学过或用过 Basic 的朋友大约还会记得,在 Basic 里要演奏(当时还是从 PC 喇叭里发出的,现在也能走声卡了)一段 哆来咪发唆拉西哆 可以写成:直接用 JDK 可没有这么简单,虽然 JDK 1.3 开始就引入了 Java Sound API 处理 MIDI(Musical Instrument Digital Interface),可是它的接口很难使用, 另外,Sun 也专为视、音频的捕获、回放、格式转换提供了 Java Media Framework API (JMF),但不能用来创作。有一个开源的组件 JFugue(http://www.jfugue.org/), 它能让你尽显音乐方面的天赋,给你一个高级易用的接口来操作 Java Sound,制作自己的 MIDI 音乐。 Read More
1PLAY "C D E F G A B O6C" 闭包还为我们提供了改善处理复杂 try/catch/finally 结构的方法。利用闭包,很容易编写正确处理资源和异常的代码。使用闭包的新方法已经添加到处理文件、进程和数据库连接的标准 Java 类中。当它们用在 Groovy 中的时候,不必处理和担心资源的关闭。首先我们来看看 Groovy 实现这一方式的原理。我们假设有这么一个资源处理类。
1class Resource{ 2 public Resource(String resourceName) throws ResourceException{ 3 //open the resource 4 } 5 6 public Object read() throws ResourceException{ 7 //return data or false as the end marker 8 } 9 10 public void close() throws ResourceException{ 11 //close the resource 12 } 13}那么我们的打开、读取和关闭资源的典型的 Java 代码看起来就像这样: Read More
- 做企业应用的也不时要与 LDAP 打交道的,例如组织架构、人员的管理,权限的分级控制等。以前管理 LDAP 都是用客户端工具 LDAP Browser 什么的,有时不甚方便。幸运的是,网上有一个现成的、功能完备的 LDAP Web 管理工具,那就是赫赫有名的 phpMyAdmin 的姊妹 phpLDAPadmin。
Web 方式的 phpLDAPadmin 利于发布,随处使用,基本上它有 LDAP Browser 客户端工具的所有功能,诸如条目管理、属性管理、导入导出、条件搜索等。还有比 LDAP Browser 所没有的 Schema 信息明细展示功能。
phpLDAPadmin 的界面截图请见:http://phpldapadmin.sourceforge.net/screenshots.php
您也可以进到 phpLDAPadmin 的 Demo 站点:http://thesmithfam.org/phpldapadmin-demo/htdocs/index.php 先睹为快。 Read More - Groovy 中提供了一个减少输入的特性叫做命名参数(Named Parameter)。GroovyBean 可以通过在构造器调用中传递冒号隔开的属性名称和值进行构建。如:
1car = new Car(model : "BMW", color : "black");
其实类似的用法早已有之,这有如 C++ 中的初始化成员列表,VB、Python、Transact-SQL 中的命名参数,JavaScript 中的 JSON 写法,Ruby 中提供的 syntax sugar用 hash 模拟所谓的 keyword argument。
我们先详细介绍 Groovy 的命名参数的用法与本质,然而再附上其他一些语言类似用法的实例,纵向贯通以加深印象。
要说从外部表现上好像是先调用了空构造方法,然后是相应的 setter 方法进行设值。因此,我们所直接想像的应该相当于下列 Java 代码 Read More - 一. 认识闭包
将代码块作为方法参数进行传递,这种机制就叫做闭包。闭包可以引用在创建闭包的范围中可见的变量。最近关于闭包的讨论也比较多,闭包能使语言更具灵动性,在动态脚本语言中较广泛的支持,如 Perl、Python、Ruby、JavaScript,还有我们的 Groovy。
有些语言能把函数作为参数传递,如 JavaScript 的回调函数,Python,甚至是 C++ 的函数指针。而 Java 在这方面又略逊一筹,需搬动一个匿名的内部类来实现类似的功能,内部类只能访问外部声明为 final 的变量。不过有呼声要在 Java SE 7 中增加闭包特性,让我们试目以待吧。
Groovy 这回大概是从 Ruby 那儿偷得闭包的语法。前面说这么多,其实你看到了就会发现,其实闭包很简单的,不信,请看: Read More - 一提到 Perl,很多人对它啧啧称道的就是它那强大的正则表达式。一段富含正则表达式的 Perl 代码能让人觉得眼花缭乱,不过一旦习惯了就会对此爱不释手。而 Java 是在 1.4(在之前的版本需要依靠 jakarta-oro 库来提供对正则表式的支持--也是参考了 Perl) 中才加入了正则表达式,但它的相关操作还是略显古板。
当从 Java 分化出 Groovy 脚本语言一支,在处理正则表达式时也不想落后,从 Perl 那里学来了一些更为紧凑的语法,使用起来方便多了。虽相比 Perl 还有些差距,基本还是能知足了。下面来介绍 Groovy 中如何使用正则表达式,还是从 Java 的正式表达式说开,好有个对比。
比如在 Java 中要检查一段文本是否与某个模式相匹配,使用代码: Read More