<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>elizachen (爱莉莎)</title>
    <link>https://ruby-china.org/elizachen</link>
    <description/>
    <language>en-us</language>
    <item>
      <title>宽容、进取、探索的知识之旅——答「参加 RubyConf China 2017 是种怎样的体验？」</title>
      <description>&lt;p&gt;&lt;img src="http://upload-images.jianshu.io/upload_images/3341765-20954acb077bf889.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" title="" alt="bg.png"&gt;&lt;/p&gt;

&lt;p&gt;作为一个才入 RoR（Ruby On Rails）的技术小透明，今年第一次参加 RubyConf. China, 充分感受到了 Ruby 社区的宽容、进取和探索。&lt;/p&gt;
&lt;h3 id="宽容"&gt;宽容&lt;/h3&gt;
&lt;p&gt;Erlang、elixir 纷纷来踢馆。但毕竟“Ruby increase programmer happiness！”相比之下，这两种语言比较晦涩，所以洗脑效果不佳。
第一轮抽奖环节，一个 Python 程序员，一个 iOS 程序员被抽中了。大会讨论群里“我们中出了一个叛徒！”此起彼伏。但大家也就讲讲，并没有群殴 Python 和 iOS 程序员。&lt;/p&gt;
&lt;h3 id="进取"&gt;进取&lt;/h3&gt;
&lt;p&gt;相关讲题有：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ruby 和 nginx 的结合&lt;/li&gt;
&lt;li&gt;ruby 异步&lt;/li&gt;
&lt;li&gt;ruby 在实时通讯领域的实现&lt;/li&gt;
&lt;li&gt;ActiveRecord 的高级功能&lt;/li&gt;
&lt;li&gt;ruby 项目的 docker 部署&lt;/li&gt;
&lt;li&gt;打包 ruby 项目成可执行文件&lt;/li&gt;
&lt;li&gt;mobx-ruby 前端联动编程&lt;/li&gt;
&lt;li&gt;rails 模板里嵌入前端开发&lt;/li&gt;
&lt;li&gt;函数式编程&lt;/li&gt;
&lt;li&gt;Gitlab 等等&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="探索"&gt;探索&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;区块链（Ethereum on Ruby）&lt;/li&gt;
&lt;li&gt;机器学习（如何鉴黄、如何用 Ruby 进行机器学习的开发）。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;大会内容十分丰富，有深度，参会者在会场、在微信群里也展开了激烈的讨论。&lt;/p&gt;
&lt;h3 id="感触最深的是下面三点："&gt;感触最深的是下面三点：&lt;/h3&gt;
&lt;p&gt;1.&lt;strong&gt;ruby 的优点和缺点&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;目前体会到的是：Ruby 建站很快，但性能存在瓶颈。但如果网站用户量级不大，Ruby
 on rails 是完全可以满足。之前加入一个小型团队，用 ruby 搭建网站飞快，基本功能模块迅速拔地而起。
我知道“php 是世界上最美丽的语言”。
但是美丽的语言，用户看不到！用户需要的是靠谱的产品。
语言都是工具，产品才是目的。
不到 100 个用户时，先别操着 100 万用户的心。
先踏踏实实用 ruby 开发，赚到钱之后，再重金请大神来帮忙想办法，重构代码也不迟吧。&lt;/p&gt;

