puts
打不出来可以试试 $stderr.puts
或者可能已经都被重定向到日志里了
插 binding.pry
比 debug 好用
#12 楼 @blacktulip ... old idea, stupid syntax ...
class-based OO 的方法论是从忽悠做起:先给对象关系建模,全部设计好后再写代码,对象的关系由类型的关系决定,由于关系往往是静态的运行时不可变的,可以用 "继承" 这个词表达重用的意图。
prototype-based OO 不讲继承,因为对象的原型可以换掉和修改,和"继承"这个隐喻区别很大,用"继承"去理解就是误解... prototype 的方法论是不忽悠直接开始码代码:先写一部分的行为,有必要重用时再考虑把它变成 prototype. 对象关系不和类型挂钩,运行时可变。
从能力上看,prototype 可以模拟 class, class 很难模拟 prototype.
js 一点都不先进...
另外用继承去理解 prototype 就永远理解不了了...
ruby class A
是类,class << A
是原型
粗略的说
写测试只是 2 倍时间,不写要花 10 倍时间 debug ...
Boy.where(fileid: a).group_by(:code).map do |_, boys|
boys.inject do |hellboy, boy|
hellboy.name << ',' << boy.name
hellboy.quantity += boy.quantity
hellboy
end
end
如果想在 sql 做也可以,只要数据库是 oracle 或者 postgresql, 都能简单的 select code, string_agg(name, ',') as name, sum(quantity) as quantity, fileid from ... where ... group by code
就出来了,但是 mysql 的 group 语句太土鳖整不了。
原来 NSTextView 原生支持二段快捷键...
掌握模板引擎核心技术,整个 erubis 的小补丁,编译时就把 render :partial =>
内联进来,就一样快了
至于在 partial 中访问数据库,是往往比在 helper 慢一点的,看访问和拼接的顺序了。
helper 往往可以先取数据库内容,然后再开始拼接,partial 往往是先拼接一段,再访问数据库,再拼接 (其实 partial 也可以先取再拼接的,效果就差不多了)
拼接 -> 数据库 -> 拼接 更容易产生 page-fault 也就是 CPU 的 L2 cache 失效 (呃,这里讲的是 CPU cache 而不是页面 cache...) 数据库 -> 拼接 的方式 CPU cache miss 就少一点
另外 rails 在每个 partial 里都会调用一次 eval
以注入局部变量,而 eval
是比较重量级的方法,需要解析 -> 生成 bytecode -> 执行
三步走。其实注入局部变量在 ruby 2.0+ 可以用不带 eval
的方式实现的... 所以 nyara 才需要 2.0+
贵厂威武... 是研究砲の道的么
应该打上 NSFW 标签,在公共场合打开会引起注意的...
然后把这个操作保存成一个宏,以后就能一键调用了...
和 textmate 一样?
按住 alt 选中左列进入多行编辑模式
shift + end 选中所有行
按 "
把它们引起来
end 到行末,加入逗号,del 换行符 (mac 就是 fn+delete)
按上/下退出 multiedit 模式,全选,按 [
加上方括号
还可以对上线版本用 metasploit 做穿透测试,metasploit 还可以开 irb 控制台干坏事...
对于大部分带拼字符串的命令行调用
system "cc #{foo} -o tmp/#{bar}"
全部改成这样就不怕注入了:
system *%W"cc #{foo} -o tmp/#{bar}"
利用 ruby 语法优势,只需要加 *%W
超简单...
用数组方式做调用,或者拼字符串时加上 obj.shellescape
就好了
不过 curl 的协议问题也是经常会没注意到...
#4 楼 @goinaction en, 是的,这里 old_handler 是个闭包变量
#2 楼 @goinaction 递归是调用链里会调用回自己,但这里只是新的 handler 调用了旧的 handler, 两个 handler 都不会调用到自己。
trap 同一个信号会覆盖旧 handler, 如果不想丢掉旧 handler, 就在新 handler 里调一下旧的。为了让你方便找到旧 handler, trap 返回上一次的 handler 而不是这一次的。
不是递归呀
最后主角告别了依依,和二蛋走到了一起...