分1234567月16日(土)から18日(月)までの3日間にわたり,練馬文化センターにて日本Ruby会議2011(略称:RubyKaigi2011)が開催されています。本ページでは,2日目の模様を随時レポートしていきます。Lunch」が行われています。興味のある方は,お昼(前)に2Fジュンク堂書店RubyKaigi店横のボードの場所に向かってみましょう。参加者の人がつくっていくアンカンファレンス!RubyKaigi(NotRubyKaigi)2011開催のための会場が3Fに用意されます。興味のある方は,スタッフの方に尋ねてみましょう。西山和広さん「安全なプログラムの作り方」@znzこと西山さんの発表です。歴史を振り返りながら,セキュリティの意識や,そこからでてきた脆弱性を話しました。背景JavaScriptもなかったころ,CGIで作された掲示板がありました。HTMLのタグを解析して必要なAタグやBタグ等はそのまま通し,BODYやHTMLタグなどをエスケープしていました。これはHTMLの構造が崩れてるのを避けるための対応で,セキュリティのためではありませんでしたと振り返ります。ブラウザが高機能化した結果,JavaScriptが普及していき,onclick属性やjavascript:なスキーマをケアする必要がでてきたと言います。アプリケーション自体には何も変更しておらず,何も問題がなかったはずなのに,脆弱性のあるものになってしまったそうです。このことから,永遠に安全なアプリケーションを作るのは困難であることを述べました。一般的な話として,入力はきちんとチェックを行い,出力はエスケープを行うという基本を抑えるとともに,ブラウザを始めとする,外部環境の変化にも注意するべきだと言及しました。具体的な避けるべきコーディングとして,いくつか例を挙げました。狙われる可能性や,Windowsに移植したときに困ってしまうことを紹介しました。"tmp"のようのようなパスを使用するか,tmpdirやtempfileのような標準添付ライブラリを使用したほうが良いとアドバイスしました。組み合わせの動作についてを紹介しました。等を使うべきと説明しました。system関数の引数も増やす使い方をすることで各パラメータを正しく展開されるそうです。このような場合のチェックポイントとして,ファイル名に空白が入っている場合やnull文字が入っていても問題がないか,という点について気をつけると良いことを紹介しました。Huardさんによる,Actorモデルに関する発表です。発表の取っ掛かりとして,「⁠Actor」を「俳優」にひっかけて並列性について話がありました。曰く,映画の撮影ではアクターも複数人が別々の場所でロケを並行して撮る,音楽なんかも並行で作成し,映画監督が最後にMapReduceのように一つにまとめて出力する,と。かように人間の活動はそもそも並列的です。プログラムも,元々はシングルプロセスによる逐次処理が多かったのですが,近年になってマルチプロセスが増えてきたため,並行性を考えなければならなくなったと語ります。並行処理をプログラミングすることは難しく,VMとOSそれぞれでプロセス/スレッド管理があったり,状態の共有と変更が時に非決定的になったりすると述べました。Bother(だからなんだっていうの?⁠)⁠」という言葉を掲げます。「⁠アプリケーション開発者レベルで並行性を考えるか?」「⁠それとも,サーバなど下のレイヤーに任せるか?」という問いがあるのなら,プログラマとして並行性を考慮していきたいと言及しました。そんなEliseさんが注目するのが,Actorモデルです。Actorモデルには明示的なグローバル状態がなく,アクターと呼ばれる要素同士が非同期にメッセージのやりとりをして処理をこなしていきます。基本的に非同期なので,実行順序を決めたいときはそれに参加するアクター達だけで指定し合うことで解決。可変な状態はそのアクター内にのみ限定され,アクターが状態遷移器になっているとのことです。いった特徴たちが,並行性に向いたプログラミングモデルを提供してくれるというわけですね。EliseさんはRubyで実装されたActorモデルを紹介しました。スレッドベースではなくイベントベースである@basculaのRevactor。problem"という並列処理における典型的な問題を解くコードも披露しました。Rubyでは通常mutexを使うところを,Celluloidに用意されたモジュールをincludeすることでクラスをアクター化して解いていくと述べました。他の言語を経由した利用Actorモデルは,むしろRuby以外の言語で普及していると言います。商用言語としては初めてActorを本格的に採用したErlang。Erlangは関数型言語でもあり,コードには馴染みのない人が多いかもしれません。Valimが作ったElixirというものがあり,これはErlangVM上にRubyっぽい文法を構築したもの。ElixirならRubyistは馴染みのあるコードでErlangのActorを体験することができるとのことです。Scalaでは標準ライブラリにActorライブラリが含まれていますが,それではなくAkkaというフレームワークが人気だそうです。Akkaの人気の一端としてはソフトウェアトランザクショナルメモリが実装されていることや,実際にEliseさんの知人の方もAkkaを使って大規模システムを運用しているといった話を挙げていました。JRubyならばAkkaを使うことができる,という「裏道」を紹介しました。銀の弾丸はない以上のように並行性に対する強みを発揮するActorモデルですが,Eliseさんは「銀の弾丸はない」という注意も促しました。確かに,Actorモデルは「簡単に理解でき⁠」⁠,きちんとした研究と検証をくぐり抜けた「本物」のモデルであり,これを使えば「高度に分散化」されたソフトウェアをつくることができます。Actorモデルだけではシリアルな処理が必要な時には役立たずだし,依然デッドロックだって起こりうる。いえ,一度経験してみて損はない興味深いモデルの紹介だったのではないでしょうか。最後に「並列プログラムを書くときは並列プリミティブを理解した方が良い」として,並列に相性の良いプリミティブをRubyの標準ライブラリにぜひ入れて欲しい,と提案して発表を終えました。小川伸一郎さん「jpmobileのベストプラクティス」RubyKaigi2010でも発表した,jpmobileメイン開発者である小川さんによるjpmobileの解説です。小川さんは,Tokyu.rbというコミュニティに参加しており,TokyuRubyKaigi04というイベントを10/29(土)に開催することを告知しました。jpmobileには,メンテナンスのみ行なわれているRails2.3.X向けのバージョンと,現在のメインであるRails3.0.X向けのバージョン1.Xがあること。Rails3.1.X向けのバージョンとしてバージョン2.Xを出したいと述べました。今回は,jpmobile1.X系の機能を紹介しました。jpmobileの機能の一つとして,まずキャリアごとに違う文字コードを自動で振り分けてくれる機能があります。jpcmobileではデータベースに文字列を格納する際にUTF-8に変換します。格納された文字列は,表示される際にそれぞれのキャリアが期待する文字コードに変換されます。携帯特有の絵文字に関しては,数値参照でViewに絵文字を埋め込むことによって,各キャリア向けの絵文字に変換して表示されると述べました。携帯サイトでは,携帯電話がcookieに対応していないことがあります。そのような端末に対して,jpmobileでは自動でPOSTやGETのパラメーターに_session_idというパラメータを付与しSessionIDを付けてくれます。これは,Cookieが使えない端末かどうかを判定してくれ,使える端末ではCookieを使用してくれると述べました。次にViewSelectorという機能を紹介しました。ViewSelectorでは,Viewファイル名のsuffixによって表示するViewを切り替えてくれる機能です。docomoの機種からリクエストがあった場合,以下のようなファイル名の順でファイルが存在するかを確認し,表示してくれるそうです。index_mobile_docomo.html.erbindex_mobile.html.erbindex_mobile.html.erbまた,jpmobileでは携帯メールへの送信に対応していることを言及しました。Rails3のActionMailer::Baseを継承したJpmobile::Mail::Baseを使用することで,送信するメールアドレスにあわせた文字コードでメールを送信できるとのこと。jpmobileではViewのテストのために,requiest.mobile?やassert_templateというメッソドを用意してると指摘します。これらのメソッドを使うことでFunctionalTestがしやすくなるということです。テストの手法によってjpmobileの返す文字コードが変わってくるそうです。FunctionalTestUTF-8IntegrationTestそれぞれのキャリアの文字コードMailerTestUTF-8最後に,現在わかっているjpmobileの既知の問題点等が述べられました。UTF-8をShift_JISに変換した後に,再度Shift_JISからUTF-8に変換するとき,きちんと元に戻らない文字があるとのこと。jpmobileでは波ダッシュや全角チルダなど,問題がありそうだとわかっている文字については自動的に変換されるようになっているそうです。URIのパラメーターに日本語を使う場合や,メールを受信したときの文字コードなどは,まだjpmobileで自動的にできないため,それぞれ機種を判定して変換する必要があることを説明しました。レポート班KaigiFreaksとは,会場に来れなかった人にも,雰囲気や内容を楽しんでもらえるように動画収録や配信を行うことをミッションに,RubyKaigi2008で結成された特別編成チーム。RubyKaigi2009からはgihyo.jpを中心にテキストと写真で現場の様子を伝えるレポート班が加わり,現在のKaigiFreaksは配信班とレポート班の2班編成。三村益隆(みむらみつたか)(株)永和システムマネジメントサービスプロバイディング事業部所属。Rails勉強会@tokyo。このところRailsのお仕事をしています。blog:http://d.hatena.ne.jp/takkan_mtwitter:http://twitter.com/takkanmすがわらまさのりハンドルネームはsugamasao。若手IT勉強会に参加しています。仕事では自社プロダクトのデーモンの開発あたりでRubyを使ったりしています。伊坂幸太郎さんと荒木飛呂彦さんが好きです。blog:http://d.hatena.ne.jp/seiunsky/twitter:https://twitter.com/sugamasao小松崎典之(こまつざきのりゆき)ハンドルネームはO-Show。RubyKaigi2010に参加したことで触発されRubyistを自称するようになる。ブログでRubyやGit関連記事の翻訳をあげています。RubyとGitの情報の流通増えろ!と願ってやまない。この春からAsakusa.rbにjoin。RailsでのWebアプリケーションの開発を中心にフリーランスのRubyプログラマとして活動中。最近はHaskellに興味を持ち出し、勉強しはじめている。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。