<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>mengqing</title>
    <link>https://ruby-china.org/mengqing</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>RubyConf AU 2017 总结</title>
      <description>&lt;p&gt;今年代表了公司&lt;a href="https://www.oneflare.com.au" rel="nofollow" target="_blank" title=""&gt;Oneflare&lt;/a&gt;和几位同事参加了在墨尔本招开的第五届澳大利亚 RubyConf。今年公司有幸赞助了 RubyConf AU，顺便得到了几张免费的门票。如果我没记错的话，门票全票的话貌似要 700 多澳刀一张&lt;img title=":sweat_smile:" alt="😅" src="https://twemoji.ruby-china.com/2/svg/1f605.svg" class="twemoji"&gt;&lt;/p&gt;

&lt;p&gt;因为记得笔记不是很多，所以一直在等正式的视频。现在视频终于出来了，我在这里给大家大概的概括下大会的内容，和大家分享下。如果有什么提问，大家可以一起讨论。&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;&lt;strong&gt;Reinvesting in Ruby - &lt;a href="https://github.com/timriley" rel="nofollow" target="_blank" title=""&gt;Tim Riley&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="embed-responsive embed-responsive-16by9"&gt;&lt;iframe class="embed-responsive-item" src="//www.youtube.com/embed/V8Sdg25eKlM" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ruby 已经有 21 年的历史了，在这 21 年里，Ruby 经历了很多，也面临了很多挑战和竞争&lt;/li&gt;
&lt;li&gt;老对手们 (PHP, .NET, JAVA, PYTHON)&lt;/li&gt;
&lt;li&gt;新对手们 (Scala, Elixir, Go, Clojure, Nodejs)&lt;/li&gt;
&lt;li&gt;Rails 基本上已经代表了 Ruby，有好处，也有坏处。好处是 Rails 提供了一个简单易懂的标准，坏处是这个标准已经被广泛运用到很难再去有任何的改变了&lt;/li&gt;
&lt;li&gt;Ruby 的未来在哪里，怎么去追上别的语言&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Icelab 的&lt;a href="https://dry-rb.org" rel="nofollow" target="_blank" title=""&gt;dry-rb&lt;/a&gt;或许可以让 Ruby 有个更好的未来。dry-rb is a collection of gems that help users to code ruby in a functional way. 它有三大宗旨&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Functions as values&lt;/li&gt;
&lt;li&gt;Immutability&lt;/li&gt;
&lt;li&gt;Avoid side effects&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;这里我就不一一简绍每一个 gem 了，大家有兴趣的可以观看 youtube 的 live demo，或者上他们的官方网站去体验下&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;&lt;strong&gt;Ruby, HTTP/2, and You - &lt;a href="https://github.com/BanzaiMan" rel="nofollow" target="_blank" title=""&gt;Hiro Asari&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="embed-responsive embed-responsive-16by9"&gt;&lt;iframe class="embed-responsive-item" src="//www.youtube.com/embed/_KFxWyJrzso" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;很久很久以前，网页就是一群字母，一句句子，一段文章，就是辣么滴简单&lt;/li&gt;
&lt;li&gt;再后来，人们想要看图片了，再后来，人们想要听声音了，HTTP/1.1 就这么出生了&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;HTTP/1.1&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connections are kept alive&lt;/li&gt;
&lt;li&gt;请求是按照先到先得的顺序来被处理的&lt;/li&gt;
&lt;li&gt;每次请求都会传输 Session 数据&lt;/li&gt;
&lt;li&gt;不同的阅览器有不同的 concurrent connection 的限制数&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;HTTP/2&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;二进制 header，更小，节省时间&lt;/li&gt;
&lt;li&gt;header 用 HPACK 来压缩&lt;/li&gt;
&lt;li&gt;Multiple Full Duplex Connections（类似于 async）&lt;/li&gt;
&lt;li&gt;服务器可以根据某些设定的配置来推送资源，例如，如果你请求一个 css 文件，服务器可以同时推送给你图片，字体，等等的资源&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;目前 Rack 还不能完全支持 HTTP/2，但是可以通过其他的方式来实现 (proxying)&lt;/p&gt;

