<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>ery (Ery)</title>
    <link>https://ruby-china.org/ery</link>
    <description>西伯利亚的雪景 万丈高空的鹰</description>
    <language>en-us</language>
    <item>
      <title>中英文字体等宽对齐-Mac-UbuntuMono-Sublime3</title>
      <description>&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;p&gt;这里的中英文等宽是指 1 个中文严格等于 2 个英文的宽度，
英文包括空格等绝大部分的半角符号。
在 Windows 下很多字体都能做到等宽，
但 Mac 和 Windows 显示字体宽度的 算法不一致，
导致大部分字体都无法做到。&lt;/p&gt;

&lt;p&gt;解决方案：换一个严格 1:2 的字体，比如 Ubuntu Mono&lt;/p&gt;
&lt;h2 id="下载字体 Ubuntu Mono"&gt;下载字体 Ubuntu Mono&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://fonts.google.com/?query=ubuntu+mono" rel="nofollow" target="_blank"&gt;https://fonts.google.com/?query=ubuntu+mono&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="解压缩"&gt;解压缩&lt;/h2&gt;
&lt;p&gt;压缩文件 Ubuntu_Mono.zip&lt;/p&gt;
&lt;h2 id="安装字体"&gt;安装字体&lt;/h2&gt;
&lt;p&gt;双击以下文件，并且点击安装&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UbuntuMono-Bold.ttf&lt;/li&gt;
&lt;li&gt;UbuntuMono-BoldItalic.ttf&lt;/li&gt;
&lt;li&gt;UbuntuMono-Italic.ttf&lt;/li&gt;
&lt;li&gt;UbuntuMono-Regular.ttf&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="查看 安装情况"&gt;查看 安装情况&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;在 Finder 中选取“前往” &amp;gt; “应用程序”&lt;/li&gt;
&lt;li&gt;双击 字体册&lt;/li&gt;
&lt;li&gt;“在左侧” &amp;gt; “用户栏”&lt;/li&gt;
&lt;li&gt;应该显示出 Ubuntu Mono&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="设置Sublime3"&gt;设置 Sublime3&lt;/h2&gt;
&lt;p&gt;Preferences User&lt;/p&gt;

&lt;p&gt;/Users/xxxxxxxx/Library/Application Support/Sublime Text 3/Packages/User/Preferences.sublime-settings&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"font_face": "Ubuntu Mono"
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="相关资料"&gt;相关资料&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.zhihu.com/question/27629845?sort=created" rel="nofollow" target="_blank"&gt;https://www.zhihu.com/question/27629845?sort=created&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.v2ex.com/t/187956" rel="nofollow" target="_blank"&gt;https://www.v2ex.com/t/187956&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://support.apple.com/zh-cn/HT201749" rel="nofollow" target="_blank"&gt;https://support.apple.com/zh-cn/HT201749&lt;/a&gt;&lt;/p&gt;</description>
      <author>ery</author>
      <pubDate>Sat, 04 Feb 2017 09:47:34 +0800</pubDate>
      <link>https://ruby-china.org/topics/32230</link>
      <guid>https://ruby-china.org/topics/32230</guid>
    </item>
    <item>
      <title>获取 Sublime 的命令名称</title>
      <description>&lt;p&gt;在 Sublime 中设置快捷键，一定要知道命令的名称
有一种方法可以获取 Sublime 的命令名称
open console, run : sublime.log_commands(True)
这样你做任何操作，Sublime 都会把操作的命令名称打印出来&lt;/p&gt;

&lt;p&gt;相关文章
&lt;a href="https://www.sublimetext.com/forum/viewtopic.php?f=2&amp;amp;t=11217" rel="nofollow" target="_blank"&gt;https://www.sublimetext.com/forum/viewtopic.php?f=2&amp;amp;t=11217&lt;/a&gt;&lt;/p&gt;</description>
      <author>ery</author>
      <pubDate>Wed, 09 Dec 2015 10:33:35 +0800</pubDate>
      <link>https://ruby-china.org/topics/28316</link>
      <guid>https://ruby-china.org/topics/28316</guid>
    </item>
    <item>
      <title>求 Ember.js 开发经验的分享</title>
      <description>&lt;h2 id="干货在下面的评论中...."&gt;干货在下面的评论中....&lt;/h2&gt;
&lt;p&gt;最近在开发一个前台 Ember.js，后台 Rails，前后台分离的项目。
研究了几天，基本入门。
希望各位有经验的大神，分享一下你们在使用 Ember.js 的时候。
有哪些居家旅行，常用必备的组件和资料？
以及谈谈那些恶心的坑，那些宝贵的经验和吐糟。&lt;/p&gt;

&lt;p&gt;研究的时间甚短，所以能我能分享资源也不多，如下：&lt;/p&gt;
&lt;h2 id="官方资料"&gt;官方资料&lt;/h2&gt;
&lt;p&gt;英文 &lt;a href="http://emberjs.com/guides/" rel="nofollow" target="_blank"&gt;http://emberjs.com/guides/&lt;/a&gt;
中文 &lt;a href="http://emberjs.cn/guides/" rel="nofollow" target="_blank"&gt;http://emberjs.cn/guides/&lt;/a&gt;
英文 &lt;a href="http://www.ember-cli.com/" rel="nofollow" target="_blank"&gt;http://www.ember-cli.com/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="文章"&gt;文章&lt;/h2&gt;
&lt;p&gt;面向未来的前端模块化开发与包管理 &lt;a href="http://div.io/topic/950" rel="nofollow" target="_blank"&gt;http://div.io/topic/950&lt;/a&gt;
Angular.js VS. Ember.js &lt;a href="http://www.csdn.net/article/1970-01-01/2816880" rel="nofollow" target="_blank"&gt;http://www.csdn.net/article/1970-01-01/2816880&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="Demo"&gt;Demo&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/ery/emknight" rel="nofollow" target="_blank"&gt;https://github.com/ery/emknight&lt;/a&gt; 前端 Ember
&lt;a href="https://github.com/ery/emcastle" rel="nofollow" target="_blank"&gt;https://github.com/ery/emcastle&lt;/a&gt; 后端 Rails&lt;/p&gt;</description>
      <author>ery</author>
      <pubDate>Sat, 14 Mar 2015 12:56:27 +0800</pubDate>
      <link>https://ruby-china.org/topics/24646</link>
      <guid>https://ruby-china.org/topics/24646</guid>
    </item>
    <item>
      <title>凭我多年的行医经验</title>
      <description>&lt;p&gt;二战的时候，有个日本兵一天早上去厕所，
