しゃある通信

Back Forward Return


03/21(Sun)

#21-01 いかりや
生まれたときにはもう原体験だった。刷り込まれているものがあった。天国でも「オイッス!」をよろ。

#21-02 音楽好き…かなあ?
自分でもよくわからんが気づいたときにはすでに 1週間前のネタになっていた…が コメントしてみた。TrackBack はキライなので referer とコメントで足跡ぺたぺた。しかしコメントが おっさんというか時代だな(笑)


03/22(Mon)

#22-01 ひさびさの出社
2週間近く休んでいたのでなんだかいろいろ進んでいてよくわからないので情報収集中。しかしメイルの 受信が終わらん…。10M もあるからなあ。

#22-02 @FreeDとirc proxy
切れる。とにかく移動中に切れる。ので irc proxy を入れてみようかと。どこで動かすかは難しいけど。 まあ portscan して開いてるポートを無理やり予約すればいいんだろうがそこんとこどうなんだろうかと 管理者にお伺いを立ててみるとするか。

proxy はやっぱ tiarra かな?

#22-03 どうリタ@群馬
というわけで公式にも載ってますが、4/9 から群馬テレビでどうでしょうリターンズが始まるようです。

また、DVD 発売が近くなってきたのでプチ復活もするらしいですな。これは楽しみ。←実は北海道では ベトナムが終わってしまうので、プチ復活ではなくマジ復活なのかも…う〜ん。

#22-04 FOAF作成
週アスに載っていた FOAF-a-maticFOAF も作ってみた。いや本当に作っただけなんだが…。

#22-05 うちのRSSの作り方
なんか IRC で RSS 作れたらいいような感じの話になっていたので、ベタなスクリプトでも公開してみる テスト。

うちは blog じゃないので自前で RSS を作るしかありません。んで QUX が XML をいろいろふにふにしていたので RSS を作るスクリプトをもらって自分用に書き換えて ふにふに作るスクリプトにしたのが以下。
#!/usr/local/bin/perl

use strict;
use Jcode;
use Time::Local;
use lib qq(/home/sharl/html/d);
use Category;

#### page defines
my $SOURCE  = '/home/sharl/html/d/index.html';
my $MAILLOG = '/home/sharl/html/d/mail.log';
my $DEST    = '/home/sharl/html/d/sharlinfo.rdf';
my $MOBILE  = '/home/sharl/html/d/mindex.html';
my $GEOFILE = '/home/sharl/html/l/geo.xml';

my $publisher = 'Sharl Morlaroll';
my $creator = 'しゃある';
my $pageuri = 'http://sharl.hauN.org/d/';
my $pagedescription = '<![CDATA[日常の記録<br>最近のキーワード: __KEYWORD__]]>';
my $pagetitle = 'しゃある通信';
my $copyright = 'Copyright (c) 1995-%d ' . $publisher;
my $max_items = 15;
my $content_length = 256;

my $imageuri = 'http://sharl.hauN.org/d/rss.cgi';

my %category = Category->new;
my %caption;
my %description;
my %content_encoded;
my %dcdate;
my %subject;
my %keywords;
my %ltime;
my @KEYWORDS;
my @targets;

my @files = reverse sort glob "/home/sharl/html/d/[0-8]*.html";

#### top page time
&get_items();

for (keys %subject) {
    my @cat = split(/,/, $subject{$_});
    foreach my $cat (@cat) {
	$keywords{$cat}++;
    }
}

for (sort {$keywords{$b} <=> $keywords{$a}} keys %keywords) {
    push @KEYWORDS, $_;
}
my $keywords = $KEYWORDS[0] . "($keywords{$KEYWORDS[0]})";
for (1..4) {
    $keywords .= "," . $KEYWORDS[$_] . "($keywords{$KEYWORDS[$_]})";
}
$pagedescription =~ s/__KEYWORD__/$keywords/;

