2005/1月 - 朝顔日記

rNote の記事作成用の何か

2005-01-02

この日記を rNote に移行したわけですが、私はローカルなエディタで書くのが好きなのでそのための環境を構築する必要があります。というわけで、まずはファイルを作成するところから。

rNote はひとつの記事が1つの xml ファイルから生成されます。デフォルトでは、entries ディレクトリ以下にサブディレクトリを作ると、それがそのままカテゴリーになるのですが、私の場合、ひとつの記事が複数のカテゴリーに属せるようにしたいのでこの機能は使っていません。代わりにもろもろの事情により、entries 以下には、2003 とか、2004 といった記事の年代を示すサブディレクトリと、日記以外の何か(何)という意味合いの etc というサブディレクトリがあります。2004とかの下には、01~12までの月ごとの記事を納めるサブディレクトリがあります。で、月ごとにディレクトリにその日の記事をおくわけです。で1日に複数の記事を書くこともあるので、ファイル名の末尾に a とか b とかをつけています。例えば、2005年1月2日にはじめて書くこの記事は、entries\2005\01\diary_050102a.xml というファイルに書かれることになります。もし二つ目ならば、entries\2005\01\diary_050102b.xml です。月が変わるごとにこれらのディレクトリを作ったり、あるいは日記を書くたびに、それなりのファイル名で記事を作るのは面倒です。

ということで、これらのことをバッチファイルひとつ実行で自動で出来るようにするというのが、今回の指令(何)です。というわけで、作ったのが以下の php スクリプト、名づけて diary.php です。なにも php でやる必要はないのですが、私が今一番書きやすいのが、php スクリプトなので。:p)


<?php
$entries = "d:\\web\\noasobi\\diary\\entries\\";
$openbat = "d:\\web\\noasobi\\diary\\ftp\\open.bat";
$editor = "c:\\bin\\xyzzy\\xyzzycli.exe"

$year = date("Y")."\\";
$month = date("m")."\\";
$day = date("d");
$entry = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");

$dh = @opendir($entries.$year.$month);
if($dh==0){
  mkdir($entries.$year.$month);
  $dh = opendir($entries.$year.$month);
}
closedir($dh);
for($i=0; $i<25; $i++){
  $file = $entries.$year.$month."diary_".date("y").date("m").$day.$entry[$i].".xml";
  if(!file_exists($file)){
    break;
  }
}

$fp = fopen($openbat,"w");
fwrite($fp, $editor." ".$file."\n");
fclose($fp);
?>

これで、その日の初めての記事書きなら、diary_yymmdda.xml が、ふたつ目なら、diary_yymmddb.xml が、26個目なら、diary_yymmddz.xml が指定のエディタで開かれるはずです。まぁ、27個以降はどうするかという問題もありますが、多分そんなに書くことはないので大丈夫でしょう。:p)

で、このスクリプトを呼び出して、エディタを起動させるのが、以下の diary.bat です。パスの通ったところにおいておきます。


@echo off
php -q d:\web\noasobi\diary\ftp\diary.php
call d:\web\noasobi\diary\ftp\open.bat

diary.php の置き場所によってパスを適宜書き換える必要があります。

次回は、あちこち(何処)からどうやって更新するかとか、どうやってテンプレ(何)を挿入するかとかが指令(何)です。

「rNote の記事作成用の何か」へコメントをつける

この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2005/01/diary_050102a.html

WinSCP は便利

2005-01-04

どうやったらローカルで日記を書いてサーバにアップしたりダウンしたりが便利になるかというのが、今回の指令です(何)。と、気張っていたんですが、実は WinSCP だけで用は足りました。WinSCP とはなんぞやというのは書くのが面倒なので、WinSCP Japanese site : about をご覧ください。で、WinSCP はしばらく前から使っていたんですが、今日始めてコマンドラインでも使えるということに気が付きました。

コマンドプロンプトを開いて、winscp3 /help などと打ち込めば使い方が表示されます。

winscp3.exe <session> /script=hoge

というのが書式です。<session> というのは、WinSCP でログインするときのアレ(どれ)ですね。で、WinSCP で接続した後に行う手順を script で指定したファイルに記述しておきます。WinSCP で使えるコマンドは、起動した後にコンソールで help などとすると一覧で表示されます。

WinSCP のヘルプ画面のスクリーンキャプチャ

さらに詳しいヘルプが必要な場合は、help sychronize のように知りたいコマンドを help コマンドの引数にしてやれば表示されます。

synchronize のヘルプ画面のスクリーンショット

これを使って、日記を更新する場所から、ローカルとリモートのファイルを同期させてから、rNote の記事作成用の何か で書いたスクリプトを走らせると、自動的にその日の書くべきファイル名で、指定したエディタ = xyzzy が立ち上がり該当ファイルを作ってくれます。ただ、ファイルを開くだけでは不便なので、template-insert.l を使って、rNote の xml 用のテンプレートを挿入します。これを使うと xyzzy で開くモードや文字コードも指定できるので便利です。

一応、日記書きの際に起動する diary.bat を書いておきましょう。


@echo off
d:
cd d:\web\noasobi\diary\entries\2005\
winscp3 セッション名 /script=d:\web\noasobi\diary\scp\scpdown.scr
php -q d:\web\noasobi\diary\scp\diary.php
call d:\web\noasobi\diary\scp\open.bat

ローカルで、鯖に上がっている日記を落としてくるディレクトリに移動しておいて、WinSCP で鯖からダウンして、diary.php で日記のファイル名やディレクトリを生成して、そのファイルを開く、バッチファイル(この場合、open.bat)を生成、最後にバッチファイルを実行という手順です。その後さらに、template-insert.l が起動してテンプレートが挿入されるわけですけども。

WinSCP に実行させる、ダウンロード用のスクリプトファイル(この場合、scpdown.scp)は以下のような感じ。


cd public_html/diary.noasobi.net/entries/2005
synchronize local
exit

