nDiki : Storable
Related term
2004年1月18日 (日)
■ [ WiKicker ] IPC共有メモリを用いた直近のアクセスログ管理

昨日から本格的に検討していたアクセスログ管理であるが、今回は IPC::ShareLite モジュールを使って、IPC共有メモリに置くことにした。
- 共有メモリなのでファイルに書くより圧倒的に速い。
- (ipc key を変更した時など)削除し忘れてメモリに残るおそれがあるので注意。
- IPC::ShareLite は Perl 5.005_03 でも動く。
- FreeBSDを使っているサーバで共有メモリが使えた(共有メモリを使うPostgreSQL が使えるようになっている事からも心配なし)。1024 * 512 bytes 取っても問題なし。
- Storable を使ってシリアライズ。
- この共有メモリを扱うモジュールファイル名を__FILE__で取得し、その更新ファイルをマジックナンバーとして、共有メモリに一緒に書いておく。読んだ時に一致しなければ破棄するようにする(今後しばらく、ちょくちょく形式を変更すると思うので)。
ちゃちゃっと実装して、やっつけであるが直近のログを見れるようにした(RecentLog )。 順次表示する情報の追加や、表示数の調整を行う予定。 それから、各ページでのロギング処理が高負荷時に重荷にならないか要チェック。
- [ WiKicker ] 「最近のアクセスログ」処理思案 (2004-01-17)
- [ WiKicker ] SunOS 5.6 にインストール (2003-04-23)
- FreeBSD と Apache::Htpasswd (2006-03-02)
- WiKicker 0.38 リリース - 認証・承認用コードの実装 (2006-09-14)
- WiKicker に JSON でのページ出力機能を追加 (2007-04-03)
2004年8月19日 (木)
■ ActivePerl 5.6.1 Build 638 にバンドルされているモジュールとライセンス