低头一看：发现自己有一个蛋变成绿色了，害怕的不得了。
心想是不是坏事干的太多了？
听说有个中国的老名医，专治疑难杂证，于是他就去看病。
“医生，你看我这是怎么了？”
老中医仔细看了半天说：“凭我多年的行医经验，真没见过如此的怪病，我看安全起见割了吧！”
日本兵一想：我还有独轮炮，就割了吧。
于是老中医就帮他割了一个蛋。
过了几天，日本兵在上厕所的时候发现自己的另一个蛋也变成绿色了，于是赶忙来找老中医。
“你看我这是怎么了”
老中医左看右看“凭我多年的行医经验，你这可能是恶化了，小伙子，保命要紧，也割了吧”
日本兵一想：也只好如此了。
于是老中医就帮他割了另一个蛋。
可是，没过几天，日本兵的棍也变成绿色了。
这会日本兵真的绝望了来找老中医。
“医生，你看我这是怎么了？”
老中医沉思了一会说：“凭我多年的行医经验，你这是内裤掉色！”&lt;/p&gt;</description>
      <author>ery</author>
      <pubDate>Thu, 12 Mar 2015 16:08:44 +0800</pubDate>
      <link>https://ruby-china.org/topics/24618</link>
      <guid>https://ruby-china.org/topics/24618</guid>
    </item>
    <item>
      <title>为支持移动端离线模式-数据库采用 UUID 字段</title>
      <description>&lt;p&gt;今天我给大家讲一个故事
如果雷同，那很正常&lt;/p&gt;

&lt;p&gt;很久很久以前，
我们开发了一个团队协作工具，叫 Infoboxme &lt;a href="https://www.infoboxme.com/" rel="nofollow" target="_blank"&gt;https://www.infoboxme.com/&lt;/a&gt;
类似 worktile teambition trello todoist
简单的理解就是有一个表叫做 tasks，实现对该表的增删改读操作。&lt;/p&gt;

&lt;p&gt;数据库是 Mysql
Web 端是 前后台分离的模式。
移动端是 原生的 iOS 和 Android
后端是 Rails&lt;/p&gt;

&lt;p&gt;神对我们说，
移动端必须支持离线模式，
离线的时候，可以创建 Task。
做地铁的时候，经常离线。
神啊，离线的时候，干点别的不好吗，非创建 Task 感冒？&lt;/p&gt;

&lt;p&gt;（神一样的需求）
（神一样的产品）
（神一样的解决方案）
（就是这么被神出来的）&lt;/p&gt;
&lt;h2 id="神走了，TMD问题来了："&gt;神走了，TMD 问题来了：&lt;/h2&gt;
&lt;p&gt;Web 端创建 Task 的时候，
同步调用后台 API，
可以立即获取到 API 的返回值，其中包括新的 Task 的 ID。
之后 Web 端用这个 Task 的 ID，来实现查询，修改，删除等操作。
(从此以后他们过上了幸福的生活...)&lt;/p&gt;

&lt;p&gt;移动端创建 Task 的时候，
异步调用后台 API，因为需要支持离线模式，
后面接着，还要进行其他操作，比如，
创建 Task 的 Comment
删除 Task
修改 Task
等等
此刻无法立即获取 API 的返回值！！！拿不到 Task 的 ID，怎么办？？？
(完蛋了)
(幸福的生活 木有啦)
(下面也木有了........)
(突然之间，2 个移动端程序员，1 个晕到了，1 个石化了)&lt;/p&gt;

&lt;p&gt;凭我们多年的行医经验，
我们决定使用 UUID(户口本上曾用名是 GUID)
方案如下&lt;/p&gt;

&lt;p&gt;移动端创建 Task 的时候，
自己负责生成 Task 的 UUID。
拼装 API 参数的时候，把 Task 的 UUID 放进去。
异步调用后台 API
如果 API 创建 Task 失败，移动端可以利用 Task 的 UUID，把本地的 Task 数据删除。
如果 API 创建 Task 成功，移动端可以利用 Task 的 UUID，实现查询，修改，删除等操作。
(30 秒之后，2 个移动端程序员复活了)
(从此以后他俩过上了幸福的生活...)&lt;/p&gt;
&lt;h2 id="API设计如下"&gt;API 设计如下&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;有两套 API Web 版，移动版 (不要问我为什么不做成一套，那是另外一个故事)&lt;/li&gt;
&lt;li&gt;Web 版本依赖 Task 的 ID，和 UUID 无关&lt;/li&gt;
&lt;li&gt;移动版本依赖 Task 的 UUID，和 ID 无关&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="后台API的实现"&gt;后台 API 的实现&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Task 表加个 UUID 字段，不能为空，不能重复&lt;/li&gt;
&lt;li&gt;Rails Model Task before_validation
分析 task.uuid。
如果没有，创建 uuid。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="实施后的效果"&gt;实施后的效果&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;上线近一年啦，记录数量在百万级别，木有性能问题&lt;/li&gt;
&lt;li&gt;前后端程序员，没发现任何瓶颈和障碍&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="感谢"&gt;感谢&lt;/h2&gt;
&lt;p&gt;力胜 灿玉 庆文 葛伟 周豪 淼程
还有神一样的存在 老蒋&lt;/p&gt;

&lt;p&gt;致我们在云飞思的青春&lt;/p&gt;</description>
      <author>ery</author>
      <pubDate>Thu, 12 Mar 2015 10:05:41 +0800</pubDate>
      <link>https://ruby-china.org/topics/24607</link>
      <guid>https://ruby-china.org/topics/24607</guid>
    </item>
    <item>
      <title>我喜欢酱紫的 Hash</title>
      <description>&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:url&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"好看"&lt;/span&gt;
&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:host&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"我喜欢"&lt;/span&gt;
&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:customer&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:customer&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="ss"&gt;:name&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"爱死了"&lt;/span&gt;
&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:customer&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="ss"&gt;:number&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"越看越喜欢"&lt;/span&gt;
&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:customer&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="ss"&gt;:bills&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:customer&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="ss"&gt;:bills&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;number: &lt;/span&gt;&lt;span class="s2"&gt;"白"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;memo: &lt;/span&gt;&lt;span class="s2"&gt;"漂亮"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:customer&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="ss"&gt;:bills&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;number: &lt;/span&gt;&lt;span class="s2"&gt;"富"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;memo: &lt;/span&gt;&lt;span class="s2"&gt;"漂亮"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:customer&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="ss"&gt;:bills&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;number: &lt;/span&gt;&lt;span class="s2"&gt;"美"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;memo: &lt;/span&gt;&lt;span class="s2"&gt;"漂亮"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:comments&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:comments&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s2"&gt;"有人说酱紫冗余"&lt;/span&gt;
&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:comments&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s2"&gt;"的确有点，不过我依然喜欢酱紫"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="我讨厌酱紫的Hash"&gt;我讨厌酱紫的 Hash&lt;/h2&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="ss"&gt;url: &lt;/span&gt;&lt;span class="s2"&gt;"注意！结尾必须写逗号"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;host: &lt;/span&gt;&lt;span class="s2"&gt;"如果不写逗号,那么会报错"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;customer: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="ss"&gt;name: &lt;/span&gt;&lt;span class="s2"&gt;"逗号很小, 不明显, 不小心删掉了，都很难发现"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="ss"&gt;number: &lt;/span&gt;&lt;span class="s2"&gt;"结尾还有很多括号, 好崩溃呀"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="ss"&gt;bills: &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;number: &lt;/span&gt;&lt;span class="s2"&gt;"苦逼"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;memo: &lt;/span&gt;&lt;span class="s2"&gt;"苦逼苦逼苦逼苦逼"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;number: &lt;/span&gt;&lt;span class="s2"&gt;"苦逼"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;memo: &lt;/span&gt;&lt;span class="s2"&gt;"苦逼苦逼苦逼苦逼"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;number: &lt;/span&gt;&lt;span class="s2"&gt;"苦逼"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;memo: &lt;/span&gt;&lt;span class="s2"&gt;"苦逼苦逼苦逼苦逼"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="c1"&gt;#这个逗号不会报错 神奇吧&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;# 最后一个元素可以不写逗号&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="c1"&gt;# 最后一个元素可以写逗号&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>ery</author>
      <pubDate>Wed, 11 Mar 2015 16:19:12 +0800</pubDate>
      <link>https://ruby-china.org/topics/24594</link>
      <guid>https://ruby-china.org/topics/24594</guid>
    </item>
    <item>
      <title>Git 获取两个 branch/commit (分支 / 提交) 共同的祖先</title>
      <description>&lt;p&gt;当你做 CodeReview 的时候，
