危うく歯磨き粉を便器に沈めるところだった。またはGoogle Developer Day 2010 Japan(なぜか京都会場)当日編

リーマンショック・コンフィデンシャル。面白かった。

# アフィなんとかってーのは貼らないので、興味がある人は適当に買って欲しい。
# だいたい、Amazonには在庫がなさそう。

もう今更感たっぷりではあるものの、一応更新する。
さて、「第一旭」で焼豚のたれをこぼしたり、PiTaPaエリアでSuicaが使えないことに、
打ちひしがれたり、寝る前に歯を磨こうとして歯磨き粉のチューブを便器に沈めそうに
なったりと色々あったが、無事にgdd2010jp当日を迎えたのであった。




まず、入り口で参加証と「Google日本語入力」の冊子をもらった。うれしい。
(そういや、「Google日本語入力」の冊子まだ読んでないな。)




それで会場に入ったものの、うっかり荷物を全部持ってきてしまったので、置き場所に
困った。丹波口駅のコインロッカーに預けるべきだった。

そいでもって肝心の中身なのだが、もう1週間以上過ぎてるし、もっとしっかりと
まとめているところもあるだろうし、適当に感想等を箇条書きする。

  • HTML5って思ってた以上にいろいろ出来るのね。
  • Chrome Web Store: Webアプリケーションを見つけやすくする。
  • 音声入力API for Androidおもしろそう。
  • Androidアプリの性能向上: 推測しないで測定して遅さの原因を見つけろ。
  • Androidアプリでは難読化とかしてライセンスを保護しなきゃならんのか。
  • 有名アプリの威を借る。
  • 標準UI部品も悪くない。

お昼は東京ではChrome丼とかあったらしいが、京都ではお弁当だった。写真は取り
忘れたが、そこそこ豪華なお弁当だった。
ちなみに、お弁当を受け取るときに参加証にはんこを押してもらうのだが、そのはんこが、



Androidのアレだった。

ブレイクアウトセッションが終わってからは、京都ではトークセッションということで、
会場となった京都リサーチパークの紹介があったり、京都GTUGの紹介があったりした。
gddでサテライト会場を設けたのは今回が初めてだったらしいが、それを京都GTUGが
誘致したというのが驚きだった。

全体を通してみると、途中、東京との中継回線が切れるというトラブルはあったものの、
Googleの技術などろくすっぽ触っていなかった私にとって、興味を持つきっかけとなった
ので、これに懲りずに来年以降もサテライト会場を設けて欲しいと思う。
gddを口実に遊びに行けるというのもあるし。

来年はDevQuizとかもっと真面目に取り組もう。

焼豚のたれをこぼしに行ってきた。またはGoogle Developer Day 2010 Japan(なぜか京都会場)BootCamp編

N700系グリーン車最高。Wifiも案外快適だった。

話は失業前にさかのぼる。OSのインストールの合間にTwitterを眺めていたら、
Google Developer Day 2010 Japan」とやらがあるらしいことを知った。
しかも参加するためにはDevQuizとやらに取り組まなくてはならないらしく、
面白そうだったので軽い気持ちで登録した。

のだが、最初の1、2問で飽きてしまい、そのまま放っていた。

そいでもって突然失業してしまい、もう割とどうでも良くなっていたのだが、
ある日突然、Googleからメールが来た。

なんと、「Google Developer Day 2010 Japan」(長ったらしいので以下、gdd2010jp)
に参加できるという。大丈夫かおい。最初の2問しか解いてなかったぞ。ありがたい。

という訳で、まず前日のBootCampから参加するために京都へ向かったのである。

ん?京都へ向かったのである。


.....いやほら秋の京都っていいでしょ。京都行ったことなかったし、なんか、
名古屋方面から電波を受信したし。
(確か「東海道新幹線に乗れ!キキーッ!」とか言ってたと思う。)

で、京都に着いて、時間があったので伏見稲荷大社にお参りをして、再就職を
願ってから会場へ向かったのであった。

