<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>flyerhzm</title>
    <link>https://ruby-china.org/flyerhzm</link>
    <description>Founder at http://xinminlabs.com</description>
    <language>en-us</language>
    <item>
      <title>[上海] Xinmin Labs 招 Ruby 程序员 </title>
      <description>&lt;h2 id="关于 Xinmin Labs"&gt;关于 Xinmin Labs&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://xinminlabs.com" rel="nofollow" target="_blank" title=""&gt;Xinmin Labs&lt;/a&gt; 是一家软件咨询公司，主要是帮助来自世界各地的客户构建和完善他们的网站和移动应用，也会自己做一些有趣的产品。&lt;/p&gt;
&lt;h2 id="招聘职位"&gt;招聘职位&lt;/h2&gt;
&lt;p&gt;ruby 工程师&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;基本要求：&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;熟悉 ruby 和 rails，有至少两年实际项目的开发经验&lt;/li&gt;
&lt;li&gt;熟悉 git 版本控制&lt;/li&gt;
&lt;li&gt;熟悉数据库开发&lt;/li&gt;
&lt;li&gt;熟悉 web 开发（html/css/js）&lt;/li&gt;
&lt;li&gt;有责任心和进取心&lt;/li&gt;
&lt;li&gt;基本的英语读写能力&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;加分项：&lt;/strong&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;li&gt;有其它语言的开发经验，比如 node.js, go, swift 等等&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;p&gt;办公室还在筹备中，应该会在静安、长宁或普陀附近，暂时不考虑远程。&lt;/p&gt;
&lt;h2 id="待遇"&gt;待遇&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;年薪 15 万到 20 万&lt;/li&gt;
&lt;li&gt;五险一金&lt;/li&gt;
&lt;li&gt;10 天带薪休假&lt;/li&gt;
&lt;li&gt;路费和饭补 50 元/天&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="联系方式"&gt;联系方式&lt;/h2&gt;
&lt;p&gt;简历请发到 &lt;a href="mailto:%20flyerhzm@xinminlabs.com" title=""&gt;flyerhzm@xinminlabs.com&lt;/a&gt; ，邮件主题请加上 [应聘] ，另外最好附上你技术博客，stackoverflow，github 或 linkedin 等能展现你技术的网络链接&lt;/p&gt;

&lt;p&gt;PS 如果推荐并成功应聘，我们会送上 Apple Watch&lt;/p&gt;

&lt;p&gt;谢谢&lt;/p&gt;</description>
      <author>flyerhzm</author>
      <pubDate>Mon, 29 Jun 2015 20:45:56 +0800</pubDate>
      <link>https://ruby-china.org/topics/26246</link>
      <guid>https://ruby-china.org/topics/26246</guid>
    </item>
    <item>
      <title>eager_group 修复 n+1 聚合函数问题</title>
      <description>&lt;p&gt;&lt;a href="http://blog.xinminlabs.com/2015/06/29/eager_group/" rel="nofollow" target="_blank" title=""&gt;英文版&lt;/a&gt; 更有趣些&lt;/p&gt;

