メモりメモる

ハトいエンジニアのアメリカ生活と技術のメモ。

2泊3日の超濃密高エネルギー温泉合宿。情報科学若手の会(#wakate2012)へ行ってきた。

f:id:hatyone:20120915141947j:plain
情報科学若手の会とは、学生・若手研究者・社会人と情報科学に携わる人々が職種を超えてディスカッションと交流するイベントです。
伊東温泉の旅館で2泊3日の合宿形式で行われました。

とても雰囲気の良い温泉旅館で、プロフェッショナル・コネクターの勝屋 久さん、さくらインターネット社長の田中 邦裕さんの招待講演や、未踏最年少採択者の矢倉さん、topcoderのレッドコーダーとしても有名な秋葉さんの特別講演など、様々なお話を聞くことができました。


ご飯をみんなで食べる時や夜セッションの時には、本当に沢山の人と馬鹿話から技術話まですることが出来て本当に楽しかったです。

f:id:hatyone:20120915185621j:plain
時折、"ガチ勢”という単語をちらほらと耳にするのですが、それだけ研究や技術に情熱をかけてる人が今身近にいるのか!と思うとテンションが高まります。

参加者の層は、言では言い表せなくて、学生だったり、社会人だったり、社会人ドクターだったり、おおむね島根高専生だったり、topcoderのレッドコーダーだったり、特殊な高校生だったり、ロックフリーだったり、女帝だったり、そんな感じでした。

あと意外で嬉しかったのが、山口正栄記念奨学財団の奨学生時代に一緒だった方との再会でした。


  • ナマの知識・技術がいっぱい

会場のネットワークがあまり安定せずブラウジングなどし難い状態もあったのですが、逆に"この環境をどう乗り切ろうかー"みたいな気分で楽しんでました。
f:id:hatyone:20120917234027p:plain
色々な方に聞きながら、野良IRCサーバを立ててみました。
ネットワークにつながらずgoogleで検索できなくても、そこら辺の誰かに聞けば教えてくれるような人々が集まっていたというのが若手の会の素敵な点です。


  • 色々思ったこと

どんなに敗北しても勝つまで研究してるし、勝っても研究し続けてる姿。かっこいいの一言では表せない物凄さを感じました。
様々な方と出会って話して良かったなぁで終わるのもいいけれど、悔しいなーって感じられるほどの才能と能力に出会ってしまった刺激は大切にしていきたいです。
人数がとても多いのに、ほとんど進行がつまらず、凄いなと思いました。
幹事の皆さま、本当にありがとうございました。

  • 次回予告

次回より、幹事として参加させていただくことになりました。
このような空気感を本当に大切にして、人生のターニングポイントの演出をしていけたら素敵だなって思ってます。


  • 余談

旅館の近くにある、日本一短い横断歩道らしいです。
f:id:hatyone:20120917121714j:plain

音のデザイン。10年続けてそれっぽくなったかもと感じた作曲の話。

f:id:hatyone:20120826190510p:plain

久しぶりに色々と漁っていたら、2003年頃の自分の音楽を発掘し、色々な気分になりました。

 2000年、中学へ入り、国際交流の企画で中国へピアノ演奏しに行くのをきっかけに、親から1台のPCを買ってもらいました。
Yahoo!のジオシティーズでhtmlをモゴモゴと書いて、自分のホームページを作ってみたり、BBSのperlをいじるようになって、自宅サーバーをやってみたり。
そんな傍らで、PCで作曲(DTM)をずっと続けていました。

特に、舞台・動画・ゲームを引き立てるBGM作りを続けてきました。


 一番はじめに作った頃は「cherry」というフリーソフトでMIDIを打ち込んでいました。
高価な外部音源など持っておらず、はじめはPCにデフォルトで入っていたGM音源でした。


  • 欠点を生かした音楽の方向性

f:id:hatyone:20120826190901p:plain
かなり初期の頃。
割と出来が良い!と自分で確信していた音楽を人に聴かせた際に、「なんだか眠くなる」と言われてショックを受けたことがあります。

 ピアノを演奏する時は物凄く身体が動いたり音で主張する性格なので、「メロディで主張するのが得意じゃないかも…」と自分でも考えるようになって、多少凹みました。
その後、「それなら、主張する必要がない分野(=BGM)での音作りをすればいいじゃん」と開き直って、現在に至ります。

 ゲームをプレイするときはシーン別(例、戦闘シーン・フィールド移動シーン・アレなシーンなど)、テレビドラマを見る時もシーン別に使用されている楽器・音階をひたすらメモってました。
そして頭の中で、「現在の状況にBGMをつけてみた場合は?」みたいな想像をしていました。
結果として、「主人公が、衝撃事実が発覚して凹み、その後立ち直っていく途中な感じ」とか「回想している感じ」のそれっぽい音を即興で作れるようになりました。


  • とにかく色々作ってみる。色々、考えて作ってみてる。

f:id:hatyone:20120826192623j:plain
 雰囲気を引き立てる音作り。
 BGM特化を目指して、結果として色々な音楽が生まれました。

 高校に入ると、同人ゲーム・ラジオドラマに音楽を提供したり、放送局のコンテスト作品に音をつけたり、コミケに数曲ずつ参加させていただいたり。
 大学に入ると、劇団で音楽を作らせてもらったり、自分の音楽中心でラジオドラマCD出したり。
 最後には、上の写真のホールで行われた舞台の音楽を全曲担当させてもらって、作曲者として活動させていただくことも出来ました。
 社会人になってからは、コンペのPVで音も使ったり、プロダクトの効果音を作ったりしました。


  • 音の持つ空気感のデザイン

f:id:hatyone:20120826192030p:plain
・ドラマティックな気分のときは黒鍵の和音。
・平素な音は、白鍵の単音。
・ダウンロードするようなものであれば音が下がって、その逆にアップロード・送信であれば音が上がる。
そんな感じのマイルールが沢山もごもごと蓄積されてきました。
"雰囲気"の音には、様々なルールがあると私は思ってます。



昔の曲↓
天地遊々 by hatone(Takako Ohshima) on SoundCloud - Create, record and share your sounds for free

最近の曲↓
株式会社イイデイ(社歌2) vibee by hatone(Takako Ohshima) on SoundCloud - Create, record and share your sounds for free



何もかもが我流すぎるけど、振り返ってみると、音がそれっぽい雰囲気になってきた気がします。


昔の曲聴いて「ギャー黒歴史ー!!!」と隠したくなる気持ちよりも、「あー、頑張ってたね」と思えます。
厨二病もこじらせきってしまえば作品と言い切れちゃうかなって思います。

そろそろDTMや楽典をちょっとだけ勉強してみようと思い、本を買いました。
ニコニコ動画VOCALOIDの歌を公開してみるとかそういうのやってみたいなーと考えることもあるのですが、身のまわりのプロダクトや世界観を引き立てる音をこれからも作っていければいいなと思いました。

ふと気づいたら、10年かーと思ったのですが、
情熱を情熱だと気づかないくらいが、結果として長く頑張り続けるのにはちょうど良いのかも、と思いました。
次の十年後も恥ずかしくないようなモノづくりがしていきたいです。

iOSアプリ開発ではじめるOpenCV再入門

iPhoneアプリでOpenCVを動かそう!としたら、色々と苦戦したり茨の道だったので、そのレポートを書きます。
※Xcode4.3,SDK5.1で開発しました。
f:id:hatyone:20120707161640j:plain

  • 参考にしたサイト

「OpenCV iPhone」で検索すると、真っ先にヒットするページです。
yoshimasa niwa - iPhoneでOpenCVを使う方法
こちらを参考にさせていただきました。
上記サイトで配布されているビルド済みライブラリをインポートしてそのまま使おうとすると、最新SDKとバージョンが違うので動きませんでした。


  • ライブラリをビルドする準備

1.サンプルコードをダウンロード
上記のページのコメント欄に、stephanepechard/iphone_opencv_test · GitHubというリポジトリがあるので、こちらを使ってみます。

% git clone git://github.com/stephanepechard/iphone_opencv_test.git
% cd iphone_opencv_test
% wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.2/OpenCV-2.2.0.tar.bz2/download
% tar xjvf download

2. cmakeをインストール
cmakeでビルドをするので、ない場合はインストールしましょう。

% brew install cmake

3.OpenCVをiOS SDKでビルド出来るように、パッチを当てます

% cd OpenCV-2.2.0
% patch -p1 < ../OpenCV-2.2.0.patch

4.opencv_cmake.shを書き換える

if [ -z "$SDK_VERSION" ]; then
 SDK_VERSION="5.1"  //SDKのバージョンを5.1にする
fi
//Xcode4.3からSDKの場所が変わってるので、それに合わせる
DEVELOPER_ROOT="/Applications/Xcode.app/Contents/Developer/Platforms/${TARGET_SDK_NAME}.platform/Developer"
SDK_ROOT="${DEVELOPER_ROOT}/SDKs/${TARGET_SDK_NAME}${SDK_VERSION}.sdk"

 
  

  • ライブラリをビルドしてみる

iOSのシュミレーターと実機は、CPUが異なるので、2つ分ライブラリを用意します。
1.シュミレーターのライブラリ

% cd .. 
% mkdir build_simulator
% cd build_simulator
% ../opencv_cmake.sh Simulator ../OpenCV-2.2.0
% make -j 4
% make install

2.実機のライブラリ

% cd .. 
% mkdir build_device
% cd build_device
% ../opencv_cmake.sh Device ../OpenCV-2.2.0
% make -j 4
% make install

 
  

  • Xcodeのライブラリのパスを設定

Library Search Pathsで、シミュレータと実機向けのパスを指定します。
f:id:hatyone:20120707175339p:plain
 
  

  • freamworkの追加

Accelerate.frameworkというフレームワークがOpenCVでは必要となるので追加します。
f:id:hatyone:20120707175943p:plain


  • 早速OpenCVを使ってみる

yoshimasa niwa - iPhoneでOpenCVを使う方法を参考にして、UIImageとIplImageの相互変換することが出来ます。


UIImage -> lplimage

// NOTE you SHOULD cvReleaseImage() for the return value when end of the code.
- (IplImage *)CreateIplImageFromUIImage:(UIImage *)image {
	CGImageRef imageRef = image.CGImage;

	CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
	IplImage *iplimage = cvCreateImage(cvSize(image.size.width, image.size.height), IPL_DEPTH_8U, 4);
	CGContextRef contextRef = CGBitmapContextCreate(iplimage->imageData, iplimage->width, iplimage->height,
													iplimage->depth, iplimage->widthStep,
													colorSpace, kCGImageAlphaPremultipliedLast|kCGBitmapByteOrderDefault);
	CGContextDrawImage(contextRef, CGRectMake(0, 0, image.size.width, image.size.height), imageRef);
	CGContextRelease(contextRef);
	CGColorSpaceRelease(colorSpace);

	IplImage *ret = cvCreateImage(cvGetSize(iplimage), IPL_DEPTH_8U, 3);
	cvCvtColor(iplimage, ret, CV_RGBA2BGR);
	cvReleaseImage(&iplimage);

	return ret;
}


lplimage -> UIImage

// NOTE You should convert color mode as RGB before passing to this function
- (UIImage *)UIImageFromIplImage:(IplImage *)image {
	NSLog(@"IplImage (%d, %d) %d bits by %d channels, %d bytes/row %s", image->width, image->height, image->depth, image->nChannels, image->widthStep, image->channelSeq);

	CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
	NSData *data = [NSData dataWithBytes:image->imageData length:image->imageSize];
	CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)data);
	CGImageRef imageRef = CGImageCreate(image->width, image->height,
										image->depth, image->depth * image->nChannels, image->widthStep,
										colorSpace, kCGImageAlphaNone|kCGBitmapByteOrderDefault,
										provider, NULL, false, kCGRenderingIntentDefault);
	UIImage *ret = [UIImage imageWithCGImage:imageRef];
	CGImageRelease(imageRef);
	CGDataProviderRelease(provider);
	CGColorSpaceRelease(colorSpace);
	return ret;
}


