posted @ 
2012-02-18 18:57 Paul Lin 阅读(656) | 
评论 (0) | 
编辑 收藏
			     摘要: 换句话说,当你找到与天赋、个性完全匹配的工作,它恰好处在上升期的市场,公司又提供了必要的授权与资源,那么你就很容易成功。反之,若这三点中的任何一点不匹配,那么你就是个loser。  
阅读全文
			posted @ 
2012-02-18 18:27 Paul Lin 阅读(686) | 
评论 (0) | 
编辑 收藏posted @ 
2012-02-18 18:09 Paul Lin 阅读(590) | 
评论 (0) | 
编辑 收藏
			     摘要: 这是一篇集百家之长的笔记,分别参考了《Rails3 in Action》和 RVM官方文档,ninjahideout.com 之后的安装文档。
这里使用到的各种软件包括:
 
  - Ubuntu
  - Virtual Box
  - Vagrant
  - RVM
  - Capistrano
  - Passenger
  - Nginx
  - MySQL
  - PostgreSQL
还涉及到Git、GitHub、SSH等技术   
阅读全文
			posted @ 
2011-11-21 16:22 Paul Lin 阅读(1712) | 
评论 (0) | 
编辑 收藏
			     摘要:   
阅读全文
			posted @ 
2011-11-13 23:29 Paul Lin 阅读(11126) | 
评论 (1) | 
编辑 收藏posted @ 
2011-11-03 00:17 Paul Lin 阅读(760) | 
评论 (0) | 
编辑 收藏http://blog.ninjahideout.com/posts/a-guide-to-a-nginx-passenger-and-rvm-server
			posted @ 
2011-11-03 00:14 Paul Lin 阅读(732) | 
评论 (0) | 
编辑 收藏
			     摘要:   
阅读全文
			posted @ 
2011-10-03 17:36 Paul Lin| 
编辑 收藏在上一篇《自动化测试狂人的Rails测试优化之路》中,我演示了如何使用Guard-spork, Guard-rspec和Spork, Rspec来进行自动化测试和集成测试。
今天发现存在一个bug,那就是当model文件被修改后,虽然会重新启动rspec执行测试。但是测试的代码不是最新的,而是继续沿用已经加载到内存的model文件。网上搜索一番后,发现问题的原因是spork的预加载问题。于是在spork的spork.each_run方法中加入如下代码,重启sprok,解决问题
 Dir["#{Rails.root}/app/models/**/*.rb"].each do |model|
Dir["#{Rails.root}/app/models/**/*.rb"].each do |model| 
 load model
  load model
 end
end

 
			posted @ 
2011-09-06 14:21 Paul Lin 阅读(709) | 
评论 (0) | 
编辑 收藏假如我们把attr_accessible设置成只有name是可以访问的,然后在Console中执行如下命令:
 ruby-1.9.2-p180 :001 > user = User.create(:name => "Paul", :email => "pengpenglin@163.com")
ruby-1.9.2-p180 :001 > user = User.create(:name => "Paul", :email => "pengpenglin@163.com")
 => #<User id: 1, name: "Paul", email: nil, created_at: "2011-09-03 04:42:59", updated_at: "2011-09-03 04:42:59">
 => #<User id: 1, name: "Paul", email: nil, created_at: "2011-09-03 04:42:59", updated_at: "2011-09-03 04:42:59"> 
 ruby-1.9.2-p180 :002 > user.email
ruby-1.9.2-p180 :002 > user.email
 => nil
 => nil 
 ruby-1.9.2-p180 :003 > user.email = "bob@163.com"
ruby-1.9.2-p180 :003 > user.email = "bob@163.com"
 => "bob@163.com"
 => "bob@163.com" 
 ruby-1.9.2-p180 :004 > user.email
ruby-1.9.2-p180 :004 > user.email
 => "bob@163.com"
 => "bob@163.com" 
 ruby-1.9.2-p180 :005 > user.save
ruby-1.9.2-p180 :005 > user.save
 => true
 => true 
 ruby-1.9.2-p180 :006 > user.reload.email
ruby-1.9.2-p180 :006 > user.reload.email
 => "bob@163.com"
 => "bob@163.com" 
 ruby-1.9.2-p180 :007 > User.find(1)
