51
Ruby の標準乱数生成器とその改良案 The standard random number generator of Ruby and the proposal to improve it 村田 賢太 Kenta Murata mrkn 1 2009718日土曜日

Ruby の標準乱数生成器とその改善案

Embed Size (px)

DESCRIPTION

Ruby の標準乱数生成器の特徴と問題点について説明し、その改善案を提示します。

Citation preview

Page 1: Ruby の標準乱数生成器とその改善案

Ruby の標準乱数生成器とその改良案The standard random number generator of Ruby and the proposal to improve it

村田 賢太Kenta Murata

mrkn

12009年7月18日土曜日

Page 2: Ruby の標準乱数生成器とその改善案

Ruby の標準乱数生成器とその改良案The standard random number generator of Ruby and the proposal to improve it

村田 賢太Kenta Murata

mrkn

22009年7月18日土曜日

Page 3: Ruby の標準乱数生成器とその改善案

Kenta Murata, Ph.D

‣Ph.D (Hokkaido University)‣Department of Information Science.

‣Born on July 20th 【COMING SOON】

‣Membership‣Ruby Sapporo (ruby-sapporo.org)‣KaigiFreaks ‣Nihon Ruby-no kai‣Kosen Conference (kosenconf.jp)

32009年7月18日土曜日

Page 7: Ruby の標準乱数生成器とその改善案

KaigiFreaks は今年もRuby 会議を

全世界へお届けします!

Photo by snoozer05 in Flickr http://www.flickr.com/photos/snoozer/2605971795/2009年7月18日土曜日

Page 8: Ruby の標準乱数生成器とその改善案

PPHPPHPPHPPPプロが選んだ三ツ星レシピ!!いまさら聞けない・誰も教えてくれない本当に必要な知識と技を一冊に凝縮!!困ったときにすぐ引ける! 実践で即役立つテクニックと開発ノウハウ、つまづきやすい・ハマりやすいポイントを徹底解説。

PHP ★★ ★ ★

★ ★ ★

★ ★ ★

Programmer'sRecipe

逆引きレシピ鈴木憲治/安藤建一/山田直明八木照朗/山本義之/河合勝彦

すぐに美味しい

サンプル&テクニック

261

Windows/Mac対応 PHP5.3対応

・主要レンタルサーバーの設定法と違い

・セキュリティ対策のポイントと実際

よくわかる!

すぐに美味しい

サンプル&テクニック yRubyRubyRすぐに美味しい

サンプル&

RR

プロが選んだ三ツ星レシピ!!広大なRubyの世界でもう迷わない!開発時の悩みを解決する定番ノウハウ集“やりたいこと”からすぐ引ける! アプリケーション開発時に即役立つ機能・ライブラリ・テクニックを丁寧に解説。

★ ★ ★

★ ★ ★

Programmer'sRecipe★★ ★ ★★ ★ ★

Programmer'sRecipeRuby逆引きレシピ

232

★ ★ ★

島田浩二/設樂洋爾/村田賢太前田智樹/谷口文威

すぐに美味しい

サンプル&

テクニック

★ ★ ★本書について

  Rubyの世界はとても広大であり、Rubyに慣れ親しんだ者

でさえ道に迷ってしまうことが多々あります。多くのライブラ

リ、多くの実装手段が存在するため、適切な解決策へたどり

着くまでに迷ってしまうのです。そのため、Rubyを始めたば

かりの人達が適切な解決策へたどり着くことは至難の業と言

えるでしょう。Rubyの入門書の多くは、このための道案内を

してはくれません。

 本書は、開発の現場で直面する現実の問題をRubyで解決

する方法や、そのために必要な知識やノウハウを、レシピ形

式で紹介する本です。実際の現場で扱うことの多いレシピ

を関連するカテゴリや目的別にまとめています。技術や概念

の説明は必要最低限にとどめ、「やりたいこと」を実現する

ために「どのようなライブラリや機能をどう使えばよいか」を、

サンプルコードを交えてわかりやすく簡潔に解説しています。

 本書のもう1つの目的は、Rubyコミュニティで漠然と共有さ

れているRubyらしい考え方を学ぶことです。リファレンスや

チュートリアルの形ではなく、さまざまなライブラリが実際の

問題をどのように解決しているかを知ることで、Rubyプログラ

マの考え方とその根底にある哲学を学ぶことができます。

そうした考え方さえ身に付けることができれば、あなたは自

然とRubyを使いこなし自力で問題を解けるようになっている

ことでしょう。

 本書が、Rubyによる楽しいプログラミングの一助となれば

幸いです。

(「はじめに」より抜粋)

CONTENTS

1 さあ始めよう RubyGemsや実行環境のカスタマイズなど、 Rubyやライブラリを使いこなす環境を整える方法を解説

2 基本オブジェクト 文字列、数値、コレクションなどを扱うための知識・テクニックを解説

3 システム 日付や時刻、標準入出力、ファイルシステムなどを扱うための知識・テクニックを解説

4 オブジェクト指向プログラミング OOPの技法や慣習をRubyで実現する方法、Rubyプログラミングの際の考え方などを解説

5 データベース/永続化 各種データベースの操作やオブジェクトを永続化する方法について解説

6 ネットワーク処理/ Webプログラミング さまざまなプロトコルやWebサーバー/クライアント、並列分散処理を扱う方法を解説

