<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>betterthornbird (景)</title>
    <link>https://ruby-china.org/betterthornbird</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>[上海] SuccessFactors (an SAP Company) 招聘 Ruby 工程师</title>
      <description>&lt;h2 id="About SuccessFactors"&gt;About SuccessFactors&lt;/h2&gt;
&lt;p&gt;SuccessFactors is the leading provider of cloud-based Business Execution (BizX) software solutions to organizations of all sizes, with more than 15 million users across multiple industries and geographies.
We have more than 3,500 customers in more than 168 countries in 34 languages.&lt;/p&gt;

&lt;p&gt;SuccessFactors solutions focus on Business Alignment (people working on the right things) and People Performance (performing at full potential).  We help companies execute faster and smarter, with greater precision and better business results than ever before.&lt;/p&gt;

&lt;p&gt;In the end of 2011, SuccessFactors became part of SAP to drive all cloud business globally for SAP.&lt;/p&gt;
&lt;h2 id="Job Responsibility"&gt;Job Responsibility&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Develop new features, and work to maintain the existing application framework (ROR).&lt;/li&gt;
&lt;li&gt;Responsible for the design and implementation of mobile API servers and microservices to serve enterprise mobile applications iPhone, iPad, Android and others. &lt;/li&gt;
&lt;li&gt;Work with internal business teams and product management to define requirements and develop technical specifications. &lt;/li&gt;
&lt;li&gt;Serve as core contributor owning full life cycle product development. &lt;/li&gt;
&lt;li&gt;Work to architect and re-factor code and design for optimal maintainability, extensibility and re-usability.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="Skills"&gt;Skills&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;3+ years of experience in backend software development, including Java/Go/NodeJS, 1+ years of Ruby/Ruby On Rails development.&lt;/li&gt;
&lt;li&gt;Fluent in Ruby programming language.&lt;/li&gt;
&lt;li&gt;Strength in all the Rails fundamentals (routing, active record, migrations, modules, bundles ...) &lt;/li&gt;
&lt;li&gt;Demonstrated experience building, deploying commercial Ruby on Rails applications&lt;/li&gt;
&lt;li&gt;TDD experience is a must&lt;/li&gt;
&lt;li&gt;Solid knowledge of OOD/OOP and HTTP Protocol&lt;/li&gt;
&lt;li&gt;Solid knowledge of Linux/Unix&lt;/li&gt;
&lt;li&gt;Fluent in at least one popular rational DB like MySQL&lt;/li&gt;
&lt;li&gt;Excellent English written and oral communications, ability to work with remote teams&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="Plus"&gt;Plus&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Experience working in an Agile environment&lt;/li&gt;
&lt;li&gt;Experience on CI/CD tools like Jenkins/GoCD/Team city&lt;/li&gt;
&lt;li&gt;Experience creating RESTful APIs&lt;/li&gt;
&lt;li&gt;Experience on microservice&lt;/li&gt;
&lt;li&gt;Experience on containerized skills e.g. docker/kubenetes&lt;/li&gt;
&lt;li&gt;Experience of NoSQL DB like Mongo/Redis&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="福利"&gt;福利&lt;/h2&gt;
&lt;p&gt;参考自&lt;a href="https://ruby-china.org/topics/26325" title=""&gt;Xiaorong 发过的招聘帖&lt;/a&gt;，有改动&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;现磨咖啡，尝起来还不错&lt;/li&gt;
&lt;li&gt;15 寸顶配 MBP。一堆最新的 iPhone, iPad, Android 机器给你玩。&lt;/li&gt;
&lt;li&gt;免费午餐，有中餐，面，西餐等。另外食堂每年定期会请一些名厨来改善伙食，春夏秋冬有时令菜品，比如火锅等。&lt;/li&gt;
&lt;li&gt;过生日的时候，会有礼物、蛋糕。&lt;/li&gt;
&lt;li&gt;覆盖其他家庭成员的医疗商业保险。&lt;/li&gt;
&lt;li&gt;每年补贴 3600 元健身费用。每年春节和中秋有 888 元大礼包。&lt;/li&gt;
&lt;li&gt;目前团队在美国和北欧都有同事，到了这你英语水平已定不会差，有机会去美国出差。&lt;/li&gt;
&lt;li&gt;不打卡，每周可以最多两天在家工作，15+ 带薪假期，12+ 带薪病假，生活和工作比较好平衡。&lt;/li&gt;
&lt;li&gt;公司每年都有 Familly Day，可以带小朋友来玩，公司会组织带领小朋友做游戏用餐等。&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;SAP 所在张江软件园区&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2017/8a57cd5b-5fae-4c09-9b6c-4ea16cbebabe.jpg!large" title="" alt="SAP所在张江软件园区"&gt;&lt;/p&gt;

&lt;p&gt;SAP 很注重生活和工作平衡，家庭和工作都很重要，图为 SuccessFactors Family Day&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2017/9740cd92-b655-4d35-8351-b1ae690af288.jpg!large" title="" alt="SAP Family Day"&gt;&lt;/p&gt;

&lt;p&gt;以下为来自于 &lt;a href="/xiaoronglv" class="user-mention" title="@xiaoronglv"&gt;&lt;i&gt;@&lt;/i&gt;xiaoronglv&lt;/a&gt; 同学之前的招聘帖&lt;/p&gt;

&lt;p&gt;SAP 办公室环境&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2017/e8e917dd-640f-425c-a50b-9eb78115ead0.jpg!large" title="" alt="SAP工作环境"&gt;&lt;/p&gt;

&lt;p&gt;休闲健身区域&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2017/596c906c-6eca-41d3-8e1d-ea85eb8b5f70.jpg!large" title="" alt="SAP休闲区"&gt;&lt;/p&gt;
&lt;h2 id="联系"&gt;联系&lt;/h2&gt;
&lt;p&gt;英文简历请发送至 Base64.decode64('ZWRkaWUuZG91QHNhcC5jb20=\n')&lt;/p&gt;

