@hooopo 如果用封装了 spawn 和 pipe 的 popen, 就差不多了:
pipe = IO.popen 'dmesg'
pipe = IO.popen ['grep', 'hda'], in: pipe
pipe.read
#96 楼 @JacksonTian cool, 如果有 RDTSC 测算前两次渲染时钟周期的结果就更好了,因为浏览器端选模板引擎要考虑无 JIT 的效果...
@hooopo subprocess 就是和 spawn
差不多的库吧,没有 spawn
好使的样子...
#6 楼 @bhuztez 这得先装一个 gem: rubypython, 结果是通过 FFI 调用 python 去调用一个包装了 FFI 的库来达到 FFI 的目的...
用 escape:
c1.query("insert into ... ,'#{c1.escape r["value"]}') ")
以后会加入 prepared statement, 但现在还不行
王尼玛一炮打红了 ...
还有可能是事件流堵塞了... 如果下面代码有用就开个定时喀擦吧:
sudo killall -KILL appleeventsd
一般反应是用 activity monitor 看是不是有个 flash 或者 chrome 进程挂住了 100% ...
#138 楼 @hooluupog ide 的意思是一个集成了很多插件的环境,用 vim 就可以自己选装哪些插件不装哪些,用 ide 就没办法...
还没尝试过 polymer, 好像很虎的样子
特殊定制的方案就是,知道的人越少越安全...
最好一开始就是 string array... 要改的地方太多就先暂时 find{|ty| ty.to_s == params[:type]}
...
就是 fiddle 文档很少,用 ffi gem 的话会容易写一点...
fiddle 可以看源代码和 ruby 源代码目录下的 test/fiddle ...
ruby 的 Kernel
是 vm kernel 不是 system kernel
用标准库的 fiddle 就可以了,例如映射 execv
. 需要点 C 的基础才能看懂...
require "fiddle"
require "fiddle/cparser"
module SysFunc
include Fiddle
extend Fiddle::CParser
# note: only very basic types can be used
name, ret_type, arg_type = parse_signature 'int execv(char*, void*)'
func = Function.new Handle.new[name], arg_type, ret_type
define_singleton_method :execv do |path, *args|
# ruby string to char*
args.map!{|s| Pointer[s.to_s].to_i }
# add NULL to terminate
args << 0
# make array of pointers
args_c_array = args.pack(SIZEOF_VOIDP == 8 ? 'Q*' : 'L*')
func.call path.to_s, args_c_array
end
end
SysFunc.execv '/bin/ls', '.'
cool! btw, 很喜欢 @miloyip 参与开发的游戏:爱丽丝疯狂回归,里面爱丽丝头发飘的效果就是他写的 ~
比起 ninja 有什么好处?
graphdb 分析多层关联的查询在一般 db 可以怎么做?
我一直以为福云咖啡是写作"浮云咖啡", 还给某个人指错了...