你需要知道，当前功能分支，到底做了那些变化。
当然 git diff 可以帮助你，但是和那个 commit diff 哪？
因为当前功能分支，可能已经提交了很多新的 commit，你已经无法找到起点。&lt;/p&gt;

&lt;p&gt;这个时候 &lt;code&gt;git merge-base&lt;/code&gt; 可以帮助你。&lt;/p&gt;

&lt;p&gt;用法如下：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git merge-base commit1 commit2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href="https://www.kernel.org/pub/software/scm/git/docs/git-merge-base.html" rel="nofollow" target="_blank"&gt;https://www.kernel.org/pub/software/scm/git/docs/git-merge-base.html&lt;/a&gt;&lt;/p&gt;</description>
      <author>ery</author>
      <pubDate>Tue, 03 Mar 2015 12:39:36 +0800</pubDate>
      <link>https://ruby-china.org/topics/24431</link>
      <guid>https://ruby-china.org/topics/24431</guid>
    </item>
    <item>
      <title>开源项目 获取分享 huoqufenxiang.com</title>
      <description>&lt;h2 id="需求"&gt;需求&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;快速地“分享”信息给某人。&lt;/li&gt;
&lt;li&gt;快速地“获取”某人的“分享”。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;你是否遇到过这种情况：
有一台电脑或者手机，上面只有一个“浏览器”。
这个时候，你想给他传点数据，该怎么哪？
获取分享 &lt;a href="http://huoqufenxiang.com" rel="nofollow" target="_blank"&gt;http://huoqufenxiang.com&lt;/a&gt;
也许可以帮你解决这个问题！&lt;/p&gt;
&lt;h2 id="位置"&gt;位置&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;天朝官网 &lt;a href="http://huoqufenxiang.com" rel="nofollow" target="_blank"&gt;http://huoqufenxiang.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;地球官网 &lt;a href="http://fetchshare.com" rel="nofollow" target="_blank"&gt;http://fetchshare.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub &lt;a href="https://github.com/ery/fetchshare" rel="nofollow" target="_blank"&gt;https://github.com/ery/fetchshare&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="功能"&gt;功能&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;不用注册 不用登录&lt;/li&gt;
&lt;li&gt;分享 一段文字 或者 一个文件&lt;/li&gt;
&lt;li&gt;获取 别人的分享&lt;/li&gt;
&lt;li&gt;分享的内容 1 小时后会被自动删除&lt;/li&gt;
&lt;li&gt;分享的时候可以 放到一个 指定的位置，便于他人查找，提高了一点点的安全性&lt;/li&gt;
&lt;li&gt;获取的时候 可以输入 一个位置的名称，快速找到，你要的东西。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="起因"&gt;起因&lt;/h2&gt;
&lt;p&gt;有一天晚上（为什么是晚上哪？），
我的同事（Android 客户端工程师）对我说，
你搭个基于 Web 的文件共享服务器吧，我要把做好的客户端 Apk 文件放在上面，
这样，所有的测试人员就可以去哪里，下载并安装啦。&lt;/p&gt;

&lt;p&gt;我说，木有问题，让你们见识一下 Rails 是多么的强大。
开大！！！！！！
两个小时以后，他的梦想实现了！&lt;/p&gt;
&lt;h2 id="我的梦想怎么办？"&gt;我的梦想怎么办？&lt;/h2&gt;
&lt;p&gt;在很久很久以前，不记得是白天还是黑夜。
我想分享一些信息给一个哥们儿（真的是哥们儿吗？记不清了），
后来
，，，，，，，，，，
＃¥……&amp;amp;＊¥&amp;amp;3¥34！@＃@¥！@＃¥@＃
。。。。
历尽千辛万苦！
没成功。&lt;/p&gt;
&lt;h2 id="诞生"&gt;诞生&lt;/h2&gt;
&lt;p&gt;分享文件也好
分享信息也罢&lt;/p&gt;

&lt;p&gt;我不想注册，不想登录，不想费劲
就想 分享/上传，
对方哥们也好，是妹纸更好，
就想 获取/下载。&lt;/p&gt;

&lt;p&gt;于是
fetchshare.com 诞生啦！
huoqufenxiang.com 诞生啦！&lt;/p&gt;
&lt;h2 id="初衷"&gt;初衷&lt;/h2&gt;
&lt;p&gt;我相信人都是好的，所以不需要身份验证。
我想用一个简单的解决方案，解决一个简单的问题。
代码贡献出来，大家随便折腾。&lt;/p&gt;
&lt;h2 id="技术"&gt;技术&lt;/h2&gt;
&lt;p&gt;该项目代码木有技术含量！
代码量也非常的小！
木有啥可学习的东西！&lt;/p&gt;
&lt;h2 id="骄傲"&gt;骄傲&lt;/h2&gt;
&lt;p&gt;fetchshare.com 多么牛逼的域名啊！
huoqufenxiang.com 多么牛逼的域名啊！
都被藕买啦，哈哈啊哈哈哈哈哈
羡慕嫉妒恨吧！&lt;/p&gt;

&lt;p&gt;哈哈啊哈哈哈哈哈哈阿哈哈哈啊哈哈！&lt;/p&gt;</description>
      <author>ery</author>
      <pubDate>Fri, 26 Dec 2014 10:24:59 +0800</pubDate>
      <link>https://ruby-china.org/topics/23410</link>
      <guid>https://ruby-china.org/topics/23410</guid>
    </item>
    <item>
      <title>Streem：Ruby 之父开发的新脚本语言</title>
      <description>&lt;p&gt;Streem：Ruby 之父开发的新脚本语言&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.iteye.com/news/29942" rel="nofollow" target="_blank"&gt;http://www.iteye.com/news/29942&lt;/a&gt;
&lt;a href="https://github.com/matz/streem" rel="nofollow" target="_blank"&gt;https://github.com/matz/streem&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2014 年 12 月 16 日 上午 11:26
ItEye
刚看到 Ruby 语言的开发者松本行弘（Matz，全名是 Yukihiro Matsumoto）又启动了一门新语言，名叫 Streem，还处在非常原始的阶段，只有三个文件，代码在 GitHub 上。 &lt;/p&gt;

