るびま21号リリース
http://jp.rubyist.net/magazine/?0021
三周年記念です。関係者の皆様お疲れ様でした。
--
るびまにはいろいろお世話になったのにコメントを送り忘れてしまって大失敗。ごめんなさい。
http://jp.rubyist.net/magazine/?0021
三周年記念です。関係者の皆様お疲れ様でした。
--
るびまにはいろいろお世話になったのにコメントを送り忘れてしまって大失敗。ごめんなさい。
書くのよりも描く方が得意。 小さいころは割りと絵を描いていたのだけど、小学校の高学年以降はゲームデザインばかりに感心がゆき、ほとんど描かなくなってしまった。
小さいときにも人物は全然描いたことがなくって、人物画が苦手なんだけど、ゲーム作っているとキャラクターのラフ画とか描けるといいなとか思ったり、なんかもうちょっと絵が描けたらいいなあと。 楽器が出来たらいいなーとかと同じで結構絵が描けたらいいなと思う人も多いのでは。
とは思うものの、それなりに描けるようになるにはそれなりの修練が必要なのだろう。その過程が楽しければ続くんだろうな。とりあえず描くことの動機付けになればと思って先日描いたのをアップ。日記も手書きで絵とか図とか入れて書けると面白いんだけどな。
今回の絵はいかにもオレらしい絵で、子供と落書きするときなんかによく昔から出てくるタッチ。全身を描きたかったんだけど、うまく入らなかった。
職場の同僚と秋葉原のアニメイトへ。 すごく熱気があってちょっとびびった。 同僚がすぐ上のほうに行ってしまったため、主に1階をうろうろしてたんだけど、人通りが多くてゆっくりみてらんない。
あ、そうそう、まず、見た限りでは画材とかどこにも置いてなくって、アニメっぽい雑誌とかフィギュアとかばっかりが置かれていた。 そんな中に実写の顔写真が表紙のエッセイとか雑誌みたいのがあって、なんだろうと思って手にとってみると、声優さんみたい。雑誌の表紙に載っている声優さんたちの写真は声優さんぽい顔だったんだけど、エッセイの人はかわいかった。
そういえば最近の雑誌の表紙の綾波レイは学生時代お世話になった方が描いているらしい。おぉ。当時はアニメとか詳しくなかったので(今も詳しくないか)彼がアニメ界で活躍されている方だというのを全然知らなかった……。
ちまたでは「Ruby 1.9は1.8より平均5倍速い」というニュースが話題になっているようです。
ちょっと前に野球ゲームのテストプログラム(GUIとかはなくってひたすら計算するだけ)を書いたのですが、 こいつで数千試合とか数万試合をシミュレートすると それなり実行時間がかかります。 そうだYARVに行こう、じゃなくて久しぶりにYARVを使ってみようと思いました。
開発版のRuby1.9にはもう既にYARVが組み込まれています。 というわけで最新の開発版RubyをインストールすればYARVが使えるわけです。
先に結論だけ先に書いてしまうと、ruby1.8.5に比べて、ちょうど2倍の速度で計算が終わるようになりました。 やっぱり5倍じゃなかったのですが、手元のスクリプトが実際に2倍の速さで動いたのにはちょっと驚きました。
具体的には、3.776秒→1.881秒です。
ruby a.rb 1.25s user 2.51s system 99% cpu 3.776 total ~/local/ruby19/bin/ruby -v a.rb 0.05s user 1.79s system 97% cpu 1.881 total
環境はcoLinux上のDebianです。 RubyのRevは13466です。
もちろん今回の結果はほんの一例であって、 たぶん検証に使うスクリプトによって結果が変わってくるのではないでしょうか。
殴り書きのコードなのであまり出したくないのですが、次のような感じのものを 9 * 15000 回くらいまわしました。
while outs < 3 batter = batters[number] r = batter.update if r == :H or r == :HR or r == :BB bases.unshift batter n = r == :HR ? 3 : 0 n.times { bases.unshift nil } rbi = bases[3, 4].compact.size batter.result[:rbi] += rbi score += rbi bases = bases[0, 3] else # 略
1.9は仕様の変わったところがあって、1.8のコードは動かないことがありますが、 小さなソースならエラーや警告のメッセージを見ればだいたい動くように修正できると思います(一度この作業をやっておくと、将来1.9ベースに移行するときの心の準備ができるかもしれません)。 ちなみに今回検証に使ったプログラムはまったく手を入れずに動きました。
Rubyをソースからコンパイルしたことのない方も多いと思います。 私も数回程度しか試したことがありませんが、思ったより簡単なので、その手順を紹介します。 環境はDebianです。また既存のRubyに影響を与えないよう、ユーザーのローカル環境にインストールします。準備以降はすべてユーザー権限で実行します。
あらかじめこのあたりは入れてありました。
apt-get install gcc make libc6-dev zlib1g-dev
それからconfigureの生成にautoconfとbisonが必要なようです。
apt-get install autoconf bison
準備は以上です(もしかしたら足りなかったり、余計なものがあったりするかも)。
ここから先はすべてユーザー権限で実行します。 svnコマンドを使って最新のソースをダウンロードします。
svn co http://svn.ruby-lang.org/repos/ruby/trunk ruby
svnが使えない場合は、公式ページより最新のtar.gzを落としてくればOKだと思います。
次にダウンロードしたrubyディレクトリに移動してautoconfを実行します。
cd ruby autoconf
autoconfを実行するとconfigureが作成されます。
次にconfigureを実行します。このときrubyがインストールされる場所を指定します。
./configure --prefix=/home/dan/local/ruby19
上の例では/home/dan/local/ruby19にインストールされるよう指定しています。 configureを実行するとMakefileが作成されます。
あとはmakeしてインストールすれば終わりです。
make make install
直接パスを指定して実行します。
/home/dan/local/ruby19/bin/ruby -v => ruby 1.9.0 (2007-09-15 patchlevel 0) [i686-linux]
スクリプトも実行できます。
/home/dan/local/ruby19/bin/ruby a.rb
少し前から職場に来ている契約社員の人がゲームのシナリオや設定書きに興味があるというので、個人でゲーム開発をしていることを話してみた。 すると興味を持ってくれて、ゲーム内容を説明していたんだけど、RPGであるにも関わらずWebインターフェースという部分で絶句された。 確かにこれはイメージしにくいし第一印象でマイナスになるなあと以前から心配していたところ。宣伝時にはここをうまくプラスのイメージに変えないと(マーケティング担当poqute君よろしく)。
そんなことを先週の金曜日に話していたんだけど、今日さっそく舞台設定とキャラクター案を3パタンも書いてきてくれた。どれも面白い内容だったので、向こうがこの長くて遅い開発ペースに合わせてやってくれるなら、是非一緒にゲームを作っていきたい。
あとデザイナーも探さないと。どうやって探したもんだか。
打率3割の打者がいたとします。 この打者は打席に立つと3割の確率でヒットを打つものとして、10年間の成績(安打数)を次のようにシミュレートします。 1シーズンの打席数は400とします。
def hit?(average) rand < average end average = 0.300 bats = 400 10.times do hits = 0 bats.times { hits += 1 if hit?(average) } puts "#{hits}/#{bats} .#{1000 * hits / bats}" end
このプログラムを走らせるとこんな結果が出ます。 randメソッドを使っているので結果は毎回異なります。
114/400 .285 121/400 .302 121/400 .302 112/400 .280 118/400 .295 134/400 .335 106/400 .265 115/400 .287 120/400 .300 138/400 .345
成績を詳しく見てみると、プロ5年まではおよそ3割付近の打率を安定して残しています。 プロ6年目には打率.335という好成績を記録しました。 しかし翌年は打率.265という不振に陥ります。 そしてプロ10年目にして過去最高の138安打(打率.345)というすばらしい成績を達成しました。
10年間同じまったく能力でも、これではきっと○年は好調△年はスランプなんていわれてしまいますね。
さて、話を現実に戻して実在のプロ野球選手が同じ能力でシーズンを向かえた場合、 偶然によってこんなにも成績が違ってしまうものなんでしょうか? あくまで実力にはいろんな要素が複雑に絡み合うということは別として、どうなんでしょう。 それともこのシミュレートには何か致命的な誤りがあるのかな。
DBからデータが取り出せたので、上位100人を発表しておきます。 2006年11月17日時点での成績です。
順位 | 名前 | grade | points | 勝 | 分 | 負 | 勝率 | 幽 | profile |
---|---|---|---|---|---|---|---|---|---|
1 | aku | 2 | 178 | 39 | 6 | 7 | .847 | 0 | |
2 | dango | 2 | 120 | 33 | 11 | 14 | .702 | 0 | デバッグ中に100回くらいゼラニウムちゃんが引けなかった〜 |
3 | yuki | 2 | 116 | 30 | 6 | 5 | .857 | 25 | |
4 | a-z0-9_- | 2 | 92 | 25 | 2 | 8 | .757 | 0 | デバッグ中に100回くらいあざらしちゃんが引けなかった〜 |
5 | namu | 2 | 92 | 28 | 8 | 15 | .651 | 0 | ラベンダー、嫌いなキャラじゃないけど…三日連続は哀しい(i_i) |
6 | znz | 2 | 66 | 24 | 14 | 17 | .585 | 0 | Stageが変わるのはいつだろう? |
7 | moriq | 2 | 51 | 24 | 14 | 16 | .600 | 0 | |
8 | ddtana | 2 | 49 | 18 | 15 | 7 | .720 | 2 | |
9 | subaru | 2 | 46 | 20 | 6 | 4 | .833 | 10 | |
10 | mslcloud | 2 | 36 | 18 | 2 | 1 | .947 | 0 | |
11 | samuraisoul | 2 | 36 | 16 | 13 | 8 | .666 | 0 | |
12 | yuukyuurenya | 2 | 33 | 22 | 7 | 13 | .628 | 0 | |
13 | itachi | 2 | 13 | 16 | 10 | 9 | .640 | 11 | |
14 | kreuz | 2 | 12 | 13 | 8 | 6 | .684 | 10 | |
15 | xyo | 2 | 8 | 25 | 8 | 21 | .543 | 0 | |
16 | totoko | 2 | 5 | 16 | 12 | 12 | .571 | 0 | |
17 | jowcol | 2 | 4 | 16 | 6 | 3 | .842 | 0 | |
18 | monwana | 2 | 4 | 16 | 6 | 7 | .695 | 19 | |
19 | inoue | 2 | 4 | 15 | 14 | 11 | .576 | 0 | |
20 | iwadon | 2 | 4 | 17 | 13 | 13 | .566 | 0 | |
21 | zval | 2 | 2 | 17 | 11 | 15 | .531 | 0 | |
22 | rucila | 2 | 2 | 17 | 16 | 22 | .435 | 1 | |
23 | yhara | 2 | -2 | 15 | 8 | 20 | .428 | 0 | |
24 | sim | 1 | 47 | 14 | 5 | 3 | .823 | 0 | |
25 | seki | 1 | 47 | 18 | 13 | 13 | .580 | 0 | |
26 | aqui | 1 | 44 | 8 | 10 | 1 | .888 | 0 | |
27 | yokonatsu | 1 | 43 | 18 | 4 | 13 | .580 | 0 | |
28 | maiha | 1 | 42 | 20 | 12 | 17 | .540 | 12 | |
29 | goburins | 1 | 37 | 16 | 9 | 12 | .571 | 4 | |
30 | tkskkc | 1 | 35 | 13 | 6 | 10 | .565 | 0 | |
31 | wkoichi | 1 | 33 | 9 | 6 | 4 | .692 | 34 | |
32 | holysugar | 1 | 33 | 10 | 8 | 7 | .588 | 0 | |
33 | nabi | 1 | 31 | 9 | 4 | 2 | .818 | 0 | |
34 | pi_ | 1 | 28 | 13 | 4 | 7 | .650 | 0 | |
35 | poqute | 1 | 15 | 2 | 14 | 5 | .285 | 0 | |
36 | sio | 1 | 11 | 7 | 0 | 2 | .777 | 18 | |
37 | sshi | 1 | 10 | 12 | 4 | 8 | .600 | 47 | |
38 | yowa | 1 | 10 | 7 | 4 | 11 | .388 | 34 | |
39 | azu2 | 1 | 9 | 8 | 5 | 7 | .533 | 30 | |
40 | pinkfive | 1 | 8 | 6 | 5 | 15 | .285 | 0 | |
41 | taruru | 1 | 5 | 6 | 2 | 4 | .600 | 43 | |
42 | oxy | 1 | 3 | 5 | 3 | 2 | .714 | 27 | |
43 | mr-80b | 1 | 3 | 10 | 3 | 17 | .370 | 19 | |
44 | sasamo | 1 | 3 | 7 | 12 | 14 | .333 | 15 | |
45 | ryumu | 1 | 2 | 9 | 5 | 20 | .310 | 3 | |
46 | ericw | 1 | 0 | 4 | 8 | 1 | .800 | 0 | |
47 | mutumin | 1 | -4 | 6 | 3 | 17 | .260 | 0 | |
48 | makku | 0 | 39 | 5 | 4 | 5 | .500 | 41 | |
49 | llat | 0 | 39 | 3 | 5 | 4 | .428 | 47 | |
50 | mumu | 0 | 38 | 5 | 8 | 7 | .416 | 32 | |
51 | ryuusen | 0 | 38 | 11 | 5 | 23 | .323 | 7 | |
52 | shachi | 0 | 38 | 5 | 8 | 30 | .142 | 19 | |
53 | yumioka | 0 | 37 | 4 | 5 | 12 | .250 | 36 | |
54 | makafusi | 0 | 36 | 6 | 3 | 15 | .285 | 49 | |
55 | mina | 0 | 35 | 5 | 0 | 0 | 1.000 | 0 | |
56 | marm | 0 | 35 | 5 | 0 | 0 | 1.000 | 13 | |
57 | norio | 0 | 35 | 3 | 6 | 12 | .200 | 28 | |
58 | padra | 0 | 34 | 7 | 3 | 19 | .269 | 22 | |
59 | inverse3 | 0 | 32 | 4 | 0 | 0 | 1.000 | 52 | |
60 | uochoco | 0 | 32 | 4 | 0 | 5 | .444 | 0 | |
61 | hardwired | 0 | 31 | 3 | 2 | 8 | .272 | 35 | |
62 | ryu | 0 | 28 | 2 | 2 | 0 | 1.000 | 40 | |
63 | ruby | 0 | 28 | 1 | 5 | 2 | .333 | 11 | |
64 | kdmsnr | 0 | 28 | 1 | 5 | 9 | .100 | 45 | |
65 | gamemaster | 0 | 25 | 4 | 3 | 5 | .444 | 67 | なんかいろんなところで h 付け忘れてるよ〜(*´∀`人)(人´∀`*) |
66 | kan | 0 | 22 | 0 | 12 | 9 | .000 | 34 | |
67 | cusith | 0 | 21 | 3 | 2 | 4 | .428 | 49 | |
68 | zeldalia | 0 | 19 | 3 | 0 | 0 | 1.000 | 18 | |
69 | skarda | 0 | 19 | 3 | 0 | 0 | 1.000 | 7 | |
70 | takaya | 0 | 19 | 3 | 0 | 0 | 1.000 | 54 | |
71 | kiri | 0 | 19 | 3 | 0 | 0 | 1.000 | 39 | |
72 | hakonootoko | 0 | 19 | 3 | 0 | 5 | .375 | 34 | |
73 | miduno | 0 | 19 | 2 | 3 | 7 | .222 | 47 | |
74 | kaizu | 0 | 17 | 2 | 1 | 0 | 1.000 | 42 | |
75 | tukiori | 0 | 17 | 2 | 1 | 0 | 1.000 | 0 | |
76 | solis | 0 | 17 | 2 | 1 | 2 | .500 | 49 | |
77 | gruminia | 0 | 17 | 2 | 1 | 2 | .500 | 57 | |
78 | xeno | 0 | 16 | 2 | 0 | 1 | .666 | 38 | |
79 | azu | 0 | 16 | 2 | 0 | 7 | .222 | 51 | |
80 | cmt165 | 0 | 15 | 1 | 2 | 1 | .500 | 44 | |
81 | eastogre | 0 | 14 | 1 | 1 | 2 | .333 | 56 | |
82 | testtest | 0 | 14 | 1 | 1 | 2 | .333 | 44 | |
83 | sabazo | 0 | 14 | 1 | 1 | 5 | .166 | 62 | |
84 | satoshi | 0 | 13 | 1 | 0 | 18 | .052 | 9 | |
85 | m_seki | 0 | 13 | 0 | 3 | 2 | .000 | 57 | |
86 | xaucia909 | 0 | 6 | 1 | 3 | 5 | .166 | 44 | |
87 | kii | 0 | 4 | 1 | 1 | 0 | 1.000 | 2 | |
88 | muki | 0 | 3 | 1 | 0 | 2 | .333 | 18 | |
89 | swd | 0 | 3 | 1 | 0 | 3 | .250 | 8 | |
90 | yamaz | 0 | 3 | 1 | 0 | 7 | .125 | 52 | |
91 | sakuraba | 0 | 3 | 0 | 3 | 0 | .000 | 54 | |
92 | huyukimakoto | 0 | 3 | 0 | 3 | 2 | .000 | 13 | |
93 | ligaty | 0 | 3 | 0 | 3 | 7 | .000 | 39 | |
94 | ntk | 0 | 2 | 0 | 2 | 7 | .000 | 20 | |
95 | menbo | 0 | 2 | 0 | 2 | 1 | .000 | 30 | |
96 | gainasu | 0 | 2 | 0 | 2 | 1 | .000 | 59 | |
97 | ppfs | 0 | 1 | 0 | 1 | 2 | .000 | 42 | |
98 | kakutani | 0 | 1 | 0 | 1 | 2 | .000 | 70 | |
99 | baron | 0 | 1 | 0 | 1 | 12 | .000 | 40 | |
100 | trot_thunder | 0 | 1 | 0 | 1 | 0 | .000 | 0 |