<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>foxzool</title>
    <link>https://ruby-china.org/foxzool</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>如何看待 rubyspec 停止开发？</title>
      <description>&lt;p&gt;转自知乎 &lt;a href="http://www.zhihu.com/question/28614151" rel="nofollow" target="_blank"&gt;http://www.zhihu.com/question/28614151&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;求八卦&lt;/p&gt;</description>
      <author>foxzool</author>
      <pubDate>Mon, 09 Mar 2015 17:43:37 +0800</pubDate>
      <link>https://ruby-china.org/topics/24548</link>
      <guid>https://ruby-china.org/topics/24548</guid>
    </item>
    <item>
      <title>ruby 中 Fixnum 的 object_id 这样设计的目的是什么？</title>
      <description>&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2.2.0 :038 &amp;gt; false.object_id
 =&amp;gt; 0
2.2.0 :039 &amp;gt; true.object_id
 =&amp;gt; 20
2.2.0 :040 &amp;gt; 0.object_id
 =&amp;gt; 1
2.2.0 :041 &amp;gt; 1.object_id
 =&amp;gt; 3
2.2.0 :042 &amp;gt; 2.object_id
 =&amp;gt; 5
2.2.0 :043 &amp;gt; 3.object_id
 =&amp;gt; 7
2.2.0 :044 &amp;gt; 100.object_id
 =&amp;gt; 201
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;object_id 都是 Fixnum * 2 + 1 的增长，为什么这样设计？&lt;/p&gt;</description>
      <author>foxzool</author>
      <pubDate>Fri, 06 Mar 2015 22:50:23 +0800</pubDate>
      <link>https://ruby-china.org/topics/24508</link>
      <guid>https://ruby-china.org/topics/24508</guid>
    </item>
    <item>
      <title>Cookpad - 可能是世界上最大的 Rails 单一应用</title>
      <description>&lt;p&gt;&lt;a href="https://speakerdeck.com/a_matsuda/the-recipe-for-the-worlds-largest-rails-monolith" rel="nofollow" target="_blank"&gt;https://speakerdeck.com/a_matsuda/the-recipe-for-the-worlds-largest-rails-monolith&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://cookpad.com/" rel="nofollow" target="_blank"&gt;http://cookpad.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2015/4f0c5f32511ce22bbec9d673ffbc89fa.png" title="" alt=""&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;276+ gem&lt;/li&gt;
&lt;li&gt;50 million unique user / month&lt;/li&gt;
&lt;li&gt;15, 000 req / sec&lt;/li&gt;
&lt;li&gt;300 servers&lt;/li&gt;
&lt;li&gt;database.yml  1141 lines &lt;/li&gt;
&lt;li&gt;30 database&lt;/li&gt;
&lt;li&gt;20000 + rspec example&lt;/li&gt;
&lt;li&gt;50 developers&lt;/li&gt;
&lt;li&gt;deploy 10+ times / day&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;要点：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;根据访问量自动扩展服务器&lt;/li&gt;
&lt;li&gt;使用 Serf + Gossip 替代 Capistrano 部署代码&lt;/li&gt;
&lt;li&gt;数据库读/写分离&lt;/li&gt;
&lt;li&gt;远程分发 RSpec 测试&lt;/li&gt;
&lt;li&gt;测试时只清理相关的数据库&lt;/li&gt;
&lt;li&gt;数据迁移时不新建 mgiration 文件，自动根据 DB schema 进行迁移&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cookpad 的一位开发者 &lt;a href="https://github.com/sorah" rel="nofollow" target="_blank" title=""&gt;sorah&lt;/a&gt; 14 岁已经是 ruby committer 了，上个月才满 18 岁。。。。&lt;/p&gt;</description>
      <author>foxzool</author>
      <pubDate>Fri, 06 Mar 2015 14:22:45 +0800</pubDate>
      <link>https://ruby-china.org/topics/24496</link>
      <guid>https://ruby-china.org/topics/24496</guid>
    </item>
    <item>
      <title>Ruby 2.2.1 Released</title>
      <description>&lt;p&gt;&lt;a href="https://www.ruby-lang.org/en/news/2015/03/03/ruby-2-2-1-released/" rel="nofollow" target="_blank"&gt;https://www.ruby-lang.org/en/news/2015/03/03/ruby-2-2-1-released/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;This release includes the fix for ffi build failure and memory leak issue on Symbol GC&lt;/code&gt;&lt;/p&gt;</description>
      <author>foxzool</author>
      <pubDate>Tue, 03 Mar 2015 15:38:15 +0800</pubDate>
      <link>https://ruby-china.org/topics/24436</link>
      <guid>https://ruby-china.org/topics/24436</guid>
    </item>
    <item>
      <title>rubocop - ruby 代码风格分析器</title>
      <description>&lt;p&gt;来源： &lt;a href="http://zool.me/posts/2015/02/05/rubocop" rel="nofollow" target="_blank" title=""&gt;ZoOL's Blog&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="什么是RuboCop"&gt;什么是 RuboCop&lt;/h2&gt;
