<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>bydmm (三月的狮子)</title>
    <link>https://ruby-china.org/bydmm</link>
    <description>财务自由 0/1</description>
    <language>en-us</language>
    <item>
      <title>[开源项目] 二次元虚拟股市</title>
      <description>&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2018/2dd35e41-8177-4095-bdb8-56bece9d9438.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.yuanlimm.com/#/" rel="nofollow" target="_blank" title=""&gt;援力满满 - 二次元虚拟人物交易所&lt;/a&gt;是一个用市值来表示二次元人物人气高低的虚拟股市。&lt;/p&gt;

&lt;p&gt;除此之外，本项目还引入了独特的机制，那就是区块链的工作证明机制（PoW)。简单地说，就是爱她就为她充电（挖矿）。&lt;/p&gt;
&lt;h2 id="源码地址地址"&gt;源码地址地址&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/bydmm/yuanlimm" rel="nofollow" target="_blank"&gt;https://github.com/bydmm/yuanlimm&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="架构"&gt;架构&lt;/h2&gt;
&lt;p&gt;后端服务和任务队列：Rails 5.2 + Sidekiq + Mysql 5.7 + Redis 4.0&lt;/p&gt;

&lt;p&gt;前端网页：Vue + Element&lt;/p&gt;

&lt;p&gt;本地挖矿软件：Go&lt;/p&gt;

&lt;p&gt;服务器挖矿验证接口：Go&lt;/p&gt;
&lt;h2 id="代码看点"&gt;代码看点&lt;/h2&gt;
&lt;p&gt;使用 Rails+Sidekiq 实现了简单的交易撮合系统，系统每分钟启动一次撮合进程撮合交易。&lt;/p&gt;

&lt;p&gt;阿里云开放搜索和极限验证都没有提供 Ruby SDK，本项目简单的实现了开放搜索和极限验证的 API。如果需要用 Rails 调用这两个服务可以参考本项目。&lt;/p&gt;

&lt;p&gt;PS:&lt;/p&gt;

&lt;p&gt;关于这个项目有趣的详情： &lt;a href="https://zhuanlan.zhihu.com/p/38004230" rel="nofollow" target="_blank" title=""&gt;区块链技术在二次元落地的一次大胆尝试&lt;/a&gt;&lt;/p&gt;</description>
      <author>bydmm</author>
      <pubDate>Wed, 11 Jul 2018 17:45:16 +0800</pubDate>
      <link>https://ruby-china.org/topics/37137</link>
      <guid>https://ruby-china.org/topics/37137</guid>
    </item>
    <item>
      <title>持续集成的简单实现</title>
      <description>&lt;p&gt;&lt;a href="https://iqing-dev.gitbooks.io/easy-ci-cd/" rel="nofollow" target="_blank"&gt;https://iqing-dev.gitbooks.io/easy-ci-cd/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;全自动的 CI(持续集成) + CD(持续交付) 是许多公司所追求的目标。
轻文轻小说技术团队在实际的工作中发现一种比较便捷的去实践 CI+CD 的方法，特此分享。
此方法只依赖阿里云容器服务 (Docker) 和 Gitlab CI。涉及到的开发和上线流程都高度可定制且不限定于某种特定的语言。
对于使用阿里云容器服务之外的持续交付流程，本书的内容也可以提供一些参考。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;2017 年 武汉空文网络科技有限公司出品&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src="https://iqing-dev.gitbooks.io/easy-ci-cd/content/images/1.png" title="" alt=""&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="#feature-branch" title=""&gt;在任务分支上开发代码&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#merge-request" title=""&gt;通过 Merge Request，申请合并&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#gitlab-runner" title=""&gt;通过对 Gitlab CI 的配置，Merge Request 会触发 Gitlab Runner 去跑自动化任务&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#gitlab-runner-executors" title=""&gt;Gitlab Runner 启动指定的测试专用 Docker 去运行自动化测试&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#merge-master" title=""&gt;测试通过之后，将代码合并到 master 分支&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#docker-build" title=""&gt;阿里云容器仓库服务会检测到 master 分支的变更，开始构建新的 docker 镜像&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#docker-deploy" title=""&gt;阿里云容器服务会检测到 docker 镜像的变更，然后自动部署&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;span id="feature-branch"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="1. 在任务分支上开发代码"&gt;1. 在任务分支上开发代码&lt;/h2&gt;
&lt;p&gt;最基本的分支管理方案就是不要直接在主分支上做开发。那么从最基本的分支管理策略入手，在任务分支上先进行代码开发。&lt;/p&gt;

