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 | 3 Comments

WWW::Mechanize::Firefox-すごいな
mozreplと組み合わせてこんなコードで簡単にスクリーンショットがとれる

perl mechanize-firefox.pl "yahoo.co.jp" yahoo.png
とかってやってとれたスクリーンショットはこんな
yahoo

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の設定パネルが表示されて、
flash security panel
この「許可」をクリックするとカメラから画像がとれるようになるんですが、

Firefox3.6.3 + Flash Player 10,0,42,34 + MacOSX 10.6.3
で、これがクリック出来ないんですね。周りにも何人かいたから近いバージョンでも起こるっぽい。
クリックできないから許可できないので進まない。

HTMLの要素をカットして戻して、とかってやりながら原因を切り分けていくと、、原因、というかこうなおすと直った、のはCSS

CSSの差分はこんな

CSS:
  1. 667c673,674
  2. <width:465px;
  3. ---
  4. > /* width:465px; */
  5. > text-align: center;
  6. 670c677
  7. <width: 465px;
  8. ---
  9. > /* width: 465px; */
  10. 673c680
  11. <border-right:1px solid #e6e6e6;
  12. ---
  13. > /* 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:

faster Tree - ContextFreeArtAS3 - wonderfl build flash online

cfdgは本家と同じフォーマットで記述して、
StringをContextFreeArtクラスに渡してaddChildすれば描画されたContextFreeArtを見られる、という簡単仕様。

Actionscript:
  1. var art :ContextFreeArt = new ContextFreeArt( cfdg );
  2. 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

ブラウザで無料ではじめるActionScript 3.0 ―It's a wonderfl world―
面白法人カヤック フォークビッツ
ワークスコーポレーション
売り上げランキング: 3750

wonderfl本、出ましたね。自分は、「はじめに」と「1-1」を担当させていただきました。
これからFlashやActionscript3をはじめたい、という初心者にとっては本当に役に立つサービス&本だと思いますので、よろしければ読んでみてください。

DBICでcreate_relatedをoverrideする

on 2009/11/26 14:11, under perl | Comment

DBICを使っています。
User has_many Histories
っていう関係のテーブルUserとHistoryがあった時に、
Userの行それぞれに対して、最新のHistoryをUserの行の中にキャッシュしておくと便利なときがあります。
そんな時に、$user->add_to_histories ってやった時に $userもupdateしたい、という話です。

PERL:
  1. CREATE TABLE user (id unsigned not null auto_increment, **中略**, history unsigned not null);
  2. CREATE TABLE history (id unsigned not null auto_increment, user unsigned not null, **中略**, created_date datetime not null);

UserのRowクラスは

PERL:
  1. package Schema::Row::User;
  2. 中略
  3. __PACKAGE__->has_many( histories => 'Schema::Row::History', 'user' );

HistoryのRowクラスは

PERL:
  1. package Schema::Row::History;
  2. 中略
  3. __PACKAGE__->belongs_to( user => 'Schema::Row::User' );

UserのRowクラスに追加されるadd_to_$relを使って

PERL:
  1. $user->add_to_histories({ action => 'marriage' });

とかってやるわけです。

HistoryのRowを追加する時にcreated_dateを意識せずに設定したいときとかに、
HistoryのRowクラスに↓って書いておきます

PERL:
  1. sub insert {
  2.     my $self = shift;
  3.     $self->created_date( DateTime->now ) unless $self->created_date;
  4.     $self->next::method(@_);
  5.     return $self;
  6. }

これはよくやるんですが、同じタイミングでUserの方もupdateしたいって時に、

UserのRowクラスに、

PERL:
  1. sub create_related {
  2.     my $self = shift;
  3.     my ($rel, $col_data) = @_;
  4.     my $ret = $self->next::method(@_);
  5.     if ( $rel eq 'histories' ) {
  6.         $self->update({ history => $ret->id }); # とか、$col_data->{action} とか
  7.     }
  8.     return $ret;
  9. }

って書いておくと、便利だわー

typester++

[perl]32bit/64bitでメモリ使用量違うけど

on 2009/11/12 13:39, under perl | Comment

同じperlのコードを、2台の違うサーバで動かした時に、やたらメモリ量が違うなぁと。

サーバ1: 50MBくらい
サーバ2: 200MBくらい

なんでだろと調べる

サーバ1で

CODE:
  1. perl -V
  2. Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
  3.   Platform:
  4.     osname=linux, osvers=2.6.26-1-686, archname=i486-linux-gnu-thread-multi
  5. ...
  6.     use64bitint=undef, use64bitall=undef, uselongdouble=undef
  7. ...
  8.   Compiler:
  9.     cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
  10.     optimize='-O2 -g',
  11.     cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include'
  12.     ccversion='', gccversion='4.3.2', gccosandvers=''
  13.     intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
  14.     d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
  15.     ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
  16.     alignbytes=4, prototype=define

サーバ2で

CODE:
  1. Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
  2.   Platform:
  3.     osname=linux, osvers=2.6.26-1-vserver-amd64, archname=x86_64-linux-gnu-thread-multi
  4. ...
  5.     use64bitint=define, use64bitall=define, uselongdouble=undef
  6. ...
  7.   Compiler:
  8.     cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
  9.     optimize='-O2 -g',
  10.     cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include'
  11.     ccversion='', gccversion='4.3.2', gccosandvers=''
  12.     intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
  13.     d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
  14.     ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
  15.     alignbytes=8, prototype=define

longsize, ptrsizeとかが違う
32bit → 64bit!

モジュールをuseした際のメモリ使用量(増加量)を調べてみるで紹介されていたGTopのスクリプトを使ってみる

サーバ1で

CODE:
  1. % script/gtop.pl 'use Catalyst'
  2. 10.5M : use Catalyst
  3. % script/gtop.pl 'use DBIx::Class'
  4.  396k : use DBIx::Class
  5. % script/gtop.pl 'use Moose'
  6. Moose does not export its sugar to the 'main' package.
  7.  4.6M : use Moose

fmfm

サーバ2で

CODE:
  1. % script/gtop.pl "use Catalyst"
  2. 42.6M : use Catalyst
  3. % script/gtop.pl "use DBIx::Class"
  4.  920k : use DBIx::Class
  5. % script/gtop.pl "use Moose ()"
  6. 17.9M : use Moose ()

!!!

搭載してるメモリ量は4GBとかで変わらないから、
リスクが無ければ32bitでコンパイルしたperlを使ったりするもんなのだろうか?

IO::AIOお試し

on 2009/10/22 23:09, under perl | Comment

AnyEvent/Coro期がわたしにもやってきましたよ。
ファイル書き込みを非同期でやりたいのでIO::AIO試してみました。

Coro::AIO使えばcallback形式ではなく綺麗に書けるようだけれどとりあえずIO::AIOの書き方で。

結果は、↓とかってなるから非同期的な感じだなぁっていうのはわかるんですが、
AnyEventの $cv->send , $cv->recv をとっぱらっても同じように動く。
なぜ?
Event loop integrationっていうのはそれが無い状態に対して、何してくれるの?

CODE:
  1. perl try/anyevent_aio.pl
  2. [pre] at try/anyevent_aio.pl line 5.
  3. [aft] at try/anyevent_aio.pl line 13.
  4. [opened]0
  5. [opened]1
  6. [opened]2
  7. [opened]3
  8. [opened]4
  9. [opened]5
  10. [opened]6
  11. [opened]7
  12. [opened]8
  13. [opened]9
  14. [wrote]0
  15. [wrote]1
  16. [wrote]2
  17. [wrote]4
  18. [wrote]6
  19. [wrote]3
  20. [wrote]7
  21. [wrote]5
  22. [wrote]8
  23. [closed]9:0
  24. [closed]8:1
  25. [closed]7:2
  26. [closed]6:4
  27. [closed]5:6
  28. [closed]4:3
  29. [closed]3:7
  30. [closed]2:5
  31. [wrote]9
  32. [closed]1:8
  33. [closed]0:9

going to Adobe MAX NA 2009

on 2009/09/24 10:45, under fitc, wonderfl, adobe, flash | Comment

I'm going to Adobe MAX NA 2009!

to give a talk about
wonderfl build flash online, the browser-based Actionscript IDE and community
http://wonderfl.net/

at the FITC Unconference room
http://www.fitc.ca/events/schedule/?event=100

Wednesday October 7, 10:30 - 11:00

might be hard to wake up to attend a 10:30 session if you're having beer whole night long,
but FITC Unconference room has a FREE BEER for you,
so why not have one in the morning?

おすすめのパスタレシピ本

on 2009/06/13 14:57, under gourmet | Comment

家で料理をすることも週末は多いので、レシピの本を何冊か持っている。
ケンタロウさんの本や、にんにくのレシピ本や他のも。
レシピ本には、たいていレシピとできあがりの画像だけ載っている。
著者によって、使う素材が違ったり、にんにくばかり使うレシピだったり。

先日ラ・ベットラ・ダ・オチアイ、という、落合さんがやってるイタリアンレストランに行って来た。
普段は長い行列のところ、何曜日だったか、その曜日に行けば並ばずに済む、という日。
スパゲッティも前菜もおいしくて、店主である落合さんの書いているレシピ本に気がついて、
ご飯を食べ終わった後しばらく読みふけり、帰ってからamazonでぽちっとした。

ラ・ベットラの定番スパゲティ (ふたりでごはん)
落合 務
幻冬舎
売り上げランキング: 215921
おすすめ度の平均: 4.5

5 思ったよりシンプルでも本格的な味
3 やっぱりラ・ベットラ
5 作りやすいレシピです
4 ちょっと残念
5 スパゲティを極める

おすすめするのは、

何のためにワインを入れるのか、そしてせっかくワインを入れたのになぜ煮詰めなきゃいけないのか・・・。そういう”どうして?”をひとつひとつ解決できれば、もっとおいしい料理を作れるようになるはず。そういう理屈を知っていけば、料理はすごく楽しくなると思う。

という考えが見えるから。
そういったロジックがレシピの前後にちょろっと書いてある。

土日しか作らないから、先週つくって失敗したリベンジしようと思っても、
試行錯誤しておいしさのロジックを自分の身体で学んでいくほど味と手順を覚えていられないし、
至高の味を目指しているのにレシピの可能性は無限だ。
先人の知恵にすがるべきところ。

スパゲッティ好きな人はみんな買うといいと思います。

県毎のiareaの数

on 2009/05/27 15:22, under mobile | Comment

memo

宮城: 4
茨城: 5
北海道: 32
福島: 4
岩手: 3
滋賀: 4
三重: 8
高知: 4
東京: 99
宮崎: 3
長野: 12
広島: 9
沖縄: 3
静岡: 15
山梨: 3
青森: 3
山形: 4
山口: 4
京都: 20
埼玉: 12
熊本: 5
福岡: 15
和歌山: 8
大阪: 27
徳島: 4
石川: 11
千葉: 10
愛媛: 4
奈良: 4
秋田: 3
兵庫: 22
神奈川: 31
富山: 5
新潟: 6
福井: 5
鹿児島: 7
岐阜: 6
大分: 5
佐賀: 2
岡山: 5
群馬: 6
島根: 6
鳥取: 3
長崎: 5
香川: 4
栃木: 6
愛知: 39

Hoppyいいよ

on 2009/05/15 21:41, under flash, perl | 1 Comment

Hoppyいい
シリコンバレー行った時に参加した Flash Game Summit とかでも、FITC Toronto 2009でも、マルチプレーヤーFlash熱そうだったので自分の周りではきてる。
汎用的なXMLSocketサーバを書いた

POEとか使ったシングルプロセスシングルスレッドのデーモンでデータベース扱う時はどうするのがいいんだろう?
裏にDB扱うためだけにhttpサーバ置いてデーモンからはそれに非同期でhttpリクエストするという方法がある。

ということでまずはauthを非同期にしてみました。
http://github.com/mash/Hoppy/tree/master

$c->handlerってtcp周りのイベントのハンドラってことでいいのかな。

PERL:
  1. $c->regist_service(
  2.   auth => 'MyApp::Auth',
  3. );

ってやると $c->handler->{auth} に入るのは気のせいかと思いたかったので
s/handler/service/ してみました。めっちゃコアっぽいけどまぁいいか。

ごめんねColinちゃん。

keep looking »