2012年1月 1日 (日)

プログラミング言語APLで謹賀新年Golf

2012年の元旦ということで、プログラミング言語APLで謹賀新年Golfをやってみました。

APL2012golf-73byte

APLとはA Programming Languageの略で、1957年のFORTRAN登場以降にケネス・アイバーソン博士によって発明された数式処理のための記法をIBMが対話型のプログラミング言語として修正し実装したものです。当時は⍳{iota}や⍴{rho}など特殊な記号を入力するためのAPLキーボードがあったそうです。

APL-keyboard

今ではAPLフォントの記号はすべてUnicodeの中で定義されています。
先月開催したサイボウズ・ラボユース冬の合宿では、林拓人さんが筑波大学の図書館から借りてきたAPLの教科書があったので少し斜め読みしてみました。それで、APLの記号の使い方が大体わかったので、今回の謹賀新年Golfをしてみることにしました。

まずは91文字のAPLプログラム。

11×((3⊖5 o↑1⌽(1 o⍴⍳o)∊3 o)+1⊖5 o↑1⌽(2 o⍴⍳o)∊3 7 o)+1-((5 o⍴0,⍳27)∊o(o+10))∨(5 o⍴⍳o)∊2×⍳o←13

 
 11 11 11 0 11 11 11 0 11 0 11 11 11
  0  0 11 0 11  0 11 0 11 0  0  0 11
 11 11 11 0 11  0 11 0 11 0 11 11 11
 11  0  0 0 11  0 11 0 11 0 11  0  0
 11 11 11 0 11 11 11 0 11 0 11 11 11

こんな感じで上のAPLの1行プログラムを実行すると、5×13のマトリクスで表現された 2 0 1 2 という 0 1 の数列が出力されます。バイナリアンになった気持ちで、0は空白、11はドットで塗り潰す、という心の眼で実行結果を見てください。今年の西暦2012に見えますよね?

■■■□■■■□■□■■■
□□■□■□■□■□□□■
■■■□■□■□■□■■■
■□□□■□■□■□■□□
■■■□■■■□■□■■■

もうちょっと数列の作り方を工夫すればコードが短くなるかな、と思ってGolfしたのがこちら。67文字。

11×1+(8⌽1⊖5 o↑2 1⍴1)-(⍵+3⌽⍵←4⊖5 o↑3 3⍴7⌽5<⍳9)+5 o⍴¯2⌽(o⍴⍳o←13)∊2×⍳4

 
 11 11 11 0 11 11 11 0 11 0 11 11 11
  0  0 11 0 11  0 11 0 11 0  0  0 11
 11 11 11 0 11  0 11 0 11 0 11 11 11
 11  0  0 0 11  0 11 0 11 0 11  0  0
 11 11 11 0 11 11 11 0 11 0 11 11 11

24文字も短くなっています!

非常に簡潔なコードですね。

APLの処理系はたくさんあるのですが、openAPLという処理系がオープンソースで公開されていて、Ubuntuでも何とか動かすことができました。

openAPL

しかし、X11のAPLフォントとキーバインドの設定がよくわからなかったので、結局はWindowsで動作するAPL処理系の一つNARS2000でプログラムを作成しました。林さんも合宿中はこの処理系を使ってAPLプログラミングを楽しんでいました。

■APLによるFizzBuzzとLifeGame (林拓人さん作)

APLによるFizzBuzzとLifeGame (林拓人さん作)

林さんは合宿中、自分でFizzBuzzやライフゲームのコードをフルスクラッチから書き起こしていて、かっこよかったです。

林拓人さんによるAPLプログラミング紹介

というわけで、今年の元旦は未来のプログラミング言語として評価の高いAPLの書き初めでした。

Javaアプレットとして動作するAPLetteという冗談のような名前のプログラムもあるそうです。ただ、こちらはAPLフォントによる直接入力ができないので、ASCIIテキストの記法で入力してあげる必要があります。

