目次

2004年05月04日

「ファイルアップロードのテスト」MT導入と改造

1048401840447.jpg

この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/8
「ファイルアップロードのテスト」へのコメント  コメントを書く

コメントのテスト

Posted by テスト at 2004年05月05日 12:31
「ファイルアップロードのテスト」へのトラックバック

2004年05月05日

「トラックバックのテスト」MT導入と改造

トラックバックping送信のテストをしてみる。

http://d.hatena.ne.jp/yuntanach/20040401trackback

この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/33
「トラックバックのテスト」へのコメント  コメントを書く
「トラックバックのテスト」へのトラックバック

2004年05月06日

「カテゴリーアーカイブ中にカテゴリーIDを記述する方法」MT導入と改造

カテゴリーアーカイブ中ではカテゴリーのIDを出すことが出来ない。 <$MTCategoryID$>などを記述するとリビルド中にエラーを起こしてしまう。

しかし、この記事によるとちょっとトリッキーなやり方ではあるがなんとかできるようになるようだ。

Acidcorporation.com アクセス解析導入とロリポップ

しょうがないから、カテゴリーのIDでページ名を付けようと考えたのですが、Category Archiveページに、そのカテゴリーのIDだけを表示させるのに苦労してしまったんです。

普通に<$MTCategoryID$>だけ書いたら、エラーでビルドできなくなるし、<MTEntryCategories>に入れただけだと、すべてのカテゴリIDを一列に表示してしまう。

かなり時間かかってイライラしたのですが、最終的に、
<MTEntries lastn="1">
<MTEntryCategorie>
<$MTCategoryID$>
</MTEntryCategories>
</MTEntries>
で、解決しました。正しいやり方なのかな?問題なくなったから別にこれで良いはずです。

追記:

結局、カテゴリーアーカイブ中でカテゴリーIDが必要になる部分では、ちょっと長いけど、

<MTEntries lastn="1"><MTEntryCategorie><$MTCategoryID$></MTEntryCategories></MTEntries>
というタグを書くことですますことにした。
この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/11
「カテゴリーアーカイブ中にカテゴリーIDを記述する方法」へのコメント  コメントを書く
「カテゴリーアーカイブ中にカテゴリーIDを記述する方法」へのトラックバック
Title: エントリー書き込みでWikiやはてなダイアリーのような書式で書けるようにする。
Excerpt: 引用や箇条書を簡単に書けるようにしたい。 とりあえずは引用からやってみた。 行頭に「>>」があると、次ぎに行頭に「 リビルドするときにこのブロックをとで囲む。 データベースには...
From: 祈祷連歌 ― ソフトウェア祈祷師の寝言
Date: 2004.05.06
「エントリー書き込みでWikiやはてなダイアリーのような書式で書けるようにする。」MT導入と改造

引用や箇条書を簡単に書けるようにしたい。 とりあえずは引用からやってみた。 行頭に「>>」があると、次ぎに行頭に「<<」があるまでは引用とした。 MTはリビルドするときにこのブロックを<blockquote class=quote>と</blockquote>で囲む。 データベースにはフォーマット前のデータが格納される。 また、<や>はいちいちエスケープするのがめんどうなので、自動で&amp;lt;と&amp;gt;になるようにした。 この機能はconvert linebreak時のみ有効にすべきなんだろうが、とりあえずは保留。 ただし例外があって、<a>と<img>、<b>、<u>、<i>, <br>はそのまま残すようにした。つまり、これらのタグに関しては普通のHTMLの表示になるということ。

いじったのは、lib\MT\Template\Context.pmで、<$MTEntryBody$>と<$MTEntryMore$>の 展開時にフォーマットが実行される。フォーマット処理の本体は、新たに作った lib\MT\Yun.pmモジュールで、ここにあるformatlikehatena関数が呼ばれると引数の 文字列がフォーマットの対象にになる。処理自体は非常にタコで安直なつくりなので、 いずれは改良されるべきだろう。

本来ならMT::add_text_filtersで実装すべきなのだとは思うが、よくわからなかった。

いずれははてなダイアリーやWikiWikiのようにしたい。Wikiならあるじゃないか、というのは、プログラミングの楽しみがなくなるので不問にする。

追記:

Wikiと連動。Wikiと同じようにキーワードを[ [と] ]で囲むとhttp://www.mediaware.jp/wiki/下の該当するWikiページに行く。 こんな具合い⇒[[MovableType]]

追記その2: YukiWikiのtext_to_htmlを改造してテキストフィルターとして組み込んでみた。 よって上記の追記部分は無効。 改造した新しいフォーマットルールについてはWikiを参照のこと(フォーマットルール)。 上記の[ [ ] ]は[と]で囲んで、wiki:を前につけるように変更。 こんな具合い⇒フォーマッティングルール。 ただしこれには注意が必要で、囲んだフレーズがWikiNameだと、ハイパーリンクへの展開が二重に行われてしまうというバグがあってヘンな表示になってしまう。当面は日本語のみの対応ということになる。

この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/4
「エントリー書き込みでWikiやはてなダイアリーのような書式で書けるようにする。」へのコメント  コメントを書く
「エントリー書き込みでWikiやはてなダイアリーのような書式で書けるようにする。」へのトラックバック

2004年05月07日

「MTで任意のファイル名を生成する」MT導入と改造

MovableTypeのファイル名は基本的には番号でふってあるので、あまり分かり良いとは言えない。そこでエントリーとカテゴリーにURN(リソース名)という項目を追加して、リソース名があるときには、ファイル名を番号ではなくそのリソース名で作成するようにした。

内容としては大したことはしていない。変更も非常にすくなくてすんだ。まず、エントリーオブジェクトとカテゴリーオブジェクトにurnプロパティを追加した。これにより各オブジェクトは従来のidプロパティと並行してurnプロパティも持つようになる。違うのは、idプロパティがシステムに自動的に振られる番号であるのに対して、urnプロパティはユーザーによるオブジェクトの編集時に任意の文字列が保持されるところにある。従来のシステムと互換性を保つため、urnプロパティは空の状態が許されている。

次に、ファイル名の生成時には、もしurnプロパティに値が入っていたらそれを使ってファイル名を作り、そうでなければ従来の方法でファイル名を作るようにした。 もしユーザーがurnを指定している場合にはファイル名の生成にそれが使われ、そうでない場合には6桁の数値で表されるidプロパティの内容が使われる。

最後に、エントリーとカテゴリーの編集画面でurnプロパティが入力できるようにテンプレートにインプットフィールドが追加されている。ユーザーがurnフィールドに文字を入れておけばそれがファイル名になり、空のままにしておけば6桁の数値からなるファイル名になる。

ちなみに、このエントリーのurnはMTIS_URNAddedToMTに、カテゴリーのはMTIntroShakeupにしている。そのため、従来の無味乾草な数値だけのURLではなく、もうちょっと意味のある文字列による表現が可能になる。ただ、意味のあるといっても、URLに許された文字だけを使うことができるだけなので、全くの自由になるということにはならない。

以下、変更点をまとめた。

追記:

1.lib\MT\Entry.pm冒頭のパッケージにプロパティを設定しているところに次の赤字の行を追加する。

  17  PACKAGE->install_properties({ 
  18      columns => [ 
  19          'id', 'blog_id', 'status', 'author_id', 'allow_comments',
  20          'title', 'excerpt', 'text', 'text_more', 'convert_breaks',
  21          'to_ping_urls', 'pinged_urls', 'allow_pings', 'keywords',
  22          'tangent_cache',
  23  ## Have to keep this around for use in mt-upgrade.cgi.
  24          'category_id',
#red#  25          'urn',   Yun 20040508: support of urn
  26      ],

2.lib\MT\Category.pmについても同様に次の赤字の行を追加する。

  11  PACKAGE->install_properties({ 
  12      columns => [ 
  13          'id', 'blog_id', 'label', 'author_id', 'ping_urls', 'description', 
  14          'allow_pings',  
  15          'urn',  ## Yun 20040508: support of urn
  16      ], 

3.lib\MT\Util.pmのarchive_file_for関数中、次の棒線で消してある行を赤字の行に変更する。

 452      if ($at eq 'Individual') {
 453          if ($file_tmpl) {
 454              $ctx->stash('entry', $entry);
 455              $ctx->{current_timestamp} = $entry->created_on;
 456          } else {
 457               $file = sprintf("%06d", $entry‐>id); 
 457              ## Yun 20040508: support of urn for individual archive
 458              $file = defined $entry->urn 
                                  ? sprintf("%s", $entry->urn) 
                                  : sprintf("%06d", $entry->id);
 459          }

 487      } elsif ($at eq 'Category') { 
 488          my $this_cat = $cat ? $cat : $entry->category; 
 489          if ($file_tmpl) {
 490              $ctx->stash('archive_category', $this_cat);
 491              $ctx->{__stash}{category} = $this_cat; 
 492          } else { 
 493              my $label = ''; 
 494              if ($this_cat) { 
 495                  $label = dirify($this_cat->label); 
 496              } 
 497              $file = sprintf("cat_%s", $label); 
 497              ## Yun 20040508: support of urn for category archive
 498              $file = defined $this_cat->urn ? sprintf("%s", $this_cat->urn) : sprintf("cat_%s", $label);

4.tmpl\cms\edit_entry.tmplに次の赤字の部分を追加する。

 363                  <option value=""><MT_TRANS phrase="Add new category...">>/option> 
 364                  </TMPL_IF> 
 365                  </select></td> 
 366                  <td valign="middle" width="151">>TMPL_UNLESS NAME=NEW_OBJECT>>a href="javascript:editPlacements( 
 367                  </TMPL_IF> 
 368                  </TMPL_IF> 
 369                  </tr> 
 370 
 371                  <-- yun: added for urn - -> 
 372                  <tr> 
 373                  <td valign="top" width="191"><font class="pagetitle"><MT_TRANS phrase="URN"></font><br/>
 374                  <input class="text-short" name="urn" value="<TMPL_VAR NAME=URN>"></td> 
 375                  </tr>

5.tmpl\cms\edit_category.tmplに次の赤字の部分を追加する。

 110          <tr> 
 111          <td>&lt;font class="pagetitle">&lt;MT_TRANS phrase="Category Name:"> <TMPL_VAR NAME=LABEL></font></td> 
 112          </tr>
 113 
 114          <!-- yun: added for urn - -> 
 115          <tr> 
 116          <td valign="top" width="191"><font class="pagetitle"><MT_TRANS phrase="URN"></font><br/>  
 117          <input class="text-short" name="urn" value="<TMPL_VAR NAME=URN>"></td>  
 118          </tr>  

以上の追加変更で、エントリー編集ページとカテゴリー編集ページのタイトルのしたに「URN」という項目が追加され、そこにURLに許された文字(基本的にアルファベットと英数)でリソース名を入れておくと、それ以後にリビルドされた分からはページのURLが番号ではなくURNで指定された文字列に".html"が追加されたものになる。空欄にしておくと従来通りの名前付けになる。

また、次の6番の変更を施すと、<$MTEntryURN$>と<$MTCategoryURN$>がテンプレート中に使えるようになる。

6.lib\MT\template\context.pmに次の赤字の部分を追加する。

 110          $ctx->register_handler(EntryID => \&_hdlr_entry_id); 
 111          $ctx->register_handler(EntryURN => \&_hdlr_entry_urn); ## Yun 20040508: support of urn 

 205          $ctx->register_handler(CategoryID => \&_hdlr_category_id);
 206          $ctx->register_handler(CategoryURN => \&_hdlr_category_urn); ## Yun 20040508: support of urn 

 883      sub _hdlr_entry_id { 
 884          my $args = $_[1]; 
 885          my $e = $_[0]->stash('entry') 
 886              or return $_[0]->_no_entry_error('MTEntryID'); 
 887          $args && $args->{pad} ? (sprintf "%06d", $e->id) : $e->id; 
 888      } 
 889      sub _hdlr_entry_urn {
 890          my $args = $_[1]; 
 891          my $e = $_[0]->stash('entry') 
 892              or return $_[0]->_no_entry_error('MTEntryURN'); 
 893          $e->urn ? e->urn : ($args && $args->{pad} ? (sprintf "%06d", $e->id) : $e->id); 
 894      } </font>

 1706      sub _hdlr_category_id { 
 1707          my $cat = $_[0]->stash('category') 
 1708              or return $_[0]->error(MT->translate( 
 1709                  "You used an [_1] tag outside of the proper context.", 
 1710                  '&lt;$MTCategoryID$>' )); 
 1711          $cat->id; 
 1712      } 
 1713 
 1714      sub _hdlr_category_urn { 
 1715          my $cat = $_[0]->stash('category') 
 1716              or return $_[0]->error(MT->translate( 
 1717                  "You used an [_1] tag outside of the proper context.", 
 1718                  '<$MTCategoryURN$>' )); 
 1719          defined $cat->urn ? $cat->urn : $cat->id;
 1720      } 

 この「祈祷連歌」のブロブでは、カテゴリーアーカイブに、自分の書き込みだけのものと、コメントを展開したものの2種類のアーカイブを作成するようにしている。これはブロブの設定のカテゴリーアーカイブの設定でひとつのカテゴリーごとに2種類のファイルを作るようにしているからなのだが、ここでファイル名の設定に<$MTCategoryURN$>が使われている。アーカイブのファイル名は、urnそのままだとコメント表示なしで、urnの文字列の最後にLを付けたものはコメント展開版となっている。また、index.htmlも同様で、コメント展開版はindexlong.htmlとなっている。

最後に、次のようにextlib\MT\L10N\ja.pmにURNを「リソース名」などとしておくと良いかもしれない。

 140      ## Global: Entry fields 
 141      'Title' => 'タイトル', 
 142      'Post Status' => 'Post Status', 
 143      'Primary Category' => 'Primary Category', 
 144      'URN' => 'リソース名', 

とりあえず、これで使ってみているが、今のところ深刻な問題はでていない。しかし、MTは設定のバリエーションが多いので、設定によっては問題がでてくる可能性は十分にある。

この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/5
「MTで任意のファイル名を生成する」へのコメント  コメントを書く
「MTで任意のファイル名を生成する」へのトラックバック

2004年05月08日

「Wikiとの緩やかな連携」MT導入と改造

YukiWikiをベースに、フォーマットルールに若干の拡張を 施したWikiの テキストフィルターのMovableTypeプラグインを 作った。

フォーマットルールの拡張

新しいフォーマットルールでは、YukiWikiオリジナルのフォーマットルールに加えて次の要素が加わった。

拡張内容

  • アンダーライン
  • 打ち消し線
  • 拡張埋め込みタグ
    • WikiやBlogへの手軽なハイパーリンク指定
    • mimeTeXを利用した数式の埋め込みGIFイメージ
  • はてなダイアリーのような>>と<<による引用
  • 数字付きの箇条書き
  • JapaneseWikiName。全角の山カッコで囲まれたスペースと英数をふくまない単語は日本語ウィキ名テストこんなふうに日本語WikiName混在したらだめ。

プラグイン

先日の000010では、プラグインはよく分からんと書いたが、 結局ちゃんと調べてテキストフィルターのプラグインにした。

プラグインの作成

プラグインはYun.pmというモジュールをつくり、 そこにこのサイトのYukiWikiの拡張したtext_to_html関数とそれに必要な関数を抜き出した。 関数名はtext_to_htmlから若干変えてformat_text_to_htmlとした。 このモジュールをextlib\MTフォルダに置く。

プラグイン初期化ファイルの作成

次にMTにプラグインを認識させるため、初期化ファイルを作成しなければならない。 テキストフィルターの初期化ファイル自体は実はそんなに難しくなく、 pluginsフォルダーに初期化ファイルを置いておくだけで良い。 内容はこんな感じのYunWiki.plというプラグイン初期化ファイルを作った。
require MT;

MT->add_text_filter(
    wiki => {
        label => 'YunWiki',
        on_format => sub {
            use MT::Yun qw( format_text_to_html );
            &MT::Yun::format_text_to_html($_[0], toc=>0);
        },
        docs => '',
    }
);

1;

これだけで、エントリーの編集画面のテキストフォーマットの項目でYunWikiというテキストフィルターが使えるようになる。 カテゴリーの設定でこれをデフォルトにしたら、後はYunWikiでテキストを入力するだけ。

簡単。

この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/6
「Wikiとの緩やかな連携」へのコメント  コメントを書く

自己レスのテストを兼ねて自分の記事にコメントしてみる。

最初に山カッコがあったらそのキーワードを覚えておいて、それ以後のテキストに出現するキーワードは自動的にハイパーリンク化というのはどうだろうか?

Posted by yuntanach at 2004年05月10日 11:25
「Wikiとの緩やかな連携」へのトラックバック

2004年05月09日

「トラックバック着信で自動リビルド」MT導入と改造

いろいろ見て回っているうちに、便利な記事を見つけた。 早速変更を加えてみた。オオカワ氏に感謝。

トラックバック着信で自動リビルド

どうせならトラックバック受けたら自動で個別アーカイブの更新までしてくれれば、
個別アーカイブからわざわざCGI出力表示(mt-tb.cgi)で受けたトラックバック内容の確認とかしなくていいし、
個別アーカイブを見るだけでそのエントリーに投稿された
コメント、トラックバックをまとめて閲覧できて、お便利!
ってことで、トラックバック着弾モジュールを改造してみました。
この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/15
「トラックバック着信で自動リビルド」へのコメント  コメントを書く

Salut

Posted by ming ho lee at 2004年12月19日 09:08

test

Posted by test at 2004年12月19日 09:32
「トラックバック着信で自動リビルド」へのトラックバック
「文字化け対策」MT導入と改造

エントリーの編集画面でエントリーのリストのタイトルが文字化けしてしまう。 このバグを修正した。

このバグはtitle_short作成時にUTF8の文字列を文字境界を無視して切ってしまうところに原因がある。 問題の箇所はlib\MT\App\Cms.pmのlist_entries関数の次のtitle_shortを作成している部分である。

 1564          unless ($row->{title_short}) {
 1565              my $title = remove_html($obj->text);
 1566              $row->{title_short} = substr(($title, 0, 22) . '...';
 1567          }
 1568          $row->{title_short} = substr(($row->{title_short}, 0, 22) . '...'
 1569              if length($row->{title_short}) > 25;
 1570          $row->{title_short} = encode_html($row->{title_short}, 1);

このsubstr関数が悪者。

これを解決するのはそんなに難しくなく、utf8を理解するsubstr関数を用意すればいい。 ちょっと引用が長いが次のような関数を用意した。

 1432  my $utf8charpatternx = q {
 1433      [\x00-\x7F]                            # UCS-2 U+0000..U+007F
 1434      |[\xC2-\xDF][\x80-\xBF]                # UCS-2 U+0080..U+07FF
 1435      |\xE0[\xA0-\xBF][\x80-\xBF]            # UCS-2 U+0800..U+7FFF
 1436      |[\xE1-\xEF][\x80-\xBF][\x80-\xBF]     # UCS-2 U+1000..U+D7FF, U+E000..U+FFFF
 1437  #    |\xF0[\x90-\xBF][\x80-\xBF][\x80-\xBF]
 1438  #    |[\xF1-\xF3][\x80-\xBF][\x80-\xBF][\x80-\xBF]
 1439  #    |\xF4[\x80-\x8F][\x80-\xBF][\x80-\xBF]
 1440  #    |[\xF5-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF][\x80-\xBF]
 1441  #    |[\xF8-\xFD][\x80-\xBF][\x80-\xBF][\x80-\xBF][\x80-\xBF][\x80-\xBF]
 1442  };
 1443  sub substrutf8 {
 1444      my ($str, $pos, $len) = @_;
 1445      my @chars = $str =~ /$utf8charpatternx/gox;
 1446      return "" if $#chars < $pos;
 1447      my $endpos = $pos + $len - 1;
 1448      $endpos = $#chars if $endpos > $#chars;
 1449      join "", @chars[$pos .. $endpos];
 1450  }
 1451  sub lengthutf8 {
 1452      my ($str) = @_;
 1453      my @chars = $str =~ /$utf8charpatternx/gox;
 1454      return $#chars + 1;
 1455  }
 1456  sub charwidthutf8 {
 1457      my ($str) = @_;
 1458      my @chars = $str =~ /$utf8charpatternx/gox;
 1459      my $w = 0;
 1460      foreach my $ch (@chars) {
 1461          $w += (length($ch) < 2 ? 1 : 2); # assume U+0800..U+FFFF as wide!!!
 1462      }
 1463      return $w;
 1464  }

substrutf8関数は、まず、与えられた文字列を$utf8charpatternx正規表現で分解する。 その後に必要な範囲の配列を要素を一つの文字列につなげて返す。

lengthutf8は同様のことをしてその配列の長さを返す。

charwidthutf8はlengthutf8と似ているが全角半角をおおざっぱに見分けて文字列の幅を返す。 UnicodeのU+0800以降は全角であると強引に決めうちしてしまっている。 ただし、UTF-8では原理的に全角半角を単純なレンジで判断できないので、 この方法はあまり良い方法とはいえないだろうが、とりあえず簡単に実装してしまった。

上記のバグの該当箇所のsubstrとlengthをそれぞれsubstrutf8とcharwidthutf8で置き換えた。

 1564          my $collimit = 15;
 1565          unless ($row->{title_short}) {
 1566              my $title = remove_html($obj->text);
 1567              $row->{title_short} = substrutf8($title, 0, $collimit - 3) . '...';
 1568          }
 1569          $row->{title_short} = substrutf8($row->{title_short}, 0, $collimit - 3) . '...'
 1570              if charwidthutf8($row->{title_short}) > $collimit;
 1571          $row->{title_short} = encode_html($row->{title_short}, 1);

それでもまだ25文字で区切っている部分で、タイトルを省略しても表示が折り返してしまう。 25の半分である12~13とlengthutf8を比較するようにしても良かったのだが、 実際には試行錯誤の末にcharwidthutf8と15を比較するようにした。

とりあえずこれで文字化けはなくなった。

この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/16
「文字化け対策」へのコメント  コメントを書く
「文字化け対策」へのトラックバック

2004年05月12日

「メール通知のテスト」MT導入と改造

MovableTypeのメール通知機能を有効にしてみた。

機能を有効にするには、mt.cfgでMailTransferを設定する。 sendmailは持っていないので、smtpにした。 そのために、perlのMail::Sendmailライブラリーをインストールする必要がでた。 あとはSMTPServerをセットしておしまい。

例にコメントをつけてみると、文字化けする。ウェブで調べてJcode.pmを使ってみたが何故かエラーになる。そこで通知メールはISO-2022-JPではなく、てっとり早くUTF-8でおくることにする。そのために、いろいろと紆余曲折の末に、lib\MT\Mail.pmのsend関数の最初に次のような追加をした。

    require MIME::Base64;
    $hdrs->{'Content-Type'} = qq(text/plain; charset="utf-8");
    $hdrs->{'Content-Transfer-Encoding'} = "base64";
    my $tmpsubject = MIME::Base64::encode($hdrs->{Subject}, "");
    $hdrs->{Subject} = "=?utf-8?B?$tmpsubject?=";
    $body = MIME::Base64::encode($body);
    use Config;
    use Mail::Sendmail;
    use MT;
    $hdrs->{'X-Mailer'} = "Mail-Sendmail $Mail::Sendmail::VERSION / Perl $Config{version} / MovableType $MT::VERSION";
最後の4行は、エンコードのためではなく、ヘッダーにX-Mailerをつけるためのものである。

これでふつうのメーラーにはちゃんと日本語の通知が来るようになった。ただし、ニフティのウェブメールではUTF-8が解釈されないために、件名がクォートされたままだし、本文は添付ファイル扱いになってしまう。これはしょうがないか。

この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/18
「メール通知のテスト」へのコメント  コメントを書く

テスト

Posted by yuntanach at 2004年05月12日 23:39

メールが文字化けしたので、コードを修正して、 もう一回テスト。

テスト
  • テスト
  • テスト
  • Posted by yuntanach at 2004年05月12日 23:47

    メールが文字化けしたので、コードを修正して、 もう一回テスト。

    テスト
  • テスト
  • テスト
  • Posted by yuntanach at 2004年05月12日 23:52

    もう一度テスト。 Jcode.pmが入っていなかった。 XSモジュール版を入れてみた。

    Posted by yuntanach at 2004年05月13日 01:01

    もう一度テスト。 Jcode.pmが入っていなかった。 XSモジュール版を入れてみた。

    Posted by yuntanach at 2004年05月13日 01:04

    もう一度テスト。 Jcode.pmが入っていなかった。 XSモジュール版は駄目みたい。 普通のやつを入れてみた。

    Posted by yuntanach at 2004年05月13日 01:07

    もういっちょテスト。 JCode.pmは諦め。 utf-8でMIME::QuotedPrintにしてみる。

    Posted by yuntanach at 2004年05月13日 01:21

    今日最後のテスト。 @niftyでは、ウェブからメールを見る限りは UTF-8はどっちにしろ化けるのか。

    Posted by yuntanach at 2004年05月13日 01:33

    もういっちょテスト。

    Posted by yuntanach at 2004年05月13日 01:53

    もういっちょテスト。

    Posted by yuntanach at 2004年05月13日 01:54

    OK!! ニフティのウェブメールでみると、 SJISの画面に強引にUTF-8の本文があるのでバケて しまうが、普通のメーラーで見る限りでは大丈夫。

    Posted by yuntanach at 2004年05月13日 01:58

    utf-8/8bitでなく、utf-8/base64でやってみる。

    Posted by yuntanach at 2004年05月13日 02:45

    utf-8/base64でOK。 utf-8/8bitよりは、8bitが通らない分だけこっちのほうが良いのかな? ニフティでも添付ファイル扱いになるので、本文がその場 で読めないけど、化けるよりはましか。 タイトルは相変わらずbase64がそのまま表示される。 utf-8に限らずiso-2022-jp以外で日本語用でないやつは 軒並みだめなんだろうな。たまにそういうのがくる。 メーラーでは件名本文両方ともOK。 当分はこれでやってみよう。

    Posted by yuntanach at 2004年05月13日 02:51

    テスト。 もう寝る。

    Posted by yuntanach at 2004年05月13日 03:27

    ほんとのラスト。 X-Mailerをつけた。

    Posted by yuntanach at 2004年05月13日 03:32

    もういっちょ。

    Posted by yuntanach at 2004年05月13日 03:36

    Wikiで書けるかどうかのテスト。

    2段落目。

    色付き

    Posted by yuntanach at 2004年08月04日 17:02

    Wikiで書けるかどうかのテスト。

    2段落目。

    色付き

    Posted by yuntanach at 2004年08月04日 17:03
    「メール通知のテスト」へのトラックバック

    2004年06月01日

    「MT3.0リリース対応」MT導入と改造

    MT3.0がリリースされた。MT3.0で強化されたのは次の通りだそうだ( Movable Type 日本語版サイト)。

    1. コメント管理機能の強化
    2. プラグインの機能拡張
    3. 国際化

    とりあえず開発者評価用アップグレード版をダウンロードした。 現行のMT2.6をコピーした上に上書きし、 perlのパスなどを設定して、アップグレード用のスクリプトを実行してみた。 スクリプトの実行結果の表示からすると、一見して良好のようだ。

    しかし問題点がいくつか。 まず、ログインができない。パスワードがはねられてしまう。 いちおうパスワード再発行の仕組みがあるようで、この問題はとりあえずはクリア。

    次に、念のために全体を再ビルドしてみると…、こりゃダメだエントリーのボディがすべてなくなってしまう。自宅サーバーのMT2.6はスクリプト部分にしろ、テンプレートの部分にしろちょこちょこといじっているからなぁ。この段階でつまづいているようだと、なかなかつらいものがあるかも。

    MT3.0自体がまだ正式リリースではないようだし、当面は様子見か。

    この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/10
    「MT3.0リリース対応」へのコメント  コメントを書く
    「MT3.0リリース対応」へのトラックバック

    2004年07月02日

    「アクセスログ改良」MT導入と改造

    外部には公開してない(つもりだ)し、robots.txtも設定している(つもりな)のだが、 最近よく検索エンジン経由でwikiやblogにアクセスがある。

    Apacheのログだとうじゃらうじゃらとなんだかいろいろ出力されていて解析するのがたいへんだから、「どこから飛んできたのかなるべくすぐわかる」ことに特化したApacheのext_filterを作ってみた。

    といってもperlで日時やrefererとか最小限の情報を出力するフィルターで画像とかのアクセスを無視するやつを/wiki/などにつけただけなんだけども。 標準のカスタムログでもできるんだろうが、ちょっと遊んでみたり。

    この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/17
    「アクセスログ改良」へのコメント  コメントを書く
    「アクセスログ改良」へのトラックバック

    2004年07月03日

    「二律背反:ドラフト状態でパブリッシュしたい」MT導入と改造

    ドラフト状態のエントリーだけをまとめて書き出す方法はないものなのだろうか。

    まだ書きかけのエントリーで、日記的でないものはドラフトにしているのだが、 そういうエントリーはリビルドで表に出てこない。 そして、ドラフト状態のエントリーがけっこうたまってきてしまっている。

    そういうものはプレビューで見るしかないのだが、半完成品の段階で、ちゃんとしたページとしてみてみたい。

    ドラフト状態のエントリーをまとめて一つのカテゴリーアーカイブのようにできるといいのだが。 MTのソースをざっとみた感じだとちょっとよくわからん。

    この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/29
    「二律背反:ドラフト状態でパブリッシュしたい」へのコメント  コメントを書く
    「二律背反:ドラフト状態でパブリッシュしたい」へのトラックバック

    2004年07月13日

    「アクセスログとSSI」MT導入と改造

    せっかくアクセスログをとるようにしたわけなので、それを解析してみた。 すると、けっこう思わぬところで参照されているのが分かって面白かった。

    アクセスがあるのはもっぱら検索エンジンからで、内容はUTF8やメールのエンコーディングがらみ。 みんなここで一度はつまづくということなんだろう。 自分だけじゃないことが分かってちょっと安心。

    で、ページにSSIでCGIスクリプトをバーチャルインクルードしておくと、そのページの アクセスログをリストアップするようなものを作ってみた。

    ところが、どうもうまくうごかない。 スクリプトの単体テストではうまくいくのだが、実際のページに埋め込んでみると ページが表示されなくなる。どうやらSSIのところで反応がなくなっているらしい。

    だが、アクセスログをとっていないフォルダーからだとちゃんと表示される。 とはいっても、アクセスログをとっていないページなんだから、当然リストアップされる内容は空である。

    どうやら、SSIとアクセスログのOutputFilterが、同時に働くと途中でとまってしまうらしい。 何故かはわからない。どうしてなんだろうか。 まったく根拠のない想像だが、SSIも出力フィルターも両方ともおそらく それぞれがフィルターとして前段階のものからの出力を待っているわけで、 順番に待つなら問題ないのだが、どういうわけか互いに待ちあうような デッドロックに陥っているのではないだろうか。標準入出力をフラッシュ してあげればいいのだろうか。

    これじゃあ役にたたないのでアクセスログのフィルターのスクリプトにアクセスリストの表示もやらせてみることにする。アクセスログのフィルターでSSIに似たことをして、ある種の文字列があった場合にはそこをアクセスログのリストに書き換えるようなものを作ってみた。ついでに、サイト内アクセスランキングも。

    ちょっと表示が汚い感じがするが、とりあえずはこれでしばらく様子を見てみよう。

    この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/30
    「アクセスログとSSI」へのコメント  コメントを書く
    「アクセスログとSSI」へのトラックバック
    Title: weight loss
    Excerpt: fad diets fad diets herbal life weight loss product herbal life weight loss produc...
    From: weight loss
    Date: 2006.04.08
    Title: weight loss
    Excerpt: herbalife weight loss herbalife weight loss zone diet zone diet
    From: weight loss
    Date: 2006.04.08
    Title: free credit report
    Excerpt: free credit report free credit report free credit reports free credit reports
    From: free credit report
    Date: 2006.04.22
    Title: printer ink
    Excerpt: printer ink printer ink ink cartridges ink cartridges
    From: printer ink
    Date: 2006.04.22
    Title: printer ink
    Excerpt: printer ink inkjet cartridges inkjet cartridges inkjet inkjet
    From: printer ink
    Date: 2006.04.22
    Title: printer ink
    Excerpt: canon ink cartridge canon ink cartridge printer ink cartridges printer ink cartridges
    From: printer ink
    Date: 2006.04.22
    Title: printer ink
    Excerpt: printer ink inkjet cartridge inkjet cartridge discount ink cartridges discount ink cartridges
    From: printer ink
    Date: 2006.04.22
    Title: printer ink
    Excerpt: printer ink inkjet printer cartridges inkjet printer cartridges fax machines fax machines
    From: printer ink
    Date: 2006.04.22
    Title: printer ink
    Excerpt: printer ink epson ink cartridges epson ink cartridges printer cartridges printer cartridges
    From: printer ink
    Date: 2006.04.22
    Title: printer ink
    Excerpt: printer ink inkjet cartridge inkjet cartridge discount ink cartridges discount ink cartridges
    From: printer ink
    Date: 2006.04.22
    Title: printer ink
    Excerpt: inkjet printer cartridge inkjet printer cartridge lexmark printer ink lexmark printer ink
    From: printer ink
    Date: 2006.04.22
    Title: printer ink
    Excerpt: printer ink epson inkjet cartridge epson inkjet cartridge epson ink cartridge epson ink cartridge
    From: printer ink
    Date: 2006.04.22
    Title: printer ink
    Excerpt: printer ink hp ink cartridges hp ink cartridges toner cartridges toner cartridges
    From: printer ink
    Date: 2006.04.22
    Title: printer ink
    Excerpt: printer ink hp inkjet cartridge hp inkjet cartridge hp inkjet cartridges hp inkjet cartridges
    From: printer ink
    Date: 2006.04.22
    Title: printer ink
    Excerpt: inkjet printer cartridge inkjet printer cartridge lexmark printer ink lexmark printer ink
    From: printer ink
    Date: 2006.04.22
    Title: inkjet cartridge
    Excerpt: inkjet cartridge printer ink printer ink ink cartridges ink cartridges
    From: inkjet cartridge
    Date: 2006.04.22
    Title: inkjet cartridge
    Excerpt: inkjet cartridge printer ink cartridge printer ink cartridge toner cartridge toner cartridge
    From: inkjet cartridge
    Date: 2006.04.22
    Title: inkjet cartridge
    Excerpt: inkjet cartridge hp ink cartridges hp ink cartridges toner cartridges toner cartridges
    From: inkjet cartridge
    Date: 2006.04.22

    2004年07月15日

    「アクセスログ改良その後」MT導入と改造

    アクセスログフィルターを改造していくうちに、 「SSI風ページビューログ表示&アクセスランキング表示割り込ませ機能付きアクセスログフィルター」になってきてしまっている。ちょっと詰め込みすぎかな?

    あるとき表示がハングってしまいperl.exeがデッドロック状態でプロセスリストを食いつぶしてしまうようになってしまった。 ページを開くと応答がなくなってしまい、ホストマシンではプロセスに休止中のperlがたまっていくという状況だ。 これはSSIとext_filterを同時使用したときのトラブルに非常によく似ている。 ただし、小さなファイルでは問題なく、大きなHTMLファイルだとそうなるようだ。

    で、いろいろとやってみたところ、どうやら原因が分かった。 入出ストリーム間のデッドロックが原因のようだ。 スクリプト自体はperlで書いたのだが、フィルターとして機能している部分の核心は、次のようなコードになっていた。

    binmode(STDIN);
    binmode(STDOUT);
    while (<STDIN>) {
        # $_ を加工
        print $_;
    }
    
    binmode()を呼んでいるのは、画像などのバイナリーデータもこの処理を通過するからである。

    いろいろと試行錯誤して、 ハングする箇所はSTDINを読み込んでいるところであることが分かった。 入力が止まっているので、出力も止まる。 なぜそこで入力が止まるのかは分からないが、とにかく入力ストリームを読み込んでいる 途中で止まっており、その結果出力も止まってしまっている。

    これに対処するため、あまり好みではないが、最初にいっぺんにすべての入力 ストリームを読みだし、それから加工して出力するようにした。

    my @lines = <STDIN>;
    for my $l (@lines) {
        # $l を加工
        print $l;
    }
    

    他にも、gifやjpegなどバイナリーデータの場合と、htmlなどテキストの場合とで 処理を分けるようにもした。

    これで今のところは応答がなくなってしまうトラブルはでなくなった。

    perlやapacheを最新のものにアップデートするなど、いろいろとやってみたのだが、結局はプログラム上の問題であったようだ。だが、なぜフィルターに入力するデータがもうなくなっているはずなのに、入力がストップするのかは依然として謎だ。

    この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/35
    「アクセスログ改良その後」へのコメント  コメントを書く
    「アクセスログ改良その後」へのトラックバック

    2004年07月29日

    「Wiki改良」MT導入と改造

    前々から考えていただけで手をつけていなかったWikiの改良をした。 改良したのは、日本語ウィキ名、見出しのName属性、中心揃えブロックの三つ。

    日本語ウィキ名

    でアルファベット英数以外の日本語の 文字列を囲む日本語ウィキ名になる拡張はすでに施していたが、 今回それに加えてこの書式で日本語ウィキ名を指定する、以後のテキスト中で 出現する文字列を で囲まなくても日本語ウィキ名して扱うようにした。 このエントリー中最初に出現する日本語ウィキ名のみが で囲まれているが、 2回目以降は特に指定せずもリンクが設定されている。

    初回の日本語ウィキ名の指定だけ が残ってしまっている。 プレビューだちゃん出るのに、なぜだろう?

    思ってよく実行時ログダンプを見直してみたら、format_text_to_htmlが リビルド時には一つのエントリーに対して何回も呼ばれてるじゃないか。 2回目の実行時には前回の登録が生きていてそれで が2回目以降の 分して残ってしまっていたわけだ。

    見出しにName属性を指定できる

    行頭が*で始まる見出しになるが、見出し中に#があるそれ以降は<A>タグの NAME属性になる。これにより文書中の任意の見出しのころへ外部からリンクが設定 出来るようになる。

    中心揃えブロック

    引用同じような指定のしかたで、><や>><<の行で始まり、<>や<<>>の行で終わる 部分は中心揃えのブロックになる。><<>の組み合わせでソフトブロックになり ブロック中ではインライン要素による書式指定が有効になる。>><<<<>>の組み合わせは ハードブロックになり、ブロック中では書式指定は効かなくなる。
    こんな感じ
    この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/43
    「Wiki改良」へのコメント  コメントを書く
    「Wiki改良」へのトラックバック

    2004年08月01日

    「アップデート順のリスト」MT導入と改造

    サイドバーにアップデート順のリストを作ってみた。

    しかし、<$MTEntryModifiedDate$>がエントリーを最後にアップデートした日付になる ことを期待していたのに、最初に書き込んだ日付になってしまっている。 ソースをざっとみてみた限りではちゃんとmodification_timestampから引っ張ってくる ようになっているし、modification_timestampは保存時のmodified_onからくるように なっている。そして、modified_onはperlのtime関数が元になっているので現在時間に なっているはずだ。

    なぜ、ちゃんと動かないのだろうか。

    ちょっと次のような原因を考えてみた。

    • MTのデータベースに独自拡張で追加のカラムをつけてしまっているのでなにかがずれた
    • time関数がちゃんと働いていない
    • modified_onにちゃんとデータが保存されていない
    • modified_onからデータちゃんと引き出されていない

    …わからん。

    追記:

    いろいろと試行錯誤しているうちに、どうやら問題はlib\MT\Template\Context.pmの_hdr_dateにあるようだということが分かった。

    この関数では、

        my $ts = $args->{ts} || $_[0]->{current_timestamp};
    
    という処理があり、この$tsが最終的に表示される日付になるが、 日付に関連したマクロはみなここに行き着く。 問題の<$MTEntryModificatiedDate$>は、
        $args->{ts} = $args->{modification_timestamp};
    
    としてから、_hdlr_dateを呼び出している。

    ところが、_hdlr_date中では$args->{ts}がセットされていない として判断されcurrent_timestamp、つまり作成日付が使われてしまっている。

    _hdlr_dateと同じで、current_timestampではなくmodification_timestampを デフォルト値に使う_hdlr_mod_dateという_hdlr_entry_mod_date専用の 関数をつくってみたところうまく動作するようになった。

    この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/44
    「アップデート順のリスト」へのコメント  コメントを書く
    「アップデート順のリスト」へのトラックバック

    2004年08月03日

    「アクセス数激増」MT導入と改造

    今日の正午過ぎから15時ぐらいまでに、このブログサイトの全ページの内容を 総ナメするようなアクセスがあった。 おかげで、昨日の夕方ぐらいでは100まで行っていなかったアクセス数が 一挙に170までにいってしまった。

    アクセスログをみてみたら、アクセスはアメリカのワシントン州レッドモンドの マイクロソフト社からだ。 下のグラフをみると最後に突出しているのはここが原因。 なんか「悪の総本山」というキーワードがふつふつと浮かんでくる。

    そういえば最近ニュースでマイクロソフトが新型のサーチエンジンを 開発したとかどうとかいう話があったような気がする。 これがその新型か…。 グーグルのクローラーやどこかの大学のブログボットなども ときおりきているようだが、こうまで一挙にきたのは Apacheを立ち上げて3年たつが始めてのことだ。

    /yuntanach/blog/000044.gif

    このブログサイトを5月に開設して3ヶ月たつが、思っていたよりも早いペースでアクセス数が増えていってしまっている。なんかコンスタントにチェックしてくれているところもあるようだが、人に知られるのはもっと日記書きに慣れてからのが良いなぁ。あまり人が来ませんように…。

    この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/47
    「アクセス数激増」へのコメント  コメントを書く

    こんにちは. こんなところに日記を書いておられたのですね.気づきませんでした. 慣れてから人に知られるのも,人に知られてから慣れるのも大して変わりませんよ,きっと.(^^; とりあえずアンテナに追加したのでちょくちょく見に来ま~す.

    Posted by koichik at 2004年08月04日 00:35

    小林さんのが、このブログにおける記念すべき第一号コメントです。

    Posted by yuntanach at 2004年08月04日 01:22
    「アクセス数激増」へのトラックバック

    2004年09月24日

    「ブログ上のスパム」MT導入と改造

    こんなの、自分のとこじゃなくても始めてみました。即消しです。次にまたきたら禁止IPリストに登録の予定。

    で、MovableTypeの禁止IPって、単品登録なんですね。 もうちょっと細かな設定ができるようになってないと、 たくさんのギャラリーがいるブログでは使いづらいだろうな、などと思った。

    この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/61
    「ブログ上のスパム」へのコメント  コメントを書く
    「ブログ上のスパム」へのトラックバック

    2004年09月27日

    「ブログ上のスパムその2」MT導入と改造

    またきた。幸いに同じIPアドレスだったので、あんまりこういうことはしたくはないのだが、MovableTypeの機能の禁止IPリストに登録。

    この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/62
    「ブログ上のスパムその2」へのコメント  コメントを書く
    「ブログ上のスパムその2」へのトラックバック

    2004年09月29日

    「ガーン。バグを入れてしまった。」MT導入と改造

    この1ヶ月全くブログが更新されてなかった。

    知人からのメールで教えてもらうまで気づかなかった。

    原因は、MovableTypeを改造したつもりがエンバグしてしまったから。 以前に改造のカテゴリーのところで、パブリッシュ状態でなくても、ドラフトの状態で サイトにページが載るようにしたいと書いたが、それをさっそくやってみた。 ドラフト状態でも一時的にパブリッシュ状態にして、まったく完パケと同じようにみれるようにし、後にもとに戻すというもの。 当然、ドラフト状態からパブリッシュ状態にしたら、一時的に変更したあとで戻すと いう部分を通らないようにしなければならない。ところがその部分に非常に下らない バグがあり、結局すべてのエントリーがドラフト状態になってしまっていて、 しかも自分では完パケ状のものを見ているから気づかないという非常にしょーもない 状況であったわけだ。

    さっそく戻したのは言うまでもない。

    この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/64
    「ガーン。バグを入れてしまった。」へのコメント  コメントを書く

    がーん,裏では更新しておられたのですね. こっちでも家を空けっぱなしになのかと思ってました.(^^; 頑張って読まねば!!

    Posted by koichik at 2004年09月30日 03:06
    「ガーン。バグを入れてしまった。」へのトラックバック

    2004年10月16日

    「mimeTeX 1.50」MT導入と改造

    mimeTeXの新しいバージョンが出ていた。

    早速インストールしてみる。どうやら以前のバージョンとコンパチでない部分があるようなので、WikiのTeX拡張にも手を加えて以前のバージョンも使えるようにしてみた。

    新しいバージョンでは、\arrayのサポートがかなり豊富になった。 以前のものだと数式が複数行になるとき=をそろえるがめんどうだったりしたが、ずいぶんと楽になった。他に色などもつけられるようになった。

    なによりいいのはキャッシュ機能が追加されたことだ。 もともとウィンドウズのアプリにしては軽く動くものだったが、 無駄が省かれるような気がする分だけ嬉しい。

    ただ、\atopなど一部のコマンドでTeXに準拠していないやつがこんどはTeXに準拠するようになり、結果として一部のコマンドがコンパチでなくなってしまったようだ。

    さっそく試してみよう。

    \begin{pmatrix}  a&b&c \\ d&e&f \\ etc  \end{pmatrix}

    \begin{array}{lcr}  a&b&c \\ d&e&f \\ etc  \end{array}

    \begin{matrix}  a&b&c \\ d&e&f \\ etc  \end{matrix}

    \red\begin{pmatrix}  a&b&c \\ d&e&f \\ etc  \end{pmatrix}

    \blue\begin{bmatrix}  a&b&c \\ d&e&f \\ etc  \end{bmatrix}

    \reverse\opaque\begin{Bmatrix}  a&b&c \\ d&e&f \\ etc  \end{Bmatrix}

    \begin{vmatrix}  a&b&c \\ d&e&f \\ etc  \end{vmatrix}

    \begin{Vmatrix}  a&b&c \\ d&e&f \\ etc  \end{Vmatrix}

    \begin{eqnarray}  a&=&b+1 \\ c+100&=&d \\ etc  \end{eqnarray}

    \begin{align}  a&=b \\ c&=d \\ etc  \end{align}

    \fbox{\begin{gather}  a \\ b \\ etc  \end{gather} }

    \array{lcr$a&b&c\\d&e&f\\etc}

    \begin{array}{c.c|c} a_1&a_2&a_3 \\\hdash b_1&b_2&b_3 \\\hline c_1&c_2&c_3 \end{array}

    コンパチでない部分のテスト。

    \atop{x}{y} 以前の書式のものを新しいmimeTeXで試したもの。予想どおり発狂。

    \atop{x}{y} 以前の書式のものを以前のmimeTeXでだせるようにWikiのTeX拡張に手を加えたもの。大丈夫そう。

    そういえば、UMLの図形が書けるように拡張しようとしていたっけ。 すっかり忘れていた。

    この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/73
    「mimeTeX 1.50」へのコメント  コメントを書く
    「mimeTeX 1.50」へのトラックバック

    2004年11月05日

    「データベースをMySqlに移行」MT導入と改造

    たいして量があるわけではないのに、リビルドがずいぶん遅くなってしまっていた。 全体リビルドをするとなんかのタイムアウトでエラーになるという、 なんだかトホホな状況に陥ってしまっていた。 それに、アクセス記録が予想以上に増加していて、perlだけで統計情報を計算するのには そろそろ限界に来ていたというのもあるので、データベースをBerkeleyDBからDBI::mysqlに 移行することにした。

    MySqlインストール

    インストール自体はWindows Installerで行えることもあり、すんなり終わった。

    しかし、サンプルのperlスクリプトでテストしてみるとconnectができない。

    どうやらパスワードがあるとだめであることがわかったのでパスワードなし。 これはあんまり気持ちがよくないので、なるべくはやく解決する事にして、次へ。

    MTデータベース移行

    使っているMTは2.6なのだが、MT3.0用のmt-db2sql.cgiで簡単にデータベースの引越しができる、はず。 しかし、そうは問屋が卸してくれない。 まずここで使っているMTはデータベースのスキーマに手を加えてあるので、ここを変更して あげないといけない。 みようみまねでスキーマをいじってとりあえずはスキーマの変更は終了。

    しかしmt-db2sql.cgiを動かすと「DBIにconnectなんかないよ」といって怒られてしまう。 これにはかなり手間取ったが、どうやらトップレベルのモジュールで「use DBI;」がないために ライブラリーのスコープがMT内部にあるMT::DBIモジュールと混乱してしまっているようである ことがわかった。よってトップレベルのモジュールには件のuseを入れてやることで解決。

    これがわかるまでにCPANでDBIを何度インストールしなおしたことか…。

    文字セットの怪

    ここのMTはutf8を文字セットに使っているのだが、どうやらこれがデータベースに入る時に 化けてしまう。データベースの設定ではちゃんとutf8にしているのになぜだ?

    MySqlのマニュアルをみてテーブルごとにデフォルト文字セットをutf8にするとか、 カラムごとにやってみるとかいろいろやったが、どうもうまくいかない。

    結局ワークアラウンドとしてMT側のDBIのオブジェクトドライバーのmysqlのやつに、 クラスにドライバーをセットしたときに"SET NAMES 'utf8'"を実行してやることで解決。

    日付の怪

    MT内部では日付はYYYYMMDDHHMMSSのフォーマットになっている。 一方、データベース側ではYYYY-MM-DD HH:MM:SSなので、MT内部のmysqlのオブジェクトドライバーでこの違いを吸収するようにしてある。 しかし、この機構が働いていない。もしかするとトップレベルモジュールで強引にuse DBIを してしまったことが原因なのだろうか…。 いずれにせよ、リビルドができないのは困るので、オブジェクトドライバーの各DBの共通コード側で 「tr/\- ://d」してしまうことにした。 せっかく汎用に作られているのに、ここで使う特定環境下でのmysqlの都合を押し付けてしまうのは非常に心苦しいのだが、しょうがない。

    MySqlの効果は?

    リビルドの速度はどの程度はやくなっただろうか?

    気持ちはやくなったのかも知れないという程度かもしれない。 なので、あんまりご利益はないかなぁ…。

    次はアクセス記録の部分をMySql対応にする。 現在ページを表示する時間の大部分はここで費やされているので、こっちは効果があるだろう。あるはずだ。

    追記:

    何回かリビルドした感じでは明らかに早くなっている。 エントリーやコメントの単体リビルドだとあまり違いがわからないが、 全体リビルドだと違いは明確だ。 データベースを移行したかいがあった。

    今後の改造

    • 禁止IPリストをレンジで指定できるようにする。
    • アクセスログのデータもMySqlに移行する
    • MT3.1へ移行
    この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/77
    「データベースをMySqlに移行」へのコメント  コメントを書く
    「データベースをMySqlに移行」へのトラックバック

    2004年11月17日

    「MySQL移行で表面化したバグ」MT導入と改造

    データベースをMySQLに移行して以来、サイドバーにある“Recent Updates”が正しく表示されていなかった。

    Wiki部分の改良によって正しく表示されていなかったエントリーの一部を修正した。 そういうエントリーは昔に書いたものであっても“Recent Updates”のリストのトップにきてもらわなくては困る。 ところがある程度以前のものはリストにでてこない。

    Template\Context.pmのコードを追ったり、 デバッグ出力をだしたりして試行錯誤してみた結果、 どうやらこういうことらしい。

    • まずcreated_onにしたがって、とりあえずエントリーのリストを作成
    • MTEntryタグのlastnで指定された順番でリストを足きり
    • MTEntryタグにsort_byがある場合はソートしなおし

    現在“Recent Updates”はlastn=20で上位20エントリーに制限してあるので、 20エントリー以前のエントリーは、そもそもsort_byで指定したソートの 対象になっていなかったというのが、事の真相のようである。

    最初は、以前のperlのリスト処理だと全エントリーがソートの対象になるが、 データベース移行後はMySQL固有部分のコードがSELECT文発行の段階で LIMITとかをかけているのかとかデータベースがらみだろう と思っていたが、そうではなかったらしい。

    とりあえずcreated_onでソートしたリストを作成している部分を、 ちゃんとsort_byの内容にしたがってソートするようにして問題は解決。

    今回オブジェクトストアの部分をみていて分かったのだが、 MT2.6のコードはあまりデータベースを意識した作りにはなってないなぁ。 単純にデータの保存以外にはDBMSを使っていないので、 データへのアクセス速度の面以外ではあまりDBMSを有効活用していない感じ。

    この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/83
    「MySQL移行で表面化したバグ」へのコメント  コメントを書く
    「MySQL移行で表面化したバグ」へのトラックバック

    2004年11月24日

    「index.rdfのアクセスログ大爆発の兆し」MT導入と改造

    なんか、5分ないし10分に一度index.rdfを読み込んでくるところが 2~3日前から目立ちはじめた。1日に少なくとも200はアクセスしてくる。

    自分の書いたものを読んでくれる人がいるというのは、 なんとなく気恥しい面もありはするが、 それなりに気合いが入ろうというものでもある。 そういう意味で、悪意があるのでない限りは、 アクセスがあるのは大歓迎である。

    だけど5分に一回おなじファイルをダウンロードするというのはちょっとやりすぎではないか。 2~3日で一挙にアクセスランキング上位におどりでてしまった。 うちのindex.rdfはそんなに頻繁にみても内容は変わっていない。 そもそもHTTPのGETで見にくる前にHEADをとるなどやっても よさそうなのだが、それもやっていない。 このようなアクセスは、無駄に帯域を消費しているように感じる。

    USER_AGENTをみてみたらMagpieRSSというやつだ。 インターネットで検索してみたらオープンソースのRSSリーダーらしい。 ブログ集約サイトなどから更新データを引っ張ってくることを前提にしているのだろう。 ならばなおさら帯域には気を払うべきだと思うが、 ツールが悪いのではなく使い方がタコなんだろうと思っている。 中身はみてないけど、オープンソースのRSSリーダーともあろうものが、 5分に1回無条件にrdfをダウンロードするなどという、 そんなタコな仕様でつくられているはずはないと信じたい。

    一瞬、いっそのことIPでみきわめて、 そのホストからのアクセスをはねてやろうとも思ったが、 とりあえずはそこまでするのは止めた。 ファイルの性質上アクセス制御しなくてはならないもの以外は、 できるかぎり差別なくアクセス可能なものでありたいと思っている。 そういうわけでindex.rdfはアクセスログの候補から外した。 データベースのほうも該当するレコードは削除した。 こういうときファイルベースではなくDBMSだと楽だ。 早くも、データベースを移行したメリットがでた。

    この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/92
    「index.rdfのアクセスログ大爆発の兆し」へのコメント  コメントを書く
    「index.rdfのアクセスログ大爆発の兆し」へのトラックバック

    2004年12月04日

    「前月のカレンダーも表示」MT導入と改造

    このブログのトップページで表示されるエントリーは1ヶ月分に設定している。 私は毎日は書かないということもあるので、 そうすると月はじめはカレンダーからとべるエントリーが非常に少ないという状況になる。

    というわけでカレンダーは前月のものもだすようにした。

    ところが、<$MTDate$>では前月を指定するような機能がついていない。

    これだと用を足さないので、lib\MT\Template\Context.pmの_hdlr_sys_dateを改造して、 <MTCalendar>と同じようにmonth属性に'last'を指定すると前月を表すようにしてみた。

    この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/102
    「前月のカレンダーも表示」へのコメント  コメントを書く
    「前月のカレンダーも表示」へのトラックバック

    2005年02月26日

    「ブログターゲットのスパム」MT導入と改造

    最近はメールのスパムが安定してきたように思う。 といっても相変わらず毎日15通ほどのスパムが届いているようだが、 新規パターンのものがないのでブラックリストへの新規登録は激減している。

    ところが、その分ふえたのがブログをターゲットにしたスパムだ。 これには2種類あって、ひとつはブログのコメントにスパムを投稿するというもので、 もうひとつはトラックバック先がスパムになっているというものだ。 世間的にこういうのもスパムと呼ぶかどうかは知らない。

    こういうのは見つけると消したり、IPの範囲で拒否設定をしたりしていたし、 MTのソースを少しだけいじって特定キーワードを含むものを投稿拒否するように改造していた。

    ところが、先週なかごろ約1時間に1通のペースで執拗にトラックバックをつけてくるところが出現した。うっかりクリックするとオンラインポーカーのサイトへ誘導されるというものだ。

    特定キーワードで拒否するような改造は、ソース中に暫定的にハードコードしてしまっていたし、 コメント投稿部とトラックバック受信部で共通するので、MT::Util.pmに追い出して共通化した。MT::App::Comments.pmのpostとMT::App::Trackback.pmのpingからこのUtilityを呼び出す。

    これで別途リストアップしてあるNGワードにひっかかるコメントとトラックバックは「お前はスパムだ」というようなメッセージとともに受付を拒否できるようになった。

    件のトラックバックはとりあえずなりを潜めたようだ。

    この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/120
    「ブログターゲットのスパム」へのコメント  コメントを書く
    「ブログターゲットのスパム」へのトラックバック
    @@@@