&lt;p&gt;2.&lt;strong&gt;ruby 和 python 可以是好基友！&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;如今，Python 在 Data Science 和 Machine Learning 领域，已是主流。会议上，iHower 老师讲机器学习时，提出了&lt;strong&gt;“Ruby 和 Python 才更应该做好朋友”！&lt;/strong&gt;不能更赞同。
Python，Ruby 都是编程语言，都是术，哪个能用？哪个好用？哪个适用，就用哪个。就像《天龙八部》里的段誉，六脉神剑、北冥神功、管他是大理段氏的，还是逍遥派的，哪招好用，就用哪招。能打败慕容复就行。
在机器学习里，对于大数据：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;训练部分&lt;/strong&gt;，我们可以直接使用 Python 方案&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;预测部分&lt;/strong&gt;，可以用 pycall, 直接调用 Python 程序
一句话：用 Python 跑数据，再将计算得出的神奇权重值——w，导入我们的 ruby 代码就好啦！
Ruby 和 Python 可以是一对好基友！&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;3.&lt;strong&gt;大神的干货都好干！&lt;/strong&gt;
听各位大神扫代码，有种站在喜马拉雅山下，仰头，望不到顶峰的感觉。
有几场，大神全程密密麻麻刷代码。看了一条短信，回头就跟不上了。不过，想要在这么短的时间，就明白大神花那么多时间才研究透的精髓，我们也是想太多了。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;就让大神为我们打开一扇窗，看看那些奇妙的新世界吧！&lt;/strong&gt;
&lt;strong&gt;就请大神多多写几个好用的 gem，普渡众生吧！&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;期待 rubychina 上，各大神的 ppt 和专门讨论区块，快快上线&lt;/strong&gt;，便于大家进一步学习和讨论。正所谓，大部分目前我还不懂，但希望有一天能懂！
&lt;strong&gt;期待明年大会能多一些：话题爆、带干货、字符不比图片多的讲题！&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="最后"&gt;最后&lt;/h2&gt;
&lt;p&gt;大会包饭，自助餐能吃饱，茶歇还有小蛋糕！300 元的会费，要啥自行车！&lt;/p&gt;
&lt;h3 id="缺点"&gt;缺点&lt;/h3&gt;
&lt;p&gt;不能尽说优点，这样显得不诚恳！
这次大会唯一的不足，就是饭店乌龙事件。因为好多小伙伴定了原先说的会场——海外海国际饭店，结果是海外海皇冠大饭店。不过大会后来提供了接驳大巴，及时补救了。&lt;/p&gt;

&lt;p&gt;本人今年才开始学习使用 Ruby，观点难免有失偏颇，欢迎大家指正。&lt;/p&gt;

&lt;p&gt;总的来说，&lt;strong&gt;感谢 Ruby Conf. China 2017, 让我膜拜了大神，拓展了视野，引发了思考，结识了很多小伙伴。&lt;/strong&gt;
期望 Ruby 社区的&lt;strong&gt;宽容、进取、探索精神永续下去！&lt;/strong&gt;
微信公众号「爱莉莎的雪月花」欢迎关注！&lt;/p&gt;</description>
      <author>elizachen</author>
      <pubDate>Mon, 18 Sep 2017 14:42:09 +0800</pubDate>
      <link>https://ruby-china.org/topics/34163</link>
      <guid>https://ruby-china.org/topics/34163</guid>
    </item>
    <item>
      <title>只要六步，轻松添加 Google 两步认证</title>
      <description>&lt;p&gt;&lt;img src="http://upload-images.jianshu.io/upload_images/3341765-2d130baff0483567.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" title="" alt="公众号_爱莉莎的雪月花.jpg"&gt;&lt;/p&gt;

&lt;p&gt;明天就要在西子湖畔，参加 RubyChina 大会了。
猛然发现，自己还从来没在论坛里发过帖，没共享过任何知识。好心虚！
一拍大腿，前一阵不是试过 Google 两步认证吗？
赶紧写一篇使用心得!
奉上 github 示例代码：&lt;a href="https://github.com/elizachen/google-authenticator-example" rel="nofollow" target="_blank" title=""&gt;https://github.com/elizachen/google-authenticator-example&lt;/a&gt;
再开个网站演示：&lt;a href="https://elizarorlab.herokuapp.com/" rel="nofollow" target="_blank" title=""&gt;https://elizarorlab.herokuapp.com/&lt;/a&gt;
以表达爱莉莎的心意！&lt;/p&gt;
&lt;h2 id="什么是Google两步认证？"&gt;什么是 Google 两步认证？&lt;/h2&gt;
&lt;p&gt;Google 两步认证，是 Google 公司提供的，一种增强账户安全性的方式。
它使用 TOTP 算法（基于时间的一次性密码算法）。
借助两步验证，可以为你的网站用户增加一重安全防护。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;它包括两个部分&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;网页端应用&lt;/li&gt;
&lt;li&gt;手机端应用（iPhone，Android 均有）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;使用前的准备&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;在手机上下载 Google Authenticator 认证程序。
具体操作方式可参考&lt;a href="https://support.google.com/accounts/answer/1066447?hl=zh-Hans" rel="nofollow" target="_blank" title=""&gt;https://support.google.com/accounts/answer/1066447?hl=zh-Hans&lt;/a&gt;。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;使用步骤&lt;/strong&gt;：
一般，在关键步骤（比如需要付费），网站要求你输入&lt;strong&gt;授权码&lt;/strong&gt;：
&lt;strong&gt;第一步&lt;/strong&gt;，打开手机应用，查看当前的&lt;strong&gt;授权码&lt;/strong&gt;。
&lt;img src="http://upload-images.jianshu.io/upload_images/3341765-48db1b4c4944e990.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" title="" alt="公众号_爱莉莎的雪月花.jpg"&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;第二步&lt;/strong&gt;，回到网站，输入&lt;strong&gt;授权码&lt;/strong&gt;，进行验证。&lt;/p&gt;