&lt;p&gt;Rubocop 是基于 &lt;a href="https://github.com/bbatsov/ruby-style-guide" rel="nofollow" target="_blank" title=""&gt;ruby-style-guide&lt;/a&gt; / &lt;a href="https://ruby-china.org/wiki/coding-style" title=""&gt;Ruby 风格指导&lt;/a&gt; 实现的一个静态代码分析工具。
使用&lt;code&gt;rubocop&lt;/code&gt;有助于个人/团队写出风格统一的代码&lt;/p&gt;
&lt;h2 id="如何安装"&gt;如何安装&lt;/h2&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;rubocop&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;或使用&lt;code&gt;bundle&lt;/code&gt;安装&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;'rubocop'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;require: &lt;/span&gt;&lt;span class="kp"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="如何使用"&gt;如何使用&lt;/h2&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="n"&gt;rubocop&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;或指定目录或文件&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="n"&gt;rubocop&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="n"&gt;spec&lt;/span&gt; &lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;something&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以&lt;a href="https://github.com/ruby-china/ruby-china/blob/master/app/models/user.rb" rel="nofollow" target="_blank" title=""&gt;ruby-china 为例&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="n"&gt;rubocop&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;364&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;Prefer&lt;/span&gt; &lt;span class="n"&gt;single&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;quoted&lt;/span&gt; &lt;span class="n"&gt;strings&lt;/span&gt; &lt;span class="k"&gt;when&lt;/span&gt; &lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;don&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="n"&gt;need&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="n"&gt;interpolation&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;special&lt;/span&gt; &lt;span class="n"&gt;symbols&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
        &lt;span class="nf"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
                        &lt;span class="o"&gt;^^^^^^^^^^^^^&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;367&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;29&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;Space&lt;/span&gt; &lt;span class="n"&gt;missing&lt;/span&gt; &lt;span class="n"&gt;after&lt;/span&gt; &lt;span class="n"&gt;comma&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
    &lt;span class="nf"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:watchers&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:watchers&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}.&lt;/span&gt;&lt;span class="nf"&gt;take&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                            &lt;span class="o"&gt;^&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;368&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;81&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;Line&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;too&lt;/span&gt; &lt;span class="n"&gt;long&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nf"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;85&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;github_repositories_cache_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;expires_in: &lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;days&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                                                                                &lt;span class="o"&gt;^^^^^&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;371&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;Use&lt;/span&gt; &lt;span class="n"&gt;only&lt;/span&gt; &lt;span class="n"&gt;ascii&lt;/span&gt; &lt;span class="n"&gt;symbols&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;comments&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
  &lt;span class="c1"&gt;# 重新生成 Private Token&lt;/span&gt;
  &lt;span class="o"&gt;^^^^^^^^^^^^^^^^^^^^&lt;/span&gt;

