<< 1 | 2 | 3 | 4 | 5 >>

2005年03月14日

今日の11:00頃から帰宅した10:30頃まで12時間近く。
11:00頃に職場からブログチェックをしようと思ったらhttpで接続できなくて、sshでログインしようとしても入れず。あ~、これは落ちてるな、と、もどかしい思いを感じながら仕事してました。

落ちていた間にアクセスされた方にはご迷惑をおかけしました。m(_ _)m

クラックされたか心配だったので、急いで帰宅して、再起動後一通りログをチェックしてみるものの、それらしき形跡は見つからず。

MTをphp化したことで負荷が高まったのかもしれません。セレ466MHzのRAM192MBで運用するのもそろそろ限界かな。新しいサーバマシンを買おうかと思いはじめました。ここはひとつ、Mac miniかな、とか。(笑)


昨日php化して2004年の月別アーカイブの表示ができないと書きましたが、httpdのログを見てみると、

/diary/archives/2004.jpg/04/14_0128.php

というファイルへのアクセスがあることがわかりました。(もちろん「File does not exist」)
しかし、

/diary/archives/2004.jpg

というファイルは確かに存在するのです。なんだか怪しかったので、ダメもとで「2004.jpg」を「2004newyear.jpg」にリネームしてみました(MTのエントリーの該当箇所も修正)。

そうしたら、なんと、2004年の月別アーカイブも正常に表示できるようになりました。
う~む、摩訶不思議。

画像のファイル名はあんまり単純なものじゃない方がよさそう。

投稿者 Utayume : 22:53 | トラックバック (0) | 04 Blog /Linux

2005年03月13日

MTをphp化してみました。

段取りとしては、
1.MTが出力するファイルのphp化
2.外部からの過去のアーカイブへのリンク用をphpへredirectさせる
詳しいやり方は他のサイトを見てください。^^;

一応一通りはできているのですが、いくつか問題が。。。

トップページ(テンプレート > Main Indexの出力ファイル名)をindex.htmlからindex.phpに変更すると、ページが文字化けする。アーカイブページは大丈夫なのにこのページだけ。ものすごく謎です。違いは再構築オプションを「 アーカイブのみダイナミック」にしているので、トップページはスタティックなページであること。Content-Typeが関係しているような気がしますが、調べていません。
トップページがphp化できないと、今回php化する意味はほとんどないのですよね。う〜む、困った。

それと、月別アーカイブの2004年分が404 Not Foundになる。2003年分と2005年分は
ちゃんと出るのに、2004年だけ何故か。違いは2004年は1月から12月まで全部あるということですが、それがどう影響しているのか不明。

とりあえず、この2点は保留です。

もうMTって複雑すぎ。
こんなにいろいろ調べてやらなければいけないなら、最初から全部自分でphpで書いちゃった方が早いよ〜。もちろんそんな時間はないのですが。^^;

投稿者 Utayume : 11:42 | トラックバック (0) | 04 Blog

2005年03月09日

仕事で作っているサイトでRSS配信を始めた、と数日前のエントリーに書きましたが、それとは反対に、今度はRSSからHTML表示するプログラムを作成してみました。

流れとしては以下のような感じ。

1.更新情報は全てMySQLに入れてしまって、情報追加毎にRSSを作成。
2.上記で作成したRSSを読み込み更新情報ページを表示

普通なら、自分のサイトなのにわざわざRSSを読み込まずにMySQLから直接更新情報を取得すればいいのですが、あえて、RSSから読み込むことにしました。それはRSSを表示する環境を作っておくと後々便利だなと思ったからもありますが、それ以上に、BlogPeopleのようなものを自分でやってみたいという好奇心の方が強いかも。

RSSからHTML化するには全て自分でプログラムを書くこともそれほど難しくはありませんが、通常はXMLパーサやRSSパーサといった汎用的なプログラムを使います。

で、今回使ったのがPHPのRSSパーサとしてはおそらく一番有名なMagpie RSS
簡単です。はっきり言って、これ使えばPHPの知識など無くても他サイトのRSSを取得して表示することが可能です。
ブログでサイドバーに任意のRSSを表示させるのも、BlogPeople等を使わずに手軽に表示させることができます。

MagpieRSS - PHP で使える RSS パーサー。