&lt;p&gt;超级简单，有没有！&lt;/p&gt;
&lt;h2 id="为啥要用Google两步认证？"&gt;为啥要用 Google 两步认证？&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;第一，安全性能大大提高！&lt;/strong&gt;
如果用户帐户只有密码这道安全防线，密码被盗后，就完了！作恶的人可以尽情狂欢，转钱、高买低卖，好恐怖！
&lt;strong&gt;启用两步验证后&lt;/strong&gt;，即使有坏人破解了您的密码，对于&lt;strong&gt;那些要花钱的项目&lt;/strong&gt;，&lt;strong&gt;坏人仍需要借助您的手机，才能继续操作&lt;/strong&gt;。你的手机也被偷了？纳尼？如果你是苹果用户，赶快通过【查找我的 iPhone】挂失，让 iphone 立马变砖头呀！（不要问我怎么知道的，我的小六 plus 就是被偷的）。
&lt;strong&gt;第二，google 不作恶。google 出品，安全可靠&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;h2 id="如何添加Google 两步认证?"&gt;如何添加 Google 两步认证？&lt;/h2&gt;
&lt;p&gt;作者的技术栈是 RoR, 以 Rails 举例。&lt;/p&gt;

&lt;p&gt;1.&lt;strong&gt;安装 google-authenticator-rails gem&lt;/strong&gt;。
在 Gemfile 里添加：
gem 'google-authenticator-rails'&lt;/p&gt;

&lt;p&gt;2.&lt;strong&gt;创建用户数据模型，启用 acts_as_google_authenticated&lt;/strong&gt;。
$ rails g model user name:string email:string salt:string google_secret:string
$ rake db:migrate
＃app / models / user.rb
 class User &amp;lt; ActiveRecord::Base
  acts_as_google_authenticated lookup_token: :salt, drift: 30, issuer: 'eliza''s ROR Lab'
  before_save {|record| record.salt = SecureRandom.hex unless record.salt }
  after_create {|record| record.set_google_secret }
end&lt;/p&gt;

&lt;p&gt;acts_as_google_authenticated：添加必要的验证功能。
drift:  是授权码的有效时限。比如设定为 30，30 秒内的验证码有效。
issuer:  显示发行人，如下图：
&lt;img src="http://upload-images.jianshu.io/upload_images/3341765-281447a8cadb374d.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" title="" alt="1.jpg"&gt;&lt;/p&gt;

&lt;p&gt;3.&lt;strong&gt;创建 UserMfaSession 和 UserMfaSessionController&lt;/strong&gt;
UserMfaSession 是一个处理 MFA session 的 class。
继承自:
&lt;code&gt;GoogleAuthenticatorRails :: Session :: Base&lt;/code&gt;。
 ＃ app / models / user_mfa_session.rb&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class UserMfaSession &amp;lt; GoogleAuthenticatorRails::Session::Base
  # no real code needed here
end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;$ rails g controller user_mfa_sessions
UserMfaSessionController 是处理 UserMfaSession 的 Controller 类。
＃ app/controllers / user_mfa_sessions_controller.rb&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class UserMfaSessionsController &amp;lt; ApplicationController
  skip_before_filter :check_mfa

  def new
    @user = current_user
  end

  def create
    @user = current_user
    if @user.google_authentic?(params[:auth][:mfa_code])
      UserMfaSession.create(@user)
      redirect_to root_url
    else
      flash[:error] = "Wrong code"
      render :new
    end
  end