プログラミング言語Jの記法に馴染めなかったという人も、APLの記号ならわかりやすく理解できるかもしれません。温故知新のAPL。ぜひ、みなさんも楽しいAPLライフをお過ごしください。

2011年12月10日 (土)

BlackHat AbuDhabi 2011 壮行会(セキュそば前夜祭)開催しました

土曜日から戸隠で開催される第22回セキュそばの前夜祭も兼ねて、Black Hat Abu Dhabi 2011 で日本人ハッカーとして発表される大居さん(@a4lgさん)の壮行会を開催しました。

BlackHat AbuDhabi 2011 壮行会(セキュそば前夜祭)

日時: 2011/12/9(金)18:30-22:00
URL: http://atnd.org/events/23175
場所: ネットエージェント本社セミナールーム
住所: 東京都墨田区江東橋4-26-5 東京トラフィック錦糸町ビル9F
ハッシュタグ: #blacksoba

6482109859_a6dfc545f4_m 6482112765_c6aee3ca64_m

Technical Talks (前半)

  1. @takesako – POC2011 different from Japanese and Korean Hacker community (10min)
  2. @Eidwinds – Action of the owner whom a smart phone shows (10min)
  3. @sonodam – On Automatic Detection of SQL Injection Attacks (5min)
  4. @takesako – How to make x86 Hangul shellcode (5min)
  5. @murachue – We won the victory in HITB CTF (10min)
  6. @07c00 – Heuristic packet analyzing (10min)
  7. @sonodam – Security camp and CTF in Japan (10min)
  8. @security4all – talk about OWASP Tokyo (5min)
  9. @sen_u – Hardening zero (pre event) (5min)
  10. @lumin - That's terrible. Smart phone packet capture (5min)
  11. @murachue – How to make it shut up Twitter client (5min)
  12. @takesako – Introduction to Return-Oriented Programming (5min)
  13. @takesako – Introduction to JIT-Spraying attacks (5min)
  14. @takesako – Hacking my MineSweeper with Win32::GuiTest (10min)

English Talks (後半)

  1. @07c00 – Heuristic packet analyzing (in English)
  2. @sen_u – Hardening zero (pre event) (in English)
  3. @sonodam – Security camp and CTF in Japan (in English)
  4. @wakatono – Real Hardware Verification by Software for Bootstrap Using TSC (in English)
  5. @Eidwinds – Action of the owner whom a smart phone shows (in English)

金曜日の夜ならネットエージェントさんの会議室が使えるかも、という話だったので、急遽前日の午後に勉強会を開催しようかという話を提案して、ANTDを立ち上げたのが12/8(木)18:15頃。告知開始してからおよそ24時間で上記トークが集まりました。本当にびっくりしました。

軽食のデリバリーを私の方で担当して、当日の司会進行は@07c00さんに全面的にお願いしてしまいました。今年はAVTokyoに参加できずネタ消化できなかった悔しさがあったためか、ここぞとばかり自分の発表ばかりしてしまい、すみませんでした。今後は自重しようかと思います。

発表者の皆さま、急な無茶ぶりの中にも関わらず英語のプレゼン資料を準備して下さって本当にありがとうございました!ゆるい進行だったので途中いろいろご不便をおかけすることもあったかと思いますが、突然のお願いにもかかわらず気持ちよく対応していただきましてありがとうございました。

今後また、Black Hat で日本人スピーカの人が出てきたらこのような壮行会的なことを開催しようと思いますので、#blacksoba の次回作をご期待ください。ネットエージェントの社員の皆さま、会場の準備・後片付けも最後まで本当にありがとうございました!

2011年12月 2日 (金)

第53回プログラミング・シンポジウムでx86 JITコンパイラの脆弱性について発表します

今回思い切って情報処理学会の第53回プログラミング・シンポジウムにて「x86 JITコンパイラ上で任意コードを実行する方法」という題目の発表をすることになりました。

発表の背景

