<?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/computer/090517-gphotoframe.html" />
        <rdf:li rdf:resource="http://www.tsurukawa.org/~yendo/blog/computer/090418-pygtk-twisted.html" />
        <rdf:li rdf:resource="http://www.tsurukawa.org/~yendo/blog/computer/090203-gnome-terminal.html" />
        <rdf:li rdf:resource="http://www.tsurukawa.org/~yendo/blog/computer/090124-f-spot.html" />
        <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: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/computer/090517-gphotoframe.html">
  <title>GNOME 写真フレーム</title>
  <link>http://www.tsurukawa.org/~yendo/blog/computer/090517-gphotoframe.html</link>
  <description>
デスクトップ上に写真を表示するガジェット (フォトフレーム) は、
Windows なんかだとずいぶんさまざま公開されているけど、
GNOME デスクトップ向けだとちょっと高機能なものなど見あたらなかったので、
PyGTK で作ってみた…</description>
  <dc:subject>computer</dc:subject>
  <dc:creator>yendo</dc:creator>
  <dc:date>2009-05-16T23:21:00+09:00</dc:date>
  <content:encoded><![CDATA[
<p>デスクトップ上に写真を表示するガジェット (フォトフレーム) は、
Windows なんかだとずいぶんさまざま公開されているけど、
GNOME デスクトップ向けだとちょっと高機能なものなど見あたらなかったので、
PyGTK で作ってみた。

<center>
<p><a href="http://www.flickr.com/photos/yendo0206/3360660976/"><img src="http://www.tsurukawa.org/~yendo/blog/images/090422-gphotoframe.png"></a>
</center>

<p>■特徴

<ul>
<li>写真のソースを複数サポート
<ul>
  <li>フォルダ
  <li>F-Spot データベース
  <li>Flickr API
  <li>Picasa Web Album API
  <li>Tumblr API
  <li>RSS
</ul>
<li>写真をランダムに表示するが、その表示確率の重みをソース別に設定可能
</ul>

<p>■インストール

<p>GNOME 写真フレームは以下のパッケージに依存している。

<ul>
  <li><a href="http://www.pygtk.org/">PyGTK</a>
  <li><a href="http://twistedmatrix.com/trac/">Twisted</a> 
    (twisted.internet, twisted.web)
  <li><a href="http://www.freedesktop.org/wiki/Software/pyxdg">pyxdg</a>
  <li><a href="http://www.glatzor.de/projects/python-distutils-extra/">Python-Distutils-Extra</a> (インストールにのみ必要)
</ul>

<p>また以下のパッケージが推奨されている。
<ul>
  <li><a href="http://pypi.python.org/pypi/simplejson/">simplejson</a>:
  for flickr, Tumblr
  <li><a href="http://www.feedparser.org/">Feed Parser</a>: for RSS
  <li><a href="http://code.google.com/p/gdata-python-client/">gdata-python-client</a>:
  for Picasa Web 
  <li><a href="http://ftp.acc.umu.se/pub/GNOME/sources/gnome-python-desktop/">gnome-python-desktop
  (gnome-keyring)</a>: for Picasa Web 
  
</ul>


<a href="http://code.google.com/p/gphotoframe/downloads/list">ダウンロード</a>して、展開後に ./setup.py install でインストールする。
あるいは一部機能が制限されるが、インストールせずに直接 gphotoframe 
を実行することも可能。

<p>■設定

<p>基本的には GUI で設定が出来るようになっているが、
写真フレームのサイズについてはまだ GUI を実装していないので、
以下のコマンドで設定する。

<pre>
    gconftool-2 --type int --set /apps/gphotoframe/max_width 400 
    gconftool-2 --type int --set /apps/gphotoframe/max_height 300 
</pre>
]]></content:encoded>
</item>
<item rdf:about="http://www.tsurukawa.org/~yendo/blog/computer/090418-pygtk-twisted.html">
  <title>PyGTK でのバックグラウンド動作</title>
  <link>http://www.tsurukawa.org/~yendo/blog/computer/090418-pygtk-twisted.html</link>
  <description>
GUI アプリ動作時にウェブにアクセスすると、その間 GUI が固まってしまう…</description>
  <dc:subject>computer</dc:subject>
  <dc:creator>yendo</dc:creator>
  <dc:date>2009-04-18T15:14:00+09:00</dc:date>
  <content:encoded><![CDATA[
<p>GUI アプリ動作時にウェブにアクセスすると、その間 GUI が固まってしまう。
これを回避するにはウェブへのアクセスをバッググラウンドで行なう必要がある。

<a href="http://gtk2-perl.sourceforge.net/">Gtk2-Perl</a> の場合については<a href="http://www.tsurukawa.org/~yendo/blog/computer/080521-gtk-perl-fork.html" title="Gtk2-Perl でバックグラウンド動作 - yendo weblog">以前書いた</a>けど、
<a href="http://www.pygtk.org/">PyGTK</a> なら 
<a href="http://twistedmatrix.com/">Twisted</a> を使えばとっても簡単。
これくらいなら、フォークとかスレッドとか細かな面倒を見なくて済む。


<p>まずは必要なモジュールをインポート。
他のモジュールに先行してインポートした方がいいらしい。

<pre>
from twisted.internet import gtk2reactor
gtk2reactor.install()
from twisted.internet import defer, reactor
from twisted.web import client
</pre>

ウェブへのアクセスには <a href="http://twistedmatrix.com/documents/current/api/twisted.web.client.html">getPage</a> を使う。addCallback 
でアクセス終了後に呼び出す関数を指定する。
<a href="http://twistedmatrix.com/documents/current/api/twisted.web.client.html">downloadPage</a> では、ファイルへのダウンロードを行う。

<pre>
d = client.getPage(url)
d.addCallback(func_cb)

def func_cb(data):
    print data
</pre>

<p>メイン・ループについては、gtk.main() の代わりに reactor.run() で開始、
また終了についても、gtk.main_quit() の代わりに、reactor.stop() を使う。

<pre>
reactor.run()
</pre>

<p>なお、<a href="http://www.twistedmatrix.com/pipermail/twisted-python/2008-June/017935.html" title="[Twisted-Python] web client and proxy">プロキシーを利用する場合</a>はちょっと面倒みたい。
簡単な方法はないのかな。

<p class="ps">追記: 
結局プロキシーを利用する適当な<a href="http://code.google.com/p/gphotoframe/source/browse/lib/utils/urlget.py">モジュール</a>を自分で用意した。(2009/05/19)
</div>
]]></content:encoded>
</item>
<item rdf:about="http://www.tsurukawa.org/~yendo/blog/computer/090203-gnome-terminal.html">
  <title>gnome-terminal の文字幅問題</title>
  <link>http://www.tsurukawa.org/~yendo/blog/computer/090203-gnome-terminal.html</link>
  <description>
