タグ「Ruby」が付けられているもの

2015年11月13日

Ruby 3!?

新型Ruby開発へ 設計者表明、IT高度化・複雑化に対応  :日本経済新聞

2.4とかじゃなくて3.0なの?(2.3は既にtrunkになってるから出るとして)

とりあえず、期待することとしてはPythonぐらい処理速度が上がって、人工知能(機械学習、ディープラーニング)で使えるようになってほしい。

具体的にはTensorFlowをRubyで動かしたい。

さすがにそこまでの変化はないかな。でも、メジャーバージョン上がるんだから期待してもいいよね?

2015年11月 1日

CentOS7にnginx+Unicorn+Ruby 2.2(rbenv)+Rails 4.2

  • 投稿日:
  • by
  • カテゴリ:

順番に入れていく。まだローカルでテストしてる段階なので、VPSに入れる時にはオプションとか変更するかも。

以下、特に断りがないかぎりバージョンは本記事公開時点の最新を選択。

CVMUプロジェクト自体、安定性より最新を重視してるので、さすがにdevelopment・canary・nightlyやβ版、RC版は使わないけど、正式リリースであれば出たばっかりのバージョンでもどんどん使っていくつもり。

※コマンドの先頭が「#」になってるものはroot権限が必要という意味で、実際はsudoでやってる場合もある。

2015年10月28日

RubyでHTTPS

なんてことはない、ただ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年以上前に対応してる)。

さらに調べて、以下の記事をヒントに証明書の場所を調べてみてびっくり。

エラー:OpenSSL::SSL::SSLError SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed - komiyakの通り道

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

2015年10月23日

マイナンバー(もどき)を大量生成?

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

2015年10月22日

モンティ・ホール問題をゴリ押しする

終物語 ~ モンティ・ホール問題 - カモメのリズム

さーて、ゴリ押しのバカコードで検証検証♪

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)。