<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>greatghoul (greatghoul)</title>
    <link>https://ruby-china.org/greatghoul</link>
    <description>Ask and Learn.</description>
    <language>en-us</language>
    <item>
      <title>[远程] Airhost 招聘 Ruby 高级工程师</title>
      <description>&lt;h2 id="公司介绍"&gt;公司介绍&lt;/h2&gt;
&lt;p&gt;AirHost PMS provides all functions for day-to-day work automation and efficient operation. Our software integrates with reservations and auto-sync with many OTA. We help to increase room occupancy and boost your revenues! (Over 14,000 hotel rooms as of Feb 2019)  Airhost has office in Japan and Singapore. Learn more at &lt;a href="http://www.airhost.co" rel="nofollow" target="_blank"&gt;http://www.airhost.co&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Airhost Solutions: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hotel Management Software Channel Manager.&lt;/li&gt;
&lt;li&gt;Automated hotel check-in integrated solution and PMS all in one.&lt;/li&gt;
&lt;li&gt;Smart Check-in Automated functions- from booking to check-out process.&lt;/li&gt;
&lt;li&gt;Check-in to your room at anytime Fully Integrated with third-party channels.&lt;/li&gt;
&lt;li&gt;Web Engine Zero commission with direct bookings and maximise revenue.&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;/ul&gt;
&lt;h2 id="任职要求"&gt;任职要求&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;5 年以上工作经验，至少有 3 年以上的 Ruby on Rails 实际项目经验&lt;/li&gt;
&lt;li&gt;熟悉 PostgreSQL 数据库的配置、维护及优化&lt;/li&gt;
&lt;li&gt;优秀的学习能力和沟通能力&lt;/li&gt;
&lt;li&gt;有研发团队管理经验，熟悉软件开发过程管理方法和工具&lt;/li&gt;
&lt;li&gt;熟练掌握 RESTful API 规范，并有丰富开发经验&lt;/li&gt;
&lt;li&gt;工作需要使用英语进行流畅的文字沟通&lt;/li&gt;
&lt;li&gt;有极强的自我管理能力，能够胜任远程工作&lt;/li&gt;
&lt;li&gt;具备以下知识背景者优先考虑

&lt;ul&gt;
&lt;li&gt;熟悉 AWS 相关生态，比如 SQS, Lambda 的应用&lt;/li&gt;
&lt;li&gt;有酒店预订和管理相关产品的开发经验&lt;/li&gt;
&lt;li&gt;有 Stripe 等支付系统的开发经验&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="福利和待遇"&gt;福利和待遇&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;月薪 25-30K 人民币&lt;/li&gt;
&lt;li&gt;全职远程工作&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;有意者请发送简历到 qiu.jian@airhost.co (请注明来自 ruby-china)&lt;/p&gt;</description>
      <author>greatghoul</author>
      <pubDate>Sat, 01 Feb 2020 22:50:39 +0800</pubDate>
      <link>https://ruby-china.org/topics/39479</link>
      <guid>https://ruby-china.org/topics/39479</guid>
    </item>
    <item>
      <title>写了个油猴脚本，把 GitHub 的 README 拉到 Gem 的页面上</title>
      <description>&lt;p&gt;代码在 Github，欢迎 PR&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/greatghoul/userscript-gem-readme" rel="nofollow" target="_blank"&gt;https://github.com/greatghoul/userscript-gem-readme&lt;/a&gt;&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;&lt;img src="https://raw.githubusercontent.com/greatghoul/userscript-gem-readme/master/screenshot.png" title="" alt="Screenshot"&gt;&lt;/p&gt;</description>
      <author>greatghoul</author>
      <pubDate>Sat, 08 Sep 2018 22:45:04 +0800</pubDate>
      <link>https://ruby-china.org/topics/37463</link>
      <guid>https://ruby-china.org/topics/37463</guid>
    </item>
    <item>
      <title>[远程] DeepDevelop 团队诚聘 Rails 工程师</title>
      <description>&lt;h2 id="DeepDevelop 团队诚聘 Rails 工程师（远程）"&gt;DeepDevelop 团队诚聘 Rails 工程师（远程）&lt;/h2&gt;
