<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>williamherry (William)</title>
    <link>https://ruby-china.org/williamherry</link>
    <description>A good person by default</description>
    <language>en-us</language>
    <item>
      <title>Programming Ruby 出新版了</title>
      <description>&lt;p&gt;&lt;a href="https://pragprog.com/titles/ruby5/programming-ruby-3-2-5th-edition/?view_title" rel="nofollow" target="_blank"&gt;https://pragprog.com/titles/ruby5/programming-ruby-3-2-5th-edition/?view_title&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;第五版，针对 Ruby 3.2，这本书还值得看吗？&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/williamherry/09ab625a-a31d-492e-a94b-5a10cd1dceb6.png!large" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>williamherry</author>
      <pubDate>Mon, 20 Mar 2023 08:59:25 +0800</pubDate>
      <link>https://ruby-china.org/topics/42951</link>
      <guid>https://ruby-china.org/topics/42951</guid>
    </item>
    <item>
      <title>Discourse 使用的 Gravatar 被墙了,求解决办法</title>
      <description>&lt;p&gt;现在换成了多说的中转服务器，但感觉不是太靠谱，之前 Gravatar 被墙导致邀请用户队列阻塞，差点搞死服务器&lt;/p&gt;</description>
      <author>williamherry</author>
      <pubDate>Tue, 18 Nov 2014 18:35:41 +0800</pubDate>
      <link>https://ruby-china.org/topics/22747</link>
      <guid>https://ruby-china.org/topics/22747</guid>
    </item>
    <item>
      <title>Getting Started Writing Chef Cookbooks the Berkshelf Way (见过写的最好的技术博文)</title>
      <description>&lt;p&gt;写的非常好的文章，讲了如何以 Berkshelf 和方式开发 Cookbook, 后面还讲到了用 test-kitchen 来帮助写出适用于多平台的 Cookbook.推荐对 Chef 有兴趣的看一看&lt;/p&gt;

&lt;p&gt;&lt;a href="http://misheska.com/blog/2013/06/16/getting-started-writing-chef-cookbooks-the-berkshelf-way/" rel="nofollow" target="_blank"&gt;http://misheska.com/blog/2013/06/16/getting-started-writing-chef-cookbooks-the-berkshelf-way/&lt;/a&gt;
&lt;a href="http://misheska.com/blog/2013/06/23/getting-started-writing-chef-cookbooks-the-berkshelf-way-part2/" rel="nofollow" target="_blank"&gt;http://misheska.com/blog/2013/06/23/getting-started-writing-chef-cookbooks-the-berkshelf-way-part2/&lt;/a&gt;
&lt;a href="http://misheska.com/blog/2013/08/06/getting-started-writing-chef-cookbooks-the-berkshelf-way-part3/" rel="nofollow" target="_blank"&gt;http://misheska.com/blog/2013/08/06/getting-started-writing-chef-cookbooks-the-berkshelf-way-part3/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;我的感觉是 Berkshelf 完全颠覆了原来以 role/data bag/node attribute 组织和定制 Cookbook 的方式，它所使用的方式是用一个类似 Wrapper 的 Cookbook，或者叫收 App Cookbook，一个应用 (如上面例子里的 myface) 只有一个这样的 cookbook，在这个里面组织或定制其它的 Cookbook, 刚看了一点不知道理解的对不对&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/hYt0E84kYUI" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <author>williamherry</author>
      <pubDate>Sun, 01 Dec 2013 22:54:34 +0800</pubDate>
      <link>https://ruby-china.org/topics/15928</link>
      <guid>https://ruby-china.org/topics/15928</guid>
    </item>
    <item>
      <title>自己发的文章别人回复了我没收到通知</title>
      <description>&lt;p&gt;如题，我发的文章有人回复了右上角没有提示，我都不知道有人回复了，以前没有这个问题，是不是我哪里改了设置，或者这是新的策略？&lt;/p&gt;</description>
      <author>williamherry</author>
      <pubDate>Tue, 06 Aug 2013 11:29:32 +0800</pubDate>
      <link>https://ruby-china.org/topics/13091</link>
      <guid>https://ruby-china.org/topics/13091</guid>
    </item>
    <item>
      <title>Rails 4 Turbolinks 导致 js 工作不正常</title>
      <description>&lt;p&gt;Rails 3 上跑的很欢的代码放到 Rails 4 上工作异常，初步推测是 Turbolinks 导致&lt;/p&gt;

