Results tagged “perl”

通常、MTのパッケージはシステムレベルにインストールされません。そのため、lib/ とextlib/ へのパスを実行時に追加する必要があります。
例えば、EntryオブジェクトをDumpするワンライナーは以下のようになります。

$ perl -Ilib -Iextlib -MMT -MData::Dumper -e 'MT->new; print Dumper(MT->model("entry")->load(42))'

また、プラグインごとのlibディレクトリへのパスは、MTのインスタンス作成時に動的に追加されます。そのため、MTのプラグインを開発中、コンパイルチェックをしたい時などに直接実行する事ができません。

$ perl -Ilib -Iextlib -Iplugins/MyPlugin/lib -c plugins/MyPlugin/lib/MyPlugin.pm

長いですね。

そこで、以下のようなモジュールを、perlのパスの通った場所に設置します。

package T;
use strict;
use warnings;
use lib qw( lib extlib );
use MT;
BEGIN { MT->new };
1;

名前は、T.pmです。これで

$ perl -MT -MData::Dumper -e 'print Dumper(MT->model("entry")->load(42))'
$ perl -MT -c plugins/MyPlugin/lib/MyPlugin.pm

などと、perlにMT専用オプションが追加されたような錯覚を覚える事が出来ます。

MT形式のエクスポート用に出力をエスケープする - 刺身☆ブーメランのはてなダイアリー

そうか。MTのエクスポート形式って業界標準なのか。。。

エスケープ結果を復元するコードが無かったので自分で書こうとしたが、もとのコードだとエスケープ後のデリミタと同じパターン(-----<>など)が元の文字列に存在した時に、正確に復元できないという問題に気づいたが、あきらめて風呂に入っているうちに解決策を思いついた。
文字列中のすべての「-」のみの行を3倍とかに変更してしまえば、安全にエスケープでき、かつラウンドトリップ可能となるはずです。3倍なのは本来のデリミタ( '-' x 5 || '-' x 8 )と重複しないためで、彗星と直接の関係ありません。

実際には、後方互換性が必要になる(このエスケープ形式に対応していないインポーターでも違和感無く読み込めるのが理想)ので、実戦投入は無理でしょう。
元記事のほうでは、HTML表示した場合に見た目変化が無いように空タグっぽい<>を末尾に追加したのだと思うのですが、MTなんかでは最終的な出力先がHTMLとは限らないので、良く無い事が起こりそうな気もします。デリミタと重複する行の末尾にスペースを一個追加してしまう、というあたりが落としどころになるのでしょうか。

Widget-Simpleでtumblr.yaml

Widget::Simple使いなさいとつっこみをいただいた。なるほど。こんな簡単に出来るのですね。

link: http://www.tumblr.net/share
query:
  v: 2
  u: $args->{entry}->permalink
  t: $args->{entry}->title
content: Tumblr
  - module: Widget::Simple
    config:
      widget: tumblr

Plagger::Plugin::Widget::Tumblr

とりあえず作ってみました。
javascriptを起動するリンクが含まれているとGmailでリンクが削除されてしまうようなので、とりあえずjavascript無しです。
結果として、現状は範囲選択などは無視した動作となります。

スタート時の状況はこう

  • aptitude searchではperlmagickが見つからない
  • cpanからインストールしても動かない
以下を行い何とかインストールできた。
  • cpanで入れたImage::Magickを前回のエントリーの1,2の方法でアンインストール
  • /etc/apt/sources.listに以下の行を追加
    deb http://ubuntu.mithril-linux.org/archives/ edgy main universe
  • aptitudeのパッケージリストを更新
    sudo aptitude update
  • aptitudeでインストール

cpanから入れたものが悪さをしていることに気づかず、結構はまった。何してもエラー内容が変わらないんだから、もっと早く気づけよ俺。

こんな感じのエラーが発生する。

libxml-sax-perl (0.12-5) を設定しています ...
Can't locate object method "save_parsers_debian" via package "XML::SAX" at /usr/bin/update-perl-sax-parsers line 90.
dpkg: libxml-sax-perl の処理中にエラーが発生しました (--configure):
 サブプロセス post-installation script はエラー終了ステータス 255 を返しました

これは、エラーメッセージにもあるようにdebian特有の問題らしい。家のUbuntu サーバーでも発生した。以下解決ページ

http://bugs.donarmstrong.com/cgi-bin/bugreport.cgi?bug=229178

