このごろ作っているものが幾つかあるのだけど備忘録代わりにこの辺はこうしているということを書いて行こうかなと思います。 まずは Perl によるアプリケーションのデプロイについて。id:antipop と id:shiba_yu36 が開発した "Cinnamon" というミニマムなデプロイツールを利用しています。 Cinnamon - A minimalistic deploy tool https://github.com/kentaro/cinnamon シンプルで使いやすいデプロイツールです。 Capistrano? デプロイツールの定番といえば Capistrano で、最初は Capistrano を使っていました。けど、作っているものはほぼ Perl で書かれているのにデプロイツールだけ Capistrano で Ruby というのが、例えばモジュールの管理に Carton と
自動テストのためにメールサーバを一時的に起動する Posted 2012年12月6日 by uchiyama & filed under プログラミング. メール本体を組み立てるロジックとメール送信部分が結合しているようなシステムを自動テストする際に、 一時的に立ち上がるメールサーバが欲しくなります。 また、メールサーバにどんなメールが届くのかをチェックできると嬉しいですね。 Test::TCPとNet::Server::Mail::SMTPを使えば、これを実現できます。 Test::TCPは、開いているポートをスキャンして、サーバ側のコードとクライアント側のコードを実行してくれるモジュールです。 Net::Server::Mail::SMTPは、メールサーバを簡単に書けるようにしてくれるモジュールです。各SMTPコマンドに対して処理を書くことができます。 この2つのモジュールを組み
PhantomJS といえば、WebKit を headless でうごかせて便利なやつですが、PhantomJS 1.8 から Ghost Driver がくみこまれるようになりました。 わかる人むけにかくと「JSONWire Protocol をサポートする httpd が phantomjs にくみこまれた」ということです。 GhostDriver は WebDriver Wire Protocol の1実装です。で、そのクライアントライブラリとして Selenium::Remote::Driver が CPAN にあがっていますから、これをつかって簡単に phantomjs とやりとりができます。 Selenium::Remote::Driver という名前のとおり、Selenium もつかえますんで、selenium をつかって、対応しているブラウザでのテストもできるのがいいかん
Server::Starter の SYNOPSIS には、自分で Server::Starter 配下で実行するサーバを作る場合の例があります。 # in my_httpd use Server::Starter qw(server_ports); my $listen_sock = IO::Socket::INET->new( Proto => 'tcp', ); $listen_sock->fdopen((values %{server_ports()})[0], 'w') or die "failed to bind to listening socket:$!"; while (1) { if (my $conn = $listen_sock->accept) { ... } } ところでこのサーバは Perl でなければ書けないのか? というと、そんなことはないのですね。 Se
この記事はtech.kayac.com Advent Calendar 2012の22日目です。 @songmuです。ゲーム作ったりしてると、乱数が必要になってきますがそれについて書きます。 多くの人にとっては当たり前の話も多く出てくるかと思いますがご容赦ください。間違ってる記述があった場合は突っ込みください。 擬似乱数とは何か 計算機は単体では厳密な意味での乱数を生成することができません。実際には一様に分布する乱数の集合を算術的に求めている場合がほとんどです。 その乱数の集合は以下を満たす必要がありますが、そういう小難しいことは偉い人に任せて、巨人の肩に乗って解決してしまえば良いでしょう。 偏りがなく一様に分布している 途中の出力から未来が予測しづらい 高速に算出できるか つまり? 色々な疑似乱数生成法がありますが、多くの場合、 馬鹿でかい乱数の循環リストがある と考えるとわかりやすいで
id:tokuhirom さんが http://d.hatena.ne.jp/tokuhirom/20081209/1228829454 で下地をつくってくださったので(perl-users.jp むけまとめも期待してます),ちょっとアドバンスドな話題を。 例題 http://www.sra.co.jp/people/m-kasahr/eb/ http://www.sra.co.jp/people/m-kasahr/eb/ の Perl binding を開発するとしましょう。 http://www.sra.co.jp/people/m-kasahr/eb/ の使い方は,たとえば次のような感じです。 EB_Book *book_pointer; book_pointer = (EB_Book *) malloc(sizeof(EB_Book)); eb_initialize_book(bo
本連載では第一線のPerlハッカーが回替わりで執筆していきます。今回はgfxこと藤吾郎さんで、テーマはPerlの内部構造です。 内部構造を覗く Perlで開発をしていると、ときどきわかりにくい現象に遭遇することがあります。たとえば、あるデータをJSON(JavaScript Object Notation)にシリアライズするとき、数値としてシリアライズしてほしい値が文字列としてシリアライズされてしまう。あるいは、エンコーディングが正しいはずなのに文字化けが起きる。こんなときは、思いきってPerlの内部構造を覗くことで、何が起きているかを突き止めることができます。 本稿では、Perlの内部構造について解説します。言及するperlはバージョン5.16.0(2012年5月21日リリース)です。また、ターミナルのエンコーディングはUTF-8を想定しています。なお、Perl処理系はC言語で書かれてい
最近子供が産まれたaraga(@ken39arg)です。 このエントリはtech.kayac.com Advent Calendar 2012 6日目の記事です。 テーマは「私の中のマイイノベーション 2012」 2日目の記事を見て、条件反射的に僕もおっぱいについての記事を書こうと思いましたが、 産まれた子供が「お父さんはいつもおっぱいのことばっかり考えていて気持ち悪い」と思ってしまったらと思うと、こんな危険な橋を渡るわけには行かず、 実際いつもおっぱいのことばかり考えているんですけど、おっぱいのことなんて全然興味ないです。 息子よ、父さんはいつだってまじめに働いているよ! というわけで今年作った"まじめな"ツールのMySQL::Sharding::Clientを自画自賛したいと思います。 MySQL::Sharding::Client MySQL::Sharding::Clientは一言
この項、必ず追記を参照のこと。 Gearmanを使ったジョブの処理を書いていて、 gearmandを起動 workerプロセスを起動 clientがジョブを投げ、先に起動したworkerがそれを処理 返ってきた結果を検証 テスト終了時には、gearmand/workerをシャットダウン ってのを全部いっぺんにできないかなーってんで、Test::TCPでやってみました。workerプロセスはlistenする必要がないので、 no warnings 'redefine'; local *Test::TCP::wait_port = sub {}; とかしちゃってるところが「ヒャー」って感じですが、まあいいかな、と。。。他にいい方法があったら教えてください!!1 use strict; use warnings; use Test::TCP; use Test::More; use Gearma
以前 Working with Unix Processesという本を読んだのですが、この本がUnixにおけるプロセスについて非常にわかりやすく解説されていました。それで自分で内容をメモしてみたり、さらにわからないところを調べたり、参考のプログラムをPerlで書いたり(この本ではRubyで書かれています)してみたのですが、ブログにまとめてなかったので、ちょっと書いてみます。 (注意)書いていたらすごく長くなりました。興味のある方は、適当に時間のあるときにでもどうぞ。 Chapter 2 : Introduction プロセスのことを知るとコードを読むだけでは分からないややこしい問題が分かるようになるよ Chapter 3 : Primer Unixはユーザ空間とカーネル空間がある kernelの機能はsystem call経由で利用する ユーザ空間ではプログラムが動く manual man
perlでデータベースを使う時に誰もが必ず使うDBI。その接続時に使うconnectメソッドの第4引数に設定しているオプションがサービスによりまちまちなんだけど、だれか鉄板設定を教えてください。 僕が使うのが、 my $dbh = DBI->connect($dsn, $user, $password, { AutoCommit => 1, PrintError => 0, RaiseError => 1, ShowErrorStatement => 1, AutoInactiveDestroy => 1, }); これ。 加えて、mysqlであれば mysql_enable_utf8 => 1 mysql_auto_reconnect => 0, SQLiteだと sqlite_unicode => 1 sqlite_use_immediate_transaction => 1 を追加し
昨日のはてなのホットエントリーに『入門ベイズ統計』の読みどころという記事が載っていました。ベイズ理論の人気は根強いですね。 ベースとしての数式は割とシンプルなので、自分で実装してもそれ程手間は掛からないかもしれません。しかし、CPANのモジュールとして提供されているので、そちらを使用するのも良いかと思います。私が知っている所では、Algorithm::NaiveBayesが簡単で使いやすかったです。 昔書いたコードですが、下のサンプルでは簡単なスパムフィルターを作っています。spam.txtとham.txtは、それぞれのコーパスを形態素解析して作った単語のみのリストです。test.txtは、判定したい文章から抽出した単語のリストです。スパムとハムの量を増やせば、これだけでも割と使い物になります。 応用例としては、スパムとハムの2種類のカテゴリだけではなく、複数種類のカテゴリを作ればブログの
2012/11/09 Mojoliciousのログにパッケージ名と行数も出力してみた Mojoliciousを使っていて、時々ログが何処から書き出されたのかを把握したい場合があります、よね? 私はあります。 デバッグ情報を沢山出力していると、何処の情報だったのかを簡単に把握するのが難しくなります、よね? それで、Mojoliciousにそんな機能がないかなー、と探っていたのですが、どうにも無さそうなので、作ってみました。 と言っても、pluginではなく、startupの中にredifineしてやりました。 とりあえず、パッケージ名と行数がわかれば見当はつくということで。テンプレートの中のエラーはわかりませんが。 一応、debug仕様の時だけ実行するようになっています。 以下のプログラムは、$ mojo generate app MyappPLという感じで作った後のlib/MyappPL.
Perl › here XSを使ったC/C++のバインディングについて解説します。まず最初に、XSモジュールを作成する方法について解説します。 1. XSモジュールの作成 では実際にXSモジュールを作成してみましょう。XSモジュール作成コマンド、Makefile.PL、makeについて丁寧に解説しています。 XSモジュールを作成する 2. perlapi XSからPerlのデータを操作する方法にについて解説します。PerlはC言語で実装されていますが、Perlの機能をC言語から呼び出すためのAPIがたくさん用意されています。 perlapi - XSにおけるデータ操作のためのAPI 3. Makefile.PL関連 Makefileを生成するために、Perlでは、Makefile.PLというファイルを作って、ExtUtil::MakeMakerというモジュールを使用します。このExtUti
TheSchwartzも良いのですが、MySQLが必要だったりポーリングのタイムラグがあったりと、要件に合わない場合というのも出て来たりします。こんな時はどうするか、解決策の一つにメッセージバスがあります。 メッセージバスとして一般的に有名なのが、DBusです。Linux等では数多くのアプリケーションが採用しており、GNOMEもBonoboからの移行を表明、KDE4でも採用される様です。ちなみに私が愛用している軽量デスクトップROXは当初に採用しており、ちょっとしたpythonのコードでリッチなアプリケーション間通信が実現出来ています。他にも既に色々なプロジェクトでDBusが使われています。 さて今日はNet::DBusを使い、TheSchwartzと似たような事が出来ないかをWindows上でやってみようかと思います。 まず、DBusのWindows実装であるwinDBusをインストール
今携わっているperl (Catalyst)で開発しているWeb Applicationは、Redmineでプロジェクト管理、git + gitosisでソースを管理している。 Jenkinsは成果物をコンパイルするプロジェクトに使うという先入観があったのだが、導入してみてRedmineでのチケットの発行単位、コミットの間隔、テストスクリプトの内容などが自然と細かくなってきた。 Jenkinsを導入してみて一番変わったのは、テストに対する意識だと思うけど、まぁ使ってみないとなかなか理解し難いとは思うので、どのように使っているのかを紹介してみます。 Jenkinsの動作に必要なperlのモジュールがありますので、先に入れておく必要があります。こちらで使っているperlのバージョンは5.16.0なのでバージョンによって違うかもしれません。 Storable Digest::MD5 Devel:
PerlモジュールAsync::Queueをリリースした。 http://search.cpan.org/perldoc?Async%3A%3AQueue このモジュールは、あらかじめ登録した非同期処理を立て続けに実行する際に、実行並列度に制限をかけてFIFO実行してくれる、というもの。 ぶっちゃけた話、async.jsのqueueオブジェクトと同じ。(同じAPIを切ってある) 以下、使用例。 use strict; use warnings; use AnyEvent; use AnyEvent::HTTP; use Async::Queue; my $q = Async::Queue->new(concurrency => 3, worker => sub { my ($url, $callback) = @_; print STDERR "Start $url\n"; http_ge
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く