&lt;p&gt;是一个用 ajax 发评论的功能&lt;/p&gt;

&lt;p&gt;view 代码 &lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.new-comment                                                                                                                                         
  - if current_user
    = render "editor_toolbar"
    = form_for(Comment.new, :remote =&amp;gt; true, :url =&amp;gt; mission_comments_path(@mission)) do |f|
      = f.text_area :content, :class =&amp;gt; "span10",
        :rows =&amp;gt; "4", :tabindex =&amp;gt; "1"
      #preview.hidden
        = "Loading..."
      = f.submit t("missions.submit_comment"),
        "data-disable-with" =&amp;gt; t("missions.submitting"),
        :class =&amp;gt; "btn btn-primary", :tabindex =&amp;gt; "2"
  - else
    = render "need_login_to_comment"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;controller 代码&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def create
  @mission = Mission.find(params[:mission_id])
  @comment = @mission.comments.build(comment_params)
  @comment.user = current_user

  @comment.save
end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;js 代码&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;% if @comment.errors.any? %&amp;gt;                                                                                                                        
  $(".new-comment textarea").focus();
&amp;lt;% else %&amp;gt;
  $(".comments").append("&amp;lt;%= j (render @comment, :index =&amp;gt; @mission.comments.count-1) %&amp;gt;");
  $(".new-comment #preview").addClass("hidden").html('');
  $(".new-comment textarea").css("display", "block").val('');
  $(".editor-toolbar .preview").removeClass("active");
  $(".editor-toolbar .edit").addClass("active");
&amp;lt;% end %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;有两个问题，第一个是如果 controller 那样写什么效果也没有，最后面加上&lt;code&gt;render layout: false&lt;/code&gt;就可以了&lt;/p&gt;

&lt;p&gt;第二个问题，直接打开这个页面发评论没有问题，但如果从其它页面通过 link 转过来点一次发布会同步发多次&lt;/p&gt;

&lt;p&gt;我猜是 turbolinks 的问题，但没办法解决掉，不知道有没人遇到过，还是我代码里有低级错误？望大神帮忙&lt;/p&gt;</description>
      <author>williamherry</author>
      <pubDate>Mon, 05 Aug 2013 22:31:54 +0800</pubDate>
      <link>https://ruby-china.org/topics/13075</link>
      <guid>https://ruby-china.org/topics/13075</guid>
    </item>
    <item>
      <title>好久没讨论语言了 - 我只是路过</title>
      <description>&lt;p&gt;&lt;a href="http://www.admin10000.com/document/2464.html" rel="nofollow" target="_blank" title=""&gt;再谈 PHP、Python 与 Ruby&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="一句话总结"&gt;一句话总结&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;假如你想帮他尽快找个活儿，赚到钱，推荐 PHP。&lt;/li&gt;
&lt;li&gt;假如你想让他成为一个高效工程师，推荐 Python。&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;ul&gt;
&lt;li&gt;没有最好的语言，只有最合适的语言。&lt;/li&gt;
&lt;li&gt;没有糟糕的语言，只有糟糕的程序员。&lt;/li&gt;
&lt;li&gt;没有一种语言是万能的，只会一种语言是万万不能的。&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>williamherry</author>
      <pubDate>Sun, 21 Jul 2013 22:58:19 +0800</pubDate>
      <link>https://ruby-china.org/topics/12659</link>
      <guid>https://ruby-china.org/topics/12659</guid>
    </item>
    <item>
      <title>求助 如何去掉 Nokogiri 这个 Gem 的 warning</title>
      <description>&lt;p&gt;WARNING: Nokogiri was built against LibXML version 2.8.0, but has dynamically loaded 2.9.0&lt;/p&gt;

&lt;p&gt;看着很烦，google 找到的都是针对 mac 的，试了几个不行&lt;/p&gt;