ruby-1.9.2-p180 :007 > User.find(1)
 => #<User id: 1, name: "Paul", email: "bob@163.com", created_at: "2011-09-03 04:42:59", updated_at: "2011-09-03 04:43:31">
 => #<User id: 1, name: "Paul", email: "bob@163.com", created_at: "2011-09-03 04:42:59", updated_at: "2011-09-03 04:43:31"> 不是not accessible 吗?怎么email还是能够改变?
			posted @ 
2011-09-03 12:51 Paul Lin 阅读(1257) | 
评论 (1) | 
编辑 收藏
			     摘要: 我们要修改的文件会涉及到4个:
 A. Gemfile
 B. .rspec
 C. Guardfile
 D. rspec_helper.rb  
阅读全文
			posted @ 
2011-08-31 00:44 Paul Lin 阅读(1862) | 
评论 (1) | 
编辑 收藏
			     摘要: 从RailsCast.com筛选出来的视频  
阅读全文
			posted @ 
2011-08-29 15:58 Paul Lin 阅读(603) | 
评论 (0) | 
编辑 收藏
			     摘要: NERDTree.vim:显示目录树和标签(特别有用)
 Rails.vim:这个不说了,Rails开发必备
 Snipmate.vim:代码片段自动完成,Rails开发神器之一
 FuzzyFinder.vim:模糊查找,使用频率最高的插件之一
 TabBar:BufferExpoloer的增强版,用来标识打开的文件的 
 Supertab.vim:文本自动完成
 Rubytest.vim:vim下的集成测试工具  
阅读全文
			posted @ 
2011-07-26 12:46 Paul Lin 阅读(3430) | 
评论 (0) | 
编辑 收藏posted @ 
2011-07-19 20:06 Paul Lin 阅读(376) | 
评论 (0) | 
编辑 收藏
			     摘要: 针对这种情况,我们可以使用一个名为Guard的gem,来自动监控spork中预加载的文件发生变化后,自动重启spork
1).在Gemfile中增加gem 'guard-spork'
2).在shell中gem install libnotify / gem install inotify
3).bundle install
4).guard init spork
5).guard start  
阅读全文
			posted @ 
2011-07-15 18:12 Paul Lin 阅读(445) | 
评论 (0) | 
编辑 收藏
			     摘要: 首先我们来理解Autotest的触发机制:
1. 要有一套测试的框架和工具(Console,GUI)
2. 要有可以感知被测试对象发生变化的机制
3. 要有自动加载被测试对象和环境数据的机制
4. 要有将测试结果展示给用户的机制  
阅读全文
			posted @ 
2011-07-15 00:14 Paul Lin 阅读(660) | 
评论 (0) | 
编辑 收藏
			     摘要: 网上google了一下,发觉又是一个Rails和其他gem不兼容的问题,只要把rake的版本设置为0.8.7就可以了。  
阅读全文
			posted @ 
2011-07-03 21:28 Paul Lin 阅读(1433) | 
评论 (1) | 
编辑 收藏posted @ 
2011-06-25 13:40 Paul Lin 阅读(381) | 
评论 (0) | 
编辑 收藏posted @ 
2011-06-18 23:02 Paul Lin 阅读(344) | 
评论 (0) | 
编辑 收藏
			     摘要: ....
甲:嗯....可是这样看起来,我完全看不到敏捷的任何好处啊
乙:嗯。实际上,我更喜欢RUP,虽然麻烦但很清楚
....  
阅读全文
			posted @ 
2011-06-01 23:31 Paul Lin 阅读(940) | 
评论 (1) | 
编辑 收藏
			     摘要: 来自JE上的一篇Rails实战文章,很不错!  
阅读全文
			posted @ 
2011-05-27 16:47 Paul Lin 阅读(875) | 
评论 (0) | 
编辑 收藏
企业敏捷转型之路
http://www.everbox.com/f/Rgo5syChjzuLeS6wJEAQZwvkje
深入浅出NoSQL
http://www.everbox.com/f/TQMXMI6asloYQFJLIxGy2WIIyo
设计优良的架构
http://www.everbox.com/f/XCZvXDTbft6ZlK8TsUlMWfVBjO
Web性能与扩展
http://t.sina.com.cn/1746173800/wr4mQk5Iwn
来自一线项目的实战经验
http://www.everbox.com/f/FZHFfXanIGZOasZsqSZpFuSSFk
HTML5开发平台
http://www.everbox.com/f/qeD2qvae9LVRXCA3HsNq2ztiBY
			posted @ 
2011-04-21 16:58 Paul Lin 阅读(582) | 
评论 (0) | 
编辑 收藏
			     摘要:   
