-
000478
Mobable Type に,任意の宛先にメールを送られてしまう脆弱性が見つかったそうな.
対象は,すべての日本語版 Movable Type とのことですので,該当する方は早急にパッチを適用しましょう. ファイルを一つコピーするだけですのでいたって簡単.
[ permalink ] [ 0 comment(s) ] -
000460
OS を Fedora Core 3 に上げたところ,直接の原因は不明ながら MT が文字化けを起こすようになりました.
DB から取得したデータを ISO-8859-1 で処理しているようで,めちゃめちゃな実体参照だらけです. 多分どこかいじれば直るんだろうけれど,今更 MT2.64 のソースをいじるのもどうかと思ったので,いっそと MT3.121 に移行してしまいました.
MT の export / import の機能もあるのだけれど,噂ではファイル名が変わってしまうらしいので却下. MT のアップグレード用パッケージで DB スキーマを変更する方針をとりました.
- データのバックアップ
念の為,データベースのバックアップを取得します.
$ pg_dump movabletype > mt.dump
- アップグレード用パッケージの DL
パッケージの種類「アップグレード」を選択してダウンロードします.
- mt-upgrade*.cgi のコピー
アーカイブを展開して,mt-upgrade*.cgi を既存の MT のルートディレクトリにコピーします.実行権限があることを確認しましょう.
- DB スキーマの更新
今回は 2.64 がベースなので以下の二つのファイルにアクセスして,DB スキーマを更新します.
- mt-upgrade30.cgi
- mt-upgrade31.cgi
なにやら WARNING がでますが,メッセージを読む限り特に問題なさそうなので無視.これらのスクリプトに現れる SQL,PostgreSQL で実行できる形式に見えないんだけれど,どこかで変換かませてあるのかなぁ.ちょっと不思議ですが,きちんとアップグレードされるようなので良しとします.
- その他のファイルのコピー
/extlib , /lib などなどを上書きコピーします.ぼくは目的別に幾つかのディレクトリに分けているため多少手順が複雑ですが,普通の構成であれば単純なコピーでいけるはずです.
移行は完了したのですが,案の定幾つかの問題が発生しました. まだ PostgreSQL での recently_commented_on は直ってないんだね. いい加減なんとかしてほしいところです. 以下が今回行った修正になります.
- PostgreSQL での recently_commented_on
MT-3.121-full-ja-recently_commented_on.patch
PostgreSQL で MT を使っている方は気付くんじゃないかと思うのだけれど,最新のコメントが取れない問題を修正するパッチです.かなり泥臭いコードで SQL の実行効率が悪いけれど,MT のお作法とスキーマ設計のせいでイマイチ良い解決法が見つかっていません.
- コメントのハイパーリンク
MT-3.121-full-ja-hyperlink.patch
コメントに "http" からはじまる文字列があると自動的に <a> で囲んでくれますが,これをそのままにすると横幅が大変なことになります.これを "<LINK> で決め打ちにすることで解消するパッチです.
- <input type="image"> 対応
MT-3.121-full-ja-image_button.patch
コメントの投稿ページを type="submit" ではなく type="image" にした場合でも動作するようにするパッチです.
[ permalink ] [ 0 comment(s) ] - アップグレード用パッケージの DL
-
000420
Movabletype 3.1 がリリースされていたので設置してみました.
インストールログはこちら.
ただ,ログ中にもあるように PostgreSQL7.3.4 を使っていると正常にセットアップできませんでした. Movabletype は PostgreSQL での動作確認をあまりせずにリリースしている? それともバージョンの問題なのかな. インストールできないって,かなり由々しき問題だと思うのだがなぁ. とりあえずの回避策としてパッチを置いておきますのでお使いください.
当て方は次のような感じ.
$ cd MT-3.11-full-ja/ $ patch -p1 < ../MT-3.11-full-ja-schema.patch
ちなみに麦酒堂のバージョンはまだ上がっていません.
[ permalink ] [ 0 comment(s) ] -
000409
最近,麦酒堂のトップページがいやに重くなったのでチューニングしました.
重い原因は,ランキング生成と被検索語リスト生成の SQL でした. PostgreSQL のオプティマイザや実行計画の知識はないし,新たに調べるのも手間だったので,ひとまず常識レベルの手だけは打ってみることに.
ランキング生成 - pageview.php
変更前select p.target as id , e.entry_title as title , p.pageview from mt_entry e , ( select target , count (*) as pageview from miz_pageview_log p where p.segment = 'entry' and p.creation_date_char = '?1-?2' group by segment , target order by 2 desc offset 0 limit 10) p where e.entry_id = to_number ( p.target , '99999999')変更後select p.target as id , e.entry_title as title , p.pageview from mt_entry e , ( select p1.target , count (*) as pageview from ( select p0.segment , p0.target from miz_pageview_log p0 where p0.creation_date_char = '?1-?2' and p1.segment = 'entry' ) p1 group by p1.target order by 2 desc offset 0 limit 10) p where e.entry_id = to_number ( p.target , '99999999')被検索語リスト生成 - recentlySearchedBy.php
変更前elect http_referrer from miz_http_referrer_log where position ( '?' in http_referrer ) <> 0 group by http_referrer order by max ( creation_date ) desc offset 0 limit 50
変更後select h0.http_referrer from ( select * from miz_http_referrer_log h where position ( '?' in h.http_referrer ) <> 0 order by h.creation_date desc offset 0 limit 500 ) h0 group by h0.http_referrer order by max ( h0.creation_date ) desc offset 0 limit 50
二つめの recentlySearchedBy.php のチューニングなんてのは,えらい泥臭いですけれどね.それでも,これで桁違いにレスポンスが早くなったので,やはりチューニングは侮れません. 本当は recentry_commented_on もガリガリ直したいのだけれど(これのせいでBlogの再構築が遅い),MT のコードのお作法的に非常に難しいんですよ,悔しいけれど.
変更後のソースです.
[ permalink ] [ 0 comment(s) ] -
000408
以前 gadget からご指摘をいただいたのですが,麦酒堂の Trackback URI を選択しようとするとわけのわからない範囲が選択されてしまいます. 調べてみたところ,どうやらこれは IE で起こる問題で,Mozilla を使っているため気付いていなかったようです.
う~ん,CSS で position:absolute を使うと生じるのね. 困った. 麦酒堂は position:absolute なしではちょっと難しいデザインになっています (上部の動的メニューが一因). 仕方ないのでしばらく放置していたのですが,それもなにやら悔しいので対応しました.
.trackback-uri input { border : 0px; padding : 5px; } .trackback-uri input { background : #ffffff; }邪道ですけどね.まぁ,一応の対処です.
これまで「URI選択できなくてめんどくさいから trackback はやめた!」と思っていた方がもしいらっしゃたら,今後はそんなことはないのでどうぞよろしくお願いします.
[ permalink ] [ 0 comment(s) ] -
000404
このエントリは Movabletype2.64 に基づいて書いています.
Movabletype は,コメント投稿ページと管理ページが同じディレクトリにあるのが前々から気になっていました. 不特定多数が触るディレクトリで管理作業を行うのは,どうにも気持ちが悪いものです. そこで今回,Movabletype のソースを書き換えてでも何とかこの問題を回避しようと試みました.
grep かけたりいろいろと調べたのですが,結論としてはソースに手を入れる必要はまったくありませんでした. Movabletype の設定ファイルである mt.cfg の設定項目に "AdminCGIPath" というものがあります<参考>.
Movabletype のディレクトリから,一般ユーザが必要とするファイルのみをコピーした新たなディレクトリを作成します.そして CGIPath にはその新しく作ったディレクトリを,AdminCGIPath には全ファイルが揃ったディレクトリを,それぞれ設定します. Web サーバを両方のディレクトリが参照できるように設定し,サイトを再構築すれば作業完了となります.比較的簡単.ただ「一般ユーザが必要とするファイル」の選定が多少面倒かもしれません.ひとまず,ぼくのところでは次のファイルのみに絞っています.
- extlib/
- lib/
- mt-comments.cgi
- mt-db-pass.cgi
- mt-search.cgi
- mt-tb.cgi
- mt-xmlrpc.cgi
- mt.cfg
- search_templates/
ところで,Google で "AdminCGIPath" を検索しても 120 件程度しか引っかからないのだけれど,この設定項目はあまり一般的ではないのかな.
[ permalink ] [ 0 comment(s) ] -
000394
MT をちょこちょこといじっていて,コメント登録の確認画面,エラー画面に手を入れようとしてはたと気付きました. PHP 使えないじゃないすか. コメント登録の確認画面,エラー画面は mt-comments.cgi です.「*.cgi」. PHP が使えないのも仕方ありません.
しかし,麦酒堂は相当部分が PHP 化されてしまっていて,デザインの一貫性を保つためには PHP が欠かせない状況です. 動的部分だけが Perl というのは,これはなかなか厳しい.
という背景を踏まえまして,今回 mt-comments.cgi を PHP でラップするという強引なスクリプトを書きました.
ラップとは言っても,内部で HTTP リクエストを発行するという疎な呼び出しです. 逆に,mt-comments.cgi が別ホストにあっても良いので,何か変わった使い方もできるかもしれません. 具体的に思いつかないけれど・・・負荷分散とか?
そしてその HTTP リクエストで mt-comments.cgi が返した文字列を *.php 内に表示します. 使用方法は次のようになります.Individual entry archive 等の,mt-comments.cgi へ post する form 要素をもつページの先頭に以下のコードを埋め込みます.
<?php include ( "mt_comments_wrapper.php" ); $v_mtCommentsWrapper = new mt_comments_wrapper ( "mt.mizba.net" , "/system" ); $v_mtCommentsWrapper->go(); ?>mt_comments_wrapper.php のパスは環境に合わせて設定してください. "mt.mizba.net" , "/system" はそれぞれ mt-comments.cgi が存在するホスト名,パスになります. これも環境に合わせて設定してください.
既存のフォームの直前と直後に以下のコードを埋め込みます.
<?php if ( ! $v_mtCommentsWrapper->execBody () ) { ?> 既存の form 要素 <?php } ?>form 要素だけを厳密に囲む必要はなく,mt-comments.cgi の出力で置き換えたい範囲も含めて囲んでください.
手順 2 で囲んだ範囲は "Comment Preview Template" , "Commment Error Template" に基づく出力で置き換えられます. この二つのテンプレートを編集し,form 要素のみに削ってください. html 要素,body 要素等は不要になります.
特記事項.
- form の post 先は mt-comments.cgi ではなく,*.php 自身にしてください.
- mt-comments.cgi の出力中の <?php ... ?> は PHP のコードとして実行されます.
[ permalink ] -
000341
複眼中心 を真似て,エントリごとのページビューをカウントする PHP のプログラムを作成してみました.(参考にさせていただきました.ありがとう>gadget)
Download : pageview.php
値をインクリメントする方式ではなく,アクセスごとに一行挿入し,表示時に count (*) する方式を採っています.パフォーマンスを考えるとイマイチな手法かもしれませんが,後から集計方法を変更したりできるのでこうしました.
countUp を呼ぶことで一行挿入されます.getAllPageview で全アクセス数を,getIndividualPageview で個別アクセス数を取得することが出来ます. また,showMonthlyRanking に引数 (年,月) を渡すことで,指定月のアクセスランキングを表示したりもします.
まぁ,動作の詳細はコード参照のこと.自然言語でくどくどと説明するよりよほど正確です.[ permalink ] [ 1 comment(s) ] -
000334
MovableType に組み込んで使用する,被検索語表示モジュールを開発しました.
このモジュールはサイト内のあるページに対するリクエストが発生した際に,HTTP_REFERER ヘッダに基づいて被検索語を抽出,記録するものです. ここで被検索語とは,いずれかのWeb検索システムの検索結果一覧から当該ページに遷移が発生した際に用いられた検索語を指します.
つまりは「この語句で検索したら,このページが引っかかったらしいよ」といった情報を記録するのが,このモジュールの働きです.本モジュールは GPL の元で公開されます. 扱いの詳細はライセンス条項を参照してください.
Download : recentlySearchedBy.php
2004-05-16 : ver.1.0.1.2 を公開.詳細はコメントに記載.このモジュールを利用するためには,事前に以下のDBオブジェクトを作成する必要があります.
-- TABLE create table miz_http_referrer_log ( rec_id numeric (22,0), segment varchar (50), target varchar (50), creation_date timestamp, http_referrer varchar (4000) ); create index miz_http_referrer_log_ind01 on miz_http_referrer_log ( segment , target ); -- SEQUENCE create sequence miz_log_record_s increment 1 start 1000;ソースコード内の定数も環境に合わせて変更してください. 特に "DB_CONN_STR" の変更は必須です. これらの変更を施したコードをあなたのサイト内で利用したとしても,変更内容を開示する必要はありません. どうぞご自由に変更を行ってください. (変更後のコードを再配布する場合はこの限りではありません.)
呼び出す関数は次の通りです.
- regAndShowSearchedWord
- 被検索語をDBに格納するとともに被検索語の一覧を表示します.二つの引数をとり,この二つの値の組み合わせで調査対象ページを識別します.
- showSearchedWord
- 検索語の一覧を表示します.
<?php include ( "recentlySearchedBy.php" ); ?> ... <?php regAndShowReferrer ( "entry" , "<$MTEntryID pad="1"$>" ); ?>動作確認の取れている環境は次の通りです.
MT 2.64 DB PostgreSQL7.3.4 PHP 4.3.4 (with mbstring , psql) [ permalink ] [ 1 comment(s) ] -
000331
gadget からかねがね「自分のページがどういう検索語で引っかかっているか,調べると非常に興味深い」と聞いていたので,本サイトも試してみることにしました.トップと各エントリごとのページに設置してあります.
REFERRER を見ていることに嫌悪感を持つ人もいるかもしれないので念の為.
記録している情報は以下です.- 麦酒堂内のページを識別する ID
- 参照元ページの URI
- 日時
ソースはこんな感じです.
こちらを参考にしました.まだ実装したい機能はたくさんありますが,ひとまず動くので設置してみます.
[ permalink ] [ 0 comment(s) ] -
000263
input 要素の type 属性を "image" に設定することで,フォームのボタンを画像で代替出来ます.
HTML4.01 - 17.4.1 Control types created with INPUTこれを使うと,仕様に書いてある通り,クリックした座標を送信します.パラメータ名は name 属性のあとに ".x" , ",y" を続けたものが用いられるのですが,MT の場合は,これではうまく動いてくれなくなります.そこで,以下の修正を入れました.
[ permalink ] [ 0 comment(s) ] -
000260
MT は,コメント内の URI を自動でハイパーリンクにしてくれます.この機能は便利ではあるのですが,レイアウトが崩れる原因にもなります.多少気持ちが悪いので,MT のソースを少しいじってみました.
MT-2.64-hyperlink.patchリンクを "<LINK>" と表示します.ついでに https , ftp の二つの URI Scheme もハイパーリンクにしてくれます.
パッチ適用方法は次の通り.
$ cd path/to/MT-2.64-full-lib $ patch -p1 < MT-2.64-hyperlink.patch
[ permalink ] [ 1 comment(s) ] -
000152
画面フローを見直してみました.
最初に MT に触ったときの気持ちに立ち返って,
直感的ではなかったところを,
ある程度修正しました.最初,コメント登録画面が
ポップアップする必要性がわからなかった.さらに,indivisual archive からでも
コメントは登録できるので,
結局,コメント一覧&登録画面が
ポップアップとノンポップアップで
二種類もあることになる.
しかも,画面の構成要素が微妙に異なる.
これは,混乱の元.トラックバック画面もポップアップするけれど,
これだって,別にその必要はなくて,
普通にリンクで実現しても良いでしょう.あと,これは MT デフォルトの問題ではなく,
ぼくのページの作り方の問題だったと思うけれど,
Main index と indivisual archive の間を遷移すると,
本文の位置が左右に大きくずれてしまって,
サイトとしての統一感が損なわれていた.といったあたりをある程度解消できるよう,
画面フローを変更しました.でも,こういうのって,結局は慣れの問題だったりして,
最初は違和感があっても,
だんだん普通に思えてくるんだよね.
逆に,このサイトだけ画面フローを変えると,
むしろこっちが使いにくく感じてしまうのでは,
という危惧も多少ありますが,
それでも,信じた道をゆきます.w[ permalink ] [ 0 comment(s) ] -
000151
継続系をもうひとつ.
この Blog のシステムの Tips などを集めてみます.
恐らく,世にはこれと似たような Tips 集があるとは思うので,
見つけ次第,それも貼ってゆこうかと思います.[ permalink ] [ 21 comment(s) ] -
000145
ASP というほどのものでもありませんが・・・.w
設置方法は,大きく二つに分かれます.
まず html ヘッダ内で JavaScript を読み込みます.
<script language="JavaScript" type="text/javascript"
src="http://turu.mine.nu/mt/asp/js/counter.js" charset="Shift-JIS"></script>次に,カウンタを表示したい箇所で JavaScript の関数を呼びます.
<script language="JavaScript" type="text/javascript">
<!--
counter ( "name" , 05 , 35 , 10 , "#ffffff" , "Y" );
//-->
</script>
引数が6つありますが,必須なのは一つ目だけで他は optional です.
1つめ : カウンタの識別名.これが同じものはカウンタ値を共有します.
2つめ : カウンタの桁数.
3つめ : カウンタの幅.
4つめ : カウンタの高さ.
5つめ : カウンタの背景色.
6つめ : ログを記録するか否か.(Y/N)一つ目のカウンタの識別名が他とかぶってしまうとよろしくないので,
設置後初アクセスで値が 1 ではなかった場合は,
他の識別名に変更してくださいね.そして,ログ記録についてですが,
今のところ記録するだけで,分析するためのツールは用意していません.
今後作る予定なので,もし使いたい場合は "Y" を指定しておいてください.
データだけは蓄積してあるので,いずれ参照できるようになるはずです.
必要なければ,引数を与えないで置いてください.以上のような感じです.
よろしければ,お使いくださいませ.[ permalink ] [ 10 comment(s) ]
- データのバックアップ