OSC2008 Tokyo/Spring(2008/3/1)に行って来ました

まだ書きかけ。→書きました。

3/1(土)、OSC 2008 Tokyo/Spring に行って来ました。

D言語BOF(1/2) 紹介/事例編

D言語を愛する6人の方々が発表。予備知識なしで行ったので、Dがゲーム開発に向いた言語だというのに驚きました。

D+SDL+OpenGLでさくさくゲームを作る - ABA
  • C+SDL から普通 C++ に行くところを D に
    • C++GC がないとのヘッダファイルの用意が面倒だから
  • さらに、自作ゲームと共に、めまぐるし過ぎるD言語の歩みを紹介
    • ↑これが面白すぎ!
      • "==="演算子が産まれたけどすぐ非推奨→廃止にされたとか
      • D言語 Ver0.99の次がVer0.1 だった(0.99→0.1ショック)とか
    • どんどんコンパイルが通らなくなっていくリスキーさがDの魅力><
はじめてのD [inital D] - k.inaba氏

オーストラリアから Skype でプレゼン。

  • まとめ:「今日のDは、明日のDではない」(Dは変化の激しい言語)
  • ちなみに、今日のDは ...
D & DirectX 〜Dで納品〜 - itouh2氏
  • 1つだけじゃありません、3つ納品しました
    • 立体でぐりぐり回せる花火、魚、箱型でCGの中に入る仮想環境シミュレーションシステム
  • Dはとても実用的
    • C++ & 何か でやってやってみたけど、パフォーマンス(GCとか)とシングルスレッドなのがネックだった
    • Dはたくさんのモデルの instancing が非常に高速で簡単。あと、マルチスレッド大事。
CゲンガーがDを使う10の理由 - isshiki氏
  • Cみたいに書けて学習コストほとんどなし。Cのライブラリも使える(ヘッダをDモジュールに変換)
  • プロトタイプ不要。ヘッダファイルがそもそもないので、書き忘れもなし
  • 変数にプロパティがあって、ソートとか便利
  • 配列いいよ→宣言後に動的にメモリ確保
Dでゲームを作ってみる - omega氏
  • Dで「芝」ってゲーム作りました
    • ニコニコ動画の生態シュミレーション。ニコ厨が集まった動画の周りに芝が生える←キャラがとっても可愛い。癒し系。
  • dHell/dHell2 という2D向けラッパライブラリがあって、「芝」では dHell2 を使用
    • dHellはSDLなので表現力が弱い
    • dHell2はOpenGL。強力だけど、ドキュメントが少なかったり、Vistaで重かったり、一部CPUで挙動が怪しかったり
Cの.hを確実にDのモジュールへ変換する - Itkz氏
  • DMDで確実に動かす方法(32bitOS限定)
    1. Cの型からDの型に変換
    2. "extern(C):"宣言してDモジュール内の宣言
  • 64bitOSで動かすには、GDC(GCC の D front end)を使う
    • Dはマイナーなので、GDCでググっても最上位には出て来ません。わきまえましょう。
    • 64bitになると、変数のサイズが変わる場合があるので注意が必要
      • 32bitOSでは Cのlongのサイズ=Dのintのサイズだったが、64bitOSでは違うサイズになることも
      • 構造体へのアクセス部分をC内に隠蔽するとかで対応

微妙なわきまえぶりが新鮮(失礼><)な Itkz氏。

セキュアコーディングノススメ ミニセミナー

講師はJPCERTコーディネーションセンターの方お二人。いつもやってる出張セミナーのミニ版。

  • C/C++は危険な言語
    • プログラマが専門知識を持って自分でで脆弱性対策すること前提になってるから
    • 最近はWebアプリの脆弱性がメジャーになっていますが、C/C++の被害件数も減ってはいません
  • 今回は、ヒープの動的メモリ管理(C言語版)だけ話します
  • メモリ確保と解放
    • malloc はメモリを初期化しない(前のデータが入ったまま)なので注意
    • free は多重解放した時の挙動が未定義なので注意
    • calloc はメモリを初期化してくれるのでお勧め
  • よくあるミス
    • 初期化に関するエラー(mallocはメモリを初期化しないのに、初期化されるつもりでコーディング)
    • メモリ確保や確保済のサイズ変更時、戻り値検査を忘れる
    • 解放済のメモリを参照する
    • malloc や realloc で 0byte の領域を確保してしまう(挙動は実装依存、NULLを返したり本当に 0byte の領域を確保したり)
  • 対策、というか、お作法
    • メモリを解放した時、そこを指すポインタを初期化
    • コードに一貫性を持たせる(一貫したやり方で確実に malloc/free)
    • 動的分析 ←わかんないから聞きたかったのに、スキップされた><
  • 詳しくは、「C/C++セキュアコーディング」という本を読んでください

更に高速に! 便利に! Postgresql8.3 完全ガイド

PostgreSQL8.3で導入される新機能の紹介 by 日本PostgreSQLユーザ会/SRA OSS,Inc 日本支社 石井達夫氏。

  • Hot : 自動vacuum
    • PostgreSQLは追記型DB。レコードを削除しても実際に消えるのはvacuum実行時のため、ゴミ領域が多かった → Hotで自動vacuum
    • Hotが自動vacuumする条件は、
      • 更新 or 削除した(abortされたものや、更新された列にindexが張られてるもの除く)
      • ブロック内の空き領域がページサイズの1/10(800byte程度?)以上
  • 同期スキャン : 共有バッファに入りきらないテーブルでの複数セッション検索を高速化
    • 旧 : 全セッションがテーブルの最初からスキャン
    • 新 : 複数セッションの場合は、それぞれ違う位置からスキャン開始
    • 注意点 : これまでの「ORDER未指定時は、レコード登録順に結果が返って来る」という暗黙のルールが成り立たなくなる(必要な時は必ずORDER BYをつける)
  • 非同期コミット
    • コミットした後、同期書き込みが終わるのを待たずにクライアントにコミット完了を返す
    • 単純な同期書き込みOFFとの違いは、データの整合性が保たれること
    • Webアプリでよく使う "ORDER BY xx LIMIT yy" が速くなる!
  • 負荷分散チェックポイント
    • チェックポイントの取り方を分散させる。チェックポイントを取っている場合の性能低下リスク軽減。

Hotはいいんだけど、index の張ってある列が更新されたら対象外って、どのくらい効果あるのかなぁ? 大規模になると、index はとにかく張りまくらないとパフォーマンス出ないから、これが役に立つケースって限られてない?

Greasemonkeyを使ってみよう - Mozilla 拡張機能勉強会 OSC出張版

Greasemonkey自体の紹介と、UserScript の作り方の紹介 by もじら組・組長 aka.btm氏。
今回は本当に初級編といった感じ。

悪意あるスクリプトの見分けポイントとかが参考になった。でも、もろ初級編なのにいきなりGM_xmlなんちゃらを探せとか織りまぜたら、敷居高いと思われない(^^;)?

会場でサイ本を買ったらサイマグカップもらった!

O'Reilly が 10% OFF だったので前から欲しかったサイ本を購入。O'Reilly マグカップをつけてくれた。せっかくだから、本とお揃いのをリクエスト。

閉店間際だったから、実はかなりおまけしてもらったのかも。一冊買っただけでマグカップって、豪華すぎだよね?