はかますたいる!きょろの技的雑記

井上恭輔(@kyoro353)の私的かつ技的な日記です。米国サンフランシスコで暮らすエンジニアです。

新生Flash「ネギ振りカウンタ」とネギ振りグラフ

こんにちは、きょろです。
「春眠暁を覚えず」とは良く言ったもので、ここ数日は朝も夜も眠くてたまりません!
コーヒーの大量摂取で眠気を抑えながら、仕事から帰って少しずつmixiアプリを改良する日々です(笑)


さて、先日OpenSocialのお勉強を兼ねてお遊びで作ったmixiアプリ「ネギ振りカウンタ」ですが、なんと気づけばインディーズアプリランキング1位!利用者はまさかの1900人超えという、信じられないくらいの大盛況を頂くことができました!!
オープンβの参加者比で言うと、現時点で約2.5人に1人がご利用頂いている計算になります。


【ネギ振りカウンタ】
http://platform001.mixi.jp/view_appli.pl?id=680


またmixiアプリをご利用で無い方は前回のエントリーをご覧頂ければ幸いです。


mixiアプリで「はちゅね」さんのネギ振りアプリ作ってみたよ!】
http://d.hatena.ne.jp/kyoro353/20090408/1239213305


私もいまだに何が起こったのか全く信じられません!
まさか30万回以上もネギが振られる日がくるなんて…(笑)


ネタで作ったヤシガニな習作アプリでしたが、それなりに愛情をこめて作った作品ですので、皆様に使って頂けて心から嬉しく思います!
ご利用頂いたみなさま、どうもありがとうございました!!


下記サイトでも取り上げて頂いたみたいですので、この場を借りてご紹介させて頂きます。


【ねとらぼ:「ネギ振りミク」から「やる夫時報」まで mixiアプリ、200以上公開中】
http://www.itmedia.co.jp/news/articles/0904/17/news058.html

【出た!mixiで初のボカロなmixiアプリ「ネギ振りカウンタ」が登場】
http://vocaloid.blog120.fc2.com/blog-entry-3273.html


実はアプリをリリース後、少し忙しくバタバタしていたため、作者自身、全くネギ振りアプリを開いていなかったのです(笑)
ネギ振りアプリのサーバは私のアパートに設置してある自宅サーバなのですが、「最近どうもルータの光り方がおかしいな…」と疑問に思い、mixiアプリオープンβを開いてびっくり!
なんと利用者が1000人を突破していたのです。


「こ…こんなお恥ずかしいアプリを1000人以上の方々に使って頂いているなんて申し訳なくてたまらない!!(≧_≦)」


と思い、もう少し見栄えの良いものにバージョンアップさせたいという気持ちが一気に強くなりました。

f:id:kyoro353:20090423000642p:image

次はFlashで作るしかない!!と考えた私は、そこからFlashの勉強をはじめ、見よう見まねで酷いコードを書きながら、なんとか動く「新生はちゅね」を作りリリースさせて頂きました。
(丁寧にFlashのHowToを教えてくれたid:takimoどうもありがとう!!)


当初はバグを仕込んで障害を起こしてしまいましたが、利用者の方々からの暖かいご報告とご協力のおかげでバグを解消し、なんとか安定動作に持ち込むことができました。


Flash版リリース後はリアルタイム更新機能など、地味な改良を続けながらUIの向上に注力しました。
すると、ネギ振りの上昇率がどんどん上がっていきました。

f:id:kyoro353:20090423002049p:image


上のグラフは時間経過とネギ振り状況を解析したものです。
色々な出来事が起こりましたが、それらが面白いくらい反映されているグラフになっています。
特にFlash化によるUIの向上は劇的な変化を与えてくれたように思います。
皆様にとって少しでもネギが振りやすく、そして、楽しめるようになっていれば幸いです。


これだけの多くの方々にアプリを利用して頂き、作者としてこれ以上嬉しいことはありません!!!
この場を借りて皆様に、心から厚く御礼申し上げたいと思います。
どうもありがとうございました!!!


現状では単なるネタアプリの枠を出ないと思いますので、今後はネギ振りコミュニケーション(ネギニケーション)に特化したもっとソーシャル的な要素やゲーム性を追加していこうと思います。


精一杯がんばりますので、今後とも、どうぞよろしくお願いいたします!

mixiアプリで「はちゅね」さんのネギ振りアプリ作ってみたよ!

