オープンソースカンファレンス2008 Tokyo/Spring 2日目報告

以下では、敬称は省略させていただきます。

最近のRuby: 2008春 日本Rubyの会 高橋征義

最近のRuby 1.9
  • 会場に質問「Ruby 1.9を使ったことのある人は?」
    • 3人くらい挙手した。
  • 当初は1.9.1だったはず
    • バージョン番号のつけ方が1.9から変更になった。
      • バージョン番号が1.X.Yのとき、
        • いままで
          • Xが奇数なら開発版
          • Xが偶数なら安定版
        • これから
          • Y == 0なら開発版
          • 0 < Yなら安定版
  • 完成度
    • 仕様の完成度
      • 追加はまだありそう。
    • 実装の完成度
      • 変更し続けている。
YARV
  • Ruby専用VM
  • わりと速い?
  • Java VM上で動くJRubyも結構速いらしい。
  • 専用VMの良し悪しは別
M17N
  • 実装方法
    • 文字列オブジェクトがエンコーディング情報を持つ。
  • 文字列の長さ
    • いままで
      • バイト数
    • これから
      • 文字数
      • インデックスも変わる。
"あいうえお"[2] #=> "う"
  • ?a
    • いままで
      • 97(ASCIIコードの値)
    • これから
      • "a"
  • 以下の記述でソースコードのエンコーディングを指定できる。
# -*- coding: EUC-JP -*-
  • 指定された文字コードとして正しいか調べるメソッドがある。
ブロックローカル変数
1.9.1のリリース
  • 2008年6月説
    • RubyKaigiにあわせて
  • 2008年12月説
    • いままでの慣習から
  • 年内に枯れそうになさそう。
Ruby 1.9を広めるためにはどうしたらよいか?
  • 会場に質問「Ruby 1.9を試したくなるにはどうすればよいか?」
    • 会場からの意見
      • Railsサポート
        • 1.9対応は徐々に出てきている。
      • Windowsサポート
        • MSI形式で配布している人がいる。
        • リリースする都度出ている。
      • XOOPSが広まったのはすぐ動くから。性能は関係ない。
      • 何のために使ってもらうのか?
      • メジャーなライブラリが動くという情報があるといい。
      • ワンライナーで使う人とスクリプトを書く人は違う?
      • Ruby 1.9が試せる仮想環境があるといい。
      • vimのfileencoding設定を読んで欲しい。
RubyKaigi 2008
最近のRails

セキュアコーディングノススメ JPCERTコーディネーションセンター 久保正樹 戸田洋三

聴講者に配られた資料
  • クイズ その1: このコードの問題点は?
/* return y = Ax */
int *matvec(int **A, int *x, int n) {
  int *y = malloc(n * sizeof(int));
  int i, j;
  for (i = 0; i < n; i++)
    for (j = 0; j < n; j++) 
      y[i] += A[i][j] * x[j];

  return y;
}
  • クイズ その2: このコードの問題点は?
/* リンクリストを解放する例 */
for (p = head; p != NULL; p = p->next)
  free(p);
脆弱性について
  • 脆弱性の定義
    • セキュリティポリシーに違反する行為をさせることを許す一連の条件のこと。
    • バグなのか脆弱性なのか、判断が別れる例もある。
  • CERT/CC
    • 8,000件/年の報告
  • Common Vulnerabilities and Exposures (CVE)
  • 会場に質問「普段C言語を使っている人は?」
    • 3分の1くらいが挙手した。
ミニセキュアコーディングセミナー(Cだけ)
  • 動的メモリ管理
    • Doug Lea's malloc (dlmalloc)
      • Linuxで使われている。
    • RtlHeap
      • Windowsで使われている。
    • phkmalloc
      • BSDで使われている。
  • malloc
    • 確保した領域は初期化されない。
  • free
    • 二重に解放したときの規定はない。
  • calloc
    • メモリはゼロで初期化される。
    • mallocよりおすすめする。
  • realloc
  • alloca
    • スタック上に確保する。
    • 使うべきではない。
    • freeしてはならない。
    • スタックオーバーフローの危険性がある。
  • メモリマネージャ
    • 以下の書籍に記載がある。

The Art of Computer Programming Volume1 Fundamental Algorithms Third Edition 日本語版 (ASCII Addison Wesley Programming Series)

The Art of Computer Programming Volume1 Fundamental Algorithms Third Edition 日本語版 (ASCII Addison Wesley Programming Series)

  • 動的メモリ管理に発生する間違い
    • 初期化に関するエラー
      • mallocは確保したメモリを初期化しない。
      • 実際の事例
        • Sun tarball Vulnerability
          • tarballに/etc/passwdの内容が含まれていた。

