nDiki : XML
Related term
2004年11月14日 (日)
■ JAlbum で Webフォトアルバム

最初は zphoto でいこうと思っていたのだが、
- 各画像にコメントが直接つけられない (Template Toolkit の組み合わせでHTML書き換えるのがよいか)
- 画像の横幅しか指定できない (長辺でサイズを指定したい)
といった点から違うソフトを探してみた。
で JAlbum というのを見つける。Java で書かれているので、Linux でも動く。 スキンがいろいろ選べるのが良い。スキンリポジトリには Flash コンテンツベースの格好良いアルバムを生成するのもある。
スキンは自作できるのだが、プログラムが書ける分マスターするのは結構大変そうだ。
JPEG だとコメントは、画像ファイルのコメント領域に格納するというのがちょっと不満。オリジナルを改変したくないので別にコピーを用意しておく必要がある。
それからGUIアプリケーションなので zphoto のようにコマンドラインからバッチ処理できないのが残念。
それ以外はなかなか良い。
@ BananAlbum スキン
Flash コンテンツベース。スキンリポジトリで一番人気。 日本語のコメントがうまくでなかった。
@ SimpleViewer スキン
Flash コンテンツベース。BananAlbum よりすっきりまとまっている。 JAlbum は画像・サムネイルと設定XMLファイルなどの生成をするのだが SimpleViewer のSWF自体は単体で使えるで手作業でもアルバムを作れる。
コメントは後からXMLを直接編集して書き込んでもいいな。
日本語のコメント表示問題無し (Linux 用 Flash Player 7.0.25 では駄目)。
- Linux 上で Flex 2 SDK を使った Flash コンテンツ開... (2007-09-11)
- 私的10大ニュース2004 [ comp ] (2004-12-31)
- デジカメ写真管理ソフトウェア digiKam (2006-03-10)
- Flickr::UploadでLinuxから画像アップロード (2005-04-22)
- ソフトウェア技術者御用達のプロジェクトマネジメントツール TaskJuggler (2007-04-23)
2005年4月22日 (金)
■ Flickr::UploadでLinuxから画像アップロード

Flickr ではWebページのフォームからの画像アップロードを行えるようになっている。
それに加えて Windows、Mac OS X では専用のツールが用意されていて、より快適にアップロードできるらしい。
残念ながら Linux 用のツールは Flickr から提供されていない。 しかし CPAN には Flickr::Upload モジュールがあって、コマンドラインからアップロードができる。
今までWebページのフォームからアップロードをしていたのだが枚数が多いと面倒なので、これを使えるようにしてみた。
インストールはまず依存している XML::Parser::Lite::Tree を dh-make-perl で deb 化してインストール。続けて Flickr::Upload も deb 化してインストール。
あとは、Flickr に登録してあるメールアドレスとパスワードを設定ファイルに書いて画像をアップロード。
touch $HOME/.flickrrc chmod 600 $HOME/.flickrrc echo email=naney@example.com > $HOME/.flickrrc echo password=secret >> $HOME/.flickrrc flickr_upload *.jpg
お手軽。
必要があれば title や tag もコマンドラインオプションで指定できる。 Flickr は Web上での編集機能がよくできているから、1枚づつ違うタイトルやタグをつけてもいい。よっぽど枚数が多い時はテキストファイルにまとめて書いておいて flickr_upload をまわすとか、Flickr::Upload モジュールを直接使って処理するといったこともできるであろう。
- ZumoDrive インストールしたけれど使い道がまだない (2009-02-27)
- ホームネットワークカメラ BL-C10 買っちゃった (2005-01-18)
- 今日のさえずり - 5:30 起床でもまだ時間が足りない (2009-09-12)
- Plagger で Twitter のあれこれをメールで通知 (2008-12-25)
- Evernote 使用開始 (2009-03-03)
2005年11月21日 (月)
■ 定型書式で内容を記述していくのに便利な形式は?

