<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>tony612 (Tony Han)</title>
    <link>https://ruby-china.org/tony612</link>
    <description>Long live Ruby!</description>
    <language>en-us</language>
    <item>
      <title>[北京活动] Elixir Meetup 第二期</title>
      <description>&lt;p&gt;距离 &lt;a href="https://mp.weixin.qq.com/s/kG3ZfNlD5MxwCkx7cclmgA" rel="nofollow" target="_blank" title=""&gt;第一次 Beijing Elixir Meetup&lt;/a&gt; 已经数月有余，11 月 23 日，秉承开放回馈开源社区的心态，Tubi 将再次赞助举办一场线下技术分享交流会，届时，你将有机会与业界同行工程师互动交流，共同探讨 Erlang / Elixir 最佳实践以及生态发展。&lt;/p&gt;
&lt;h3 id="活动时间"&gt;活动时间&lt;/h3&gt;
&lt;p&gt;2019 年 11 月 23 日周六 14:00-17:30&lt;/p&gt;
&lt;h3 id="活动地点"&gt;活动地点&lt;/h3&gt;
&lt;p&gt;北京市朝阳区望京东煌大厦 17 层 Wework（朝阳区广顺南大街 16 号院 1 号楼）&lt;/p&gt;
&lt;h3 id="报名链接"&gt;报名链接&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.huodongxing.com/event/6519049220100" rel="nofollow" target="_blank"&gt;https://www.huodongxing.com/event/6519049220100&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="日程安排"&gt;日程安排&lt;/h3&gt;
&lt;p&gt;13:30-14:00   签到入场&lt;/p&gt;

&lt;p&gt;14:00-14:10   欢迎致辞&lt;/p&gt;

&lt;p&gt;14:10-15:00   从 Django 到 Phoenix + Absinthe 的心路历程 — Scott&lt;/p&gt;

&lt;p&gt;15:10-16:00   Elixir Practice at Tubi —  Jing Tang&lt;/p&gt;

&lt;p&gt;16:00-16:30   茶歇&amp;amp;互动交流&lt;/p&gt;

&lt;p&gt;16:30-17:10  从分布式到去中心 - 基于 Erlang 的 IPFS 实现 — 江嘉诚 ( &lt;a href="/jiang_plus" class="user-mention" title="@jiang_plus"&gt;&lt;i&gt;@&lt;/i&gt;jiang_plus&lt;/a&gt; )&lt;/p&gt;

&lt;p&gt;17:10- 17:30   活动结束&amp;amp;互动交流&lt;/p&gt;
&lt;h3 id="嘉宾介绍"&gt;嘉宾介绍&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2019/c3ebb637-6d56-4264-9ad1-b3bc697c068c.jpeg!large" width="150px" height="150px" alt=""&gt;&lt;/p&gt;

&lt;p&gt;Scott : 安人心智后端工程师，写匠/海马指数/开智学堂等项目后端作者。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2019/10f99fa3-95de-438f-8774-12b03465b66d.jpeg!large" width="150px" height="150px" alt=""&gt;&lt;/p&gt;

&lt;p&gt;Jing Tang : Tubi 高级后端工程师。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2019/01b295f1-0b6e-4564-b533-72f98ac35775.jpeg!large" width="150px" height="150px" alt=""&gt;&lt;/p&gt;

&lt;p&gt;江嘉诚 (&lt;a href="/jiang_plus" class="user-mention" title="@jiang_plus"&gt;&lt;i&gt;@&lt;/i&gt;jiang_plus&lt;/a&gt;)：Xtalpi 后端工程师，专注于分布式系统和 P2P 网络。&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;如果有兴趣加入 Beijing Elixir Meetup 微信群，可以扫描以下二维码联系工作人员 👇&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2019/5ea2c3b4-a916-4bb7-84d7-0124dcdf314a.jpeg!large" width="600px" height="600px" alt=""&gt;&lt;/p&gt;
&lt;h4 id="关于Tubi"&gt;关于 Tubi&lt;/h4&gt;
&lt;p&gt;Tubi 总部位于美国西海岸的旧金山，在纽约、芝加哥、洛杉矶、北京等地均有分布。目前全球有 200 多名员工，其中 70 多名工程师，并且团队在持续壮大中。我们是一家发展稳健、收入充沛且快速增长的 C 轮公司。&lt;/p&gt;

&lt;p&gt;在免费视频领域，我们是北美市场最大的玩家，并建立了相当稳固的商业地位。区别于像 Netflix、Hulu 等付费的流媒体服务，我们为用户提供免费的高质量视频内容，通过广告获取收益，实现用户、内容提供商和广告主三方共赢。同时，我们的 App 支持近 10 种平台，在 FireTV / PS4 / Samsung 等设备的北美应用市场中都能找到 Tubi App 的身影，并且拥有良好的用户口碑。&lt;/p&gt;

&lt;p&gt;Tubi 北京及旧金山团队持续招募志同道合的工程师中，岗位覆盖 高级 Elixir 后端开发工程师、高级 Scala 后端开发工程师、高级机器学习工程师、高级数据开发工程师及高级前端开发工程师，更多职位详情可关注“比图科技”公众号。&lt;/p&gt;</description>
      <author>tony612</author>
      <pubDate>Tue, 19 Nov 2019 15:59:51 +0800</pubDate>
      <link>https://ruby-china.org/topics/39261</link>
      <guid>https://ruby-china.org/topics/39261</guid>
    </item>
    <item>
      <title>[北京] 2019 10.20 Scala Meetup</title>
      <description>&lt;h2 id="2019 北京 Scala Meetup"&gt;2019 北京 Scala Meetup&lt;/h2&gt;
&lt;p&gt;继 2017 和 2018 Scala Meetup 在各地成功举办后，在这个秋高气爽的十月，由 Tubi 赞助的 2019 年 Scala Meetup 活动将于 10 月下旬在北京地区进行。此次 Meetup 我们将邀请到几位来自 Scala 社区的专家来聊一聊 Scala 在生产实践中及实际操作中的深度应用，诚邀各位技术达人线上线下一起进行深度探讨。&lt;/p&gt;
&lt;h2 id="​活动安排"&gt;​活动安排&lt;/h2&gt;
&lt;p&gt;​
本地 Meetup 日程为半天，将于 10 月 20 日下午在朝阳区望京东煌大厦 Wework 举办。所有报名参会小伙伴均会收到电子邀请函，期待通过此次 Meetup 能够加强开发者与 Scala 社区之间的连接，形成社区贡献者、主要用户及合作伙伴共同参与 Scala 社区建设的线上线下长期交流模式。&lt;/p&gt;
&lt;h3 id="​活动时间："&gt;​活动时间：&lt;/h3&gt;
&lt;p&gt;2019 年 10 月 20 日（周日）14:00-18:00&lt;/p&gt;
&lt;h3 id="活动地点："&gt;活动地点：&lt;/h3&gt;
&lt;p&gt;北京市朝阳区望京东煌大厦 17 层 Wework（朝阳区广顺南大街 16 号院 1 号楼）&lt;/p&gt;
&lt;h2 id="主题议程"&gt;主题议程&lt;/h2&gt;
&lt;p&gt;13:00-14:00   签到入场&lt;/p&gt;

&lt;p&gt;14:00-14:10   欢迎致辞&lt;/p&gt;

&lt;p&gt;14:10-15:00   Scaling up Machine Learning Experimentation at Tubi 5x and Beyond--by Alexandros&lt;/p&gt;

&lt;p&gt;15:10-16:10   Practical functional programming with Scala--by Neo&lt;/p&gt;

&lt;p&gt;16:10-16:40   茶歇&amp;amp;互动交流&lt;/p&gt;

&lt;p&gt;16:40-17:40  Opentracing in Scala--by 艾彦波&lt;/p&gt;

&lt;p&gt;17:40-18:00   活动结束&amp;amp;互动交流&lt;/p&gt;

&lt;p&gt;18:00-20:   00   自行聚餐&lt;/p&gt;
&lt;h2 id="嘉宾介绍"&gt;嘉宾介绍&lt;/h2&gt;
&lt;p&gt;Alexandros&lt;/p&gt;

&lt;p&gt;Tubi
Senior Scala Engineer
Alexandros has been building out the next generation of personalization services at Tubi for the past year. Before that he spent three years at Apple building out the publishing pipeline for Apple.com. Outside of Scala, he can usually be found at the playground with his children&lt;/p&gt;

&lt;p&gt;Neo &lt;/p&gt;

&lt;p&gt;毕业于滑铁卢大学计算机科学专业，在 Morgen Stanly、Standard Chartered Bank 工作多年，积累了丰富的 Scala 商业实践经验，是一位技术广度与深度兼备的 Scala 研究专家。&lt;/p&gt;

&lt;p&gt;艾彦波&lt;/p&gt;

&lt;p&gt;Growing IO 资深架构师，7 年以上工程经验，5 年互联网工作经验。擅长底层技术架构，预研，推广。对高并发，高性能，大规模数据处理有经验和心得。曾负责大规模数据处理 (ETL) 的架构和实现。喜欢关注底层技术和互联网应用，在 Github 贡献多个开源框架。 &lt;/p&gt;
&lt;h2 id="报名"&gt;报名&lt;/h2&gt;
&lt;p&gt;欢迎参与到这次 Scala Meetup 活动中来，请先使用&lt;strong&gt;活动行&lt;/strong&gt;Web 版本搜索北京 Scala Meetup，点击进入活动页面通过报名按钮进行报名，然后可以添加页面下方二维码以便后续联系，我们会根据报名情况发出电子邀请函。&lt;/p&gt;

&lt;p&gt;关于线上同学的在线参与，鉴于 Zoom 目前国内使用有些问题，我们还在寻求解决方案，会尽快更新。&lt;/p&gt;
&lt;h2 id="关于Tubi"&gt;关于 Tubi&lt;/h2&gt;
&lt;p&gt;Tubi 总部位于美国西海岸的旧金山，在纽约、芝加哥、洛杉矶、北京等地均有分布。目前全球有 180 多名员工，其中 70 多名工程师，并且团队在持续壮大中。我们是一家发展稳健、收入充沛且快速增长的 C 轮公司。在免费视频领域，我们是北美市场最大的玩家，并建立了相当稳固的商业地位。区别于像 Netflix、Hulu 等付费的流媒体服务，我们为用户提供免费的高质量视频内容，通过广告获取收益，实现用户、内容提供商和广告主三方共赢。同时，我们的 App 支持近 10 种平台，在 FireTV / PS4 / Samsung 等设备的北美应用市场中都能找到 Tubi App 的身影，并且拥有良好的用户口碑。Tubi 北京及旧金山团队持续招募志同道合的工程师中，岗位覆盖 高级 Elixir 后端开发工程师、高级 Scala 后端开发工程师、高级机器学习工程师、高级数据开发工程师及高级前端开发工程师，更多职位详情可关注“比图科技”公众号。&lt;/p&gt;</description>
      <author>tony612</author>
      <pubDate>Fri, 11 Oct 2019 14:11:32 +0800</pubDate>
      <link>https://ruby-china.org/topics/39139</link>
      <guid>https://ruby-china.org/topics/39139</guid>
    </item>
    <item>
      <title>「上海」「英语流利说」New Year～New House 和一大波招聘！</title>
      <description>&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2018/49914526-76cb-4b50-bce6-8bd0ccdd29a1.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;新年的第一个工作日，流利星球的神秘基地乔迁到了长阳创谷的独栋大 house 啦！&lt;/p&gt;

&lt;p&gt;新基地简直无比炫酷：除了自动升降桌、人体工学椅外、健身房、瑜伽房等不太常规的硬件设备…
还有色彩斑斓、迷情浪漫的星光影音室，科技感十足的胶囊太空舱休息室，微风徐徐迎面扑来的天桥等区域。&lt;/p&gt;

&lt;p&gt;快来和我们一起心怀好奇，在流利星球的新基地遨游～做一枚充满向上力量的青年。&lt;/p&gt;

&lt;p&gt;New House 的看点一：ins 风植物（据说有很多网红家具哦）&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2018/3d0c75cf-a3ad-4150-9b44-df3a820da26b.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2018/dec9baa4-f847-4631-bdf2-3a981c076587.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;New House 的看点二：比舒适更舒适（开工第一天，星光影音里就有童鞋抢占沙发）&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2018/7b9d9294-0e95-4a55-8cc2-f0437bf4f537.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;（what？让我们偷偷谈恋爱的地方？）&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2018/73093018-9272-44ff-9cbc-25b1b5594631.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2018/06ecdd4c-3ae3-452c-9a23-65b05ef6a577.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;New House 的看点三：旋转的木马没有翅膀但有童心&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2018/779520be-fcf4-46fe-9b5c-37b6eededca1.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2018/684c0e4b-8d77-4c30-87c9-24202b0da559.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;（猜猜这里是？）&lt;/p&gt;

&lt;p&gt;New House 的看点四：健康饮食 + 运动=狂吃不胖&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2018/715c125b-c207-4a7f-92dc-4788154673b8.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2018/29b4bb8c-f65f-48e4-a41d-71a4f5810cb8.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2018/574050c6-260f-4fe9-ae88-6572c904b464.png!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="Company@Liulishuo"&gt;Company@Liulishuo&lt;/h2&gt;
&lt;p&gt;英语流利说（www.liulishuo.com），流利说是中国领先的“AI+ 教育”公司，智能教育的畅行者，由王翌、胡哲人和林晖于 2012 年共同创立。流利说技术团队研发了世界上最先进高效的人工智能英语老师，基于深度学习技术，为每一位用户提供个性化、自适应的学习路径。学习效果经“欧标”（CEFR）对比认证，较传统人工教学可提高 3 倍以上。经过多年积累，流利说拥有全球最大的中国人英语语音数据库，在此基础上，公司自主研发了世界领先的英语口语、写作自动识别评测引擎。&lt;/p&gt;

&lt;p&gt;旗舰 App“英语流利说”是中国领先的英语学习 App，超过 6000 万用户构筑了中国最活跃的语言学习社区。产品多次被苹果公司评为“年度精选 App”和“App Store 精华”。&lt;/p&gt;

