バータリー指向プログラミング


自分で書いたゴミプログラムを置いてみたりする(笑) でもあんまり可哀想なので「ゴミ捨て場」というタイトルは返上することにした。わはは。

COPYRIGHTはGPLなので好きにして。でも動作そのものはもちろん無保証ね。そのままでは人類の文化には一切貢献しないし、リサイクルして作り直せばなんとか…というまさにゴミ(笑)なので、わざわざパッケージになどしない… はずだったのだが、今回、ついに!パッケージも置いてみた。が、お?使ってみたいかも… などと一時の気の迷いで思っちゃった奇特な人は、基本的には自分でmakeが義務づけだ。

オブジェクト指向が大流行りのようだが、ゴミプログラムはオブジェクト指向の次のトレンドになるであろう、と業界でも密かに注目を集めているバータリー指向で開発されている(笑)ので、makeは非常に簡単だが、安定稼働させるのは困難を極める(大笑い)。

今のところ置いてあるのはコダック(ポケモンぢゃないぞ)、Muttscape(最近手付かず(笑))、ふみえでぃdcupfaceviewだ。マジでゴミだらけだなぁ(苦笑)

faceview New!

すまん。もう最初からあやまっとく(笑) バータリーもここに極まれり、というのを書いてしまった。

なにって、それは X-Face を表示するユーティリティなんだけどさ。X-Face ってなに?という人はこちらを見てちょ。そう。普通は XEmacs で mew とか wl とかを使って見るものなんだと思う。

一応存在そのものは以前から知ってはいたのだけど、特に使う必要もないし、そもそもオレの愛用している mutt では使えなかったのだが… 最近になって、はにび姐_tom_ さんが愛の X-Face 交換メールを極秘でやり取りしているというウワサを聞いてしまった以上、黙っておれぬわ。

というわけで、チャチャイと書いてみたのがコレ、faceview なのだ。tar 玉を展開して、./configure ; make すると faceview という実行ファイルができる。いや、実際にはわざわざプログラムを書かずとも、赤帽なら faces 関係と libgr 関係のパッケージが入ってさえいれば、shell script をちょいちょいと書けば見ることはできるんだけどさ。

使い方は簡単で、X-Face: というヘッダを含むメールをもらったら、それをパイプラインで faceview に喰わすだけ。すると、48x48 の xpm(モノクロだけど)として表示されるという、それだけなのだ(笑) オレは mutt を使っているので、~/.muttrc に

macro pager \cv "|faceview\n"

などと書いている。X-Face 付きのメールがきたら、C-v すると表示されるというわけ。あ、制限事項として、カラーの X-Face には対応していない。また、X-Face: ってば何個も何個もつけることができてしまうんだけど、それにも対応していない。表示できるのは1個だけだ。なにしろバータリーだからねぇ。

実わパッケージもあったりする。コ鯖に置いてあるので、使ってみようかな、とか(いるのかそんな人)、中を見てみたいぜ、という人は持ってってちょ。

Kodak Digital Camera Utility on GTK+ (なんか名前付けてくれ(笑))

Kodak DC210 ZOOM PlusというDigital Cameraを手に入れたんだけど、撮影した写真をjpegなどのフォーマットでPCに取り込むために、いち〜ちWindowsを立ち上げて、得体の知れない専用ソフトを使え、というのは我慢ならぬわ。

だもんで、いろいろ探したんだけど、お!これは!?ってのはgPhotoしか見つからなかった。だけど、ほとんどOlympusのカメラしかサポートしてないんだよね。やっぱOlympusにしときゃ良かったと死ぬほど思ったが、さらに探すとkdcpiというのがKodak DC210をサポートしていることがわかった。

だがkdcpiは実際にはPerlのスクリプトで、コマンドラインから使うシンプルなものだった。Perl/GTKでフロントエンドを書いているが、開発は途中で止まっているようなことが書いてあるでわないか…

だから、結局自分で書いちまったよ。GTK+ベースなXのクライアントを。要はカメラとの通信プロトコルさえわかれば、どうとでもなるもんね。あんまり得意じゃないPerlとはいえ、実働する仕様書なわけで、 こんなに頼れるものも他にないよなぁ(笑) kdcpi作者のBrian A. Hirtさんに感謝だ。GTK+ベースにしてみました、って連絡してみよう。

