« 2009年6月 | メイン | 2009年8月 »

2009年7月

2009年7月30日 (木)

第30回U-20プロコンの応募締切は8/3(月)です

平成21年度第30回U-20プログラミング・コンテストの作品募集開始について(METI/経済産業省)のプレスリリースにあるとおり、応募締切は8/3(月)となっています。

昨年は「未発表」の作品に限っていましたが、今年は過去1年以内に公開したオリジナル作品も審査対象に含まれることになりました。ブログやネット上で複数の人とコミュニケーションをとりながらプログラムを作り上げていくオープンな開発スタイルも一般的になってきたと思います。応募資格に該当する方で既に何かしらのプログラム(作品)を持っている方はぜひこの週末で書類を揃えてコンテストに応募してみてください。電子メールでの応募も可能です。たくさんの応募をお待ちしております。

■U-20プログラミング・コンテストとは
プログラマとしての「才能の芽」の発掘を目的に毎年開催している、プログラム提出型のコンテストです。今年で30回目を迎えます。
U20procon30th

■主催
情報化月間推進会議(経済産業省、文部科学省、内閣府、総務省、財務省、国土交通省)

■参加資格
日本国内に居住する、平成元年(西暦1989年)4月1日生まれ以降の方(団体の場合もチームメンバーの参加資格は上記のとおりとなります。)

■募集部門(作品はどちらか1部門にご応募ください。)
◇個人部門
  1人で制作した作品を対象とします。
◇団体部門
  複数人(チーム:人数制限は無し)で制作した作品を対象とします。

■応募締切
平成21年8月3日(月)必着

■募集内容
あなたのユニークな発想や培ってきた技術力を活かした、未発表または過去1年以内に公開したオリジナル作品を募集します。特にジャンルやシステム方式は問いません。

■プログラミング言語
特に問いません。

■開発形式
* プログラミング言語による直接開発のほか、市販ライブラリや 開発キット、オーサリングツールなどのソフトウェアも使用可。
* 一般的なマシン環境で動作/再現できるものに限ります(携帯電話で動作/再現できるものは審査の対象になります。スーパーコンピュータ、汎用機、ゲーム機、家庭用ゲーム機など、特別なマシン環境上でのみ動作/再現するものは不可)。
* 動作プラットフォームとしては、Windows、Mac OS、Linuxを想定しており、それ以外のプラットフォーム上でのみ動作する作品については、事前に事務局にご相談ください。

昨年度のU-20プログラミング・コンテストでは、Lispのマクロを持ったPython風のインデントによってブロックを表す自作のプログラミング言語Cyanを作った高校生の林拓人さんが経済産業大臣賞を受賞しました。今年も引き続き私も審査委員の一人として参加させていただいていますが、いまから若い人の応募作品を見るのを楽しみにしています。

2009年7月22日 (水)

8/1(土)第1回東北情報セキュリティ勉強会@仙台

8/1(土)に仙台で開催される「第1回東北情報セキュリティ勉強会」でメイン講師を務めさせていただくことになりました。まっちゃだいふくさんをはじめとする関係者の皆様に感謝いたします。

■ 第1回東北情報セキュリティ勉強会(仙台)

テーマ 開発者のためのセキュリティ勉強会
講師   サイボウズ・ラボ株式会社 竹迫 良範さん(調整中)
日時   2009年08月01日 (土曜日) 13時00分~17時30分(12時半受付開始)
場所    仙台市青葉区北目町4-7 HSG(本田精機グループ)ビル 会議室
参加費用 一般1000円、学生・未成年:無料

今回、東北地方での勉強会には初めて参加するのですが、東北Developers Community(TDC)のサイト仙台Ruby会議01(sendairubykaigi01)のレポートを見ながらコミュニティの雰囲気などを事前予習しています。いつもと比べて難しい話はしないつもりですので(時間の許す限り順を追ってやさしく丁寧にお話しします)、ぜひご都合の付く方はお気軽にご参加ください。

発表タイトル: 記号Polyglotとセキュリティ(TAKESAKO)

Polyglotとは複数の言語処理系で実行できる一つのプログラムのことです。
例えば「print "Hello ",0?"Ruby":"Perl","!\n"」のワンライナーは
Perl と Ruby でそれぞれ異なる出力結果を返します。
これは各言語における真偽値の扱い方の違いを利用しています。

