•   我想每个Vi的使用者都一定在使用着类似SnipMate 的插件,通过这个插件,我们可以轻松的通过一个Tab生成一大段常用的代码。

      最初使用SnipMate的时候,我在网上找了一些别人现成的snippet脚本来用,开始还不错,但后来觉得有一些脚本写的不符合自己的习惯,便去修改它。这样会带来一个问题:当我修改snippet脚本后,我得重启Vi后才能生效,假设现在我已经打开了3个标签页,关掉后再重启将会是多么浪费感情的事啊。于是,我便找了以下代码解决该问题

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    " 当修改snippet脚本后,执行,rr可重新加载脚本,无需重启Vim
    function! ReloadSnippets( snippets_dir, ft )
      if strlen( a:ft ) == 0
        let filetype = "_"
      else
        let filetype = a:ft
      endif
    
      call ResetSnippets()
      call GetSnippets( a:snippets_dir, filetype )
    endfunction
    nmap ,rr :call ReloadSnippets(snippets_dir, &filetype)

      现在,你只需要在重新加载脚本的时候按下,rr 即可。在脚本的最后一行,你可以修改nmap 后面的字符来自定义快捷键的映射。

  •     在计算机的世界里有很多这样的事物,咋一接触它们觉得很生涩,太难用,但如果坚持下来,稍稍领会其精神,就会发现这个东西实在是太好了。在我看来,测试算是其中之一吧。从真正写测试到现在已经有一段时间了,从开始觉得写它是费力不讨好的观念也逐步转变成没有它心里就不踏实的状态。前两天在看文章时发现“测试覆盖率”这个词语,也许它存在很久了,但对于我来说还是比较新鲜的东西,赶紧拿来尝试一番,顺便也对自己的测试代码进行一番评测。下面就简单说一下我的经历

        因为我的Ruby版本是1.8.7, 所以采用了Rcov用作测试覆盖率的工具(貌似还有一个选择simple_cov,但是针对ruby1.9开发的, 这里就没采用)。因为我的测试框架是采用的Rspec, 而Rspec又内在集成了Rcov的接口, 所以在使用起来非常简单。在Gemfile中加入 gem 'rcov' 后,依次执行以下命令

    1
    2
    
    bundle install
    rake spec:rcov

        此时你的测试代码会挨个执行一遍,测试完成后会在Rails的根目录下多出一个coverage文件夹,用浏览器打开coverage/index.html即可看到rcov生成的报告了。

        此外,你可能运行时会遇到rcov没有加载到rspec_helper的情况,这篇文章提到了这个问题,可能会帮助你解决,或者升级到rspec2.4.0也能解决问题。

    no such file to load -- spec_helper (LoadError)

        关于测试覆盖率应该包含多个方面的概念,如业务覆盖,代码覆盖。这里所涉及覆盖率其实都是代码覆盖,即程序代码在测试时被调用执行的部分除以项目总代码的一个比例,因此100%的代码覆盖率只代表了所有的代码在测试时被执行过,并不代表代码的所有情况被执行过。比如下面例子

    1
    2
    3
    
    def price(total_cost, total_count)
      return total_cost/total_count
    end
    

        这段代码在测试时我只需要对这个方法进行一次调用即可达到100%的测试覆盖率,但当我调用price(10, 0)时仍然会出错,所以即使测试代码覆盖率达到100%了也不能安心睡大觉。那这个东西该在什么情况下使用呢?首先,忘掉这个东西,还是按照平时的方式写测试、写代码。待工作完成之后可以再捡起这个工具进行一番测试,检查出哪里的测试代码有死角没有测到,该修的修,该补的补。完成这些之后再忘掉这个东西,仅此而已。

        相关链接: http://51it.ca/bbs/thread-4285-1-1.html

  • Django的UnicodeDecodeError异常

    日期:2009-10-16 | 分类:Python | Tags:django python UnicodeDecodeError

        在我新建的一个Google App Engine项目中,不知道为何,不能在html页面中写汉字了,只要页面包含了汉字,就会抛出题目所示的异常。我对比了前面的一个同样的项目(这个项目是正常的)查找问题,最终也没有找到是哪出错了,某处的配置吗?不是

        于是我上网Google了一把,很快,问题找出来了。原因是我在建立这个项目的html页面时使用了GB18030编码,需要把这个文件保存为UTF8就可以了。

  • 原码、反码、补码

    日期:2009-10-14 | 分类:基础 | Tags:原码 反码 补码 二进制

        看到标题,也许你会笑了,这么基础的知识,还往上写,并且在网上一搜一大把。是的,不过这个问题我会隔很久在大脑里冒出一次,而且每次冒出来都记忆不太深刻,所以写一下,算是给自己留个笔记吧。

         正数的原码、反码、补码都是一样的,具体怎么将十进制转换为二进制,这里就不说了。

         负数的原码和其绝对值的原码是一样的,反码是将原码的所有位的数取反(1--> 0, 0--> 1),补码是在反码的基础上加1,例子如下

            1 原码 0000 0001(反码,补码相同)

            -1原码 0000 0001     -128 原码 1000 0000

            -1反码 1111 1110     -128 反码 0111 1111

            -1补码 1111 1111     -128 补码 1000 0000 (128貌似比较特殊)

         计算机里的整数都是以补码形式存储的

  • 关于Ruby中的继承

    日期:2009-10-13 | 分类:ruby/rails | Tags:ruby 继承

        万物皆对象

        在Ruby里,所有的类都是Object的子类

        上面这两句话,熟悉否?不过,这两句话还没有把ruby中的一些继承关系说明出来,根据我个人的一点知识,总结一下,看一段代码

    > String.class #=> Class

    > Time.class #=> Class

    > Class.class #=> Class

    # 我们常用的类,其类型都是Class,有趣的是,Class的类型也是自己。

    > Class.new #=> #<Class:0xb7cc0abc>

    > Class.new.class #=> Class

    # 看!Class的实例的类型仍然是自己。其实,我们常用到的类都是Class的一个对象,只不过它们是一个比较特殊的对象(类对象)。

    > String.superclass #=> Object

    # 现在,可以证明了,一切对象都是Object的子类。但Class呢,继续往下看

    > Class.superclass #=> Module

    >Module.superclass #=> Object

    # Class的父类是Module, 而Module的父类又是Object

    > Module.class #=> Class

    > Object.class #=> Class

    # 等等,你现在是不是有点晕了,好,那让我来总结一下吧。

    # 所有的类都是Object的子类,而所有类(包括Object)的类型都是Class(也包括Class自己),而Class的父类是Module, Module的父类是Object。用图展现一下吧(但愿没把你看的更糊涂)

     

     

    代码继续

    > Object.superclass #=> nil

    # 可见,Object是最顶层的类了,它没有父类

    > String.ancestors #=> [String, Enumerable, Comparable, Object, Kernel]

    > Object.ancestors #=> [Object, Kernel]

    # 可见,Object顶层还有,那就是核心(Kernel)了。刚刚不是说了Object是所有的类的父类了吗?怎么还会有更上一级呢?别忘了ruby中还有module的混入

    > Kernel.class #=> Module

    # 怎么样,现在有点明白了吧,或者是,更糊涂了那就再多看看,多想想吧