機能サマリは以下の通りだ。

xscanimageみたいなGIMPのPlug-Inにしてみたいし、gPhotoにも取り込んでみたいなぁ。できあがったらcontribしてみよう。その時には、gettext対応して日本語メニュー、日本語ダイアログもサポートするつもりだ。

ソースはgkdcpi-0.2.tar.gzね。automake対応だから、展開して単に make とするだけでできると思う。GTK+-1.0.0以降、できれば1.0.6を推奨する。今のところ日本語は使っていないから、wc patchは必要ないけど、そのうちgettext化するから日本語化GTKのほうがお薦めかな。

赤帽 5.xを使っている人むけに gkdcpi-0.2-2.src.rpmパッケージ置き場に置いておいた。

5/8/99追記

GTK+-1.2.x に対応させたものに差し替えた。(実はだいぶ前に(笑))

dhcp支援ツール ふみえでぃ

本来、Linuxを使うなら、特にサーバとして動作させるならスタティックなipアドレスを割り振り、ホスト名もまっとうなものを付けてDNSで引ける(せめてローカルな環境だけでも)ようにするのが筋だとは思うが、中にはDHCPでアドレスをもらい、/etc/hostsをその都度書き換えて使っているような人もいると思う。

必ずしも、ftpやtelnetなどのサーバとして使うつもりはなくても、ノートPCであったり、XでDISPLAYを他のマシンに飛ばしたかったりすると、どうしてもそういう要求が出てくると思う。そこで、Windows主体のNetworkの中でLinuxを使っててスタティックなipアドレスなんてもらえないよ〜(情シが理解がなくてよ〜)、という場合の救済ツールを書いてみた。

名前はfumiedという。エディタの仲間じゃないよ。これは「ふみえでぃー」と読む。踏み絵デーモンなのだ(笑) 隠れキリシタンのように、会社でLinuxをコソッと使っている人のためのツールなのだ。踏み絵ってのは隠れキリシタンの弾圧のために用いられた政策であるから、この場合は意味的には正反対なのだが(笑)

fumiedは、dhcpdとdhcpcdのソースをハックし、2つを合わせて4096で割ったような感じで作った。普通は、コネクションレスなudpを使ってはいても、サーバとしての動作、クライアントとしての動作というように、厳密には役割が決まっているもので、DHCPの場合は、dhcpdがDHCPサーバ、dhcpcdがDHCPクライアント、というように実行ファイルは別々だし、作った人も全然別な人なのだが、fumiedでは同じくudpを使っているとはいうものの、DHCPよりも、もっとずっとず〜っといいかげんで簡単なことしかしていないので、1つの実行ファイルにまとめてしまった。

fumiedの動作の流れは、起動するとまずクライアントとして動作し、それが終るとdaemonとなるようになっている。以下、簡単に書くと

と、こんな感じだ。

ブロードキャストしても相手が見付からなかった場合に、とりあえず自分のipアドレスだけ/etc/hostsに反映するようにしてあるので、DHCPを利用しているために常に/etc/hostsの書き換えが必要だ、というような状況なら、単体で使ってもそれなりに役に立つと思う。

ソースはコレね。パッケージにはなってない。自分でmakeして使うべし。より詳しい使い方はこっちに書いておいた。オレ自身使ってるしね。

ここから9/22/98追記

/etc/hostsを書き換えるためだけにroot権限が必要なわけで、hostsをホームディレクトリに書き出すなら一般ユーザでも動かすことができるはずだ。中には、DHCPでアドレスをもらう側は自分の管理するPCだが、通信相手となるもう一方のfumiedをroot権限をもっていないマシンで動かしたい、なんて場合もあるかも知れぬ。

というワケでちょっと改造して、rootで起動した場合は/etc/hostsを書き換え、一般ユーザで起動した場合は ~/hosts に書き出す、というようにしてみた。内部で判定して勝手に切り替えるので、何も考えずに起動するだけで、rootでも一般ユーザでも動く。

