<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:admin="http://webns.net/mvcb/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  xmlns:image="http://purl.org/rss/1.0/modules/image/"
  xml:lang="ja">
  <channel rdf:about="http://www.tsurukawa.org/~yendo/blog/index.rdf">
    <title>yendo weblog</title>
    <link>http://www.tsurukawa.org/~yendo/blog</link>
    <dc:language>ja</dc:language>
    <description>Yet another yendo's weblog.</description>
    <dc:creator>yendo</dc:creator>
    <sy:updatePeriod>daily</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <admin:generatorAgent rdf:resource="http://www.raelity.org/apps/blosxom/?v=2.0"/>
    <admin:errorReportsTo rdf:resource="mailto:yendo@tsurukawa.org"/>
    <image rdf:resource="http://www.tsurukawa.org/~yendo/blog/images/yendoweblog2.png" />
        <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://www.tsurukawa.org/~yendo/blog/misc/081127-camera.html" />
        <rdf:li rdf:resource="http://www.tsurukawa.org/~yendo/blog/computer/080521-gtk-perl-fork.html" />
        <rdf:li rdf:resource="http://www.tsurukawa.org/~yendo/blog/computer/080503-twitim.html" />
        <rdf:li rdf:resource="http://www.tsurukawa.org/~yendo/blog/computer/080418-x-dual-ati.html" />
        <rdf:li rdf:resource="http://www.tsurukawa.org/~yendo/blog/computer/080418-x-dual-nvidia.html" />
        <rdf:li rdf:resource="http://www.tsurukawa.org/~yendo/blog/misc/080310-spain-election.html" />
        <rdf:li rdf:resource="http://www.tsurukawa.org/~yendo/blog/computer/070801-scanbuttond.html" />
        <rdf:li rdf:resource="http://www.tsurukawa.org/~yendo/blog/computer/070113-bigclock-05.html" />
        <rdf:li rdf:resource="http://www.tsurukawa.org/~yendo/blog/computer/061219-delicious.html" />
        <rdf:li rdf:resource="http://www.tsurukawa.org/~yendo/blog/computer/061121-weather-pgpf.html" />

      </rdf:Seq>
    </items>

  </channel>
  <image rdf:about="http://www.tsurukawa.org/~yendo/blog/images/yendoweblog2.png">
    <title>yendo weblog</title>
    <url>http://www.tsurukawa.org/~yendo/blog/images/yendoweblog2.png</url>
    <link>http://www.tsurukawa.org/~yendo/blog</link>
  </image>
<item rdf:about="http://www.tsurukawa.org/~yendo/blog/misc/081127-camera.html">
  <title>デジタル一眼レフカメラを買った</title>
  <link>http://www.tsurukawa.org/~yendo/blog/misc/081127-camera.html</link>
  <description>



-->

ダカフェ日記を見てしまい
デジタル一眼カメラが欲しくなってしまった、というスイーツ（笑）ぶり…</description>
  <dc:subject>misc</dc:subject>
  <dc:creator>yendo</dc:creator>
  <dc:date>2008-11-27T22:20:00+09:00</dc:date>
  <content:encoded><![CDATA[
<p><a href="http://www.amazon.co.jp/gp/redirect.html?ie=UTF8&location=http%3A%2F%2Fwww.amazon.co.jp%2Fgp%2Fproduct%2FB00130RRNE&tag=yendo-22&linkCode=ur2&camp=247&creative=1211">
<img src="http://ecx.images-amazon.com/images/I/51NoPzQ7cML._SL500_AA280_.jpg"
     align=right border=0></a>
<!-- 
<img src="http://www.assoc-amazon.jp/e/ir?t=yendo-22&l=ur2&o=9" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
-->

<p><a href="http://dacafe.petit.cc/">ダカフェ日記</a>を見てしまい
デジタル一眼カメラが欲しくなってしまった、というスイーツ（笑）ぶり。
なので、なるべく安く単焦点の明るいレンズを使うという観点でカメラを選ぶ。

<p>一眼レフだとレンズキットで 4、5 万円くらいからあるのか、
安くなったものだなぁと調べてみるが、レンズってやっぱり高いのね。
いわゆる標準レンズに相当する単焦点レンズが欲しかったけど、
レンズ単体に 3 万円とか払えないですよ。
安い単焦点レンズというと Canon で 
<a href="http://cweb.canon.jp/ef/lineup/standard/ef50_f18ii/">EF50mm F1.8 II</a>
(約 9,000 円)、Nikon で 
<a href="http://www.nikon-image.com/jpn/products/lens/af/singlefocal/normal/ai_af_50mmf18d.htm">Ai AF Nikkor 50mm F1.8D</a>
(約17,000円) ぐらい。
ただ、この Nikon のレンズなんかは普及機では AF が使えない。
ということで、メーカーは Canon に決定。

<p>Canon で入門機というと Kiss シリーズ。旧機種の 
<a href="http://cweb.canon.jp/camera/eosd/kissdx/">Digital X</a>、現行機種の
<a href="http://cweb.canon.jp/camera/eosd/kissf/">F</a> と
<a href="http://cweb.canon.jp/camera/eosd/kissx2/">X2</a> がある。
レンズキットがお得なので、
レンズ込みで考えると手ぶれ補正機構は欲しいかなということで Digita X 
は止めた。デジタルカメラは新しいものが基本的に良いだろうし、
物持ちが良い方なのでメーカーの補修用性能部品の保管期間が
ちょっとでも長い方がいいかもしれないぐらいを考えた。
あと、SD カードの方が少し安いかな。

<p>で、F と X2 で悩んだ。調べてみると<a href="http://plusd.itmedia.co.jp/lifestyle/articles/0807/08/news005.html"
   title="抜群コストパフォーマンスのローエンド機 —キヤノン「EOS Kiss F」-
  ITmedia +D LifeStyle">結構細々違う</a>ようになっているが、
そのほとんどが私のような素人にはどっちでもいい感じ。

<!--
<ul>
<li>撮像素子の画素数
<li>液晶ディスプレイのサイズ
<li>連写機能
<li>AF 測距点
<li>ファインダー倍率
<li>ワイヤレスリモコン機能
<li>スポット測光、高輝度・階調優先機能
<li>ディスプレイオフセンサー
<li>シボ革状のグリップと滑り止め
</ul>
--> 

ただ、気になるのが連写撮影速度。JPG なら 3 枚/秒か、3.5 
枚/秒の違いでどうでも良いのだけど、RAW の場合 F だと 1.5 
枚/秒になってしまう。せっかくのデジタル一眼レフなので
RAW で連写したいかなということで、これで X2 に決めた。
1 万円程度しか違わないし……、
とかなると他の相違も結構大きいかなとか思えるという不思議。

<p>Kiss X2 でちょっと残念なのはボディの安っぽさぐらい。
これに関しては、F の方がボディ塗装がマットな感じで私には好ましい。
見た目については Nikon の 
<a href="http://www.nikon-image.com/jpn/products/camera/slr/digital/d60/">D60</a>
なんかは、値段の割によくできてると思う。

<p>ということで Kiss X2 レンズキットと EF 50mm F1.8 II を購入した。
総計 66,000 円ぐらい。X2 には延長保証もつけたので、安く買えたと思う。
ほんの少しだけど撮った写真を
<a href="http://www.flickr.com/photos/yendo0206/">Flickr</a>
にアップロードしたりする。
自分としては、思ったよりはまともに撮れて安心した。
一眼レフ楽しい。

<!--
特に、単焦点で適当にボケのある写真を撮ると、
確かにそれだけで上手っぽく見えたりする。
-->
]]></content:encoded>
</item>
<item rdf:about="http://www.tsurukawa.org/~yendo/blog/computer/080521-gtk-perl-fork.html">
  <title>Gtk2-Perl でバックグラウンド動作</title>
  <link>http://www.tsurukawa.org/~yendo/blog/computer/080521-gtk-perl-fork.html</link>
  <description>
