<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>vbgfnd (vbgfnd)</title>
    <link>https://ruby-china.org/vbgfnd</link>
    <description/>
    <language>en-us</language>
    <item>
      <title>感觉自己找到了一个能激励自己一直孤独写代码学习下去的好方法！</title>
      <description>&lt;hr&gt;

&lt;p&gt;方法：&lt;/p&gt;

&lt;p&gt;我找到 2 个女同学说跟他们一块合作写程序，（实际上是我写代码，他们检查我的英文注释有木有语法错误），我告诉他们每周的工作不超过 5 句话！而且程序写好了我就发到各大论坛，到时候写上大家的名字，享受论坛菜鸟们的膜拜。对方听后，欣然同意。哈哈哈哈哈&lt;/p&gt;

&lt;p&gt;谈谈好处吧：&lt;/p&gt;

&lt;p&gt;一来每周都能和妹子聊上几句
二来锻炼了我的英文表达能力 (真心不想写代码的时候中英文切换了，烦的要死了)
三来我有了写代码的激情和动力！！（妹子表示她也想学习写代码，想看我的代码学习 O(∩_∩)O~）（以前自己写代码，觉得太枯燥了，写着写着就放弃了。现在有了需求就有了动力！！）
四来发到论坛上可以赚积分，赚了积分可以下载各种想要的电子书啥的&lt;/p&gt;

&lt;p&gt;一剑四雕！自己都觉得自己机智无比了，哈哈哈哈&lt;/p&gt;</description>
      <author>vbgfnd</author>
      <pubDate>Tue, 29 Sep 2015 23:07:35 +0800</pubDate>
      <link>https://ruby-china.org/topics/27526</link>
      <guid>https://ruby-china.org/topics/27526</guid>
    </item>
    <item>
      <title>实现项目各阶段工作的理解</title>
      <description>&lt;h2 id="开发项目过程描述："&gt;开发项目过程描述：&lt;/h2&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;首先我先想到了一个功能需求：当自动化跑完案例的时候，对于每个失败的案例，PC 都能记录下当时失败后的环境信息。这样我就不需要调试失败的自动化案例，能直接                    轻松分析所有自动化失败案例为什么失败。、
我人类的思维 (人的思维就是他自己动手去处理该如何做的思维)：
当案例失败时-》开始动手记录下他当时的环境信息-》保存-》继续执行案例。&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;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h2 id="对需求阶段的理解："&gt;对需求阶段的理解：&lt;/h2&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;需求分为 2 类，一类是真正人类需要的功能需求，是人用人类思维，用现实操作思维想到的功能需求。一类是设计时因为要考虑到计算机实现等诸多局限性，为了能容错，保护计算机能正常运作而想到的设计需求。&lt;/li&gt;
&lt;li&gt; 设计需求一共分为以下几类来源：&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;a)    程序的软硬件环境局限性：如 &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;i.   内存容量不足了怎么办，
ii. 内存条坏了，接触不良了，怎么办
iii.    硬盘坏道了，怎么办
iv. Intel 芯片 bug 了，怎么办
v.  其他软件干扰，怎么办&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;b)    与其协作完成功能的关联模块局限性：&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;i.   如程序需与服务器交互，他有 bug 怎么办&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;c)    开发者添加的约束：&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;i.   要易维护，易查错
ii. 要易复用易扩展
iii.    要易读懂代码易理解&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;d)    引用的开发技术的局限：&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;i.   Sql 技术实现，但是容易引出 sql 注入漏洞，要在编码注意
ii. Sql 的接口有 bug，怎么办
iii.    C 语言开发有他的语法机制约束：函数是层层调用等机制，组织代码考虑易扩展时要先考虑 C 的机制&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;e)    其他：&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;i.   用的要爽！要炫酷！要拽飞天！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;然后针对人的需求，我脑子里想到了所有操作的画面，为了沟通交流，我画出人类思维下的操作逻辑图&lt;/li&gt;
&lt;li&gt; 然后针对计算机实现局限性引入的需求，我分析需要重点考虑哪些点，其他的点就算出了事故也不会导致程序从此以后再也不能用了，就规避或者不考虑。&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h2 id="对设计的理解："&gt;对设计的理解：&lt;/h2&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;为了满足人类的需求，和设计的需求，我综合考虑后才画出程序的流程图&lt;/li&gt;
&lt;li&gt; 为了组织编码和一些设计需求 (易复用，易扩展，易读)，我规划出了所有函数，类对象，还规划出了代码中可能用到的所有的名字的规范。以及互相的关系&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h2 id="对编码的理解："&gt;对编码的理解：&lt;/h2&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;我按照设计阶段流程图，写出逻辑代码，按照类对象的规定创建类对象，按照名称规范给变量，对象命名。我考虑语法是否写对&lt;/li&gt;
&lt;li&gt; 我给代码加注释，解释思路，我考虑十年后能看懂代码的可维护性&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h2 id="对测试的理解："&gt;对测试的理解：&lt;/h2&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;测试的思路就 4 个方面：&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;a)    覆盖思维，代码里所有执行路径，都用输入输出覆盖验证一遍（理想化）
b)  有无遗漏，有没有少做什么功能
c)  有无多做，有没有做出没想要的功能&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt; 需求阶段我检查人类思维下的操作逻辑图是否全面，有无遗漏&lt;/li&gt;
&lt;li&gt; 设计阶段我检查设计阶段的流程图是否真的覆盖了所有需求，是否遗漏或多了不必要的需求&lt;/li&gt;
&lt;li&gt; 编码阶段&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;a)    我根据设计，需求确定测试重点。如果实现覆盖思维的方法是黑盒测试的话。我画出功能模块之间的交互关系图。针对每个功能模块，我画出各个程序协作的交互图。针对测试重点和逻辑很复杂的点我研究程序流程图。然后决定哪些地方创建输入输出的来覆盖测试。
b)  然后写测试案例   &lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt; 测试阶段自动化测试和手工测试，修改 bug。&lt;/li&gt;
&lt;li&gt; 结束！&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;对于复杂项目的补充&lt;/p&gt;

