perl

停止中のvm(kvm)のネットワーク設定を書き換える習作

もう一年以上更新してなかったのか…virt-cloneした後にネットワーク設定を修正するのが面倒くさいので、スクリプト一発でなんとかしたくて書いてみた。 #!/usr/bin/perl use strict; use warnings; use Sys::Guestfs; use Sys::Virt; use Data::Section::Sim…

YAPCの感想

LDRに溜まっていた約一ヶ月分*1の未読フィードをようやく消化*2し終えたので、先日参加したYAPCの感想をまとめてから寝る。 先輩同僚が色々と男前 初めて生で見たid:acotieはかわいかった yappoさんのficiaにmizzyさんとの2shotが有って、なんかうれしい 懇…

Garuda解説 #1

まともにブクマしてもらったの初めてだ*1。 というわけで、前回の続き書こうと思います。 動作フェーズ Plaggerを踏襲しています。 ごちゃごちゃ書くより、Garuda.pmのコード見てもらえれば一目りょう然ですね。 ざっくりと書くと以下のような感じになってま…

Garuda - サービス監視フレームワーク 作った

稼働中サーバのサービスの状態を監視するためのプラガブルフレームワークGarudaというのを作ったので、codereposに置いておきました。 Plaggerとか、mizzyさんのAssurerみたいなやつです。というか最初はそのAssurerを使う予定だったんですが、自分とこの環…

勝手にレス>Test::Baseのyamlフィルタで空配列を作るときの動作が理解できない

http://d.hatena.ne.jp/foosin/20090416/1239903771 ~~ snip ~~ __END__ === 1st --- i --- e [] YAML Error: Expected separator '---' Code: YAML_PARSE_ERR_NO_SEPARATOR Line: 1 Document: 2 at /usr/lib/perl5/site_perl/5.8.5/YAML.pm line 33 # Looks…

Gearman::Worker と Parallel::Prefork の組み合わせ