&lt;p&gt;&lt;span id="merge-request"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="2. 通过Merge Request，任务分支申请合并Master"&gt;2. 通过 Merge Request，任务分支申请合并 Master&lt;/h2&gt;
&lt;p&gt;Merge Request 是 gitlab 的术语，类似于 Github 的 Pull Request。&lt;/p&gt;

&lt;p&gt;Merge Request 是两个分支的一次预合并，Gitlab CI 可以对这个预合并后的代码进行测试，测试完成之后才允许合并到 Master。&lt;/p&gt;

&lt;p&gt;这样就可以对 Master 分支进行保护，确保每次合并进来的代码满足预设的一系列条件。&lt;/p&gt;

&lt;p&gt;&lt;span id="gitlab-runner"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="3. 通过对Gitlab CI的配置，Merge Request会触发Gitlab Runner去跑自动化测试"&gt;3. 通过对 Gitlab CI 的配置，Merge Request 会触发 Gitlab Runner 去跑自动化测试&lt;/h2&gt;
&lt;p&gt;Merge Request 产生之后，会产生一个任务。Gitlab Runner 接收到任务后就会去处理。&lt;/p&gt;

&lt;p&gt;但是 Gitlab Runner 在这里只是起一个调度的作用，接收到请求后会呼叫 Executor（执行者）去真正的执行编写的自动化任务。&lt;/p&gt;

&lt;p&gt;&lt;span id="gitlab-runner-executors"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="4. Gitlab Runner启动指定的测试专用Docker去运行自动化测试"&gt;4. Gitlab Runner 启动指定的测试专用 Docker 去运行自动化测试&lt;/h2&gt;
&lt;p&gt;可以跑 Gitlab 自动化测试的的 Executor 有很多种，这里我们选择了用 Docker 作为 Executor 去跑自动化测试。&lt;/p&gt;

&lt;p&gt;运行自动化测试用的 Docker 镜像是可以根据需求自行构建的。启动测试的时候启动这个镜像，跑完之后直接释放掉这个镜像。&lt;/p&gt;

&lt;p&gt;这样每次测试的时候都是全新的干净的测试环境。特别当后面的运行环境也跑在 Docker 之内的时候，接近于真实环境的测试更具有优势。&lt;/p&gt;

&lt;p&gt;自动化测试不限于单纯的测试，根据需要还可以加上代码风格审查这样的环节。&lt;/p&gt;

&lt;p&gt;&lt;span id="merge-master"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="5. 测试通过之后，将代码合并到Master分支"&gt;5. 测试通过之后，将代码合并到 Master 分支&lt;/h2&gt;
&lt;p&gt;Merge Request 会显示出自动化测试的结果，如果自动化测试通过的话，可以把代码合并到 Master 分支了。&lt;/p&gt;

&lt;p&gt;&lt;span id="docker-build"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="6. 阿里云容器仓库服务会检测到Master分支的变更，开始构建新的Docker镜像"&gt;6. 阿里云容器仓库服务会检测到 Master 分支的变更，开始构建新的 Docker 镜像&lt;/h2&gt;
&lt;p&gt;通过比较简单的配置，阿里云容器仓库服务就可以和私有 Gitlab 整合，从指定仓库的 Master 分支获取代码，然后构建出镜像。&lt;/p&gt;

&lt;p&gt;&lt;span id="docker-deploy"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="7. 阿里云容器服务会检测到docker镜像的变更，然后自动部署"&gt;7. 阿里云容器服务会检测到 docker 镜像的变更，然后自动部署&lt;/h2&gt;
&lt;p&gt;通过比较简单的配置，容器仓库服务在构建完成之后就会触发容器服务的钩子，然后镜像之内的新代码就会有序更新到生产环境中去了。&lt;/p&gt;</description>
      <author>bydmm</author>
      <pubDate>Wed, 06 Sep 2017 18:26:41 +0800</pubDate>
      <link>https://ruby-china.org/topics/34042</link>
      <guid>https://ruby-china.org/topics/34042</guid>
    </item>
    <item>
      <title>用 Ruby 写的开源文字游戏《创业者的游戏： 中关村启示录》，欢迎群众演员！</title>
      <description>&lt;p&gt;首先放上项目地址，欢迎各种姿势的围观&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/bydmm/Startup-Game" rel="nofollow" target="_blank"&gt;https://github.com/bydmm/Startup-Game&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;想不想在一款游戏中出镜？&lt;/strong&gt; 你只需要实现&lt;strong&gt;一个 class&lt;/strong&gt;描述自己的行为就行了~&lt;/p&gt;