またまた前口上が長くなってしまった。しかも下らない内容である。
それで、京都会場のBootCampは京都GTUG主催でGoogle App Engineのハンズオンと
Androidのハンズオンの2種類だった。友人からは、

「行ってみたら高難易度で(;^ω^)となる」

Tweetされたが、どちらも初心者向けであり、冴えない私も安心なのである。
ちなみに、私はAndroidのハンズオンを選択した。

内容は本当に初心者向けであり、"Hello, World!"から始めてAndroidの基礎を学び、
その後Google Mapsとの連携、カスタムUIの作成という流れであった。
ちなみに、途中でブリリアントサービスさんの「ウキウキView」というGoogle App
EngineとAndroidを利用した位置情報サービスの紹介があった。「感情と位置情報を
結びつける」サービスらしい。どこからそういう発想が湧いてくるのだろうか。

話は戻るが、さすがに初心者向けということもあり、調子に乗って説明に先んじて
課題を進めていたのだが、Google Mapsとの連携でつまずいた。

なんだか、ヒープ領域がどうのとかエラーを吐いたり、layout下のXMLファイルにケチを
付けたりと全く要領を得ない。

チューターの方にも色々とサポートしていただいたものの、結局、解決することは
できなかった。どうやらEclipseが"Helios"(3.6)であるのが良くないらしい。
「らしい」というのは、会場で"Helios"でも問題なく動作させている方が居り、完全に
再現するというわけではなかったのである。

結局、BootCampの前日に「別にHeliosでもいいだろー」とGoogleの忠告を聞かずに
(AndroidのサイトにはHeliosは避けるように書いてあった。)インストールした自分の
せいで、思いがけず(;^ω^)となってしまったのであった。

# ちなみに帰宅してから"Galileo"(3.5)で試したところ、問題なく動作した。
# やはり先人の言うことは聞くべきである。

結局、Google Mapsとの連携については諦め、カスタムUIの作成に移ったが、これに
ついては時間の都合で説明だけとなった。

カスタムUIの説明の中で気になったのは「機種毎のUIの差異に気をつけなければならない」
という点である。ガラケーでは機種毎の差異など当たり前であり、そのせいで全数テスト
(つまり片っ端から全機種でアプリの動作チェックを行なうのである。)などという不毛な
作業が生じるのだが、Androidの様なプラットフォームはこのような不毛さとは無縁かと
思っていたので、意外であった。質疑応答の際にこの点について質問したところ、全数
テストを回避するために、Androidについて詳しくなる必要があるとの回答だったが、
それはそれで大変である。

およそ半日であったが、Androidの基礎から実際に開発されている方の苦労まで色々と
学ぶことが出来、早くAndroidアプリの開発を始めたくなった。

BootCampを終え、友人から「第一旭」のラーメンと焼豚がおすすめと聞いたので、
食べに行った。確かに美味しかったのだが、途中で盛大に焼豚のたれをこぼしてズボン
を汚してしまい、焼豚風味のまま翌日のgdd2010jpに参加することとなってしまったの
であった。

無題

酔った勢いで書き殴った。当然、反省はしていない。



 アタシの名前はSIer。大手電気メーカーのシステム開発子会社。利益第一で丸投げ体質のIT企業♪
アタシがつるんでる友達は系列子会社の開発部隊、中国で開発してるオフショア。訳あって大手通信企業グループの一員になってる国内パートナー。
 友達がいてもやっぱり市場はタイクツ。今日も開発部隊とちょっとした単価変更で口喧嘩になった。
企業同士だとこんなこともあるからストレスが溜まるよね☆そんな時アタシは一人で大手町を歩くことにしている。
得意先への挨拶回りってやつ?新規案件の開拓とも言うかな!
 「あームカツク」・・。そんなことをつぶやきながらしつこい引き合いを軽くあしらう。
「??さーん、ちょっと話聞いてくれない?」どいつもこいつも同じようなセリフしか言わない。
ベンチャー企業はカッコイイけどなんか薄っぺらくてキライだ。もっと等身大のアタシを見て欲しい。
 「すいません・・。」・・・またか、とセレブなアタシは思った。シカトするつもりだったけど、
