nDiki : Storable

Storable

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

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 5.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 5.6.0 や 5.6.1 で Storable 2.02 以前を使って書き出したデータを他の環境で読み出すと 'Byte order is not compatible' エラーが出るとある。

確認したところ前のバージョンは Perl 5.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日全て ]

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 sidPerl 5.12.4 が -Duse64bitint だからとかそういう話っぽい。
  • 21:37 RT @tsukamoto: そういえば近所のカレー屋さんが「アナログ放送は終了しました」画面をつけっぱなしててある種の潔さを覚えた。あれ、いつまであのままにするんだろ。
[ 7月24日全て ]

2012年6月21日 (木)

今日のさえずり: 吸盤でつけるテレホンピックアップってもう絶滅したの?

2012年06月21日

  • 09:21 車内冷房を希望します。
  • 09:29 液晶画面ワレワレのまま iPhone 5 待ち続けてるの……? 一夏過ごすの?
  • 09:53 なんかもう雨降りそう。 (@ 株式会社ミクシィ (mixi, Inc.)) http://t.co/wNendGPj
  • 09:55 CREATE TABLE とか INSERT とか SELECT とかメンドーなので Storable で生きていきます。
  • 09:57 Storable::lock_store / Storable::lock_retrieve って 1.0.2 からすでにあったんか。
  • 11:01 吸盤でつけるテレホンピックアップってもう絶滅したの?
  • 21:47 正面から退勤。
[ 6月21日全て ]

2013年3月4日 (月)

今日のさえずり: 60秒キャンペーン終わったので5分ほどかかった

2013年03月04日

  • 08:32 RT @corvussolis: @unk @Naney こんにちは、CorvusSKKの作者です。アスキーモードでの入力での現象だと推察しますが、次のリリース(ver.0.9.6?)で修正出来ると思いますのでしばらくお待ち下さい。
  • 08:33 @corvussolis ありがとうございます。 CorvusSKK まだ使わせていただいたこと無いのですが、新しいバージョンが出たら試してみます!
  • 10:58 欲しいのど飴がオフィスグリコに無い!
  • 12:23 今日会った方に Sublime Text 2 薦められた。サイト見てみるとスゲー強力そうで気になる。 http://t.co/eAOKLJhf9t
  • 14:27 60秒キャンペーン終わったので5分ほどかかった。 (@ マクドナルド 南青山店) http://t.co/ICQdyNvVFd
  • 15:08 gogoshigoto (@ 株式会社ミクシィ (mixi, Inc.)) http://t.co/WdPqb4vuch
  • 16:12 “404 Blog Not Found:perl - 最速のUTF-8処理法” http://t.co/ccY175Yhwz
  • 17:30 映画ドラえもん のび太のひみつ道具博物館がいいらしいので気になる。道具いっぱい出そうだもんなぁ。
  • 21:49 サーバに Net::Twitter::Lite 入れてるところ。
  • 23:40 Storable するところまで Net::Twitter::Lite 使うように書き換えた。
[ 3月4日全て ]

2014年3月27日 (木)

さくらのレンタルサーババージョンアップメンテナンス

さくらのレンタルサーバの「ディスク容量増量ならびにOSバージョンアップに伴うメンテナンス」が寝ている間に終了。 Perl も新しいバージョンが使えるようになるのだけれど、デフォルトでは今までと同じバージョンだから何もしなくても良いはず。

って確認したらスクリプトが動かなくなっている……。

あー 32 bit が 64 bit になったんだっけ。 SpeedyCGI が動かなくなっているのでまず外し。で再度走らせたら今度は Storable が Long integer size is not compatible といって既存データを読めなくなったので破棄して再生成中。あとは別のスクリプトでいくつか動かなくなったものがあったので、そちらは依存ライブラリを cpanm しなおし。

それとそれと

メールの送信前認証としてご提供している POP before SMTP を廃止いたします。そのため、今後はSMTP認証(SMTP-AUTH)が必須となります。

ってあったのでメールの方も確認したら Gmail からさくらのレンタルサーバ経由でメールが送れなくなっている。あーでも POP before SMTP なんか使ってなかったでしょう。なんでだー。って Twitter あたりみたら、どうも「国外IPアドレスフィルタ」(デフォルト有効)の機能提供開始のせいっぽい。 Gmail のサーバ国内とは限らないもんねぇ。

開始日時は自分のサーバは3月19日(水) 12:00 なので、この時から既に送れない状態になっていたのか。1週間気がつかなかったとか、もうプライベートではメールの利用頻度下がっているってことだねぇ。

さて、国外IPフィルタを無効化。

今日は朝からホットだった。

今日のさえずり: 国外 IP アドレスからのアクセスブロックのせいか

2014年03月27日

[ 3月27日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィでマネージャー・プロダクトオーナーをしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

follow us in feedly

※内容は個人的見解であり所属組織とは関係ありません。

月別インデックス
Process Time: 0.165586s / load averages: 0.25, 0.42, 0.39
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker