RubyKaigi2011 スペシャルレポート

日本Ruby会議2011 3日目レポート[更新終了]

この記事を読むのに必要な時間:およそ 19.5 分

ucnvさん「Visual Glitch, using Ruby」

ucnvさんは,画像や動画の見た目をあえて壊すアート手法であるGlitch(グリッチ)をRubyで行うテクニックについて発表しました。

ucnvさんはウェブプログラマーとして働く傍ら趣味でグリッチをやっていたらビジュアルアーティスト的な扱いをされるようになり,『映像作家100人 2011』という本にも紹介されるようになったそうです。過去に作ったグリッチの映像作品を紹介され,一見動画ファイルが破損したような映像が会場のスクリーンに現れました。

グリッチとは

こういった状態を指すグリッチとは一体何なのか,ucnvさんは海外のブログや論文での考察を紹介しました。曰く,⁠予期せぬエラーである」⁠真のグリッチは再現不可能である」⁠それがグリッチだと認識したら,その気づきによってグリッチ性は失われる」など。それでは,グリッチは再現不可能なのかと言えば,驚きの感情は再現不可能だが,コンピュータ上で行われる現象なら再現可能なはずとucnvさんは考えているそうです。

もっとも再現性についてそう難しく考えることはなく,グリッチとはつまり「ファイルが壊れている状態でプレイヤーで再生したとき,プレイヤーがエラーを無視しながら再生している状態」のことである,と説明しました。

画像をグリッチ

具体的な手法に入る前に,同じ画像をJPEG/PNG/GIF/TIFF/TGA/PSD/WebPといった画像フォーマット毎にグリッチしたものを並べ,フォーマットによってグリッチ結果の具合が異なることを見せました。ucnvさんは「PNGは変わった結果が出るので好き」と発言し,またPNGとWebPで似た壊れ方がするのでもしかしたらアルゴリズム的に似た所があるかもしれない,といった考察を述べました。

画像をグリッチする方法としては,特別なことはなくテキストエディタやバイナリエディタで画像を開いて適当に書き換えて保存するやり方を出発点として,catとsedを使ったワンライナーならとっさにグリッチが必要になったとき便利,もちろんRuby等のプログラムを使ってもよいと説明しました。ただし,こういった方法はucnvさんが言うには「モンキーグリッチ」であるとして,画像のヘッダを破壊してしまったり,チェックサムがついている画像フォーマットだとプレイヤーで開けなくなるという問題があるようでした。

そこで,正しく壊したいなら仕様にしたがってグリッチしよう,というよく考えると不思議なスローガンを掲げ,画像フォーマット毎の違いを意識した手法を紹介しました。例えばPNGならばzlib圧縮されているため解凍してから書き換えて再度圧縮してチェックサムを付け直すとうまくいくそうです。JPEGならヘッダ部分に1バイトだけ書き換えると全体が綺麗に壊れるポイントがあったり,画像本体も8x8ピクセルが基本単位になっているのでその単位でシャッフルすると良い,などを挙げました。

また,仕様を守って画像をグリッチできるライブラリとして「コードネーム:PhotoShop」を作成中であり,"PhotoShop"なら画像フォーマットを指定して簡単にグリッチが可能になると説明しました。

動画をグリッチ

動画のグリッチに入る前に,動画ファイルというのは画像のフレームの集まりでできていること,そのフレームには完全な情報を持つキーフレーム(I-frame)と前後への差分情報だけを持っている差分フレーム(P-frame,B-frame)があることを説明しました。こういった構造のファイルでは,動画の最初の方を破壊しても,次にキーフレームを通った時に全てのピクセル情報が復活してしまい,破損耐性が高くて「困る⁠⁠。そこでキーフレームを全て抜くことで動画全体をうまく破壊するデータモッシングという手法があるとのことでした。

また,グリッチ用動画のフォーマットにはシンプルで扱いやすいという理由でAVIを使っているそうです。さらにXvidというコーデックがあり,これのおかげでMPEG4のようなキーフレーム・差分フレームの仕組みがオープンソースで使えるようになったということです。

実際にRubyで動画をグリッチするには,ucnvさんが自作したAviGlitchというライブラリを利用することができます。さらにAviGlitchにはdatamoshというコマンドが付属しているので,これを使えば簡単に動画をデータモッシュできるという利点があるそうです。

その後,応用編に入る前に惜しくも時間切れとなってしまいましたが,⁠おもしろい壊れ方をする」⁠正しく壊す」といった印象深い言い回しなど,新しい価値観に触れられる楽しい発表だったのではないでしょうか。

画像

画像

島田浩二さん,こしばとしあきさん,角谷信太郎さん「All About RubyKaigi Ecosystem」

RubyKaigi2011の実行委員である,島田さん,こしばさん,角谷さんによる,RubyKaigiに対するパネルディスカッションが行なわれました。

Rubykaigi とは何だったのか

日本Rubyの会のサイトには,RubyKaigiのページがあり,過去の開催規模などが掲載されています。このページを眺めながら,過去のRubyKaigiについて振り返り,RubyKaigiとは何だったのか,何を目指して開催していたのかということについて話しました。

