関西Ruby会議02にいってきました

11月 9th, 2009 admin

img_0666
11月7日に行われた関西Ruby会議02に、名古屋Ruby会議実行委員として参加してきました。当日NAGOYA Ruby KAIGIというTシャツを着ていたのが私です。

以下ざっと感想など

Hacking parse.y (ujihisa)

img_0657
parse.yをハックしようというお話。++演算子を実装したり、:)という顔文字を=>と等価にしたりと、本当のRubyのハックというのを実演してもらえた。僕はRHGを多少読んでいたおかげで、ギリギリ知識として知ってはいたものの、実際にparse.yを書き換えて、makeしてRubyが変更されているのを目の当たりにするのは感動的でした。
発表者のujihisaさんもとても面白そうな方で、特にRubyのコンパイルが成功するたびにとても嬉しそうな顔をされるのが印象的でした。(ランチも一緒にさせてもらいました。有難う御座います)

・1.8も1.9もparse.yはほとんど同じ
・eval.cとparse.yは汚いのではなく、秘伝のたれと呼ぶ
・MRIのparse.yが1万行以上なのに対して、JRuby, Rubiniusは2,000行以下
・Rubyのドキュメントが手元に無ければparse.yを見ればいいじゃない

LT

img_0659
LTは9本ほど行われました。会場が広くないこともあったのですが立ち見でぎゅうぎゅうになるほどの好評でした。

Rubyで始めるGTD (sixeight)

GTDとTDDは似ているという話。そのためのeverythingというツールを開発中とのこと

visualing and proccessing(kyara)

proccessingを使うと簡単にデータのビジュアライズができますよという話

Lang8におけるRuby活用事例(松本一輝)

多言語学習サイトLang8(Rails製)にて、KVSにキャッシュをしたり、InnoDBの圧縮を使うことで高速化やCPUの負荷の低下などに成功されたというお話。Rubyの柔軟さがなければできなかったとのこと。

Web3.0.rb (ストヤン ジェコフ)

Webのデータを使うときに、従来のRSSを定期的に取得するなどのpull方式ではもう間に合わない(twitterなどのせい)ので、webhookを使ってpush式でやろうという話。
発表者が着ていた_whyのTシャツがうらやましかった!あと「pushがほしーやなー」という独特の日本語が素敵

※知らないサービスの名前がいっぱい出てきたので後で調べたい(watercooler, XMPP, googlewave)

日本Rubyの会第6期の活動について(角谷信太郎)

日本Rubyの会の紹介と、まさかの日本Ruby会議2010の開催決定案内+ライブWeb更新
途中で高橋さんの突込みがはいるなど、とても盛り上がりました。