2011年2011年3月31日に設立したサイボウズ・ラボユース新屋さん鈴木さんの作っているプログラムの成果が結構形になってきたため、そのお披露目と学生引率も兼ねて、今回自分もサーベイ論文を書いて応募してみました。特に新しい未知の脆弱性というわけでもなく、JIT-Sprayという現在のドキュメントフォーマット攻撃でよく使われている既知の手法をDEPとASLRの攻略という観点から8ページで日本語で解説したものです。英語の解説記事はBlackHatのような国際セキュリティカンファレンスの発表資料などでいっぱいあるのですが、日本語でJIT-Sprayに関してまとまった記事を見かけなかったので自分で書いてみることにしました。今回の発表に際し、応募時に情報処理学会に著作権譲渡しているので、最初の1ページ目のアブストラクトのプレビューだけ少し紹介します。

x86 JITコンパイラ上で任意コードを実行する方法

おそらく大学を卒業して以来、10年ぶりにLaTexを使って論文を書いたと思います。図が思うように配置されず、\vspace*{3mm}とか少し使ってしまいました。すみません。

第53回プログラミング・シンポジウム(情報処理学会)

日程
2012年1月6日(金) 11:30 受付開始
2012年1月6日(金) 13:30 開会
2012年1月8日(日) 12:10 閉会

会場
ニューウェルシティ湯河原 (〒413-0001 静岡県熱海市泉107)

参加申込締切:11月25日(金) 12月6日(火) 延長しました

参加申込締切が12月6日(火)に 延長されていますので、発表プログラムに興味のある方はぜひ参加登録してみてください。宿泊費込みの参加費用がかかりますが、会場は熱海のホテルです。 プログラミング・シンポジウムは今回生まれて初めての参加となりますが、どうぞよろしくお願いいたします。

JIPDEC「情報化白書2012」発刊

昨日12月1日「情報化白書2012」発刊記念シンポジウムのパネルディスカッションに参加してきました。ご来場いただいた皆さん、ご質問いただいた皆さん、登壇者の皆さんありがとうございました。

「情報化白書2012」発刊記念シンポジウム
日時:2011年12月1日 木曜日
会場:ラフォーレミュージアム六本木(六本木ファーストビル 地下1階)

JIPDEC New STAGE 講演2(45分) 「クラウドコンピューティングのセキュリティの“今”」

情報化白書2012にもご寄稿いただいているNICTの滝澤さんやIIJの加藤さんをお招きし、「震災とIT、クラウドとセキュリティ」と現在注目を集めているキーワードの背景と最新動向を解説していただきました。

4:20
~15:05
講演1(45分)
「災害時に役立つITとは ~東日本大震災の教訓を踏まえて~」

2011年3月11日に発生した東日本大震災は、大規模災害に直面して本当に役に立つITのあり方を、深く考えさせられる契機となりました。本講演では、講演者が研究開発を推進してきた災害時ITの具体例に基づき、災害対策を含む安心・安全な社会を実現するために必要なITの課題を考えます。
独立行政法人情報通信研究機構(NICT)
社会還元促進部門 技術移転推進室
マネージャー 
滝澤 修
プロフィール:
1987年、郵政省電波研究所(現:独立行政法人情報通信研究機構(NICT))入所。 2000年から災害時ITの研究開発に従事。2006年から2011年3月まで防災・減災基盤技術グループリーダー。現在は研究開発成果の技術移転業務に従事。博士(工学)。防災士。
15:10
~15:55
講演2(45分)
「クラウドコンピューティングのセキュリティの“今”」

利用が進むクラウドコンピューティングですがセキュリティに関する不安感は未だに根強く、普及を阻む要因の一つとなっています。本講演では白書の内容を元にしてクラウドに用いられている様々な要素技術を紐解くとともに、従来と異なる管理上の特性を解説します。さらに、クラウドセキュリティの一般的な動向についてもご紹介します。
株式会社インターネットイニシアティブ(IIJ)
セキュリティ情報統括室
シニアエンジニア 
加藤 雅彦
プロフィール:
1995年豊橋技術科学大学大学院工学研究科知識情報工学専攻修了。修士(工学)。 1998年株式会社インターネットイニシアティブ入社。 日本ネットワークセキュリティ協会幹事、調査研究部会長、日本クラウドセキュリティアライアンス幹事。
16:00
~17:10
パネルディスカッション(70分)
「生活情報化とセキュリティ」

