• 关于开源代码的事 at 2018年12月15日

    源代码放出来只是让你看,并不能让你用。就像别人放在那里的芒果,你不能寻思是别人不要了吧。

    代码是不是开源,需要取决于使用什么授权协议。哪怕是 GPL 的 RedHat 也有卖商业服务的。

    如果人家没有设定任何授权协议的话,那就只能默认是 Copyright 私有了。

  • Ruby 2.6.0-rc1 已发布 at 2018年12月15日

    中央声称会优化,至于会不会就要看之后有没有相关的 patch 了。

  • 关于腾讯 api 拼 url 的服务 at 2018年12月15日

    看了下 Rest Client 的 API,后面还是作为 Hash 参数传进去的,只是因为 Post 前面多了个参数,所以被传错地方了。于是多传一个 nil 进去就好了。

    require 'rest-client'
    require 'json'
    
    r = RestClient.post('https://httpbin.org/post', nil, params: {foo: 'bar', baz: 'qux'})
    JSON.parse(r.body)
    # => {"args"=>{"baz"=>"qux", "foo"=>"bar"}, "data"=>"", "files"=>{}, "form"=>{}, "headers"=>{"Accept"=>"*/*", "Accept-Encoding"=>"gzip, deflate", "Connection"=>"close", "Content-Length"=>"0", "Content-Type"=>"application/x-www-form-urlencoded", "Host"=>"httpbin.org", "User-Agent"=>"rest-client/2.0.2 (darwin18.0.0 x86_64) ruby/2.5.3p105"}, "json"=>nil, "origin"=>"0.0.0.0", "url"=>"https://httpbin.org/post?foo=bar&baz=qux"}
    
  • Ruby 2.6.0-rc1 已发布 at 2018年12月15日

    Rails 从 JIT 上获益现在所做的还远不够,一方面 Rails 的一个瓶颈是 I/O 模型,这一点不能靠 JIT 来解决。但有一点是可以的,就是 Rails 过深的中间件产生了过深的栈让内存调用非常吃紧。如果我们的 JIT 可以更进一步,在编译过程中对内存进行适当的优化,就可以有效提供其性能。但这一点暂时不是 2.6 的目标,但会是未来 Ruby JIT 的工作重点。

  • Ruby 2.6.0-rc1 已发布 at 2018年12月15日

    然而今天要发布 2.6.0-rc2 了。。。

  • 反过来的话,你甚至也可以在 Ruby 上跑 Jupyter 比如 https://github.com/SciRuby/iruby 另外我常用的把生产数据拉来给机器学习的方法就是在 Ruby 里做数据预处理,然后使用 https://github.com/mrkn/pycall.rb 在 Ruby 里调用 Python 再去调用 Keras 做神经网络。

  • 我测了一下。用另一个 terminal 执行 sync; echo 3 > /proc/sys/vm/drop_caches 可以把 cache drop 掉

  • Linux 对内存极端不够的场景确实是会直接 kill 掉的,这一点非常。。。但 Linux 有一个指令可以清空掉 buffer 和 cache 的内存来方便调试,你可以找一下。

  • 如果你使用 htop 查看进程的话,内存里黄色的和蓝色的这块,就分别是 buffered 和 cached 内存。

    Linux 倾向于不直接释放,并吃满内存以做缓存加速系统运行,只有当内存不够时再去释放掉。这一点在 Windows 上从 Windows Vista 中也引入了这一特性。Mac 上不出意外也是有的,只是因为你一直在用,所以被慢慢释放掉了。

  • 你测 sys_mem 的方法是 RSS,对 RSS 的定义如下

    Resident Set Size = how much memory is allocated to that process and is in RAM (including shared memory!). This includes all stack and heap memory and shared libraries, as long as they are in RAM. It does not include memory which is swapped out.

    操作系统会通过 shared memory 对内存进行缓冲(buffered),以使得重启线程或程序后能更快加载,这是 Linux 的内存管理特性,只有当系统本身内存不够用时,才会去释放这部分 buffered 的内存。程序本身不能主动释放自己的缓存内存。

  • 用 CentOS 跑了一下

    [root@6d454a5b971b /]# ruby -v
    ruby 2.5.3p105 (2018-10-18 revision 65156) [x86_64-linux]
    [root@6d454a5b971b /]# vi gc.rb
    [root@6d454a5b971b /]# ruby gc.rb
    created a json file: 52866672[50.42 MB]
    init the json file at the first launch, please run again.
    [root@6d454a5b971b /]# ruby gc.rb
    ruby 2.5.3p105 (2018-10-18 revision 65156) [x86_64-linux]
        sys_mem:9.48 MB, objspace_mem:4.15 MB
    3s  sys_mem:9.62 MB, objspace_mem:3.46 MB
    6s  sys_mem:9.63 MB, objspace_mem:3.46 MB
    9s  sys_mem:9.63 MB, objspace_mem:3.46 MB
    read content from file 52866672[50.42 MB]
    12s sys_mem:60.12 MB, objspace_mem:53.88 MB
    15s sys_mem:60.12 MB, objspace_mem:53.88 MB
    18s sys_mem:60.12 MB, objspace_mem:53.88 MB
    21s sys_mem:60.12 MB, objspace_mem:53.88 MB
    24s sys_mem:60.12 MB, objspace_mem:53.88 MB
    27s sys_mem:60.12 MB, objspace_mem:53.88 MB
    30s sys_mem:60.12 MB, objspace_mem:53.88 MB
    33s sys_mem:60.12 MB, objspace_mem:53.88 MB
    36s sys_mem:60.12 MB, objspace_mem:53.88 MB
    39s sys_mem:60.12 MB, objspace_mem:53.88 MB
    parse json string to object
    43s sys_mem:360.47 MB, objspace_mem:322.96 MB
    46s sys_mem:360.54 MB, objspace_mem:322.96 MB
    50s sys_mem:360.54 MB, objspace_mem:322.96 MB
    53s sys_mem:360.54 MB, objspace_mem:322.96 MB
    56s sys_mem:360.54 MB, objspace_mem:322.96 MB
    1m  sys_mem:360.54 MB, objspace_mem:322.96 MB
    1m3s    sys_mem:360.54 MB, objspace_mem:322.96 MB
    1m7s    sys_mem:360.54 MB, objspace_mem:322.96 MB
    1m10s   sys_mem:360.54 MB, objspace_mem:322.96 MB
    set string&object to nil, and sleep 30 min to check the memory usage.
    1m13s   sys_mem:304.78 MB, objspace_mem:3.46 MB
    1m16s   sys_mem:304.78 MB, objspace_mem:3.46 MB
    1m19s   sys_mem:304.78 MB, objspace_mem:3.46 MB
    1m22s   sys_mem:304.78 MB, objspace_mem:3.46 MB
    

    几秒钟就释放干净了。你的启动参数是怎样的?

  • 统计的时候能不能跑一下 GC.stat,这样看不出来是哪里的内存。

  • 矩阵运算并不是 Python 语言的特性啊。。。主要是 Ruby 在这类语法糖的问题上处理非常宽松,经常一个方法一堆 alias,这 Python 吧。。。

  • 突然就明白我为什么通过不了 Ruby Certificate 考试了

    • 为什么函数式命令 reduce 被 Python 3 移到 functools,迫使每次使用的时候都要 import 一下呢?
    • 因为 Guido 不喜欢
  • 剧透时间

    我想出来的使用 Ruby 的一行解:

    def kai_encode(num)
      num.to_s(2).rjust(240, '0').scan(/.{5}/).map {|n| '123456789abcdefghijkmnopqrstuvwx'[n.to_i(2)]}.join
    end
    
    def kai_fmt(kai)
      kai.scan(/.{4}/).join(' ')
    end
    
    kai_encode(0x00004a52931ce4085c14bdce014a0318846a0c808c60294a6314a34a1295b9ce) # => "aaaa788522f2agff16617755e979244166677664a9aacfff"
    kai_fmt(kai_encode(genome)) # => "aaaa 7885 22f2 agff 1661 7755 e979 2441 6667 7664 a9aa cfff"
    

    好在 Ruby 的 rjust 方法是内建的,而不需要 import 一个叫 left-pad 的包,一旦被删除了就天下大乱了(逃

  • 没,做内部服务的下位机,不是用来做生产服务器的。做生产服务器这性能恐怕不行,我现在用的是 3B+

  • 在跑,运行了好久了。

  • 😓 看了眼地址,变成知乎的 CDN 了,还是看不了。CDN 图片有缓存,自己上传的时候看过的当然能看到,但盗链到其它网站别人看到的全部都是无权限啊。

  • 「ミファーの祈り、いつでも使えるよ」

  • 感觉看了半天大多都是套路云的问题啊,如果是墙的升级的话不该是这种情况吧。

  • 按道理来说 Ruby China 服务器在香港,也没有见过严重丢包。海外链路有丢包其实是挺常见,最常见的问题都和链路质量有关,特别是 peer 的情况。像是 Linode 的几个服务器到中国的 peer 质量本身就很差,有一定丢包量对 TCP 连接其实影响还挺大的,确实对 HTTPS 的影响会更大。不过也有类似于 TCP-BBR 的解决方案。但单针对 HTTPS 进行丢包的实在是很少见。

  • 为啥境外 https 会严重丢包?而且 http 直接被 mitm 才是帮了墙一把吧。

  • RubyMotion 使用的关键就是。。。必须先通过 meta-programming 把这堆东西全部封装一遍,然后这世界就清净了。否则,真的辣眼睛。