Ruby GIL test
July 29th, 2010 | Published in CS
ruby 1.9 で、スレッドはネイティブスレッドを使うようになったけど、 GIL があるためにけっきょく実行は serialize されてしまう、マルチコアを活かせないよというのは、まぁ聞いて知ってたんだけど、ほんとにそうなのか試した。
ruby 1.9.2dev on Core 2 Duo な Mac OS X 10.6.2 で動かして ActivityMonitor.app で眺めていたところ、たしかに CPU 使用率は 99% くらい。1つのコアでがんばってなさる。
ちなみに GIL がないという MacRuby 0.6 リリース版で試したところ、以下のような assertion にひっかかっていた。 GCD かな? ソース追ってみないと。
Assertion failed: ((b->flags & flags) == flags), function rb_vm_prepare_block, file dispatcher.cpp, line 1773.
さしあたり、 ticket きっておいた。
追記 2010-07-30 09:24 JST
最新版では治ってるよということで ticket が瞬殺されていた。じっさい latest nightly build で試すと、ちゃんと 2 コアを使って計算が行われいるのを確認できた。
M=10000 で、 time $RUBY_VM gil_test.rb として計測した結果:
- ruby 1.8.7 : 100%, 69.3s
- ruby 1.9.2dev : 100%, 22.6s
- MacRuby 0.7 : 191%, 6.85s
- JRuby 1.5.1 : 178%, 21.9s
MacRuby が圧倒的な速度である。まあほんとうは VM の起動時間とかを含めないように、 time じゃなくて benchmark.rb とか使うべきなのかもだけれど、ユーザの体感時間という意味で。
Mitaka.rb #4
August 26th, 2009 | Published in Uncategorized
なんかしゃべれと言われたので、 Mitaka.rb #4 に参加してきました。フレンチうまうま。
るりまふぉん、という内容で話してきました。読んで字のごとくですが、るりま を iPhone から見れるようにする何かをつくったよ、という話です。
るりまふぉんのソースは こちら : github:mootoh/rurimaphone。
一昨日に、 Mitaka.rb の用意してないやん、そういえばさいきん Ruby さわってないやん、と気づいてあわててネタをひねりだし、昨日一日でプロトタイプをつくったかんじのものです。
スライドの余談のところにも書いてありますが、 Ruby で書いたコードはほんの少しで、ほとんどは Objective-C のコード。
Future Work に書いたことは割と本気で考えていることで、どこでもプログラミングできる環境というのができてきてると思っているのです。 iPhone だと、任意のコードを実行できるアプリはダメなんだけれど、あちら側にあるソースを、あちら側で実行して、あちら側にある実行結果を見るだけならば、別に問題なかろうと。クラウドとはいえないけれどそういうもの。それは gist と tryruby 的なものを組み合わせればできるんじゃなかろうかと。
もうひとつは、 サンプルコードを共有できるマニュアル という話。こっちの方が元からあったアイデア。 プログラミングをじっさいにやっていく中でだいじなのは、サンプルコードとコミュニケーションかなと。 マニュアル読んでて、じゃあじっさいにどういう風に書けばいいのん、という段になって困る、というのがよくあります。 Ruby だと、拡張ライブラリの rdoc ドキュメントを読んでるときによくそういう状態になったりする。 そんなとき、みんなが持ち寄ったコードを見ながら書き進められるといいんじゃないでしょうか。そのために、みんなでそのクラス、メソッドに対するサンプルコードを共有できるといいのではなかろうかと。 Wiki 的なアプローチというか。 んで、なんか困ったことがあったらビルトインの Twitter / IRC で質問を投げたりできると。
ちなみに iPhone はキーボードがないのでコード入力するには適さないよ、という意見もあるでしょうが、そこは補完入力とか音声認識とかいろいろやり方はあるはず。そろそろ外部機器も使えるようになるはずだし。
そんなこんなで、 iPhone で Ruby な何かをやりたい方は % git clone github:mootoh/rurimaphone
してみたらいいんじゃないの、というお話でした。
フレンチおいしかったです。
RubyKaigi 2009 Reject Talk 1
July 29th, 2009 | Published in Uncategorized
I made a presentation at RejectKaigi 2009 in RubyKaigi 2009 day 2. The talk was about Rubigraph which I created a year ago.
Slide:
Video:
Sample Code:
Enjoy!
RubyKaigi 2009 Reject Talk 2
July 21st, 2009 | Published in 日常
RubyKaigi 2009 の2日目、 Beer bust 片付けを終えたあと。なんか無性にこの昂りをつたえたくて RejectKaigi キャンバスにふせんを貼っていた。
電波にあてられて、3日目の RejectKaigi 直前につくっていたスライドが以下のもの。 RubyKaigi スタッフになるのおすすめだよ! という勧誘でした。
終わってみると、ひたすら「ともだちほしいんです!」「ともだちできました!」と連呼する稚拙な発表になってしまい、72時間は自己嫌悪から抜けられませんでした… なんか自分の話ばっかりしてしまった。これはひどい。
たしかに、輪の中に入ろうよ! ということも伝えたかったことのひとつだったんだけれど、それよりももっと伝えたかったのは、こんな nice なチームがあるんだということを中に入って体験してほしい ということ。そして、あなたが RubyKaigi というこの場、Ruby という不思議な魅力をもつ何かのためにできることがここにもあるんだ 、ということです。
nice なチームといっしょに働くことは、自分が nice なチームをつくるための第一歩になるんじゃないかと思うのです。 nice であるというのはどういうことなのか、体験できる機会はなかなかない。 RubyKaigi スタッフとして活動するというのは、そういう貴重な機会に飛びこめるということなのです。
ん、RubyKaigi スタッフをやらせてもらって感じたことは、また別のエントリに書きます。
スタッフなのに2日連続で RejectKaigi でてしまってほんとすみません >< 来年はテクニカルなセッションでしゃべります >< 翻訳もがんばります ><
ditz on Ruby 1.9 つづき
March 10th, 2009 | Published in Uncategorized
issue の add ができないことに気づいたので、 quick fix しておきました。気づかなかったとはうかつ…
lambda
以下、仕様もドキュメントも参照せずに、観測した現象だけをもとに書いてます。
Ruby 1.9 からは、lambda { ... }
でつくった ラムダを call
するとき引数の個数をチェックするようになったようですね。対して、 Proc.new { ... }
したものを call
する場合は引数の個数を見ていない様子。Ruby 1.8.6 では、どちらもチェックされていませんね。 ditz add
してエラーになる原因は、この違いにあるようでした。
ということで、 s/lambda/Proc/
してしのいだという話でした。
Ditz on Ruby 1.9
March 1st, 2009 | Published in Uncategorized
Ditz という、ナイスな BTS があります。この Ditz を Ruby 1.9 で動くようにしてみました。本家に merge request 送付済み。
mootoh-clone on Gitorious
やったことはそんなになくて、以下の3つです。
これで Ruby 1.9 しか入っていないマシンでもぞんぶんにローカルバグ管理ができて、開発効率ウハウハですね。
Ruby会議2008を聴いていて
June 23rd, 2008 | Published in 日常
自分が話したことについてはこちらに書いたので、二日間聴いていて胸に留まったことを。
処理系のはなし
MVMは本格始動しているのですね。1.9.xに入るとかアグレッシブすぎる。興味津々なのでウォッチしとかないと。JRubyはアプリ展開のくだりに説得力があった。
なによりMacRubyがすごかった。Objective-C 2.0をベースにしてるからGCもそっちにおまかせ、Cocoaのフレームワークもつかえるよ、とかいう。 そんなのを1人で片手間でやってるとかすごすぎる。Laurent++。 MacRubyは、JRubyと同じくらいのレイヤに位置するんだと思いました。JRubyがランタイムとしてJVMをつかってるのに対し、MacRubyはAppleのObjective-C実装に基づいてる。 これから先は、LLVMをつかって高速化するとかも考えてるらしい。うは。
ぼくは、「iPhoneでうごくの? (currently, NO)」 とか、「昨夜書いたというHotCocoaは何行くらいのコード? (300行くらい)」 とかいう質問を投げていました。
RubyCocoaに対する立場はどうなるんだろ、と懇親会でhisaさんに聞いたり、kimurawさんが質問したりしていましたが、RubyCocoaがなくなることはないそう。よかった (これまでの資産的な意味で)。
るりま
そうだ、やらなきゃ! 去年も同じようなことを感じてた。 下々にならねば。
LT
情熱的なトークっていいですね。伝えたいことがある、だからしゃべる。シンプルだ。 おもしろネタはもちろん楽しいし華を添えられるけれど、心をゆさぶる話を生で聴けるというのはすばらしい体験です。来てよかったと思った瞬間。
Re^2jectTalks
同じ会場でマイクなしで2つのセッションがあるとか、それなんて魚市場カオスwww
総じて、どのトークもレベルが高かった。面白いとかためになるとかすげえとか、ジャンルはちがうけどどれも質の良さが感じられる。しかも同じ系統ばかりじゃないから飽きない。プログラムの組み方がナイスでした。
ライブコーディングをしてるひとが何人かいて、会場からデバッグ的な声が飛んだりして、とっても双方向ライブ感を楽しめました。せっかくイベントでみんな集まってるんだかし、みんな参加できるなにかが素敵ですね。そういう意味で、PostItをみんなで書いて壁に貼るというのは敷居が低くてナイスだと思いました。
Ruby会議2008でLTしてきた
June 22nd, 2008 | Published in Uncategorized
Ruby会議2008 1日目で、Folk Programming with Ruby という話をしてきました。あとで追記すると思いますが、とりあえず当日記憶がはっきりしているうちに書き留めておくメソッド。
5分前まで動いていたQuartzComposer Gainer Plugin が動かなくなってしまい、たいへん残念でgdgdなプレゼンになってしまいました >< すみません ><
2008.06.23 03:28 追記:
- あとで書く: なんかスライドにいい評価を頂けてるのでスライドのつくりかたを書く
- あとで書く: Ruby会議2008全体について書く
- あとで書く:
しゃべることについて書く → 書いた
言いたかったこと
Webアプリでなにかつくる、なんてみんなやってる。そんなコモディティ化されてることをやっててもおもしろくないんじゃない? もっと変てこりんなユーザインターフェイス (物理的なもの含め) を実験して遊びたくない? ブラウザの外にも、おもしろいことはたくさんあるよ。
続きはWebで!
ここからは続きはWebでメソッド。
今日、話した内容のターゲットは、これからプログラミングを始めるひと、仕事のプログラミングばっかりしてて、個人的なプロジェクトがないひと、です。 Ruby会議に来ているようなひとたちは、そもそもこの範疇にあたらないので、この話をRuby会議でやるというのはいかがなものか、という意見はさておき。
これからプログラミングを始めるひとに: たしかに、Webアプリのプログラミングは楽しいものです。コミュニケーションに基づいてる、迅速なフィードバック、etc etc。 でも、サーバサイドでデータベースをいじったり、ブラウザ内での表現を極めたりするのって仕事でもできそうじゃない? あなたの目の前にあるコンピュータって、もっとなにかすごいことできそうじゃない?
仕事のプログラミングばっかりしてるひとに: 組織の中で生きていると、すごい技術をもってるひとというのは、どこにでもいるものだと思うものです。でも、そのひとたちはプログラミングを仕事としてしかやってない。趣味でなにかつくり、それをたとえば 1000speakers で発表するとか、見ない。 なんかそういうのってもったいなくない? あなたはこんなにすごいのに、埋もれてない?
ぼくが言いたかったのは、そういうことです。 つくった例を4つ出しましたが、そんなのは瑣末なことで、ここで書いたことだけが伝わればいいなとおもってました。
明日も楽しむぞ!
IRCのログはつづきにて。 Read the rest of this entry »
Ruby会議 2008 LTに出ます
June 18th, 2008 | Published in Uncategorized
Ruby会議2008 の LTに申し込んだところ、ありがたいことに採択されたLT駆動開発者です。
最近つくってたいろいろをまとめて発表する形になる予定です。おてやわらかにどうぞ ><
refe2.vim
June 15th, 2008 | Published in Uncategorized
Rubyリファレンスマニュアル刷新計画ですすめられている新リファレンスシステムを、Vimから引けるようにしてみました。
ダウンロード
コード
つかいかた
Rubyのファイルを編集中に、単語の上で K を押すと該当するリファレンスマニュアルのページに飛びます。
必要なもの
- Rubyリファレンスマニュアル → るりまWiki から
-
--enable-rubyinterp
つきでコンパイルされたVim
準備
0: refe2.vimの一式をcheckout。
1: ダウンロードしたRubyリファレンスマニュアルにパッチをあてます。
% cd ruby-refm-1.9.0-dynamic
% patch -p0 < /tmp/refe2-vim/bitclust.patch
2: refe2.vim の中の s:bitclust_path に bitclustのパスを指定します。
3: refe2.vim を ~/.vim/ftplugin/ruby あたりにコピー。
ToDo
- 色付け
- 文脈に沿ったリファレンスの表示。 たとえば、
arr = [1,2,3]
arr.first
というコードがあったときに、 arr.first で検索してもちゃんと
Array#first にひっかかるようにしたい。 Vimスクリプトの中のRubyインタプリタで周辺をevalしたらできたりしないだろうか。
その他
今回はじめてVim (+Ruby) スクリプトを書いてみました。 てんで荒削りな実装なので、コードの添削、書き換え、forkなど、どしどしやってもらえると幸せです。