こちらを参考に。 use strict; use warnings; use Gearman::Worker; use Parallel::Prefork; use Storable qw( thaw ); use List::Util qw( sum ); use Perl6::Say; sub MaxRequestsPerChild () { 60 } my $pm = Parallel::Prefork->new({ max_workers => 3,…

Class::Componentのメモ

C::C::Component::Plaggerizeをつかったアプリで、__PACKAGE__->load_pluginsしたプラグインのinitから$context->confが使えなくてdieしたので、初期化シーケンスを調べてみた。 ほんとはこんなに単純ではないんだけどね。 newが呼ばれると、NEXTでさかのぼ…

配列のデリファレンスが解せん

my $hoge = {}; # 1 my @arr = @{ $hoge->{foo} }; # 2 @{ $hoge->{foo} } = qw/aa bb/; 1は死ぬけど、2は大丈夫なのな。

webalizer用ログのデコード

今時webalizerを使っている人がどれだけいるのか知らないけど、仕事でデコードロジックを最適化する必要があったのでベンチマークを晒しておきます。 webalizerに食わせる前に、apacheログのURLをアンエスケープして、特定のエンコードに変換するというもの…

screenを一個attachする

複数のターミナルを開いて、さらにそれぞれのターミナルでscreenを複数開いて作業をするというのが、僕の基本的な開発のスタイルです。 作業を中断するときにはdetachして、再開するときに、detachしておいたscreenを再度ターミナルでattachするということを…

Class::Component の run_hook にPlaggerライクな rule をかます(その2)

昨日の続き。 今回は新たに定義したRuleHookアトリビュートを使ってruleをかませました。こっちのほうが、run_hookを上書きすることも無く、フレームワークとして綺麗ですね。 他にもいい方法あるかな?変更点は… package Naoya; use strict; use warnings; …

Class::Component の run_hook にPlaggerライクな rule をかます

技術ブログのつもりではじめた日記だけど、自転車と日々のことをだらだらと綴ってばかりいるぞ! 久しぶりにperlのことを書くぞ!さて、最近Class::Componentを使ったアプリを作ってるんですが、Plaggerみたいにrule使いたいなーと思って頑張ってみました。 …

perl のuseとかimport

激しくはまったのでメモ。 perlのuseとかrequireは対象パッケージが特殊変数%INCへエントリ済みの場合はインクルード済みとみなされ、再度読み込まれることは無い。ってのは知っていた。 しかしー。useの場合、importは何回でも走る。

CodeReposに初import

コミット権を頂いたので、開発中のモジュールを一個初importしました。 Perse::Syslog::Period 仕事柄、ログ(syslog)を解析することが多いのですが、期間を指定して解析できるものが見あたらなかったので作りました。自分で使ってみた限りでは便利だともう…

Cache::Memcached::Managed ではまったこと

Cache::Memcached::Managedを試しにさわっててはまったことをメモしとく。 C::M::Managedはキャッシュのキーをサブルーチンの完全修飾名から自動生成してくれるらしいので、そのテストをしてた。 テストに使ったクラス package Hoge; use strict; use warnin…

Cache::Memcached::Managed

前にmemcachedのネームスペースの件でエントリを書いたんだけど、Cache::Memcached::Managedって便利なモジュールがすでにあることを今日知った。 僕が書いたdelete_cacheみたいなことは、delete_groupメソッドで出来るし、keyなんて自動生成してくれる。な…

memcached の ネームスペース

職場の自転車部サイクリング大会が雨で中止になって暇なので、兄がPHPで書いたmemacheクラスをperlでリファクタリングした。 memcachedにネームスペース機能を付けると、まとめてデータ削除できたりして便利だよねーって話。 memcachedやAPCは、ネームスペー…

YAPC::Asia 2008 行ってきた

色んなところにレポートが上がってるので内容はいいか。自分への課題として、 「社交性をなんとかしろ」 2日間ほとんど人と話さなかったよ。普段からネットでの交流とかも一切しない人間なので、知り合いが皆無。話すきっかけもありゃしない。同業者のmizzy…

XMLRPC::Transport::HTTP のロギング

XMLRPC::Transport::HTTP::Daemonでサーバ作っってたらログの取り方でとても困った。小汚い方法でなんとかなったけども、もっとスマートな方法を誰か教えてくれないかなーと淡い期待をこめて晒しておく。SOAP::Liteを継承したモジュールでログを取ろうと思っ…

YAPC::ASIA チケット購入

久しぶりにYAPC::ASIA見てたら、チケット発売開始してるじゃないですか。そんで、既にに売り切れてるじゃないか!ガビーン。 幸い少量の追加販売があるというので、すかさずTwitterを確認。丁度販売開始のアナウンスが書き込まれていたので、光の速さで購入…

Test

最近になってようやく計画的にテストを書くようにした。 テスト最高!つか今までどんだけ無駄なエネルギーを使ってたのか思い知らされた。 独学でプログラムやってると、こういうことを啓蒙してくれる人が居なくていけないね。

HTTP::Async で XML-RPC

仕事で結構な数のサーバスペックを管理してるんだけど、こいつらの情報収集が結構大変。サーバに仕込んだXMLRPCなAPIに対して、管理サーバのアプリを大量にfork->並列リクエストしてるんだけど、消費メモリが尋常じゃない。こんな無駄使いは環境に宜しくない…

perlのプロセス実効ユーザー名

これでええんかな。$( がいやな感じ。 print 'My name is ', getpwuid( $( );

やっつけなメール送信

http://d.hatena.ne.jp/srkzhr/20080221/1203599466 「件名」はFromやTo:と同じヘッダフィールドに入るため、文字コード変換 だけではダメで、さらにMIMEエンコードしてやる必要があります。特にパフォーマンスを期待しないやっつけ仕事のときは、めんどくさ…

blessではまった

またしょーも無いことで結構時間を食ってしまった。こんな風にblessした。 bless { opt1 => $args->{hoge} || die "missing hoge", opt2 => 'foo', }, $class; そしたらopt2取れないの。考えること30分あまり。 これで解決。 bless { opt1 => $args->{hoge} …

TheSchwartzのexit_statusのこと

TheSchwartzを使ってみた。 なかなか便利そうなんだけど、job情報の取得の仕方がイマイチわからん。メインのアプリ側からjobidをキーにして、exit_statusを参照したいだけなんだけど、それを簡単に出来るメソッドが見当たらない。 TheSchwartz::Jobクラスにe…