&lt;p&gt;最后 Hiro 还列出了一些 Do 和 Do not&lt;/p&gt;

&lt;p&gt;&lt;em&gt;DO&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;资源放 CDN 上&lt;/li&gt;
&lt;li&gt;减少 DNS 的搜索&lt;/li&gt;
&lt;li&gt;确认生产环境能否支持 HTTP/2&lt;/li&gt;
&lt;li&gt;把资源模块化&lt;/li&gt;
&lt;li&gt;测试不同的服务器&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;DO NOT&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;重定向 HTTP 请求&lt;/li&gt;
&lt;li&gt;Shard Domain&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;p&gt;&lt;strong&gt;Writing a Gameboy emulator in Ruby - &lt;a href="https://github.com/colby-swandale" rel="nofollow" target="_blank" title=""&gt;Colby Swandale&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="embed-responsive embed-responsive-16by9"&gt;&lt;iframe class="embed-responsive-item" src="//www.youtube.com/embed/WbO2FEpNPvQ" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;这个没有太多可以概括的，但是非常有意思，建议大家可以去看下&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;&lt;strong&gt;Functional Programming For The Anxious Developer - &lt;a href="https://github.com/madlep" rel="nofollow" target="_blank" title=""&gt;Julian Doherty&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="embed-responsive embed-responsive-16by9"&gt;&lt;iframe class="embed-responsive-item" src="//www.youtube.com/embed/3b1YhdP2fis" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;当人们在码代码的时候，都会表现焦虑&lt;/li&gt;
&lt;li&gt;当你焦虑的时候怎么办？&lt;a href="http://www.baidu.com/s?wd=%E6%B6%88%E9%99%A4%E7%84%A6%E8%99%91" rel="nofollow" target="_blank" title=""&gt;点我&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;当需要考虑的越少时，会出错的概率就越小，出错的概率小了，你也就不会焦虑了&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Pure Functions&lt;/em&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# do this&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;sheepies&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;eaten&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="c1"&gt;# no side effects, doesn't use external state 👍&lt;/span&gt;
  &lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;eaten&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="c1"&gt;# don't do this&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;bad_sheepies&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;eaten&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;do_sudo_command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"DELETE FRICKING EVERYTHING"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 💩 &lt;/span&gt;
  &lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;eaten&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="c1"&gt;# don't do this&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;foo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bars&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;bars&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s2"&gt;"I just 💩  on your data!"&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Immutability&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;当需要改变物体时，创建一个新的物体&lt;/li&gt;