という日本語のわかりやすいページがあってワタクシごときがあんまり説明することもないので、実際にMYCOM PC WEBのRSSを取得して表示するサンプルスクリプトなどを書いてみます。

/*サンプルここから*/
<?php
  require_once 'rss_fetch.incへのパス';
  $url = 'http://pcweb.mycom.co.jp/haishin/rss/index.rdf';
  $rss = fetch_rss($url);
  $title = $rss->channel['title'];
  $title = mb_convert_encoding($title, "euc", "auto");
  $link = $rss->channel['link'];
  print "<h2><a href=\"${link}\">$title</a></h2>\n";
  print "<dl>\n";
  foreach ($rss->items as $item ) {
    $title = $item['title'];
    $title = mb_convert_encoding($title, "euc", "auto");
    $url = $item['link'];
    $itemday = date('Y/n/j',strtotime(substr($item['dc']['date'],0,10)));
    $youbi = array(0 => '(日)', 1 => '(月)', 2 => '(火)', 3 => '(水)', 4 => '(木)', 5 => '(金)', 6 => '(土)');
    $mday = date('w',strtotime(substr($item['dc']['date'],0,10)));
    $itemtime = date('G:i',strtotime(substr($item['dc']['date'],11,8)));
    print "<div class=\"part\"><dt>${itemday} $youbi[$mday] ${itemtime}</dt><dd><a href=\"$url\">$title</a></dd></div>\n";
  }
  print "</dl>\n"
?>
/*サンプルここまで*/

これだけ。チョー簡単ですね。
前述MagpieRSS - PHP で使える RSS パーサーで書かれていたサンプルスクリプトに多少追記しています。
W3CDTFを変換するのをどうしようかちょっと悩みましたが、とりあえず、日付と時間を文字位置で取得するようにしました。

これを実際に組み込んだものがこれです。

注意点としてはMagpieRSS - PHP で使える RSS パーサーのコメントにも書かれていますが、現在最新版である0.71では日本語が文字化けします。回避策として古い0.61のrss_parse.incを上書きインストールします。

投稿者 Utayume : 13:22 | コメント (10) | トラックバック (5) | 04 Blog /05 Work(Perl, PHP, etc)

2005年03月05日

某仕事で作っているサイトでRSS配信を実装してみました。
本当はATOMでいきたいけど、仕様を詳しく調べるのもめんどくさかったので、日本でポピュラーと思われるRSS1.0で作ることにしました。

以下がその関数。

/*ここからサンプル関数*/
function createRSS($items,$savefile,$rssinfo){
  //現在時刻
  $nowtime = date("Y-m-d\TH:i:s+09:00");

  $data .= <<<EOM
<?xml version="1.0" encoding="utf-8" ?>

<rdf:RDF
xmlns="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xml:lang="ja">

<channel rdf:about="${rssinfo['rssurl']}">
<title>${rssinfo['rsstitle']}</title>
<link>${rssinfo['rsslink']}</link>
<description>${rssinfo['rssdesc']}</description>
<dc:language>ja</dc:language>
<dc:creator>${rssinfo['rsscreate']}</dc:creator>
<dc:date>${nowtime}</dc:date>
<items>
<rdf:Seq>

EOM;
  foreach($items as $item){
    $data .= " <rdf:li rdf:resource=\"${item['link']}\" />\n";
  }
  $data .= <<<EOM
</rdf:Seq>
</items>
</channel>

EOM;
  foreach($items as $item){
    $data .= " <item rdf:about=\"${item['link']}\">\n";
    $data .= " <title>${item['title']}</title>\n";
    $data .= " <link>${item['link']}</link>\n";
    $data .= " <description>${item['description']}</description>\n";
    $data .= " <dc:date>${item['date']}</dc:date>\n";
    $data .= " </item>\n";
  }
  $data .= "</rdf:RDF>\n";
  $data_cv = mb_convert_encoding($data,'UTF-8','EUC-JP');
  $fp = fopen($savefile,'w');
  fwrite($fp,$data_cv);
}
/*サンプル関数ここまで*/

$itemsは各アイテムの多次元配列で、あらかじめDB等から代入しておきます。$savefileは保存先(UNIX上のパス)、$rssinfoはRSSファイルそのものの情報です。

$items[n] =array(
  title => 'アイテムタイトル',
  link => 'アイテムのリンク',
  description => 'アイテムの概要',
  date => 'アイテムの作成日YYYY-MM-DDTHH:MM:SS+09:00')