ExtUtils::Installed でリストアップしてチェック。
| a | ActivePerl::DocTools |
| ActiveState::RelocateTree | |
| a | ActiveState::Rx |
| * | Archive::Tar |
| o | Archive::Zip |
| * | Compress::Zlib |
| o | Data::Dump |
| * | Digest |
| * | Digest::HMAC |
| * | Digest::MD2 |
| * | Digest::MD4 |
| * | Digest::MD5 |
| * | Digest::SHA1 |
| * | File::CounterFile |
| * | Font::AFM |
| * | HTML-Tree |
| * | HTML::Parser |
| * | HTML::Tagset |
| o | IO::Zlib |
| * | MD5 |
| * | MIME::Base64 |
| * | Net (libnet) |
| * | PPM |
| PPM-Agent-Perl | |
| PPM::Shell | |
| * | Perl |
| * | SOAP::Lite |
| * | Storable |
| o | Test::Simple |
| o | Text::Autoformat |
| * | Tk |
| * | URI |
| o | Unicode::String |
| * | Win32 (libwin32) |
| a | Win32::AuthenticateUser |
| * | XML::Parser |
| * | XML::Simple |
| * | libwww-perl |
'*' は Copyright.html で オリジナルがオープンソースのものとして列挙されているもの。 'o' は列挙されていないが、オリジナルが Perl と同じライセンスか The Artistic License のもの。 'a' は ActiveState の Copyright があるもの (ActiveState Community License)。 それ以外は明記がないもの。
PAR でパッケージ化するには、Perl と同じライセンスの(あるいは再配布の問題のないもの)もののみストールしてある状態にしておき、PAR 化した中身に
- ActivePerl/*
- ActiveState/*
- PPM/* (一部)
- ppm-conf/*
- Win32/AuthenticateUser.pm
が含まれていないかをチェック。
- PAR + ActivePerl で実行形式ファイルを作った時のライセンスは? (2004-07-21)
- 自前 PPM リポジトリの管理 (2006-07-03)
- 21:00 Xalan-Java + Bean Scripting Framework で Perl を使うぞ (2001-11-27)
- PAR に関する ActivePerl のライセンス (2006-06-16)
- RPC::XML のかわりに XMLRPC::Lite (2004-08-31)
2005年4月18日 (月)
■ Win32 で WiKicker が落ちるのは binmode の設定忘れのせい

Windows 上で WiKicker を使っていると、編集後にページの表示ができなくなる問題があるので詳しく調査。 確認してみると Storable (が呼んだ perl58.dll 内)で落ちてしまっている。
freeze してファイルに書き込んだ内容を後で読み出して thaw すると落ちるようだ。 Linux で OK で Windows で駄目。
…… binmode。
書き込み時には binmode しているのだが、読み込み時に binmode し忘れていた。 これだ。
- WiKicker の Win32 対応 (2005-04-04)
- XAMPP で WiKicker を動かしてみた。PPM インストール OK。 (2007-02-09)
- 今日のさえずり: ロック方式のバージョン管理機能やっぱりお肌にあわない (2010-10-20)
- PPM::Make と META.yml (2004-10-14)
- JSmooth で Win32 上でのJava プログラム起動ファイル作成 (2004-12-06)
2005年5月23日 (月)
■ SQLite とか DbUnit とか

最近急に RDBMS に興味をもってきた。 といっても、できればライトなやつ。
@ SQLite
Perl と相性が良さそう。SQLite はコードが少なく public domain なので、DBI用ドライバモジュール DBD::SQLite は SQLite のコードを全部取り込んでしまってある。 ActivePerl 5.8.6.811でもビルドできた。
PDLのベクトルを Storable (PDL::IO::Storable)でシリアライズして SQLite 保存し、後で必要な時に取り出しアンシリアライズして計算に使うっていう風にしたいんだけれど速度的にどうなんだろう。 要実験。
@ DbUnit
別件。 Oracle Database にアクセスする Java アプリケーションのテスト方法を思案中。 モックオブジェクトを使う方法も考えたけれど、やはり実環境に近い方がいいんじゃないだろうか。
となると DbUnit あたり?
- [ Perl ] PDL 2.4.1 から eigens が固有ベクトルを列ベクトルで返すように (2004-03-05)
- [ WiKicker ] Storable 永続化データの互換性 (2005-06-06)
- Rubric でプライベート SBS を立てるも 0.140 では日本語に不具合 (2006-07-22)
- 専用 Ruby と OpenSSL をビルドして Redmine を入れるときの落とし穴 (2010-11-24)
- 「依存関係検査のしにくいモジュール」に依存するスクリプトをPARで実行形式化する (2005-03-08)
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 だそうなので、もしかしたら上記の非互換性にあたってしまったのかもしれない (FreeBSD の Perl って 64bit integer サポートでビルドされるようになっている?)。
@ WiKicker での対応方法
WiKicker で使用している Perl のアップグレードで上記問題にあたった場合、一番簡単な方法は Storable で書き出しているページ情報ファイルを一旦全部消してしまうという方法。
WiKicker のデータベースディレクトリ (wikicker.database.directory プロパティで指定しているディレクトリ)の下の、info/basic/* を全て消してしまう(一応バックアップとしてコピーした方が良い)。
この場合、各ページの「最終更新時刻、最終更新者名、要約文」が消えてしまうが、これらの消えてしまった情報は次にページを更新した時に最新の情報で上書きされる。
WikiPage そのものおよび古いリビジョンは影響がなく全て残っているので、通常の運用ではまあ許容できる範囲の対処方法か。
情報ファイルを消したくない場合は、コンバートする必要があるけれど古い Storable データを読み出せる環境で export して、新しい形式で書き直す必要があるので作業する人にとってもちょっと面倒かもしれない。いや、新しい Storable ならば $Storable::interwork_56_64bit あたりを使えば両方をきりかえて読めそうであるので、新しい環境だけあればいいのかな。
- [ WiKicker ] キャッシュまわりにバグ (2004-06-05)
- [ WiKicker ] SpeedyCGI 対応するも…… (2003-11-09)
- SQLite とか DbUnit とか (2005-05-23)
- [ Perl ] Memcached を使ってみる (2004-01-12)
- 専用 Ruby と OpenSSL をビルドして Redmine を入れるときの落とし穴 (2010-11-24)
2006年1月31日 (火)
■ 音楽再生にあわせて処理をする amaroK スクリプトを書いてみる

amaroK で聞いた音楽の情報を Last.fm に送って、最近聞いた曲を表示させてみたりアーティスト毎の集計を見てみたりしようと思っていたのだが、どうもこの機能がうまく動かない。
しょうがないので、自前でスクリプトを書いて遊んでみることにした。
@ 書き方
amaroK のスクリプトマネージャから、スクリプトをインストールし実行するとそのスクリプトが実行される。 イベントが発生する度に amaroK からスクリプトの標準入力にイベントの内容をあらわす文字列を送られてくるので、スクリプト側では標準入力を行単位で待ち受けて処理をしていけばよい。
amaroK が終了する際やスクリプトを停止した場合には SIGTERM が送られてくるので、これをキャッチして終了処理を行うようにしておく。 データの保存などの必要がなければ、特に何もする必要無し。
簡単。
スクリプトをインストールするには、一旦 .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 で縮小して保存しておくようにした。
- 今日のさえずり - 吉野家の牛丼、肉の厚さが改善された気がする (2009-12-08)
- Evernote 使用開始 (2009-03-03)
- 今日のさえずり - ロディアじゃなくてロディだった (2009-06-08)
- フォト イメージング エキスポ 2005 (2005-03-18)
- 今日のさえずり: 最初に受信したのが「うんこ」だった。Arrow の全てがわかった気がした。 (2011-12-15)
2006年11月7日 (火)
■ DiKicker の DB に余分な情報まで保存していた

DiKicker の関連記事表示機能で、同じ記事がリストアップされることがある。 どうも Term DB のデータに不整合が起きるようだ。
とりあえずリストアップの段階で重複は取り除くようにして対応。
コードのチェックをしているうちに、記事 DB の方に余計なデータまで Storable で freeze していることに気がついてしまった。 こちらも修正。
- [ DiKicker ] 語リストを Term DB に保持 (2006-11-21)
- DiKicker に n 年日記機能を追加 (2006-11-03)
- フィード向け AdSense を追加してみた (2008-08-23)
- [ DiKicker ] 最低限の機能を実装 (2004-02-22)
- DiKicker の出力する HTML コードを小さく (2006-10-05)
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 オープン時にどちらで開いているかを通知するようにし、キャッシュ情報などの書き込み時にはこれらを参照して間違えた書き込みをしないようにした。
- さらにサーバ負荷状態悪化。対応に追われる。 (2006-03-04)
- [ Perl ] Search::InvertedIndex (2004-02-09)
- Twitter ステータスを nDiki サイドバーに表示 (2007-11-09)
- DiKicker に grep 検索機能を追加 (2007-02-02)
- [ DiKicker ] くっつき BBSをくっつけてみた。 (2004-05-04)
2011年7月24日 (日)
■ 今日のさえずり: 片っ端から戦略は片っ端しかフィニッシュしないのがネック

@ 2011年07月24日
- 07:59 起床一番カビキラー。
- 08:56 RT @chippinnn: 朝、家で蝉の声を聞くと夏だね!っていう気がするけど、風はさわやかで心地いいのが今日のお天気ね。こういう日和が続けばいいのに~
- 08:56 RT @kazuya78: 音キチさんは絶対ミューズ
- 08:59 放置していた sid BOX、Synaptic 起動したらアップグレード可能なパッケージが 1398 だと。もうね。
- 10:46 片っ端から戦略は片っ端しかフィニッシュしないのがネック。
- 11:48 sid のアップデート中なんだが、linux-image と udev がアンインストールされた状態でネットワークも切れているというスリリングな状況にある。
- 12:02 げ、network-manager も削除してしまっている。
- 12:25 有線で接続できて、 vminuz が戻ってきた。さすがに /boot 直下が grub/ のみとか嫌すぎる。
- 13:33 シャットダウンして再度無事ブートできた。がっつり X が消えてたので、aptitude 中。
- 14:04 KDE・無線 LAN 接続復活。ようやく Debian GNU/Linux sid のアップデート作業完了。
- 18:26 RT @shmorimo: emacs立ち上げてないと裸より無防備に感じる
- 18:36 たっぷり昼寝したので体調ずいぶん回復!
- 18:46 とりあえず飯炊く。お楽しみはそれからだ。
- 19:18 Byte order is not compatible at ../../lib/Storable.pm だと?
- 19:42 sid の Perl v5.12.4 が -Duse64bitint だからとかそういう話っぽい。
- 21:37 RT @tsukamoto: そういえば近所のカレー屋さんが「アナログ放送は終了しました」画面をつけっぱなしててある種の潔さを覚えた。あれ、いつまであのままにするんだろ。
- Debian GNU/Linux sid 環境を新 HDD へ (2006-07-29)
- 今日のさえずり - ミニパトに男性警官が乗っているとガッカリする (2009-11-26)
- ThinkPad X200 に sid を入れる (2009-11-20)
- 今日のさえずり - キリンの力水、オフィスの女性陣の誰にも通じない (2010-02-05)
- 今日のさえずり - 5:30 起床でもまだ時間が足りない (2009-09-12)
■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザインProcess Time: 0.151819s / load averages: 2.40, 2.25, 2.08
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker
Base theme by Nana (for tDiary)



◇ Twitter やってます。この記事が気にいったらぜひ twitter.com/Naney の follower になってください。
◇ 2GB 無料のオンラインストレージサービス Dropbox に次のリンク先から登録すると今なら 250MB プラス! → Dropbox