C/C++セキュアコーディング (SEI SERIES・A CERT BOOK)

C/C++セキュアコーディング (SEI SERIES・A CERT BOOK)

    • 戻り値検査の誤り
      • 確保できなかったとき、NULLポインタが返されるのか、例外が発生するのか?
      • phkmallocは、環境変数などによって、割り当て失敗時の挙動を変更できる。
    • 解放済みメモリの参照
      • 参照してもメモリフォルトになるとは限らず、再現性が低い。
    • 多重解放
    • malloc(0)するとどうなるのか?
      • 実装に依存する。
        • 0バイト割り当てられる。
        • NULLポインタを返す。
      • 0バイト長の割り当てはしないこと。
    • realloc(0)
      • NULLを返したとき、元の領域はまだ解放されていないことに注意すること。
  • 回避方法
    • freeしたら、変数の値をNULLにすること。
    • コードに一貫性を持たせること。
  • セキュアなプログラムにしないとユーザをリスクにさらす。
クイズの答え
  • その1
    • mallocの結果をチェックしていない。
    • n * sizeof(int)がオーバーフローする可能性がある。callocを使うこと。
    • yの指すメモリ領域を初期化していない。
  • その2
    • 解放したメモリを参照している。
質疑応答
  • セキュリティに強い言語はどれか?
    • コーディングの方法にもよるので、どの言語も過信できない。
    • 研究者や攻撃者はPHPPerlに目を向けている。
      • C/C++の脆弱性が相対的に減少しているように見えるが、絶対的には減少していない。

オープンソースとRIAの融合: Seasar2とBlazeDSでFlex3が加速する。ひがやすを

  • 会場に質問「AIR, FlexBuilderをもう触った人は?」
    • 3分の1から2分の1くらいの人が挙手した。
  • FlexBuilderの落とし穴
    • FB3_win.exe
    • ...Plugin.exe
    • ウェブサイトからたどるとFB3_win.exeをダウンロードする画面に行くが、これは間違い。
  • 会場に質問「BlazeDSをもう触った人は?」
    • 3分の1くらいが挙手した。
BlazeDS
  • AIRとFlexとサーバサイドをつなぐ。
  • 利点
    • 速い
      • バイナリプロトコルAMF3
        • データ量が少ない。
      • AJAX + JSONの4倍速い。
  • 無償
  • オープンソース
  • 将来はLife Cycle Data Serviceに移行して欲しいと、Adobeは考えている?
  • turnkey
    • Tomcatがバンドルされている。
    • DB (sampledb/startdb.bat) を起動してから、Tomcatを起動する。
  • flex.messaging.MessageBrokerServletからソースを読むといい。
  • Tomcatプラグインを使うと、BlazeDSのソースに触れられる。
  • 設定ファイル
  • BlazeDSでは異なるドメインにもアクセスできる。
  • <mx:RemoteObject>でサーバとやりとりするのがお薦め。
    • サーバのクラスのメソッドが呼び出される。
    • メソッドの戻り値をListとすると、AMFのプロトコルがシリアライズしてくれる。
    • JavaBeansを戻り値にすると、ActionScriptのクラスにマップ(変換)してくれる。
      • なくてもハッシュになる。
      • クラスを作った方が実行速度が速い(らしい)。
  • サーバからデータをプッシュできる。
    • コネクションをふたつ開く。
    • Firefoxは15個までしかコネクションを開けないが、そうなったら自動的にポーリングに変わる。
    • HTTP/1.1でコネクションを使いまわすので、パフォーマンスは落ちない(らしい)。
    • サーバサイドではMessageBrokerとAsyncMessageを使う。
    • クライアント (Flex) では<mx:Consumer>を使用する。
    • <mx:Producer>でデータを送る。
    • いままでは有償だった機能が無償になった。
    • Life Cycle Data Serviceの方が、プロトコルが賢くてスケールしやすい(らしい)。
    • チャットのデモ
  • FlexBuilderを使うと開発が楽になる。
Coraleef
質疑応答
  • サーバからプッシュするとき、メッセージをクライアントに送れなかったら、サーバには通知されるのか?
    • JMSでメッセージをキューにためているだけ。サーバでは送れなかったことは分からない。
  • Seasar2との関わりは?
    • HotDeploy対応
    • Flexで何の設定もなしにSeasarコンポーネントにアクセスできるようにしたい。
    • publicフィールドを使えるようにしたい。
    • 現在調査中
  • 会場に質問「BlazeDSのソースコードを読むイベントを開催したいが、参加したい人はいるか?」
    • 多くの人が挙手した。
    • Flexユーザグループで提案する。