&lt;p&gt;目前，流利说已完成近亿美金的 C 轮融资，也是中国在线教育领域第一家实现规模化盈利的公司。投资方包括：IDG、挚信资本、GGV、华人文化产业投资基金（CMC）、心元资本、双湖资本、赫斯特资本。&lt;/p&gt;
&lt;h2 id="Engineering @ Liulishuo："&gt;Engineering @ Liulishuo：&lt;/h2&gt;
&lt;p&gt;流利说技术团队由 CTO 胡哲人带领，并拥有来自 Google、微信、阿里、百度、点评等国内外知名团队的一流工程师组成，我们有闻名技术圈的实力网红，也有功底扎实的低调扫地僧；有拥有丰富开源项目经验的个人开发者，还有实战经验充分的前创业者。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;我们热爱写测试，是的！&lt;/li&gt;
&lt;li&gt;这可能是创业公司中 code review 最认真的团队，你的代码至少会被一个人 review 过；&lt;/li&gt;
&lt;li&gt;我们喜欢用 Slack 作为沟通、运维、交流的工具，用 Phabricator 进行项目管理；&lt;/li&gt;
&lt;li&gt;我们是一群喜欢研究各种新语言、技术的工程师，比如 Kotlin、Swift、Elixir、Clojure、Rust、React，而且很喜欢把新技术和语言应用到工作当中；&lt;/li&gt;
&lt;li&gt;鼓励开源热衷奉献是我们的态度，团队的 Github 开源项目有近万个 Star，屡上 Github Trending 榜，欢迎一起来添砖加瓦吧 &lt;a href="https://github.com/lingochamp" rel="nofollow" target="_blank"&gt;https://github.com/lingochamp&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;开拓眼界收获成长，每年国内外顶尖技术大会 如 WWDC、Google I/O、AWS re:Invent, Spark Summit, QCon 总有我们的身影；&lt;/li&gt;
&lt;li&gt;对了，我们还有多位有趣可爱又不乏实力的工程师妹子们，想一起来 PK 一下吗？&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;你会玩的我们都有，你期待的更多福利我们超越！&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;13 薪 + 无上限年终奖，优秀员工出境游计划；&lt;/li&gt;
&lt;li&gt;免费健身房零距离，因此，你即将加入的团队可能是工程师身材最好的团队之一哦，还有羽毛球、乒乓球、攀岩等诸多民间俱乐部等你一起加入；&lt;/li&gt;
&lt;li&gt;营养丰富的私厨三餐 + 新鲜水果花式零食饮料（夏有冰棍冬有甜汤）；丰富精彩的团建活动，成全你的碧海蓝天；&lt;/li&gt;
&lt;li&gt;弹性工作制，全员 Mac 办公，液压电动升降桌加人体工学椅，让你站着，坐着还是躺着都可以全方位激发你的创造力；&lt;/li&gt;
&lt;li&gt;流利星球一年一度的 Hack Week 是一次创新与脑洞的大碰撞，也是黑科技与灵感的结合。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="Wanted@Liulishuo"&gt;Wanted@Liulishuo&lt;/h2&gt;&lt;h3 id="资深后端工程师&amp;nbsp;（上海）"&gt;资深后端工程师&amp;nbsp;（上海）&lt;/h3&gt;
&lt;p&gt;具备 Ruby / Golang 开发经验，计算机基础知识扎实，包括不限定于操作系统、计算机网络、数据结构和算法；
熟悉关系型数据库，如 MySQL 等，熟悉 NoSQL，如 Redis 等。&lt;/p&gt;

&lt;p&gt;薪资范围：&amp;nbsp;20K - 40K&lt;/p&gt;

&lt;p&gt;很早就使用 Docker、Kubernetes 等前沿技术来构建智能化自动化运维体系，摆脱繁复开发和部署流程走上精益之道。&lt;/p&gt;
&lt;h3 id="资深 Android 工程师&amp;nbsp;（上海）&amp;nbsp;"&gt;资深 Android 工程师&amp;nbsp;（上海）&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;熟练掌握 Java 或 Kotlin，熟练使用 Android Studio 及相关调试工具；
热爱移动 App 开发，对新事物敏感，喜欢探索，有较强的创新意识与责任感。&lt;/p&gt;

&lt;p&gt;薪资范围：20K - 35K&lt;/p&gt;

&lt;p&gt;补充说明：流利说开发团队一直走在 Android 开发最前沿，紧跟潮流的 Android 团队有些项目已经大规模使用 Kotlin 开发，项目早已成熟应用组件化架构并且近期也开始研究插件化。&lt;/p&gt;
&lt;h3 id="资深 iOS 工程师&amp;nbsp;（上海）"&gt;资深 iOS 工程师&amp;nbsp;（上海）&lt;/h3&gt;
&lt;p&gt;基础扎实，数据结基础知识掌握牢固，有良好的编码风格；
熟练掌握 Swift 语言，有丰富的 iOS 开发经验，熟练使用 Xcode 及相关调试工具。&lt;/p&gt;

&lt;p&gt;薪资范围：20K - 35K&lt;/p&gt;

&lt;p&gt;补充说明：从 Swift 1.0 开始实践到今天，是国内为数不多的全 Swift 开发的团队；团队成员每年都活跃在 WWDC 的前线。&lt;/p&gt;
&lt;h3 id="自然语言处理工程师&amp;nbsp;（上海、杭州）"&gt;自然语言处理工程师&amp;nbsp;（上海、杭州）&lt;/h3&gt;
&lt;p&gt;熟悉机器学习在 NLP 领域的应用，能利用机器学习技术改善 NLP 相关技术的效；
精通某一种编程语言（Go、C++、Java、Python 等），有一定的项目经验；
有测评系统、自动作文批改、机器翻译、纠错算法研发经验者优先；
熟悉文本分类、语言模型、实体识别、知识图谱抽取和推理、问答系统设计等 NLP 相关知识；&lt;/p&gt;

&lt;p&gt;薪资范围：25K - 50K&lt;/p&gt;

&lt;p&gt;流利说的算法团队由首席科学家林晖带领，并由多位来自来自 Google（首席算法工程师孙怿与首席算法架构师张潇君曾就职于 Google）、微软等全球知名人工智能公司和实验室的顶尖科学家和一流的工程师组成。&lt;/p&gt;

&lt;p&gt;每年都有众多团队成员活跃于 ACL、Interspeech、KDD、ICML 等国际学术会议，团队多项成果发表在国际一线期刊。&lt;/p&gt;
&lt;h3 id="大数据开发工程师&amp;nbsp;（上海）"&gt;大数据开发工程师&amp;nbsp;（上海）&lt;/h3&gt;
&lt;p&gt;扎实的计算机基础，至少一年大数据平台相关经验；
熟练掌握如下最少一个组件：Hadoop/Spark/Kafka/Presto 等，具备问题定位/解决能力，有 HBase/Cassandra 等分布式存储相关经验加分，有开源社区贡献的加分，有 AWS 平台经验加分。&lt;/p&gt;

&lt;p&gt;薪资范围：20K - 30K&lt;/p&gt;

&lt;p&gt;补充说明：这里有数千万学习用户的海量数据，数据收集、计算、存储、资源调度、数据应用等各种问题等你来挑战；Hive、Spark、Presto、Flink 任选。&lt;/p&gt;
&lt;h3 id="测试开发工程师&amp;nbsp;&amp;nbsp;（上海）"&gt;测试开发工程师&amp;nbsp;&amp;nbsp;（上海）&lt;/h3&gt;
&lt;p&gt;熟悉常用接口测试工具、可以独立搭建接口自动化测试平台；
熟悉常用移动客户端自动化测试技术及相关编程语言；
了解测试基础理论，熟悉常用测试技术方法，有较高的质量意识。&lt;/p&gt;

&lt;p&gt;薪资范围：15K - 25K&lt;/p&gt;

&lt;p&gt;感兴趣的小伙伴快发送简历至&amp;nbsp;jobs@liulishuo.com！(标题：申请职位 + 姓名)
更多星球基地亮点，等你来发现哦～&lt;/p&gt;</description>
      <author>tony612</author>
      <pubDate>Mon, 08 Jan 2018 11:39:19 +0800</pubDate>
      <link>https://ruby-china.org/topics/34849</link>
      <guid>https://ruby-china.org/topics/34849</guid>
    </item>
    <item>
      <title>[上海] 2017.9.23 Elixir Meetup</title>
      <description>&lt;p&gt;时间：2017.9.23 周六&lt;/p&gt;

&lt;p&gt;地点：英语流利说办公室（大连路 970 号海上海 9 号楼 2101 室）&lt;/p&gt;

&lt;p&gt;高德地图链接：&lt;a href="http://f.amap.com/54uf6_0971mFu" rel="nofollow" target="_blank"&gt;http://f.amap.com/54uf6_0971mFu&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;1:50~2:00 自我介绍&lt;/p&gt;

&lt;p&gt;2:00~5:00 主题演讲&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;《更 Elixir 风格的函数式 - 记述一次重构经历》-- &lt;a href="https://github.com/vangie" rel="nofollow" target="_blank" title=""&gt;杜万&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;《Protobuf in Elixir》 -- &lt;a href="https://github.com/tony612" rel="nofollow" target="_blank" title=""&gt;Tony&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;（还在征集当中，欢迎分享）&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;5:00~6:00 自由讨论&lt;/p&gt;

&lt;p&gt;PS： &lt;/p&gt;

&lt;p&gt;活动不需要报名，但你可以加入 meetup 来关注我们的活动 &lt;a href="https://www.meetup.com/Elixir-Shanghai/" rel="nofollow" target="_blank"&gt;https://www.meetup.com/Elixir-Shanghai/&lt;/a&gt;&lt;/p&gt;</description>
      <author>tony612</author>
      <pubDate>Mon, 18 Sep 2017 22:56:07 +0800</pubDate>
      <link>https://ruby-china.org/topics/34168</link>
      <guid>https://ruby-china.org/topics/34168</guid>
    </item>
    <item>
      <title>[上海] 流利说与你在杭州 RubyChina Conf 2017 有个约会</title>
      <description>&lt;p&gt;&lt;img src="http://cdn.llscdn.com/fe-static/hr/1-40VXeN8v.jpg" title="" alt="image"&gt;&lt;/p&gt;

&lt;p&gt;2017 年 9 月 3 日，英语流利说五周岁啦！从 2012 年在杭州创立公司到现在，流利说始终有着自己的坚持—基于口语评测的英语学习工具，并持续在技术和内容上做优化与升级。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://cdn.llscdn.com/fe-static/hr/5%E5%91%A8%E5%B9%B4%E8%9B%8B%E7%B3%95-8YEY71SN.jpg" title="" alt="image"&gt;&lt;/p&gt;

&lt;p&gt;2017 年 9 月 16 日，流利说的后端战队也将前往杭州 - 流利说的出生地参加 RubyChina Conf 2017。这也是我们连续第 4 年参加 RubyChina Conf，同时我们也将会在两天的会议间隙安排面试环节。&lt;/p&gt;

&lt;p&gt;欢迎对流利说感兴趣的小伙伴提前发简历至 &lt;em&gt;jobs.rubychina@liulishuo.com&lt;/em&gt; ，我们将会与您提前取得联系安排见面～&lt;/p&gt;

&lt;p&gt;&lt;img src="http://cdn.llscdn.com/fe-static/hr/5%E5%91%A8%E5%B9%B4-75dKlRWG.jpg" title="" alt="image"&gt;&lt;/p&gt;
&lt;h2 id="招聘职位"&gt;招聘职位&lt;/h2&gt;&lt;h3 id="后端工程师"&gt;后端工程师&lt;/h3&gt;
&lt;p&gt;岗位职责&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;直接参与公司核心业务后端功能的架构设计与优化、应用开发与测试；&lt;/li&gt;
&lt;li&gt;解决服务、产品建设中遇到的问题，与团队一起攻克难题，不断提升系统性能。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;任职条件&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;一年以上 Ruby／Golang 开发经验，计算机基础知识扎实，包括不限定于操作系统、计算机网络、数据结构和算法；有写测试的习惯，熟悉单元测试和集成测试；&lt;/li&gt;
&lt;li&gt;熟悉如何开发 RESTful API，对客户端的开发有一定了解者优先；&lt;/li&gt;
&lt;li&gt;熟悉关系型数据库，如 MySQL 等，熟悉 NoSQL，如 Redis 等；&lt;/li&gt;
&lt;li&gt;熟练使用 Git。&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;我们以 API 为主，有不少线上流量，在这里你可以“折腾”百亿级数据库表。我们很早就使用 Docker、Kubernetes 等前沿技术来构建智能化自动化运维体系，帮助实现微服务，摆脱繁复开发和部署流程走上精益之道。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;更多其他招聘职位，欢迎点击 &lt;a href="https://ruby-china.org/topics/33895." title=""&gt;我们是谁？流利说技术团队！&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="关于流利说："&gt;关于流利说：&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;“英语流利说”已经拥有超过 4500 万用户，高居各大教育榜首；&lt;/li&gt;
&lt;li&gt;推出全球第一个 AI 老师“懂你英语”已经拥有了超过 60W 用户；&lt;/li&gt;
&lt;li&gt;流利说的 AI 老师可以三倍提升用户学习英语的效率；&lt;/li&gt;
&lt;li&gt;流利说将为好未来旗下产品提供英语口语评测技术。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="Engineering @ Liulishuo："&gt;Engineering @ Liulishuo：&lt;/h3&gt;
&lt;p&gt;流利说技术团队由 CTO 胡哲人带领，并拥有来自 Google、微信、阿里、百度、点评等国内外知名团队的一流工程师组成，我们有闻名技术圈的实力网红，也有功底扎实的低调扫地僧；有拥有丰富开源项目经验的个人开发者，还有实战经验充分的前创业者。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;我们热爱写测试，是的！&lt;/li&gt;
&lt;li&gt;这可能是创业公司中 code review 最认真的团队，你的代码至少会被一个人 review 过；&lt;/li&gt;
&lt;li&gt;我们喜欢用 Slack 作为沟通、运维、交流的工具，用 Phabricator 进行项目管理；&lt;/li&gt;
&lt;li&gt;我们是一群喜欢研究各种新语言、技术的工程师，比如 Swift、Go、Elixir、Clojure、Rust、React，而且很喜欢把新技术和语言应用到工作当中；&lt;/li&gt;
&lt;li&gt;鼓励开源热衷奉献是我们的态度，团队的 Github 开源项目有近万个 Star，屡上 Github Trending 榜，欢迎一起来添砖加瓦吧 &lt;a href="https://github.com/lingochamp" rel="nofollow" target="_blank"&gt;https://github.com/lingochamp&lt;/a&gt;；&lt;/li&gt;
&lt;li&gt;开拓眼界收获成长，每年国内外顶尖技术大会 如 WWDC、Google I/O、AWS re:Invent, Spark Summit, QCon 总有我们的身影；&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="http://cdn.llscdn.com/fe-static/hr/3872ae1a-df5d-49ce-bb82-aff707c77a5f(1)-uA85PUtf.jpg" title="" alt="image"&gt;&lt;/p&gt;

&lt;p&gt;感兴趣的小伙伴快发送简历至 Ruby China 专用通道 &lt;em&gt;jobs.rubychina@liulishuo.com&lt;/em&gt;！&lt;/p&gt;

&lt;p&gt;我们期待与您在杭州 9 月 16 日、17 日 RubyConf China 2017 现场面谈！&lt;/p&gt;</description>
      <author>tony612</author>
      <pubDate>Fri, 08 Sep 2017 14:30:12 +0800</pubDate>
      <link>https://ruby-china.org/topics/34067</link>
      <guid>https://ruby-china.org/topics/34067</guid>
    </item>
    <item>
      <title>[上海] 我们是谁？ 流利说技术团队！</title>
      <description>&lt;p&gt;&lt;img src="http://cdn.llscdn.com/fe-static/hr/%E6%88%91%E4%BB%AC%E6%98%AF%E8%B0%81-w4OT0jG2.jpg" title="" alt=""&gt;&lt;/p&gt;
