EC2でus-west-1にあるサーバのAMIをとってap-northeast-1(東京リージョン)に上げる方法
on 2011/10/28 11:00, under ec2 | Comment
素直にec2-upload-bundleを走らせた時に出るwarningを読めってことでした
You are bundling in one region, but uploading to another. If the kernel
or ramdisk associated with this AMI are not in the target region, AMI
registration will fail.
You can use the ec2-migrate-manifest tool to update your manifest file
with a kernel and ramdisk that exist in the target region.
Are you sure you want to continue? [y/N]
ec2-bundle-vol -d /mnt –cert $cert –privatekey $privatekey –user $accountnumber -r x86_64 -e /ebs,/mnt
ec2-migrate-manifest –manifest /mnt/image.manifest.xml –cert $cert –privatekey $privatekey –region ap-northeast-1 –access-key $accesskey –secret-key $secretkey
ec2-upload-bundle –bucket $bucketname –access-key $accesskey –secret-key $secretkey –manifest /mnt/image.manifest.xml –location ap-northeast-1
ec2-register –region ap-northeast-1 $bucketname/image.manifest.xml -K $privatekey -C $cert -n $bucketname
mbedのプログラムを自動でmbedのUSBドライブにコピーする
on 2011/10/23 23:24, under mbed, perl | Comment
mbedで遊んでいます。
jsdo.itやwonderfl.netではブラウザ上でJavaScript,ActionScript3を書いて
webサイトやFlashコンテンツを書き出すことのできる開発環境なのに対して、
mbed.orgはブラウザ上でC++を書いてmbedボード用のプログラムバイナリを書き出せる開発環境です。
さらにmbedボードはusbでつなぐとusbドライブに見えるので、mbed.orgからダウンロードしたバイナリをusbドライブにコピーして、ハードウェアリセットボタンを押すとマイコンにプログラムをロードできます。
画期的!
しかもprintfするとusbを通して /dev/tty.usbmodem* に流れてくるのでprintfデバッグが超簡単!
ところが、
ブラウザ上のエディタからコンパイル、バイナリのダウンロードは Ctrl+d ってキーボードショートカットがあるものの、
usbドライブにコピペしつつ古いバイナリは消す、という作業がめんどくさすぎたので
* Downloadsディレクトリを監視
* Remote_LPC1768.binのようなファイルが追加されたら
* /Volumes/MBEDにコピーしつつ
* 古いバイナリを削除
* growlに通知
ということをしてくれるスクリプトを書きました。

