朝顔日記2006/3月 -

rNote に tag を装備したい

publish
2006-03-07T18:56:14+09:00
tags
はてぶ

rNote にはカテゴリー分けの機能はあるのですが、ディレクトリ分け = カテゴリー分けという構造になっているために、ひとつの記事が複数のカテゴリーにまたがって存在するということが出来ません。しかし、やってみたい。←わがまま

ということで、なんとかするべくアレコレ試しています。いずれやってみたいと思っていたので、このサイトの場合、rNote の記事の元になる xml ファイルには、カテゴリー分けのための要素を書いてあります。Class という要素を作って、以下のような感じで書いてあります。


<Class>web site</Class>

これは、web と site というカテゴリーに属しているという意味です。空白区切りですね。本当は空白区切りとかではなくリストにした方が何かとよさげなんですが、rNote の実装の都合上、このようにしています。(もしかしたら違うかも)

この Class 要素を、rNote のサイト管理で使う、file.cache というファイルに反映するように rNote 本体(rnote.php)をいじって改造しました。これにより、file.cache の中身は、1行ごとに、以下の構造をもつようにしました。ここでは、\t はタブをあらわします。

エントリー xml の場所\tタイムスタンプ\t記事のタイトル\tツッコミ&トラックバック受付日数\tタグ

file.cache をこのように出力するように改造してしまえば、あとは何とかなりそうです。ということで、試しに作ってみたのが以下のテストページと php スクリプトですです。

しかし、これをどうやって rNote に組み込もう。記事ごとに、tag を埋め込むやり方が思いつかないんですよねぇ。tag がひとつしかない場合はいいんすが、複数あるときにどうやって分離したらいいかってあたりで詰まっています。困った。

と、今回は rNote を使っていない人とか、使ってる人にもよくわからない記事になってしまいました。:p) スマソ。

rNote の file.cache に tag を埋め込む に続く

[ 「rNote に tag を装備したい」へコメントをつける ]

この記事へのツッコミ

1: 鯖缶 (2006-03-07T20:21:09+09:00)
記事にtagを埋め込むのはskinで実現したら良いんじゃないかと思います。
Classという要素がxmlファイルにあったら、skinにtagを表示すると。
あとは表示したtagのアンカーをクリックしたら同一tagでソートした表示をする等。
tagは検索なんかで有用になってくると思いますから、期待しています :-)
2: のり (2006-03-08T00:21:52+09:00)
例えば、<a href="labelview.php?label=<%=$Class%>"><%=$Class%></a> みたいなことをするとしますよね。
Class の中身が例えば、ua だけなら、
<a href="lavelview.php?label=ua">ua</a>
なんてのが展開されて期待通りなんですが、<Class>ua tool</Class> となっていると、
<a href="lavelview.php?label=ua tool">ua tool</a>
になってしまい、ちと困るわけです。このままでも検索は出来るのでしょうが、順番もこの通りのアンド検索になってしまいます。
ですからこれは、
<a href="labelview.php?label=ua">ua</a>

<a href="labelview.php?label=tool">tool</a>
といった具合にふたつに分けたいわけです。なんかうまい方法ないですかねぇ
3: Kaz@sleeper (2006-03-08T04:14:03+09:00)
銀杏の木さんちのTechnoratiのTags対応スキンを応用すればどうでしょう
http://ichounoki.info/rnote/rnote.php?u=software/20050620_0059.htm
カンマ区切りですけど
4: 鯖缶 (2006-03-08T07:54:03+09:00)
クラス要素が複数ある場合は、skin内でstrtok関数でも使って、別々にアンカーを作成したら良いかと思います。
#尤もstrtok関数で区切り記号に、スペースが使えるかが問題ですけど。
5: 鯖缶 (2006-03-08T07:55:35+09:00)
連続で書き込みすみません。。。
クラス要素が複数ある場合 X
クラス要素の中身が複数ある場合 ○
に訂正させてください。
6: のり (2006-03-08T12:40:01+09:00)
ああ、なるほど skin にスクリプトを埋めこめばいいんですね。
銀杏の木さんところのやり方そのままでうまくいきました。こんな感じ。
<if def_tag="Class">
<dt>tags</dt>
<?php
$string = '<%=$Class%>';
$tkn = strtok($string," ");
while($tkn) {
print "<dd><a href=\"labelview.php?label=".$tkn."\">".$tkn."</a></dd>";
$tkn = strtok(" ");
}
?>
</if>
あとは現状、file.cache の日付情報でソートしていますが、xml の方に書いてある日付情報でソートするようにとか、アレコレすれば一応所期の目的は達成されそうです。
みなさん、情報ありがとうございました。
この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2006/03/diary_060307a.html

