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 ] 憧れのサイドバー (2004-01-23)
- [ WiKicker ] WiKicker で Log::Log4perl... (2004-03-01)
- [ WiKicker ] SunOS 5.6 にインストール (2003-04-23)
- [ Perl ] Memcached を使ってみる (2004-01-12)
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
が含まれていないかをチェック。
- 自前 PPM リポジトリの管理 (2006-07-03)
- PAR + ActivePerl で実行形式ファイルを作った時のライセンスは? (2004-07-21)
- PAR::Repository でビルド済み Perl モジュールをネット... (2006-12-12)
- 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)
- JSmooth で Win32 上でのJava プログラム起動ファイル作成 (2004-12-06)
- XAMPP で WiKicker を動かしてみた。PPM インストール OK。 (2007-02-09)
- PPM::Make と META.yml (2004-10-14)
- Skype for Linux Beta 0.93.0.3 (2005-01-27)
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)
- Rubric でプライベート SBS を立てるも 0.140 では日本語に不具合 (2006-07-22)
- [ WiKicker ] Storable 永続化データの互換性 (2005-06-06)
- DBD::Oracle 1.16 を Debian GNU/Linux s... (2005-05-19)
- [ Perl ] PDL::PP で C extension を書く (2004-02-19)
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)
- SQLite とか DbUnit とか (2005-05-23)
- [ WiKicker ] SpeedyCGI 対応するも…… (2003-11-09)
- [ Perl ] Memcached を使ってみる (2004-01-12)
- aufs で inotify を使ってブランチ上の直接の変更をすぐに反映させる (2008-01-05)
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 で縮小して保存しておくようにした。
これであとは Web サーバを更新するようにすれば、最近聞いた曲を Web サイトに表示できるようになるはず。
- Template Toolkit + PAR (2004-09-13)
- amaroK から Last.fm へ送信できるようになった (2006-02-03)
- sid の CinePaint がプラグイン読み込みでエラー (2006-04-15)
- FreeMind でマインドマップ (2005-06-02)
- [ CLIE ] Plucker (2004-03-27)
2006年11月7日 (火)
■ DiKicker の DB に余分な情報まで保存していた

DiKicker の関連記事表示機能で、同じ記事がリストアップされることがある。 どうも Term DB のデータに不整合が起きるようだ。
とりあえずリストアップの段階で重複は取り除くようにして対応。
コードのチェックをしているうちに、記事 DB の方に余計なデータまで Storable で freeze していることに気がついてしまった。 こちらも修正。
- [ DiKicker ] 語リストを Term DB に保持 (2006-11-21)
- [ DiKicker ] RSSの description をちゃんと埋める (2005-02-04)
- WiKicker に JSON でのページ出力機能を追加 (2007-04-03)
- [ DiKicker ] くっつき BBSをくっつけてみた。 (2004-05-04)
- サーバの負荷が高くなったら DiKicker が 503 を返して沈静化を... (2007-04-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)
- DiKicker に grep 検索機能を追加 (2007-02-02)
- Twitter ステータスを nDiki サイドバーに表示 (2007-11-09)
- [ DiKicker ] ロック獲得リトライをさらに減らす (2007-03-14)
スポンサード リンク
■よく検索されるキーワード
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)■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザイン ビックカメラ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)




スポンサード リンク