&lt;p&gt;不知道有人遇到同样的问题没？&lt;/p&gt;</description>
      <author>williamherry</author>
      <pubDate>Sat, 29 Jun 2013 13:26:03 +0800</pubDate>
      <link>https://ruby-china.org/topics/12090</link>
      <guid>https://ruby-china.org/topics/12090</guid>
    </item>
    <item>
      <title>推荐大家个音乐网站</title>
      <description>&lt;p&gt;主要是个人感觉网站做的非常漂亮，真的是好漂亮&lt;/p&gt;

&lt;p&gt;&lt;a href="http://jing.fm/" rel="nofollow" target="_blank"&gt;http://jing.fm/&lt;/a&gt;&lt;/p&gt;</description>
      <author>williamherry</author>
      <pubDate>Tue, 25 Jun 2013 16:22:04 +0800</pubDate>
      <link>https://ruby-china.org/topics/11982</link>
      <guid>https://ruby-china.org/topics/11982</guid>
    </item>
    <item>
      <title>Github 发布全新界面 —— Repository Next</title>
      <description>&lt;p&gt;今天 Github 发布了重新设计的资料库界面，全新的体验侧重于内容，适合每日使用。
&lt;img src="//l.ruby-china.com/photo/ab265bc62018c37290aa67f9cfe64b19.jpg" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;我还是觉得原来的好&lt;/p&gt;</description>
      <author>williamherry</author>
      <pubDate>Tue, 18 Jun 2013 11:33:11 +0800</pubDate>
      <link>https://ruby-china.org/topics/11804</link>
      <guid>https://ruby-china.org/topics/11804</guid>
    </item>
    <item>
      <title>分享 Ember.js 学习资料汇总网站</title>
      <description>&lt;p&gt;不知道有没人对 Ember.js 感兴趣，就是 discourse 使用的前端框架，我找资料时发现的比较全的资料汇总网站，talk, screencast, tutorial, example 就有尽有，对 Ember.js 感兴趣的人一定不能错过&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberwatch.com/" rel="nofollow" target="_blank"&gt;http://emberwatch.com/&lt;/a&gt;&lt;/p&gt;</description>
      <author>williamherry</author>
      <pubDate>Fri, 17 May 2013 13:31:52 +0800</pubDate>
      <link>https://ruby-china.org/topics/11058</link>
      <guid>https://ruby-china.org/topics/11058</guid>
    </item>
    <item>
      <title>Ruby 安全漏洞，1.9/2.0 全分支受影响</title>
      <description>&lt;p&gt;Ruby 开发团队今天发布了两个更新版本 Ruby 1.9.3-p429 和 Ruby 2.0.0-p195。 &lt;/p&gt;

&lt;p&gt;这两个版本主要修复了 Ruby DL / Fiddle 中的一个安全漏洞：&lt;/p&gt;

&lt;p&gt;对象污染绕过漏洞&lt;a href="http://www.ruby-lang.org/en/news/2013/05/14/taint-bypass-dl-fiddle-cve-2013-2065/" rel="nofollow" target="_blank" title=""&gt;（CVE-2013-2065）&lt;/a&gt;：受污染的字符串可以通过系统调用来使用，而不受 Ruby 中$SAFE 级别设置约束。&lt;/p&gt;

&lt;p&gt;受影响的版本：&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Ruby 1.9.3 p426 之前的所有 1.9.x 版本
Ruby 2.0.0 p195 之前的所有 2.0 版本
trunk 40728 之前的版本
Ruby 1.8 版本不受影响&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;如果你不能升级 Ruby，下面这个“猴子补丁”可以作为一种变通方案：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Fiddle::Function&lt;/span&gt; 
  &lt;span class="k"&gt;alias&lt;/span&gt; &lt;span class="ss"&gt;:old_call&lt;/span&gt; &lt;span class="ss"&gt;:call&lt;/span&gt; 
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vg"&gt;$SAFE&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;any?&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tainted?&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; 
      &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="no"&gt;SecurityError&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"tainted parameter not allowed"&lt;/span&gt; 
    &lt;span class="k"&gt;end&lt;/span&gt; 
    &lt;span class="n"&gt;old_call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;args&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;/code&gt;&lt;/pre&gt;