rNote の file.cache に tag を埋め込む

publish
2006-03-10T18:14:52+09:00
tags
はてぶ

順番が逆になったみたいですが、先日書いた rNote に tag を装備したい の続きです。

先日は書かなかった、rNote の file.cache に、タグ情報を載せるための rnote.php の改造方法を書いておきます。本来ならば、diff の結果を書いておけばよさげなんですが、他にも改造している箇所があるので、tag を埋め込む部分だけ抜き出して書いておきます。

まず、rNote の設定ファイル、rnote_config.php に追加する分です。タグ名設定の設定辺りに以下を追加します。私は、Class 要素にしましたが要素名は適当に。


define(TAG_LABEL,'Class');      //タグ用

定数名を TAG_TAG とかにするとややこしいことになりそうだったので、TAG_LABEL を使いました。:p)

さて、次はいよいよ rnote.php の改造です。

最初のほうにある、$g_filelist; のところに1行追加して以下のようにします。


$g_filelist;
define(FILELIST_DATE,0);
define(FILELIST_TITLE,1);
define(FILELIST_WBACCEPT,2);
define(FILELIST_LABEL,3);

次は、オリジナル rnote.php の720行目付近の file.cache を生成するところ、GetFileList 関数を書き換えます。オリジナルは以下の通り。


      $title = get_XMLTag(TAG_TITLE,$datafile);
      $title = preg_replace("/[\t\n\x0b\x0c\r]/",'',strip_tags($title));
      $titlelist[$dir.$file][FILELIST_TITLE]    = $title;
      $titlelist[$dir.$file][FILELIST_WBACCEPT] = get_XMLTag(TAG_WBACCEPT,$datafile);
      $num++;
    }

ここを以下のように。


      $title = get_XMLTag(TAG_TITLE,$datafile);
      $title = preg_replace("/[\t\n\x0b\x0c\r]/",'',strip_tags($title));
      $label = get_XMLTag(TAG_LABEL,$datafile);
      $label = preg_replace("/[\t\n\x0b\x0c\r]/",'',strip_tags($label));
      $titlelist[$dir.$file][FILELIST_TITLE]    = $title;
      $titlelist[$dir.$file][FILELIST_WBACCEPT] = get_XMLTag(TAG_WBACCEPT,$datafile);
      $titlelist[$dir.$file][FILELIST_LABEL]    = $label;
      $num++;
    }

次は、オリジナルの752行目付近の CreateFileCache 関数のところです。


      $temp = "$fname\t$date\t".
        $titlelist[$fname][FILELIST_TITLE]."\t".
        $titlelist[$fname][FILELIST_WBACCEPT]."\n";
      fwrite($fp,$temp);
    }

ここは以下のように。


      $temp = "$fname\t$date\t".
        $titlelist[$fname][FILELIST_TITLE]."\t".
        $titlelist[$fname][FILELIST_WBACCEPT]."\t".
        $titlelist[$fname][FILELIST_LABEL]."\n";
      fwrite($fp,$temp);
    }

FILELIST_WBACCEPT のところの、\n\t に書き換えるのを忘れないように。

次は、オリジナルの778行目の ReadFileCache 関数の終わりのほうです。


foreach($filelist as $a){
      list($fname,$date,$title,$wbaccept) = explode("\t",str_replace("\n",'',$a));
      $g_filelist[$fname][FILELIST_DATE] = $date;
      $g_filelist[$fname][FILELIST_TITLE] = $title;
      $g_filelist[$fname][FILELIST_WBACCEPT] = $wbaccept;
    }

ここを以下のように。

    foreach($filelist as $a){
      list($fname,$date,$title,$wbaccept) = explode("\t",str_replace("\n",'',$a));
      $g_filelist[$fname][FILELIST_DATE] = $date;
      $g_filelist[$fname][FILELIST_TITLE] = $title;
      $g_filelist[$fname][FILELIST_WBACCEPT] = $wbaccept;
      $g_filelist[$fname][FILELIST_LABEL] = $label;
    }

次はすぐ下、オリジナルの800行目付近の FileCache_AddEntry 関数のところです。


function FileCache_AddEntry($fname,$date,$title,$wbaccept){
  $filelist = _file(FNAME_FILECACHE);
  array_unshift($filelist,"$fname\t$date\t$title\t$wbaccept\n");  // add new entry
  $fp = _fopen_wb(FNAME_FILECACHE);
  foreach($filelist as $a) fwrite($fp,$a);
  fclose($fp);

ここを以下のように。


function FileCache_AddEntry($fname,$date,$title,$wbaccept,$label){
  $filelist = _file(FNAME_FILECACHE);
  array_unshift($filelist,"$fname\t$date\t$title\t$wbaccept\t$label\n");  // add new entry
  $fp = _fopen_wb(FNAME_FILECACHE);
  foreach($filelist as $a) fwrite($fp,$a);
  fclose($fp);

以上で終わりです。多分。:p)

この改造によって、file.cache は以下のような構造を持つようになります。\t はタブをあらわしています。

2006/03/diary_060307a.xml\t1141720871\trNote に tag を装備したい\t\ttool site

改造に失敗しても、私にはどうしようもないので試してみられる方はしっかりバックアップをとった上で、自己責任で試してみてください。

なお、この改造の使い道については、rNote に tag を装備したい をどうぞ。そっちもまだまだいじりたいんですけどね。

ということで、タグを装備した rNote 暫定運用中です。

ちなみに、現在私が使っているエントリー用の 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><!-- 記事のタイトル --></Title>
<Description><!-- 記事の概要 --></Description>
<publish><!-- 初出の日時 --></publish>
<update><!-- 更新があればその日時 --></update>
<Class><!-- いわゆるタグを空白区切りで --></Class>
<Id><!-- 記事のID --></Id>
<body xmlns="http://www.w3.org/1999/xhtml">
<!-- ここに本文 -->
</body>
</rNote>

関連
rNote の file.cache に description を埋め込む
tag ごとの RSS

[ 「rNote の file.cache に tag を埋め込む」へコメントをつける ]

この記事へのツッコミ

1: 鯖缶 (2006-03-10T19:18:47+09:00)
素晴らしい ;-)
あとは検索でキーワードとTagの組合せで絞込みとか出来たら最強かもしれませんね。
コードは後学の為の参考にさせて頂きます。
この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2006/03/diary_060310a.html

黒菱山救助訓練山行の画像

publish
2006-03-13T20:03:09+09:00
tags
はてぶ

3月11日(土)~12日(日)にかけて、積雪期の山岳遭難救助訓練に行ったときの模様を雪洞作りをメインにアップしておきます。

当日の大まかな行動記録については、Another 朝顔日記 - 積雪期遭難救助訓練 1日目 ならびに、Another 朝顔日記 - 積雪期遭難救助訓練 2日目 を参照のこと。

まず最初は、杉林を抜けて焼山、黒菱山の稜線近くになってスッキリしたあたり。

焼山付近の画像

これも稜線まじかの画像。奥に見えているのが焼山。

焼山付近の画像

焼山付近から黒菱山方向を向いた稜線の様子。奥に見えるのは黒菱山ではない。もっと奥。

焼山付近の稜線の画像

今回のメインイベント(?)雪洞作り。まず斜面を切り出して平らな面を作り、横穴を掘る。今回は3箇所から掘り進めた。中へ入って掘る人と外で除雪する人が必要。深くなるにつれ、中で作業する人が増える。中に入ると姿勢が悪くかなりハードなので、交代で作業を行った。

横穴を掘り始めたところの画像

かなり掘り進み、中で3箇所の穴が繋がった状態。

内部工事の様子

完成まじかで内装工事。天井部分はツルツルに仕上げておかないと後で雫がたれて泣きを見ることになるので念入りに。壁の部分も居住性を上げるために、地面から垂直になるように削る。

内装工事中の画像

完成した雪洞でくつろぐ面々。私のいる場所はほぼ中央付近だったので、後にもほぼ同じくらいのスペースがある。今回は特別巨大な雪洞を作りましたが、普通はここまで大きなものを作ることはめったにないと思われます。ちなみに製作時間はほぼ3時間です。