注意点として、 IplImage->UIImage と変換する際に、cvCvtColor(src_image, dst_image, CV_BGR2RGB);のようにBGRからRGBに変換しなければ、変な色として出力されてしまいます。
気をつけましょう。


こんな流れで、iOS上でOpenCVを扱うことが出来ます。

//画像を読み込む
UIImage *src_image=[UIImage imageNamed:@"sample.png"];
//OpenCVで使われるIplImage形式に変換
IplImage *cv_image = [self CreateIplImageFromUIImage:src_image];

//-----ココらへんでOpenCVな処理を書く

//BGRになっているのでRGBに変換
cvCvtColor(cv_image, cv_image, CV_BGR2RGB);

//IplImageをUIImageへ変換
UIImage *dst_photo = [self UIImageFromIplImage:dst_image];


  • ハマったポイントと対処方法

1.配布されていいるライブラリそのまま使っても動かない…
SDKのバージョンが違うので、大人しくビルドしましょう

2.画像が表示されない…
→cvCreateImage(cvGetSize(src_image),IPL_DEPTH_8U,3);みたいな部分で、画像のサイズやチャンネル数が一致してるか確認しましょう

3.色が、なんか…すごく変…
→RGBとかBGRとかそこら辺を疑いましょう


[追記]
dandelion (dandelion1124) sur Twitterさんからリプライを頂きました。
OpenCV 2.4.2からはiOS用frameworkが公式に配布されているそうです。
frameworkとして生成できるので、導入がとても簡単そうです。
Installation in iOS — OpenCV v2.4.9 documentation

