perl

RabbitMQ のクラスタリング機能にキューのミラーリングが追加されたので RabbitFoot (AnyEvent::RabbitMQ) から試してみる

クラスタリングやキューのミラーリングの詳細は、下記参照の事。 RabbitMQ - Clustering Guide RabbitMQ - Highly Available Queues RabbitMQ をクラスタリングする 今回はサーバを複数用意できなかったので、一つのサーバ上で RabbitMQ を二つ起動する。 % …

CCCrypt(Objective-C) で暗号化したデータを Crypt::OpenSSL::AES(perl) で復号化する

iPhone/iPad/iPod で暗号化(AES256 を使用)したデータをサーバ側で復号化するのに半日ハマったのでメモ。まず、ObjC 側。CCCrypt の解説は方々に存在しているので割愛。IV に NULL を指定しているので 0x00 が 16 Byte という事になる。 CCCrypt( kCCEncrypt…

Mochikit で sendXMLHttpRequest する際に Content-Type を設定しないと、CGI.pm で URL エンコードされた POST データを受け取れない

サーバの入れ替えを行う際に、時間を無駄にしたのでメモ。旧環境では、下記のコードで問題なく動作していたのだが… // ..snip.. var r = getXMLHttpRequest(); r.open('POST', CGI_PATH, true); var args = formContents('form_id'); this.d = sendXMLHttpRe…

vim-ref のプラグインを自作する

vim-ref は、プラグインで拡張できる設計となっているので、試しに Twitter 検索用のプラグインを自作してみました。 と言っても、Twitter 検索を実行する適当なコマンドを Perl で自作し、プラグインの中から実行しているだけの簡単な仕組みです。 ref-twit…

Perl で作成した RabbitMQ 専用クライアントライブラリを AnyEvent と Coro で非同期化しました

以前、AMQP と RabbitMQ を学ぶために RabbitFoot という名前の Perl 版のクライアントライブラリを作成したのですが、非同期化して欲しいと要望を頂いたので、AnyEvent と Coro を利用してみました。 AnyEvent と Coro は、今回、初めての利用となるため、…

RabbitMQ でお手軽 Client-Server モデルを実現する

Erlang のコードは一行も出てきません。 以前作った RabbitFoot を使うので、Perl のコードしか出てきませんが、RabbitMQ(AMQP) を理解する助けになると思います。 事前準備 Client から Server へ Request を送るための Queue を用意します。 % /path/to/ra…

RabbitMQ を Perl から利用するため、AMQP Client と管理用のコマンドラインツールを作りました

素直な書き方をしている*1ので、コードを読んでもらえれば AMQP が何か解ります。*2 cooldaemon's RabbitFoot at master - GitHub AMQP Client の概要 RabbitFoot という名前です。内部で Net::AMQP を利用しています。 RabbitMQ 1.7.0 が対応している AMQP …

quickfix で Template::Toolkit によるテンプレートファイルのシンタックスチェックを行う

flymakeでTemplate::Toolkitによるテンプレートファイルのシンタックスチェックを行う - antipop を見て良いなーと思ったので vim でやってみました。ありがたやー。 Source は、gist: 66796 - GitHub にあります。

Webistrano で Catalyst で作ったアプリをデプロイする

とある Subversion をリポジトリとするプロジェクトで、デプロイツールとして Capistrano を使用しようと思ったのですが、私と同僚の開発環境が異なる事を理由に、前から目を付けていた Webistrano を試してみました。 動作環境 apache 2.2.9 mysql 5.0.67 r…

Danga::Socket を使って Echo Server と Client を書いてみた

erlang perl 間を TCP/IP で接続しようと思い立ち、そーいや Danga::Socket ってのがあったなーと思い出したので、試しに Echo Server と、その Client を作ってみた。 こんな感じで良いのだろうか? とりあえず、動いてる。 参考 URI Danga::Socket::Callba…

Perl + MySQL で cp932 を使っている際、'表' 等のように 0x5C が含まれる文字を INSERT するとエラーになる場合の対処方法

悲しい大人の事情で、MySQL に cp932 のデータを保存する事になったので、そのメモ。 環境 CentOS 5.1 perl 5.10.0 DBD::mysql 4.007 CREATE DATABASE foo CHARACTER SET cp932; GRANT SELECT, DELETE, UPDATE, INSERT ON foo.* TO bar@localhost IDENTIFIED…

TTSite で作った MyApp::View::TT を Catalyst::View::Templated を使うように書き換えてみた

package MyApp::View::TT; use strict; use warnings; use base 'Catalyst::View::Templated'; use Template; MyApp->config->{'View::TT'} = { EVAL_PERL => 0, TEMPLATE_EXTENSION => '.tt2', CATALYST_VAR => 'c', INCLUDE_PATH => [ MyApp->path_to('roo…

CentOS 5.1 に perl 5.10 を yum から入れる(ついでに、MySQL 5.0 も・・・)

CentOS 5.1 で、ローカル環境向け yum リポジトリサーバを作ってみる - cooldaemonの備忘録 の続き。 CentOS 5.1 向けの RPM に perl 5.10 は存在しないので Fedora から SRPM をもらってきて、RPM を作る事にする。 ローカルにビルド環境を作る root で作業…

MVC の実現の仕方(私の場合)

以下のエントリを拝見させて頂いて、思った事のメモ。 MVCのモデルはDBじゃなくてもいいんだよ - D-6 相変わらず根無し個人差があるかとは思いますが、Catalyst を使っていると、 C のテストを書く行為を、私は、そんなに苦に感じない。ただ、C は URI リ…

perl erlang プロセス間で直接メッセージを送受信する

単純に erl_interface を Inline::C から使っただけなんですが(w; erlang 側の準備 特別な準備は無し。 とりあえず、送受信するプロセスを適当に作っておく。 -module(pingpong). -compile(export_all). start() -> register(pingpong, spawn(?MODULE, loo…

シンタックスを 5.10 対応にした(添削希望)

早く、公式 で対応して欲しい。 diff ~/.vim/syntax/perl.vim.org ~/.vim/syntax/perl.vim/syntax/perl.vim 74a75,77 > syn match perlConditional "\<given\>" > syn match perlConditional "\<when\>" > syn match perlConditional "\<default\>" 76c79 < syn keyword perlCondition</default\></when\></given\>…

テスト用 DB の準備を行うモジュールを作った

Catalyst 本を参考に、やっつけで書いてみた。 Catalyst 本との違いは fixture に対応している点。 使い方(Test::WWW::Mechanize::Catalyst と連携等)や解説は、近いうちに書く。後で Helper にする。 package MyApp::Test::Database; use strict; use warni…

pre-commit hook で (コメントを YAML 化 | Perl::Tidy を使って source を整形 | Perl::Critic を使って source を評価)

タイトルにあるような事を行うモジュールを作ってみました。 source http://labs.miu.vc/svn/cooldaemon/perl/SVN-Hook-PreCommit/ POD が雛形そのまんま。 使い方 モジュールをインストールした後に、下記を /path/to/hooks/pre-commit として保存する。 #!…

vim の erlang 用辞書ファイルを Web::Scraper で作る

やっつけだけど動く。Web::Scraper 便利すぎ! #!/usr/bin/env perl use strict; use warnings; use List::MoreUtils qw(uniq); use URI; use Web::Scraper; my $scraper = scraper { process '//html/body/p/table/tr/td[3]/a', 'functions[]' => 'text'; r…

インサートモード時の が use しているファイルの中を検索するからウザイ

CPAN モジュールをわんさかインストールしているので、 が非常に重い。 インストールされいてる CPAN モジュールから辞書ファイルを自動生成しているので、辞書ファイルからだけ補完されれば良い。help cpt を見ると・・・ *'complete'* *'cpt'* *E535* 'com…

catalyst で作ったアプリを capistrano でデプロイ

capistrano インストール gem install capistrano Capfile を配置 capify コマンドで Capfile と config/deploy.rb を作ってくれるが、今回は自前で用意する。好きなディレクトリに下記内容の Capfile ファイルを配置する。 catalyst.pl コマンドで作ったデ…

Date::Japanese::Holiday を利用して Date::Simple に営業日を加算・減算する method を追加

強引ですが。 package Date::Japanese::BusinessDay; use strict; use warnings; use vars qw($VERSION); $VERSION = '0.01'; use base qw(Date::Japanese::Holiday); use Class::Data::Inheritable; package Date::Simple; { no strict 'refs'; *{__PACKAGE…

コマンド一発で、screen を起動して Catalyst の各種ディレクトリに移動

Catalyst Teamwork with Screen and VIM この記事を見て、便利そうだと思ったので、即興ですが、こんなん作ってみました。 http://labs.miu.vc/svn/cooldaemon/env/bin/start_working_with_catalyst.pl ちゃんと動作確認してませんが、手元の環境では問題な…

inflate_column

ブログが続かないわけ | DBIC で+select と+as : ああ、今頃気づくなんて... でも、どうにも不便だと思ってDBIx::Class::ResultsetのPODを読んでいると、+select と+as なるものがあるじゃないですか。これだと、まさに先ほど直感的に書いたような方法で書け…

CSS の syntax check

WebService::Validator::CSS::W3C を使用すると、W3C CSS 検証サービス の API を使ったコマンド等が簡単に作れる。以下、やっつけで作った CSS のチェックツール #!/usr/bin/perl use strict; use warnings; use WebService::Validator::CSS::W3C; my $file…

Crypt::SSLeay インストール時のエラー回避

どうでもイイ環境なので、適当にメモ。AIX ver 5.3 / xlc ver 5 / perl ver 5.6.1 上記の古〜い環境で、 Crypt::SSLeay ver 0.53 をインストールする際、下記のようなエラーメッセージが表示された。 "crypt_ssleay_version.h", line 1.10: 1506-296 (S) #in…

Line-Ending Punctuators を無効に

id:cooldaemon:20070221 の jslint を使って、下記の syntax check を行うと・・・ child_node: function (msgs) { return DIV( {'class':'error'}, UL({'class':'error'}, map(partial(LI, {'class':'error'}), msgs)) ); } 下記のエラーが出る。 xxxx.js:4…

FormValidator::Simple で同名の複数パラメータを扱う

id:cooldaemon:20070301 で、FormValidator::Simple の Author id:lyokato 様にトラックバックを頂いたので、そのご返信。 Codin’ In The Free World - FormValidator::Simple multivalue fields こういうのはどうかなーっていう案はあるんだけど。 COUNTっ…

FormValidator::Simple IN_ARRAY で、同名のパラメータが複数ある場合

例えば、下記のような HTML があったとする。 <input type="checkbox" name="hobby" value="music" /> Music <input type="checkbox" name="hobby" value="movie" /> Movie <input type="checkbox" name="hobby" value="game" /> Game この場合、SELECTED_AT_LEAST を使って、下記のようなチェックを行う事がある。 FormValidator::Simple->check($q => [ hobby => ['NOT_B…

Sub::Curry で引数を固定したり、Sub::Compose で関数を合成したり・・・

Mochikit の partial とか compose が便利で perl にもないものかと探してみた。 Sub::Curry - Create curried subroutines - search.cpan.org Sub::Compose - search.cpan.orgちなみに、Mochikit の partial は source 見た感じ、currying してないっぽい。…