&lt;p&gt;有什么问题直接本帖留言或站内信。&lt;/p&gt;</description>
      <author>betterthornbird</author>
      <pubDate>Wed, 24 Jan 2018 18:23:42 +0800</pubDate>
      <link>https://ruby-china.org/topics/34939</link>
      <guid>https://ruby-china.org/topics/34939</guid>
    </item>
    <item>
      <title>[上海] SAP Successfactors 招聘实习生一名</title>
      <description>&lt;p&gt;SAP SuccessFactors 是基于云的人力资本管理 (HCM) 软件领域的全球供应商，是分析师公认的人力资源管理软件 (HRMS) 领域的领导者。&lt;/p&gt;

&lt;p&gt;旨在帮助 60 多个行业的各种规模的企业协调业务战略，提高团队执行力，并充分提升员工绩效。&lt;/p&gt;
&lt;h3 id="工作地点"&gt;工作地点&lt;/h3&gt;
&lt;p&gt;上海浦东 张江
金科路地铁站 5 分钟&lt;/p&gt;
&lt;h3 id="要求："&gt;要求：&lt;/h3&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;熟悉 Linux/Unix 系统&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;h3 id="加分项："&gt;加分项：&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;熟悉 Ruby，有 Ruby/Rails 项目经验&lt;/li&gt;
&lt;li&gt;Github 自有项目或贡献过开源项目&lt;/li&gt;
&lt;li&gt;其他公司实习经历，了解软件开发流程，较好的团队协作沟通能力&lt;/li&gt;
&lt;li&gt;后端开发经历，从本地到线上运行网站或项目，数据库调优，性能调优，缓存和内存管理等&lt;/li&gt;
&lt;li&gt;Docker/Kubernetes/CI&amp;amp;CD/MicroService&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="福利或工作设施："&gt;福利或工作设施：&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;至少每天 300 元补贴（不过会按照国家法律规定，超过 800 部分交 20% 税）&lt;/li&gt;
&lt;li&gt;非上海学生租房补贴&lt;/li&gt;
&lt;li&gt;15 寸 Mac Book Pro&lt;/li&gt;
&lt;li&gt;至少一个 mentor，前期比较多的学习时间&lt;/li&gt;
&lt;li&gt;和全球多国家同事协作，美，印，德，丹麦等&lt;/li&gt;
&lt;li&gt;SAP 提供的高质量 Training 和转正后新人训练营&lt;/li&gt;
&lt;li&gt;健身房，中餐补贴，不打卡，弹性工作制，乒乓，桌上足球，瑜伽等（嗯嗯，组里面好多桌上足球高手，累了就去打几局）&lt;/li&gt;
&lt;li&gt;组内部 1-2 周不定期 Tech Sharing，公司内部 Tech 组织，公司每周 sharing，Global hackday 等&lt;/li&gt;
&lt;li&gt;无国界上网&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="工作内容:"&gt;工作内容：&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;你将会在后端开发团队，为 iOS 和 Android 客户端提供稳定的 API 服务&lt;/li&gt;
&lt;li&gt;和 PM, QA 以及其他组同事一起完成新功能需求，设计，开发，验证，部署和维护整个软件周期&lt;/li&gt;
&lt;li&gt;代码重构，bug 修复等&lt;/li&gt;
&lt;li&gt;系统调优，数据库调优，容器化，避免安全漏洞，提升安全级别等&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="请联系"&gt;请联系&lt;/h3&gt;
&lt;p&gt;Base64.decode64('amluZy5jaGVuQHNhcC5jb20=\n')&lt;/p&gt;
&lt;h3 id="看累了文字，来看看图吧"&gt;看累了文字，来看看图吧&lt;/h3&gt;
&lt;p&gt;SAP 所在张江软件园区&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2017/8a57cd5b-5fae-4c09-9b6c-4ea16cbebabe.jpg!large" title="" alt="SAP所在张江软件园区"&gt;&lt;/p&gt;

&lt;p&gt;SAP 很注重生活和工作平衡，家庭和工作都很重要，图为 SuccessFactors Family Day&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2017/9740cd92-b655-4d35-8351-b1ae690af288.jpg!large" title="" alt="SAP Family Day"&gt;&lt;/p&gt;

&lt;p&gt;以下为来自于 &lt;a href="/xiaoronglv" class="user-mention" title="@xiaoronglv"&gt;&lt;i&gt;@&lt;/i&gt;xiaoronglv&lt;/a&gt; 同学之前的招聘帖&lt;/p&gt;

&lt;p&gt;SAP 办公室环境&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2017/e8e917dd-640f-425c-a50b-9eb78115ead0.jpg!large" title="" alt="SAP工作环境"&gt;&lt;/p&gt;

&lt;p&gt;休闲健身区域&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2017/596c906c-6eca-41d3-8e1d-ea85eb8b5f70.jpg!large" title="" alt="SAP休闲区"&gt;&lt;/p&gt;</description>
      <author>betterthornbird</author>
      <pubDate>Fri, 12 May 2017 21:17:24 +0800</pubDate>
      <link>https://ruby-china.org/topics/32983</link>
      <guid>https://ruby-china.org/topics/32983</guid>
    </item>
    <item>
      <title>选择 Oauth Gem 遇到的问题</title>
      <description>&lt;p&gt;最近将项目的认证这块拿出来重写做独立的一个项目。&lt;/p&gt;

&lt;p&gt;认证模块做以下事情&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Grant access token&lt;/li&gt;
&lt;li&gt;Refresh the access token&lt;/li&gt;
&lt;li&gt;Revoke the access token&lt;/li&gt;
&lt;li&gt;Check access token from client request header, to see whether it exists and if it's correct.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;不做以下事情&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Accept registering client applications&lt;/li&gt;
&lt;li&gt;Have redirect_url or call back url for client requesting a token&lt;/li&gt;
&lt;li&gt;Grant request token&lt;/li&gt;
&lt;li&gt;Use oauth verifier, oauth nouce&lt;/li&gt;
&lt;li&gt;Generate session&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;简言之就是作 token provider, 而且 client 是固定的几个，不接收注册。
还有个比较土的是基于历史原因，一直使用 oauth 2.0 的一个 draft 版本，都不是以&lt;code&gt;bearer&lt;/code&gt;开始。&lt;/p&gt;

