• 如何将 Json 转换成 Hash? at 2013年01月07日

    #6 楼 @Saito

    char 类型问题可多了... 首先字符串必须内码一致并且用定长编码,如果处理是不同编码的内容,就要先统一转换成内码再处理,你是可以直接用 enumerable 方法,但是之前和之后的转换比 each_char / each_byte 要麻烦,而且用户又怎么知道迭代的是字符还是字节呢?

    内码其实用 utf-32 才是正确的,但由于历史原因 (最初他们以为全宇宙字符不会超过 65535 个), 常见语言都用了 utf-16 (最初定长的时候叫 ucs-2), 例如 C++ 的 wchar_t (wchar_t 在各平台长度不一样又是另一个坑了...), OC 的 uchar, Java 的 char.

    但 utf-16 和 utf-32 都有 less endian 和 big endian 的不同 (例如 windows 的 "unicode" 和 java 的 "unicode" 是二进制不兼容的)...

    超过 65535 的字符要两个 char 才能表示,为了解决这个问题,就衍生出各种新概念 (如 glyph) 去表达原本"字符"的意思,定长编码的预设也失效了,char 类型也不是字符的意思了,可坑爹了...

    ruby 处理 utf-8 字符串:

    "𝄞".size #=> 1
    "𝄞".bytesize #=> 4
    

    java 里:

    String s = "𝄞";
    s.length(); //=> 2 WTF?
    s.codePointCount(0, s.length()); //=> 要得到正确的结果, 还要在 javac 加上 -encoding UTF-8 参数
    

    所有基于 java 的二奶语言弄这类超出 65535 的字符都超蛋疼 (jruby 虽然结果正确,但 irb 输入都困难...) clojure 我整了个 rlwrap 可以输入了但正确结果我是弄不出来 ...

    归根结底最大的祸害就是这个暧昧不清的 char 类型...

  • ruby 条件区间的问题 at 2013年01月07日

    #6 楼 @windwiny 不管 p327 还是 p362, range 作为逻辑条件都是上下文相关的:

    http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html

    You can use a Ruby range as a boolean expression. A range such as exp1..exp2 will evaluate as false until exp1 becomes true. The range will then evaluate as true until exp2 becomes true. Once this happens, the range resets, ready to fire again

  • 如何将 Json 转换成 Hash? at 2013年01月07日

    #4 楼 @Saito 其实 char 的唯一作用就是当整数用,既然有整数类型了要 char 有何用...

  • ruby 条件区间的问题 at 2013年01月07日

    #4 楼 @windwiny

    boolean range 的值和上下文相关的,很容易出问题

    !!(false..false) #=> false
    !!(true..false)
    !!(false..false) #=> true
    

    所以已经不推荐了,用 vs.select{ |n| (3..6).cover? n }

  • 如何将 Json 转换成 Hash? at 2013年01月07日

    #1 楼 @Saito ''' 其实是 '' + ' ...

  • production 环境下怎么输出? at 2013年01月07日

    production 输出的东西都在 logs/production.log 里了

  • 服务器端耗时异常?? at 2013年01月07日

    spree 栈太深 -_-

  • 没看明白..

    def a
      ... # 静态的逻辑
      yield
      ... # 静态的逻辑
    end
    
    a{ 动态的逻辑 }
    
  • Date.now.to_time < Time.now
    

    或者

    Date.now < Time.now.to_datetime
    
  • :label_html => {:id => "add-label"}
    :input_html => {:id => "add-input"}
    :wrapper_html => {:id => "add-wrapper"}
    
  • 在 test_helper 里判断一下如果是 production 直接 exit! ?

  • "ta".classify 的结果是什么? at 2012年12月21日
    $ pry
    > require 'active_support/all'
    > cd String
    > show-doc classify
    
  • rails 里放到 lib 目录,或者在 config/application.rb 的最后加一行 (假设是 /home/xxx/y.so)

    require '/home/xxx/y.so'
    

    或者像 #3 楼说的那样

    $:.unshift "/home/xxx" # 这里最好用 unshift, 后面追加的话, 如果你的 so 和某个文件同名就载不来了
    require 'y' # 这里不用加扩展名也可以哦
    
  • 请教如何优化 at 2012年12月20日

    #2 楼 @xuelz 视图很不一样可以不合并啊,用 render 就可以了

  • 请教如何优化 at 2012年12月20日

    合并成同一个 action 加个参数判断是否是第一个页面链过来的?

  • 代码过多加 module, 职责过多加 scope ...

  • #12 楼 @ywjno 不是,书名是 ガベージコレクションのアルゴリズムと実装 (图书馆里超容易被分类到环境工程类 orz), 内容是由浅入深介绍各种 GC 算法的,不是对特定 GC 的解读

  • sinatra 并发 性能 at 2012年12月20日

    700 够高了...

    1 请求/秒就能撑起百万 PV/月的应用...

  • @lgn21st 再附带一提,nari 叫中村成洋,冰激凌工人出身,写了一本书:GC 算法实装, 暂时只有日文版,看了可以对现代高级语言的 GC 有更好的认识哦 (我不懂日语只看了书中的代码...)

  • #7 楼 @lgn21st

    2.0-preview1 的 ChangeLog 里有:

    sat Jan 7 22:25:50 2012 Narihiro Nakamura [email protected]

    • gc.c: use Bitmap Marking algorithm to avoid copy-on-write of memory pages. See [ruby-dev:45085] [Feature #5839] [ruby-core:41916].

    但 1.9.3-p327 没有

    另外 1.9.3 已经是使用了 lazy-sweep 手段的增量式 gc, 不会有像 1.8 那样的卡住的情况了

    再另外同样是这个作者 nari 已经做了 parallel gc 的原型,据称可以提升 40% 左右的 gc 速度

  • [求助] 盲人 网站 at 2012年12月20日

    针对 css @media braile (盲文) 和 @media speech 整?

  • #4 楼 @xds2000 Ruby 2.0 的 COW friendly GC 的话,多进程部署各种优势啊,而且并行和并发是两回事,EventMachine 就是单线程内处理高并发的...

  • @xds2000 C 扩展慢的问题不好解决吧? Ruby 写 C 扩展很容易的一个原因是 Ruby 的 GC 是保守式 GC, 保守式 GC 可以通过扫描栈获得变量存活信息而不用在 C 代码中手动释放对象. 而 JNI 完全就不是这么回事,你要各种手动 JNIEnv->releaseXXX, 而且对象进入到 C 实现的代码中前,指针会在内存中 pin 住,直接脱离 GC 的 compact 阶段... 这种异构导致要么得用 Java 重写相应的 C 扩展,要么得在调用前走好厚的 FFI 包装,本来能变快的东西却变慢了...

  • 获取客户端真实 ip 地址 at 2012年12月19日

    web 服务器没有办法获取代理后面的 ip 吧?

    可以弄贝叶斯方法筛选广告贴之类的...

  • 用 xml 解决一个问题,你就有了两个问题,然后再用 xslt, 你就有了ℵ2个问题

  • XSLT 就是 xml 版的 lisp, 最早我就在暴雪官网看到过用... 后来换掉不用了,太蛋疼了...

  • ?

    sed -i .bak 's/ftp.ruby-lang.org\/pub\/ruby/ruby.taobao.org\/mirrors\/ruby/g' ~/.rvm/config/db
    

    wiki 里不是有个 -e 参数么你怎么没加..

  • #3 楼 @lgn21st 你需要安全裤...

  • #23 楼 @evil850209

    可能你没有 C 有关基础,Ruby(MRI) 是用 C 实现的,能用的编译器如我上面说的有 gcc 和 clang, 而 llvm-gcc 不行. 编译第一步是 ./configure, 检测环境并产生 makefile, 这时就决定好了用哪个编译器,如果你一开始编译出错了,然后换了编译器,应该把源代码目录删掉再继续。

    选择 GCC 最简单的方式就是 configure 之前

    export CC=`your path to gcc`
    

    替换源直接打开文件编辑 ~/.rvm/config/db 替换 ftp.ruby-lang.org/pub/ruby.taobao.org/mirrors/ 就好了嘛...

    最大的障碍是 Mac 更新很快很频繁,ruby 相关的开发也很活跃,所以大部分教程都会很快过时, 然后无头苍蝇般每个都弄一遍结果就是像你这样产生奇怪的问题,按照 rvm requirements 去做是不会出问题的...