&lt;p&gt;我们团队在做一个基于表格的管理和协作工具，寻觅一位资深 Rails 工程师加入，一起创造一个人们热爱的产品。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://deepdevelop.com" rel="nofollow" target="_blank" title="DeepDevelop"&gt;DeepDevelop&lt;/a&gt; 是一个小而美的远程团队，每一个成员都能自由发挥才能，Basecamp 和 JetBrains 是我们学习的对象，我们使用各种互联网工具（Slack, Dropbox, Paper, Gitlab, Zoom）来提高我们的工作效率，我们的技术栈是 Rails/Vue.js/Swift。&lt;/p&gt;
&lt;h3 id="我们希望你拥有"&gt;我们希望你拥有&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;探索精神和独立思考的能力&lt;/li&gt;
&lt;li&gt;至少 3 年以上的 Rails 开发经验，熟练使用 Rails 开发 WEB 应用和 API&lt;/li&gt;
&lt;li&gt;熟练使用 MongoDB 和 Redis&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;h3 id="同时"&gt;同时&lt;/h3&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;h3 id="加入我们后"&gt;加入我们后&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;你可以告别每天通勤的烦恼，在喜欢的咖啡馆工作或者去一个气候温和的城市&lt;/li&gt;
&lt;li&gt;你可以有更多时间陪伴你的孩子和父母&lt;/li&gt;
&lt;li&gt;你会参与到我们自己产品 Treation 的后端开发工作&lt;/li&gt;
&lt;li&gt;你可以尽情使用业界最新的技术，把学到的东西转化到代码中去&lt;/li&gt;
&lt;li&gt;你能参与到对产品方方面面的讨论中&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="每六周去一个城市聚会"&gt;每六周去一个城市聚会&lt;/h3&gt;
&lt;p&gt;从 2013 年开始我们计划每年至少去一个有趣的地方生活和工作一到两个月。去年我们的目的地是清迈。你可以打开这个链接观看我们自己拍摄的视频，&lt;a href="http://yizaoyiwan.com/discussions/644" rel="nofollow" target="_blank"&gt;http://yizaoyiwan.com/discussions/644&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;今年我们改成每六周一起去一个城市工作和生活几天，远程的同事可以面对面的交流，现在加入下个月就能一起出发了。&lt;/p&gt;
&lt;h3 id="薪资福利"&gt;薪资福利&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;自由&lt;/li&gt;
&lt;li&gt;税后 15 - 20k&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="如何应聘"&gt;如何应聘&lt;/h3&gt;
&lt;p&gt;发送简历到 61upup#gmail.com，邮件里附上你的：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blog&lt;/li&gt;
&lt;li&gt;GitHub&lt;/li&gt;
&lt;li&gt;Stack Overflow&lt;/li&gt;
&lt;li&gt;V2EX / 知乎 / 微博 / Twitter&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>greatghoul</author>
      <pubDate>Wed, 27 Jul 2016 16:55:21 +0800</pubDate>
      <link>https://ruby-china.org/topics/30642</link>
      <guid>https://ruby-china.org/topics/30642</guid>
    </item>
    <item>
      <title>使用 Sprockets Processor 剔除 CSS 中的 Google Font</title>
      <description>&lt;p&gt;使用 Rails 做 Web 应用时，基本上都会遇到使用第三方前端组件的情况，相比于自己手动 Copy 组件的文件到 Assets 中，使用一些别人封装好的 Gem，或者借助 &lt;a href="https://github.com/rharriso/bower-rails" rel="nofollow" target="_blank" title=""&gt;bower-rails&lt;/a&gt; 等工具，可以更省心的管理这些依赖文件。&lt;/p&gt;