7 各種フォーマット/画像 現場で利用することの多い書式や画像を扱う方法について解説

8 他言語/外部ライブラリ Ruby以外の言語や外部ライブラリを扱う方法について解説

9 エラー処理/ログ アプリケーションを作り込む際に必要なエラー処理やログの記録を行なう方法について解説

10 テスト/最適化 コードの評価を行なう際に必要なテストや各種指標の計測を行なう方法について解説

11 デバッグ デバッガでRubyプログラムをデバッグする方法や各種デバッグ技法などを解説

12 システム管理/自動化 システム管理や作業を自動化する方法を解説

13 ドキュメンテーション/パッケージ化 APIドキュメントを生成する方法やプログラム配布のためにパッケージ化する方法を解説

14 さらに先へ Ruby 1.9の基本やRubyに関する情報収集の方法など、今後の学習に役立つ情報を紹介

232

Ruby逆引きレシピISBN978-4-7981-1988-5

Ruby逆引きレシピ

★★ ★ ★★ ★ ★

Programmer'sRecipe Ruby逆引きレシピ

★ ★ ★

★ ★ ★

Programmer'sRecipe

【逆引きレシピシリーズ】

Visual Basic 2008逆引きレシピ[Windowsアプリケーション編]

現場に即効!! 基本+定番+重要テクニック

すぐに美味しい

サンプル&テクニック

267

すぐ

サンテク

26

プロが選んだ三ツ星レシピ!!現場に即効!!基本+定番+重要テクニック実開発に即した“実践見出し”で、困ったときにすぐ引ける!Visual Basicによるアプリケーション構築のノウハウを一冊に凝縮。

★★ ★ ★

★ ★ ★

Programmer'sRecipe

Visual Basic 2008 逆引きレシピ

★ ★ ★

中垣健志+藤田聡 著 Windowsアプリケーション

編[ ]

中垣健志/藤田聡 著定価2,520円(本体2,400円+税5%)ISBN978-4-7981-1780-5

SQL逆引きレシピ即効力のあるレシピを使えばデータ操作が自由自在!!

PHP逆引きレシピ即効力のあるレシピを使えばデータ操作が自由自在!!

西沢直木 著定価2,310円(本体2,200円+税5%)ISBN978-4-7981-1779-9

鈴木憲治/安藤建一/山田直明八木照朗/山本義之/河合勝彦 著定価2,730円(本体2,600円+税5%)ISBN978-4-7981-1986-1

プロが選んだ三ツ星レシピ!!即効力のあるレシピを使えばデータ操作が自由自在!!現場に即した“実践見出し”で引けるので、用途に適した項目をパパっと参照! 具体的なサンプルを使った解説で、複雑なSQL文もラクラク理解!

SQL ★★ ★ ★

★ ★ ★

★ ★ ★

Programmer'sRecipe

逆引きレシピ西沢直木 著

すぐに美味しい

サンプル&テクニック

160

・本当に使えるライブラリとその活用法

・Rubyらしい考え方と書き方

よくわかる!

Ruby 逆引きレシピ7月25日発売!!

8

2009年7月18日土曜日

Page 9: Ruby の標準乱数生成器とその改善案

PPHPPHPPHPPPプロが選んだ三ツ星レシピ!!いまさら聞けない・誰も教えてくれない本当に必要な知識と技を一冊に凝縮!!困ったときにすぐ引ける! 実践で即役立つテクニックと開発ノウハウ、つまづきやすい・ハマりやすいポイントを徹底解説。

PHP ★★ ★ ★

★ ★ ★

★ ★ ★

Programmer'sRecipe

逆引きレシピ鈴木憲治/安藤建一/山田直明八木照朗/山本義之/河合勝彦

すぐに美味しい

サンプル&テクニック

261

Windows/Mac対応 PHP5.3対応

・主要レンタルサーバーの設定法と違い

・セキュリティ対策のポイントと実際

よくわかる!

すぐに美味しい

サンプル&テクニック yRubyRubyRすぐに美味しい

サンプル&

RR

プロが選んだ三ツ星レシピ!!広大なRubyの世界でもう迷わない!開発時の悩みを解決する定番ノウハウ集“やりたいこと”からすぐ引ける! アプリケーション開発時に即役立つ機能・ライブラリ・テクニックを丁寧に解説。

★ ★ ★

★ ★ ★

Programmer'sRecipe★★ ★ ★★ ★ ★

Programmer'sRecipeRuby逆引きレシピ

232

★ ★ ★

島田浩二/設樂洋爾/村田賢太前田智樹/谷口文威

すぐに美味しい

サンプル&

テクニック

★ ★ ★本書について

  Rubyの世界はとても広大であり、Rubyに慣れ親しんだ者

でさえ道に迷ってしまうことが多々あります。多くのライブラ

リ、多くの実装手段が存在するため、適切な解決策へたどり

着くまでに迷ってしまうのです。そのため、Rubyを始めたば

かりの人達が適切な解決策へたどり着くことは至難の業と言

えるでしょう。Rubyの入門書の多くは、このための道案内を

してはくれません。

 本書は、開発の現場で直面する現実の問題をRubyで解決

する方法や、そのために必要な知識やノウハウを、レシピ形

式で紹介する本です。実際の現場で扱うことの多いレシピ