チラっとRFPを見た。
「・・!!」
 ・・・チガウ・・・今までの案件とはなにかが決定的に違う。プロフィッタブルな感覚がアタシのカラダを駆け巡った・・。
「・・(カッコイイ・・!!・・これって運命・・?)」
インフラ系企業だった。客先常駐で要件定義させられた。「キャーやめて!」戦略的価格をきめた。
「ガッシ!ボカッ!」デスマーチになった。ソリューション(笑)


もっと上手くかける人大募集w

第8回GPUコンピューティング(CUDA)講習会に参加してきました。

CUDA(クーダと読むらしい)である。

気に食わないやつをぼこぼこにしながら「お前なんかCUDA!」って。

はい、ごめんなさい。
CUDAとはNVIDIAGPGPU技術のことである。GPGPUについては適当に調べて欲しい。
要するに、最近のGPUは性能がいいのでゲームだけじゃなくて他のことにも使おうぜ
ということらしい。

そいでもって、例によってTwitterで「GPUコンピューティング講習会」というのが
あることを知り、またもやよく考えずに申し込んだ。だって、ほら諸事情により暇だし。

というわけで、東工大の大岡山キャンパスまで行ってきた。ちなみに今日ではなく、
9/13(月)の話である。今日行ってきたのはハローワークだ。

いつも通り勢いだけで申し込んでしまったので、ついて行けるかどうか心配だったが、
その日の講習会は初心者向けだった。冴えない私も安心である。
ちなみに初心者向けの講習会とパフォーマンスチューニングの講習会を繰り返し開催
しているらしいので、参加を希望される方はGPUコンピューティング研究会で確認して
欲しい。

さて、その日の講習会の内容であるが、まず松岡先生が「TSUBAME2.0 がリードする
GPUベクトルスーパーコンピューティング」ということでGPUコンピューティング
必要となった背景とTSUBAMEでの取り組みについてお話しされ、次に青木先生が
「Introduction to GPU Parallel Computing」というお題でGPUコンピューティング
の概念をたとえ話を交えてお話しされ、最後に丸山先生の「CUDAプログラミングの
基礎」で実習に取り組むというものであった。ちなみに皆さん言うまでもなく東工大
先生である。

本当に「GPGPUってなんですか」という私のような初心者でも安心して参加できる
講習会だった。(但し、当然プログラミングの知識は必要である。)

というわけで、にわかGPUプログラマとなった私は、帰宅して早速PCにCUDAを
インストールしたのであった。

ん?CUDAで何するのかって?何しようか。

第26回仮想化実装技術勉強会に参加してきました。

いっそのこと「軽卒」とか「無謀」とかいうタグを作ろうか。

改めて説明するまでもなく、またやらかしてきた。
今回は「仮想化実装技術勉強会」である。しかも「第26回」なので、私のような
冴えないやつなどお呼びじゃないのである。

第26回仮想化実装技術勉強会

上記のリンク先を見てもらえれば分かる通り、今回は「BlackHat USA 2010」と
「DefCon 2010」で発表した話をしていただいた。
ちなみに「DefCon」は聞いたことがあったものの、「BlackHat」は今回初めて
知った。有名なセキュリティの国際会議らしい。

話者は、産総研のNguyen Anh Quynhさん。発表は全て英語であった。

事前に話者を確認していなかったので、会場に着いてから少々嫌な予感がし、
いざ発表が始まると、予想通り英語だったので軽くうろたえた。

それでも、なんとか発表の内容を多少は理解できたので、以下にまとめる。
あくまで「多少」なので、あまり信用しないで欲しい。

BlackHat USA 2010の発表内容: ステルスデバッガ

ステルスデバッガとはなんぞや?
「ステルス」なので、当然「見えない」のであるが、誰から見えないのか?

マルウェアである。