完成した雪洞でくつろぐの図

入り口には、ツェルトと呼ばれるビバーク用のテントを吊り下げて風雪を防いだ。これは12日朝の様子。夜半からの雨が雪に変わったので、雪が積もっている。また、雪のブロックで壁を作り風除けにしてある。

雪洞の入り口の様子

12日の幕営地の前の様子。降雪はさほどでもないが、ガスがかかってあまり視界はよくない。

朝の様子

雪洞は作るのは大変ですが一度作ってしまえば、外は大荒れでも中は静かで穏やかな空間が確保されるし、なんと言っても楽しいのでみなさんも是非一度作って泊まってみましょう。:-)

[ 「黒菱山救助訓練山行の画像」へコメントをつける ]

この記事へのツッコミ

1: yamanouta (2006-03-13T20:37:04+09:00)
私らは1週間前の日曜日、小川ダムから登って大地、黒菱を経由、大平に降りましたがその時は好天でしたが、皆さんの訓練の時は悪天候で大変だったと思いますご苦労様でした。私は寒さにとても弱く好天の黒菱手前のピークでも長居出来ませんでした。雪洞での泊まりとても魅力が有りますが、夢のようですが無理かも。
この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2006/03/diary_060313a.html

URI メモをエクスポート

publish
2006-03-14T17:56:01+09:00
tags
はてぶ

URI メモ を opml 形式でエクスポートできるようにしてみました。

使う人は私しかいないと思いますが、一応コードも晒しておきましょう。


<?php
header("Content-Type: application/xml; charset=utf-8");
?>
<?xml version="1.0" encoding="utf-8"?>
<opml version="1.1">
<head>
<title>URI メモ</title>
</head>
<body>
<?php
$log          = "./memo.log";             // memo のログ
$lines = file($log);
foreach($lines as $line) {
  $line = rtrim($line);
  $line = htmlspecialchars($line);
  $items = explode("\t", $line);
  $tags = trim($items[4]);
  $opml_items .= "<outline text=\"{$items[0]}\" Type=\"link\" url=\"{$items['1']}\" title=\"{$tags}\" date=\"{$items[3]}\" />\n";
}

print($opml_items);
?>
</body>
</opml>

[ 「URI メモをエクスポート」へコメントをつける ]

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

superT というタブ系の拡張機能を入れてみた

publish
2006-03-15T14:45:40+09:00
tags
はてぶ

拡張フォーラムを見ていたら、superT という Firefox 用の拡張機能のスレがあったので、試しに入れてみた。

機能は例によってスクリーンショットを見ていただけば大体わかると思うので、スクリーンショットを上げておきます。

まずは、一般設定です。

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

上から順番に意訳すると以下のような感じ。

  1. タブを閉じたときに最後に選択していたタブにフォーカスするかどうかの設定
  2. 新しいタブを開いたときに現在のタブの右側に開くかどうかの設定
  3. Ctrl+クリックしたときにそのタブをフォーカスするかどうかの設定
  4. superT 内蔵のアンドゥ・クローズ・タブを使うかどうかの設定

最後のは、他のアンドゥ・クローズ・タブを装備した拡張機能とのコンフリクトを避けるための設定のようです。

次は、タブやタブバーをダブルクリックした時の動作の設定です。

ダブルクリック時の設定のスクリーンショット

色々な機能を割り当てることができるわけですが同様に、中クリックしたときや、ctrl+クリック、alt+クリック、shift+クリックした時にもそれぞれ機能を割り当てることが出来ます。全部設定してもとても覚えていられないような気がしますが。:p)

次は設定画面ではなく、タブバーの端に現れるメニューです。どちらかというとこっちがメインの機能かも。

溢れたタブの設定のスクリーンショット

ご覧の通り、タブの最小幅を決めて、溢れたタブをメニュー形式で表示するかどうかなどを設定で来ます。

この機能を使って、溢れ出たタブをメニューで表示させたのが、以下のスクリーンショットです。

溢れたタブのメニューのスクリーンショット

tab overflow と呼ばれる、溢れたタブをどうにかする機能は、firefox 2.0 から搭載される予定ですが、こんな感じのものになるんでしょうか。それとも、単にタブバーの両端に矢印が付くだけなのか、そこらあたりは出てからのお楽しみ。