を関連するカテゴリや目的別にまとめています。技術や概念

の説明は必要最低限にとどめ、「やりたいこと」を実現する

ために「どのようなライブラリや機能をどう使えばよいか」を、

サンプルコードを交えてわかりやすく簡潔に解説しています。

 本書のもう1つの目的は、Rubyコミュニティで漠然と共有さ

れているRubyらしい考え方を学ぶことです。リファレンスや

チュートリアルの形ではなく、さまざまなライブラリが実際の

問題をどのように解決しているかを知ることで、Rubyプログラ

マの考え方とその根底にある哲学を学ぶことができます。

そうした考え方さえ身に付けることができれば、あなたは自

然とRubyを使いこなし自力で問題を解けるようになっている

ことでしょう。

 本書が、Rubyによる楽しいプログラミングの一助となれば

幸いです。

(「はじめに」より抜粋)

CONTENTS

1 さあ始めよう RubyGemsや実行環境のカスタマイズなど、 Rubyやライブラリを使いこなす環境を整える方法を解説

2 基本オブジェクト 文字列、数値、コレクションなどを扱うための知識・テクニックを解説

3 システム 日付や時刻、標準入出力、ファイルシステムなどを扱うための知識・テクニックを解説

4 オブジェクト指向プログラミング OOPの技法や慣習をRubyで実現する方法、Rubyプログラミングの際の考え方などを解説

5 データベース/永続化 各種データベースの操作やオブジェクトを永続化する方法について解説

6 ネットワーク処理/ Webプログラミング さまざまなプロトコルやWebサーバー/クライアント、並列分散処理を扱う方法を解説

7 各種フォーマット/画像 現場で利用することの多い書式や画像を扱う方法について解説

8 他言語/外部ライブラリ Ruby以外の言語や外部ライブラリを扱う方法について解説

9 エラー処理/ログ アプリケーションを作り込む際に必要なエラー処理やログの記録を行なう方法について解説

10 テスト/最適化 コードの評価を行なう際に必要なテストや各種指標の計測を行なう方法について解説

11 デバッグ デバッガでRubyプログラムをデバッグする方法や各種デバッグ技法などを解説

12 システム管理/自動化 システム管理や作業を自動化する方法を解説

13 ドキュメンテーション/パッケージ化 APIドキュメントを生成する方法やプログラム配布のためにパッケージ化する方法を解説

14 さらに先へ Ruby 1.9の基本やRubyに関する情報収集の方法など、今後の学習に役立つ情報を紹介

232

Ruby逆引きレシピISBN978-4-7981-1988-5

Ruby逆引きレシピ

★★ ★ ★★ ★ ★

Programmer'sRecipe Ruby逆引きレシピ

★ ★ ★

★ ★ ★

Programmer'sRecipe

【逆引きレシピシリーズ】

Visual Basic 2008逆引きレシピ[Windowsアプリケーション編]

現場に即効!! 基本+定番+重要テクニック

すぐに美味しい

サンプル&テクニック

267

すぐ

サンテク

26

プロが選んだ三ツ星レシピ!!現場に即効!!基本+定番+重要テクニック実開発に即した“実践見出し”で、困ったときにすぐ引ける!Visual Basicによるアプリケーション構築のノウハウを一冊に凝縮。

★★ ★ ★

★ ★ ★

Programmer'sRecipe

Visual Basic 2008 逆引きレシピ

★ ★ ★

中垣健志+藤田聡 著 Windowsアプリケーション

編[ ]

中垣健志/藤田聡 著定価2,520円(本体2,400円+税5%)ISBN978-4-7981-1780-5

SQL逆引きレシピ即効力のあるレシピを使えばデータ操作が自由自在!!

PHP逆引きレシピ即効力のあるレシピを使えばデータ操作が自由自在!!

西沢直木 著定価2,310円(本体2,200円+税5%)ISBN978-4-7981-1779-9

鈴木憲治/安藤建一/山田直明八木照朗/山本義之/河合勝彦 著定価2,730円(本体2,600円+税5%)ISBN978-4-7981-1986-1

プロが選んだ三ツ星レシピ!!即効力のあるレシピを使えばデータ操作が自由自在!!現場に即した“実践見出し”で引けるので、用途に適した項目をパパっと参照! 具体的なサンプルを使った解説で、複雑なSQL文もラクラク理解!

SQL ★★ ★ ★

★ ★ ★

★ ★ ★

Programmer'sRecipe

逆引きレシピ西沢直木 著

すぐに美味しい

サンプル&テクニック

160

・本当に使えるライブラリとその活用法

・Rubyらしい考え方と書き方

よくわかる!

Ruby 逆引きレシピ

‣ジュンク堂 Ruby 会議支店にて先行発売中!!

7月25日発売!!

8

2009年7月18日土曜日

Page 10: Ruby の標準乱数生成器とその改善案

PPHPPHPPHPPPプロが選んだ三ツ星レシピ!!いまさら聞けない・誰も教えてくれない本当に必要な知識と技を一冊に凝縮!!困ったときにすぐ引ける! 実践で即役立つテクニックと開発ノウハウ、つまづきやすい・ハマりやすいポイントを徹底解説。

PHP ★★ ★ ★

★ ★ ★

★ ★ ★

Programmer'sRecipe