で、日記を書き終わったらまた同じように、WinSCP を使ってリモートのファイルをローカルのファイルに同期させます。ちなみにそれを行うための、rnote.bat の内容は以下のような感じ。最後に start コマンドを使って、rnoteadmin ツールにアクセスしています。


@echo off
d:
cd d:\web\noasobi\diary\entries\2005\
winscp3 セッション名 /script=d:\web\noasobi\diary\scp\scpup.scr
start http://diary.noasobi.net/rnoteadmin.php

で、そのときに使う scpup.scr の内容が以下のような感じ。


cd public_html/diary.noasobi.net/entries/2005
synchronize remote
cd ../../img
lcd d:\web\noasobi\diary\img
synchronize remote
exit

こっちは画像ファイルの更新も行っています。

長々と書いて、かなり意味不明ぽいですが、WinSCP を使えば、バッチファイルふたつくらい書くだけで、ローカルとリモートのファイルの同期が取れて便利だなぁ、というようなことでした。

追記
私は、PuTTY Download Page にある、pageant.exe などを使うことで、パスフレーズの入力を省略しています。

「WinSCP は便利」へコメントをつける

この記事へのツッコミ

1: あや (2005-02-20T11:36:36+09:00)
はじめまして!
こちらのページを見てにWindows間のファイル同期のバッチファイルを書きました。
とても参考になりました。
私の場合、パッチファイルに引数を渡して実行しようとしています。
そこで、ご存知でしたらご教示願いたいのですが、
バッチファイル中のスクリプト(この場合でしたらscpup.scr)にも引数を引きつがせることは可能なのでしょうか?
winscp3でスクリプトへ引数を受け渡すオプション(?)などはあるのでしょうか?
ご存知でしたらお助けください・・。
2: のり (2005-02-21T23:25:41+09:00) nori@noasobi.net
こんにちは。
えーと、よくわかっていないのですが、バッチファイルに引数を渡すと言うのは、
winscp3 <session> %1
みたいなことでしょうか? そう意味だとすると上記内容を、例えば test.bat とした場合、
test.bat /script=d:\hoge\hoge
などとして実行するとうまくいきませんね。
試しに、
test.bat "/script=d:\hoge\hoge"
のように、ダブルクォートで括ってみたところうまくいくようです。
もし話しが違っていたらごめんなさい。
3: あや (2005-02-24T23:54:29+09:00)
のりさん、ありがとうございます!
説明不足ですみません。
具体的な例を申し上げますと

-------------syncweb.bat
@echo off
cd C:\web\%1
winscp3 scp://webserver /script=c:\hoge\hoge\scpup.scr
-----------------------
------------------scp.scr
cd c:\inetpub\%1
synchronize remote
exit
----------------------

c:\web\aaa と webserverのc:\inetpub\aaa
で同期をとりたい場合
syncweb aaa
を実行して、
scp.scrの中で
cd c:\inetpub\aaa
とできるのかな。。と思いまして。

とりあえず、リダイレクトで

echo cd c:\inetpub\%1 >scpup.scr
echo synchronize remote >> scpup.scr
としました。
scp.scrが3行程度なのでこのようにしましたが、
引数を渡せる技をご存知でしょうか。。
4: のり (2005-03-01T00:02:13+09:00) nori@noasobi.net
ちょっと考えてみましたが、私には思いつかないですねぇ。すみません。

同期を取りたいディレクトリの数がそんなに多くないのであれば、バッチファイルとスクリプトを複数書くという手が思いつきますが。一度書いてしまえばあとは楽なので。
もしくは、何らかのスクリプトを使って、バッチファイルや winscp 用のスクリプト自体を動的に生成するとかも考えられますが。
5: あや (2005-03-02T23:14:18+09:00)
今回は同期を取りたいディレクトリはあまり多くないので、複数のバッチファイルで対応したいと思います。
ありがとうございました!

トラックバック

1: だわもん/WinSCPでスクリプトを使う場合 (2007-06-04T20:56:04+09:00)
WinSCPで スクリプトを使うのには, どうしたらよいの?
この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2005/01/diary_050104a.html

dc:date をどうしたものか

2005-01-04

この日記の RSS は rNote が自動的に生成してくれているわけですが、このときの dc:date は、記事を書く xml ファイルの Date 要素から生成されます。今までは、記事の更新された時間のことなど考えていなかったので、<Date>2005-01-04</Date> って感じで書いていました。そのために生成された RSS では、<dc:date>2005-01-04T00:00:00+09:00</dc:date> といった感じですべて0時0分0秒の更新ということになっていたようです。と、さきほど親分(誰)に指摘していただいて気が付いたわけですが、これはまずいですね。

とりあえず、RSS を生成するスキンをいじって、yyyy-mm-dd の形で出すことにしておきましょう。しかし、過去の分はともかく今後は時間も入れたいなぁ。ファイルを作った時間を入れるのは容易なんですが、更新時の時間をどうやったら楽に入れられるかなぁ。ちょっと無い知恵を振り絞ってみるか。

と、スキンをいじって再構築(何)をする口実のための記事だったり。:p)

「dc:date をどうしたものか」へコメントをつける

この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2005/01/diary_050104b.html

この日記の更新取得用ファイル

2005-01-05

どうも一部のアンテナで日記を更新していなくても順位(何)上がっているようで、なんか心苦しいわけですが、もしかすると、http://diary.noasobi.net/rss.rdf を更新時刻取得に使うといい按配かもしれません。今回の更新時に、トップページのみ更新時間を表示するようにしておくので、もしかするとそこらを狙い撃ち(何)してもいいかもしれません。

「この日記の更新取得用ファイル」へコメントをつける

この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2005/01/diary_050105a.html

dc:date に時間を入れたい

2005-01-06

rNote 用の記事をアップロードするタイミングで dc:date に時間が入るようにしたいという、dc:date をどうしたものか をどうにかしてみました。

