用 cygwin zsh 的话⋯⋯
wc -l **/*.{rb,slim,coffee,sass}
+1
广东的,实验室有着落了!
标准库不是内建了么?
require 'mathn'
123454321.prime?
123454321.prime_division
只是实现比较 naive,大一些就搞不定了
筛法,试除法,23 生成器都有 ...
Prime.take(20).drop(10)
rubinius 那样写是因为要用 ruby 实现 ruby,而 each, range 什么的都还没有⋯⋯
附带一个 1 进制的低效实现:
def prime? n
'1' * n !~ /^(11+)\1+$/
end
哎,等 central 稳定下来再干活吧,今天放假算了
貌似是新 brew 加的警告而已,不理它
失败教训:有 ruby 程序员在衬衫印了 sex symbol:
:sex
但其他人念 colon sex ...
DSS 就是 SHA, DSS1 就是 SHA1, 用不用是没关系的
DSA 是对 digest 进行签名的算法,不能给它传很大的数据
private key 可以进一步用 DES / 3 重 DES / AES 加密码 (例如楼主的 ca.key),不过和 pkcs8 没什么关系
我挺蛋疼的⋯⋯
OpenSSL::PKey 对应的 private key 格式不是 PKCS#8.
PKCS#8 的格式是:
sequence { version, sequence { "DSA", sequence { p, q, g } }, private_key }
OpenSSL::PKey::DSA 需要的格式是:
sequence { version, p, q, g, (p, q, g, y) , x }
什么是 p, q, g, y, x 就涉及到 DSA 算法了,细节不表。。。
所以呢,可以用 ASN1 转换成它认得的格式,和楼主给的 java 代码对应的 ruby 代码是:
# coding: utf-8
require "openssl"
require "base64"
# 转换 PKCS8 到 OpenSSL 认识的格式
def convert_der pkcs8
der = OpenSSL::ASN1.decode(pkcs8).value
version = der[0]
p, q, g = der[1].value[1].value
x = OpenSSL::ASN1::Integer.new OpenSSL::BN.new(der[2].value[2..-1], 2).to_i
y = g.value.mod_exp(p.value, x.value)
pub_key = OpenSSL::ASN1::Integer.new [p.value, q.value, g.value, y].map{|i|i.to_i.to_s(2)}.join.to_i(2)
OpenSSL::ASN1::Sequence.new([version, p, q, g, pub_key, x]).to_der
end
digest = 'whatever'
# 签名
der = Base64.decode64 "MIIBSgIBADCCASsGByqGSM44BAEwggEeAoGBAMMai0rQ+0dTbXjJhesuXbnAIX8bOQAWPG3cv5VDjSUPK5alJWKqtlDrkR2qn+gOKHZELZEhUNX+Zej0x2fRfYMaQ8/GoCm/PUZ79irt/+dg9pkkhUBQ+gPAcpt8vGA/VJHlExgd/vTXiCJyslJFlP6W34rnAnO9lZTIAwF9kXNFAhUA8I+b9ZS1MoHketM8YGPLqR/s3uECgYA+ZqrPhRW5BwOpb46c0x11tAOryfGWrByYYWb6ONjTTKCA1vVcCYEdBr6gNr8noO+xRsUtvlZ2Mar0xi9kwYr2CWBr/bFcvhvjRx7e24s6oC0AGpuwgTFjUkb7LkYcM7tyemLOmCs+Ir8gx+OXjC3ukFWawFnJtbB4BfH81Tk5ZAQWAhQwJA67UTJSe4Ft6eg7bEKGOQx/OA=="
priv_dsa = OpenSSL::PKey::DSA.new convert_der der
# puts priv_dsa.private? #=> true
sig = priv_dsa.syssign digest
# 验证
pub = Base64.decode64 "MIIBtjCCASsGByqGSM44BAEwggEeAoGBAMMai0rQ+0dTbXjJhesuXbnAIX8bOQAWPG3cv5VDjSUPK5alJWKqtlDrkR2qn+gOKHZELZEhUNX+Zej0x2fRfYMaQ8/GoCm/PUZ79irt/+dg9pkkhUBQ+gPAcpt8vGA/VJHlExgd/vTXiCJyslJFlP6W34rnAnO9lZTIAwF9kXNFAhUA8I+b9ZS1MoHketM8YGPLqR/s3uECgYA+ZqrPhRW5BwOpb46c0x11tAOryfGWrByYYWb6ONjTTKCA1vVcCYEdBr6gNr8noO+xRsUtvlZ2Mar0xi9kwYr2CWBr/bFcvhvjRx7e24s6oC0AGpuwgTFjUkb7LkYcM7tyemLOmCs+Ir8gx+OXjC3ukFWawFnJtbB4BfH81Tk5ZAOBhAACgYAtBXiK0XxLdhqhk2u/lh/xMpGIzlgAp+recKY9DHZI+DQidhFMNrAxzw3ptlKfV4jZeDallOMWe55m/Dn6EmP74BPzot1i+Pcz3VvQ0W5ts1QrR6A1w/STwP9RXKWERnV+YjMhyzWx39E9cDxeZMo0zonlqTjYAPI4+kDVhjU4uQ=="
pub_dsa = OpenSSL::PKey::DSA.new pub
# puts pub_dsa.private? #=> false
p pub_dsa.sysverify(digest, sig)
一定要支持单手打字
jruby 也就跑 benchmark 快一些⋯⋯
个人觉得 snippet 也就 def, cla, mod, if, do 这些补全 end 的最好用
另外把所有 assertxxx 都改成了 as 触发,所有 validatexxx 都改成 va 触发 ...
IE 只支持 10 或以上的飘过...
最新 xcode 完全没问题,homebrew 装不上的加参数 --use-gcc 就可以了
@yedingding 出手要快啊
最近裸跑速度已经比 google go 快了... 还有一个 www.gaug.es 也用 eventmachine 做 tracking server
http://twitter.github.com/bootstrap/ 的页面就是用 gaug.es 追踪的
@asobuwjcat 因为 19:00 好像有点早,19:30 好像有点晚,就随意写了时间 ..
如果说 "zed shaw 把我拉黑了" 之类的我就信
@camel 就是不喜这种 alias...和我自己的 alias 和函数冲突了...
oh-my-zsh 除了 alias 和 theme 没多少东西... completion 都是用的 zsh 自带的,如果只要 completion 不要 alias, 就得自己把整个插件拷到 custom 里改
zsh 还是很棒的,oh-my-zsh 过犹不及,git 状态自己写一个更好...
另外显示 git stash 状态:
git_prompt_stash() {
if [[ -n $(git stash list 2> /dev/null) ]]; then
echo "%{$fg[cyan]%}$"
fi
}
RPROMPT="$(git_prompt_stash)"
IDE 的很多功能都是从 vim, emacs, textmate 的插件移植过去的...
查文档之类的功能,vim 和 textmate 默认的 ruby 包就自带了
编辑器内 debug vim, emacs, textmate2 都可以...
自动完成盯着弹出菜单按上下键太慢了,90% 情况都是 vim 和 textmate 局部完成更好使
我从 eclipse 还是 IBM 的时候 (8 年前?) 就在用,它的可编程性太弱了。vim 插件和 textmate bundle 都可以随改随用的,eclipse 下面开发个插件蛋都要疼碎了...
binding.pry 那个自动完成比 eclipse 的完成好用多了...
就算 grep 也只有几秒吧,几分钟是怎么做到的...
其实去年我也整了个全下载的镜像... 那机器估计已经被你们 SA 收拾了
一定要全部下完才能搞镜像么?
我的 lazy download 镜像超简单: https://github.com/luikore/gems.mirror
最佳方案还是这个吧:
text-overflow: ellipsis;
IE 6 支持 http://msdn.microsoft.com/en-us/library/cc351024v=vs.85).aspx(
只有旧版本的 Firefox (6 或者以下) 有问题 http://stackoverflow.com/questions/802175/truncating-long-strings-with-css-feasible-yet
64 位 ubuntu 一个 worker 50M 内存的飘过... 你可以检查一下:
有些程序是看见有空闲内存就先占着的,不用白不用,说不定多开几个 worker 它就释放了。
64 位系统吃内存多,但是几乎消灭了 ext-lib 内存泄漏,有得有失。
另外... 加内存不贵吧?
你的 CentOS 是不是 32 位的?
bcrypt 的好处是: