トップ(最新)

nDiki : Storable

Storable

シリアライズするための Perl モジュールPerl v5.8.0 から Perl に同梱されている。

スポンサード リンク

Related term

2004年1月18日 (日)

[ WiKicker ] IPC共有メモリを用いた直近のアクセスログ管理 このエントリーを含むはてなブックマーク

昨日から本格的に検討していたアクセスログ管理であるが、今回は IPC::ShareLite モジュールを使って、IPC共有メモリに置くことにした。

  • 共有メモリなのでファイルに書くより圧倒的に速い。
  • (ipc key を変更した時など)削除し忘れてメモリに残るおそれがあるので注意。
  • IPC::ShareLitePerl 5.005_03 でも動く。
  • FreeBSDを使っているサーバで共有メモリが使えた(共有メモリを使うPostgreSQL が使えるようになっている事からも心配なし)。1024 * 512 bytes 取っても問題なし。
  • Storable を使ってシリアライズ。
  • この共有メモリを扱うモジュールファイル名を__FILE__で取得し、その更新ファイルをマジックナンバーとして、共有メモリに一緒に書いておく。読んだ時に一致しなければ破棄するようにする(今後しばらく、ちょくちょく形式を変更すると思うので)。

ちゃちゃっと実装して、やっつけであるが直近のログを見れるようにした(RecentLog )。 順次表示する情報の追加や、表示数の調整を行う予定。 それから、各ページでのロギング処理が高負荷時に重荷にならないか要チェック。

スポンサード リンク


[ 1月18日全て ]

2004年8月19日 (木)

ActivePerl 5.6.1 Build 638 にバンドルされているモジュールとライセンス このエントリーを含むはてなブックマーク

ExtUtils::Installed でリストアップしてチェック。

aActivePerl::DocTools
ActiveState::RelocateTree
aActiveState::Rx
*Archive::Tar
oArchive::Zip
*Compress::Zlib
oData::Dump
*Digest
*Digest::HMAC
*Digest::MD2
*Digest::MD4
*Digest::MD5
*Digest::SHA1
*File::CounterFile
*Font::AFM
*HTML-Tree
*HTML::Parser
*HTML::Tagset
oIO::Zlib
*MD5
*MIME::Base64
*Net (libnet)
*PPM
PPM-Agent-Perl
PPM::Shell
*Perl
*SOAP::Lite
*Storable
oTest::Simple
oText::Autoformat
*Tk
*URI
oUnicode::String
*Win32 (libwin32)
aWin32::AuthenticateUser
*XML::Parser
*XML::Simple
*libwww-perl

'*' は Copyright.html で オリジナルがオープンソースのものとして列挙されているもの。 'o' は列挙されていないが、オリジナルが Perl と同じライセンスThe Artistic License のもの。 'a' は ActiveState の Copyright があるもの (ActiveState Community License)。 それ以外は明記がないもの。

PAR でパッケージ化するには、Perl と同じライセンスの(あるいは再配布の問題のないもの)もののみストールしてある状態にしておき、PAR 化した中身に

が含まれていないかをチェック。


[ 8月19日全て ]

2005年4月18日 (月)

Win32WiKicker が落ちるのは binmode の設定忘れのせい このエントリーを含むはてなブックマーク

Windows 上で WiKicker を使っていると、編集後にページの表示ができなくなる問題があるので詳しく調査。 確認してみると Storable (が呼んだ perl58.dll 内)で落ちてしまっている。

freeze してファイルに書き込んだ内容を後で読み出して thaw すると落ちるようだ。 Linux で OK で Windows で駄目。

…… binmode。

書き込み時には binmode しているのだが、読み込み時に binmode し忘れていた。 これだ。


[ 4月18日全て ]

2005年5月23日 (月)

SQLite とか DbUnit とか このエントリーを含むはてなブックマーク

最近急に RDBMS に興味をもってきた。 といっても、できればライトなやつ。

@ SQLite

Perl と相性が良さそう。SQLite はコードが少なく public domain なので、DBI用ドライバモジュール DBD::SQLiteSQLite のコードを全部取り込んでしまってある。 ActivePerl 5.8.6.811でもビルドできた。

PDLベクトルStorable (PDL::IO::Storable)でシリアライズして SQLite 保存し、後で必要な時に取り出しアンシリアライズして計算に使うっていう風にしたいんだけれど速度的にどうなんだろう。 要実験。