my $geoxml = "";
if (-f $GEOFILE) {
    open(FD, $GEOFILE);
    my @buffer = <FD>;
    close(FD);
    $geoxml = join("", @buffer);
}

my $latest = $files[0];
my ($sec, $min, $hour, $mday, $mon, $year) = localtime(my $mtime = (stat $latest)[9]);
$year += 1900;
$mon++;
my $dcdate = sprintf("$year-%02d-%02dT%02d:%02d:%02d+09:00", $mon, $mday, $hour, $min, $sec);
my $copyright = sprintf($copyright, $year);

my $rdfhead = <<RDFHEAD;
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="sharlinfo.xsl" ?>
<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/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
  xml:lang="ja">
 <image rdf:about="$pageuri">
  <title>$publisher</title>
  <link>$pageuri</link>
  <url>$imageuri</url>
 </image>
 <channel rdf:about="$pageuri">
  <title>$pagetitle</title>
  <link>$pageuri</link>
  <description>$pagedescription</description>
  <dc:language>ja-jp</dc:language>
  <dc:rights>$copyright</dc:rights>
  <dc:date>$dcdate</dc:date>
  <dc:publisher>$publisher</dc:publisher>
  <dc:creator>$creator</dc:creator>
  <dc:subject>diary</dc:subject>
  <items>
   <rdf:Seq>
RDFHEAD
;
#$geoxml

open(OUT, ">" . $DEST);
print OUT jcode($rdfhead)->utf8;

my $idx = 0;
foreach (sort {$dcdate{$b} cmp $dcdate{$a}} @targets) {
    if (/\d\d:\d\d/) {
	my $l = $_;
	$l =~ s|$pageuri(\d\d\d\d)_\d.html#(\d\d)-(\d\d):(\d\d)|$pageuri?$1$2$3$4|;
	print OUT qq|    <rdf:li rdf:resource="$l" />\n|;
    } else {
	print OUT qq|    <rdf:li rdf:resource="$_" />\n|;
    }
    last if (++$idx >= $max_items);
}
print OUT "   </rdf:Seq>\n";
print OUT "  </items>\n";
print OUT "  <image rdf:resource=\"$imageuri\" />\n";
print OUT " </channel>\n";
$idx = 0;
foreach (sort {$dcdate{$b} cmp $dcdate{$a}} @targets) {
    my $l = $_;
    if (/\d\d:\d\d/) {
	$l =~ s|$pageuri(\d\d\d\d)_\d.html#(\d\d)-(\d\d):(\d\d)|$pageuri?$1$2$3$4|;
    }

    my @cat = split(/,/, $subject{$_});

    my $itemblock = <<ITEM;
  <item rdf:about="$l">
   <title>$caption{$_}</title>
   <link>$l</link>
   <description>$description{$_}</description>
   <content:encoded>$content_encoded{$_}</content:encoded>
   <dc:date>$dcdate{$_}</dc:date>
   <dc:creator>$creator</dc:creator>
ITEM
;
    foreach my $cat (@cat) {
	$itemblock .= "   <dc:subject>$cat</dc:subject>\n";
    }
    $itemblock .= "  </item>\n";

    print OUT jcode($itemblock)->utf8;
    last if (++$idx == $max_items);
}
print OUT "</rdf:RDF>\n";
close(OUT);
utime $mtime, $mtime, $DEST;