gnome-terminal のというか libvte の East Asian Ambiguous 
問題は、最新の libvte 0.17.4 では解決されている…</description>
  <dc:subject>computer</dc:subject>
  <dc:creator>yendo</dc:creator>
  <dc:date>2009-02-03T03:35:00+09:00</dc:date>
  <content:encoded><![CDATA[
<p>gnome-terminal のというか libvte の East Asian Ambiguous 
問題は、最新の libvte 0.17.4 では解決されている。
libvte 0.16.x ではうまく効かなかった環境変数 VTE_CJK_WIDTH だが、 
libvte 0.17.4 では wide なり auto (locale で自動判定) 
なりを指定すればちゃんと効く。
  

<p>一方、この libvte 0.17.4 では文字の間隔 (フォントの幅?) 
が妙に広くなってしまうという問題がある。
ただ、理由はよく分からないが、これは環境変数 VTE_BACKEND に 
pango を指定すれば、従来通りの幅で表示してくれる。

<p>環境変数をどこで設定したらよいか分からなかったので、
ランチャに以下のように指定した。

<pre>
env VTE_CJK_WIDTH=auto VTE_BACKEND=pango gnome-terminal --disable-factory
</pre>

<p>gnome-terminal もこれで快適。
]]></content:encoded>
</item>
<item rdf:about="http://www.tsurukawa.org/~yendo/blog/computer/090124-f-spot.html">
  <title>F-Spot の日本語メッセージカタログ</title>
  <link>http://www.tsurukawa.org/~yendo/blog/computer/090124-f-spot.html</link>
  <description>
F-Spot 
の日本語メッセージカタログを更新した…</description>
  <dc:subject>computer</dc:subject>
  <dc:creator>yendo</dc:creator>
  <dc:date>2009-01-24T18:49:00+09:00</dc:date>
  <content:encoded><![CDATA[
<p><a href="http://f-spot.org/">F-Spot</a> 
の日本語メッセージカタログを更新した。本家リポジトリの翻訳と、
Launchpad および Novell の翻訳をまとめ、未翻訳のところを訳した。
また、po ファイルではひとまずコメントアウトしてあるが、オリジナルの 
POT ファイルに含まれていない「設定」画面のメッセージも翻訳した。

<p>その際、訳語や表記は基本的に相花さんの翻訳 (F-Spot や他の GNOME アプリ) 
に合わせ、その上で画像処理関係は GIMP の翻訳に、EXIF 関連や (写真用語) は
EXIF の仕様書に合わた。

<p>なお、ちょっと悩んだ翻訳に "Reparented" があった。
あまり使われる機能ではないが(コンパイルオプションの指定が必要)、
F-Spot のバージョン管理で使われるバージョンの一つで、
オリジナルの写真だったものを他の写真のバージョンの一つに変更させたものだ。
こちらはちょっと苦しく「再関連付け版」と訳した。

<ul>
  <li><a href="http://www.tsurukawa.org/~yendo/blog/archives/f-spot/f-spot.HEAD.ja.po">f-spot.HEAD.ja.po</a>
  <li><a href="http://www.tsurukawa.org/~yendo/blog/archives/f-spot/f-spot.HEAD.ja.po.diff">f-spot.HEAD.ja.po.diff</a> 
  <li><a href="http://www.tsurukawa.org/~yendo/blog/archives/f-spot/f-spot.mo">f-spot.mo</a>
</ul>

<p>f-spot.mo を /usr/share/locale/ja/LC_MESSAGES/ 
なんかにコピーすれば、この翻訳が利用できる。

<p class="ps">追記 1: 
<a href="http://mikeforce.net/">相花さん</a>にエラーを修正の上コミットしていただいた。(2009/3/16 23:40)

<p class="ps">追記 2: 
0.6.x リリースにあわせて翻訳を更新した。
(2009/10/20 22:05)

</div>
]]></content:encoded>
</item>
<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; を呼ぶという方法だ。
とても賢い。ちゃんと試してないが大抵のところこれで十分だろう。
気づくのが遅かった。

<p class="ps">追記: 
いろいろ書いたけど、結局のところモジュール依存を気にしなければ、
<a href="http://search.cpan.org/dist/AnyEvent-HTTP/HTTP.pm" 
title="AnyEvent::HTTP - simple but non-blocking HTTP/HTTPS client">AnyEvent-HTTP</a> を使えば超簡単。お勧め。
(2009/4/18)
</p>
]]></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>
</rdf:RDF>