RubyKaigi2007は頑張りすぎてしまい,お客さんが来すぎたと感じていたそうです。RubyKaigiは毎回最終回という気持ちで取り組んでいましたが,RubyKaigi2007の規模(410名の参加者)を越えるのは無理だと判断し,会場確保が比較的容易なつくばへ会場を移すことを決めたそうです。来場者が500名を越えると都内では一年以上前に確保をしないと次年度の開催は厳しいという背景もあったようです。しかし,Rubyistにそんな前持った行動ができるはずもなく,2008年度は空いていたつくばでの開催が決まったことを述べていました。

Regional RubyKaigi

こしばさんから,Regional Rubykaigiの作り方ややり方についての説明がありました。こしばさんとRubyKaigiのつながりは,

  • 登壇,LT
  • 主催
  • 運営

以上の3つの側面から活動を繰り返しにあったそうです。しかし,狙ってこのサイクルを回していたのではなく毎回最終回と思いながら運営したり,一期一会だと思いながら活動したら,いつの間にかこのようなサイクルを回しながらの活動となっていたと述べました。

こしばさんが,Regional RubyKaigiを作った流れやRubyKaigiとのつながりについて,時系列に沿って遡りながら振り返りました。 2008年は初めてRegional RubyKaigiに参加したと言います。 2009年は,初めてRubyKaigiに参加し,初参加にて初実行委員を務めたとのこと。とても大きな規模でありながら日々の設計力を発揮したり,niceを心がけることにより,いいものをつくりあげることができたと感じているそうです。 2010年は,参加者がより喋る,参加者により喋ってほしいということを目指して活動したとのこと。しかし,規模が大きくなりすぎてしまった側面があり,手のひらサイズのできる範囲でコンパクトに開催することを目指す必要性が出てきたそうです。 2011年,東京Ruby会議05にて実行委員長を務め,実行委員を声掛けから始めて結成したとのこと。テーマを「対話と挑戦」と題した開催趣旨をまとめ,Regional RubyKaigiのMLに投稿することで,Regional RubyKaigiとして認知されるようになったそうです。

RubyKaigiを通して,自分の生活と,日常にちょっとした彩りを添えることを実践されてきたと言います。こしばさんは最後に,自分の望みと自分なりのアプローチについて語り,⁠まずはやってみること」⁠望みを口に出してみること」⁠参加してみること」⁠短時間発表(LTのような)に参加してみること」⁠仲間と集まること」をみなさんも実践してみてはどうかと述べました。

Regional Rubyist community どんなコミュニティがあるのか

島田さんから地域ごとにどんなRubyコミュニティがあるか,どんな特徴を有しているかについての話がありました。

東京以外では,既にRubyに興味を持っている仲間を集めてRegional RubyKaigiを結成することはできないと感じられるそうです。また,既にRubyをやっている人たちがいつの間にか集まって,気がついたらこれってRubyKaigiと呼べるんじゃないかと気づくことが始まりなのではないでしょうか,と言います。一ヶ所だけではなくて,他のRegional RubyKaigiに行ってみるといいという意見も出ました。その他に海外参加者からは,Regional RubyKaigiに行ってみたいから,情報提供をして欲しいという声もあったようです。るびまの発表にもあった通り,英語での情報発信についても考えていく必要があるかもしれないと言及しました。

画像

画像

画像

Andrew Grimmさん「Finding Black Holes in Ruby with the Small Eigen Collider⁠

バイオインフォマティクスの科学者であるAndrewさんによる発表です。Andrewさんは自分自身の研究にRubyを使っていたそうですが,扱うデータが大きいために解析にとても時間がかかってしまうとし,Ruby1.9.1で20分ほどかかると述べました。

RubyにはJRubyやRubinius,Ruby Enterprise EditionなどCRuby以外にも実装があることを挙げ,パフォーマンス向上のためにCRuby以外の別の実装を使うことも検討したそうです。

ですが,それらの各実装が正しく動作を知るためにはどうしたらいいのかと疑問を投げかけます。エラーが明確に発生する場合はすぐに気づけるので問題ないとし,些細な違いの方が気づきにくいため問題だと述べました。

RubyにはRubySpecプロジェクトがありますが,それが失敗しなかったからと言ってバグがないとは言えないと話すAndrewさんは,バグは未踏の領域で起きるとし,それを見つけるためのライブラリを作ったとのことでした。

Small Eigen Colliderはあるタスクを複数のRuby実装で実行し,その結果を比較するライブラリだそうです。タスクの実行にはメタプログラミングを使用して,テストするオブジェクトやメソッド,それに渡すパラメータをランダムに実行するとのことです。そのコードの各実装での結果の差異をチェックし,実装ごとに違いがないかのチェックをできるとのこと。

Andrewさんはこのライブラリを使い,Thread.killにnilをわたすとCRubyとRubiniusでSEGVが起きることを見つけ,このバグについては報告済みと述べました。

今後の課題として実行結果のログの出力にinspectを使っているが,この出力が実装ごとで違うことや,真偽値を返すメソッドでfalseを返す実装とnilを返す実装があることを挙げ,これがバグかどうかは微妙な問題だと話しました。また将来の方向性として,スピードの向上と,クラウドの移行を検討していると述べました。

