<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>nagae_memooff (辙道辕门)</title>
    <link>https://ruby-china.org/nagae_memooff</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>如何检验一个 json/hash 与给定的 hash 结构是否相同 / 相似？</title>
      <description>&lt;p&gt;情况是这样的，我最近试图对一些 API 做测试，测试的目的仅仅是模拟客户端的行为以及对接口的要求（比如要求什么样子的字段和结构），不考虑 API 的具体代码和复杂的逻辑检验。
其中有一个情况是，我想要测试其中部分 API 返回的 json 是否满足给定的结构，比如我期望某个 api 返回如下结构的 json：&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;status&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;OK&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;msg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;   
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;equipments&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;description&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;desc_a&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;equip_type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type_a&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;description&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;desc_b&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;equip_type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type_b&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;description&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;desc_c&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;equip_type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type_c&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;equipments&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;description&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;desc_d&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;equip_type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type_a&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;description&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;desc_e&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;equip_type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type_b&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;description&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;desc_f&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;equip_type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type_c&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;类似这种结构，同时又考虑到服务器端返回的数组可能为空数组，这种情况也认为结构符合要求。
对于这种类型的比较，在 rspec 或 ruby 中有没有现成的 gem 可以使用？
如果没有的话，自己比较需要解决两个问题：
1、如何描述期待的数据结构
2、如何将期待的结构与实际返回的做对比&lt;/p&gt;</description>
      <author>nagae_memooff</author>
      <pubDate>Mon, 12 May 2014 11:19:17 +0800</pubDate>
      <link>https://ruby-china.org/topics/19191</link>
      <guid>https://ruby-china.org/topics/19191</guid>
    </item>
    <item>
      <title>发现 114dns 出现一个很奇怪的问题</title>
      <description>&lt;p&gt;似乎&lt;strong&gt;当且仅当查询域名为 www.google.com 且查询方式为 tcp 时&lt;/strong&gt;，很久都没反应，然后回提示连接超时。改为其他包含谷歌的域名或是使用 udp 查询 www.google.com 都没有这个问题，很奇怪……有人知道原因吗？&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;~&lt;span class="nv"&gt;$ &lt;/span&gt;dig @114.114.114.114 www.google.com +tcp

&lt;span class="p"&gt;;&lt;/span&gt; &amp;lt;&amp;lt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; DiG 9.8.1-P1 &amp;lt;&amp;lt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; @114.114.114.114 www.google.com +tcp
&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;1 server found&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;;;&lt;/span&gt; global options: +cmd
&lt;span class="p"&gt;;;&lt;/span&gt; connection timed out&lt;span class="p"&gt;;&lt;/span&gt; no servers could be reached
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;类似这样，换成其他域名（即使包含谷歌或是不存在的域名）或者+notcp 或者不写 tcp 参数都立马出来。&lt;/p&gt;

&lt;p&gt;===============分割线&lt;/p&gt;

&lt;p&gt;刚才在清华试有这个问题，现在在北工商试好像没这个问题……不知道是修复了还是什么其他原因 orz&lt;/p&gt;</description>
      <author>nagae_memooff</author>
      <pubDate>Thu, 13 Feb 2014 18:01:15 +0800</pubDate>
      <link>https://ruby-china.org/topics/17234</link>
      <guid>https://ruby-china.org/topics/17234</guid>
    </item>
    <item>
      <title>whenever 似乎存在默认上下午问题 (找到原因，是使用 chronic 解析时间导致的)</title>
      <description>&lt;p&gt;我们现在这个项目之前是直接写 crontab 文件来执行定时任务的，在不同的服务器之间部署比较麻烦（由于许多原因，项目部署路径不一样，而且有些应用端口号也不一样，每次需要修改一些部署路径和配置文件），于是我就想至少把定时任务给用 whenever 做了吧，省得每次都 cd 到部署目录下，还要考虑到环境变量问题。
