posted @
2012-02-18 18:57 Paul Lin 阅读(630) |
评论 (0) |
编辑 收藏
摘要: 换句话说,当你找到与天赋、个性完全匹配的工作,它恰好处在上升期的市场,公司又提供了必要的授权与资源,那么你就很容易成功。反之,若这三点中的任何一点不匹配,那么你就是个loser。
阅读全文
posted @
2012-02-18 18:27 Paul Lin 阅读(654) |
评论 (0) |
编辑 收藏
posted @
2012-02-18 18:09 Paul Lin 阅读(563) |
评论 (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 阅读(1674) |
评论 (0) |
编辑 收藏
摘要:
阅读全文
posted @
2011-11-13 23:29 Paul Lin 阅读(10992) |
评论 (1) |
编辑 收藏
终于花了将近4个月的时间,把《Learn Rails3 by example》的E文版看完了,心中那个成就感和满足感啊~~继续下一轮的针对性学习计划,计划包括:1. Rails应用的部署和性能监控2. Rails的MVC架构和Cache3. JS和JS与Rails的结合使用4. Ruby的语法和特性5. MySQL配置和调优6. 搜索引擎和推荐引擎的学习7. NoSQL专题
posted @
2011-11-03 00:17 Paul Lin 阅读(731) |
评论 (0) |
编辑 收藏
关于RVM + REE + Ngix + Passenger + Capistrano的安装配置,非常详细!强烈推荐http://blog.ninjahideout.com/posts/a-guide-to-a-nginx-passenger-and-rvm-server
posted @
2011-11-03 00:14 Paul Lin 阅读(701) |
评论 (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|
load model
end
posted @
2011-09-06 14:21 Paul Lin 阅读(679) |
评论 (0) |
编辑 收藏
假如我们把attr_accessible设置成只有name是可以访问的,然后在Console中执行如下命令:
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">
ruby-1.9.2-p180 :002 > user.email
=> nil
ruby-1.9.2-p180 :003 > user.email = "bob@163.com"
=> "bob@163.com"
ruby-1.9.2-p180 :004 > user.email
=> "bob@163.com"
ruby-1.9.2-p180 :005 > user.save
=> true
ruby-1.9.2-p180 :006 > user.reload.email
=> "bob@163.com"
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">
不是not accessible 吗?怎么email还是能够改变?
posted @
2011-09-03 12:51 Paul Lin 阅读(1226) |
评论 (1) |
编辑 收藏
摘要: 我们要修改的文件会涉及到4个:
A. Gemfile
B. .rspec
C. Guardfile
D. rspec_helper.rb
阅读全文
posted @
2011-08-31 00:44 Paul Lin 阅读(1835) |
评论 (1) |
编辑 收藏
摘要: 从RailsCast.com筛选出来的视频
阅读全文
posted @
2011-08-29 15:58 Paul Lin 阅读(580) |
评论 (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 阅读(3404) |
评论 (0) |
编辑 收藏
BDD style unit testing video and slides@RubyKaigi 2011How I Testwatchr 灵活的Continuous Testing测试工具可替代autotest... 不要盲目的 BDD / TDD,我對寫測試的看法
posted @
2011-07-19 20:06 Paul Lin 阅读(344) |
评论 (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 阅读(421) |
评论 (0) |
编辑 收藏
摘要: 首先我们来理解Autotest的触发机制:
1. 要有一套测试的框架和工具(Console,GUI)
2. 要有可以感知被测试对象发生变化的机制
3. 要有自动加载被测试对象和环境数据的机制
4. 要有将测试结果展示给用户的机制
阅读全文
posted @
2011-07-15 00:14 Paul Lin 阅读(644) |
评论 (0) |
编辑 收藏
摘要: 网上google了一下,发觉又是一个Rails和其他gem不兼容的问题,只要把rake的版本设置为0.8.7就可以了。
阅读全文
posted @
2011-07-03 21:28 Paul Lin 阅读(1418) |
评论 (1) |
编辑 收藏
posted @
2011-06-25 13:40 Paul Lin 阅读(351) |
评论 (0) |
编辑 收藏
posted @
2011-06-18 23:02 Paul Lin 阅读(303) |
评论 (0) |
编辑 收藏
摘要: ....
甲:嗯....可是这样看起来,我完全看不到敏捷的任何好处啊
乙:嗯。实际上,我更喜欢RUP,虽然麻烦但很清楚
....
阅读全文
posted @
2011-06-01 23:31 Paul Lin 阅读(908) |
评论 (1) |
编辑 收藏
摘要: 来自JE上的一篇Rails实战文章,很不错!
阅读全文
posted @
2011-05-27 16:47 Paul Lin 阅读(844) |
评论 (0) |
编辑 收藏
QCon 2011大会的PPT下载。其中有我最感兴趣的架构设计和NoSQL技术:
企业敏捷转型之路
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 阅读(551) |
评论 (0) |
编辑 收藏
摘要:
阅读全文
posted @
2011-03-23 11:55 Paul Lin 阅读(483) |
评论 (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 阅读(327) |
评论 (0) |
编辑 收藏
第1篇:NoSQL开篇——为什么要使用NoSQL
第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 阅读(427) |
评论 (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 阅读(669) |
评论 (0) |
编辑 收藏
http://my.safaribooksonline.com/book/web-development/ruby/9780132480345
很不错,居然全部都可以免费看。
posted @
2010-12-12 23:56 Paul Lin 阅读(481) |
评论 (0) |
编辑 收藏
摘要: 在本节,你将学到如何撰写合乎逻辑的、紧凑的标记,使得你有能力将带宽流量降低50%左右,在减少服务器负担和压力的同时,减少网站的加载时间。通过去除那些表现元素,并改掉那些没有任何好处的坏习惯,我们就可以达到上述的目的。
这些坏习惯折磨着网络中的许多站点,特别是那些将 CSS 代码与主要基于表格的布局混合在一起的站点。这种做法笨拙且不经济,即使是对于那些在其他领域很有经验的设计师来说。同时,出现这个问题的几率是均等的,不论是那些手写代码的站点,还是利用可见编辑工具,比如 Dreamweaver 和 GoLive,来创建的站点。
本节会提出这些常见的错误,这样你就可以识别和防范它们,并且学会如何改正错误。我们详细阐述唯一标识符属性 (id) - ,并展示它如何使你可以编写极其紧凑的 XHTML 代码,不论你创建的是混合布局还是纯粹的 CSS 布局。
阅读全文
posted @
2010-11-18 15:25 Paul Lin 阅读(532) |
评论 (1) |
编辑 收藏
摘要: 我确实希望本节的内容可以激发你的兴趣,并鼓励你去尝试。为什么这么说呢?因为一旦你掌握了本章包含的简单容易的理念,你就会重新思考网页运作的方式,并开始改变建造它们的方法。然而我并不希望你只是将代码重新改写一遍。我希望你可以实实在在地以另一种方式思考和工作。
另一方面,重构才是 XHTML 真正的意义。
阅读全文
posted @
2010-11-18 14:58 Paul Lin 阅读(327) |
评论 (0) |
编辑 收藏
1. 详解CSS选择器、优先级与匹配原理
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 阅读(359) |
评论 (0) |
编辑 收藏
摘要:
阅读全文
posted @
2010-11-05 16:20 Paul Lin 阅读(318) |
评论 (0) |
编辑 收藏
http://www.theserverside.com/news/1363955/Taking-the-load-off-OSCache-helps-databases-cope
posted @
2010-11-03 17:08 Paul Lin 阅读(372) |
评论 (0) |
编辑 收藏
摘要: OSCache是一套用Java编写的缓存框架(或者说解决方案),它主要用于页面缓存,Servlet缓存,或者其它任意的对象。OSCache使用基于内存或者磁盘的缓存策略。不同的策略有不同的适用场合:基于内存的缓存非常快,但是不能持久化,而且不能存储大量数据,适合频繁访问的数据。基于磁盘的缓存可以分为使用文件和数据库缓存,它的速度比内存缓存慢,但可以被持久化,可以在服务器重启重启,数据库奔溃时仍然运作,而且可以存储较多的数据。适合于大量非频繁访问的数据,或者复杂计算结果的缓存。
阅读全文
posted @
2010-10-22 21:39 Paul Lin 阅读(513) |
评论 (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 阅读(435) |
评论 (0) |
编辑 收藏
摘要: 介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制的简单介绍和适用范围说明,以及设计缓存方案应该考虑的问题
阅读全文
posted @
2010-10-19 11:09 Paul Lin 阅读(495) |
评论 (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 阅读(1779) |
评论 (1) |
编辑 收藏
摘要: 原文链接:http://www.javaeye.com/topic/698774
这篇文章放到这个版面,因为我认为它属于管理的范畴:个人管理(时间管理、知识管理)。
是不是大家也有这种体会:
网站注册越来越没耐心,看到页面全是文本框、下拉框,就心烦,咔一下关了。
文章超过两屏的,就没勇气往下看。
看到文章的相关链接,没完没了,两小时后,脑袋一片混乱,真想凉水冲冲。
Google Reader的未读项又是1000+了,看吧,压力太大,不看吧,有种挫败感,干脆,全部设置为已读。
焦虑、挫败、恐惧,什么感觉都来了,唯独没有愉悦感。
......
阅读全文
posted @
2010-07-13 17:36 Paul Lin 阅读(455) |
评论 (0) |
编辑 收藏
①gem install
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 阅读(1492) |
评论 (0) |
编辑 收藏
摘要: 所以我们一定要记住:options={}是用来传递请求参数的,而html_options={}是用来设置请求报头的,不能搞混!
阅读全文
posted @
2010-05-17 16:41 Paul Lin 阅读(6491) |
评论 (4) |
编辑 收藏