それMiyakoで(ry(サイロス誠)

オリジナルで開発されたゲームライブラリMiyakoの紹介
ゲームの開発などをしたことがないので詳しくはわかりませんが、画像のデータをスプライト化した後の操作がとてもRuby的に書けるのがすごいと思いました。

Rubyで楽しく開発(jugyo)

Rubyで楽して開発するためのRuby製オリジナルツールの紹介。
ifchanged・・・指定したファイルが更新されたら、○○を実行するというのをやってくれるツール
g・・・pでプリントされるように、gを使うとポップアップみたいなのがでてくるようにしてくれるツール(macの機能?)

ifchangedはとても便利そう、デモではファイルが更新されたらテストが走るようにしていました。僕の場合はブラウザを更新とかに設定したら病みつきになりそう。

Ruby Station (yhara)

RubyのWebアプリをデスクトップアプリケーションのように扱うためのツールの紹介。見た目は派手ではないですが、なんかすごい可能性を秘めているんじゃないかという気がしました。

Ruby初級者向けレッスン(okkez)

img_0661
Rubyの初級者を集めて、ハンズオン形式でテスト駆動開発というのを行いました。僕は参加者ではなくTAとして、参加者をフォローする役目でお手伝いさせて頂きました。以下メモ
・最初に全員のレベル確認大事
・Emacs,Vim,Rubyの入ったDebianのライブCDが用意されているのでPCさえあれば始められる!(なぜかirbが入ってなかったが)
・初級者=向上心のある人
・TAがなんの略かまだわからない
Ruby関西ではこういうのを30回以上やられているということで、Ruby東海でもこういうのをやれたらいいなと思います。

GC黄金時代(nari)

img_0665
GC好きとして有名なnariさんの発表。タイトルに対する結論としては、GCの基礎アルゴリズムというのは60~80年代に完成されているので、黄金時代はとっくに終っていたということなのですが、結局のところGCというのはモダンな言語には必須なものであり、言語の数だけGCが必要なので全然やりがいのある楽しい分野だとのことでした。

まとめ

本当は懇親会もいきたかったのですが、次の日にフルマラソンの予定があり、割とタイムを狙っているレースだったので、そのことを考えると17:00ごろからプレッシャーで胃が痛くなってきたため、nariさんの発表の直後に帰らせて頂きました。(ざんねん・・・)
アポなしでの訪問にも関わらず、Ruby関西の人たちには暖かく迎えて頂き、初級者レッスンでもスタッフとして参加させてもらえるなど、とても楽しい時間をすごせました。また、Ruby関西さんを見て、Ruby東海もこんな風に結束がある会になったらいいなーとか、次回の名古屋Ruby会議はこういうこともしたいなーなどいろいろな刺激を受けることもできました。
今回学んだことを東海地方のRubyの活動に活かしたいと思います。

それでは、関西オープンソース2009の皆さん、Ruby関西のみなさん、そして参加者のみなさんお疲れ様でした。

関西Ruby会議02に行きます

11月 6th, 2009 admin

関西Ruby会議02(kansairubykaigi02)のGeek day(11月7日)に参加します。

単純にRuby会議に行きたいという理由と、名古屋Ruby会議実行委員として他の地域Ruby会議さんがどうなっているのか勉強させてもらいたいという理由での参加です。

翌日が岐阜でマラソンに参加なので、懇親会ではあまりお酒が飲めないのが残念ですが、
名古屋Ruby会議のTシャツを着ている人間を見つけたら僕(toyoshi)か名古屋名物のsawada氏だと思いますので、宜しくお願い致します。

第11回 RHG読書会@CSNagoya

11月 2nd, 2009 admin

1721b

今回は第12章構文木の構築をやりました。

メモ

・Rubyプログラムは構文木に変換される
・構文木のノードはNODE型で表される
・ノードはRubyオブジェクトなのでガーベージコレクタが生成・解放を行う
・ノードにはファイル名、行番号が保持されている
・葉・・・リテラル、変数参照など
・枝・・・ifなど
・elsifとelse ifは構文木になると違いはない
・優先順位の違いも構造がその情報を含んでいるのでandと&&なども同じになる
・「32-(10+8)」とあるが「32-(11+8)」(正誤表より)
・意味解析・・・変数を定義前に使っていないかなどのエラーはここで補足
・value_expr()で末尾再帰の除去のテクニックが使われている、こっちのほうが速いそうだ
・ローカル変数が定義されるのは「現れたとき」
・ローカル変数、ブロックローカル変数はst_tableで管理されていない(スコープ管理のため?)
・しかもブロックローカル変数はローカル変数と実装が違う(なぜ?)
・図12.12はlequeさんのブログで補足して下さった(bbとeの間にもヘッダが必要じゃねの?という件。結果=>必要)

まとめ

・ローカル変数が「現れたとき」に定義されるというのが気持ち悪いなと思った。「初期化されたら」のほうがわかりやすい気がするが
・構文木っていうのが具体的にイメージできた。本などではツリーの絵が描いてあるが、それより横向きのフローチャートのような図で書いたらすんなり頭に入った。枝とか葉とかは名前としてはいいが、解説に使われるとわかりにくい気がする。
・次回は第3部 第13章 評価器から
・次から『Rubyソースコード完全解説』正誤表はきちんと見よう
・RGHが終ったらなにをやりたいか
-なんか成果物が残るものがいいんじゃないか
-Prolog => 脈絡が無さ過ぎるらしい
-Coq入門と証明駆動開発 => フランス語の文献を読む必要があるらしい
-データベースを作る => もうすぐ俺俺DB開発のブームが来る
-ふつうのコンパイラ読書会 => CSNagoyaの正しい流れ

NetbeansのRuby/Rails開発用ショートカットまとめ

10月 23rd, 2009 admin

NetbeansのRuby/Railsで使えるショートカットの翻訳です。
<%= >の補完が嬉しいなとか、Ctrl+Shift-Aでアクションとビューを行き来できるとか、:key => “value”とかももう書かなくていいんだとか・・・今まで知らなかった自分をぶん殴りたい。

ショートカット

Action Shortcut Mac Shortcut
コード補完 Ctrl-Space Ctrl-Space
選択しているメソッドのドキュメントを表示 Ctrl-Shift-Space Command-Shift-Space
短いドキュメントのクイック表示 Ctrl- mousepointer Command - mousepointer
メソッドを呼ぶときにどんな引数が必要か表示 Ctrl-P Command-P
左に!とかがでてるときに何が間違ってるのか表示 Alt-Enter Alt-Enter
actionとviewを行ったり来たり Ctrl-Shift-A Command-Shift-A
テストと行ったり来たり Ctrl-Shift-T Command-Shift-T
ブロックを選択(連続使うとで選択ブロックが外に行く) Alt-Shift-. (dot) Ctrl-Shift-.
↑の逆選択範囲が小さくなる Alt-Shift-, (comma) Ctrl-Shift-,
カーソルの下のシンボルのリネーム Ctrl-R Ctrl-R for 6.5, Command-R for earlier releases
カーソルのあるシンボルの定義場所へ移動 Ctrl-B Command-B
選択範囲をコメントにしたり外したり Ctrl-/ (slash) Command-/
ファイル全体を整形する Alt-Shift-F Ctrl-Shift-F
現在のコメント分を整形する(行の長さとか) Ctrl-Shift-P Command-Shift-P
インデントとその逆(アウトデント) Tab/Shift-Tab Tab/Shift-Tab
GO TO LINE Ctrl-G Ctrl-G
ブレークポイントの設定と解除 Ctrl-F8 Command-F8
Hippie-expand / 略語展開 Ctrl-K Command-K
Open Type / クラスを開く Ctrl-O Command-O
名前を指定してファイルを開く Alt-Shift-O Ctrl-Shift-O
現在開いているドキュメントを移動 (in LIFO order) Ctrl-Tab Ctrl-Tab
現在のファイルを実行(Railsの場合) Shift-F6 Shift-F6
現在のファイルのテストを実行 Ctrl-F6 Command-F6
現在のメソッドのテストを実行 Alt-Shift-F6 Option-Shift-F6
現在のテストをデバッグ Alt-Shift-F5 Option-Shift-F5
対応する括弧などに移動({},do..end,def…endなど) Ctrl-[ Command-[
現在のウインドウを最大化したり戻したり Shift-Escape Shift-Escape
Open Rails Code Generator Ctrl-Insert Command-I
プロジェクトビューで現在のファイルを選択 Ctrl-Shift-1 Command-Shift-1
ファイルビューで現在のファイルを選択 Ctrl-Shift-2 Command-Shift-2

省略形

省略形を入力してからTabで使えます

省略形 説明
: ハッシュ :key => "value"
l 挿入 =>
do ブロックの挿入(いい感じのブロック変数つき)
r RHTMLファイルで<% %>を挿入
re RHTMLファイルで<%= %>を挿入
jc For JRuby, require java and import a class by fully qualified name
ife If-elseのブロック
begin Begin-rescue-endのブロック

元ページ(英語)

http://wiki.netbeans.org/RubyShortcuts

RubyとArduino(Gainer)ではじめるフィジカルコンピューティング(名古屋Ruby会議01)

10月 13th, 2009 admin

名古屋Ruby会議で「RubyとArduinoで始めるフィジカルコンピューティング」というテーマでLTを行いました。ここでは発表のデモのうち、「はてなスターがついたらパトライト点灯」のリベンジと、解説を行いたいと思います。なお、Arduinoが故障した都合で、このデモはGainerで行いました。

2009/10/13 限定ライブデモ中
僕のブクマにスターをつけるとパトランプつきますよ。(連続、同一箇所だとWebHookが飛びません。連続で遊びたいときは別の場所にスターをつけて下さい。)
本日18:00ごろまで開催延長中
http://www.ustream.tv/channel/toyosystem
10/14 デモ終了しました

概要

screenshot26
上記の図がすべてです
(1)誰かが僕のはてなブックマークにスターをつける
(2)はてなWebHookというはてなの機能で、指定URLにPOSTリクエストが送られる
(3)webrick+sinatraのスクリプトがデータを受け取り、dRubyサーバにキューを送る
(4)Gainerを操るRubyはdRubyで待機(take)しているので、データを受け取りパト点灯
という流れになっています。以下順を追って説明します。

(1)(2)はてスタが付、WebHook起動

はてなブックマークの設定のデータ管理というところで行えます。

(3)webrick+sinatraのスクリプトがデータを受け取り、rinda(dRuby)にキューを送る

初めてsinatraを使ったのですが、簡潔さに驚いた。なんと必要なコードは以下だけ

RUBY:
  1. require 'rubygems'
  2. require 'sinatra'
  3. require 'drb/drb'
  4.  
  5. post '/' do
  6.   DRb.start_service
  7.   $ts = DRbObject.new_with_uri('druby://:12345')
  8.   $ts.write(['data',params[:username].to_s.untaint])
  9. end

dRubyサーバ

こっちも簡単すぎて泣けるっていうか、irb上で動いていました

RUBY:
  1. irb>require 'drb/drb'
  2. irb>require 'rinda/tuplespace'
  3. irb>$ts = Rinda::TupleSpace.new
  4. irb>DRb.start_service('druby://:12345', $ts)
  5. rb>DRb.thread.join

(4)データを受け取りパト点灯

RUBY:
  1. require 'drb/drb'
  2. require 'funnel'
  3. include Funnel
  4.  
  5. DRb.start_service
  6. $ts = DRbObject.new_with_uri('druby://:12345')
  7. gio = Gainer.new()
  8. loop {
  9.     p $ts.take(["data", nil])
  10.  
  11.     gio.aout(0).value = 1
  12.     sleep(5)
  13.     gio.aout(0).value = 0
  14. }

まとめ

・dRuby+sinatra+Gainerは強力
・入門にはRuby+Arduinoは敷居が高いので、素直にArduino IDEを使うかGainerをオススメしたい
(導入でつまづくのってもったいないですからね)
・デモでスター付けてくれた人有難う!

発表資料