« 2005年11月 | メイン | 2006年1月 »

2005年12月

2005年12月23日 (金)

オブLOVE夜会第2弾「イマドキのJavaScript」に飛び込み参加

dotさんのお誘いにより、オブLOVE夜会第2弾「イマドキのJavaScript」に飛び入り参加してきました。
セッションの中でAjaxとかWeb2.0っていうキーワードが頻繁に出てきていたので、最後の10分をいただいて「Web2.0時代のJavaScriptセキュリティ」というネタで乱入ライトニングトーク。突然失礼しました。内容はというと、第4回セキュリティもみじで発表したネタの使い回しで、ゴルゴ13の薀蓄についてしゃべってきました。(謎)

→このことについてあとで書く

http://d.hatena.ne.jp/nskj77/20051222#1135268297

オブジェクト倶楽部の催しには始めて参加したのですが、今回はid:secondlife現在無職のgorouさんに謎の俺様JavaScriptフレームワークGiza(inspired by しょこたん)について聞くことができて大変興味深かったです。ギザテラスゴス(w

その後の懇親会ではppencodeネタも含めていろんな方とお話できて楽しかったです。
参加された皆さん、お疲れ様でした&ありがとうございました。

2005年12月20日 (火)

2005年度下期IPA未踏ソフトウェア創造事業 公募結果

2005年度下期IPA未踏ソフトウェア創造事業の採択プロジェクト一覧が公開された模様です。

採択プロジェクト一覧

個人的に関心を持っているプロジェクトをいくつか。

続きを読む "2005年度下期IPA未踏ソフトウェア創造事業 公募結果" »

2005年12月16日 (金)

Yet Another Perl Conference Asia 2006 Tokyo

YAPC::Asia 2006 Tokyo を開催します (in English)

日時: 2006/03/29-30 (Wed-Thu) 10:00-19:00 (予定)
会場: 大田区産業プラザ (PiO)
料金: 3000円 (T シャツ込み・予定)
主催: Shibuya Perl Mongers

YAPC とは Yet Another Perl Conference の略で、あの Lightning Talks 発祥のイベントでもあります。本家のPerl Conferenceと違って参加費もTシャツ込みで3,000円と激安となってますので、興味のある方はぜひご参加ください。世界のPerlハッカー達に向けてプレゼンしてみようっていう方も随時募集中。

今回は縁あって私もイベント運営のお手伝いをしています。会場手配ではwakatonoさんに多大なるご協力をいただきました。この場を借りてお礼申し上げます。

来年の3月はこのイベントのためにあのオートリジャスも来日するとかしないとか。

今からとっても楽しみです!

2005年12月15日 (木)

ライブドア次世代テクノロジーセミナー第1弾

六本木ヒルズで開催されたライブドア次世代テクノロジーセミナーに、会社の同僚の秋元さんと一緒に行って来ました。

livedoor_seminar.jpg

当社は長い受託ビジネスやWEB開発から蓄積した、膨大な経験と実績を使い、現在UU14,336千人、月間約22億PVというポータルサイト 「livedoor」を構築するまでになりました。そこには飽くなきローコストへの挑戦と、多くの優秀なエンジニア、更には膨大なインフラを支えるネットワークエンジニアによる日々の汗と苦労の結晶です。今回は、それらの技術面及びインフラ面のノウハウの一端を、皆様の成功の鍵にしていただきたく紹介をさせていただきます。

定員50名の募集に対して、告知後数時間で150名超の申し込みがあった
いわば選ばれた者だけが参加できた貴重なセミナーでした。

■参加者のレポート

[システム運用] ライブドア 次世代テクノロジーセミナー
http://pmakino.jp/tdiary/20051213.html#p01

ライブドアの次世代テクノロジーセミナーに行ってきた
http://d.hatena.ne.jp/a666666/20051214

てくのーと2.0 : 六本木ヒルズ初上陸
http://blog.kan.vc/1134571006.html

どこまで公開してよいかわからないけど、当日の個人のメモを公開してみます。
(一部やばそうな内容は削除しています)

続きを読む "ライブドア次世代テクノロジーセミナー第1弾" »

2005年12月13日 (火)

IT技術業界の重言(じゅうげん)

サイボウズ開発部別室のドキュメントチーム紹介記事

この「あらかじめ」と「予告」の「予」は、同じ意味を持っています。「あらかじめ予告」などといった間違った日本語はドキュメントやマニュアルを扱う者にとっては言語道断です。

おおっと、これは手厳しい…。(^^;
私も普段気付かずに使っている表現が結構多いかも。話し言葉では意味を通じやすくするためにわざと意味を重ねて言うことが多いんですよねー。こういう意味の重なる言葉を冗長に繰り返すことを重言(じゅうげん)と呼ぶらしいです。日本語って難しいですね。

脱線ついでに、今まで私の見かけた重言をいくつか紹介したいと思います。

■ 筋肉痛が痛い

たぶん「筋肉痛で足が痛い」とか言いたいのだと思うのですが、類似するものとして「頭痛が痛い」「腹痛が痛い」などがあります。この表現を許してしまうと「骨折が折れた」なんて言い出す人が出てきて大変危険です!

■ HTTPプロトコル

HTTP は HyperText Transfer Protocol の意味なので、HTTPプロトコルという表現だとプロトコル・プロトコルになっちゃいます。FTPプロトコル、SMTPプロトコルとかも同罪です。ここは「プロトコルはHTTPで」と言っておくのが無難でしょう。

続きを読む "IT技術業界の重言(じゅうげん)" »

2005年12月 3日 (土)

Binary2.0カンファレンス2005に行ってきました。

ふと自分の過去を振り返ってみると、人生で一番最初に触ったPCは富士通の「FM-TOWNS」というi386(16MHz)のマシンで、学生時代にx86のハンドアセンブルやコードチューニングにハマッていた時期がありました。そんな私にとってBinary 2.0カンファレンス2005はとても楽しめる内容でした。期待以上に楽しかったです。簡単にカンファレスの概要と感想をレポートします。

追記:まとめのページができたようです。

■ 1. Binary 2.0 時代の到来 - 高林哲

binary1keynote.jpg

satoru先生による基調講演。なぜ今さらバイナリなのか?

「Binary2.0は高度なWeb2.0サービスの構築に必要不可欠な技術」というのは表向きの説明で・・・
実は「Web2.0についていけない」のが本音。(w
今のうちに新しいバズワードを提唱して「既得権益を確保」しておこうという狙い。
つかみはOK。会場大爆笑の渦でした。

[発表資料]

■ 2. プログラムはなぜ Mona OS で動くか?fork?何それ? - ひげぽんさん

binary2mona.jpg

Mona OS とは?

2ch生まれのオープンソースOSで、カーネルはC++で書かれている。
ソースコードも5万行で、他OSよりも圧倒的に短い。オブジェクト指向万歳。
中身はマイクロカーネルっぽくって、バッファオーバーフローありありのノーガードOS。w

ユーザモードで各種サーバ(プロセスサーバ・PE or ELFサーバ・ファイルサーバ)が動作。
ユーザモードでできることはユーザモードで実装し、割り込みまでメッセージベースでやりとりしている。
Hello Worldでも一苦労、OSの中のひとは大変・・・という内容でした。

[発表資料]

Binary2.0 のはてなリングもあるので、興味のある方は是非参加してみてくださいとのこと。

■ 3. Dynamic Programming Language C -- 私は誰? - 浜地慎一郎さん

binary3shinh.jpg

SDLプレゼンテーションシステム(SPS)によるプレゼン。

嫌いなもの
- 似たコードの連続

解決方法
- スクリプトでコード生成
 ダサいよね
 生成してからコードを再編集するとイヤなことに
- C/C++のマクロ
 CppUnitとか
 少しマシになっただけ
そうだリフレクションだ
でもCには・・・リフレクションがない
 Javaを使う→(自分にとっては)論外www

道のり

* which $0
 私は誰?
 実行しているEXEを取得
 環境依存、#ifdefの嵐、バッドノウハウの山
 ライブラリ化したい(グッドラッパーを目指す)

* ldd
 ロードされているDLLを取得

* nm
 オブジェクトファイルを見てシンボルを取ってくる
 080xxxxxxx T bfd_make_readable とか

* libbfdで関数アドレスを取得
 GNU binutilsのライブラリ
 オブジェクトファイルを読み書きできる
 多数の対応フォーマット

* c++filt
 C++のシンボルは読めない
 デマングル(w

* 取得した関数のcall
 関数のシグネチャが決まっていれば簡単
 わかっていない場合
 - libffi
  GCJで利用されている
  動的ディスパッチが可能
 - ffall
  GNUStepで利用されている

JavaやRubyなどと比較すると・・・
 可搬性にやや難
 わかりにくいエラーメッセージ(w
 言語に統合されていない
 構造体メンバが見れない

いいところ
 楽しい!

[活用事例]

しー言語(言語というよりかバッチに近い)
#!./she
puts "hello world!"
!load  "m"
dx = cos 3.2
printf "%f" dx

Dynamic Test Runner
 .o ファイルをロード・再配置
 内部の dtr_test を含む関数をかたっぱしから実行

Ruby/C++ Ruby/D ちょっと作ってみた
 RubyからC++のクラスを直に、SWIGは面倒
 Objective-C++、Java & Groovy みたいに
 バインディング不要

[言いたかったこと]

コピペでコード書きたくない!(笑)

[発表資料]

■ 4. G-Inspector -- GTK+ ランタイムインスペクション - 青笹茂さん(順番入れ替え)

binary4ginspector.jpg

GTK+はメジャーな言語をサポート
 Ada、Eiffel、Haskell、SmallTalkって・・・(テラワロス

typedef、マクロ、データ構造、リスト、
バイナリツリー、イテレータ、
イベントループ、フレームワーク、抽象化したI/O

GObject
- GTK+の肝
- C言語でオブジェクト指向するためのフレームワーク

ここに実行バイナリがあります
 stripされてる
 ソースもない
そこで G-Inspector の登場!
- editresみたいなもの
- オブジェクト一覧
- 実行中にプロパティを変更
- ウィジェットツリーをシリアライズ(XMLとか)
- メモリ領域をダンプ

* ついでに GNU Autotools のクイックツアー

Autoconf/Automake/Libtool/pkg-config

個人的にはバッドなノウハウがとても一杯の感覚が抜けないんだけど、最近は

configure.ac
Makefile.am
{name}.pc

の3つのファイルを書くだけでいけるようになったらしい。
pkg-config は知らなかったので今度から使ってみよう。

■ 5. g++と例外キャッチボール - 中村孝史さん(順番入れ替え)

binary5dwrf2.jpg

スーツ族?クールビズです 地球にやさしいwoです

g++の例外処理を解明します
でも、キャッチボールはできません(www

gccで一番良く使うオプションは -S です(w

例外処理は何でできてる?
 unwind  - 超return
 type_info - do_catch()メソッド

名前 mangling ルールを覚えて extern
(大爆笑

unwind-SjLj
unwind-dwarf2

DWRF2 デバッグ情報フォーマット
 いくつかのレジスタ
 オフセット、状態、CFA、リターンアドレス
 オフセット計算アドレス
 命令セット
→ 実はプログラミング言語?

余談:makefileでクイックソートとかも(すげー)

[発表資料]

■ 6. 実行時自己書き換え佳境 - 首藤一幸さん

binary6corewars.jpg

Core Wars知ってますか?(私ははじめて知りました)

マルチスレッドなプログラム
 実行の流れ(スレッド)が複数あって、メモリ空間を共有する。
 これってリアル Core Wars ですか?

なんで自己書き換えなんかするの?
- HotSpot VM (SunのJava仮想マシン)
 アプリのスレッドを任意の箇所で停止させるために、
 ソフトウェア割り込み命令を上書きする。
 後で元のコードを書き戻す。
 ガベージコレクションやOn-stack replacementが目的。
- IBMのJava仮想マシン (by IBM東京基礎研)
 バッドなノウハウ満載
- shuJIT (x86用 Java JITコンパイラ)
 クラスの初期化
 インスタンス生成時の諸チェック
 Interface実行時のチェック・・・

Core Wars のテクニックを利用して:
   nop
   nop
   初回実行時のみの処理
   nop を jump done に書き換え
done:

x86でプログラムカウンタを読む小技

他のスレッドを妨害しないために
Atomicに書き換える
 x86だとXCHG命令など
ロック
 モニタ、セマフォ
 一時停止

 EB FE をアトミックに書き込む
 他のスレッドはループして待機

[発表資料]

■ 7. ハードコアバイナリアンへの道 - 八重樫剛史さん

binary7hardcore.jpg

[下には下がいる]

ユーザランド C/C++/Java/Perl/...
カーネル Assenmbly/C/C++
--------------------------------
ハードウェア VHDL/VerilogHDL
半導体プロセス ???

ゲート、プリップフロップ
バイナリを生で扱う
I/O(実世界)と直接つながっている

ハードウェア記述言語(HDL)で回路を書く

実際にFPGAボードのVGA出力でプレゼンテーション。
しかも世界初のリモートGDBプレゼン(テラスゴス
→ これにはぶったまげました。ハードコアバイナリアン第一号に認定します。w

[発表資料]

■ 8. ライトニングトーク

binary8lightningtalk.jpg

ここから一人5分間の怒涛の Lightning Talk が開始(時間厳守です)

■ 8-1. Binareal - バイナリファイルの構造と解釈 - 大和正武さん

binary81binareal.jpg

Etherealにインスパイアされて開発を始めたBinarealの紹介
構造改革前と後(うまいなぁ)
バイナリデータを可視化するためのツール

■ 8-2. いけないお化粧magic(5) - 野首貴嗣 5分

binary82magic.jpg

Flashでプレゼン
magicでファイル判定
 M$ Office と OpenOffice.org
 Namazu と Sary(一部自虐ネタ)
トリビアの紹介などなど
期待以上の内容でとても面白かったです。w

[発表資料]

■ 8-3. livepatch - 概念と技法 - 鵜飼文敏さん

binary83livepatch.jpg

実行中のプロセスにパッチをあてる(CGLの要求仕様のひとつ)
- Pannusプロジェクト
- livepatch

ptrace(2) - 黒魔術のシステムコール
MDFライブラリ

[発表資料]

■ 8-4. 斜め下を行くバイナリ書き換えの探求 - 後藤正徳さん

binary84binedit.jpg

Linuxに数行のスペシャルパッチを適用すると・・・
実行時バイナリをバイナリエディタで直接書き換えが可能に!w
アイデア勝負ですね。

[発表資料]

■ 8-5. Cache Pollution Aware Patch - よしおかひろたかさん

binary85cache.jpg

Miracle Linux の中のひと。

CPUの速度向上(+50%/年)
メモリの速度向上(+7%/年)

L1 < L2 < メモリ

ユーザ空間からのコピー
copy_from_user_ll()
をチューニングすると早くなる

カーネル読書会やってます

[発表資料]

■ 8-6. Inside QEMU - BEROさん

binary86qemu.jpg

QEMU
 複数のターゲット、ホストに対応したエミュレータ
Cによる移植性の高いJITコンパイルをどうやって実現しているか?
 TARGET CPUの命令をC言語の関数で実装したものをコンパイル&リンク
→惜しくも時間切れ・・・

[発表資料]

■ 8-7. GNP --- 'g' Network Protocol-Stack (for Boot Loader) - g新部裕さん

binary87gnp.jpg

m32r-g00ffに実装したプロトコルスタックの話のはずだったけど・・・
Binary 2.0カンファレンスのドレスコードは「ブラックandホワイト」だったらしい(w
しかもバイナリアンだったら指折りは2進法で数を数えますよね?って(www

次回は「Binary 2.0 カンファレンス MaxHeart」と改名して、ドレスコードは「ブラックandホワイト」に新しく「ピンク」を加えてみましょう。:-)

それでは、みなさん、Happy hacking!