• 关于开源代码的事 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 的内存。程序本身不能主动释放自己的缓存内存。