阅读全文
			posted @ 
2011-03-23 11:55 Paul Lin 阅读(514) | 
评论 (0) | 
编辑 收藏原文:http://www.javaeye.com/news/20399
大多数管理者都会陷入放权的困境。你很忙,每件事都要亲力亲为。你很清楚自己需要别人帮忙,但你没有足够的时间寻找并培训别人来帮你。所以,你更加努力地工作,直到自己崩溃。
  下面这个故事讲述了我如何放权。
  2001年,CD Baby成立三周年。我已有8名员工,但所有其他事情仍然需要我自己做。每周7天,从上午7点工作到晚上10点,自己仍然要经手每件事情。
  每隔5分钟,就会有员工向我请示: 
    - “Derek,有个家伙想修改网站上已经存在的相册,我该怎么跟他说呢?”
- “Derek,我们可以接受电汇作为一种支付方式吗?”
- “Derek,有个人今天下了两个订单,他想知道我们可不可以给他一起邮寄过去,并且把节省的邮费给他退回去?”
  如果整天不停地回答问题,那么什么事也做不成。我感觉我好像是每天去上班,然后在过道里坐着,全职回答员工的问题。
  我的忍耐已经到了极限,我不再去办公室,并且关掉了手机。随即,我意识到自己正在逃避问题,而不是去解决问题。我必须解决这个问题,要不然就坏了。
  经过一夜的反思,我最终在思想上接受放权。
  我必须放权,我不是我公司的必需品,没有我,我的团队照样也可以经营公司。
  第二天,我一进门,有人就请示我,“Derek,我们昨天收到了一个客户送来的CD,但他今天改变了主意,他想让我们退回他的CD。我们给他邮寄了回去,但他又问我们能不能退还他的安装费用,因为他从未登录过网站。”
这一次,我并没有仅仅回答了他的问题,而是把大家都召集起来。
  我给大家解释了事情的经过,和需要解决的问题。我回答了问题,但更重要的是,我解释了自己思考的过程和回答背后的理念。
  “是的,我给他全额退款了。这样,我们会受到一点损失。但是,最重要的是经常做一些能让顾客高兴的事,只要不过分就行。像这样一个小小的表示对我们大有裨益,他可能会因此告诉他的朋友们,我们是一家不错的公司。每个人都要记住,帮助音乐爱好者是我们的首要目标,利润是其次。你们将来可以根据这条准则来自己做决定,我会完全同意。做那些能让他们高兴的事。要确保每个跟我们做生意的人都会满意而归。”
  我一一问了每个人,确保他们都理解我的回答。
  我让一位员工起草一本手册,把这种情况的处理方式记录下来,并附上解决这种问题的理念。
  然后,每个人都回去工作了。
  十分钟之后,新的问题,相同的过程:
    - 1. 召集所有人
- 2. 回答问题,解释理念
- 3. 确保每个人都理解整个过程
- 4. 让一名员工把这条记录在册
- 5. 让他们知道,下次没有我他们也可以这样处理问题
  2个月之后,没有员工请示了。
  然后我想员工们展示了事情的最后一部分,也就是我自己的工作。作为学习的一部分,他们也需要把这个记录在册,然后给其他人看(由教而学)。
  现在,公司完全不需要我了。我开始在家里工作,不再去办公室了。我甚至教过他们我关于雇佣新员工的思考过程和理念。所以,有两个新员工是完全由他们发现、面试、雇佣以及培训的。他们用那本手册来让每个新员工理解这种理念以及它的历史,并且知道怎么自己做决定。我每周去视察一次,确保一切正常。确实一切正常,他们甚至都没有什么事情向我请示。
  因为业务由我的团队负责运作,我可以心无旁骛地改进业务。我去了加利福尼亚,只是弄清楚事情由他们运作。
  我现在仍然每天工作12个小时,但是,我把所有时间都花在业务改进、优化以及创新上。对我来说,这才是最有趣的事情。这是在玩,不是工作。
  我放权之后,公司市值在四年里从一百万增长到两千万。管理者和企业家之间有很大的不同。作为管理者你会感觉很自由,直到你意识到如果自己不工作,公司就会倒闭。
  要成为一名真正的企业家,你要确保自己能够离开一年,而当你回来时,你的公司比你离开时运营得更好。
			posted @ 