然后我刚才写了这么一个任务：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;every&lt;/span&gt; &lt;span class="ss"&gt;:day&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;at: &lt;/span&gt;&lt;span class="s1"&gt;'3:00'&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;span class="n"&gt;rake&lt;/span&gt; &lt;span class="s1"&gt;'sometask'&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;由于定时任务有好多，而且终端不能滚屏（orz）所以也就随便扫了一眼，然后发现生成的 cron 是这样的
0 15 * * * /bin/bash ........
&lt;strong&gt;3:00 被解析成了 15 点。&lt;/strong&gt;
推测是 whenever 或者是 rails 里涉及时间的某些机制导致的，于是由于现在是下午，就默认将 3:00 解析成下午三点了。
不知道这个问题算不算 bug，是不是其他 gem 中也会有类似问题。显式写成 03:00 就没有问题了。&lt;/p&gt;

&lt;p&gt;=======修改分割线======
已找到原因，见 3、4 楼。如果有遇到类似问题的可以参考一下。&lt;/p&gt;</description>
      <author>nagae_memooff</author>
      <pubDate>Mon, 10 Feb 2014 17:10:43 +0800</pubDate>
      <link>https://ruby-china.org/topics/17150</link>
      <guid>https://ruby-china.org/topics/17150</guid>
    </item>
    <item>
      <title>有没有必要预先提防新旧版本 ruby 之间可能会有不同的本地变量作用域？</title>
      <description>&lt;p&gt;标题提得比较绕，因为确实有点不知道该怎么概括这个问题，见谅呀。
我提的这个问题发自于这样的思考：
弱/动态类型的语言声明变量时，不似传统语言有精确的作用域，一旦写好就不会改变，而是不同程度依赖代码的上下文。我接触过的弱类型语言有 javascript 和 ruby。javascript 中使用 var 来声明临时变量或不使用关键字直接声明外层变量；ruby 不需要使用关键词来声明变量。那么我在实际的编码过程里遇到了类似以下的情况：&lt;/p&gt;

&lt;p&gt;一段 if 或者 while 的逻辑，会依据不同结果将相应的不同的值赋给一个或多个临时变量，然后由其他的方法来使用或者返回这个值给客户端。类似下面的逻辑：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;if_or_while_some_expressions&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;some_functions&lt;/span&gt; &lt;span class="n"&gt;object&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;another_functions&lt;/span&gt; &lt;span class="n"&gt;object&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="n"&gt;render_result&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;目前我们的这段代码在 ruby1.9.3 中能够正常工作，但我是否需要提防以后版本的 ruby 中会抛出没有 result 这个变量，或者由于作用域的原因而导致 result 的值混成了外层的某个值呢（因为很多其他语言中，if-else 块或者 while 块里的变量只要出了块就会消失，这也符合常识，而 ruby 这种即使出了 if 范围仍然保留本地变量的做法显得不那么大众）。
也就是说，有没有必要写成以下的形式：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;            &lt;span class="c1"&gt;# 或者写成result=nil或者其他的形式，只要赋个初始值就行&lt;/span&gt;
&lt;span class="n"&gt;if_or_while_some_expressions&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;some_functions&lt;/span&gt; &lt;span class="n"&gt;object&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;another_functions&lt;/span&gt; &lt;span class="n"&gt;object&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="n"&gt;render_result&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;用以避免可能造成的作用域模糊呢？&lt;/p&gt;</description>
      <author>nagae_memooff</author>
      <pubDate>Sat, 08 Feb 2014 14:48:22 +0800</pubDate>
      <link>https://ruby-china.org/topics/17118</link>
      <guid>https://ruby-china.org/topics/17118</guid>
    </item>
    <item>
      <title>有随机性、或者与外界某些条件相关 (比如时间) 的程序该以什么思路写测试呢？</title>
      <description>&lt;p&gt;如题。我现在在写测试中遇到一些问题，比如：