今要求仕様書を LaTeX で書いている。 要求と仕様の組をまとめて longtable で記述しているのだが、 LaTeX らしい繁雑さがあってちょっと効率が悪い。 マクロを定義すればある程度書きやすくなると思うが、それでもそこそこまでな気がする。
文書の中にレコードの並びが書けて、レコードの並びの中に文章が書きやすいそんなフォーマットはないものかなぁ。
- LaTeX + マクロ
- 整形は綺麗。
- 記述が繁雑になりがち。\マクロ名とか {} とか。
- DocBook
- 仕様デカスギ
- 以前使ってみたことがあるが、手で書くのにはしんどい。
- XML
- 構造的な情報の表現には良いのだが、手で書くのはしんどい。開きタグも閉じタグも。
- 普通の章節や、マークアップのルールを考えなければならない(定義するか借りてくるか)。
- LaTeX等へのコンバータを書く必要あり。
- YAML
- レコードの並びだけだったら良いが、文書の他の要素を一緒に書くのには適さない。
- ある程度の構造やボリュームがあると、思ったほど手書きしやすくない。
- YAML Perl モジュールで痛い目にあっている。
Wiki に慣れきっている自分にとっては Wiki 文法のような感じで記述できて、一部に定型レコードの並びが書けて、そこの整形ルールだけ定義してあげれば LaTeX に変換できるとかそういった感じがのものが欲しい。 定型レコードの部分は RFC822 のヘッダみたいな感じで良くで、値の部分に長めの文章を複数行で書けるものがいい。
構造化テキスト用フォーマット、あるいはWiki フォーマットをアレンジするのがいいかもしれないな。 このあたりのフォーマットは、ソーステキストのままでも充分読み易いことを意識して定義されているので書くのは楽。
- reStructuredText
- Markdown
- reStructuredText よりもソーステキストが読み易いらしい。
- Perl
- HTMLへの変換しかない。
- WiKicker (Wiki)
- かなり書き慣れている。
- レコードの並びの書き方を考える必要あり。
- 複数行にまたがる処理を書くのが面倒。
- 自分で書いているシステムなので中身は何でも知っている。
- マイナー。
レコード部分とは関係ないけれど reStructuredText や Markdown の「アンダーラインのあるテキストを見出しとする」っていうのはいいな。 普段メールやプレーンテキストでちょっと文書を打つときに使っているスタイルと一緒だ。
要求仕様書用に使うかどうかは別として、要チェック。
- reStructuredText いいんじゃない? (2005-11-22)
- 早速 reStructuredText から LaTeX へのコンバータを書く (2005-11-24)
- 私的10大ニュース2005 [ comp ] (2005-12-31)
- Docutils は自分にとっての Python キラーアプリかも (2005-12-01)
- Rubric でプライベート SBS を立てるも 0.140 では日本語に不具合 (2006-07-22)
2005年11月22日 (火)
■ reStructuredText いいんじゃない?

昨日の続きであるが、reStructuredText がライトなドキュメント書きにはいいんじゃないかという感蝕を得た。
基本的にプレーンテキストのままで充分見られるので、そのままメールに貼りつけられる。
今までは文書を作成する際、メールで草稿をやりとりしたのち内容が固まったら LaTeX のコマンドでマークアップしてコンパイルしてPDF化していた。 これだとちょっと手間であるのだが、最初から reStructuredText 形式で書いていれば、そのまま rst2latex で LaTeX に落とせる。
また必要に応じて rst2html で HTMLに変換してWebサイトに置いておくこともできる。
これらで満足できない場合は Python のコードをいじって変更ということになるが、Python が駄目でも rst2xml でXMLに変換してしまえば他の言語でも reStructuredText のパーサを書かなくても(XMLの処理系を使って)コンバータを書くことができるの比較的楽である。
しかも欲しかったレコードの表現用にフィールドリストというシンタックスがあるではないか。
いいじゃん。
ということで早速今日から使うことにした。
Debian GNU/Linux sid にある Docutils 0.3.9 ではいわゆる全角文字も文字幅を1として扱かう。 このためテーブルなど桁揃えを用いる書式の部分がこのままだと不便である。 画面上では2文字分幅があっても1文字として数えられるため Docutils が通るようにするためには余計な空白などを入れて文字数を調整しなければならないが、そうすると今度は見た目的にずれるので可読性がかなり落ちてしまう。
この問題のためにMatsumoto,Tadashi氏がパッチ
を作成されているので、これを適用。
これでばっちり。
- 定型書式で内容を記述していくのに便利な形式は? (2005-11-21)
- 私的10大ニュース2005 [ comp ] (2005-12-31)
- Docutils は自分にとっての Python キラーアプリかも (2005-12-01)
- FreeMind でマインドマップ (2005-06-02)
- Debian GNU/Linux に Hyper Estraier 1.2... (2006-05-31)
2005年11月24日 (木)
■ 早速 reStructuredText から LaTeX へのコンバータを書く