とりあえず、記事を書き出すときは適当な日付を入れておきます。時間は入れません。入れてもいいんですが、後で書き換わるので無駄です。で、記事をアップロードするときにファイルの中から <Date> の行を検索して、その時の日付+時間に置換してやることにしました。その置換のためのスクリプトが、以下の date.php です。

<?php
$file = $_SERVER["argv"][1];
$date = "<Date>".date("Y-m-d\TG:i:s")."</Date>";
$lines = file($file);
$fp = fopen($file,"w");
foreach ($lines as $l){
  $l = preg_replace("#<Date>.*?</Date>#",$date,$l);
  fwrite($fp,$l);
}
fclose($fp);
?>

php -q date.php hoge.xml といった感じで使います。

しかし、毎度 date.php の引数に該当の xml ファイルを手で渡すとかいう面倒なことはやってられないので、これを行うバッチファイルもスクリプトで生成することにします。というわけで、rNote の記事作成用の何か と、WinSCP は便利 で書いたスクリプトやバッチは以下のものに変わりました。


<?php
// 設定
$entries = "d:\\web\\noasobi\\diary\\entries\\";
$openbat = "d:\\web\\noasobi\\diary\\scp\\open.bat";
$updatebat = "d:\\web\\noasobi\\diary\\scp\\rnote.bat";
$downscr =  "d:\\web\\noasobi\\diary\\scp\\scpdown.scr";
$upscr =  "d:\\web\\noasobi\\diary\\scp\\scpup.scr";
$datescript = "d:\\web\\noasobi\\diary\\scp\\date.php";
$session = "セッション名";
$adminurl = "http://diary.noasobi.net/rnoteadmin.php";
$editor = "c:\\bin\\xyzzy\\xyzzycli.exe";
// 設定終わり

$year = date("Y");
$month = date("m");
$day = date("d");
$entry = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");

$dh = @opendir($entries.$year."\\".$month."\\");
if($dh==0){
  mkdir($entries.$year."\\".$month."\\");
  $dh = opendir($entries.$year."\\".$month."\\");
}
closedir($dh);

for($i=0; $i<25; $i++){
  $file = $entries.$year."\\".$month."\\diary_".date("y").date("m").$day.$entry[$i].".xml";
  if(!file_exists($file)){
    break;
  }
}

$fp = fopen($openbat,"w");
fwrite($fp,"$editor $file\n");
fclose($fp);

$fp = fopen($updatebat,"w");
fwrite($fp,"@echo off\n");
fwrite($fp,"php -q $datescript $file\n");
fwrite($fp,"d:\n");
fwrite($fp,"cd $entries$year\n");
fwrite($fp,"winscp3 $session /script=$upscr\n");
fwrite($fp,"start $adminurl\n");
fclose($fp);
?>

日記を書くときに起動する、diary.bat は以下


@echo off
d:
cd d:\web\noasobi\diary\entries\2005\
winscp3 yamato@noasobi.net /script=d:\web\noasobi\diary\scp\scpdown.scr
php -q d:\web\noasobi\diary\scp\diary.php
call d:\web\noasobi\diary\scp\open.bat

これを起動すると、適当な名前のファイルを xyzzy が開いてくれます。で、日記を書き終わったら、diary.php が生成する、rnote.bat を起動すれば、あとは自動的になんとかなるはずです。多分。:p)

「dc:date に時間を入れたい」へコメントをつける

この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2005/01/diary_050106a.html

ローカルで書いた rNote 用の xml をどうやって閲覧しよう?

2005-01-06

rNote 用に書いた xml もサーバにアップする前になんとなく見ておきたいので、ローカルで手軽に見てみれるといいなというのが、今回の指令(何)。

xml をそのままブラウザで見てもちっとも面白くないので、XSLT を使って html に変換したものを閲覧することにしました。ただ、rNote の仕様上、画像ファイルなどのパスが変わるのでそこらをどうしたものかと困っていたんですが、哀さんに相談したら、画像のパスを変換する技(?)を伝授していただきました。ありがとうございます。>哀さん

うまくいったと思ったら、実は勘違いだったことが判明。とりあえずいったん XSLT は削除して出直します。

書き直しました。今度は大丈夫。多分。:p)

というわけで、以下がその XSLT です。


<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:x="http://www.w3.org/1999/xhtml"
  xmlns:rn="http://rinn.e-site.jp/rnote/"
  xmlns="http://www.w3.org/1999/xhtml"
  exclude-result-prefixes="rn">
  <xsl:output method="xml"
    encoding="UTF-8"
    omit-xml-declaration="no"
    doctype-public="-//W3C//DTD XHTML 1.1//EN"
    doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
    indent="yes"
    media-type="application/xml"/>
  <xsl:variable  name="localroot" select="'file:///d:/web/noasobi/diary/'"/>
    <xsl:template match="/">
      <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
        <head>
          <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
          <link rel="stylesheet" href="{$localroot}style/base.css" type="text/css" />
          <link rel="stylesheet" href="{$localroot}style/firefox.css" type="text/css" media="screen,projection" title="Firefox" />
          <link rel="alternate stylesheet" href="{$localroot}style/pink.css" type="text/css" title="ピンク" />
          <title>朝顔日記 - <xsl:value-of select="child::rn:rNote/child::rn:Title"/></title>
        </head>
        <body>
          <div class="content">
            <h1>朝顔日記</h1>
            <div class="section">
              <h2><xsl:value-of select="child::rn:rNote/child::rn:Title" /></h2>
              <p class="date"><xsl:value-of select="child::rn:rNote/child::rn:Date" /></p>
              <div class="section">
                <xsl:apply-templates select="child::rn:rNote/child::x:Text/child::node()" />
              </div>
            </div>
          </div>
        </body>
      </html>
    </xsl:template>
    <xsl:template match="child::rn:rNote/child::x:Text/child::node()[boolean(child::x:img)!=true()]">
      <xsl:copy-of select="self::node()"/>
    </xsl:template>
    <xsl:template match="child::rn:rNote/child::x:Text/child::x:div/child::x:img">
      <div class="photo">
        <img>
          <xsl:attribute name="src">
            <xsl:if test="not(contains(attribute::src, ':'))">
              <xsl:value-of select="$localroot"/>
            </xsl:if>
            <xsl:value-of select="attribute::src"/>
          </xsl:attribute>
        </img>
      </div>
    </xsl:template>