Gtk2-Perl で Twitter クライアント Twitim を作った折りのメモ…</description>
  <dc:subject>computer</dc:subject>
  <dc:creator>yendo</dc:creator>
  <dc:date>2008-05-21T01:28:00+09:00</dc:date>
  <content:encoded><![CDATA[
<p>Gtk2-Perl で Twitter クライアント <a href="http://www.tsurukawa.org/~yendo/blog/computer/080503-twitim.html">Twitim</a> を作った折りのメモ。
アプリ動作時にウェブにアクセスすると、その間 GUI が固まってしまう。
これを回避するにはウェブへのアクセスをバッググラウンドで行なう必要がある。
ちなみに、ちょっと哀しいけど結論だけなら
最後の「<a href="#lwp+gtk">もっと簡単な方法</a>」だけ読めば十分みたい。

<p>■分岐 fork

<p>バックグラウンド動作のための分岐には、
スレッドやフォークがある。このような目的で
スレッドを簡単に使うには
<a href="http://poe.perl.org/" title="Perl Object Environment">POE</a>
があるようだがちょっとおおげさすぎる。
スレッドは UNIX 環境以外でも使えるのだろうが面倒だし、
Gtk2-Perl の 
<a href="http://live.gnome.org/GTK2-Perl/FrequentlyAskedQuestions#head-4d5ea9310685f66fc167cf8497357e341f73128b">FAQ</a>
でもお勧めしないとある。

なお、ruby なら間違いなくスレッドなのだろう。
Gtk2-Perl のアプリではバックグラウンド動作の例があまり
見つからなかったが、<a href="http://gnview.sourceforge.jp/">gnview</a> 
はスレッドを使っている。

<p>今回は 
<a href="http://search.cpan.org/~mlehmann/AnyEvent-3.12/">AnyEvent</a>
を使っていることもあり、なるべく単純にと伝統的なフォークを使う。
AnyEvent は Gtk のイベントとなら協調して動作するが、
スレッドとか POE とかとはどうなのか不安だったこともある。

ただフォークでも注意が必要。
子プロセスの終了には use POSIX; の上、POSIX::_exit(1) する必要あり。
そうしないと X のエラーが起こる。
FAQ 
に<a href="http://www.gnome.gr.jp/docs/gtk+faq.20040114.html#AEN506">情報</a>
あり。
またその返り値は必ず指定する。
指定しないと  X のエラーが起こる。はまった。返り値はまぁ 1 でしょう。

<p>■通信 pipe

子プロセスから親プロセスに、通信結果を渡すプロセス間通信だと、
パイプや共有メモリが一般的。
変数で渡すなら共有メモリもいいが、基本スカラー変数しか渡せない。
(共有メモリについてもサンプルがある。
<a href="http://search.cpan.org/~maurice/IPC-ShareLite-0.09/ShareLite.pm">IPC-ShareLite</a> は簡単。)

<p>今回はパイプを使う。
<a href="http://www.unix.org.ua/orelly/perl/cookbook/ch16_11.htm">サンプル</a>
あり。pipe() をつかって、親と子を繋ぐ pipe ハンドラを指定する。
use IO::Handle; の上バッファに貯めないよう autoflush させた方がいい。
(なお、Net::XMPP2::Client; は IO::Handle;に依存)

<p>また、同時に複数のパイプが開かれる場合があるので、
ファイルハンドルには未定義の変数をあて、Perl 
(<a href="http://adiary.blog.abk.nu/074">5.6.0 以降</a>)
に自動的に生成してもらう。
ファイルハンドルに変数を使うことはできない。

<p>■コールバック Helper->add_watch

<p>子プロセスから読込んだデータを親プロセスで使うには、
子プロセスの終了を検知しなければならない。

<p>AnyEvent で子プロセスの終了を検知したり、
ファイルハンドラの読み込みからコールバックしたりすることもできるが、
今回は Gtk の Helper->add_watch で
ファイルハンドラの読み込みからのコールバックを使った。
<a href="http://live.gnome.org/GTK2-Perl/FrequentlyAskedQuestions#head-20b1c1d3a92f0c61515cb88d15e06b686eba6cbc">サンプル</a>あり。

<p>親プロセスで、Helper->add_watch のセットをしておけば、
子プロセスの終了を待たず (たぶん)、データがある程度流れて来次第、
親プロセスでそのデータを随時処理できるようだ。
子プロセスでパイプを close されると、そこでデータの読み込みを終了する。

<p>■<a name="lwp+gtk">もっと簡単な方法</a>

<p>……と言うように実装してしばらくしてから、
<a href="http://osdir.com/ml/gnome.gtk+.perl/2002-05/msg00022.html">Re:
  forking an external process: msg#00022</a>
というそのものの記事を見つけた。
LWP::UserAgent でサブルーチンのリファレンスを引数として渡し、
その中で Gtk->main_iteration while Gtk->events_pending; を呼ぶという方法だ。
とても賢い。ちゃんと試してないが大抵のところこれで十分だろう。
気づくのが遅かった。
]]></content:encoded>
</item>
<item rdf:about="http://www.tsurukawa.org/~yendo/blog/computer/080503-twitim.html">
  <title>Twitim: Twitter 専用 XMPP クライアント</title>
  <link>http://www.tsurukawa.org/~yendo/blog/computer/080503-twitim.html</link>
  <description>