&lt;h4 id="我们是流利说技术团队！"&gt;我们是流利说技术团队！&lt;/h4&gt;
&lt;p&gt;流利说的技术团队由 CTO 兼颜值担当胡哲人  Ben 带领，并拥有来自 Google、微信、阿里、百度、点评等国内外知名团队的一流工程师组成，我们有闻名技术圈的&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;/p&gt;

&lt;p&gt;&lt;img src="http://cdn.llscdn.com/fe-static/hr/realcs-6ryfeBMp.jpg" title="" alt=""&gt;
&lt;img src="http://cdn.llscdn.com/fe-static/hr/%E6%88%91%E4%BB%AC%E7%9A%84%E6%97%A5%E5%B8%B8%E6%98%AF%E4%BB%80%E4%B9%88-mjQGDkXl.jpg" title="" alt=""&gt;&lt;/p&gt;
&lt;h4 id="我们是热爱技术、喜欢折腾、拥抱创新的工程师！"&gt;我们是热爱技术、喜欢折腾、拥抱创新的工程师！&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;我们热爱写&lt;strong&gt;测试&lt;/strong&gt;，是的！&lt;/li&gt;
&lt;li&gt;这可能是创业公司中 &lt;strong&gt;code review&lt;/strong&gt; 最认真的团队，你的代码至少会被一个人 review 过；&lt;/li&gt;
&lt;li&gt;我们喜欢用 &lt;strong&gt;Slack&lt;/strong&gt; 作为沟通、运维、交流的工具，用 Phabricator 进行项目管理；&lt;/li&gt;
&lt;li&gt;我们是一群喜欢研究各种新语言、技术的工程师，比如 Swift、Go、Elixir、Clojure、Rust、React，而且很喜欢把&lt;strong&gt;新技术和语言&lt;/strong&gt;应用到工作当中；&lt;/li&gt;
&lt;li&gt;鼓励开源热衷奉献是我们的态度，团队的 Github 开源项目有近万个 Star，屡上 &lt;strong&gt;Github Trending&lt;/strong&gt; 榜，欢迎一起来添砖加瓦吧 &lt;a href="https://github.com/lingochamp" rel="nofollow" target="_blank"&gt;https://github.com/lingochamp&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;开拓眼界收获成长，每年国内外&lt;strong&gt;顶尖技术大会&lt;/strong&gt; 如 WWDC、Google I/O、AWS re:Invent, Spark Summit, QCon 总有我们的身影；&lt;/li&gt;
&lt;li&gt;对了，我们还有多位有趣可爱又不乏实力的&lt;strong&gt;工程师妹子&lt;/strong&gt;们，想一起来 PK 一下吗？&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="http://cdn.llscdn.com/fe-static/hr/%E6%8A%80%E6%9C%AF%E6%B4%BB%E5%8A%A8-DV7wSOeF.jpg" title="" alt=""&gt;
&lt;img src="http://cdn.llscdn.com/fe-static/hr/%E6%88%91%E4%BB%AC%E6%80%8E%E4%B9%88%E7%8E%A9-CS2Atw3d.jpg" title="" alt=""&gt;&lt;/p&gt;
&lt;h4 id="你会玩的我们都有，你期待的更多福利我们超越！"&gt;你会玩的我们都有，你期待的更多福利我们超越！&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;13 薪 + 无上限&lt;strong&gt;年终奖&lt;/strong&gt;，优秀员工出境游计划；&lt;/li&gt;
&lt;li&gt;免费健身房&lt;strong&gt;零距离&lt;/strong&gt;，因此，你即将加入的团队可能是工程师身材最好的团队之一哦，还有羽毛球、乒乓球、攀岩等诸多民间俱乐部等你一起加入；&lt;/li&gt;
&lt;li&gt;营养丰富的&lt;strong&gt;私厨三餐&lt;/strong&gt;+新鲜水果花式零食饮料（夏有冰棍冬有甜汤）；丰富精彩的团建活动，成全你的碧海蓝天；&lt;/li&gt;
&lt;li&gt;弹性工作制，全员 &lt;strong&gt;Mac&lt;/strong&gt; 办公，&lt;strong&gt;液压电动升降桌加人体工学椅&lt;/strong&gt;，让你站着，坐着还是躺着都可以全方位激发你的创造力；&lt;/li&gt;
&lt;li&gt;流利星球一年一度的&lt;a href="https://mp.weixin.qq.com/s?__biz=MzI0NjIzNDkwOA==&amp;amp;tempkey=OTE4X0I3azNCN2JjdWhLWllPeXFKcl9rTkV2YmozcmNaLThhcnRqZjFWZWo5bkJTcjlPdWd6VF9Ld2FIWWhKNllibTNDTjItU3IyWUJPV1VWTUxpeXg1Vy1qNWk2Vk01LVNfb3FaZkpvYXUyUWlCcFVjTGNHcURXZ1ZfMGR0cDFuRW1JdVpyOFFHb2pDdXdQam84TUZ1OUs1d21JR2hDVDlUSVg0UlZNTWd%2Bfg%3D%3D" rel="nofollow" target="_blank" title=""&gt; Hack Week &lt;/a&gt; 是一次创新与脑洞的大碰撞，也是黑科技与灵感的结合。想在即将开始的流利说 2017 年度 Hackathon 中大放异彩？现在加入正是时候！&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="http://cdn.llscdn.com/fe-static/hr/hack%20week-NSRZvMbB.jpg" title="" alt=""&gt;
&lt;img src="http://cdn.llscdn.com/fe-static/hr/%E6%88%91%E4%BB%AC%E5%9C%A8%E6%89%BE%E8%B0%81-wgbJ8NqU.jpg" title="" alt=""&gt;&lt;/p&gt;
&lt;h4 id="我们在寻找更多基础扎实、痴迷产品与技术的小伙伴加入到我们的团队，包含："&gt;我们在寻找更多基础扎实、痴迷产品与技术的小伙伴加入到我们的团队，包含：&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;Web前端工程师&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;基础扎实，数据结构等基础知识掌握牢固，熟练掌握 JavaScript，HTML，CSS，有 MVVM 或 MVC 模式开发经验的优先；&lt;/li&gt;
&lt;li&gt;有纯前端渲染工程 (即前后端开发分离) 经验优先；&lt;/li&gt;
&lt;li&gt;有良好的前端代码风格，开发时有写单元测试经验优先。&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;英语流利说拥有数千万用户，使用 Hybrid 开发模式，部分新的核心交互功能已经全部使用 HTML5 实现，例如英语等级测试和 AI 机器人对话。&lt;/p&gt;

&lt;p&gt;目前公司内大部分 Web 项目都使用纯前端渲染，&lt;a href="https://mp.weixin.qq.com/s?__biz=MzI0NjIzNDkwOA==&amp;amp;tempkey=OTE4X3g3bUY2Z0RVamdVMWorVVBKcl9rTkV2YmozcmNaLThhcnRqZjFWZWo5bkJTcjlPdWd6VF9Ld2FIWWhMQ0YzYXNWbTVfZzRJRkZ6Uk4wRWthQ0t0U0ZtRlhOb0p3YUR5NnVmeTRxZVRvWW9BcWMwMm11ODVfQ0Q3eDhnT1hDOGJtOWlUbUFnU05XSGRHUWFiZE1SaEppMklOdVBZUzY5WGFxSFJVY1F%2Bfg%3D%3D&amp;amp;chksm=694328105e34a1069ee58e9523332604c6ca7c7f4248d1daba912b914f3a8e1ecbf4c70d0966#rd" rel="nofollow" target="_blank" title=""&gt;基于 Webpack 构建&lt;/a&gt;，React 是我们页面渲染框架的标配。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;后端工程师&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; 一年以上 Ruby／Golang 开发经验，计算机基础知识扎实，包括不限定于操作系统、计算机网络、数据结构和算法；&lt;/li&gt;
&lt;li&gt;熟悉关系型数据库，如 MySQL 等，熟悉 NoSQL，如 Redis 等。&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;我们以 API 为主，有不少线上流量，在这里你可以“折腾”百亿级数据库表。&lt;/p&gt;

&lt;p&gt;我们很早就使用 Docker、Kubernetes 等前沿技术来构建智能化自动化运维体系，帮助实现微服务，摆脱繁复开发和部署流程走上精益之道。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;iOS 工程师&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;基础扎实，数据结构等基础知识掌握牢固，有良好的编码风格；&lt;/li&gt;
&lt;li&gt;熟练掌握 Swift 语言，有丰富的 iOS 开发经验，熟练使用 Xcode 及相关调试工具。&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;从 Swift 1.0 开始实践到今天，是国内为数不多的全 Swift 开发的团队；
每年都活跃在 WWDC 的前线，精彩画面欢迎查看👉&lt;a href="https://mp.weixin.qq.com/s?__biz=MzI0NjIzNDkwOA==&amp;amp;tempkey=OTE4X3JhbkhjK2ZVaFYvRUFucDhKcl9rTkV2YmozcmNaLThhcnRqZjFWZWo5bkJTcjlPdWd6VF9Ld2FIWWhJb09EM0E1dHJJdmdBazNhMjNyLTJMbFBnLUtzUFJWRzU2QlhienFRWHBPWUNJQ2NfOUlUV0RxYkFlM3haWGtVLWs1a1l1RVNSN2QxZ0N3OHpoWXptZC1lakNDRzJJRHhtRm9FZEowdkZYUUF%2Bfg%3D%3D&amp;amp;chksm=694328d25e34a1c45e2fe52a466018c53b0fe09ac6de67451f55f3713830d5de3081df9aca74#rd" rel="nofollow" target="_blank" title=""&gt; WWDC 2017 &lt;/a&gt;、&lt;a href="https://mp.weixin.qq.com/s?__biz=MzI0NjIzNDkwOA==&amp;amp;tempkey=OTE4X0RYL3FMSFdGb2Y3RWwvTklKcl9rTkV2YmozcmNaLThhcnRqZjFWZWo5bkJTcjlPdWd6VF9Ld2FIWWhLNFJaYUVzczhEcTJyWU5aemp6VGhob2I0NFpvVTF3TF83ck9nM2FJZjdjbHB1ZHNwdVpCenFwNjBFbVVsWFU5NGhoa3dFZV8zVDNCWUt0OUEwVzNveHExUGVYTHFJenNMZ2tURzJ6RWdPWUF%2Bfg%3D%3D" rel="nofollow" target="_blank" title=""&gt; WWDC2016 &lt;/a&gt; 。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;Android 工程师&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;熟练掌握 Kotlin 和 Java, 熟练使用 Android Studio 及相关调试工具；&lt;/li&gt;
&lt;li&gt;热爱移动 App 开发，对新事物敏感，喜欢探索，有较强的创新意识与责任感。&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;我们一直走在 Android 开发最前沿，紧跟潮流的 Android 团队有些项目已经大规模&lt;a href="https://mp.weixin.qq.com/s?__biz=MzI0NjIzNDkwOA==&amp;amp;tempkey=OTE4X1hiNlc2YjVLd0V4UkFnUVdKcl9rTkV2YmozcmNaLThhcnRqZjFWZWo5bkJTcjlPdWd6VF9Ld2FIWWhJME9CcTNNaktubmpqUk1NSGpreUNURklDOTNjZ0M4M3B3WTltNlZZYlRzTzl0VTRNY2JWcnlEYjNoWU5zVTVTVnFGZV9kMHRvY3RmUGRFc2Y2dFpYOE40THFKdTBodmtzdFp5dlRxSFBqend%2Bfg%3D%3D&amp;amp;chksm=694328ed5e34a1fb00fcdbe5997ab60bb5b690dd90c09e91c52c47459aaca9ab2e9d156996fb#rd" rel="nofollow" target="_blank" title=""&gt;使用 Kotlin 开发&lt;/a&gt;，另外我们项目早已成熟应用组件化架构并且近期也开始研究插件化。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;数据分析师&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;对数据仓库的数据质量保持敏感，并进行分析、监控，发现潜在的问题；&lt;/li&gt;
&lt;li&gt;了解互联网的数据运营与产品决策过程，了解指标的设计和计算；有 SQL 查询经验；&lt;/li&gt;
&lt;li&gt;熟悉 WEB/APP 埋点，有漏斗、行为路径分析经验，掌握 GA/Umeng/Growing IO 等第三方工具原理。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;大数据开发工程师&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;扎实的计算机基础，至少一年大数据平台相关经验；&lt;/li&gt;
&lt;li&gt;熟练掌握如下最少一个组件：Hadoop/Spark/Kafka/Presto 等，具备问题定位/解决能力，有 HBase/Cassandra 等分布式存储相关经验加分，有开源社区贡献的加分，有 AWS 平台经验加分。&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;数据是人工智能的血脉，没错，我们就是人工智能公司的数据部门。&lt;/p&gt;

