maaash.jp

what I create

WWW::Mechanize::Firefoxで簡単スクリーンショット

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

1
perl mechanize-firefox.pl "yahoo.co.jp" yahoo.png

とかってやってとれたスクリーンショットはこんな yahoo

1
write error: filehandle isn't open at /path/to/MozRepl/Client.pm line 186<br />

とかって出たらFirefoxのmozreplが立ち上がってない。

1
maximum input buffer length exceeded: 1048576 bytes at /path/to/MozRepl/Client.pm line 186<br />

とかって出たら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

今日、奇妙な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]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; */
[/css]

これでFlash Playerからウェブカム使えるかどうか変わるとかありえねー
けど実際ありえた

参考になるだろうと思って最小のHTMLとCSSで再現パターンつくろうと思ったけど他にも周りの要素が関係してそうだったのでめんどくさくて断念。

Firefox3.6.4のbetaでは起こらなかったようなので、一時的な不具合かもしれない。
幸運をいのる。

P.S. macにしましたよ

FITC Amsterdam 2010で話してきました

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

Context Free Art for Actionscript3/Flash

FITC Amsterdam 2010で得た刺激を形にした1つ目

Context Free Artをas3でつくるためのライブラリをつくりました。
sourcecode: http://github.com/mash/ContextFreeArt-AS3
sample:

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

[as]var art :ContextFreeArt = new ContextFreeArt( cfdg );
addChild( art );[/as]

javascript+CanvasによるContext Free Artの実装があったのでそれを移植する+Flash向けに最適化(@nutsu ++)しただけですね
jsの方の例はこちら

再帰を繰り返してベクターが多くなってきた時に描画が重くなるのを解決できたらなー
描画しおわった、removeChildされた後に掃除したりするのを追加したら、swcにしてwonderflにライブラリとして追加しようー
ContextFreeArtクラスはただのSprite継承したものなので、ContextFreeArtをBox2Dの世界につっこんだり、マウスとインタラクションしたり、いろいろ試してほしいものです。
まだ対応していないcfdg文法もたくさんあるので、興味をもった方はgithubでforkしてほしいです!

wonderfl本

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

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

DBICでcreate_relatedをoverrideする

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

1
2
CREATE TABLE user (id unsigned not null auto_increment, \*\*中略\*\*, history unsigned not null);
CREATE TABLE history (id unsigned not null auto\_increment, user unsigned not null, \*\*中略\*\*, created\_date datetime not null);

UserのRowクラスは

1
2
3
package Schema::Row::User;
中略
\_\_PACKAGE\_\_->has_many( histories => &#8216;Schema::Row::History&#8217;, &#8216;user&#8217; );  

HistoryのRowクラスは

1
2
3
package Schema::Row::History;
中略
\_\_PACKAGE\_\_->belongs_to( user => &#8216;Schema::Row::User&#8217; );  

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

1
$user->add\_to\_histories({ action => &#8216;marriage&#8217; });  

とかってやるわけです。

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

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

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

UserのRowクラスに、

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

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

typester++

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

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

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

なんでだろと調べる

サーバ1で

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
perl -V  
Summary of my perl5 (revision 5 version 10 subversion 0) configuration:  
Platform:  
osname=linux, osvers=2.6.26-1-686, archname=i486-linux-gnu-thread-multi  
...  
use64bitint=undef, use64bitall=undef, uselongdouble=undef  
...  
Compiler:  
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',  
optimize='-O2 -g',  
cppflags='-D\_REENTRANT -D\_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include'  
ccversion='', gccversion='4.3.2', gccosandvers=''  
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234  
d\_longlong=define, longlongsize=8, d\_longdbl=define, longdblsize=12  
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off\_t='off\_t', lseeksize=8  
alignbytes=4, prototype=define[/code]

サーバ2で  

Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
Platform:
osname=linux, osvers=2.6.26-1-vserver-amd64, archname=x86_64-linux-gnu-thread-multi

use64bitint=define, use64bitall=define, uselongdouble=undef

Compiler:
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’,
optimize=‘-O2 -g’,
cppflags=‘-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include’
ccversion=‘’, gccversion=‘4.3.2’, gccosandvers=‘’
intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
ivtype=‘long’, ivsize=8, nvtype=‘double’, nvsize=8, Off_t=‘off_t’, lseeksize=8
alignbytes=8, prototype=define

1
2
3
4
5
6
7

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

<a href="http://iandeth.dyndns.org/mt/ian/archives/000624.html" onclick="javascript:_gaq.push(['_trackEvent','outbound-article','http://iandeth.dyndns.org/mt/ian/archives/000624.html']);">モジュールをuseした際のメモリ使用量(増加量)を調べてみる</a>で紹介されていたGTopのスクリプトを使ってみる

サーバ1で  

% script/gtop.pl ‘use Catalyst’
10.5M : use Catalyst
% script/gtop.pl ‘use DBIx::Class’
396k : use DBIx::Class
% script/gtop.pl ‘use Moose’
Moose does not export its sugar to the ‘main’ package.
4.6M : use Moose
[/code]fmfm

サーバ2で
“` % script/gtop.pl “use Catalyst”
42.6M : use Catalyst
% script/gtop.pl “use DBIx::Class”
920k : use DBIx::Class
% script/gtop.pl “use Moose ()”
17.9M : use Moose ()
[/code]!!!

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

IO::AIOお試し

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

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

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

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

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

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

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

ラ・ベットラの定番スパゲティ (ふたりでごはん)
落合 務
幻冬舎
売り上げランキング: 215921
おすすめ度の平均: 4.5
5 思ったよりシンプルでも本格的な味
3 やっぱりラ・ベットラ
5 作りやすいレシピです
4 ちょっと残念
5 スパゲティを極める

おすすめするのは、

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

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

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

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