[ 「superT というタブ系の拡張機能を入れてみた」へコメントをつける ]

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

Opera にはなさげで便利な拡張機能

publish
2006-03-15T16:12:52+09:00
tags
はてぶ

暇な人のためのfirefox拡張案内を眺めてみた。 にて、Opera ユーザからみた Firefox の拡張機能に関する簡単な感想が述べられていますが、それならこれはどうだという拡張機能を上げてみます。子どものケンカみたいですが。:p)

まずは、XUL/Migemo もしくは、そのフォーク版であるところの XUL/Migemo [Forked Edition] です。

ご存知のように Firefox には、Find As You Type といって、ページ表示中にいきなりページ内検索をする機能がありますが、これを日本語圏で使いやすくする拡張機能です。英単語などを検索する場合は、オリジナルの Find As You Type でいいわけですが、日本語ページを検索すると結構ガッカリです。

Find As You Type は、いわゆるインクリメンタルサーチといってタイプするごとにヒットした箇所が絞り込まれていくという検索方法なのですが、日本語ページだと IME によって文字列の日本語変換が確定するまではサーチされません。ところが、XUL/Migemo を導入すると、IME をオフにしたままで日本語文字列の検索が可能になります。ローマ字を打てばそのまま日本語にヒットするように専用の辞書を用意することで実現しています。nihongo と打てば、日本語にヒットするわけですね。

Firefox 1.5 などでは、ページ閲覧中にテキストエリア以外のところにフォーカスが当たっていても IME を有効にすることができましたが、現在の trunk なナイトリーでは、テキストエリアにフォーカスがない場合は、自動的に IME が無効になるという仕様に変更になっているために益々、XUL/Migemo が使いやすいものとなっています。:-)

次は、Stylesheet Chooser Plus です。これは何をするものかといえば、代替スタイルシートを切り替える UI をFirefox のステータスバーに付加する拡張機能です。スタイル切り替え機はもちろん Opera にも装備されていますが、この拡張機能の秀逸な点は、同じサイトであれば、選択した代替スタイルシートを覚えていてくれて、ページ遷移しても選択したスタイルを引き継いでくれます。ページ遷移するたびにいちいちスタイルを切り替えるなんて面倒ですから、これは結構便利な拡張機能です。

まだ代替スタイルシートを装備したサイトが少ないので出番が少ないのではという意見もあるでしょうが、スタイル無効化も記憶してくれるので、スッピンで見たいサイトは一度、スタイルを切れば次回からもスッピンで閲覧することが可能になります。いちいちサイトごとに切り替える必要はなくなるわけです。

次は、Stylish です。Firefox 1.5 以降には、サイト別にユーザスタイルシートを設定できるという、Opera にはない機能があるわけですが、この機能を強化する UI を付加するのが、この拡張機能です。

Stylish を導入すると、ユーザスタイルシートを編集しても再起動することなく、それを反映させることができるようになるだけでなく、手軽にそのスタイルのオン・オフを切り替えることが可能になります。便利です。Stylish については以前、Stylish いいよ でもう少し詳しく書いたので、興味のある方はどうぞ。

他にも表示中のページのスタイルシートや html を編集して、リアルタイムに反映させたり、機能テンコ盛りの Web Developer とか、ページ内検索の結果を一覧にしてサイドバーに表示してくれる GrepSidebar など、Opera にはなさげで便利そげな拡張機能はいろいろあるのですが、とりあえず今回はこのくらいで。

もし、私が知らないだけで、Opera でも実現できるぜとかあったらすみません。とあらかじめ謝っておきます。:p)

まぁ、Opera には Opera の、Firefox には Firefox のいいところがあるので、どっちが強いかとかそうことよりも、強いブラウザ(何)が増えてブラウザ市場(何)に色々な選択肢が増えることがいいことだと思います。

[ 「Opera にはなさげで便利な拡張機能」へコメントをつける ]

この記事へのツッコミ

1: フィレ (2006-03-19T17:25:47+09:00)
Opera9ではサイト別にスタイルシート出来るようになるのでしょうか。Firefoxとどこまで互換性が期待できるんだろう。どちらもウェブ標準対応を目指してるようですが。もうユーザースタイルシートがいろいろサイト別に書いてたら2000行くらいになっちゃって乗り換えられません :)
2: のり (2006-03-19T23:46:59+09:00)
いじり倒すと乗換えがどんどん難しくなっていきますね。:p)
こうなったらとことん、Firefox を使い倒しましょう!
この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2006/03/diary_060315b.html