&lt;p&gt;松本一直在日本杂志《Software Design》上写专栏，Streem 的想法就出自其中一篇文章。 &lt;/p&gt;

&lt;p&gt;看 Matz 自己的说明，Streem 是一种基于流的并发脚本语言，类似于 shell，但语法更为丰富，主要受 Ruby、Erlang 和其他函数式语言的启发。 &lt;/p&gt;

&lt;p&gt;用 Streem 可以这么写一个简单的 cat 程序： 
STDIN | STDOUT&lt;/p&gt;

&lt;p&gt;无论这个语言最后是否能成气候，乃至得到广泛应用，能看着松本这样的语言设计高手怎么从头设计一门语言，还是人生之大幸。 &lt;/p&gt;

&lt;p&gt;GitHub 上这个项目已经有 10 位贡献者，除了 Matz 和 Ruby 社区的 Nobuyoshi Nakada、Yutaka Hara 之外，一个来自 Google，一个是 Godfrey Chan，住在温哥华的新加坡华人，一个来自伦敦 Gitter 团队，一个来自葡萄牙，贡献第二多的是乌克兰的博士生 Danyil Bohdan。 &lt;/p&gt;

&lt;p&gt;我记得科学松鼠会的姬十三曾在一篇文章中写到，开始干一件好事情就像拿着锣一敲，然后志同道合的人就从四面八方赶来。开源之美，仅在于此。 &lt;/p&gt;</description>
      <author>ery</author>
      <pubDate>Tue, 16 Dec 2014 12:28:01 +0800</pubDate>
      <link>https://ruby-china.org/topics/23228</link>
      <guid>https://ruby-china.org/topics/23228</guid>
    </item>
    <item>
      <title>获取 has_many 和 belongs_to 生成的 SQL</title>
      <description>&lt;p&gt;获取 has_many 和 belongs_to 生成的 SQL&lt;/p&gt;

&lt;p&gt;有的时候我们想要分析 Rails ORM 生成的 SQL
has_many 关系 比较容易获取
belongs_to 关系 稍微麻烦一些
关键点在于 &lt;code&gt;ActiveRecord::Relation#to_sql&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/rails/rails/blob/v3.2.17/activerecord/lib/active_record/relation.rb#L458" rel="nofollow" target="_blank"&gt;https://github.com/rails/rails/blob/v3.2.17/activerecord/lib/active_record/relation.rb#L458&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Customter&lt;/span&gt;
  &lt;span class="n"&gt;has_many&lt;/span&gt; &lt;span class="ss"&gt;:orders&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Order&lt;/span&gt;
  &lt;span class="n"&gt;belongs_to&lt;/span&gt; &lt;span class="ss"&gt;:customter&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="no"&gt;Customter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;first&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_sql&lt;/span&gt;
&lt;span class="c1"&gt;# =&amp;gt; SELECT `orders`.* FROM `orders`  WHERE `orders`.`customer_id` = 136&lt;/span&gt;
&lt;span class="c1"&gt;# =&amp;gt; BTW 136 is customer_id&lt;/span&gt;

&lt;span class="no"&gt;Order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;first&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;association&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:customer&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;association_scope&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_sql&lt;/span&gt;
&lt;span class="c1"&gt;# =&amp;gt; SELECT `customers`.* FROM `customers`  WHERE `customers`.`id` = 136&lt;/span&gt;
&lt;span class="c1"&gt;# =&amp;gt; BTW 136 is customer_id&lt;/span&gt;

&lt;span class="no"&gt;Customter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;first&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;proxy_association&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;association_scope&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;class&lt;/span&gt;
&lt;span class="c1"&gt;# =&amp;gt; ActiveRecord::Relation&lt;/span&gt;

&lt;span class="no"&gt;Order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;first&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;association&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:customer&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;association_scope&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;class&lt;/span&gt;
&lt;span class="c1"&gt;# =&amp;gt; ActiveRecord::Relation&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;关于更多技术实现细节，可以研究 &lt;code&gt;ActiveRecord::Associations#association&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/rails/rails/blob/v3.2.17/activerecord/lib/active_record/associations.rb#L155" rel="nofollow" target="_blank"&gt;https://github.com/rails/rails/blob/v3.2.17/activerecord/lib/active_record/associations.rb#L155&lt;/a&gt;&lt;/p&gt;</description>
      <author>ery</author>
      <pubDate>Fri, 11 Apr 2014 11:09:16 +0800</pubDate>
      <link>https://ruby-china.org/topics/18537</link>
      <guid>https://ruby-china.org/topics/18537</guid>
    </item>
    <item>
      <title>分享 快速运行多个测试</title>
      <description>&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;p&gt;开发的时候，所有测试运行一遍需要 10 分钟左右，
所以，我选择只运行和我当前工作有关的，某几个测试。&lt;/p&gt;

&lt;p&gt;BTW 因为我改动代码的范围比较大，所有没有使用 spork&lt;/p&gt;
&lt;h2 id="运行多个测试 常规方法"&gt;运行多个测试 常规方法&lt;/h2&gt;
&lt;p&gt;ery@tkpad:rails_app:$ rake test TEST=test/functional/day_reports_controller_test.rb
    ery@tkpad:rails_app:$ rake test TEST=test/functional/month_reports_controller_test.rb&lt;/p&gt;

&lt;p&gt;该方法的缺点是，运行 n 个测试，需要加载 n 次 rails 环境，
如果，运行 10 个测试，需要加载 10 次，
非常耗时，让我难以忍受，虽然我忍受 N 年了。&lt;/p&gt;

&lt;p&gt;我 google 了一圈，木找到我喜欢的解决方案。
于是自己写了一个 bash 脚本。&lt;/p&gt;
&lt;h2 id="运行多个测试 新的方法"&gt;运行多个测试 新的方法&lt;/h2&gt;
&lt;p&gt;ery@tkpad:rails_app:$ suitup-multi-test-prepare
    ery@tkpad:rails_app:$ suitup-multi-test-add test/functional/day_reports_controller_test.rb
    ery@tkpad:rails_app:$ suitup-multi-test-add test/functional/month_reports_controller_test.rb
    ery@tkpad:rails_app:$ suitup-multi-test-run&lt;/p&gt;
&lt;h2 id="Bash 相关代码"&gt;Bash 相关代码&lt;/h2&gt;
&lt;p&gt;RUBY_MULTI_TEST="/tmp/ruby_multi_test.rb"&lt;/p&gt;

&lt;p&gt;function suitup-multi-test-prepare {
      sudo rm $RUBY_MULTI_TEST 2&amp;gt; /dev/null
    }&lt;/p&gt;

&lt;p&gt;function suitup-multi-test-add {
      WORK_FOLDER=&lt;code&gt;pwd&lt;/code&gt;
      echo "require '$WORK_FOLDER/$1' " &amp;gt;&amp;gt; $RUBY_MULTI_TEST
    }&lt;/p&gt;