&lt;p&gt;此外，这两个版本还进行了一些优化，修复了一些小的 bug，详细信息：&lt;a href="http://svn.ruby-lang.org/repos/ruby/tags/v1_9_3_429/ChangeLog" rel="nofollow" target="_blank" title=""&gt;1.9.3 p429 changeLog&lt;/a&gt;、&lt;a href="ftp://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p195.zip" rel="nofollow" target="_blank" title=""&gt;2.0.0 p195 changeLog &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;下载地址：&lt;/p&gt;

&lt;p&gt;&lt;a href="ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p429.zip" rel="nofollow" target="_blank" title=""&gt;ruby-1.9.3-p429&lt;/a&gt;
&lt;a href="ftp://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p195.zip" rel="nofollow" target="_blank" title=""&gt;ruby-2.0.0-p195&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.iteye.com/news/27746" rel="nofollow" target="_blank"&gt;http://www.iteye.com/news/27746&lt;/a&gt;&lt;/p&gt;</description>
      <author>williamherry</author>
      <pubDate>Wed, 15 May 2013 14:51:20 +0800</pubDate>
      <link>https://ruby-china.org/topics/10998</link>
      <guid>https://ruby-china.org/topics/10998</guid>
    </item>
    <item>
      <title>对 stub 和 mock 的理解</title>
      <description>&lt;p&gt;一直对 stub 和 mock 不是非常理解，前几天听了&lt;code&gt;Terry&lt;/code&gt;和&lt;code&gt;aNdReW&lt;/code&gt;大侠的指点后感觉对它们的理解深入了许多，从不理解到理解这种恍然大悟的感觉非常爽，这里把自己粗浅的认识记录下来并分享给大家，希望对像我一样的新手有帮助&lt;/p&gt;

&lt;p&gt;先从&lt;code&gt;stub&lt;/code&gt;说起，什么是&lt;code&gt;stub&lt;/code&gt;呢，&lt;code&gt;CodeSchool&lt;/code&gt;给出这样的定义：&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Stub:
For replacing a method with code that returns a specified result&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;简单说就是你可以用&lt;code&gt;stub&lt;/code&gt;去伪造 (fake) 一个方法，阻断对原来方法的调用，例如下面来自&lt;code&gt;CodeSchool&lt;/code&gt;的例子&lt;/p&gt;

&lt;p&gt;我们有一个叫&lt;code&gt;zombie&lt;/code&gt;的&lt;code&gt;model&lt;/code&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Zombie &amp;lt; ActiveRecord::Base
  has_one :weapon

  def decapitate
    weapon.slice(self, :head)
    self.status = "dead again"
  end
end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我们要测试&lt;code&gt;decapitate&lt;/code&gt;方法，它里面调用了&lt;code&gt;weapon&lt;/code&gt;的&lt;code&gt;slice&lt;/code&gt;方法，下面是测试代码：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;describe Zombie do
  let(:zombie) { Zombie.create }

  context "#decapitate" do
    it "sets status to dead again" do
      zombie.weapon.stub(:slice)
      zombie.decapitate
      zombie.status.should == "dead again"
    end
  end
end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上面代码的第 6 行就是用&lt;code&gt;stub&lt;/code&gt;伪造了&lt;code&gt;weapon&lt;/code&gt;的&lt;code&gt;slice&lt;/code&gt;方法，阻断了对原来方法的调用&lt;/p&gt;

&lt;p&gt;你可能会问为什么我们要这样做，这是因为我们在做单元测试，&lt;code&gt;weapon&lt;/code&gt;的&lt;code&gt;slice&lt;/code&gt;可能会非常复杂，里面又调用了其它的方法等等，这是集成测试应该做的工作。事实上这里我们是在测试&lt;code&gt;decapitate&lt;/code&gt;方法会把&lt;code&gt;zombie.status&lt;/code&gt;设置成&lt;code&gt;"dead again"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;接下来我们来说&lt;code&gt;mock&lt;/code&gt;, &lt;code&gt;CodeSchool&lt;/code&gt;上给的定义是这样的：&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Mock:&lt;br&gt;
A stub with an expectations that the method gets called.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;简单来说&lt;code&gt;mock&lt;/code&gt;就是&lt;code&gt;stub + expectation&lt;/code&gt;, 说它是&lt;code&gt;stub&lt;/code&gt;是因为它也可以像&lt;code&gt;stub&lt;/code&gt;一样伪造方法，阻断对原来方法的调用，&lt;code&gt;expectation&lt;/code&gt;是说它不仅伪造了这个方法，它还期望你 (必须) 调用这个方法，如果没有被调用到，这个&lt;code&gt;test&lt;/code&gt;就&lt;code&gt;fail&lt;/code&gt;了，看下面的例子&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;describe Zombie do
  let(:zombie) { Zombie.create }

  context "#decapitate" do
    it "calls weapon.slice" do
      zombie.weapon.should_receive(:slice)
      zombie.decapitate
    end
  end