</xsl:stylesheet>

これを、rNote の 記事ファイルの xml 宣言の次の行あたりに入れておくと、対応したブラウザを使うことでそれなりの表示すすることが出来ました。

ちなみに、私は バッファから送る を使って、xyzzy 上から手軽にブラウザに渡しています。

「ローカルで書いた rNote 用の xml をどうやって閲覧しよう?」へコメントをつける

この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2005/01/diary_050106b.html

続 rNote 用の xml をローカルで閲覧

2005-01-12

前回の ローカルで書いた rNote 用の xml をどうやって閲覧しよう? では、xml ファイルの始めのほうに以下のような記述をすることで、ローカルの xml な日記ファイルを閲覧できるようにしました。


<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="../../xml2html.xsl" type="text/xsl"?>

しかし、xml ファイルの方にスタイルシートの指定があるのはどうも美しくない気がして、違う方法を考えてみました。んで、考えたのが以下の php を間にかませる方式です。


<?php
header("Content-Type: application/xhtml+xml; charset=utf-8");

$xml_file = "file://".$_REQUEST["url"];
$xsl_file = "file://d:/web/noasobi/diary/entries/xml2html.xsl";
$xslt = xslt_create();
$data = xslt_process($xslt, $xml_file, $xsl_file);
xslt_free($xslt);
print($data);
?>

これを、ローカルなサーバ経由で見るようにすれば、xml にスタイルシートを指定する必要は無くなります。しかし、これを編集中のエディタからどうやってブラウザに渡したらいいでしょう?

悩むことしばし。なんかどっかで似たようなことしていたなぁと気がつきました。xyzzy から ローカルの cgi 版の htmllint に渡す lisp があるではありませんか。OKUBO Hiroshi さんとこの、browserex のおまけ(?)の lisp です。以下のように書き換えました。


 (defvar *preview-url* "http://127.0.0.1/noasobi/diary/preview.php?url=")
  (defun preview-diary ()
    (interactive)
    (let ((file (get-buffer-file-name)))
      (when file
        (shell-execute (concat *preview-url* file) t))))
  (define-key ed::*html+-mode-map* '(#\C-c #\C-l) 'preview-diary)

preview.phpは、rnote.php と同じ階層にあるので、前回やった css やイメージのパスを変換する必要はなくなったので、変換用の xml2html.xsl もシンプルになりました。


<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:x="http://www.w3.org/1999/xhtml"
  xmlns:rn="http://rinn.e-site.jp/rnote/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns="http://www.w3.org/1999/xhtml">
  <xsl:output method="xml"
    encoding="UTF-8"
    omit-xml-declaration="no"
    doctype-public="-//W3C//DTD XHTML 1.1//EN"
    doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
    indent="yes"
    media-type="application/xml"/>
  <xsl:template match="/">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <link rel="stylesheet" href="style/base.css" type="text/css" />
        <link rel="stylesheet" href="style/firefox.css" type="text/css" media="screen,projection" title="Firefox" />
        <link rel="alternate stylesheet" href="style/pink.css" type="text/css" title="ピンク" />
        <title>朝顔日記 - <xsl:value-of select="child::rn:rNote/child::rn:Title"/></title>
      </head>
      <body>
        <div class="content">
          <h1>朝顔日記</h1>
          <div class="section">
            <h2><xsl:value-of select="child::rn:rNote/child::rn:Title" /></h2>
            <p class="date"><xsl:value-of select="child::rn:rNote/child::rn:Date" /></p>
            <div class="section">
              <xsl:copy-of select="child::rn:rNote/child::x:Text/self::node()" />
            </div>
          </div>
        </div>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

これで、無事 xyzzy から ローカルな rNote 用の xml が閲覧できるようになりました。なお、これをするには、ローカルで Sablotron が動く必要があります。

「続 rNote 用の xml をローカルで閲覧」へコメントをつける

この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2005/01/diary_050112a.html

link 要素を追加したりアレコレ(何)

2005-01-16

rNote に移行した際に、head 要素が地味に(?)になっていたので、多少賑やかにしたりしました。あと、profile.html (何)がアクセスできないようになっていた辺りも修正しました。