我々の普段の生活を支える「生活情報化」は、時代や周囲を取り巻く環境によっていろいろな形に変容していきます。しかし、「生活情報化」はつねに安全・安心に利活用できることが基本です。先の東日本大震災や、昨今の情報セキュリティに対するさまざまな脅威により、その安全・安心が脅かされている現状を踏まえて、「情報化白書2012」執筆者の皆様、および会場にご参加の皆様を交えて、それぞれの立場からの「生活情報化」に見られる変化と実態、また情報セキュリティをとりまく様々な変化と我々の生活とのつながり、などについて、ディスカッションしたいと思います。
モデレータ:
サイバー大学教授(情報化白書専門家委員会委員長) 
安田 直
パネリスト:
サイバー大学准教授(情報化白書専門家委員)
園田 道夫
株式会社NTTデータ(情報化白書専門家委員)
宮本 久仁男
サイボウズ・ラボ株式会社(情報化白書専門家委員)
竹迫 良範
ゲストパネリスト:
独立行政法人情報通信研究機構(NICT)
滝澤 修
株式会社インターネットイニシアティブ(IIJ)
加藤 雅彦

(敬称略)

主催はJIPDECさんで、今年4月に一般財団法人に移行し、12月にオフィス移転を実施されます。

旧:(財団法人)日本情報処理開発協会 →新:(一般財団法人)日本情報経済社会推進協会

福島原発に投入された唯一の国産ロボットQuince君 パネルディスカッション(70分) 「生活情報化とセキュリティ」

今回、私は情報化白書の専門家委員の末席に招聘され、新しい白書の構成諸々を委員会として検討してまいりました。 情報化白書は歴史ある白書で、昭和40年からコンピュータ白書として発刊を続け、現在で43冊目となります。 今年は翔泳社から出版となりました。

刊行:  2011年11月17日 
書名:  「情報化白書2012 激動の時代の情報化」
編著者:一般財団法人日本情報経済社会推進協会(JIPDEC)
予価:  6,825円(本体6,500円+消費税5%)
ISBN:  9784798125121
発行所:株式会社翔泳社

「情報化白書2012」目次
http://www.jipdec.or.jp/publications/hakusho/2012/mokuji.html

情報化白書2012 各章要旨
http://www.jipdec.or.jp/publications/hakusho/2012/youshi.html

東日本大震災の影響により、国内企業の3分の1が今年度 IT 予算の見直しに着手
今後の IT 投資意欲は弱含みも、プロジェクトの中止・停止は一部にとどまる
―「企業 IT 利活用動向調査」の速報を発表―
http://www.jipdec.or.jp/pdf/ov/press/press_20110627.pdf

私も検索エンジンの章で、一部寄稿していますので、ぜひ1社に1冊おそろえください。

2011年11月 1日 (火)

エンジニアの未来サミット for students 2011開催中

10/29(土)技術評論社×サイボウズ共催、日本マイクロソフト協賛による「エンジニアの未来サミット for students 2011」の第1回目が開催されました。

エンジニアの未来サミット for students 2011

早速ですが、以下で第1回のレポートと録画が公開されています。

  1. 技術評論社レポート:今後のIT業界はどうなる?どう乗り切る? 「第1回 エンジニアの未来サミット for students 2011」
  2. Ustream.tv録画:エンジニアの未来サミット for students 2011 ゲスト:まつもとゆきひろ氏(Ruby開発者)「10年後のプログラミング言語」
【イベント概要】

名   称: エンジニアの未来サミット for students 2011
時   間: 第1回 10月29日(土)13時~16時
       第2回 11月19日(土)13時~16時
       第3回 12月10日(土)13時~16時