end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里的第 6 行伪造了&lt;code&gt;weapon&lt;/code&gt;的&lt;code&gt;slice&lt;/code&gt;方法，并期望这个方法在这个测试中被调用。&lt;/p&gt;

&lt;p&gt;你可能会想为什么要这样写，这是因为我们仅仅是要测试&lt;code&gt;decapitate&lt;/code&gt;这个方法确实调用了&lt;code&gt;weapon.slice&lt;/code&gt;, 可以把&lt;code&gt;decapitate&lt;/code&gt;想成下面的黑盒，我们蹲在图中的 A 点，等着看它会不会去调用&lt;code&gt;weapon.slice&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/faf24150a02ca090b52579c8c658668c.jpg" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;这个图是&lt;code&gt;Sandi Metz&lt;/code&gt;在&lt;code&gt;RailsConf 2013&lt;/code&gt;上的演讲&lt;code&gt;The Magic Tricks of Testing&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.justin.tv/confreaks/c/2247122" rel="nofollow" target="_blank" title=""&gt;视频&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://speakerdeck.com/skmetz/magic-tricks-of-testing-railsconf" rel="nofollow" target="_blank" title=""&gt;Slides&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;这里注意一下顺序，一般的测试先是执行一个动作，然后再去判断状态或其它东西，像前面&lt;code&gt;stub&lt;/code&gt;的例子，先调用 decapitate 方法，再去判断&lt;code&gt;status&lt;/code&gt;的变化，就好像我踢你一脚，看你会不会喊疼，而这里是先有期望再有动作，这就好比老板对你说这个下周前完成，不然就滚蛋一样&lt;/p&gt;

&lt;p&gt;&lt;a href="http://williamherry.com/blog/2013/05/13/understand-stub-and-mock/" rel="nofollow" target="_blank" title=""&gt;博客地址&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;期待&lt;code&gt;Terry&lt;/code&gt;深入探讨 stub 和 mock 的文章&lt;/p&gt;</description>
      <author>williamherry</author>
      <pubDate>Tue, 14 May 2013 14:57:54 +0800</pubDate>
      <link>https://ruby-china.org/topics/10977</link>
      <guid>https://ruby-china.org/topics/10977</guid>
    </item>
    <item>
      <title>好消息好消息. Vim 7.4 要来了</title>
      <description>&lt;p&gt;Bram Moolenaar 于 5 月 9 日上午在 Vim 谷歌群组发布了一条消息，告知有关 Vim 7.4 的计划。全文编译如下：&lt;/p&gt;

&lt;p&gt;“各位 Vim 用户好，&lt;/p&gt;

&lt;p&gt;我们现在最新的补丁数字是 7.3.931，再过几周就要发布 7.3.999 了。该考虑 Vim 7.4 了！&lt;/p&gt;

&lt;p&gt;在 Vim 新特性需求的投票中，下面这五个需求呼声最高：&lt;/p&gt;

&lt;p&gt;增加 IDE 特性（整合调试器、shell 窗口）；
增加和 Python 的整合，而不是再发明更多的 Vim 脚本；
解决所有大大小小问题，让 Vim 更加健壮；
提高语法高亮的速度；
增加协作编辑
虽然我不可能在几周内就可以做完以上需求，但我准备做下面这些：&lt;/p&gt;