手作業でリセットボタンを押すのはとりあえず今はしょうがないかなあ
Happy MBED hacking!
iOS5の絵文字とガラケースマホ両対応サービスでどうmysqlに保存するか
on 2011/10/20 17:33, under emoji, perl | Comment
iOS5から絵文字キーボードで入力した絵文字がUnicode6になったということで、
絵文字キーボードで絵文字を入力するとどんなコードになるのか、ダンプしてみました。
この記事の最後にのっけておきます。
さて
* MySQL5.5以上じゃないと4バイトのutf8は保存できない
* iPhoneで入力した絵文字をガラケーで表示したい
という時に、どうするのがよいのでしょう?
MySQL5.5でないMySQLに何を保存するか、というところで考えるとよいのだろうか
案1)
DBには Encode::JP::Emoji の x-utf8-e4u-mixed を保存する場合
全部の入力 -> decode(’x-utf8-e4u-mixed’, $input) -> mysql(mysql_enable_utf8=>1)
出力時に encode(’x-utf8-e4u-’. docomo/kddiweb/softbank3g)
案2)
DBには HTTP::MobileAgent::Plugin::Charset を使い、 $mobile_agent->encoding->decode したものを保存
ただし入力にUnicode6絵文字が含まれる場合には
$input =~ s!(\p{InEmojiUnicode})!_unicode6_emoji_to_softbank3g($1)!eg;
_unicode6_emoji_to_softbank3g の中身は:
decode(’x-utf8-e4u-unicode’) -> encode(’x-utf8-e4u-softbank3g’) -> decode(’utf8′) -> mysql(mysql_enable_utf8=>1)
出力時には $mobile_agent->encoding->encode して出す
今までDBには案2の感じでデータがたまってるって歴史的な背景があり、
案2でいきたいが。
iOS5の全絵文字を案2の_unicode6_emoji_to_softbank3gにかけてみると、
国旗の絵文字がいくつか変換できない(参照: https://gist.github.com/1300581 )
さてどうしよう。
参考
Encode::JP::Emojiをつかってみて思ったこと
Encode::JP::Emoji の携帯絵文字コード変換マッピングまとめ
FaceDetection - Integral Image
on 2011/08/26 1:06, under facedetection | Comment
昨日、Flashや画像や音声やらいろいろ強い人とお会いするきっかけがあり、
今まで話したことが無かったので
Marilena (OpenCV顔認識のas3実装)をつくった時に感動した、
Integral Imageというアルゴリズムについて話しました。
一文で説明すると、
二次元配列で表されるデータがある時に(この場合は顔検出する対象の画像の明るさ)
二次元配列の中の矩形範囲のデータの合計を、高速に求める手法です。
発表資料を置いておきますのでよろしければ
integral_image_opencv_face_detection.pdf
計算してみるためのスプレッドシート
Integral Image Calculator
こちらの方がわかりやすいかもしれません
integral imageについて調べた
資料の中に数式が入るとどや顔の度が増しますね なおやんは寝てましたけど
UINavigationController pushViewControllerしてpopViewControllerした時のUIViewControllerのメソッドの呼ばれ方
on 2011/05/28 21:27, under objective-c, iphone | Comment
今さらながらmemo
RootViewControllerがapp.navigationControllerの先頭にある
2011-05-28 21:23:43.771 navcontrollertest[12548:207] RootViewController/viewDidLoad
2011-05-28 21:23:43.773 navcontrollertest[12548:207] RootViewController/viewWillAppear:
2011-05-28 21:23:43.775 navcontrollertest[12548:207] RootViewController/viewDidAppear:
そこにSecondViewControllerをpush
SecondViewController* c = [[SecondViewController alloc] initWithNibName: nil bundle: nil];
[ self.navigationController pushViewController: c animated: YES ];
[ c release ];
2011-05-28 21:23:47.191 navcontrollertest[12548:207] SecondViewController/viewDidLoad
2011-05-28 21:23:47.192 navcontrollertest[12548:207] RootViewController/viewWillDisappear:
2011-05-28 21:23:47.192 navcontrollertest[12548:207] SecondViewController/viewWillAppear:
2011-05-28 21:23:47.548 navcontrollertest[12548:207] RootViewController/viewDidDisappear:
2011-05-28 21:23:47.549 navcontrollertest[12548:207] SecondViewController/viewDidAppear:
backボタンを押した
2011-05-28 21:23:53.395 navcontrollertest[12548:207] SecondViewController/viewWillDisappear:
2011-05-28 21:23:53.396 navcontrollertest[12548:207] RootViewController/viewWillAppear:
2011-05-28 21:23:53.749 navcontrollertest[12548:207] SecondViewController/viewDidDisappear:
2011-05-28 21:23:53.750 navcontrollertest[12548:207] RootViewController/viewDidAppear:
2011-05-28 21:23:53.751 navcontrollertest[12548:207] SecondViewController/dealloc
viewDidUnloadは呼ばれないが、deallocはちゃんと呼ばれている。
how twitter @anywhere works
on 2011/05/15 2:26, under twitter, oauth, perl | Comment
ということでOAuth2のImplicitGrant方式(または古いドラフトではUserAgent方式)ってのはどうなってるのか実例を見ようと、twitterの@anywhereのJSのソース(http://platform.twitter.com/anywhere.js)を読んでみた。
JSがminifyされてるので JsDecoder で読みやすくしたり
ChromeのDeveloper ToolsでどんなURLにアクセスしてるのか見てさらに掘り進んでいったり。
blog.twitter.comに@anywhereがはいってるのでそこで確認してみた。
- @Twitter にマウスオーバーするとオーバーレイが出て「フォローする」ってボタンがある
- それを押すとポップアップが開き、oauth2の、Clientを認証するか?って聞くダイアログが出るっぽいURL(https://oauth.twitter.com/2/authorize?oauth_callback_url=…略)だが、まずはTwitterにログインするためのTwitterID(またはメアド)とパスワードが聞かれるフォームが表示される、ただしsubmitボタンが「連携する」になってる
- 「連携する」を押すと、リダイレクトされ、#以降に何やら入っているURLがちらっと表示された後に、ポップアップが閉じる
- 何事もなかったかのようだが、もう一度 @Twitter にマウスオーバーすると、「フォローしている」と表示される
ここでおもむろにConsoleで
localStorage.twttr_anywhere
とうつと、なにやらtokenがあるようだ。
localStorage.twttr_anywhere_expiry
というのもあって、2時間の有効期限を表して自分で無効化したりするのかな
@Twitterをフォローするリクエストは、これを使って行なわれたようだ。iframe使ったクロスドメインかな
Chrome Developer ToolsのNetworkタブに履歴が残っていたのでそれを再現すると、こんな感じ。
OAuth2のaccess_tokenのような権力をもつtokenだがAuthorizationヘッダが必要な何かみたい。
ということで、JSのみでaccess_tokenとってきたらlocalStorageにいれておいてあって、
それをフォローしたりするリクエストで使っていることがわかりました。
localStorageは
User agents must raise a SECURITY_ERR exception whenever any of the members of a Storage object originally returned by the localStorage attribute are accessed by scripts whose effective script origin is not the same as the origin of the Document of the Window object on which the localStorage attribute was accessed.
http://dev.w3.org/html5/webstorage/#security-localStorage
だからaccess_tokenをAuthzサーバからClientにリダイレクトしてきたURLの#から誰よりも早く取り出して、
localStorageに保存して、
他のスクリプトからは取れなく(window.closeなど)すれば
安全だってことでいいのかな?
yokohama.pm #7行ってきた
on 2011/05/14 1:00, under oauth2, perl | Comment
今日来てた人たちのモジュールやコードを使わせていただいているなー、
っていろんな人の顔を見ながら思った!
発表資料
yokohama.pm slide ナカマップのなにか
最後の方のコードはいろいろおかしいので参考になさらないほうがよいでしょう。
でもSocket.IOはクライアント側すごく短くかけてドメイン超えれるし魅力的だなー
なんとかしたい
なんとかしようと思ったときに、
Authorization Code方式(またはImplicit Grant方式)でaccess_token取得した後に、
そのaccess_tokenをSocket.IOのJavaScriptクライアントに渡せるとよいが、どういう経路で安全に渡すことができるんだろう。
-
The higher the anywhere.js file is on the page, the sooner it can process the access token.
ってある。
OAuth2のImplicit Grant方式では
Authorization Serverからリダイレクトされてきた時にaccess_tokenが#フラグメント以降に入ってるんだけど
それを他のJavaScriptコードとかから読み取られる前(最初のscriptタグ)にanywhere.jsがあれば
安全ってことなのかな?
上の方にanywhere.js置いてね、って書いてあるけど
スクリプト設置した人が下の方においたら、htmlの上から設置場所までの間にxssでなんか仕込めたらTwitterのaccess_tokenとられちゃうんだよね?
access_tokenの有効期限が短いってことだけどそれでいいのかな?
で@anywhere使ってTwitter認証してリダイレクトされてきたらTwitterにログイン状態で
@anywhereの貼ってあるページ上で誰かをフォローできる、ってことは
access_tokenなのか同様の力を持つものがブラウザにCookieなりlocalStorageなりで保存されてるってこと?
CSRF対策用のトークンみたいなワンタイムな感じなのかな?
わからないことが多すぎる><
anywhere.js を読んでみよう
Math::Random::MT benchmark
on 2010/08/19 12:12, under perl | 2 Comments
randのばらつき方が均等になる、という理由でMath::Random::MTが使われているようです。(身近で
macにXS版を入れようとすると
In file included from _mt.c:1:
mt.h:17: error: expected specifier-qualifier-list before ‘uint32_t’
mt.h:21: error: expected ‘)’ before ‘seed’
mt.h:22: error: expected ‘)’ before ‘*’ token
_mt.c:17: error: expected declaration specifiers or ‘...’ before ‘uint32_t’
_mt.c: In function ‘mt_init_seed’:
_mt.c:20: error: ‘uint32_t’ undeclared (first use in this function)
_mt.c:20: error: (Each undeclared identifier is reported only once
_mt.c:20: error: for each function it appears in.)
_mt.c:20: error: ‘mt’ undeclared (first use in this function)
_mt.c:22: error: ‘struct mt’ has no member named ‘mt’
_mt.c:23: error: ‘seed’ undeclared (first use in this function)
っていうようなエラーがでてmakeがこけるところは、
#if defined(_MSC_VER) && (_MSC_VER < = 1300)
typedef unsigned __int32 uint32_t;
#elif defined(__linux__) || defined(__GLIBC__) || defined(__WIN32__)
#include
#elif defined(__osf__)
#include
#else
#include
#endif
このifdefがうまくいってないようだったのでとりあえず
#include <inttypes.h>
と手で書いてあげたりするとうまくmake && make testが通るようになりました
この辺はどう書くのが鉄板なんでしょうね?
ということでベンチマーク
ここがボトルネックになることはあまり無いとは思いますが。
iTunesの重複曲を削除する - perl
on 2010/08/04 10:54, under perl | 2 Comments
家のPCのWindowsを入れなおすついでに家のiTunesとmacbookのiTunesの中身を同期しようと思い、何も考えずにiTunesのホームネットワークに追加して曲をコピペしたら大量に重複曲ができていっこいっこ手で削除するなんてめんどくさくてできない場合の話。
iTunesには「重複する項目を表示」って機能はあるのに重複してる曲を削除する、っていう便利機能は無い。
ただし、同じアーティスト名、同じアルバム名(つまり同じディレクトリ)の同名曲は、
ファイル名の末尾に数字をつけてincrementしていく、ってルールでコピーしてきたファイルを置くようだ。
そこで、perlで重複曲を削除してみる
% perl remove-duplicate.pl /Users/mash/Music/iTunes/iTunes\ Media/Music/
って実行すると重複してるっぽい曲だけ消してくれる
その後、実体が無いけど曲のリストがあるiTunesを開き、上から順に →カーソルキー を押しっぱなしにしたりすると

のようにびっくりマークがつくので、表示項目に「追加日」を追加して、
びっくりマークを目印に、複数選択しながら消していくとまあ許容できるめんどくささになった
Term::Prompt がなんか楽しくて意味もなく "really?" とか聞くちょっとしたスクリプトを書く今日このごろ
PS. iTunes Music Library.xml をいっしょに編集したりすればもっと簡単なのかもしれない
daemontoolsのmultilogでエラーだけ抜き出す
on 2010/06/28 19:28, under daemontools | Comment
ここ: multilogによるログ収集 を読みましょう
この設定は:
- t: タイムスタンプつける
- 全部の行をこのrunスクリプトのあるディレクトリに吐く ファイルサイズ最大16MBで100世代まで
- [error]の含まれる行のみを errorsディレクトリ以下に吐く ファイルサイズ最大16MBで100世代まで
svc -u /service/app/log
ってするとmultilogが立ち上がって、runスクリプトのあるディレクトリ、errorsディレクトリにcurrentって空のファイルができる
appのログに[error]の含まれる行が出てきたら、
errors/current ってファイルに書き込まれるので、
errors/current ってファイルを監視してれば眠れない夜になったりならなかったり
svc -a /service/app/log
ってするとログローテーションされてcurrentはまた空ファイルになるのでいらっとしたらこれ。
WWW::Mechanize::Firefoxで簡単スクリーンショット
on 2010/05/19 17:06, under perl | 4 Comments
WWW::Mechanize::Firefox-すごいな
mozreplと組み合わせてこんなコードで簡単にスクリーンショットがとれる
perl mechanize-firefox.pl "yahoo.co.jp" yahoo.png
とかってやってとれたスクリーンショットはこんな

write error: filehandle isn't open at /path/to/MozRepl/Client.pm line 186
とかって出たらFirefoxのmozreplが立ち上がってない。
maximum input buffer length exceeded: 1048576 bytes at /path/to/MozRepl/Client.pm line 186
とかって出たらmozreplとperlスクリプトのtelnetのバッファが足りないようなのでgistにあるbufsizeを大きめにとる
PS: 開いてるFirefoxでとったのでMacBookProの解像度を活かしてサイズは(1899 x 1607)になってるのは自慢です
cant use webcam in Firefox3.6.3 + Flash Player 10 + Mac OSX10.6.3
on 2010/05/13 21:06, under diary | Comment
今日、奇妙なFirefoxのバグ?に遭遇
ウェブカムを使うFlashで、Camera.getCameraしたCameraインスタンスをVideo.attachCameraしたりするときに、
Flashの設定パネルが表示されて、

この「許可」をクリックするとカメラから画像がとれるようになるんですが、
Firefox3.6.3 + Flash Player 10,0,42,34 + MacOSX 10.6.3
で、これがクリック出来ないんですね。周りにも何人かいたから近いバージョンでも起こるっぽい。
クリックできないから許可できないので進まない。
HTMLの要素をカットして戻して、とかってやりながら原因を切り分けていくと、、原因、というかこうなおすと直った、のはCSS
CSSの差分はこんな
-
667c673,674
-
<width:465px;
-
---
-
> /* width:465px; */
-
> text-align: center;
-
670c677
-
<width: 465px;
-
---
-
> /* width: 465px; */
-
673c680
-
<border-right:1px solid #e6e6e6;
-
---
-
> /* border-right:1px solid #e6e6e6; */
これでFlash Playerからウェブカム使えるかどうか変わるとかありえねー
けど実際ありえた
参考になるだろうと思って最小のHTMLとCSSで再現パターンつくろうと思ったけど他にも周りの要素が関係してそうだったのでめんどくさくて断念。
Firefox3.6.4のbetaでは起こらなかったようなので、一時的な不具合かもしれない。
幸運をいのる。
P.S. macにしましたよ
Context Free Art for Actionscript3/Flash
on 2010/03/20 15:29, under contextfreeart, actionscript3 | Comment
FITC Amsterdam 2010で得た刺激を形にした1つ目
Context Free Artをas3でつくるためのライブラリをつくりました。
sourcecode: http://github.com/mash/ContextFreeArt-AS3
sample:
cfdgは本家と同じフォーマットで記述して、
StringをContextFreeArtクラスに渡してaddChildすれば描画されたContextFreeArtを見られる、という簡単仕様。
-
var art :ContextFreeArt = new ContextFreeArt( cfdg );
-
addChild( art );
javascript+CanvasによるContext Free Artの実装があったのでそれを移植する+Flash向けに最適化(@nutsu ++)しただけですね
jsの方の例はこちら
再帰を繰り返してベクターが多くなってきた時に描画が重くなるのを解決できたらなー
描画しおわった、removeChildされた後に掃除したりするのを追加したら、swcにしてwonderflにライブラリとして追加しようー
ContextFreeArtクラスはただのSprite継承したものなので、ContextFreeArtをBox2Dの世界につっこんだり、マウスとインタラクションしたり、いろいろ試してほしいものです。
まだ対応していないcfdg文法もたくさんあるので、興味をもった方はgithubでforkしてほしいです!
FITC Amsterdam 2010で話してきました
on 2010/03/20 15:06, under actionscript3, fitc, wonderfl | Comment
2/19~2/24だったのでもう1ヶ月になってしまいますね。びびる!
ではプレゼン資料をどうぞ。
@mariroomがiPhoneから撮ってくれた録画はこちら
slideshareでプレゼン資料からリンクしたい!けどできないので
http://twitter/maaash
http://www.kayac.com/
http://wonderfl.net/
Explore wonderfl
http://wonderfl.net/codes
http://wonderfl.net/tags
My Favorites
http://wonderfl.net/tag/graphics
http://wonderfl.net/code/b8ec2e7155357ddc65d21eb8b1fa2e94c8363cfc
http://wonderfl.net/tag/particle
http://wonderfl.net/code/6efe4c0d9b5e27e91db92b1175409f31e7005dca
http://wonderfl.net/tag/3d
http://wonderfl.net/code/d79cd85845773958620f42cb3e6cb363c2020c73
http://wonderfl.net/code/3e921a9e3eeedb891c2c09ca7792d77a94e6be7e
http://wonderfl.net/tag/sound
http://wonderfl.net/code/ce10335ea45949194f7b26b2a7906faf1860037d
http://wonderfl.net/code/a61ade6375f452e6dbcc873f241652ef0f80bb96
http://wonderfl.net/tag/game
http://wonderfl.net/code/e3ad9058e4ee2e00d7ff7a40e806e7ed82fdb0ef
Supported libraries
http://wonderfl.net/libraries
Fastest when you want samples
http://www.google.com/search?q=papervision3d
http://wonderfl.net/search?q=papervision3d
Cool idea of actionscriptbible
by Roger Braunstein
http://wonderfl.net/user/actionscriptbible
Collaboration example:
http://wonderfl.net/code/23552f1d7a0805e6a44c812715e89bf6b520e346
http://wonderfl.net/code/6e076415a6d24cbe1c1ce65fb5db5fc9284e9c10
http://wonderfl.net/code/aa66ffdabd0d60b9b0f78bc98d35054860212703
http://wonderfl.net/code/685b39a67b560fd762e25fb805c7cb30780efb78
http://wonderfl.net/code/e40b7ab8221ba0b85632726091fc9211c5f503c4
Flash LIVE Coding
http://wonderfl.net/live
wonderfl本
on 2009/12/23 11:40, under actionscript3, flash | 2 Comments
ワークスコーポレーション
売り上げランキング: 3750
wonderfl本、出ましたね。自分は、「はじめに」と「1-1」を担当させていただきました。
これからFlashやActionscript3をはじめたい、という初心者にとっては本当に役に立つサービス&本だと思いますので、よろしければ読んでみてください。