とまぁ色々こまごました事をした関係上、キャッシュの再構築の必要に迫られたというわけでぶっちゃけ修正 age です。(ぉ

「link 要素を追加したりアレコレ(何)」へコメントをつける

この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2005/01/diary_050116a.html

rNote 用の xml に dc:date を追加

2005-01-16

rNote のデフォルト設定では、Date 要素から RSS の更新日時を拾うようになっているわけですが、私は書いた日にちをここに入れているために後日記事を編集した場合に、RSS の dc:date はどうしたらいいものかと考えていました。時間も入れたいものでね。

ということで、最初に書いた日にちとは別に最終更新日時も元の xml に入れて置くしかないという結論に達し、dc:date を元の xml にもいれて置くようにしました。dc:date に時間を入れたい で書いた、date.php を書き換えて、日記更新時に Date 要素ではなく、dc:date を書き換えるようにしました。もっとも、いまだ過去の分に時間が入っていないので RSS の dc:date に時間が入るのはまだ先になりそうですが。

ついでなんで、このサイトで使っている xml の雛型でも書いておこう。


<?xml version="1.0" encoding="UTF-8"?>
<rNote xmlns="http://rinn.e-site.jp/rnote/"
xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="ja">
<Title>@POINT@</Title>
<Description></Description>
<Date>@DATE@</Date>
<dc:date>@DATETIME@</dc:date>
<Class></Class>
<Id>@BASEFILENAME@</Id>
<Text xmlns="http://www.w3.org/1999/xhtml">

</Text>
</rNote>

@POINT@ とかは、エディタ = xyzzy が使うもので、ファイルに雛形挿入する時にいい按配にアレコレしてくれるおまじない(何)です。template-insert という lisp を利用しています。

<Text>~<Text> に日記本文を xhtml で書くような構造になっています。

「rNote 用の xml に dc:date を追加」へコメントをつける

この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2005/01/diary_050116b.html

rNote 用の xml を再度見直し

2005-01-17

rNote デフォルトの xml の Text 要素の名前空間は、xmlns="http://www.w3.org/1999/xhtml" となっているんですが、なんか妙だなと思いつつこれまでは、内部的に使うものだからまぁ動けばよかろうということで放置していました。が、掲示板にて、北村さんにご指摘いただいたのを機に、何とかしてみることにしてみました。なんか改造しないといけないかと考えて、どうやってやるかなぁとか考えていたんですが単に設定を替えて、スキンファイルを直すだけでできました。

これまでは、<Text xmlns="http://www.w3.org/1999/xhtml"> だったのを、<body xmlns="http://www.w3.org/1999/xhtml"> と変えました。それに伴い、ファイル750個くらい置換。これでとりあえず違和感がなくなりました。他の語彙なんかもダブリンコアとかのにしようかなぁ、とか考えてもいるのですが、とりあえず今回はここだけ。

神崎先生のセマンティック・ウェブのためのRDF/OWL入門 をよく読んでからまた考えたいと思います。:p)

[ このエントリへはコメント出来ません ]

この記事へのツッコミ

1: のり (2005-01-17T16:23:41+09:00) nori@noasobi.net
コメントも不調だったのでそこらもついでにテスト
2: りん (2005-01-18T12:54:21+09:00)
名前空間の接頭語が有効になるのは「名前空間を定義したタグの内部」であって、定義してるタグ自体は含まない気が…

<rn:rNote xmlns:rn="http://rinn.e-site.jp/rnote/">
<rn:Title>日記ー<rn:Title>
<rn:Text xmlns="http://www.w3.org/1999/xhtml">


上記のようになってて、単純に rn: が省略されてると考えると判り易いと思う。

…それとも、私、もしかして大きな勘違いしてるのかな?
一度ちゃんと調べてみよう。
3: りん (2005-01-18T13:39:03+09:00)
調べました。
…すみません、どうも私が間違っていたようです。

http://www.w3.org/TR/REC-xml-names/ の 5.2 Namespace Defaulting によると
「デフォルト名前空間は,それが宣言された要素(その要素が名前空間接頭辞をもたない場合)、及びその要素の内部にあるすべての接頭辞がない要素に適用されるものとする。」
という事のようです。

さーて困った、どうしよう…?
4: Ai (2005-01-19T10:45:19+09:00)
>>2-3

I think your example here works well, but the old, current one doesn't. If you want to use XHTML elements WITHOUT prefix, you have to undefault "...rinn.e-site.jp/rnote/" because Text element should be under that namespace, not under the XHTML namespace. So, I think you just have two choices:

1)This is the one I recommend:
<rn:rNote xmlns:rn="http://rinn.e-site.jp/rnote/">
<rn:Text xmlns="http://www.w3.org/1999/xhtml">
<em>any XHTML elements</em>

In here, you need to put "rn" prefix for non-XHTML elements.

2) This is the one I will choose for my CMS tool "Icho":
<rNote xmlns="http://rinn.e-site.jp/rnote/">
<Text>
<em>any XHTML elements</em>

In this file, the em element is not an element defined by XHTML, but by rNote, so that you need to deal with it as one of the elements different from ones in XHTML. Users use it as well as they use in XHTML, though.
5: Ai (2005-01-19T10:59:31+09:00)
Additionally, the name "Text", I think, isn't really appropriate because the word "text" implies more like plain text, not like parsable and markupped text, doesn'it? I would markup a list of metadata, such as rn:Date and rn:Title, as children of a rn:Head element, and change the name rn:Text to rn:Body. Doesn't it make more sense? Example:
<rn:Article xmlns="{XHTML}" xmlns:rn="{rNote}">
<rn:Head>
<rn:Title>Why I'm Using English</rn:Title>
</rn:Head>
<rn:Body>
<p>It is a secret.</p>
</rn:Body>
</rn:Article>
6: りん (2005-01-19T13:06:58+09:00)
いや、「困った、どうしよう…?」というのは、「正しい書き方が判らない」と言う意味ではなく「ああ、間違ったものをいっぱい配布してしまった、どうしよう…?」という意味です。

まぁ、この件には関係なく、どっちにしろ次バージョンではCDATAセクションを認識出来るようにして

<Text><![CDATA[
(本文)
]]></Text>

みたいな書き方が出来るようにしようと思ってました。現状だと記事ファイルを Well-formed にするには本文も xhtml にしないといけないのでー
xmlにコダワル方にはこの記述を推奨という事にすれば万事解決かな?:-)
7: のり (2005-01-19T19:35:37+09:00) nori@noasobi.net
一度配布して、形式がすでに流通しているんで、形式の変更は混乱を伴いそうで難しい問題ですね。しかし、名前空間を入れて運用している人はどのくらいいるんでしょうか。入れている人なら自力で何とかできるような気もします。
CDATA セクションですが、試してみたところ、現状でも使えるようです。って、考えていることが違うのかな。とにかく、次期バージョンが楽しみです。
8: のり (2005-01-19T19:39:53+09:00) nori@noasobi.net
ところで別件ですが、
<html xml:lang="ja" xmlns="http://www.w3.org/1999/xhtml">
みたいのだと、autolink が誤動作しているようですね。
9: Ai (2005-01-20T03:29:33+09:00)
I don't think giving a CDATA section is a good way because any parser cannot parse CDATA section as XML. I know you use PHP to read the XML file, but other people might use XSLT, instead. In my opinion, thus, advantages of XML will die if you put CDATA section in it. If you really want to use CDATA, I recommend just using plain text (CSV? CST? anyway comma-separated text) that needs less amount of text than XML need.
10: Ai (2005-01-20T03:40:22+09:00)
>>6
> 記事ファイルを Well-formed にするには本文も xhtml にしないといけないので
I don't really understand this part here. Well-formed XML means just parsable text under the correct grammer of XML, I believe.