Web業界へ入ったので、陶芸教室でろくろをまわしてみました。

f:id:hatyone:20120529115247j:plain
Web業界へ入ったので、せっかくならろくろをまわしてみたい!と思いました。

ちなみに発端となった記事はこちらです。
WEB業界ろくろ回しすぎワロタ:ハムスター速報


id:luminさんからWeb業界の人向けろくろを回すオフ 【新宿】 : ATNDというイベントのお誘いをいただき、嬉々として参加してきました。
ありがとうございますm(__)m

今回はこちらの陶芸教室へ行ってきました。
陶芸教室・体験 東京・新宿の「COM陶芸教室」


f:id:hatyone:20120529132402j:plain
先生から、ろくろを回すコツを最初に習います。
「膝に腕をぴったりと固定して、手をぶらさないように」「水をなるべく足しながら……」などレクチャーを受けます。


f:id:hatyone:20120529132411j:plain
ろくろを回す際の基本の手はこんな感じです。
あのポーズは、なかなか見れず。


f:id:hatyone:20120529132419j:plain
先生が作るととても簡単そうに見えます。



f:id:hatyone:20120529132424j:plain
私もチャレンジします。



f:id:hatyone:20120529132437j:plain
案外難しいです。
力を入れすぎたり、水が足りないと、このように崩れます。