最後に質疑応答では,質問をしてくれた方にAndrewさんからTシャツがプレゼントされました。

画像

画像

井上真さん「3/11 そしてRubyistとしてできること」

ロンドン在住のRubyistである,井上さんの発表です。

震災直後に何があったのか

震災でたくさんの方々が亡くなり,ライフラインは深刻なダメージを受け, また東京でも,携帯電話が通じなくなったりしました、と切り出しました。 そして, そんな状況でも,被災地以外ではインターネットはほぼ機能しており,ソーシャルネットワーク等を起点として,大きな情報爆発が起こったと分析しました。 例えばTwitter上でのハッシュタグを使ったやり取りや「拡散ツイート」等がとても多く行われました。しかし,その反面,デマやパロディ等の情報も多く発信され,悪意は無くとも間違っている情報というものも散見したと、当時の状況を振り返りました。

また, 震災直後に,GoogleはPerson Finderを立ち上げ, とてもシンプルですが,大きな役割を果たしたと話し,さらに同じ時期にsinsai.infoというサービスも立ち上がったと語りました。

sinsai.info とは

各地から,どのような問題があるかをレポートしてもらい,それに対してボランティアを募ったりするサイトだそうです。 Webからの入力フォームやTwitterからのインプットをベースとして,ボランティアによる誤情報の訂正やモデレーションを行っていると説明しました。 また,sinsai.infoは震災後4時間で立ち上げられたサイトなのですが,それはOSSのUshahidiのおかげだといいます。 このUshahidiは過去にハイチやリビアでの震災でも活用された実績がありました。 sinsai.infoはPHPで作成されているのですが,Rubyのコアチームのメンバーである@takano32さんや@sora_hさんも活動していることや, 日頃のOSS活動を通じて1から仕組みを創り上げていく能力に長けているRubyist達にぴったりなのではないかと語りました。

震災から4ヶ月たって

現在,フェーズは救助から復興へ移行しましたと語りました。 そして, 被災地の瓦礫の除去は,推定2183万トンのうち,仮置き場に移されたのはまだ35%程度にとどまっているそうです。 また,阪神大震災の時は仮設住宅からすべての人が退居するまでに,5年の年月が掛かったことから,復興は長い戦いになるだろうと述べました。

我々に何かできることはあるだろうか?

直近では 7月23,24日にhack4japanが開催されます。もし興味があればぜひ参加してみてくださいと呼びかけました。 また,sinsai.infoではボランティアのやり方等も掲載してあるそうです。hack4japanに限らず,復興は何年もの時間をかけて行っていくことなので,いまから動いていくことが長期的な支援に繋がるはずだと述べました。

最後に,東北には美しい場所がたくさんあること,機会があれば宮城の松島などを訪れてみるのも良いと話し,国内だけではなく,海外へ向けて,日本で今何が起こっているかを伝えることも重要なことだと語りました。

画像

画像

著者プロフィール

KaigiFreaks レポート班

KaigiFreaksとは,会場に来れなかった人にも,雰囲気や内容を楽しんでもらえるように動画収録や配信を行うことをミッションに,RubyKaigi2008で結成された特別編成チーム。

RubyKaigi2009からはgihyo.jpを中心にテキストと写真で現場の様子を伝えるレポート班が加わり,現在のKaigiFreaksは配信班とレポート班の2班編成。


三村益隆(みむらみつたか)

(株)永和システムマネジメントサービスプロバイディング事業部所属。Asakusa.rb & Rails勉強会@tokyo。このところRailsのお仕事をしています。言語好き。

blog:http://d.hatena.ne.jp/takkan_m
twitter:http://twitter.com/takkanm


すがわらまさのり

ハンドルネームはsugamasao。

Mitaka.rb や 若手IT勉強会に参加しています。仕事では自社プロダクトのデーモンの開発あたりでRubyを使ったりしています。伊坂幸太郎さんと荒木飛呂彦さんが好きです。

blog:http://d.hatena.ne.jp/seiunsky/
twitter:https://twitter.com/sugamasao


小松崎典之(こまつざきのりゆき)

ハンドルネームはO-Show。

RubyKaigi2010に参加したことで触発されRubyistを自称するようになる。ブログでRubyやGit関連記事の翻訳をあげています。もっとRubyとGitの情報の流通増えろ!と願ってやまない。

blog:http://keijinsonyaban.blogspot.com/
twitter:http://twitter.com/oshow


菅井祐太朗(すがいゆうたろう)

仕事でも Ruby を使えたらいいなぁと考えている新社会人LOCAL 所属。この春からAsakusa.rbにjoin。

twitter:http://twitter.com/hokkai7go


赤松祐希(あかまつゆうき)

2010年よりRuby on RailsでのWebアプリケーションの開発を中心にフリーランスのRubyプログラマとして活動中。最近はHaskellに興味を持ち出し、勉強しはじめている。

blog:http://ukstudio.jp/
twitter:http://twitter.com/ukstudio