&lt;p&gt;在前面两个版本的实现中，第一版是用&lt;code&gt;oauth&lt;/code&gt;和&lt;code&gt;oauth-provider&lt;/code&gt;实现；第二版是&lt;code&gt;doorkeeper&lt;/code&gt;实现。&lt;/p&gt;

&lt;p&gt;现在再复查下这两种 gem，基本上都有大部分功能用不上以及逻辑大段的 customise 问题。
特别 doorkeeper 觉得一个简单的逻辑被分在很多代码碎片中了，读和 debug 都很难受。&lt;/p&gt;

&lt;p&gt;但如果自己写，可能的后果是拓展性和适用性不会好。一些命名和规范可能就不遵循 oauth2 了。&lt;/p&gt;

&lt;p&gt;不知道大家有没有碰到类似的，gem 不通用，大部分都 customise 的情况，是自己写还是往 gem 中套呢？&lt;/p&gt;</description>
      <author>betterthornbird</author>
      <pubDate>Tue, 23 Aug 2016 11:48:13 +0800</pubDate>
      <link>https://ruby-china.org/topics/30884</link>
      <guid>https://ruby-china.org/topics/30884</guid>
    </item>
    <item>
      <title>[上海] SuccessFactors (an SAP Company) 招聘 Ruby 工程师</title>
      <description>&lt;h2 id="About SuccessFactors"&gt;About SuccessFactors&lt;/h2&gt;
&lt;p&gt;SuccessFactors is the leading provider of cloud-based Business Execution (BizX) software solutions to organizations of all sizes, with more than 15 million users across multiple industries and geographies.
We have more than 3,500 customers in more than 168 countries in 34 languages.&lt;/p&gt;

&lt;p&gt;SuccessFactors solutions focus on Business Alignment (people working on the right things) and People Performance (performing at full potential).  We help companies execute faster and smarter, with greater precision and better business results than ever before.&lt;/p&gt;

&lt;p&gt;In the end of 2011, SuccessFactors became part of SAP to drive all cloud business globally for SAP.&lt;/p&gt;
&lt;h2 id="Job Responsibility"&gt;Job Responsibility&lt;/h2&gt;
&lt;p&gt;The Ruby on Rails Engineer is an integral member of the engineering team responsible for developing innovative mobile solutions for Enterprise Collaboration.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Develop new features, and work to maintain the existing application framework (ROR).&lt;/li&gt;
&lt;li&gt;Responsible for the design and implementation of mobile API server side to serve enterprise mobile applications iPhone, iPad, Android and others. &lt;/li&gt;
&lt;li&gt;Work with internal business teams and product management to define requirements and develop technical specifications. &lt;/li&gt;
&lt;li&gt;Serve as core contributor owning full life cycle product development. &lt;/li&gt;
&lt;li&gt;Work to architect and re-factor code and design for optimal maintainability, extensibility and re-usability.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="Skills"&gt;Skills&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;3+ years of experience in software development, engineering, or related field, 1+ years of Ruby/Ruby On Rails development.&lt;/li&gt;
&lt;li&gt;Fluent in Ruby programming language.&lt;/li&gt;
&lt;li&gt;Strength in all the Rails fundamentals (routing, active record, migrations, modules, bundles ...) &lt;/li&gt;
&lt;li&gt;Demonstrated experience building, deploying commercial Ruby on Rails applications&lt;/li&gt;
&lt;li&gt;TDD experience is a must&lt;/li&gt;
&lt;li&gt;Solid knowledge of OOD/OOP, Database and HTTP Protocol&lt;/li&gt;
&lt;li&gt;Solid knowledge of Linux/Unix, fluent in at least one popular database&lt;/li&gt;
&lt;li&gt;Experience working in an Agile environment is preferred&lt;/li&gt;
&lt;li&gt;Experience creating RESTful APIs is a plus&lt;/li&gt;
&lt;li&gt;Experience on microservice/docker/mongo DB/redis/sidekiq is a plus&lt;/li&gt;
&lt;li&gt;Excellent English written and oral communications, ability to work with remote teams.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="福利"&gt;福利&lt;/h2&gt;
&lt;p&gt;参考自&lt;a href="https://ruby-china.org/topics/26325" title=""&gt;Xiaorong 发过的招聘帖&lt;/a&gt;，有改动&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;现磨咖啡，尝起来还不错&lt;/li&gt;
&lt;li&gt;15 寸顶配 MBP。一堆最新的 iPhone, iPad, Android 机器给你玩。&lt;/li&gt;
&lt;li&gt;免费午餐，有中餐，面，西餐等。另外食堂每年定期会请一些名厨来改善伙食，春夏秋冬有时令菜品，比如火锅等。&lt;/li&gt;
&lt;li&gt;过生日的时候，会有礼物、蛋糕。&lt;/li&gt;
&lt;li&gt;覆盖其他家庭成员的医疗商业保险。&lt;/li&gt;
&lt;li&gt;每年补贴 3600 元健身费用。每年春节和中秋有 888 元大礼包。&lt;/li&gt;
&lt;li&gt;目前团队在美国和北欧都有同事，到了这你英语水平已定不会差，有机会去美国出差。&lt;/li&gt;
&lt;li&gt;不打卡，每周可以一天在家工作，15+ 带薪假期，12+ 带薪病假，生活和工作比较好平衡。
另外公司每年都有 Familly Day，可以带小朋友来玩。&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="https://ruby-china.org/topics/26325" title=""&gt;Xiaorong 发过的招聘帖&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2015/b1bd5b1ebbcea7d01b8796c9fabc827f.jpg" title="" alt=""&gt;
&lt;img src="https://l.ruby-china.com/photo/2015/dad67402f836a0fa198ecc22bee2a005.jpg" title="" alt=""&gt;
&lt;img src="https://l.ruby-china.com/photo/2015/d416c823769b3970349339e125b56da8.jpg" title="" alt=""&gt;
不用担心 GFW
&lt;img src="https://l.ruby-china.com/photo/2015/beaf02fc8d330a0d3236933d75ef71bf.jpg" title="" alt=""&gt;
时不时有萌物
&lt;img src="https://l.ruby-china.com/photo/2015/76337632758c13ee52261815563231cb.jpg" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;薪资是 HR 管理，具体不知，但是 SAP 作为知名外企，每年都会参考其他公司来调整薪资，所以按你能力来绝对不会少。&lt;/p&gt;