$rssinfo = array(
  rssurl => 'RSSファイルのURL',
  rsstitle => 'RSSのタイトル',
  rsslink => 'RSSのリンク',
  rssdesc => 'RSSの説明',
  rsscreate => 'RSS作成者')

W3C RDF Validation Service
Feed Validator for Atom and RSS
RSS Validator

RSSの妥当性をチェックしてみるとFeed Validator for Atom and RSSだけは「Congratulations!」でしたが、他のふたつはエラーにorz。概要にhtmlの文字参照(&amp;とかいうやつね)を使っているからなのですが、めんどくさいので追々考えよう。

参考図書↓。とは言っても、参考になったのは1章のみ。

入門RSS―Webにおける効率のよい情報収集/発信
新納 浩幸

by G-Tools

投稿者 Utayume : 10:26 | トラックバック (0) | 04 Blog /05 Work(Perl, PHP, etc)

2005年02月22日

BlogPeopleの本日2月22日のラッキーさんがお友達(だと勝手に思っている)Haruさんのtonetalkでした。
自分のことのように嬉しいです。

記念写真ぱちり。
tonetalk_lucky.jpg

nagasawaさんのコメントも必見!

ワタクシも憧れています。
今後も温かく、マイペースでいてください。

投稿者 Utayume : 23:05 | トラックバック (1) | 04 Blog

ものすご~く今更なのですが、TypeKeyを導入して以来、TypeKeyログオン時に素直に認証が通りませんでした。
コメントはTypeKeyを使わなくてもできるし、リロードすれば認証が通るので、まぁいっかと放っておいた(これでも一応Webプログラマ^^;)のですが、やっぱり自分がコメントするときにウザイので調べてみました。

この障害は3.0から3.1で変数の扱いが変更されたことから起こるようです。よって、3.0からテンプレートをそのままで3.1にバージョンアップした環境で発生します。

詳しくは以下を参照。

MovableTypeで行こう!: バージョンアップで、TypeKey認証がうまくいかなくなったら
HINAGATA:アップグレード後TypeKeyにサインインできない場合

HINAGATAでは4ファイル修正する必要があると記載されていますが、MTデフォルトのテンプレートを使っている場合、「個別エントリーアーカイブ(Individual Entry Archive)」のみを変更すれば大丈夫のようです。サイン・イン、サイン・アウトのリンク各2箇所ずつ、計4箇所を修正するだけでした。

しかし、バージョンアップ毎にいろいろとめんどくさいなぁ~。

投稿者 Utayume : 16:31 | トラックバック (0) | 04 Blog

2005年02月21日

今までトラックバックスパムさんがいらしたことはなかったのに、昨晩初めてお越しいただいて以来、現在までに30件ほど「ありがたい」TBをいただきました。

対策方法はあるのかなぁ?と思って調べてみると

Bianca: BiancaのTrackBackSpam対策【トラックバックスパム対策】

というようなエントリーを発見。
これはコメントスパムと同様に半角の概要のみのTBを拒否するという仕様です。
以前にも書いたようにここでは海外からのコメントやトラックバックを一律に拒否することはしたくないのです。なのでこの方法をそのまま採用するのは見送り。

とりあえず、コメントやTBの概要を見ると「poker」「texas」「holdem」あたりのキーワードを含むTBを拒否すればほとんどは防げるかもと思ったりします。

ってことで、 Biancaさんの対策のif文を以下のように変更。
(以下は全部全角に変換したので、コピペする場合は全部小文字に変更してね)