&lt;p&gt;这里有数千万学习用户的海量数据，数据收集、计算、存储、资源调度、数据应用等各种问题等你来挑战；Hive、&lt;a href="https://mp.weixin.qq.com/s?__biz=MzI0NjIzNDkwOA==&amp;amp;tempkey=OTE4X0NJSE1FUDJJTk5VajRnUldKcl9rTkV2YmozcmNaLThhcnRqZjFWZWo5bkJTcjlPdWd6VF9Ld2FIWWhKc0RBcnVpM2YzallrNWFNQzRFdWFXbGxJVEFFUEhIaDI5VkNmS2xKNjVUYUpSLTg5X0w1bjBKTEFhWnhOMl9QcDZFOHQtc1BvTlg3S2pfdGdBSlJzMUtIM3dMTFdUaVpfaW1Wc3RtYjFKYkF%2Bfg%3D%3D&amp;amp;chksm=69432b9f5e34a28976c6db503b01b63a437e11e0f1c6454dbe38109912ec48b900c83e2bcb35#rd" rel="nofollow" target="_blank" title=""&gt;Spark&lt;/a&gt;、&lt;a href="https://mp.weixin.qq.com/s?__biz=MzI0NjIzNDkwOA==&amp;amp;tempkey=OTE4X0VpdkNFWUN4NWxrWlNkc1JKcl9rTkV2YmozcmNaLThhcnRqZjFWZWo5bkJTcjlPdWd6VF9Ld2FIWWhKS19vNTdfbWNPMUtPU2pKcVh4UExZRjZVUEpqdnAyYmpuQThNOFRxdGdQUlJwN0ktR01NY1h5TzlMUU45STlVb2tUOEgyZjNqY052VGVBM2JJdmhhbDJXRVZ3dFF3bWw2NEwyN05rZ0lxa1F%2Bfg%3D%3D&amp;amp;chksm=69432bac5e34a2ba3dc7af4283531018d204626fe8e8f51784e0f630a76cb50016249265474e#rd" rel="nofollow" target="_blank" title=""&gt;Presto&lt;/a&gt;、Flink 任你挑选。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src="http://cdn.llscdn.com/fe-static/hr/%E4%BD%A0%E6%80%8E%E4%B9%88%E6%9D%A5-E9j0aJI3.jpg" title="" alt=""&gt;&lt;/p&gt;
&lt;h4 id="简历投递方式：jobs@liulishuo.com (标题：申请职位+姓名+来自Ruby China)。现在，推荐你的小伙伴来流利说，还有高额伯乐奖金等你来拿！快加入流利说战队，一起用技术定义教育的未来吧！"&gt;简历投递方式：&lt;strong&gt;jobs@liulishuo.com&lt;/strong&gt; (标题：申请职位 + 姓名 + 来自 Ruby China)。现在，推荐你的小伙伴来流利说，还有高额&lt;a href="http://mp.weixin.qq.com/s/Al8unyfc4mkCxzP7euoJGg" rel="nofollow" target="_blank" title=""&gt;伯乐奖金&lt;/a&gt;等你来拿！快加入流利说战队，一起用技术定义教育的未来吧！&lt;/h4&gt;</description>
      <author>tony612</author>
      <pubDate>Mon, 21 Aug 2017 16:50:42 +0800</pubDate>
      <link>https://ruby-china.org/topics/33895</link>
      <guid>https://ruby-china.org/topics/33895</guid>
    </item>
    <item>
      <title>提议：Ruby 社区应拒绝过度研究前端</title>
      <description>&lt;p&gt;私以为，Ruby 社区如果能好好钻研后端，应该还是有不错的发展。可惜啊，很多人都把有限的生命浪费在前端无限的折腾上了。你说你一后端语言，研究那么多前端干嘛，会点 HTML/CSS/JS/jQuery 就差不多了，React 等重前端的框架就实在没必要研究了，专业的事情交给专业的人去做，我们把后端的事情做专业就已经不错了。&lt;/p&gt;

&lt;p&gt;所以在此我提议，咳咳，Ruby 社区应该专注于后端技术，拒绝过度研究前端，拒绝进入要求有过度前端能力的 Ruby 开发的公司，拒绝招 Ruby 程序员来做过度的前端工作，拒绝在 conf 上听或讲过度的前端话题。&lt;/p&gt;</description>
      <author>tony612</author>
      <pubDate>Sat, 05 Aug 2017 11:21:52 +0800</pubDate>
      <link>https://ruby-china.org/topics/33737</link>
      <guid>https://ruby-china.org/topics/33737</guid>
    </item>
    <item>
      <title>[上海] 2017.7.29 Elixir Meetup</title>
      <description>&lt;p&gt;时间：2017.7.29 周六&lt;/p&gt;

&lt;p&gt;地点：英语流利说办公室（大连路 970 号海上海 9 号楼 2101 室）&lt;/p&gt;

&lt;p&gt;高德地图链接：&lt;a href="http://f.amap.com/54uf6_0971mFu" rel="nofollow" target="_blank"&gt;http://f.amap.com/54uf6_0971mFu&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;1:50~2:00 自我介绍&lt;/p&gt;

&lt;p&gt;2:00~5:00 主题演讲&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;《更 Elixir 风格的函数式 - 记述一次重构经历》-- &lt;a href="https://github.com/vangie" rel="nofollow" target="_blank" title=""&gt;杜万&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;《Ecto schema 的进阶玩法》-- &lt;a href="https://github.com/darkbaby123" rel="nofollow" target="_blank" title=""&gt;陈璋&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;《CouchDB: Stay Relaxed》-- &lt;a href="https://github.com/jiangplus" rel="nofollow" target="_blank" title=""&gt;jiang&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;5:00~6:00 自由讨论&lt;/p&gt;

&lt;p&gt;PS： &lt;/p&gt;

&lt;p&gt;活动不需要报名，但你可以加入 meetup 来关注我们的活动 &lt;a href="https://www.meetup.com/Elixir-Shanghai/" rel="nofollow" target="_blank"&gt;https://www.meetup.com/Elixir-Shanghai/&lt;/a&gt;&lt;/p&gt;</description>
      <author>tony612</author>
      <pubDate>Mon, 24 Jul 2017 12:23:51 +0800</pubDate>
      <link>https://ruby-china.org/topics/33602</link>
      <guid>https://ruby-china.org/topics/33602</guid>
    </item>
    <item>
      <title>[上海 英语流利说] 2017 伯乐推荐有豪奖</title>
      <description>&lt;p&gt;英语流利说是一家全球领先的 AI 驱动的教育科技公司，由中央“千人计划”专家、普斯林顿大学计算机博士、Google 前产品经理王翌和胡哲人、林晖在 2012 年 9 月共同创立。英语流利说拥有一支业内领先的人工智能科学家团队，致力于用 AI 技术和大数据提升学习效率，实现教育的个性化和公平性。&lt;/p&gt;

&lt;p&gt;经过四年多的积累，移动端同名 APP“英语流利说”的注册用户数已超过 4000 万人，在语言教育行业高居第一，被苹果公司评为“年度精选 App”和“App Store 精华”。“英语流利说”拥有全球最大的中国人英语语音数据库，领先的英语口语评测引擎，以及中国最活跃的语言学习社区。2016 年 7 月，推出历时两年斥巨资打造的世界领先的人工智能老师——“懂你英语”，为每个用户提供个性化的学习内容和计划，把英语学习的效率提高了 3 倍，被业界称为是一次语言学习的革命。&lt;/p&gt;

&lt;p&gt;目前，英语流利说已完成 B 轮投资，前几轮投资方分别为 IDG、GGV、挚信资本等知名 VC。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2017/8a95645e-5654-4475-96a1-36d9023698af.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;认真看完文章，会有 5 个人拿到 20000 元，5 个人拿到 10000 元。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;总之，很多钱。&lt;/p&gt;

&lt;p&gt;为什么我们英语流利说要撒钱呢？这要从下面这张照片说起。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2017/16082986-6ddf-407d-9bfa-914bcaf05aec.png" width="500px" alt=""&gt;&lt;/p&gt;

&lt;p&gt;他应该是我这辈子见过的最大学霸了，编程，营销，管理，演讲，跳舞，没有他不会的。&lt;/p&gt;

&lt;p&gt;作为金牛座的他，平时是一位特别勤劳节俭的人。&lt;/p&gt;

&lt;p&gt;身为全上海最牛创业公司的 CEO，身价少说几个亿美金吧，竟然每天在高峰时期挤一个小时地铁穿越半个上海来上班，连个办公室都没有，一小破办公桌，挤在一个不起眼的角落。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2017/88f32fb8-18e6-44c5-b1d9-44d92d46d6ee.jpeg!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;但是公司里的人都知道，虽然他对自己节俭，对员工，该有的福利全都是杠杠的。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;包三餐&lt;/em&gt;。专业的厨师阿姨每天把饭做好送到你身边，每天都能享受妈妈的味道。&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;包零食水果，各种口味任你挑&lt;/em&gt;。每一个新同学最该担心的，不是无法快速融入，而是自己的体重。&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;全员 Mac 办公，人体工学椅&lt;/em&gt;。更高端的配置才能全方位激发你的创造力和小宇宙啊。&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;13 薪 + 额外年终奖&lt;/em&gt;。不吹奖金拿到手软，至少你的付出和价值对应公平的回报和收获。&lt;/li&gt;
&lt;li&gt;&lt;em&gt;各种团建 + 每周 TGIF 活动。&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;整天坐着上班觉得无聊星球人，我们的口号是”Work hard, play harder!"&lt;/p&gt;

&lt;p&gt;而这次，为了招贤纳士，他更是批下重金招揽 25 个岗位的优秀人才。&lt;/p&gt;

&lt;p&gt;只要你推荐以下&lt;em&gt;5 个岗位&lt;/em&gt;的人才给我们，每人狂发*两万大洋！&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;悬赏 20000 元&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;资深用户产品专家&lt;/strong&gt;。带领产品团队负责英语流利说主 App 产品设计与迭代&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;资深语音合成专家&lt;/strong&gt;。带领团队搭建流利说语音合成系统，负责其算法研究与优化&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;资深 NLP 专家－对话系统&lt;/strong&gt;。深入研究对话系统领域算法与应用&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;资深移动开发工程师（iOS ／ Android）&lt;/strong&gt;。负责流利说系列移动 App 的开发&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;语言测评专家&lt;/strong&gt;。语言评测相关专业硕士以上学历，语音评估与测试领域专家&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="我们的 CTO （首席技术官），胡哲人，也要招人"&gt;我们的 CTO（首席技术官），胡哲人，也要招人&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2017/e4a3f24e-6ed9-4f96-9793-4352ff944747.jpg" width="500px" alt=""&gt;&lt;/p&gt;

&lt;p&gt;交大，亚利桑那大学，Quantcast。&lt;/p&gt;

&lt;p&gt;前后端开发，大数据架构，我们 CTO 样样精通。&lt;/p&gt;

&lt;p&gt;在他的带领下，我们流利说里的功能，简直是要啥有啥：跟读打分，影视配音，互动贴吧，歌曲电台，视频直播，youtube 视频精选，再加上一个一劳永逸解决所有人英语学习问题的“懂你英语”。&lt;/p&gt;

&lt;p&gt;这么多功能，全集合在一个 app 里，愣是没有 bug，真是...&lt;/p&gt;

&lt;p&gt;好吧，还是有 bug 的，所以我们才要招人啊～&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;悬赏 10000 元&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;后端工程师&lt;/strong&gt;。负责流利说后端服务的开发与优化&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;前端工程师&lt;/strong&gt;。负责流利说前端工程优化与开发&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="我们的首席科学家，林晖，也要招人"&gt;我们的首席科学家，林晖，也要招人&lt;/h3&gt;
&lt;p&gt;清华，华盛顿大学，谷歌科学家，语音识别，自然语言处理，机器学习，大数据挖掘。&lt;/p&gt;

&lt;p&gt;这些高大上的名词你可能听不懂，但是“人工智能”你应该听说过吧，“阿法狗”应该听说过吧。&lt;/p&gt;

&lt;p&gt;研究“阿法狗”出来的 Deep Mind 实验室唯一的中国科学家，孙怿博士，目前正在林晖麾下工作。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2017/d7adaafa-e0ee-4be9-bc60-7474ba5da774.jpeg!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;（右一：流利说首席科学家林晖，左一：流利说首席算法工程师孙怿）&lt;/p&gt;

&lt;p&gt;没错，首席科学家带领的算法团队，让英语流利说有了一颗强大的人工智能之芯。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;悬赏 10000，求推荐下面三个算法人才：&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;机器学习算法工程师&lt;/strong&gt;。负责前沿的机器学习算法研究与实现&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;自然语言处理工程师（上海、杭州）&lt;/strong&gt;。负责知识图谱、语义语法、检索、对话等多个 NLP 领域的算法研究与实现&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;语音识别工程师&lt;/strong&gt;。负责语音识别相关的算法研究与实现&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;如果你有上面的工程师朋友，把这篇文章转给他，你就能躺着赚一万。&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;最好的人才，会被最好的文案吸引，来到最好的公司，和最好的同事工作。
我相信，经过我上面的介绍，你应该感觉到了英语流利说的不同。 
我们有强大的技术壁垒，聪明的人工智能之芯，彪悍的商业化团队。 
我们要满足的，是全中国每年几亿人次的英语学习需求。
我们要用互联网和人工智能的力量，把学会英语耗费的时间，从十几年变成 1 年；把花费的金钱，从几万降到 1 千。&lt;/p&gt;

&lt;p&gt;事实证明，我们就在这个时代最大的风口上。我们已经赚了很多很多很多钱，所以今天才敢来撒钱；我们以后会赚更多更多更多钱，所以请大家赶快上船。&lt;/p&gt;

&lt;p&gt;最后，和大家分享一句话，来自我非常喜欢的 Facebook 首席运营官雪莉·桑德伯格：&lt;/p&gt;

&lt;p&gt;If you are offered a seat on a rocket ship, don't ask what seat, just get on it.&lt;/p&gt;

&lt;p&gt;现在，流利说这艘火箭飞船已经点火...&lt;/p&gt;

&lt;p&gt;Just get on it! Or help your friend, get on it!&lt;/p&gt;
&lt;h2 id="如何推荐？"&gt;如何推荐？&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;快把你朋友的简历，发到 jobs@liulishuo.com，标题注明“伯乐推荐＋职位＋被推荐的人名 + 来自 Ruby China”。ta 入职三个月后，你就能躺赚最高两万哦~&lt;/li&gt;
&lt;li&gt;请在邮件正文中注明你的联系方式，方便我们通知你领奖~&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;注：以上所有奖金为税前，活动截止日期为 2017 年 9 月 1 日。最终解释权归英语流利说人力资源部所有。&lt;/em&gt;&lt;/p&gt;</description>
      <author>tony612</author>
      <pubDate>Tue, 20 Jun 2017 16:14:30 +0800</pubDate>
      <link>https://ruby-china.org/topics/33268</link>
      <guid>https://ruby-china.org/topics/33268</guid>
    </item>
    <item>
      <title>[上海] 2017.5.21 Elixir Meetup</title>
      <description>&lt;p&gt;时间：2017.5.21（&lt;strong&gt;周日&lt;/strong&gt;）&lt;/p&gt;

&lt;p&gt;地点：&lt;/p&gt;

&lt;p&gt;英语流利说办公室（大连路 970 号海上海 9 号楼 2101 室）&lt;/p&gt;

&lt;p&gt;高德地图链接：&lt;a href="http://f.amap.com/54uf6_0971mFu" rel="nofollow" target="_blank"&gt;http://f.amap.com/54uf6_0971mFu&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;内容：&lt;/p&gt;

&lt;p&gt;2:00~2:20 自我介绍&lt;/p&gt;

&lt;p&gt;2:20~5:00 主题演讲&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.elixirconf.eu/" rel="nofollow" target="_blank" title=""&gt;ElixirConfEU&lt;/a&gt; Recap -- Lou Xun (&lt;a href="https://github.com/aquarhead" rel="nofollow" target="_blank" title=""&gt;aquarhead&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Erlang 在 RDS 业务的实践和挑战 -- 余锋（阿里褚霸）&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Elixir macro 从入门到实践 -- Tony Han (&lt;a href="https://github.com/tony612" rel="nofollow" target="_blank" title=""&gt;tony612&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Continuous Delivery Gitlab+Elixir -- Adrien&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;5:00~6:00 自由讨论&lt;/p&gt;

&lt;p&gt;PS： &lt;/p&gt;