逆引きレシピ鈴木憲治/安藤建一/山田直明八木照朗/山本義之/河合勝彦

すぐに美味しい

サンプル&テクニック

261

Windows/Mac対応 PHP5.3対応

・主要レンタルサーバーの設定法と違い

・セキュリティ対策のポイントと実際

よくわかる!

すぐに美味しい

サンプル&テクニック yRubyRubyRすぐに美味しい

サンプル&

RR

プロが選んだ三ツ星レシピ!!広大なRubyの世界でもう迷わない!開発時の悩みを解決する定番ノウハウ集“やりたいこと”からすぐ引ける! アプリケーション開発時に即役立つ機能・ライブラリ・テクニックを丁寧に解説。

★ ★ ★

★ ★ ★

Programmer'sRecipe★★ ★ ★★ ★ ★

Programmer'sRecipeRuby逆引きレシピ

232

★ ★ ★

島田浩二/設樂洋爾/村田賢太前田智樹/谷口文威

すぐに美味しい

サンプル&

テクニック

★ ★ ★本書について

  Rubyの世界はとても広大であり、Rubyに慣れ親しんだ者

でさえ道に迷ってしまうことが多々あります。多くのライブラ

リ、多くの実装手段が存在するため、適切な解決策へたどり

着くまでに迷ってしまうのです。そのため、Rubyを始めたば

かりの人達が適切な解決策へたどり着くことは至難の業と言

えるでしょう。Rubyの入門書の多くは、このための道案内を

してはくれません。

 本書は、開発の現場で直面する現実の問題をRubyで解決

する方法や、そのために必要な知識やノウハウを、レシピ形

式で紹介する本です。実際の現場で扱うことの多いレシピ

を関連するカテゴリや目的別にまとめています。技術や概念

の説明は必要最低限にとどめ、「やりたいこと」を実現する

ために「どのようなライブラリや機能をどう使えばよいか」を、

サンプルコードを交えてわかりやすく簡潔に解説しています。

 本書のもう1つの目的は、Rubyコミュニティで漠然と共有さ

れているRubyらしい考え方を学ぶことです。リファレンスや

チュートリアルの形ではなく、さまざまなライブラリが実際の

問題をどのように解決しているかを知ることで、Rubyプログラ

マの考え方とその根底にある哲学を学ぶことができます。

そうした考え方さえ身に付けることができれば、あなたは自

然とRubyを使いこなし自力で問題を解けるようになっている

ことでしょう。

 本書が、Rubyによる楽しいプログラミングの一助となれば

幸いです。

(「はじめに」より抜粋)

CONTENTS

1 さあ始めよう RubyGemsや実行環境のカスタマイズなど、 Rubyやライブラリを使いこなす環境を整える方法を解説

2 基本オブジェクト 文字列、数値、コレクションなどを扱うための知識・テクニックを解説

3 システム 日付や時刻、標準入出力、ファイルシステムなどを扱うための知識・テクニックを解説

4 オブジェクト指向プログラミング OOPの技法や慣習をRubyで実現する方法、Rubyプログラミングの際の考え方などを解説

5 データベース/永続化 各種データベースの操作やオブジェクトを永続化する方法について解説

6 ネットワーク処理/ Webプログラミング さまざまなプロトコルやWebサーバー/クライアント、並列分散処理を扱う方法を解説

7 各種フォーマット/画像 現場で利用することの多い書式や画像を扱う方法について解説

8 他言語/外部ライブラリ Ruby以外の言語や外部ライブラリを扱う方法について解説

9 エラー処理/ログ アプリケーションを作り込む際に必要なエラー処理やログの記録を行なう方法について解説

10 テスト/最適化 コードの評価を行なう際に必要なテストや各種指標の計測を行なう方法について解説

11 デバッグ デバッガでRubyプログラムをデバッグする方法や各種デバッグ技法などを解説

12 システム管理/自動化 システム管理や作業を自動化する方法を解説

13 ドキュメンテーション/パッケージ化 APIドキュメントを生成する方法やプログラム配布のためにパッケージ化する方法を解説

14 さらに先へ Ruby 1.9の基本やRubyに関する情報収集の方法など、今後の学習に役立つ情報を紹介

232

Ruby逆引きレシピISBN978-4-7981-1988-5

Ruby逆引きレシピ

★★ ★ ★★ ★ ★

Programmer'sRecipe Ruby逆引きレシピ

★ ★ ★

★ ★ ★

Programmer'sRecipe

【逆引きレシピシリーズ】

Visual Basic 2008逆引きレシピ[Windowsアプリケーション編]

現場に即効!! 基本+定番+重要テクニック

すぐに美味しい

サンプル&テクニック

267

すぐ

サンテク

26

プロが選んだ三ツ星レシピ!!現場に即効!!基本+定番+重要テクニック実開発に即した“実践見出し”で、困ったときにすぐ引ける!Visual Basicによるアプリケーション構築のノウハウを一冊に凝縮。

★★ ★ ★

★ ★ ★

Programmer'sRecipe

Visual Basic 2008 逆引きレシピ

★ ★ ★

中垣健志+藤田聡 著 Windowsアプリケーション

編[ ]

中垣健志/藤田聡 著定価2,520円(本体2,400円+税5%)ISBN978-4-7981-1780-5

SQL逆引きレシピ即効力のあるレシピを使えばデータ操作が自由自在!!

