黄博文,ThoughtWorks资深软件工程师/咨询师。在国内外多家企业做过技术教练以及技术咨询,拥有丰富的敏捷团队工作经验。拥有AWS解决方案架构师以及开发者证书。译作有《面向对象的思考过程》、《基础设施即代码》等。
Protractor是专为AngularJS应用程序编写的UI自动化测试框架。前端构建有很多构建工具,比如Grunt、Gulp等。一般我们会把这些构建工具作为集成集成的脚本执行工具。所以如果把Protractor的执行也集成进去,则可以达到自动验证UI功能的效果。
最近几个月利用业余时间完成了一个项目。这个项目其实是2008年我在前公司做的一个web项目。后来客户想要对项目做升级,牵扯到一些功能的变动及界面的修改。由于当时整个项目的架构和主要编码都是我做的,所以前公司老总喊我来接这个项目,使用业余时间完成。
Protractor是为Angular JS应用量身打造的端到端测试框架。它可以真实的驱动浏览器,自动完成对web应用的测试。Protractor驱动浏览器使用的是WebDriver标准,所以使用起来与其他语言实现的WebDriver库大体相同。
驱动你做一件事情的动力来源是什么?不知道大家想过这个问题没有。一般人可能会想到两种驱动力。 一种是生存本能带来的驱动力,即生物性驱动力。比如每天要吃饭、睡觉、上厕所,长大了要恋爱、结婚等。
整天跟数据库打交道的程序员都知道,当数据库的Schema发生改变时是多么痛苦的事情。尤其是一个在不断开发完善的项目,随着需求变化,数据库的schema也会跟着变化,而追踪记录这些变化一向都是费时费力。
现在坐在窗明几净的办公室里敲代码,但是上周末那疯狂的12小时还时不时浮现在眼前。从2014年4月开始跑步,到现在刚好一年时间。在这一年里跑了3个全马比赛,2个半马比赛,还有3次越野跑比赛。
2013年12月12日,Spring发布了4.0版本。这个本来只是作为Java平台上的控制反转容器的库,经过将近10年的发展已经成为了一个巨无霸产品。不过其依靠良好的分层设计,每个功能模块都能保持较好的独立性,是Java平台不可多得的好用的开源应用程序框架。
最近进入了一个新的项目组,要新起一个项目。这个Web项目是一个企业内部使用的系统,主要用来记录、追踪、管理潜在客户的数据。该系统有以下特点: 需要支持IE10及以上版本; 后端采用micro service架构,全部是REST API; 需要与现有的CRM系统(客户管理管理系统)集成,主要采用iframe嵌入页面的方式; 系统开发周期为5个月左右,分为三个大的里程碑。
NAT, Network Address Translation,即网络地址转换。当内部网络的主机想要访问外网,但是又不想直接暴露给公网,可以通过NAT节点来访问外网。这样做有两个好处,第一是内网的主机无需拥有公网IP就可访问网络(NAT节点需要公网IP),节约了公网IP;第二是内网的主机由于没有公网IP,所以公网的电脑无法访问到它,这样就可以隐藏自己。
又是一年过去了,看着周围90后在飞速成长,不得不感叹自己这一年轻的优势已经损失殆尽。唯有快马加鞭,不断努力,才能确保自己在战场上了不落后于别人,保持甚至增加自己的核心竞争力。 2013年底的时候写了一篇个人总结http://www.huangbowen.net/blog/2014/01/02/my-conclusion-of-2013/,阅读起来,一年前的我经过各种洗礼已经模糊,前途望去也是有些迷茫,希望能早日拨开云雾见阳天。
最近一段时间在做一个产品从阿里云向亚马逊云中国区迁移的前期试验。亚马逊中国区并没有开放免费体验账号,使用的每一份资源都要实打实的掏钱。而为了实验我们使用时一般要启动好几台EC2实例。为了不浪费辛辛苦苦赚的钱,特写了一个脚本,在每天晚上6点将所有的EC2实例自动关闭。
对于很多人的成功,我们往往将其归功于天才。读了这本书,我才深刻认识到K神不是神,他也有累的时候,也有动摇的时候,绝不是我们想象中的谈笑间超越对手。但是他有强大的内心,有不服输的精神,有为了目标奋不顾身的勇气。
亚马逊在2014年11月11-14日的拉斯维加斯举行了一年一度的re:Invent大会。在今年的大会上,亚马逊一股脑发布和更新了很多服务。现在就由我来带领大家了解一下这些新服务。 安全及规范相关 AWS Key Management Service 该服务可用于管理数据加密秘钥,以及使用硬件设备来保护秘钥。
在今年9月份听说西昌要举行国际马拉松时就非常期待这个赛事。西昌我还没去过,可以趁机去旅游。赛道还是围着美丽的邛海一周,那景色肯定美翻了。当得知通过成都跑客组织可以组团报名时,第一时间就报了名。 时间一晃就接近11月了,自从9月初膝盖痛以后跑步训练就减少了。
作为一个程序员,健身了6个月,成功减去了将近30斤赘肉,身体更强壮、更健康了。很多人都很关心我是怎么做到的,现在我就写一篇文章来总结下。 这是5月份和9月底的对比图。
AWS 认证是对其在 AWS 平台上设计、部署和管理应用程序所需的技能和技术知识的一种认可。获得证书有助于证明您使用 AWS 的丰富经验和可信度,同时还能提升您所在的组织熟练使用基于 AWS 云服务应用的整体水平。
原文地址:http://www.drdobbs.com/architecture-and-design/what-exactly-is-devops/240009147 作者:Neil Garnichaud 软件开发目前的最新趋势是DevOps文化,即开发人员和运营人员一起确保软件以最低的故障率运行。
原文地址:http://www.drdobbs.com/architecture-and-design/getting-devops-right-the-lay-of-the-land/240062639,作者Scott W. Ambler。
2013年到现在,已经翻译了3本书了,其它杂七杂八的文章也不少。其中有一些经验和教训,势必要总结一下。 将译稿纳入版本管理 没有版本管理的代码修改起来是战战兢兢地,而译稿也类似。
原文链接: http://www.drdobbs.com/architecture-and-design/top-10-practices-for-effective-devops/240149363?pgno=1, 作者Scott W. Ambler。
自从8月3日跑了半马以后,又一鼓作气报了11月份的西昌马拉松。与第一次马拉松的只求完赛目标不同,第二次当然想取得一个更好的成绩。所以8月份练的比较猛,基本上是练2、3天休息一天,周么还要拉个长于21公里的LSD。
自己闲着无聊写的,当然有些描述不是十分准确,毕竟一句话不能表达太多意思。 委托:把方法当做参数进行传递。 泛型:在类、方法中对使用的类型参数化。 匿名方法:委托及调用委托的简化版。 Lambda表达式:匿名方法的进一步进化。
原文链接: http://spring.io/guides/gs/consuming-web-service/ 调用SOAP web service 本指南将指导你使用Spring调用一个基于SOAP的web service的整个过程。
使用Octopress作为我的博客框架有两年了。使用起来一直很顺手,这个工具真正的把博客跟写代码等同起来,非常酷炫。再加上各种各样的定制化,简直是随心所欲。我针对自己的需求对Octopress框架进行了一些定制化,比如编写了一些插件自动将博客同步到博客园,以及部署时将博客部署到亚马逊云的S3上等。
jaxb,全称为Java Architecture for Xml Binding,是一种将java对象与xml建立起映射的技术。其主要提供两个功能,一是将java对象映射为xml,二是将xml映射为java对象。
在编写Gradle脚本的时候,在build.gradle文件中经常看到这样的代码: build.gradle 1 2 3 4 5 6 7 8 9 buildScript { repositories { mavenCentral() } } repositories { mavenCentral() } 这样子很容易让人奇怪,为什么repositories要声明两次哪?buildscript代码块中的声明与下半部分声明有什么不同? 其实答案非常简单。
不知不觉,已经健身4个月了。刚开始健身的时候也没想到自己能坚持这么久,也没想到需要花费这么多的时间。不过目前一切都好,虽然健身花费了一些时间,但是也算有所收获,给自己的生活注入了一股新力量。也能每天有1到2个小时把自己从电脑前拉起来,去外面跑跑步,呼吸一下新鲜空气,去健身房聚聚哑铃,练习引体向上,突破身体的极限,或者去游泳池学习蛙泳、仰泳,与水亲密接触。
程序员的身体差,似乎已经是大家的共识。整天对着电脑不运动,长此以往导致各种疾病缠身。新闻里也时不时的报道些程序员加班猝死的新闻。本人虽然是程序员,但是还是比较热爱运动的。毕业后有4,5年了,每周还时不时的踢踢球、打打篮球。
Amazon Elastic Block Store(EBS)可作为EC2实例的持久性数据块级存储。其具有高可用性和持久性的特点,可用性高达99.999%。给现有的EC2实例扩展新的存储块只需要几分钟的时间,省时省力。
在本文中我们有三个任务。 第一:使用Amazon management console创建一个EC2实例。 第二:使用本地的命令行工具远程登陆到该EC2实例。 第三:在该EC2实例上创建一个web服务,并通过公共域名来访问该web服务。
Gatling作为次时代的性能测试工具,由于其API简洁明了、性能出众,越来越受欢迎。但是运行Gatling脚本却有诸多不便,其提供的默认方式不是很方便。考虑到Gatling脚本本质上是Scala类,运行的时候还是使用的是java虚拟机,我们可以将其脚本的运行与Gradle结合起来。
6月25日我和公司同仁一起参加了亚马逊在成都的第一场AWSome Day活动。整个活动时间异常紧促,短短一天包含了7堂session,讲师的狂轰乱炸使得我们同学们普遍觉得比上班累多了。好了,废话不多说,让我们来回顾一下昨天都讲了那些东西。
本文是我翻译INFQ上的一篇文章。作者Chris由简入深的讲解了微服务的来龙去脉、使用场景、优势劣势、以及现有技术栈向微服务架构的重构步骤。是一篇微服务主题的不可多得的好文。 原文地址:http://www.
“不是我不明白,这世界变化快。”崔健的这首歌使用在互联网领域最合适不过。只短短数年的功夫,互联网的浪潮还没过去,移动互联网的时代已经来临。人们已经习惯将越来越多的时间花在各种移动设备上。各大互联网公司先知先觉,在移动互联网领域杀的不可开交,甚至很多传统行业公司也在积极寻求自身领域与移动互联网的结合点。
使用JUnit来测试Java代码中的异常有很多种方式,你知道几种? 给定这样一个class。 Person.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22...
来布里斯班出差已经一个多月了。这一个月每天除了上班就是回到公寓里面宅起,基本没怎么运动。以前在国内的时候还是经常运动的,每天上下班要骑行将近30公里,一周至少去打3次篮球。这样一直保持着健壮的体魄,所以这么多年基本没得过什么病。
ruby语言升级还是比较勤快的。但是数量众多的版本使得程序库的兼容性成了大问题。有些gem表示明确不支持某个特定版本以前的ruby,而有些gem则与较高的版本不兼容。再加上gem本身也有版本,简直是乱成了一锅粥。
定义bean时有个abstract属性,可以设置为true或false,默认为false。 1 2 3 4
Spring框架在依赖注入方面是非常灵活和强大的,多了解点一些注入的方式、方法,绝对能优化配置。 idref idref属性可以传入一个bean的名称,虽然它是指向一个bean的引用,但是得到的是该bean的id名。
了解到ZSH的强大以后打算将自己目前使用的bash切换到ZSH。具体ZSH比bash强在那里就不多少了,网上的文章一搜一大把。个人主要是被ZSH强大的自动补全吸引过来的。虽然bash装了bash-completaion以后也有了一定的自动补全能力,但是和ZSH比起来还是差距太大。
在Spring中定义bean的方式多种多样,即使使用xml的方式来配置也能派生出很多不同的方式。 比如如下的bean定义: 1 2 3 4 5 6 7 8 9 10 11 12 这样的bean有三行,通过使用p-namespace以后可以简化为一行。
消息队列本来就是一种经典的生产者与消费者模式。生产者向消息队列中发送消息,消费者从消息队列中获取消息来消费。 消息的传送一般由一个代理来实现的,那就是Message broker(即消息代理)。
俗话说,天下武功,唯快不破。也就是说要练成天下高手的话,出招速度一定要快,这样才能在江湖上立足,不至于掉了脑袋。而程序员要在IT界混出个名堂,也要有高效的工作效率才行。IT行业时时刻刻都产生着新知识、新技术,要想跟上变革肯定要有几把刷子。
上文讲了基于构造器进行依赖注入,这里讲解基于Setter方法进行注入。在Java世界中有个约定(Convention),那就是属性的设置和获取的方法名一般是:set+属性名(参数)及get+属性名()的方式。
Spring框架的核心功能之一就是控制反转(Inversion of Control, IoC),也叫做依赖注入(dependency injection, DI)。关于依赖注入的具体内容可以参见Martin Fowler写的一篇文章《Inversion of Control Containers and the Dependency Injection pattern》。
在第一讲中显示了如何使用注解配置bean,其实这是Spring3引进的特性,Spring2使用的是XML的方式来配置Bean,那时候漫天的XML文件使得Spring有着配置地狱的称号。Spring也一直在力求改变这一缺陷。
Spring框架是无侵入性的,所以你的代码可以完全是POJO(plain old java object),直接使用Junit就可以完成大部分的单元测试。但是在集成测试方面就比较吃力了。单元测试层面你可以mock一些依赖对象,但是集成测试时需要真实的依赖对象,而这些对象都是在Spring容器的控制之下。
很久之前就想系统的学习和掌握Spring框架,但是拖了很久都没有行动。现在趁着在外出差杂事不多,就花时间来由浅入深的研究下Spring框架。Spring框架这几年来已经发展成为一个巨无霸产品。从最初的只是用来作为依赖注入到现在已经是无法不包。
在使用Message Queue的过程中,总会由于种种原因而导致消息失败。一个经典的场景是一个生成者向Queue中发消息,里面包含了一组邮件地址和邮件内容。而消费者从Queue中将消息一条条读出来,向指定邮件地址发送邮件。
Hermes JMS是一个开源免费的跨平台的JMS消息监听工具。它可以很方便和各种JMS框架集成和交互,可以用来监听、发送、接收、修改、存储消息等。这篇文章将讲解HermesJMS如何集成ActiveMQ并与其交互。