&lt;p&gt;活动不需要报名，但你可以加入 meetup 来关注我们的活动 &lt;a href="https://www.meetup.com/Elixir-Shanghai/" rel="nofollow" target="_blank"&gt;https://www.meetup.com/Elixir-Shanghai/&lt;/a&gt;&lt;/p&gt;</description>
      <author>tony612</author>
      <pubDate>Wed, 10 May 2017 10:32:48 +0800</pubDate>
      <link>https://ruby-china.org/topics/32964</link>
      <guid>https://ruby-china.org/topics/32964</guid>
    </item>
    <item>
      <title>Ruby 4.0: To Infinity and Beyond</title>
      <description>&lt;p&gt;&lt;a href="https://speakerdeck.com/bbatsov/ruby-4-dot-0-to-infinity-and-beyond-rubyconf-dot-by-2017" rel="nofollow" target="_blank"&gt;https://speakerdeck.com/bbatsov/ruby-4-dot-0-to-infinity-and-beyond-rubyconf-dot-by-2017&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;这是 &lt;a href="https://github.com/bbatsov/rubocop" rel="nofollow" target="_blank" title=""&gt;Rubocop&lt;/a&gt; 作者 Bozhidar Batsov 在 &lt;a href="http://rubyconference.by/" rel="nofollow" target="_blank" title=""&gt;RubyConf.by&lt;/a&gt; 2017 的演讲 slides（视频应该还没出）。虽然有点标题党，但内容还是很有意思的。回顾了 Ruby 近期的发展，“展望”了之后的 3.0，并介绍他心中的”Ruby 4.0“应该是怎样的，也借此表达了他对 Ruby 这门已经足够成熟的语言的一些看法。&lt;/p&gt;

&lt;p&gt;不管你是不是在用 Ruby，用了多久，是爱是恨，我想这个分享都值得一看。&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Update：&lt;/em&gt; 9 楼有贴这个演讲者在其他 conf 的同一主题的视频，可以先看一下&lt;/p&gt;</description>
      <author>tony612</author>
      <pubDate>Tue, 04 Apr 2017 20:56:46 +0800</pubDate>
      <link>https://ruby-china.org/topics/32690</link>
      <guid>https://ruby-china.org/topics/32690</guid>
    </item>
    <item>
      <title>[上海] 2017年3月25日 Elixir Meetup</title>
      <description>&lt;p&gt;时间：2017.3.25（周六）&lt;/p&gt;

&lt;p&gt;地点：&lt;/p&gt;

&lt;p&gt;英语流利说办公室（大连路 970 号海上海 9 号楼 2101 室）&lt;/p&gt;

&lt;p&gt;高德地图链接： &lt;a href="http://f.amap.com/54uf6_0971mFu" rel="nofollow" target="_blank"&gt;http://f.amap.com/54uf6_0971mFu&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;内容：&lt;/p&gt;

&lt;p&gt;2:00~2:20 自我介绍&lt;/p&gt;

&lt;p&gt;2:20~5:00 主题演讲&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;HTTP/2 概览 -- &lt;a href="https://github.com/jiangplus" rel="nofollow" target="_blank" title=""&gt;jiang&lt;/a&gt; &lt;a href="/jiang_plus" class="user-mention" title="@jiang_plus"&gt;&lt;i&gt;@&lt;/i&gt;jiang_plus&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;如何用 Elixir 写简单的爬虫 -- &lt;a href="https://github.com/teddy1004" rel="nofollow" target="_blank" title=""&gt;teddy&lt;/a&gt; &lt;a href="/teddy_1004" class="user-mention" title="@teddy_1004"&gt;&lt;i&gt;@&lt;/i&gt;teddy_1004&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;用 Elixir + NIF(Rust) 构建 计算&amp;amp;IO 双密集型应用 -- &lt;a href="https://github.com/doomsplayer" rel="nofollow" target="_blank" title=""&gt;doomsplayer&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;5:00~6:00 自由讨论&lt;/p&gt;

&lt;p&gt;PS： &lt;/p&gt;

&lt;p&gt;活动不需要报名，但你可以加入 meetup 来关注我们的活动 &lt;a href="https://www.meetup.com/Elixir-Shanghai/" rel="nofollow" target="_blank"&gt;https://www.meetup.com/Elixir-Shanghai/&lt;/a&gt;&lt;/p&gt;</description>
      <author>tony612</author>
      <pubDate>Wed, 22 Mar 2017 13:02:08 +0800</pubDate>
      <link>https://ruby-china.org/topics/32603</link>
      <guid>https://ruby-china.org/topics/32603</guid>
    </item>
    <item>
      <title>[上海] 2017 英语流利说后端团队招聘</title>
      <description>&lt;p&gt;&lt;strong&gt;英语流利说&lt;/strong&gt;（www.liulishuo.com），是一家全球领先的 AI 驱动的教育科技公司，我们拥有一支业内领先的人工智能科学家团队，致力于用 AI 技术和大数据提升学习效率，实现教育的个性化和公平性。&lt;/p&gt;

&lt;p&gt;经过四年多的积累，移动端同名 APP“英语流利说”的注册用户数已超过 4000 万人，在语言教育行业高居第一。“英语流利说”拥有全球最大的中国人英语语音数据库，领先的英语口语评测引擎，以及中国最活跃的语言学习社区。&lt;/p&gt;

&lt;p&gt;2016 年被业界称作“AI”元年，近日，由互联网和 IT 行业权威媒体《互联网周刊》与 eNET 联合发布的“2016 中国人工智能企业 Top100”榜单正式揭晓，英语流利说成为智能教育领域唯一进入 Top50 排名的企业。&lt;/p&gt;

&lt;p&gt;感谢 RubyChina 提供的平台，在过去的时间里，我们通过 RubyChina 找到了后端团队的几位大将&lt;a href="/tony612" class="user-mention" title="@tony612"&gt;&lt;i&gt;@&lt;/i&gt;tony612&lt;/a&gt; &lt;a href="/tzwm" class="user-mention" title="@tzwm"&gt;&lt;i&gt;@&lt;/i&gt;tzwm&lt;/a&gt;  &lt;a href="/teddy_1004" class="user-mention" title="@teddy_1004"&gt;&lt;i&gt;@&lt;/i&gt;teddy_1004&lt;/a&gt;  &lt;a href="/scorix" class="user-mention" title="@scorix"&gt;&lt;i&gt;@&lt;/i&gt;scorix&lt;/a&gt;  以及 17 年新加入的女将&lt;a href="/Kaiying" class="user-mention" title="@Kaiying"&gt;&lt;i&gt;@&lt;/i&gt;Kaiying&lt;/a&gt;。新的一年里我们将继续寻找志同道合的伙伴加入到流利说的后端团队中来。&lt;strong&gt;受激励，有价值，被尊重，能成长&lt;/strong&gt;，欢迎自荐及推荐你身边的伙伴！&lt;/p&gt;
&lt;h2 id="后端 / Ruby 工程师"&gt;后端 / Ruby 工程师&lt;/h2&gt;
&lt;p&gt;岗位职责：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; 直接参与公司核心业务后端功能的架构设计与优化、应用开发与测试；&lt;/li&gt;
&lt;li&gt;&amp;nbsp;解决服务、产品建设中遇到的问题，与团队一起攻克难题，不断提升系统性能。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&amp;nbsp;
岗位要求：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;计算机基础知识扎实，包括不限定于操作系统、计算机网络、数据结构和算法；&lt;/li&gt;
&lt;li&gt;熟练掌握至少一门语言，Ruby、Golang 等优先；&lt;/li&gt;
&lt;li&gt;有写测试的习惯，熟悉单元测试和集成测试；&lt;/li&gt;
&lt;li&gt;熟悉如何开发 RESTful API，对客户端的开发有一定了解者优先；&lt;/li&gt;
&lt;li&gt;熟悉关系型数据库，如 MySQL 等，熟悉 NoSQL，如 Redis 等；&lt;/li&gt;
&lt;li&gt;&amp;nbsp;熟练使用 Git。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="日常@流利说"&gt;日常@流利说&lt;/h2&gt;
&lt;p&gt;免费的早中晚三餐不会把你吃胖，因为我们还有免费的健身！这可能是工程师身材最棒的一家公司。
&lt;img src="http://omu1ug0m6.bkt.clouddn.com/IMG_4682.JPG" title="" alt="phi-photo"&gt;&lt;/p&gt;

&lt;p&gt;一年一度少不了的 HACK WEEK. NEVER STOP HACKING.
&lt;img src="http://omu1ug0m6.bkt.clouddn.com/IMG_7233.JPG" title="" alt="phi-photo"&gt;
&lt;img src="http://omu1ug0m6.bkt.clouddn.com/engineering%20team.jpg" title="" alt="phi-photo"&gt;&lt;/p&gt;

&lt;p&gt;参与国内外的技术会议，再来一波酷酷的合影！
&lt;img src="http://omu1ug0m6.bkt.clouddn.com/aws.png" title="" alt="phi-photo"&gt;
&lt;img src="http://omu1ug0m6.bkt.clouddn.com/ruby.png" title="" alt="phi-photo"&gt;&lt;/p&gt;

&lt;p&gt;丰富的团建活动，今年出境游去哪儿？
&lt;img src="http://omu1ug0m6.bkt.clouddn.com/%E6%B2%99%E5%B7%B4%E8%A1%8C.jpg" title="" alt="phi-photo"&gt;
&lt;img src="http://omu1ug0m6.bkt.clouddn.com/team_building_1.JPG" title="" alt="phi-photo"&gt;&lt;/p&gt;

&lt;p&gt;感兴趣的伙伴请通过  &lt;strong&gt;jobs.rubychina###liulishuo.com&lt;/strong&gt; 联系我们！翘首以盼你的简历（期待脸～～）
&lt;img src="http://omu1ug0m6.bkt.clouddn.com/IMG_4684.JPG" title="" alt="phi-photo"&gt;&lt;/p&gt;</description>
      <author>tony612</author>
      <pubDate>Wed, 15 Mar 2017 13:08:56 +0800</pubDate>
      <link>https://ruby-china.org/topics/32535</link>
      <guid>https://ruby-china.org/topics/32535</guid>
    </item>
    <item>
      <title>使用 Elixir 的中国公司</title>
      <description>&lt;p&gt;创建了一个 repo 来收集在生产环境使用 Elixir 的中国公司列表 &lt;a href="https://github.com/elixir-cn/elixir-china-companies" rel="nofollow" target="_blank"&gt;https://github.com/elixir-cn/elixir-china-companies&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;主要是受 &lt;a href="https://github.com/doomspork/elixir-companies" rel="nofollow" target="_blank"&gt;https://github.com/doomspork/elixir-companies&lt;/a&gt; 的启发。但这个主要是国外的，对于国内的开发者来讲，参考意义有限，大家估计还是想看一下中国的使用情况，以及找到一些公司。&lt;/p&gt;

&lt;p&gt;欢迎关注和分享。自己公司或者知道其他公司在使用的，欢迎提 PR 来添加。&lt;/p&gt;</description>
      <author>tony612</author>
      <pubDate>Sat, 21 Jan 2017 22:30:56 +0800</pubDate>
      <link>https://ruby-china.org/topics/32189</link>
      <guid>https://ruby-china.org/topics/32189</guid>
    </item>
    <item>
      <title>[上海｜英语流利说] 为后端工程师而来</title>
      <description>&lt;h2 id="英语流利说在做什么？"&gt;&lt;strong&gt;英语流利说在做什么？&lt;/strong&gt;&lt;/h2&gt;
&lt;hr&gt;

&lt;p&gt;英语流利说 (&lt;a href="http://www.liulishuo.com" rel="nofollow" target="_blank" title=""&gt;www.liulishuo.com&lt;/a&gt;) 希望通过科技改变人们的生活方式：无论你在世界的哪一个角落，通过“英语流利说”，可以 get 与地球另一端的小伙伴交流的技能，能够开口流利说英语！&lt;/p&gt;

&lt;p&gt;我们是中国大陆第一支获得全球最知名互联网创业孵化器 Y-Combinator 录取的团队，获得中美顶级风投公司 IDG, GGV, TBP 等投资，2015 年已完成数千万美元 B 轮融资。目前，“英语流利说”的用户已达将近 4000 万，是移动端最大的语言学习产品之一。&lt;/p&gt;

&lt;p&gt;2016 年 7 月 6 日，流利说团队历时两年，斥资千万打造的“懂你英语”的发布会在上海举办，“懂你英语”是全球首个基于智能 AI 技术的自适应移动英语课堂。11 月，基于深度神经网络的雅思口语模考软件“雅思流利说”产品上线，这是继“懂你英语”后流利说团队打造的又一款黑科技产品。
&lt;img src="http://7xiegl.com1.z0.glb.clouddn.com/lls_1.jpg" title="" alt="dongni-photo"&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;2016 年 7 月 6 日，“懂你英语”发布会举办现场&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;每一天，”流利说“团队都在更快地成长，我们在全球范围内寻找优秀的有技术抱负的伙伴加入流利说。这一次，为后端团队招兵买马而来！&lt;/p&gt;
&lt;h2 id="流利说的后端团队在做什么？"&gt;&lt;strong&gt;流利说的后端团队在做什么？&lt;/strong&gt;&lt;/h2&gt;
&lt;hr&gt;

&lt;p&gt;&lt;strong&gt;我们的后端团队来自很不同的背景：&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;有在国内名校毕业，基础扎实动手能力优秀的；有从大学开始就泡在开源社区，虽然是应届生，但是实际开发能力高人一等的；有没有念过大学的，但凭着对编程的热情，自学成为高手的；有自己创业多次的，当然也有在 BAT、携程、Google、eBay、Hulu 等知名互联网公司工作过的。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;我们的交流协作方式：&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;我们喜欢用 Slack 作为沟通、运维、交流的工具，用 Phabricator 作为 Code Review，项目管理和内部 Wiki。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;我们面临的一些有趣的挑战：&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;技术选型：&lt;/strong&gt;我们需要去平衡不同的技术选型，以同时支撑免费流量产品和高付费的商业产品。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;大数据：&lt;/strong&gt;我们有全世界最大的中国人说英语的语料，面对四千万用户数百万小时的语音，如何更高效地处理和利用这些数据？&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;防欺诈：&lt;/strong&gt;作为移动端最大的语言学习社区之一，互联网上的 spammer 大军也找上门，从简单的文字到图片，从刷社区到刷榜单，如何准确地鉴别这些欺诈行为同时又不误伤真实用户。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;机器学习基础设施：&lt;/strong&gt;“流利说”的几款产品中都充满了机器学习和人工智能算法的身影，一个良好的基于大数据的机器学习基础设置能极大的提高算法的迭代速度。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;工程师内部基础设施：&lt;/strong&gt;尽可能地自动化一切，并且要做到 infrastructure as code，提高工程师的效率，从而提高服务的稳定性。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;活跃于国内外的技术会议：&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ruby Conf China, Rails Conf, Spark Summit, AWS re:Invent, RubyKaigi, QCon&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;我们对开源的态度：&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;鼓励开源，热衷奉献。屡上 Github Trending 榜，来为我们的开源项目添砖加瓦吧！
&lt;a href="https://github.com/lingochamp" rel="nofollow" target="_blank"&gt;https://github.com/lingochamp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://7xiegl.com1.z0.glb.clouddn.com/WechatIMG1100.jpeg" title="" alt="dongni-photo"&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;2016 年 9 月举办的 RubyKaigi 大会上，流利说后端团队与 Ruby 创始人 Matz 合影&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://7xiegl.com1.z0.glb.clouddn.com/WechatIMG1102.jpeg" title="" alt="dongni-photo"&gt;
&lt;em&gt;2016 年 12 月，流利说后端团队参加 AWS 在拉斯维加斯举办的 re:Invent 大会&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="我们在找寻什么样的后端队友？"&gt;&lt;strong&gt;我们在找寻什么样的后端队友？&lt;/strong&gt;&lt;/h2&gt;
&lt;hr&gt;

