タグ

ブックマーク / mt.endeworks.jp (20)

  • YAPC::Asia Tokyo 2011のシステム - D-6 [相変わらず根無し]

    YAPC::Asia Tokyo 2011のシステム 2011年10月16日 08:34 D | ブログ記事のURL | コメント(0) | トラックバック(0) YAPCの裏方で動いているシステム。dotCloud上で トーク用のインスタンス、チケット用のインスタンス、チェックイン用のインスタンス、そしてDBが走っております。 トーク用とチケット用を分けたのは、リリースのタイミングとかが全然違うので、別々に開発したから。面倒っていえば面倒だけど、開発のタイミングという意味ではやりやすかった。 チェックイン用のインスタンスはスタッフ向け。バーコードリーダーで「ぴっ」ってやられたと思うけど、バーコードリーダーはただのキーボードのような扱いになっているので、単純にフォームのテキストフィールドに所定のテキストを送って、あとはフォームで処理してるだけ。 これらのdotCloudでデプロイしているア

  • Perlでファイルの一括読込 - D-6 [相変わらず根無し]

    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.

  • Perlでシグナル処理(DBIを黙らせる編) - D-6 [相変わらず根無し]

    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とかを

  • YAPC::Asia 2010 - Thank You! - D-6 [相変わらず根無し]

    YAPC::Asia 2010 - Thank You! 気づいたら 9/26からブログかいてねぇよ。忙しかったのだな・・・ というわけでYAPC::Asia Tokyo 2010もようやく終わりました。今さっきスピーカーの皆様にメールを書いたので、あとはいくつか支払いをすればだいたい終わりかなぁ、っていう感じです。 まずは来場していただいた皆様ありがとうございました。今回は「初心者の俺でもいいんだ」「Perl使いじゃないけど、いいんだ」と言ってくれる人が結構いたようで、大変嬉しい限りです。そうです、YAPCPerl好きのほうが楽しめますが、Perlが好きじゃなくても全然問題ありません。 前回2009ではブレーンが俺一人で、しかも開催二日前に39度の熱を出すというへたれっぷりを発揮して方々に迷惑をかけまくりましたが、今回は @941さんと業務を分けられたので大変助かった。今年は少なくとも

  • perlbrew - D-6 [相変わらず根無し]

    perlbrew Perl 5.6 とか Perl 5.8を今だに使ってるあなた!そうです、これを読んでるそこのあなたです。Perl5の開発チームは後方互換に関しては大変神経をつかっていますので、 Perl 5.6とかで動いてたコードをいきなり 5.12で走らせても基的には動くはずです(多分警告とかは一杯でるだろうけど)。でもだからといって新しいバージョンで施されている様々な最適化や新しい機能を使えないのはちょっと悲しくないですか? ということで新しい Perlを使いましょう!最新安定版は5.12.1ですよ!ちなみにどのバージョンを2010年8月時点で使うべきか、はこちらのエントリを参照してください。 え?アップグレードできない?システム管理者が許してくれない?前入れてたアプリが壊れる?いやいやいや、全然いけますって。自分用のPerlをインストールすればいいんですよ! ここではそれを簡単

  • 自分の最近のCatalystのモデル部分の書き方 - D-6 [相変わらず根無し]

    自分の最近のCatalystのモデル部分の書き方 こちらのブログでなんか呼ばれた気がしたのでとりあえず書いてみた。 あくまで自分はどうしてるか、って話ですが、最近はCatalystでなんか書くときはこんな感じで使ってます。 色んな事がこの図に詰まっているので、箇条書きしてみる: Model::APIAPIオブジェクトを作成して、使用時にはModel::APIに対して`find()`というメソッドを使って実際のAPIオブジェクトを持ってくるSchema等はMyApp::Schemaに定義し、Model::APIのアトリビュートとして持っている。cacheも同等。これらの初期化引数は設定ファイルのModel::APIから取れるようにしておくCatalyst::Model::DBIC::Schemaは*使ってない*Model::APIではACCEPT_CONTEXTが呼ばれた時点で、もしまだ初

  • CGIをPlackで開発(2) - D-6 [相変わらず根無し]

    CGIをPlackで開発(2) 前のエントリ書いたら宮川さんにオススメ方法を教えてもらった http://twitter.com/miyagawa/status/10271128928plackup \      -L Shotgun      -MPlack::App::WrapCGI      -e 'Plack::App::WrapCGI->new(script => "/path/to/cgiscript.cgi")' だそうです!これなら全ての要件を満たせるもよう!そしてapp.psgiを作る必要ありません。 今これやってみて一つだけ問題点。多分POD入りのCGIは動かない。それと、__DATA__は見てくれるけど、__END__があると動かない。__END__さっき簡単なパッチのpull requestを送っておきました! カテゴリ 開発 タグ cgi perl plack 2

  • CGI.pmで作ったCGIをコマンドラインから実行する - D-6 [相変わらず根無し]

    CGI.pmで作ったCGIをコマンドラインから実行する 某所での会話: 13:14 <#perl6> t****: y'know, one thing that got me into Ruby was that the CGI library would auto-detect that I was testing it in a browser and take arguments as if I was working in a browser. Made troubleshooting a breeze... 13:14 <#perl6> t****: I mean, testing from the command line... 13:15 <#perl6> t****: I always wished the perl CGI module would do that...

  • Script::Sub::Importが大変いただけない件 - D-6 [相変わらず根無し]

    Script::Sub::Importが大変いただけない件 スクリプトからサブルーチンだけをインポートするScript::Sub::Importというモジュールを作成しました http://d.hatena.ne.jp/perlcodesample/20091130/1258979624 これは大変いただけない。perlcodesampleというIDがさらに初心者に信用させがちだからさらにいただけない。なので苦言を呈させてもらう。 命題はスクリプト内で使っている巻数のテストをしたい、なんだよね。なら、いくつかこんなひどいハックじゃないやり方がある。 まず第一の、そして一番まともな方法としては「モジュール化」を考えるべき。元のスクリプトがこんな感じだとする: #!/usr/bin/perl use strict; main(); sub main { # pseudocode... foo(

  • Perlシグナル処理 - D-6 [相変わらず根無し]

    Perlシグナル処理 思い立ったので適当に書いてみる Perlのシグナルハンドラは%SIGグローバル変数にシグナル毎のハンドラを設定することで実現できる。例えばCtrl-CはSIGINTを発生させるので、INT用のハンドラを設定する: $SIG{ INT } = sub { warn "got SIGINT!" }; %SIGに限った事ではないのだけれども、ここでまず注意しなくてはいけないのが、%SIGはグローバル変数であること。ある関数foo()内で%SIGをいじったあとにreturnすると、foo()を呼び出したスコープでもその値は有効になってしまう。これだと自分はよくても他のモジュール等に影響を与える可能性がある。そこでまず癖としてlocal修飾子を使う癖をつけてほしい local $SIG{INT} = sub { warn "got SIGINT (OUTSIDE)" }; su

  • Introducing Data::Valve - D-6 [相変わらず根無し]

    Introducing Data::Valve 昨日から思い立ってData::Valveというものを書いてみました。XS混じりのスロットリング用モジュールです。 Data::Throttlerでも同じような事ができるわけですが、こっちは内部が非常にごつい。しかも拡張しにくい事この上ない。アクセッサーとか全くないんだぜ? ってことでData::Throttlerとほぼ同等のAPIを持って、内部構成を完全に書き直しました。 Data::Valveは内部の基スロットリングロジックはものすごく簡単なCで書いてます。単純にスロットリング判定が行われた時間を保存したリンクドリストを格納しておいて、その数と現在時刻からのインターバルを持って計算するだけです。 ただ、キモはこの計算を行うデータ構造体をシリアライズ・デシリアライズすることによって、外部媒体にこのデータを保存して、複数プロセスどころか複数ホ

  • LLTV 参加してきた - D-6 [相変わらず根無し]

    LLTV 参加してきた LLTVに参加してきました。「LLフィーリングカップル」でボケ殺し役と、LLTV生CMで唯一全く生じゃないCMを発表してきました。 フィーリングカップルは正直もう少しテーマを減らして深く突っ込みたかったなぁ。ともあれ、俺もいつかは子供できると思うので子供がいても今まで通り仕事できる会社にしていきたいです。 CMは番全日に竹迫先生より振られたのでうわーっと作業時間3時間あまりでKeynoteプレゼンテーションとして作成しました。一応動画版をアップしておきますが、このCMは権利関係が面倒くさいので来ついているはずのBGMが一緒についていません。CMを正しく楽しむためには(笑)一緒に布袋寅泰さんの「Battle Without Honor Or Humanity」を動画再生と同時に再生しはじめてくださいませ。 あと、一部スポンサーの方とか名前抜けてたらすみません。慌

  • Moosification: Catalyst 5.8に移行した際にちょっと気づいた事。 - D-6 [相変わらず根無し]

    Moosification: Catalyst 5.8に移行した際にちょっと気づいた事。 最初からMooseベースでアプリケーションを作るというのは、実務ではなかなか難しいのはわかります。一般論は JPA #02で話すのでおいておきますが(参加申し込みは今日5/12までですよ!)、5.8 からMoose化したCatalystであった問題・注意点をちょっと書き出してみます。 1. use Catalyst Catalyst::Upgradingを読んでいると package MyApp; use Moose; extends 'Catalyst'; __PACKAGE__->setup(qw/ ConfigLoader /); という表記が見られるが、これは気をつけないと駄目。 自分が直面した問題は、path_to()等を使った時に起こった。path_to() は現アプリのルートディレクトリ

  • モダンPerl入門とどいた - D-6 [相変わらず根無し]

    モダンPerl入門とどいた 「モダンPerl入門」が届きました。翔泳社様、ありがとうございます>< 嬉しい限りなんですが、でももう怖くてひらけねぇ。間違いとかあったら嫌だー。こわいー。僕はテレビとかでBGMが怖い感じになるとチャンネルを変える人なのです。中味を読んで万が一いやな内容があったらいやだからもうしばらくあけないぞ! なんて事は言っていても見ないわけにはいかないので見たわけですが、装丁とか、僕の予想をはるかに超えていてすごい嬉しいです。内容も実は結構良い内容だとは思っております。自信がないのは文章の書き方とかだけで、ここまでターゲットを絞ってMooseの実践的な使い方とかを解説したは現在他には存在しないはずだし、その辺り興味のある方には我ながらちょうどいいと思います。 ちなみにこの、執筆時には全てPODで書きました。=head1 チャプタータイトルみたいな感じ。表とかはas-

    yokochie
    yokochie 2009/02/04
    PODって本を書くのにも耐えられる形式なのか(書いたことない)
  • 「モダンPerl入門」書きました。 - D-6 [相変わらず根無し]

    「モダンPerl入門」書きました。 モダンPerl入門 今みたらAmazonでも表紙が入稿されたらしいので宣伝させていただきます。えー、モダンPerl入門というを翔泳社さんから出版させていただくことになりました。でも最初に断っておきます。誤字脱字はある気がします。ごめんなさいごめんなさい。日語不得手なんです(こういう時だけ帰国子女カードを使わせていただきます)。 ともあれ、内容的には自分が普段Perlを使っていて、同僚とかに知っておいてほしいな、って思っている実践的な内容ばかり書きました。このはたとえPerlがメインの言語ではなくともPerl仕事で使っていて、なおかつ初級〜中級のあたりでうろうろしてしまっている人たち向けに書いています。初級者向けの構文説明はほとんどありません。上級者向けのわけわかんないところはXS以外ありません(はい、XSの入門あります)。ほとんどは、Perlで業

  • CatalystをPARデプロイする際のハック - D-6 [相変わらず根無し]

    CatalystをPARデプロイする際のハック Catalystにはデフォルトでcatalyst_parというディレクティブが備え付けられていて、Makefile.PLで ... catalyst_par; ... WriteAll; とすると後のmake時にPAR形式のファイルを作れるようになる機能があります。このPARファイルを作成するには make catalyst_par とするわけですが、アプリケーションができあがって、「さあPARでも作るか!」と言った皆さんはおおむね以下のような意味の分からないエラーに悩まされてきたのではないでしょうか: Writing PAR "wifigadgets-control.par" make: *** [catalyst_par] Error 25 この訳の分からない動作不具合、根的な問題は二つあります。一つにはこのcatalyst_parでP

  • 神経質(A型)なPerlハッカーあるある - D-6 [相変わらず根無し]

    神経質(A型)なPerlハッカーあるある ネタですが、実話です。 use Module; 宣言を書く時、全部ABC順にしないとイライラする。s///とかをs{}{}って書くとエスケープいらないのに、s/\\\/\\\/\\\\/g s/\\\/\\\//\\\\/gとか見るとイライラする。(追記:なんか一個抜けてた)qw// をqw()と書き直さずにはいられない。for(my $i = 0; $i < 10; $i++) とかを見ると for my $i (0..9)に書き直さずにはいされない他人からもらったファイルを開ける前はとりあえず perl -i -pe 's/\r\n/\n/g'if ( ... ) elsif (...) elsif (... ) else ... みたいなのを見るととりあえずディスパッチテーブルを書きたくなるif ($foo eq 'XXX' || $foo

  • Perlにデフォルトでインストールされているモジュールを表示する - D-6 [相変わらず根無し]

    Perlにデフォルトでインストールされているモジュールを表示する 隣のO澤くんが「Perlにデフォルトで入ってるモジュールが何かあるのかわかんないんですよねぇ」とか言ってるから、ワンライナー: # もしModule::CoreListがインストールされてないなら cpan install Module::CoreList perl -MModule::CoreList -e 'print "$_\n" for sort keys %{$Module::CoreList::version{5.008008}} ' これで一発で出るよ! AnyDBM_File Attribute::Handlers AutoLoader AutoSplit B B::Asmdata B::Assembler B::Bblock B::Bytecode B::C B::CC B::Concise B::Deb

  • Cache::Memcached::LibMemcached の非同期モードはありえないくらい速い。 - D-6 [相変わらず根無し]

    Cache::Memcached::LibMemcached の非同期モードはありえないくらい速い。 先輩! 仕事で疲れた脳を休めようと、先ほどlibmemcachedが備えているno_blockをCache::Memcached::LibMemcachedからも設定できるようにしてみたんです。で、ベンチマークを取ってみたところ・・・ daisuke@beefcake Cache-Memcached-LibMemcached$ perl -Mblib tools/benchmark.pl ==== Benchmark "Simple set() (scalar)" ==== (warning: too few iterations for a reliable count) Rate perl_memcahed memcached_fast libmemcached libmemcac

  • Text::MeCab::Dictでカスタム辞書 - D-6 [相変わらず根無し]

    Text::MeCab::Dictでカスタム辞書 ちょっとリリースそのものでバタバタしてしまいましたが、Text::MeCabを使って、mecabのカスタム辞書に語句を比較的容易に追加できるようにしました。例はText::MeCab 0.20004に同梱されているeg/add_custom.plを参照してください。 自分の場合はちょっと人名をがばっと追加したかったのでAcme::Actor::JA(codereposのみ -- CPANにはアップしてません)とText::MeCab::Dictを使って3000人程の人名を追加してやりました。これをすると何がいいかというと、これまでだとものすごく有名な人の名前で検索する場合とかに「姓」「名」に名前が分けられてしまっていたところがその名前全体をひとつの語句として認識してくれるようになります。 # 追加前 shell > 堂光一 堂 名詞,

  • 1