&lt;p&gt;如果你一直听说过但是找不到机会&lt;strong&gt;学习 Ruby&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;如果你老早就听闻 Github 上有很多开源项目，又怕捣乱而不敢贡献代码。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;也许这就是一次绝赞的机会。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;现在已经有 6 名程序员把自己贡献出来了，&lt;/p&gt;

&lt;p&gt;还有 8 名程序员因为思考到底怎么用代码描述子而想破脑壳&lt;/p&gt;

&lt;p&gt;（像不像一部科幻电影，用代码描述自己而实现永生？）&lt;/p&gt;

&lt;p&gt;本项目欢迎捣蛋，欢迎围观，更欢迎提交代码。&lt;/p&gt;</description>
      <author>bydmm</author>
      <pubDate>Sat, 25 Apr 2015 17:58:23 +0800</pubDate>
      <link>https://ruby-china.org/topics/25313</link>
      <guid>https://ruby-china.org/topics/25313</guid>
    </item>
    <item>
      <title>我想搞一个开源项目:   一个私有的密码盒子，在手机上记录复杂的账号密码</title>
      <description>&lt;p&gt;根据我的技术栈，语言使用 OC&lt;/p&gt;

&lt;p&gt;功能无非是在手机里储存你的账号密码，但是仅仅本地保存，不同步，不上传。&lt;/p&gt;

&lt;p&gt;然后用 TouchID 进入应用。&lt;/p&gt;

&lt;p&gt;然后将软件开源放在 github 里，自行编译修改和使用。&lt;/p&gt;

&lt;p&gt;主要原因是，我现在的常用密码早已经被社工库记下了，逼迫我使用我不常用的复杂的密码，然后我也老忘。有时候我玩网游开的小号也老忘记我用的什么账号和密码。&lt;/p&gt;</description>
      <author>bydmm</author>
      <pubDate>Mon, 05 Jan 2015 11:50:16 +0800</pubDate>
      <link>https://ruby-china.org/topics/23548</link>
      <guid>https://ruby-china.org/topics/23548</guid>
    </item>
    <item>
      <title>[武汉] 光谷外资企业 招 ROR 开发人员 (工作氛围轻松愉快)</title>
      <description>&lt;h2 id="我们是 PathSource.com"&gt;我们是 &lt;a href="http://www.pathsource.com" rel="nofollow" target="_blank" title=""&gt;PathSource.com&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;我们的产品已经为众多美国 K12 的学校提供职业教育的服务。我们公司的总部在美国硅谷，美国总部包括编辑团队，销售团队，客户关系团队。公司的产品研发团队设在武汉光谷。如果你加入我们公司，你将使用 ROR/COMPASS-SCSS/COFFEE 等语言，以及 Git/Codeclimate/Basecamp 等工具管理项目，最后公司的项目部署在 Heroku 之上。你将会体验到紧跟硅谷技术潮流的开发体验。&lt;/p&gt;
