TimeType 0.2

TemplateToolkit が動かないという声が多かったので、HTML::Templateにテンプレートエンジンを切り替えた。むしゃくしゃしてやった。みんなのところでも動けば何でもよかった。テストはしていない。今はテストしている。...

June 19, 2007

MT4Beta : コメント周りを弄ってみた

早速ちょこちょこと、実際の動作を見ています。 今日はコメント周りの新機能について触ってみました。 大きなアップデートとして挙げられるのは、次のような要素でしょうか。 Captchaに対応した OpenIDによる認証機能が追加された 内部的にツリー構造を持つようになった それぞれについて、気づいたことなどメモしておきます。Captcha まずCaptchaですが、以下の箇所で設定を有効にする必要があります。 Admin > Setting > Feedback > CAPTCHA Provider 設定をMovable Type Defaultに変更することで、匿名コメントの際にはCaptchaの入力が求められるようになりました。テンプレートの変更などは必要ありませんでした。 上記「CAPTCHA Provider」の設定がプルダウンでの選択になっていることから分かるように、他のCaptchaエンジンを利用することも出来ます。実際にextrasディレクトリにreCaptchaを利用するためのサンプルプラグインが同梱されているのですが、ちょっと使い方が分かりませんでした。設定値保存されないし。 後、自分の環境では問題ありませんでしたが、たぶん、Image::Magickのインストールされている環境がCaptchaの動作には必須じゃないかなと思います。 OpenID 次に、OpenIDによるコメント認証ですが、これはもっと簡単。 特定のブログが選択された状態で、 Preference > Blog Settings > Comments を開き、Allowed Authentication Methodsの中から受け入れる外部認証サービスをチェックするだけで有効となります。あー、ひとつも利用していない状態から有効にした場合はテンプレートの再構築が必要かもしれません。 MovableType を選択した場合、MovableTypeの管理画面へのログイン情報を使った認証が行えます。さらに、AllowRegistrationを有効にした状態だと、コメントの投稿を受け付ける際にその場でアカウントを発行することが出来ます。この設定は Admin > Settings > Feedback と、各ブログの Preference > (なぜか)General にあります。 コメントを投稿する側は、いったんメールアドレスなどの必要情報を入力し、その後、登録したメールアドレスに送られるメールからConfirmするという、まあ良くある流れでユーザーを作成できます。 ただ、自分のMTにボカボカユーザーが増えていくというのは、考えただけで管理の手間がかかりそうです。個人ユーザー向けの機能では無いのかな、と思いました。自分はとりあえず試しただけで、使ってません。 追記: データベースを確認したところ、OpenIDでの認証の場合にも、管理画面から確認できないだけで、mt_authorテーブルにコメント投稿者の情報が格納されるようです。 Voxのアカウントを利用した認証は、楽でよいですね。迷うことなく利用できました。すごい便利です。まあ、過疎ブログなので、匿名でも全然構わないんですけどね、スパムだけは来るので。この機能は有難いです。以前からのTypeKeyを使った認証も可能なようですが、一覧に無いので試してません;-) コメントのツリー構造 投稿された各コメントが、それぞれ親コメントを持てるようになっています。現在の実装では、管理画面からReplyした場合にのみ親コメントが指定されるようです。あ、コードに些細なミスがあって、今は管理画面からのReplyも出来ないです。さすがベータ版ですね。自分は野良fixして使ってみてます。 ブログからもReplyを有効に出来ないか、コードを見ながら試してみたのですが、どうもまだ出来てないようです。 #TODO: this should be refactored for more general use ということで、これから拡張していく模様。 また、ツリー構造といっても、内部的に親コメントを持っているだけで、現在はテンプレートが対応していないため、実際のブログには何も表示されていません。 これは逆に言えば、好きに作れ、ということですね。 MTCommentParent MTCommentReplies MTIfCommentParent...

June 17, 2007

MovableType4にアップグレードしちゃった

一日ビール飲みながら、アップグレード諸々をしていました。 以前のテンプレートをあえて捨てて無理やりmt4のテンプレートを使ったので、ところどころ変かもしれません。 なにか、「こいつは我慢ならねえ」という点があったら教えてください。...

June 17, 2007

IndexContext

アーカイブテンプレートなどで、一時的にインデックステンプレートと同じ振る舞いを実現するプラグインです。 対応するMovable Typeバージョン 特に制限はありません。 簡単にテストした範囲では、MT4でもそのまま動作します。 ダウンロード 以下のリンクからダウンロードできます。 indexcontext.zip インストール zipを解凍して出てくる「indexcontext.pl」ファイルをpluginsディレクトリにアップロードしてください。 機能 以下のタグが利用可能になります。 <MTIndexContext> 一時的にテンプレートのコンテキストをインデックステンプレートと同じ振る舞いにするコンテナタグです。 特記事項 あんちもん2.Labさんによるダイナミック・パブリッシング版が公開されています。あんちもん2さん、ありがとうございます。 あんちもん2.Lab: ダイナミック・パブリッシング対応 indexcontext プラグイン TechMemo MT4で多用されているSetVarなどの変数設定も同時にクリアされてしまうため、MT4で大きなブロックを括ると収集がつかなくなるかもしれません。ピンポイントで利用したほうが無難かと思われます。 基本的に、このタグで囲んだ箇所の出力結果は同じになる(はず)ので、つまり、全てのテンプレートで同じものを無駄に再構築していることになります。大規模なサイト構築では、SSIやPHPによるインクルードを利用する場合に比べて、再構築時の負荷の原因となることが考えられます。(スタティックで再構築する場合です。)

