新型Ruby開発へ 設計者表明、IT高度化・複雑化に対応 :日本経済新聞
2.4とかじゃなくて3.0なの?(2.3は既にtrunkになってるから出るとして)
とりあえず、期待することとしてはPythonぐらい処理速度が上がって、人工知能(機械学習、ディープラーニング)で使えるようになってほしい。
具体的にはTensorFlowをRubyで動かしたい。
さすがにそこまでの変化はないかな。でも、メジャーバージョン上がるんだから期待してもいいよね?
文鳥可愛い。まどマギ好き。SEやってます。
新型Ruby開発へ 設計者表明、IT高度化・複雑化に対応 :日本経済新聞
2.4とかじゃなくて3.0なの?(2.3は既にtrunkになってるから出るとして)
とりあえず、期待することとしてはPythonぐらい処理速度が上がって、人工知能(機械学習、ディープラーニング)で使えるようになってほしい。
具体的にはTensorFlowをRubyで動かしたい。
さすがにそこまでの変化はないかな。でも、メジャーバージョン上がるんだから期待してもいいよね?
順番に入れていく。まだローカルでテストしてる段階なので、VPSに入れる時にはオプションとか変更するかも。
以下、特に断りがないかぎりバージョンは本記事公開時点の最新を選択。
CVMUプロジェクト自体、安定性より最新を重視してるので、さすがにdevelopment・canary・nightlyやβ版、RC版は使わないけど、正式リリースであれば出たばっかりのバージョンでもどんどん使っていくつもり。
※コマンドの先頭が「#」になってるものはroot権限が必要という意味で、実際はsudoでやってる場合もある。
なんてことはない、ただRubyでHTTPSなWebサーバにアクセスしてGETでデータをとってくるというだけの話なんだけど...
まず思いついたのがこのコード。
require 'net/https'
Net::HTTP.get(URI.parse("https://mcrn.jp/ret.cgi"))
しかし、次のようなエラーが返ってきてしまう。
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed from C:/Ruby21x/lib/ruby/2.1.0/net/http.rb:923:in `connect'
もしかしてSNIに対応していない?と思ったけど違った(4年以上前に対応してる)。
さらに調べて、以下の記事をヒントに証明書の場所を調べてみてびっくり。
require 'openssl'
p OpenSSL::X509::DEFAULT_CERT_FILE
"C:/Users/Justin/Projects/knap-build/var/knapsack/software/x64-windows/openssl/1.0.1l/ssl/cert.pem"
=> "C:/Users/Justin/Projects/knap-build/var/knapsack/software/x64-windows/openssl/1.0.1l/ssl/cert.pem"
Justin!?誰???(※1)
Ruby - マイナンバーのチェックデジットを計算する - Qiita
何となく気になって、チェックディジット(デジット、サム)(※1)の計算方法を調べてみたんだけど、要するにこれを使えば「無意味な11桁の数字」からマイナンバールールに適合するのが作れるということになる。
ということで、上記記事にあったコードを弄ってみた。
def create_my_number(dmynum)
digits = ("%11d" % dmynum.to_i).chars.map(&:to_i)
raise "#{dmynum}" unless digits.length == 11
digits.reverse!
remainder = (1..11).inject(0) {|sum, i|
p = digits[i-1]
q = (i <= 6) ? i+1 : i-5
sum + p*q
} % 11
case remainder
when 0,1
check_digit = 0
else
check_digit = (11 - remainder)
end
%Q!#{"%011d" % dmynum.to_i}#{check_digit}!
end
rng = Random.new()
1000.times do
puts create_my_number(rng.rand(10**11))
end
さーて、ゴリ押しのバカコードで検証検証♪
def montyhole(chg,doors=3)
a = (1..doors).to_a
goal = a.sample(1)[0]
me = a.sample(1)[0]
b = a.clone
b.delete(goal)
b.delete(me)
you = b.sample(1)[0]
if chg
c = a.clone
c.delete(me)
c.delete(you)
# raise "ERROR" if c.length > (doors - 2)
me = c[0]
end
if me == goal
1
else
0
end
end
doornum = 3
10.times do
stay = 0
change = 0
10000.times do
stay += montyhole(false,doornum)
change += montyhole(true,doornum)
end
puts "stay: #{stay}, change: #{change}"
end
結果、変えない方は約3333/10000(1/3)、変えた方は約6666/10000(2/3)。