PHP逆引きレシピ即効力のあるレシピを使えばデータ操作が自由自在!!

西沢直木 著定価2,310円(本体2,200円+税5%)ISBN978-4-7981-1779-9

鈴木憲治/安藤建一/山田直明八木照朗/山本義之/河合勝彦 著定価2,730円(本体2,600円+税5%)ISBN978-4-7981-1986-1

プロが選んだ三ツ星レシピ!!即効力のあるレシピを使えばデータ操作が自由自在!!現場に即した“実践見出し”で引けるので、用途に適した項目をパパっと参照! 具体的なサンプルを使った解説で、複雑なSQL文もラクラク理解!

SQL ★★ ★ ★

★ ★ ★

★ ★ ★

Programmer'sRecipe

逆引きレシピ西沢直木 著

すぐに美味しい

サンプル&テクニック

160

・本当に使えるライブラリとその活用法

・Rubyらしい考え方と書き方

よくわかる!

Ruby 逆引きレシピ

‣ジュンク堂 Ruby 会議支店にて先行発売中!!

♥おまけ付き♥

7月25日発売!!

8

2009年7月18日土曜日

Page 11: Ruby の標準乱数生成器とその改善案

PPHPPHPPHPPPプロが選んだ三ツ星レシピ!!いまさら聞けない・誰も教えてくれない本当に必要な知識と技を一冊に凝縮!!困ったときにすぐ引ける! 実践で即役立つテクニックと開発ノウハウ、つまづきやすい・ハマりやすいポイントを徹底解説。

PHP ★★ ★ ★

★ ★ ★

★ ★ ★

Programmer'sRecipe

逆引きレシピ鈴木憲治/安藤建一/山田直明八木照朗/山本義之/河合勝彦

すぐに美味しい

サンプル&テクニック

261

Windows/Mac対応 PHP5.3対応

・主要レンタルサーバーの設定法と違い

・セキュリティ対策のポイントと実際

よくわかる!

すぐに美味しい

サンプル&テクニック yRubyRubyRすぐに美味しい

サンプル&

RR

プロが選んだ三ツ星レシピ!!広大なRubyの世界でもう迷わない!開発時の悩みを解決する定番ノウハウ集“やりたいこと”からすぐ引ける! アプリケーション開発時に即役立つ機能・ライブラリ・テクニックを丁寧に解説。

★ ★ ★

★ ★ ★

Programmer'sRecipe★★ ★ ★★ ★ ★

Programmer'sRecipeRuby逆引きレシピ

232

★ ★ ★

島田浩二/設樂洋爾/村田賢太前田智樹/谷口文威

すぐに美味しい

サンプル&

テクニック

★ ★ ★本書について

  Rubyの世界はとても広大であり、Rubyに慣れ親しんだ者

でさえ道に迷ってしまうことが多々あります。多くのライブラ

リ、多くの実装手段が存在するため、適切な解決策へたどり

着くまでに迷ってしまうのです。そのため、Rubyを始めたば

かりの人達が適切な解決策へたどり着くことは至難の業と言

えるでしょう。Rubyの入門書の多くは、このための道案内を

してはくれません。

 本書は、開発の現場で直面する現実の問題をRubyで解決

する方法や、そのために必要な知識やノウハウを、レシピ形

式で紹介する本です。実際の現場で扱うことの多いレシピ

を関連するカテゴリや目的別にまとめています。技術や概念

の説明は必要最低限にとどめ、「やりたいこと」を実現する

ために「どのようなライブラリや機能をどう使えばよいか」を、

サンプルコードを交えてわかりやすく簡潔に解説しています。

 本書のもう1つの目的は、Rubyコミュニティで漠然と共有さ

れているRubyらしい考え方を学ぶことです。リファレンスや

チュートリアルの形ではなく、さまざまなライブラリが実際の

問題をどのように解決しているかを知ることで、Rubyプログラ

マの考え方とその根底にある哲学を学ぶことができます。

そうした考え方さえ身に付けることができれば、あなたは自

然とRubyを使いこなし自力で問題を解けるようになっている

ことでしょう。

 本書が、Rubyによる楽しいプログラミングの一助となれば

幸いです。

(「はじめに」より抜粋)

CONTENTS

1 さあ始めよう RubyGemsや実行環境のカスタマイズなど、 Rubyやライブラリを使いこなす環境を整える方法を解説

2 基本オブジェクト 文字列、数値、コレクションなどを扱うための知識・テクニックを解説

3 システム 日付や時刻、標準入出力、ファイルシステムなどを扱うための知識・テクニックを解説

4 オブジェクト指向プログラミング OOPの技法や慣習をRubyで実現する方法、Rubyプログラミングの際の考え方などを解説

5 データベース/永続化 各種データベースの操作やオブジェクトを永続化する方法について解説

6 ネットワーク処理/ Webプログラミング さまざまなプロトコルやWebサーバー/クライアント、並列分散処理を扱う方法を解説

7 各種フォーマット/画像 現場で利用することの多い書式や画像を扱う方法について解説

8 他言語/外部ライブラリ Ruby以外の言語や外部ライブラリを扱う方法について解説

9 エラー処理/ログ アプリケーションを作り込む際に必要なエラー処理やログの記録を行なう方法について解説