&lt;p&gt;一些组件的 CSS 中可能通过一些 CDN &lt;a href="/import" class="user-mention" title="@import"&gt;&lt;i&gt;@&lt;/i&gt;import&lt;/a&gt; 引入一些依赖，比如 &lt;a href="https://www.google.com/fonts" rel="nofollow" target="_blank" title=""&gt;Google Fonts&lt;/a&gt;。这对开发者来说，本来是件极便利的事，但因为一些众所周知的原因，一些通过 URL 引入的样式文件无法访问或者访问很慢，而样式一般是在网页头部引入，这导致整个网页加载异常缓慢，因为无法访问的样式表请求一直 Block 在那里，直到出错或者加载完成。&lt;/p&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="sx"&gt;url('https://fonts.googleapis.com/css?family=Open+Sans')&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以前我的做法是 Fork 组件的代码，从中去除这些影响访问的资源引入，然后通过 GIT 地址引入到项目中，但这样做非常不优雅：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;一个项目用的第三方组件可能很多，一个个 Fork 很费事&lt;/li&gt;
&lt;li&gt;通过 Git 引入的依赖在安装时一般很慢，这一定程度上影响了部署的速度&lt;/li&gt;
&lt;li&gt;不能及时更新组件的新版本&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;怎么办呢？在查阅了 Sprockets 的资料后，发现有个叫 &lt;a href="https://github.com/rails/sprockets#processor-interface" rel="nofollow" target="_blank" title=""&gt;Processor&lt;/a&gt; 的东西，似乎能派上用场。Processor 的 &lt;code&gt;call&lt;/code&gt; 方法可以返回一个包含 &lt;code&gt;:data&lt;/code&gt; 的  Hash，用于传递处理过的 Asset 内容到下一个 Processor。&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&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;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:cache&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"my:cache:key:v1"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="c1"&gt;# Remove all semicolons from source&lt;/span&gt;
    &lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:data&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;gsub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;";"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&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;strong&gt;注：&lt;/strong&gt;直接返回字符串相当于返回 &lt;code&gt;{ data: str }&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;这下有得玩了！&lt;/strong&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;ChinaSprocketsProcessor&lt;/span&gt;
  &lt;span class="no"&gt;GOOGLE_FONT_PAT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/@import\s+url\(.*?googleapis.*?\);?/&lt;/span&gt;
  &lt;span class="no"&gt;BOOTCDN_PAT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/@import\s+url\(.*?bootstrapcdn.*?\);?/&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;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:data&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;gsub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;GOOGLE_FONT_PAT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;gsub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;BOOTCDN_PAT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&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;data: &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="no"&gt;Sprockets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register_postprocessor&lt;/span&gt; &lt;span class="s1"&gt;'text/css'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ChinaSprocketsProcessor&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;将这段代码添加到 &lt;code&gt;config/initializers/assets.rb&lt;/code&gt; 中，这样 CSS 文件中 googleapis 的引用和 bootstrapcdn 的引用都会被干掉了，既不用自己修改组件的代码，还符合了国情，真是太好了👏🏻。&lt;/p&gt;</description>
      <author>greatghoul</author>
      <pubDate>Fri, 27 May 2016 00:41:01 +0800</pubDate>
      <link>https://ruby-china.org/topics/30139</link>
      <guid>https://ruby-china.org/topics/30139</guid>
    </item>
    <item>
      <title>原来 after_commit 和 after_save 有这样的区别</title>
      <description>&lt;p&gt;看了一篇文章 &lt;a href="http://jakeyesbeck.com/2016/03/27/five-more-active-record-features-you-should-be-using/" rel="nofollow" target="_blank" title=""&gt;Five More Active Record Features You Should Be Using&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;里面讲到了 after_commit 和 after_save 的区别，如果 save 操作是在一个 transaction 中进行的，即使 transaction 失败回滚，after_save 依然会触发，但 after_commit 不会，印象中以前在 after_save 里面干了不少和非 ActiveRecord 对象交互的事儿，像发邮件呀什么的。&lt;/p&gt;</description>
      <author>greatghoul</author>
      <pubDate>Wed, 30 Mar 2016 09:37:05 +0800</pubDate>
      <link>https://ruby-china.org/topics/29503</link>
      <guid>https://ruby-china.org/topics/29503</guid>
    </item>
    <item>
      <title>学到个在本地调试 Gem 的方法</title>
      <description>&lt;p&gt;在本地开发 gem 时，为了图方便，可以直接引用本地的路径&lt;/p&gt;

&lt;p&gt;在 Gemfile 中加入&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;GEM_NAME&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="s1"&gt;', :github =&amp;gt; ‘&amp;lt;OWNER&amp;gt;/&amp;lt;GEM_NAME&amp;gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:branch&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'master'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后执行下面的命令&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bundle config local.GEM_NAME /path/to/local/git/repo
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;默认情况下，bundle 会检查 Gemfile 指定的 branch 和本地的 branch 是否一致，如果要禁用这一选项，可以执行&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bundle config disable_local_branch_check &lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;要删除本地的 gem 引用&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bundle config --delete local.&amp;lt;GEM_NAME&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;

&lt;p&gt;相比于在 Gemfile 中指定本地路径，我觉得这种方式更好一些，删除本地的引用就使用的线上版本，不用更改 Gemfile，而且 Gem 有更新时不需要手动执行 bundle update gem_name&lt;/p&gt;