&lt;p&gt;主要是来解决 includes 和 counter_cache 无法解决的一些 n+1 查询，比如&lt;/p&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="nv"&gt;"posts"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="nv"&gt;"posts"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;COUNT&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="k"&gt;FROM&lt;/span&gt; &lt;span class="nv"&gt;"comments"&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="nv"&gt;"comments"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;"post_id"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="nv"&gt;"comments"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;"status"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'approved'&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;COUNT&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="k"&gt;FROM&lt;/span&gt; &lt;span class="nv"&gt;"comments"&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="nv"&gt;"comments"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;"post_id"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="nv"&gt;"comments"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;"status"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'approved'&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;COUNT&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="k"&gt;FROM&lt;/span&gt; &lt;span class="nv"&gt;"comments"&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="nv"&gt;"comments"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;"post_id"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="nv"&gt;"comments"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;"status"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'approved'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;=&amp;gt;&lt;/p&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="nv"&gt;"posts"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="nv"&gt;"posts"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;COUNT&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="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;count_all&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;post_id&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;post_id&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="nv"&gt;"comments"&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="nv"&gt;"comments"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;"post_id"&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="nv"&gt;"comments"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;"status"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'approved'&lt;/span&gt; &lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;post_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;或者是&lt;/p&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="nv"&gt;"posts"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="nv"&gt;"posts"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;AVG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;"comments"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;"rating"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;avg_id&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="nv"&gt;"comments"&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="nv"&gt;"comments"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;"post_id"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;AVG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;"comments"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;"rating"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;avg_id&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="nv"&gt;"comments"&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="nv"&gt;"comments"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;"post_id"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;AVG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;"comments"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;"rating"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;avg_id&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="nv"&gt;"comments"&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="nv"&gt;"comments"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;"post_id"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;=&amp;gt;&lt;/p&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="nv"&gt;"posts"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="nv"&gt;"posts"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;AVG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;"comments"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;"rating"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;average_comments_rating&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;post_id&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;post_id&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="nv"&gt;"comments"&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="nv"&gt;"comments"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;"post_id"&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;post_id&lt;/span&gt;&lt;span class="p"&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="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Post&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ActiveRecord&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Base&lt;/span&gt;
  &lt;span class="n"&gt;has_many&lt;/span&gt; &lt;span class="ss"&gt;:comments&lt;/span&gt;

  &lt;span class="n"&gt;define_eager_group&lt;/span&gt; &lt;span class="ss"&gt;:comments_average_rating&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="ss"&gt;:average&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:rating&lt;/span&gt;
  &lt;span class="n"&gt;define_eager_group&lt;/span&gt; &lt;span class="ss"&gt;:approved_comments_count&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="ss"&gt;:count&lt;/span&gt;&lt;span class="p"&gt;,&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="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;approved&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;class&lt;/span&gt; &lt;span class="nc"&gt;Comment&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ActiveRecord&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Base&lt;/span&gt;
  &lt;span class="n"&gt;belongs_to&lt;/span&gt; &lt;span class="ss"&gt;:post&lt;/span&gt;

  &lt;span class="n"&gt;scope&lt;/span&gt; &lt;span class="ss"&gt;:approved&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;status: &lt;/span&gt;&lt;span class="s1"&gt;'approved'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;用 define_eager_group 来定义 aggregate sql functions，然后就可以用 eager_group 来查询&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;posts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;eager_group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:comments_average_rating&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:approved_comments_count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;comments_average_rating&lt;/span&gt;
  &lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;approved_comments_count&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;做了简单的&lt;a href="https://github.com/xinminlabs/eager_group/blob/master/benchmark.rb" rel="nofollow" target="_blank" title=""&gt;性能测试&lt;/a&gt;，可以快非常多，我的例子是 10 倍。&lt;/p&gt;