更に高速に! 便利に! 待望のPostgreSQL 8.3完全ガイド 日本PostgreSQLユーザ会 石井達夫

海外のPostgreSQLの活動
PostgreSQL 8.3
  • PostgreSQLの日本でのシェア
  • CPUスケーラビリティ
    • PostgreSQLは負荷が高くても性能は落ちない。
    • CPUを増やせば能力は高くなる。
  • 性能
    • いままで
      • 更新すると物理スペースが増える。
    • これから
      • Heap Only Tuple (HOT)
        • 更新する列にインデックスがないときのみ有効
        • 更新するときにページに空きがあるときに有効
          • FILLFACTORの設定が必要
            • 50%にすると、あえてページの半分しかデータを入れない。
        • UPDATEしてもデータ量が増えない。
        • 自動VACUUM
          • ブロック内の空き領域が小さいとき
            • 具体的には、ページサイズの1/10かFILLFACTOR以下のとき
          • アボートしたときはHOTは適用されない(VACUUMが必要)。
    • 同期スキャン
      • 問題
        • 共有バッファに入りきらないような大きなテーブルを、複数セッションが順にスキャンすると、キャッシュヒット率が低下する。
      • 解決策
        • キャッシュに入っているデータからアクセスする。
      • 注意点
        • 行の返却順序が一定にならない。
        • ORDER BYを行って明示的にソートする。
          • 本来RDBでは行の順序は規定されておらず、アプリケーションでもそれを考慮していると思うので、普通にアプリケーションを作っていれば特に問題はない。
    • 非同期コミット
      • fsync=off
        • OSがどの順序でディスクに書き込むか分からないので、停電した場合、整合性が失われる。
      • 非同期コミットでは、整合性は失われない。
    • ORDER BY ... LIMITの高速化
    • 負荷分散チェックポイント
      • 問題点
        • チェックポイントのとき性能が低下していた。
    • WALログの省略
      • 新しくテーブルを作成してデータを挿入する(TRUNCATEして、COPYする)とき、ログが書き出されない。
    • Auto Vacuum
      • Vacuumを自動実行する。
    • ソート処理のモニタリング
      • ボトルネックの大半はソート
        • 作業ファイルを使用するため。
      • 作業ファイルの大きさなどが分かる。
    • ログ項目の追加
    • 更新可能カーソル
      • 従来のカーソルは更新できなかった。
      • "FOR UPDATE"で更新可能カーソルになる。
    • 全文検索機能
      • contribのtsearch2が取り込まれた。
      • 日本語は分かち書きがある。MeCabを使用する。
    • XML
      • SQL: 2003のXML対応をサポートする。
      • XMLデータ型の提供
        • xmlparse関数でXMLテキストから作成する。
        • well-formedか検査する。
        • xpath関数
        • table_to_xmlなど
        • ドキュメントにないxmlvalidate関数は、セキュリティホールなので使わないこと!
          • そのうちパッチがでる。

ライトニングトーク

オレゴンから愛とエンタープライズ しまねOSS協議会 野田哲夫
  • 島根は鳥取の左側である。
  • Ruby City Matsue Project
  • 400億円規模
    • どこにあるの?
  • オレゴンに行ってきた。
  • オープンソースは愛だ
  • OSC2008 Shimane
    • 2008年9月12日から2008年9月13日
  • 島根は鳥取の左側である。
    • 終始会場から笑いをとっていた。
日本bashユーザ会設立総会 よしだ
  • bashユーザを増やしたい。
  • mixiにて活動中
  • No bash, No Life.
Geeklogを活用する 今駒哲子

無償CMS Geeklog導入ガイド (Gihyo Expert Books)

無償CMS Geeklog導入ガイド (Gihyo Expert Books)

  • SNSで活動している。
Pythonによるリアルタイムビジュアル記述環境"NodeBox" さとうしんご
もっと早く打て! 中本崇志
ゲットーの斜め上をいくWebフレームワークの開発
OpenSUSEの紹介
  • ノベルティの抽選
日本電子専門学校システム制作コンテスト
  • KIMNY
  • 課題を管理するウェブシステム
  • PHP
  • Piece Framework

懇親会

ライトニングトーク
おまけ

懇親会のとき、Simutransの発表者をつかまえて、話を聞きました。

  • Simutransの日本語化には、日本人が関わっているのか?
    • 関わっている。しかし、やっている人たちはオープンソースであるとは分かっていないようだ。
  • 建物や線路を作るときに必要なお金は、どうやって手に入るのか?
    • 気にしなくていい。大赤字でも続けられる。
  • Simutransはオープンソースか?
  • Linux版やWindows版もあるのか?(デモはMacだった)
    • ある。