&lt;p&gt;英文简历请发送至 jing.chen#sap.com
有什么问题直接本帖留言或站内信。&lt;/p&gt;</description>
      <author>betterthornbird</author>
      <pubDate>Thu, 14 Jul 2016 19:51:41 +0800</pubDate>
      <link>https://ruby-china.org/topics/30531</link>
      <guid>https://ruby-china.org/topics/30531</guid>
    </item>
    <item>
      <title>为什么用 RPC</title>
      <description>&lt;p&gt;也不知道放云服务节点对不对。&lt;/p&gt;

&lt;p&gt;目前项目组准备做微服务，微服务之间的沟通可以使用 RPC 或者 Rest，于是开始花时间研究。&lt;/p&gt;

&lt;p&gt;昨天 Ruby Tuesday 跟人聊，RPC 的好处可以包括使用简洁，像用本地方法一样调用远程。第二是一切接口按照 interface file 来，不太会出问题。
相比 Rest，我个人认为，Rest apis 调用在日常代码中使用很多，写起来也没有觉得烦，有了文档，调用也不太会出错，API 版本管理也简单。&lt;/p&gt;

&lt;p&gt;我自己觉得 RPC 比 Rest 看不出明显优势。&lt;/p&gt;

&lt;p&gt;著名的&lt;a href="http://shop.oreilly.com/product/0636920033158.do" rel="nofollow" target="_blank" title=""&gt;Building Microservices&lt;/a&gt;里面反而是列了 RPC 好多坑和缺点。包括：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Marshal and unmarshal cost could be significant.&lt;/li&gt;
&lt;li&gt;Remote call does not like local call, network could be not reliable.&lt;/li&gt;
&lt;li&gt;Need to regenerate interfaces/stubs, and deploy both server/client changes, if there is any change of interface file.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;昨天问一个小哥跟我聊，为什么用 RPC，他说，老大喜欢&lt;img title=":astonished:" alt="😲" src="https://twemoji.ruby-china.com/2/svg/1f632.svg" class="twemoji"&gt; 
各位用了 RPC 来说说为什么用 RPC，来反驳反驳我吧。&lt;/p&gt;</description>
      <author>betterthornbird</author>
      <pubDate>Wed, 13 Jul 2016 17:53:36 +0800</pubDate>
      <link>https://ruby-china.org/topics/30517</link>
      <guid>https://ruby-china.org/topics/30517</guid>
    </item>
    <item>
      <title>Git Pull Request Revert 造成提交丢失</title>
      <description>&lt;p&gt;事情是这样的，在我最近的一次 Release 中，有个 branch A 的代码因为种种原因，release branch 切出来之后过了一两天才确定能 merge 和上线。&lt;/p&gt;

&lt;p&gt;在 merge 进 release branch 之前，A 有个 pull request 是对比 develop 建起来的。
得到 merge 认可后，我很高兴地点了&lt;code&gt;merge pull request&lt;/code&gt;。
在很快意识到自己错误后，我看到当前已经 merge 的页面上有个功能叫&lt;code&gt;revert pull request&lt;/code&gt;。然后我很高兴地试用了，点了&lt;code&gt;revert&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;然后就重建了 A 基于 release branch 的 pull request，并 merge 进去 release branch。
最后使用&lt;code&gt;git flow release finish xxx&lt;/code&gt; 将代码 merge 到 develop 和 master。&lt;/p&gt;

&lt;p&gt;然后问题来了，develop 中没有任何 branch A 的修改。幸好 branch A 的修改包含文件添加，要不然一时还没察觉。&lt;/p&gt;

&lt;p&gt;git flow finish 是按照标准走的，pull request merge 和 revert 也没错。但是结果就是出错了。
还没有搞清楚为什么，有知道为什么的不妨留言。&lt;/p&gt;

&lt;p&gt;也想提醒下大家，这样使用会出问题。&lt;/p&gt;</description>
      <author>betterthornbird</author>
      <pubDate>Sun, 12 Jun 2016 11:38:37 +0800</pubDate>
      <link>https://ruby-china.org/topics/30253</link>
      <guid>https://ruby-china.org/topics/30253</guid>
    </item>
    <item>
      <title>测试 DB Index 单 column index 和多 column 联合索引的疑问</title>
      <description>&lt;p&gt;最近在改数据库 Index 的一些事情&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;#Table devices, :client_type, :status are strings&lt;/span&gt;
&lt;span class="n"&gt;add_index&lt;/span&gt; &lt;span class="ss"&gt;:devices&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:client_type&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;add_index&lt;/span&gt; &lt;span class="ss"&gt;:devices&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:client_type&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;length&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个表中还有其他好几个索引，个人觉得既有 &lt;code&gt;:client_type&lt;/code&gt; 又有 &lt;code&gt;:status, :client_type&lt;/code&gt; 联合索引有点多余。
如果我做个调整，将第二个索引顺序变成&lt;code&gt;:client_type, :status&lt;/code&gt;，那根据 MySQL 的最左原则，只查找&lt;code&gt;:client_type&lt;/code&gt;也能被 hit 到。
那就可以去掉单一的在&lt;code&gt;:client_type&lt;/code&gt;上做的索引了。顺便做了个测试。&lt;/p&gt;

