Ruby/Rails勉強会@関西-21に参加しました

六甲駅から神戸大学まで歩いて行きました。神戸大学は山腹にあるので結構汗かきました。以下、個人的なメモです。聞き間違い、書き間違いあるかも。

Ruby 1.9 を語る」 by まつもとゆきひろ さん

  • Rubyのロゴ。
  • 2007年クリスマスリリース。もうすぐじゃん。大丈夫か? でかいパッチががんがん。お祭り?
  • 1.8 安定。1.9 革新。 2.0 人参。
  • 1.8。日常利用する。安定。互換。
  • 1.9。高速。強力。正しい(希望)。
  • 2.0。馬の人参。ドライビングフォース。コミュニティは鮫。止まると死ぬ。新しい餌が必要。コードスケーラビリティ←これが重要。名前空間が1個しかないとか。
  • 1.9は非互換。大きなもの。小さなもの。
  • 重大な非互換性。ブロックパラメータ。文字列。M17N。
  • ブロックパラメータ。ローカル変数だけ。ブロックスコープ。文法エラーになるから見付けやすい。より無名関数に近くなる。ary.each {|$var|}とかはダメ。
  • ブロックスコープ。 x = 15; loop {|x| x = 10; break } p x # => 15になった。外側のxと内側のxは別物。ワーニングが出る。最初ブロックパラメータはfor文の代わりだった。でもだんだん無名関数の色合いが強くなってしまった。
  • EnumerableじゃないString。String as Sequence of Lines? Chars? Bytes? これからは明示的に指定。Emuneratorを使う。"foo\nbar".lines.each {...}とか。同じくchars、bytesもある。
  • M17N。文字ベース。エンコーディング対応。7年越し? "ABCあいう"[0] # => "A" "ABCあいう"[3, 1] # => "あ" 今までは文字(コード)を返していたけど、文字列を返すようになる。泣きわかれることはなくなった。 # -*- coding: UTF-8 -*-が使える。PerlPythonと違って、中で自動的にエンコーディングの変換はしない。エンコーディングを混ぜるのは危険。open(path、"r:EUC-JP")、ファイルも指定する。しないとロケールからもってくる。これも暗黙的にエンコーディングの変換はしない。
  • 小さか非互換性はいっぱい。
  • なくなったメソッド。File.exists? Ruby本体は三単現のsは使わない。これは復活の可能性あり。
  • 新機能。大量に追加。
  • λは->でできる。callの代わりに.()による呼び出し。引数中の複数のsplats。末尾に必須引数。んー、この辺はうれしいなぁ。
  • λと->は形が似てる! 傾けると似てる。矢印じゃないよ!
  • Enumerator。組込み。Enumerator連鎖。外部イテレータ。ary.map.with_index{|x, i|} ...} each_with_indexはこれまでもあったけど… これもうれしいなぁ。外部イテレータ。内部イテレータは複数の配列を同時に回すのが大変。今までもzipを使えたけど、効率的じゃない。で、外部イテレータ。1.9のzipの内部で使っている? loopメソッドがイテレーション終了の例外を受けとって、何事もなかったように終わってくれる。
  • 駆け込み変更。再定義可能な「!」。正規表現name captureからローカル変数への代入(?)。SQLを出力するライブラリが構文木をごりごりやってた。それで再定義可能な「!」欲しかったみたい。1.9は正規表現エンジンが鬼車になっている。1.8はどうやら中身を理解してないらしい。心揺れているとのこと。
  • YARV。もう本家に入ったのでyet anotherじゃないけど、しばらくはこの名前のまま。バイトコード。1.8とほとんど同じ構文木を作って、それをバイトコードに変換する。構文木のトラバースは意外と重いらしい。それ意外にもいろんな最適化。Rubyは最適化の拠り所になるのが非常に少ない。
  • コア性能最大50倍、ベンチマーク2〜10倍。圧倒的じゃないかわが軍の速度は。実際、大規模のプログラムのボトルネックは、コア以外だったりする。YARVは例外を上げるのがちょっと遅くなってる。evalがあると遅くなる。
  • モリーダイエット。Struct、3要素以下。String、12バイト以下。Object、6インスタンス変数以下。Hash、要素なし。Bignum、<±2^96。Range。Object、Hashなし。
  • 質疑応答。
  • nilの定義は? なにもない。もともとドイツ語らしい。Lisp由来。
  • Hashの順番はどうなったか? 登録したとおり。
  • パラメータ付き引数は? 導入されなかった。Hashを与えるタイプのがちょっとやりやすくなった。
  • 標準添付ライブラリの削除は? 減らす予定はある。いくつか削ったけど、まだいっぱい残っている。
  • 範囲外のArrayのアクセス。例外を返すようにすると意外とrescue書かないといけなくて結構大変。
  • 拡張ライブラリの作り方は変わるのか? 変わらないはず。メモリダイエットでインライン化したので、配列の直接アクセスはダメ。
  • binding_of_callerは? よく分かるが政治的。YARV限定だったらそんなに難しい。
  • 内部的な文字コードUNICODEにしない理由。昔はUNICODEのレパートリーが小さかった。昔は失われる情報が多かった。変換すうるコストがかかる。誤変換がいや。文学の研究とか、UNICODEを上回る文字コードを使っている人もいる。
  • コンパイル済みのバイトコードを出力できないか? Cではある。1.9.1には付かない。
  • 構文木をいじれないか? 構文木を変更できなくなるからいや。persetree(?)っていう拡張ライブラリかある。でも1.8版が1.9で使える保証はない。
  • fiberとcallccはどうなったか? 基本的な枠組みはコアに入っている。外部イテレータはfiberを使っている。ユーザが明示的にrequireしないといけない。