tag ごとの RSS

publish
2006-03-20T17:42:21+09:00
tags
はてぶ

tag を装備したので、ついでに tag ごとに RSS を出力するようにしてみました。ついでに、tag も追加して多少絞り込み検索しやすくしてみました。

tag 閲覧用の labelview.php のソースも新しいものに差し替えておきます。あまり一般的に使えるようにはなっていないので、使うためには適宜書き換える必要があります。スマソ。

関連
朝顔日記 - rNote の file.cache に tag を埋め込む
朝顔日記 - rNote に tag を装備したい

[ 「tag ごとの RSS」へコメントをつける ]

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

Opera9 のサイト別ユーザスタイルシート

publish
2006-03-20T20:15:46+09:00
tags
はてぶ

車さん(誰)によれば、Opera9 からはサイト別ユーザスタイルシートが使えるとのことで、ほほー素晴らしい、と言うことで試したみた。

使用した Opera9 は、Windows 版の Build 8265 というもの。いわゆる weekly ビルドと呼ばれるものです。

サイト別ユーザスタイルシートを設定するには、設定したいサイトを開いた上で、右クリックより呼び出すコンテキストメニューで、Site Preferences... を選びます。この設定画面でサイトごとに色々な設定を施すことができるようです。スタイルシートの設定は Display タブを選びます。以下そのスクリーンショット。

Site Preference 設定ダイアログのスクリーンショット

ダイアログ最下部にある My style sheet にて、適当なスタイルシートを設定してやります。

Opera の場合は、ユーザスタイルシートの適用の仕方を様々に設定できるようで、Author スタイルと User スタイルを切り替えるところにある、manage mode... というところを選ぶと以下のような設定ダイアログを呼び出すことが出来ました。

Presenteation mode の設定ダイアログ

これは、サイト別の設定ではなくスタイルシートの適用の仕方全般を設定するもののようです。この設定を使って好みの適用のさせ方をさせてやれば、かなり柔軟にアレコレできるようです。

なかなかよくできていますね。ただ、ちょっと設定の仕方がわかりずらいところがあるような気がするので正式版での UI の改善に期待しましょう。

[ 「Opera9 のサイト別ユーザスタイルシート」へコメントをつける ]

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

rNote の file.cache に description を埋め込む

publish
2006-03-22T18:19:42+09:00
tags
はてぶ

rNote の file.cache に tag を埋め込む で、rNote 本体を改造したんですが、さらに改造して、file.cache に個別記事の概要も埋め込むようにしました。これまでは、tag で絞り込みした際に、記事の概要を個別のファイルから引っ張ってきていたため、ヒットする記事が多いとそれだけ多数のファイルにアクセスする必要があったのですが、概要を file.cache に埋め込んでおくことで、faile.cache にだけアクセスして概要を表示することが可能になりました。

また改造箇所を示すのはダルいのですが、備忘録を兼ねて書いておきましょう。前回と重複する部分もありますが、関係箇所をすべて書いておきます。

まず、設定ファイル rnote_config.php に以下を追加。これは前回と同じです。


define(TAG_LABEL,'Class');      //タグ用

次に、本体 rnote.php です。最初のほうにある、$g_filelist; のところです。diff ぽく書いておきます。行頭に + がある分が追加分で、! は変更のした部分です。


  define(FILELIST_DATE,0);
  define(FILELIST_TITLE,1);
  define(FILELIST_WBACCEPT,2);
+ define(FILELIST_LABEL,3);
+ define(FILELIST_DESCRIPTION,4);
  
  $g_dirlist;
  define(DIRLIST_NUMITEM,0);

次は、GetFileList 関数のあたり。


        }
        $title = get_XMLTag(TAG_TITLE,$datafile);
        $title = preg_replace("/[\t\n\x0b\x0c\r]/",'',strip_tags($title));