if(($txt ne ””) && ($txt !~ m/[\x80-\xff]/) && ($txt =~ m/(texas)|(poker)|(holdem)/i)){
die(’error’)

全部半角でかつ「poker」「texas」「holdem」を含んだ概要のTBを拒否します。(たぶん^^;)

さてさて。

と思ったらkrbys.net :: Trackback Spam対策でプラグインで対処できるというエントリーを発見。
こっちのが簡単ですね。

投稿者 Utayume : 12:33 | トラックバック (0) | 04 Blog

2005年02月20日

入門RSS―Webにおける効率のよい情報収集/発信
新納 浩幸


Amazonで詳しく見る
by G-Tools

現在、ワタクシが仕事で制作しているサイトでRSSを利用したいと思っています。が、単に更新情報を配信するだけなら大して便利でもなく、面白くないので、何か面白い利用方法がないか調べてみようとこの著書を購入しました。
この本はRSSについて日本語で書かれた唯一の著書だと思われます。

目次からわかるように、「RSSとは何か」という概論から、実際の利用方法、さらにはgoogleやamazonのAPIまでかなり幅広く書かれています。
幅広く書かれているだけに、各種Web技術に携わっている人にとってはムラが多く、今の時期に「RSSって何?」と思って手に取る人にはかなり難しい内容ではないかと思います。どのあたりのレベルの人をターゲットにしているのか、イマイチ不明瞭です。

ワタクシとしては、前述のようにRSSの可能性を探っていますし、RSSという言葉を知って興味を持った人なら既にRSSを利用していると思われるので、「3章 RSSフィードの受信」なんてところは全く必要ないと思います。

参考になったのは「4.1 XSLTの利用」ってところかな。

まぁ、そこそこ参考にはなりました。ちょっとだけ先が見えてきました。

っていうか、RSSを活用するならXMLとXSLTをちゃんと勉強しないといけないなぁ、と思った次第。(^^;

以下の本も併せてどうぞ。

やさしいXML
高橋 麻奈

by G-Tools

投稿者 Utayume : 23:23 | トラックバック (0) | 04 Blog /05 Work(Perl, PHP, etc)

2005年02月09日

去年まではトラックバックで文字化けすることは一度もなかったのに、今年になってから送ったトラックバックがことごとく文字化けしてます。

閘門ブロッコリー@Hiroaki ○○Ⅰさま
piu lentoの日々さま
猫手企画@新聞屋さま

申し訳ありません。

これ以上皆様にご迷惑をかけるわけにはいかないので、Movable Typeの文字コードを今までのEUC-JPからUTF-8へ変更(変換)することにしました。

で、MySQLのデータの変換をどうしようかな~、と。
一度テキストで全部書き出してエディタでutfへ変換するとか、この際phpでスクリプトを書くかとか考えていて、その前に他の方はどうしているのかな、と検索してみると、
MT公式に以下のようなツール(β版)がリリースされていることを知りました。

Beta Weblog: Movable Type の文字コード変換スクリプト

な~んだ、簡単じゃん。
で、実行。

上記スクリプトを実行するとMySQLの格納データをUTF-8へ変換することができます。(Shift_JIS、EUC-JP、UTF-8いずれからも相互に変換可能です)
後はmt.cfgのPublishCharsetを書き換えて「全てを再構築」するだけ。簡単ですね。
他に、BlogPeopleのリンクリストの登録文字コードと、音ログのスクリプトの文字コードを変更すれば完了。

試しに再び大井さんへTBを送ってみたら(度々すいません)、今度は文字化けせずに正常に表示されていました。

めでたしめでたし。


このブログを設置した当時(1年3ヶ月前)は、まだUTF-8はあまり使っているサイトはなく、使用しているLinuxは当然EUC-JPであることから、慣れてもいないUTF-8を使うよりはEUC-JPを使った方がよかろうと選択したのですが、時は経ち、ブログが全盛になり、xmlのデフォルト文字コードでもあることからUTF-8は今となってはだいぶ認知されてきましたね。このブログのようにEUC-JPでは却って不具合が起きやすくなってきているようです。最近の文字化けの原因がどこにあるのか(MTのアップグレード?)はわかりませんが。

投稿者 Utayume : 01:10 | コメント (4) | トラックバック (0) | 04 Blog

2005年02月02日

Movable Type 日本語版サイト: Movable Type 3.15の提供を開始

新しもの好きのワタクシにしては珍しく公開から2日遅れでアップデートしました。

更新履歴によればバグフィックスのみのようで、ほとんどはウチの環境では問題になっていませんでしたが、ひとつ気になったことが。

コメント一覧でIPアドレスでフィルタリングした時、「このIPアドレスを禁止する」が正常に動作しないことがあったので修正した

実は以前、既にIP BANしているIPアドレスからスパムコメントされていることがあったので、何故なのか謎だったのですが、バグだったのですね。それならよかった。

投稿者 Utayume : 13:44 | トラックバック (0) | 04 Blog

<< 1 | 2 | 3 | 4 | 5 >>