$idx = 0;
open(MO, ">" . $MOBILE);
my $htmlhead = <<HTMLHEAD;
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Content-Language" content="ja">
<meta name="robots" content="noindex, nofollow, noimageindex, nomediaindex">
<meta name="Author" content="しゃある">
<link rev="made" href="$creator">
<link rel="start" title="TOP" href="../">
<link rel="index" title="INDEX" href="./olddiary.html">
<link rel="alternate" type="application/rss+xml" title="RSS" href="http://sharl.hauN.org/d/sharlinfo.rdf">
<link rel="meta" type="application/rdf+xml" title="FOAF" href="http://sharl.hauN.org/foaf.rdf">
<title>${pagetitle}mobile</title>
</head>
<body>
$keywords
<!--#exec cmd="sc-refereronly.sh" -->
<hr>
HTMLHEAD
;
print MO jcode($htmlhead)->sjis;
foreach (reverse sort @targets) {
    my $desc = $description{$_};
    $desc =~ s/^sharlinfo\s+//;

    my $item = <<ITEM;
<a href="$_">[$subject{$_}]$caption{$_}</a><br>
$desc
<hr>
ITEM
    print MO jcode($item)->sjis;
    last if (++$idx == $max_items);
}
print MO "</body>\n</html>\n";
close(MO);
utime $mtime, $mtime, $MOBILE;

exit;

############################################################