Additionaly, I don't know why you don't take the first choice, where you put rn prefix with rNote vocabulary. Is there any problem with it, or you just don't like prefix?

ローカルの PHP を 5.0.3 にしたら…

2005-01-22

特に思うところがあったわけではないのですが、なんとなくローカルの PHP を 4.3.10 から 5.0.3 に変えてみた。すると、続 rNote 用の xml をローカルで閲覧 で書いた php スクリプトがエラーを吐くようになってしまいました。てっきり libxslt の組み込みとかに失敗しているに違いないと思ってあれこれ調べてみますが、改善されません。むーん困った。

ところが、phpinfo() してみるとちゃんと組み込まれているではないですか!ってことで Do You PHP? - PHP5.0.x以降のXSLTサポート手順 のサンプルを試してみたところうまく動作します。ありゃりゃ、単に私の書いたスクリプトがおかしいだけでした。:p)

ということで、php5 で動作するように書き換えた rNote の xml を xslt を使ってローカルで閲覧するためのpreview2.php です。


<?php
header("Content-Type: text/html; charset=utf-8");

// XMLファイルの読み込み
$xml = new DomDocument();
$xml -> load("file://".$_REQUEST["url"]);

// XSLファイルの読み込み
$xsl = new DomDocument();
$xsl -> load("file://d:/web/noasobi/diary/entries/xml2html3.xsl");

// XSLTプロセッサオブジェクトの作成と使用するXSLの指定
$processor = new xsltprocessor();
$processor->importStyleSheet($xsl);

// 変換&結果の表示
print $processor->transformToXML($xml);
?>

「ローカルの PHP を 5.0.3 にしたら…」へコメントをつける

この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2005/01/diary_050122a.html

Firefox 拡張、Tab Mix を入れてみた

2005-01-23

Latest topics - outsider reflex 経由で Firefox のタブ回りの機能を強化する拡張、Firefox Extension: Tab Mix を知ったので試してみた。

機能は設定画面を見ていただけばわかるかと思うので、以下スクリーンショット。まずはリンク関係の設定です。

Link 設定のスクリーンショット

リンクを新規タブで開くのか、窓で開くのかなどの設定が出来ます。おまけ(?)で JavaScript 関係も少々。ブックマークをクリックしたときや、検索バーからの検索結果を新規タブで開くようにとかできます。

Tab 設定のスクリーンショット

タブを開いたときにどれにフォーカスするかとそこらへんの設定を行います。

Appearance 設定のスクリーンショット

タブバーの表示に関する設定です。多段タブも選択できます。私の環境では、多段タブにせずにスクロールする設定にしても、なぜかスクロール用のボタンが表示されませんでした。タブバー上のホイールスクロールでも切り替えられるのでそれでしのいでいます。

Mouse 設定のスクリーンショット

マウスに操作に関する設定です。タブのドラッグによる移動などをサポートします。また、タブのダブルクリックにいくつかの機能を割り当てることができます。私はタブの複製の機能を割り当ててみました。

最近は、Firefox のネイティブなシングルウィンドウモードに、miniTDuplicate Tab などを使っていましたが、Tab Mix だけあれば事足りるようなのでしばらくこれでいってみたいと思います。

ちなみに、閉じたタブを再度開きなおすといういわゆるアンドゥはまだ実装されていないので、All-in-One Gesture の機能でそれを行っています。デフォルトでは割り当てられていないので、下右上(DRU)に割り当てています。一応 U の字のつもり。

Tab Mix Plus (0.2.2) を入れてみた にて、0.2.2 についてなんか書いてみました。

「Firefox 拡張、Tab Mix を入れてみた」へコメントをつける

トラックバック

1: ほうりんじつうしん Weblog/Firefox用拡張,Tabbrowser ExtensionsとTab Mix (2005-01-24T00:26:13+09:00)
タブブラウザの機能を便利にする拡張について,話題になっていたのでメモ。 タブ拡張...
2: 今日の思うところ Palm Think Music/Tab Mix (2005-01-24T01:22:46+09:00)
Firefoxのカスタマイズでは参考にさせてもらってる四畳半 裸電球 日記帳さんで知った新しいタブ関係のエクステンションTab Mixです。早速日本語化されてるのでTab Mix 日本語化からダウンロード。今の環境はバックアップして素の状態のFirefoxにインストールしてみました。長い時間使ったワケじゃないんですけど、これ、良いですね。人それぞれ求めるモノは違うと思いますが、最低限の事はできると思います。個人的には今の環境から、また新たにやり直すのも面倒だし、もうちょっと様子見ようかなぁって感じなんだけど、もしかしたらタブ関係では一番人気になるかもしれないです。朝顔日記 - Firefox 拡張、Tab Mix を入れてみたで、スクリーンショットを使った設定等の細かい説明を書かれてますので、どんなことができるのかが分かりやすいと思います。もうちょっと早くこのエクステンションが出てれば、この前書いたカスタマイズはしなかったでしょうねぇ。あれだけいじったから、今の環境を使いたいってのもあるのかも。...
3: 注目サイト探訪記。。。など/[Firefox]Firefoxを使って見ました。 (2006-10-01T23:54:47+09:00)
Firefox最新版ダウンロードはこちら さらに一般的なタグブラウザ(Donut、Operaなど)とは、サーフィン中にリンクをクリックした際に、 同じタブで開いたり、新しいウィンドウが開いたり・・・やっぱり新しいタブが開くほうが良いと 思って調べて見ると・・・やっぱりあるんで
この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2005/01/diary_050123a.html