&lt;p&gt;function suitup-multi-test-status {
      cat $RUBY_MULTI_TEST 2&amp;gt; /dev/null
    }&lt;/p&gt;

&lt;p&gt;function suitup-multi-test-run {
      suitup-multi-test-status
      ruby -I test/ $RUBY_MULTI_TEST
    }&lt;/p&gt;</description>
      <author>ery</author>
      <pubDate>Wed, 31 Jul 2013 18:24:54 +0800</pubDate>
      <link>https://ruby-china.org/topics/12950</link>
      <guid>https://ruby-china.org/topics/12950</guid>
    </item>
    <item>
      <title>Google Wave Reloading</title>
      <description>&lt;p&gt;还有谁记得 Google Wave &lt;/p&gt;

&lt;p&gt;&lt;a href="http://savegooglewave.com/" rel="nofollow" target="_blank"&gt;http://savegooglewave.com/&lt;/a&gt;&lt;/p&gt;</description>
      <author>ery</author>
      <pubDate>Wed, 15 May 2013 04:29:19 +0800</pubDate>
      <link>https://ruby-china.org/topics/10988</link>
      <guid>https://ruby-china.org/topics/10988</guid>
    </item>
    <item>
      <title>Web 服务器是多用户好,还是单用户好?</title>
      <description>&lt;h2 id="我们的情况"&gt;我们的情况&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;我们正在部署 Web 服务器&lt;/p&gt;

&lt;p&gt;操作系统是 ubuntu&lt;/p&gt;

&lt;p&gt;部署工具是 capistrano&lt;/p&gt;

&lt;p&gt;我们有三个服务器管理员&lt;/p&gt;

&lt;p&gt;这三个人都可以登录服务器进行操作&lt;/p&gt;

&lt;p&gt;他们的权限都是一样的，都可以使用 sudo&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="我们有两个用户管理方案"&gt;我们有两个用户管理方案&lt;/h2&gt;&lt;h2 id="第一 多个用户"&gt;第一 多个用户&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;创建一个 公共用户&lt;/li&gt;
&lt;li&gt;公共用户 不能登录&lt;/li&gt;
&lt;li&gt;公共用户 用于管理部署的公共文件，比如代码&lt;/li&gt;
&lt;li&gt;再为每个管理员，创建一个独立的用户&lt;/li&gt;
&lt;li&gt;每个管理员使用 自己的用户 登录&lt;/li&gt;
&lt;li&gt;用 cap 部署的时候 使用管理员自己的用户登录&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="第二 一个用户"&gt;第二 一个用户&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;创建一个 公共用户&lt;/li&gt;
&lt;li&gt;公共用户 可以登录&lt;/li&gt;
&lt;li&gt;每管理员使用 公共用户 登录&lt;/li&gt;
&lt;li&gt;用 cap 部署的时候 使用公共用户登录&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="我们的问题"&gt;我们的问题&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;这两个方案 那个比较好？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="希望有服务器管理和维护经验的朋友，帮忙解答，谢谢！"&gt;希望有服务器管理和维护经验的朋友，帮忙解答，谢谢！&lt;/h2&gt;</description>
      <author>ery</author>
      <pubDate>Thu, 02 May 2013 20:25:11 +0800</pubDate>
      <link>https://ruby-china.org/topics/10667</link>
      <guid>https://ruby-china.org/topics/10667</guid>
    </item>
    <item>
      <title>两个 Rails 项目共用一个数据库，请教成熟的解决方案</title>
      <description>&lt;p&gt;&lt;strong&gt;我们有两个 Rails 项目，共用一个数据库&lt;/strong&gt;
一个是 主站系统
一个是 运维系统
我们希望两个项目共用一个套 Migration 代码。   &lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;&lt;strong&gt;额外说明，在发布的时候&lt;/strong&gt;
我们会通过配置 database.yml
让主站系统 和 运维系统 连接到 同一个数据库。&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;&lt;strong&gt;我们正在研究，在开发和测试阶段，怎么做最合适？&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;我们希望在开发和测试阶段，两个项目都可以独立的创建数据库。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;rake db:migrate&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;我们考虑有以下解决方案：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;两个项目放在一个 Git 中，将 Migration 放在一个独立的目录中，两个项目通过 Linux File Link 或 Ruby Require 引用。&lt;/li&gt;
&lt;li&gt;两个项目放在一个 Git 中，将 Migration 放在一个项目中，另一个项目通过 Linux File Link 或 Ruby Require 引用。&lt;/li&gt;
&lt;li&gt;&lt;p&gt;两个项目放在一个 Git 中，将 Migration 放在一个项目中，另一个项目通过 database.yml 连接到数据库。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;两个项目放在两个 Git 中，将 Migration 放在两个项目中，复制 Migration 代码。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;两个项目放在两个 Git 中，将 Migration 放在一个项目中，另一个项目通过 Linux File Link 或 Ruby Require 引用。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;两个项目放在两个 Git 中，将 Migration 放在一个项目中，另一个项目通过 database.yml 连接到数据库。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;三个项目放在三个 Git 中，将 Migration 放到一个 Gem 中。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;三个项目放在三个 Git 中，将 Migration 放到一个独立的 Git 中，两个项目通过 Git Submodule 引用。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;希望，有相关经验的高人，&lt;/strong&gt;
&lt;strong&gt;能够分享他们的解决方案，&lt;/strong&gt;
&lt;strong&gt;非常感谢！&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;相关资料&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://stackoverflow.com/questions/2690546/multiple-rails-app-single-mysql-database" rel="nofollow" target="_blank"&gt;http://stackoverflow.com/questions/2690546/multiple-rails-app-single-mysql-database&lt;/a&gt;
&lt;a href="http://stackoverflow.com/questions/2599920/multiple-applications-with-ruby-on-rails" rel="nofollow" target="_blank"&gt;http://stackoverflow.com/questions/2599920/multiple-applications-with-ruby-on-rails&lt;/a&gt;
&lt;a href="http://stackoverflow.com/questions/10802793/ruby-on-rails-multiple-applications-with-same-model-and-db" rel="nofollow" target="_blank"&gt;http://stackoverflow.com/questions/10802793/ruby-on-rails-multiple-applications-with-same-model-and-db&lt;/a&gt;&lt;/p&gt;</description>
      <author>ery</author>
      <pubDate>Sun, 18 Nov 2012 14:20:09 +0800</pubDate>
      <link>https://ruby-china.org/topics/6866</link>
      <guid>https://ruby-china.org/topics/6866</guid>
    </item>
    <item>
      <title>分享 编程的名言佳句</title>
      <description>&lt;p&gt;原文链接