&lt;p&gt;参考这两篇：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://bundler.io/v1.2/git.html#local" rel="nofollow" target="_blank"&gt;http://bundler.io/v1.2/git.html#local&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://stackoverflow.com/a/23590976/260793" rel="nofollow" target="_blank"&gt;http://stackoverflow.com/a/23590976/260793&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>greatghoul</author>
      <pubDate>Wed, 23 Mar 2016 21:22:50 +0800</pubDate>
      <link>https://ruby-china.org/topics/29433</link>
      <guid>https://ruby-china.org/topics/29433</guid>
    </item>
    <item>
      <title>文件名大小写导致错误失败</title>
      <description>&lt;p&gt;今天遇到到有趣的问题，有一组用例，在本地（OSX）跑的时候，都通过了，但是推到 Gitlab 上后，Build 的结果却失败了，看日志发现是一个类定义没有找到，再仔细一看那个文件，发现不小心把文件名首字母大写了。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.google.co.jp/search?sourceid=chrome-psyapi2&amp;amp;ion=1&amp;amp;espv=2&amp;amp;ie=UTF-8&amp;amp;q=osx%20case%20sensitive&amp;amp;oq=osx%20case%20sen&amp;amp;aqs=chrome.1.69i57j0l5.3982j0j1" rel="nofollow" target="_blank" title=""&gt;本地的环境没有区分大小写&lt;/a&gt;，所以能够通过，但 Build 的是跑在 Linux 上的，大小写敏感，就失败了。&lt;/p&gt;

&lt;p&gt;解决的方法&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git mv path/to/Notification.rb path/to/notification.rb
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但以后仍然有可能手误敲错呀，有没有什么工具能够检查到这种文件名大小写的错误呢？&lt;/p&gt;</description>
      <author>greatghoul</author>
      <pubDate>Sat, 23 Jan 2016 16:57:42 +0800</pubDate>
      <link>https://ruby-china.org/topics/28830</link>
      <guid>https://ruby-china.org/topics/28830</guid>
    </item>
    <item>
      <title>Rails Assets 网站似乎挂了？</title>
      <description>&lt;p&gt;&lt;a href="https://rails-assets.org/" rel="nofollow" target="_blank"&gt;https://rails-assets.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://greatghoul.b0.upaiyun.com/1509/uLDsKDB_19n4c.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;有没有什么替代的服务？或者有没有国内的镜像什么的？&lt;/p&gt;</description>
      <author>greatghoul</author>
      <pubDate>Mon, 21 Sep 2015 09:20:21 +0800</pubDate>
      <link>https://ruby-china.org/topics/27413</link>
      <guid>https://ruby-china.org/topics/27413</guid>
    </item>
    <item>
      <title>从 300 万到 1000 万，DeepDevelop 外包业务第二阶段总结</title>
      <description>&lt;blockquote&gt;
&lt;p&gt;8 个月前写了一篇 &lt;a href="http://deepdevelop.com/" rel="nofollow" target="_blank" title=""&gt;DeepDevelop&lt;/a&gt; 的发展总结（《&lt;a href="http://yizaoyiwan.com/discussion/79/" rel="nofollow" target="_blank" title=""&gt;从 300 到 300 万，一个远程外包团队的发展历程和经验&lt;/a&gt;》），本意是希望为一早一晚社区贡献内容，与小范围内的朋友探讨远程工作和外包的经验，没想到文章发出后受到了很多人的关注，传播范围也大大超出预期。在过去这段时间里我们收到了 200 多封邮件，社区里产生了 2500 条讨论。很多人的邮件写的很长很认真，令我们很感动。站在一个新的转折点上，再次将过去 8 个月的经历写下来，希望可以与更多朋友探讨远程、外包、创业的话题。&lt;/p&gt;