最後の宿泊学習

2005-01-26

某小学校がこの3月で閉校になるのですが、今年も冬の宿泊学習の講師を頼まれたので24~25日に行ってきました。最後の宿泊学習です。

24日は例によってイグルー作り。生徒は6、7人くらいでひとつのイグルーを作ります。私も父兄と一緒に3人で一つ作りました。今年は雪も豊富でかつまた適度に湿った雪だったのでブロックが作りやすく、ほぼ正味1時間強で写真のようなイグルーを完成させることが出来ました。風除けの塀付です。

完成したイグルーの画像

晩には、もちろん中で祝杯。焼酎のお湯割がうまかったです。結局、泊まったのはイグルーではなくテントなんですが。24日は朝方の冷え込みがきつく25日も冷え込みが心配されたのですが、夜半から雪が降りだし、幸い放射冷却はなく温かい朝を迎えることが出来ました。以下、朝のテントの様子。

朝のテントの様子

25日は午前中は例年どおりクロカンスキー。昼食を食べて帰ってきました。

ところで、宿泊学習を行った国立立山少年自然の家は、食事が大変よくて気に入っているんですが、今回もおまけに食事の画像を載せておきましょう。バイキング形式でお代わりは自由で、コーヒーやジュースなどの飲み物もフリーです。

24日の昼食の画像
24日の夕食の画像
25日の朝食の画像
25日の昼食の画像

「最後の宿泊学習」へコメントをつける

この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2005/01/diary_050126a.html

約束はできない

2005-01-26

先日注文していた 約束はできない が昨日届いた。向井千恵さん率いる、Che-SHIZU というバンドの CD です。音源は84年に出されたアナログ音源が元らしい。84年といえば今から20年位前のことでその頃は私も似たようなアングラな演奏をしていた頃です。聴いてみるといやぁ懐かしいですな。当時はそうは思わなかったのですが今聴いてみると、結構自分がやっていたものに似たところがあるなと思いました。当時似たようなことをやっていたバンドは同じく似たようなものだったのかもしれませんが。一応曲目を書いておこうかな。

  1. I'm dancing in my heart ~ 祭歌
  2. 連舞
  3. 君が目
  4. 火の海
  5. 月と明り窓
  6. 約束はできない
  7. 黒い瞳の
  8. カチューシャ
  9. プレパダ
  10. 輪舞
  11. 三度目は武装して美しく無関心
  12. 英雄

くせがあるので万人にオススメというわけではないですが、オススメです。

「約束はできない」へコメントをつける

この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2005/01/diary_050126b.html

URL をメモる何か

2005-01-30

ともさんが、RssMemo をパクったや、RssMemo あれこれにて面白そうなことを始めて、実際にさわらせてもらったりしたらうらやましくなったので、自分でも URI を説明つきで簡単にメモできるスクリプトを作ってみた。以下、memo.php です。


<?php
// 設定
$log = "./memo.log";                // 保存するログ
$pass = "hoge";                     // 投稿用パスワード
$items_num ="100";                  // メモの保存件数
$script = "http://hogehoge/memo/memo.php";  // メモの uri
$TZD = "+09:00";                    // タイムゾーン
$memo_title = "URI メモ";           // html のタイトル

$lines = file($log);
if ($_POST['write'] && $_POST['link'] && $_POST['title'] && $_POST['pass']== $pass  ) {
  $title = htmlspecialchars($_POST['title']);
  $link = strip_tags($_POST['link']);
  $description = strip_tags($_POST['description']);
  $description = str_replace("\r\n", "<br />", $description);
  $description = str_replace("\r", "<br />", $description);
  $description = str_replace("\n", "<br />", $description);
  $time = date("Y-m-d\TH:i:s").$TZD;
  $data = "$title\t$link\t$description\t$time\n";
  array_unshift($lines, $data);
}

if ($_GET['title']){
  $title = mb_convert_encoding($_GET['title'],"utf-8","auto");
}
if ($_GET['link']){
  $link = $_GET['link'];
}
if ($_GET['description']){
  $description = mb_convert_encoding($_GET['description'],"utf-8","auto");
}

?>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<link rel="stylesheet" href="main.css" type="text/css" media="screen,projection" />
<title><?php print($memo_title); ?></title>
</head>
<body>
<h1><?php print($memo_title); ?></h1>
<ul>
<li><a href="#form">投稿フォーム</a></li>
<li><a href="memo_rss.php"><img src="../img/rss.png" alt="RSS" /></a></li>
</ul>
<h2>メモ</h2>
<dl>
<?php
foreach($lines as $line) {
  $line = rtrim($line);
  $items = explode("\t", $line);
  print("<dt><a href=\"{$items[1]}\">{$items[0]}</a> <span>{$items[3]}</span></dt>\n");
  print("<dd>{$items[2]}</dd>\n");
}
$fp = fopen($log, 'w');
flock($fp,2);
$i = 0;
foreach($lines as $line) {
  $i++;
  if($i <= $items_num){
    fputs($fp, $line);
  }
}
flock($fp,3);
fclose($fp);
?>
</dl>