&lt;p&gt;加入 ZyX 已经做好的 Python 补丁。这可从 Python 接口那头来提高 Vim API。
加入快速的正则表达式引擎补丁（这悬而未决老长时间了），有些逻辑会退回到旧的正则表达式引擎，所以有些模型在新引擎下或许无法工作了。
加入很多待解决的补丁，来修正 Bug。
此外，如果你是在维护运行时文件，有任何未解决的更新，请给我发过来吧。在 7.4 版发布之前，我不会做出重大变化，因为一切都需要时间来测试了。咱们就把五月底设为截止期限吧。&lt;/p&gt;

&lt;p&gt;我还没有确定 7.4 版的发布时间。我会加入那些提到的变化，然后我们需要些时间来测试，直至看起来稳定。希望在 7.3.999 之前能做完了……”&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.jobbole.com/39429/" rel="nofollow" target="_blank"&gt;http://blog.jobbole.com/39429/&lt;/a&gt;&lt;/p&gt;</description>
      <author>williamherry</author>
      <pubDate>Fri, 10 May 2013 09:56:25 +0800</pubDate>
      <link>https://ruby-china.org/topics/10871</link>
      <guid>https://ruby-china.org/topics/10871</guid>
    </item>
    <item>
      <title>Fedora 19 默认明文显示密码 - 大家怎么看</title>
      <description>&lt;p&gt;通常，我们在一个网站的密码区输入密码时都是以****&lt;strong&gt;&lt;em&gt;形式显示，密码不可见。
可用性大师 Jakob Nielsen 认为用户输入密码应该以明文形式显示。安全专家 Bruce Schneier 也说，&lt;/em&gt;&lt;/strong&gt;**形式隐藏密码的方法困扰了他很久，他认为透过肩膀偷窥密码其实&lt;a href="http://www.out-law.com/page-10152" rel="nofollow" target="_blank" title=""&gt;不是一个真正的安全问题&lt;/a&gt;，如果有人靠近，输入者会知道并会提高警惕。
于是，Fedora 的 Anaconda 安装器维护者立即将其付诸实践，Fedora 19 在输入密码时以明文显示。结果这一对用户友好的可用性改进&lt;a href="http://it.slashdot.org/story/13/05/04/1248242/fedora-19-to-stop-masking-passwords" rel="nofollow" target="_blank" title=""&gt;引发了争议&lt;/a&gt;，有用户递交了&lt;a href="https://bugzilla.redhat.com/show_bug.cgi?id=958608" rel="nofollow" target="_blank" title=""&gt;bug 报告&lt;/a&gt;，在邮件列表上展开了&lt;a href="http://lists.fedoraproject.org/pipermail/devel/2013-May/thread.html#182196" rel="nofollow" target="_blank" title=""&gt;辩论&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.linuxeden.com/html/news/20130505/138924.html" rel="nofollow" target="_blank"&gt;http://www.linuxeden.com/html/news/20130505/138924.html&lt;/a&gt;&lt;/p&gt;</description>
      <author>williamherry</author>
      <pubDate>Tue, 07 May 2013 11:25:01 +0800</pubDate>
      <link>https://ruby-china.org/topics/10778</link>
      <guid>https://ruby-china.org/topics/10778</guid>
    </item>
    <item>
      <title>粉丝眼中的操作系统</title>
      <description>&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/32d0e73a83f467ab15926b304a8843f3.jpg" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>williamherry</author>
      <pubDate>Thu, 02 May 2013 12:48:09 +0800</pubDate>
      <link>https://ruby-china.org/topics/10652</link>
      <guid>https://ruby-china.org/topics/10652</guid>
    </item>
    <item>
      <title>ember.js 的问题,报 node: undefined symbol: _ZN2v86LockerC1EPNS_7IsolateE</title>
      <description>&lt;p&gt;我试着学习 ember.js，它老是报这个错。我是跟着 railscast 做的，后面把他的代码下下来也报这个错&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Showing /home/william/codes/408-ember-part-1/raffler-    after/app/views/layouts/application.html.erb where line #6 raised:

node: symbol lookup error: node: undefined symbol: _ZN2v86LockerC1EPNS_7IsolateE

  (in /home/william/codes/408-ember-part-1/raffler- after/app/assets/javascripts/store.js.coffee)