&lt;p&gt;(原文： &lt;a href="http://yizaoyiwan.com/discussion/460/" rel="nofollow" target="_blank"&gt;http://yizaoyiwan.com/discussion/460/&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;</description>
      <author>greatghoul</author>
      <pubDate>Wed, 22 Jul 2015 09:11:46 +0800</pubDate>
      <link>https://ruby-china.org/topics/26596</link>
      <guid>https://ruby-china.org/topics/26596</guid>
    </item>
    <item>
      <title>Learn to Build a Ruby Gem</title>
      <description>&lt;p&gt;前些天看了篇文章《&lt;a href="http://brandonhilkert.com/blog/organizing-javascript-in-rails-application-with-turbolinks/" rel="nofollow" target="_blank" title=""&gt;ORGANIZING JAVASCRIPT IN RAILS APPLICATION WITH TURBOLINKS&lt;/a&gt;》&lt;/p&gt;

&lt;p&gt;在网站的正面，看到了一个&lt;a href="http://brandonhilkert.com/courses/build-a-ruby-gem/" rel="nofollow" target="_blank" title=""&gt;关于 Ruby Gem 的课程&lt;/a&gt;，订阅以每天发邮件的形式向你讲解如何开发一个 Gem，前几天是他图书的一些广告，干货要稍后几天才会来。
有兴趣的可以订阅看看。&lt;/p&gt;

&lt;p&gt;另外，感觉这种形式的课程也挺有意思的。&lt;/p&gt;</description>
      <author>greatghoul</author>
      <pubDate>Tue, 07 Jul 2015 08:22:38 +0800</pubDate>
      <link>https://ruby-china.org/topics/26353</link>
      <guid>https://ruby-china.org/topics/26353</guid>
    </item>
    <item>
      <title>RSpec 3.3 发布：支持只执行失败的用例</title>
      <description>&lt;p&gt;&lt;a href="http://rspec.info/blog/2015/06/rspec-3-3-has-been-released/" rel="nofollow" target="_blank"&gt;http://rspec.info/blog/2015/06/rspec-3-3-has-been-released/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;有个比较有用的更新，可以选择只执行失败的用例了。&lt;/p&gt;

&lt;p&gt;需要配置一个记录用例执行结果的文件位置（最好加入 .gitignore）&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;RSpec.configure do |c|
  c.example_status_persistence_file_path = "./spec/examples.txt"
end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后就可以用下面的命令来只执行失败的用例了，很方便的样子&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rspec --only-failures
rspec --next-failure
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;之前，我一般都是指定只执行失败用例的文件的，不过有加这样的配置，在碰到第一个错误时就停止跑后面的测试。&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if config.files_to_run.one?
    config.default_formatter = 'doc'
    config.fail_fast = true
  end
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>greatghoul</author>
      <pubDate>Sun, 14 Jun 2015 17:19:08 +0800</pubDate>
      <link>https://ruby-china.org/topics/26012</link>
      <guid>https://ruby-china.org/topics/26012</guid>
    </item>
    <item>
      <title>Better Ruby China</title>
      <description>&lt;h2 id="写在前面"&gt;写在前面&lt;/h2&gt;
&lt;p&gt;这是一个从 &lt;a href="https://github.com/ruby-china/ruby-china-chrome" rel="nofollow" target="_blank" title=""&gt;Ruby China Chrome&lt;/a&gt; 改出来的扩展，但因为改的和原扩展已经没有什么相似之处了，所以改了名字发布。其实之前就有在 Ruby China 中&lt;a href="https://ruby-china.org/topics/16990" title=""&gt;发布过这个扩展&lt;/a&gt;，但当时做扩展的技术还很烂，而且一直没有发布到 webstore，这次是重新设计过的，希望大家能够喜欢。&lt;/p&gt;
&lt;h2 id="介绍"&gt;介绍&lt;/h2&gt;
&lt;p&gt;Better Ruby China 主要是为了改进 Ruby China 页面的功能。&lt;/p&gt;

&lt;p&gt;目前支持的功能是：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;发新帖和回复的表单支持全屏编辑功能&lt;/li&gt;
&lt;li&gt;隐藏帖子中已经标记为删除的回复&lt;/li&gt;
&lt;li&gt;在扩展图标上显示未读通知数量&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;以后会陆续加入其它扩展功能，每个功能都可以单独的启用和禁用。&lt;/p&gt;
&lt;h2 id="安装"&gt;安装&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://chrome.google.com/webstore/detail/better-ruby-china/ocjagblpoacffijkjblnjepccbiloigf?hl=zh-CN&amp;amp;gl=CN" rel="nofollow" target="_blank" title=""&gt;从 webstore 安装&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/GDG-Xian/crx-ruby-china" rel="nofollow" target="_blank" title=""&gt;从源代码安装&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;p&gt;扩展是开源的，欢迎大家反馈，也欢迎喜欢做 Chrome 扩展的朋友交流经验。&lt;/p&gt;</description>
      <author>greatghoul</author>
      <pubDate>Mon, 08 Dec 2014 15:31:53 +0800</pubDate>
      <link>https://ruby-china.org/topics/23082</link>
      <guid>https://ruby-china.org/topics/23082</guid>
    </item>
    <item>
      <title>Chrome 划词翻译扩展 TransIt V1.1 发布</title>
      <description>&lt;p&gt;自从&lt;a href="http://ruby-china.org/topics/16508" title=""&gt;发布 TransIt 以来&lt;/a&gt;以来，收到了大家的&lt;a href="http://www.v2ex.com/t/95029" rel="nofollow" target="_blank" title=""&gt;许多反馈&lt;/a&gt;，又得到了&lt;a href="http://www.waerfa.com/biscuit-transit-bettertranslate" rel="nofollow" target="_blank" title=""&gt;玩儿法博客的推荐&lt;/a&gt;，取得了还算不错的成绩。&lt;/p&gt;

&lt;p&gt;今天，TransIt 更新到了 1.1&lt;/p&gt;

&lt;ol&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;/ol&gt;

&lt;p&gt;大家的反馈很多，目前这一版本只更新了一部分，毕竟精力有限。大家关心的 &lt;strong&gt;翻译语言设置&lt;/strong&gt;、&lt;strong&gt;大分辨率适配&lt;/strong&gt;、
&lt;strong&gt;部分网站上划词无法使用&lt;/strong&gt; 及 &lt;strong&gt;自定义翻译结果样式&lt;/strong&gt; 的问题，我们会逐个在以后的版本中处理。&lt;strong&gt;TransIt 会不断进步。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;在商店中安装：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://chrome.google.com/webstore/detail/transit/pfjipfdmbpbkcadkdpmacdcefoohagdc" rel="nofollow" target="_blank"&gt;https://chrome.google.com/webstore/detail/transit/pfjipfdmbpbkcadkdpmacdcefoohagdc&lt;/a&gt;&lt;/p&gt;</description>
      <author>greatghoul</author>
      <pubDate>Mon, 17 Feb 2014 17:27:35 +0800</pubDate>
      <link>https://ruby-china.org/topics/17314</link>
      <guid>https://ruby-china.org/topics/17314</guid>
    </item>
    <item>
      <title>公司 GitLab 服务器的硬盘坏了</title>
      <description>&lt;p&gt;公司之前用 GitLab 来管理代码，但昨天突然间那个服务器的硬盘坏掉了，于是上面没有 down 下来的项目就悲剧了。&lt;/p&gt;

&lt;p&gt;建议公司用现有的服务，比如 bitbucket 或者 gitcafe，领导说担心代码泄漏，无奈，如果有人真心要代码，你就是不联网，代码也会丢。&lt;/p&gt;

&lt;p&gt;突然想起来一句话， &lt;strong&gt;备份不做，十恶不赦&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;记得，之前公司自己搭建了个邮件服务器，用了段时间后，也坏掉了，历史邮件也都丢了。才换到 QQ 邮箱的企业邮箱上面。现有的许多服务都挺好的，无奈老板的接受度都不高。&lt;/p&gt;</description>
      <author>greatghoul</author>
      <pubDate>Tue, 11 Feb 2014 09:19:50 +0800</pubDate>
      <link>https://ruby-china.org/topics/17157</link>
      <guid>https://ruby-china.org/topics/17157</guid>
    </item>
    <item>
      <title>Ruby China Chrome 扩展 1.1 版本</title>
      <description>&lt;p&gt;前段时间有发帖说·准备接手 &lt;a href="http://ruby-china.org/topics/15343" title=""&gt;RubyChina 的 Chrome 扩展&lt;/a&gt;，经过这段时间断断续续的开发，准备放出改进后的第一个版本。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/GDG-Xian/ruby-china-chrome/tree/v1.1" rel="nofollow" target="_blank"&gt;https://github.com/GDG-Xian/ruby-china-chrome/tree/v1.1&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="1. 移除扩展弹出窗口的列表，改为点击扩展图标直接跳转到通知列表"&gt;1. 移除扩展弹出窗口的列表，改为点击扩展图标直接跳转到通知列表&lt;/h3&gt;
&lt;p&gt;这个功能感觉稍显有些多余，因为本身就是浏览器上的扩展，直接在网站上查看帖子效果自然更好，自己实现一个帖子列表不见得就比 ruby china 做的好，而且还涉及分页等很多东西，不如删掉。&lt;/p&gt;
&lt;h3 id="2. 鼠标移动到会员名或者头像上时，会在浮层中显示会员基本信息"&gt;2. 鼠标移动到会员名或者头像上时，会在浮层中显示会员基本信息&lt;/h3&gt;
&lt;p&gt;这个是为了方便查看某个会员信息时比较方便，不过目前也没有添加多少内容，后面会逐步补充和优化排版。&lt;/p&gt;
&lt;h3 id="3. 增加回复表单和写新话题表单的全屏编辑功能"&gt;3. 增加回复表单和写新话题表单的全屏编辑功能&lt;/h3&gt;
&lt;p&gt;全屏编辑，希望大家能够喜欢。&lt;/p&gt;

&lt;p&gt;这里有一些截图&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/GDG-Xian/ruby-china-chrome/tree/v1.1/screenshots" rel="nofollow" target="_blank"&gt;https://github.com/GDG-Xian/ruby-china-chrome/tree/v1.1/screenshots&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;已经向原 repo 发送了 PR，原作者如果在的下，麻烦审核下，然后发布下更新 :)&lt;/p&gt;</description>
      <author>greatghoul</author>
      <pubDate>Sat, 25 Jan 2014 13:55:22 +0800</pubDate>
      <link>https://ruby-china.org/topics/16990</link>
      <guid>https://ruby-china.org/topics/16990</guid>
    </item>
    <item>
      <title>Chrome 划词翻译扩展 TransIt</title>
      <description>&lt;h2 id="无间断阅读"&gt;无间断阅读&lt;/h2&gt;
&lt;p&gt;在 &lt;a href="https://plus.google.com/u/0/events/gallery/cbsicog4jbmbj12rircq5d9hg4c" rel="nofollow" target="_blank" title=""&gt;西安 GDG DevFest 2013&lt;/a&gt; 活动中，我和 &lt;a href="http://weibo.com/yorzi" rel="nofollow" target="_blank" title="西安 Rubyists 组织者"&gt;andy&lt;/a&gt; 聊到了目前我们用的 Chrome 翻译扩展进行划词翻译
后都会在最&lt;strong&gt;显眼位&lt;/strong&gt;置弹出翻译结果的浮层，甚至你还要手动关闭它，从而&lt;strong&gt;打断了阅读&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;我们只是想知道这个词的意思然后继续我们的阅读而已，甚至都不关心它怎么发音。所以，我们两个都需要一
个对阅读打扰比较小的翻译扩展，正好 &lt;a href="http://weibo.com/kingheaven" rel="nofollow" target="_blank" title="西安 GDG 组织者"&gt;david&lt;/a&gt; 也有兴趣，所以后来我们专门聚了下，准备一起用业务时间做
一个翻译扩展 &lt;strong&gt;TransIt&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="TransIt"&gt;TransIt&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;TransIt&lt;/strong&gt; 是一款简单的划词翻译扩展，它的目的是划词翻译时尽可能的减小对阅读的影响。 &lt;/p&gt;

&lt;p&gt;TransIt 目前的特性：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;划词后在页面右上角显示简单的翻译结果，指定时间后自动消失&lt;/li&gt;
&lt;li&gt;支持连续对多个单词进行划词翻译，翻译结果会顺序显示在页面上&lt;/li&gt;
&lt;li&gt;在超链接上按住 Shift 键可以临时禁用该链接，方便对链接中的文本进行划词翻译&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;p&gt;扩展截图：&lt;/p&gt;

&lt;p&gt;&lt;img src="http://pic.yupoo.com/greatghoul_v/DqjjwTvE/glx96.png" title="" alt="1"&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://pic.yupoo.com/greatghoul_v/Dqjjw7WC/nzSYi.png" title="" alt="2"&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://pic.yupoo.com/greatghoul_v/Dqjjvl2w/UUts0.png" title="" alt="3"&gt;&lt;/p&gt;

&lt;p&gt;扩展已经发布在 Webstore 上面&lt;/p&gt;

&lt;p&gt;&lt;a href="https://chrome.google.com/webstore/detail/transit/pfjipfdmbpbkcadkdpmacdcefoohagdc?utm_source=chrome-ntp-icon&amp;amp;gl=CN&amp;amp;hl=zh-CN" rel="nofollow" target="_blank"&gt;https://chrome.google.com/webstore/detail/transit/pfjipfdmbpbkcadkdpmacdcefoohagdc?utm_source=chrome-ntp-icon&amp;amp;gl=CN&amp;amp;hl=zh-CN&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;欢迎试用，目前 TransIt 还有许多问题，我们会不断的改进它，如果你觉得它给你带来了便利或者它还有哪些缺陷，
都欢迎在 Webstore 上进行反馈。&lt;/p&gt;
&lt;h2 id="我们的团队"&gt;我们的团队&lt;/h2&gt;
&lt;p&gt;为了开发这个扩展，我们成立了&lt;strong&gt;微酷团队 (Veaku)&lt;/strong&gt;，以后还会给大家带来更多好用的小工具。&lt;/p&gt;</description>
      <author>greatghoul</author>
      <pubDate>Mon, 30 Dec 2013 12:54:56 +0800</pubDate>
      <link>https://ruby-china.org/topics/16508</link>
      <guid>https://ruby-china.org/topics/16508</guid>
    </item>
    <item>
      <title>玎玎新文：远程工作，你准备好了吗？</title>
      <description>&lt;p&gt;&lt;a href="http://www.csdn.net/article/2013-12-19/2817858" rel="nofollow" target="_blank"&gt;http://www.csdn.net/article/2013-12-19/2817858&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;钉钉的文章，似乎发表天程序员杂志上，他博客中没有看到。&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;&lt;a href="https://github.com/greatghoul/remote-working" rel="nofollow" target="_blank"&gt;https://github.com/greatghoul/remote-working&lt;/a&gt;&lt;/p&gt;</description>
      <author>greatghoul</author>
      <pubDate>Mon, 23 Dec 2013 10:54:08 +0800</pubDate>
      <link>https://ruby-china.org/topics/16372</link>
      <guid>https://ruby-china.org/topics/16372</guid>
    </item>
    <item>
      <title>准备接手 ruby-china-chrome 扩展</title>
      <description>&lt;p&gt;在 ruby china 的 github 中找到了个沉寂很久的 Chrome 扩展 &lt;a href="https://github.com/ruby-china/ruby-china-chrome" rel="nofollow" target="_blank"&gt;https://github.com/ruby-china/ruby-china-chrome&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;个人对开发 Chrome 扩展有着极大的热爱，于是准备接手这个项目，目前更新了 manifest_version，让其可以在 Chrome 中继续使用，然后用 angularjs 简单的实现弹出窗口中的话题列表（这个是玩的）&lt;/p&gt;

&lt;p&gt;其实是想通过前端快速的尝试一些 Ruby China 的功能，如果大家可以接受，就去为 Ruby-China 贡献该 Feature.&lt;/p&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;鼠标移过会员头像或者名字时，通过 Popover 显示其资料等&lt;/li&gt;
&lt;li&gt;全屏编辑帖子&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;欢迎提出意见 &lt;a href="https://github.com/GDG-Xian/ruby-china-chrome" rel="nofollow" target="_blank"&gt;https://github.com/GDG-Xian/ruby-china-chrome&lt;/a&gt;&lt;/p&gt;</description>
      <author>greatghoul</author>
      <pubDate>Wed, 06 Nov 2013 17:39:23 +0800</pubDate>
      <link>https://ruby-china.org/topics/15343</link>
      <guid>https://ruby-china.org/topics/15343</guid>
    </item>
    <item>
      <title>收集远程工作的经验之谈</title>
      <description>&lt;p&gt;在 gitcafe 上建立了一个收集远程工作相关经验的仓库，有兴趣的朋友一起来完善吧。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/greatghoul/remote-working" rel="nofollow" target="_blank"&gt;https://github.com/greatghoul/remote-working&lt;/a&gt;&lt;/p&gt;</description>
      <author>greatghoul</author>
      <pubDate>Tue, 22 Oct 2013 10:36:56 +0800</pubDate>
      <link>https://ruby-china.org/topics/14928</link>
      <guid>https://ruby-china.org/topics/14928</guid>
    </item>
    <item>
      <title>meta_search 如何转义 %</title>
      <description>&lt;p&gt;请问有过使用 meta_search 经验的朋友们&lt;/p&gt;

&lt;p&gt;使用 meta_search 进行模糊搜索时，如果搜索字符 % 会匹配所有的文本，如果转义% 让它精确的搜索字符 %，比如 &lt;code&gt;50%&lt;/code&gt;&lt;/p&gt;</description>
      <author>greatghoul</author>
      <pubDate>Tue, 22 Oct 2013 10:28:31 +0800</pubDate>
      <link>https://ruby-china.org/topics/14927</link>
      <guid>https://ruby-china.org/topics/14927</guid>
    </item>
  </channel>
</rss>