&lt;p&gt;计算机基础知识扎实，包括不限定于操作系统、计算机网络、数据结构和算法；&lt;/p&gt;

&lt;p&gt;熟练掌握至少一门编程语言，语言种类不限，Ruby, Python, Golang, Java, C/C++ 优先；&lt;/p&gt;

&lt;p&gt;有写测试的习惯，熟悉单元测试和集成测试；&lt;/p&gt;

&lt;p&gt;熟悉如何开发 RESTful API，最好对客户端的开发也有一定了解；&lt;/p&gt;

&lt;p&gt;熟悉关系型数据库，如 MySQL 等，熟悉 NoSQL，如 Redis 等；&lt;/p&gt;

&lt;p&gt;熟练使用 Git。&lt;/p&gt;

&lt;p&gt;最后，&lt;strong&gt;Talk is cheap, show me the code.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="我们如何提升工作中的幸福感？"&gt;&lt;strong&gt;我们如何提升工作中的幸福感？&lt;/strong&gt;&lt;/h2&gt;
&lt;hr&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;中外帅哥美女，弹性工作时间，全员 Mac 办公与人体工学椅，全方位激发你的创造力；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;除了一年一度的 HACK WEEK 可以脑洞全开，我们还有每周的 TGIF 来展现自己的风采；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;学习材料、参会费用，都可以报销，学习和分享在这里被大大鼓励；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;美味营养的私厨三餐，水果零食饮料不限量供应，胃好你才好！&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;上班时间去健个身？完全没问题。免费上班健身与年度体检，关注你的身体；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;一年一度的全员出境游，丰富多彩的团队建设，我们的口号是"Work hard, play harder!"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;你还有更多想法？加入我们的 Life Be Happy 计划更多建议等你来提！
&lt;img src="http://7xiegl.com1.z0.glb.clouddn.com/WechatIMG1167.jpeg" title="" alt="hackweek"&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="其他在招岗位有哪些？"&gt;&lt;strong&gt;其他在招岗位有哪些？&lt;/strong&gt;&lt;/h2&gt;
&lt;hr&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.liulishuo.com/hiringDetail?entity=engineer&amp;amp;job=%E8%B5%84%E6%B7%B1%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86%E7%A0%94%E7%A9%B6%E5%91%98%EF%BC%8CNLP&amp;amp;id=75" rel="nofollow" target="_blank" title=""&gt;资深自然语言处理研究员&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.liulishuo.com/hiringDetail?entity=engineer&amp;amp;job=%E8%B5%84%E6%B7%B1%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%AB%E7%A0%94%E7%A9%B6%E5%91%98%EF%BC%8CASR&amp;amp;id=74" rel="nofollow" target="_blank" title=""&gt;资深语音识别研究员&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.liulishuo.com/hiringDetail?entity=engineer&amp;amp;job=C++%E5%B7%A5%E7%A8%8B%E5%B8%88&amp;amp;id=68" rel="nofollow" target="_blank" title=""&gt;C++ 工程师&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.liulishuo.com/hiringDetail?entity=engineer&amp;amp;job=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E5%B8%88&amp;amp;id=82" rel="nofollow" target="_blank" title=""&gt;数据分析师&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.liulishuo.com/hiringDetail?entity=engineer&amp;amp;job=ETL%20%E5%B7%A5%E7%A8%8B%E5%B8%88&amp;amp;id=79" rel="nofollow" target="_blank" title=""&gt;ETL 工程师&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.liulishuo.com/hiringDetail?entity=engineer&amp;amp;job=iOS%20%E5%B7%A5%E7%A8%8B%E5%B8%88&amp;amp;id=9" rel="nofollow" target="_blank" title=""&gt;iOS 开发工程师&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.liulishuo.com/hiringDetail?entity=engineer&amp;amp;job=%E8%B5%84%E6%B7%B1%20Android%20%E5%B7%A5%E7%A8%8B%E5%B8%88&amp;amp;id=85" rel="nofollow" target="_blank" title=""&gt;Android 开发工程师&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.liulishuo.com/hiringDetail?entity=engineer&amp;amp;job=%E5%89%8D%E7%AB%AF%E5%B7%A5%E7%A8%8B%E5%B8%88&amp;amp;id=2" rel="nofollow" target="_blank" title=""&gt;前端开发工程师&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;戳链接看更多岗位介绍：&lt;a href="http://www.liulishuo.com/joinus" rel="nofollow" target="_blank"&gt;http://www.liulishuo.com/joinus&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="联系我们吧"&gt;&lt;strong&gt;联系我们吧&lt;/strong&gt;&lt;/h2&gt;
&lt;hr&gt;

&lt;p&gt;感兴趣请发送简历至 Ruby China 专用通道：jobs.rubychina###liulishuo.com 与我们聊聊！&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;年后入职也可以有！&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;年后入职也可以有！&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;年后入职也可以有！&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;欢迎关注流利说技术团队微信公共号，我们会记录我们所面临过的一些挑战以及在解决问题中的一些思考，也许借此你能更了解我们为什么会对当前所在打造的东西如此兴奋，真心期待志同道合的你加入！
&lt;img src="https://l.ruby-china.com/photo/2016/8caee45761ea46eaae1e881befd20fee.jpg!large" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>tony612</author>
      <pubDate>Tue, 20 Dec 2016 16:08:38 +0800</pubDate>
      <link>https://ruby-china.org/topics/31946</link>
      <guid>https://ruby-china.org/topics/31946</guid>
    </item>
    <item>
      <title>[上海] 2016年11月 Elixir Meetup</title>
      <description>&lt;p&gt;&lt;a href="https://www.meetup.com/Elixir-Shanghai/events/234375678/" rel="nofollow" target="_blank"&gt;https://www.meetup.com/Elixir-Shanghai/events/234375678/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;时间&lt;/strong&gt;：2016.11.26（周六）&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;地点&lt;/strong&gt;：英语流利说办公室（大连路 970 号海上海 9 号楼 2101 室）&lt;/p&gt;

&lt;p&gt;2:00~2:20 自我介绍&lt;/p&gt;

&lt;p&gt;2:20~5:00 主题演讲&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Elixir 从开发到发布遇到的坑 -- goofansu&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;clojurescript &amp;amp; clojure 初识 -- jiyinyiyong&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;（欢迎给主题啊）&lt;/p&gt;

&lt;p&gt;5:00~6:00 自由讨论&lt;/p&gt;</description>
      <author>tony612</author>
      <pubDate>Thu, 24 Nov 2016 01:11:59 +0800</pubDate>
      <link>https://ruby-china.org/topics/31678</link>
      <guid>https://ruby-china.org/topics/31678</guid>
    </item>
    <item>
      <title>[上海]“英语流利说” 团队招聘 Ruby 后端、移动端开发等工程师岗位</title>
      <description>&lt;h2 id="没错，这是英语流利说的招聘帖…"&gt;没错，这是英语流利说的招聘帖…&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2016/8c3b4a809582d59990be4ed1d3f18a9b.png!large" title="" alt="introduction"&gt;&lt;/p&gt;
&lt;h2 id="急招岗位需求"&gt;&lt;strong&gt;急招岗位需求&lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;（资深）Ruby 工程师（20K-30k）&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ruby@流利说：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;我们以 API 为主，但我们非常鼓励全栈，只要你想，可以有很多写前端的机会（比如 React）&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;我们有亿量级数据库表给你"折腾"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;你可能会被需要用合适的技术来构建我们自己的工具&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;我们很早就开始使用 云服务，此外广泛使用 Ansible、Docker 等技术、工具来简化我们的运维工作&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;【我们期望你】:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;至少一年以上 Ruby 后端开发经验，比如 Rails、Sinatra 等&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;熟悉如何用测试辅助开发，以及一些常见的测试工具，如 RSpec 等&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;熟悉如何开发 RESTful API，最好对客户端的开发也有一定了解&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;熟悉关系型数据库，如 MySQL 等，熟悉 NoSQL，如 Redis 等&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;熟悉如何自动化部署 Ruby/Rails 项目&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;熟练使用 Git&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;资深 iOS／Android 工程师（20K-35K）&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;与移动开发界的实力网红和扫地高僧们一起工作，攻坚技术难点，共同成长。&lt;/p&gt;

&lt;p&gt;【我们期望你】：热爱新技术，热爱移动开发，有完整的移动端项目开发经验，写得了业务搭得起架构，更有技术追求。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Web 前端开发工程师（18K-30K）&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;你将加入到一个使用 Hybrid 模式进行开发的团队，践行最前沿的 Web 前端技术。&lt;/p&gt;

&lt;p&gt;【我们期望你】：基础知识扎实，对新技术敏感，拥有独立完整的前端工程经验和清风拂面的代码风格。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;资深 AI/机器学习工程师（20K-50K）&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;和来自 Google 的前科学家们一起研发以深度学习为代表的人工智能算法，真正让科技帮助用户，让教育变的轻松、高效。我们的宝贵财富－海量用户与行为数据，等你来挖掘。&lt;/p&gt;

&lt;p&gt;【我们期望你】：算法基础扎实，热爱研究前沿的机器学习／人工智能算法。有智能系统开发或大规模数据处理经验优先。&lt;/p&gt;
&lt;h2 id="其他在招岗位"&gt;&lt;strong&gt;其他在招岗位&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;技术/研发&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.liulishuo.com/hiringDetail?entity=engineer&amp;amp;job=%E8%B5%84%E6%B7%B1%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86%E7%A0%94%E7%A9%B6%E5%91%98%EF%BC%8CNLP&amp;amp;id=75" rel="nofollow" target="_blank" title=""&gt;资深自然语言处理研究员&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.liulishuo.com/hiringDetail?entity=engineer&amp;amp;job=%E8%B5%84%E6%B7%B1%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%AB%E7%A0%94%E7%A9%B6%E5%91%98%EF%BC%8CASR&amp;amp;id=74" rel="nofollow" target="_blank" title=""&gt;资深语音识别研究员&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.liulishuo.com/hiringDetail?entity=engineer&amp;amp;job=C++%E5%B7%A5%E7%A8%8B%E5%B8%88&amp;amp;id=68" rel="nofollow" target="_blank" title=""&gt;C++ 工程师&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.liulishuo.com/hiringDetail?entity=engineer&amp;amp;job=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E5%B8%88&amp;amp;id=82" rel="nofollow" target="_blank" title=""&gt;数据分析师&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.liulishuo.com/hiringDetail?entity=engineer&amp;amp;job=ETL%20%E5%B7%A5%E7%A8%8B%E5%B8%88&amp;amp;id=79" rel="nofollow" target="_blank" title=""&gt;ETL 工程师&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.liulishuo.com/hiringDetail?entity=engineer&amp;amp;job=%E7%A7%BB%E5%8A%A8%E6%B5%8B%E8%AF%95%E5%B7%A5%E7%A8%8B%E5%B8%88&amp;amp;id=50" rel="nofollow" target="_blank" title=""&gt;移动测试工程师&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;简历投递邮箱：jobs@liulishuo.com&lt;/strong&gt;&lt;/p&gt;</description>
      <author>tony612</author>
      <pubDate>Tue, 15 Nov 2016 15:38:23 +0800</pubDate>
      <link>https://ruby-china.org/topics/31602</link>
      <guid>https://ruby-china.org/topics/31602</guid>
    </item>
    <item>
      <title>[上海] Elixir Shanghai 第三次 Meetup (2016.9.24)</title>
      <description>&lt;p&gt;&lt;strong&gt;时间&lt;/strong&gt;：2016 年 9 月 24 日（周六）&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;地点&lt;/strong&gt;：&lt;/p&gt;

&lt;p&gt;英语流利说办公室
上海市大连路 970 号海上海 9 号楼 2101 室&lt;/p&gt;

&lt;p&gt;&lt;a href="http://ditu.amap.com/place/B0FFG1MJI9" rel="nofollow" target="_blank" title=""&gt;地图链接&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;内容&lt;/strong&gt;：&lt;/p&gt;

&lt;p&gt;2:00~2:30 自我介绍&lt;/p&gt;

&lt;p&gt;2:30~5:00 主题演讲&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;ExLoglite - a Logger backend for a GUI log viewer  -- Xun Lou(AquarHEAD)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The way to &lt;a href="https://github.com/tony612/grpc-elixir" rel="nofollow" target="_blank" title=""&gt;grpc-elixir&lt;/a&gt;  -- Tony Han&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;程序员节解谜程序——Elixir 有限状态机实践           -- 杜万（&lt;a href="https://book.douban.com/subject/26769754/" rel="nofollow" target="_blank" title=""&gt;《Elixir 程序设计》&lt;/a&gt;的译者）&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;（欢迎给主题啊）&lt;/p&gt;

&lt;p&gt;5:00~6:00 自由讨论&lt;/p&gt;

&lt;p&gt;报名或查看详细信息： &lt;a href="https://jinshuju.net/f/HSFFJg" rel="nofollow" target="_blank"&gt;https://jinshuju.net/f/HSFFJg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(PS: 可以加入 Meetup 来长期关注我们的活动 &lt;a href="http://www.meetup.com/Elixir-Shanghai/" rel="nofollow" target="_blank"&gt;http://www.meetup.com/Elixir-Shanghai/&lt;/a&gt;)&lt;/p&gt;</description>
      <author>tony612</author>
      <pubDate>Wed, 21 Sep 2016 13:36:43 +0800</pubDate>
      <link>https://ruby-china.org/topics/31122</link>
      <guid>https://ruby-china.org/topics/31122</guid>
    </item>
    <item>
      <title>[上海] 英语流利说团队招聘 Ruby 后端、Web 前端等职位！</title>
      <description>&lt;h2 id="关于流利说"&gt;关于流利说&lt;/h2&gt;