&lt;p&gt;项目地址在 (&lt;a href="https://github.com/xinminlabs/eager_group" rel="nofollow" target="_blank"&gt;https://github.com/xinminlabs/eager_group&lt;/a&gt;)&lt;/p&gt;</description>
      <author>flyerhzm</author>
      <pubDate>Mon, 29 Jun 2015 20:16:38 +0800</pubDate>
      <link>https://ruby-china.org/topics/26245</link>
      <guid>https://ruby-china.org/topics/26245</guid>
    </item>
    <item>
      <title>自己开的介绍 Web 开发（偏 Rails）的微信订阅号</title>
      <description>&lt;p&gt;自己平时一直保持着学习的状态，每周都会看些 ruby/rails 会议的视频，所以顺手就开了个微信的订阅号，每周介绍一篇我觉得不错的演讲视频（部分带幻灯片），外加介绍一个 gem，基本算是介绍性的，不会太占我自己的时间，也比较容易坚持，现在已经写了 5 周，如果有兴趣的话，大家可以看看，欢迎任何建议，以后也可能聊些别&lt;/p&gt;

&lt;p&gt;&lt;img src="http://xinminzatan.xinminlabs.com/img/weixin_qrcode.jpg" title="" alt="wechat qrcode"&gt;&lt;/p&gt;</description>
      <author>flyerhzm</author>
      <pubDate>Mon, 02 Feb 2015 23:03:11 +0800</pubDate>
      <link>https://ruby-china.org/topics/24079</link>
      <guid>https://ruby-china.org/topics/24079</guid>
    </item>
    <item>
      <title>[上海 + 在家办公] Xinmin Labs 招聘全栈工程师 (第二弹)</title>
      <description>&lt;p&gt;之前通过 rubychina 招聘到一位非常资深的全栈工程师，因业务需要，希望能有更多的伙伴加入。&lt;/p&gt;
&lt;h2 id="关于 Xinmin Labs"&gt;关于 Xinmin Labs&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://xinminlabs.com" rel="nofollow" target="_blank" title=""&gt;Xinmin Labs&lt;/a&gt; 是一家软件咨询公司，主要是帮助来自世界各地的客户构建和完善他们的网站和移动应用，也会做一些有趣的产品。&lt;/p&gt;
&lt;h2 id="招聘职位"&gt;招聘职位&lt;/h2&gt;
&lt;p&gt;全栈工程师&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;基本要求：&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;熟悉 ruby 和 rails，有至少三年实际项目的开发经验&lt;/li&gt;
&lt;li&gt;熟悉 git 版本控制&lt;/li&gt;
&lt;li&gt;熟悉数据库开发&lt;/li&gt;
&lt;li&gt;熟悉 web 开发（html/css/js）&lt;/li&gt;
&lt;li&gt;熟悉 linux&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;strong&gt;加分项：&lt;/strong&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;li&gt;有 nodejs 开发经验&lt;/li&gt;
&lt;li&gt;有 ios 开发经验&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;/ul&gt;
&lt;h2 id="工作地点"&gt;工作地点&lt;/h2&gt;
&lt;p&gt;上海 + 在家办公&lt;/p&gt;

&lt;p&gt;上海，一是因为公司要帮你交社保和公积金，二是时不时可以聚一下方便沟通。
在家办公，可以避免在上下班的路上浪费时间和精力，也方便你更灵活地安排自己的工作时间。&lt;/p&gt;
&lt;h2 id="待遇"&gt;待遇&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;月薪 1 万（14 - 20 薪，或许更多）&lt;/li&gt;
&lt;li&gt;五险一金&lt;/li&gt;
&lt;li&gt;10 天带薪休假&lt;/li&gt;
&lt;li&gt;每周工作 35 - 40 小时&lt;/li&gt;
&lt;li&gt;买工作相关的书籍、工具和 podcast 可以报销&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="联系方式"&gt;联系方式&lt;/h2&gt;
&lt;p&gt;简历请发到 &lt;a href="mailto:%20flyerhzm@xinminlabs.com" title=""&gt;flyerhzm@xinminlabs.com&lt;/a&gt; ，邮件主题请加上 [应聘] ，另外最好附上你技术博客，stackoverflow，github 或 linkedin 等能展现你技术的网络链接&lt;/p&gt;

&lt;p&gt;谢谢&lt;/p&gt;</description>
      <author>flyerhzm</author>
      <pubDate>Tue, 17 Jun 2014 16:53:13 +0800</pubDate>
      <link>https://ruby-china.org/topics/20001</link>
      <guid>https://ruby-china.org/topics/20001</guid>
    </item>
    <item>
      <title>用 RSpec 的同学看过来</title>
      <description>&lt;p&gt;rspec 从 1.x 到 2.x 在语法上有很大的变化，比如 &lt;code&gt;expect( ).to eq&lt;/code&gt;, &lt;code&gt;expect( ).to receive( )&lt;/code&gt;, &lt;code&gt;allow( ).to receive( )&lt;/code&gt; 等等，之后要发布的 3.x 会有进一步的改进。&lt;/p&gt;

&lt;p&gt;我基于 &lt;a href="https://github.com/xinminlabs/synvert" rel="nofollow" target="_blank" title=""&gt;synvert&lt;/a&gt; 做了 rspec 的语法自动重写，你只需要做两步即可&lt;/p&gt;

&lt;p&gt;1. 安装 synvert&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gem install synvert
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2. 运行 rspec snippet&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;synvert --run-snippets rspec_new_syntax [your rails project path]
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>flyerhzm</author>
      <pubDate>Sun, 30 Mar 2014 23:41:05 +0800</pubDate>
      <link>https://ruby-china.org/topics/18266</link>
      <guid>https://ruby-china.org/topics/18266</guid>
    </item>
    <item>
      <title>synvert = syntax + convert</title>
      <description>&lt;p&gt;synvert 是我们最近做的非常有趣的开源项目，它可以解析你的 ruby 源代码，根据自定义的规则，查找旧的过期的 ruby 代码，自动替换成新的更美观的 ruby 代码。项目地址在 github 上面，&lt;a href="https://github.com/xinminlabs/synvert" rel="nofollow" target="_blank"&gt;https://github.com/xinminlabs/synvert&lt;/a&gt;，文档在这里 &lt;a href="http://xinminlabs.github.io/synvert/" rel="nofollow" target="_blank"&gt;http://xinminlabs.github.io/synvert/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;现在有 4 个 snippets（自定义的规则）&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;使用 FactoryGirl 短语法方法，比如 &lt;code&gt;FactoryGirl.create(:post)&lt;/code&gt; 替换成 &lt;code&gt;create(:post)&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;替换动态 finders，比如 &lt;code&gt;find_all_by_login_and_email('login', 'email')&lt;/code&gt; 替换成 &lt;code&gt;where(login: 'login', email: 'email')&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;使用 strong_parameters，在 models 层删除 &lt;code&gt;attr_accessible&lt;/code&gt;，在 controllers 层添加 &lt;code&gt;def xxx_params; end&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;自动升级 rails 3.2 的项目到 4.0&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;现在项目还在很初级的阶段，欢迎任何建议和 pull requests&lt;/p&gt;

&lt;p&gt;PS, 这个项目也是一个不错的学习写 DSL 的例子&lt;/p&gt;</description>
      <author>flyerhzm</author>
      <pubDate>Sun, 23 Mar 2014 23:44:57 +0800</pubDate>
      <link>https://ruby-china.org/topics/18120</link>
      <guid>https://ruby-china.org/topics/18120</guid>
    </item>
    <item>
      <title>[上海 + 在家办公] xinminlabs 招聘全栈工程师</title>
      <description>&lt;h2 id="关于 xinminlabs"&gt;关于 xinminlabs&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://xinminlabs.com" rel="nofollow" target="_blank" title=""&gt;xinminlabs&lt;/a&gt; 是一家成立不久的软件咨询公司，现在主要是帮助来自世界各地的客户构建和完善他们的网站和移动应用，也会做一些有趣的产品。&lt;/p&gt;
&lt;h2 id="招聘职位"&gt;招聘职位&lt;/h2&gt;
&lt;p&gt;全栈工程师&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;基本要求：&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;熟悉 ruby 和 rails，有实际项目开发经验&lt;/li&gt;
&lt;li&gt;熟悉 git 版本控制&lt;/li&gt;
&lt;li&gt;熟悉数据库开发&lt;/li&gt;
&lt;li&gt;熟悉 web 开发（html/css/js）&lt;/li&gt;
&lt;li&gt;熟悉 linux&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;strong&gt;加分项：&lt;/strong&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;li&gt;有 nodejs 开发经验&lt;/li&gt;
&lt;li&gt;有 ios 开发经验&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;ul&gt;
&lt;li&gt;鼓励参与各种开源项目&lt;/li&gt;
&lt;li&gt;鼓励参加各种技术会议&lt;/li&gt;
&lt;/ul&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;
&lt;h2 id="待遇"&gt;待遇&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;月薪 1 万起&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;a href="mailto:%20flyerhzm@xinminlabs.com" title=""&gt;flyerhzm@xinminlabs.com&lt;/a&gt; ，邮件主题请加上 [应聘] ，另外最好附上你技术博客，stackoverflow，github 或 linkedin 等能展现你技术的网络链接&lt;/p&gt;

&lt;p&gt;谢谢&lt;/p&gt;</description>
      <author>flyerhzm</author>
      <pubDate>Sat, 01 Mar 2014 13:08:06 +0800</pubDate>
      <link>https://ruby-china.org/topics/17589</link>
      <guid>https://ruby-china.org/topics/17589</guid>
    </item>
    <item>
      <title>出一台二手 macbook air 13-inch, Mid 2011</title>
      <description>&lt;p&gt;11 年底买的 macbook air，基本配置如下&lt;/p&gt;

&lt;p&gt;CPU: 1.7 GHz Intel Core i5
Memory: 4G 1333MHz DDR3
Graphics: Intel HD Graphics 3000 384 MB
Display: 13-inch (1440x900)
Storage: 128GB Flash Storage&lt;/p&gt;

&lt;p&gt;之前一直作为主力开发机，上个月刚入了一台 macbook pro，所以这台 air 就淘汰了，保养一般吧，手比较油，参考 amazon 上面的二手机售价，差不多 4k RMB 出，上海当面验货，有意者可以邮件联系我 flyerhzm at gmail dot com&lt;/p&gt;

&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/2013/3254e69b9d503d5829dff9493eb62fb2.jpg" title="" alt=""&gt;
&lt;img src="//l.ruby-china.com/photo/2013/111f6d29f2270c7ece2c4c3f0ef5b25c.jpg" title="" alt=""&gt;
&lt;img src="//l.ruby-china.com/photo/2013/777c2d44e641630dabf3db519bb13845.jpg" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>flyerhzm</author>
      <pubDate>Mon, 16 Dec 2013 14:45:27 +0800</pubDate>
      <link>https://ruby-china.org/topics/16227</link>
      <guid>https://ruby-china.org/topics/16227</guid>
    </item>
    <item>
      <title> 昨天活动的 PPT</title>
      <description>&lt;p&gt;&lt;a href="https://speakerdeck.com/flyerhzm/gou-jian-yi-bu-apifu-wu" rel="nofollow" target="_blank" title=""&gt;https://speakerdeck.com/flyerhzm/gou-jian-yi-bu-apifu-wu&lt;/a&gt;&lt;/p&gt;</description>
      <author>flyerhzm</author>
      <pubDate>Sun, 12 May 2013 21:36:51 +0800</pubDate>
      <link>https://ruby-china.org/topics/10927</link>
      <guid>https://ruby-china.org/topics/10927</guid>
    </item>
    <item>
      <title>会议盒子，不容错过的 Ruby 会议视频和 PPT</title>
      <description>&lt;p&gt;之前发布的&lt;a href="https://itunes.apple.com/us/app/conferences-box/id594774178?ls=1&amp;amp;mt=8" rel="nofollow" target="_blank" title=""&gt;Conferences Box&lt;/a&gt;，现在推出中文免费版，&lt;a href="https://itunes.apple.com/us/app/conferences-box-lite/id641574797?ls=1&amp;amp;mt=8" rel="nofollow" target="_blank" title=""&gt;https://itunes.apple.com/us/app/conferences-box-lite/id641574797?ls=1&amp;amp;mt=8&lt;/a&gt;，并且收录了更多 ruby 会议的视频和 ppt，包括今年的 Australia RubyConf 和 LA Ruby Conference，也收录了去年 RubyChinaConf 的内容&lt;/p&gt;</description>
      <author>flyerhzm</author>
      <pubDate>Sun, 12 May 2013 21:25:25 +0800</pubDate>
      <link>https://ruby-china.org/topics/10926</link>
      <guid>https://ruby-china.org/topics/10926</guid>
    </item>
    <item>
      <title>给爱学习的 rubyists 福利</title>
      <description>&lt;p&gt;花了差不多一个月的时间边学习边开发的 ios 应用——&lt;a href="https://itunes.apple.com/us/app/conferences-box/id594774178?ls=1&amp;amp;mt=8" rel="nofollow" target="_blank" title=""&gt;ConferencesBox&lt;/a&gt;，主要是为了方便自己在设备上方便地观看技术会议的视频和 ppt，应用刚刚上线，下面是部分截图&lt;/p&gt;

&lt;p&gt;&lt;img src="http://a408.phobos.apple.com/us/r1000/112/Purple/v4/e4/65/87/e46587dc-4a9e-1572-d818-c6fa5e128c8a/mzl.lwbjfgzx.320x480-75.jpg" title="" alt="iphone截图"&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://a219.phobos.apple.com/us/r1000/094/Purple/v4/d3/43/25/d3432598-3d4c-52b1-ec4f-01702373eea8/mzl.cdkbgyix.480x480-75.jpg" title="" alt="ipad截图"&gt;&lt;/p&gt;

&lt;p&gt;现已收录去年大量的 ruby 会议，包括 RailsConf, RubyConf, Golden Gate Ruby Conference, Aloha Ruby Conf, Rocky Mountain Ruby, GORUCO, JRuby Conf, MountainWest RubyConf, LA Ruby Conference 等等，还有部分 javascript 和 python 的会议，大多数资源在 S3 上，部分需要翻墙，之后会考虑在国内做个备份，如果网络不给力，可下载之后再观看&lt;/p&gt;</description>
      <author>flyerhzm</author>
      <pubDate>Mon, 04 Feb 2013 08:22:13 +0800</pubDate>
      <link>https://ruby-china.org/topics/8586</link>
      <guid>https://ruby-china.org/topics/8586</guid>
    </item>
    <item>
      <title>我的 slide: JRuby @ OpenFeint</title>
      <description>&lt;p&gt;&lt;a href="https://speakerdeck.com/flyerhzm/jruby-at-openfeint" rel="nofollow" target="_blank"&gt;https://speakerdeck.com/flyerhzm/jruby-at-openfeint&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;我的博客有详细介绍
&lt;a href="http://huangzhimin.com/2012/11/14/jruby-at-openfeint-jruby-migration-success-story/" rel="nofollow" target="_blank"&gt;http://huangzhimin.com/2012/11/14/jruby-at-openfeint-jruby-migration-success-story/&lt;/a&gt;&lt;/p&gt;</description>
      <author>flyerhzm</author>
      <pubDate>Mon, 19 Nov 2012 08:42:00 +0800</pubDate>
      <link>https://ruby-china.org/topics/6887</link>
      <guid>https://ruby-china.org/topics/6887</guid>
    </item>
    <item>
      <title>自己写 ruby 代码的语法分析工具</title>
      <description>&lt;p&gt;最近从 rails_best_practices gem 抽取出了 ruby 代码的语法分析模块，重新打包成了 code_analyzer gem，&lt;a href="https://github.com/flyerhzm/code_analyzer" rel="nofollow" target="_blank"&gt;https://github.com/flyerhzm/code_analyzer&lt;/a&gt;，今天坐火车把文档完善了一下 &lt;a href="http://flyerhzm.github.com/code_analyzer/" rel="nofollow" target="_blank"&gt;http://flyerhzm.github.com/code_analyzer/&lt;/a&gt;，大家看看有什么意见？&lt;/p&gt;</description>
      <author>flyerhzm</author>
      <pubDate>Sat, 22 Sep 2012 20:42:36 +0800</pubDate>
      <link>https://ruby-china.org/topics/5694</link>
      <guid>https://ruby-china.org/topics/5694</guid>
    </item>
    <item>
      <title>在线代码安全检查</title>
      <description>&lt;p&gt;我刚刚发布了&lt;a href="http://rails-brakeman.com" rel="nofollow" target="_blank" title=""&gt;rails-brakeman.com&lt;/a&gt;，它提供了在线 rails 项目代码安全检查，基于 Justin 的&lt;a href="https://github.com/presidentbeef/brakeman" rel="nofollow" target="_blank" title=""&gt;brakeman&lt;/a&gt; gem。&lt;/p&gt;

&lt;p&gt;rails developers 总是很快的开发项目，而往往留下一些安全问题，大家应该还记得 github 的 mass assignment 问题吧，rails-brakeman.com 可以帮助你在项目上线之前找出这些安全问题。&lt;/p&gt;</description>
      <author>flyerhzm</author>
      <pubDate>Wed, 23 May 2012 07:54:47 +0800</pubDate>
      <link>https://ruby-china.org/topics/3440</link>
      <guid>https://ruby-china.org/topics/3440</guid>
    </item>
    <item>
      <title>ruby 1.9 debugger</title>
      <description>&lt;p&gt;1.9 下面的新的 debugger gem 出来了，之前的 ruby-debug 一直只适用于 1.8.7，ruby-deubg19 也很久没有人维护了&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/cldwalker/debugger" rel="nofollow" target="_blank"&gt;https://github.com/cldwalker/debugger&lt;/a&gt;  &lt;/p&gt;</description>
      <author>flyerhzm</author>
      <pubDate>Thu, 05 Apr 2012 07:41:03 +0800</pubDate>
      <link>https://ruby-china.org/topics/2387</link>
      <guid>https://ruby-china.org/topics/2387</guid>
    </item>
    <item>
      <title>rails_best_practices 项目迁移到 railsbp organization 下面了</title>
      <description>&lt;p&gt;今天我在 github 上面创建了 railsbp organization，同时把 rails_best_practices 和 rails-bestpractices.com 两个项目从个人账号迁移到了 railsbp organization 下面
&lt;a href="https://github.com/railsbp" rel="nofollow" target="_blank"&gt;https://github.com/railsbp&lt;/a&gt;  &lt;/p&gt;</description>
      <author>flyerhzm</author>
      <pubDate>Wed, 28 Dec 2011 22:31:29 +0800</pubDate>
      <link>https://ruby-china.org/topics/628</link>
      <guid>https://ruby-china.org/topics/628</guid>
    </item>
    <item>
      <title>rails_best_practices 1.5.0 发布</title>
      <description>&lt;p&gt;我刚刚发布了 rails_best_practices 1.5.0，这个版本主要是增加了对 mongoid 和 cells 的支持，同时提供了更好的 erb parser，避免解析错误，更多的 changelogs 可以看这里 &lt;a href="http://rails-bestpractices.com/blog/posts/29-ann-rails_best_practices-1-5-0-released" rel="nofollow" target="_blank"&gt;http://rails-bestpractices.com/blog/posts/29-ann-rails_best_practices-1-5-0-released&lt;/a&gt;  &lt;/p&gt;</description>
      <author>flyerhzm</author>
      <pubDate>Sat, 26 Nov 2011 14:16:42 +0800</pubDate>
      <link>https://ruby-china.org/topics/186</link>
      <guid>https://ruby-china.org/topics/186</guid>
    </item>
  </channel>
</rss>