<h2 id="form">メモ投稿フォーム</h2>
<form method="post" action="<?php print($_SERVER['PHP_SELF']); ?>">
<p><label for="title">Title</label> : <input type="text" name="title" id="title" size="80" value="<?php print($title); ?>"/></p>
<p><label for="link">Link</label> : <input type="text" name="link" id="link" size="80" value="<?php print($link); ?>" /></p>
<p><label for="description">説明</label> : <br />
<textarea name="description" cols="60" rows="4" id="description"><?php print($description); ?></textarea></p>
<p><label for="user">User</label> : <input type="text" name="useer" id="user" size="20" value="" /></p>
<p><label for="pass">Password</label> : <input type="password" name="pass" id="pass" /></p>
<p><input type="submit" name="write" value="送信" /></p>
</form>
<p><a href="javascript:if%20(navigator.appName.indexOf('Internet%20Explorer')%20!=%20-1)%20{%20sT=encodeURIComponent(document.title);%20sL=encodeURIComponent(location.href);%20sD=encodeURIComponent(document.selection.createRange().text);%20}%20else%20{%20sT=encodeURIComponent(document.title);%20sL=encodeURIComponent(location.href);%20sD=document.getSelection();%20}%20if%20(sL%20!=%20'')%20{%20uri%20=%20'<?php print($script); ?>?title='%20+%20sT%20+%20'&amp;link='%20+%20sL%20+%20'&amp;description='%20+%20sD;%20location.href%20=%20uri;%20}">投稿用ブックマークレット</a></p>

</body>
</html>

ログを保存するファイルには、パーミッション、666 など書き込み可にしておく必要があります。

とりあえず誰でも投稿できるサンプルも設置して置きます。適当にいじってみてください。最新20件のみ保存します。私が実際に使っているのは、URI メモ です。

なお投稿用のブックマークレットは、RssMemo より拝借しました。メモしたいページで適当な部分を範囲選択してブックマークレットを起動すると、ページタイトル、URI、選択範囲をコピーしてメモ投稿フォームに貼り付けてくれます。便利なものありがとうございます。> Kyo Nagashima さん

この memo.php のライセンスは Creative Commons Attribution Non-Commercial です。

バグ、ハケーンしたので微修正。スマソ

「URL をメモる何か」へコメントをつける

この記事へのツッコミ

1: jac (2005-12-28T02:12:19+09:00)
こんにちは!いつも勉強させて頂いてます。いきなり質問なんですが,誰でも投稿できるサンプルの方はlogへの書き込みが新しいものが頭にきてますよね?上記のURLメモも同じようにするには,どうしたらいいでしょうか?
2: のり (2005-12-28T11:06:38+09:00)
jac さん、こんにちは。
上記のスクリプトでも新しいメモが上に来るようになっているはずなんですが、なりませんかね?
いずれにしろ、上のものを改良した Watson さんのスクリプトの方がいいかもしれません。私も現在はそっちを改造したものを使っています。:p)
http://scrlab.g-7.ne.jp/diary/200502.php#D06
3: jac (2006-01-06T17:37:19+09:00)
なりました。ありがとうございました。
この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2005/01/diary_050130a.html

memo.php 用の RSS を生成する何か

2005-01-30

URL をメモる何か は、タブ区切りのテキストでログを保存しているわけですが、このログから RSS 生成する PHP スクリプト、memo_rss.php も作ったのでこれも公開しておきます。

次のお楽しみ(何)のためには、なにはともあれ RSS を出しておかないことには話にならないので。(謎)

ところで、設定部分が、memo.php とダブるので別ファイルにしてインクルードしておいたほうがよかったかな。まぁ次はそうしよう。


<?php
header("Content-Type: application/xml; charset=utf-8");
// 設定
$log = "./memo.log";                // 保存するログ
$TZD = "+09:00";                    // タイムゾーン
$memo_title = "URI メモのサンプル";           // html のタイトル
$rss_discription = "簡単な説明つきで URI をメモする何かのサンプルの RSS";
                                    // RSS の説明
$lines = file($log);
?>
<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://purl.org/rss/1.0/"
xmlns:rss="http://purl.org/rss/1.0/"
xml:lang="ja">
<channel rdf:about="<?php print($rss); ?>">
<title><?php print($memo_title); ?></title>
<link><?php print($script); ?></link>
<description><?php print($rss_discription); ?></description>
<dc:date><?php print date("Y-m-d\TH:i:s", filemtime($log)).$TZD;?></dc:date>
<items>
<rdf:Seq>
<?php
foreach($lines as $line) {
  $line = rtrim($line);
  $items = explode("\t", $line);
  print("<rdf:li rdf:resource=\"".$items['1']."\"/>");
}
?>
</rdf:Seq>
</items>
</channel>
<?php
foreach($lines as $line) {
  $line = rtrim($line);
  $items = explode("\t", $line);
  $categories = explode(" ", $items['4']);
  print("<item rdf:about=\"".$items['1']."\">\n");
  print("<title>".$items['0']."</title>\n");
  print("<link>".$items['1']."</link>\n");
  print("<dc:date>".$items['3']."</dc:date>\n");
  foreach($categories as $category){
    print("<dc:subject>".$category."</dc:subject>\n");
  }
  print("<description>".$items['2']."</description>\n</item>\n");
}
?>
</rdf:RDF>

メモのほうの仕様変更に伴い tag を dc:sbuject を列記する形で出力するように追加

「memo.php 用の RSS を生成する何か」へコメントをつける

この記事へのツッコミ

1: toshi (2006-05-21T01:33:54+09:00)
「memo.php 用の RSS を生成する何か」を少し改良させていただき,公開しました。

トラックバック

1: toss idea cube/「memo.php 用の RSS を生成する何か」をいじる (2006-05-21T01:26:19+09:00)
memo.php 用の RSS を生成する何かを少し改良してみたので,公開します。改良点・xml宣言を関数で出力(環境によっては出力できない現象に対応)・dc:titleの追加(多くのRSSリーダーで
この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2005/01/diary_050130b.html

もじら組 wiki 検索プラグインを作ってみた

2006-01-05

もじら組 Wiki のサイト内検索をするための Firefox 用の検索プラグインを作ってみました。

アイコンが手抜きなので、誰か何とかしてください。:p)

「もじら組 wiki 検索プラグインを作ってみた」へコメントをつける

この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2005/01/diary_060105a.html