サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Nintendo Direct
mt.endeworks.jp
q4m-balancer 2012年3月29日 11:22 D | ブログ記事のURL | コメント(0) | トラックバック(0) 至極簡単なハックなんだけど、q4m-balancerというスクリプト書いてみた。シナリオとしては、(1) q4mが複数あって、(2)それぞれに繋がってるワーカーの数・処理能力にバランスの不整合があって (3) キューの中身について処理順番等が関係ない、という状況においてq4mに入っているメッセージの数にかたよりが見られている状態をある程度改善するスクリプト。 入っているメッセージ数が最大のキューと最小のキューの差が 最大 > 最小 * 2 だった場合に最大のほうのキューの中身を40%最小のほうに移す、ってだけ。グラフを見れば分かるとおり、右側のほうにグラフの内容がイーブンになっているのが見えると思う。これを定期的に動かす事によって処理能力の高いワーカーのほう
ZMQ Perl バインディング 2012年3月26日 09:50 D | ブログ記事のURL | コメント(0) | トラックバック(0) ZeroMQ.pmをつい相続してしまってから本家libzmqの変更についていけず大分悩んだんだけど、ここのところ直してリクエストが多かったので一念発起してlibzmqのPerlバインディングを大幅リニューアルしました。まだ正式リリースは出してないので、何か文句を言うなら今のうち!英語での解説はこちら いままでlibzmqの直接バインディング、定数、Perlっぽいシンタックスシュガーのラッパーを全部同じディストリビューションにいれていたのをばらしました。これまでZeroMQ::Raw とされていたのは ZMQ::LibZMQ2 ならびに ZMQ::LibZMQ3 となりました。ZMQはこれらのバインディングをうまいことオブジェクト風味にするPPモジュー
小ネタ。GETした内容のMD5が欲しかったので。 use strict; use Furl::HTTP; use Digest::MD5; my $digest = Digest::MD5->new; my $furl = Furl::HTTP->new; $furl->request( method => "GET", url => "http://whatever/text.txt", write_code => sub { my ($code, $msg, $hdrs, $partial) = @_; return unless $code ne 200; $digest->add( $partial ); } ); print $digest->hexdigest;
YAPC::Asia Tokyo 2011 振り返り 2011年10月16日 17:33 D | ブログ記事のURL | コメント(0) | トラックバック(0) YAPC::Asia Tokyo 2011の運営側の話は大分参加者側とは違うとは思いますが、一応記録として書いておきますね。あと以下様々な情報は私lestrratからみた一方的な話なのでひょっとしたら間違ってるかもしれませんが、その場合は随時ご指摘をお願い致します。 今年のYAPCの準備 ぶっちゃけ運営側、そして少なくとも僕の視点からは941さんとのタッグがあまりにもキレイに連携できてて、YAPCの準備は恐ろしいくらい負担の少ない感じでした。 最初から去年より責任機能を大幅に委譲しようというコンセンサスも取れてたし(例:懇親会手配、Tシャツ準備、プロジェクター等の備品準備等はDeNA/mixi社からの方達と分担しました)、去年
YAPC::Asia Tokyo 2011のシステム 2011年10月16日 08:34 D | ブログ記事のURL | コメント(0) | トラックバック(0) YAPCの裏方で動いているシステム。dotCloud上で トーク用のインスタンス、チケット用のインスタンス、チェックイン用のインスタンス、そしてDBが走っております。 トーク用とチケット用を分けたのは、リリースのタイミングとかが全然違うので、別々に開発したから。面倒っていえば面倒だけど、開発のタイミングという意味ではやりやすかった。 チェックイン用のインスタンスはスタッフ向け。バーコードリーダーで「ぴっ」ってやられたと思うけど、バーコードリーダーはただのキーボードのような扱いになっているので、単純にフォームのテキストフィールドに所定のテキストを送って、あとはフォームで処理してるだけ。 これらのdotCloudでデプロイしているア
YAPC::Asia Tokyo 2011 1日目・・・ 2011年10月15日 04:05 D | ブログ記事のURL | コメント(0) | トラックバック(0) 運営者として3回目のYAPC::Asia Tokyo 2011。おっさんになってきたと感じる。 前夜祭の時点からすでに腰痛。1日目に大岡山に向かう時大井町線のラッシュに巻き込まれ、途中でタクシーで移動しなかった自分を呪ったり。昼間忙しく仕事してたら腰痛は大分よくなったけど、毎年恒例の講堂の階段を何本もダッシュであがったりおりたりを繰り返していたら腰、ケツ、足がパンパン。 家に帰ってきて嫁にグリグリとマッサージしてもらったら少し緩和された感じ・・・ なんて、おっさんは肉体のクォリティがどんどん落ちてるからこういうことを言う物の、今年のYAPCはとにかくボランティアスタッフの数が多くて多分スタッフとして参加していた2006, 2
某オブジェクトストレージでデータをお引っ越し中な話 2011年9月30日 09:25 D | ブログ記事のURL | コメント(0) | トラックバック(0) 目的:オブジェクトストレージの旧ストレージサーバーから新ストレージサーバーにデータを引っ越しすること。rsyncやディスクを単純に交換するという方法も考えたが、ついでにデータのリバランスを行いたいので、ツールで移行する方法を採る。 概要:オブジェクトとは、ユーザーから見る「1ファイル」で、この1オブジェクトに付き、1個かそれ以上の実体(entity)が存在する。1ストレージには任意のオブジェクトの実体が最大1個保存される。この実体が複数あることによって、ストレージがダウンしたとしてもオブジェクト自体は生き残る事ができる。複数の実体がある場合は必ず複数のストレージサーバーに実体のコピーが保存されている。これを1ストレージサーバーずつ、
Devel::Coverとexec() 2011年9月 8日 12:08 D | ブログ記事のURL | コメント(0) | トラックバック(0) Devel::Coverって便利な道具なんですが、なんかfork + execするとうまく動きませんでした。ずっと見て見ぬ振りしてたんだけど、そういうわけにもいかなくなったので、二日ほどずっとその挙動をprintデバッグで追いかけていったら大体把握できた。 すごくはしょって言うと、Devel::Coverは裏のXSレベルでEND {} にあたる部分とかにコードを挿入してて、元のコードが #!perl exec "/bin/ls" だったとしたら、Devel::Coverをuseすると概念的には #!perl END { do_interesting_stuff() } exec "/bin/ls" という事をするようになる。PPの場合だとe
White Camel Awards 2011 2011年8月18日 10:51 D | ブログ記事のURL | コメント(0) | トラックバック(0) 昨日の夜、ビールの缶のプルトップをぷしゅっ!とあけてぐびぐびと一番うまい最初の一口を飲んで、ベッドの上からツイッターに発泡酒よかビールのほうがうまい、とか書いてたらtwitterで今年のWhite Camel Awardをもらったということを聞いた。ちなみに以前の受賞者には@miyagawaさんとかがいます。 本人いないところでやるのはどうなのよ、とは思いつつも(まぁしょうがないっすよね!)、大変ありがたい話です。White Camel Awardが何か知らない人に説明すると、要はPerlの技術とかそういうところでの貢献ではなくて、コミュニティであったりイベントであったりマーケティングとかそういうところでPerlに貢献した人を表彰してく
YAPC::Asia 2011で話してくれッ! 2011年7月27日 16:37 D | ブログ記事のURL | コメント(0) | トラックバック(0) これは自分がYAPCの運営に関わっている人でなかったとしても言える:「カンファレンスで喋る(喋った経験のある)エンジニアはその後チャンスが広がる」。あとさらに言うと、カンファレンスで喋れないとか言ってる人はひとつ大事な事を見逃している。今喋っているあの人達だっていつかは初心者だったんだ。最初に必要なのはまず応募してみる勇気だ。みんなスタートラインは一緒! YAPC::Asia Tokyo 2006だか2007で俺は初めて人前で喋った。300人入る講堂の中で喋った。何をどう喋ったか覚えてないけど、俺は目立ちたかった。俺は俺という人間がPerlを使える人であることをアピールしたかった。俺はその後のキャリアで仕事に困りたくないから実績が欲しか
某オブジェクトストレージになぜか関わった話 2011年6月21日 17:20 D | ブログ記事のURL | コメント(0) | トラックバック(0) 今の職場ではちょっと前から「開発支援」という名目で仕事をしている。まぁ要は「ちゃんとVCS使え」「テスト書け!」「プロセスを自動化しろ!」とか煩いことを言うおっさんの役目なわけです。 まぁそんな事をしてるのであんまり表側のアプリとかを直接触ったりはしないのですが、あるとき突然某システムの話をしてるときに「あ、これオブジェクトストレージに突っ込もう」という話になりました。聞くともう大分前から使ってるSで始まって、Tが間にあって、Fで終わるオブジェクトストレージの事らしいんですが、これのフロントエンドがmod_perlで書かれてるわけですよ。 ・・・テストできない(しづらい)じゃん! そんなわけでAPIの基本部分だけでいいからPSGIのがほしい
本日の引用 2011年6月17日 08:01 D | ブログ記事のURL | コメント(0) | トラックバック(0) Learn Python The Hard WayのAdvice From An Old Programmerにとても良いことが書いてあった Which programming language you learn and use does not matter. Do not get sucked into the religion surrounding programing languages as that will only blind you to their true purpose of being your tool for doing interesting things. 自分はJapan Perl Associationとかやってるけど、これはいつ
Brahman: a supervisor clone in Perl (under development) 2011年6月13日 15:57 D | ブログ記事のURL | コメント(0) | トラックバック(0) 週末にsupervisorっていうものについて話してる人がいたので、特に理由なくPerlでクローンを書いてみようと思った。というわけで本当に基本の部分まで書いた。名前はBrahman。神様の名前にしたかったのはプロセスの生死を管理するから。 繰り返すけど、特に理由はない。書きたかったから。ちなみに内部的には多分本家と全然互換性はない。設定ファイルがだいたいクローンできればいいや、というくらい。 今のところできることは、例えば今daemontoolsで管理してるplakupサーバーがあったとして、こんな感じの設定を書くと立ち上がってstdout/stderrを一緒のログに保存
dotCloud でPSGI Hello World 2011年4月30日 16:32 D | ブログ記事のURL | コメント(0) | トラックバック(0) 最近PSGI/Perlをサポートし始めたdotCloudのinvite codeをもらったのでとりあえずHello World的なアプリを作った。 作り方だが、まずdotcloud用のツール類をインストールする必要がある。自分のマシンでpythonを動かした事がなかったのでそこから。まず自分のpythonは homebrew経由で入っているヤツで、全てユーザー権限で入っているのでsudoとか使ってないのに注意。 easy_install dotcloud docloudではまず"deploy"というものを作る。deployは複数の"service"の集合体。"service"はそれぞれが一個のアプリなり、データベースなりを指す(
say no to system perl - システム標準Perlを使わないススメ 2011年4月30日 10:06 D | ブログ記事のURL | コメント(0) | トラックバック(0) LinuxやMac OS Xを使っていれば、大抵の場合/usr/bin/perl などの位置にPerlが入っていますが・・・これらを使うのはやめたほうがいい、というのが段々定説になりつつあります。 厳密に言うと、別に簡単なスクリプトを書くのにシステム標準Perlを使うのは問題ないのだけれども、CPANからモジュールをインストールするつもりならシステム標準Perlを使わないほうがいいでしょう、という事ですね。 自分としてはシステムPerlを使わない理由はふたつある。 ひとつはシステムPerlはそれに依存するものがあるため、それに変更を加えると何かが壊れることがあること。例えばついうっかりモジュールのバ
「CPANモジュールガイド」x perl-casualでライブコーディングしてきた 2011年4月29日 20:41 D | ブログ記事のURL | コメント(0) | トラックバック(0) @tomitaさんが書いた「CPANモジュールガイド」の刊行記念ということで池袋のジュンク堂本店で話して・・・もとい、コードを書いてきました。普段は滅多にこういう場に現れない「初めてのPerl」や「プログラミングPerl」の翻訳者である近藤嘉雪氏がもう一人のゲスト。司会がもはや技術界のタモリと化しつつある@yusukebe。あと@941さんがスタッフとして手伝いに来てくれました 近藤さんを見られるというだけでも実はすごいイベントだった気がする。ちなみに近藤さんは出番直前まで頑張ってスライドを書いていて、そのおかげで話にクロージャが含まれたそうです! こちらは@tomitaさんが書いた店頭POP。「Pl
Perlでシグナル処理(DBIを黙らせる編) 2011年4月27日 01:42 D | ブログ記事のURL | コメント(0) | トラックバック(0) なんかふと気づいたら最近以前書いたPerlでシグナル処理の記事にブクマがついていたので続き的な感じで書いてみた。 例えば 以下のように、ワーカーとかでずーーーーっとDBにクエリを投げてその結果を使って処理をする、というような処理を書くとする while ( $loop ) { my $sth = $dbh->prepare( .... ); $sth->execute(); while ( $sth->fetchrow_arrayref ) { .... } } 以前書いた%SIGを用いたPerlの普通のシグナル処理では、もしexecute()でブロックしていた場合など(例:Q4Mでqueue_waitしてる)ではいくらSIGINTとかを
Perlでファイルの一括読込 2011年4月27日 01:19 D | ブログ記事のURL | コメント(0) | トラックバック(0) なんかtwitter見てたらこういうのを貼ってる人がいたので、一応書いておく。 Perlでファイルを一気に読み込むのは local $/; <$fh> が一番速い。 open my $fh, '<', "/path/to/file.txt" or die "failed to open file: $!"; my $content = do { local $/; <$fh> }; いずれにせよ大きいファイルを処理する場合はこういう風に一気に読み込むのは効率悪い。それを分かった上で、それでも1行ずつ改行コードが取り除かれた状態で配列に読み込みたいならこれをsplitするのが一番速い。 open my $fh, '<', "/path/to/file.
InactiveDestroyのアホな使い方 2011年4月22日 18:32 D | ブログ記事のURL | コメント(0) | トラックバック(0) WebAppで DBIをなんらかの方法でDBに接続して、で、リクエストが終わったら接続を解除して・・・とかしたいとするじゃないですか。具体的な実装はScope::Containerでもなんでもいいんですけど。 それでなんかしらんけど、アクセスするたびに三つずつDB接続が残る、という現象に遭遇したわけですよ。最初は普通に「あれ、Scope::Containerの使い方間違ってたか」とか思ってたんですが、何をしてもダメだし、Scope::Containerに手を加えて現在の保持してる変数を抜き出しても何もない。DBI::db へのリファレンスがないのに接続が切れないなんて・・・と途方に暮れることと数時間。 ・・・やっちまったよ。ワーカーも同じ
備忘録:AnyEventとData::MessagePack 2011年3月 8日 18:38 D | ブログ記事のURL | コメント(0) | トラックバック(0) ちょっとだけ躓いたりしたので、備忘録のため。AnyEventでData::MessagePackを受け取るサーバー use strict; use AnyEvent; use AnyEvent::Socket; use Data::MessagePack; use Data::Dumper; main(); sub main { my $host = undef; my $port = 8888; my $guard = tcp_server $host, $port, sub { my ($fh) = @_; handle($fh); }; my $cv = AE::cv; my $w; $w = AE::signal
小ネタ:関数ブロックでnext使うと悲しい事になる 2011年2月23日 15:54 D | ブログ記事のURL | コメント(0) | トラックバック(0) use strict; sub foo { my $n = shift; next if $n > 5; warn $n; } foreach my $x ( 1..10 ) { foo( $x ); } これで嵌った。問題は当然 "next"。ループの中で呼ばれるfooの中で"next"を使ってるので fooに5以上を渡すと外側のforeachを抜けてしまうのだ。 理由が分かってみればなるほど、だったけど、これはしばらく嵌った。ちなみにuse warningsしてると "Exiting subroutine via next" っていう警告がでるよ!良い子はnextの変わりにreturnを使ってね! カテゴリ 日常 タグ perl
Text::Xslateが素敵すぎる(Markdown編) 2011年2月17日 10:13 D | ブログ記事のURL | コメント(0) | トラックバック(0) おいおい、Text::Xslate素敵すぎるだろ。 今日Markdownを使いたいと思ってちょっと考えたら、これだけで終了した: use strict; use Text::Xslate; my $xslate = Text::Xslate->new( .... module => [ 'Text::Markdown' => [ 'markdown' ] ] ); print $xslate->render_string( <<EOT, { text => $some_markdown_text ); [% text | markdown | mark_raw %] EOT 素敵!gfx 先生になら抱かれてもいい。 俺もXS
RPC::XMLをPlackで さきほどの記事に関してtokuhiromに指摘されたのでRPC::XMLにしてみた。基本的にはここに書いてある事と同じ。以下コメントで自分がちょっと変更した部分を入れてみた。 use strict; use Plack::Builder; use Plack::Request; use RPC::XML; use RPC::XML::ParserFactory 'XML::LibXML'; my $app = sub { my $req = Plack::Request->new(@_); my $q = RPC::XML::ParserFactory->new()->parse($req->content); my $method_name = $q->name; # XMLRPCで prefix.method_nameって呼んでた名残があるので、pref
SOAP::Lite/XMLRPC::LiteをPlackで 諸事情によりレガシーなXMLRPC::LiteベースのプログラムをPlack上にポートすることになったので色々悪戦苦闘してみた。とりあえず普通に動かすのは辛い、ということはなんとなくわかったので色々やった結果、こんな感じのコードを書けばとりあえずディスパッチは動くようになった。もしベターな方法があったら教えて下さい(XMLRPC::Lite以外のベターなライブラリでもOK!) use strict; use Plack::Builder; use CGI::Emulate::PSGI; use IO::String; use XMLRPC::Transport::HTTP; my $xmlrpc = XMLRPC::Transport::HTTP::CGI->dispatch_to( "MyApp" ); builder { m
エンジニア向け:英語読めない?「読む」必要はない、キーワードを探せ 何かしら問題が起こって(もしくは問題が起こったのかどうか切り分ける段階で)それを解決する際に出てきてる表示が英語で読めなくてうろたえる、って経験ありますか。回りの人に聞いてるとよくある現象くさいですね。 自分は幸運にも海外育ちなので英語は全く問題ではありませんけど、同時にハッキリと言えることは仕事でプログラムを書いたり、パッケージをインストールしたり際にいちいち律儀に画面に出てくる英文を読んだりはしてない、ということです。 重要な事なのでもう一回言いますね:「いちいち律儀に画面に出てくる英文を読んだりしてない」です。 まず、大前提。その切り分けができなくてうろたえてる状態に陥ってるあなたは確実にそのソフトなり環境なりのエキスパートではないですよね?エキスパートだったら多分その状態についてすでに知っているか、調べる方法を知っ
オブジェクト指向とClass::Data::Inheritableは一緒に扱わないほうがいい。 「オブジェクト指向なパラダイムでプログラムを書くとき」にClass::Data::Inheritableは排除すべきモジュールである。今回激しくそれを痛感しているので、だらだら書いてみたい。 まず、Perlはマルチパラダイムが可能な言語なので、Class::Data::Inheritable自体は否定されるべきものでもないし、あと必ず例外ケースはでてくるのでその際には躊躇なく使えばいいと思う。以下は最初の一文の通り、Perlでオブジェクト指向を使う場合はClass::Data::Inheritableは基本的に使わず、あくまで例外ケースに留めるべきだ、という事を伝えたい。 まずその1: クラスアトリビュートはグローバル変数 クラスアトリビュートはグローバル変数です。異論は認めません。 Singl
Married この度入籍してきました。本当はYAPC二日目の16日も大安だったんで土曜日に区役所に婚姻届けを届出できるんだったらそれもYAPCのクロージングのネタ的におもしろいと思ったんですけど(LTで「YAPCのおかげで結婚できました」的な)、まぁ色々面倒だったんで、その後の大安に入籍しました。 まぁ同棲も長いので特に生活が変わる訳じゃないですし、相方の名字が変わる以外別段どういうことはありません。二人の希望で披露宴もしませんし。ジミ婚ってヤツですね。 twitterでリアルタイム報告させてもらいましたので皆さまからたくさんおめでとうをいただきました。ありがとうございます。一番心外だったのは「miyagawaさんの真似か!(意訳)」っていうツイートかな。うるせー!向こうがいちいち予定をぶつけてくるのが悪い!あと同じ社内で毎日すれちがっている人にも認識されてないという事実も判明しました(
M::I::ExtendsMakeTestなかなかいいです+お願いというかおねだり xaicronさんのModule::Install::ExtendsMakeTestがなかなかいい感じです。以前書いたTest::mysqldのブログ記事を実現するのにもそうですが、任意の環境変数を設定できたり、スクリプトを実行できたりするのがとてもいい感じ。なので、以前の記事に書いていた内容は今は以下のように実装しています replace_default_make_test includes => [ "modules/common/lib" ], env => { MYAPP_CONFIG => 't/config.pl' }, before_run_scripts => [ 't/start_daemons.pl', 't/load_fixtures.pl' ], ; 自分は今プロジェクトの共通モジュ
YAPC::Asia 2010 - Thank You! 気づいたら 9/26からブログかいてねぇよ。忙しかったのだな・・・ というわけでYAPC::Asia Tokyo 2010もようやく終わりました。今さっきスピーカーの皆様にメールを書いたので、あとはいくつか支払いをすればだいたい終わりかなぁ、っていう感じです。 まずは来場していただいた皆様ありがとうございました。今回は「初心者の俺でもいいんだ」「Perl使いじゃないけど、いいんだ」と言ってくれる人が結構いたようで、大変嬉しい限りです。そうです、YAPCはPerl好きのほうが楽しめますが、Perlが好きじゃなくても全然問題ありません。 前回2009ではブレーンが俺一人で、しかも開催二日前に39度の熱を出すというへたれっぷりを発揮して方々に迷惑をかけまくりましたが、今回は @941さんと業務を分けられたので大変助かった。今年は少なくとも
次のページ
このページを最初にブックマークしてみませんか?
『mt.endeworks.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く