一般ユーザで起動した場合は、常にホスト名と現在のipアドレスが対応したものが~/hostsに書かれていると見なして、さらに別のscriptなどで利用すると良いと思う。

ここから1/22/99追記

おぉ、ちょうど4ヶ月ぶりか。思えば遠くへ来たもんだ(なんなの?)

もとい。fumied は kernel 2.2 では動作しない。だもんで、微修正して kernel 2.2 用の踏み絵でぃ、fumied2 (そのまんまや) を作ってみた。ソースはコレね。使い方は従来通り。あ、あと従来の fumied は kernel 2.0系専用ということでちょっとだけバグフィックスしてまた置きなおした。で、変更点としては、fumield, fumied2 ともroot以外では動かないように戻したんでよろしく。

とかいってるそばからちょっと問題が。すまん。timeoutの処理がちょっとアレで、timeoutするまでエラく時間が掛ってしまうようになっていた。単独で、しかもブート時に動かしてたりすると、Login プロンプトが出るまでにエラく時間が(5分とか(汗))かかっていたので修正した。

ここから5/8/99追記

ずっとこのページもメンテもせずにほったらかしになっていたが、フと気がつくと踏み絵も kernel 2.0 用、kernel 2.2 用と揃い、しまいにゃパッケージにまでしてしまった(笑) このあたりでパッケージ版の踏み絵を使う場合の注意点を書いておくことにする。

まず、そもそも踏み絵は DHCP 3.0 とかその手の新しいヤツが出てきて、使わなくても済むようになるまでの繋ぎ的なものだということをわかって使ってほしい。

また、その性質上、ネットワークの起動・停止に同期して動作する必要があるために、init script に手を入れて、踏み絵の起動・停止の処理を追加してやらねばならない(つまり危険をともなうのよ)。

パッケージ置き場に転がしてある踏み絵のパッケージでは、RedHat 5.2 および RedHat 6.0 のネットワーク起動・停止スクリプトに合わせて、それらの処理を追加するような手段が講じてあるが、これとて万全ではない(どころか例によってバータリー極まるものだ)。

RedHat 5.2 では基本的には dhcpcd-0.7x を使っていることと思う。kernel 2.2.x に上げた人は dhcpcd-1.3x を使っているかも知れぬ。いずれにしろ、/etc/sysconfig/network-scripts/ifdhcpc-done があるので、ifdhcpcd-done に踏み絵に必要な処理をインストール時には追加し、アンインストール時には削除している。同様に /sbin/ifup にも処理を施している。

RedHat 6.0 の場合は dhcpcd はもはや使わず、BOOTP と DHCP の共通クライアントとして pump を使っているので linitscripts の内容が異なり ifdhcpcd-done は存在しない。そのため、同様の処理を /sbin/ifup と /sbin/ifdown に施すようになっている。

どちらの場合も、インストール時にスクリプトに追加する処理は、DHCP による IP アドレス取得直後を目安にしている。であるから、/sbin/ifup や /etc/sysconfig/network-scripts/ifdhcpc-done にもともと改造が入っていたりすると思わぬ場所に変な記述を追加してしまう可能性があるので注意が必要だ。

また、処理をスクリプトに追加する際に、# fumied という1行コメントを置き、それに続けて実際の処理を追加するようになっているので、アンインストール時にはそれをあてにしている。つまり、# fumied という1行を見つけ、その後に続く4行を削除する、などというバータリーな削除のしかたを躊躇なく行なうので厳重に注意してほしい。

仮に

# fumied start
hogehoge
…… いろんな処理が記述してある箇所
# fumied end

などという記述があった場合は、最初の # fumied 以下の4行、2つ目の # fumied 以下の4行をザックリ消してしまい、動かない /sbin/ifup や /sbin/ifdown に変えてしまうぞ。よくわからない場合は、initscript の類を手で書き換えず、踏み絵のパッケージに黙って任せよう。

掲示版書き込みツール dcup

日本語化したモヂラをLinuxで使っているユーザは多いと思うが、ご存知の通り、モヂラがリンクしているMotifのText Widgetはまともに日本語をハンドリングしてくれない。FORMで構成された掲示版などに書き込もうにも、コピー&ペーストしなければならないのが現状だ。ダサイねぇ。

