日記/2009-6

<< 2009-6 >>
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

2009-6-28

set-perl5lib.elをActivePerl対応にする場当たり的改造

 

Emacs Flymake Demo for Haskell

 
 Emacs22から標準で入ってるflymakeはとても便利。上の動画はHaskellでのデモですが、Perlでも、こちらのページに書かれているような感じで設定すれば、上の動画同様、エラーの箇所を赤くして教えてくれますし、カーソルをエラー行へ持ってきて「M-x flymake-display-err-minibuf」とやれば(私は「C-c ;」に割り当ててます)、どんなエラーかミニバッファに出してくれます。
 ちなみに、私のところでは上の動画ほどもっさりしてません。もう少し軽快に動作してくれます。

set-perl5lib.elのActivePerl対応

 私は、WindowsXP + ActivePerl + nt-emacs、という環境でFreeStyleWikiをいじくって遊んでいますが、上でリンクした.emacsの設定例のページで紹介されているset-perl5lib.elがうまく動作しませんでした。追加されるパスが、cygwin風の「/cygdrive/c/home/……」となってしまい、ActivePerlで用いるWindows風書式「c:/home/……」とつじつまが合わないためのようです。
 2009/06/28現在、set-perl5lib.elの最新版であるRevision 18431をCodeReposのページで確認すると、そこには以下のようなコメントが。

Revision 18431, 2.6 kB (checked in by holidays-l, 10 months ago)
lang/elisp/set-perl5lib: CygPerlに対応してみました。WinPerlで動かなくなってる気がするので誰かなんとかして。 

 なんとかしたかったんですが、残念ながら頭が悪くてかっこよくはいきませんでした。
 以下の改造で、ActivePerlで動作するようになると思います。しかしながら、この改造を施すと、今度はCygwinのPerlでは動かなくなります。というか、UNIX系のOSでの動作についてはまったく考慮していないので、Windows + ActivePerlでしか動きません。ご注意ください。