&lt;p&gt;移掉&lt;code&gt;:client_type&lt;/code&gt; 索引之前&lt;/p&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;mysql&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;explain&lt;/span&gt; &lt;span class="k"&gt;select&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;devices&lt;/span&gt; &lt;span class="k"&gt;where&lt;/span&gt; &lt;span class="n"&gt;client_type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'IOSDevice'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----+-------------+---------+------+------------------------------+------------------------------+---------+-------+------+-----------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;select_type&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;table&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;possible_keys&lt;/span&gt;                &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;key&lt;/span&gt;                          &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;key_len&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;ref&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;rows&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;Extra&lt;/span&gt;                 &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----+-------------+---------+------+------------------------------+------------------------------+---------+-------+------+-----------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt;  &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;SIMPLE&lt;/span&gt;      &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;devices&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;ref&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;index_devices_on_client_type&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;index_devices_on_client_type&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;258&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;const&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;5145&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Using&lt;/span&gt; &lt;span class="k"&gt;index&lt;/span&gt; &lt;span class="n"&gt;condition&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----+-------------+---------+------+------------------------------+------------------------------+---------+-------+------+-----------------------+&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;row&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt; &lt;span class="n"&gt;sec&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;mysql&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;select&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;devices&lt;/span&gt; &lt;span class="k"&gt;where&lt;/span&gt; &lt;span class="n"&gt;client_type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'BlackBerryDevice'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="mi"&gt;553&lt;/span&gt; &lt;span class="k"&gt;rows&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;03&lt;/span&gt; &lt;span class="n"&gt;sec&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;移掉两个索引并建立&lt;code&gt;:client_type, :status&lt;/code&gt;之后&lt;/p&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;mysql&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;explain&lt;/span&gt; &lt;span class="k"&gt;select&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;devices&lt;/span&gt; &lt;span class="k"&gt;where&lt;/span&gt; &lt;span class="n"&gt;client_type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'IOSDevice'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----+-------------+---------+------+------------------------------+------------------------------+---------+-------+------+-----------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;select_type&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;table&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;possible_keys&lt;/span&gt;                &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;key&lt;/span&gt;                          &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;key_len&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;ref&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;rows&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;Extra&lt;/span&gt;                 &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----+-------------+---------+------+------------------------------+------------------------------+---------+-------+------+-----------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt;  &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;SIMPLE&lt;/span&gt;      &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;devices&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;ref&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;index_client_type_and_status&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;index_client_type_and_status&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;258&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;const&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;9711&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Using&lt;/span&gt; &lt;span class="k"&gt;index&lt;/span&gt; &lt;span class="n"&gt;condition&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----+-------------+---------+------+------------------------------+------------------------------+---------+-------+------+-----------------------+&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;row&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt; &lt;span class="n"&gt;sec&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;mysql&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;select&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;devices&lt;/span&gt; &lt;span class="k"&gt;where&lt;/span&gt; &lt;span class="n"&gt;client_type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'BlackBerryDevice'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="mi"&gt;553&lt;/span&gt; &lt;span class="k"&gt;rows&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;01&lt;/span&gt; &lt;span class="n"&gt;sec&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;前后结果对比让我很惊讶。联合索引结果比单索引还快。
我的测试是在同一个数据库运行的，会不会是 MySQL 有对结果缓存，还是我测试的数据集太小？
另外像我这种应用场景，是否合适把单索引直接去掉？假设查询&lt;code&gt;:client_type&lt;/code&gt; 和 &lt;code&gt;:client_type, :status&lt;/code&gt;需求差不多。&lt;/p&gt;</description>
      <author>betterthornbird</author>
      <pubDate>Thu, 23 Jul 2015 11:05:53 +0800</pubDate>
      <link>https://ruby-china.org/topics/26618</link>
      <guid>https://ruby-china.org/topics/26618</guid>
    </item>
    <item>
      <title>来来来 觉得自己特别擅长做程序猿 / 媛的来回个帖</title>
      <description>&lt;p&gt;顺便写下哪方面擅长&lt;/p&gt;

&lt;p&gt;或者觉得自己有局限性的来说个局限性&lt;/p&gt;</description>
      <author>betterthornbird</author>
      <pubDate>Mon, 19 Jan 2015 22:04:43 +0800</pubDate>
      <link>https://ruby-china.org/topics/23823</link>
      <guid>https://ruby-china.org/topics/23823</guid>
    </item>
    <item>
      <title>怎么把 Mac 里面这个地方的锁去掉</title>
      <description>&lt;p&gt;升级成 yosemite 之后，改网络配置的地方就出现了这个锁&lt;/p&gt;

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

&lt;p&gt;特别讨厌，每次只要超过一段时间，就要输入密码解锁。&lt;/p&gt;

&lt;p&gt;顺便吐槽下那些烦人的密码，大小写数字特殊符号，我知道会安全，可是每天输无数次密码的日子我也过得很难受。&lt;/p&gt;

&lt;p&gt;PS 我尝试着去咨询过 google，不过没什么收获。另外，有同事这里是没有锁的，改配置改得很开心。&lt;/p&gt;</description>
      <author>betterthornbird</author>
      <pubDate>Fri, 12 Dec 2014 19:11:51 +0800</pubDate>
      <link>https://ruby-china.org/topics/23169</link>
      <guid>https://ruby-china.org/topics/23169</guid>
    </item>
    <item>
      <title>ssh 至远程后 终端不能正常显示中文</title>
      <description>&lt;p&gt;在我本机终端是可以的，但是 ssh 过去后就是不行。同事用 windows putty 上去可以。&lt;/p&gt;