本日オープンβテストが開始された「mixiアプリ
なんとmixi上で動くウェブアプリを、個人の開発者が自由に、しかも超簡単に作ることができるようになるんです。
仕様もOpenSocial0.8に完全準拠、オープンスタンダードな仕様なので技術情報も盛りだくさんです。
夢がひろがりんぐですね!!


って事で、早速お遊びで自分もアプリを作ってみました!


f:id:kyoro353:20090409024438p:image


題して『ネギ振りカウンタ』!
これでもニコニコ技術部の端くれとして、誰よりも早くmixi上で取り合えずなんとかしてネギを振っておく必要、いや、使命があったのです。

f:id:kyoro353:20090409024437p:image

こんな感じでHome上で「はちゅね」さんを表示させることができます。
もちろん、「ネギ振りカウンタ」を設置している他人のプロフィールを見に行っても表示されます。
「はちゅね」さんをクリックすればネギを振ります。
ネギを振った回数は全世界で共通カウント中。最後に振った人の名前が残ります。


…でっていう(笑)


ごめんなさい、つまらなくてもいいので、取り合えずネギ振ってみたかったんです。


ご興味のある方はこちらから、ぜひお試しください。


【ネギ振りカウンタ】
http://platform001.mixi.jp/view_appli.pl?id=680

説明引用:

世界初?!あなたのHomeで「はちゅね」がネギを振るよ☆
ニコニコ技術部員の端くれとして、
mixiアプリでもとりあえずネギ振させておきます!!
mixiアプリ一般β開放初日中にネギ振りを行う目標達成。
ネギ振りは今日も止まらない!

そうそう、オープンβテスト中なので、アプリを使うには以下の手順を踏んでくださいね。

オープンβテストに参加するには、まず、「mixiアプリ オープンβ」というコミュニティに参加してください。
コミュへの参加がテストユーザの参加条件です。
参加はこちらから! → http://platform001.mixi.jp/view_community.pl?id=3217244


次に、http://platform001.mixi.jp/home.plという、いつもとはサブドメインが違う版のmixiにアクセスしてください。
オープンβテストでは、こちらの環境でのみアプリを試してみることができます。


上段のメニューに「アプリ」ってボタンが追加されていれば成功です!
詳しくは
『画像しりとり、Pacman--「mixiアプリ」で遊んでみた』CNET
http://japan.cnet.com/news/media/story/0,2000056023,20391306,00.htm
とかを参考にしてみてね!!


ネギ振りカウンタは
OpenSocialGadgetにjavascript
サーバサイドにFreeBSD7.0、Apache2、PHP5、MySQL、memcached
クロスドメイン通信にJSONP
という技術仕様で実装しております。

他にも面白いアプリがどんどん登場中です。
作るのも超簡単なので、ぜひ興味のある人は試してみてね!

新卒最後の夜

こんばんは!

新社会人の皆さんは明日が入社式でしょうか?
おめでとうございます!!

さて、ルーキーたちの社会への旅立ち目前にしながら、
私は今日で「新卒」を卒業でございます。

新卒の1年間というのは、本当に多くのことを学べる、
とても素敵で大切な一年間でした。

何も変らなく思えた日々も、この1年という時間で見れば、
自分でいうのも恥ずかしい限りですが、
びっくりするくらい成長できていることに驚きます。

技術の面、人間としての面。
感性の面でもしかり。

思えば色んなことがありました。

上京、就職、同期との出会い、Perlちゃんとはじめた、研修、先輩方々のの出会い、
プラズマ買う、東京での新しい人間関係、いつもそこにある秋月&秋葉原、
山梨へのバイク旅行、円形脱毛症、初リリース、初サバゲー、
ODF、マイコンはじめた、勉強会の主催、初窓の杜、プロコン、育成PJ始動、
勉強会ビデオライブラリ構築着手、大型案件、高専カンファレンス、クリスマス、
後輩11人泊まりに来る、トイレ詰まる、巫女さんコンテスト、バレンタイン、
炎上、エンジニアブログデビュー、萌香、高難易度案件着手、
Web2.0中の人ナイト、イマジンカップ審査員、etc.....

本当にたくさんの思い出、体験から、
多くのことを学んだり、新しいことに気づくことができました。

欠勤もゼロ。1年間毎朝起きて会社に通えました。
これは地味に学生時代では考えられないことw 
当たり前だけど頑張った。
体調を崩したり病気になったりもしましたが、
仕事に影響を出さないように、そこそこ体調管理もできました。

貯蓄も目標クリアです。
1年間の生活費を計算してみましたが、ちゃんと堅実に生きてました。
きつい目標だけど、しっかり達成。
俺よく頑張った。おめでとう。この調子で頑張れ!