要求仕様書を書くのに reStructuredText を使ってみることにしる。 reStructuredText の文法の上で、あるルールに従って書いた特定のセクションやフィールドリストを要求レコードや要求仕様レコードとし、自前でコンバータを書いて LaTeX へ変換する形。
まずは最初のアイデア通り rst2xml で XML に変換してから、Perl スクリプトで読み込んで処理することにする。
Perl 側の処理は XML::LibXML で (何となく XML::DOM より好き)。 しかし毎度ながら DOM 面倒くさい。 とりあえず、今必要な要素のみ変換コードを書く。 reStructuredText を XML へ変換した時の DTD があるので、おいおいこれを見ながらきちんと埋めていかねば。
最低限のものができて、早速コンバート。
これで生 LaTeX で書くより随分楽になった。よし。
- 定型書式で内容を記述していくのに便利な形式は? (2005-11-21)
- Docutils は自分にとっての Python キラーアプリかも (2005-12-01)
- JavaScript でのプログラミングやっぱり面倒くさい (2006-07-23)
- Twitter ベイジアンフィルタプロキシ (2007-12-29)
- reStructuredText いいんじゃない? (2005-11-22)
2005年12月1日 (木)
■ Docutils は自分にとっての Python キラーアプリかも

先日 reStructuredText ベースの要求仕様書ファイルから、LaTeX への変換プログラムを Perl で作成した。rst2xml で変換した XML 文書経由で。
欲しいところだけまずは実装して使ったんだけれど、この先使っていくには細かいところを組んでいく必要がある。やっぱりフルスクラッチするのは面倒だな。
本来は Docutils 用の Writer を作成するのが王道。
しかし Python なんだよね。以前に何度か覚えておこうと思ったんだけれど動機付けが弱かったのかいつも途中でフェードアウト。 しかし今回は明確な目的があるので、もりもりやりそう。
まずは既存の docutils.writers.latex2e.py あたりをコピーしていじって遊んでみるかな。 自分の場合この方法が一番覚えるのが早い。 小学生の時に最初にBASICをいじった時も、既存のゲームのパラメータとか改造から入ったし。
さて、その latex2e.py であるが「documentclass がオプションや設定ファイルで変更できるものの、標準の LaTeX2e 用のもののどれかしか駄目」だったりなど、普通に使うにもちょっといじる必要がありそう(jsbook とか使いたいし)。
一旦自分好みの LaTeX2e Writer を作ってから、それを拡張する形で特定文書毎の Writer を作るのがよさそうだ。
- 定型書式で内容を記述していくのに便利な形式は? (2005-11-21)
- Docutils の reStructuredText から LaTeX ... (2005-12-07)
- 早速 reStructuredText から LaTeX へのコンバータを書く (2005-11-24)
- reStructuredText いいんじゃない? (2005-11-22)
- SCons は GNU Autotools のかわりになるか (2005-04-20)
2006年7月23日 (日)
■ JavaScript でのプログラミングやっぱり面倒くさい

JavaScript の勉強がてら「お互いに URL でリンクしている XML ファイルセットの簡易ブラウザ」を書き始める。
この間使い始めた Prototype を使って多少楽ではあるものの、それでもやっぱり面倒くさい。 コードを修正するたびに Web ブラウザで動作確認をするという流れが問題だな。
単体テストコードを書いて SpiderMonkey でテストできるかなと思ったが、document オブジェクトとかないし。
やはり JsUnit でテストを書くのが一番かな。
それと JavaScript (Web ブラウザ)の DOM API の情報がまとまっているものないかな。 Perl の XML::DOM の気分で書くといろいろ名前が違っていてうまく動かず、切ない。
- Google Analytics から TSV エクスポートしてキーワード... (2007-11-18)
- 早速 reStructuredText から LaTeX へのコンバータを書く (2005-11-24)
- SpiderMonkey の素のインタプリタでは CGI プログラムには役立たず (2006-12-11)
- Twitter ステータスを nDiki サイドバーに表示 (2007-11-09)
- 今日のさえずり - キレイキレイで顔を洗ってみた。みんなにはないしょだよ。 (2009-07-29)
2007年9月25日 (火)
■ Visual C# 2005 Express Edition ではどれを Subversion リポジトリに突っ込めば良いか?