&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;天啊，我发现我要做的功能特别多，这个时候我在需求阶段先画出各个功能模块关系，然后再按照上述思路做&lt;/li&gt;
&lt;li&gt; 编码阶段的时候，我先吧每个功能模块的独立逻辑编写出来，每个模块之间需交互的部分后续统一编写&lt;/li&gt;
&lt;li&gt; 大项目又做完了！思密达！&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;以上是个人自己思考和总结的开发项目的思路，打算后续自己做个人项目就按照这个流程走，拿出来与大家一起讨论和分享 (这样才能更快成长)&lt;/p&gt;

&lt;p&gt;自己本身算是个新手，所以思考的东西也难免有浅薄的地方，也不知道自己按照这个流程走到底对不对，希望各位大大能指教一二，指出我哪里思考的不足，和一些做项目的新思路 3q 思密达 (&lt;em&gt;^__^&lt;/em&gt;) &lt;/p&gt;</description>
      <author>vbgfnd</author>
      <pubDate>Fri, 24 Apr 2015 02:37:19 +0800</pubDate>
      <link>https://ruby-china.org/topics/25284</link>
      <guid>https://ruby-china.org/topics/25284</guid>
    </item>
    <item>
      <title>问题来了：ruby 如何实现在 windows 下编辑文件，替换指定行的内容？</title>
      <description>&lt;p&gt;上文件：
ftp.ftp:
aaaaaaa
bbbbbbb
ccccccc&lt;/p&gt;

&lt;p&gt;加入我要在文件的第二行改成 abc，预期内容为
aaaaaaa
abc
ccccccc&lt;/p&gt;

&lt;p&gt;之前尝试用
File.open(ftp.ftp, "r+") do |file|
  file.each_line do |line|
   改写功能代码
  end
end
在 each_line 迭代中找到第二行的开头位置，方法用的是 file.pos。然后 IO.write("ftp.ftp","abc",pos_value)#pos_value 是第二行开头位置的值&lt;/p&gt;

&lt;p&gt;得到的结果是：
aaaaaaa
abcbbbb
ccccccc&lt;/p&gt;

&lt;p&gt;可以看到不符合预期，我试过方法 file.puts、file.print 都达不到要求，&lt;/p&gt;

&lt;p&gt;求助大家要怎么写才能满足我的需求呢？有一种笨办法就是先用空格键吧原来的一行都充填了，再重新写，但是这种觉得太挫了。想看下大家有没有好点子&lt;/p&gt;</description>
      <author>vbgfnd</author>
      <pubDate>Fri, 20 Mar 2015 16:56:38 +0800</pubDate>
      <link>https://ruby-china.org/topics/24752</link>
      <guid>https://ruby-china.org/topics/24752</guid>
    </item>
    <item>
      <title>关于 ruby 控制 window cmd 发 ftp 命令的问题</title>
      <description>&lt;p&gt;ruby 控制 cmd 执行一些批处理命令可以用这种方式：&lt;/p&gt;

&lt;p&gt;·cd c:\test·
·ftp 200.200.0.3·&lt;/p&gt;

&lt;p&gt;但是如上述，当使用了 ftp 命令后 cmd 会进入了 ftp 的模式&lt;/p&gt;

&lt;p&gt;命令行提示符变为“ftp&amp;gt;”
这个时候我想向通过 ruby 传递给 cmd 一些 ftp 命令，如 user test; mget xxx 文件&lt;/p&gt;

&lt;p&gt;应该要如何实现？？&lt;/p&gt;</description>
      <author>vbgfnd</author>
      <pubDate>Mon, 16 Mar 2015 20:29:30 +0800</pubDate>
      <link>https://ruby-china.org/topics/24682</link>
      <guid>https://ruby-china.org/topics/24682</guid>
    </item>
    <item>
      <title>ruby 如何控制 windows 控制台执行命令？</title>
      <description>&lt;p&gt;初学 ruby 很多东西还不是很懂。&lt;/p&gt;