会   場: サイボウズ 東京本社
参加費用 : 無料
募集対象 : 各回将来エンジニアを志望する学生100名
主   催: 株式会社技術評論社、サイボウズ株式会社
協   賛: 日本マイクロソフト株式会社
内   容: 特別講演及びパネルディスカッション

世界を変えた技術者たちからIT業界を担う皆さんへ

今年は東日本大震災や巨大台風など大きな災害が相次ぎ、世界経済も混乱するな ど、社会は激動の時代を迎えています。災害時においても迅速な情報交換を促進 し復興をサポートするITサービスが次々と立ちあがったように、ソフトウェアエ ンジニアは未来を変える大きな力を秘めています。未来のIT業界を担うエンジニ ア志望の学生にとっては、実際にエンジニアとして働くということはどういうこ とか、学生時代に身につけておくべきスキルは何か、これから日本の会社はどう なっていくのか等、経験者の方から学びたいことが様々あるのではないでしょう か。本イベントはIT業界に影響をもたらした先達と共に学生の皆さんがエンジニ アの未来について考えるきっかけを提供します。

■第1回 10月29日(土)

特別ゲスト:まつもと ゆきひろ (「Ruby」開発者)
テーマ:「10年後のプログラミング言語」

・ 学生時代に勉強しておいた方がいいプログラミング言語について
・ 10年後に流行るかもしれない新しいプログラミング言語の未来
・ 10年経っても現場で残っているプログラミング言語とは?

■第2回 11月19日(土)

特別ゲスト:小飼 弾 (アルファブロガー)
テーマ:「エンジニアと会社の新しい関係」

・ 日本発のITサービスで世界に挑戦する人たちへのエール
・ エンジニアによる起業と会社経営はうまくいくのか
・ Perlとオープンソースコミュニティについて


■第3回 12月10日(土)

特別ゲスト:國中 均 (JAXA 宇宙科学研究所 宇宙輸送工学研究系 教授)
テーマ:「はやぶさ探査機搭載イオンエンジンが切り拓いた未来」
・ 「こんなこともあろうかと」が実現した瞬間とは?
・ 宇宙開発と10年以上の未来を見据えた技術者の魂について
・ はやぶさプロジェクトでソフトウェアが役立った重要性

國中均教授は、10月1日に公開された映画『はやぶさ/HAYABUSA』にてホリプロの 鶴見辰吾が扮する喜多修のモデルとなったイオンエンジン開発担当責任者です。 はやぶさは2003年にJAXA宇宙科学研究所が打ち上げた小惑星探査機で、数々の困 難に見舞われながらも小惑星イトカワへの着陸と試料採取を成功させ、7年後に 回収カプセルを無事地球に持って帰るという世界初の偉業を成し遂げました。 困難と思われたプロジェクトの成功の裏には、こんなこともあろうかと二重三重 の事前対策を施しておいたハードウェアの技術と運用中に制御プログラムを柔軟 に変更できたソフトウェアの力が必要不可欠でした。特別講演では映画では描写 されなかった数々の出来事と技術的な裏話を交えながら、エンジニアが作り出す 明るい未来についてパネルディスカッションする予定です。

参加者募集中

10月に続いて11月、12月と続いて開催されますので、興味のある方はぜひお申し込みください。 学生さんが対象となっていますが、社会人招待枠もあるそうなので、詳細は確認してみください。

YAPC::Asia Tokyo 2011 で Acme::MineChan を発表してきました

毎年恒例のPerlの大祭YAPC::Asia Tokyo 2011ですが、今年はちょっと趣向を変えて「Acme::MineChan」というマインスイーパを自動で解くプログラムを発表してきました。

お急ぎの方はこちらLT版の録画を

最終日2日目のLightning Talksの一番最後に少し時間をもらって簡単なデモをさせていただきました。

Perlで無理ゲーム攻略(1秒でマインスイーパを解く)