&lt;h2 id="职位描述："&gt;职位描述：&lt;/h2&gt;
&lt;p&gt;我们正在寻找经验丰富，充满激情的 Ruby on Rails 开发人员加入我们在中国的开发团队。这支团队将提供程序开发和技术支持，包括设计和开发一个高度可扩展的网站和增加许多新的令人兴奋的功能。&lt;/p&gt;
&lt;h2 id="任职资格:"&gt;任职资格：&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;你是一个真正的开发工程师，而不仅仅只是一个系统管理员。&lt;/li&gt;
&lt;li&gt;你在 Ruby on Rails，单元测试和自动化集成方面有丰富的经验。（在网络媒体交付基础架构方面有丰富开发经验者优先）&lt;/li&gt;
&lt;li&gt;你在 JavaScript/HTML/CSS 和跨浏览器的兼容性问题方面有丰富的开发经验。&lt;/li&gt;
&lt;li&gt;你在 Linux, AWS (S3/EC2), Heroku 和基于云计算技术方面有相关的工作经验。&lt;/li&gt;
&lt;li&gt;你在代码方面追求干净和清洁，追求完美。&lt;/li&gt;
&lt;li&gt;你有一年以上的实际工作经验。（在 RoR 编程与开发方面有经验者优先）&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;性格开朗，能融入我们好玩的团队。&lt;/li&gt;
&lt;li&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;健康福利 (五险一金)。&lt;/li&gt;
&lt;li&gt;节假日薪酬。&lt;/li&gt;
&lt;li&gt;奖励津贴和礼物（根据公司及个人表现）。&lt;/li&gt;
&lt;li&gt;年终奖金。&lt;/li&gt;
&lt;li&gt;不定期组织旅游（8 月底去普吉岛潜水了，简直不能更棒）。&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;h2 id="联系方式"&gt;联系方式&lt;/h2&gt;
&lt;p&gt;有意者请将简历投至：hr@pathsource .com&lt;/p&gt;
&lt;h2 id="吃烤全羊"&gt;吃烤全羊&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2014/981d6967aae996662ee2436683cc1d9f.jpg" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="年度旅行去普吉岛潜水以及off-site "&gt;年度旅行去普吉岛潜水以及 off-site "working"! :)&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2014/4d843f71889c72cd9917ae1b82aa10ef.jpg" title="" alt=""&gt;
&lt;img src="https://l.ruby-china.com/photo/2014/e831da9eb01fd11558c7c5935229ecfb.jpg" title="" alt=""&gt;
&lt;img src="https://l.ruby-china.com/photo/2014/92a90e1503fbda012b04240dc2ce1949.jpg" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="成为下一个他？"&gt;成为下一个他？&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2014/a3ac02fc4785bc3ad6c9a42034fd0d2c.jpg" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>bydmm</author>
      <pubDate>Sat, 27 Sep 2014 16:55:27 +0800</pubDate>
      <link>https://ruby-china.org/topics/21747</link>
      <guid>https://ruby-china.org/topics/21747</guid>
    </item>
    <item>
      <title>[武汉] 道源科技招聘 Rails 开发工程师</title>
      <description>&lt;p&gt;我们是&lt;/p&gt;

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

&lt;p&gt;我们的产品已经为众多美国 K12 的学校提供职业教育的服务。我们公司的总部在美国硅谷，美国总部包括编辑团队，销售团队，客户关系团队。公司的产品研发团队设在武汉光谷。如果你加入我们公司，你将使用 ROR/COMPASS-SCSS/COFFEE 等语言，以及 Git/Codeclimate/Basecamp 等工具管理项目，最后公司的项目部署在 Heroku 之上。你将会体验到紧跟硅谷技术潮流的开发体验。&lt;/p&gt;
&lt;h2 id="职位描述："&gt;职位描述：&lt;/h2&gt;
&lt;p&gt;我们正在寻找经验丰富，充满激情的 Ruby on Rails 开发人员加入我们在中国的开发团队。这支团队将提供程序开发和技术支持，包括设计和开发一个高度可扩展的网站和增加许多新的令人兴奋的功能。&lt;/p&gt;
&lt;h2 id="任职资格:"&gt;任职资格：&lt;/h2&gt;
&lt;p&gt;你是一个真正的开发工程师，而不仅仅只是一个系统管理员。
你在 Ruby on Rails，单元测试和自动化集成方面有丰富的经验。（在网络媒体交付基础架构方面有丰富开发经验者优先）
你在 JavaScript/HTML/CSS 和跨浏览器的兼容性问题方面有丰富的开发经验。
你在 Linux, AWS (S3/EC2), Heroku 和基于云计算技术方面有相关的工作经验。
你在代码方面追求干净和清洁，追求完美。
你有一年以上的实际工作经验。（在 RoR 编程与开发方面有经验者优先）&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;零食饮料任吃。
具有竞争力的工资。
灵活的工作时间。
健康福利 (五险一金)。
节假日薪酬。
奖励津贴和礼物（根据公司及个人表现）。
年终奖金。
不定期组织旅游（8 月底马上要去普吉岛了，你懂的）。
其他…(我们将暂时将其作为惊喜)。
公司地址&lt;/p&gt;

&lt;p&gt;武汉光谷转盘&lt;/p&gt;

&lt;p&gt;联系方式&lt;/p&gt;

&lt;p&gt;有意者请将简历投至：hr@pathsource .com&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2014/d7b4349d64746c417afa410ee0a90592.jpg" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;BTW 我们这还有最年轻的 rubyist 哦，想来挑战他吗！？&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2014/ea4f3f480366841d88588a1931ec4d5e.jpg" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>bydmm</author>
      <pubDate>Thu, 31 Jul 2014 10:50:32 +0800</pubDate>
      <link>https://ruby-china.org/topics/20770</link>
      <guid>https://ruby-china.org/topics/20770</guid>
    </item>
    <item>
      <title>Form Object 的 �Validate 在并发时候的有一坑</title>
      <description>&lt;p&gt;前置知识：
