<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>derrick (derrick wang)</title>
    <link>https://ruby-china.org/derrick</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>SOS!!! 学了快一年 Ruby on rails , �却做不出自己想要的网页？</title>
      <description>&lt;h3 id="自学了快一年的ruby on rails， 最近有点躁啊。。 各位大大，小弟跪求指点！"&gt;自学了快一年的 ruby on rails，最近有点躁啊。。各位大大，小弟跪求指点！&lt;/h3&gt;
&lt;p&gt;小弟本是一编程小白，忽然想自己做出一个动态网站，于是开始学 ruby on rails，跟做了一些的教程项目，也试着自己开发网站，感觉 ruby 语言和 rails 框架都差不多明白了，就算有一些后端技术问题，google 之后，一般也能解决。但这些都只是把网站的框架搭起来，前端只是简单的用 bootstrap 做一下，很粗糙。&lt;/p&gt;

&lt;p&gt;html, css, bootstrap, jQuery, material design, 这些前端的知识，我也花了很多时间去学，读了文档做了示例。但是当我想按照自己的设想去写页面的时候，总是会纠结，并且页面很丑&lt;img title=":sob:" alt="😭" src="https://twemoji.ruby-china.com/2/svg/1f62d.svg" class="twemoji"&gt; 。&lt;/p&gt;
&lt;h3 id="请问 我要怎么学 才可以做出很ku的前端页面？"&gt;请问 我要怎么学 才可以做出很 ku 的前端页面？&lt;/h3&gt;
&lt;p&gt;或者哪位大神愿意带我实战 web 前端，也是极好的呢&lt;img title=":blush:" alt="😊" src="https://twemoji.ruby-china.com/2/svg/1f60a.svg" class="twemoji"&gt; &lt;/p&gt;

&lt;p&gt;这条路，只想一直走下去。。。&lt;/p&gt;</description>
      <author>derrick</author>
      <pubDate>Sat, 19 Aug 2017 14:35:45 +0800</pubDate>
      <link>https://ruby-china.org/topics/33881</link>
      <guid>https://ruby-china.org/topics/33881</guid>
    </item>
    <item>
      <title>在学习的过程中，人脑是如何工作的？读《认知心理学》所想</title>
      <description>&lt;h2 id="人类大脑是如何工作的？什么是学习？"&gt;人类大脑是如何工作的？什么是学习？&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;大脑有短期工作记忆和长期记忆&lt;/li&gt;
&lt;li&gt;短期记忆像电脑内存，只能维持数秒到数小时，并且容量很小，大概能存放 7 个要点。&lt;/li&gt;
&lt;li&gt;长期记忆像电脑硬盘，容量很大，能保存几天到 3 个月时间。&lt;/li&gt;
&lt;li&gt;学习 就是要将短期记忆变为长期记忆。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="怎么将短期记忆变为长期记忆？"&gt;怎么将短期记忆变为长期记忆？&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1. 理解&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;什么是理解？理解，其实是大脑调用过去的记忆匹配新事物，并将新事物添加到旧的记忆区的过程。&lt;/p&gt;

&lt;p&gt;如果无法找到相关的旧记忆，也不会理解新的事物。人类总是根据已有的记忆去理解新事物。&lt;/p&gt;

&lt;p&gt;那如果不理解就不能存入长期记忆吗？显然不是，还有其它办法可以存入长期记忆。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. 重复&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;像幼儿背三字经一样，大量重复。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. 鲜明的故事。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;如果大人想让小孩记住哪些事不能去做，最好的办法就是编个有趣或可怕的故事讲给他听。&lt;/p&gt;

&lt;p&gt;故事情景可以帮助人们记忆，是因为它能刺激人脑中一个神密的区域，这个区域控制人的情绪。&lt;/p&gt;
&lt;h2 id="以上三种方式，都能形成长期记忆，但是在大脑中形成的记忆区是相同的吗？"&gt;以上三种方式，都能形成长期记忆，但是在大脑中形成的记忆区是相同的吗？&lt;/h2&gt;
&lt;p&gt;是不相同的。&lt;/p&gt;

&lt;p&gt;当使用大量重复去记忆一个完全陌生的知识点时，在大脑中形成是散布的点状记忆。&lt;/p&gt;