Extracted source (around line #6):

3: &amp;lt;head&amp;gt;
4:   &amp;lt;title&amp;gt;Raffler&amp;lt;/title&amp;gt;
5:   &amp;lt;%= stylesheet_link_tag    "application", :media =&amp;gt; "all" %&amp;gt;
6:   &amp;lt;%= javascript_include_tag "application" %&amp;gt;
7:   &amp;lt;%= csrf_meta_tags %&amp;gt;
8: &amp;lt;/head&amp;gt;
9: &amp;lt;body&amp;gt;
Rails.root: /home/william/codes/408-ember-part-1/raffler-after
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Google 搜这个报错只有很少的几个结果，好像都不想关&lt;/p&gt;

&lt;p&gt;我的系统是 openSUSE12.3 安装的 nodejs&lt;/p&gt;

&lt;p&gt;stackoverflow 的地址，目前没人回，不知道这里有没大牛知道是怎么回事
&lt;a href="http://stackoverflow.com/questions/15965784/symbol-lookup-error-node-undefined-symbol-zn2v86lockerc1epns-7isolatee" rel="nofollow" target="_blank"&gt;http://stackoverflow.com/questions/15965784/symbol-lookup-error-node-undefined-symbol-zn2v86lockerc1epns-7isolatee&lt;/a&gt;&lt;/p&gt;</description>
      <author>williamherry</author>
      <pubDate>Fri, 12 Apr 2013 20:49:54 +0800</pubDate>
      <link>https://ruby-china.org/topics/10143</link>
      <guid>https://ruby-china.org/topics/10143</guid>
    </item>
    <item>
      <title>Github 邮件被读，网站也变成已读，这个是怎么实现的</title>
      <description>&lt;p&gt;刚刚发现好像 github 的通知如果你读了邮件，网站上的会自动变成已读，真是这样吗，还是我搞错了，有人知道这个怎么实现的吗&lt;/p&gt;</description>
      <author>williamherry</author>
      <pubDate>Fri, 12 Apr 2013 17:26:59 +0800</pubDate>
      <link>https://ruby-china.org/topics/10140</link>
      <guid>https://ruby-china.org/topics/10140</guid>
    </item>
    <item>
      <title>ruby 的又一次胜利 -- Yii2 将用 ruby 重写</title>
      <description>&lt;p&gt;大名鼎鼎的 PHP 框架 Yii 官网首页昨天出现了一则重磅消息，声称将使用 Ruby 代替 PHP 语言来重写下一个大版本 Yii2。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.oschina.net/news/39199/yii2-migrates-from-php-to-ruby" rel="nofollow" target="_blank"&gt;http://www.oschina.net/news/39199/yii2-migrates-from-php-to-ruby&lt;/a&gt;&lt;/p&gt;</description>
      <author>williamherry</author>
      <pubDate>Tue, 02 Apr 2013 23:28:21 +0800</pubDate>
      <link>https://ruby-china.org/topics/9936</link>
      <guid>https://ruby-china.org/topics/9936</guid>
    </item>
    <item>
      <title>KDE 下的 Amarok 很强大</title>
      <description>&lt;p&gt;听了 Teahour.fm 才知道有 Podcast 这个东西，昨天无聊切换到 KDE 下，发现 Amarok 很强大，直接粘地址就可以播放，而且可以显示一些背景资料，有图为证
&lt;img src="//l.ruby-china.com/photo/6facbbfe59a2aacdad0a8ba40b1c1088.png" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>williamherry</author>
      <pubDate>Wed, 13 Mar 2013 12:56:09 +0800</pubDate>
      <link>https://ruby-china.org/topics/9379</link>
      <guid>https://ruby-china.org/topics/9379</guid>
    </item>
    <item>
      <title>清华大学开源镜像站将关停</title>
      <description>&lt;p&gt;&lt;a href="http://www.linuxeden.com/html/news/20130312/136832.html" rel="nofollow" target="_blank"&gt;http://www.linuxeden.com/html/news/20130312/136832.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;大家怎么看&lt;/p&gt;</description>
      <author>williamherry</author>
      <pubDate>Tue, 12 Mar 2013 14:04:44 +0800</pubDate>
      <link>https://ruby-china.org/topics/9352</link>
      <guid>https://ruby-china.org/topics/9352</guid>
    </item>
  </channel>
</rss>