&lt;p&gt;google 了一会但是没找到合适的答案。也不太容易描述清楚。&lt;/p&gt;

&lt;p&gt;Remote Server
Loading production environment (Rails 4.1.1)
irb(main):001:0&amp;gt; &lt;strong&gt;d8-f^G&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;localserver: ~ better$ &lt;strong&gt;中文&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;这里 'd8-f^G' 就是输入'中文' 后的显示。&lt;/p&gt;</description>
      <author>betterthornbird</author>
      <pubDate>Thu, 27 Nov 2014 22:10:39 +0800</pubDate>
      <link>https://ruby-china.org/topics/22900</link>
      <guid>https://ruby-china.org/topics/22900</guid>
    </item>
    <item>
      <title>突然间的烦躁 来聊聊你工作时最讨厌什么</title>
      <description>&lt;p&gt;目前最讨厌：&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;/ol&gt;

&lt;p&gt;来大家吐槽下&lt;/p&gt;</description>
      <author>betterthornbird</author>
      <pubDate>Tue, 05 Aug 2014 17:47:07 +0800</pubDate>
      <link>https://ruby-china.org/topics/20853</link>
      <guid>https://ruby-china.org/topics/20853</guid>
    </item>
    <item>
      <title>Dup 了一个 rails cache, dup 的对象改了以后 cache 的内容改变了！！</title>
      <description>&lt;p&gt;无解。。颠覆了我的世界观。&lt;/p&gt;

&lt;p&gt;大家可以在 console 里面试试。&lt;/p&gt;

&lt;p&gt;使用的 ruby 版本是 1.8.7 Rails 2.3.17&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"array_item_0"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s2"&gt;"attr_0"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"attr_1"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt; &lt;span class="s2"&gt;"array_item_1"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s2"&gt;"attr_2"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"attr_3"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;}]}&lt;/span&gt;

&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt; &lt;span class="s2"&gt;"test_a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:expires_in&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hours&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;

&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt; &lt;span class="s2"&gt;"test_a"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;dup&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="kp"&gt;nil&lt;/span&gt;

&lt;span class="n"&gt;merge_test&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s2"&gt;"additional_attr_0"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"additional_attr_1"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;

&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"array_item_0"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;each_with_index&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;merge!&lt;/span&gt; &lt;span class="n"&gt;merge_test&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;

&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt; &lt;span class="s2"&gt;"test_a"&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"array_item_1"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s2"&gt;"attr_2"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"attr_3"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt; &lt;span class="s2"&gt;"array_item_0"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s2"&gt;"additional_attr_0"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"attr_0"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"additional_attr_1"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"attr_1"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}]}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;

&lt;p&gt;不用 merge! 试试呢？还是变化了&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"array_item_0"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s2"&gt;"attr_0"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"attr_1"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt; &lt;span class="s2"&gt;"array_item_1"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s2"&gt;"attr_2"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"attr_3"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;}]}&lt;/span&gt;

&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt; &lt;span class="s2"&gt;"test_a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:expires_in&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hours&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;

&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt; &lt;span class="s2"&gt;"test_a"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;dup&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="kp"&gt;nil&lt;/span&gt;

&lt;span class="n"&gt;merge_test&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s2"&gt;"additional_attr_0"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"additional_attr_1"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;

&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"array_item_0"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;each_with_index&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"array_item_0"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;merge&lt;/span&gt; &lt;span class="n"&gt;merge_test&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;

&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt; &lt;span class="s2"&gt;"test_a"&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"array_item_1"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s2"&gt;"attr_2"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"attr_3"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt; &lt;span class="s2"&gt;"array_item_0"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s2"&gt;"additional_attr_0"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"attr_0"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"additional_attr_1"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"attr_1"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}]}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;

&lt;p&gt;难道只有用这种方式 才能保证 cache 不会变？&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"array_item_0"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s2"&gt;"attr_0"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"attr_1"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt; &lt;span class="s2"&gt;"array_item_1"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s2"&gt;"attr_2"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"attr_3"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;}]}&lt;/span&gt;

&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt; &lt;span class="s2"&gt;"test_a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:expires_in&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hours&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;

&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt; &lt;span class="s2"&gt;"test_a"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;dup&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="kp"&gt;nil&lt;/span&gt;

&lt;span class="n"&gt;merge_test&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s2"&gt;"additional_attr_0"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"additional_attr_1"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;

&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"array_item_0"&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;b&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"array_item_0"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;each_with_index&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"array_item_0"&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="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;merge&lt;/span&gt; &lt;span class="n"&gt;merge_test&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;])}&lt;/span&gt;

&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt; &lt;span class="s2"&gt;"test_a"&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"array_item_0"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s2"&gt;"additional_attr_0"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"attr_0"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"additional_attr_1"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"attr_1"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}]}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>betterthornbird</author>
      <pubDate>Thu, 10 Jul 2014 10:14:39 +0800</pubDate>
      <link>https://ruby-china.org/topics/20411</link>
      <guid>https://ruby-china.org/topics/20411</guid>
    </item>
    <item>
      <title>mvim youcompleteme 出错</title>
      <description>&lt;p&gt;近两天在倒腾 vim 配置，将 vim/vi 命令 alias 成了 mvim.&lt;/p&gt;