@ DbUnit

別件。 Oracle Database にアクセスする Java アプリケーションのテスト方法を思案中。 モックオブジェクトを使う方法も考えたけれど、やはり実環境に近い方がいいんじゃないだろうか。

となると DbUnit あたり?

そのうち設定してみるか。 開発者ごとにデータベースを作らねばならないな。


[ 5月23日全て ]

2005年6月6日 (月)

[ WiKicker ] Storable 永続化データの互換性 このエントリーを含むはてなブックマーク

fkimura 氏から WiKicker の障害レポートをいただいた。 Perl v5.8.6 へ移行した環境で WiKicker 0.26 を試してみたところエラーになってしまうとのこと。

 "Error
 action: do_read: Byte order is not compatible at blib/lib/Storable.pm
 (autosplit into blib/lib/auto/Storable/thaw.al) line 366,
 at /usr/local/lib/perl5/site_perl/5.8.6/WiKicker/DB/File.pm line 161
 at /usr/local/lib/perl5/site_perl/5.8.6/WiKicker/CGI/AbstractController.pm line 93"

(FreeBSD 4.11-RELEASE-p9)

Storableエラーを吐いている。 Storable データ形式に互換性のない環境 (Perl and/or Storable) 変化があったようだ。

例えば Storableマニュアルによれば 64bit integer をサポートするように構築された Perl v5.6.0 や v5.6.1 で Storable 2.02 以前を使って書き出したデータを他の環境で読み出すと 'Byte order is not compatible' エラーが出るとある。

確認したところ前のバージョンは Perl v5.6.2 だそうなので、もしかしたら上記の非互換性にあたってしまったのかもしれない (FreeBSDPerl って 64bit integer サポートでビルドされるようになっている?)。

@ WiKicker での対応方法

WiKicker で使用している Perlアップグレードで上記問題にあたった場合、一番簡単な方法は Storable で書き出しているページ情報ファイルを一旦全部消してしまうという方法。