10 テスト/最適化 コードの評価を行なう際に必要なテストや各種指標の計測を行なう方法について解説

11 デバッグ デバッガでRubyプログラムをデバッグする方法や各種デバッグ技法などを解説

12 システム管理/自動化 システム管理や作業を自動化する方法を解説

13 ドキュメンテーション/パッケージ化 APIドキュメントを生成する方法やプログラム配布のためにパッケージ化する方法を解説

14 さらに先へ Ruby 1.9の基本やRubyに関する情報収集の方法など、今後の学習に役立つ情報を紹介

232

Ruby逆引きレシピISBN978-4-7981-1988-5

Ruby逆引きレシピ

★★ ★ ★★ ★ ★

Programmer'sRecipe Ruby逆引きレシピ

★ ★ ★

★ ★ ★

Programmer'sRecipe

【逆引きレシピシリーズ】

Visual Basic 2008逆引きレシピ[Windowsアプリケーション編]

現場に即効!! 基本+定番+重要テクニック

すぐに美味しい

サンプル&テクニック

267

すぐ

サンテク

26

プロが選んだ三ツ星レシピ!!現場に即効!!基本+定番+重要テクニック実開発に即した“実践見出し”で、困ったときにすぐ引ける!Visual Basicによるアプリケーション構築のノウハウを一冊に凝縮。

★★ ★ ★

★ ★ ★

Programmer'sRecipe

Visual Basic 2008 逆引きレシピ

★ ★ ★

中垣健志+藤田聡 著 Windowsアプリケーション

編[ ]

中垣健志/藤田聡 著定価2,520円(本体2,400円+税5%)ISBN978-4-7981-1780-5

SQL逆引きレシピ即効力のあるレシピを使えばデータ操作が自由自在!!

PHP逆引きレシピ即効力のあるレシピを使えばデータ操作が自由自在!!

西沢直木 著定価2,310円(本体2,200円+税5%)ISBN978-4-7981-1779-9

鈴木憲治/安藤建一/山田直明八木照朗/山本義之/河合勝彦 著定価2,730円(本体2,600円+税5%)ISBN978-4-7981-1986-1

プロが選んだ三ツ星レシピ!!即効力のあるレシピを使えばデータ操作が自由自在!!現場に即した“実践見出し”で引けるので、用途に適した項目をパパっと参照! 具体的なサンプルを使った解説で、複雑なSQL文もラクラク理解!

SQL ★★ ★ ★

★ ★ ★

★ ★ ★

Programmer'sRecipe

逆引きレシピ西沢直木 著

すぐに美味しい

サンプル&テクニック

160

・本当に使えるライブラリとその活用法

・Rubyらしい考え方と書き方

よくわかる!

Ruby 逆引きレシピ

‣ジュンク堂 Ruby 会議支店にて先行発売中!!

♥おまけ付き♥

‣19日のお昼にサイン会やります

7月25日発売!!

8

2009年7月18日土曜日

Page 12: Ruby の標準乱数生成器とその改善案

買ってください♥

9

2009年7月18日土曜日

Page 13: Ruby の標準乱数生成器とその改善案

提 供

Ruby札幌From Sapporo, with Love for Ruby

10

2009年7月18日土曜日

Page 14: Ruby の標準乱数生成器とその改善案

どうぞよろしくお願いします

11

2009年7月18日土曜日

Page 15: Ruby の標準乱数生成器とその改善案

Ruby の標準乱数生成器とその改良案The standard random number generator of Ruby and the proposal to improve it

村田 賢太Kenta Murata

122009年7月18日土曜日

Page 16: Ruby の標準乱数生成器とその改善案

今日のまとめ

‣Kernel#rand だけじゃ足りないよ!

‣Math/Random ライブラリを作っているよ

‣目指せ Random クラスの標準添付!

132009年7月18日土曜日

Page 17: Ruby の標準乱数生成器とその改善案

乱数のおさらい

142009年7月18日土曜日

Page 18: Ruby の標準乱数生成器とその改善案

ことばの使い方‣乱数列‣直前までに得られた部分列から次の数を予測できない数列

‣乱数‣乱数列から取り出した数

‣乱数生成器‣乱数列を出力する情報源

152009年7月18日土曜日

Page 19: Ruby の標準乱数生成器とその改善案

乱数列は3種類ある

‣真の乱数列

‣2つの疑似乱数列

‣Monte Carlo 法用疑似乱数列

‣暗号論的疑似乱数列

162009年7月18日土曜日

Page 20: Ruby の標準乱数生成器とその改善案

Monte Carlo 法用疑似乱数列

‣今日の主役‣周期は有限‣できるだけ長いほうが良い

‣一様性‣出力される乱数の分布が偏ってないこと

‣再現性‣できるだけ簡単に乱数列を再現できること

172009年7月18日土曜日

Page 21: Ruby の標準乱数生成器とその改善案

長い周期・一様性・再現性‣長い周期‣周期が長ければ、部分列のパターンが多用になり、無作為性が高まる

‣一様性‣偏りが小さいほど次の乱数が予測しにくい‣一様分布乱数から任意の分布の乱数を作れる

‣再現性‣再現できないとテストができない

182009年7月18日土曜日

Page 22: Ruby の標準乱数生成器とその改善案