最新の開発情報については
twitim - Google Code
をどうぞ…</description>
  <dc:subject>computer</dc:subject>
  <dc:creator>yendo</dc:creator>
  <dc:date>2008-05-03T22:45:00+09:00</dc:date>
  <content:encoded><![CDATA[
<p style="font-size: small; font-style: italic;">
最新の開発情報については
<a href="http://code.google.com/p/twitim/">twitim - Google Code</a>
をどうぞ。

<p><img style="float:right; padding: 0px 20px" 
src="http://www.tsurukawa.org/~yendo/blog/images/080502-twitim.png">

<p>■Twitim とは?

<p>Twitim は Perl + GTK で実装された 
<a href="http://twitter.com/home">Twitter</a>
専用の XMPP クライアントである。

<p>汎用の IM (想定しているのは <a href="http://www.pidgin.im/">Pidgin</a>) 
に似ているが、Twitter の利用の際に便利なように機能が追加されている。
追加されている機能は以下の通り。

<dl>
<dt>より適切なアカウント表示</dt>
<dd>Twitter ユーザの発言ではアカウント名 "twitter@twitter.com" を表示しな
い。Twitter のスクリーンネームを jabber アカウントのユーザ名と同等に扱う。
その上でアカウント名は色分けされる。ユーザアイコンも表示可能。
<dd>

<dt>Web API の併用</dt>
<dd>記事の取得に Web API を併用する。重複する記事は表示しない。
また、Web API を利用して、
返信一覧やフォロワー発言一覧などを取り寄せることも可能。</dd>

<dt>ウォッチリスト機能</dt>
<dd>特定のユーザやキーワードを、タブに分類して表示できる。つまり、人や話題
による (いわゆるクラスタ別の) 表示ができる。指定に応じて、サウンドやポップ
アップ表示による通知も可能。<!-- 通知スペースでは注目メッセージをツールチップ
内に表示し、クリックすることで通知を終了する。--></dd>

<dt>ハイパーリンクの追加</dt>
<dd>Twitter スクリーンネーム (@ 付きを含む) から、Twitter ユーザページへ
ジャンプできる。</dd>

</dl>

細かい動作に調整不足があるとか、
メモリをかなり喰う (RES で 45 MB 程度) とか、
依存モジュールが多くて手動のインストールが面倒などといった問題もあるが、
Unix デスクトップ向けの Twitter 専用 XMPP クライアントとしては、
それなりには使えるとは思う。

<!--
<p>■利用上の注意

<p>・メッセージ送信
<p>メッセージ送信は、Ctrl+Enter で行なう。
-->

<!--
<h3>高度な設定</h3>

基本的な設定は設定画面から行なえる。
設定画面からは出来ない高度な設定は、直接
~/.twitimrc の [default] セクションに書き込む。
-->

<p>■既知のバグ

<ul>
<li><strike>リンクをマウスポインタで指した際の強制スクロールの一時停止から復帰しない場合がある。</strike>
<li><strike>XMPP 接続失敗後に再接続を行うと、複数の接続が張られる場合がある。</strike>
<li><strike>track によって拾ったメッセージをポップアップする際、
まれに本文が空の場合がある。</strike>
</ul>

<p>■インストール

<p>・Debian (Ubuntu) の場合

Deb パッケージを用意してある。Debian および Ubuntu ユーザなら 
/etc/apt/sources.list に以下を追加する。

<p><i>Ubuntu では universe コンポーネントも追加しておく必要がある。</i>

<p>Debian (lenny) or Ubuntu (8.10)
<pre>
deb http://www.tsurukawa.org/debian/lenny/ ./
</pre>

<p>Debian (etch) or Ubuntu (8.04)
<pre>
deb http://www.tsurukawa.org/debian/ ./
</pre>

以下のコマンドで必要なモジュールを含めインストールできる。
サウンドやポップアップ機能を使うなら、
推奨パッケージもインストールが必要。

<pre>
aptitude install twitim 
</pre>

<p>・手動でインストールする場合

<h4>ダウンロード</h4>

以下をダウンロードして適当なディレクトリに展開する。

<ul>
  <li><a href="http://code.google.com/p/twitim/downloads/list">Twitim 最新版</a>
</ul>

<h4>必須モジュール</h4>

<p>Perl (v5.8 以降) が動作する環境とともに以下のモジュールが必要となる。

<ul>
<li>AnyEvent
<li>Net::XMPP2::Client
<li>Glib
<li>Gtk2
<li>LWP::UserAgent
<li>XML::Simple
<li>JSON::XS
<li>HTML::Entities
<li>URI
</ul>

<!--
<p>参考のため、Debian パッケージの例を挙げたが、
libanyevent-perl と libnet-xmpp2-perl は Debian パッケージにはない。
Debian で利用するにはそれぞれ dh-make-perl でインストールする。
なお、libnet-xmpp2-perl は依存するモジュールがかなり多い。
まず、
libxml-writer-perl 
libxml-parser-perl 
libnet-libidn-perl
libauthen-sasl-perl
libnet-ssleay-perl
libnet-dns-perl
libdigest-sha1-perl
をインストールしてから、以下のようにしてパッケージを作成するとよいだろう
(たぶん)。Net-XMPP2 のインストール前に、
ともかく AnyEvent をインストールしておく必要がある。

<pre>
dh-make-perl --build --cpan AnyEvent
dh-make-perl --build --cpan Net-XMPP2
</pre>
-->

<h4>推奨モジュール</h4>

以下はなくても動作に問題はないが、あれば音が鳴ったり、
ポップアップを表示できたりなどする。

<ul>
<li>Gnome2
<li>GStreamer
<li>Net::DBus::GLib
<li>Gtk::Spell
</ul>

<p>■ライセンス

<p>ライセンスは GPL 2 およびそれ以降。
なお、本アプリ中で利用しているアイコンは 
<a href="http://www.pidgin.im/">Pidgin</a>由来のものである。
作者である 
<a href="http://bomahy.nl/hylke/blog/">Hylke Bons さん</a>に感謝。
また、HyperText.pm というモジュールは、
Gtk2-Perl のサンプルを使い回したものなので、
こちらのライセンスのみオリジナルに従い LGPL 2.1 である。

<p>Copyright &copy; 2008 Yoshizumi Endo<br>
Copyright &copy; 2003-2008 gtk2-perl team (HyperText.pm)<br>
Copyright &copy; 1998-2007 Hylke Bons (Icons)<br>

<p>利用にあたっては完全無保証だが、
バグ報告などあればメールや Twitter (@yendo0206) でどうぞ。
Gnome っぽいシンプルなアイコンとか描いてみようとしたけどめげたので、
どなたか作ってくれたりすると嬉しい。

<!-- Google Code でソースを管理するようにした。 (2008-05-20) -->
]]></content:encoded>
</item>
<item rdf:about="http://www.tsurukawa.org/~yendo/blog/computer/080418-x-dual-ati.html">
  <title>X でのデュアルモニター (ATI 編)</title>
  <link>http://www.tsurukawa.org/~yendo/blog/computer/080418-x-dual-ati.html</link>
  <description>