f:id:hatyone:20120529132433j:plain
二時間の中で2つ器を作ることが出来ました。
釉薬(うわぐすり)を選ぶことで、器に好きな色をつけることが可能です。
白や黒、ベージュなど、様々な種類がありました。



(一ヶ月後!)



f:id:hatyone:20120529132505j:plain
3週間ほど器を乾燥させた後に釉薬を塗って焼いて出来上がりです。
とても綺麗な出来上がりで、大満足です。


  • ろくろのあのポーズ

ろくろを回す際は、基本的には右手を添えるようにして器を形作っていきます。
あのろくろポーズは、器が広がりすぎた際に幅を小さくする整形するために使われるポーズで、なかなかやらないようです。
陶芸教室の先生があのポーズで整形しはじめたときに「おおおおお!」と参加者の歓声が湧き、そして困惑した先生のなんとも言えない表情は忘れられません。

はじめてのハッカソン!クックパッド開発コンテスト24でvibeeを開発した話。

f:id:hatyone:20120518234807j:plain

東京生活を開始して、はや1ヶ月。
地元ではIT系イベントがなかなかなかったので、「IT系勉強会に参加してみたい!ハッカソンしてみたい!」とうずうずしていました。
そんな中で、クックパッドの開発コンテスト24を発見し、チャレンジしてみました。
f:id:hatyone:20120518234535p:plain