&lt;a href="http://www.iteye.com/news/26243" rel="nofollow" target="_blank"&gt;http://www.iteye.com/news/26243&lt;/a&gt;
&lt;a href="http://ihower.tw/blog/archives/7046/" rel="nofollow" target="_blank"&gt;http://ihower.tw/blog/archives/7046/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;以下内容收集自一些优秀的技术书籍章节开头的名言佳句，非常有意思，直接或间接反映了软件开发中的一些事情。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;生命太短暂，不要去做一些根本没有人想要的东西。——Ash Maurya，Running Lean 作者&lt;/li&gt;
&lt;li&gt;如果你交给某人一个程序，你将折磨他一整天；如果你教某人如何编写程序，你将折磨他一辈子。——David Leinweber&lt;/li&gt;
&lt;li&gt;软件设计有两种方式：一种方式是，使软件过于简单，明显没有缺陷；另一种方式是，使软件过于复杂，没有明显的缺陷。——C.A.R. Hoare&lt;/li&gt;
&lt;li&gt;其实，我尝试着使 Ruby 更自然，而不是简单。Ruby 看起来很简单，但内部是非常复杂的，就像我们的身体一样。——松本行弘，Ruby 之父&lt;/li&gt;
&lt;li&gt;大部分情况下，构建程序的过程本质上是对规范调试的过程。——Fred Brooks，《人月神话》作者&lt;/li&gt;
&lt;li&gt;软件开发往往是这样：最开始的 90% 代码占用了开始的 90% 的开发时间；剩下 10% 代码同样需要 90% 的开发时间。——Tom Cargill&lt;/li&gt;
&lt;li&gt;当你试图解决一个你不理解的问题时，复杂化就产成了。——Andy Boothe&lt;/li&gt;
&lt;li&gt;用几个小时来制定计划，可以节省几周的编程时间。—— 匿名&lt;/li&gt;
&lt;li&gt;控制复杂性是计算机编程的本质。—— Brian Kernighan&lt;/li&gt;
&lt;li&gt;计算机科学领域的所有问题都可以通过其他方式间接解决。——David Wheeler&lt;/li&gt;
&lt;li&gt;编程是两队人马在竞争：软件工程师努力设计出最大最好的连白痴都会使用的程序；而宇宙在拼命制造最大最好的白痴。到目前为止，宇宙是胜利者。—— Rick Cook&lt;/li&gt;
&lt;li&gt;调试一个初次见到的代码比重写代码要困难两倍。因此，按照定义，如果你写代码非常巧妙，那么没有人足够聪明来调试它。—— Brian W. Kernighan&lt;/li&gt;
&lt;li&gt;我不是一个伟大的程序员，我只是一个具有良好习惯的优秀程序员。― Kent Beck&lt;/li&gt;
&lt;li&gt;你们中大多数人都熟悉程序员的美德，有三种：那就是懒惰、急躁和傲慢。– Larry Wall，Perl 語言发明人&lt;/li&gt;
&lt;li&gt;任何一个傻瓜都会写能够让机器理解的代码，只有好的程序员才能写出人类可以理解的代码。——Martin Fowler&lt;/li&gt;
&lt;li&gt;靠代码行数来衡量开发进度，就像是凭重量来衡量飞机制造的进度。——比尔•盖茨&lt;/li&gt;
&lt;li&gt;这不是一个 bug，这只是一个未列出来的特性。——匿名&lt;/li&gt;
&lt;li&gt;作为一个程序员，郁闷的事情是，面对一个代码块，却不敢去修改。更糟糕的是，这个代码块还是自己写的。—— Peyton Jones&lt;/li&gt;
&lt;li&gt;它在我的机器上可以很好运行！——大部分程序员&lt;/li&gt;
&lt;li&gt;能说算不上什么，有本事就把你的代码给我看看。——Linus Torvalds，Linux 之父&lt;/li&gt;
&lt;li&gt;我认为对象就像是生物学里的细胞，或者网络中的一台计算机，只能够通过消息来通信——Alan Kay，Smalltalk 的发明人，面向对象之父&lt;/li&gt;
&lt;li&gt;当你选择了一种语言，意味着你还选择了一组技术、一个社区。——Joshua Bloch&lt;/li&gt;
&lt;li&gt;质量、速度、廉价，选择其中两个。——匿名&lt;/li&gt;
&lt;li&gt;过早的优化是罪恶之源。——Donald Knuth&lt;/li&gt;
&lt;li&gt;没有什么代码的执行速度比空代码更快。——Merb 核心原则&lt;/li&gt;
&lt;li&gt;如果你是房间里最聪明的人，那么你走错房间了。——匿名&lt;/li&gt;
&lt;li&gt;如果只需更改一个单一的代码行，你的部门需要花费多长时间？——Mary Poppendieck&lt;/li&gt;
&lt;li&gt;九个人不能让一个孩子在一个月内出生。——Fred Brooks，《人月神话》作者&lt;/li&gt;
&lt;li&gt;好代码本身就是最好的文档。当你需要添加一个注释时，你应该考虑如何修改代码才能不需要注释。——Steve McConnell，Code Complete 作者&lt;/li&gt;
&lt;li&gt;一个人在教会电脑之前，别说他真正理解这个东西了。——Donald Knuth&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;BTW
在 ITEYE 的 RSS 中看到的文章，
没想到，原文竟然出自 文鈿的博客，呵呵。&lt;/p&gt;</description>
      <author>ery</author>
      <pubDate>Mon, 15 Oct 2012 21:20:22 +0800</pubDate>
      <link>https://ruby-china.org/topics/6081</link>
      <guid>https://ruby-china.org/topics/6081</guid>
    </item>
    <item>
      <title>请 18 岁以下的同学举个手 (年龄调查)</title>
      <description>&lt;p&gt;我今年 32 岁！&lt;/p&gt;

&lt;p&gt;刚才发现，坛子里面的一位同学，刚刚初中毕业。
我很兴奋，居然有这么年轻的程序员，
要知道，越早学习编程，爆发力越强。
我是 19 岁开始学习的编程，就是大学一年级的时候，
我认识的程序员，绝大多数都是这个年龄。&lt;/p&gt;

&lt;p&gt;我想做个调查，
有多少同学还在上中学的时候，
就开始学习编程？&lt;/p&gt;

&lt;p&gt;请 18 岁以下的同学 踊跃举手！谢谢！&lt;/p&gt;</description>
      <author>ery</author>
      <pubDate>Sun, 26 Aug 2012 04:48:40 +0800</pubDate>
      <link>https://ruby-china.org/topics/5162</link>
      <guid>https://ruby-china.org/topics/5162</guid>
    </item>
    <item>
      <title>说说我的开发工具 Sublime Text 2 和对 Vim 的研究</title>
      <description>&lt;p&gt;刚才看见&amp;lt;&amp;lt;为什么你们用 Vim 和 Textmate 而不用 IDE&amp;gt;&amp;gt;
&lt;a href="http://ruby-china.org/topics/622" rel="nofollow" target="_blank"&gt;http://ruby-china.org/topics/622&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;很惊讶，这个帖子还没有沉，
但是又想了想，当时这个帖子对自己的帮助。
觉得其实还是不沉的好，
因为这个社区，毕竟还有很多新人。
于是写了一些回复，发现写了很多，
于是想新建一个帖子吧，
说说我现在的开发工具-Sublime
以及那个 Vim。
我的系统是 Ubuntu 12.04。&lt;/p&gt;
&lt;h2 id="关于 Sublime（Sublime Text 2）"&gt;关于 Sublime（Sublime Text 2）&lt;/h2&gt;
&lt;p&gt;最近六个月，
我一直在用 Sublime 做 Rails 开发
我爱死 Sublime 啦，
Sublime 最让人满意的是，
速度极快，编码的时候，感觉非常的流畅。&lt;/p&gt;