例: さいころ‣ srand 13‣1000.times.map { 1 + rand 6 }‣=> [3, 1, 3, 1, 3, 5, 2, 5, 3, 4, 3, 5, 3, 6, 6, 3,

2, 4, 5, 3, 1, 4, 6, 4, 4, 6, 4, 2, 3, 1, 5, 4, 1, 5, 3, 3, 5, 6, 4, 6, 1, 4, 3, 1, 6, 2, 1, 2, 6, 6, 3, 4, 3, 4, 4, 4, 1, 3, 1, 3, 6, 6, 5, 4, 6, 1, 6, 2, 6, 2, 5, 4, 3, 2, 5, 4, 1, 6, 6, 6, 4, 2, 2, 2, 1, 3, 4, 5, 3, 6, 2, 5, 4, 2, 4, 2, 3, 2, 4, 5, 1, 5, 5, 4, 5, 4, 6, 6, 1, 4, 4, 4, 2, 1, 5, 6, 2, 2, 3, 1, 3, 3, 3, 2, 3, 5, 1, 3, 2, 5, 2, 1, 1, 2, 4, 5, 1, 4, 5, 1, ...]

192009年7月18日土曜日

Page 23: Ruby の標準乱数生成器とその改善案

例: マルチスレッドならどうなる?

✓srand 13✓a = Thread.start do

1000.times.map{ 1 + rand(6) }end

✓b = Thread.start do 1000.times.map{ 1 + rand(6) }end

‣=> [3, 1, 3, 1, 3, 5, 2, 5, 3, 4, 3, 5, 3, 6, 6, 3, 2, 4, 5, 3, 1, 4, 6, 4, 4, 6, 4, 2, 3, 1, 5, 4, 1, 5, 3, 3, 5, 6, 4, 6, 1, 4, 3, 1, 6, 2, 1, 2, 6, 6, 3, 4, 3, 4, 4, 4, 1, 3, 1, 3, 6, 6, 5, 4, 6, 1, 6, 2, 6, 2, 5, 4, 3, 2, 5, 4, 1, 6, 6, 6, 4, 2, 2, 2, 1, 3, 4, 5, 3, 6, 2, 5, 4, 2, 4, 2, ...]

202009年7月18日土曜日

Page 24: Ruby の標準乱数生成器とその改善案

例: マルチスレッドならどうなる?

✓srand 13✓a = Thread.start do

1000.times.map{ 1 + rand(6) }end

✓b = Thread.start do 1000.times.map{ 1 + rand(6) }end

‣=> [3, 1, 3, 1, 3, 5, 2, 5, 3, 4, 3, 5, 3, 6, 6, 3, 2, 4, 5, 3, 1, 4, 6, 4, 4, 6, 4, 2, 3, 1, 5, 4, 1, 5, 3, 3, 5, 6, 4, 6, 1, 4, 3, 1, 6, 2, 1, 2, 6, 6, 3, 4, 3, 4, 4, 4, 1, 3, 1, 3, 6, 6, 5, 4, 6, 1, 6, 2, 6, 2, 5, 4, 3, 2, 5, 4, 1, 6, 6, 6, 4, 2, 2, 2, 1, 3, 4, 5, 3, 6, 2, 5, 4, 2, 4, 2, ...]

212009年7月18日土曜日

Page 25: Ruby の標準乱数生成器とその改善案

例: こうならない理由はない!

✓srand 13✓a = Thread.start do

1000.times.map{ 1 + rand(6) }end

✓b = Thread.start do 1000.times.map{ 1 + rand(6) }end

‣=> [3, 1, 3, 1, 3, 5, 2, 5, 3, 4, 3, 5, 3, 6, 6, 3, 2, 4, 5, 3, 1, 4, 6, 4, 4, 6, 4, 2, 3, 1, 5, 4, 1, 5, 3, 3, 5, 6, 4, 6, 1, 4, 3, 1, 6, 2, 1, 2, 6, 6, 3, 4, 3, 4, 4, 4, 1, 3, 1, 3, 6, 6, 5, 4, 6, 1, 6, 2, 6, 2, 5, 4, 3, 2, 5, 4, 1, 6, 6, 6, 4, 2, 2, 2, 1, 3, 4, 5, 3, 6, 2, 5, 4, 2, 4, 2, ...]

222009年7月18日土曜日

Page 26: Ruby の標準乱数生成器とその改善案

乱数はムズイ

‣複数の並行処理でひとつの乱数生成器を共有すると一様性とか色々崩れる ><

‣使い方を間違えると悲惨な結果を招く事例が乱数には幾つもある

‣何度も srand しちゃう人いるよね orz

232009年7月18日土曜日

Page 27: Ruby の標準乱数生成器とその改善案

Ruby の標準乱数生成器

242009年7月18日土曜日

Page 28: Ruby の標準乱数生成器とその改善案

Ruby の標準乱数生成器

252009年7月18日土曜日

Page 29: Ruby の標準乱数生成器とその改善案

Ruby の標準乱数生成器

‣Kernel#rand

‣乱数を出力する

252009年7月18日土曜日

Page 30: Ruby の標準乱数生成器とその改善案

Ruby の標準乱数生成器

‣Kernel#rand

‣乱数を出力する

‣Kernel#srand

‣乱数生成器の状態を初期化する

252009年7月18日土曜日

Page 31: Ruby の標準乱数生成器とその改善案

Ruby の標準乱数生成器