オレなど、自分でtcupの無料掲示版を使っているにもかかわらず、サクサク書き込めないというモドカシサ。てなわけで、tcupの掲示版専用の、書き込みツールをGTK+ベースで作ってみた。その名をdcupという。最初はtcupとかそのまんまの名前だったが、tcupなんてそんなホルスタインみたいな娘はおらぬ。だもんでdcupに改名した。やっぱ、男として必要だろ、dcupは(笑)

まずはスクリーンショットを見てちょ。

dcup

固めたのはコレだ。GTK+1.2.x が必要ね。

メンテする気なんて全然なかったので、バージョン番号なぞは付けていなかったのだが、おそらく世界でオレ以外にはただ一人(笑)と思われるユーザから、Proxyに対応してくれ、との強い要望があったので対応してみた。

proxy

ついでにちょっとしたバグフィックスもして、今んとこバージョン 0.2 ということに内部(どこの?)ではなっている。わはは。

特徴:


他愛のないプログラムだが、一応はGTK+で何かを書くときに再利用できるようなパーツも含んでいる。


その他、簡単なsocketコールでnetworkにアクセスする超基本的なやりとりも含まれているので、HTTPを喋っているところをSMTPに変えればリクツではメールも投げられるし、POP3を喋らせればメールを拾ってくるようにもできる。

場当たりで小さいながらもアプリの形を為す上で必要なパートはみな入っているので、GTK+で何かカッチョイイのを書きたい人のとっかかりになれば、ゴミも本望だ。

ただ1点、念のために書いておくと、このプログラムを改造してしてし、それをしたりするのはイタズラの度が過ぎるので絶対に禁止だ。いいね。書くとまるで教唆しているようなので伏せ字にした(笑)

あ、使うときは、一緒に入ってる.gtkrcをホームに置くべし。これがないと日本語が表示されないばかりか、入力するとcore吐いてブチ落ちるからね。

2/15/99追記

なんと、世界でオレ以外には1人しか棲息が確認されていなかった dcup ユーザだが、3 人目のユーザが現われた。しかも、パッチを送ってくれたのだ。

従来の dcup では、掲示板に書き込む際に、メールアドレスを省略することができないというバグがあり、メールアドレス欄を空白にする、または @ を含まない文字列を書いた場合は正しく書き込めていなかったのだが、送ってもらったパッチをあてることで、その両者に対応するようになった。

メールアドレスを省略した場合は黙ってメールアドレスなしで送信され、@ のない文字列を入力して送信しようとすると「不正なアドレスです」などと送信を拒否するように修正されている。バージョンは少し上がって 0.3tyo になった。(taku は別名 ちょ というので hacked by Tyo の意味を込めて)

ありがとう!> taku

感謝してリンクを張らせてもらうことにする。taku のページはここです。Linuxに入門したばかりだそうだが、なかなかにして有用な試行錯誤の過程なども置いてあるのでぜひ見てあげてください。

5/8/99追記

T-CUP の掲示板ってば、しょっちゅうアクセス不可になるわ、掲示板の内容をまるまる消されちゃうわ、ログは残せないわで、そろそろ捨て時かなぁと思っているところに、Rubist のsho さん|多田@S.P.Cさんが ruby で書かれたRuBBSという掲示板ソフトを公開してくださったのだ!

これは使うしかあるまいて(にやり)というわけで、さっそく_tom_ さん吉田さんの協力を得て設置したのが真・コンダラ掲示板だっ(笑) わはは。すまん。吉田さんには公式コンダラ鯖にホスティングさせて頂くなど、もう紀香うれしい(はぁと)ってくらいゴイスなサポートをしてもらっている。

というわけで、DCUP も上記の真・コンダラ掲示板に対応させたので、新たにパッケージしなおしたものをパッケージ置き場に置いておく。とはいえ、すべての RuBBS に対応しているわけではないのであしからず。

あ、それと、オレは GUI なんか使わないんぢゃコラ! という辛口なあなたに(笑) jed と ruby がインストールされていれば掲示板に書き込める真・DCUPも置いておくね。S-Lang と Ruby で書かれているのだ。中身は超バータリーだが(爆)

