<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
         xmlns:dc="http://purl.org/dc/elements/1.1/"
         xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
         xmlns:content="http://purl.org/rss/1.0/modules/content/"
         xmlns:admin="http://webns.net/mvcb/"
         xmlns:cc="http://web.resource.org/cc/"
         xmlns:foaf="http://xmlns.com/foaf/0.1/"
         xmlns="http://purl.org/rss/1.0/"
         xml:lang="ja">
<channel rdf:about="http://www.baldanders.info/spiegel/log2/programming.rdf.xml">
  <title>Programming -- Baldanders.info</title>
  <link>http://www.baldanders.info/spiegel/log2/programming.shtml</link>
  <description>コンピュータ・プログラミングに関する記事</description>
  <dc:language>ja</dc:language>
  <dc:date>2010-12-09T20:06:25+09:00</dc:date>
  <admin:generatorAgent rdf:resource="http://www.movabletype.org/?v=5.12" />
  <dc:creator>Spiegel</dc:creator>
  <foaf:maker>
    <foaf:Person>
      <foaf:nick>Spiegel</foaf:nick>
      <foaf:mbox_sha1sum>f12cadffbcaea50abf7383e06b5386ceec0bd250</foaf:mbox_sha1sum>
      <rdfs:seeAlso rdf:resource="http://www.baldanders.info/spiegel/profile/foaf.rdf.xml"/>
    </foaf:Person>
  </foaf:maker>
  <cc:license rdf:resource="http://creativecommons.org/licenses/by/2.1/jp/" />
  <image rdf:resource="http://www.baldanders.info/images/baldanders.png"/>

  <items>
    <rdf:Seq>
    <rdf:li rdf:resource="http://www.baldanders.info/spiegel/log2/000502.shtml" />
    
    <rdf:li rdf:resource="http://www.baldanders.info/spiegel/log2/000481.shtml" />
    
    <rdf:li rdf:resource="http://www.baldanders.info/spiegel/log2/000478.shtml" />
    
    <rdf:li rdf:resource="http://www.baldanders.info/spiegel/log2/000427.shtml" />
    
    <rdf:li rdf:resource="http://www.baldanders.info/spiegel/log2/000424.shtml" />
    
    <rdf:li rdf:resource="http://www.baldanders.info/spiegel/log2/000413.shtml" />
    
    <rdf:li rdf:resource="http://www.baldanders.info/spiegel/log2/000397.shtml" />
    
    <rdf:li rdf:resource="http://www.baldanders.info/spiegel/log2/000374.shtml" />
    
    <rdf:li rdf:resource="http://www.baldanders.info/spiegel/log2/000371.shtml" />
    
    <rdf:li rdf:resource="http://www.baldanders.info/spiegel/log2/000359.shtml" />
    
    <rdf:li rdf:resource="http://www.baldanders.info/spiegel/log2/000354.shtml" />
    
    <rdf:li rdf:resource="http://www.baldanders.info/spiegel/log2/000352.shtml" />
    
    <rdf:li rdf:resource="http://www.baldanders.info/spiegel/log2/000346.shtml" />
    
    <rdf:li rdf:resource="http://www.baldanders.info/spiegel/log2/000280.shtml" />
    
    <rdf:li rdf:resource="http://www.baldanders.info/spiegel/log2/000238.shtml" />
    </rdf:Seq>
  </items>
</channel>