sub get_items {
    my $count = 0;

    foreach my $file (@files) {
	my $cur_file = $file;
	$cur_file =~ s#/home/sharl/html/d/##;
	open(FD, $file);
	while (<FD>) {
	    chomp;
	    if (m|<a name=".*?" href="(#.*?)" .*?="(\d+)">(.*?)</a>|o) {
		my ($ref, $time, $caption) = ($1, $2, $3);
		my ($desc, $content_encoded);
		my ($sec, $min, $hour, $lmday, $lmon, $lyear) = localtime($time);
		$lyear += 1900;
		$lmon++;
		my $dcdate = sprintf("$lyear-%02d-%02dT%02d:%02d:%02d+09:00",
				  $lmon, $lmday, $hour, $min, $sec);

		my $desc = "";
		$desc .= <FD> while ($desc !~ /<\/p>/o && $desc !~ /<hr>/o && !eof(FD));
		$content_encoded = "<p>$desc";
		$content_encoded =~ s/[\r\n]/\a/g;
		$content_encoded =~ s/<!--.*?-->//g;
		$content_encoded =~ s/\a/\n/g;
		$content_encoded =~ s/<hr>$//;
		$content_encoded =~ s|<script.*?/script>||g;
		$content_encoded =~ s/[\r\n]+$//;
		$content_encoded =~ s/(<img.*?src=\"|<a.*?href=\")((?!https?:).+?)(\".*?>)/$1$pageuri$2$3/g;
		# add mark
		$content_encoded =~ s/^(<p>)/$1-sharlinfo-<p>/;
		
		$desc =~ s/[\r\n]//g;
		$desc =~ s/\&[\#a-z0-9]+;//g;
		$desc =~ s|<script.*?/script>||g;
		$desc =~ s/<[^>]+>//g;
		$desc =~ s/\s+/ /g;

		# add mark
		$desc = "sharlinfo $desc";

		$desc = trimming($desc, $content_length);
		
		#my $targetURI = "$pageuri$cur_file$ref";
		my $targetURI = "${pageuri}r.i/20$cur_file$ref";
		$targetURI =~ s/_\d.html#//;
		$targetURI =~ s/-//;

		push @targets, $targetURI;
		$description{$targetURI} = $desc;
		$content_encoded{$targetURI} = "<![CDATA[$content_encoded]]>";
		$dcdate{$targetURI} = $dcdate;
		if ($caption =~ /^\[(.*?)\]/o) {
		    my $subjects = $1;
		    my @subjects = split(/,/, $subjects);
		    $subject{$targetURI} = $subjects;
		    foreach my $subject (@subjects) {
			foreach my $cat (keys %category) {
			    if ($subject eq $cat) {
				$subjects =~ s/$subject/$category{$cat}/;
			    }
			}
		    }
		    $subject{$targetURI} = $subjects;
		} else {
		    $subject{$targetURI} = '日常';
		}
		$caption =~ s/^\[.*?\](.*)$/$1/;

		$caption =~ s/&hearts;//g;

		$caption{$targetURI} = $caption;
		$ltime{$targetURI} = $time;

		$count++;
		last if ($count == 60);
	    }
    	}
	close(FD);

	last if ($count == 60);
    }

    open(FD, $MAILLOG);
    my @buffer = <FD>;
    close(FD);

    for my $i ($#buffer -10 .. $#buffer) {
	$buffer[$i] =~ s/<br>[\r\n]//;
	if ($buffer[$i] =~ m|(\d\d)/(\d\d)/(\d\d) (\d\d):(\d\d) (.*)|io) {
	    my ($year, $mon, $mday, $hh, $mm, $desc) = ($1, $2, $3, $4, $5, $6);
	    my $m = timelocal(0, $mm, $hh, $mday, $mon - 1, $year);
	    next if ($m < time - 86400 * 30);

	    my $w;
	    if ($mday < 11) {
		$w = 1;
	    } elsif ($mday < 21) {
		$w = 2;
	    } else {
		$w = 3;
	    }
	    $dcdate = sprintf("20$year-%02d-%02dT%02d:%02d:00+09:00",
				  $mon, $mday, $hh, $mm);

	    my $subject = undef;
	    my $content = $desc;
	    $subject = $1 if $desc =~ /<!--(.*?)-->/o;
	    $desc =~ s/<[^>]+>//g;
	    $content =~ s/(<img src=\"|<a href=\")((?!https?:).+?)(\".*?>)/$1$pageuri$2$3/g;
	    $content =~ s/<!--.*?-->//g;

	    my $targetURI = "$pageuri$year${mon}_$w.html#${mday}-$hh:$mm";
	    push @targets, $targetURI;
	    $description{$targetURI} = $desc;
	    $content_encoded{$targetURI} = "<![CDATA[$content]]>";
	    $dcdate{$targetURI} = $dcdate;
	    $subject{$targetURI} = 'mobile';
	    $caption{$targetURI} = $subject || "from 携帯";
	    $ltime{$targetURI} = $m;
	}
    }
}

############################################################
sub trimming {
    my ($line, $length) = @_;

    $line = jcode($line)->euc;

    if (length($line) > $length) {
	$line = substr($line, 0, $length);
	while ($line =~ /\x8F$/ or $line =~ tr/\x8E\xA1-\xFE// % 2) {
	    chop($line);
	}
	$line .= "...";
    }
    return jcode($line)->sjis;
}
dc:creator は数値参照にしているので自分用に書き換えてください。書式も決め打ちなので適当に 書き換えてください。XML のモジュール使うほうが素直だと思う。改造したのでバグあるかもだし。

ありがとう>QUX

#22-06 [BUY]夜ゲ

マリみて探してたら発見したのでこっちをゲット。りさたんはぁはぁ…じゃなくて単行本買おうと思って 高くてあきらめてたのがコミックになってたので思わず。

そうかこういう話だったのかー、と思いつつ芥川賞取るなんて思わなかったので見送ってたけど失敗した なあとか。しかしおもろいな。巻末にはりさたんの写真も載ってるので買うしか。


03/23(Tue)

#23-01 徹夜しちゃった…
理由は「自分の昔の日記を読み返していてハマった」でした(汗;

#23-02 proxy続編
管理者にお伺いを立てたところ「tiarra はユーザ認証がアレでソレっぽい感じ」ということで、 「ssh でのトンネリングなら可」との返事をいただきますた。

これ、前に自宅鯖でやろうとして挫折したんだよな…。いろいろ調べよう。

…………………PuTTY自体はは動いたけど forward できない。PortForwarder2.1.1はパスフレーズを 聞かれるところで 3回失敗して plain で接続可能。なーんかうまくいかない。しくしく。

PuTTY はポカミス(LをRにしてた_| ̄|○)を指摘されて接続成功。ふるふるくんありがとう。

PortForwarder は pubkey と identity がうまく作れてないみたい。帰ってからゆっくりやろう。

できなかった……_| ̄|○


03/25(Thu)

#25-01 ありがとうございました
解雇後にいろいろな人から「うちこないか」とお誘いを受けました。とても嬉しかったです。この場を 借りてお礼させていただきます。ありがとうございました。

一時金があるのと、会社都合での退職になるので、休養もかねて失業保険が出ている間は少しのんびり してみようかと思います。でも semantic web の研究はするよ?

#25-02 がーん
妻が入院することに。心配かけすぎてしまったなあ。ごめんよ…。

子育てのために父ちゃんは早めにがんばらなくちゃいけなくなってしまった。このままでは二人揃って 自沈してしまいかねん。まあ俺も入院して復活した(再発したけどな)ので、ゆっくり静養してもらって 復活してもらうのが今後のためにいいだろう。父ちゃんがんばるよ。


03/26(Fri)

#26-01 ban&kick
なんか知らんが 4時に目が覚めてしまったのでボケーっとしながらうろうろしていたら IRC に珍客。 ついにここにもきたかー、とか思いつつ起きてたみんなと相談して ban&kick。んで管理者に報告。

すぐ管理者から対処したーと報告があったので、join してたみんなにもこちらのセキュリティ方面も 認識してもらって、とりあえずよかったよかった。これでなるとの重要さが…

#26-02 さっそく職探し
しかし北海道は IT 関連の求人少ねえなあ…といろいろなサイトをうろうろしてたらなんとか一件発見。 応募するためにスキル一覧みたいのを書いてたら……思い出せない。「まずは職歴を書いてみれ」と IRC で助言があったので書いてみる。…転職しまくってるのでなんだかすごいことに(汗;)。そして 4時間かかって完成。はふ。

まあ受からんだろうけどまとまったのでいいか。

#26-03 [BUY]夕ゲ
QUX が汁の課金手続きしたーというので webmoney を買うことに。 ついでなので晩飯のおかずとか買ってくる。さらについでなので

を買ってくる。…webmoney 買おうと思ったらロッピーに 3人も並んでて重かったのであきらめて帰宅。 ひさびさに綾坂みつね買ったなあ。絵柄がとてもえっちだ。

シスターものでした。シスターが教会を建て直すために「プロの彼女」を演じてお布施(ぉぃ)をいただく という話のはず……なんだが、みつねなのでそうは問屋が卸さない。シスターあゆみかあいいなあ…。 首輪も出てきますよ(笑)

アフタヌーンは今月も楽しませていただきました。が、付録の出来がチョー悪い。ぽい。

#26-04 今日の娘
初めて自分でスプーンを使ってご飯を食べることができました。ぱちぱち。しかし途中でめんどくさく なって手づかみに…(笑)


03/27(Sat)

#27-01 MP-XP3210改造
メモリンク。

HDD を外して CF に入れ替えて軽量化ってのはいいなあ。退役するころになったらやってみるか。

#27-02 過去コンテンツ復活
プロ彼女』 購入記念で、昔作ってたコンテンツ

を復活させてみた。

しかし過去に持っていたものは全部売ってしまったので、これを再度アーカイブするのは札幌じゃ無理。 うにゅう。


03/28(Sun)

#28-01 親子でお散歩
ちょっと寒いけど(8度)、風も納まってきて晴れてるので雪が積もっている間はなかなかいけなかった 散歩に。ベビーカーに乗せようとするといやがるので、なんとかなだめつつ乗せてひざ掛けして出発。 ひさしぶりの外は景色が変わっていて面白そうにしている。

んで帰ってきて家の前の公園で外の初歩きに挑戦。最初は手を引きながらゆっくりと歩かせてみる。 だんだん慣れてきたので、手を離して見守っていると、自力でとことこ歩きました! 楽しくなってきたのか寒くて鼻を真っ赤にしているのになかなかやめようとしないので、満足するまで 歩かせたあとは急いで抱えて帰る。親のほうがぐったり。子供は元気だ。


03/29(Mon)

#29-01 返事がきた
今日応募した一社からすぐ返事がきて、履歴書.xls が添付されていた。Excel 持ってねーよ。しょうが ないので OOo で編集して、読めないかもしれないのでテキストファイルにも落として添付して送信。 疲れた…

#29-02 面白いぞこれは
メモリンク。

日本語があれっぽいけどこれは面白そうだ。…レジスト完了。うちはここ。日本語デター!!
03/30(Tue)

#30-01 しょくあん
雨が降っていたのでくじけて地下鉄で。ん〜一時間もかかった。なんとか昼休み前についたので手続き。 そんで次の説明会は 4/9 ということに。疲れたので帰りはタクシー。ドライバーが女性だった。はにゃ。


03/31(Wed)

#31-01 Audioscrobbler
いろんなところで紹介されてアクセス過多になったのか、データベースサーバを新しく設置するために 数日止まる、と発表されてました。

Audioscrobbler is offline for a few days while we move to our new database server. This new hardware should give us a much needed speed increase, stay tuned - we'll be back at the end of the week.
ん〜、RDF を import してみようと思っていたのに。

#31-02 くそあっぷる
ひさびさに CD を吸い出そうと思ったら、CDex がドライブを認識しない。ほかのアプリは大丈夫。ん〜? と思って CDex を 1.51 にしてみた。でもダメ。以前にやったレジストリ修正でもダメ。途方に暮れてしまったところで QUX が iTunes を使ってるのを思い出して再インストール。 バージョンアップしても挙動がヘンなのは直ってないな。なに! 再起動が必要だ? むかつくこいつ。

むかつくことを上がってきた QUX に話したら「ドライブ認識しなくなるのは iTunes のせい」と。なぬ! 速攻削除して CD-ROM のドライバを削除/再インストール。再起動なしに CDex で認識するようになった。

あっぷるむかつく。

#31-03 cssテスト導入
自分のとこも Another HTML-lint gateway でチェック。「よくできました」になったので終了。まあ基本なので The W3C MarkUp Validation Service でもチェック。問題なし。

#31-04 介護保険適用範囲
母が退院してから家事をするにも体がつらいらしく、なんとか介護保険で家事援助が適用されないか ケアワーカーさんと相談してきたのだが、なかなか難しいらしい。やってほしいのは

くらいなのだが、どうも「このくらい動ければ適用範囲内・外」という基準があるらしい。日常生活が つらくてもガマンすれとかそういうのが…。う〜ん。頼むよ白石区。ホワイトストーンズが助けにきて くれないかなあ…。できれば若いメイドさん希望<無理

#31-05 RSSの取得コスト
RDF ファイルは全体取得が基本です。RSS は特に Site Summary なので。わたしも似たような疑問を 持ったので、うちの RSS は HEAD で返す更新時刻は日記表紙(http://sharl.hauN.org/d/)と同じ更新時刻 を返すようにしています。もちろん GET で取ったときの dc:date も同じになってます。しかしこれらは RDF の作成に対して特に定義されているわけでもなさそうなので、現在のような混乱が起きているのだと 思います。

うちは blog ではないんでこの辺を自分流に解釈して RSS を生成していますが、どうやら世の中の RSS はあんまりそうなってないようで。HEAD で得られる結果と GET で得られる結果を比べるのは本質的な 差ではないような話もよく散見しますが、個人的には由唯さんと同じく「コスト高っ!」と思ってます。 求められているものは「新しく追加されたアイテムの検出」なので「ページ全体の更新時刻の取得」とは 別に考えなくてはいけないものなのかもしれません。

RDF と元データの更新時刻が同じだと嬉しい気がするのは俺だけなのかなあ。<疑問に疑問で返すな


Back Forward Return

3372 accesses since 2004/03/21.