• 哇,看到了 elixir

  • Rails 6 前瞻 - Parallel Testing at 2018年03月13日

    看了一遍实现,这个东西其实也没那个复杂,核心逻辑在

    def parallelize(workers: 2, with: :processes)
         workers = ENV["PARALLEL_WORKERS"].to_i if ENV["PARALLEL_WORKERS"]
    
            return if workers <= 1
    
           executor = case with
                     when :processes
                        Testing::Parallelization.new(workers)
                     when :threads
                       Minitest::Parallel::Executor.new(workers)
    

    可以用thread模式也可以用process模式,thread 模式是Minitest本来就有的,而 process 模式是自己撸的,

    在自己搞的Testing::Parallelization里面,主要跑测试的代码在这

    @pool = @queue_size.times.map do |worker|
              fork do
                DRb.stop_service
    
                after_fork(worker)
    
                queue = DRbObject.new_with_uri(@url)
    
                while job = queue.pop
                  klass    = job[0]
                  method   = job[1]
                  reporter = job[2]
                  result   = Minitest.run_one_method(klass, method)
    
                  queue.record(reporter, result)
                end
    
                run_cleanup(worker)
              end
    end
    

    每个 fork 出来的 process 都会创建一个类似于test-database-0test-database-1这样的数据库(在after_fork_hook里面被创建,在run_cleanup_hook里面被drop掉),每个进程都会从 Drb 服务器里面拿到一个放了 jobs 的 Queue(https://ruby-doc.org/core-2.5.0/Queue.html),然后运行它 Minitest.run_one_method(klass, method)(job 是 klass, method, reporter 的封装)

  • 这照片怎么有点糊?😆

  • 非常优秀的视频,讲解的很清楚。Rails 把路由解析成了 NFA(顺便帮我简单过了一遍编译器知识),然而和我的问题关联不是很大啊😂

  • 请教下为什么 sentry/newrelic 为什么很耗性能?

  • 冒昧的问一些问题

    1. 已投简历,如果简历通过筛选的还可以明天(open day)走完面试流程吗
    2. 众所周知大疆 Ruby 团队的技术能力和氛围一流,请问加班状况怎么样

    谢谢

  • 用 Bear Note 专心写博客 at 2018年03月06日

    赞,感觉我的想法和你很相近啊。 专门写个轮子 bear markdown 解析转化成 html 很有意思。博客挺简洁漂亮,很喜欢。👍

  • 好帖,发现自己需要看下 Nginx 了😃

  • JIT for MRI 开始开发了 at 2018年02月12日

    仔细看了两遍,回答的很用心,信息量很大,感谢🎉

  • JIT for MRI 开始开发了 at 2018年02月09日

    我这按它的脚本,是这样的

     ceclinux@ceclinux-pc  ~/ruby  973   trunk ?  time ./ruby --disable-gems --jit --jit-wait --jit-verbose=1 15a.rb                                                   ✔  10248  18:46:44 
    JIT success (55.3ms): block in <main>@15a.rb:13 -> /tmp/_ruby_mjit_p2514u0.c
    JIT success (183.4ms): [email protected]:1 -> /tmp/_ruby_mjit_p2514u1.c
    {:result=>600}
    Successful MJIT finish
    ./ruby --disable-gems --jit --jit-wait --jit-verbose=1 15a.rb  4.84s user 0.03s system 99% cpu 4.880 total
    
    
     ceclinux@ceclinux-pc  ~/ruby  972   trunk ?  time ./ruby --disable-gems  15a.rb                                                                                 1 ↵  10250  18:47:17 
    {:result=>600}
    ./ruby --disable-gems 15a.rb  9.08s user 0.00s system 99% cpu 9.087 total
    
    

    一倍差距算是很大了把?

  • 2017 技术达人年度总结 at 2018年02月06日

    整体行文略虚,尤其是反思问题部分。能在 RubyConf China 做分享称自己为技术达人我觉得没问题阿,没有必要太苛刻。

  • Cool things in Ruby in 2018 at 2018年02月02日

    Fir 用了下,感觉挺难用的,谁能告诉我下它比irb或者pry好在哪,是我理解错了?

  • 今天试了下Bootsnap,开启速度毫无变化……

  • 并不是,你试试

    ruby -ve rsion
    

    然后看看 -e 是干嘛的就知道了

  • Linux、Ruby 不冷没天理! at 2018年01月29日

    ……看的我目瞪口呆,我居然找不到一个切入点来喷你

  • 老实说这种东西挺无聊的,有点像 Fixnum 和 Bignum,无聊的 implementation detail 一大堆,带来一些坑,可能还作为面试题目。然后 Ruby 2.4.0 就把 Fixnum 和 Bignum 合为 Integer 了。什么时候把 Float 和 BigDecimal 合二为一啊

    总之,用 Float 做严格浮点数计算是不可靠的。如果要做精确使用浮点数计算,那就用 BigDecimal

  • 试了下,确实如此

  • 赞,看完 Ruby 元编程之后尝试看了点 activerecord,被各种方法调用来调用去的看晕了,估计功力还不够深把。最近正在看sinatra的源码,感觉简单很多。

  • 支持支持😁

  • 另外 ruby 是有性能提升啊,不过任重而道远

  • 贴下你在文章中提到的递归的 fib 在几个语言下的跑分供参考,CPU 是非满血版的 i5-8250U,机器是 4.9.76-1-MANJARO #1 SMP PREEMPT Wed Jan 10 20:17:16 UTC 2018 x86_64 GNU/Linux

    ruby 2.3.3

    
    •100% ➜ time ruby fib.rb
    102334155
    ruby fib.rb  11.28s user 0.01s system 99% cpu 11.303 total
    

    ruby 2.5.0

    •100% ➜ time ruby fib.rb
    102334155
    ruby fib.rb  9.56s user 0.01s system 99% cpu 9.570 total
    

    crystal 0.24.1

    •100% ➜ time crystal fib.rb 
    102334155
    crystal fib.rb  1.70s user 0.10s system 106% cpu 1.681 total
    

    go run

    •100% ➜ time go run fib.go
    102334155
    go run fib.go  0.84s user 0.08s system 95% cpu 0.963 total
    

    go build

    •100% ➜ time ./fib
    102334155
    ./fib  0.65s user 0.00s system 99% cpu 0.660 total
    

    crystall 速度不错,而且直接可以拿 ruby 版本的代码跑,很爽 😀

  • 环绕别名 at 2018年01月19日

    再来一个例子

    class Test
      p instance_methods(false)
      def t
      end
      p instance_methods(false)
      alias :new_t :t
      p instance_methods(false)                                                                                                                                    
    end 
    
  • 环绕别名 at 2018年01月19日

    原因在于,ActiveRecord方法是动态加载的,它自己加上了很多元编程的东西,其实在你运行alias :real_avatar :avatar的时候,还不存在avatar这个实例方法,不信你试试看

    class User < ApplicationRecord
      p instance_methods(false)
      alias :real_avatar :avatar
    
      def avatar
        real_avatar.present? ? "real_avatar" : "default.png"
      end
    end
    

    你看 Ruby 元编程的话,建议用原生 Ruby 来尝试例子,后面它会讲到 Rails 里面的元编程,你心里就有数了

  • google rails test database connection

  • nil.class #NilClass
    nil[] #NoMethodError: undefined method `[]' for nil:NilClass
    
  • 居然沒有人,我先支持一下,希望能坚持做下去👍

  • Ruby 2.5.0 已发布 at 2017年12月28日

    不是每一版都有性能提升吗……

  • 谈谈我对 Ruby 的看法 at 2017年12月28日

    直接

    self.size <=> param.size
    

  • 这个几句话说不清,你可以看 Ruby 元编程,后面专门有一章讲 ActiveRecord::Base

  • google 'ruby double colons'