今回のコンテストのお題は「一日の終わりを楽しくするもの」ということ、
審査方法が"「生活をより豊かにした課題解決型サービス」としての完成度を重視"と書かれていました。
現在4人のエンジニアでシェアハウスをしていて、その住人である@miyay,@kyoro353,私の3人でvibeeを開発しました。
ちなみにもう一人の子は、別プロダクトで開発コンテストへ参戦していました。


  • 「シンプルな体験」の提案

"シンプルな機能以上に、どんなシンプルな体験が出来るか"をコアに考え、プロダクトを考えました。

f:id:hatyone:20120518235435p:plain

修学旅行の夜。
消灯された部屋の中で眠れずに、隣の布団の友達をつついてみたり、笑い合ったり。
「特別な一日の終わり」には、寝たいような、でも眠ったらもったいないようなワクワク感がありました。

あのような体験が、とてもとても私には楽しかった記憶があり、
「普通ならわびしくなる一日の終りを、しょーもないことでクスッと笑える体験」を目指しました。

この地点で、午前12時ちょっと前。
@miyaiが朝起きて@kyoro353を起こし、@kyoro353が@hatoneを起こしたのが、朝9時
目覚めた地点でお題が発表されていて、うわぁぁぁぁぁとなった記憶があります。
3人で遅めの朝食をとりにいき、ラーメンを食べながらブレストしました。


  • ユーザ像の追求

お題が出されて何を作るか考える際、どんな人物が抱えるどんな問題を解決するか設定するのは、とても重要だと思います。そこで私達は、客観的に見た自分自身をユーザとして、本当に使い続けたいプロダクトを3人で強く意識しました。
f:id:hatyone:20120521114743p:plain
実装する機能をリストアップしたのですが、実際の開発中も、「そんな機能、本当に使うの?」「そのエフェクトないと、さすがに使いづらくない?」「そんな発音時間だったら、使えない。4分の1にしよう」と、プロダクトを考え続けながらブラシュアップしていきました。