&lt;p&gt;以故事情景记忆的知识，形成的是较大的片状记忆。&lt;/p&gt;

&lt;p&gt;当你有相关旧记忆时，可以去理解式记忆（这未必会成功），这时，新的知识会添加到旧的记忆区。&lt;/p&gt;
&lt;h2 id="不同的记忆区，对以后的学习有什么影响？"&gt;不同的记忆区，对以后的学习有什么影响？&lt;/h2&gt;
&lt;p&gt;一般来讲，记忆区越大，以后越容易回想起来，对理解相关知识的帮助也会越大。在我们学习过程中，当再次遇到相关问题时，我们会更容易回忆并思考怎么解决新问题。&lt;/p&gt;
&lt;h2 id="当学习一种完全陌生的知识时，是怎样的过程？"&gt;当学习一种完全陌生的知识时，是怎样的过程？&lt;/h2&gt;
&lt;p&gt;一开始，你是不会去理解的，因为你的大脑找不到相关的知识。&lt;/p&gt;

&lt;p&gt;所以一开始，你只能大量重复。如果有故事情景，你会记的更快。&lt;/p&gt;

&lt;p&gt;当你了有长期记忆，学到了一些知识时，下次你遇到新的知识，你可以尝试去匹配旧的记忆，来达到理解。&lt;/p&gt;</description>
      <author>derrick</author>
      <pubDate>Sun, 25 Jun 2017 21:28:51 +0800</pubDate>
      <link>https://ruby-china.org/topics/33309</link>
      <guid>https://ruby-china.org/topics/33309</guid>
    </item>
    <item>
      <title>Ruby 程序员如何学习正则表达式 (regular expression)</title>
      <description>&lt;p&gt;在编程的世界里，正则表达式 (Regex) 短小精悍并且功能强大，就像独孤九剑一般犀利。&lt;/p&gt;