&lt;p&gt;现在有一种紧急实现的需求：
我有个 bat 脚本用来强杀 ie 进程，自动化测试里要用 ruby 调用这个脚本&lt;/p&gt;

&lt;p&gt;我暂时还不知道怎么用 ruby 去控制 windows 控制台执行命令。
请教各位大大，能不能给一段简单 ruby 代码示例让我学习参考一下&lt;/p&gt;

&lt;p&gt;感谢！&lt;/p&gt;

&lt;p&gt;感谢 blacktulip，问题已解决：正确的写法：&lt;code&gt;"C:\\test\\killie.bat"&lt;/code&gt;!
结贴&lt;/p&gt;</description>
      <author>vbgfnd</author>
      <pubDate>Mon, 09 Mar 2015 16:58:00 +0800</pubDate>
      <link>https://ruby-china.org/topics/24547</link>
      <guid>https://ruby-china.org/topics/24547</guid>
    </item>
    <item>
      <title>Ruby 如何调用 net/ftp 接口实现查看 FTP 服务器上的文件列表</title>
      <description>&lt;p&gt;环境：
ftp 服务器上存在/A/B 目录，目录下有个文件夹 ABC，向获取 ftp 服务器上文件夹 ABC 下的文件列表&lt;/p&gt;

&lt;p&gt;代码：在 irb 上测试&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'net/ftp'&lt;/span&gt;
&lt;span class="n"&gt;ftp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Net&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;FTP&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"200.200.0.3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"test"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"test"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;ftp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;voidcmd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"CWD /A/B"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;ftp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;nlst&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"ABC"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-------&lt;/span&gt;&lt;span class="n"&gt;这里报错&lt;/span&gt;&lt;span class="err"&gt;：&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;报错内容&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;irb(main):234:0* ftp.nlst("ABC")
SocketError: getnameinfo: ����������������������
        from D:/Sangfor-ATT/Ruby200/lib/ruby/2.0.0/net/ftp.rb:1083:in `addr'
        from D:/Sangfor-ATT/Ruby200/lib/ruby/2.0.0/net/ftp.rb:1083:in `block (2levels) in &amp;lt;class:BufferedSocket&amp;gt;'
        from D:/Sangfor-ATT/Ruby200/lib/ruby/2.0.0/net/ftp.rb:383:in `makeport'
        from D:/Sangfor-ATT/Ruby200/lib/ruby/2.0.0/net/ftp.rb:421:in `transfercmd'
        from D:/Sangfor-ATT/Ruby200/lib/ruby/2.0.0/net/ftp.rb:514:in `block (2 levels) in retrlines'
        from D:/Sangfor-ATT/Ruby200/lib/ruby/2.0.0/net/ftp.rb:199:in `with_binary'
        from D:/Sangfor-ATT/Ruby200/lib/ruby/2.0.0/net/ftp.rb:512:in `block in retrlines'
        from D:/Sangfor-ATT/Ruby200/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize'
        from D:/Sangfor-ATT/Ruby200/lib/ruby/2.0.0/net/ftp.rb:511:in `retrlines'
        from D:/Sangfor-ATT/Ruby200/lib/ruby/2.0.0/net/ftp.rb:744:in `nlst'
        from (irb):234
        from D:/Sangfor-ATT/Ruby200/bin/irb:12:in `&amp;lt;main&amp;gt;'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;不知道哪里出了错误，向各位大牛求教&lt;/p&gt;</description>
      <author>vbgfnd</author>
      <pubDate>Wed, 04 Mar 2015 15:00:03 +0800</pubDate>
      <link>https://ruby-china.org/topics/24450</link>
      <guid>https://ruby-china.org/topics/24450</guid>
    </item>
    <item>
      <title>win7 下使用 ruby 的 File.delete 删除 cookie，报权限不足，如何解决？</title>
      <description>&lt;p&gt;浏览器：ie9 打 KB2817183 安全补丁&lt;/p&gt;

&lt;p&gt;因为打了安全补丁的缘故，现在用 File.delete 的方法去删除某一个 cookie 文件会报权限不足&lt;/p&gt;

&lt;p&gt;[2014-10-16 15:28:11] ERROR 删除 cookie 过程中出现异常：
[2014-10-16 15:28:11] ERROR cookie 路径：C:/Users/Administrator/AppData/Roaming/M
icrosoft/Windows/Cookies
[2014-10-16 15:28:11] ERROR Errno::EACCES: Permission denied - C:/Users/Administ
rator/AppData/Roaming/Microsoft/Windows/Cookies/DU3FL0ZL.txt&lt;/p&gt;

&lt;p&gt;请问怎么解决？&lt;/p&gt;

&lt;p&gt;ps：要求不能卸掉浏览器的安全补丁&lt;/p&gt;</description>
      <author>vbgfnd</author>
      <pubDate>Thu, 16 Oct 2014 15:52:48 +0800</pubDate>
      <link>https://ruby-china.org/topics/22077</link>
      <guid>https://ruby-china.org/topics/22077</guid>
    </item>
  </channel>
</rss>