そもそも、マルウェアもプログラムであるので、静的解析(逆アセンブル
コンパイル)や動的解析(実際にデバッガで実行してみる)ができるのだが、
マルウェア作者にとっては、あっさり解析されて対策を施されるのは困る。

そこで、マルウェア作者は静的解析に対してはソースを分かりにくく記述して
対抗し、動的解析に対してはブレークポイントを無効化したり、デバッガを
直接攻撃(!)したりして対抗する。

解析する側としては、結局分かりにくいコードが出力される静的解析よりは
実際に動かしてみる動的解析の方が分かりやすいが、93.9%のマルウェア
動的解析(デバッガ)対策済みなので、一筋縄では行かない。
では、マルウェアがデバッガを検出してしまう原因は何なのかというと、

  • Windowsの場合、デバッガの存在を知らせるフラグやらAPIやらが用意
    されている。
  • デバッガがソフトウェアブレークポイントを設定する際にマルウェア
    書き換えるのを検出されてしまう。
  • デバッガのウィンドウのタイトルやレジストリ、デバイスで存在がばれて
    しまう。

であり、なぜデバッガはこのような問題を抱えるに至ったのかというと、

  • デバッガはそもそもマルウェア解析用に作られていない。
    (開発者がソフトウェアの不具合を見つけるためのものである。)
  • 開発者はデバッガを打ち負かすようなことはしない。
    (そんなことをしたら開発者自身が打ち負かされるw)

とのことである。
では、どうするべきかということで、Nguyen Anh Quynhさんのアイデアは、

「デバッガをマルウェアから見えず、手の届かない所に置く。」


とのことであり、具体的には、

とのことである。このアイデアを実装したのが「Virt-ICE」である。
「Virt-ICE」はQemuを利用して作られており、Qemu上には、

が載っており、さらにVirt-ICEモジュールは、

の2つのフレームワークから構成される。ユーザは外部のクライアントからVirt-ICE
モジュールを通じてゲストVMを操作したり、結果を取得したりする。
尚、Qemuはそのままだと遅いのでKQEMUというライブラリを追加しているとのこと。

DefCon 2010の発表内容: OS Fingerprint

「OS Fingerprint」(以下OSF)とは各々のOSが示す特徴であり、これを利用すると、
外部から対象のマシン上で動作しているOSを判別することが出来るらしい。

これの何がありがたいかというと、例えば企業等で数千台のPCを運用していて、
ある日突然、OSのセキュリティホールが見つかって対策が必要になったとする。
1台1台のPCの前へ行きOSの種類、バージョン、サービスパックを確認するのは
骨が折れるし、セキュリティホールが見つかるたびに実施するのは現実的ではない。
そこで、OSFを利用すると外部から迅速に効率よく対策が必要なPCを見分けられる
とのこと。(逆にセキュリティの甘いPCを見つけて攻撃するのにも使える。)

ここで、1台の物理マシン上に複数のVMが載っている場合のOSFを考える。例えば、
以下に示すOSFの手法を使うと考えると、

  • ネットワークを利用する。
    パケットを作成してゲストへ送信し、戻りのパケットを解析する。
    -> 最近のOSはデフォルトでファイアウォールが有効なので使えない。
    -> 遅い。1台のVMに30秒以上かかる。(同一の物理マシンで)

  • ゲストのファイルシステム情報を見る。
    -> OSとFSについて十分に理解する必要がある。(OS毎の全FS...)
    -> 暗号化されてたら?
    -> Hyper-Vの場合は?

  • メモリの情報を見る。
    -> 多くのOSを熟知する必要がある。

以上のように、不確実だったり、膨大な知識を必要としたりする。
では、どうするべきかということで、Nguyen Anh Quynhさんのアイデアは、

これを実装したものは「UFO」と呼ばれており、専用のVMとSignature
Database(各OSのレジスタの情報を記録したファイル)を用意して使用する
とのこと。