Form Object
&lt;a href="http://railscasts.com/episodes/416-form-objects" rel="nofollow" target="_blank"&gt;http://railscasts.com/episodes/416-form-objects&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Form Object 在创建表单的时候特别好使，在不同的业务的时候对同一个 model 的处理和验证可能都不同，这时候逻辑无论是写在 model 层或 controller 层都不太好使。这时候 Form Object 就横空出世了。&lt;/p&gt;

&lt;p&gt;但是我们在使用 Form Object 的时候也遇到了一个坑。&lt;/p&gt;
&lt;h2 id="那就是Form Object在并发的时候验证有问题。"&gt;那就是 Form Object 在并发的时候验证有问题。&lt;/h2&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SignUpForm&lt;/span&gt;
  &lt;span class="n"&gt;validate&lt;/span&gt; &lt;span class="ss"&gt;:uniqueness_of_email&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;submit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&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;attributes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:first_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:last_name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;valid?&lt;/span&gt;
      &lt;span class="n"&gt;run_callbacks&lt;/span&gt; &lt;span class="ss"&gt;:save&lt;/span&gt; &lt;span class="k"&gt;do&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;save!&lt;/span&gt;
      &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="kp"&gt;private&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;uniqueness_of_email&lt;/span&gt;
    &lt;span class="n"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Email is already in use'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;unless&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find_by&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;email: &lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;nil?&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当用户在注册表单上连点两次提交的话就会挂在 &lt;code&gt;user.save!&lt;/code&gt; 上。
原因是 User 这个 model 内为了保证数据完整性也加了一个 &lt;code&gt;validates :email, uniqueness: true&lt;/code&gt;
当用户连点两次提交，两次提交会进入两个不同的进程，两个进程都会通过 Form Object 下的验证，
幸好 Model 层有事务的保护，最后一次提交会失败，保证了数据的完整。&lt;/p&gt;

&lt;p&gt;现在已经在提交按钮上添加了 &lt;code&gt;disable_with: 'saving'&lt;/code&gt; 使用户不能点两次提交，从前端解决这个问题。
但是这暴露了非事务的 Form Object 在并发下验证的脆弱。&lt;/p&gt;

&lt;p&gt;对此，同事的建议是使用 &lt;a href="http://www.ruby-doc.org/core-2.1.2/Mutex.html" rel="nofollow" target="_blank"&gt;http://www.ruby-doc.org/core-2.1.2/Mutex.html&lt;/a&gt; 让保存这件事只能单线程执行。&lt;/p&gt;</description>
      <author>bydmm</author>
      <pubDate>Mon, 07 Jul 2014 15:40:47 +0800</pubDate>
      <link>https://ruby-china.org/topics/20353</link>
      <guid>https://ruby-china.org/topics/20353</guid>
    </item>
    <item>
      <title>Ubuntu 在境内安装 Ruby + Rails 的方法</title>
      <description>&lt;p&gt;第一步，安装 RVM&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sSL&lt;/span&gt; https://get.rvm.io | bash &lt;span class="nt"&gt;-s&lt;/span&gt; stable
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;第二步，修改源到 Taobao 源&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'s!cache.ruby-lang.org/pub/ruby!ruby.taobao.org/mirrors/ruby!'&lt;/span&gt; &lt;span class="nv"&gt;$rvm_path&lt;/span&gt;/config/db
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;第三步，安装 ruby&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rvm &lt;span class="nb"&gt;install &lt;/span&gt;2.0.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;第四步，修改 gem 源到 taobao&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gem sources &lt;span class="nt"&gt;--remove&lt;/span&gt; https://rubygems.org/
gem sources &lt;span class="nt"&gt;-a&lt;/span&gt; http://ruby.taobao.org/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;第五步，安装 rails&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gem &lt;span class="nb"&gt;install &lt;/span&gt;rails
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>bydmm</author>
      <pubDate>Thu, 03 Jul 2014 17:28:48 +0800</pubDate>
      <link>https://ruby-china.org/topics/20301</link>
      <guid>https://ruby-china.org/topics/20301</guid>
    </item>
    <item>
      <title>史上最小的 Rubyist</title>
      <description>&lt;p&gt;&lt;img src="http://pathsource.github.io/images/4.jpg" title="" alt="The youngest rubyist in histroy."&gt;&lt;/p&gt;