‣Kernel#rand

‣乱数を出力する

‣Kernel#srand

‣乱数生成器の状態を初期化する

‣これだけ!!

252009年7月18日土曜日

Page 32: Ruby の標準乱数生成器とその改善案

不親切!26

2009年7月18日土曜日

Page 33: Ruby の標準乱数生成器とその改善案

Ruby の標準乱数生成器は不親切

‣何が足りないか?

‣複数の生成器への対応

‣状態のシリアライズとリストア

‣一様分布以外の分布関数

‣拡張ライブラリへの御心遣い

272009年7月18日土曜日

Page 34: Ruby の標準乱数生成器とその改善案

Ruby に相応しい乱数生成器とは?

282009年7月18日土曜日

Page 35: Ruby の標準乱数生成器とその改善案

乱数生成器のインタフェース

‣どうせ作るなら

‣野良配布ではなく標準添付がいい

‣【急募】 Ruby 的なインタフェース

292009年7月18日土曜日

Page 36: Ruby の標準乱数生成器とその改善案

Matz says...

‣標準添付する乱数生成アルゴリズムは一つ

‣乱数生成器のオブジェクト化には賛成

‣クラス名は Random

302009年7月18日土曜日

Page 37: Ruby の標準乱数生成器とその改善案

実は既に提案されていた

312009年7月18日土曜日

Page 38: Ruby の標準乱数生成器とその改善案

実は既に提案されていた

‣2007年に ruby-dev で議論された‣ [ruby-dev:31206] に当時の trunk 用 patch

‣Kernel#srand を削除‣Matz がこれに引っかかる

312009年7月18日土曜日

Page 39: Ruby の標準乱数生成器とその改善案

実は既に提案されていた

‣2007年に ruby-dev で議論された‣ [ruby-dev:31206] に当時の trunk 用 patch

‣Kernel#srand を削除‣Matz がこれに引っかかる

‣いつの間にかこの話題も消え・・・

312009年7月18日土曜日

Page 40: Ruby の標準乱数生成器とその改善案

いつの間にか話題が消え・・・

322009年7月18日土曜日

Page 41: Ruby の標準乱数生成器とその改善案

いつの間にか話題が消え・・・

‣ていなかた!

322009年7月18日土曜日

Page 42: Ruby の標準乱数生成器とその改善案

いつの間にか話題が消え・・・

‣ていなかた!

‣昨日の15時頃に Random クラスが trunk にコミットされた!ちょwww

322009年7月18日土曜日

Page 43: Ruby の標準乱数生成器とその改善案

いつの間にか話題が消え・・・

‣ていなかた!

‣昨日の15時頃に Random クラスが trunk にコミットされた!ちょwww

‣昨日の16時頃まで、この講演資料は Random

クラスが無いことを前提に作っていました

322009年7月18日土曜日

Page 44: Ruby の標準乱数生成器とその改善案

最新の Ruby は?

‣何が足りないか?

‣複数の生成器への対応

‣状態のシリアライズとリストア

‣一様分布以外の分布関数

‣拡張ライブラリへの御心遣い

332009年7月18日土曜日

Page 45: Ruby の標準乱数生成器とその改善案

足りない物たち

‣複数の生成器への対応‣Array#shuffle などが使う乱数が

Kernel#rand に固定されている‣分布関数を組み合せた乱数生成器を

Array#sample で使う方法‣分布関数‣正規分布と離散分布は欲しい

342009年7月18日土曜日

Page 46: Ruby の標準乱数生成器とその改善案

Math/Random

352009年7月18日土曜日

Page 47: Ruby の標準乱数生成器とその改善案

Math/Random

‣https://github.com/mrkn/ruby-math-random/tree/master‣間に合いませんでした ><

‣標準乱数生成器では足りない機能を補うことを目的とするライブラリ

‣ASAP で公開します

362009年7月18日土曜日

Page 48: Ruby の標準乱数生成器とその改善案

Math/Random の主な機能

‣実装済み‣2つの生成アルゴリズム‣Mersenne Twister (MT19937AR)‣SFMT (SFMT19937)

‣2つの分布関数‣正規分布‣離散分布

372009年7月18日土曜日

Page 49: Ruby の標準乱数生成器とその改善案

Math/Random の主な機能

‣まだ実装できてないもの‣たくさんの生成アルゴリズム‣ Lagged Fibonacci、Blum-Blum-Shub、線型合同法、などなど

‣たくさんの分布関数‣指数分布、Erlang 分布、などなど

‣拡張ライブラリ対応のインタフェース‣スレッドローカルで Kernel#rand の置き換えるやつ

382009年7月18日土曜日

Page 50: Ruby の標準乱数生成器とその改善案

お前はどうしたいんだ?

‣元々は Random クラスを組み込みで提供させたかった

‣もう叶っちゃった!

‣でも、なんか足りない

‣足りない部分を補強してやろう

392009年7月18日土曜日

Page 51: Ruby の標準乱数生成器とその改善案

今日のまとめ

‣ Kernel#rand だけじゃ足りないよ

‣昨日の15時に解決したwww

‣Math/Random ライブラリを作っているよ

‣目指せ Random クラスの標準添付!

‣昨日の15時に解決したwww

‣まだ EXPERIMENTAL なので、少しずつ洗練させよう

402009年7月18日土曜日