実際のコーディングを開始したのが、午後2時半くらい。rackhub(http://rackhub.net/)のユーザ座談会の裏側で開発していたのですが、とても賑やかでした。デバッグでスマホをブンブン振っていたのですが、その癖から、コンビニでうっかりエナジードリンクburnをぶんぶん振っちゃって、「それはテロだよ!!!」とつっこまれた記憶があります。


  • 世界観のトータルデザイン

単なる実装は誰にも出来るからこそ、どう描くか重要であるといつも考えています。環境さえ整えられれば、誰にでも開発出来るのがプログラミングの素敵なところだと私は思っています。
f:id:hatyone:20120521121127p:plain

限られた時間の中で、最良のプロダクトを開発をするのはコンテストだからこそ当たり前だと思っていて、その先をちょっと意識していました。
そこで、「人の心に響くようなシンプルなプロダクト、そして、それを物語る世界観自体を成果物にしてみたい」とコンテストの前から、3人で話していました。
そして表現の形として、ストーリー仕立てのショートフィルムPVを選びました。
実際にPVを撮影しはじめたのは4時位。「朝日が登る前に!」を合言葉に、夜のシーンから撮影していきました。PVに映り込むスマートフォンの指し示す時間が、早朝で、色々物語っているとおもいます。


  • 開発したもの

vibee - 言葉のいらないパジャマタイムコミュニケーションツール -
http://vibee.rackbox.net


  • 謝辞

@miyay。(第3回クックパッド開発コンテスト24に参加しました! - Weblog書くよ!
はじめてのtitanium、はじめてのcoffeescriptとはじめてだらけでしたが、画面エフェクトなどをやってくれたり、PVではナチュラルな演技力を発揮していて凄かったです。

@kyoro353。
開発途中は、ストイックになりすぎて言葉がきつくなるときもありました。ごめんなさい。PV撮影する際は、名カメラ&編集テクを存分に発揮して下さって、とても素敵でした。

3人で、頭の中で描いているものを共有し、わいわいと開発することが出来て、本当に本当に楽しかったです!

帰国してサイバーエージェントに入社したので、ちょっと新人研修について語ってみる

3月に帰国し、4月より株式会社サイバーエージェントへ入社しました。
在米中にサンフランシスコで履歴書を提出して面接を受け、突然となりましたが3月に内定を頂き、2012年度新卒として入社することになりました。

f:id:hatyone:20120405221124j:plain

本来であれば大学へ戻り修士2年へ進級する予定でしたが、色々と私なりに考え、ごく一部の皆様にご相談した上で進路選択をさせて頂きました。
当分の間は東京在住となりますので、お気軽にご飯など誘っていただければとても嬉しいですm(_ _)m


  • 新人研修ってどんなことやっているの?

研修では、基本的なビジネス知識からはじまり、様々な事を多岐に渡って"生の声"で学べるカリキュラムが充実しています。
研修内容は基本的に秘密なのですが、とても考えられた研修だなーと感じながら日々受講しています。

f:id:hatyone:20120408091125j:plain

特に凄かったのが、伊東で行われた2泊3日の宿泊研修。
宿泊研修では、2日間の中で特定テーマに関する新規事業提案を会社役員へ行うチームバトルを行いました。
チームメンバは平均6人で、そのメンバーでプロダクトの提案、ユーザ規模の見積もり、収益方法などなど考えて提案していきます。


  • 宿泊研修で私がやったこと

グループワークでは、新規事業のコアとなるプロダクトの提案、お金周りの推定、タイムキーパーをやりました。
f:id:hatyone:20120411134713p:plain
お金周りは私が最も不得意なところで、ユーザ数がどれだけ増加するのか?などアテをつけるのがとても難しかったです。
同期で、グラフをモリモリ作っている子に「その根拠は?」など聞いてしまいました。
規模感を知るって大切だな、と感じています。


  • 入社前~宿泊研修後で感じている変化

正直、今までは他人に対して考えていることを伝えることがかなり苦手な方でした。
f:id:hatyone:20120411135107p:plain
伝えるべきと考えた発言が「意識高い(笑)」と揶揄されるのも何処となくイヤでしたし、帰国後には「ここは日本。アメリカとは違う!」や「見下されている感じがする」と言われたことがあり、何も生み出すことのないやりとりが辛く、あまり自分を出さないようにと尽くしていました。

入社前はかなり殻に篭っている精神状態だったので、なんとかしたいと考えてます。
新人研修では「目標逆算力」「上昇結束力」「強み自走力」という3つの研修ポイントがあるので、「伝えるべきと感じた言葉は、全て伝えよう」と決意してみたりしました。

殻に篭らない、むしろ殻をブチ破ろうと考え、アメリカでの経験や今までの技術バックグラウンドについて全力で発言してみました。
ものすごく真剣に聞いてくれる人々と、どうやれば良くなるか?事業になるか?を全力で議論することが出来ました。


  • その結果…

32チーム中8チームが決勝プレゼンへ進出できたのですが、私たちのチームもその1つになることが出来ました。
入賞は悔しくも逃してしまいましたが、 悔しくなる程度に本気になっていたのだなと後から気がつきました。


  • もう恐がらない

宿泊研修で自分を出し過ぎたのではないか?と研修後の休日は、わりとガクブルしていました。
研修中にチームメンバからの振り返りがあったのですが、メンバの反応が非常に良くて、「ああ、自分を出してよかった……」と感動と安堵を覚えたことが印象深いです。


  • 特色ある研修内容

研修はグループワークが中心ですが現場の人による講演・宿泊研修での事業提案など、数字を見ることが多い研修です。
興味深いのは、このブログの記事を書いたこと自体が研修の一環だということかもしれません。