&lt;p&gt;摘录于我司博客。
&lt;a href="http://pathsource.github.io/jekyll/update/2014/06/12/joyce-birthday/" rel="nofollow" target="_blank"&gt;http://pathsource.github.io/jekyll/update/2014/06/12/joyce-birthday/&lt;/a&gt;&lt;/p&gt;</description>
      <author>bydmm</author>
      <pubDate>Thu, 12 Jun 2014 19:56:53 +0800</pubDate>
      <link>https://ruby-china.org/topics/19909</link>
      <guid>https://ruby-china.org/topics/19909</guid>
    </item>
    <item>
      <title>'APIController' is not a supported controller name</title>
      <description>&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;resources&lt;/span&gt; &lt;span class="ss"&gt;:api&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;controller: &lt;/span&gt;&lt;span class="s1"&gt;'APIController'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以上的 APIController 由于有多个大写字母 就报错了，
但是我又不能忍受 ApiController 这么傻的名字，因为 API 本来就是缩写了。
怎么办？&lt;/p&gt;</description>
      <author>bydmm</author>
      <pubDate>Wed, 14 May 2014 12:21:11 +0800</pubDate>
      <link>https://ruby-china.org/topics/19242</link>
      <guid>https://ruby-china.org/topics/19242</guid>
    </item>
    <item>
      <title>当你用上了 codeclimate 和 RuboCop，重构根本停不下来</title>
      <description>&lt;p&gt;&lt;a href="http://www.codeclimate.com" rel="nofollow" target="_blank" title=""&gt;www.codeclimate.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/bbatsov/rubocop" rel="nofollow" target="_blank"&gt;https://github.com/bbatsov/rubocop&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;以上两个都是提升代码质量的工具。&lt;/p&gt;

&lt;p&gt;特别是你装上了 rubocop 的 Sublime 插件，每个错误的实践都会被标上明亮的白条。很快你就开始不断地重构了。&lt;/p&gt;

&lt;p&gt;今天不自知的就把以前的项目&lt;a href="https://github.com/bydmm/vpncloud-helper" rel="nofollow" target="_blank"&gt;https://github.com/bydmm/vpncloud-helper&lt;/a&gt; 给重构了。
然后在 Readme 挂上 codeclimate 4.0 的标签。（你够&lt;/p&gt;

&lt;p&gt;重构，简直停不下来。&lt;/p&gt;</description>
      <author>bydmm</author>
      <pubDate>Fri, 09 May 2014 11:35:43 +0800</pubDate>
      <link>https://ruby-china.org/topics/19121</link>
      <guid>https://ruby-china.org/topics/19121</guid>
    </item>
    <item>
      <title>[武汉] 道源科技招聘 Rails 开发工程师</title>
      <description>&lt;h2 id="我们是"&gt;我们是&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://www.pathsource.com" rel="nofollow" target="_blank" title=""&gt;www.pathsource.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;我们的产品已经为众多美国 K12 的学校提供职业教育的服务。
我们公司的总部在美国硅谷，美国总部包括编辑团队，销售团队，客户关系团队。
公司的产品研发团队设在武汉光谷。
如果你加入我们公司，你将使用 ROR/COMPASS-SCSS/COFFEE 等语言，以及 Git/Codeclimate/Basecamp 等工具管理项目，最后公司的项目部署在 Heroku 之上。你将会体验到紧跟硅谷技术潮流的开发体验。&lt;/p&gt;
&lt;h2 id="职位描述："&gt;职位描述：&lt;/h2&gt;
&lt;p&gt;我们正在寻找经验丰富，充满激情的 Ruby on Rails 开发人员加入我们在中国的开发团队。这支团队将提供程序开发和技术支持，包括设计和开发一个高度可扩展的网站和增加许多新的令人兴奋的功能。&lt;/p&gt;
&lt;h2 id="任职资格:"&gt;任职资格：&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;你是一个真正的开发工程师，而不仅仅只是一个系统管理员&lt;/li&gt;
&lt;li&gt;你在 Ruby on Rails，单元测试和自动化集成方面有丰富的经验。在网络媒体交付基础架构方面有丰富开发经验者优先&lt;/li&gt;
&lt;li&gt;你在 JavaScript/HTML/CSS 和跨浏览器的兼容性问题方面有丰富的开发经验&lt;/li&gt;
&lt;li&gt;你在 Linux, AWS (S3/EC2), Heroku 和基于云计算技术方面有相关的工作经验&lt;/li&gt;
&lt;li&gt;你在代码方面追求干净和清洁，追求完美&lt;/li&gt;
&lt;li&gt;你有一年以上的实际工作经验&lt;/li&gt;
&lt;li&gt;在 RoR 编程与开发方面有经验者优先&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;性格开朗，能融入我们好玩的团队&lt;/li&gt;
&lt;li&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;健康福利 (五险一金)&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;/ul&gt;
&lt;h2 id="公司地址"&gt;公司地址&lt;/h2&gt;
&lt;p&gt;武汉光谷鲁磨路&lt;/p&gt;
&lt;h2 id="联系方式"&gt;联系方式&lt;/h2&gt;
&lt;p&gt;有意者请将简历投至：hr@pathsource.com&lt;/p&gt;
&lt;h2 id="其他"&gt;其他&lt;/h2&gt;
&lt;p&gt;我们同时也招聘 IOS 开发工程师，如果你认为你有足够的能力，也请投递到以上的邮箱&lt;/p&gt;</description>
      <author>bydmm</author>
      <pubDate>Wed, 07 May 2014 15:41:34 +0800</pubDate>
      <link>https://ruby-china.org/topics/19075</link>
      <guid>https://ruby-china.org/topics/19075</guid>
    </item>
    <item>
      <title>关于 sprockets 中的 require 和 scss 中 @import 的一些疑问。</title>
      <description>&lt;p&gt;在 rails 中用 sprockets 的 require 做 css 连接合并压缩是肯定没有问题了，但是解决不了共享 SCSS 中 mixin 的问题。