これらのテクニックを利用すると以下のような
5言語混在のプログラムを作成することが出来ます。
----------------------------------------------
#include/*
q="""*/<stdio.h>
int main() {putchar('C'); if(sizeof('C')-1);
else {putchar('+'); putchar('+');}} /*=;
print'Perl'#";print'Ruby'#""";print'Python'#*/
----------------------------------------------
$ perl a.cpp
Perl
$ ruby a.cpp
Ruby
$ python a.cpp
Python
$ gcc -xc a.cpp && ./a.out
C
$ cl.exe a.cpp
$ a.exe
C++

さらに一般のファイル形式も対象とすると、GIFやJPEGなどの画像ファイルにも
JavaScriptやPHPとして実行可能なプログラムを埋め込むことが可能です。
Polyglotを読み解きながらセキュリティ・Web業界への応用を考察します。

※ 本日よりライトニングトークも募集しているそうです。

ちなみに同時期にOSC新潟2009が開催されるそうなのですが、新潟は東北地方に含まれる?のでしょうか。(幼い頃、東北6県は青森県、岩手県、宮城県、秋田県、山形県、福島県のみと学校で教わりました)

あと、今回初めて知ったのですが、JR東日本の「土・日きっぷ」を利用すると東京-仙台を越えるかなり広い範囲で新幹線も特急も自由席が2日間乗り降り自由、指定席も4回までなら利用OKなんですね。はやての指定席も発券拒否されないみたい。

2009年7月20日 (月)

記号でPolyglotプログラミング♪(RejectKaigi2009)

RubyKaigi2009の最終日に同じ場所で開催された別のイベント「RejectKaigi2009」にて 「はじめてのRuby1.9プログラミング」と題して、記号Polyglotプログラミングの話をしてきました。

3分という限られた時間でありましたが、貴重な発表の機会を与えてくださりありがとうございます。

取り急ぎプレゼンで披露した記号Polyglotのプログラムを公開しておきます。

■ hello.pl

(という名前ですが、Perlの他にRubyやJavaScriptでも実行できるプログラムです)

■ 各言語処理系での実行結果

(1) Perl の実行結果

D:\rejectkaigi2009> perl hello.pl
Hello, Perl!

(2) Ruby 1.8.7 での実行結果

D:\rejectkaigi2009> ruby1.8 hello.pl
Hello, Ruby1.8!

(3) Ruby 1.9.1 での実行結果

D:\rejectkaigi2009> ruby1.9 hello.pl
Hello, Ruby1.9!

(4) SpiderMonkey での実行結果

D:\rejectkaigi2009> js hello.pl
Hello, JavaScript!

(5) Firefox での実行結果

ブラウザのURL入力欄にjavascript:を入力してその後にワンライナーをコピペして改行(Enter)を押します。

Demo_firefox

(6) Chrome での実行結果

Firefoxの場合と同様にします。javascript:を入力し忘れないでください。(でないと入力した記号のワンライナーをGoogle検索しにいってしまってBad Requestと怒られてしまいます…)

Demo_chrome

■ Ruby部分のコード解説

PerlとJavaScriptのコードは後日解説するとして、Ruby部分のコードで使われているテクニックを少し解説しようと思います。(最初に言い訳ですが、まだRuby1.9を使い始めて3日目なので、間違ったことを言っていたらすみません…)

Rubyインタプリタの解釈する部分は以下になります。

Polyglot_ruby

それ以外のところはPerlやJavaScriptで実行される領域になっています。

- Ruby 1.8 と 1.9 の非互換部分

Ruby1.8以前では ?a は'a'のASCIIコードの数値97が返されていましたが、Ruby1.9からは長さ1の文字列"a"を返すように仕様変更されました。これはRuby1.9からの多言語対応のためで、文字列をバイト列ではなく文字単位で扱うようになったためです。

ruby1.9> p ?a
"a"

ruby1.8> p ?a
97

したがって、?? は Ruby1.9では文字列"?"のことですが、Ruby1.8以前では'?'のアスキーコードである63の数値を返すことになります。

ruby1.9> p ??
"?"

ruby1.8> p ??
63

次に数値と文字列における%演算子の違いですが、文字列の"?"%"?"はsprintf("?","?")と同じ動きをして結果は"?"となりますが、数値の63%63は63÷63=商1…余り0の余りを返すため0となります。

ruby1.9> p ??%??
"?"

ruby1.8> p ??%??
0

これを利用してRuby1.9の処理系かどうかを記号9バイトだけで判定することができます。RUBY_VERSION を使うよりも圧倒的に短いです。地球に優しくてエコですね。:-)

ruby1.9> p ??%??==??
true

ruby1.8> p ??%??==??
false