aptitudeでインストールする前にcpanでXML::SAXをインストールするとハマルらしい。
解決するには以下の方法で。

  1. perlモジュールをアンインストールするスクリプトを用意。http://www.cpan.org/misc/cpan-faq.html#How_delete_Perl_modulesのスクリプトをコピーして、remove.plとして貼り付け保存。冒頭のパスは「/usr/bin/perl」に変えておく。
  2. スクリプトを実行。
    sudo ./remove.pl XML::SAX
  3. aptitude から入れなおす。
    sudo aptitude install libxml-sax-perl

MTIfSearchIncludeBlogs 1.0

Movable Type で検索を行う場合に、あるブログが検索対象となっているかで処理を変更する条件タグ「MTIfSearchIncludeBlogs」を追加するpluginです。

MTIfSearchIncludeBlogs.zip

考えられる主な使い方は以下の二つ。
・複数ブログの検索フォームで、値を引き継ぐ
・特定のブログでの検索をされたくないときに、ごっそりテンプレートを切り替える。

使い方はこんな感じ。

<MTIfSearchIncludeBlogs value="1">
  hogehoge
</MTIfSearchIncludeBlogs>

アトリビュート:valueに判定したいブログのIDを入れる。複数のブログIDをカンマ区切りで指定できる。

追記 16,jul 06: 最新版はこの辺から。
http://trac.aklaswad.com/trac.cgi/file/mtplugins/MTIfSearchIncludeBlogs.pl

東京医科歯科大の患者さんに付き合ってもらって、昨日買った、この本。
評判通りの良書なのですが。ひとつ。

続・初めてのPerl - Perlオブジェクト、リファレンス、モジュールあちこちで言われていたような気もするのですが。
「@ISA」というキーワードがperlにはあるそうで。
あるファイルの識別子は、別の識別子と等価の関係

「A is a B」

である、という意味の命名なのですが。
このテクストの中では一貫して、(ある種類の動物)は、動物だ、という文脈を例文として当てはめているのですよ。
例えばこんな感じ。

(the dog) is a (Animal)

ボインの前はanになるんじゃなかったのか、と、著者と、中学校の英語教師に問い詰めたいです。

perl学習のtimeline

今、漸く一冊目が読み終わったところ。先は長い。金が持たない。オライリーばっかし。
初めてのPerl続・初めてのPerl - Perlオブジェクト、リファレンス、モジュールプログラミングPerl〈VOLUME1〉プログラミングPerl〈VOLUME2〉Perlクックブック〈VOLUME1〉Perlクックブック〈VOLUME2〉

外側から作っていこう

web_access_iTunes_capture_01.pngサーバーマシンで動いているiTunesを、外部からリモート操作しようという試みについて。とりあえず動いてはいるので、また、非常に限定された用途しかないから、としばらく放置していましたが、HTMLやJavaScriptの練習に良いかな、と思い直し、この二週間ほど見た目を中心にこつこつと作っております。
JavaScriptに取り組むのはほぼ初めてです。仕様がいまいち統一されておらず、色々となんだかメンドクサイですが、簡単に動きのあるものが作れて、楽しくもあります。
将来的にはXMLRPCなぞ受け入れるようにして、目指せAjaxってか。
(関係ないですが、Ajaxはアヤックスと読みたいなあ。エイジャックスなんて田舎風の読み方は、俺の身体に流れるオランダ人の血が許しません(流れてないけど)(オランダだって田舎か)。)

まだ公開できる段階ではないので、とりあえずスクリーンショットだけ。WebからiTunesにAccessできるということで、Web Access iTunes、略してWAiTってか。
Playlistを取得〜曲を選んで再生〜イントロを飛ばして〜ボリューム絞って〜といった基本部分は動きます。検索はまだ動きません。プレイリストの作成や編集などは、実装するかわかりません。

技術的にいま行き詰っているのは、ライブラリ全体のような、膨大な量のリストをどう処理するか、という点。
一気に転送するのはまず無理。nページ中mページ目、なんて感じに細切れにして送るしかないのだが、そうするとややこしくなってくるのが、クライアントごとの検索、ソートの結果。これらをどこかに保持しておく必要がある気がするのだが。
・サーバー側で保持する。その場合、セッション管理などして上手くやる必要があるかも。
・その都度検索する。検索は良いとしても、ソートはオリジナルの並び順を維持したまま、複雑なソートを実施というのは難しそうだ。
・とりあえず複数のクライアントがアクセスする可能性は忘れて、サーバー側のデータを直接弄ってしまう。
・そもそもソートのやり方がわからない。

うーん。先は長い。