実際にデモを行なっていただいたが、デモ環境上のWindows XP SP3とLinux
瞬時に判別していた。また、Signature Databaseの情報と実際のレジスタ
差異があってもある程度推測することが出来るとのこと。(実際にWindows XP
SP3のSignature Databaseを書き換えて実行したところ、約91%の確率で
Windows XP SP3であるという結果と共にSignature Databaseとレジスタとの
差異が出力された。)
「UFO」の利点としては、

  • 完全に一致しなくともOSを推測できる。
  • 速い。
  • 高精度
  • OS Contextを操作しない。

などが挙げられていた。


以上が、今日の発表の内容であり、正確に理解できているかどうか非常に不安では
あるものの、とても面白い発表であった。
尚、残念ながら、今日のこの発表がNguyen Anh Quynhさんの日本での最後の発表
とのこと。

最後になりましたが、Nguyen Anh Quynhさん、スタッフの皆さま、参加者の皆さま
大変お疲れさまでした。

失業とNSStringの改行とスクリーンショット

昨日、会社をクビになった。
さっそく、再就職先を探し始めたいところだが、離職票が会社からハローワーク
送られるまで1週間はかかるらしい。

と、言う訳で「技術力があるから大丈夫」と言われながら会社から突き落とされた
私はiPadアプリケーション開発のお勉強をすることにした。

と言っても単にiPhone SDK アプリケーション開発ガイドのサンプルコードを写し
ているだけだが。

それで今は"PageDemo"とやらを写していたのだが、何故かNSStringで改行が効か
なかった。サンプルコードに"\n"(バックスラッシュ+n)と書いてあったので、"¥n"
(円記号+n)と書いたのだが、何故か以下のようになってしまう。

とりあえず文字列をあれこれといじりまわしてはみたものの、全く変化がなかったので、
苦し紛れに「NSString 改行」でぐぐってみたところ、以下のTweetが出てきた。


tori-X on Twitter: "開発メモ:NSStringの途中に改行を入れるときは¥r¥nではなくて\r\n!。"\"はoption(alt)押しながら¥キー!。"

なんと、ちゃんと「バックスラッシュ」は「バックスラッシュ」として記述しなくては
ならず、「Optionを押しながら¥キー」で「バックスラッシュ」が出るらしい。
分かんねぇよ。でも、殆どの開発者にとって、この程度は基本なんだろうなorz
で、無事に改行が効くようになった。

ちなみに、Macでウィンドウ単位のスクリーンショットを撮るときは、

Command + Shift + 4 + Space

らしい。面倒。

早く仕事見つからないかな。

普通のサラリーマン猛威をふるう

おはようごSEIL。(左記が読めない場合、普通のサラリーマンではない。猛省するように。)

軽率だった。

何がって、x86勉強会(8/21開催)第五回 カーネル/VM探検隊(8/22開催)である。
そりゃあ、自分でも背伸びしているという認識はあった。まあ、ついて行けないだろうと。
改めて言うまでもなく、当然、ついて行くことすら出来なかったのだが、あまりにも
その、なんだ、アレゲとでも言うべきか、まあ、正直なところ何だかよく分からない。

万が一、ここまで読んだ読者が居るとしたら、せっかく勉強会に参加してきたのに、
技術的な内容が一切無いじゃないかと思われるかもしれないが、私の能力では内容を解説
できないので、ここから先も技術的な内容は一切無い。ご容赦願いたい。

つーか、文句があるなら自分で確認してみろ!私の言わんとしてることが分かるから!
(確認した上で私の言わんとしていることが分からない方は、普通のサラリーマンです。)

x86 勉強会 HD VoD by Silverlight Smooth Streaming
第5回 カーネル/VM 探検隊 VoD 配信 by Silverlight Smooth Streaming
(視聴にはSilverlight最新版が必要です。普通のサラリーマンだったら既に入っています。)

それじゃあ、私はplan9portのインストールがあるので、この辺で。

あ、スタッフ、発表者、参加者の皆さま大変お疲れさまでした。
懲りずにまた参加しますので、どうか石を投げないでください。

普通のサラリーマンになれるかな?
普通のサラリーマンwiki