• Groupon 抛弃 Rails at 2013年10月11日

    ruby 其实性能很好,尤其是字符串处理,程序慢多是不会写程序或者架构有问题。快速开发往往也会不管三七二十一引入大量的第三方库,不管用什么语言,规模上去都会有性能问题

    并不是 rails 不适合大团队,而是人力资源多了开发效率的重要性就降低了

  • Ruby 2.1 is coming! at 2013年10月11日

    #4 楼 @zgm

    例如这种:

    render "template", locals: {a: 3}
    

    rails 里,局部变量其实通过 binding.eval "a=assigns[:a]" 设进去的,会慢一点而且由于运行时还需要 eval, 没法在整个应用加载完以后提升 $SAFE 等级。改成 binding.local_variable_set :a, 3 就完美了。

    再例如这种写法:

    get "/posts/:post_id" do
      post_id # sinatra 里其实也是 eval 设进来的
    end
    

    也可以改成更快更少副作用的 local_variable_set

  • Ruby 2.1 is coming! at 2013年10月11日

    local_variable_getlocal_variable_set, 这下终于神器了...

  • 嗯... 这里用什么的都有,例如 clojure

  • #6 楼 @ruohanc 好处是 ctags 自动完成和方法搜索不用专门配目录了... 不好的地方是项目搜索要配置忽略目录,否则结果会很很杂

    git-grep 和 ack 都要比较复杂的配置。textmate2 的话,项目下加个 .tm_properties

    exclude = {.git,.DS_Store,vendor,tmp,log,tmtags}
    
  • 没 windows... 没发现最开始给的代码有点有问题,修改了下

  • 如果连的 git 服务器网速快的话挺好的

  • #14 楼 @aNd1coder

    刚想到了个更好的办法避免出错,不改 config.rb, 只用一个 compass.bat, 内容如下:

    @ruby.exe -x "%~dpnx0" %*
    goto :eof
    
    #!ruby
    module Compass
      module Actions
      end
    end
    require "compass/compiler"
    module Compass
      class Compiler
        def css_files
          sass_files.map{|sass_file| corresponding_css_file(sass_file)}
        end
        def corresponding_css_file(sass_file)
          "#{to}/#{stylesheet_name(sass_file)}.s.css"
        end
      end
    end
    
    gem 'compass'
    load Gem.bin_path('compass', 'compass')
    

    ruby -h 可以看到各参数的含义,例如 -x 参数是忽略 #!ruby 前面的代码

  • #10 楼 @aNd1coder 哦不知道是 windows... 对就是你找到的那个目录

  • 看个好玩的 at 2013年10月09日

    歧视历史学和考古学啊, -_- 只好字符串了

  • 有点诡异的问题 at 2013年10月09日

    可能是连的 slave 库

  • #8 楼 @aNd1coder 见我在 #7 楼 给出的解决方案,如果你可以改 compass 源码 (例如自己 fork 一份), 打开 lib/compass/compiler.rb , 找到 corresponding_css_file, 把 ".css" 改成 ".s.css" 就可以。

  • Go 语言内存分配器设计 at 2013年10月09日

    #7 楼 @bhuztez 栈分配数组不一定增加栈大小,而且 ld 可以 -stack_size 指定栈大小

  • Go 语言内存分配器设计 at 2013年10月09日

    其实利用 tcmalloc 的 freelist, 只用 100 多行就能写个三色 tracing 增量 gc, 可见 go 的 stop-the-world gc 实现是有多朴素...

    #5 楼 @Saito 单线程内 tcmalloc 消耗普通 malloc 的两倍时间,C99 的动态数组有时可以栈分配,比 malloc 快好几倍

  • freeRIDE 中怎么输入中文 at 2013年10月09日

    建议用 gvim ...

  • Kernel#` 调用 xclip irb 挂起 at 2013年10月08日

    #2 楼 @toctan

    `` 就是接受进程的 stdout 输出,并变成字符串。需要等 EOF.

    system 在起的那个进程退出时就自然退出了。

    而等待 stdout 退出,需要等到它的所有子进程都退出。

    把下面代码存为 xclip2, 自己看看 system "./xclip2"`./xclip2` 的区别吧

    #! /usr/bin/env ruby
    fork do
      sleep 3
      print ''
    end
    

    你的调用明显是不需要其输出结果的,用 `` 就白白等待 EOF 了。

  • 想要 01000101

    'E'.unpack 'B*'
    

    想要 [4,5]

    ord = 69
    [ord >> 4, ord & 0xF]
    

    如果楼主是想要 hex string

    'E'.unpack 'H*' # "45"
    'E'.unpack 'h*' # "54"
    
  • Kernel#` 调用 xclip irb 挂起 at 2013年10月08日

    上面是让 xclip 的标准输出到 irb 了 下面是建立了管道,要等到 xclip 输出 EOF 才能返回

  • Rubinius 2.0 终于出了! at 2013年10月07日

    一些亮点

    • 把标准库都变成 gem 了,见 rubysl 系列 (也给安装增加了难度)
    • 使用了比较高端的 immix GC, 空间,时间,pause 三大长处合一。同时它还是 parallel incremental 的 GC, 最近代码没有看,不知道有没有做到 G1GC 那样连 Mutator 粒度都可控。
    • Fiber 是通过直接操作寄存器而不是长跳转实现的
    • 在 travis-ci 上增加 rbx 的测试,可以发现某些潜在问题 (尤其是对有 C-ext 的项目), 让你的项目更稳健
    • 把 CRuby 里很多用 C 实现的内容改成用 Ruby 实现了 (当然 FFI 比 CRuby 慢是原因之一,分代 GC 的代价)
    • meta circular 编译器,会把特殊的 code pattern 和函数替换成更底层的代码 (所以安装也会变慢咯)
    • 同样是基于 LLVM 的 python 解释器 unladen swallow 已经死了,但 rubinius 还活着...
    • 相容的 C-api, 一些数值计算的测试如 nbody 已经比 jruby 快了 (不过现在 CRuby, JRuby, Rubinius 的测试结果已经比较接近了)
    • 使用 puma 的多线程 rails 项目在 rbx 上跑,单进程部署就能充分利用所有核了。
  • 先做软体,不要先做平台 at 2013年10月07日

    持续影响力和宣传之重要性... 例如前作就已经很有名的 GTA5 开发投入 1.15 亿,市场宣传投入 1.5 亿,首周就卖了 8 亿。

  • #6 楼 @aNd1coder

    还有种比较土的方法是,在 config.rb 中猴子补丁掉算名字的函数:

    module Compass
      module Actions
      end
    end
    require "compass/compiler"
    module Compass
      class Compiler
        def css_files
          sass_files.map{|sass_file| corresponding_css_file(sass_file)}
        end
        def corresponding_css_file(sass_file)
          "#{to}/#{stylesheet_name(sass_file)}.s.css"
        end
      end
    end
    

    然后用 ruby -r./config.rb -S compass 代替 compass 命令 (你可以在 ~/.bash_profile 加个 alias compass='ruby -r./config.rb -S compass' 简化以后的调用)

  • #4 楼 @aNd1coder 正常的命名约定是原来叫什么出来就叫什么,如果要做和约定不一致的事情,可以自己写编译命令调 scss 命令行生成文件。例如:

    input = "xxoo.scss"
    output = input.sub /scss$/, "s.css"
    system "scss #{input} > #{output}"
    

    另一种方法是加个 "xxoo.s.scss" 然后把对应的 import 进来

    @import "xxoo";
    
  • OSX 10.9 GM 终于出了! at 2013年10月05日

    #8 楼 @lgn21st good, 也装上了

  • OSX 10.9 GM 终于出了! at 2013年10月05日

    GM 的意思就是正式版快要出了

  • #2 楼 @ted 貌似只能 reload-method class_name#method_name 重载方法所在文件的。rails console 的话有个 reload! 可以重新加载全部文件

  • 一个 method 肯定在一个文件中,但由于 open class 的存在,其代码可以分在各个文件中 可以用 Method#source_location 找到定义的地方编辑,但是 Class 就没法定义 source_location

  • 没有长连接的话,异步的速度优势很微弱的. 一些长连接场景如聊天,有现成的 erlang 之类的服务器可以用,速度更快. 另外一些场景可以用消息队列 + 后台任务 (如 resque), 客户端 polling 等技巧解决,速度差不了多少. twitter 就是用消息队列,前端的 rails 用 nonblock socket 发消息到队列中就结束请求了,改成异步或者换 nodejs 也不会有多少改进的. 非 web 遇到长连接的情况多一些,例如自定协议的游戏服务器,erlang 比 node 好使。

    -- 你的程序慢爆了. -- 不是我的错,是... 是 rails 太慢!

    -- 审美疲劳了,想换种语言写尝尝鲜. -- 现在 rails 不跑得好好的吗? -- rails 太慢!

  • 拒绝承认撤掉了墨西哥鸡肉卷的 kfc 是 kfc! 收集麦当劳的彩虹小马中...

  • 本来就是 controller 的职责吧,消灭不掉就算了,转移到奇怪的地方以后再看会很困惑的...

    按 DRY 的原则,可以把 redirect_to 提出来:

    redirect_to\
      case 
      when ... then ...
      when ... then ...
      else
      end