- 記号のみで任意の文字列を作成する方法

Rubyで任意の文字列を生成するには""<<数値(ASCIIコード)という文字列の破壊的演算を行なう構文を利用するのが簡単です。

ruby1.9> p ''<<123
"{"

ruby1.8> p ''<<123
"{"

任意の数値を作成するには、Ruby1.8以前では?{-?|などを利用してできたのですが、Ruby1.9からは先の仕様変更があるため使えません。どうするかというと、正規表現を利用します。

ruby1.9> p //=~''
0

ruby1.8> p //=~''
0

正規表現にマッチした場所を文字列の先頭から数えて結果を返します。

ruby1.9> p /_/=~'>_'
1

ruby1.8> p /_/=~'>_'
1

これを利用すると、こちらで用意した文字列から目的の先頭バイト数でマッチする正規表現を書いてあげれば、任意の数値を作成することができます。これは記号だけを使って実現できます。

ruby1.9> p /_/=~'>>>>>>>>>_'
9

ruby1.8> p /_/=~'>>>>>>>>>_'
9

- (''<<数値)で任意のASCIIコードの文字を標準出力 $> に書き込む

以上のテクニックを組み合わせると、$> << "文字列" と書くことを利用して任意の文字列を標準出力に書き込むことができます。

ruby1.9> $><<(''<<88)+(''<<89)+(''<<90)
XYZ

ruby1.8> $><<(''<<88)+(''<<89)+(''<<90)
XYZ

もちろん、88や89の数字の部分は上記で解説したテクニックを応用して、数値返す正規表現(記号のみ)に置き換えています。真面目にゴルフすればもっと短くなることはわかっているのですが、まずは「わかりやすさ優先」ということであえて冗長なコードになっています。

実際のコードではPerlとJavaScriptとRubyのコードを混在させるために、別のテクニックも使っているのですが、詳しい解説はまた後日行ないたいと思います。

それでは、Happy Hacking!

2009年7月 2日 (木)

夏のキャンプでOS自作入門!?

今年の「セキュリティ&プログラミングキャンプ2009」では、プログラミングコースの「OSを作ろう組(OS自作組)」でメイン講師川合さんのサポートを担当することになりました。

MYCOM BOOKS - 30日でできる! OS自作入門 OS自作組では「30日でできる!OS自作入門」を教科書として採用し、豪華講師陣と著者の川合さん自らからマンツーマンで指導を受けられるメリットがあります。経緯としては以下のような感じでした。

  1. セキュリティ&プログラミングキャンプ参加資格者は22歳以下の学生さん
  2. 若年層に対するOSなどの基盤系技術の初等教育の機会が少ないという主査の認識
  3. 限られた期間だがキャンプでOSを自作してみるのはどうか
  4. 幸いにも「30日でできる!OS自作入門」の読者対象は中学生以上である
  5. 教科書として受講者全員に事前配布することが可能であるとの見込みが得られる
  6. キャンプでの成果物=自作OS=明日すぐに友達に自慢できるものにできる
  7. 「将来のビルゲイツを育てる」みたいなわかりやすいキャッチフレーズがうてる
  8. OS自作組のメイン講師として川合さんのご快諾をいただくことができた

各講師の思いは人それぞれあると思いますが、本OS自作組ではツールの使い方や細かいプログラミングの作法を強制するよりも「プログラムの規模は小さくても自分の手をコツコツ動かして自分の頭で理解しながら作る」ということに主眼をおきたいと私は思っています。 検索エンジンや勉強会が発達して、誰でも簡単に技術情報にアクセスできるようになった今の日本の世の中だからこそ、若年層のプログラミング初等教育の段階では、自分の理解できる範囲のものから実体験をを徐々に積み上げ、ブラックボックスだったものを一つ一つ理解していくことが、その後の経験に強く反映されると信じています。

● 募集対象となる学生・生徒

  

参加が決まった学生さんには事務局から教科書が無料で送られてくるみたいなので、興味はあったけど本を買い逃した方はぜひ応募してみてください。

しかも、宿泊費全額(食費込み)無料で、会場までの往復の交通費が支給されます。

| Q. 移動にかかる費用と、宿泊の費用は必要ですか?
|
| A. 参加いただくことが決定した場合について、自宅と会場間の往復の交通費
| (ただし、経路は主催者側の規定するもので、実費で計算したものとなります)、
| および宿泊費全額(3食込み)を主催者側で負担します。
| また、キャンプにかかる費用(受講料、テキスト代、機器使用料など)は無料です。

応募締切は、7月6日(月)17:00 必着みたいなので、思い立ったらすぐ実行!悩むのは後にして、早速応募用紙をダウンロードして応募してみてください。

「セキュリティ&プログラミングキャンプ2009 募集要項」

セキュリティ&プログラミングキャンプ2009
http://www.jipdec.or.jp/camp/

○開催日
 2009年8月12日(水)~8月16日(日)
○開催場所
 (財)海外職業訓練協会(OVTA)
 千葉市美浜区ひび野1丁目1番地(JR京葉線海浜幕張駅下車 徒歩8分)
○応募期間
 2009年6月10日(水)~7月6日(月)17:00必着
○参加資格
 日本国内に居住する、平成22年3月31日時点において22歳以下の学生・生徒
○費用
 交通費支給、宿泊費無料

■セキュリティコース講師(16名)

  • 園田道夫 サイバー大学 IT総合学部
  • 伊原秀明 Ji2, Inc. 日本オフィス
  • 上野宣 株式会社トライコーダ
  • 岡田良太郎 株式会社テックスタイル
  • 国分裕 三井物産セキュアディレクション株式会社
  • 塩月誠人 合同会社セキュリティ・プロフェッショナルズ・ネットワーク
  • 滝崎芳枝 サイバー大学
  • 田口裕也 日本オラクル株式会社
  • はせがわようすけ ネットエージェント株式会社
  • 濱本常義 株式会社エネルギアコミュニケーションズ
  • 宮本久仁男 株式会社NTTデータ
  • 村上純一 株式会社フォティーンフォティ技術研究所
  • 望月岳 三井物産セキュアディレクション株式会社
  • 吉田英二 合同会社セキュリティ・プロフェッショナルズ・ネットワーク
  • 渡辺勝弘 独立行政法人理化学研究所
  • 塩谷定子 (キャンプ会場実施運営担当)

■セキュリティコース講義概要

専門科目(クラス選択制):
●Webセキュリティクラス
- ブラウザに依存したWebアプリ脆弱性
- Webセキュリティ診断とテスト
- セキュアプログラム開発、品質設計
●セキュアサーバ構築クラス
- セキュアOSを使ったサーバのセキュア化
- DNSサーバのセキュリティ
- ログ解析
●ネットワーク技術者クラス
- ネットワーク構築基礎とVPN
- パケット工作から学ぶネットワークセキュリティ
- 侵入検知、IDS
●バイナリ解析クラス
- パケット解析
- マルウェア解析
- ハードディスク解析
専門科目(自由選択制)
・ハニーポット
・無線LANのセキュリティ
・クライアントのセキュリティ
・ソフトウェアの不正実行防止
・暗号理論と暗号解読
・VM、仮想化技術 など

■プログラミングコース講義概要

応募時に自分の受講したい組を以下の3組より一つのみ選択。

●OSを作ろう組(OS自作組)
教科書「30日でできる!OS自作入門」を事前配布します。当日は受講生の習熟 度に応じた課題設定と演習を行い、OS内部の仕組み (ハードウェアとOSとアプ リケーションの関係)を理解し、OSを作れるようになることを目指します。
●プログラミング言語組(言語組)
言語組では、プログラミング言語Ruby、およびその言語処理系を題材に、座学 と実習によって言語処理系の基本、ソフトウェア構成手法の基本、性能改善手 法の基本を学び、Ruby開発コミュニティで活躍できるレベルを目指します。
●Linuxカーネル組(Linux組)
この組ではLinuxのコンパイルからコードの歩き方、デバッギング、コミュニティ との関わり方までを実践的に勉強します。特に、LKML (Linux Kernel Mailing List)など、Linux開発のコミュニティに実際に参加できるレベルを目指します。

■プログラミングコース講師(9名)

  • 吉岡弘隆 独立行政法人情報処理推進機構
  • 天野仁史 サイボウズ・ラボ株式会社
  • 川合秀実 OSASK計画
  • 小崎資広 富士通株式会社Linuxソフトウェア開発統括部
  • 笹田耕一 東京大学情報理工学研究科創造情報学専攻
  • 竹迫良範 サイボウズ・ラボ株式会社
  • 西尾泰和 サイボウズ・ラボ株式会社
  • 山幡為佐久 VA Linux Systems Japan株式会社
  • 吉藤英明 慶應義塾大学大学院政策・メディア研究科 専任講師

学生ではない方、23才以上の方は残念ながら応募資格を満たせませんが、身近の22才以下の学生さんに宣伝しておいていただけると嬉しいです。