■前置き

AMD 690G なマザーボードやら 17 インチ液晶モニタを二台やら購入し、
Debian をインストールした…</description>
  <dc:subject>computer</dc:subject>
  <dc:creator>yendo</dc:creator>
  <dc:date>2008-04-18T14:28:00+09:00</dc:date>
  <content:encoded><![CDATA[
<p>■前置き

<p>AMD 690G なマザーボードやら 17 インチ液晶モニタを二台やら購入し、
Debian をインストールした。最初は X での使い勝手がよい NVIDIA 
のカードを買うつもりだったのだが、
マザーボードがデュアルモニタに対応しているので、
ひとまずマザー内蔵のものを使うことにした。
また、購入したマザーボードのディスプレイ出力、片方がアナログだったりする
のは今時どうなのよとか思ったりもしたのだが、DVI 出力が二つあってなおかつファ
ンレスなグラフィックボードの入手がちょっと難しそうだったりこともあり、
片方はアナログ接続で我慢することにした。

<p>利用するドライバだが、最初は fglrx ドライバを利用しようとした。
コンポジット表示は試していないが、2D 表示 も 3D 表示もまぁ軽快でいいかなと
思っていたら、ログアウト時に画面がブラックアウトするバグに遭遇した。
この問題に遭遇している人は多いようだが、
ちゃんとした解決方法はちょっとよく分からなかった。

<p>結局、3D はひとまず諦め、オープンな radeonhd ドライバを使うことにした。
Debian の場合は sid に最新版 (1.2.0) が収録されている。
たまにマウスポインタの表示がおかしくなったりするようだが、
2D 表示や、動画程度ならこのドライバでまず問題はないようだ。
デュアルモニターの設定を含めたドライバ情報については
<a href="http://wiki.x.org/wiki/radeonhd">X.Org Wiki - radeonhd</a>
にまとまっている。

<p>■設定

<p>まずは xrandr を端末から実行して、接続名を確認しておく。
AMD 690G だと、DVI-D_1 と VGA_1 だ。
Section "Device" には、"monitor-接続名" 
と好みの識別子を書く。私は識別子をそれぞれ "DVI"、"VGA" とした。

<pre>
Option          "monitor-DVI-D_1"       "DVI"
Option          "monitor-VGA_1"         "VGA"
</pre>

また、Section "Device" にはプライマリ接続となる接続名も書いておく。
"monitor-接続名" でも、自分で付けた識別子でもなく、接続名を書く。
ここで指定した接続モニタに GDM の画面や GNOME 
のメインパネルなんかが表示される。

<pre>
Option          "RROutputOrder"         "DVI-D_1"
</pre>

さらにモニタの設定を二つ用意し、片方にはモニタの位置関係を指定する。
なお、"RightOf" 以外にもいくつか指定方法がある。

<pre>
Section "Monitor"
        Identifier      "DVI"
EndSection

Section "Monitor"
        Identifier      "VGA"
        Option          "RightOf" "DVI"
EndSection
</pre>

<p>■まとめ

<p>デュアルモニター設定のために、変更する部分をまとめると以下の通り。

<pre>
Section "Device"
        Identifier      "Generic Video Card"
        Driver          "radeonhd"
        BusID           "PCI:1:5:0"
        Option          "monitor-DVI-D_1"       "DVI"
        Option          "monitor-VGA_1"         "VGA"
        Option          "RROutputOrder"         "DVI-D_1"
EndSection

Section "Monitor"
        Identifier      "DVI"
EndSection

Section "Monitor"
        Identifier      "VGA"
        Option          "RightOf" "DVI"
EndSection
</pre>

<p>まったくもってデュアル (あるいはマルチ) モニターは便利すぎ。
]]></content:encoded>
</item>
<item rdf:about="http://www.tsurukawa.org/~yendo/blog/computer/080418-x-dual-nvidia.html">
  <title>X でのデュアルモニター (NVIDEA 編)</title>
  <link>http://www.tsurukawa.org/~yendo/blog/computer/080418-x-dual-nvidia.html</link>
  <description>
