在我工作的项目中有这样一个需求。当通过自动部署脚本将当前一个CI构建的WAR包部署到指定服务器后,需要验证该WAR包是否被部署成功。

在这个项目中,持续集成服务器使用的是Jenkins,构建脚本使用的是maven,向服务器的部署使用的是Groovy写的部署脚本,调用了Tableuax API。

Jenkins上有两个job,一个CI job,一个dev job。
每次提交代码都会在Jenkins上trigger CI ob,这个job会执行配置的maven命令mvn clean install,如果构建成功,会自动trigger dev job。这个job会执行部署脚本,部署脚本负责调用Tableuax API将前一个job构建的war包部署到服务器上。

Read More

即使用octopress写博客又需要同步到其他站点的同学们有福了。本人写了一个octopress下的插件,用于将octopress中的最新的一篇博客同步到支持MetaWeblog API的博客站点中去。(wordpress、博客园、CSDN、51CTO、新浪、网易……)

这款插件源码被host在github上,地址是https://github.com/huangbowen521/octopress-syncPost

Read More

Karma是一款运行JavaScript测试的工具。它支持大部分的JavaScript测试框架,并支持多浏览器跑测试、自动监听文件运行测试等功能,实在是JavaScript开发的必备测试利器。有了它,基本不用再一遍遍手动刷新页面来trigger测试了。它的原名是testacular,也不知道作者咋想的,突然之间把项目名称改了。

WebStorm则号称是世界上最聪明的JavaScript的IDE。(事实证明,确实如此)。JavaScript code自动提示、浏览器实时同步更新、支持HTML5, node.js, TypeScript, CoffeeScript, ECMAScript Harmony, LESS…秉承了JetBrains这个牛逼公司的一贯传统。

Read More

前段时间曾经写过一篇文章,《优秀程序员无他-善假于物也》。其中谈到一点是优秀的程序员必须要能灵活的掌握常用软件的快捷键。对于程序员来说,每天使用时间最长的软件恐怕就是IDE(Integrated Development Environment)了。如果你是C#的程序员,那么就基本非Visual Studio莫属了。而如果你是Java的程序员,那么eclipse,myeclipse或者Intellij都有人用之。如果你是Ruby等动态语言的程序员,那么Vim、Emacs、RubyMIne…有太多的选择可以成为你的IDE。

Read More

为什么写博客

写技术博客对于程序员的提升是不可估量的。只要你坚持一段时间,你就会发现它给你带来的各种积极的变化。思考问题更加深入了,更容易关注细节了,表达能力也增强了……

Read More

##什么是Annotation?

Annotation翻译为中文即为注解,意思就是提供除了程序本身逻辑外的额外的数据信息。Annotation对于标注的代码没有直接的影响,它不可以直接与标注的代码产生交互,但其他组件可以使用这些信息。

Annotation信息可以被编译进class文件,也可以保留在Java 虚拟机中,从而在运行时可以获取。甚至对于Annotation本身也可以加Annotation。

Read More

运用一门程序设计语言对大多数程序员来说是小菜一碟,但是更上一层楼成为一名专家级的软件开发者,恐怕目前还是大多数人的梦想。《程序员的思维修炼》一书中将程序员分为5个层级:新手,高级新手,胜任者,精通者,专家。根据作者的调查研究结果,在这5个层级中,大多数的程序员属于高级新手。而且居于这个层级的程序员从入行1、2年的到工作10来年都大有人在。

身为一个程序员,如何才能尽快的突破自身的瓶颈,得到快速的提升那?这可真不是三言两语可以说清楚。本人09年毕业投身软件行业,2012年初离开工作了三年的公司A,加入了现在的公司B。算到现在呆在B公司也即将满一年了。但是我敢说在B公司1年学到的东西,比在A公司3年加起来的总和还要多。
这么大的进步是源于我养成了较好的学习习惯,每天都保持汲取知识。这些习惯大都是同我身边的同事身上偷来的。现在,我就把这些东西分享给大家,一起共勉。

Read More

当我们在定义类,接口和方法时,可以接收一个类型作为参数,这就叫做泛型

函数可以传入普通的参数,也可以传入一个类型参数。不同之处是普通的参数就是值而已,但是类型参数却是个类型。

使用泛型的好处:

  • 强类型检查。在编译时就可以得到类型错误信息。
  • 避免显式强制转换。
  • 方便实现通用算法。

Read More