新卒1年目という身でしたが、
多くの行事や仕事で外で発表する機会を設けさせて頂き、
沢山の人との出会い、交流、人脈を作ることができました。
交換した名刺の数も大雑把にカウントしてみたところ、約190枚!
2箱分ほぼ消費しました。
無意味に配った記憶はないので、それだけ多くの出会いがあったんだなぁと実感。

今夜は、1年前の今日と同じように「もやし丼」をつくり、
半年ぶりに湯船にお湯をはり、リラックス。
まったりとくつろぎながら次の1年のことを考えていました。

やる気は1年前と全く変わりありませんが、
大きく違うこともあります。

それは自信と、達成するための方法の理解。

1年前はなんだかよくわからないけど、取り合えずやりたいことがあって、
がむしゃらにやって、よく失敗し、学んだように思います。
今はやりたいことが明確で、それをどうすれば実現できるか、
何が必要で、何が足りていないか。
足りない部分はどうやったら補えるか。手に入れることができるか。
その辺がしっかり見えてきたように思います。

成長を大切にするのは今までどおり。
そして今年は目に見える形で、手に触れる形で、
しっかり成果を出していこうと思いました。

皆様、1年間新卒として手厚くご指導頂き誠にありがとうございました!

まだまだ未熟な私ですが、
来年も1年、仕事にプライベートに、
皆様どうぞよろしくお願いいたします!!!

Image::Magickによるサムネイル生成高速化

Image::Magickは汎用的な画像処理を行えるという利点があるが、速度的にはあまり早くない。
たとえば大量にアップされる一眼レフなどで撮影した大きなサイズのJPEGからサムネイルを生成するというような状況においては、処理速度がボトルネックになってしまうという問題がある。
ところが、どうやらインスタンス生成時にsizeオプションを指定するだけで処理速度が劇的に向上するらしい、ということを同期のエンジニアrai氏から聞いたので試してみた。

ベンチマーク内容
元画像 : http://photozou.jp/photo/show/228995/18479223
(元画像4272x2848を使用、カメラ小僧Gさんの画像をお借りします)
生成画像: 横160pxに固定し、アスペクト比を維持

サムネイル50枚の生成時間を比較する。

■ 検証コード

#!/usr/bin/perl  
use strict;  
use warnings;  
  
use Benchmark qw(timethese);
use Image::Magick;

timethese(50, {
    im_normal     => 'im_normal(    input_file  => "miko.jpg",
                                    output_file => "out_normal.jpg",
                                    width       => 160,
                                    );',
    im_optional   => 'im_optional(  input_file  => "miko.jpg",
                                    output_file => "out_optional.jpg",
                                    width       => 160,
                                    );',
});

sub im_normal {
    my %param = @_;

    my $input_file  = $param{input_file};
    my $output_file = $param{output_file};
    my $fix_width   = $param{width};

    my $image = Image::Magick->new();
   
    $image->Read($input_file);

    my ($width, $height) = $image->Get('width', 'height');

    my $n_width = $fix_width;
    my $n_height = $height * ($n_width / $width);
   
    $image->Thumbnail( width => $n_width, height => $n_height );
    $image->Write($output_file);
   
    return;
}

sub im_optional {
    my %param = @_;

    my $input_file  = $param{input_file};
    my $output_file = $param{output_file};
    my $fix_width   = $param{width};

    my $image = Image::Magick->new( size => $fix_width.'x'.$fix_width );
   
    $image->Read($input_file);

    my ($width, $height) = $image->Get('width', 'height');

    my $n_width = $fix_width;
    my $n_height = $height * ($n_width / $width);
   
    $image->Thumbnail( width => $n_width, height => $n_height );
    $image->Write($output_file);
   
    return;
}


■ 実行環境
Intel Core2Duo 2.6GHz / Memory 2GB / FreeBSD7.0R


■ 実行結果

%perl benche.pl
Benchmark: timing 50 iterations of im_normal, im_optional...
im_normal: 40 wallclock secs (35.78 usr +  3.70 sys = 39.48 CPU) @  1.27/s (n=50)
im_optional: 10 wallclock secs ( 9.70 usr +  0.28 sys =  9.98 CPU) @  5.01/s (n=50)

早っ!!?
インスタンス生成時に引数を加えるだけで速度4倍です。
出力画像のサイズが決まっている場合はsizeオプションを指定したほうが賢明ですね!!


【追記】
同期のhiroki氏と話していて出た話題で、「size指定をすると作業用キャンバスのサイズが限定されるので早くなるんじゃね?読み込みが高速化するんじゃね?」という意見が出たので$image->Readのみ同条件下でベンチしてみた。