書いていたのを忘れていた古い記事だが、CRT が壊れた記念に公開しておく…</description>
  <dc:subject>computer</dc:subject>
  <dc:creator>yendo</dc:creator>
  <dc:date>2008-04-18T13:20:00+09:00</dc:date>
  <content:encoded><![CDATA[
<i>書いていたのを忘れていた古い記事だが、CRT が壊れた記念に公開しておく。</i>

<p>■前置き

<p>捨て置いていた CRT モニターがあったので、デュアルモニターを設定してみた。
OS は Debian GNU/Linux。ハードウェアの構成は以下の通り。

<p><table>
<tr><td>ビデオカード</td><td>ASUS N6200 (Geforce 6200)</td><td>-</td></tr>
<tr><td>液晶モニター (プライマリ)</td><td><a href="http://www.eizo.com/support/discontinued/lcd/l461.asp">EIZO  FlexScan L461</a></td><td>1280x1024</td></tr>
<tr><td>CRT モニター (セカンダリ)</td><td><a href="http://121ware.com/support/product/data/spec/dsp/94100033-1.html">NEC MultiSync 15 (PC-KM153R)</a></td><td>1024x768</td></tr>
</table>

<p>このビデオカードには、DVI 接続と VGA 接続が一つづつあるので、
それぞれにモニターを接続することになる。
メインは液晶モニター、その右側にサブとして CRT モニターを設置して使う。
なお、この CRT モニターはもともと PC-9821 シリーズ向けのものなので、
接続のために変換アダプタ (800円ぐらい) を購入した。  

<p>Geforce のドライバは、NVIDIA 提供の最新のもの
をあらかじめインストールし、設定しておく。
<!-- (Debian experimental の 1.0.9746-2) -->

<p>■Xinerama vs. TwinView

<p>X でのデュアルモニターには Xinerama を使うのが一般的だが、
NVIDIA の純正ドライバだと TwinView なるものが使える。
TwinView の利点は何かというと、<a
   href="http://download.nvidia.com/XFree86/Linux-x86/1.0-9626/README/appendix-g.html"
   title="Appendix G. Configuring TwinView">マニュアル</a>によれば以下の通りらしい。

<ul>
  <li>単一の X スクリーンを構成
  <li>複数のデバイスで、一つのフレームバッファを共有
  <li>単一のデスクトップをエミュレートするのにオーバーヘッドがない。
</ul>

<p>この説明では私は良く意味が分からなかったが、具体的に設定してみて分かっ
た範囲で、TwinView の特徴をまとめると以下のような感じだった。
Xinerama の方は十分に試したという訳でもないので、いくつかの項目は
もしかしたら Xinerama でも TwinView でもたいして変らないかもしれないけど……。

<p>・TwinView の長所

<ul>
<li>設定はコンパクトに済む
<li>Xinerama よりも<a href="http://www.phoronix.com/scan.php?page=article&item=387&num=1" title="[Phoronix] Xinerama v. TwinView">いくらか速い</a>らしい。
<li>モニターの位置関係に融通が効く。
<li>設定によって片方のモニタを無効にするのが簡単。
<li>両デバイスをまたがって、フルスクリーンを
  構成するのが楽かもしれない。
</ul>

<p>・TwinView の短所

<ul>
<li>片方のモニターに限って解像度を変更するのは、すこし面倒。
<li>また片方のモニターのみ回転させることはできなさそう。
<li>一部アプリケーションでフルスクリーンモードの利用に制限がある。
</ul>

<p>せっかくなので、私は TwinView を利用することにした。

<p>■設定

ドライバのバグというか仕様なのか、一部面倒なところがある。

<p>・TwinView を有効にする

<p>/etc/X11/xorg.conf の "Device" セクションにまずは以下のものを追加する。
これで TwinView が有効になる。

<pre>
Option    "TwinView" "on"
</pre>

<p>・DVI 接続をプライマリに設定 + 基本設定

<p>私は、DVI 接続の液晶モニターをプライマリとして、
VGA 接続の CRT モニターをセカンダリとして利用したいのだが、
<strong>デフォルトでは VGA 接続の CRT 
モニターがプライマリとして認識されてしまう。</strong>
これは、以下のオプションで変更する。

<pre>
Option    "TwinViewXineramaInfoOrder" "DFP, CRT"
</pre>

<p>しかし、ややこしいことに、
<strong>設定の際、明示しないかぎり暗黙のプライマリ接続は
VGA 接続の方だとみなされてしまう。</strong>
水平周波数、垂直周波数 は、
それぞれ DFP (DVI 接続)、CRT (VGA 接続) と明示した方が
分かりやすいだろう。
"SecondMonitorHorizSync" と "SecondMonitorVertRefresh" は使わない。

モニタの配置順序は、暗黙のプライマリ接続の「左」に、
暗黙のセカンダリ接続を配置するため、"LeftOf" とする。
明示的に "DFP RightOF CRT" と書いた方が分かりやすいのだが、
これだと SDL なアプリケーションではなぜか
両モニターをまたぐフルスクリーン表示で左右が逆になってしまった。

<pre>
Option    "HorizSync"   "DFP: 31.5-64; CRT: 24.8-57"
Option    "VertRefresh" "DFP: 50-75;   CRT: 55-90"
Option    "TwinViewOrientation" "LeftOf"
</pre>

<p>・Metamodes の設定

最後に "Metamodes" 画面モードの設定を行なう。"," で区切って、複数のモニター
の解像度を設定する。";" で区切ることによって、複数のモードを設定できる。
以下は読みやすいように複数行にわたって書いているが、実際は一行にまとめる
必要があったと思う。

<pre>
Option    "Metamodes" "DFP: 1280x1024, CRT: 1024x768 +1280+110 @1024x768 ; 
                       DFP: 640x512 @640x512, 1024x768 ; 
                       DFP: 1280x1024, CRT: NULL"
</pre>

<p>一行目の "+1280+110" というのは、"TwinViewOrientation" による配置順序を無視
して、独自に位置関係を設定する項目である。異なるモニタを使えば、
普通スクリーンの上下の位置は、適切なものとはならないだろう。
ここでは、CRT モニターの方を上に、110 ドット分ずらしている。
この設定ゆえ、右方向に 1280 ドット分ずらす設定も併記しておく。

<p>一行目、二行目にある "@1024x768" という項目で、パンニング・
ドメインなるものを設定する。これを設定すると、いろいろあるけど、
相対的に画素数の少ないモニターで
表示できない範囲を無視してくれるようになるはずなのだが完全ではないようだ。
設定しないとどうなるんだっけ。上下にビューポイントが
動いたりするんだっけか。確か面倒だった。

<!-- とまれ、一行目の設定を用いてスクリーンショットを撮るとこんな感じになる。-->
<!-- <img src=""> -->

<p>三行目の "NULL" という設定は、
そのディスプレイを利用しないための設定。
DPMS のオフステートに対応したディスプレイならば、
電源もちゃんと切れて無いものとしてくれる。

<p>この例のように設定すると、
GNOME の場合「画面の解像度の設定」で設定を動的に変更できる。
二つのデバイスをまとめて、三つの解像度が利用できるわけだ。

<!-- <img src=""> -->

<p>なお、設定をぜんぶまとめると以下の通り。

<pre>
Option    "TwinView" "on"
Option    "TwinViewXineramaInfoOrder" "DFP, CRT"
Option    "TwinViewOrientation" "CRT LeftOf DFP"
Option    "HorizSync"   "DFP: 31.5-64; CRT: 24.8-57"
Option    "VertRefresh" "DFP: 50-75;   CRT: 55-90"
Option    "Metamodes" "1024x768 +1280+110 @1024x768, 1280x1024 ; 
          1024x768, 640x512 @640x512 ; NULL, 1280x1024"
</pre>

<p>■まとめ 〜残された問題

<p>古い mplayer のフルスクリーン表示で、映像の一部が表示されないことがある。
また古い mplayer だと異なるモニタのアスペクト比に自動では対応できない。
コマンドラインで、
"-xineramascreen 1" などと表示するモニターを明示したり、
"-monitoraspect 4:3" としてモニタのアスペクト比を明示しなければならない場
  合もあろう。
ちなみに、Totem ならどちらも問題ない。

<p>SDL を利用するアプリケーションでは、一方のモニターで
SDL アプリケーションをフルスクリーンで表示し、
一方のモニターで通常画面を表示することができない。
SDL アプリケーションをフルスクリーン表示するには、
どちらか一方のモニターを無効にしないと、
二つのモニターにまたがって中央に表示が行なわれてしまう。

<!--
<p>デュアルモニターにした分だけビデオメモリを消費する。
私のビデオカードは 128MB のメモリを積んでいるが、
古いドライバだと、beryl など 3D デスクトップ環境で利用した場合など、
NVIDIA ドライブのバグの絡みなのかビデオメモリが
足りなくなることがたまにある。
一時的に、要らないウィンドウを閉じるか、
3D デスクトップ環境の利用を停止する必要がある。
-->

<p>他にも、液晶ディスプレイと CRT モニターで
色合いが結構違ったりするのが気になったりもするけれども、
デュアルモニターは思った以上に便利。
私の CRT モニターでは、小さな文字を読むのはしんどいが、
大きな文字で端末エミュレータ専用にしてもいいし、
映像はやはり液晶モニタよりはきれいだったりする。
腐った CRT モニタでも捨てるにはお金がかかるので、
電気代に注意しつつ、有効に使ってもよいだろう。
]]></content:encoded>
</item>
<item rdf:about="http://www.tsurukawa.org/~yendo/blog/misc/080310-spain-election.html">
  <title>2008 年スペイン総選挙</title>
  <link>http://www.tsurukawa.org/~yendo/blog/misc/080310-spain-election.html</link>
  <description>