&lt;p&gt;以下是 &lt;a href="/camel" class="user-mention" title="@camel"&gt;&lt;i&gt;@&lt;/i&gt;camel&lt;/a&gt; 曾经提到的四个问题：&lt;/p&gt;

&lt;p&gt;&lt;em&gt;1、代码自动完成&lt;/em&gt;
Sublime 的自动完成功能很不错，
而且支持 Snippet&lt;/p&gt;

&lt;p&gt;不过，没有大型 IDE 中的那种“函数名自动提示“的效果，
就是，变量名后面，输入个点，
就自动列出所有可以使用的函数。
对于，Ruby 这种动态语言，
想实现这种效果，开发成本太高了。
我不奢望啦。&lt;/p&gt;

&lt;p&gt;&lt;em&gt;2、查看源码&lt;/em&gt;
我用 CTags 实现查阅源码
Sublime 有 CTags 的插件
如果你之前和我一样，
没用过 CTags 的话，
那么先 google 一下 CTags 吧。&lt;/p&gt;

&lt;p&gt;&lt;em&gt;3、Debug&lt;/em&gt;
我不知道 Sublime 中，
如何做 Rails 或者 Ruby 的 debug。
但是我用 Pry 做 Debug（感谢&lt;a href="/gene_wu" class="user-mention" title="@gene_wu"&gt;&lt;i&gt;@&lt;/i&gt;gene_wu&lt;/a&gt;的推荐）
用 Pry 做 Debug 真的很爽&lt;/p&gt;

&lt;p&gt;&lt;em&gt;4、速度&lt;/em&gt;
Sublime 非常流畅&lt;/p&gt;

&lt;p&gt;以下是我常用的组件&lt;/p&gt;

&lt;p&gt;Package Control
Alignment
Simple Rails Navigator
Rails Related Files
CTags
Coffeescript
RubyTest&lt;/p&gt;
&lt;h2 id="关于 Vim"&gt;关于 Vim&lt;/h2&gt;
&lt;p&gt;我用 Vim 只有一年的时间，
我对 Vim 不是很熟悉，
只会一些最基本的用法，
而且主要是在 ssh 登录服务器的时候使用，
在桌面环境下，我用 Gedit，或者其他编辑器。&lt;/p&gt;

&lt;p&gt;我用了将近一个月的时间，
研究了一下，使用 Vim 进行开发 Rails。
我在 Vim 中安装了不少的组件，
我发现，
需要做太多的配置，
需要记住太多的快捷键，&lt;/p&gt;

&lt;p&gt;最后，
我在使用 Vim 开发 Rails 的时候，
依然感觉很吃力，依然不是很顺畅。&lt;/p&gt;

&lt;p&gt;由于，工作和时间的原因，
我决定，暂时不再投入大量的时间研究 Vim。
我决定，利用今后用琐碎的时间继续研究。&lt;/p&gt;

&lt;p&gt;最后，
我的结论是，
用 Vim 做为 Rails 的开发工具，
入门成本有点高，
要想达到熟练的程度，需要太多的时间。
我投了一个月，没达到理想效果。&lt;/p&gt;

&lt;p&gt;最后，
我又还是回到了 Sublime 中。
我很庆幸，Ubuntu 中有 Sublime。
稍后，有时间我一定会去买一个序列号。
我不希望 Sublime 的开发因为资金的原因停止。
目前我们的开发团队严重依赖 Sublime。&lt;/p&gt;

&lt;p&gt;所以，
我推荐大家使用 Sublime，
如果你觉得好，
那么我建议你也买个序列号。&lt;/p&gt;</description>
      <author>ery</author>
      <pubDate>Fri, 15 Jun 2012 03:42:27 +0800</pubDate>
      <link>https://ruby-china.org/topics/3822</link>
      <guid>https://ruby-china.org/topics/3822</guid>
    </item>
    <item>
      <title>Yaml 代码复用技巧</title>
      <description>&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;p&gt;昨天因为想复用国际化 i18n yml 中的一部分代码
于是 google 了一下 yaml 语法
发现 yaml 语法天生有'复用机制'
于是和大家分享一下&lt;/p&gt;
&lt;h2 id="代码1 等效于 代码2"&gt;代码 1 等效于 代码 2&lt;/h2&gt;&lt;h2 id="代码1"&gt;代码 1&lt;/h2&gt;&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;bill&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nl"&gt;&amp;amp;bill_share&lt;/span&gt;
  &lt;span class="na"&gt;number&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;  &lt;span class="s"&gt;编号&lt;/span&gt;
  &lt;span class="na"&gt;total&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;   &lt;span class="s"&gt;总额&lt;/span&gt;
  &lt;span class="na"&gt;deal_at&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;交易日期&lt;/span&gt;

&lt;span class="na"&gt;sale&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;*bill_share&lt;/span&gt;
&lt;span class="na"&gt;purchase&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;*bill_share&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="代码2"&gt;代码 2&lt;/h2&gt;&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;sale&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;number&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;  &lt;span class="s"&gt;编号&lt;/span&gt;
  &lt;span class="na"&gt;total&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;   &lt;span class="s"&gt;总额&lt;/span&gt;
  &lt;span class="na"&gt;deal_at&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;交易日期&lt;/span&gt;

&lt;span class="na"&gt;purchase&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;number&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;  &lt;span class="s"&gt;编号&lt;/span&gt;
  &lt;span class="na"&gt;total&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;   &lt;span class="s"&gt;总额&lt;/span&gt;
  &lt;span class="na"&gt;deal_at&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;交易日期&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="重点资料 Advanced components of YAML"&gt;重点资料 Advanced components of YAML&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/YAML" rel="nofollow" target="_blank"&gt;http://en.wikipedia.org/wiki/YAML&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# sequencer protocols for Laser eye surgery&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;step&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;  &lt;span class="nl"&gt;&amp;amp;id001&lt;/span&gt;                  &lt;span class="c1"&gt;# defines anchor label &amp;amp;id001&lt;/span&gt;
    &lt;span class="na"&gt;instrument&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;      &lt;span class="s"&gt;Lasik &lt;/span&gt;&lt;span class="m"&gt;2000&lt;/span&gt;
    &lt;span class="na"&gt;pulseEnergy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;     &lt;span class="m"&gt;5.4&lt;/span&gt;
    &lt;span class="na"&gt;pulseDuration&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;   &lt;span class="m"&gt;12&lt;/span&gt;
    &lt;span class="na"&gt;repetition&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;      &lt;span class="m"&gt;1000&lt;/span&gt;
    &lt;span class="na"&gt;spotSize&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;        &lt;span class="s"&gt;1mm&lt;/span&gt;