<item rdf:about="http://www.baldanders.info/spiegel/log2/000502.shtml">
  <title>Ruby 勉強会？</title>
  <link>http://www.baldanders.info/spiegel/log2/000502.shtml</link>
  <description>「ビジネスベースひろしま」が主催するイベントに参加しました。</description>
  <dc:subject>Programming</dc:subject>
  <dc:creator>Spiegel</dc:creator>
  <dc:date>2010-12-09T20:06:25+09:00</dc:date>
  <cc:license rdf:resource="http://creativecommons.org/licenses/by/2.1/jp/" />
  <content:encoded><![CDATA[<p>
「ビジネスベースひろしま」が主催する<a href="http://www.b-base.jp/blog/index.php?itemid=63">イベント</a>に仕事仲間の人と一緒に参加しました。
講師にまつもとゆきひろさんをお招きして「広がるRubyの世界」というタイトルでトークライブが行われました。
講演の様子は <a href="http://www.ustream.tv/recorded/11317854">Ustream で公開</a>されていますので，興味のある方は是非ご覧になってください。
</p><div style="margin-left:auto; margin-right:auto; text-align:center;">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="360" height="222" id="utv897133" name="utv_n_989409"><param name="flashvars" value="loc=%2F&amp;autoplay=false&amp;vid=11317854&amp;locale=ja_JP&amp;hasticket=false&amp;id=11317854&amp;v3=1" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.ustream.tv/flash/viewer.swf" /><embed flashvars="loc=%2F&amp;autoplay=false&amp;vid=11317854&amp;locale=ja_JP&amp;hasticket=false&amp;id=11317854&amp;v3=1" width="360" height="222" allowfullscreen="true" allowscriptaccess="always" id="utv897133" name="utv_n_989409" src="http://www.ustream.tv/flash/viewer.swf" type="application/x-shockwave-flash" /></object>
</div><p>
個人的には Ruby の中身に踏み込んだ内容を期待してたのですが，どうも参加者の皆さん「スーツ」の方が多かったみたいで，結果的には「Ruby の歴史」みたいな内容になりました。
まぁ私は生のまつもとゆきひろさんを見ることができたのでよしとします。
以下，2点ほど感想を。
</p><ul>
<li><a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html">TIOBE</a> で Ruby は現在10位。
    でも個人的に驚いたのは Objective-C が（13位からジャンプアップして）8位につけていることだった。
    やはり iOS の影響が大きいのかな。</li>
<li>BDD （Behavior Driven Development）については不勉強だった。もっと精進しないと。</li>
</ul><p>
まつもとゆきひろさんの講演後，質疑応答が終わると，司会者が「ここでちょっと」といきなり Erlang のプレゼンテーションを始めようとした。
「なんちう失礼な」と思っていたら，司会者の PC が調子悪いみたいで，いきなり「まつもとさん，Erlang の事でご存知のことがありましたらしゃべっていただけませんか」みたいなことを言い出す。
なに？ そのムチャぶり。
それでも難なく Erlang について解説をされるまつもとゆきひろさんは流石である。
</p><p>
数年前から組み込みの世界もマルチコア化が進んでいて，並列処理に強いと言われる Erlang には興味があったのだ。
マツダのお膝元である広島で車載コンピュータの実装に Erlang を利用しようという動きがあることに驚いてしまった。
目の付け所はいいと思う。
本当は Erlang の採用実績とか言語の癖とか色々聞きたかったのだが，プレゼンテーションが中途半端に終ってしまったのは残念である。
まぁでも， Ruby の作者であるまつもとゆきひろさんを前に Erlang のプレゼンをしようなんてホンマ失礼な話である。
</p><p>
帰りに仕事仲間の人とも少し話をしたのだが，職業エンジニアから見て言語の選択の決め手となるのは，言語の機能でもプログラミングの楽しさでもなく，言語の採用実績なんだよね。
例えば，ある Web システムで Perl を選択したとしよう。
顧客は Perl を選択することに不安があるかも知れないが，ここで「Perl って mixi の実装でも使われてるんですよ」と言えば安心材料になる。
あと自前で採用実績を持っていれば手持ちの資産を活用することができるので，余裕を持って取り組むことができる。
<a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html">TIOBE</a> で首位が Java と C なのはそういう理由からだろうと思う。
逆に言えば，ある言語を最初に使うというのは，仕事としては勇気のいることなのだ。
本当は今回の勉強会（？）にはそういう話を期待してたんだけどねぇ。
広島での Ruby の採用実績はあまり聞かないし（Perl の案件はよく聞くけど），これからの話なのかも知れない。
</p><p>
Facebook の「友人」の方には講演後の交流会の様子を写真にとってますので，ご覧あれ。
</p>]]><![CDATA[<div class="hreview" ><a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4274066428/baldandersinf-22/"><img src="http://ecx.images-amazon.com/images/I/4151YFZ27NL._SL160_.jpg" alt="photo" class="photo"  /></a><dl ><dt class="fn"><a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4274066428/baldandersinf-22/">プログラミングRuby 第2版 言語編</a></dt><dd>Dave Thomas Chad Fowler Andy Hunt 田和 勝 </dd><dd>オーム社 2006-08-26</dd><dd>評価<abbr class="rating" title="4"><img src="http://g-images.amazon.com/images/G/01/detail/stars-4-0.gif" alt="" /></abbr> </dd></dl><p class="similar"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274066436/baldandersinf-22/" target="_top"><img src="http://images.amazon.com/images/P/4274066436.09._SCTHUMBZZZ_.jpg"  alt="プログラミングRuby 第2版 ライブラリ編"  /></a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274067858/baldandersinf-22/" target="_top"><img src="http://images.amazon.com/images/P/4274067858.09._SCTHUMBZZZ_.jpg"  alt="RailsによるアジャイルWebアプリケーション開発"  /></a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4797336617/baldandersinf-22/" target="_top"><img src="http://images.amazon.com/images/P/4797336617.09._SCTHUMBZZZ_.jpg"  alt="たのしいRuby 第2版 Rubyではじめる気軽なプログラミング"  /></a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113946/baldandersinf-22/" target="_top"><img src="http://images.amazon.com/images/P/4873113946.09._SCTHUMBZZZ_.jpg"  alt="プログラミング言語 Ruby"  /></a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4797340045/baldandersinf-22/" target="_top"><img src="http://images.amazon.com/images/P/4797340045.09._SCTHUMBZZZ_.jpg"  alt="Rubyレシピブック 第2版 268の技"  /></a> </p><p class="gtools" >by <a href="http://www.goodpic.com/mt/aws/index.html" >G-Tools</a> ,  <abbr class="dtreviewed" title="2010/12/09">2010/12/09</abbr></p></div>]]></content:encoded>
</item>

<item rdf:about="http://www.baldanders.info/spiegel/log2/000481.shtml">
  <title>PHP は制御に向かない？</title>
  <link>http://www.baldanders.info/spiegel/log2/000481.shtml</link>
  <description>PHP でどハマりしてしまったので，
覚え書きとして残しておく。</description>
  <dc:subject>Programming</dc:subject>
  <dc:creator>Spiegel</dc:creator>
  <dc:date>2010-03-20T12:48:06+09:00</dc:date>
  <cc:license rdf:resource="http://creativecommons.org/licenses/by/2.1/jp/" />
  <content:encoded><![CDATA[<p>
PHP でどハマりしてしまったので，
覚え書きとして残しておく。
</p><p>
以前<a href="http://www.baldanders.info/spiegel/log2/000478.shtml">「PHP を CGI モードで動かす」</a>というのをやったのだが，
そもそもこれをやりたかったのはマルチプロセスで非同期制御をやりたかったからだ。
しかし実際にやってみるとどうもうまくいかない。
最初はこんな感じで普通に pcntl_fork を使っていたのだが，
</p><blockquote>
<pre><code>$pid = pcntl_fork();
if ($pid == -1) { //fork 失敗
    return -1;
}
else if ($pid) { //親プロセス
    return 0;
}
else {
    // 子プロセス
    //非同期制御の呼び出し
    asynchronousControl();
    exit(0);
}</code></pre>
</blockquote><p>
Web 上でこれを動かすと，
どうも子プロセスが終わるまでサーバサイドから制御が返ってこない感じである。
んで，
いろいろ調べたら，
子プロセスでは標準出力を閉じないとだめらしい。
確かに Perl では <code>close( STDOUT );</code> とかやるので，
同じ類の話かと思い以下のように直してみた。
</p><blockquote>
<pre><code>$pid = pcntl_fork();
if ($pid == -1) { //fork 失敗
    return -1;
}
else if ($pid) { //親プロセス
    return 0;
}
else {
    // 子プロセス
    //標準出力をクローズ
    fclose(STDIN);
    fclose(STDOUT);
    fclose(STDERR);
    //非同期制御の呼び出し
    asynchronousControl();
    exit(0);
}</code></pre>
</blockquote><p>
が，
結果は同じ。
更にネットを漁ってみると既にバグとして上がってるようである。
</p><ul>
<li><a href="http://bugs.php.net/27865">PHP :: Bug #27865 :: CLI PHP: STDIN/OUT/ERR are not the good fd's</a></li>
<li><a href="http://bugs.php.net/32107">PHP :: Bug #32107 :: fclose (STDIN|STDOUT|STDERR) not working</a></li>
</ul><p>
このバグ報告が2005年の話でステータスはいまだに「No Feedback」である。
で，
こちらで条件を変えていろいろ試してみたが，
どうしてもうまくいかない。
要するに子プロセスを非同期で動かすためには標準出力を閉じる必要があるが PHP では閉じる方法がないのである。
</p><p>
ダメぢゃ～ん！！！
</p><p>
で，
しょうがないのでアプローチを変えることにした。
fork がダメなら exec で別プロセスを起動するしかない。
しかし，
これも結構曲者で，
普通に起動したのではダメらしい。
exec や system のマニュアルにはこのように書かれている。
</p><blockquote>
「プログラムがこの関数で始まる場合、バックグラウンドで処理を続けさせるには、プログラムの出力をファイルや別の出力ストリームにリダイレクトする必要があります。そうしないと、プログラムが実行を終えるまで PHP はハングしてしまいます。」
（via <a href="http://php.net/manual/ja/function.exec.php">PHP: exec - Manual</a>）
</blockquote><p>
なんじゃそら！ つまり，
以下のように標準出力をリダイレクトしバックグラウンドで呼び出す必要がある。
</p><blockquote>
<pre><code>exec("/usr/bin/php ./child_script.php &gt; /dev/null 2&gt;&1 &");</code></pre>
</blockquote><p>
参考：
</p><ul>
<li><a href="http://www.welldonesoft.com/technology/articles/php/forking/">"Forking" a Process and Sending it to Background ? in PHP</a></li>
</ul><p>
ここまで分かるのに，
半日も無駄な時間を潰してしまったよ。
思うのだが，
PHP って制御に向かない（できないわけではない）んじゃないのかなぁ。
無理に PHP で実装するメリットが見えない。
そりゃ UI 周りは楽かもしれないけどさ。
いや，
もう，
今更だけど。
</p>]]></content:encoded>
</item>

<item rdf:about="http://www.baldanders.info/spiegel/log2/000478.shtml">
  <title>PHP を CGI モードで動かす</title>
  <link>http://www.baldanders.info/spiegel/log2/000478.shtml</link>
  <description>覚え書きとして残しておく。</description>
  <dc:subject>Programming</dc:subject>
  <dc:creator>Spiegel</dc:creator>
  <dc:date>2010-03-07T23:40:38+09:00</dc:date>
  <cc:license rdf:resource="http://creativecommons.org/licenses/by/2.1/jp/" />
  <content:encoded><![CDATA[<p>
めったにないんだけど，
仕事で PHP で pcntl extension を使う必要が出てきて
（そういう仕事なんだってば）
やってみたんだけど，
shell 上の単体テストレベルではちゃんと動くのに Web 上に乗っけると
「pcntl_fork ？ なんじゃそら？」（←かなり意訳）って怒られる。
調べてみたら「pcntl 使いたいなら CGI モードで動かさんかい！」（←超意訳）っちうことらしい。
</p><p>
ほら，
仕事で PHP 使うなんて滅多にないし，
放っといたらすぐに忘れてまた同じところで悩むに決まってるので，
覚え書きとして残しておくことにする。
</p><p>
同じようなことで悩んでいる人はそこそこいるらしく色々と情報を得ることができた。
以下に参考になったページを挙げておく。
</p><ul>
<li><a href="http://jp.php.net/manual/ja/security.cgi-bin.php">PHP: CGI バイナリとしてインストール</a></li>
<li><a href="http://d.hatena.ne.jp/tohokuaiki/20090601/1243837447">PHPをモジュール版で動いてるところにpcntl拡張を使いたくてCGIでも動かそうとしたら、結構大変であわゎとなった</a></li>
<li><a href="http://d.hatena.ne.jp/msakamoto-sf/20080802/1217662203">cgi.force_redirect って何？</a></li>
<li><a href="http://httpd.apache.org/docs/2.0/ja/howto/cgi.html">Apache Tutorial: CGI による動的コンテンツ</a></li>
</ul><p>
分かってしまえば PHP を CGI モードで動かすことはそれほど難しくはない。
<a href="http://jp.php.net/manual/ja/security.cgi-bin.php">「CGI バイナリとしてインストール」</a>では4つのケースを紹介しているけど，
ここでは<a href="http://jp.php.net/manual/ja/security.cgi-bin.force-redirect.php">「ケース 2: --enable-force-cgi-redirect を使用」</a>を適用してみる。
</p><p>
このやり方は制限があって
</p><blockquote>
「このオプションは、Apache Web サーバーでのみテストされており、
リクエストのリダイレクト時に Apache が標準ではないCGI 環境変数 REDIRECT_STATUS をセットすることを前提にしています。
リクエストが直接のものであるか間接のものであるかを示す手段をWeb サーバーが全くサポートしていない場合は、
このオプションを使用することはできません。」
</blockquote><p>
となっている。
もちろん CGI モードを使うことでサーバ内の任意の場所を「実行」されては困るわけで，
この制限は妥当といえる。
ただしそれも Web サーバの設定次第でどうにでもなってしまうので，
構成の検討は慎重に行うべきだろう。
</p><p>
httpd.conf を眺めると以下の記述がある。
</p><blockquote>
<pre><code>ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/</code></pre>
</blockquote><p>
ScriptAlias ディレクティブは CGI プログラムの場所を示すもので
</p><blockquote>
「ScriptAlias が接頭辞で始まるすべての URL は CGI プログラムとみなされるという追加の意味を含んでいることです。
従って、上記の例では、/cgi-bin/ で始まるリソースへのあらゆるリクエストに対して、ディレクトリ /usr/local/apache2/cgi-bin/ から提供し、
それらを CGI プログラムとして扱うよう Apache に示します。」
（<a href="http://httpd.apache.org/docs/2.0/ja/howto/cgi.html">「CGI による動的コンテンツ」</a>）
</blockquote><p>
つまり，
上記の例では <code>/usr/local/apache2/cgi-bin/</code> に php-cgi を放り込んでやればいいわけだ。
私の場合，
ここではまってしまった。
単純にコピーすればいいものを ln -s とかやっちまったのだ。
どうやっても動かなくてひとしきり悩んでしまった。
</p><p>
さて，
もちろんこれだけで CGI モードで動くわけではなく，
CGI モジュールの指定と CGI が動くディレクトリを指定してやらなければならない。
例えば <code>http://foobar/hoge/</code> 以下のディレクトリで PHP を CGI モードで動かしたいなら，
</p><blockquote>
<pre><code>&lt;Directory /hoge&gt;
   Options +ExecCGI
   Action php-script /cgi-bin/php-cgi
   AddHandler php-script .php
&lt;/Directory&gt;</code></pre>
</blockquote><p>
と記述する。
Options ディレクティブで CGI の使用許可を，
Action ディレクティブで CGI モジュールの指定を，
AddHandler ディレクティブでハンドラを指定する。
</p><p>
この記述は httpd.conf で行うが，
レンタルサーバでは httpd.conf にアクセスできないのが普通なので，
（許可されていれば） .htaccess に AddHandler を記述することで CGI モードが有効になる場合もあるらしい。
</p><blockquote>
<pre><code>AddHandler application/x-httpd-phpcgi .php</code></pre>
</blockquote><p>
ここまで設定しておけば，
たとえば <code>http://foobar/hoge/script.php</code> と打つと，
<code>http://foobar/cgi-bin/php-cgi/hoge/script.php</code> とリダイレクトされ，
さらに <code>/hoge/script.php</code> のアクセス制限をチェックしてくれる。
</p><p>
おー，こんびにえんす！
</p>]]></content:encoded>
</item>

<item rdf:about="http://www.baldanders.info/spiegel/log2/000427.shtml">
  <title>chumby 本が出た！</title>
  <link>http://www.baldanders.info/spiegel/log2/000427.shtml</link>
  <description>早速購入。</description>
  <dc:subject>Book</dc:subject>
  <dc:creator>Spiegel</dc:creator>
  <dc:date>2009-02-22T18:44:00+09:00</dc:date>
  <cc:license rdf:resource="http://creativecommons.org/licenses/by/2.1/jp/" />
  <content:encoded><![CDATA[<p>
<a href="http://www.chumby.jp/">chumby.jp</a> からのメールで <a href="http://www.chumby.jp/news/news_090219_1.html">chumby の解説本が出た</a>と知り，
早速購入してしまった。
</p><p>
これ，
ええわ。
Widget 作ろうとか，
中身を弄ってみたい人にはかなり参考になる。
加速度センサーの使い方とかまである。
chumby にマイクとか BitTorrent クライアントがあるなんて知らんかったし。
Web カメラ繋ぐとか思いつかなんだ。
この手の情報はネットではほとんど英語ばっかりなので，
私のような英語不得手な人間にはありがたい本である。
</p><p>
つっても，
今そんな余裕は全然ないけどね。
</p>]]><![CDATA[<div class="hreview" ><a class="item url" href="http://www.amazon.co.jp/chumby%E3%81%A7%E9%81%8A%E3%81%BC%E3%81%86-%E7%B1%B3%E7%94%B0-%E8%81%A1/dp/4797350393%3FSubscriptionId%3D0G91FPYVW6ZGWBH4Y9G2%26tag%3Dbaldandersinf-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4797350393"><img src="http://ecx.images-amazon.com/images/I/41yRgOZRVKL._SL160_.jpg" alt="photo" class="photo"  /></a><dl ><dt class="fn"><a class="item url" href="http://www.amazon.co.jp/chumby%E3%81%A7%E9%81%8A%E3%81%BC%E3%81%86-%E7%B1%B3%E7%94%B0-%E8%81%A1/dp/4797350393%3FSubscriptionId%3D0G91FPYVW6ZGWBH4Y9G2%26tag%3Dbaldandersinf-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4797350393">chumbyで遊ぼう!</a><img src='http://www.assoc-amazon.jp/e/ir?t=baldandersinf-22&l=ur2&o=9' width='1' height='1' border='0' alt='' /></dt><dd>米田 聡</dd><dd>ソフトバンククリエイティブ 2009-02-18</dd><dd>評価<abbr class="rating" title="5"><img src="http://g-images.amazon.com/images/G/01/detail/stars-5-0.gif" alt="" /></abbr> </dd></dl><p class="similar"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4797352418/baldandersinf-22/" target="_top"><img src="http://images.amazon.com/images/P/4797352418.09._SCTHUMBZZZ_.jpg"  alt="iPhone デベロッパーズ クックブック"  /></a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/B001MQBRJO/baldandersinf-22/" target="_top"><img src="http://images.amazon.com/images/P/B001MQBRJO.09._SCTHUMBZZZ_.jpg"  alt="バッファローコクヨサプライ BUFFALO カードリーダー/ライター microSD対応 超コンパクト ホワイト BSCRMSDCWH"  /></a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048676067/baldandersinf-22/" target="_top"><img src="http://images.amazon.com/images/P/4048676067.09._SCTHUMBZZZ_.jpg"  alt="自作アプリをApp Storeで世界に向けて販売できる!! iPhone SDKプログラミング大全 (MacPeople Books)"  /></a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4822283712/baldandersinf-22/" target="_top"><img src="http://images.amazon.com/images/P/4822283712.09._SCTHUMBZZZ_.jpg"  alt="初めてのGoogle Androidプログラミング サンプルで学ぶ必須作法と基本手順"  /></a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/B001DZGGM2/baldandersinf-22/" target="_top"><img src="http://images.amazon.com/images/P/B001DZGGM2.09._SCTHUMBZZZ_.jpg"  alt="トリニティ ケーブルボックス(ホワイト)[The CableBox White] BLD-CB-WT"  /></a> </p><p class="gtools" >by <a href="http://www.goodpic.com/mt/aws/index.html" >G-Tools</a> ,  <abbr class="dtreviewed" title="2009/02/22">2009/02/22</abbr></p></div>]]></content:encoded>
</item>

<item rdf:about="http://www.baldanders.info/spiegel/log2/000424.shtml">
  <title>chumby 日本語化キット</title>
  <link>http://www.baldanders.info/spiegel/log2/000424.shtml</link>
  <description>chumby を日本語化するための日本語化キットの RC 版がリリース。</description>
  <dc:subject>Programming</dc:subject>
  <dc:creator>Spiegel</dc:creator>
  <dc:date>2008-12-28T18:36:51+09:00</dc:date>
  <cc:license rdf:resource="http://creativecommons.org/licenses/by/2.1/jp/" />
  <content:encoded><![CDATA[<p>
<a href="http://www.chumby.jp/">chumby</a> を日本語化するための日本語化キットの RC 版がリリース。
</p><ul>
<li><a href="http://www.chumby.jp/news/japanease3.html">chumby日本語化のお知らせ</a></li>
<li><a href="http://www.chumby.jp/news/japanease2.html">chumby日本語化キット(RC版)の配布</a></li>
<li><a href="http://www.chumby.jp/news/japanease2-1.html">chumby日本語ウィジェットの作り方</a></li>
</ul><p>
早速日本語に切り替えてみた。
日本語版クライアントモジュールのリリースは2月になるようだ。
Web のダッシュボードも本家のままなのでちょっと使い勝手が微妙。
まぁ，
日常運用に支障はないけど。
</p><p>
Widget も Japanese カテゴリに日本語対応のものが既にいくつか公開されている。
とりあえず WeatherHacks と Tweeter 日本語版とロイタートップニュースを愛用している。
自作もしてみたいが全然暇がない。
</p>]]></content:encoded>
</item>

<item rdf:about="http://www.baldanders.info/spiegel/log2/000413.shtml">
  <title>chumby リンク集</title>
  <link>http://www.baldanders.info/spiegel/log2/000413.shtml</link>
  <description>やっぱり自分で Widget を作ってみたいので，
さしあたり関係ありそうな記事を片っ端からリンクしてみることにした。</description>
  <dc:subject>Programming</dc:subject>
  <dc:creator>Spiegel</dc:creator>
  <dc:date>2008-10-23T20:18:50+09:00</dc:date>
  <cc:license rdf:resource="http://creativecommons.org/licenses/by/2.1/jp/" />
  <content:encoded><![CDATA[<p>
先行予約で chumby 入手した。
届いたときの浮かれっぷりは <a href="http://spiegel.vox.com/library/post/%E6%9D%A5%E6%9D%A5-chumby.html">Vox の記事</a>のほうを見ていただくとして，
やっぱり自分で Widget を作ってみたいので，
さしあたり関係ありそうな記事を片っ端からリンクしてみることにした。
参考になれば幸いである。
</p><ul>
<li><a href="http://www.chumby.jp/">chumby 日本公式サイト</a> （channel の設定とかは米国のページに飛ぶ）</li>
<li><a href="http://wassr.jp/channel/chumby">chumby - Wassr</a></li>
<li><a href="http://ja.chumby.wikia.com/wiki/">Chumby 日本語まとめ Wiki</a></li>
<li><a href="http://gihyo.jp/lifestyle/serial/01/chumby">たのしい chumby</a></li>
<li><a href="http://n.h7a.org/blog/entry/1568">Chumby に「たんじょうび おめでとう!!」と表示する方法</a></li>
<li><a href="http://wiki.chumby.com/mediawiki/index.php/Translating_the_Control_Panel">Translating the Control Panel</a> （10/24）</li>
<li><a href="http://alfalfa.livedoor.biz/archives/51381061.html">チャンビーかわいいよ、チャンビィ</a> （10/24）</li>
<li><a href="http://itpro.nikkeibp.co.jp/article/COLUMN/20081006/316256/">使うだけでも改造しても楽しいchumby</a> （10/24）</li>
<li><a href="http://www.visavis.jp/blog/2008/10/07/post_816.html">Chumby（チャンビー）用保護シート、できました！</a> （10/24）</li>
<li><a href="http://www.chumby.jp/startup/10.html">chumby(チャンビー) 日本公式サイト | step10：ウィジェットを作ってみよう</a> （11/9）</li>
</ul><p>
他にあれば随時追加する予定。
ところで，
<a href="http://www.chumby.jp/">日本公式ページ</a>の記事はフィードで配信しないのだろうか...
</p><p>
（追記 10/24） <a href="http://delicious.com/spiegel/chumby">delicious.com でもブックマーク</a>してます。
</p>]]></content:encoded>
</item>

<item rdf:about="http://www.baldanders.info/spiegel/log2/000397.shtml">
  <title>teikade 最終バージョン</title>
  <link>http://www.baldanders.info/spiegel/log2/000397.shtml</link>
  <description>以前サルベージした teikade 最終バージョンを置いておきます。</description>
  <dc:subject>Programming</dc:subject>
  <dc:creator>Spiegel</dc:creator>
  <dc:date>2008-07-06T14:18:32+09:00</dc:date>
  <cc:license rdf:resource="http://creativecommons.org/licenses/by/2.1/jp/" />
  <content:encoded><![CDATA[<p>
<a href="http://blog.livedoor.jp/mairsys/archives/773321.html">「teikade(dejava)の残像」</a>
を見て teikade が最新の JRE で（不完全ながら）動くというのでビックリ。
で，
昔のバックアップ CD-R を引っ張り出して探してみたら，
ちゃんと残ってるじゃあーりませんか！ teikade 最終バージョンが。
偉いぞ，私。
</p><p>
いや，
今更 teikade 使う人なんていないでしょうけど（私も既にインストール方法とか使い方とか忘れてしまった），
このまま埋もれさすのはもったいないし，
以下に置いておきますので，
思いっきしノスタルジーに浸ってください。
</p><ul>
<li><a href="http://www.baldanders.info/spiegel/archive/teikade/">teikade 最終バージョン</a></li>
</ul><p>
あっ，
公開しないでねって言われたらとっとと引っ込めますので。
</p>]]></content:encoded>
</item>

<item rdf:about="http://www.baldanders.info/spiegel/log2/000374.shtml">
  <title>CC-license のメタデータ入門 付録</title>
  <link>http://www.baldanders.info/spiegel/log2/000374.shtml</link>
  <description>前回の最後にも書いたけど，
XML ベースの RDF を使った CC-license のメタデータ記述がなくなりつつあるため，
資料保存の目的でまとめておく。</description>
  <dc:subject>Programming</dc:subject>
  <dc:creator>Spiegel</dc:creator>
  <dc:date>2008-02-26T09:19:17+09:00</dc:date>
  <cc:license rdf:resource="http://creativecommons.org/licenses/by/2.1/jp/" />
  <content:encoded><![CDATA[<p>
<a href="http://www.baldanders.info/spiegel/log2/000371.shtml">前回</a>の最後にも書いたけど，
XML ベースの RDF を使った CC-license のメタデータ記述がなくなりつつあるため，
資料保存の目的でまとめておく。
なお，
語彙の定義については <a href="http://creativecommons.org/ns">http://creativecommons.org/ns</a> を参考にしている。
翻訳が怪しい部分もあるので，
ツッコミよろしくお願いします。
</p><p>
まず CC 語彙のうち基本クラスについて以下に列挙する。
</p>
<table class="solid" style="margin-left:1em">
<tr><th>クラス名</th><th>内容</th></tr>
<tr><td>Work</td><td>作品</td></tr>
<tr><td>License</td><td>ライセンス： 要求・許可・禁止事項のセット</td></tr>
<tr><td>Jurisdiction</td><td>準拠法？ （legal jurisdiction of a license）</td></tr>
<tr><td>Permission</td><td>許可事項</td></tr>
<tr><td>Requirement</td><td>要求事項</td></tr>
<tr><td>Prohibition</td><td>禁止事項</td></tr>
</table>
<p>
このうち Permission, Requirement, Prohibition 各クラスについては，
あらかじめ定義されたインスタンス（＝リソース）が存在する。
これらのインスタンスは主に目的語として使われる。
</p><p>
Permission クラスの定義済みインスタンスは以下のとおり。
</p>
<table class="solid" style="margin-left:1em">
<tr><th>インスタンス名</th><th>内容</th></tr>
<tr><td>Reproduction</td><td>複製</td></tr>
<tr><td>Distribution</td><td>頒布，展示，実演</td></tr>
<tr><td>DerivativeWorks</td><td>二次的著作物の作成</td></tr>
<tr><td>HighIncomeNationUse</td><td>非発展途上国での使用</td></tr>
<tr><td>Sharing</td><td>商用での二次的著作物の作成，ただし頒布，展示，実演は非営利目的のみ</td></tr>
</table>
<p>
Requirement クラスの定義済みインスタンスは以下のとおり。
</p>
<table class="solid" style="margin-left:1em">
<tr><th>インスタンス名</th><th>内容</th></tr>
<tr><td>Notice</td><td>著作権およびライセンスを変更せずに記載</td></tr>
<tr><td>Attribution</td><td>著作（権）者のクレジットを表記</td></tr>
<tr><td>ShareAlike</td><td>二次的著作物も原著作物と同じ条件によってライセンスすること</td></tr>
<tr><td>SourceCode</td><td>二次的著作物とともにソースコードも提供</td></tr>
</table>
<p>
Prohibition クラスの定義済みインスタンスは以下のとおり。
</p>
<table class="solid" style="margin-left:1em">
<tr><th>インスタンス名</th><th>内容</th></tr>
<tr><td>CommercialUse</td><td>営利目的で利用</td></tr>
</table>
<p>

</p><p>
最後に，
プロパティ（述語）について以下に列挙する。
</p>
<table class="solid" style="margin-left:1em">
<tr><th>プロパティ</th><th>働き</th><th>domain</th><th>range</th></tr>
<tr><td>license</td><td>ライセンスする</td><td>Work</td><td>License</td></tr>
<tr><td>permits</td><td>許可する</td><td>License</td><td>Permission</td></tr>
<tr><td>requires</td><td>要求する</td><td>License</td><td>Requirement</td></tr>
<tr><td>prohibits</td><td>禁止する</td><td>License</td><td>Prohibition</td></tr>
<tr><td>morePermissions</td><td>追加で許可する</td><td>Work</td><td>任意のリソース</td></tr>
<tr><td>attributionName</td><td>作者の表記</td><td>Work</td><td>任意</td></tr>
<tr><td>attributionURL</td><td>作品 URL の表記</td><td>Work</td><td>任意のリソース</td></tr>
<tr><td>jurisdiction</td><td>ライセンスの準拠法？の表記</td><td>License</td><td>Jurisdiction</td></tr>
<tr><td>legalcode</td><td>ライセンスの法的条項の表記</td><td>License</td><td>任意のリソース</td></tr>
<tr><td>deprecatedOn</td><td>ライセンスの有効期限？の表記（provides the date deprecated on）</td><td>License</td><td>日付</td></tr>
</table>
<p>
domain と range については<a href="http://www.baldanders.info/spiegel/log2/000371.shtml">前回</a>説明しなかった。
domain と range はそれぞれプロパティが使える適用範囲を示す。
domain は主語となるインスタンス（＝リソース）のクラスを示す。
例えば permits プロパティの主語は必ず License クラスのインスタンスでなければならない。
range は述語の範囲を示す。
「任意」はリソース以外にリテラルのデータを許容する。
「日付」は日付形式（yyyy-mm-dd）のリテラル・データだ。
</p><p>
<a href="http://web.resource.org/cc/">http://web.resource.org/cc/</a> にはあって <a href="http://creativecommons.org/ns">http://creativecommons.org/ns</a> にはない語もあるようだ。
Agent クラスは  <a href="http://creativecommons.org/ns">http://creativecommons.org/ns</a> ではなくなっている。
License クラスの定義済みインスタンスである PublicDomain もなくなっているようである。
プロパティの derivativeWork もない（けどこれは単に抜けてるだけかなぁ）。
</p><p>
以降には CC-license のライセンスオプションの組み合わせごとに RDF の XML 記述を挙げておく。
いずれも日本版 2.1 のライセンスに対応している。
他のバージョンについては <code>rdf:about</code> の URI を適宜変更すればよい。
</p><p>
by ライセンス：
</p>
<blockquote><pre>&lt;rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:cc="http://creativecommons.org/ns#"&gt;

  &lt;cc:License rdf:about="http://creativecommons.org/licenses/by/2.1/jp/"&gt;
    &lt;cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /&gt;
    &lt;cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /&gt;
    &lt;cc:requires rdf:resource="http://web.resource.org/cc/Notice" /&gt;
    &lt;cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /&gt;
    &lt;cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /&gt;
  &lt;/cc:License&gt;

&lt;/rdf:RDF&gt;</pre></blockquote>
<p>
by-nc ライセンス：
</p>
<blockquote><pre>&lt;rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:cc="http://creativecommons.org/ns#"&gt;

  &lt;cc:License rdf:about="http://creativecommons.org/licenses/by-nc/2.1/jp/"&gt;
    &lt;cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /&gt;
    &lt;cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /&gt;
    &lt;cc:requires rdf:resource="http://web.resource.org/cc/Notice" /&gt;
    &lt;cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /&gt;
    &lt;cc:prohibits rdf:resource="http://web.resource.org/cc/CommercialUse" /&gt;
    &lt;cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /&gt;
  &lt;/cc:License&gt;

&lt;/rdf:RDF&gt;</pre></blockquote>
<p>
by-sa ライセンス：
</p>
<blockquote><pre>&lt;rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:cc="http://creativecommons.org/ns#"&gt;

  &lt;cc:License rdf:about="http://creativecommons.org/licenses/by-sa/2.1/jp/"&gt;
    &lt;cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /&gt;
    &lt;cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /&gt;
    &lt;cc:requires rdf:resource="http://web.resource.org/cc/Notice" /&gt;
    &lt;cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /&gt;
    &lt;cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /&gt;
    &lt;cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /&gt;
  &lt;/cc:License&gt;

&lt;/rdf:RDF&gt;</pre></blockquote>
<p>
by-nd ライセンス：
</p>
<blockquote><pre>&lt;rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:cc="http://creativecommons.org/ns#"&gt;

  &lt;cc:License rdf:about="http://creativecommons.org/licenses/by-nd/2.1/jp/"&gt;
    &lt;cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /&gt;
    &lt;cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /&gt;
    &lt;cc:requires rdf:resource="http://web.resource.org/cc/Notice" /&gt;
    &lt;cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /&gt;
  &lt;/cc:License&gt;

&lt;/rdf:RDF&gt;</pre></blockquote>
<p>
by-nc-sa ライセンス：
</p>
<blockquote><pre>&lt;rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:cc="http://creativecommons.org/ns#"&gt;

  &lt;cc:License rdf:about="http://creativecommons.org/licenses/by-nc-sa/2.1/jp/"&gt;
    &lt;cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /&gt;
    &lt;cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /&gt;
    &lt;cc:requires rdf:resource="http://web.resource.org/cc/Notice" /&gt;
    &lt;cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /&gt;
    &lt;cc:prohibits rdf:resource="http://web.resource.org/cc/CommercialUse" /&gt;
    &lt;cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /&gt;
    &lt;cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /&gt;
  &lt;/cc:License&gt;

&lt;/rdf:RDF&gt;</pre></blockquote>
<p>
by-nc-nd ライセンス：
</p>
<blockquote><pre>&lt;rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:cc="http://creativecommons.org/ns#"&gt;

  &lt;cc:License rdf:about="http://creativecommons.org/licenses/by-nc-nd/2.1/jp/"&gt;
    &lt;cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /&gt;
    &lt;cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /&gt;
    &lt;cc:requires rdf:resource="http://web.resource.org/cc/Notice" /&gt;
    &lt;cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /&gt;
    &lt;cc:prohibits rdf:resource="http://web.resource.org/cc/CommercialUse" /&gt;
  &lt;/cc:License&gt;

&lt;/rdf:RDF&gt;</pre></blockquote>
<p>
以上。
</p>]]></content:encoded>
</item>

<item rdf:about="http://www.baldanders.info/spiegel/log2/000371.shtml">
  <title>CC-license のメタデータ入門</title>
  <link>http://www.baldanders.info/spiegel/log2/000371.shtml</link>
  <description>今回は CC-license のメタデータについて簡単に紹介する。
（追記あり）</description>
  <dc:subject>Programming</dc:subject>
  <dc:creator>Spiegel</dc:creator>
  <dc:date>2008-02-19T23:52:12+09:00</dc:date>
  <cc:license rdf:resource="http://creativecommons.org/licenses/by/2.1/jp/" />
  <content:encoded><![CDATA[<p>
<a href="http://creativecommons.org/weblog/entry/7920">CC+ とか CC0</a> とか，
世の中面白い方向に向かっているのに日本ではさっぱり盛り上がりそうもない
（CC0 については先日，
<a href="http://creativecommons.org/weblog/entry/7978">議論のまとめが公開</a>されている）。
にもかかわらず，
私の英語不得手具合と本業の負荷具合（と PSU のハマり具合）を鑑みると，
これらについて言及するのは当面無理そうなので（将来的にできるとも限らない。
ゴメンペコン），
今回は CC-license のメタデータを紹介することでお茶を濁しておく。
</p><p>
とはいえ CC-license のメタデータについては，
神崎正英さんの
<a href="http://www.kanzaki.com/docs/sw/ccm.html">「クリエイティブ・コモンズのメタデータ」</a>
を参照すれば全て載っている。
またメタデータのベースになっている RDF についても神崎正英さんによる優れた本がある。
</p><ul>
<li><a href="http://spiegel.vox.com/library/book/6a00c22527e6f3604a00c2252a0ce4604a.html">『セマンティック・ウェブのためのRDF/OWL入門』</a></li>
</ul><p>
なので，
これから書くことはかなり蛇足的な内容になるのであしからず。
</p><p>
まず RDF について簡単に解説しよう。
CC-license のメタデータは RDF をベースに設計されている。
RDF はセマンティック Web の中核技術のひとつである。
RDF とは何か。
ぶっちゃけて言うと，
主語（Subject）・述語（Predicate）・目的語（Object）のトリプルから成る文の連鎖が RDF である。
簡単でしょ。
主語には必ずリソース（＝ URI）が入る。
目的語はリテラルな内容で構わないが，
リソースを当てることもできる。
目的語にリソースを当てることで複数の文がリソースを中心に意味的にリンクするのである。
文の意味や定義を集めたものを語彙（Vocabulary）と言う。
語彙は誰でも作ることができる。
RDF の表現には XML を用いるのが普通だが，
トリプルを表現できるのであれば XML にこだわる必要はない。
</p><p>
では早速 CC-license の RDF 表現を見てみよう。
</p>
<blockquote><pre>&lt;rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:cc="http://creativecommons.org/ns#"&gt;

  &lt;cc:License rdf:about="http://creativecommons.org/licenses/by-nc-sa/2.1/jp/"&gt;
    &lt;cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction" /&gt;
    &lt;cc:permits rdf:resource="http://creativecommons.org/ns#Distribution" /&gt;
    &lt;cc:requires rdf:resource="http://creativecommons.org/ns#Notice" /&gt;
    &lt;cc:requires rdf:resource="http://creativecommons.org/ns#Attribution" /&gt;
    &lt;cc:prohibits rdf:resource="http://creativecommons.org/ns#CommercialUse" /&gt;
    &lt;cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /&gt;
    &lt;cc:requires rdf:resource="http://creativecommons.org/ns#ShareAlike" /&gt;
  &lt;/cc:License&gt;

&lt;/rdf:RDF&gt;</pre></blockquote>
<p>
これが <a href="http://creativecommons.org/licenses/by-nc-sa/2.1/jp/">by-nc-sa ライセンス</a> の RDF 表現だ。
ひとつづつ見ていこう。
</p>
<blockquote><pre>xmlns:cc="http://creativecommons.org/ns#"</pre></blockquote>
<p>
この部分が CC の語彙の定義である。
この URI は実在のページで，
実際に行ってみれば分かるが，
人にも読めるかたちで CC の語彙について記述している。
この中の <code>cc</code> の部分が名前空間接頭辞を定義している。
例えば <code>cc:License</code> は実際には <code>http://creativecommons.org/ns#License</code> に展開される。
上の例では他に rdf 語彙も定義している。
</p><p>
なお，
以前は CC 語彙を定義しているのは <a href="http://web.resource.org/cc/">http://web.resource.org/cc/</a> だったが（今もあるけど），
新たに <a href="http://creativecommons.org/ns">http://creativecommons.org/ns</a> が作られた。
これは以前からある語に加えて相当数の語が追加されている。
また，
後述する microformat に配慮する定義になっている。

</p>
<blockquote><pre>&lt;cc:License rdf:about="http://creativecommons.org/licenses/by-nc-sa/2.1/jp/"&gt;</pre></blockquote>
<p>
<code>cc:License</code> はクラスと呼ばれていて，
文の種類を定義したものだ。
<code>cc:License</code> のブロックは License について記述した文というわけだ。
クラスに対して <code>rdf:about</code> 属性が書かれているが，
これがトリプルで言う主語にあたる。
（追記 2/26： 書き忘れていたが，
クラスに対する <code>rdf:about</code> 属性のリソースを「インスタンス」と言う。
上の例では
「<a href="http://creativecommons.org/ns">http://creativecommons.org/ns</a> は License のインスタンスである」
といった感じで言う）
</p>
<blockquote><pre>&lt;cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction" /&gt;</pre></blockquote>
<p>
<code>cc:permits</code> はプロパティと呼ばれるもので，
トリプルで言う述語に相当する。
<code>cc:requires</code> や <code>cc:prohibits</code> も述語である。
<code>rdf:resource</code> はリソースを指していて，
プロパティとの組み合わせで目的語として機能する。
つまりこの文は（先ほどの主語を補って）
「ライセンス by-nc-sa は複製（Reproduction）を許可（permits）する」
となるわけだ。
（追記 2/26： Reproduction は Permission クラスの定義済みインスタンスである）
</p><p>
ここまで読んで
「これってひょっとして CC-license 以外にも使えるんとちゃうけ？」
と思った貴方は鋭い！ そのとおりである。
主語である <code>rdf:about</code> に適当なライセンスへの URI を指示して，
それに対して許可・要求・禁止事項を列挙すればいい。
また CC の語彙には Permission, Requirement, Prohibition といったクラスも定義されているので，
これらについてもっと柔軟な記述も可能である。
（この実装例が <a href="http://www.kanzaki.com/memo/2004/02/11-1">CC-GPL</a> である）
</p><p>
ただし，
現在のところ CC の語彙を詳細に読んでくれるパーサは多分存在しない（RDF 全般を読むパーサはあるけど）。
例えば Firefox には <a href="http://wiki.creativecommons.org/Installing_MozCC">MozCC</a> というアドオンがあるけど，
これが何故かコメントアウトした RDF 記述しか見ないという不可思議な仕様になっている。
しかも明らかに <code>rdf:about</code> の URI のみで（つまりプリセットされた知識で）判断している。
全然セマンティックではないのである。
</p><p>
さて，
ライセンス自体を RDF で記述する方法は分かったけど，
これを実際のコンテンツとリンクさせなければならない。
CC の語彙には Work クラスも用意されていて，
例えば以下のように記述できる。
</p>
<blockquote><pre>&lt;rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:cc="http://creativecommons.org/ns#"&gt;

  &lt;cc:Work rdf:about="http://www.baldanders.info/spiegel/log2/000370.shtml"&gt;
    &lt;cc:license rdf:resource="http://creativecommons.org/licenses/by/2.1/jp/" /&gt;
  &lt;/cc:Work&gt;

  &lt;cc:License rdf:about="http://creativecommons.org/licenses/by/2.1/jp/"&gt;
    &lt;cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction" /&gt;
    &lt;cc:permits rdf:resource="http://creativecommons.org/ns#Distribution" /&gt;
    &lt;cc:requires rdf:resource="http://creativecommons.org/ns#Notice" /&gt;
    &lt;cc:requires rdf:resource="http://creativecommons.org/ns#Attribution" /&gt;
    &lt;cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /&gt;
  &lt;/cc:License&gt;

&lt;/rdf:RDF&gt;</pre></blockquote>
<p>
<code>cc:license</code> のプロパティ値（＝目的語）と <code>cc:License</code> の主語が同じ URI になっていることに注意。
このようにして Work に関する文と License に関する文を繋げるのである。
しかしコンテンツに対するライセンスを示すためだけに RDF ファイルを用意するのは少々面倒である。
でも，
もし RSS フィードの形式が RSS 1.0 なら，
中身は RDF なので，
ライセンスに関する記述を埋め込むことができる。
（記述例は<a href="http://www.baldanders.info/rss.rdf.xml">このブログの RSS</a> 等を参考にして欲しい）
</p><p>
最近は，
RSS 1.0 形式が嫌われているせいもあるかもしれないが，
RDF によるライセンス記述も減ってきている。
その代わりに（というのも変かもしれないが）台頭してきているのが microformat である。
microformat を使ったライセンスの指示は以下のような記述になる。
</p>
<blockquote><pre>&lt;a rel="license" href="http://creativecommons.org/licenses/by/2.1/jp/"&gt;licensed&lt;/a&gt;</pre></blockquote>
<p>
このように HTML 記述の中に直接埋め込めるのが microformat の利点である。
<a href="http://creativecommons.org/license/">CC のライセンス・ツール</a>も，
RDF ではなく microformat を使った記述を吐き出すようになった。
更に <a href="http://www.kanzaki.com/memo/2007/09/13-1">GRRDL が W3C 勧告に</a>なり microformat と RDF の親和性が高まりつつある。
今後，
少なくとも Web 上のコンテンツは microformat を使ったライセンス記述にシフトしていくのだろう。
（以前<a href="http://www.baldanders.info/spiegel/log2/000346.shtml">「microformat が分からない」</a>と書いたが，
その後 CC の語彙の定義などはかなり整備されているようだ）
</p>]]><![CDATA[<div class="hreview" ><a class="item url" href="http://www.amazon.co.jp/gp/redirect.html%3FASIN=4627829310%26tag=baldandersinf-22%26lcode=xm2%26cID=2025%26ccmID=165953%26location=/o/ASIN/4627829310%253FSubscriptionId=0G91FPYVW6ZGWBH4Y9G2"><img src="http://ecx.images-amazon.com/images/I/21YCB8HXKHL.jpg" alt="photo" class="photo"  /></a><dl ><dt class="fn"><a class="item url" href="http://www.amazon.co.jp/gp/redirect.html%3FASIN=4627829310%26tag=baldandersinf-22%26lcode=xm2%26cID=2025%26ccmID=165953%26location=/o/ASIN/4627829310%253FSubscriptionId=0G91FPYVW6ZGWBH4Y9G2">セマンティック・ウェブのためのRDF/OWL入門</a><img src='http://www.assoc-amazon.jp/e/ir?t=baldandersinf-22&l=ur2&o=9' width='1' height='1' border='0' alt='' /></dt><dd>神崎 正英 </dd><dd>森北出版 2005-01-07</dd><dd>評価<abbr class="rating" title="4"><img src="http://g-images.amazon.com/images/G/01/detail/stars-4-0.gif" alt="" /></abbr> </dd></dl><p class="similar"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4883092739/baldandersinf-22/" target="_top"><img src="http://images.amazon.com/images/P/4883092739.09._SCTHUMBZZZ_.jpg"  alt="CD‐ROMで始めるセマンティックWeb"  /></a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4501540109/baldandersinf-22/" target="_top"><img src="http://images.amazon.com/images/P/4501540109.09._SCTHUMBZZZ_.jpg"  alt="オントロジ技術入門―ウェブオントロジとOWL (セマンティック技術シリーズ)"  /></a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274200175/baldandersinf-22/" target="_top"><img src="http://images.amazon.com/images/P/4274200175.09._SCTHUMBZZZ_.jpg"  alt="オントロジー工学 (知の科学)"  /></a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274202925/baldandersinf-22/" target="_top"><img src="http://images.amazon.com/images/P/4274202925.09._SCTHUMBZZZ_.jpg"  alt="オントロジー構築入門"  /></a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4501540605/baldandersinf-22/" target="_top"><img src="http://images.amazon.com/images/P/4501540605.09._SCTHUMBZZZ_.jpg"  alt="メタデータ技術とセマンティックウェブ"  /></a> </p><p class="gtools" >by <a href="http://www.goodpic.com/mt/aws/index.html" >G-Tools</a> ,  <abbr class="dtreviewed" title="2008/02/20">2008/02/20</abbr></p></div>]]></content:encoded>
</item>

<item rdf:about="http://www.baldanders.info/spiegel/log2/000359.shtml">
  <title>パブコメジェネレータ・リポジトリ</title>
  <link>http://www.baldanders.info/spiegel/log2/000359.shtml</link>
  <description>前回紹介したパブコメジェネレータは HTML 内部にリポジトリを持っているのだが，
これを XML 形式に外出しにすることを考えてみる。</description>
  <dc:subject>Programming</dc:subject>
  <dc:creator>Spiegel</dc:creator>
  <dc:date>2007-11-12T20:28:38+09:00</dc:date>
  <cc:license rdf:resource="http://creativecommons.org/licenses/by/2.1/jp/" />
  <content:encoded><![CDATA[<p>
前回紹介した<a href="http://dev2007.miau.jp/public-comment-generator.html">パブコメジェネレータ</a>は HTML 内部にパブリックコメント・リポジトリを持っているのだが，
これを XML 形式に外出しにすることを考えてみる。
</p><p>
パブコメジェネレータ・リポジトリというのは
<a href="http://dev2007.miau.jp/wiki/wiki.cgi">「 MIAUパブリックコメント促進プロジェクト開発Wiki」</a>
で作成されているパブコメジェネレータ用のデータで以下の形式になっている。
</p><blockquote>
<ul>
<li>質問
    <ul>
    <li>YESの場合のページ番号と項目名</li>
    <li>YESの場合のコメント</li>
    <li>NOの場合のページ番号と項目名</li>
    <li>NOの場合のコメント</li>
    </ul></li>
</ul>
</blockquote><p>
これらの情報は<a href="http://dev2007.miau.jp/public-comment-generator.html">パブコメジェネレータ</a>の HTML 内部に書かれている。
まぁ，
使い捨てのツールであれば今のままでも全然構わないわけであるが，
これから別の案件でパブリックコメントを作成することがあれば，
今の<a href="http://dev2007.miau.jp/public-comment-generator.html">パブコメジェネレータ</a>をできるだけ流用したいと考えるかもしれない。
このときユーザインタフェースとデータが分離できれば応用しやすい。
また，
パブコメジェネレータ・リポジトリのようなユニークなデータは knowledge base として他にも使い道があるかもしれない。
</p><p>
パブコメジェネレータ・リポジトリの形式として XML を選んだことにたいした意味はないが，
他のフォーマットへの変換のしやすさや Web との親和性を考えて今回は XML を選んでみた。
<a href="http://www.baldanders.info/spiegel/archive/pubcomm_repos/pubcomm_repos.xml">実装例はこちら</a>をどうぞ。
トップノードは <code>repository</code> で，
<code>repository</code> の直下に以下の3つの要素がある。
</p><ul>
<li><code>revision</code></li>
<li><code>target</code></li>
<li><code>questions</code></li>
</ul><p>
<code>revision</code> にはリビジョン情報を格納する。
バージョン管理を行う場合に必要になるかもしれない。
<code>target</code> には案件情報とパブコメの送付先などの情報を格納する。
<code>questions</code> はリポジトリの本体である。
</p><p>
<code>questions</code> の直下には1つ以上の <code>question</code> がある。
<code>question</code> の直下には更に以下の2つの要素がある。
</p><ul>
<li><code>title</code></li>
<li><code>comments</code></li>
</ul><p>
<code>title</code> には質問の内容を格納する。
<code>comments</code> は質問に対するコメントで，
直下には1つ以上の <code>comment</code> がある。
<code>comment</code> には以下の4つの要素がある。
</p><ul>
<li><code>attribution</code></li>
<li><code>item</code></li>
<li><code>page</code></li>
<li><code>content</code></li>
</ul><p>
<code>attribution</code> には質問に対する回答を格納する。
<code>YES</code> または <code>NO</code> が入ることを期待しているが，
他の値を入れて拡張することもできる。
<code>item</code> または <code>page</code> はコメントに対応する項目とページ番号を格納する。
<code>content</code> はコメント内容を格納する。
</p><p>
思いつきで作ったのだが多分破綻していないと思う。
ついでに<a href="http://www.baldanders.info/spiegel/archive/pubcomm_repos/pubcomm_repos.html">リポジトリの内容を表示するデモ画面</a>も作ってみた。
XML の読み込みには <a href="http://www.kawa.net/works/js/jkl/parsexml.html">JKL.ParseXML</a> を使っている。
結構やっつけのコードなので良い子は真似しないように。
</p><p>
この記事が今後の議論の参考になれば幸いです。
</p>]]><![CDATA[<p>
（追記）
</p><p>
<a href="http://www.baldanders.info/spiegel/archive/pubcomm_repos/public-comment-generator.html">XML を読み込むタイプのパブコメジェネレータ</a>も試しに作ってみました。
</p>]]></content:encoded>
</item>

<item rdf:about="http://www.baldanders.info/spiegel/log2/000354.shtml">
  <title><![CDATA[Eclipse × Subversive ＝ &hearts;]]></title>
  <link>http://www.baldanders.info/spiegel/log2/000354.shtml</link>
  <description>Eclipse 上で Subversion のリポジトリをコントロールする方法についてメモ。</description>
  <dc:subject>Programming</dc:subject>
  <dc:creator>Spiegel</dc:creator>
  <dc:date>2007-10-28T20:22:26+09:00</dc:date>
  <cc:license rdf:resource="http://creativecommons.org/licenses/by/2.1/jp/" />
  <content:encoded><![CDATA[<p>
って，
Vox みたいなタイトルの付け方だけど。
Eclipse 上で Subversion のリポジトリをコントロールする方法についてメモ。
</p><p>
Eclipse で使える Subversion のプラグインとしては，
<a href="http://subclipse.tigris.org/">Subclipse</a> と <a href="http://www.eclipse.org/subversive/">Subversive</a> の2つがあるらしい。
両者の違いが今ひとつ分からないのだが，
あちこちの記事を読んでみると，
現時点では <a href="http://www.eclipse.org/subversive/">Subversive</a> を選択したほうがよさげである。
なので，
今回は <a href="http://www.eclipse.org/subversive/">Subversive</a> を試すことにする。
</p><p>
といっても，
実際には Eclipse のアップデート機能を使えば簡単にインストールできる。
</p><p>
まずは関連するプラグインとして Mylyn と ProjectSet を入れておく。
Europa では既にパッケージに Mylyn が組み込まれているので改めてインストールする必要はない。
<a href="http://vpms.de.csc.com/projectset/">ProjectSet</a> は必要なら
（Eclipse のアップデート機能を使って）
入れておく。
新規リモートサイトとして <a href="http://vpms.de.csc.com/projectset/update">ProjectSet Update Site</a> を登録して検索すればよい。
</p><p>
目的の <a href="http://www.eclipse.org/subversive/">Subversive</a> も同様。
Eclipse のアップデート機能を使う。
新規リモートサイトとして <a href="http://www.polarion.org/projects/subversive/download/1.1/update-site/">Polarion Software</a> を登録して検索すればよい
（URL は変わることがあるらしいので <a href="http://www.polarion.org/index.php?page=download&project=subversive">Polarion Community</a> で最新情報をチェックしておくとよい）。
インストールの際，
あらかじめ <a href="http://vpms.de.csc.com/projectset/">ProjectSet</a> を導入していない場合は，
Integration Plug-in にある “Integration for the CSC Project Set Project” を項目から外しておくこと。
</p><p>
プラグインを導入すると再起動を要求されるが，
AOP 翻訳コンテナである <a href="http://mergedoc.sourceforge.jp/pleiades.html">Pleiades</a> を導入している場合は，
再起動時に <code>-clean</code> オプションを付けるのを忘れずに
（つまり再起動は手動で行ったほうが良い）。
設定（チーム → SVN）で <a href="http://www.eclipse.org/subversive/">Subversive</a> が使う SVN クライアントを選択できる。
初期値は JavaHL になっているようだが，
私は SVN Kit に変更した。
深い意味はない（JavaHL のほうがちょっと遅いという噂もあるが未確認）。
SVN Kit は JavaSVN の後継だそうだ。
また file: スキーマに対応しているのは SVN Kit と JavaHL だそうで，
どちらか好きなほうを選べばいいと思う。
（代替え手段があるというのは良いことである）
</p><p>
さてリポジトリ管理だが，
まず Eclipse のワークスペース用に新規にリポジトリを作成することをお薦めする。
既存のリポジトリのどこかのディレクトリにインポートすることも可能だが，
おそらく管理が煩雑になってしまうと思う。
Eclipse 上で既存のプロジェクトをリポジトリに登録するには，
プロジェクトのコンテキストメニューから「チーム」→「プロジェクトの共用」と進む。
で，
ロケーション情報を設定しプロジェクト・リポジトリ・レイアウトに進む。
ここで <a href="http://www.eclipse.org/subversive/">Subversive</a> では3種類のレイアウトからひとつを選択できるようになっている。
</p><p>
ひとつ目は「リポジトリ・ロケーション・レイアウトを使用」する方法。
URI で書くとこんな感じ。
</p><blockquote>
svn://hostname/repository_dir/trunk/projectname
</blockquote><p>
一番ベーシックなレイアウトだ。
プロジェクトをひとつだけ管理する場合はこのレイアウトで問題ない。
ただし管理するプロジェクトがたくさんあるとタグ付けやブランチが煩雑になってしまう。
</p><p>
ふたつ目は「単一プロジェクト・レイアウトを使用」する方法。
URI で書くとこんな感じ。
</p><blockquote>
svn://hostname/repository_dir/projectname/trunk
</blockquote><p>
これは複数のプロジェクトを管理する際に，
プロジェクトごとに trunk, tags, branches を個別管理するのに向いている。
</p><p>
みっつ目は「指定されたルート名で複数のプロジェクトレイアウトを使用」する方法。
URI で書くとこんな感じ。
</p><blockquote>
svn://hostname/repository_dir/rootname/trunk/projectname
</blockquote><p>
これならルートごとに trunk, tags, branches を共用するプロジェクトをまとめることができる。
</p><p>
リポジトリのレイアウトはいつも悩ましい問題なので，
こういう形でシンプルにまとめてくれるのはありがたい
（それでもやっぱり悩むんだけどね。
まるで RPG でキャラクターの名前やパラメータの割り振りを考えるときみたいに）。
そうそう，
ディレクトリ（trunk, tags, branches も含めて）は自動的に作成されてインポートもチェックアウトも全自動でやってくれる。
最初にリポジトリだけ作っておけば後は全部 <a href="http://www.eclipse.org/">Eclipse</a> ＋ <a href="http://www.eclipse.org/subversive/">Subversive</a> が面倒見てくれる。
（あわれ仁吉よ どこへ行く... って喩えが古過ぎか）
</p><p>
以下，
参考文献：
</p><ul>
<li><a href="http://www.eclipsewiki.net/eclipse/index.php?Subversive%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3">Subversiveプラグイン - EclipseWiki</a></li>
<li><a href="http://www.atmarkit.co.jp/fjava/rensai3/eclipseplgn15/eclipseplgn15_1.html">バージョン管理に便利なSubversiveプラグイン</a></li>
<li><a href="http://www.knatech.info/dev-subversive-install.html">Subversive のインストール</a></li>
</ul><p>
<a href="http://www.atmarkit.co.jp/fjava/rensai3/eclipseplgn15/eclipseplgn15_1.html">@IT の記事</a>は Trac との連携についても書いてあるので参考になるかも。
私は今のところ Trac は使わない。
本当は使いたいけど，
職場の自マシンでサービス立ち上げるのはさすがにセキュリティ上ヤバいしな。
</p>]]></content:encoded>
</item>

<item rdf:about="http://www.baldanders.info/spiegel/log2/000352.shtml">
  <title>Eclipse × JBoss （J2EE Web アプリケーション開発）</title>
  <link>http://www.baldanders.info/spiegel/log2/000352.shtml</link>
  <description>自宅のマシンで JBoss ベースの Web アプリケーション開発環境の構築をやってみる。</description>
  <dc:subject>Programming</dc:subject>
  <dc:creator>Spiegel</dc:creator>
  <dc:date>2007-10-08T00:19:40+09:00</dc:date>
  <cc:license rdf:resource="http://creativecommons.org/licenses/by/2.1/jp/" />
  <content:encoded><![CDATA[<p>
自宅のマシンで JBoss ベースの Web アプリケーション開発環境の構築をやってみる。
以下は覚え書き。
</p><p>
まずは JBoss をインストール。
といってもほとんどすることはない。
<a href="http://www.jboss.org/">JBoss.org のサイト</a>から最新版の JBoss Application Server をダウンロードして展開すればいい。
</p><p>
JBoss の最新版は <a href="http://www.atmarkit.co.jp/fjava/kaisetsu/j2eewatch11/j2eewatch11.html">Java EE 5 ベースの 5.0.0</a> だが，
まだベータ版のようなので（今のところ人柱になる気はない），
4.2.1.GA を取ってきた。
（all, default, minimal のいずれかの設定をコピって）開発用の設定を作成しておく。
今回は開発用のセットアップなのでこれで OK。
ただし本番運用ではセキュリティ設定をいくつか行う必要がある。
詳しくは以下のページが参考になるだろう。
（ちょっと古い記事だけど設定に関しては十分参考になる）
</p><ul>
<li><a href="http://www.thinkit.co.jp/free/tech/6/2/1.html">オープンソースJ2EE APサーバ JBossの可能性 -- 第２回：JBossのインストールと初期設定</a></li>
</ul><p>
お次は Eclipse のインストール。
これも最新版を取ってきて展開するだけ。
</p><p>
現時点での <a href="http://www.eclipse.org/">Eclipse</a> のバージョンは 3.3.1。
J2EE 開発用の環境を構築するのなら “Eclipse IDE for Java EE Developers” を選択すればいい。
WTP とか今まで手動でチマチマ入れてたものが全てパッケージングされている。
超簡単！ 日本語化は <a href="http://mergedoc.sourceforge.jp/pleiades.html">Pleiades （プレアデス）</a>を使う。
<a href="http://mergedoc.sourceforge.jp/pleiades.html">Pleiades</a> の日本語化手法（Aspect Oriented Programming; AOP）はなかなか秀逸。
他には <a href="http://mergedoc.sourceforge.jp/jstyle.html">JStyle</a> あたりも入れておくといいだろう。
</p><ul>
<li><a href="http://japan.zdnet.com/news/devsys/story/0,2000056182,20357632,00.htm">EclipseのAOP翻訳コンテナ「Pleiades 1.2.1.p10」リリース</a></li>
<li><a href="http://japan.zdnet.com/news/devsys/story/0,2000056182,20357633,00.htm">Eclipseプラグイン「JStyle 3.3.1.0」がリリース</a></li>
</ul><p>
Eclipse はレジスタ等のシステム設定を汚さないため，
ひとつのマシンにいくつもの Eclipse が共存できる。
なので，
ひとつの Eclipse に山ほどプラグインを詰め込むよりも，
Java 開発用とか C/C++ 開発用とか Ruby 開発用とか，
言語やターゲット毎に分けたほうが効率的だと思う。
</p><p>
Eclipse IDE for Java EE Developers をインストールすると JBoss を Eclipse からコントロールできるようになる。
IDE 上の「サーバー」タブや設定の「サーバー」→「インストール済みランタイム」などからサーバーを追加・定義できる。
</p><p>
以下，
参考にしたサイト・記事を挙げる。
</p><ul>
<li><a href="http://www.atmarkit.co.jp/fjava/special/eclipse33/eclipse33_1.html">徹底解剖!! Eclipse3.3 Europaの“新世界”</a></li>
<li><a href="http://eclipsewiki.net/eclipse/">EclipseWiki</a></li>
<li><a href="http://www.javaroad.jp/index.htm">Javaの道（Java入門・リファレンス）</a></li>
</ul><p>
以下はオマケ。
今のところバージョン管理するようなものはないので。
まぁ，
そのうち。
</p><ul>
<li><a href="http://subclipse.tigris.org/install.html">Install Subclipse in Eclipse 3.x</a></li>
<li><a href="http://www.eclipsewiki.net/eclipse/?Subclipse%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3">Subclipseプラグイン - EclipseWiki</a></li>
<li><a href="http://www.polarion.org/index.php?page=features&project=subversive">Subversive ? a brand new Eclipse Client for SVN</a></li>
<li><a href="http://journal.mycom.co.jp/articles/2007/04/11/subversive/index.html">もう1つのSubversion対応Eclipseプラグイン - Subversive 1.1.1</a></li>
</ul><p>
仕事でもない限り Java とか使わないし，
ましてや JBoss （っていうか J2EE 実装）に至っては... という感じ。
なので，
こういうところに書いておかないと，
きっとまた次回も探し回る羽目になる。
</p>]]></content:encoded>
</item>

<item rdf:about="http://www.baldanders.info/spiegel/log2/000346.shtml">
  <title>microformat が分からない</title>
  <link>http://www.baldanders.info/spiegel/log2/000346.shtml</link>
  <description>遅まきながら，
思い立って microformat の勉強を始めたのだが，
最初の1フィートでけっつまずいてしまった。</description>
  <dc:subject>Programming</dc:subject>
  <dc:creator>Spiegel</dc:creator>
  <dc:date>2007-09-08T18:53:36+09:00</dc:date>
  <cc:license rdf:resource="http://creativecommons.org/licenses/by/2.1/jp/" />
  <content:encoded><![CDATA[<p>
遅まきながら，
思い立って microformat の勉強を始めたのだが，
最初の1フィートでけっつまずいてしまった。
以下は，
お勉強メモ。
</p><p>
そもそも何で今更 microformat を勉強しようかっちう気になったかというと，
<a href="http://creativecommons.org/license/">CC ライセンス・ツール</a>が microformat に対応してるというんで「うちでも対応させてみようかな」と思ったのだが，
どハマり状態に陥ってしまったのだ。
大体 <a href="http://creativecommons.org/license/">CC ライセンス・ツール</a>の吐き出すコードって明らかにおかしいよね。
例えばタイトルはこう：
</p>
<blockquote><pre>&lt;span xmlns:dc="http://purl.org/dc/elements/1.1/"
  href="http://purl.org/dc/dcmitype/Text"
  property="dc:title"
  rel="dc:type"&gt;Page Title&lt;/span&gt;</pre></blockquote>
<p>
まぁ，最初の <code>xmlns:dc="..."</code> はなんとなく分かる。
Dublin Core の語彙を定義してるんだろうなぁ，
って感じ。
じゃあ，
これって RDF なの？ と思って続きを読むと href, property, rel の3つの属性が出てくる。
リテラルとしての「Page Title」も含めれば4つだ。
どれが主語（Subject）で，
どれが述語（Predicate）で，
どれが目的語（Object）なの？ 更に読んでいくと cc:attributionName だの cc:attributionURL だの cc:morePermissions だの正体不明の語がたくさん出てくる。
それらの語を定義しているらしい <a href="http://creativecommons.org/ns"><code>xmlns:cc="..."</code> のリンク先</a>を見ても，
そんな怪しげな語は定義されていない。
この時点で私は完全にパニック状態になってしまった。
</p><p>
後で分かったことだが，
上の例が分かりにくいのは2つの文（Statement）が span 要素の中で混ざっているからのようだ。
文法間違いを承知で敢えて書くなら，
以下のように分解すれば少し分かりやすくなる。
</p>
<blockquote><pre>&lt;link rel="dc:type"
  href="http://purl.org/dc/dcmitype/Text" /&gt;
&lt;span property="dc:title"&gt;Page Title&lt;/span&gt;</pre></blockquote>
<p>
他の怪しげな語については以下の記事が参考になる。
</p><ul>
<li><a href="http://wiki.creativecommons.org/Marking_Works_Technical">Marking Works Technical - CcWiki</a></li>
</ul><p>
いずれにしろ <a href="http://creativecommons.org/license/">CC ライセンス・ツール</a>の吐き出すコードは正しくないっぽい。
ここは腹を括って microformat の勉強をしたほうがよさそうだ。
</p><ul>
<li><a href="http://microformats.org/wiki/Main_Page-ja">microformat wiki</a></li>
<li><a href="http://www.kanzaki.com/memo/2006/04/27-2">Microformatの先へ</a></li>
</ul><p>
ふむ，
どうやら microformat には
<a href="http://microformats.org/wiki/elemental-microformat">elemental microformat</a> と <a href="http://microformats.org/wiki/compound-microformat">compound microformat</a> の2種類あるらしい。
有名な <a href="http://microformats.org/wiki/rel-nofollow">rel-nofollow</a> や <a href="http://microformats.org/wiki/rel-license">rel-license</a> は <a href="http://microformats.org/wiki/elemental-microformat">elemental microformat</a> で，
<a href="http://microformats.org/wiki/hreview">hReview</a> は <a href="http://microformats.org/wiki/compound-microformat">compound microformat</a> か。
先ほどの <a href="http://wiki.creativecommons.org/Marking_Works_Technical">CC ライセンスの microformat</a> は <a href="http://microformats.org/wiki/elemental-microformat">elemental microformat</a> のようだ。
そういえば，
CC ライセンスのコモンズ証にも microformat が仕込まれているけど，
こちらは <a href="http://microformats.org/wiki/compound-microformat">compound microformat</a> っぽい。
構造がよく見えないけど。
</p><p>
基本的に microformat は意味（Semantics）を構成しない。
要素に属性を付加するだけのものだ。
そこに意味を見出すためには何らかの解釈を与える必要があるが，
その解釈を microformat 側が定義することはない。
（ただし <a href="http://microformats.org/wiki/compound-microformat">compound microformat</a> は意味を構成するように設定できるが，
ここでは置いておく）
</p><p>
例えば <a href="http://microformats.org/wiki/rel-nofollow">rel-nofollow</a> は最初 Google が提唱し（だよね？），
今やすっかり普及している microformat だが，
かつてその<a href="http://www.kanzaki.com/memo/2005/01/23-1">解釈をめぐって議論があった</a>らしい。
また <a href="http://microformats.org/wiki/rel-license">rel-license</a> はヘッダの link 要素にのみ使われているうちはよかったが，
body 内の a 要素などに使われだすと混乱することになる。
それが指し示す主語が分からないからだ。
実際，
a 要素などに使われる <a href="http://microformats.org/wiki/rel-license">rel-license</a> の主語が何であるか
（ページ全体なのかページ内のある一部のコンテンツなのか）は文脈による。
</p><p>
microformat を解釈するのは人ではなく機械である。
機械が解釈するのであれば，
それは論理的かつ外部とも整合がとれているものでなければならない。
というわけで，
次は <a href="http://www.kanzaki.com/memo/2007/07/17-1">GRDDL について</a>勉強してみるか。
</p>]]></content:encoded>
</item>

<item rdf:about="http://www.baldanders.info/spiegel/log2/000280.shtml">
  <title>Eclipse に関するメモ</title>
  <link>http://www.baldanders.info/spiegel/log2/000280.shtml</link>
  <description>最近 Java Servlet の仕事をしていてプログラミング環境として Eclipse を使っているのだが，
私が以前使ってた頃に比べてかなり良くなっている。
ちうわけで自宅マシンにも導入することにした。</description>
  <dc:subject>Programming</dc:subject>
  <dc:creator>Spiegel</dc:creator>
  <dc:date>2007-02-11T23:24:29+09:00</dc:date>
  <cc:license rdf:resource="http://creativecommons.org/licenses/by/2.1/jp/" />
  <content:encoded><![CDATA[<p>
最近 Java Servlet の仕事をしていてプログラミング環境として <a href="http://www.eclipse.org/">Eclipse</a> を使っているのだが，
私が以前使ってた頃に比べてかなり良くなっている。
ちうわけで自宅マシンにも導入することにした。
再チャレンジ。
以下はそのメモ。
</p><p>
まずは関連するサイト・記事から。
</p><ul>
<li><a href="http://www.eclipse.org/">Eclipse.org</a></li>
<li><a href="http://eclipsewiki.net/eclipse/">EclipseWiki</a></li>
<li><a href="http://aioec.sourceforge.jp/cgi-bin/wiki.cgi?page=All-In-One-Eclipse">All-In-One Eclipse</a></li>
<li><a href="http://www2.atwiki.jp/ccw/pages/19.html">C-Compiler Wiki - CDT/インストール</a></li>
<li><a href="http://www.atmarkit.co.jp/fjava/rensai3/eclipseplgn10/eclipseplgn10_1.html">スクリプト言語をサポートするEclipseプラグイン</a></li>
<li><a href="http://capsctrl.que.jp/kdmsnr/wiki/rdt/">RDT - Ruby Development Tools</a> （日本語翻訳 Wiki）</li>
<li><a href="http://www.oscj.net/scdocs/ddSVN">ソフトウェア構成管理 (Subversion) を使用したソース コードのバージョン管理について</a> -- Subclipse についての解説あり</li>
</ul><p>
今の <a href="http://www.eclipse.org/">Eclipse</a> は日本語環境も含めて <a href="http://aioec.sourceforge.jp/cgi-bin/wiki.cgi?page=All-In-One-Eclipse">All-In-One Eclipse</a> にまとめられているのでとっても楽チン（ダウンロード・パッケージは <a href="https://sourceforge.jp/projects/aioec/">SourceForge.jp のサイト</a>にある）。
インストーラが用意されているがレジストリには何も書き込まないのでアンインストールも簡単。
最新版の <a href="http://aioec.sourceforge.jp/cgi-bin/wiki.cgi?page=All-In-One-Eclipse">All-In-One Eclipse</a> 3.0.1 に収録されているモジュールは以下の通り。
（README.txt から抜粋）
</p><ul>
<li>Eclipse v3.2.0</li>
<li>Eclipse v3.2.0 日本語パック</li>
<li>EMF＋SDO Runtime v2.2.0</li>
<li>EMF＋SDO Runtime v2.2.0 日本語パック</li>
<li>XSD Runtime v2.2.0</li>
<li>XSD Runtime v2.2.0 日本語パック</li>
<li>GEF Runtime v3.2</li>
<li>GEF Runtime v3.2 日本語パック</li>
<li>UML2 Runtime v2.0.0</li>
<li>UML Runtime v2.0.0 日本語パック</li>
<li>DTP Runtime v0.9</li>
<li>DTP Runtime v0.9 日本語パック</li>
<li>TPTP v4.2.0.2</li>
<li>TPTP v4.2.0.2 Agent Controller</li>
<li>TPTP v4.2.0 日本語パック</li>
<li>Visual Editor(VE) v1.2</li>
<li>Visual Editor(VE) v1.2 日本語パック</li>
<li>JEM Runtime v1.2</li>
<li>WTP v1.5.0</li>
<li>WTP v1.5.0 日本語パック</li>
<li>WST fragment for xdoclet_for_tiger snapshot パッチ</li>
<li>xdoclet v1.2.3</li>
<li>AspectJ Development Tools(AJDT) v1.4</li>
<li>The Business Intelligence and Reporting Tools(BIRT) v2.1.0</li>
<li>The Business Intelligence and Reporting Tools(BIRT) v2.1.0 日本語パック</li>
<li>C/C++ Development Tools(CDT) v3.1.0</li>
<li>プロパティエディタ v4.8.2</li>
<li>stepcounter v1.14.0</li>
<li>Subclipse v1.1.5</li>
<li>FindBugs eclipse plugin v1.0.0</li>
</ul><p>
まぁこんだけあっても使うプラグインはちょびっとだけど，
まぁよかろう。
なおスクリプト言語用の Development Tool はこのパッケージには入ってないので別途入れる必要がある。
今回は <a href="http://rubyeclipse.sourceforge.net/">RDT</a> を入れてみた。
Ruby はちょっと再勉強を始めようとしているところで
（少なくとも仕事で使えるレベルまでスキルを持っていきたい），
試しに入れてみることにする。
</p><p>
とりあえず，
動作確認のため CDT で例の "Hello World" プログラムを組んでみる。
</p><p>
まず [ファイル] → [新規] から [Managed Make C Project] を選択する。
プロジェクト名はまぁ適当に "HelloWorld" とかにしておく。
プロジェクトを開いている状態で更に [ファイル] → [新規] から [Source file] を選択する。
ファイル名はこれまた適当に "HelloWorld.c" とかにしておく。
ファイルを開いて以下を入力。
</p><blockquote><pre>#include <stdio.h>

int main(int argc, char* argv[])
{
    printf("Hello World!");
    return 0;
}</pre></blockquote><p>
次にファイルを保存しビルドを行う。
うまくいったことを確認し "Run Local C/C++ Application" で実行しコンソールに "Hello World!" と表示されればとりあえず OK。
</p><p>
まぁ Windows プログラミングなら Visual Studio （Express Edition でもいいけど）の方がいいと思うけどね。
MinGW とかの組み合わせなら使えるのかなぁ，
という感じ。
</p>]]><![CDATA[<p>
追記。
</p><p>
<a href="http://aioec.sourceforge.jp/cgi-bin/wiki.cgi?page=All-In-One-Eclipse">All-In-One Eclipse</a> はモジュール間の整合性がとれていないものがあるようだ。
自動更新しようとしたら怒られた。
<a href="http://www.eclipse.org/emft/projects/">EMFT （Eclipse Modeling Framework Technology）</a>の OCL, Query, Validation, Transaction 各 1.0.0 を入れることで回避。
う～む，
まだまだお手軽にってわけにはいかないみたいだなぁ。
</p>]]></content:encoded>
</item>

<item rdf:about="http://www.baldanders.info/spiegel/log2/000238.shtml">
  <title>PL/SQL に関する覚え書き 1</title>
  <link>http://www.baldanders.info/spiegel/log2/000238.shtml</link>
  <description>何年かぶりにアプリケーションエンジニアに戻ったのだが，
なんかもう色々忘れちゃってて。
歳はとりたくないものである。</description>
  <dc:subject>Programming</dc:subject>
  <dc:creator>Spiegel</dc:creator>
  <dc:date>2006-12-26T20:49:43+09:00</dc:date>
  <cc:license rdf:resource="http://creativecommons.org/licenses/by/2.1/jp/" />
  <content:encoded><![CDATA[<p>
何年かぶりにアプリケーションエンジニアに戻ったのだが，
なんかもう色々忘れちゃってて。
歳はとりたくないものである。
</p><p>
特に忘れちゃってたのが PL/SQL。
設計段階で計画して使っていれば別だけど，
こういうのって大抵抜き差しならない状態になって慌てて検討を始めるんだよね。
デスマーチ一歩手前のときとか。
で，
そのときになって必死に思い出そうとするんだけど，
過去の悪夢も一緒によみがえって精神的なダメージを受けたり。
</p><p>
まぁ今回は幸いにも「抜き差しならない状態」ではなかったのでじっくり（といっても10人日ほど）取り組めたのでよかったのだが，
もしかして「次回」があるかもしれないので，
忘れないうちに覚え書きの形で残しておこうと思う。
といっても PL/SQL の言語仕様を列挙してもしょうがないのでごくさわりの部分だけ。
こんだけ書いときゃ「そういえばそうだっけ」と（私が）思い出せる程度の内容。
PL/SQL についてちゃんと勉強したいなら以下のコンテンツのほうがお薦め。
</p><ul>
<li><a href="http://biz.rivus.jp/">SHIFT the Oracle - oracle tips and tricks</a></li>
<li><a href="http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sak3sql.htm">SQL プログラミング言語資料</a></li>
<li><a href="http://oracle.se-free.com/">忘れっぽいエンジニアのＯＲＡＣＬＥ／オラクルＳＱＬリファレンス</a></li>
<li><a href="http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/nav/portal_3.htm">Oracle Database オンライン・ドキュメント 10g リリース2 (10.2)</a></li>
</ul><p>
また私が再学習用に買った<a href="http://spiegel.vox.com/library/book/6a00c22527e6f3604a00cd9706f0e54cd5.html">『プロとしてのOracle PL/SQL入門』</a>もひそかにお薦め。
入門用としては必要十分な内容だと思う。
「入門」は卒業された方々も，
あのときのほろ苦い思い出をよみがえらせるトリガとしてご利用いただければと（笑）
</p><blockquote>
<div class="bk1-box" style="margin-bottom:0px;"><div class="bk1-image" style="float:left;"><a href="http://www.bk1.co.jp/product/2681331/p-spiegel43226" name="bk1link" title="オンライン書店ビーケーワン：プロとしてのＯｒａｃｌｅ　ＰＬ ＳＱＬ入門" target="_blank"><img src="http://img.bk1.co.jp/bookimages/0268/026813310000.jpg" alt="プロとしてのＯｒａｃｌｅ　ＰＬ ＳＱＬ入門" style="border: thin outset #EEEEEE" /></a></div><div class="bk1-info" style="float:left;margin-left:15px;line-height:120%"><div class="bk1-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.bk1.co.jp/product/2681331/p-spiegel43226" name="bk1link" title="オンライン書店ビーケーワン：プロとしてのＯｒａｃｌｅ　ＰＬ ＳＱＬ入門" target="_blank">プロとしてのＯｒａｃｌｅ　ＰＬ ＳＱＬ入門</a><div class="bk1-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://breeder.bk1.jp/cgi-bin/link/create.cgi?bibid=2681331&partnerid=p-spiegel43226" title="簡単リンクくん" target="_blank">簡単リンクくん</a> at 2006.12.26</div></div><div class="bk1-detail">アシスト教育センター著<br />ソフトバンククリエイティブ (2006.5)<br />通常2-3日以内に発送します。<br /></div><div class="bk1-link" style="margin-top: 5px"><a href="http://www.bk1.co.jp/product/2681331/p-spiegel43226" name="bk1link" title="オンライン書店ビーケーワン" target="_blank">オンライン書店ビーケーワンで詳細を見る</a></div></div><div class="bk1-footer" style="clear: left"></div></div>
</blockquote>]]><![CDATA[<p>
PL/SQL は名前どおりの手続き型言語（Procedural Language）で，
その構造は Pascal によく似ている。
まぁ <a href="http://ja.wikipedia.org/wiki/PL/SQL">PL/SQL は Ada をベースにしている</a>らしいので似てても不思議はない。
PL/SQL は以下のようなブロック構造になっている。
</p>
<blockquote><pre>DECLARE
  /* 宣言部 */
BEGIN
  /* 実行部 */
EXCEPTION
  /* 例外処理部 */
END;</pre></blockquote>
<p>
このうち宣言部と例外処理部は省略できる。
つまり一番簡単なコードは以下のようになる。
</p>
<blockquote><pre>BEGIN
  NULL; -- No operation
END;</pre></blockquote>
<p>
このコードは SQL*Plus 等を使ってリモートから実行できる。
実行する際には最後にスラッシュ（/）を入れるのを忘れずに。
（コードをファイルに記述して実行する場合も同じ）
</p>
<blockquote><pre>SQL&gt; BEGIN
  2    NULL;
  3  END;
  4  /

PL/SQL procedure successfully completed.</pre></blockquote>
<p>
テスト等でデータベースにデータを流し込む場合に DML 文をファイルに列挙することこともあると思うが，
PL/SQL 形式なら使い回しが少し楽になる。
</p><p>
宣言部には変数や定数，変数タイプやサブプログラム（Subprogram）を定義できる。
以下は宣言部にサブプログラムを定義した例。
</p>
<blockquote><pre>DECLARE

  PROCEDURE MYPROC -- 仕様部
  IS
    /* 宣言部 */
  BEGIN
    /* 実行部 */
  EXCEPTION
    /* 例外処理部 */
  END MYPROC;

  FUNCTION MYFUNC RETURN NUMBER -- 仕様部
  IS
    /* 宣言部 */
  BEGIN
    /* 実行部 */
  EXCEPTION
    /* 例外処理部 */
  END MYFUNC;

BEGIN
  NULL;
END;</pre></blockquote>
<p>
前者がプロシージャ（Procedure）で後者がファンクション（Function）である。
プロシージャやファンクションの定義は，
それ自体がブロック構造になっている（プロシージャやファンクションの詳細については後述）。
このように PL/SQL ではブロックをネストすることができる。
上の例では宣言部がネストしているが，
実行部もブロックをネストできる。
</p>
<blockquote><pre>BEGIN
  ...
  BEGIN
    ...
  END;
  ...
END;</pre></blockquote>
<p>
これで，
例えばある特定の処理をブロックで囲んで例外をキャッチしたりできる。
（実例はまた次回にでも）
</p><p>
PL/SQL のコードを直接リモートから実行するのではなく，
ストアド・サブプログラム（Stored Subprogram）として定義しサーバに登録する場合には以下の構文になる。
</p>
<blockquote><pre>CREATE OR REPLACE PROCEDURE MYPROC -- 仕様部
IS
  /* 宣言部 */
BEGIN
  /* 実行部 */
EXCEPTION
  /* 例外処理部 */
END;

CREATE OR REPLACE FUNCTION MYFUNC RETUREN NUMBER -- 仕様部
IS
  /* 宣言部 */
BEGIN
  /* 実行部 */
EXCEPTION
  /* 例外処理部 */
END;</pre></blockquote>
<p>
前者がストアド・プロシージャ（Stored Procedure）で後者がストアド・ファンクション（Stored Function）である。
宣言部（IS ～ BEGIN の間）は省略できない（ただし空のままでもOK）。
ファンクションには必ず返り値があるが，
プロシージャにはない。
</p><p>
サブプログラムでは呼び出し時にパラメータを付けることができる。
</p>
<blockquote><pre>CREATE OR REPLACE PROCEDURE MYPROC(
  var1 OUT NUMBER,
  var2 IN OUT NOCOPY VARCHAR2,
  var3 IN NUMBER DEFAULT 0 )
IS
BEGIN
  NULL;
END;</pre></blockquote>
<p>
パラメータには IN, OUT, IN OUT の3つのモードを指定できる。
指定がない場合は IN モード。
IN モードではデフォルト値を設定できる（OUT, IN OUT モードでは不可）。
また OUT および IN OUT モードでは NOCOPY を指定できる（IN モードで指定するとエラーになる）。
NOCOPY はコンパイラヒントで，
パラメータを参照渡しにすることができる（条件によって参照渡しができない場合もある）。
ちなみにデフォルトでは IN モードは参照渡しで OUT, IN OUT モードは値渡しである。
ただし IN モードのパラメータに値を代入することはできない。
</p><p>
ストアド・サブプログラムや変数タイプや定数などの定義をパッケージとしてまとめることができる。
</p>
<blockquote><pre>/* パッケージ仕様部 */
CREATE OR REPLACE PACKAGE PKG
IS
  PROCEDURE MYPROC;
  FUNCTION MYFUNC RETUREN NUMBER;
END;
/* パッケージ本体部 */
CREATE OR REPLACE PACKAGE BODY PKG
IS

  PROCEDURE MYPROC
  IS
  BEGIN
    NULL;
  END MYPROC;

  CREATE OR REPLACE FUNCTION MYFUNC RETUREN NUMBER
  IS
  BEGIN
    RETURN 0;
  END MYFUNC;

END;</pre></blockquote>
<p>
パッケージを登録する際には必ず仕様部と本体部をセットで登録する。
このとき仕様部で宣言したストアド・サブプログラムは本体部でも必ず定義されていなければならない
（仕様部にないものを本体部で定義することは可能。
つまりパッケージ化によって中の構造を隠蔽できる）。
</p><p>
SQL*Plus などを使ってストアド・サブプログラムやパッケージを登録する際に，
コードを解析して何か問題があればエラーを返すが，
エラーの詳細までは表示されない。
直前の処理のエラー内容を知るには "<code>SHOW ERRORS</code>" コマンドを使う。
</p>
<blockquote><pre>SQL&gt; SHOW ERRORS</pre></blockquote>
<p>
パッケージ内のオブジェクトを呼び出すには以下の形式で記述する。
</p>
<blockquote><pre>DECLARE
  ret NUMBER;
BEGIN
  PKG.MYPROC();
  ret := PKG.MYFUNC();
END;</pre></blockquote>
<p>
あるいは
</p>
<blockquote><pre>SQL&gt; EXECUTE PKG.MYPROC();</pre></blockquote>
<p>
SQL*Plus でも実行時の様子は表示されない。
ただし "<code>SET SERVEROUT ON</code>" なら DBMS_OUTPUT.PUT_LINE プロシージャで出力した内容が表示される。
これで間接的にデバッグすることは可能。
DBMS_OUTPUT.PUT_LINE プロシージャは受け取った文字列をバッファに溜めてセッション終了時に一度に出力する仕様になっている。
セッション中にバッファがいっぱいになると例外を吐くので注意。
</p><p>
あう，
PL/SQL の構造の説明で終わってしまった。
続きは別の機会で。
</p>]]></content:encoded>
</item>


  <image rdf:about="http://www.baldanders.info/images/baldanders.png">
    <title>Baldanders.info</title>
    <link>http://www.baldanders.info/</link>
    <url>http://www.baldanders.info/images/baldanders.png</url>
  </image>

  <cc:License rdf:about="http://creativecommons.org/licenses/by/2.1/jp/">
     <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" />
     <cc:permits rdf:resource="http://web.resource.org/cc/Distribution" />
     <cc:requires rdf:resource="http://web.resource.org/cc/Notice" />
     <cc:requires rdf:resource="http://web.resource.org/cc/Attribution" />
     <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
  </cc:License>

</rdf:RDF>