用 sprockets 的 require 的话，前端代码的结构就容易变的混乱，并且要用到共享的 mixin 的话，所有 scss 文件的前面都要&lt;a href="/import" class="user-mention" title="@import"&gt;&lt;i&gt;@&lt;/i&gt;import&lt;/a&gt; "common/mixin"。&lt;/p&gt;

&lt;p&gt;我听说 scss 的&lt;a href="/import" class="user-mention" title="@import"&gt;&lt;i&gt;@&lt;/i&gt;import&lt;/a&gt;其实可以替代 sprockets 的 require，因为 scss 的&lt;a href="/import" class="user-mention" title="@import"&gt;&lt;i&gt;@&lt;/i&gt;import&lt;/a&gt;可以把多个文件连接起来变成一个文件，就如同 require 一样。&lt;/p&gt;

&lt;p&gt;但是我所知的 CSS 中的&lt;a href="/import" class="user-mention" title="@import"&gt;&lt;i&gt;@&lt;/i&gt;import&lt;/a&gt;操作实际上是在客户端游览器要重新请求一次文件，和 require 的连接压缩完全不同。&lt;/p&gt;

&lt;p&gt;我想知道 require 和 scss 的&lt;a href="/import" class="user-mention" title="@import"&gt;&lt;i&gt;@&lt;/i&gt;import&lt;/a&gt;到底是一个什么情况。&lt;/p&gt;

&lt;p&gt;大家是什么前端架构，是怎么组织以及怎么合并 CSS 代码的。&lt;/p&gt;</description>
      <author>bydmm</author>
      <pubDate>Mon, 21 Apr 2014 12:07:22 +0800</pubDate>
      <link>https://ruby-china.org/topics/18745</link>
      <guid>https://ruby-china.org/topics/18745</guid>
    </item>
    <item>
      <title>请问 :remote =&gt; true 的链接在用户新开标签页这种操作后出错的处理</title>
      <description>&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;%= link_to some_path, :remote =&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt; &lt;span class="sx"&gt;%&amp;gt;
&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;respond_to&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="c1"&gt;#format.html &amp;lt;- 就是他&lt;/span&gt;
  &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;js&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;很多时候，类似 share, publish 之类的操作是不可能有对应的 html。
当用户访问到这里的 format.html 的就会出现 500 错误。
一般大家是怎么处理这种问题的。
我的一个思路是，当用户访问到这种位置的时候直接跳转到首页。&lt;/p&gt;</description>
      <author>bydmm</author>
      <pubDate>Thu, 10 Apr 2014 14:42:48 +0800</pubDate>
      <link>https://ruby-china.org/topics/18519</link>
      <guid>https://ruby-china.org/topics/18519</guid>
    </item>
    <item>
      <title>[已结束][武汉] 道源科技招聘 Rails 开发实习生</title>
      <description>&lt;p&gt;已结束&lt;/p&gt;</description>
      <author>bydmm</author>
      <pubDate>Tue, 18 Mar 2014 14:45:59 +0800</pubDate>
      <link>https://ruby-china.org/topics/17969</link>
      <guid>https://ruby-china.org/topics/17969</guid>
    </item>
    <item>
      <title>技术负债好多，我还啊还啊还啊....</title>
      <description>&lt;p&gt;项目的代码简直和美债危机差不多，这周偷了一个空我赶紧还上，终于要把以前的补上了。