&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;step&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nl"&gt;&amp;amp;id002&lt;/span&gt;
    &lt;span class="na"&gt;instrument&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;      &lt;span class="s"&gt;Lasik &lt;/span&gt;&lt;span class="m"&gt;2000&lt;/span&gt;
    &lt;span class="na"&gt;pulseEnergy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;     &lt;span class="m"&gt;5.0&lt;/span&gt;
    &lt;span class="na"&gt;pulseDuration&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;   &lt;span class="m"&gt;10&lt;/span&gt;
    &lt;span class="na"&gt;repetition&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;      &lt;span class="m"&gt;500&lt;/span&gt;
    &lt;span class="na"&gt;spotSize&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;        &lt;span class="s"&gt;2mm&lt;/span&gt;

&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;step&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;*id001&lt;/span&gt;                   &lt;span class="c1"&gt;# refers to the first step (with anchor &amp;amp;id001)&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;step&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;*id002&lt;/span&gt;                   &lt;span class="c1"&gt;# refers to the second step&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;step&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;*id001&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;step&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;*id002&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="有关资料"&gt;有关资料&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/YAML" rel="nofollow" target="_blank"&gt;http://en.wikipedia.org/wiki/YAML&lt;/a&gt;
&lt;a href="http://www.yaml.org/refcard.html" rel="nofollow" target="_blank"&gt;http://www.yaml.org/refcard.html&lt;/a&gt;
&lt;a href="http://www.yaml.org/spec/1.2/spec.html" rel="nofollow" target="_blank"&gt;http://www.yaml.org/spec/1.2/spec.html&lt;/a&gt;&lt;/p&gt;</description>
      <author>ery</author>
      <pubDate>Sun, 03 Jun 2012 17:57:30 +0800</pubDate>
      <link>https://ruby-china.org/topics/3637</link>
      <guid>https://ruby-china.org/topics/3637</guid>
    </item>
    <item>
      <title>如何知道 新的 gem 已经同步到 ruby.taobao.org 上啦？</title>
      <description>&lt;h2 id="我的问题"&gt;我的问题&lt;/h2&gt;
&lt;p&gt;当我发布一个 新的 gem 到 rubygems.org 上以后，
如何知道 新的 gem 已经同步到 ruby.taobao.org 上啦？&lt;/p&gt;
&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;p&gt;我知道 ruby.taobao.org“同步频率目前为 30 分钟一次”。&lt;/p&gt;
&lt;h2 id="目前我能想到的方案如下："&gt;目前我能想到的方案如下：&lt;/h2&gt;
&lt;p&gt;方案 1 &lt;code&gt;bundle install&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;查看安装是否成功&lt;/p&gt;

&lt;p&gt;前提是 Gemfile 里面依赖 新的 gem&lt;/p&gt;

&lt;p&gt;方案 2 &lt;code&gt;gem list -r new_gem_name&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;查看显示结果中是否有 new_gem_name&lt;/p&gt;

&lt;p&gt;前提是 需要先做以下设置&lt;/p&gt;

&lt;p&gt;$ gem sources --remove &lt;a href="http://rubygems.org/" rel="nofollow" target="_blank"&gt;http://rubygems.org/&lt;/a&gt;
    $ gem sources -a &lt;a href="http://ruby.taobao.org/" rel="nofollow" target="_blank"&gt;http://ruby.taobao.org/&lt;/a&gt;
    $ gem sources -l&lt;/p&gt;

&lt;p&gt;*** CURRENT SOURCES ***
    &lt;a href="http://ruby.taobao.org" rel="nofollow" target="_blank"&gt;http://ruby.taobao.org&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;请确保只有 ruby.taobao.org&lt;/p&gt;
&lt;h2 id="我期望有更简单的方法"&gt;我期望有更简单的方法&lt;/h2&gt;
&lt;p&gt;比如，有个网站，我上去查找一下，新的 gem 名称，
就能知道是否已经同步到 ruby.taobao.org。&lt;/p&gt;

&lt;p&gt;或者，有一个命令 我执行一下，
就能知道是否已经同步到 ruby.taobao.org。&lt;/p&gt;</description>
      <author>ery</author>
      <pubDate>Sat, 12 May 2012 20:22:49 +0800</pubDate>
      <link>https://ruby-china.org/topics/3238</link>
      <guid>https://ruby-china.org/topics/3238</guid>
    </item>
    <item>
      <title>我觉得《501 程序员宣言》挺有意思</title>
      <description>&lt;p&gt;这里是中文版 &lt;a href="http://www.iteye.com/news/25024" rel="nofollow" target="_blank"&gt;http://www.iteye.com/news/25024&lt;/a&gt;
这里是英文版 &lt;a href="http://501manifesto.org/" rel="nofollow" target="_blank"&gt;http://501manifesto.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;《501 程序员宣言》写道
我们是程序员。我们以我们的工作为荣，但不允许生活被其完全左右。 &lt;/p&gt;

&lt;p&gt;基于此，我们非常自豪的宣布，我们认为： &lt;/p&gt;

&lt;p&gt;家庭比老板的生意更重要。
    业余时间比公司提供的免费零食更重要。
    过自己的生活比辛苦维护个人品牌更重要。
    有计划和连续不断的工作节奏比个人超常的能力更重要。
    花时间自己去购物比耗费心思得到微软的免费 T 恤更重要。
    和挚友打球比和上司打球更重要。
    不拖团队后腿比成为业界大牛更重要。&lt;/p&gt;

&lt;p&gt;在以上所列内容中，我们把前者看的更重要。对于后者，我们不屑一顾。 &lt;/p&gt;

&lt;p&gt;但如果你： &lt;/p&gt;

&lt;p&gt;写技术博客。
    参与开源项目的开发。
    在业余时间参加技术交流活动。
    几乎只读和编程与开发效率有关的书籍。
    在 GitHub 上有自己的托管项目。
    许下诺言始终做到最好，或者让别人深信这一点。
    ……&lt;/p&gt;

&lt;p&gt;我们会因此而尊重你。以上内容或许并不全面，但列出的这些，说实话，它们几乎都是值得尊重的。 &lt;/p&gt;

&lt;p&gt;而从这些内容中，我们也意识到你将把事业深深地融入到你的生活中，这些努力会让你不可避免的会成为我们的上司。对于这一点，我们为你感到高兴。 &lt;/p&gt;

&lt;p&gt;但反过来，你也必须意识到，事业的成功是和你是否尊重我们，包括对我们作为专业人士并有享受多姿多彩的生活权利的尊重，是息息相关的。选择尊重这些，我们将一起创造美好的未来；而如果选择否定这些，一切成功的梦想都将只是梦想。而这一切，将取决于你的选择。 &lt;/p&gt;

&lt;p&gt;虽然对于我们来说这只是一份工作，但我们依然做到最好。&lt;/p&gt;</description>
      <author>ery</author>
      <pubDate>Fri, 11 May 2012 01:24:58 +0800</pubDate>
      <link>https://ruby-china.org/topics/3209</link>
      <guid>https://ruby-china.org/topics/3209</guid>
    </item>
  </channel>
</rss>
