#35 楼 @flowerwrong 没什么办法但 jbuilder 至少还能直接访问 session...
不喜欢 ActiveModel Serializer, 在里面注入 session 相关的内容例如 current_user 很困难 (得用莫名奇妙的 scope), 分页造假很困难 (谁知道是 expose ... metadata...), 不能缓存整个生成的 json 字符串,得 parse 一遍再给它序列化真实白白浪费 CPU ...
一点都不函数式的办法其实也很好呢...
def trailing_zeroes n
zeros = 0
zeros += n /= 5 while n > 0
zeros
end
所以不要学什么 best practice ... 应该少一点 judgement, 价值观应该简化为:这个代码满足需要否?实现能再简单点不?
debug 和跟踪执行是理解代码的重要手段之一,很多程序员甚至能在没有源代码的情况下 debug... 而我们有神器 byebug 和 binding.pry
看代码就是在自己大脑中建模的过程,经验会有点帮助,但经验不是年份堆出来的,是学理论/造轮子/反复思考/反复改进代码得来的...
其实对于长度为 N 的代码,人总是能在 log(N) 的时间内找到在哪出问题,最坏最坏的情况可以二分搜索嘛
不要纠结于掌握全局,也不要想"从更高的高度"看代码,能不管的都不管,只看对自己有用的部分就可以了,看到一坨便便你不该盯着它生气而应该绕过它...
这本书系统介绍了 debug 的方法,对看代码也是一样有帮助
<code>
默认 display: inline
, 所以 margin 只对第一行有效... display: block
就可以了
def has_staff_with_role?(role_name)
staffs.any?{|staff| staff.has_role? role_name }
end
比较 datetime.seconds_since_midnight
Ruby 有 lazy (SICP 中讲到的 stream), 只遍历一次
[1, 2, 3, 4].each.lazy.map {|partial| partial + 1}.map {|partial| partial * 2}.to_a
但是 reducer 不仅是 lazy 的,还可以对 map 操作并行化 (fork threads), 然后在 fold 操作中序列化 (join threads), ruby 中没有对应
cipher = OpenSSL::Cipher.new 'des-cbc'
cipher.encrypt
cipher.key = key
result = cipher.update(str) + cipher.final
Base64.encode64(result)
算法用错了。java 代码用了全 0 iv 所以 ruby 代码也不用设置
pkcs#5 padding 和 pkcs#5 不是一回事 pkcs#5 是通过 password 生成 key 和 iv 的规范 pkcs#5 padding 碰巧是这个规范里给的,补充明文使它可以被加密算法规定的长度整除的办法。OpenSSL 会按照加密算法自动采用 pkcs#5 / pkcs#7 padding
关于数据库表设计的问题,可以遵循规范化 (normalization) 原则去想,网上有很多参考,也是程序员考试的必考内容 楼主可以稍微花点时间学习一下 1NF, 2NF, 3NF 都是什么,什么时候用反范式设计,再看几个例子,然后就豁然开朗了
pg
[s].pack 'H*'
因为你给的正则匹配空字符串,而第一个空字符串在第一个空格之前
你可以看看所有的匹配都是什么:str.scan(r1).to_a
可是我这边一般 closure 还没启动完 uglifier 就编译完了...
不是乱码
有 id 的话没必要嵌套,嵌这么多层其实是不如直接用文件系统存的... url 太长也是有问题的... 各浏览器支持的最长 url 不一样...
expect 就是个繁琐版的 assert, 降低写代码的效率...
一看就觉得是个算钱的地方,请小心...
有时是 model 方法已经比较多了,拆成单独的 method 会污染 class 或者要抽太多参数,拆出 class 改起来又切来切去的不方便,直接放个 proc / lambda 就好了... 不过多是因为偷懒
在 java 连 oracle, 开一个 jetty 提供个 web service 就好了...