WiKickerデータベースディレクトリ (wikicker.database.directory プロパティで指定しているディレクトリ)の下の、info/basic/* を全て消してしまう(一応バックアップとしてコピーした方が良い)。

この場合、各ページの「最終更新時刻、最終更新者名、要約文」が消えてしまうが、これらの消えてしまった情報は次にページを更新した時に最新の情報で上書きされる。

WikiPage そのものおよび古いリビジョンは影響がなく全て残っているので、通常の運用ではまあ許容できる範囲の対処方法か。

情報ファイルを消したくない場合は、コンバートする必要があるけれど古い Storable データを読み出せる環境で export して、新しい形式で書き直す必要があるので作業する人にとってもちょっと面倒かもしれない。いや、新しい Storable ならば $Storable::interwork_56_64bit あたりを使えば両方をきりかえて読めそうであるので、新しい環境だけあればいいのかな。


[ 6月6日全て ]

2006年1月31日 (火)

音楽再生にあわせて処理をする amaroK スクリプトを書いてみる このエントリーを含むはてなブックマーク

amaroK で聞いた音楽の情報を Last.fm に送って、最近聞いた曲を表示させてみたりアーティスト毎の集計を見てみたりしようと思っていたのだが、どうもこの機能がうまく動かない。

しょうがないので、自前でスクリプトを書いて遊んでみることにした。

@ 書き方

amaroK のスクリプトマネージャから、スクリプトをインストールし実行するとそのスクリプトが実行される。 イベントが発生する度に amaroK からスクリプトの標準入力にイベントの内容をあらわす文字列を送られてくるので、スクリプト側では標準入力を行単位で待ち受けて処理をしていけばよい。

amaroK が終了する際やスクリプトを停止した場合には SIGTERM が送られてくるので、これをキャッチして終了処理を行うようにしておく。 データの保存などの必要がなければ、特に何もする必要無し。

簡単。

http://docs.kde.org/...

スクリプトをインストールするには、一旦 .amarokscript.tar か .amarokscript.tar.bz2 にまとめおく必要がある。 スクリプトマネージャからこのファイルをインストールすると、~/.kde/share/apps/amarok/scripts/ 以下にインストールされて使えるようになる。

自分でいろいろ試す分には一旦形式的にインストールした後、直接このディレクトリの中のファイルを編集してスクリプトを改良していくのが手っ取り早い。

ただしスクリプトの編集をした後は、もちろんスクリプトマネージャでスクリプトを起動しなおす必要がある。 自分の場合はこれも面倒なので、(今回対象としたい)trackChange イベントがきたら特定のディレクトリの下のスクリプトを run-parts で走らせる最低限の amaroK スクリプトを作ってインストールしておき、あとは run-parts で実行されるスクリプトをいじって遊ぶことにした。 これだと毎回 run-parts が呼ばれて非効率は良いが、スクリプトをトライアンドエラーするには楽チンだ。

@ スクリプトから情報の取得

基本的な情報は DCOP インタフェースで取得できる。例えば amaroK で曲を再生中に

 dcop amarok player title

のように dcop コマンドを実行するとタイトルを出力させることができる。 dcop で様々な情報を取得したり、また再生・停止などの操作をしたりすることが可能。

@ 再生履歴を取得するプログラムを書いてみた

実行するたびに dcop を使って amaroK から再生中の曲情報を取得し、最後の10曲に関する情報を Storable でファイルに書き込んでおくスクリプトを作成。 あわせて、カバー画像amaroK からもらって PerlMagick で縮小して保存しておくようにした。

これであとは Web サーバを更新するようにすれば、最近聞いた曲を Web サイトに表示できるようになるはず。


[ 1月31日全て ]

2006年11月7日 (火)

DiKicker の DB に余分な情報まで保存していた このエントリーを含むはてなブックマーク

DiKicker の関連記事表示機能で、同じ記事がリストアップされることがある。 どうも Term DB のデータに不整合が起きるようだ。

とりあえずリストアップの段階で重複は取り除くようにして対応。

コードのチェックをしているうちに、記事 DB の方に余計なデータまで Storable で freeze していることに気がついてしまった。 こちらも修正。


[ 11月7日全て ]

2006年11月21日 (火)

[ DiKicker ] 語リストを Term DB に保持 このエントリーを含むはてなブックマーク

自動リンクなどで語リストが必要な時に、今までは Term DB (Berkeley DB で実装)をスキャンしてリストアップしていた。 これだと語数が増えていくにつれ線形に遅くなるので、一度リストアップしたら Term DB の別レコードに Storable で freeze してキャッシュするようにしてみた。 ちょっと速くなることを期待。

あわせてロックまわりも改善。 DiKicker では Article DB と Term DB をセットでオープンすることとし、Article DB の方で排他制御をしている。 ただし、Term DB の方には排他ロックでオープンされているか、共有ロックでオープンされているのかの情報を伝えていなかったため、実は共有ロックの時にも書き込みをしてしまう部分が残っていた。

Term DB オープン時にどちらで開いているかを通知するようにし、キャッシュ情報などの書き込み時にはこれらを参照して間違えた書き込みをしないようにした。


[ 11月21日全て ]

スポンサード リンク

■よく検索されるキーワード

torrent(113) perl(50) 書き方(41) アジェンダ(33) ドラマ(27) linux(27) 動画(24) windows(24) 提案書(22) debian(20) 冷蔵庫(18) 使い方(17) アジェンダとは(16) evernote(16) firefox(15) 画像(14) x31(14) twitter(14) java(14) usb(12) gmail(11) dropbox(11) winmerge(11) tc-1(10) tickler(10) 映画(10) 修理(10) naneyorgwiki(9) thinkpad(9) ダウンロード(9) テンプレート(9) ixy(9) lsyncd(9) nikon(9) ノート(8) svn(8) rcs(8) フリー(8) 生年月日(8) 壁紙(8) apache(8) wiki(8) インストール(7) うなぎ(7) ダイソー(7) 210(7) smtp(7) サンプル(7) 女優(7) 提案書の書き方(7) a6(7) file(7) iwgp(7) ganttproject(7) aniara(7) 写真(7) 01(6) web(6) 補助充電アダプタ(6) grub(6) cm(6) ssh(6) boblbe-e(6) モジュール(6) 無料(6) フルハルター(6) visual(6) トレント(6) ヨドバシ(6) hyde(6) 評判(6) 無料動画(6) 会議(6) ブログ(6) c++(6) 作り方(6) foma(6) skype(5) ボールペン(5) c#(5)

この日記のはてなブックマーク数 Add to Google RSS

Process Time: 0.175896s / load averages: 0.56, 0.35, 0.26
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)