S-Lang なコレを /usr/lib/jed/lib とかに置き、Ruby なコレを ~/bin にでも置いて、chmod +x しておこう。でもって、設定ファイルのコレを ~/.dcuprc としてコピーしておく。実際には ~/.dcuprc は GTK+ 版の dcup と共用なので、すでに GTK+ 版を使っている場合は持っていく必要はないので注意ね。

最後に ~/.jedrc のどこか後ろのほうにでも

() = evalfile("dcup");

などと書いておく。あ、SKK を使っていない人はエラーが出ちゃうかも(汗) ま、これで準備完了だ。jed を起動して、M-x dcup してみよう。jed の中に、それらしい表示が出たかな? 1行目にカーソルを置いて TAB を押すと、~/.dcuprc に書いてある掲示板のエントリが次々に表示されていき、選ぶことができる。送信は C-s で、書き込み内容の消去は C-c だ。

あ、dcup.rb は単なる shell script 級の力ずくで上から下へ超特急なので、まったくオブジェクト指向してないから読んでもムダだよ、念のため(爆)

以下は obsolete だ。すまん。ちょっとばかりヒマと熱意が…(汗) そのうち再開する予定。

Muttscape Messenger (Netscape社の人、すまん(笑))

普段はmuttというCUIなMailerを愛用している。スレッドによるソートも早く正確だし、軽くサクサク動くし、マウスが使えたらもっといいのになぁ、と思う程度でほとんど文句はない。スクリーン・ショットはこれね。S-Langという画面制御ライブラリを使用して動作するのが標準仕様だ。日本語への対応がS-Langとともに進められている関係で、日本語を使おうとするとS-Lang抜きでは面白くないのだが、一応はS-Langではなくncursesなどを使ってmakeすることもできるようになっている。

開発途中版を人柱として使っているうちに内部的な構造も少しずつ理解が進んできたのだが、このmuttというMailerは実によく書けていて、メールやフォルダ(といっても結局はファイルとディレクトリだ)を操作するMailerとしてのキモな部分に対して、キー入力を拾ったりメールの内容を表示したりというデバイスに依存する部分が抽象化されて疎結合になっているんだよね。う〜ん、勉強になるなぁ(笑)

だもんで、調子に乗ってMailerとしてのmuttのコアの部分だけを使って、それに適当にデッチ上げたGTK+のGUIを乗っけて見た。それが Muttscape Messenger だ(大笑い)

まずはスクリーン・ショットを見てほしい。そう。コンセプト的にはほとんどNetscapeのパクリのようになってしまった。だが実際にはすっげく手を抜いていて、なにしろアイコンはGTK+のライブラリに含まれるチュートリアル兼テストプログラムのtestgtkから持ってきたものだし(だからどのボタンも全部フォルダ(笑))、スレッドを繋ぐ線に至っては全角の罫線だし、未読のメールが格納されているフォルダにはビックリマークが2つ頭に付いてそれを表しているというザマだ。わはは。

ちょっとだけ凝ったのはツール・バーで、意味もなくドッカブルにしてみたぞ。ツール・バーを切り離すとこんな感じになるのだ。ちょっとカッコイイでしょ?

だが、このMuttscape Messengerを試しに使おうにも、なかなか大変なのだ。

で、現状での制限事項なのだが、これがも〜ありまくり(笑) というかできることのほうが少なくて、今あるメールをただ読むことしかできないぞ。しかもMaildir形式のフォルダしか扱えないし、ナリはGUIだが、あくまでもmuttなので、~/.muttrcがないと動きもしない。逆に言うならmuttでMaildir形式のフォルダを現時点で使っている人は、なんの設定も前準備もなしに make さえ通れば動く。まぁそれが本当のネライなのではあるが。

TODOリストはこんな感じで考えている。

とにかく、GTK+がインストールされている環境で、muttのソースにパッチをあてるだけで、configure、make1発でGUI化しちゃう、というところがミソなので、機能そのものはゴミ同然なのだ。わははは。すまん。



メール 戻る