以下の録画の9:00ぐらいからデモを開始していて、途中1秒でマインスイーパを解けていますが、これはたまたま(マグレ)です。事前にいくら試しても早くて3秒2秒ぐらいだったので、本番で運が良かっただけでした。

元々応募していたのは「Perlで無理ゲーム攻略」という20分の発表で、Win32::GuiTest や Win32::Screenshot などのモジュールを利用して、Windows上で動作するゲームを自動でプレイするPerlプログラムを作成する方法について解説しました。 Windowsには元々キーボードやマウスを操作するAPIがあるので、それをPerlから利用してアプリケーションの操作を自動化しよう、という趣旨の発表でした。 スクリーンキャプチャを利用すれば、どんなアプリでも自動化できる、ということで、一番わかり易そうな例としてWindows付属ゲームのマインスイーパを攻略してみました。

マインスイーパの上級(爆弾99個)を37秒でクリアしたときのスクリーンショットです。

minesweeper hard mode (37sec)

Windows付属のMinesweeperにはXyzzyという有名なチート方法があるのですが、今回それは利用していません。 純粋にスクリーンキャプチャからパネルの状態を画像マッチで判別して、どの場所をクリックして解いていけばよいかをプログラミングしています。

ベストトーク賞2位(副賞:Mac mini)

I got a Mac mini! Mac mini (Core i5 + OS X Lion)

YAPC::Asia 2011 ベストトーク賞2位の副賞として Mac mini をいただきました。 今まで Mac の環境自宅で使ったことなかったので、WindowsだけでなくMac環境も自動化するべくしっかり活用させていただきたいと思います。ありがとうございます。 しかし事前に公表されていた副賞のスペックは2.7GHz Dual-Core Intel Core i7、8GBメモリ、HDD 500GB、MacBook Air SuperDrive付 ということだったのですが、当日受け取ったMac miniはCore i5のモデルでした。詳細を確認しようかと思ったのですが、最近はAppleは細かいモデル番号からスペックを検索できなくなってるんですね。おかしいなーと思って中身を確認してみたら、ちゃんとCore i7が入っていました!すみません!一番いい装備で頼まれていました!どうやらパッケージの印刷がCore i5だけだったようです。私の勘違いでお騒がせしました。 モニターは自宅のLCD2690WUXI2が使えそうだったので、細かいことは気にせず、新しくMac用のキーボードとワイヤレスマウスを入手できたので、活用させていただきたいと思います。 今まで自宅でMac環境を使ったことがなかったので本当に嬉しいです!

VNC::MineChan (by gugod)

Hackathonで一緒になったgugodは、自分でVNCプロトコルをハックして Auto-solve Minesweeper via VNC を開発していました。 台湾の繁体字バージョンのMinesweeperの画面です。

動画はMacからVNC経由で操作しているデモです。使っている画像マッチモジュールが違うため少し動作は遅いようですが、理論上Win32以外のOSでもVNC Serverが動けばリモートで自動化することができることがわかりました。

Acme::MineChanの公開について

Acme::MineChanは部品の画像を元にマッチングしてパネルの状態を把握しているのですが、それにマインスイーパをキャプチャした画像ファイルが含まれているため再配布は一旦停止しています。 gugodにはHackathonでその件を聞かれたので個別にソースコード一式を手渡しました。一番大変だったのは8のパネルの画像を出すことでした。あと、Windows7のマインスイーパはまだ攻略していません。 画像にグラデーションの処理がかかっているので、厳密な画像マッチでは対応できないためでした。 今回攻略したのはWindows95/XP付属のマインスイーパと、チート対策が施されたMinesweeper Clone 2007です。 今後、時間があれば曖昧マッチで画像位置を割り出せるようなPerlモジュールの開発をしてみようかと思います。 興味のある人は声をかけてください。

素敵なまとめ(英語)

こうして世界中のPerlハッカー達と技術交流できるYAPC::Asiaは大変素晴らしいイベントだと思います。運営・発表・参加していただいた皆さん、本当にありがとうございました!