スペイン総選挙では優先権をもつ下院で、PSOE (164→169 議席) が勝ったが、PP
(148→153 議席) も善戦…</description>
  <dc:subject>misc</dc:subject>
  <dc:creator>yendo</dc:creator>
  <dc:date>2008-03-10T19:40:00+09:00</dc:date>
  <content:encoded><![CDATA[
<p>スペイン総選挙では優先権をもつ下院で、PSOE (164→169 議席) が勝ったが、PP
(148→153 議席) も善戦。ともに 5 議席づつ伸ばした。
PP は野党の立場では過去最大の議席数。
この二大政党が下院において投票で 84%、議席数で 92% を占める。

<p>二極化が進んだと言われるが、どこが議席を減らしたのかというと主に左派ミニ党
派。カタルーニャ共和左派 ERC (8→3) と 統一左翼 IU (5→2)。どちらも単独では
日本で言う院内会派を形成できなくなった。ERC は前回勝ちすぎたこともあるが、
IU の下落傾向は止らないようだ。

<p>主な地域政党はおおまかに言って現状維持。例えばカタルーニャの CiU は 10→11、
バスクの EAJ-PNV は 7→6。あとは自治州のありかたなどについて憲法改正を主張
する UPyD がマドリッドで初議席を得たことがトピックなくらいか。

<p>スペイン内務省発表の2008年総選挙データ http://www.generales2008.mir.es/
]]></content:encoded>
</item>
<item rdf:about="http://www.tsurukawa.org/~yendo/blog/computer/070801-scanbuttond.html">
  <title>scanbuttond for EPSON GT-S600/GT-F650</title>
  <link>http://www.tsurukawa.org/~yendo/blog/computer/070801-scanbuttond.html</link>
  <description>
