Flicker1985's Blog

Everything should be made as simple as possible, but not simpler.

[置顶] 博客搬家了

摘要: 个人博客搬至http://blog.flicker1985.me,欢迎访问。 阅读全文

posted @ 2012-06-03 19:25 Fei He 阅读(113) 评论(0) 推荐(0) 编辑

2011年7月21日

多ruby版本环境下no such file to load解决办法

摘要: 今天下午在配置ruby开发环境时,发现一个非常trick的问题---当我们启动rails环境时会报no such file to load : iconv。 因为我们的开发环境比较复杂,而且是基于一个legacy的系统,所以我们需要多个ruby版本。在这种情况下rvm自然成为了我们的首选目标。我当时的情况就是我需要2个不同的ree(ruby enterprise edition),一个是1.8.7-2010.02,另外一个是1.8.7-2011-03。刚开始的时候只要后面这个版本在启动rails时报no such file to load, 后来在我一怒之下卸载了rvm,然后重新安装之后发现. 阅读全文

posted @ 2011-07-21 23:56 Fei He 阅读(1377) 评论(0) 推荐(0) 编辑

2011年5月29日

TDD需要debugger吗?

摘要: 昨天和一个同事一起pair的tdd的时候,有一个测试一直红着,我只好开了debugger来调试。这时候对面的8x,笑嘻嘻的说: ”tdd开debugger就是tdd的耻辱!“真的如此吗?我们首先回顾一下tdd是的节奏red/green/refactor:Red - Write a little test that does'n work, and perhaps doesn't even compile at first.Green - Make the test work quickly, committing whatever sins neccessary in the 阅读全文

posted @ 2011-05-29 00:34 Fei He 阅读(1580) 评论(40) 推荐(2) 编辑

2011年5月26日

快速开发新浪微博的firefox插件(下)

摘要: 上篇主要讲了讲firefox插件的机制,接着我们来看快速开发一个firefox插件中我面临的第二个问题----Oauth授权(开始开发的时候只是想着快速开发完成,当然授权这块最快的方案自然就是basic auth,但是新浪微博6月1号以后就不支持basic auth了。)。 Oauth的官网上说是这样描述它的用途: Anopen protocolto allowsecure API authorizationin asimpleandstandardmethod from desktop and web applications.在Oauth的官网上对Oauth有详尽的描述以及不用语言对于O. 阅读全文

posted @ 2011-05-26 22:57 Fei He 阅读(2196) 评论(1) 推荐(1) 编辑

2011年5月24日

快速开发新浪微博的firefox插件(上)

摘要: 在开发这个插件之前,自己对javascript的使用也就是web page中简单的操作dom,而对于firefox插件开发一无所知,OAuth连听都没有听过。所以对于我眼前要干得事情我有两个难点,第一就是firefox的插件机制,第二就是了解OAuth。 firefox的插件机制 对于一个firefox插件来说,我们首先需要了解的它的组织结构。打开一个firefox插件工程,你一般会看这么几个元素:chrome文件夹,defaults文件夹,chrome.manifest, install.rdf。 我们先从install.rdf说起,相比从文件名你就明白了这个文件是要干什么的。没错,这个文. 阅读全文

posted @ 2011-05-24 21:45 Fei He 阅读(3773) 评论(4) 推荐(4) 编辑

2011年4月27日

大项目的思考

摘要: 引言:进入现在这个我们内部的大项目已经两个多月了。现在回想起进入项目前一位前辈的话:“大项目有大项目的问题,但大项目也有很多东西可学“,自己此时深表赞同。二个月的时间,自己从刚来前两周的观察学习,到现在的基本融入,在这个过程中自己有了很多的想法和思考。 为什么测试这么难写? tdd的开发实践保证了代码的可测试性,那么当tdd的t变的非常难写的时候是不是现有的代码已然变的可测试性非常的差呢?其中一些非常典型的场景就是test的setup太难,而造成这个的一个主要原因就是贫血的model和万能的service。因为model没有行为,所以很多时候可以通过测试model来完成的测试,却不得不通过测. 阅读全文

posted @ 2011-04-27 23:36 Fei He 阅读(6409) 评论(28) 推荐(12) 编辑