&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="n"&gt;inspected&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;181&lt;/span&gt; &lt;span class="n"&gt;offenses&lt;/span&gt; &lt;span class="n"&gt;detected&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;竟然有 181 个地方需要修改!
其中有很多是 &lt;code&gt;{:a =&amp;gt; :b} 修改为 {a: :b}&lt;/code&gt; 、&lt;code&gt;使用类似的问题
可以使用&lt;/code&gt;rubocop&lt;code&gt;自动化修复一部分, 加上&lt;/code&gt;-a`参数&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="n"&gt;rubocop&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;

&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="n"&gt;inspected&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;206&lt;/span&gt; &lt;span class="n"&gt;offenses&lt;/span&gt; &lt;span class="n"&gt;detected&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;149&lt;/span&gt; &lt;span class="n"&gt;offenses&lt;/span&gt; &lt;span class="n"&gt;corrected&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;跑测试确认一下&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;rspec&lt;/span&gt; &lt;span class="n"&gt;spec&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;user_spec&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;✌，继续修改&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;368&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;81&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;Line&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;too&lt;/span&gt; &lt;span class="n"&gt;long&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nf"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;85&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;github_repositories_cache_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;expires_in: &lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;days&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                                                                                &lt;span class="o"&gt;^^^^^&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;371&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;Use&lt;/span&gt; &lt;span class="n"&gt;only&lt;/span&gt; &lt;span class="n"&gt;ascii&lt;/span&gt; &lt;span class="n"&gt;symbols&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;comments&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
  &lt;span class="c1"&gt;# 重新生成 Private Token&lt;/span&gt;
  &lt;span class="o"&gt;^^^^^^^^^^^^^^^^^^^^&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;又是警告，但我想写中文注释，一行 80 个字太短了，我们修改一下&lt;code&gt;rubocop&lt;/code&gt;配置。&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;.rubocop.yml&lt;/span&gt;
&lt;span class="na"&gt;AllCops&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;RunRailsCops&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;Include&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;**/Gemfile'&lt;/span&gt;
&lt;span class="err"&gt;  &lt;/span&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;**/Rakefile'&lt;/span&gt;
&lt;span class="na"&gt;Exclude&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;bin/*'&lt;/span&gt;
&lt;span class="err"&gt;  &lt;/span&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;db/migrate/*'&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;db/seeds.rb'&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;db/schema.rb'&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;vendor/bundle/**/*'&lt;/span&gt;

&lt;span class="na"&gt;Metrics/LineLength&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;Max&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;120&lt;/span&gt;
&lt;span class="na"&gt;Style/AsciiComments&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;Enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;再看一下&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="n"&gt;rubocop&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;343&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;Assignment&lt;/span&gt; &lt;span class="no"&gt;Branch&lt;/span&gt; &lt;span class="no"&gt;Condition&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;fetch_github_repositories&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;too&lt;/span&gt; &lt;span class="n"&gt;high&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nf"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;29.9&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nc"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch_github_repositories&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="o"&gt;^^^&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;343&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;Method&lt;/span&gt; &lt;span class="n"&gt;has&lt;/span&gt; &lt;span class="n"&gt;too&lt;/span&gt; &lt;span class="n"&gt;many&lt;/span&gt; &lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nf"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nc"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch_github_repositories&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="o"&gt;^^^&lt;/span&gt;

&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="n"&gt;inspected&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;23&lt;/span&gt; &lt;span class="n"&gt;offenses&lt;/span&gt; &lt;span class="n"&gt;detected&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样，要修复的就少多了。&lt;/p&gt;

&lt;p&gt;剩下的问题如&lt;code&gt;Method has too many lines. [23/10]&lt;/code&gt;的警告就看你自己的想法了。
可以参考&lt;a href="https://github.com/bbatsov/rubocop/tree/master/config" rel="nofollow" target="_blank" title=""&gt;官方配置&lt;/a&gt;
在&lt;code&gt;.rubocop.yml&lt;/code&gt;里进行配置。&lt;/p&gt;

&lt;p&gt;#编辑器支持
vim, emacs, sublime, atom, rubymine 全部支持
参考&lt;a href="https://github.com/bbatsov/rubocop#editor-integration" rel="nofollow" target="_blank" title=""&gt;第三方支持&lt;/a&gt;&lt;/p&gt;</description>
      <author>foxzool</author>
      <pubDate>Thu, 26 Feb 2015 11:45:47 +0800</pubDate>
      <link>https://ruby-china.org/topics/24345</link>
      <guid>https://ruby-china.org/topics/24345</guid>
    </item>
    <item>
      <title>parallelsdesktop 双十一半价</title>
      <description>&lt;p&gt;在英文官网差点下单，还好去中文官网看了一下，双十一半价只要 ￥199。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.parallelsdesktop.cn/goumai.html" rel="nofollow" target="_blank"&gt;http://www.parallelsdesktop.cn/goumai.html&lt;/a&gt;&lt;/p&gt;</description>
      <author>foxzool</author>
      <pubDate>Thu, 06 Nov 2014 23:28:10 +0800</pubDate>
      <link>https://ruby-china.org/topics/22538</link>
      <guid>https://ruby-china.org/topics/22538</guid>
    </item>
    <item>
      <title>寻寻觅觅又回归 ruby</title>
      <description>&lt;p&gt;从 PHP 入门，用 ruby 改写页游服务器后，一直在一家创业游戏公司，前前后后 5-6 年。&lt;/p&gt;

&lt;p&gt;期间做过运营，策划，干过很多杂事。也研究过 erlang,  cocos2dx + lua, unity3D。 &lt;/p&gt;

&lt;p&gt;目前由于总总原因，离开了原来公司，来另一个创业团队工作，全职用 ruby on rails 写 web 应用。&lt;/p&gt;

&lt;p&gt;对曾接触过语言的一些感想：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;PHP: 入门时学习， 搭discuz和wordpress， 公司最早的页游服务器就是php版， 但感觉维护困难， 就像那句老话: Quick &amp;amp; Dirty
&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;Ruby: 写的开心，开发效率高，capistrano帮我省了很多运维任务，另外Ruby on rails的开发者更有full stack和创业的倾向？
&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;Erlang: 并发模型很清晰，OTP很强大。当初想研究做游戏socket服务器，但发现写业务逻辑没效率。 最新的elixir感觉不错，值得跟进学习。
&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;cocos2dx+lua:  最早用cocos2dx写过一个《疯狂猜电影》的 iOS 游戏， 恩，C++写逻辑，那时就无比怀念 ruby。 后来新开项目时，就选型了quick-cocos2dx + lua， 用lua写游戏脚本， 这效率一下子就上去了。
cocos2d免费，但很多东西如UI,场景等都需要借助第三方工具 cocosBuilder 等来完成，挺适合草根团队。
&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;Unity： 大部分操作都可以在编辑器里拖拽完成，还有Asset Store里海量的插件支持，逻辑脚本用 C# 和 Javascript。 但这套开发环境都是要付费的，Untiy要一万多， 插件大部分也要收费。
&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;Java: 我基本上没用过java, 但上一家公司的平台和游戏架构都选了java,  但从我内心角度来说， 选择Java就是选择平庸。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;总结：
公司选择什么开发语言不重要，关键是要把东西做出来，验证产品的商业模式是否成功。
个人选择开发语言很重要，因为
&lt;img src="https://l.ruby-china.com/photo/2014/1aa2d2e1ffe3443a954109b4803d769f.jpeg" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>foxzool</author>
      <pubDate>Tue, 05 Aug 2014 17:26:56 +0800</pubDate>
      <link>https://ruby-china.org/topics/20852</link>
      <guid>https://ruby-china.org/topics/20852</guid>
    </item>
    <item>
      <title>xsh - shell 神器？</title>
      <description>&lt;p&gt;刚刚在 kickstarter 看到了这个 xsh,&lt;br&gt;
官网：&lt;a href="http://xsh.org/" rel="nofollow" target="_blank"&gt;http://xsh.org/&lt;/a&gt;
视频演示：&lt;span class="embed-responsive embed-responsive-16by9"&gt;&lt;iframe class="embed-responsive-item" src="//www.youtube.com/embed/sz1d-9NY5cA" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;从视频演示来看，xsh 加强了管道的作用，命令行直接操作 database，直接修改 js,css,html 等等，感觉是 shell 版的 alfred。&lt;/p&gt;</description>
      <author>foxzool</author>
      <pubDate>Fri, 25 Jul 2014 09:50:29 +0800</pubDate>
      <link>https://ruby-china.org/topics/20664</link>
      <guid>https://ruby-china.org/topics/20664</guid>
    </item>
    <item>
      <title>如何在 Rails4 里设置 nested resourced? </title>
      <description>&lt;p&gt;使用 rails4.0
在 routes 里设置&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;resources :shops do
  resources :products
end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在使用 scaffold 生成的 product controller 里&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# POST /products
# POST /products.json
def create
  @product = Product.new(product_params)

  respond_to do |format|
    if @product.save
      format.html { redirect_to @product, notice: 'Product was successfully created.' }
      format.json { render action: 'show', status: :created, location: @product }
    else
      format.html { render action: 'new' }
      format.json { render json: @product.errors, status: :unprocessable_entity }
    end
  end
end


private
def product_params
   params.require(:product).permit(:name, :shop_id, :price)
end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;问题：
默认通过 Product.new(product_params) 生成的&lt;a href="/product" class="user-mention" title="@product"&gt;&lt;i&gt;@&lt;/i&gt;product&lt;/a&gt;变量，
当 redirect_to &lt;a href="/product" class="user-mention" title="@product"&gt;&lt;i&gt;@&lt;/i&gt;product&lt;/a&gt; 时，默认是跳转 product_path。我需要将其跳转为 shop_product_path。&lt;/p&gt;

&lt;p&gt;所以，如何正确的设置 product_params？&lt;/p&gt;</description>
      <author>foxzool</author>
      <pubDate>Wed, 14 Aug 2013 17:03:29 +0800</pubDate>
      <link>https://ruby-china.org/topics/13327</link>
      <guid>https://ruby-china.org/topics/13327</guid>
    </item>
    <item>
      <title>有没有开发 kinect 的朋友？</title>
      <description>&lt;p&gt;我朋友公司要想外包开发一个 kinect 应用，就是通过基本的手势操作来操作幻灯片显示。&lt;/p&gt;

&lt;p&gt;不知有没有朋友是做过 kinect 开发的？能否介绍一下？&lt;/p&gt;</description>
      <author>foxzool</author>
      <pubDate>Mon, 05 Nov 2012 15:27:25 +0800</pubDate>
      <link>https://ruby-china.org/topics/6542</link>
      <guid>https://ruby-china.org/topics/6542</guid>
    </item>
    <item>
      <title>[上海][个人] 游戏行业 4 年 ruby 经验求职</title>
      <description>&lt;p&gt;&lt;strong&gt;个人经历&lt;/strong&gt;
机电专业出身，学过网络工程师，转行做网页游戏服务端开发，在公司里运维/策划/运营杂七杂八的事都干过一点。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;经验&lt;/strong&gt;
1、4 年网页游戏服务端主程，ruby on rails + mysql + memcache
2、4 年服务端运维经验，capistrano 自动部署，git 代码管理，centos/ubuntu服务器安装维护。
3、熟悉 redmine，为公司项目写过小插件。
4、熟悉 erlang，写过页游服务端 demo。
5、了解敏捷开发，在公司里推行过一阵子 scrum。
6、了解手游行业，正在学习 ios 开发。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;联系方式&lt;/strong&gt;
github: &lt;a href="http://github.com/foxzool" rel="nofollow" target="_blank"&gt;http://github.com/foxzool&lt;/a&gt;
blog: &lt;a href="http://zool.me" rel="nofollow" target="_blank"&gt;http://zool.me&lt;/a&gt;
twitter: &lt;a href="http://twitter.com/foxzool" rel="nofollow" target="_blank"&gt;http://twitter.com/foxzool&lt;/a&gt;
Gtalk: zhooul#gmail.com&lt;/p&gt;</description>
      <author>foxzool</author>
      <pubDate>Mon, 10 Sep 2012 21:48:56 +0800</pubDate>
      <link>https://ruby-china.org/topics/5468</link>
      <guid>https://ruby-china.org/topics/5468</guid>
    </item>
    <item>
      <title>有人在玩 Diablo 3 吗？</title>
      <description>&lt;p&gt;难得一款大作可以在 mac 下玩，我在亚服  battle_tag：ZoOL#3514&lt;/p&gt;

&lt;p&gt;P.S. 记得 diablo2 发售时是十一，我发烧了 7 天，一段悲催的记忆。。&lt;/p&gt;</description>
      <author>foxzool</author>
      <pubDate>Tue, 15 May 2012 16:16:59 +0800</pubDate>
      <link>https://ruby-china.org/topics/3293</link>
      <guid>https://ruby-china.org/topics/3293</guid>
    </item>
    <item>
      <title>[上海][2012年04月24日] Ruby Tuesday 活动公告</title>
      <description>&lt;p&gt;上海 RubyTuesday 活动召集！&lt;/p&gt;

&lt;p&gt;主题：OAuth2
由 &lt;a href="/lgn21st" class="user-mention" title="@lgn21st"&gt;&lt;i&gt;@&lt;/i&gt;lgn21st&lt;/a&gt; 分享 OAuth2 的前世今生，实现方法。大家一起探讨一下关于 OAuth2 的更多应用场景。&lt;/p&gt;

&lt;p&gt;报名：不需要
费用：咖啡店请自行点单
欢迎上海的 Rubyist 参加！&lt;/p&gt;

&lt;p&gt;时间：2012 年 04 月 24 日（周二）晚上 6:30 至 9 点
地点：浦东新区世纪大道 8 号上海国金中心 D 座 B1 楼 LG1-37 室，COSTA COFFEE(国金中心店)
交通：位置在浦东陆家嘴的 Apple Store 旁边，提早到达的同学请负责占座 ^_^
网址：&lt;a href="http://www.dianping.com/shop/4600640" rel="nofollow" target="_blank"&gt;http://www.dianping.com/shop/4600640&lt;/a&gt;  &lt;/p&gt;</description>
      <author>foxzool</author>
      <pubDate>Tue, 17 Apr 2012 21:35:28 +0800</pubDate>
      <link>https://ruby-china.org/topics/2668</link>
      <guid>https://ruby-china.org/topics/2668</guid>
    </item>
    <item>
      <title>"Rails"是属于 DHH 的商标？</title>
      <description>&lt;p&gt;今天翻 guides 时发现 footer 处有这么一句&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Rails", "Ruby on Rails", and the Rails logo are trademarks of David Heinemeier Hansson. All rights reserved.

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;有人知道怎么回事吗？&lt;/p&gt;

&lt;p&gt;&lt;a href="/fredwu" class="user-mention" title="@fredwu"&gt;&lt;i&gt;@&lt;/i&gt;fredwu&lt;/a&gt;  &lt;/p&gt;</description>
      <author>foxzool</author>
      <pubDate>Fri, 23 Mar 2012 22:33:12 +0800</pubDate>
      <link>https://ruby-china.org/topics/2094</link>
      <guid>https://ruby-china.org/topics/2094</guid>
    </item>
    <item>
      <title>java 的这个 MD5 加密在 ruby 中如何操作？</title>
      <description>&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="n"&gt;sendSignMsg&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;MD5Util&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;md5Hex&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;signMsgVal&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getBytes&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="o"&gt;)).&lt;/span&gt;&lt;span class="na"&gt;toUpperCase&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如上述 java 代码，getBytes 应该是返回一个数组，在 ruby 中如何对这个数组进行 md5 加密？  &lt;/p&gt;</description>
      <author>foxzool</author>
      <pubDate>Wed, 14 Mar 2012 13:09:16 +0800</pubDate>
      <link>https://ruby-china.org/topics/1851</link>
      <guid>https://ruby-china.org/topics/1851</guid>
    </item>
    <item>
      <title>devise 的几个回调方法</title>
      <description>&lt;p&gt;严格的来说是 warden 的回调方法&lt;/p&gt;

&lt;p&gt;需求：我使用 devise 的 token 验证模块，需要在登录时，重置一次 token。&lt;/p&gt;

&lt;p&gt;方法：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Warden::Manager.after_authentication do |user,auth,opts|
  user.reset_authentication_token!
end

Warden::Manager.before_logout do |user,auth,opts|
  user.reset_authentication_token!
end


&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;warden 一共有 4 个回调方法&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;after_set_user
after_authentication
before_failure
before_logout


&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其中 after_set_user 是在每一次请求 devise 验证时都会调用，所以可以做自己的登录超时机制使用&lt;/p&gt;

&lt;p&gt;参考文档：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/hassox/warden/wiki/callbacks" rel="nofollow" target="_blank"&gt;https://github.com/hassox/warden/wiki/callbacks&lt;/a&gt;  &lt;/p&gt;</description>
      <author>foxzool</author>
      <pubDate>Mon, 12 Mar 2012 00:20:06 +0800</pubDate>
      <link>https://ruby-china.org/topics/1794</link>
      <guid>https://ruby-china.org/topics/1794</guid>
    </item>
    <item>
      <title>今天听了一天豆瓣 FM Café 频道</title>
      <description>&lt;p&gt;写 code 时做背景音正好，哈哈哈。  &lt;/p&gt;</description>
      <author>foxzool</author>
      <pubDate>Sun, 11 Mar 2012 21:11:34 +0800</pubDate>
      <link>https://ruby-china.org/topics/1788</link>
      <guid>https://ruby-china.org/topics/1788</guid>
    </item>
    <item>
      <title>[上海][2012年03月13日] RubyTuesday 活动公告</title>
      <description>&lt;p&gt;上海 RubyTuesday 活动召集！&lt;/p&gt;

&lt;p&gt;本次话题由 &lt;a href="/RainuxLuo" class="user-mention" title="@RainuxLuo"&gt;&lt;i&gt;@&lt;/i&gt;RainuxLuo&lt;/a&gt; 带来：&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EventMachine 以及用 EM 实现的 Twitter 客户端&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;话题包括安装说明，介绍，demo 演示等等&lt;/p&gt;

&lt;p&gt;如果有朋友想分享话题，也请跟贴说明。&lt;/p&gt;

&lt;p&gt;时间：2012 年 03 月 13 日（周二）晚上 6:30 至 9 点
地点：浦东新区世纪大道 8 号上海国金中心 D 座 B1 楼 LG1-37 室，COSTA COFFEE(国金中心店)
交通：位置在浦东陆家嘴的 Apple Store 旁边，提早到达的同学请负责占座 ^_^
网址：&lt;a href="http://www.dianping.com/shop/4600640" rel="nofollow" target="_blank"&gt;http://www.dianping.com/shop/4600640&lt;/a&gt;  &lt;/p&gt;</description>
      <author>foxzool</author>
      <pubDate>Thu, 08 Mar 2012 19:51:30 +0800</pubDate>
      <link>https://ruby-china.org/topics/1717</link>
      <guid>https://ruby-china.org/topics/1717</guid>
    </item>
    <item>
      <title>在服务器部署时默认信任 rvmrc 文件</title>
      <description>&lt;p&gt;在开发中，我们通过.rvmrc 来控制当前目录的 ruby 版本。&lt;/p&gt;

&lt;p&gt;当使用 capistrano 部署到服务器上时，由于版本控制 (git, svn) 的原因，在进入/path/to/app/current/目录时，一直会提示下面的信息来让你确认。&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;==============================================================================&lt;/span&gt;
&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;NOTICE&lt;/span&gt;                                                                     &lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="o"&gt;==============================================================================&lt;/span&gt;
&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;RVM&lt;/span&gt; &lt;span class="n"&gt;has&lt;/span&gt; &lt;span class="n"&gt;encountered&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;modified&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rvmrc&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="n"&gt;directory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;This&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;shell&lt;/span&gt; &lt;span class="n"&gt;script&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;therefore&lt;/span&gt; &lt;span class="n"&gt;may&lt;/span&gt; &lt;span class="n"&gt;contain&lt;/span&gt; &lt;span class="n"&gt;any&lt;/span&gt; &lt;span class="n"&gt;shell&lt;/span&gt; &lt;span class="n"&gt;commands&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;       &lt;span class="nf"&gt;=&lt;/span&gt;
&lt;span class="o"&gt;=&lt;/span&gt;                                                                            &lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Examine&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;contents&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;this&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="n"&gt;carefully&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;be&lt;/span&gt; &lt;span class="n"&gt;sure&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;contents&lt;/span&gt; &lt;span class="n"&gt;are&lt;/span&gt;    &lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;safe&lt;/span&gt; &lt;span class="n"&gt;before&lt;/span&gt; &lt;span class="n"&gt;trusting&lt;/span&gt; &lt;span class="n"&gt;it!&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="no"&gt;Choose&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;iew&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;below&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;view&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;contents&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;      &lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="o"&gt;==============================================================================&lt;/span&gt;
&lt;span class="no"&gt;Do&lt;/span&gt; &lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;wish&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;trust&lt;/span&gt; &lt;span class="n"&gt;this&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rvmrc&lt;/span&gt; &lt;span class="n"&gt;file?&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/home/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;apps&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rvmrc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;es&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;iew&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ancel&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以通过下面的配置来解决：&lt;/p&gt;

&lt;p&gt;编辑 rvm 配置文件（~/.rvmrc or /etc/rvmrc)&lt;/p&gt;

&lt;p&gt;加上下面的一行&lt;/p&gt;

&lt;p&gt;rvm_trust_rvmrcs_flag=1&lt;/p&gt;</description>
      <author>foxzool</author>
      <pubDate>Sun, 26 Feb 2012 16:09:12 +0800</pubDate>
      <link>https://ruby-china.org/topics/1432</link>
      <guid>https://ruby-china.org/topics/1432</guid>
    </item>
    <item>
      <title>[上海][2012年02月28日] RubyTuesday 活动公告</title>
      <description>&lt;p&gt;趁热打铁，RubyTuesday 活动召集！&lt;/p&gt;

&lt;p&gt;本次活动， &lt;a href="/lgn21st" class="user-mention" title="@lgn21st"&gt;&lt;i&gt;@&lt;/i&gt;lgn21st&lt;/a&gt; 将会带来 Background Job 方面的话题分享。&lt;/p&gt;

&lt;p&gt;如果有朋友想分享话题，也请跟贴说明。&lt;/p&gt;

&lt;p&gt;时间：2012 年 02 月 28 日（周二）晚上 6:30 至 9 点
地点：浦东新区世纪大道 8 号上海国金中心 D 座 B1 楼 LG1-37 室，COSTA COFFEE(国金中心店)
交通：位置在浦东陆家嘴的 Apple Store 旁边，提早到达的同学请负责占座 ^_^
网址：&lt;a href="http://www.dianping.com/shop/4600640" rel="nofollow" target="_blank"&gt;http://www.dianping.com/shop/4600640&lt;/a&gt;  &lt;/p&gt;</description>
      <author>foxzool</author>
      <pubDate>Sun, 26 Feb 2012 12:36:51 +0800</pubDate>
      <link>https://ruby-china.org/topics/1428</link>
      <guid>https://ruby-china.org/topics/1428</guid>
    </item>
  </channel>
</rss>