Visual C# 2005 Express Edition で Windows アプリケーションテンプレートによる構成は下記 (名前を Example で作成した場合)。
| ファイル名 | 対象 | |
| Example.sln | o | ソリューションファイル (テキストファイル) |
| Example.csproj | o | プロジェクトファイル (XML ファイル) |
| Example.suo | ソリューションユーザオプションファイル (バイナリファイル) | |
| Program.cs | o | C# ソースファイル |
| Form1.cs | o | C# ソースファイル |
| Form1.Designer.cs | o | C# ソースファイル |
| Properties/AssemblyInfo.cs | o | C# ソースファイル |
| Properties/Resources.Designer.cs | o | C# ソースファイル |
| Properties/Settings.Designer.cs | o | C# ソースファイル |
| Properties/Resources.resx | o | リソースファイル (XML ファイル) |
| Properties/Settings.settings | o | 設定ファイル (XML ファイル) |
| bin/* | ||
| obj/* |
バージョン管理する必要があるのは「対象」のファイルで良いのかな? Form1 などはすぐ名前変更になるけれど。
@ 参考
@ 追記
@ 2007年12月4日
- Properties/Resources.Designer.cs を追加。
- 今日のさえずり (2007-09-25)
- Subversion で大文字・小文字のみ違うファイル名へ変更 (2004-08-02)
- Windows BOX も DAR で増分バックアップ (2009-01-13)
- TortoiseSVN と svn+ssh (2004-07-26)
- Windows 向けソフトウェア開発者はソースパッケージを作る習慣がない (2007-07-31)
2007年12月29日 (土)
■ Twitter ベイジアンフィルタプロキシ

Twitter で following が増えてくるにつれて、タイムラインに目を通すのが大変になってきた(という程きちんと見ている訳ではないが)。 さっとタイムラインをなめて面白そうな情報をピックアップしたい時は、「おはよう」とか「風呂入った」とか「トイレ」とかは除外して読みたい(そういう書き込み自体は嫌いじゃないのだが、人生はあまりにも短い)。
Twit や P3:PeraPeraPrv では NG ワード指定ができて、それらを含むステータスは表示しないようにできるのだが、Twitter の書き込みは揺らぎが激しすぎて指定しきれないという弱点がる。
ということでベイジアンフィルタでフィルタリングしてみることにした。
自前で Twitter クライアントを作る気はないので、proxy の形でさっと実装してみた。
#!/usr/bin/perl
use strict;
use warnings;
use HTTP::Proxy;
use HTTP::Proxy::BodyFilter::complete;
my $proxy = HTTP::Proxy->new(port => 8088);
$proxy->push_filter(response => HTTP::Proxy::BodyFilter::complete->new,
mime => 'application/xml');
$proxy->push_filter(response => Bsfilter->new,
mime => 'application/xml');
$proxy->start;
{
package Bsfilter;
use File::Temp qw/tempfile/;
use XML::XPath;
use base qw(HTTP::Proxy::BodyFilter);
sub filter {
my ($self, $dataref, $message, $protocol, $buffer) = @_;
return unless defined($$dataref) && $$dataref ne '';
eval {
my $xml = XML::XPath->new(xml => $$dataref);
my @nodes = $xml->findnodes('/statuses/status/text/text()');
return unless @nodes;
for my $node (@nodes) {
my $text = $node->getNodeValue;
if (is_NG($text)) {
$node->setNodeValue("[NG] $text");
}
}
$$dataref = qq(<?xml version="1.0" encoding="UTF-8"?>\n);
$$dataref .= $xml->get_context->toString;
utf8::encode($$dataref);
};
if ($@) {
warn $@;
}
}
sub will_modify { 1 }
sub is_NG {
my ($text) = @_;
my ($fh, $filename) = tempfile();
utf8::encode($text);
print $fh $text;
close($fh);
my $result
= system(
"bsfilter --homedir ~/.twitter-bsfilter --ignore-header --auto-update $filename"
);
unlink($filename);
return !$result;
}
}
@ HTTP proxy の作成
Perl で HTTP proxy を作ろうとして真っ先に思い浮かんだのは POE だけれど、ちょっとヘビーなので今回は HTTP::Proxy をチョイス。 もともとフィルタリング HTTP proxy を作ることを念頭に置いた Perl モジュールなので今回の目的にぴったり。
1つはまった点といえば、filter の呼び出しがレスポンス全てを取得してからではなく一部分ずつの呼び出しになるところ。その仕様に気がつくのにちょっと時間がかかってしまった。 例えば XML 形式のレスポンスをフィルタしようとしても、普通に HTTP::Proxy を使うと XML の一部ずつがフィルタに渡されるため、XML のパースがうまくいかない。
これについては HTTP::Proxy::BodyFilter::complete を使うことで、まとめてフィルタに渡せるようになった。
@ レスポンスの処理
Twitter のタイムライン取得については P3:PeraPeraPrv が XML 形式で取得しているので、そのタイプのレスポンスをフィルタするようにした。
XML::XPath でステータス部分を抜き出して NG 判定し、NG であれば先頭に [NG] を追加する。 これで Twitter クライアント側で [NG] を NG ワード指定すれば、表示されないようにすることができる。
@ bsfilter による NG 判定
NG 判定は普段メールの spam フィルタとして使っている bsfilter を使った。 単純に system 関数で呼び出して結果を取得するだけ。
今回は対象がメールではないので --ignore-header を指定。また自動的に学習するように --auto-update を指定。 それと普段メールのフィルタリングに使っているのとは bsfilter のデータベースを別にしたいので、--homedir も指定しておく。
@ NG と非 NG の学習。
NG ワードを twitter-NG.txt に、非 NG ワードを twitter-clean.txt に書いて以下のコマンドを実行。
bsfilter --add-clean --ignore-header --homedir ~/.twitter-bsfilter twitter-clean.txt bsfilter --add-spam --ignore-header --homedir ~/.twitter-bsfilter twitter-NG.txt bsfilter --update --homedir ~/.twitter-bsfilter
自分の環境 (Debian GNU/Linux sid)では、UTF-8 で書いておいて問題なかった。
@ フィルタリングしてみる
あとは先の proxy を起動し、P3:PeraPeraPrv でプロキシとして localhost:8088 を指定すれば OK。
タイムラインを取得するたびに bsfilter が動いて NG なステータスには [NG] が挿入される。
@ フィルタリングの精度
これについては、まだまだチューンの必要ありかな。
- 事前の学習データが少ない。
- --auto-update していることもあり、最初に NG 判定が多いとそちら側に強化されすぎる。
- 毎回 bsfilter を呼んでいるため、同じステータスが何度も学習される。
まだ使える精度まで上がってないけれど、教師データを増やせばそれなりにいけるかもしれない。
proxy の枠組ができたので、(@~は抜いてから bsfilter に渡すとか、前後の文脈も含めるとか)いろいろ試して遊べそうではある。 別に bsfilter にこだわらず、正規表現による判定などをしてもよいし。
この辺り P3 は Java で書かれているので、プラグインを書いて拡張できるよう将来になると面白いなと思ってみたり。
- Plagger で Twitter のあれこれをメールで通知 (2008-12-25)
- Debian をアップデートしたら Java プログラムが通信できなくなった (2010-02-06)
- 今日のさえずり - 5:30 起床でもまだ時間が足りない (2009-09-12)
- 今日のさえずり - くるぴかポッチャマ廻しにくい (2009-12-27)
- 今日のさえずり - Twitter 日本語表示みた (2008-04-23)
2009年1月19日 (月)
■ Web 日誌 / Web 日記を書き始めてから10年

当初「コンピュータ日誌」として日付ベースの記事を書くようになって(記事)から満10年。
当初は m4 ベースで HTML テンプレート処理をしていた。 その後記事を XML 形式にし、Perl スクリプトで HTML ページ生成する方式に変更。 2001年5月には Naney's Diary としてハイパー日記システムを使い始めた(記事)。 2004年2月に名前を nDiki と改め、自作 WikiEngine をベースとした日記システム DiKicker で記事を書くようになった(記事)。
文章はあいかわらず上手くなってはいないけれど、書き続けることでいろいろ得ることも多かったと思う。
- 記事化を念頭に、仕事・生活の中でアンテナを張りより物事を考えて生活することが習慣になった。
- 自分にとって有用なパーソナルナレッジベースが築けた。
- 各種 Web 技術をトライする実験場となった。
- 多少人の役にたった。
- 多少収入になった。
みんなも書くといいよ。
- はいぱー日記システムで日記を開始 (2001-05-11)
- DiKicker に n 年日記機能を追加 (2006-11-03)
- 21:00 [ nDiki ] hnsからDiKickerへ (2004-02-22)
- 過去の今ごろ (2004-01-31)
- ケータイ用にプライベート Wiki を設置 (2008-01-07)
■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザイン ビックカメラProcess Time: 0.084914s / load averages: 0.22, 0.15, 0.11
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)




◇ Twitter やってます。この記事が気にいったらぜひ twitter.com/Naney の follower になってください。