+       $label = get_XMLTag(TAG_LABEL,$datafile);
+       $label = preg_replace("/[\t\n\x0b\x0c\r]/",'',strip_tags($label));
+       $description = get_XMLTAG(TAG_DESCRIPTION,$datafile);
+       $description = preg_replace("/[\t\n\x0b\x0c\r]/",'',strip_tags($description));
        $titlelist[$dir.$file][FILELIST_TITLE]    = $title;
        $titlelist[$dir.$file][FILELIST_WBACCEPT] = get_XMLTag(TAG_WBACCEPT,$datafile);
+       $titlelist[$dir.$file][FILELIST_LABEL]    = $label;
+       $titlelist[$dir.$file][FILELIST_DESCRIPTION]    = $description;
        $num++;
      }
    }

次は、CreateFileCache 関数のところ。


        $date = str_replace("\t",'',$date);
        $temp = "$fname\t$date\t".
          $titlelist[$fname][FILELIST_TITLE]."\t".
!         $titlelist[$fname][FILELIST_WBACCEPT]."\t".
!         $titlelist[$fname][FILELIST_LABEL]."\t".
!         $titlelist[$fname][FILELIST_DESCRIPTION]."\n";
        fwrite($fp,$temp);
      }
      fclose($fp);

次は、ReadFileCache 関数の終わりのほう。


        $g_filelist[$fname][FILELIST_DATE] = $date;
        $g_filelist[$fname][FILELIST_TITLE] = $title;
        $g_filelist[$fname][FILELIST_WBACCEPT] = $wbaccept;
+       $g_filelist[$fname][FILELIST_LABEL] = $label;
+       $g_filelist[$fname][FILELIST_DESCRIPTION] = $description;
      }
    }
  }
  
! function FileCache_AddEntry($fname,$date,$title,$wbaccept,$label,$description){
    $filelist = _file(FNAME_FILECACHE);
!   array_unshift($filelist,"$fname\t$date\t$title\t$wbaccept\t$label\t$description\n");  // add new entry
    $fp = _fopen_wb(FNAME_FILECACHE);
    foreach($filelist as $a) fwrite($fp,$a);
    fclose($fp);

この改造によって、file.cache は1行ごとに以下のような構造を持つようになります。\t はタブをあらわしています。

xml ファイル\t時刻情報(unixタイム)\t記事のタイトル\tツッコミ及びトラックバックの受け付けフラグ\tいわゆる tag\t記事の概要

で、こういう file.cache の構造に変更したので、tag 閲覧兼 rss 出力用の php スクリプト、labelview.php は file.cache だけを読んで仕事ができるようになりました。

記事数が多いとページめくり機能(何)があるといいんでしょうが、1ページで全部表示されるのも、一覧性が高いのと、ページ内検索する場合に便利なんですよねぇ。ということで、今のところページめくり機能は装備していません。というか、全部 DB にツッコんだ方が便利な気もす。:p)

一応、主だった tag にリンクしておきましょう。

[ 「rNote の file.cache に description を埋め込む」へコメントをつける ]

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

Session Manager の Undo close tab をマウスジェスチャで

publish
2006-03-24T16:16:09+09:00
tags
はてぶ

Fierfox でマウスジェスチャを実現する、All-in-One Gestures という拡張機能を使っていたのですが、色々あって Mouse Gestures に乗り換えました。AiO Gestures ほど機能は多くないものの、こっちはジェスチャに割り当てるコマンドを JavaScript で記述することもできるというのが大きな特徴となっています。つまり他の拡張の機能を呼び出したりすることもできるわけですね。

AiO Gestures には、Undo Close Tab の機能があり重宝していたのですが、Mouse Gestures にはこの機能はありません。そこで、Session Manager といういわゆるセッション管理を行う拡張機能を導入して、その機能を使うことにしました。

Mouse Gestures の設定画面より、マッピングの設定を呼び出し、カスタム JavaScript コードに以下を記述してやることで、Session Manager の Undo Close Tab の機能を呼び出すことが出来ました。


gSessionManager.undoCloseTab();

ジェスチャは、Undo の U をイメージして、↓→↑ を割り当てています。

mamouse gestures のマッピング設定ダイアログのスクリーンショットのサムネイル

Session Manager 自体もなかなか使いやすく気に入りました。Firefox 2.0 で本体機能に Undo Close Tab とセッション管理機能が装備されるまではこれらの拡張のお世話になることにします。:p)

[ 「Session Manager の Undo close tab をマウスジェスチャで」へコメントをつける ]

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