最近のスキャナには本体にいくつかのボタン (スキャナビボタン) 
があり、コピーや PDF 作成などの機能を呼び出せるようになっている…</description>
  <dc:subject>computer</dc:subject>
  <dc:creator>yendo</dc:creator>
  <dc:date>2007-08-01T15:38:00+09:00</dc:date>
  <content:encoded><![CDATA[
<p>最近のスキャナには本体にいくつかのボタン (スキャナビボタン) 
があり、コピーや PDF 作成などの機能を呼び出せるようになっている。嬉しいことに 
GNU/Linux でも <a href="http://scanbuttond.sourceforge.net/">scanbuttond</a>
を利用すれば、スキャナ本体のボタンのプッシュ・リリースを検知し、
好みのアクションを実行できる。

<p>ただ、私が最近購入した 
<a href="http://www.epson.jp/products/colorio/scanner/gts600/">EPSON GT-S600</a> (あるいは GT-F650、Perfection V10/V100 PHOTO) 
は、この scanbuttond ではサポートされていなかった。
そもそも最近の EPSON スキャナは、以前のものとはプロトコルが違うらしい。
しょうがないので、新しいバックエンドを用意した。
これでちゃんと本体上の四つのボタンを区別して検知できている。
また、GT-S600 以外の最近の EPSON 
スキャナも、<a
   href="http://gentoo-wiki.com/Scanner_buttons_and_one-touch_scanning#Your_Scanner_Isn.27t_Supported"
   title="Scanner buttons and one-touch scanning - Gentoo Linux Wiki">この辺り</a>を見てゴニョゴニョすれば何とかなるかも。

<p>アップストリームにはパッチを投げておいたが、
一応ここでもパッチと Debian パッケージを公開しておく。
<strong>完全無保証</strong>だがご関心のある方はどうぞ。
パッチの方は当てたら automake をお忘れなく。

<ul>
  <li><a
  href="http://www.tsurukawa.org/~yendo/blog/archives/scanner/scanbuttond-0.2.3.patch"
  onClick="javascript:urchinTracker ('/downloads/scanbuttond-0.2.3.patch');">scanbuttond-0.2.3.patch</a>
  <li>Debian パッケージ (etch)
  <ul>
  <li><a
  href="http://www.tsurukawa.org/~yendo/blog/archives/scanner/scanbuttond_0.2.3-4+ye1_i386.deb"
  onClick="javascript:urchinTracker ('/downloads/scanbuttond_0.2.3-4+ye1_i386.deb');">scanbuttond_0.2.3-4+ye1_i386.deb</a>
<li><a
       href="http://www.tsurukawa.org/~yendo/blog/archives/scanner/scanbuttond_0.2.3-4+ye1.diff.gz">scanbuttond_0.2.3-4+ye1.diff.gz</a>
<li><a href="http://www.tsurukawa.org/~yendo/blog/archives/scanner/scanbuttond_0.2.3-4+ye1.dsc">scanbuttond_0.2.3-4+ye1.dsc</a>
  </ul>
</ul>

<p>ちなみに、この GT-S600 で書類をスキャンする場合、トーンカーブの調整は 
<a href="http://www.sane-project.org/man/scanimage.1.html">scanimage</a> 
そのもので --(red|green|blue)-gamma-table 
`<a href="http://www.tsurukawa.org/~yendo/blog/archives/scanner/curve.pl">curve.pl</a>
 100 200` のようにして済ますのが楽。
また、スキャンした書類をそれなりに整形するには
<a href="http://unpaper.berlios.de/">unpaper</a> が便利。
]]></content:encoded>
</item>
<item rdf:about="http://www.tsurukawa.org/~yendo/blog/computer/070113-bigclock-05.html">
  <title>マイナーアップデート ―私家版 BigClock 2.83c #5</title>
  <link>http://www.tsurukawa.org/~yendo/blog/computer/070113-bigclock-05.html</link>
  <description>
もう弄ることはないと思っていた Palm 用時計ソフトウェアの 
BigClock だが、
バグを見付けてしまったので、その修正ついでに若干の機能追加も行なった…</description>
  <dc:subject>computer</dc:subject>
  <dc:creator>yendo</dc:creator>
  <dc:date>2007-01-13T04:45:00+09:00</dc:date>
  <content:encoded><![CDATA[
<p>もう弄ることはないと思っていた Palm 用時計ソフトウェアの 
<a href="http://www.tsurukawa.org/~yendo/blog/?tag=bigclock">BigClock</a> だが、
バグを見付けてしまったので、その修正ついでに若干の機能追加も行なった。

<p>■バグ修正

<ul>
<li>OS4 以前の Clie ハイレゾモードでは、
<a
   href="http://www.tsurukawa.org/~yendo/blog/computer/060414-bigclock-03.html#timer"
   title="アテンション・マネージャ対応ほか ―私家版 BigClock 2.83c #3 | yendo weblog">日時指定付きタイマー</a>
   の<a href="http://www.gacel.de/bigclock/panel_timerplus.gif">タイマー +</a>
で時間表示がずれていた。この問題を修正した。
<li>OS3.x のデバイスで、
アラームおよびタイマーを「自動で閉じる」ためのチェックが外せなくなるバグを修正
<li>タイマーで「この数を時間に掛ける」に 0 を指定すると、
条件によっては例外処理が適切に行なわれずにフリーズするバグを修正
</ul>


<p>■機能追加

<ul>
<li>メニューからタイマーやアラーム、サウンドを設定する際、
オリジナルでは必ず 1 番目の設定がまず表示されていた。
これを、例えば「タイマー2」が画面に表示されていれば、
「タイマー2」の設定画面が表示されるように変更した。
なお、上下二つのパネルについては上のものが優先される。
<li>「詳細設定」に、「クレードル上で常時オン」というオプションを追加
<!--
<li>ハードキーで BigClock が起動するように設定している場合、
BigClock 実行中にそのキーを押すとタブの切り替えを行なう
-->
</ul>

<p>
わずかな変更なので、
公開するパッチは前バージョンからの変更点のみを含むものとした。
ライセンスはオリジナルに基づき GPL。完全無保証。
<a href="http://www.tsurukawa.org/~yendo/blog/archives/bigclock/holidays_2007jp.txt">2007
   年の日本の休日データ</a>も置いておくが、こちらももちろん無保証。


<p><table style="margin-left: 2em;">
<!--
<tr><td>オリジナルソース</td><td><a href="http://www.tsurukawa.org/~yendo/blog/archives/bigclock/bigclock_src_2.83.tar.gz">bigclock_src_2.83.tar.gz</a></td></tr>
-->
<tr><td><a
	   href="http://www.tsurukawa.org/~yendo/blog/computer/060529-bigclock-04.html" title="休日データへの対応ほか ―私家版 BigClock 2.83c #4">前バージョン</a>からのパッチ</td><td><a href="http://www.tsurukawa.org/~yendo/blog/archives/bigclock/bigclock_ye5-1.patch">bigclock_ye5-1.patch</a></td></tr>

<!--
<tr><td>パッチ</td><td><a href="http://www.tsurukawa.org/~yendo/blog/archives/bigclock/bigclock_ye5.patch">bigclock_ye5.patch</a></td></tr>
-->

<tr><td>バイナリ (日本語版)</td><td><a href="http://www.tsurukawa.org/~yendo/blog/archives/bigclock/bigclock-ja_ye5-1.prc" onClick="javascript:urchinTracker ('/downloads/bigclock-ja_ye5-1.prc');">bigclock-ja_ye5-1.prc</a></td></tr>

<tr><td>バイナリ (English)</td><td><a href="http://www.tsurukawa.org/~yendo/blog/archives/bigclock/bigclock-en_ye5-1.prc" onClick="javascript:urchinTracker ('/downloads/bigclock-en_ye5-1.prc');">bigclock-en_ye5-1.prc</a></td></tr>
</table>
]]></content:encoded>
</item>
<item rdf:about="http://www.tsurukawa.org/~yendo/blog/computer/061219-delicious.html">
  <title>del.icio.us 用 Firefox 拡張の日本語版</title>
  <link>http://www.tsurukawa.org/~yendo/blog/computer/061219-delicious.html</link>
  <description>