■実行結果

%perl benche.pl 
Benchmark: timing 50 iterations of im_normal, im_optional...
im_normal: 37 wallclock secs (33.87 usr +  3.30 sys = 37.17 CPU) @  1.35/s (n=50)
im_optional:  8 wallclock secs ( 7.70 usr +  0.12 sys =  7.82 CPU) @  6.39/s (n=50)

おおお!やっぱりReadが激速化してる!!
逆に言えば縮小の計算コストってそんなに高くないのかもね(笑)

ミクシィ謹製のオンラインコーヒーメーカー「萌香たん」

あまり多くは語れませんがw

■ミクシィエンジニアブログ
オンラインコーヒーメーカー「萌香たん」とはじめるドキドキ☆コーヒーブレイク
http://alpha.mixi.co.jp/blog/?p=386

f:id:kyoro353:20090228012644p:image

オリジナル壁紙も配布中!!

また、ミクシィ上にはこんなコミュを発見。
見ず知らずの方が作ってくださるとは、非常に嬉しいですね。

【オンラインコーヒーメーカ・萌香】
http://mixi.jp/view_community.pl?id=4087183

音楽の記憶

音楽には記憶が宿るのだということを、最近常々感じる。

ニコニコ動画の登場で、
聞く分にはグレーな感はあるものの、
レンタル屋などの普通の方法ではなかなか手に入りにくい、
往年のゲームやアニメの楽曲を高音質で聞くことができるようになった。


自分にとっての往年とは、まさに高専低学年のとき。


もっとも感受性が豊かで、
もっとも繊細で、
もっとも傷つきやすく、
毎日に感動し、
万事を身体全体で受け止めることができた。


技術力の無さが悔しく、
だけど、きっと努力でどんなものでも作れると頑なに信じ、
ただ我武者羅に、
寝ても覚めてもモノを作っていた日々。


創作行為のみが正義と信じ、進んで睡眠時間を削った。


VisualStudioでコードを書く自分に酔い、
Photoshopに触れていることが楽しく、
LightWaveのショートカットを覚えるのが幸せで
AfterEffectsで作れないものなんて無いと思っていた。


ものづくりが、心から楽しかった。


そんな時、いつもパソコンに向かう僕はヘッドホンをして
ゲームやアニメのサントラをBGMに
日が昇るまで作業を続けた。


今、そのとき共にあった曲を聞き返すたびに、
当時の情景、視界、心が躍る気持ち、セカイ、
そういったものたちと一緒に、
抱いていた夢を思い出す。


そのたびに、
失ったものなど何も無いと自分に嘘を付くたびに、
心が締め付けられるように苦しくなって、
目の奥が熱くなる。


僕はいつから「大人」になってしまったんだろうか。


「すべての創作は感動から生まれる」


この言葉の持つもうひとつの意味がわかった気がする。
感動を、感動で終わらせてはいけないのだ。

プレゼン力はある分野においてはキーボードが叩けるのと同じくらい当たり前のことだと思う。

仕事としてのものづくり、特にプロジェクトにおいては、感性をロジカルに相手に説明できることが重要だと思う。
裏付けるデータがあれば尚良い。
説明が苦手な人がいるのも事実だけど、説明が苦手な人は苦手な人なりの伝え方や進め方があるはずだし、それはそれで重要。
何もみんなが同じプレゼンの舞台に立つ必要なんてないじゃないか。


「下手な説明」は、説明と言う舞台においては「下手な説明」以外の何者でもない。
「面白さ」って相手に伝わって初めて面白さだと思う。
自分の脳内から出せない限り、辛いけど、それは単なるマスターベーションだよ。


出来なくても評価されるのは中学生まで、みんなを最低ラインに揃えるのは小学生まで。
能力主義や成果主義が正義なわけではないし、違う部分もあると思うけれど、せめて頑張ってる人、やりたい人、情熱を持ってる人、そういう熱量が高い人を押さえつけるのは、俺は有益だとは思わない。


社会人になるまで、これって当たり前の事だと思っていた。


もちろん自分への戒めもこめて。

オフィシャルサイト

ついに公式サイトオープンしました!

http://star.garra.jp/star/CI10wtlXxuGTL


ねーよwww


しかしこれ、すごく面白い。
目とか口とかの自動認識はすごくOpenCVについてくる正面顔画像のサンプルを使ってるような気がする。
認識のクセがとても似てる。

それにしても、こういう使い方は上手いなぁ。
ディテールも非常に凝ってて、作りこみがすごい。