&lt;p&gt;目前每次运行 vim 都会出错&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ycm_client_support.[so|pyd|dll] and ycm_core.[so|pyd|dll] not detected; you need to compile YCM before using it. Read the docs!&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;然后目前 mvim 的信息是：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled May 29 2014 14:43:15)
MacOS X (unix) version
Included patches: 1-258
Compiled by Homebrew
Huge version with MacVim GUI.  Features included (+) or not (-):
+acl             +file_in_path    +mouse_sgr       +tag_binary
+arabic          +find_in_path    -mouse_sysmouse  +tag_old_static
+autocmd         +float           +mouse_urxvt     -tag_any_white
+balloon_eval    +folding         +mouse_xterm     +tcl
+browse          -footer          +multi_byte      +terminfo
++builtin_terms  +fork()          +multi_lang      +termresponse
+byte_offset     +fullscreen      -mzscheme        +textobjects
+cindent         -gettext         +netbeans_intg   +title
+clientserver    -hangul_input    +odbeditor       +toolbar
+clipboard       +iconv           +path_extra      +transparency
+cmdline_compl   +insert_expand   +perl            +user_commands
+cmdline_hist    +jumplist        +persistent_undo +vertsplit
+cmdline_info    +keymap          +postscript      +virtualedit
+comments        +langmap         +printer         +visual
+conceal         +libcall         +profile         +visualextra
+cryptv          +linebreak       +python          +viminfo
+cscope          +lispindent      -python3         +vreplace
+cursorbind      +listcmds        +quickfix        +wildignore
+cursorshape     +localmap        +reltime         +wildmenu
+dialog_con_gui  -lua             +rightleft       +windows
+diff            +menu            +ruby            +writebackup
+digraphs        +mksession       +scrollbind      -X11
+dnd             +modify_fname    +signs           -xfontset
-ebcdic          +mouse           +smartindent     +xim
+emacs_tags      +mouseshape      -sniff           -xsmp
+eval            +mouse_dec       +startuptime     -xterm_clipboard
+ex_extra        -mouse_gpm       +statusline      -xterm_save
+extra_search    -mouse_jsbterm   -sun_workshop    -xpm
+farsi           +mouse_netterm   +syntax
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;里面是 +python -python3&lt;/p&gt;

&lt;p&gt;搜索了下 youcompleteme 是只需要有 python 支持，不知道这里的配置是否满足条件，如果不满足，该怎么解决？&lt;/p&gt;</description>
      <author>betterthornbird</author>
      <pubDate>Sun, 08 Jun 2014 10:34:14 +0800</pubDate>
      <link>https://ruby-china.org/topics/19810</link>
      <guid>https://ruby-china.org/topics/19810</guid>
    </item>
    <item>
      <title>MySQL select by default case insensitive</title>
      <description>&lt;p&gt;今天才知道 加上 BINARY 才行&lt;/p&gt;

&lt;p&gt;mysql&amp;gt; select user_id, user_name, company_id from users where BINARY user_name = 'cgrant' limit 8;&lt;/p&gt;

&lt;p&gt;看 MySQL 官方文档
&lt;a href="http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html" rel="nofollow" target="_blank"&gt;http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;以及 stackoverflow 的问题
&lt;a href="http://stackoverflow.com/questions/7857669/mysql-case-sensitive-query" rel="nofollow" target="_blank"&gt;http://stackoverflow.com/questions/7857669/mysql-case-sensitive-query&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;然后凌乱了 不知道怎么样才能写出 rails 里面支持 case sensitive 的查询了&lt;/p&gt;</description>
      <author>betterthornbird</author>
      <pubDate>Wed, 14 May 2014 16:14:57 +0800</pubDate>
      <link>https://ruby-china.org/topics/19249</link>
      <guid>https://ruby-china.org/topics/19249</guid>
    </item>
    <item>
      <title>[上海] successfactors (an SAP company) lead/senior ruby/rails engineer</title>
      <description>&lt;p&gt;年前有过一篇帖子是招 ruby/rails engineer 的，见&lt;a href="http://ruby-china.org/topics/16697" rel="nofollow" target="_blank"&gt;http://ruby-china.org/topics/16697&lt;/a&gt;。
目前因为是不同组招聘，所做事情和内容也不一样，而且比较紧急，所以重新开一贴。
另外，在那个帖子中投过简历的人不要重复劳动了，继续 follow 那个帖子好了，那边的面试和 offer 流程目前也在进行中没有停止。本帖只收没有投过简历的人。&lt;/p&gt;

&lt;p&gt;Position: Senior Ruby/Rails Engineer&lt;/p&gt;

&lt;p&gt;About the Role&lt;/p&gt;

&lt;p&gt;The Senior Ruby/Rails Engineer is an integral member of the engineering team responsible for developing innovative mobile solutions for Enterprise Collaboration. You are a highly motivated self-starter who is excited about technology and can collaborate with technical, creative and business teams in a fast-paced environment.&lt;/p&gt;

&lt;p&gt;Responsibilities:
• Develop new features, and work to maintain the existing application framework (ROR).
• Responsible for the design and implementation of mobile server side to serve enterprise mobile applications iPhone, Android OS, BlackBerry and others.
• Work with internal business teams and product management to define requirements and develop technical specifications.
• Serve as core contributor owning full life cycle product development.
• Work to architect and re-factor code and design for optimal maintainability, extensibility and re-usability.&lt;/p&gt;

&lt;p&gt;Experience:
• 5+ years of experience in software development, engineering, or related field
• Strength in all the Rails fundamentals (routing, active record, migrations, modules, bundles ...)
• Demonstrated experience building, deploying commercial Ruby on Rails applications
• Fluent in Ruby programming language.
• Solid knowledge of OOD/OOP, Database and HTTP Protocol
• Experience working in an Agile environment is preferred
• Experience with Java / J2EE is preferred
• Experience creating RESTful APIs is a plus&lt;/p&gt;

&lt;p&gt;About SuccessFactors&lt;/p&gt;

&lt;p&gt;SuccessFactors is the global leader in Business Execution Software. Our integrated suite of on-demand applications is relied upon by thousands of customers worldwide to align their businesses to their strategies, arm their organizations for success and incite their employees to greatness—every day. SuccessFactors’ impactful, proven offering focuses on optimizing the two key components of execution excellence: Business Alignment (making sure that people are working on the right things every day) and People Performance (making sure everyone is performing at their full potential). Combined and working in concert, Business Alignment and People Performance solutions from SuccessFactors help companies execute faster and smarter, with greater precision and better business results than ever before.
SuccessFactors is one of the fastest growing public software companies. SuccessFactors has been helping organizations in both strong and uncertain times to bridge the strategy and execution gap, cultivate and retain top talent and optimize workforces, to drive business performance and results. A recognized market leader, SuccessFactors integrated suite of on demand applications has 8+ million users, 3,100+ customers of every size in over 190+ countries realizing tangible results.&lt;/p&gt;