2011-03-20 10:22 Paul Lin 阅读(354) | 
评论 (0) | 
编辑 收藏
第2篇:关系数据库还是NoSQL数据库
第3篇:NoSQL架构实践(一)——以NoSQL为辅
第4篇:NoSQL架构实践(二)——以NoSQL为主 
下载:NoSQL实战
重点推荐第3篇的最后一种架构:

特别适合SNS的业务架构:把某些关系key存储在MySQL中,用于后续的业务数据分析和挖掘,而把大量的文本和图片存储在类似MongoDB这样的文档型NoSQL。可以利用关系型数据库的强有力的计算能力专注于数据分析和挖掘,而用NoSQL解决数据的读写和存储瓶颈。
由于NoSQL在线性扩展,分布式部署方面有先天优势,可以有效地改善由于数据规模扩大时压力问题,同时关系型数据库存储的数据大大减少,也有利于数据的备份和同步。 
			posted @ 
2011-03-19 22:45 Paul Lin 阅读(446) | 
评论 (0) | 
编辑 收藏
			http://www.slideshare.net/mongodb/mongodb-at-the-silicon-valley-iphone-and-ipad-developers-meetup?from=ss_embed
			
posted @ 
2011-01-13 00:00 Paul Lin 阅读(689) | 
评论 (0) | 
编辑 收藏
			http://my.safaribooksonline.com/book/web-development/ruby/9780132480345
很不错,居然全部都可以免费看。
 
			
posted @ 
2010-12-12 23:56 Paul Lin 阅读(501) | 
评论 (0) | 
编辑 收藏
			     摘要: 在本节,你将学到如何撰写合乎逻辑的、紧凑的标记,使得你有能力将带宽流量降低50%左右,在减少服务器负担和压力的同时,减少网站的加载时间。通过去除那些表现元素,并改掉那些没有任何好处的坏习惯,我们就可以达到上述的目的。
这些坏习惯折磨着网络中的许多站点,特别是那些将 CSS 代码与主要基于表格的布局混合在一起的站点。这种做法笨拙且不经济,即使是对于那些在其他领域很有经验的设计师来说。同时,出现这个问题的几率是均等的,不论是那些手写代码的站点,还是利用可见编辑工具,比如 Dreamweaver 和 GoLive,来创建的站点。
本节会提出这些常见的错误,这样你就可以识别和防范它们,并且学会如何改正错误。我们详细阐述唯一标识符属性 (id) - ,并展示它如何使你可以编写极其紧凑的 XHTML 代码,不论你创建的是混合布局还是纯粹的 CSS 布局。  
阅读全文
			posted @ 
2010-11-18 15:25 Paul Lin 阅读(558) | 
评论 (1) | 
编辑 收藏
			     摘要: 我确实希望本节的内容可以激发你的兴趣,并鼓励你去尝试。为什么这么说呢?因为一旦你掌握了本章包含的简单容易的理念,你就会重新思考网页运作的方式,并开始改变建造它们的方法。然而我并不希望你只是将代码重新改写一遍。我希望你可以实实在在地以另一种方式思考和工作。
另一方面,重构才是 XHTML 真正的意义。  
阅读全文
			posted @ 
2010-11-18 14:58 Paul Lin 阅读(355) | 
评论 (0) | 
编辑 收藏
2. 5步让你的CSS样式表成功减肥
3. 10个CSS简写技巧让你永远受用
4. CSS的声明中,对于选择器的描述方式有多种不同的写法和适用范围:
    A. 标签名选择器声明方式:p {color: red;} --- 选中某种元素
    B. 分组选择器声明方式:h1, h2, h3 {color: red;} --- 选中固定数目的多种元素
    C. 派生选择器声明方式:li td {color: red;}   --- 选中某种上下文关系元素
    D. ID选择器声明方式: #title {color: red;} --- 选中指定id元素
    E. Class选择器声明方式: .title {color: red;}   --- 选中不定数目的多种元素
  F. ID派生选择器声明方式: #title table {color: red;} --- 选中指定id下特定上下文关系元素
   G. Class派生选择器声明方式: .title table {color: red;}  --- 选中多种类型下特定上下文关系元素
   H. 类型选择器声明方式:table.title {color: red;}  --- 选中某种元素的某种类型
   I. 伪类选择器声明方式:a:visited {color: red;}  --- 选中某种状态下元素
   J. 类型伪类选择器声明方式:a.news:visited {color: blue;}  --- 选中某种元素的某种状态下的类型
			posted @ 