&lt;p&gt;这么的强大的一种武技，很多人却没有深入掌握，估计都是和我一样，一开始就被类似这种&lt;code&gt;/^.*?[ ]*(?=\s\\.+?$/&lt;/code&gt;霸气的语句给震住了，然后来一句 What the F*$@! 结束。&lt;/p&gt;

&lt;p&gt;现在开始分享我自学的方法：&lt;/p&gt;
&lt;h2 id="准备"&gt;准备&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1. 工具&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.rubular.com/" rel="nofollow" target="_blank" title=""&gt;Rubular:&lt;/a&gt; 一个在线测试器，Ruby 语言下的 Regex 版本。（注：Regex 在不同的语言下有不同的版本，不过差别都不大）&lt;/p&gt;

&lt;p&gt;&lt;a href="https://regex101.com/" rel="nofollow" target="_blank" title=""&gt;RegularExpression101&lt;/a&gt;  这个在线测试器是为 JS/python/php 开发者准备的，不过它很适合初学者使用，因为它会对正则表达式的每个部分都给出提示。所以 Ruby 开发者也可以从中学到很多。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. 书籍&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;《正则表达式》作者：张子阳&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;这本书作为入门书籍很合适，对一些概念的解释也很到位。&lt;/p&gt;

&lt;p&gt;&lt;em&gt;《精通正则表达式》余晟译（英文原著：《Mastering Regular Expressions》&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;这本书是正则表达式方面的经典，这本书会让你真正掌握正则表达式。&lt;/p&gt;
&lt;h2 id="学习方法"&gt;学习方法&lt;/h2&gt;
&lt;p&gt;先将《正则表达式》，将这本书的所有内容跟在测试器中跟做一遍。&lt;/p&gt;

&lt;p&gt;再用 4-6 个小时，粗读《精通正则表达式》。&lt;/p&gt;

&lt;p&gt;个人不推荐慢慢啃这本书，因为里面的概念很深入，如果没有做过相关的案例，很难理解，还会让你怀疑人生。
建议将这本书当做工具书，当你在使用 Regex 过程中，产生疑问时，你一定会在这本书里找到答案。&lt;/p&gt;</description>
      <author>derrick</author>
      <pubDate>Thu, 22 Jun 2017 18:32:22 +0800</pubDate>
      <link>https://ruby-china.org/topics/33283</link>
      <guid>https://ruby-china.org/topics/33283</guid>
    </item>
    <item>
      <title>Ruby on Rails 测试中怎么操作 Session？——深入理解 rails 测试中的 Session</title>
      <description>&lt;p&gt;Rails 项目中，经常要编写集成测试来检验网站是否按正确的流程运行，这样的测试通常与 Session 有关。如果不能深入理解 rails 测试的运行方式，往往会产生许多困惑。下面是我对这方面的理解，希望可以解惑。&lt;/p&gt;
&lt;h2 id="关键理解点："&gt;关键理解点：&lt;/h2&gt;&lt;h3 id="1. 单元测试和集成测试的区别。"&gt;1. 单元测试和集成测试的区别。&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;单元测试（&lt;code&gt;class ActiveSupport::TestCase&lt;/code&gt;）并没有运行全栈，sessions/ cookies hash 只保存在内存中，而不是 cookie jar 中。&lt;/li&gt;
&lt;li&gt;集成测试（&lt;code&gt;class ActionDispatch::IntegrationTest&lt;/code&gt;）运行全栈—Rack middlewares, cookies, sessions。request 中的 sessions/ cookies 会经过 controller 保存到 cookie jar 中。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2. 单元测试和集成测试中操作Session时的不同。"&gt;2. 单元测试和集成测试中操作 Session 时的不同。&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;单元测试语句中可以直接操作 Session, 如：&lt;code&gt;session[:user_id] = user.id&lt;/code&gt;, 因为 session hash 只是保存在内存中。&lt;/li&gt;
&lt;li&gt;集成测试中不能直接使用 Session，是因为 session 只有经过 controller 操作，才能保存到 cookie jar 中，而在集成测试中直接用&lt;code&gt;session[:user_id] = user.id&lt;/code&gt;这样的语句，并不能保存到 cookie jar. &lt;/li&gt;
&lt;li&gt;并且集成测试是为了模拟软件真实的操作流程，而真实的操作发送/接收的是 HTTP request/ response，而不是&lt;code&gt;session[:user_id] = user.id&lt;/code&gt;这样的语句。所以集成测试中不应出现直接修改 Session 的语句。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="3. 集成测试中对Session是以什么方式处理的？"&gt;3. 集成测试中对 Session 是以什么方式处理的？&lt;/h2&gt;
&lt;p&gt;应该按照软件实际运行方式，发送 HTTP request 改变 Session。如发送&lt;code&gt;post login_path, params: { session: { ....} }&lt;/code&gt; 登陆用用户。  &lt;/p&gt;

&lt;hr&gt;
&lt;h2 id="案例分析："&gt;案例分析：&lt;/h2&gt;
&lt;p&gt;SessionsHelper 中有以下方法：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;log_in&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;session&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:user_id&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;user_id&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;问：在 intergration test 中能不能使用 log_in 方法？&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;helper 中的方法默认不能直接在 test 文件只使用。不过可以在&lt;code&gt;test_helper.rb&lt;/code&gt;使用 include 语句调 helper 文件。&lt;/li&gt;
&lt;li&gt;如果在 intergration test 中调用 log_in 方法，就相当于集成测试中直接对 session 进行修改，所以不能使用。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;解决方法：&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;在集成测试中直接写&lt;code&gt;post login_path, params: { session: { ....} }&lt;/code&gt; ，发送 request, 通过 controller 修改 session，实现 log in .&lt;/li&gt;
&lt;li&gt;或者在 test_helper.rb 文件中，为&lt;code&gt;class ActionDispatch::IntegrationTest&lt;/code&gt;类加一个方法，用来实现通过 request 登陆。比如：&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ActionDispatch::IntegrationTest&lt;/span&gt;
   &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;log_in_as&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;password: &lt;/span&gt;&lt;span class="s2"&gt;"password"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="n"&gt;post&lt;/span&gt; &lt;span class="n"&gt;login_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;params: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="ss"&gt;session: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="ss"&gt;email: &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;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;password: &lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt; &lt;span class="p"&gt;}&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;然后就可以在 intergration test 中调用 log_in_as, 使程序更简洁。&lt;/p&gt;</description>
      <author>derrick</author>
      <pubDate>Wed, 12 Apr 2017 16:02:59 +0800</pubDate>
      <link>https://ruby-china.org/topics/32759</link>
      <guid>https://ruby-china.org/topics/32759</guid>
    </item>
  </channel>
</rss>