1、有的接口可能在低并发时不会显示出问题，但高并发（或者网络条件不太好）的情况下会出 bug；
2、有的接口可能会在特定的时间内做特定的事情；
3、有的接口在服务器端执行了许多代码，但其中一部分行为是行为客户端难以获知（或者无需获知）的；
4、有的接口返回结果具有一定随机性，难以准确测试出来。&lt;/p&gt;

&lt;p&gt;这样的程序，我想有没有一个比较好的思路去写测试呢（与测试所用的工具无关是最好的）？举几个例子吧。&lt;/p&gt;

&lt;p&gt;第一个例子，我们可以设想一个多玩家一起打 boss 的手游。boss 被所有玩家共享 HP，最终击杀 BOSS 的玩家、总共让 BOSS 的 HP 减少得最多的玩家、参与打 BOSS 的玩家分别获得不同的奖励。boss 在特定时间后（比如每天 12:30 以后）允许玩家攻击，如果 20 分钟内没有击杀 BOSS 则今日挑战失败，等等。
然后某些接口可以根据今天的挑战是否结束，决定返回今日或是昨日的战报，等等。&lt;/p&gt;

&lt;p&gt;这个例子主要涉及到第一和第二个问题：时间问题、高并发、网络不太好的情况下的问题。我目前还没有想好该以什么思路写测试，不知道大家有什么意见？&lt;/p&gt;

&lt;p&gt;第二个例子，比如我们的服务器端有一个接口，这个接口获取客户端提交的 session_key，然后根据特定的逻辑和条件（不管这些条件储存在服务器端还是客户端，对这个例子没有影响）来给用户的数据库里发一个奖励道具。由于多种原因，现在的客户端不会实时从服务器端拉取更新后的道具列表。那么这个接口会把增加的道具的键名和数量发给客户端，让客户端能够把道具更新在本地。
那么问题来了：假如我日后重构了这个接口，但服务器端增加的道具并没有实际加到数据库里，就返回给了客户端正确的响应，那么我们的功能测试是很难测试到这种情况的。当然，我们可以调用道具列表接口，比较增加前和增加后的列表，但这麻烦，并且需要重复造轮子。
这个例子主要涉及到上面第三个问题。&lt;/p&gt;

&lt;p&gt;第三个例子，比如我有一个{道具=&amp;gt;概率}的键值对数组，或者是我有一个指定方差和均值的正态分布模型，我需要按照指定的分布来获取随机结果。这样的测试，我们如何测试它返回的结果是真实（或者至少是接近）的分布呢？&lt;/p&gt;

&lt;p&gt;我想到的办法是多次请求这个接口然后统计返回结果。但这样做成本比较高，不知道有没有什么简单的思路？&lt;/p&gt;</description>
      <author>nagae_memooff</author>
      <pubDate>Sat, 08 Feb 2014 11:37:57 +0800</pubDate>
      <link>https://ruby-china.org/topics/17113</link>
      <guid>https://ruby-china.org/topics/17113</guid>
    </item>
    <item>
      <title>[北京 / 天津] 2014 年 毕业，普通一本毕业生求个职位，9 月 开始用 ruby 写项目，希望寻求一个能够有发展的工作</title>
      <description>&lt;p&gt;我应该不算是什么高手，在论坛上看各位的发言都感觉好厉害的样子。所以是不是应该长话短说一点呢？
    我的学校是北京工商大学，读的是信息管理专业，2014 年夏季毕业，毕业以后想要去天津，或者在北京发展。学校本身不算好也不算差吧，而读这个专业是因为，当初认为这个专业学的东西比较广泛，对提高视野有帮助。现在看来这个选择应该是正确的。
    这所学校最大的优点是有一个相对自由的环境，我可以学自己想去学的东西而更少地被现有的规则牵绊住。最早我开始实际写代码是大二下学期（现在大四，满打满算不到两年），是赶鸭子上架写了一个院系的离散数学网站，用 ASP.NET（C#）写的，后来学了 html,css,js，再后来学了 ruby 和 ruby on rails，以及经历了和他人共同开发的过程，总算是对 web 开发有一点点认识了吧。
    我应该属于一个不是太喜欢墨守成规的人。我觉得学校里的许多课程过分注重应试，而我一直觉得学习应该是为了&lt;strong&gt;解决现有问题，或者发现未知问题，或者觉得学习有趣&lt;/strong&gt;——至少是这三者之一，才有意义。我想第三种可能不会很多，前两种应该是比较正确且多见的学习态度吧。&lt;/p&gt;