&lt;li&gt;确保变量不会改变 (那还叫变量么？)&lt;/li&gt;
&lt;li&gt;确保不会有其他的代码会改变变量&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Statelessness&lt;/em&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;a href="https://github.com/pitr-ch/algebrick" rel="nofollow" target="_blank" title=""&gt;algebrick&lt;/a&gt;, &lt;a href="https://github.com/atomicobject/hamsterdam" rel="nofollow" target="_blank" title=""&gt;hamsterdam&lt;/a&gt;, &lt;a href="https://github.com/hamstergem/hamster" rel="nofollow" target="_blank" title=""&gt;hamster&lt;/a&gt;都是用来帮助去实现这些理论的&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;&lt;strong&gt;Actors in Ruby! Why let Elixir have all the fun? - &lt;a href="https://github.com/mmatoscom" rel="nofollow" target="_blank" title=""&gt;Marcos Matos&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="embed-responsive embed-responsive-16by9"&gt;&lt;iframe class="embed-responsive-item" src="//www.youtube.com/embed/wveC2bbFYgA" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;你碰到过并发么，你需要并发么，当你需要的时候怎么办&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;不需要，反正 Ruby 也做不了&lt;/li&gt;
&lt;li&gt;换 application server (puma, thin)&lt;/li&gt;
&lt;li&gt;加 EC2&lt;/li&gt;
&lt;li&gt;试试看 Elixir&lt;img title=":sweat:" alt="😓" src="https://twemoji.ruby-china.com/2/svg/1f613.svg" class="twemoji"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;为了解决并发，很多人会用 Process Fork，但是&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;浪费资源&lt;/li&gt;
&lt;li&gt;协调会比较困难&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Actor 有什么不同&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OO&lt;/li&gt;
&lt;li&gt;每一个 object 都是在自己的领域里运行，不会牵扯到别的 objects&lt;/li&gt;
&lt;li&gt;所有的 method call 都是异步的，而且没有返回值&lt;/li&gt;
&lt;li&gt;Supervisor, 确保至少有一个 Worker 能工作&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/celluloid/celluloid/wiki" rel="nofollow" target="_blank" title=""&gt;Celluloid&lt;/a&gt;&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;&lt;strong&gt;Persistence pays off: a new look at rom-rb - &lt;a href="https://github.com/solnic" rel="nofollow" target="_blank" title=""&gt;Piotr Solnica&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="embed-responsive embed-responsive-16by9"&gt;&lt;iframe class="embed-responsive-item" src="//www.youtube.com/embed/9TBvWRgll64" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;应用数据和持久数据应该分开&lt;/li&gt;
&lt;li&gt;应用数据是你的应用里最重要的一员&lt;/li&gt;
&lt;li&gt;定义应用数据&lt;/li&gt;
&lt;li&gt;从数据库里提取应用数据&lt;/li&gt;
&lt;li&gt;储存应用数据，根据不同的数据库来转变数据的结构&lt;/li&gt;
&lt;li&gt;总结：数据库里的数据不等于应用数据&lt;/li&gt;
&lt;li&gt;总结 2：ActiveRecord 不推广以上的建议&lt;/li&gt;
&lt;li&gt;总结 3：用 rom-rb&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;p&gt;&lt;strong&gt;Defragging Ruby - &lt;a href="https://github.com/tenderlove" rel="nofollow" target="_blank" title=""&gt;Aaron Patterson&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="embed-responsive embed-responsive-16by9"&gt;&lt;iframe class="embed-responsive-item" src="//www.youtube.com/embed/nAEt36XNtAE" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;tenderlove 的演讲，每次都是一阵狂笑。。我就不概括了，大家请看 video&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;&lt;strong&gt;Functional in the front: rails in back - &lt;a href="https://github.com/lsimoneau" rel="nofollow" target="_blank" title=""&gt;Louis Simoneau&lt;/a&gt; &amp;amp;&amp;amp; &lt;a href="https://github.com/rahult" rel="nofollow" target="_blank" title=""&gt;Rahul Trikha&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="embed-responsive embed-responsive-16by9"&gt;&lt;iframe class="embed-responsive-item" src="//www.youtube.com/embed/Bd6DTg1uNe0" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;介绍了什么是 Elm&lt;/li&gt;
&lt;li&gt;Elm 的好处&lt;/li&gt;
&lt;li&gt;demostration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;PS：我只挑选了个别我认为比较感兴趣的主题出来，大家可以去 Youtube 的&lt;a href="https://www.youtube.com/playlist?list=PL9_jjLrTYxc3hxsmj3AnPFf3RD4f3zfUl" rel="nofollow" target="_blank" title=""&gt;list&lt;/a&gt;去观看所有的讲座&lt;/p&gt;</description>
      <author>mengqing</author>
      <pubDate>Tue, 07 Mar 2017 21:04:06 +0800</pubDate>
      <link>https://ruby-china.org/topics/32477</link>
      <guid>https://ruby-china.org/topics/32477</guid>
    </item>
  </channel>
</rss>