June 17, 2007

TimeLog 20070615

Memo 10:08:13 定時に出社した! 21:36:50 帰宅。 TODO 22:42:43 until : 2007/06/16 22:00 to do : CGIとDBIのチェンジログを見る Bookmark 01:44:14 nlog(n): なぜ男は制服が好きなのか 12:36:45 軍用自走式WiFiルータ LANdroids - Engadget Japanese

June 16, 2007

TimeLog 20070614

Memo 01:39:27 しかし駄目だった・・・! [mt4beta] 02:30:01 イテレータが呼ばれないよんおんおん 17:00:13 ポット洗浄って何だよ!カップラーメンが作れずに餓死寸前。 19:52:42 帰る

June 15, 2007

TimeLog 20070613

Memo 01:03:07 KIRIN THE GOLDが旨い。ので飲んでしまう。 09:10:13 おはようございます! 09:45:37 TimeLogのAPIで自分のメモを取得した場合(my_msg.asp)、@付きの発言は取得しない(できない)・・・のかな。 [API][TimeLog][TimeType] 12:52:24 キャラメルコーン焼きチョコウマー 19:50:20 今日もイマイチはかどらず。何か方向を間違えている気がする。 19:50:42 逃げるように家に帰る 23:33:46 mt4beta2弄らねば・・・ [mt4beta] Bookmark 01:06:04 「TrackBackはもうなかったことにしてはどうか?」とは? - Ogawa::Memoranda 02:10:13 ニコニコ動画(γ)‐ハートマン軍曹のオタ訓練学校 [フリー参加][キリンゴールドふいた][吹き死んだ] 14:30:21 【2ch】ニュー速クオリティ:当たり前の事を名言っぽく書くスレ

June 14, 2007

TimeLog 20070612

Memo 09:54:08 ごめんなさい、今起きました! 11:36:43 会社来たー Bookmark 12:36:54 Apple Safari for Windows: The world’s slowest web browser - Joel on Software

June 13, 2007

TimeLog 20070611

Memo 00:04:33 アッー!! 文字が化けらッた!すっかり忘れてたー 01:53:32 疲れた。寝るです。 08:53:31 おはよーございます 09:32:43 今から会社に走って行け 10:52:41 会社ついた。 16:27:55 うーん、頭が回らない 16:28:30 そうだ、ハッピーターン食べよう 20:29:37 家に着いた。今日はいまいち捗らなかったなあ。ヤバイ。 [ひとりごと] TODO 09:09:45 until : 2007/06/11 12:00 to do : リポジトリの修復 Bookmark 01:51:31 TimeType - TimeLog から一日分のメモをまとめてMovableTypeに自動投稿するプラグイン (blog.aklaswad.com) 文字化け治った! ひとまず完成! [APIコンテスト参加]

June 12, 2007

TimeType - TimeLog から一日分のメモをまとめてMovableTypeに自動投稿するプラグイン

