听说MapReduce已经很久了,这两天才第一次真正的尝试一下。要说的是因为一个很简单的错误,折腾了好一会儿,刚好让我有了更多的理解。因祸得福吧。 要实现的是一个很简单的功能,统计每一天新增的数据的数量,以天为单位,数据库中的created_at字段存储是以秒为单位的。考虑到将来这样的数据可能会非常大,所以使用MapReduce就成了自然的选择。 READMORE 我使用的是mongodb...
Inside CoffeeScript:语法强壮
前一篇文章主要说了CoffeeScript的语法强大的几点,它极大的简化了JS的语法,更清晰简洁,另外很重要的一点是它从语法本身的角度避免了JS的若干陷阱。 1. == JS中,使用双等号比较时,它会尝试进行类型转换再比较,这就导致了下面的几个问题 console.log('' == '0'); //false console.log(0 ==''); //true consol...
Inside CoffeeScript:语法强大
第一次听说CoffeeScript是Rails 3.1将它作为默认的支持,第二次深入的理解是Nodejs的兴起,CoffeeScript用它独特的语法样式,使我这个面向对象出身的程序员在写JavaScript时找到了似曾相识的感觉。当然如果对它的理解仅仅停留在语法的简化,那么只能说对JS(The World’s Most Misunderstood Programming Language)...
Inside Ruby: Eigenclass
在Inside Ruby: Object Model中提到,object拥有method,但是method并不存在于object中,而是在class中,这样同一个class的不同实例可以共享method。 我们知道在Ruby中,可以定义singleton method,这种method只针对某个特定的object定位,而其它的object则没有该方法。如下面的片段: obj = Obje...
Inside Ruby: Object Model
今天来重新了解一下ruby的Object Model,之所以是重新,因为是从内部来看,而不是从外部的使用上。 1. object object = instance variables + methods(包括一个指向所属class的方法)。使用object.instance_variables 和object.methods可以查看对应的信息, 区别在于前者存在于object本身,而me...
Feature Toggle
每个迭代(两周)发布一次,所有功能必须完整可用。这对项目的计划,story的划分都提出了很高的要求。然而有的功能很难在一个迭代内完成,例如某个story在临近迭代结束的时候开始,或者某个系统的某个特性需要持续若干迭代的开发, 在整体完成之前不能出现在产品中。那么如何控制未完成的功能不出现在产品中而又不影响新的代码开发呢?这时就需要引入Feature Toggle。 在Rails中Featu...
软件发布实战 -- 沟通
沟通在任何一项团队活动中都非常重要, 下面的一个例子发生在我们的一次发布中. 这次我们对数据库进行了重构, 将原来的一个大表拆分成若干小表, 那么除了做表结构的迁移,还需要做数据迁移, 因为在产品环境中已经存在了一些数据. 产品环境的数据还算比较干净, 针对这种理想状态数据的迁移, 我们使用存储过程很快实现. 但是在QA环境和Staging环境中, 由于有各种测试, 而且这些数据从几个...
软件发布实战 -- 集成
作为一个程序员, 每天开心的新程序,让所有的测试通,最后打浏览器,输入“localhost/newapp”, 看到开发的功能展现在眼前, 那种愉悦和满足不言而喻。 但是有没有想过如何发布让其他人共享你的成果呢? 当然!使用heroku,输入下面的命令就可以轻松的帮你完成。 git push heroku master 那如果同时要发布6 ,7个项目呢?项目之间可能共用数据库,共享若...
软件发布实战 -- 状态检查
当前项目的发布周期是两个星期,指的是总共6,7个项目一起发布。从第一天code cut,经历如下的过程: 总共三个阶段,每次发布上去以后各个项目都要进行回归测试,发现bug就需要打tag,重新经过QA环境。 如果每次环境保持比较稳定,比如发布的操作系统,部署方式都没有改变,那基于已有稳定cloud环境保证的基础上,不会打太多tag。 但是我们就经历了上面两种方式的变化。系统从Debian...
Express Js
Javascript通常运行于客户端浏览器,可以方便的操作HTML中的DOM元素,另外,提供也提供了一些事件响应机制,将表单验证等很多功能置于前台完成,降低前端与服务器端的交互次数,提高用户体验。在服务器端,有很多的框架可以选择,包括SSH,Spring MVC,ASP.Net MVC等,这些框架提供了良好的结构,可以创建强健的Web应用。 然而,前端与后端的割裂在某种程度上限制了Web开...
Box2D-Post Collision Detection
Demo 在检测到碰撞后,我们往往需要进行一些处理,比如在Angry Birds中当小鸟撞击到障碍或者击中猪后,会有碰撞的声音,破碎的效果等,这些都是在碰撞检测后进行处理的。 如上图,坦克发出的炮弹击中了空中飞行的物体,之后炮弹消失,物体旋转下落。 实现的代码如下 var contactListener = new Box2D.Dynamics.b2ContactListener...
Box2D-Collision Detection
Demo 碰撞检测是物理引擎中非常重要的部分,一般分为两种: Discrete Collision Detection: 离散碰撞检测。 从实现的角度来说,就是在每TimeStep时刻计算所有当前物体的Contact,由于Box2D处理的都是刚体,这样如果在计算的结果中有overlap的刚体存在,那么这些物体之间必然存在碰撞关系。 CCD(Continuos Collision...
Box2D--Physics Engine
Demo Box2D是一个强大的物理引擎(Physics Engine),有c++, java, js等多种版本。当前流行的Angry birds游戏就使用它作为物理引擎。Wikipedia中给出的定义是: A physics engine is computer software that provides an approximate simulation of certain ...
Validation Refactor -- Command Pattern
曾经遇到过几次如下的代码 public void validate(Person person, List<String> errors) { if (!validateName(person.getName())) { return; } if (!validatateAge(person.getAge())) { return; } if...
路漫漫
还有一个星期就将结束此次悉尼之行,不用再穿着衬衫皮鞋,有机会舒服的坐在自己宽敞的Office里,吃点水果,听听session,想起来感觉真好。 从去年11月开始到现在,前后辗转两个公司,八周时间。不得不说,逝去的,是出国的兴奋,经历的,是时间的漫长和痛苦。周末出去玩一玩,吃点各国美食,已无法抵消工作中各种各样的打击、失落、压力、迷茫。 存在感 这个词可以用来衡量自己在团队中所处的位置,...
Hello Mule ESB
这些天在一个庞大的J2EE遗留系统中工作,其实很想体验真正企业级应用是如何实现的。不过每天忙于应付ERB、Service、Dao、Validator .xml 等文件,修复Bug,感受到的只是众多的Class和Config,以及由此导致的启动JBoss花费4分钟多(只publish三个EAR)和尝试用IntelliJ打开要等很久很久很久,最终放弃的痛苦。 今天这样的心情有所不同,接触了一个...
Web Framework大杂烩之Data Binding
昨天在使用Spring MVC做界面,一边做一边在想着前面使用ASP.NET MVC时是如何实现的。在花了一段时间把CRUD搞定之后,不禁感叹,做到这个程度,似乎也就是做了Rails中下面的一句话: rails generate scaffold 于是,我觉得似乎有必要把接触过的这几个框架做个比较,至少从应用层面可以对Rails, Java和 .NET有个结构性的认识。 既然是从做V...
Dojo submit and Database Engine
今天给前面纯javascript写的Magic Grid增加一个排行的功能,也就是在玩家完成游戏后,可以输入姓名并提交,可以查看当前排名Top10的玩家名称和分数。 功能上并不复杂,不过当前工作的项目是J2EE的,那么就使用相关的技术来实现这个小功能:SSH+MySql+Maven。 整个过程中遇到了两个问题印象比较深刻。 使用Ajax提交结果 Struts常用的Ajax插件有下面几...
HTML5大赛感 (二) : Power of Feedback
Demo Feedback是一种文化,也是一种力量。 文化: 接受Feedback,需要直面批评的勇气,即使这种批评是针对具体的事实。但是我们往往缺乏这样的勇气,甚至对提出的人在心里有某种想法。开始转变心态总是很难,但是接受了这种文化,就可以享受其中。毕竟,如果大家都是提出基于事实的真实感受,那么无论正面或负面都是可以从另一个角度看到自己,因为真实,所以可以不断从中汲取经验和教训,从而...
HTML5大赛感 (一):尝试
Demo 对待事情的第一感觉有时会和事情本身不匹配 (Michael语录) 。 比如一件看似不可能的任务,客观条件限制太多。应该如何面对呢?有些人分析所有的不利因素,在心里得出结论,“我不行,那不可能”。最终如大家料想,确实不可能。也有人在大家犹豫的时候已经放手尝试,结果机缘巧合,后续的一切似乎都在谨慎的配合,结果出奇的顺利,回头去想都让自己惊讶。 这次的HTML5大赛,我几乎就成了前...