&lt;p&gt;平时自己喜欢折腾各种各样的环境，自己电脑用的是 ubuntu 12.04，喜欢折腾 vim 啦 sed 啦 gnome-shell 插件啦 ctags 啦之类的东西，虽然也不算特别精通。自己也经常&lt;strong&gt;搭各种各样的东西（比如各种各样的服务器），遇到各种各样的问题，然后再自己依序去解决&lt;/strong&gt;。应该说算是一个比较喜欢和擅长学习新知识的人吧。不过比较遗憾的是英语水平比较差，我估计这是天分问题，因为我理解不了英语的逻辑……orz。错误报告和文档需要很努力才能看懂。&lt;/p&gt;

&lt;p&gt;在写代码，或者说思考问题的时候，我应该属于比较有思路的人吧。我对术语不是很敏感，但如果从某篇文章或网站上读到一些 XX 思想，我常常会发现，“咦我平时不就是这么考虑问题的吗？”这样子。我感觉语言，或者说语法本身不是最重要的，重要的应该是遇到问题能不能去解决，会用一种什么样的思路去解决。
    我本人不算特别爱说话，相对属于比较冷静的类型，遇到问题会冷静地分析，对谣言的识别力在同龄人里应该算是出类拔萃的，而且也很少以为一时脑热而去做一些冲动欠考虑的事情。很少对事物抱有敌意，在考虑问题的时候能&lt;strong&gt;以解决问题为最优先&lt;/strong&gt;，而不是徒逞口舌之快。这应该是我比较大的优点了吧。
我个人的大致特点就是这样。我实际写 ruby 项目是 13 年 10 月份，第一个是一个点餐系统，第二个是一个网游的服务器端，都是写 API。第二个现在正在做着，算是实习吧。虽然我可以转正的，但是&lt;strong&gt;我不是很喜欢每周工作六天&lt;/strong&gt;，所以不太想转正。不过气氛还算好。
    简单地说就是，相对比较有思想，有一定的经验但是离大牛还差得很远。我希望能够求到一个不会很勾心斗角、少有办公室政治的职位。工资的话可以不用很高，我想&lt;strong&gt;如果我能够为公司带来足够的生产力之后，我再要求我应得的薪资水平才会比较有底气&lt;/strong&gt;。具体的数值我不是很清楚，如果哪位有意愿招我，我们可以稍后谈谈。&lt;/p&gt;

&lt;p&gt;我的 QQ：169192，邮箱 169192@gmail.com。QQ 的邮箱虽然也在用，不过有时候会出现页面里声明文字编码不统一的情况，在客户端里会乱码，所以正事儿的时候我很少用。gmail 的话反正我有 pdnsd+https，不怕被污染 or 重置。不过这几天 pdnsd 经常出现程序仍然在跑，但是响应回来的 IP 都是空的情况，只有重启 pdnsd 才行。不知道是什么问题。
    写了这么多废话，谢谢能看到这里的人。在一个满是大牛的论坛里发主题帖，以及被大牛们看着，对我来说真的需要不少勇气。真的谢谢。&lt;/p&gt;</description>
      <author>nagae_memooff</author>
      <pubDate>Thu, 26 Dec 2013 15:37:04 +0800</pubDate>
      <link>https://ruby-china.org/topics/16440</link>
      <guid>https://ruby-china.org/topics/16440</guid>
    </item>
  </channel>
</rss>