&lt;p&gt;在英语流利说 (&lt;a href="http://www.liulishuo.com" rel="nofollow" target="_blank" title=""&gt;www.liulishuo.com&lt;/a&gt;) ，我们致力于通过最前沿的技术和最科学的方法，创造极致的移动互联网学习体验。我们的注册用户人数已突破 3000 万，就在 7 月初，我们发布了全球首个自适应移动英语课堂“懂你英语”，利用人工智能技术帮助用户更科学的学习语言。我们的产品荣获过 App Store 教育年度精选、小米年度精选等多项荣誉，公司已在去年完成 B 轮融资。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2016/ba476e390daecc9895df2a3c74ac0380.jpg!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="工程师在流利说："&gt;工程师在流利说：&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;我们注重测试和 Code Review，在流利说你的代码至少会被一个同事 review 过；&lt;/li&gt;
&lt;li&gt;我们喜欢用 Slack 作为沟通、运维、交流的工具，用 Phabricator 进行项目管理；&lt;/li&gt;
&lt;li&gt;我们是一群喜欢研究各种语言、技术的工程师，比如 Swift、Go、Elixir、Clojure、Rust、React，而且很喜欢把新技术和语言应用到工作当中；&lt;/li&gt;
&lt;li&gt;鼓励开源，热衷奉献，屡上 Github Trending 榜，来为我们的开源项目添砖加瓦吧 &lt;a href="https://github.com/lingochamp" rel="nofollow" target="_blank"&gt;https://github.com/lingochamp&lt;/a&gt;；&lt;/li&gt;
&lt;li&gt;我们活跃于国内外的技术会议，Ruby Conf China, Rails Conf, Ruby Kaigi, Google I/O, WWDC, JS Conf, Spark Summit, AWS Summit 等等；&lt;/li&gt;
&lt;li&gt;我们的团队来自于 Google、微信、携程、阿里、点评等国内外知名团队，也不乏经验丰富的独立开发者；&lt;/li&gt;
&lt;li&gt;每年一次的精彩 Hack Week，鼓励创新，激发你的灵感与创造力！&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2016/c7ac438290ada8cc79d1b64fb7011a99.jpeg!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h3 id="（资深）Ruby 工程师"&gt;（资深）Ruby 工程师&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;职位要求：&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;至少一年以上 Ruby 后端开发经验，比如 Rails、Sinatra 等&lt;/li&gt;
&lt;li&gt;熟悉如何用测试辅助开发，以及一些常见的测试工具，如 RSpec 等&lt;/li&gt;
&lt;li&gt;熟悉如何开发 RESTful API，最好对客户端的开发也有一定了解&lt;/li&gt;
&lt;li&gt;熟悉关系型数据库，如 MySQL 等，熟悉 NoSQL，如 Redis 等&lt;/li&gt;
&lt;li&gt;熟悉如何自动化部署 Ruby/Rails 项目&lt;/li&gt;
&lt;li&gt;熟练使用 Git&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Ruby@流利说：&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;我们以 API 为主，但我们非常鼓励全栈，只要你想，可以有很多写前端的机会（比如 React）&lt;/li&gt;
&lt;li&gt;我们有亿量级数据库表给你"折腾"&lt;/li&gt;
&lt;li&gt;你可能会被需要用合适的技术来构建我们自己的工具&lt;/li&gt;
&lt;li&gt;我们很早就开始使用 云服务，此外广泛使用 Ansible、Docker 等技术、工具来简化我们的运维工作&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="Web前端工程师"&gt;Web 前端工程师&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;职位要求：&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;基础扎实，数据结构等基础知识掌握牢固&lt;/li&gt;
&lt;li&gt;熟练掌握 JavaScript，HTML，CSS，有 MVVM 或 MVC 模式开发经验的优先&lt;/li&gt;
&lt;li&gt;有独立完整开发 Web 前端工程经验优先&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;Web@流利说&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;英语流利说已经使用 Hybrid 开发模式，内嵌部分 HTML 5 页面，我们的 App 拥有数千万用户&lt;/li&gt;
&lt;li&gt;每年鼓励工程师参加 JS Conf 以及国内外其他技术会议，费用全额报销&lt;/li&gt;
&lt;li&gt;一直走在 Web 开发前沿，公司内大部分项目都使用纯前端渲染，基于 Webpack 构建，React 是我们页面渲染框架的标配&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="测试工程师："&gt;测试工程师：&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;职位要求：&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;一年以上移动产品测试经验，熟悉 iOS 和 Android 系统&lt;/li&gt;
&lt;li&gt;了解测试基础理论，熟悉常用测试技术方法，有较高的质量意识；&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="我们的福利"&gt;我们的福利&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;13 薪加年终奖，此外还提供非常多国内外学习和交流机会；&lt;/li&gt;
&lt;li&gt;中外帅哥美女同事，弹性工作时间，开放的办公环境，全员 Mac 办公与人体工学椅，全方位激发你的创造力；&lt;/li&gt;
&lt;li&gt;美味营养的私厨三餐，水果零食饮料不限量供应，胃好你才好！&lt;/li&gt;
&lt;li&gt;免费上班健身与年度体检；&lt;/li&gt;
&lt;li&gt;每年度出境游，丰富多彩的团队建设，我们的口号是”Work hard, play harder!”。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2016/b0a89611d1a2ef128b59d6ab0e956ee2.jpeg!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;同时，我们团队开通了技术微信公众号，定期更新技术干货和好玩的活动。欢迎扫描以下二维码关注。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2016/13a67babee4af2cdda84da71aaa61912.jpg!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;更多职位请点击 &lt;a href="http://www.liulishuo.com/joinus" rel="nofollow" target="_blank" title=""&gt;www.liulishuo.com/joinus&lt;/a&gt; 查看，简历请发送至 &lt;strong&gt;rubychina 直达邮箱&amp;nbsp;jobs.rubychina#liulishuo.com&lt;/strong&gt;&lt;/p&gt;</description>
      <author>tony612</author>
      <pubDate>Mon, 01 Aug 2016 11:55:26 +0800</pubDate>
      <link>https://ruby-china.org/topics/30684</link>
      <guid>https://ruby-china.org/topics/30684</guid>
    </item>
    <item>
      <title>ActiveRecord 和 Ecto 的联系与对立</title>
      <description>&lt;p&gt;&lt;em&gt;转自最下方英语流利说官方技术微信公众号&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://guides.rubyonrails.org/active_record_basics.html" rel="nofollow" target="_blank" title=""&gt;ActiveRecord&lt;/a&gt; 是 &lt;a href="http://rubyonrails.org/" rel="nofollow" target="_blank" title=""&gt;Ruby on Rails&lt;/a&gt; 的 Model 层，是一个 ORM(Object-relational mapping)。&lt;a href="https://github.com/elixir-lang/ecto" rel="nofollow" target="_blank" title=""&gt;Ecto&lt;/a&gt; 是 &lt;a href="http://elixir-lang.org/" rel="nofollow" target="_blank" title=""&gt;Elixir&lt;/a&gt; 实现的一个库，类似于 ORM。不管是不是 ORM，二者本质上都是在各自的语言层面，对于&lt;strong&gt;数据库操作提供了抽象&lt;/strong&gt;，能让我们更方便地和数据库交互，而不是直接通过 SQL 的方式，并且对表中的数据做了映射，从而方便进行后续逻辑的处理。&lt;/p&gt;

&lt;p&gt;这篇文章并不打算来争个孰优孰劣，很多时候对比的作用更是加深对于事物的认识。&lt;/p&gt;
&lt;h2 id="定义映射关系"&gt;定义映射关系&lt;/h2&gt;
&lt;p&gt;我们一般会以表为单位来操作数据库，二者也对表这个概念做了映射。假定我们有一个 &lt;code&gt;users&lt;/code&gt; 的表，那么它们的定义（这篇文章的代码示范大多会使用这个模型）如下：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ActiveRecord&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&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="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Ecto&lt;/span&gt;
&lt;span class="k"&gt;defmodule&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="no"&gt;Ecto&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="no"&gt;Schema&lt;/span&gt;

  &lt;span class="n"&gt;schema&lt;/span&gt; &lt;span class="s2"&gt;"users"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="n"&gt;field&lt;/span&gt; &lt;span class="ss"&gt;:email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:string&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;可以看到，ActiveRecord 更“智能”，通过继承了 &lt;code&gt;ActiveRecord::Base&lt;/code&gt; 这个类，并且利用表名的&lt;strong&gt;转换约定&lt;/strong&gt;（User 对应复数形式的表名 users）来完成映射。而 Ecto 中则是通过 DSL 定义了 schema，很显然，表名以及字段的指定都是&lt;strong&gt;显式指定&lt;/strong&gt;的。&lt;/p&gt;

&lt;p&gt;从代码上看，ActiveRecord 更简洁，但只看这个代码却不知道表名、字段等信息，需要通过查看 db schema 的定义来做进一步了解，而 Ecto 定义比较繁琐，但 schema 结构一目了然。&lt;/p&gt;
&lt;h2 id="数据存放和使用"&gt;数据存放和使用&lt;/h2&gt;
&lt;p&gt;让我们先跳过数据库操作，直接到数据被取出来之后的部分。我们来定义一个操作——把 email &lt;code&gt;@&lt;/code&gt; 前的部分提取出作为 name：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ActiveRecord&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&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="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;name&lt;/span&gt;
    &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&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;first&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;irb&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;first&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="c1"&gt;#&amp;lt;User id: 1, email: "foo@example.com"&amp;gt;&lt;/span&gt;
&lt;span class="n"&gt;irb&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"foo"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Ecto&lt;/span&gt;
&lt;span class="k"&gt;defmodule&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="o"&gt;|&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;String&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&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="o"&gt;|&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;List&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Ecto&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="no"&gt;Repo&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_by&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;id:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="p"&gt;%&lt;/span&gt;&lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;id:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;email:&lt;/span&gt; &lt;span class="s2"&gt;"foo.example.com"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="s2"&gt;"foo"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;与其说是 ActiveRecord 和 Ecto 的比较，不如说是 Ruby 和 Elixir，甚至是面向对象语言和函数式语言的比较。ActiveRecord 的数据被存放到一个对象中，这个对象不光有&lt;strong&gt;数据&lt;/strong&gt;，还有在类的定义中被赋予的&lt;strong&gt;行为&lt;/strong&gt;，使用起来非常方便。Ecto 的&lt;strong&gt;数据和行为是分开的&lt;/strong&gt;，数据用 &lt;a href="http://elixir-lang.org/getting-started/structs.html" rel="nofollow" target="_blank" title=""&gt;Struct&lt;/a&gt;（类似于 C 语言中的 struct），行为则是通过函数，使用起来需要写的代码更多。&lt;/p&gt;

&lt;p&gt;关于面向对象语言和函数式语言的比较网上已经有很多了，这里我仅仅从测试的角度来做进一步的对比：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ActiveRecord&lt;/span&gt;
&lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;email: &lt;/span&gt;&lt;span class="s2"&gt;"foo@example.com"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# prepare data&lt;/span&gt;
&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"foo"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Ecto&lt;/span&gt;
&lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;%&lt;/span&gt;&lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;email:&lt;/span&gt; &lt;span class="s2"&gt;"foo@example.com"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;# prepare data&lt;/span&gt;
&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"foo"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;乍一看，它们可能没有什么区别，但在准备数据的第一行却完全是两种做法。因为 &lt;code&gt;User&lt;/code&gt; 继承自 &lt;code&gt;ActiveRecord::Base&lt;/code&gt;，它会帮我们用传入的 attributes 来进行初始化操作，当然我们也可以在 &lt;code&gt;User&lt;/code&gt; 里自定义一些初始化行为。而 Ecto 中则只是用了 Elixir 的 Struct 来构造我们需要的数据，而没有任何行为。&lt;/p&gt;

&lt;p&gt;前者更&lt;strong&gt;灵活、强大&lt;/strong&gt;，比如我们可以在初始化时给一些字段赋上默认值。但这种灵活也伴随着风险与不可靠，当我们在调用 &lt;code&gt;User.new&lt;/code&gt; 时，其实我们不能确定得到的那个对象的 email 是否就是我们传入的，因为初始化代码里可以随意改变默认行为，并可能产生其他不必要的副作用。正是因为这种不确定，使得我们的测试其实没有看上去那么容易写。&lt;/p&gt;

&lt;p&gt;而后者完全&lt;strong&gt;没有副作用&lt;/strong&gt;，我们不需要担心得到的结果会跟预期的不一致，测试从而更加可靠。当然损失了一些灵活性，但很难说这到底是好还是坏，可能要在不同的场景下才能判断，也取决于不同人的喜好。&lt;/p&gt;

&lt;p&gt;&lt;em&gt;ActiveRecord 和 Ecto 都对关联关系做了抽象，其中也会体现出这些区别，我们会在之后的部分具体再讲。&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="数据库查询"&gt;数据库查询&lt;/h2&gt;
&lt;p&gt;我们来做一个很简单的查询操作——取出 id 为 2 的用户：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ActiveRecord&lt;/span&gt;
&lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;id: &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;first&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ecto&lt;/span&gt;
&lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Ecto&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="no"&gt;Repo&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;one&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;where:&lt;/span&gt; &lt;span class="n"&gt;u&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="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在 ActiveRecord 中，只涉及到 &lt;code&gt;User&lt;/code&gt; 这一个 class 就可以完成全部的查询。而 Ecto 则涉及到 &lt;a href="https://hexdocs.pm/ecto/Ecto.Repo.html" rel="nofollow" target="_blank" title=""&gt;&lt;code&gt;Ecto.Repo&lt;/code&gt;&lt;/a&gt; 和 &lt;a href="https://hexdocs.pm/ecto/Ecto.Query.html" rel="nofollow" target="_blank" title=""&gt;&lt;code&gt;Ecto.Query&lt;/code&gt;&lt;/a&gt;（&lt;code&gt;from&lt;/code&gt; 是从 &lt;code&gt;Ecto.Query&lt;/code&gt; 引入的宏定义）和 &lt;code&gt;User&lt;/code&gt;。&lt;/p&gt;

&lt;p&gt;ActiveRecord 的一个类就完成了 Ecto 三个 Module 才完成的工作——指定要查询的表、设定查询条件和实际向数据库的查询，我们调用的时候只需要知道 &lt;code&gt;User&lt;/code&gt; 这一个，非常方便。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Ecto.Repo&lt;/code&gt; 是对于一个数据库的映射，可以说，一个 Repo 就是对于一个数据库的连接，可以是多个类型的数据库，比如 MySQL、PostgreSQL 甚至是 MongoDB，也可以是一个类型的多个数据库。可以看到，相比于 ActiveRecord 这样所有 &lt;strong&gt;DB 操作耦合&lt;/strong&gt;在一个 class 的做法，Ecto 则显得更加灵活，因为查询条件和实际的查询操作、schema 定义和数据库连接是&lt;strong&gt;分开&lt;/strong&gt;的。&lt;/p&gt;