2011年4月17日

初窥Ruby Metaprogramming

摘要: 接触了一段时间得ruby on rails,深深被ror的magic,powerful,elegantly所折服,同时也对ruby这个神奇的语言本身产生了很大的好奇心,而其中最神奇的莫过于ruby 的 Metaprogramming。Classes are open 我们先看一段代码:class String def say_hello p "Hello!" endend"Fred".say_hello这里我们看到我们reopen了String这个build-in的class,而且添加了一个新的方法say_hello(.NET 3.5中通过扩展方法也实现 阅读全文

posted @ 2011-04-17 21:14 Fei He 阅读(1883) 评论(4) 推荐(3) 编辑

2011年4月16日

敏捷在路上(二)迭代开发和用户故事

摘要: 引言:在上一篇中,我聊到了敏捷可以通过小步前进来最大程度的减少浪费。接着我们来聊聊敏捷是如何小步前进的。 在瀑布式开发中我们的步子迈的太大了,导致我们首先无法快速应对变化,其次我们需要付出很大的代价来应对变化。而敏捷迭代开发则可以让我们小步的往前走,以一种增量式的模式来进行开发。那么敏捷迭代中迭代的是什么呢?我觉得迭代的交付可工作的软件。 首先,我们看看敏捷迭代大致的流程:首先和用户讨论需求,定义系统的personas,并将用户需求划分成一个个的用户故事和用户一起将所有的用户故事按照关联和优先级划分到一个个的迭代之中保证在每个迭代都可以交付给用户可工作的软件接着我们展开每个过程。而在第一个过. 阅读全文

posted @ 2011-04-16 00:42 Fei He 阅读(3051) 评论(3) 推荐(3) 编辑

2011年4月14日

敏捷在路上 (一)为什么敏捷

摘要: 前记 对于敏捷软件开发,听说已久。最近刚刚开始走上敏捷的路上,所以记下自己一路上感受和收获。 为什么我们要采用敏捷软件开发呢?这也许是所有刚开始接触“敏捷”这个概念的第一个问题,那我们就从第一个问题开始我的旅程。通常我们在开发中引入一些新的实践无非就两个原因,要么就是我们现有的开发模式有问题,要么就是这个新的开发模式更有效率。那么我们首先可以回顾一下我们现在被大多数团队采用的瀑布式开发。 在瀑布式开发中我们有开发过程分为一下几个阶段:分析,设计,实现,测试。其中每一个阶段的产出作为下一个阶段的输入。而这里隐含了两个假设:当我进入设计阶段的时候,我假设我的分析是正确的并且不会再变化。当我进入实. 阅读全文

posted @ 2011-04-14 22:26 Fei He 阅读(1570) 评论(8) 推荐(5) 编辑

2011年3月28日

Transaction Scripts vs Domain Model

摘要: 最近和一些朋友在闲聊之中发现不少人对于Transaction Scripts的认同和对于Domain Model的不理解都让我非常的诧异。所以就有了这篇文章。 首先,什么是Transaction Scripts,什么又是Domain Model呢?据我所知这两个概念都是Martin Flower在《Patterns of Enterprise Application Architecture》中提出来的,指的是两种对于Domain Logic的组织方式。具体的定义如下: Transaction Scripts是指: “Organizes business logic by produces . 阅读全文

posted @ 2011-03-28 23:33 Fei He 阅读(1824) 评论(9) 推荐(4) 编辑

2011年3月2日

软件开发学习呓语

摘要: 问题 我们会加入很多不同类型的软件开发项目,每个项目的需求不同,但当我们将需求转化为计算机的实现,却会发现我们总是会遇到些熟悉的问题,例如:transcation,security,concurrence,communication,persistence,presentation等等呢。所了解和熟悉我们需要解决的问题非常重要技术方案 对于企业级软件开发之中遇到的问题的解决方案就是才是技术解决方案。而技术解决方案的选择依赖与对需求的理解和对现有技术的了解。比如对于persistence的选择我们有orm,table-mapping等,而对于cross cutting的处理我们往往会选择AOP, 阅读全文

posted @ 2011-03-02 22:19 Fei He 阅读(279) 评论(0) 推荐(0) 编辑