2010-11-09 10:45 Paul Lin 阅读(396) | 
评论 (0) | 
编辑 收藏
			     摘要:   
阅读全文
			posted @ 
2010-11-05 16:20 Paul Lin 阅读(344) | 
评论 (0) | 
编辑 收藏 http://www.theserverside.com/news/1363955/Taking-the-load-off-OSCache-helps-databases-cope
 
			posted @ 
2010-11-03 17:08 Paul Lin 阅读(392) | 
评论 (0) | 
编辑 收藏
			     摘要: OSCache是一套用Java编写的缓存框架(或者说解决方案),它主要用于页面缓存,Servlet缓存,或者其它任意的对象。OSCache使用基于内存或者磁盘的缓存策略。不同的策略有不同的适用场合:基于内存的缓存非常快,但是不能持久化,而且不能存储大量数据,适合频繁访问的数据。基于磁盘的缓存可以分为使用文件和数据库缓存,它的速度比内存缓存慢,但可以被持久化,可以在服务器重启重启,数据库奔溃时仍然运作,而且可以存储较多的数据。适合于大量非频繁访问的数据,或者复杂计算结果的缓存。  
阅读全文
			posted @ 
2010-10-22 21:39 Paul Lin 阅读(547) | 
评论 (0) | 
编辑 收藏
基本知识:《缓存技术》: http://blog.csdn.net/fanweiwei/archive/2007/01/07/1476131.aspx
《缓存漫谈》: http://www.blogjava.net/BlueDavy/archive/2006/06/02/50076.html
《网站缓存技术》:http://dcross.javaeye.com/blog/721468
《缓存技术浅谈》:http://robbin.javaeye.com/blog/770553
			posted @ 
2010-10-19 16:12 Paul Lin 阅读(459) | 
评论 (0) | 
编辑 收藏
			     摘要: 介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制的简单介绍和适用范围说明,以及设计缓存方案应该考虑的问题  
阅读全文
			posted @ 
2010-10-19 11:09 Paul Lin 阅读(526) | 
评论 (0) | 
编辑 收藏
			     摘要: InfoQ上有一篇《深入浅出REST》的文章:http://www.infoq.com/cn/articles/rest-introduction
看完后有如下疑问:
A. 观点1中这个“ID”如何定义?
B. 要为那些“事物”定义ID?
C. 使用链接指向任何可以标识的事物
D. “标准方法”是否够用?
E. 无状态通信如何实现  
阅读全文
			posted @ 
2010-09-07 11:04 Paul Lin 阅读(1818) | 
评论 (1) | 
编辑 收藏
			     摘要: 原文链接:http://www.javaeye.com/topic/698774
这篇文章放到这个版面,因为我认为它属于管理的范畴:个人管理(时间管理、知识管理)。 
是不是大家也有这种体会: 
网站注册越来越没耐心,看到页面全是文本框、下拉框,就心烦,咔一下关了。 
文章超过两屏的,就没勇气往下看。 
看到文章的相关链接,没完没了,两小时后,脑袋一片混乱,真想凉水冲冲。 
Google Reader的未读项又是1000+了,看吧,压力太大,不看吧,有种挫败感,干脆,全部设置为已读。 
焦虑、挫败、恐惧,什么感觉都来了,唯独没有愉悦感。 
......  
阅读全文
			posted @ 
2010-07-13 17:36 Paul Lin 阅读(477) | 
评论 (0) | 
编辑 收藏
install命令用于安装指定的gem包,常用的方式是:gem install rails。我们也可以指定版本:gem install rails --version=2.3.5
②gem uninstall
uninstall命令用于反安装gem包,不过要注意的是这个命令并不会删除你之前安装的gem包,而只是把它从path中删除而已。如果我执行以下的命令
 gem install rails --version=2.3.4
 gem uninstall rails --version=2.3.4
 gem install rails --version=2.3.5
实际上rails 2.3.4版本依然还在,只不过你在命令行下执行rails -v的时候是显示rails 2.3.5而已。
③gem cleanup
这个命令配合gem uninstall使用的话可以完全删除旧版本的gem包,所以在上面的例子中如果我需要完全卸载rails 2.3.4的话,只需要再执行
 gem cleanup就可以了
④使用指定的rails版本编译运行
rails _版本号_ 项目名称
			posted @ 
2010-06-24 17:39 Paul Lin 阅读(1513) | 
评论 (0) | 
编辑 收藏