不过现在 Live 分支上还在不断的欠债，这种感觉简直和信用卡套卡一样压得人喘不过气。
你们的项目处理这个问题的。&lt;/p&gt;</description>
      <author>bydmm</author>
      <pubDate>Fri, 14 Mar 2014 12:00:38 +0800</pubDate>
      <link>https://ruby-china.org/topics/17873</link>
      <guid>https://ruby-china.org/topics/17873</guid>
    </item>
    <item>
      <title>我的 Thunderbolt 转 VGA 各种不给力，你们是怎么把 MAC 外接显示器的？</title>
      <description>&lt;p&gt;以前买的 Thunderbolt 转 VGA 外接显示器总是有偏色，后来用颜色校正把颜色调到更黑，虽然浅灰可以看到了，但是所有的颜色都偏黑了。
本来以为是显示器的问题，后来换了显示器感觉还是有问题，整个颜色偏暖，这颜色做前端真实拙计。&lt;/p&gt;

&lt;p&gt;我刚买了条 MINI DP 转换 (Big) DP 的线，期望偏色的问题能缓解。&lt;/p&gt;

&lt;p&gt;你们怎么是怎么外接显示器的？&lt;/p&gt;</description>
      <author>bydmm</author>
      <pubDate>Thu, 27 Feb 2014 18:29:38 +0800</pubDate>
      <link>https://ruby-china.org/topics/17538</link>
      <guid>https://ruby-china.org/topics/17538</guid>
    </item>
    <item>
      <title>[Bootstrap 神坑] 叫这个名字真的是给您添麻烦了</title>
      <description>&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/2014/473c3d173554dae59f8e6ef42cc49052.jpg" title="" alt=""&gt;
今天做一个类似这样的东西的时候遇到一个 Bootstrap 的坑。
其中 Spanish 和 Spanish(Latin American) 这两个国旗就是不呆在他应该在的位置。
我改来改去，调整 Dom 结构，检查 CSS 细节，都没看到具体的问题。
唯一发现的是只要这个旗子的 class 叫 spanish，spanish-Latin-American 就一定有问题。
本着 HTML 语义化的执着，我也不愿意草草的把 Class 名字改了了事，而想探寻一下到底有什么问题。
说不定能发现一个 chrome 的坑，提交到开发组也光宗耀祖一下。
后来发现居然每个游览器都有问题。
于是我回过头来看看 CSS 里到底出了什么事情。
后来发现了以下代码&lt;/p&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nf"&gt;#bootstrap&lt;/span&gt;&lt;span class="nc"&gt;.css&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="err"&gt;179&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;class&lt;/span&gt;&lt;span class="o"&gt;*=&lt;/span&gt;&lt;span class="s1"&gt;"span"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nl"&gt;float&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;left&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nl"&gt;min-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nl"&gt;margin-left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Spanish 君，Spanish(Latin American) 君：Orz........叫这个名字真的是给您添麻烦了。&lt;/p&gt;</description>
      <author>bydmm</author>
      <pubDate>Mon, 24 Feb 2014 12:14:07 +0800</pubDate>
      <link>https://ruby-china.org/topics/17447</link>
      <guid>https://ruby-china.org/topics/17447</guid>
    </item>
    <item>
      <title>[武汉] 道源科技招聘 Rails 开发工程师 / Rails 开发实习生 / Web 前端开发工程师</title>
      <description>&lt;p&gt;招聘结束&lt;/p&gt;</description>
      <author>bydmm</author>
      <pubDate>Wed, 19 Feb 2014 18:26:32 +0800</pubDate>
      <link>https://ruby-china.org/topics/17360</link>
      <guid>https://ruby-china.org/topics/17360</guid>
    </item>
    <item>
      <title>王垠的博客衍生了一种新型的病毒传播</title>
      <description>&lt;p&gt;王垠总喜欢写一些类似《程序员的心理疾病》的博客，
然后大放一些“我比 Guido van Rossum 强多了”的厥词。&lt;/p&gt;

&lt;p&gt;相当一部分程序员看到这里自然是满腹怒火，恨不得在下面的评论区把他干翻。&lt;/p&gt;

&lt;p&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;/p&gt;</description>
      <author>bydmm</author>
      <pubDate>Tue, 18 Feb 2014 10:53:49 +0800</pubDate>
      <link>https://ruby-china.org/topics/17325</link>
      <guid>https://ruby-china.org/topics/17325</guid>
    </item>
  </channel>
</rss>