ソーシャルブックマーク最大手
del.icio.us の最大の問題点は
日本語での検索ができないことだったが、久しぶりに使ってみたら
自分のブックマークに関してはちゃんと検索できるようになっていた…</description>
  <dc:subject>computer</dc:subject>
  <dc:creator>yendo</dc:creator>
  <dc:date>2006-12-19T21:00:00+09:00</dc:date>
  <content:encoded><![CDATA[
<p>ソーシャルブックマーク最大手
<a href="http://del.icio.us/">del.icio.us</a> の最大の問題点は
日本語での検索ができないことだったが、久しぶりに使ってみたら
自分のブックマークに関してはちゃんと検索できるようになっていた。
まだ日本語では他人のブックマークの検索が出来ないのは残念だが、
ひとまずは常用できそうだ。
また、プライベートなブックマークをつける機能も追加されていたりして、
これも嬉しい。

<p>さらに、del.icio.us 用
Firefox 拡張</a>も<a href="http://del.icio.us/help/firefox/extension">シンプルなもの</a>と <a href="https://addons.mozilla.org/firefox/3615/">Firefox 
のブックマークを統合する拡張</a>の二つが用意されている。
私はシンプルな前者を利用したが、これでも以下のように十分便利。

<ul>
<li>Ctr + / でブックマーク、Ctrl + . で自分のブックマークページの表示
<li>ブックマーク時に範囲選択をしていると、その部分を notes に挿入してくれる。
<li>リンク先のブックマークも可
<!-- <li>サーチプラグインも同梱 -->
</ul>

<p>この拡張はなかなか便利なので、適当に日本語訳してみた。
ついでに私の好みでメニューの位置を「ヘルプ」の前にしたり、
(Debian の Iceweasel で) 
ブックマーク登録時のウィンドウに余分なクロールバーが表示されないように、
ウィンドウの幅を若干拡げたりした。

<p>オリジナルのライセンスが不明だったので、
問題がありそうだったりしたら拡張やパッチの公開は期間限定になるかも。
ご利用になりたい方は完全無保証・自己責任でどうぞ。

<!-- <p style="margin-left: 2em;"> -->

<ul>
<li>
<a href="http://www.tsurukawa.org/~yendo/blog/archives/delicious-ja.xpi" onClick="javascript:urchinTracker ('/downloads/delicious-ja.xpi');">delicious-ja.xpi</a>:
日本語メッセージを含んだ拡張本体
(md5sum: 144d2900c581f25af5e648580b4833e7)

<li><a
       href="http://www.tsurukawa.org/~yendo/blog/archives/delicious-ja.diff" onClick="javascript:urchinTracker ('/downloads/delicious-ja.diff');">delicious-ja.diff</a>:
zip をすべて展開した上での差分
</ul>

<!-- Emacs のバックアップファイル *~ を含めてしまうのもまずかったような。-->


<p>なお、Firefox 拡張の日本語メッセージ翻訳については、<a href="http://takanory.net/firefox/japanize/">拡張機能の日本語化 - takanory.net</a> を参考にした。
ただ、Firefox 2.0 相当を導入したためなのか良く分かっていないが
<a href="http://www.mozilla-japan.org/xpfe/ConfigChromeSpec.html">Chrome Manifest</a>
なるものの修正も必要だった。
]]></content:encoded>
</item>
<item rdf:about="http://www.tsurukawa.org/~yendo/blog/computer/061121-weather-pgpf.html">
  <title>PictureGear Pocket で天気予報を表示</title>
  <link>http://www.tsurukawa.org/~yendo/blog/computer/061121-weather-pgpf.html</link>
  <description>
ネットワークを使えない Clie (OS 4.0) + jpilot で
天気予報を表示できるようにしてみた…</description>
  <dc:subject>computer</dc:subject>
  <dc:creator>yendo</dc:creator>
  <dc:date>2006-11-21T16:38:00+09:00</dc:date>
  <content:encoded><![CDATA[
ネットワークを使えない Clie (OS 4.0) + jpilot で
天気予報を表示できるようにしてみた。
効率など無視したアナクロな方法だが、
天気予報の画像を引っ張ってきて、Clie で表示するようにした。

<p>画像表示には <a
href="http://muchy.com/review/picturegearpockethrjp.html" title="Muchy.com のレビュー">PictureGear Pocket</a> 
(あるいは <a href="http://plaza9.mbn.or.jp/~shirou_bb/polar/index-ja.html" title="Polar (PGPF Image Viewer)">Polar</a>) を使い、画像の変換に
は<a href="http://www.tsurukawa.org/~yendo/blog/computer/060118-pgpf.html"
title="Palm 向け画像形式への GNU/Linux 上での変換 | yendo weblog">以前作成したシェルスクリプト</a>を 
pgpf2palm として使う。
以下のスクリプト
を<a
     href="http://www.tsurukawa.org/~yendo/blog/computer/060116_hotsync.html" 
title="HotSync ボタン一つで jpilot-sync | yendo weblog">仕込んでおけば</a>、自動的に画像データの取得、変換、転
送ができる。

変数は適宜する必要があるが、<a href="http://www.tbs.co.jp/weather/top-j.html">TBS WEATHER GUIDE</a> あたりがいいかも。
<tt>$url</tt> にはベースとなる URL を、<tt>$file</tt> 
には取得する画像のファイル名を指定する。

<p><pre>
#!/usr/bin/perl 

use strict;
use LWP::Simple;

my @file = ("xxx.jpg", "yyy.jpg");
my $url = "http://";
my $tmp = "$ENV{HOME}/tmp/pgpf/";

foreach (@file) {
    my $rc = mirror($url.$_, $tmp.$_);

    if ($rc == 200) {
	system "pgpf2palm $tmp$_";
    }
}
</pre>

<p>Clie 付属の PhotoStand を使えば、ホーム画面から直ぐに画像を閲
覧することもできる。

<p><img src="http://www.tsurukawa.org/~yendo/blog/images/061131-weather.png">

<p>……が、さすがにそろそろネットワークの使える PDA が欲しいところ。
]]></content:encoded>
</item>
</rdf:RDF>