毎日のTimeLogの内容を、自動的にMovableTypeのエントリーにまとめてしまうプラグインです。 TimeType0.1.zip APIコンテストの賞金目当てに作りました;-) 実際出来てみたら、かなりいい感じなので、このままTimeLogにどっぷり嵌りそうです。メモとして気楽に使えるというTimeLogの良さを、このプラグインで引き出せたらと思います。 実際問題、一日に一回しか動かないタスクなので、殆どテストが出来ていません。しばらくは、正真正銘のベータ版となります。お使いになられた奇特な方は、もし変な動きをするところがあればこのエントリーのコメントか、気楽にTimelogで自分に伝えてくだされば幸いです。 追記: 記載がおくれてごめんなさい。結構動作に必要な環境が厳しいかもしれません。インストール先の環境として、おそらく以下の条件を満たしている必要があると思います。 Movable Type 3.3以上Perl5.8.1以上TemplateToolkitがインストールされている概要 投稿は一日一回。日付が変わってから最初にスケジュールタスクが実行されたときに、TimeLogの前日分のメモを一つのエントリーにまとめて投稿します。どんな感じかは、いっこ前のエントリーを見てください。メモの内容は殆どテストなので、あまり気にしないでくださいな。 インストール 解凍して出てきた中のpluginsの中に入っている「TimeType」ディレクトリを、お使いのMovableTypeのpluginsディレクトリの中にアップロードしてください。 初期設定 システム・メニューのプラグインから、TimeTypeの設定画面を開いてください。TimeLogのIDとパスワード、それと自動投稿を行うブログのblog_idを指定します。いずれも必須です。 なお、この設定を行った時にMovableTypeにログインしていたユーザーが、以降自動投稿を行う際のユーザーとなります。必要な場合にはログインユーザーを変更して設定を行ってください。 現在の所、他には設定項目などはありません。 スタイル あと、いくつか独自のスタイル指定をしています。お好みでスタイルシートを設定してください。 自分のところではこんな感じのものを、スタイルシートテンプレートの最後に追加しています。 .timelog_section_header { border-width: 0 0 1px 0; border-style: solid ; border-color: #004444; } .timelog_memo { border-width: 0 0 1px 0; border-style: dotted; border-color: #99bbbb; margin-left: 2em; } .memo_date { color: #aaaaaa; margin: 0; font-size: 0.7em; } .memo_date a { color: #0000ff; text-decoration: none; } .memo_body { margin: 0px; }...

June 11, 2007

TimeLog 20070610

Memo 10:48:17 英P愛 11:23:14 パブリック非表示 15:05:05 もうすぐ出来る! 19:46:11 うーん、デザインとかで結構詰まる。 [API][css][MovableType] 20:24:36 API使うと色々出来て楽しい! [Movable Type][API][金 目 当] TODO 11:26:06 until : 2007/06/10 11:26 to do : トゥードゥー 11:26:40 until : 2007/06/10 11:27 to do : フィニッシュトトゥードゥー Bookmark 11:25:37 ブックマーク 12:06:02 404 Blog Not Found:IPアドレスはいつ枯渇してもおかしくない へー、そうなんだ。 21:32:28 http://www.luckypines.com/mt/2007/06/post_127.html [Movable Type][beta][Kickstart my heart]

June 11, 2007

Movable Type 4 のプラグイン作成での新機能

ボチボチとMT4の内部の構造が分かってきたです。 特に、プラグインはまったく新しい構造が導入されていて、色々と面白いことになっている模様。 プラグインはイコールComponentで、Registryなのです!(分かってない) MT4は、内部的にRegistryと呼ばれる、様々な設定値をひとまとめにする構造を持っています。 例えば、テンプレートの編集画面に追加された「Insert...」という部分。デフォルトではMTEntriesの挿入が行える機能だけがついていますが、これはRegistryのキー「template_snippets」に「insert_entries」というエントリがひとつだけ入っていて、そのエントリが管理画面に表示されるという仕組みになっています。 そして、当然のごとくプラグイン側からRegistryのキーやエントリ(実際にはネストしたハッシュリファレンスです)を追加することが出来ます。書き方としてはこんな感じでしょうか package MT::Plugin::CommentSnippet; use strict; use base qw( MT::Plugin ); my $plugin = new MT::Plugin::CommentSnippet({ name => "CommentSnippet", version => '0.1', }); MT->add_plugin($plugin); sub init_registry { my $plugin = shift; $plugin->registry({ 'template_snippets' => { 'comments' => { label => 'comments', content => qq{<MTComments lastn="10"></MTComments>}, }, }, }); } 1; これだけでも、今までのコールバックを利用したりする方法に比べたら楽に感じます。 しかし、さらに簡単な書き方も出来ます。 template_snippets: trackbacks: label: tbpings content: <MTPings lastn="10"></MTPings> はいyaml来ました。yaml。 pluginsディレクトリ内に適当なディレクトリを作成して、上記のyamlを「config.yaml」という名前で置くだけです。 これは楽です。 更新Pingサーバーのリストも同様に追加出来るのですが、その場合には追加分の項目の設定値の保存まで自動で面倒を見てくれるので、非常に楽です。素で驚きました。 perlのコンパイル済みのコードリファレンスが要求される機能も多いっぽいので、yamlを書くだけでどこまで複雑な機能の追加が実現できるかは分かりません。実際には、Perlで機能のコア部分を書いて、config.yamlでユーザーがプラグインの機能を拡張していく、その橋渡しとしてRegistryが機能するという形になるのでしょうか。 いずれにしても、非常に拡張性が高いシステムになっていると感じました。...

June 9, 2007

mt4beta1でBLOG STATSを動かす方法

MT4betaが出ましたね!早速お試しー。 しばらく、betaの動きや気づいたことなど、こまめにメモしていこうと思います。 まず、管理画面のダッシュボードに表示される「BlogStats」について。 上手く行けば、最近のコメント数などについて上のキャプチャ画面のような表示が出ます。 上手く行かないという場合は、以下のあたりを確認してみると良いかも。 1. ActivityLogに以下のエラーが出ている場合 Failed to create 'support' directory. (IP:xxx.xxx.xxx.xxx) mt-staticディレクトリにsupportというディレクトリを作って、mtが書き込み出来るようにする 2.なにやら動いたが、小さく次のようなエラーが出る Error: Can't get file name /support/... mt-config.cgiの「StaticWebPath」をきちんと設定する。単に「mt-static」でも良いかも。 なぜかStaticWebPathを省略した場合は動かなかったので、デフォルトの値が変わっているのかもしれません。というか初期値の書き忘れのようにも見えます;-) 出来ればフルパスで指定したほうが良さそうです。 また、mt-staticディレクトリを移動する場合、「StaticWebPath」の変更に加えて、「StaticFilePath」という設定を追加して、以下のような形でサーバー内でのフルパスを指定する必要がありそうです。 StaticFilePath /home/hogehoge/public_html/moved_static_dir...

June 6, 2007

ダイナミックあげるよ

自サーバーのMTで久しぶりにダイナミックパブリッシングを動かしてみたら、動かなかった。 現象としては、ダイナミックを有効にしたアーカイブにアクセスすると404。 URLをスラッシュ止めでアクセスすると正常に表示される。 NG http://example.com/blog/2007/06/post.html OK http://example.com/blog/2007/06/ Apacheのエラーログには次のようなメッセージが [Mon Jun 04 08:43:29 2007] [error] [client 192.168.0.1] Negotiation: discovered file(s) matching request: /home/xxxx/public_ html/blog/2007/06/post.html (None could be negotiated)., referer: http://example.com/blog/ ちょっと調べたところ、ApacheのMultiViewsオプションが悪さをしているらしい。 httpd.confを書き換えて「Options -MultiViews」としたところ正常に動作した。...

June 4, 2007

複数ブログのトラックバックURLを、ブログごとの独自ドメインで公開する方法

Movable Typeでのブログの再構築時にコメントやトラックバックのCGIに対して張られるリンクでは、通常、mt-config.cgiで設定したCGIPathを基準としてURLが設定されます。 しかし、Movable Type の 3.3 以降のバージョンでは、CGIPathのホスト名を省略することで、各ブログのブログURLのホスト名部分をもとにしたリンクをCGIPathとして出力させることが可能となっています。 この機能を利用して、作成したブログをあたらしい独自ドメインで公開する際に、トラックバックURLなどをその独自ドメイン以下のURLとして公開することが出来ます。 ただし一つ条件があって、独自ドメインで公開する際のCGIのURLと、本来のCGIのURLが、ホスト名以下の部分で一致している必要があります。これをクリアするためにはいくつかの方法があるかと思いますが、自分が使っているXREAさんで、シンボリックリンクを使った設定が上手く行ったので紹介します。例として、XREAでのユーザー名が「chicken」として、現在以下のURLで、インストールしたMTの管理画面にアクセスしているものとします。 http://www.chicken.com/cgi-bin/mt/mt.cgi すると、MTをインストールしたディレクトリのサーバー内でのパスは以下のようになるかと思います。 /virtual/chicken/public_html/cgi-bin/mt/ そして、同じMT上で新しく作るブログを、独自ドメインを利用した以下のURLで公開するとしましょう。 http://blog.thecat.net/ 上記がサイトURLなら、サイト・パスは以下のサーバー内のパスを指定することになると思います。 /virtual/chicken/public_html/blog.thecat.net/ 目的は、「/virtual/chicken/public_html/cgi-bin/mt/」以下に設置されているCGIスクリプトに、「http://blog.thecat.net/」以下のアドレスでアクセスできるようにすることです。さらに、MTの仕様上の要求から、ホスト名以下のパスが同一である必要があります。 つまり、 「http://www.chicken.com/cgi-bin/mt/」 と、 「http://blog.thecat.net/cgi-bin/mt/」 のふたつのURLで、どちらにアクセスしても同じCGIファイルが公開されていれば良いわけです。 今回はシンボリック・リンクを使ってみます。(自分がお借りしてるs160サーバーで動作確認したところでは、幸いApacheの設定でのFollowSymLinkが有効になっているようでした。) あらかじめ、FTPクライアントなどで「/virtual/chicken/public_html/blog.thecat.net/cgi-bin」ディレクトリを作成しておきます。中身は空っぽでよいです。 次にXREAのサイト内のコントロール・パネルから「ホスト情報登録」を選択して許可を得た上で、SSHでログインしてください。 作成した「/virtual/chicken/public_html/blog.thecat.net/cgi-bin」ディレクトリに移動します。 cd /virtual/chicken/public_html/blog.thecat.net/cgi-bin そして、シンボリックリンクによって「/virtual/chicken/public_html/blog.thecat.net/cgi-bin/mt」へのアクセスが、MTのインストールディレクトリに繋がるように、以下のコマンドを実行してシンボリックリンクを作成します。 ln -s /virtual/chicken/public_html/cgi-bin/mt mt 確認のため、ブラウザで「http://blog.thecat.net/cgi-bin/mt/mt.cgi」にアクセスしてみて、管理画面が表示されれば成功です。 第二段階です。目的のブログで、ブログ独自のホスト名でCGIを公開するために、mt-config.cgiの以下の箇所を書き換えます。現在のCGIPath CGIPath http://www.chicken.com/cgi-bin/mt/ を、ホスト名を省略した以下の形に書き換えてアップロードしてください。 CGIPath /cgi-bin/mt/ 最後に、目的のブログを再構築すれば完成です。 念のため、再構築したブログのエントリーアーカイブに移動して、トラックバックURLを確認してください。 http://blog.thecat.net/cgi-bin/mt/mt-tb.cgi/1 上記のように、独自ドメインに変わっているでしょうか。変わっていたら、このURLをブラウザのアドレス欄にコピペして、CGIに実際にアクセスできるか確認してください。 <response> <error>1</error> <message>トラックバックの送信は、HTTP POSTメソッドを使う必要があります。</message> </response> こんな感じのXMLでのエラーが表示されれば、CGIにアクセスできている証拠です。大成功です!...

May 30, 2007

ラーメンデータベースが素晴らしい件について

滅茶苦茶ラーメンに嵌ってます、最近。 多分そのせいで、ますます腹が出てきました。 ボストロールに変身出来そうです。 立派な赤ちゃんが産めそうです。 ッ・・・!!誰だッ!人様の腹を凝視する奴・・・ッ!! 苦しいです、ベルト閉めるのが。 というわけで、勢いあまってラーメンデータベースにユーザー登録してしまいました。 いやー、すごいWEB2,0を感じます。 ほぼ全ての文脈で提供されるフィード。 GoogleMapとの密接な連携。 だって、俺の食べ歩き日記が、きちんと地図になってるもん。すごくね? Web2.0は純粋に技術的なイノベーションである。 世に蔓延るビジネス視点でのWeb2.0論はたいてい的を外してる。 なんて事を、この微妙にニッチなサービスを弄ってると強く思います。 API公開したりしないかな。すぐプラグイン作るよ。...

May 22, 2007

デザインを変えてみた。

うむ。重い。ウザイ。 background-attachment: fixed; ってやつを外したらだいぶましになった。

May 19, 2007

headphoneほすい

ほすい

May 15, 2007

Vista かわいいよ Vista

Windows + Space でガジェットを最前面に表示できる。しかしもう一度押しても元には戻らない。この微妙なところがまた・・・ 追記: ガジェットを最前面に表示した後スペースを押すと、ガジェットの追加画面が立ち上がる。 ここでESCキーを押すとガジェットの追加画面が消え、同時にガジェットも最前面から消えるようだ。 つまり、同時押しでは無く、Space -> Esc で非表示という、ちょっとEmacsのようなコマンド体系だったのだ! Vista 最高だよ Vista。

May 7, 2007

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

April 6, 2007

Plagger::Plugin::Widget::Tumblr

とりあえず作ってみました。 javascriptを起動するリンクが含まれているとGmailでリンクが削除されてしまうようなので、とりあえずjavascript無しです。 結果として、現状は範囲選択などは無視した動作となります。 package Plagger::Plugin::Widget::Tumblr; use strict; use base qw( Plagger::Plugin ); use HTML::Entities; use URI; use Encode; sub register { my($self, $context) = @_; $context->register_hook( $self, 'publish.entry.fixup' => \&add, ); } sub add { my($self, $context, $args) = @_; $args->{entry}->add_widget($self); } sub html { my($self, $entry) = @_; my $uri = URI->new('http://www.tumblr.net/share'); $uri->query_form({ v => '2', u => $entry->permalink, t => Encode::encode('utf-8', $entry->title), }); my $url = HTML::Entities::encode($uri->as_string);...

April 5, 2007

Movable Typeのサンプルコードが万物の謎を解く

Movable Typeの PerlAPIリファレンスに含まれるサンプル・コードに、スーパーコンピュータ「ディープ・ソート」のソースコードの一部と思われるコードが引用されていることが判明した。 一部のアルゴリズムは省略されているにもかかわらず、全体としての動作は完全な「ディープ・ソート」のエミュレーションを行えるものとなっている。...

March 29, 2007

PluginNameをL10Nしてはならぬ

Movable Type のプラグインを作成する場合に、プラグインの管理画面で表示されることを見越して、L10Nに対応した形でプラグインの登録をする場合も多いと思います。 @MT::Plugin::HogeManager::ISA = qw(MT::Plugin); my $plugin = new MT::Plugin::HogeManager({ name => '<MT_TRANS phrase=\'HogeManager\'>', author_name => '<MT_TRANS phrase=\'aklaswad\'>', l10n_class => 'HogeManager::L10N', system_config_template => 'config.tmpl', settings => new MT::PluginSettings([ ['moge'], ]), }); MT->add_plugin($plugin); そして、このプラグインの設定をMT::PluginSettingsを利用してデータベースに保存するとアッー! mysql> select * from mt_plugindata\G *************************** 1. row *************************** plugindata_id: 1 plugindata_data: SERG plugindata_key: configuration plugindata_plugin: <MT_TRANS phrase='HogeManager'> 1 row in set (0.00 sec)...

March 27, 2007

はてなでブックマークされるとメールで教えてくれるプラグイン

ブックマークが気になりすぎて 仕事が手に付かなくなるのが好きだ F5 キーで一分に何度も新着ブックマークをチェックしても 何も更新がないのは屈辱の極みだ 小野和俊のブログ:諸君 私はブログが好きだ そんな人におすすめです。 AlertHatenaBookmark_20070308.tar.gz AlertHatenaBookmark_20070308.zip このプラグインをインストールすると、ブログのトータルはてブ数が増えた際にメールが送信されます。 Movable Typeのスケジュールタスク機能と被ブックマーク合計数取得APIを利用しています。 ちなみに、とある事情によりテスト不十分な状況です。誰かはてブしてください。 F5キーを押して新着をチェック。 F5キーを押して新着をチェック。 F5キーを押して新着をチェック。。。インストール 解凍して出てきた「plugins」フォルダの中の「AlertHatenaBookmark」フォルダを、丸ごとお使いのMovable Typeのpluginsディレクトリにアップロードしてください。 下準備 Movable Type のスケジュールタスクが動作している必要があります。ログフィードを定期的に取得するか、cronjobを設定してください。 設定 システム・メニューのプラグインから諸設定を変更できます。 メール送信先メールを送信する先を指定してください。設定していないと、メールが送信されず、Movable Typeのログにエラーが残ります。 送信に使うアドレスメール送信に使用するアドレスを指定します。設定していないと、メールが送信されず、Movable Typeのログにエラーが残ります。お使いのサーバーの設定によっては、同サーバー内のドメインのメールアドレスでしか送信できないなどの制限があるかもしれません。 インターバル前回メールより、指定した数以上にブックマーク数が増えた場合にメールを送信します。メールが多くてウザイという場合は数を増やしてください。

March 8, 2007

mt-view.cgiを使ってみる

Movable Type には、本家提供のPerl版ダイナミックパブリッシング「mt-view.cgi」が、ひっそりと同梱されている。 とりあえず中身見たりしながらテスト環境で動かしてみたのでそのまとめをメモしておきます。あらすじ mt-view.cgiは、管理画面から指定したアーカイブ・マッピングの設定を考慮してくれません。 mt-view.cgiは、「メインページ」という日本語のテンプレート名を理解してくれません。 mt-view.cgiは、ブログのidをURLに欲しがります。 ということで、本家ダイナミック・パブリッシングの機能を一部流用しつつ、mod_rewriteとアーカイブ・マッピングを使って設定してみます。 ブログの作成 まず最初にすることは、mt-config.cgiに以下の一行を追加することです。 SafeMode 0 これでMTの安全装置が解除されます。デンジャラスです。 さて、ブログを作成しましょう。きちんとサイト・パス、サイトURLの設定もしてください。 普通にブログを作成したら、「メインページ」テンプレートのテンプレート名を「Main Index」に変更します。 次に、何でも良いのでいったんダイナミックパブリッシングを有効にします。これでブログのサイトパスで指定したディレクトリに「.htaccess」ファイルが作成されます。 このファイルをちょっと変更して、ブログに対するアクセスがmt-view.cgiによって処理されるようrewriteを適用させます。 おっと、その前にブログのIDを把握しておきましょう。ブラウザのアドレスバーに表示されているURLを見て、「blog_id=*」という部分を探してください。「*」の部分がブログのIDになります。 .htaccessの編集 変更する必要があるのは2箇所です。とりあえず.htaccessファイルを開いてみましょう。 12行目に、「index.php」「index.html」などとファイル名が並んでいると思います。その最後に、mtview.phpファイルへのパスがあるので、これをmt-view.cgiへのパスに変更してください。そして、mt-view.cgiの後ろに、さらにURLのようにブログIDを追加します。 mtのインストールディレクトリのURL(CGIPath)が「http://example.com/cgi-bin/mt」で、ブログIDが1の場合、次のようになります。 DirectoryIndex index.php index.html index.htm default.htm default.html default.asp /cgi-bin/mt/mt-view.cgi/1/ もう一箇所、25行目も同じように書き換えます。こちらは、ブログIDの後ろにさらに「$1」と加えてください。 RewriteRule ^(.*)$ /cgi-bin/mt/mt-view.cgi/1/$1 [L,QSA] この最後の「$1」は、ブログIDとは関係なく常に「$1」です。 アーカイブ・マッピングの編集 これは、mt-view.cgiが受け付けるURLが決め打ちになっているので、黙って従うほかありません。各アーカイブで「カスタマイズする」を選び、以下の通りに設定してください。 エントリーentry/%E 月別archives/%y/%m カテゴリーsection/<$MTCategoryID$> 動作確認 これで、一通りの設定は終了です。 MTの出力する.htaccessでは、実際にファイルがある場合にはそのままファイルが呼び出される設定となっているので、ブログディレクトリから.htaccess以外のファイルを削除してブログにアクセスしてみてください。 ファイルが無いのにブログが表示できたなら大成功です。お疲れ様でした!

March 7, 2007

transformerの使い方

一般(?)に広くtransformerと呼ばれる、MT3.3から導入された機能群。 プラグインから管理画面を変更する手段を提供することで、より高度なプラグインの作成が可能となります。 しかし、現在日本語では殆どドキュメントが用意されていない状況です。 興味本位でちょっと調べてみたところ、こんなことも出来るのか、という使い勝手の良い部分が、知られずに埋もれていると感じたので、まとめておきます。後でチョコチョコと追記するかもしれません。 妙に堅い説明口調になってしまったのは、何ででしょうね。。。 ちなみに、3.3前後のmtのプロジェクト名は、全てアニメのトランスフォーマーのロボットの名前から取られているそうです ;-)3つのコールバック 主に以下のコールバックを利用することで、管理画面の変更が行えます。 AppTemplateSource AppTemplateParam AppTemplateOutput それぞれのコールバックでは、実行されるタイミング、および渡される引数が異なるため、目的に応じて使い分けます。引数などの詳細はMovable Type オブジェクト・リファレンス - MT::Appの「コールバック」の項を参照してください。 Movable Typeの管理画面は、HTML::Templateモジュールを利用して出力されています。ある程度踏み込んだ作業を行う場合、HTML::Templateモジュールについての知識も必要になるでしょう。 AppTemplateSource 管理画面のテンプレートを直接変更することが出来ます。実行されるのはHTML::Templateがテンプレートタグのパースを行う前なので、単純な文字列置換のほかにも、HTML::Templateのタグを直接書き換えることも可能です。 TMPL_INCLUDEで読み込まれるテンプレートについては、注意が必要です。AppTemplateSourceコールバックの実行ルーチンは、HTML::Templateのfilterとして登録されるので、TMPL_INCLUDEによって新たにテンプレートが読み込まれる都度、実行されます。 HTML::Template - CGI スクリプトから HTML テンプレートを使うための Perl モジュール filter - このオプションはテンプレートファイルに対するフィルタを指定します。フィルタは HTML::Template がテンプレートファイルを読み込んだ後、テンプレートタグのパーズを開始する前に呼び出されるサブルーチンです。 (中略) 指定されたフィルタは TMPL_INCLUDE でファイルが読み込まれる度にメインのテンプレートファイルと同様に適用されます。 しかし、filter内でコールバックの判定と実行が行われるため、variant(ポイント以降の部分。この場合はファイル名)が指定されているコールバックは、その段階で「今回実行する必要がないコールバック」と判定されてしまい実行されません。その結果、たとえば MT->add_callback('MT::App::CMS::AppTemplateSource.list_blog', 9, $plugin, \&transform_routine);として登録したコードは、list_blog.tmplファイル内部でインクルードされるheader.tmplに対しては実行されません。header.tmplのインクルードの際にコールバックされるのは、AppTemplateSource.headerに登録したコールバックや、variant無しでAppTemplateSourceに登録したコールバックです。 この仕様により、list_blog画面でのみheaderのテンプレートに変更を加える、ということは実現が難しくなっています。もしHTML::Templateによるテンプレートの展開が終了した後でも実現可能な作業ならば、迷わず「AppTemplateOutput」を使うべきでしょう。 管理画面の全てのページにスタイルシートやjavascriptを追加する場合にも、このコールバックを利用するとちょっと便利です。headerテンプレートには「<MT_HEAD:STYLE>」「<MT_HEAD:SCRIPT>」という、スタイルシートとjavascriptをhead要素内に追加するためのプレースホルダーが用意されています。具体的には、以下のサブルーチンを呼び出すことで、これらプレースホルダーの位置に任意の内容を挿入出来ます。 tmpl_prepend tmpl_prepend($tmpl, $section, $id, $content);プレースホルダーの先頭に$contentで指定した文字列を追加します。 tmpl_replace tmpl_replace($tmpl, $section, $id, $content);プレースホルダー全体を$contentで指定した文字列で置き換えます。 tmpl_append tmpl_prepend($tmpl, $section, $id, $content);プレースホルダーの先頭に$contentで指定した文字列を追加します。 tmpl_select tmpl_select($tmpl, $section, $id);プレースホルダーの現在の内容を返します。 $tmplには、テンプレートの内容へのリファレンスを指定する必要があります(AppTemplateSourceから渡される$tmpl変数をそのまま渡せばよいです)。 $sectionと$idの組み合わせによってターゲットとなるプレースホルダーを指定します。mt-3.34では、$sectionに文字列「HEAD」、$idには文字列「STYLE」または「SCRIPT」という組み合わせが利用可能です。他には、やはりheaderテンプレートで「TOPNAV」「BLOGMENU」という組み合わせも利用できそうです(未確認)。将来的には、他にもプレースホルダーが追加されるのかもしれません。 例えば、管理画面の背景に何らかの画像を表示させたい場合、次のようなコードになります。 MT->add_callback('MT::App::CMS::AppTemplateSource', 9, $plugin, \&change_background);...

March 5, 2007

CustomEditorButton、約0.23

MT4に対応したCustomEditorButton2を公開しました! CustomEditorButton_20070227.tar.gz CustomEditorButton_20070227.zip 主な変更点は ユーザー記述のコードの仕様の一部変更(後述) システム管理者以外でも頑張ればボタンを編集できていた点を修正 IEで動作がおかしかった点を修正(副作用で、マウスオーバーした際の説明が表示されなくなった) ユーザー記述コード部分の変更点 選択範囲が無い場合でもcodeが実行されるようになった 変数「txt」に値が代入されていると、textareaの全体をtxtで置き換えるようにした。 うーん、どうもjavascriptの知識不足を露呈してしまいまして、ユーザー記述コードの実行については弄れど弄れど理想の動作をしてくれません。まあ、手軽に任意のコードを挿入したり出来れば充分という気もするので、あまり張り切りすぎず、このままシンプルな仕様にしておこうと思います。 今後追加したい機能としては ボタンのトグル機能のサポート キーボードショートカット対応...

February 26, 2007

エントリー一覧画面を、公開/下書きの状況によって色分けする

一発ネタプラグイン。 EntryConditionalColoring.zip エントリー一覧の表示画面で、行の表示色を奇数偶数ではなくエントリーの状態によって色分けしてみました。 下書きのままで置いておくべきエントリーを間違えて公開してしまう、なんて事が十回に一回位は減るかもしれません。

February 13, 2007

Movable Type のエントリー編集画面に自由に機能追加できるプラグイン

MT4に対応したCustomEditorButton2を公開しました! 数行のjavascriptを記述するだけで、エントリー画面のボタンを自作できるプラグインです。 簡単なボタンを作成する様子をムービーにしてみました。 前回こっそりとアップロードした際より、かなりの(余計な)機能強化をして、見てくれだけは人様に見せられるものになったということで、きちんとドキュメント類の作成を始めてみました。一部仕様が固まっていない部分があるので、ベータ版としての公開になります。お使いになられた方、感想などをいただければ幸いです。 0.1から0.2へのバージョンアップの主な内容は、各ユーザーごとにボタンの並びを変更できるようになったことと、ボタントップに文字を使用できるようになり、必ずしも画像を用意する必要がなくなったことです。 ダウンロードはこちらから。 CustomEditorButton0.2.tar.gzCustomEditorButton0.2.zip マニュアル インストール ファイルをダウンロード、解凍したら、お使いのMovable Typeのディレクトリに上書きする形でアップロードしてください。「mt-static」を移動している場合や、上書きが不安な場合は、以下の2箇所にファイルをアップロードしてください。 解凍したディレクトリの「plugins/CustomEditorButton」を、お使いのMovable Typeの「plugins」ディレクトリに解凍したディレクトリの「mt-static/plugins/CustomEditorButton」を、お使いのMovable Typeの「mt-static/plugins」ディレクトリに ボタンの管理 プラグインの性質上、変なことをやろうと思えば出来る構造となっているので、誰でもボタンを作成できる、という事には出来ません。ボタンの作成やインストールを行う場合、システム管理者でログインする必要があります。 システム・メニューの中から「ボタン」を選択して、ボタンの管理画面に進んでください。ボタンの追加、削除ができます。 ボタンの作成 新規にボタンを追加する場合、以下の項目を設定します。 name: ボタンの名前です。表示文字: ボタンの表示に使用される文字を指定します。ボタンの表示用の画像が設定されている場合は、この項目は使用されません。画像へのURL: ボタンのイメージに画像を使用する場合、アップロードした画像のurlをここに指定してください。現在の仕様では、ボタン外側の枠は自動的に提供されます。ボタンの中身だけの画像を用意してください。説明: ボタンの説明を入力します。コード: 後述のように、ボタンの動作をjavascriptで記述してください。 コード javascriptでボタンの動作を定義します。 近いうちに仕様は変更される予定です。 ここに書かれたjavascriptのコードは、関数の中に自動的に展開されるので、必要な動作の内容だけを記述するだけですみます。 現在の仕様では、エディター画面で範囲選択がされている場合にのみ、選択範囲が「str」という変数に代入されて、このコードが実行されます。 str変数に処理結果を代入することで、選択範囲に処理が反映されます。 例えば、選択範囲を「div」タグで囲む場合は、以下の一行をコード欄に入力します。 str = '<div>' + str + '</div>'; 個人用の設定 各投稿者は、システムにインストールされているボタンの中から、好きなものを選択して使用できます。 画面の右上のログアウトの隣に、「My Button」メニューが追加されていますので、クリックして個人のボタン設定画面にすすんでください。 画面上段が、現在利用する設定となっているボタンの一覧です。利用したいボタンが下段にある場合、ドラッグ&ドロップで上段に放り込んでください。並び順もそのまま適用されます。 今後 開発にあたり、とりあえずの使い勝手を最優先して外堀から埋めていきましたが、一番肝心のボタンのスクリプト機能が置き去りになっている状態です。 これから、ボタン作成に便利な機能をいろいろ追加していく予定ですが、その代わり現在のスクリプト仕様は変更になる可能性が大です。来週末くらい迄に仕様を固めたいと思いますので、それまではベータ版ということでご容赦ください。

February 12, 2007

チャーハン

僕が学生で下宿していた頃、通いつめていたパチ屋の向かいに安い中華屋があった。 確かチャーハンは500円だったと思う。 僕は授業には一切出ずに毎日毎日朝からスロットしてた。結構勝てた。で、昼は向かいの中華屋でチャーハンを食べていた。 その中華屋はカウンターしかなくて、客の目の前に職人がいて、タバコを吸う傍ら、時折鍋を振る。 炊飯が追いつかなければ、平然と「サトウのごはん」を使ってチャーハンを作って出す。 そんな、なんというか、やる気の無い店なのだが、目の前で作るチャーハンは味のばらつきもなく妙に美味しかった。 そのときの記憶を元に、安定してチャーハンを上手く作る手順をメモっておきます。 ・オーダーが入ったら、どんぶりにご飯を盛り、上に刻んだネギと刻んだチャーシューを乗せておく(A)。 チャーハンは作業の迅速さが命。ネギや加工済みの具の投入タイミングはさほど重要では無い。だったら米と一緒に投入すればよい。 ・タバコを吸いながら中華鍋に油を敷き、よく熱する。 業務用のコンロで最大火力で熱してさえ、ゆっくりタバコを吸う余裕が生まれるくらいしっかり熱する。 ・卵を片手で割りいれ、即効でご飯(A)を投入。 ココだけは真似しないほうが良いかも。あらかじめ別皿に卵を溶いておこう。自分はそうしている。 ご飯投入は5秒後くらいか。 ・鍋を激しく振りつつ、魔法の液体三種類をオタマで振り掛ける。 多分、ネギ油と化学調味料だと思われる。鍋肌を滑らしていたので、香り付けの醤油もあったのだろうか。自宅でやるなら、塩コショウ、味の素、何でも良いが、鍋を振る手を止めずに行うこと。調味料は片手で取れる位置にそろえておこう。 ・満足がゆくまで鍋を振って出来上がり。...

February 7, 2007