&lt;p&gt;SuccessFactors has a unique culture. We are highly innovative and our products are defining new frontiers of software-as-a-service. We have extraordinary leadership and an aggressive sales driven culture. Founded in 2001 with offices around the world, the company employs more than 1000 people, all passionately focused on revolutionizing the future of work.&lt;/p&gt;

&lt;p&gt;If you are interested, send an email to jing.chen@sap.com&lt;/p&gt;

&lt;p&gt;Resume with English version is REQUIRED. Because we'll have foreign interviewers.&lt;/p&gt;</description>
      <author>betterthornbird</author>
      <pubDate>Fri, 18 Apr 2014 19:29:41 +0800</pubDate>
      <link>https://ruby-china.org/topics/18697</link>
      <guid>https://ruby-china.org/topics/18697</guid>
    </item>
    <item>
      <title>水木上面 ruby 关版</title>
      <description>&lt;p&gt;最近看水木的技术版面找来找去找不到 ruby 然后疑惑了下我以前还发过贴的呢。搜了下发现关版。&lt;/p&gt;

&lt;p&gt;人气不足版面分不够。悲剧了的。&lt;/p&gt;

&lt;p&gt;看了下评论为啥关版什么的，有人说玩 ruby 的人太年轻已经不属于水木了。好吧。。也没有那么年轻吧。&lt;/p&gt;

&lt;p&gt;水木的问题还是 ruby 的问题？-.-&lt;/p&gt;</description>
      <author>betterthornbird</author>
      <pubDate>Sat, 12 Apr 2014 11:04:56 +0800</pubDate>
      <link>https://ruby-china.org/topics/18553</link>
      <guid>https://ruby-china.org/topics/18553</guid>
    </item>
    <item>
      <title>最近开始看全 E 技术书 有专门讨论推荐 - 介绍 - 评论网站吗</title>
      <description>&lt;p&gt;很可耻地以前看的都是中文书然后看一些 E 文的文章，E 文的技术书籍完整的没看过。&lt;/p&gt;

&lt;p&gt;目前在 safari books 上面找一些英文书籍看，但是很头大，这里面除了有 rating 之外没有相关的简介和类似于豆瓣的那种书籍评论。对于一个刚开始准备啃这些大部头书籍的人来说很麻烦，想找个自己对胃口的 面对着茫茫英文不知道怎么下手。&lt;/p&gt;

&lt;p&gt;所以想找个类似于豆瓣一样但是对英文的书籍评论比较多的。目测现在只能在美国亚马逊那里看到一些评论，豆瓣上有零星的一些，其他就不知道了。&lt;/p&gt;

&lt;p&gt;有推荐的吗？谢谢。&lt;/p&gt;</description>
      <author>betterthornbird</author>
      <pubDate>Sat, 12 Apr 2014 10:49:20 +0800</pubDate>
      <link>https://ruby-china.org/topics/18552</link>
      <guid>https://ruby-china.org/topics/18552</guid>
    </item>
    <item>
      <title>如何在 tmux 中绑定 Ctrl+ESC 键</title>
      <description>&lt;p&gt;我不想用 tmux 默认键 C-b, 也不想绑成 C-c, C-a, 就像用 C-ESC, 不过好像不成功。C-Escape, C-esc, 都试过不行。&lt;/p&gt;

&lt;p&gt;搜索的时候不知道如何表达，找到 stack overflow 上面的这个提问，&lt;a href="http://stackoverflow.com/questions/9922497/how-can-i-set-tmux-hotkey-as-ctrl-that-is-ctrlcomma" rel="nofollow" target="_blank"&gt;http://stackoverflow.com/questions/9922497/how-can-i-set-tmux-hotkey-as-ctrl-that-is-ctrlcomma&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;里面有这个结论&lt;/p&gt;

&lt;p&gt;The control key can only be applied to letters, @, space and ? (and C-@ seems to be equivalent to C-space). Sorry, doesn't look like C-, is possible, at least in tmux-1.6.&lt;/p&gt;

&lt;p&gt;但我确实听说过有人绑定 C-escape，很迷惑。有没有人知道如何绑定？&lt;/p&gt;</description>
      <author>betterthornbird</author>
      <pubDate>Sat, 28 Dec 2013 17:26:10 +0800</pubDate>
      <link>https://ruby-china.org/topics/16476</link>
      <guid>https://ruby-china.org/topics/16476</guid>
    </item>
    <item>
      <title>今年 Ruby Conference 什么时候公开票价</title>
      <description>&lt;p&gt;网站上挂着很红的“报名参会"按钮点击了是没有反应的，其实建议说明下现在还不能报名参会吖。很想知道大概什么时候公开票价，只能容纳 500 人说明到时候票估计会紧张~&lt;/p&gt;</description>
      <author>betterthornbird</author>
      <pubDate>Thu, 08 Aug 2013 19:04:57 +0800</pubDate>
      <link>https://ruby-china.org/topics/13172</link>
      <guid>https://ruby-china.org/topics/13172</guid>
    </item>
    <item>
      <title>上海 2012 年 的 Tuesday 没有了？</title>
      <description>&lt;p&gt;从网站失去一部分数据到现在就没有见过上海 Tuesday 的号召帖子了。&lt;/p&gt;</description>
      <author>betterthornbird</author>
      <pubDate>Tue, 22 Jan 2013 16:43:33 +0800</pubDate>
      <link>https://ruby-china.org/topics/8265</link>
      <guid>https://ruby-china.org/topics/8265</guid>
    </item>
  </channel>
</rss>