「Ruby3Dプログラミング」 by kyara さん

  • 組込み屋さん(C、C++)。P905i。お客様からのご要望をせつに望みます。
  • Java APIの呼び出し。3Dプログラム例。BIO。
  • JRubyでinclude Java; include_class 'java_path'; include_package 'java_path'ぐらい覚えとけば大丈夫。
  • JavaのクラスはFQCNで指定する。importで別名として定義。
  • JRubyで3Dプログラム。
  • Java標準の3D APIがそのまま使える。NetBeansJava3Dをインストールすれば使用可能。でも。3DはWindowsDirectX中心。JRubyよりもJava使った方が(IDEのサポートがあるので)楽。エラーが補足し辛い。などなど。
  • カビ。もやしもん

BioRubyと生命情報解析」 by ngoto さん

  • バイオインフォマティクス。生物額 + 情報科学
  • BioPerl、BioJava、Biopython。言語により得意分野が異なるので共存。
  • Open Bioinformatics Foundation(OBF)。みんななかよし。
  • 序論。データベース: 968件以上。解析ソフトウェア:133〜1063種類以上。
  • データ形式はそれぞれ別々。あんまり統一されていない。そのパーザを提供する。それ以外にも定型処理はたくさんある。そんなこんなで環境を整備している。
  • BioRubyの最新版は本日リリース。開発者は累計10人以上。アクティブな開発者は5人くらい。
  • 未踏の成果。学術の世界は英語。ユニットテストの追加。
  • ハッカソン。半袖もいればジャンパーもいる。
  • 12/18に 第8回オープンバイオ研究会
  • ゲノムと遺伝子。生物はゲノムを持っている。情報としてはA、T、G、Cの4種類の組み合わせ。文字列をして扱える。ゲノムの一部が遺伝子。
  • アミノ酸とタンパク質。変換テーブル(コドン表)。ほとんどすべての生物がほぼ同じものを使っている。
  • 塩基配列データベース。新しいのをどんどん登録している。
  • インストールはいろいろ。gem install bioが楽。
  • 速度が遅い。高性能なグラフ構造ライブラリが標準添付されるとうれしい。
  • Railsのシェルがあるぽい。

Ruby 初級者レッスン」 by cuzic さん

Rubyist Magazine出張版 Ruby on Windows

Rubyist Magazine出張版 Ruby on Windows