--- set-perl5lib.el.org	2009-06-27 20:23:43.464125000 +0900
+++ set-perl5lib.el	2009-07-26 13:30:14.406500000 +0900
@@ -48,7 +48,7 @@
   (interactive)
   (let* ((path-list (cdr (split-string
                           (if (string-match "^.:" buffer-file-name)
-                              (concat (cygwin-mount-get-cygdrive-prefix)
+                              (concat
                                       (mapconcat 'identity (split-string buffer-file-name ":") ""))
                             (buffer-file-name)
                             )
@@ -58,7 +58,8 @@
     (when (or (and lib-path current-perl5lib
                (not (string-match lib-path current-perl5lib)))
               (not current-perl5lib))
-      (setenv "PERL5LIB" (concat lib-path ":" current-perl5lib))
-      (message "Added %s into PERL5LIB" lib-path))))
+      (and lib-path
+           (setenv "PERL5LIB" (concat lib-path ";" current-perl5lib))
+           (message "Added %s into PERL5LIB" lib-path)))))
 
 (provide 'set-perl5lib)

 改造済みファイルも以下に貼っつけときます。

add-perl5lib.el

 set-perl5lib.elは、読み込んだファイルのパスの中に「lib」というディレクトリ名があったら、そこまでのパスをPERL5LIBに追加してくれるわけですが、「lib」がないパスを追加したいときもあります。
 例えば、FreeStyleWiki本家のサイトに投稿されているCardFormプラグインには、CardFuncBase.pmというベースクラスがあるため、CardList.pmの冒頭のコードは以下のようになっています。

package plugin::cardform::CardList;
use strict;
use vars qw(@ISA);
@ISA = qw(plugin::cardform::CardFuncBase);
use plugin::cardform::CardFuncBase;
……

 この場合、例えば、CardForm プラグインがインストールされているディレクトリが、「c:/home/mechanist/fswiki/plugin/cardform」だとすると、追加したいパスは、「c:/home/mechanist/fswiki」になるわけです。
 そこで、任意のパスをPERL5LIBに追加できる、add-perl5lib.elも作ってみました(まんまset-perl5lib.elのパクリ)。
 .emacsに「(require 'add-perl5lib)」と書いておき、「M-x add-perl5lib」で実行して、追加したいパスを入力すればOK。
 ちなみにこちらも、Windows + ActivePerlでしか動きません。

参考

    • このために昨日買いました。まだ全然読めてません。

馬鹿

 言われてみれば当たり前のことなんですが、PERL5LIBのパスの区切り文字が「;」であることになかなか気づかず、はまりました……。

さらに馬鹿

 add-perl5libでは、英語として間違ってると言われたけど(確かに「add-path-to-perl5lib」などとすべき)、もういい!

さらにさらに馬鹿

 set-perl5lib.elの改造部分を、2009/07/26に修正。
 元は、58行目からの改造は以下のようになってました。

@@ -58,7 +58,8 @@
     (when (or (and lib-path current-perl5lib
                (not (string-match lib-path current-perl5lib)))
               (not current-perl5lib))
-      (setenv "PERL5LIB" (concat lib-path ":" current-perl5lib))
-      (message "Added %s into PERL5LIB" lib-path))))
+      (and lib-path
+           (setenv "PERL5LIB" (concat current-perl5lib ";" (expand-file-name lib-path)))
+           (message "Added %s into PERL5LIB" lib-path)))))
 
 (provide 'set-perl5lib)

 ですが、よかれと思って追加した、ファイル名を絶対パス名に変換する「expand-file-name」のせいで、うまく動かなくなっちゃってました(6月末の時点では動いてたんだけどなあ……)。
 そこで、添付ファイルは、この「expand-file-name」をとっぱらって、パスの区切りをコロンからセミコロンに変えただけのものにしておきました。これだと追加されるパスの頭に「c:」というドライブレターがつかないのですが、でも、うまく動くようです。
 もし、これでうまく動かない場合は、元のように「expand-file-name」を追加してください。
 きちんとデバッグしたいところなんだけど……。すいません。


2009-6-21

AmazonSearch プラグインのProduct Advertising API対応

 

 AmazonSearch プラグインなどのFreeStyleWiki用プラグインは、Amazonが提供している商品情報へのリンク作成用WebAPIを利用しています。
 ひと月ほど前のAmazonからのメールで、このAPIの仕様が変わって電子署名による認証が必要になるということを知りました。3か月の移行期間をおいた2009/08/15からは、認証されないリクエストは受け付けなくなるとのこと。
 8月まではまだ間があるのと、面倒くさいのとでほったらかしにしていた、このProduct Advertising APIの電子署名認証への対応ですが、やっとこさ重い腰を上げて取りかかることにしました。
 やってみるとこれが予想どおり結構面倒。
 以下に、インストールの手順を記しておきます。

Digest::SHAのインストール

 電子署名の生成のために、モジュールDigest::SHAが必要になるのですが、インストールにはコンパイルを伴います。これは「lib以下にソースをコピーするだけ」という方法ではインストールできないということ。
 実は、PurePerlのものもあるのですが、スピードのためと、今後、このサイトが運用されているさくらインターネットのレンタルサーバーには入っていない、いろんなモジュールをインストールしたくなったときのために、ちょうどいい機会なので、一般ユーザー環境へのCPANモジュールのインストールにチャレンジしてみました。
 と言っても、こちらのページに書かれているとおりの手順で環境を整えたら、おもむろにCPANシェルから、

cpan[1]> install Digest::SHA

とやればOK。
 もちろん、lib以下にPurePerl版をコピーしてインストールしてもOKのはずです(確かめてませんが)。

インストールしたモジュールのパスの追加

 上記でインストールしたモジュールがFreeStyleWikiのプラグインから使えるように、一般ユーザー環境でのCPANモジュールのパスを、FreeStyleWikiのwiki.cgiに追加します。
 wiki.cgiの22行目辺りの以下の行に、

use lib './lib';

 一般ユーザー環境でCPANモジュールをインストールしたパスを追加します。

use lib qw(./lib /home/xxxxxxxxx/local/lib/perl5/);

AmazonPAPI.pmのインストール

 以下のページから、AmazonPAPI.pmをダウンロードして、lib以下にインストールします。

lib以下のURIモジュールの更新

 上記でインストールしたAmazonPAPI.pmは、内部でURI::Escape::uri_escapeを呼んでいるのですが、どうやらFreeStyleWikiに標準で添付されているlib以下のURIモジュールのバージョンが古いらしく、うまく動いてくれません(エラーになって、AmazonSearch プラグインがインストールされていません、と表示される)。
 よって、このURIモジュールを新しいもので上書きします。
 以下のモジュールを、lib以下に上書きしてインストールすればOK。

 ちなみに、さくらインターネットの、私が使っているサーバーにインストールされているURIモジュールのバージョンは、2008/06/21現在「1.37」と、充分新しいものでしたので、わざわざ上書きインストールしなくても、lib以下からURI.pmとURIのディレクトリを削除しただけでエラーは出なくなりました。

Unicode::RecursiveDowngradeのインストール

 さらに以下のモジュールを、lib以下にインストールします。

AmazonSearch.pmの修正とインストール

 まず、こちらのページの手順を参考に、Amazon Product Advertising API のアカウントを作成します。
 次に、以下のファイルをダウンロードしたら、

 AmazonSearch.pmの

  • 98行目の変数「$AccessKeyId」に、取得した AccessKeyId
  • 99行目の変数「$SecretAccessKey」に、取得した SecretAccessKey
  • 100行目の変数「$AssociateTag」に、取得した AssociateTag

それぞれ設定します。
 なお、125行目のハッシュの値に、アフィリエイトIDを入れるといいはずですが、自分がもってないもんで、うまく動くかどうか確かめてません。
 その後、plugin以下に、ダウンロードしたファイル(修正したAmazonSearch.pmを含む)をディレクトリごとコピーして、インストールします。
 以上でインストール作業は完了です。
 
 使い方などは、従来のAmazonSearch プラグインのままです。
 

参照情報

追加

  • 2009/08/01に、Ykpamazon プラグインTdamazon プラグインのAmazon Product Advertising API対応のために、WebAPIとのやりとりの部分をモジュールとして利用できるよう修正しました。
  • 2011/07/27に、AssociateTag(アフィリエイトのトラッキングID)の必須パラメータ化に対応しました。


2009-6-15

「アダルトビデオ革命史」の豆知識

 

 藤木TDC著、幻冬舎新書「アダルトビデオ革命史」を読了。
 その誕生前夜から、バブルとともに迎えた隆盛期、レンタルからセルへの流れ、近い将来ネットの無修正動画に駆逐されるかも……という具合に、40年のAVの歴史をコンパクトにまとめたもの。なかなか面白く、そして懐かしかった。
 以下、この本で知った豆知識。

2007年のビデ倫摘発

 2007年8月、アダルトビデオの自主審査機関であるビデ倫(日本ビデオ倫理協会)の審査部門責任者らがわいせつ図画頒布幇助容疑で逮捕、翌2008年3月に起訴された。
 このニュースを耳にしたとき、
「ビデ倫には警察OBも天下ってるだろうに。なんで逮捕者を出すなんてことに」
と不思議に思った。こちらの記事によると、当時ちょうど警察OBがいなくなっていた、ということらしいが、では、なぜちょうどそのタイミングでいなくなっていたのかなど、はっきりしない点が残る。
 「アダルトビデオ革命史」では、警察がなぜ他の審査機関ではなくビデ倫を摘発したのか、より説得的な説明がなされていた。

 「セルビデオ」という新しい流通形態を認めようとせず、市場の独占を維持しようとしたレンタル用AVメーカーに対抗して、セルビデオメーカーはビデ倫には加盟せず、それに替わる自主審査機関を独自に立ち上げていた。

 セルビデオ勢が巧妙だと感じさせるのは、流通の拡大とともに審査機関を任意団体から省庁認可の協同組合へ発展させている点だ。SODが設立したメディア倫理協会は05年に経済産業省認可を受け、コンテンツ・ソフト協同組合(CSA)へと改組されている。北都は当初、自社が立ち上げた日本倫理審査協会で審査させていたが、ビデ倫摘発前の07年5月から、03年にアダルト業界で初めて経産省認可を受けた事業協同組合、ビジュアルソフト・コンテンツ産業協同組合(VSIC)へ審査を移行させている。おそらく06年段階で水面下のアプローチがあったのではないだろうか。
 省庁のタテ割り構造から想像して、経産省の認可団体に警察が安直に介入することは体面上なかなか難しそうで、そうした意味で一介の任意団体にすぎないビデ倫は、警察によるAV牽制の格好のスケープゴートにされた可能性がある。

 行政機関の縄張り意識やメンツを利用して摘発を逃れようという目論見で、自主審査機関の経産省認可を受けていたのだとしたら、確かにセルビデオメーカーは巧妙だ。狡猾とさえ言えるが、いかにもありそうな話で面白い。

 ちなみに、摘発後ビデ倫は審査業務を停止。新たに設立した日本映像倫理審査機構(映像審)に傘下のメーカーを移行させる。この映像審の審査業務は、セルビデオ勢が設立した審査機関であるCSAの審査を行っていた法人が受け持つことになった。同書には、

これはある意味、旧ビデ倫が後発団体の軍門に降ったという事態を示している。

とある。

ダイヤモンド映像設立時の村西とおるの謹慎と復帰

 1988年9月、クリスタル映像でAV監督として大活躍していた村西とおるが、新たにダイヤモンド映像を設立、電撃的に独立する。
 しかし、直後の9月29日、村西は児童福祉法違反で三度目の逮捕。
 村西がまだ拘留中の10月15日、ビデ倫は次のような審査拒否通達を出す(ビデ倫の素早い対応からは、後年摘発されるなどとは想像すらできない、警察との蜜月ぶりがうかがえる)。

(1) 18歳未満のものを「成人ビデオ」に起用し、摘発された製作者が関与製作した
    すべての「ビデオ作品」を相当期間、審査の対象としない。
(2) 当該ビデオ作品を偽計により受審販売した加盟社は相当処分とする。

 この、対象者が村西ひとりしかいない、事実上の永久追放勧告により、村西は謹慎を余儀なくされる。
 警察は、当時飛ぶ鳥を落とす勢いの村西を見せしめとして逮捕することで、いわゆる「本番」などのアダルトビデオの過激化、公序良俗の紊乱を食い止めようとしていたのだと考えられる。ここまでは警察側の思惑どおりに事が運んでいた。
 ところが、翌1989年7月、15歳の少女をAVに出演させていたとして、所属事務所やAVメーカーの社長が逮捕されるという事件が起きる。このAVメーカーの中にビデ倫加盟の業界大手が含まれていたから、話がややこしくなってくる。以下、同書に引用されている「ビデオ・ザ・ワールド」誌からの孫引き。

・村西とおるの前例に照らせばビデ倫はここでの逮捕者を審査除外しなければならないが、該当5社のうち宇宙企画、KUKI、アテナ映像は業界最大手であり、ビデ倫に対する貢献度も高く追放勧告することは非常に難しい。とすれば、前年10月の通達文は無効にせざるを得ない。

 以下、同書からさらに引用する。

警察やビデ倫にとってまさに藪蛇の出来事だった。警察はそれまで村西に代表される本番路線の勢力に圧力をかける強硬な捜査体制をとってきた。ところがその強硬方針が思わぬところから本番を否定する保守的メーカーにまで影響を及ぼしてしまったのである。
(中略)
 89年9月15日、追放から約1年をもって、村西とおるはAVの現場に復帰することを許された。事前の通告のない、まったく突然の処分解除だった。
(中略)
児童福祉法違反により職を追われた男が、同じ類の事件によって復職したという、実に奇妙な展開である。

 村西はこの後、桜樹ルイ田中露央沙卑弥呼野坂なつみといった専属女優を使った作品で次々とヒットを飛ばし、ダイヤモンド映像はその短い絶頂期を迎えることになる……。
 以下は、豆知識のそのまた豆知識(というか、新たな謎)。

AV時代
幻冬舎
本橋信宏
楽天 Amazon

 本橋信宏「AV時代 村西とおるとその時代」は、本橋の自伝であると同時に、その副題が示すように、村西とおるの半生記とでも言えるような内容である。当時本橋は村西のマネージャーのようなことをしていたのだが、彼しか知り得ない村西の素顔が詳しく描かれていて、非常に興味深い。
 しかしながら、三度目の逮捕に始まる一連の顛末については、なぜか一切触れられていない。この本では、88年5月の二度目の逮捕を契機に謹慎に入ったことになっており、三度目の逮捕については記述すらない。上述のような事件はきれいさっぱりなかったことにされているのである。
 これはいったいなぜなのか?

黒木香と岩井俊二

 ワキ毛のAV女優として一世を風靡した黒木香は、横浜国立大学出身。彼女はAVデビュー前に、同じ大学の学生が製作した自主映画「インディーポピンズ・キャンディーポピンズ」に出演していたのだが、その監督がなんと岩井俊二。
 以下「アダルトビデオ革命史」に引用されているAV雑誌「ビデオアクティブ」のコラムから孫引き。

 岩井氏の話によると、黒木香は同じ美術科の先輩と後輩の間柄で、その当時から成績優秀、かつ個性的な女のコとして、学内一の噂の女?だったという。ならば映画に出しちゃおう、しかし出てくれるかどうか役柄の問題もあって、岩井氏は交渉に自信がなかったそうだが、彼女は快諾、出演。撮影中の態度も真剣、プロ根性を感じましたね、と岩井氏。もっともその分他の素人俳優との演技的調和が取れなくて、演出上苦労したそうだ。(略)岩井氏は最後にこう付け加えた。
『何をしでかすか、判らない人だったのでね、(ビデオに出ても)ショックはありませんでした』

 さすがのYouTubeにもこの自主映画の映像はなかった。そもそも黒木香の映像自体がほとんどない。

 彼女のこの何とも言えない語り口が懐かしい。

 こちらのページにも書いたが、後年彼女は自殺未遂をおかすことになる。
 彼女の幸せを祈る。


2009-6-7

Ykpamazon プラグイン

 

 プラグインが記載されているページの内容からYahoo!検索Webサービスキーフレーズ抽出を用いてキーワードを抜き出し、それを元にAmazon Web Serviceで商品を検索するというプラグインです。
 ダウンロードはこちらから。

使い方

{{ykpamazon b,5,1}}

 「b」は商品ジャンルの指定で、これはAmazonSearch プラグインと同じです。
 「5」は表示される商品件数の上限の指定(10より大きい数は指定できません)です。省略すると「1」と同じ。
 「1」はAmazonで検索するときに与えるキーワード数です。数を増やすと検索結果を絞り込めます(なにもヒットしなくなることもありがち)。キーワードはYahoo!キーフレーズ抽出がつけるscoreの高いものから順に与えられます。省略すると「1」と同じ。
 本ページでの結果は以下のようになります。「extracted by Yahoo!キーフレーズ抽出」の手前に出ている単語が、抽出されたキーワードです。また、クレジット表示のガイドラインに従い、最下行にクレジットを表示しています。


{{ykpamazon b,5,1}}

補足

  • ページを表示するたびにキーワード抽出するのは無駄ですし、リクエスト回数の制限もありますので、抽出されたキーワードはキャッシュしています。ページが更新されたら、キャッシュも作り直します。
    • でも、アマゾンへはページ表示のたびに検索にいきます……。
  • 以下の単語はキーワードとして抽出されても無視しています。ページ内にURLが書いてあると必ず抽出されちゃうので。
    • WWW、HTTP、HTML、HTM
  • Koshiamazon プラグインで用いたAPIのKoshianは、このプラグインを作った直後に使えなくなり、その代わりとして、Tdamazon プラグインTdyws プラグインで用いたAPIのTermDripsもいつの間にか不安定になり(2009/06/07現在、解説サイトはつながらなくなっていますが、リクエストURL自体は生きているようです)、そのあと今度はこのYahoo!キーフレーズ抽出のAPIを使うことにしました。
  • プラグインの出力全体を <div class="ykpamazon">〜</div> でくるんであります。テーブルを組んで表示していますので、枠線がうるさく感じる場合にはCSSで非表示にしてください。
div.ykpamazon table, div.ykpamazon th, div.ykpamazon td, div.ykpamazon img {
  border-style:none;
}

参考および関連情報

追記


2009-6-6

Ykpws プラグイン

 

Yahoo 検索Web APIの有料化に伴い利用できなくなりました。

 Yahoo!検索Webサービスキーフレーズ抽出ウェブ検索のAPIとを用いた、FreeStyleWiki用のプラグインです。
 ダウンロードはこちらから。
 プラグインが記載されているページの内容から、Yahoo!キーフレーズ抽出APIを用いてキーワードを抜き出し、それを元にYahoo!ウェブ検索APIで検索するというもの。

使い方

{{ykpws 5,2}}

 「5」は検索結果の表示件数の上限です。省略可能でデフォルトは「10」です。
 「2」はYahoo!ウェブ検索APIで検索するときに与えるキーワード数です。省略すると「1」と同じ。数を増やすと検索結果を絞り込めます。あまり大きな数字にすると、なにもヒットしなくなることもありますし、そもそもそんなにたくさんのキーワードを抽出することができない場合もあります。キーワードはYahoo!キーフレーズ抽出がつけるscoreの高いものから順に与えられます。
 
 本ページでの結果は以下のようになります。「extracted by Yahoo!キーフレーズ抽出」の手前に出ている単語が、抽出されたキーワードです。また、クレジット表示のガイドラインに従い、最下行にクレジットを表示しています。


補足

  • ページを表示するたびにキーワード抽出するのは無駄ですし、リクエスト回数の制限もありますので、抽出されたキーワードはキャッシュしています。ページが更新されたら、キャッシュも作り直します。
    • でも、Yahoo!ウェブ検索はページ表示のたびに行います……。
  • 以下の単語はキーワードとして抽出されても無視しています。ページ内にURLが書いてあると必ず抽出されちゃうので。
    • WWW、HTTP、HTML、HTM
  • プラグインの出力全体を <div class="ykpws">〜</div> でくるんであります。
  • Koshiamazon プラグインで用いたAPIのKoshianは、このプラグインを作った直後に使えなくなり、その代わりとして、Tdamazon プラグインTdyws プラグインで用いたAPIのTermDripsもいつの間にか不安定になり(2009/06/06現在、TermDripsの解説サイトはつながらなくなっていますが、リクエストURL自体は生きているようです)、そのあと今度はこのYahoo!キーフレーズ抽出のAPIを使うことにしました。

参考および関連情報