end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;4.&lt;strong&gt;更改 View 代码：验证授权码是否正确。&lt;/strong&gt;
＃app / views / user_mfa_sessions / new.html.erb&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;% if flash[:error] %&amp;gt;
  &amp;lt;%= flash[:error] %&amp;gt;
  &amp;lt;br /&amp;gt;
&amp;lt;% end %&amp;gt;
&amp;lt;img src="&amp;lt;%= @user.google_qr_uri %&amp;gt;"&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;%= form_tag user_mfa_session_path, method: :post do %&amp;gt;
  &amp;lt;div class="actions"&amp;gt;
    &amp;lt;%= text_field :auth, :mfa_code %&amp;gt;
    &amp;lt;%= submit_tag 'authenticate' %&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;% end %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;5.&lt;strong&gt;在 ApplicationController 中添加 check_mfa。&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class ApplicationController &amp;lt; ActionController::Base
  before_filter :check_mfa

  def current_user
    @current_user = User.find_or_create_by(name: 'elizachen', email: 'elizachen34@gmail.com')
  end

  private
  def check_mfa
     if !(user_mfa_session = UserMfaSession.find) &amp;amp;&amp;amp; (user_mfa_session ? user_mfa_session.record == current_user : !user_mfa_session)
      redirect_to new_user_mfa_session_url
    end
  end
end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;使用&lt;code&gt;checkmfa&lt;/code&gt;检查 MFA 身份验证是否完成，如果未通过身份验证，则将其重定向到 MFA 身份验证。&lt;/p&gt;

&lt;p&gt;6.&lt;strong&gt;路由设定&lt;/strong&gt;
＃config / routes.rb&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Rails.application.routes.draw do
  root 'user_mfa_session#new'
  resource :user_mfa_session, only: %i(new create)
end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src="http://upload-images.jianshu.io/upload_images/3341765-652cad3f85c17798.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" title="" alt="Screen Shot 2017-09-15 at 13.27.35.png"&gt;&lt;/p&gt;
&lt;h2 id="快来「爱莉莎的RoR实验室」试一试"&gt;快来「爱莉莎的 RoR 实验室」试一试&lt;/h2&gt;
&lt;p&gt;网址：&lt;a href="https://elizarorlab.herokuapp.com/" rel="nofollow" target="_blank" title=""&gt;https://elizarorlab.herokuapp.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;1.在手机上下载 Google Authenticator 认证程序。&lt;/p&gt;

&lt;p&gt;2.通过手机扫描网页端的二维码，绑定你的认证账户。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://upload-images.jianshu.io/upload_images/3341765-a1414ace271e000a.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" title="" alt="公众号_爱莉莎的雪月花.jpg"&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://upload-images.jianshu.io/upload_images/3341765-b662186743e3d772.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" title="" alt="公众号_爱莉莎的雪月花.jpg"&gt;&lt;/p&gt;

&lt;p&gt;3.打开手机应用，查看当前的&lt;strong&gt;授权码&lt;/strong&gt;。
4.回到「爱莉莎的 RoR 实验室」&lt;a href="https://elizarorlab.herokuapp.com/" rel="nofollow" target="_blank" title=""&gt;https://elizarorlab.herokuapp.com/&lt;/a&gt;网站，输入&lt;strong&gt;授权码&lt;/strong&gt;，进行验证。
超级简单，有没有！&lt;/p&gt;

&lt;p&gt;是不是很容易呢？&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;简单、安全、不花钱！&lt;/strong&gt;
&lt;strong&gt;Google 两步认证，你的网站，值得拥有！！&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;示例代码也准备好了&lt;/strong&gt;，在爱莉莎的 github: &lt;a href="https://github.com/elizachen/google-authenticator-example" rel="nofollow" target="_blank" title=""&gt;https://github.com/elizachen/google-authenticator-example&lt;/a&gt;
&lt;strong&gt;你不试一试吗？&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;欢迎留言，欢迎关注我的微信公众号【爱莉莎的雪月花】^_^&lt;/p&gt;</description>
      <author>elizachen</author>
      <pubDate>Fri, 15 Sep 2017 23:25:13 +0800</pubDate>
      <link>https://ruby-china.org/topics/34148</link>
      <guid>https://ruby-china.org/topics/34148</guid>
    </item>
  </channel>
</rss>