&lt;p&gt;可能很多人会觉得，还是 ActiveRecord 舒服，开始我也是这么觉得的，既然可以这么方便，为什么要弄得这么复杂呢？直到我遇到了更复杂的场景，比如一个项目里需要有&lt;strong&gt;多个不同数据库&lt;/strong&gt;连接，甚至是同一个 Model 需要连接多个数据库，或者读写分离的需求。这时，对于 ActiveRecord，我想到的唯一解决方案就是——Google，因为从来没这样用过啊，而 schema 和查询又是耦合的，所以我知道只能通过对 ActiveRecord 的定制才能达到目的，而搜索到的解决方案靠谱吗？不确定，因为毕竟不是 ActiveRecord 擅长的应用场景。但对于 Ecto，自然就支持了，根本不用多想。&lt;/p&gt;

&lt;p&gt;换个角度想，Ecto 真的复杂吗？看上去似乎是代码多了，每次实际查询都需要显式执行，而 ActiveRecord 则是当你调用特定方法时就会触发查询。但就像函数式语言一样，语法上的一些繁琐，反而带来了代码上的简洁。&lt;/p&gt;

&lt;p&gt;当然，Ecto 也不是完美，在有些场景，ActiveRecord 更有优势，比如当需要把一个已经存在的项目的 Model 完全换为另一个数据库时，ActiveRecord 中可能就是把一个 Model 的连接改一下就行了，而 Ecto 似乎比较难以全局修改。&lt;/p&gt;
&lt;h3 id="查询语法"&gt;查询语法&lt;/h3&gt;
&lt;p&gt;除此之外，二者的查询语法也各有千秋。ActiveRecord 定义了一系列比较语义化的方法，比如 &lt;code&gt;where&lt;/code&gt;, &lt;code&gt;order&lt;/code&gt;, &lt;code&gt;group&lt;/code&gt;, &lt;code&gt;joins&lt;/code&gt;, &lt;code&gt;select&lt;/code&gt; 等，通过不断调用就能得到结果。而 Ecto 则是定义了一套类似于 &lt;a href="https://en.wikipedia.org/wiki/Language_Integrated_Query" rel="nofollow" target="_blank" title=""&gt;LINQ&lt;/a&gt; 的 DSL，能让我们&lt;strong&gt;像写 SQL 一样&lt;/strong&gt;来写查询代码。&lt;/p&gt;

&lt;p&gt;刚接触 ActiveRecord 的时候，觉得可以不写 SQL 实在是太爽了，甚至到现在也一直觉得 ActiveRecord 写起来很容易，就像 Ruby 语言一样优雅。但有时难免会碰到一些&lt;strong&gt;复杂的查询&lt;/strong&gt;，比如涉及到 join，group，这时 ActiveRecord 写起来反而不是那么容易，很可能很容易就想出了 SQL，但还是不会写 ActiveRecord 风格的代码。因为对于复杂的查询，代码到 SQL 的转换可能不那么显而易见，最终只能通过 Google 来找到答案或者是直接用 string 来写 SQL。&lt;/p&gt;

&lt;p&gt;Ecto 是另外一种优雅，从代码到 SQL 的转变可以说是直接对应起来的，知道了 SQL 基本就知道了代码怎么写，对于复杂查询可能更容易。比如文档里的这个例子，并不是很复杂，但已经可以说明问题：&lt;/p&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="no"&gt;Post&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;group_by:&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;select:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="数据写操作"&gt;数据写操作&lt;/h2&gt;
&lt;p&gt;还是先来看一个例子——插入一条数据：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ActiveRecord&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&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;validates_presence_of&lt;/span&gt; &lt;span class="ss"&gt;:email&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;irb&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;email: &lt;/span&gt;&lt;span class="s2"&gt;"foo@example.com"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Ecto&lt;/span&gt;
&lt;span class="k"&gt;defmodule&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="no"&gt;Ecto&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="no"&gt;Changeset&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="n"&gt;changeset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="p"&gt;\\&lt;/span&gt; &lt;span class="p"&gt;%{})&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="n"&gt;user&lt;/span&gt;
    &lt;span class="o"&gt;|&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;cast&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sx"&gt;~w(email)&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;|&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;validate_required&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="ss"&gt;:email&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;changeset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;changeset&lt;/span&gt;&lt;span class="p"&gt;(%&lt;/span&gt;&lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt; &lt;span class="p"&gt;%{&lt;/span&gt;&lt;span class="ss"&gt;email:&lt;/span&gt; &lt;span class="s2"&gt;"foo@example.com"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;Ecto&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="no"&gt;Repo&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;changeset&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="数据验证"&gt;数据验证&lt;/h3&gt;
&lt;p&gt;数据写操作其实与查询类似，ActiveRecord 全都通过 &lt;code&gt;User&lt;/code&gt; 这个 class 完成插入，而 Ecto 则需要通过 &lt;code&gt;User&lt;/code&gt; 和之前见过的 &lt;code&gt;Ecto.Repo&lt;/code&gt; 来完成，数据组装和实际写入是分开的。这里更关注的是写操作之外的，也就是数据验证等额外的操作，比如这里验证了 email 必须存在。ActiveRecord 是通过在类定义中调用方法来定义&lt;strong&gt;全局的 validations&lt;/strong&gt;，当调用 &lt;code&gt;create&lt;/code&gt; 或 &lt;code&gt;update&lt;/code&gt; 等方法时就会自动调用验证。而 Ecto 则是通过这个新的 module &lt;a href="https://hexdocs.pm/ecto/Ecto.Changeset.html" rel="nofollow" target="_blank" title=""&gt;&lt;code&gt;Ecto.Changeset&lt;/code&gt;&lt;/a&gt; 来进行数据验证等处理。&lt;/p&gt;

&lt;p&gt;对于 ActiveRecord，因为定义是全局的，所以调用写操作时不需要去关心验证的逻辑，缺点就是灵活性会受到限制，比如可能你需要在不同的场景下做不同的验证逻辑，像邮箱注册、手机注册、游客、第三方注册，因为是全局的约束，就使得所有的逻辑混在一起，错综复杂。&lt;/p&gt;

&lt;p&gt;而 Ecto.Changeset 的思路是，每一个 changeset 就是&lt;strong&gt;一条验证的流程&lt;/strong&gt;，比如你可以定义 &lt;code&gt;email_signup_changeset&lt;/code&gt;、&lt;code&gt;phone_signup_changeset&lt;/code&gt;、&lt;code&gt;guest_changeset&lt;/code&gt;、&lt;code&gt;oauth_changeset&lt;/code&gt;，他们互相不受影响，整个逻辑很清晰。而且 changeset 可以互相组合，比如定义一个公共的 &lt;code&gt;changeset&lt;/code&gt; 作为所有 changeset 的基础。当然，缺点就是调用的时候必须要显示指定一个 changeset，甚至可以不通过 changeset，代码上会相对比较麻烦。&lt;/p&gt;
&lt;h3 id="回调"&gt;回调&lt;/h3&gt;
&lt;p&gt;ActiveRecord 中可以定义在写操作整个流程中各个关键点的回调逻辑，比如在写入之前构造一些字段，或是写入完之后做一些缓存、数据库的更新。&lt;/p&gt;

&lt;p&gt;而 Ecto 2.0 之后就没有 callback 了，其实这是必然的，因为按 Ecto 的思路，schema 和数据库操作是分开的，那就无法在 schema 中定义各种回调了。另外就是，你真的需要回调吗？全局的回调不止带来了方便，也可能会引入了一些问题，因为这些自动触发的回调对开发者而言是隐藏的，加一行回调很简单，但当你加了越来越多的回调时，代码也就失控了。关于 Ecto 的 callback，可以看 José 写的&lt;a href="http://blog.plataformatec.com.br/2015/12/ecto-v1-1-released-and-ecto-v2-0-plans/" rel="nofollow" target="_blank" title=""&gt;这篇文章&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id="关联关系"&gt;关联关系&lt;/h2&gt;
&lt;p&gt;我们不会只有一个表，很多时候数据库的操作需要涉及到多个表以及他们之间的关系，ActiveRecord 和 Ecto 也都对此做了抽象，比如 one-one、one-many、many-to-many。&lt;/p&gt;

&lt;p&gt;我们在 User 的基础上加入 posts 这个表（id, title, user_id）来做说明。二者的定义都大同小异：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ActiveRecord&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&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;:posts&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;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;belongs_to&lt;/span&gt; &lt;span class="ss"&gt;:user&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Ecto&lt;/span&gt;
&lt;span class="k"&gt;defmodule&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;schema&lt;/span&gt; &lt;span class="s2"&gt;"users"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="n"&gt;has_many&lt;/span&gt; &lt;span class="ss"&gt;:posts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;Post&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="k"&gt;defmodule&lt;/span&gt; &lt;span class="no"&gt;Post&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;schema&lt;/span&gt; &lt;span class="s2"&gt;"posts"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="n"&gt;field&lt;/span&gt; &lt;span class="ss"&gt;:title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:string&lt;/span&gt;
    &lt;span class="n"&gt;belongs_to&lt;/span&gt; &lt;span class="ss"&gt;:user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;User&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;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ActiveRecord&lt;/span&gt;
&lt;span class="n"&gt;irb&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;first&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="c1"&gt;#&amp;lt;User id: 1, email: "foo@example.com"&amp;gt;&lt;/span&gt;
&lt;span class="n"&gt;irb&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;posts&lt;/span&gt; &lt;span class="c1"&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="c1"&gt;#&amp;lt;Post id: 1, title: "Post 1", user_id: 1&amp;gt;, &lt;/span&gt;
     &lt;span class="c1"&gt;#&amp;lt;Post id: 2, title: "Post 2", user_id: 1&amp;gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Ecto&lt;/span&gt;
&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Ecto&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="no"&gt;Repo&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_by&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;id:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="p"&gt;%&lt;/span&gt;&lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;id:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;email:&lt;/span&gt; &lt;span class="s2"&gt;"foo.example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;posts:&lt;/span&gt; &lt;span class="c1"&gt;#Ecto.Association.NotLoaded&amp;lt;association :posts is not loaded&amp;gt;}&lt;/span&gt;
&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;posts&lt;/span&gt;
&lt;span class="c1"&gt;#Ecto.Association.NotLoaded&amp;lt;association :posts is not loaded&amp;gt;&lt;/span&gt;
&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Ecto&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="no"&gt;Repo&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;preload&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:posts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 发生了数据库查询&lt;/span&gt;
&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;posts&lt;/span&gt;
&lt;span class="p"&gt;[%&lt;/span&gt;&lt;span class="no"&gt;Post&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;id:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;title:&lt;/span&gt; &lt;span class="s2"&gt;"Post 1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;user_id:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
 &lt;span class="p"&gt;%&lt;/span&gt;&lt;span class="no"&gt;Post&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;id:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;title:&lt;/span&gt; &lt;span class="s2"&gt;"Post 2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;user_id:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以看到，ActiveRecord 依旧延续自己的风格，&lt;code&gt;user.posts&lt;/code&gt; 这个方法调用会产生一个 &lt;code&gt;ActiveRecord_Associations_CollectionProxy&lt;/code&gt; 的对象，当使用时就会 &lt;strong&gt;自动做数据库查询&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;而对于 Ecto，&lt;code&gt;user.posts&lt;/code&gt; 不是方法调用，只是取了 Struct 的一个值，它在 user 被取出来后就存在于 struct 中，它本身又是一个 Struct &lt;code&gt;Ecto.Association.NotLoaded&lt;/code&gt;。正如这个名字暗示，posts 还&lt;strong&gt;没有被从数据库中加载&lt;/strong&gt;出来，一直到我们显示通过 &lt;code&gt;preload&lt;/code&gt; 调用之后。&lt;/p&gt;

&lt;p&gt;Ecto 这样做的目的是什么呢？或许我们可以看看 ActiveRecord 这种做法有什么不好，数据库查询就像方法调用一样简单，所以在你不经意的时候，就产生了数据库查询，会进一步拖慢我们的程序。而 Rails 中经常发生的 n+1 的查询问题，真的是开发者能力不够，总是忘记这个性能问题吗？并不完全是，当你在 view 里随便调用一个方法就做了查询时，其实很多时候你是比较难意识到的，可以说 ActiveRecord 的这种方便，使得代码更容易产生性能问题。&lt;/p&gt;

&lt;p&gt;而 Ecto 从一开始就试图去减少这种问题，当一个 &lt;code&gt;Ecto.Association.NotLoaded&lt;/code&gt; 被使用时会直接报错，Ecto 通过&lt;strong&gt;强制、显式&lt;/strong&gt;的关联查询，让开发者更能意识到代码产生的影响。当然你也可以在 view 的循环体内去通过 &lt;code&gt;Repo.preload&lt;/code&gt; 来查询，但这时你应该是知道你在做什么的。好的框架或者库可以帮你减少错误的发送，但却不能完全避免。&lt;/p&gt;
&lt;h2 id="总结"&gt;总结&lt;/h2&gt;
&lt;p&gt;ActiveRecord 和 Ecto 很像，甚至 Ecto 从 ActiveRecord 借鉴了很多，但通过比较后，大家应该可以发现，二者其实是对于同一问题的两种风格迥异的解决方案。ActiveRecord &lt;strong&gt;简便、强大&lt;/strong&gt;，帮你做了很多事情，但缺点也是帮你做了一些可能不该做的事情。Ecto 因为在 ActiveRecord 之后才产生，所以除了借鉴，还在 ActiveRecord 做的不够好的地方做了改善，更&lt;strong&gt;透明&lt;/strong&gt;、更有&lt;strong&gt;约束&lt;/strong&gt;力，&lt;strong&gt;松耦合&lt;/strong&gt;，但有些地方相对更繁琐。&lt;/p&gt;

&lt;p&gt;可能我的一些理解还不到位，所以有失偏颇，欢迎和大家一起交流、指正。&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(想更多地了解 Ecto 或者 Elixir 的可以关注 Elixir Shanghai meetup &lt;a href="http://www.meetup.com/Elixir-Shanghai/" rel="nofollow" target="_blank"&gt;http://www.meetup.com/Elixir-Shanghai/&lt;/a&gt; 来一起交流学习）&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="广告时间"&gt;广告时间&lt;/h2&gt;
&lt;p&gt;我们正在积极地招聘 Ruby 工程师，联系方式（Ruby China 专用通道）：jobs.rubychina###liulishuo.com
更多信息参见 &lt;a href="https://www.liulishuo.com/hiringDetail?entity=engineer&amp;amp;job=Ruby%20%E5%B7%A5%E7%A8%8B%E5%B8%88&amp;amp;id=4" rel="nofollow" target="_blank" title=""&gt;这里&lt;/a&gt;
&lt;img src="https://l.ruby-china.com/photo/2016/f346b5ab29ef39551e7dd23d9005fb85.png!large" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>tony612</author>
      <pubDate>Sat, 23 Jul 2016 12:38:42 +0800</pubDate>
      <link>https://ruby-china.org/topics/30608</link>
      <guid>https://ruby-china.org/topics/30608</guid>
    </item>
  </channel>
</rss>