前回のハンディーカムといい、最近のウェブ広告なんだかすごく面白いぞ。

SONYのハンディーカム特設サイトでボロボロ泣かされた

SONYのハンディーカムのプロモサイトでボロボロ涙が止まらなくなるくらい泣いた。
Webに泣かされるとは思ってもいなかった。
こんなに感動して泣いた広告は生まれて初めて。
しかも子供も結婚も、それすら彼女もいない自分が号泣した。
(逆にその寂しさを骨の髄から感じているからかも知れないけど)


これは本当にすごい。SONYすごい。


【Cam with me】
http://www.sony.jp/products/Consumer/handycam/camwithme/main.html


たぶん、これが単なる映像だと子供がいない自分は何も感じなかっただろうけど、●RECすることで自分の事のような体験導入感に襲われる。
彼氏ができたあたりで娘が自分の手を離れていく感覚にウッ…っときはじめて、結婚式では涙がこぼれた。
その後は涙がボロボロ止まらない。
ボロボロ泣きながら、必死に●RECを押し続ける自分。
俺は日曜の朝から本当になにやってんだ(笑)


孫ができる未来をフォロワで最後に持ってくるのも秀逸。
映像好きな人、インタラクティブコンテンツが好きな人、「このまま何も変化なく老後を迎えて死んでいくのかな」と将来結婚できるかどうか悩んでる人にはぜひ見てほしいサイト。


1分1秒も無駄にできないな。人生楽しもう。
毎日がスペシャル!!


追記:
どうやら10歳くらいのお子さんのいる知人は全然平気だったらしいとの事で、もう一度考察してみた。
たぶん、このコンテクストで語られるコンテンツは日々の生活に虚無感を感じてる人、子供ほしいなと思ってる人、0〜5歳くらいの子供がいる人にリーチしてる。なぜならキレイ過ぎるストーリーだから。童貞妄想と同じようなものか。
まさに「恋に恋する」系演出と言っても過言ではない。


また、たとえ25年間ハンディーカムを持っていたとしても、こういうコンテンツには現実世界では絶対にならない。実現不可能。
とてもアニメ演出的な表現。良い意味でベタというやつ。


だが、そこにインタラクティブ性を入れたのがとても良い。


そんな日曜日のお昼過。

mono最新の2.2をFreeBSD7にインストールしてみた。

monoはFreeBSDでは昔からなかなか一筋縄ではインストール出来ない事で有名。
VM上のUbuntuでは難なくインストールできたのだけど、やっぱりFreeBSDだと駄目らしい。
最近はmonoに関する情報もネット上に集まってきたので諦めずに少し頑張ってみた。

FreeBSDにmonoを入れた】
http://d.hatena.ne.jp/ak11/20081009

【Mono::FreeBSD
http://www.mono-project.com/Mono:FreeBSD

上記サイトを参考にportsにパッチを当てる

$ wget http://bsd-sharp.googlecode.com/files/mono-merge.tar.gz
$ tar xfz mono-merge.tar.gz
$ cd mono-merge
$ make
# make install
$ rehash
$ mono-merge

次にportsでインストール

$ cd /usr/ports/lang/mono
# make install

とすると

gmake: *** [libgiofam.la] Error 1

エラーを吐いて止まるので

FreeBSD 7.0 で cannot find -lgio-2.0 と言われる件 [FreeBSD]】
http://nakagami.blog.so-net.ne.jp/archive/c35372564-1

こちらを参考にしてglib2を再インストールする

$ cd /usr/ports/devel/glib20
# make deintsall
# make install

気を取り直してもう一度。

$ cd /usr/ports/lang/mono
# make install

キタ━━━━(゜∀゜)━━━━ッ!!
インストールできた!!!!!!!!!(≧▽≦)!!!!!

今までpackageからインストールするしかできなかったmono on FreeBSDですが、今回初めて最新版のコンパイル&インストールに成功しました。
先人の皆様に心から感謝!!

初めて2系を使ったけど、いろいろとびっくりするくらい改善されてる。
動作自体も高速になってる感じ。

インタラクティブシェルも面白い!
が、インテリセンスの無い環境でわざわざC#を選ぶメリットも無いなぁ(笑)

ちなみにシェルではこんなことができる。

%csharp
Mono C# Shell, type "help;" for help

Enter statements below.
csharp> int i;
csharp> for(i=0;i<3;i++){
> Console.WriteLine("Hello, miko!");
> }
Hello, miko!
Hello, miko!
Hello, miko!
csharp>