<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>日々のこと</title>
        <link>http://hibinokoto.jp/</link>
        <description></description>
        <language>ja</language>
        <copyright>Copyright 2010</copyright>
        <lastBuildDate>Tue, 11 Aug 2009 03:58:47 +0900</lastBuildDate>
        <generator>http://www.sixapart.com/movabletype/</generator>
        <docs>http://www.rssboard.org/rss-specification</docs>
        
        <item>
            <title>ap_hook_translate_name() にフックをかける場合は http_request.h をインクルードしよう</title>
            <description><![CDATA[Apacheモジュールを開発する際にフックをかけるタイミングがたくさんありますが、そのフックの一覧と API が

<a href="http://dsas.blog.klab.org/archives/50626863.html">[補足記事]Apache 2.0 の hook 一覧(apache module 開発事初め その3-3) - DSAS開発者の部屋</a>
<a href="http://dsas.blog.klab.org/archives/50626863.html"><img style="border: 1px solid;" src="http://saycheese.travail.jp/medium/http://dsas.blog.klab.org/archives/50626863.html" width="200" height="150" border="0" alt="http://dsas.blog.klab.org/archives/50626863.html" /></a>

にまとめられています。
リンク先の Apache のバージョンは 2.0.58 で最近の 2.2.x とは若干の違いがあるようですが本当に若干です。
ap_hook_monitor() が追加されていて、ap_hook_http_method() が ap_hook_http_scheme()　に変更されているくらいでしょうか。

<a href="http://www.apache.jp/misc/download.html">Downloading Apache - Japanized Apache Site</a> から Apache のソースをダウンロードして展開したディレクトリを /path/to/httpd とすると /path/to/httpd/include 内で AP_DECLARE_HOOK を grep すればリンク先で紹介されている各種フックの説明と API が見つけられます。
どのヘッダにどのフックが宣言されているか以下にまとめます。

<ul>
<li>ap_mpm.h</li>
<ul>
<li>ap_hook_fatal_exception()</li>
</ul>
<li>http_config.h</li>
<ul>
<li>ap_hook_header_parser()</li>
<li>ap_hook_pre_config()</li>
<li>ap_hook_test_config()</li>
<li>ap_hook_post_config()</li>
<li>ap_hook_open_logs()</li>
<li>ap_hook_child_init()</li>
<li>ap_hook_handler()</li>
<li>ap_hook_quick_handler()</li>
<li>ap_hook_optional_fn_retrieve()</li>
</ul>
<li>http_connection.h</li>
<ul>
<li>ap_hook_create_connection()</li>
<li>ap_hook_pre_connection()</li>
<li>ap_hook_process_connection()</li>
</ul>
<li>http_core.h</li>
<ul>
<li>ap_hook_get_mgmt_items()</li>
</ul>
<li>http_log.h</li>
<ul>
<li>ap_hook_error_log()</li>
</ul>
<li>http_protocol.h</li>
<ul>
<li>ap_hook_insert_error_filter()</li>
<li>ap_hook_post_read_request()</li>
<li>ap_hook_log_transaction()</li>
<li>ap_hook_http_scheme()</li>
<li>ap_hook_default_port()</li>
</ul>
<li>http_request.h</li>
<ul>
<li>ap_hook_create_request()</li>
<li>ap_hook_translate_name()</li>
<li>ap_hook_map_to_storage()</li>
<li>ap_hook_check_user_id()</li>
<li>ap_hook_fixups()</li>
<li>ap_hook_type_checker()</li>
<li>ap_hook_access_checker()</li>
<li>ap_hook_auth_checker()</li>
<li>ap_hook_insert_filter()</li>
</ul>
<li>mpm_common.h</li>
<ul>
<li>ap_hook_monitor()</li>
</ul>
<li>scoreboard.h</li>
<ul>
<li>ap_hook_pre_mpm()</li>
</ul>
</ul>

コンフィグに関わるフックであれば http_config.h、コネクションに関するフックであれば http_connection.h とヘッダのファイル名でだいたいの当たりをつけることができるのではないでしょうか。中には当たりのつけづらいフックもありますが。

さて、ここまでが若干長い前置きです。
ap_hook_handler() くらいしか使わない単純なモジュールであれば特にヘッダを #include する必要はないですが、今回はリクエストされた URI をファイルシステムにマッピングするフェーズでちょっとやりたいことがあったので ap_hook_translate_name() にフックをかけようとしたら警告が出たんですね。

<pre class="terminal">[travail@cabane]/home/public/git/thumb% sudo /usr/sbin/apxs -c -i mod_thumb.c
/usr/lib/apr-1/build/libtool --silent --mode=compile gcc -prefer-pic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -fno-strict-aliasing  -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -pthread -I/usr/include/httpd  -I/usr/include/apr-1   -I/usr/include/apr-1   -c -o mod_thumb.lo mod_thumb.c && touch mod_thumb.slo
mod_thumb.c: In function 'thumb_register_hooks':
mod_thumb.c:189: warning: implicit declaration of function 'ap_hook_translate_name'
/usr/lib/apr-1/build/libtool --silent --mode=link gcc -o mod_thumb.la  -rpath /usr/lib/httpd/modules -module -avoid-version    mod_thumb.lo
/usr/lib/httpd/build/instdso.sh SH_LIBTOOL='/usr/lib/apr-1/build/libtool' mod_thumb.la /usr/lib/httpd/modules
/usr/lib/apr-1/build/libtool --mode=install cp mod_thumb.la /usr/lib/httpd/modules/
cp .libs/mod_thumb.so /usr/lib/httpd/modules/mod_thumb.so
cp .libs/mod_thumb.lai /usr/lib/httpd/modules/mod_thumb.la
cp .libs/mod_thumb.a /usr/lib/httpd/modules/mod_thumb.a
chmod 644 /usr/lib/httpd/modules/mod_thumb.a
ranlib /usr/lib/httpd/modules/mod_thumb.a
PATH="$PATH:/sbin" ldconfig -n /usr/lib/httpd/modules

--- SNIP ---

chmod 755 /usr/lib/httpd/modules/mod_thumb.so</pre>

３、４行目で「ap_hook_translate_name を明示的に宣言したらどうなんだい？」って言われてます。


<pre class="quote">mod_thumb.c: In function 'thumb_register_hooks':
mod_thumb.c:189: warning: implicit declaration of function 'ap_hook_translate_name'
</pre>

コンパイルは完了するし Apache をリスタートしても動作に問題なさそうなんですけど、やっぱり警告は気持ち悪いので ap_hook_translate_name() が 宣言されている http_request.h を #include して警告なしにコンパイルが完了。
利用するフックによって /path/to/httpd/include 内のヘッダを #include しないと警告が出る場合がありますよというお話。]]></description>
            <link>http://hibinokoto.jp/archives/2009/08/000311.html</link>
            <guid>http://hibinokoto.jp/archives/2009/08/000311.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Apache</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">ApacheModule</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">C</category>
            
            <pubDate>Tue, 11 Aug 2009 03:58:47 +0900</pubDate>
        </item>
        
        <item>
            <title>Class::MOP(0.81) と Data::Visitor::Callback(0.22) で警告</title>
            <description><![CDATA[Moose が 0.74 になったのに併せて Class::MOP が 0.81 になって今まで警告なしに動いていたスクリプトで警告が出るようになった。

<pre class="quote">The compute_all_applicable_attributes method has been deprecated. Use get_all_attributes instead.
 at /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/Class/MOP/Class.pm line 929
        Class::MOP::Class::compute_all_applicable_attributes('Class::MOP::Class::__ANON__::SERIAL::41=HASH(0x8a0b850)') called at /usr/lib/perl5/site_perl/5.8.8/Data/Visitor/Callback.pm line 42
        Data::Visitor::Callback::BUILDARGS('Data::Visitor::Callback', 'plain_value', 'CODE(0x9c09398)') called at generated method (unknown origin) line 4
        Data::Visitor::Callback::new('Data::Visitor::Callback', 'plain_value', 'CODE(0x9c09398)') called at /home/travail/public_html/SVNHOME/Shiori/bin/utils/shiori/../../../lib/Shiori/ConfigLoader.pm line 86
        Shiori::ConfigLoader::load('Shiori::ConfigLoader=HASH(0x9bf1c50)') called at /home/travail/public_html/SVNHOME/Shiori/bin/utils/shiori/../../../lib/Shiori/ConfigLoader.pm line 33
        Shiori::ConfigLoader::new('Shiori::ConfigLoader') called at /home/travail/public_html/SVNHOME/Shiori/bin/utils/shiori/../../../lib/Shiori/DateTime.pm line 44
        Shiori::DateTime::now('Shiori::DateTime') called at /home/travail/public_html/SVNHOME/Shiori/bin/utils/shiori/../../../lib/Shiori/Schema/Tag.pm line 162
        Shiori::Schema::Tag::update_shiori_count('Shiori::Schema::Tag=HASH(0x9c0a634)') called at /home/travail/public_html/SVNHOME/Shiori/bin/utils/shiori/../../../lib/Shiori/Schema/Shiori.pm line 260
        Shiori::Schema::Shiori::create_tags('Shiori::Schema::Shiori=HASH(0x9bf15d8)') called at /home/travail/public_html/SVNHOME/Shiori/bin/utils/shiori/../../../lib/Shiori/API/Shiori.pm line 97
        Shiori::API::Shiori::__ANON__() called at /usr/lib/perl5/site_perl/5.8.8/DBIx/Class/Storage/DBI.pm line 626
        DBIx::Class::Storage::DBI::txn_do('DBIx::Class::Storage::DBI::mysql=HASH(0x9a341c4)', 'CODE(0x9a35620)') called at /usr/lib/perl5/site_perl/5.8.8/DBIx/Class/Schema.pm line 734
        DBIx::Class::Schema::txn_do('Shiori::Schema=HASH(0x9a4c4d4)', 'CODE(0x9a35620)') called at /home/travail/public_html/SVNHOME/Shiori/bin/utils/shiori/../../../lib/Shiori/API/Shiori.pm line 110
        eval {...} called at /home/travail/public_html/SVNHOME/Shiori/bin/utils/shiori/../../../lib/Shiori/API/Shiori.pm line 110
        Shiori::API::Shiori::update('Shiori::API::Shiori=HASH(0x9a216e0)', 'HASH(0x9b39534)') called at ./update.pl line 24
        main::main() called at ./update.pl line 11</pre>

出力された警告の3行目を見ると

<pre class="quote">Class::MOP::Class::compute_all_applicable_attributes('Class::MOP::Class::__ANON__::SERIAL::41=HASH(0x8a0b850)') called at /usr/lib/perl5/site_perl/5.8.8/Data/Visitor/Callback.pm line 42</pre>

と言われる。
素直に Data::Visitor::Callback の42行目あたりを覗いてみると BUILDARGS の中で compute_all_applicable_attributes をコールしている。

<pre class="code">sub BUILDARGS {
    my ( $class, @args ) = @_;

    my $args = $class->SUPER::BUILDARGS(@args);

    # ここね
    my %init_args = map { $_->init_arg => undef } $class->meta->compute_all_applicable_attributes;

    my %callbacks = map { $_ => $args->{$_} } grep { not exists $init_args{$_} } keys %$args;</pre>

Class:MOP の 0.80_01 の Changes で

<pre class="quote">- compute_all_applicable_attributes is deprecated, use get_all_attributes</pre>

となっている。

Data::Visitor の AUTHOR の Yuval は Class::MOP の CONTRIBUTOR だからそのうち直る。って言うか、Class::MOP は IRC ないのか？

<strong>追記</strong>
じゃ、42行目の

<pre class="code">$class->meta->compute_all_applicable_attributes;</pre>

を

<pre class="code">$class->meta->get_all_attributes;</pre>

に変更したらいいのかと言うとそうわけでもなく、Data::Visitor::Callback では Squirrel で Moose と Mouse の切り分けを行っていて Moose を使用していた場合は get_all_attributes でいいのだけれど、Mouse を使用していた場合は見事に

<pre class="quote">Can't locate object method "get_all_attributes" via package "Mouse::Meta::Class"</pre>

でコケる。

<strong>追追記</strong>
<pre class="quote">Can't locate object method "get_all_attributes" via package "Mouse::Meta::Class"</pre>

は Mouse を 0.20 にすると解決する。
]]></description>
            <link>http://hibinokoto.jp/archives/2009/04/000305.html</link>
            <guid>http://hibinokoto.jp/archives/2009/04/000305.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">仕事のこと</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Moose</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Perl</category>
            
            <pubDate>Wed, 08 Apr 2009 17:22:25 +0900</pubDate>
        </item>
        
        <item>
            <title>Moose と Mouse と QueueQ4M(0.00018)</title>
            <description><![CDATA[私信になりますが、改めてという意味で別記事で。あと、はてなのアカウント持っていないので。

QueueQ4M (0.00018) 動いてます。

<ul>
<li>Any::Moose - 0.05</li>
<li>Moose - 0.72</li>
<li>Mouse - 0.17</li>
<li>Queue::Q4M - 0.00018</li>
</ul>

の環境ですっごい動いてます。

本来ならパッチを送りたいところでしたが如何せん Mouse と Moose に不慣れなものでああいった記事を書きました。
修正ありがとうございます。]]></description>
            <link>http://hibinokoto.jp/archives/2009/03/000304.html</link>
            <guid>http://hibinokoto.jp/archives/2009/03/000304.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">仕事のこと</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Moose</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Mouse</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Perl</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Queue::Q4M</category>
            
            <pubDate>Mon, 02 Mar 2009 15:59:09 +0900</pubDate>
        </item>
        
        <item>
            <title>Moose と Mouse と QueueQ4M(0.00017)</title>
            <description><![CDATA[Queue::Q4M をバージョン 0.00017 にアップグレードしたら 0.00016 まで動いていたスクリプトが動かなくなった。

<ul>
<li>Any::Moose - 0.04</li>
<li>Moose - 0.71</li>
<li>Mouse - 0.17</li>
<li>Queue::Q4M - 0.00017</li>
</ul>

Queueu::Q4M を実際に使ってるプロジェクトではモジュール化してしまってデバッグがちょこっとしずらいので、簡単なスクリプトを書いてみる。
ちなみに、そのプロジェクトでは Moose も Mouse も使っていないので use Queue::Q4M より先に　Moose なり Mouse なりがロードされていることはない。

<pre class="code">#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;
#use Moose;
#use Mouse;
use Queue::Q4M;

our $table = 'queue_export';

main();
exit;

sub main {
    my $q4m = Queue::Q4M->connect(
        connect_info => [
            'dbi:mysql:dbname=shiori_local;host=192.168.1.1;port=3308',
            'username', 'password'
        ]
    );
    while ( $q4m->next($table) ) {
        my $queue = $q4m->fetch_hashref( $table,
            [qw(created_on member_id type)] );
        warn Dumper($queue);
    }
}</pre>

こんなコードを実行してキューを入れてみると

<pre class="quote">[travail@mina]~% ./queue_export.pl
Attribute (__res) does not pass the type constraint because: Validation failed for 'Maybe[Queue::Q4M::Result]' failed with value Queue::Q4M::Result=ARRAY(0x9c32cac) at /usr/lib/perl5/site_perl/5.8.8/Mouse/Meta/Attribute.pm line 339
        Mouse::Meta::Attribute::verify_type_constraint_error('Mouse::Meta::Attribute=HASH(0x9c058b0)', '__res', 'Queue::Q4M::Result=ARRAY(0x9c32cac)', 'Maybe[Queue::Q4M::Result]') called at (eval 18) line 5
        Mouse::Meta::Attribute::__ANON__('Queue::Q4M=HASH(0x9be2978)', 'Queue::Q4M::Result=ARRAY(0x9c32cac)') called at /usr/lib/perl5/site_perl/5.8.8/Queue/Q4M.pm line 159
        Queue::Q4M::next('Queue::Q4M=HASH(0x9be2978)', 'queue_export') called at ./queue_export.pl line 22        main::main() called at ./queue_export.pl line 12</pre>

なんてエラーが出てきちゃう。0.00016 までは動いていたのになぁ。
0.00017 の Changes を見てみると

<pre class="quote">0.00017 - 20 Feb 2009
  - s/Squirrel/Any::Moose/g</pre>

Moose, Mouse の切り替えを Any::Moose に変えたみたい。
ということで、さっきのスクリプトの "use Moose", "use Mouse" のコメントアウトを順番にはずして試してみると、"use Moose" されているときはスクリプトが動いて、"use Mouse" されているときは動かない。

<strong>Queue::Q4M - 0.00016 の場合</strong>

<ul>
<li>明示的に Moose, Mouse をロードしていない場合でも動く</li>
<li>明示的に Moose をロードしている場合でも動く</li>
<li>明示的に Mouse をロードしている場合でも動く</li>
</ul>

<strong>Queue::Q4M - 0.00017 の場合</strong>

<ul>
<li>明示的に Moose, Mouse をロードしていない場合は動かない</li>
<li>明示的に Moose をロードしている場合は動く</li>
<li>明示的に Mouse をロードしている場合でも動かない</li>
</ul>

この結果は Mouse を 0.16 に下げても同じだったし、Any::Moose を 0.03 に下げてもだめだった。
と言うか、Queue::Q4M のインストールで DB につなぎにいかないでインストールしてたんですよね。面倒なので。
改めて DB つないでテストしてみたら同じエラーがちゃんと出てた。テストがちゃんと書かれててもインストールする側がちゃんと実行しなけりゃ意味ないですね。ごめんなさい、ごめんなさい。]]></description>
            <link>http://hibinokoto.jp/archives/2009/02/000303.html</link>
            <guid>http://hibinokoto.jp/archives/2009/02/000303.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">仕事のこと</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Any::Moose</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Moose</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Mouse</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Perl</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Queue::Q4M</category>
            
            <pubDate>Sun, 22 Feb 2009 23:24:20 +0900</pubDate>
        </item>
        
        <item>
            <title>文字実体参照（実体参照）•数値文字参照（文字参照）を RSS1.0 で表示する</title>
            <description><![CDATA[Firefox でちょん切れるです。IE に至ってはパースエラー。

とあるプロジェクトで吐いた RSS がどうも調子が悪い。
その RSS はこんな感じの。

<a href="/static/misc/invalid_recent.rss">ちょん切れちゃってる RSS</a>

4つ目の item の「<a href="http://d.hatena.ne.jp/higepon/20090126/1232937495" target="_blank">Emacs の Tramp こんなに便利とは - ひげぽん OSとか作っちゃうかMona-</a>」から下がちょん切れてる。ソースを見ても確かに20件あるのに5つ目の item の「<a href="http://alpha.mixi.co.jp/blog/?p=292" target="_blank">mixi Engineers’ Blog » DBMによるテーブルデータベース その弐</a>」以降の item が表示されない。

<pre class="quote">  4つ目の item
  &lt;item rdf:about=&quot;http://d.hatena.ne.jp/higepon/20090126/1232937495&quot;&gt;
    &lt;title&gt; Emacs の Tramp こんなに便利とは - ひげぽん OSとか作っちゃうかMona-&lt;/title&gt;
    &lt;link&gt;http://d.hatena.ne.jp/higepon/20090126/1232937495&lt;/link&gt;
    &lt;description&gt;便利だ。&lt;/description&gt;
    &lt;content:encoded&gt;便利だ。&lt;/content:encoded&gt;
    &lt;dc:date&gt;2009-01-27T03:05:52&lt;/dc:date&gt;
    &lt;dc:subject&gt;emacs&lt;/dc:subject&gt;
    &lt;dc:subject&gt;TIPS&lt;/dc:subject&gt;
    &lt;dc:subject&gt;ssh&lt;/dc:subject&gt;
    &lt;dc:subject&gt;Tramp&lt;/dc:subject&gt;
  &lt;/item&gt;
  5つ目の item
  &lt;item rdf:about=&quot;http://alpha.mixi.co.jp/blog/?p=292&quot;&gt;
    &lt;title&gt;mixi Engineers&amp;#8217; Blog &amp;raquo; DBMによるテーブルデータベース その弐&lt;/title&gt;
    &lt;link&gt;http://alpha.mixi.co.jp/blog/?p=292&lt;/link&gt;
    &lt;description&gt;&lt;/description&gt;
    &lt;content:encoded&gt;&lt;/content:encoded&gt;
    &lt;dc:date&gt;2009-01-27T03:04:22&lt;/dc:date&gt;
    &lt;dc:subject&gt;mixi&lt;/dc:subject&gt;
    &lt;dc:subject&gt;mikio&lt;/dc:subject&gt;
    &lt;dc:subject&gt;DBM&lt;/dc:subject&gt;
    &lt;dc:subject&gt;TokyoCabinet&lt;/dc:subject&gt;
  &lt;/item&gt;</pre>

RSS のソースをのぞくと気になるところを発見。mixi Engineers' Blog の <strong>&amp;#8217;</strong> と <strong>&amp;raquo;</strong> が非常に怪しい。以前、 HTML をパースして title タグを取ろうとしたときも「うぐぅ」って言っていたような気もする。きっと今回もそれが原因だと思う。
グーグルさんで調べてみると RSS(XML) で使用できる実体参照は

<ul>
<li>&amp;amp;(&amp;)</li>
<li>&amp;lt;(&lt;)</li>
<li>&amp;gt;(&gt;)</li>
<li>&amp;apos;(&apos;)</li>
<li>&amp;quot;(&quot;)</li>
</ul>
のみのようです。ちなみに、これらを<strong>定義済み実体</strong>と言うそうです。

mixi Engineers' Blog の <strong>&amp;raquo;</strong> は RSS(XML) では使用することができないので今回僕が吐いた RSS がちょん切れてしまって「うぐぅ」となっているのだろうと思います。
文字参照の <strong>&amp;#8217;</strong> の方も多分使用できないのだと思います。

うぐぅ。
上記の使用できる実体参照・文字参照はあくまでデフォルトでということで、<strong>&amp;#8217;</strong> と <strong>&amp;raquo;</strong> が定義された DTD を読み込めばよいそうです。
ということで、今回読み込んだ DTD はこれ。

<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>

その DTD を読み込んだ RSS がこれ。

<a href="/static/misc/valid_recent.rss">ちょん切れちゃってない RSS</a>

途中でちょん切れることなく表示されていますよね？XML のソースを見ると

<pre class="quote">  &lt;item rdf:about=&quot;http://alpha.mixi.co.jp/blog/?p=292&quot&gt;
    &lt;title&gt;mixi Engineers&amp;#8217; Blog &amp;raquo; DBMによるテーブルデータベース その弐&lt;/title&gt;
    &lt;link&gt;http://alpha.mixi.co.jp/blog/?p=292&lt;/link&gt;
    &lt;description&gt;&lt;/description&gt;
    &lt;content:encoded&gt;&lt;/content:encoded&gt;
    &lt;dc:date&gt;2009-01-27T03:04:22&lt;/dc:date&gt;
    &lt;dc:subject&gt;mixi&lt;/dc:subject&gt;
    &lt;dc:subject&gt;mikio&lt;/dc:subject&gt;
    &lt;dc:subject&gt;DBM&lt;/dc:subject&gt;
    &lt;dc:subject&&gt;TokyoCabinet&lt;/dc:subject&gt;
  &lt;/item&gt;</pre>

<strong>&amp;#8217;</strong> と <strong>&amp;raquo;</strong> のままですね。ちゃんと参照されているみたいです。

めでたし、めでたしと言いたいところだけれども、<a href="http://b.hatena.ne.jp/entrylist?sort=hot&threshold=&url=http%3A%2F%2Falpha.mixi.co.jp&mode=rss" target="_blank">はてブなんかの RSS のソースを見ると</a> <strong>&amp;#8217;</strong> は <strong>&#8217;</strong> に、<strong>&amp;raquo;</strong> は <strong>&raquo;</strong> になっていますが RSS を吐く際にアプリ側で変換しているのでしょうか？
この場合、常套手段って何なんでしょう？XML だと言っているのに XHMLT の DTD を読み込むのは間違っている気がしてならない。RSS2.0 の場合はどうなのだろうか？Atom の場合は？
うぬぅ。

そうそう、僕の MT には記事を書いている途中に記事の「公開状態」がこっそり「公開」になる新機能が着いています。書いている途中に記事を保存するとうっかり PING を送信してしまいます。
その更新扱いにされている自分の記事をRSSリーダー越し眺めているときってS目線で見ればいいのかM目線で見ればいいのか複雑な気持ちになります。

追記：
<a href="http://validator.w3.org/feed/check.cgi?url=http%3A%2F%2Fhibinokoto.jp%2Fstatic%2Fmisc%2Fvalid_recent.rss">W3C の RSS の構文チャックすると</a>ダメよダメダメダメ星人って言われる。]]></description>
            <link>http://hibinokoto.jp/archives/2009/01/000302.html</link>
            <guid>http://hibinokoto.jp/archives/2009/01/000302.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">仕事のこと</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">DTD</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">RSS</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">XML</category>
            
            <pubDate>Wed, 28 Jan 2009 12:59:09 +0900</pubDate>
        </item>
        
        <item>
            <title>30手前の男の子の年の越し方</title>
            <description><![CDATA[<strong>【12:00 秋葉原電気街口集合】</strong>
前日に待ち合わせ場所を秋葉原の電気街にしてくれと彼から連絡が入る。
ふたりで秋葉原に来るのははじめてだ。来ると思ってもいなかった。
目当ての物を探す途中で彼がガンダムのプラモデルにちょっと夢中になる。先月買った DS のGジェネをやって以来ちょっと欲しくなったらしい。
また寄り道。
今度はスーパーファミコン。僕が前から「アマゾンさんでスーパーファミコンを買いな」としきりに勧めていた。タクティクス・オーガをやりなって。ロマサガ3は名作だよって。
20分くらい店内をウロウロして結局買った。
その後、ソフマップへ行くが目当ての物が売っていなかった。僕はそこでバルクのメモリ 2G を2枚。

たこ焼き休憩。彼は塩だれ、僕はねぎポン。

たこ焼きが微妙に呼び水になってお腹が空いてくるも、その後に立ち寄ったお店でやっと目当ての物が見つかる。PS のメモリカード。PS2 のではなく PS の。

<strong>【14:30 チェックイン】</strong>
途中、コンビニでコーラ、カップラーメン、ジョージアをそれぞれ2つづつと 1L のお茶を1本買い、宿泊先の品川プリンスへチェックイン。
年末の品プリは意外と混んでいて家族連れやらカップルやらサッカー部の高校生やらでごった返していた。
チェックインを済ませ部屋へ入るととりあえずジョージアと煙草。「家族やカップルばっかりだね」とか「そうですね」とかとか。
リュックから DS を取り出してボンバーマンかぷよぷよかでちょっと悩んでボンバーすることに決定。
ナイスボンバーを何度か出して今度はリュックから PS2 とファイナル・ファンタジー・タクティクスとファンタジーゾーンを取り出す。PS のメモリカードはファイナル・ファンタジー・タクティクスのため。
前日の電話で

<pre class="quote">彼：「アマゾンでスーファミ見てみたんだけど、やっぱソフトの方がこれと言ってなくてさぁ。<br />
　　　で、FFT やろうかなと思って。PS の」<br />
僕：「FFT なら持ってるから貸してあげるよ」<br />
彼：「マジでか？！持ってるのか？！」</pre>

という流れ。しばらく彼が FFT をやるのを眺める。

<strong>【18:30 ガキの使いやあらへんで】</strong>
今回ふたりで品プリに泊まることになった理由はこれ。
年明けのおデートのときに「年末のガキ見ました？」と言われ「見てない」という会話を2年くらい続けていた。僕のテレビを見る習慣がなくなってしまったからだ。
その度に「じゃあさ、大晦日にどっかホテル予約してピザ注文してふたりで見ようよ」なんて冗談半分で言っていたのが今年になってようやく実現したのだった。
もうテンション上がりっぱなしの笑いっぱなし！
頃合をみて注文しておいたピザが届く。
ピザにポテトにチキンにコーラに、もう言うことなし！
品プリに止まっているどの家族よりもどのカップルよりも笑ってたと思う。

<strong>【26:00 鯉の愛で方、鶏の愛で方、女の子の愛で方】</strong>
ガキの使いが終わってだらだらとテレビを見ながらボンバー。
彼がテレビのチャンネルをパチパチするも特におもしろそうな番組が見当たらないが NHK で鯉の愛で方的な番組をやっていたのですかさず、「今のがいい！鯉のやつ！！」と NHK にチャンネルを戻させる。その後の鶏の愛で方的なものも見る。
ベッドにもたれた背中に定期的な振動を感じる。一方僕は鯉と鶏を愛でていた。
翌朝、彼に聞いてみたら「それはないな」と一蹴される。

<strong>【28:00 就寝】</strong>
おやすみなさい。

<strong>【10:00 起床】</strong>
おはようございます。

<strong>【11:00 チェックアウト】</strong>
途中、「チャックアウトしたいんやけども」という僕の台詞が彼に刺さったらしく、調子に乗って何度か繰り返していたら「しつこいですよ」的なことを言われる。
ショック！さわさんショック！！

<strong>【12:15 3時間パック】</strong>
チャックアウト後、何となく渋谷へ向かってドトールでお昼ごはん。
彼がかくかくしかじかでまだ帰りたくないと言うので29歳と28歳の男の子ふたりが元旦から渋谷のマンガ喫茶へ行くでござるの巻。
マンガ喫茶では昨日食べられなかったカップラーメン（日清のカレー味）をすすりながら持ち込みの PS2 で TTF を進める。僕は隣でグーグルさんを使って記憶が曖昧になっている FFT のことを調べる。

<strong>【15:15 解散】</strong>
今月のおデートの日付の確認をして新宿駅で解散。
来年も大晦日にダウンタウンがやるなら僕らもやりたい。]]></description>
            <link>http://hibinokoto.jp/archives/2009/01/000301.html</link>
            <guid>http://hibinokoto.jp/archives/2009/01/000301.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">彼と僕のこと</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">休日</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">彼</category>
            
            <pubDate>Tue, 06 Jan 2009 22:20:02 +0900</pubDate>
        </item>
        
        <item>
            <title>明日（11月23日）の夜辺りに日々のこと落とします</title>
            <description><![CDATA[前の記事、<a href="http://hibinokoto.jp/archives/2008/11/post-299.html">立った！mysql が立ったよ！</a>で書いた通り mysql のレプリケーションがずれてしまったのでそれを直します。
なので多分、この日々のことも落ちます。

<div class="quote">なので、「innodb_flush_method = O_DIRECT」 とかに適当に設定したら立っちゃったんですよねぇ、mysql。</div>

と書きましたが、数時間経つと同じエラーが出て mysql が落ちます。
<strong>innodb_flush_method = O_DSYNC</strong> にしても数時間経つと同じようにエラーを吐いて mysql が落ちます。これはもう mysql が flush する部分のソース読むしかないのかな。

/var/lib/mysql/ibdata1 は 12G。ファイルサイズが原因なんじゃないかとは感じていますがマスタの mysql は落ちずに頑張ってくれているので、単純にファイルサイズの問題でもないとは思うんですけどねぇ・・・。誰か知ってます？
]]></description>
            <link>http://hibinokoto.jp/archives/2008/11/000300.html</link>
            <guid>http://hibinokoto.jp/archives/2008/11/000300.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">仕事のこと</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">MySQL</category>
            
            <pubDate>Sun, 23 Nov 2008 02:02:51 +0900</pubDate>
        </item>
        
        <item>
            <title>立った！mysql が立ったよ！</title>
            <description><![CDATA[まぁ、クララなんですけどね。

今回のエラーのキーワードは何と言っても

<pre class="quote">081111  1:56:26  InnoDB: Error: the OS said file flush did not succeed
081111  1:56:27  InnoDB: Operating system error number 5 in a file operation.
InnoDB: Error number 5 means 'Input/output error'.</pre>

の部分なのでとりあえず perror をしてみる。

<pre class="terminal">[travail@mina]/home/travail% perror 5
OS error code   5:  Input/output error</pre>

うん、あまり意味ないですね。
でも、<strong>flush</strong> はキーワードだと思うので google さんに聞いてみると。
<a href="http://dev.mysql.com/doc/refman/5.1/ja/innodb-parameters.html" target="_blank">MySQL ::   MySQL 5.1 リファレンスマニュアル :: 13.5.4 InnoDB 起動オプションとシステム変数</a>

<a href="http://dev.mysql.com/doc/refman/5.1/ja/innodb-parameters.html"><img src="http://saycheese.travail.jp/medium/http://dev.mysql.com/doc/refman/5.1/ja/innodb-parameters.html" width="200" height="150" border="0" alt="http://dev.mysql.com/doc/refman/5.1/ja/innodb-parameters.html" /></a>

ここの、「innodb_flush_method」がとっても怪しいですよね。

<pre class="quote">もし fdatasync  (デフォルト)に設定すると、InnoDB  はデータとログ ファイルの両方
をフラッシュする為に fsync() を利用します。
なんたらかんたら・・・</pre>

「データとログファイルの両方を」なんてよくわからない言葉を使っていますが、データとはバッファのことではないかと。innodb_log_buffer_size で指定している、あのバッファ。
ログファイルはログファイルですよね。innodb_log_file_size で指定しているやつかな。
で、僕は innodb_flush_method を /etc/my.cnf で指定していなかったのでデフォルトの fdatasync で動いていたみたいなんですね。
なので、「innodb_flush_method = O_DIRECT」 とかに適当に設定したら立っちゃったんですよねぇ、mysql。
なんでかは知らない。知らないけどこれは忘れないように書いておきたいと思います。

innodb_flush_method には下記のものが設定できる。
<ul>
<li>fdatasync</li>
<ul>
<li>バッファとログファイルを flush するのに fsync(2) を使用する。（fdatasync って言ってんのに fdatasync(2) を使っていない）</li>
<li>fsync(2) はファイル更新の際にメタ情報（stat）を更新する。fdatasync(2) は更新しない。</li>
<li>そもそも、どのフラグ立ててファイルをオープンして fsync(2) してるのか不明。</li>
</ul>
<li>O_DSYNC</li>
<ul>
<li>バッファとログファイルを flush するのに fsync(2) を使用するのは fdatasync を指定した場合と一緒。ただ、バッファ、ログファイルを O_SYNC でオープンする。</li>
<li>O_DSYNC と言っているものの、O_DSYNC フラグを立ててファイルをオープンするわけでなない。</li>
<li>O_SYNC フラグでファイルをオープンすると、書き込み（write(2)）が終わるまで必ず呼び出しもとのプロセスをブロックする。</li>
</ul>
<li>O_DIRECT</li>
<ul>
<li>バッファとログファイルを fsync(2) で flush。O_DIRECT フラグを立ててオープン。</li>
<li>ファイルに対する I/O のキャッシュを最小化しようとする。</li>
<li>このフラグを使用すると一般的に機能が低下する。</li>
<li>「O_DIRECT でいつも困るのは、インタフェース全部が本当にお馬鹿な点だ。たぶん危ないマインドコントロール剤で頭がおかしくなったサルが設計したんじゃないかな」 -- Linus  
</li>
</ul>
</ul>

innodb_flush_method を O_DIRECT にして何でクララが立ち上がったかはわからないけれど、O_DIRECT はやめて fdatasync か O_DSYNC にしようかと思います。
クララが立ったのはいいのですが5,000万レコードのレプリケーションは見事にずれていたので週末にでも復旧作業しないといけません。やれやれです。

あ、それと記事を書いている途中に「公開状態」がいつの間にか「公開」になっているんですけど誰ですか？]]></description>
            <link>http://hibinokoto.jp/archives/2008/11/000299.html</link>
            <guid>http://hibinokoto.jp/archives/2008/11/000299.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">仕事のこと</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">C</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">linux</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">mysql</category>
            
            <pubDate>Tue, 11 Nov 2008 19:33:13 +0900</pubDate>
        </item>
        
        <item>
            <title>InnoDB: Error: the OS said file flush did not succeed</title>
            <description><![CDATA[いつの間にか mysql が落ちていた。そしてまだ立ち上がらない。

<pre class="quote">081111  1:56:26  InnoDB: Error: the OS said file flush did not succeed
081111  1:56:27  InnoDB: Operating system error number 5 in a file operation.
InnoDB: Error number 5 means 'Input/output error'.
InnoDB: Some operating system error numbers are described at
InnoDB: http://dev.mysql.com/doc/refman/5.0/en/operating-system-error-codes.html
InnoDB: File operation call: 'flush'.
InnoDB: Cannot continue operation.

Number of processes running now: 0
081111 01:56:29  mysqld restarted
081111  1:56:30  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
081111  1:56:31  InnoDB: Starting log scan based on checkpoint at
InnoDB: log sequence number 7 2108323381.
InnoDB: Doing recovery: scanned up to log sequence number 7 2108364559
InnoDB: 1 transaction(s) which must be rolled back or cleaned up
InnoDB: in total 63 row operations to undo
InnoDB: Trx id counter is 0 10543104
081111  1:56:31  InnoDB: Starting an apply batch of log records to the database...
InnoDB: Progress in percents: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 
InnoDB: Apply batch completed
InnoDB: In a MySQL replication slave the last master binlog file
InnoDB: position 0 144, file name mysqld-bin.000020
InnoDB: Starting in background the rollback of uncommitted transactions
081111  1:56:32  InnoDB: Rolling back trx with id 0 10542683, 63 rows to undo
081111  1:56:33  InnoDB: Started; log sequence number 7 2108364559
081111  1:56:37 [Warning] Neither --relay-log nor --relay-log-index were used; so replication may break when this MySQL server acts as a slave and has his hostname changed!! Please use '--relay-log=/var/run/mysqld/mysqld-relay-bin' to avoid this probl
em.

InnoDB: Rolling back of trx id 0 10542683 completed
081111  1:56:37  InnoDB: Rollback of non-prepared transactions completed
081111  1:56:37 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.0.45'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  Source distribution
081111  1:56:37 [Note] Slave I/O thread: connected to master 'repl@192.168.1.1:3306',  replication started in log 'mysqld-bin.000020' at position 1058192307
081111  1:56:37 [Note] Slave SQL thread initialized, starting replication in log 'mysqld-bin.000020' at position 1058178872, relay log '/var/run/mysqld/mysqld-relay-bin.000230' position: 16306827
081111  2:37:28  InnoDB: Error: the OS said file flush did not succeed
081111  2:37:28  InnoDB: Operating system error number 5 in a file operation.
InnoDB: Error number 5 means 'Input/output error'.
InnoDB: Some operating system error numbers are described at
InnoDB: http://dev.mysql.com/doc/refman/5.0/en/operating-system-error-codes.html
InnoDB: File operation call: 'flush'.
InnoDB: Cannot continue operation.</pre>

はじめて見るログです。読んだ感想としては「イヤな感じ」がしますよね。
何が原因なのかわからないし、ぶっちゃけちゃうとわからなくてもいいかなぁ、なんて思ってます。
落ちたのがスレーブ側なのでもう一回スレーブ組み直してもいいなぁと。
ただ、ひとつだけ大きな DB があって約5,000万レコード。マスタからこのデータ持ってくるの面倒。
週末にでもやってみましょうかね。

その5,000万レコードの DB は Catalyst + DBIC で作ったアプリの DB なんですけど、この量のレコードでも結構普通に動くものです。DBIC で sth 直接握って SQL 発行したりしなくても大丈夫。
ま、僕くらいしか使ってないからね。

それはそうと、MT の「公開状態」の設定がデフォルトで「公開」になっていたんですけど、誰ですかいじったのは？誰にも言いませんのでコメントください。]]></description>
            <link>http://hibinokoto.jp/archives/2008/11/000298.html</link>
            <guid>http://hibinokoto.jp/archives/2008/11/000298.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">仕事のこと</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">MySQL</category>
            
            <pubDate>Tue, 11 Nov 2008 15:50:31 +0900</pubDate>
        </item>
        
        <item>
            <title>どう書く？</title>
            <description><![CDATA[時折悩むのが Catalyst の attribute の ':'（コロン）。
<a href="http://search.cpan.org/~zarquon/Catalyst-Manual-5.7013/lib/Catalyst/Manual/Cookbook.pod#Basics" target="_blank">Catalyst::Manual::Cookbook</a> では

<pre class="code">sub end : Private {</pre>

でも、Helper で生成される Controller では

<pre class="code">sub index :Path :Args(0) {</pre>

コロンの後ろに半スペ入れるの？入れないの？
Helper で生成される方は半スペが入ってないので今ではそれに合わせていますけど、以前は CookBook の方に合わせて書いていたからどうしようもなく直したい。

で、みなさんはどう書く？]]></description>
            <link>http://hibinokoto.jp/archives/2008/10/000297.html</link>
            <guid>http://hibinokoto.jp/archives/2008/10/000297.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">仕事のこと</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Catalyst</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Perl</category>
            
            <pubDate>Wed, 29 Oct 2008 21:08:18 +0900</pubDate>
        </item>
        
        <item>
            <title>UNIQLOCK のこと</title>
            <description><![CDATA[23日から UNIQLOCK が秋冬バージョンになったそうです。

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="424" height="278" codebase="http://fpdownload.adobe.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"><param name="allowScriptAccess" value="always" /><param name="movie" value="http://www.uniqlo.jp/uniqlock/swf/blog_large.swf?user_id=8OcjMmz2hb3hx1o7" /><param name="base" value="." /><param name="quality" value="high" /><param name="wmode" value="transparent" /><embed src="http://www.uniqlo.jp/uniqlock/swf/blog_large.swf?user_id=8OcjMmz2hb3hx1o7" width="424" height="278" allowScriptAccess="always" base = "." quality="high" wmode="transparent" pluginspage="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" /></object>

4人でディズニーに行ったりするらしいです。]]></description>
            <link>http://hibinokoto.jp/archives/2008/10/000296.html</link>
            <guid>http://hibinokoto.jp/archives/2008/10/000296.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">なんてことないこと</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">女の子</category>
            
            <pubDate>Fri, 24 Oct 2008 01:46:50 +0900</pubDate>
        </item>
        
        <item>
            <title>Storable で Can&apos;t store CODE</title>
            <description><![CDATA[例えばこんなコードを実行すると

<pre class="code">#!/usr/bin/perl

use strict;
#use warnings;
use Storable qw//;

my $coderef = sub {};
my $freezed = Storable::freeze($coderef);
my $thawed  = Storable::thaw($freezed);

exit;</pre>

怒られます。

<pre class="quote">Can't store CODE items at blib/lib/Storable.pm (autosplit into blib/lib/auto/Storable/_freeze.al) line 339, at ./storable.pl line 12</pre>

これの解決として、$Storable::Deparse に真値を入れてあげればよいみたい。上記のコードに 「$Storable::Deparse = 1」 にみたいなことをして再度実行してみると

<pre class="quote">Can't eval, please set $Storable::Eval to a true value at blib/lib/Storable.pm (autosplit into blib/lib/auto/Storable/thaw.al) line 415, at ./storable.pl line 13</pre>

と怒られる。
今度は「please set $Storable::Eval to a true value」と言ってくれているので freeze のときに怒っていた人とは別の人ですね、きっと。 優しさを感じます。mst ではないことは確かですね。
で、結局スクリプトはこうなります。

<pre class="code">#!/usr/bin/perl

use strict;
#use warnings;
use Storable qw//;
use Data::Dumper;

$Storable::Deparse = 1;
$Storable::Eval    = 1;

my $coderef = sub {};
my $freezed = Storable::freeze($coderef);
my $thawed  = Storable::thaw($freezed);

exit;</pre>

Cache::*** 系をデバッグしてて適当に Catalyst の $c をキャッシュしようと思ったら「Can't store CODE」のエラーに出くわしたんですね。今まで CODE をキャッシュしたことがなかったのかなぁと思うとそうでもないような気がします。でも、キャッシュしたことがなかったんでしょうね。]]></description>
            <link>http://hibinokoto.jp/archives/2008/10/000295.html</link>
            <guid>http://hibinokoto.jp/archives/2008/10/000295.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">仕事のこと</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Perl</category>
            
            <pubDate>Wed, 22 Oct 2008 16:36:44 +0900</pubDate>
        </item>
        
        <item>
            <title>Air Mac 入院する</title>
            <description><![CDATA[Air Mac がブートしなくなってので先日の日曜に渋谷の Apple Store に行った。
残念ながら当日の予約はすでに一杯で改めて別の日に予約を入れなければならなかった。
リカバリCDを入れて運良くブートした際に First Aid でも修復でいないと言われたので明らかに HDD がおかしくなっているので交換してもらいたいのだが、その旨伝えるだけでも予約を入れなければならない。やれやれですよね。

その予約の日が今日で、店員さんにかくかくしかじか伝えて HDD 交換の手続きに入る。この間、3分。
予約できて店員さんがしっかりついて診てもらえると安心するかもしれないですけど、逆に予約を入れないといけないというのは何とも煩わしい限り。

あと、Mac Book の HDD の故障はよく聞く話で、僕も Mac を使うのははじめてなので、Mac Book だからということで特に気をつけなければならない点はあるのかを店員さんに聞いてみると

<div class="quote">・物理的衝撃に気をつける
　Mac もテレビやカメラなど他の電気製品と一緒です。強い衝撃には耐えられません。

・電気的衝撃に気を付ける
　Mac もテレ・・・。急に電源を落としたりしてはいけません。

・布団など布の上に置かない
　Ma・・・。長時間熱のこもるような状況で使用してはいてません。</div>

Genius の返答に拍子を抜かれつつも改めて、ごく一般的な机に載せて使っている分には問題ないのか？クーラーパッド的なものは必要ないのか？を聞いてみると。

<div class="quote">大丈夫です。ただ、わたしはなるべく優しくしてあげたいので冷却ファンの上に乗せていますけどね。特別必要ではありません。</div>

とのこと。
マジでぇ・・・？僕としてはぶっちゃけて欲しかった。「実はぁ、ここだけの話なんですけどぉ・・・」って。そしたらクーラーパッド的なものも考えるのになぁ。日頃の行いが悪いからかなぁ・・・。

あと、Daisuke 的 Maki さんらしき人物を見かけたが人違いだろうか。場所的に「ちょっと Apple Store に行ってくる」ってのも考えられる。]]></description>
            <link>http://hibinokoto.jp/archives/2008/09/000294.html</link>
            <guid>http://hibinokoto.jp/archives/2008/09/000294.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">なんてことないこと</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Mac</category>
            
            <pubDate>Tue, 30 Sep 2008 23:02:29 +0900</pubDate>
        </item>
        
        <item>
            <title>estcmd search で複数の属性に対して検索をかけるとき</title>
            <description><![CDATA[Hyper Estraier の estcmd search で複数の属性に対して検索をかける場合、

<pre class="quote">estcmd search -attr '@uri STRINC mydoc @id NUMBT 1 100' /tmp/casket</pre>

ではなくて、

<pre class="quote">estcmd search -attr '@uri STRINC mydoc' -attr '@id NUMBT 1 100' /tmp/casket</pre>

とする。

<a href="http://hyperestraier.sourceforge.net/uguide-ja.html#estcmd" target="_blank">ユーザーガイド</a>に

<div class="quote">-attrは絞り込みの属性条件を指定します。複数指定可能です。</div>

とあるのでそのままの意味で <strong>-attr</strong> を複数指定すればいいんだけど1時間以上悩んだ。google さんに聞いても実際に -attr を複数指定しているコマンドの例文なんて全然ひっかからないし。もう、じぇ～んじぇん。
しまいには、

<pre class="quote">estcmd search -attr '@uri STRINC mydoc AND @id NUMBT 1 100' /tmp/casket</pre>

とか試してみたりして。
もちろんこんな構文が通用するわけもなく、ごく当たり前に0件っていう結果が返ってくるわけだけど、さすがにこのコマンドを試した自分が恥ずかしくなった。
何と言うか、クラスでも人気の女の子に

<div class="quote">僕：「良かったら今度食事でもどうですか？」
女：「何で？」（即答）</div>

いやいや、ちょっと待って。即答しないで。「な～んちゃって」って言わせてよ。みたいな感じですよね。Hyper Estraier にもこの「な～んちゃって」の部分を汲み取ってほしかったんですけどね。残念です。]]></description>
            <link>http://hibinokoto.jp/archives/2008/09/000293.html</link>
            <guid>http://hibinokoto.jp/archives/2008/09/000293.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">仕事のこと</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">HyperEstraier</category>
            
            <pubDate>Mon, 29 Sep 2008 22:37:12 +0900</pubDate>
        </item>
        
        <item>
            <title>つ</title>
            <description><![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://hibinokoto.jp/static/images/08-09-13_001.html" onclick="window.open('http://hibinokoto.jp/static/images/08-09-13_001.html','popup','width=1200,height=1600,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://hibinokoto.jp/static/images/08-09-13_001-thumb-400x533.jpg" width="400" height="533" alt="post-292-1.jpg" class="mt-image-none" style="" /></a></span>

前の連休に三重に行った。お伊勢さん狙いで。
あわび（食べ物の方）、さざえさん、海老ちゃんがおいしい。伊勢うどんはおいしくない。塩ソフトはおいしい。残念ながら三重牛とモスご当地メニューの味噌カツバーガーが食べられなかった。

お伊勢さんは内宮より外宮の方がひっそりとして趣があってよい。「趣があってよい」って「大変遺憾である」みたいな便利な言葉。
内宮は月讀荒御魂宮（つきよみあらみたまのみや）、外宮は月夜見宮（つきよみのみや）がよい。
残念ながら小柄でアニメ声の巫女さんは見当たらなかった。

帰りの名古屋駅の新幹線のホームでなぎら健壱を見かけた。超上機嫌だった。
味噌カツはまぁまぁだった。味噌よりソースの方がいい。

そうそう、往路に名古屋駅で下車し駅前をぐるっとしたが名古屋ってそう開けたところではないのが以外だった。強いて言えば、大宮だ。Spring や InRed のファッションチェックで大宮が出たことがあるだろうか？あるかもしれないが、記憶にない。逆に、名古屋は出てるよね。だから、大きな街だと思っていた。もっと頑張らないと、名古屋！]]></description>
            <link>http://hibinokoto.jp/archives/2008/09/000292.html</link>
            <guid>http://hibinokoto.jp/archives/2008/09/000292.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">なんてことないこと</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">photo</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">休日</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">写真</category>
            
            <pubDate>Sat, 27 Sep 2008 22:35:36 +0900</pubDate>
        </item>
        
    </channel>
</rss>
