がらくた

Copyright (C) 1997-2004 by Haruaki TAMADA All rights reserved.
Last Modified: Mon Jan 10 11:07:30 JST 2005

がらくた置場

パッチやがらくたプログラムがあります。 全て気の向くまま、徒然なるままにつくりました。 一部の人には有用かも知れません。

ここにあるプログラムやパッチは全て 「無償・無保証・著作権放棄」です。

自己の責任において、使用・改変を行って下さい。

また、パッチに関しては「無償・無保証・著作権放棄」で公開していますが、 その対象となるソフトウェアが GPL の場合はパッチを適用したソフトウェアは GPL となりますので注意が必要です。

ページのトップへ

C 言語

tac を作ってみる

tac とは cat の逆でファイルを最後から出力するものです. オプションとして,行の文字も逆に出力することができます.

tac.c

tee に標準エラー出力オプションを加えてみる

C 言語です.一応 GNU の tee にあるオプションは付けているつもりです. また,GNU とは違い,一つのソースファイルで完結しています. ライブラリは UNIX や Linux であれば,最初から入っているものだけしか使っていないと思います.

コンパイル方法

$ cc -o tee tee.c 

で大丈夫だと思います.環境によって,cc ではなく,gcc を使って下さい.

tee.c

素数を求めるプログラム

「エラトステネスのふるい」を使い,素数を求めます. デフォルトでは 1000 までの素数ですが,プログラムの引き数に数字を指定すると その数までの素数を求めます.かなり甘々なプログラムです.見せるのも恥ずかしいくらい.

( -.-)y-o O ()

primes.c

Tab をスペースに変換する

tab をスペースに変換します.tab 幅は 0 〜 15 の間で決定できます.

ただ,作った後に思ったのですが,エディタの一括変換使えば必要無いな...と. ま,一応作ったので,使う人は使って下さい.ホントのがらくたです.

tab2space.c

HTML のタグの大文字、小文字を統一させる

HTML のタグを大文字,小文字に変換します. コメント,属性の値(<tag elem="value"> の value)は変換対象ではありません. デフォルトでは大文字から小文字への変換です.適当に使って下さい.

基本的に要素は小文字で書いた方が良いでしょう。 XHTML が小文字だから、今後 XHTML への移行を考えると小文字で書いた方が楽だからです。

tagcase.c

数値を任意の進数で表示する

プログラムを作っていると 10 進法から 16 進法に変換したい場合がある。 256 くらいまでは頭の中で変更できるが、1000 を越えるとすぐに計算できない。 このような時のためにプログラムを作ったのだが、 どうせなら各進法から各進法に変換できたら便利だろうと XP 的には危険なことを考えて実装したのがこのプログラムだ。

$ gcc -o radix radix.c

でコンパイルして下さい。

$ radix [-i base] [-o out] number
base:   入力された数値の進法(default: 10)
out:    出力される数値の進法(default: 16)
number: 変換したい数値

radix.c

干支を表示するプログラム

2002/12/08 の日記 に書いた干支表示プログラムをちょっと手直しして載せてみた。

引数に年を入れるとその年の干支を表示する。 引数に何も指定しなければ、その年の干支を表示する。

eto.c

迷路を作る

棒倒し法 を素直に実装したもの。

maze.c

ページのトップへ

Java 言語

Image I/O の PPM Reader

Java 2 SDK 1.4 に標準でついてくる Image I/O で,PPM/PGM を読み込む Plug-in を作ってみました. 使い方は Image I/O ドキュメントを読んで下さい. 一応,クラスパスにこの jar ファイルを加えるだけで使えるようにしています.

ppmreader.jar

White Space を削除する Ant タスク

White Space を削除する apache ant のタスク。 携帯サイトなど、HTML のファイルサイズを小さくする必要のある時にお使い下さい。

使い方は以下の通り。

<taskdef name="delspace"
         classname="com.oikaze.tama.ant.taskdefs.DeleteWhiteSpaceTask"
         classpathref="project.class.path"
/>
<mkdir dir="${output.dir}" />
<delspace destdir="${output.dir}"
          basedir="${src.web}"
          ignorestart="&lt;"
          ignoreend="&gt;">
  <include name="**/*.jsp" />
</delspace>

以上のタスクで ${src.web} 以下の jsp ファイルの < から > までの文字列以外は、全てホワイトスペースが削除されます。

ignorestart と ignoreend ではさまれた部分はホワイトスペースが削除されませんが、 これらに指定できるのは 1 文字だけです。

ちなみに、まだテストはしていませんし、cvs に登録もまだしていません。 それでもよければどうぞ。

delspace.tar.gz

テストして、cvs に登録して、ちょっと手直し。 そして、移動しました。ライセンスはここにあった時と同じく 「無償・無保証・著作権放棄」です。

http://oikaze.com/%7Etamada/Products/delspace/index.html

Iterator を Enumeration として扱う

Servlet などではインターフェースとして Enumeration を返す仕様となっていものもありますが、内部では List など新しいコレクションフレームワークで、データを扱っている場合が多いと思います。 その場合にこのクラスが使えるでしょう。

IteratorEnumeration.java

メソッド実行時間表示トレース文を挿入する

メソッドの実行時間を調べたい時がある。 しかし、そのような情報はリリース時には削除したい。

ならば、class ファイルに直接加えればどうだろう。 class ファイルに直接挿入することで、ソースコードの編集はいらなくなる。 Apache Ant で組み込むことができれば配布用の target にはその処理を通らないようにすれば良い。

ということで作ってみました。AddMethodPerformanceTracer。略して ampt。 よろしければお使い下さい。

ちなみに、使い方。

<taskdef name="mptracer"
         classname="com.oikaze.tama.ampt.AddMethodPerformanceTraccerTask"
         classpathref="project.class.path"
/>
<mkdir dir="${output.dir}" />
<mptracer destdir="${output.dir}"
          basedir="${class.dir}"
          lastmodified="true">
  <include name="**/*.class" />
</mptracer>

ampt.tar.gz

serialVersionUID の値を表示する Ant のタスク

java.io.Serializable を implements すると serialVersionUID が定義されていない場合は、 コンパイラが自動的に計算してクラスファイルに定義を加えてくれる。

間違ってました.serialVersionUID の説明は 「オブジェクト直列化仕様の「4.6 ストリーム固有識別子」」 で説明されています。 で,修正しました.修正したものを公開します.今までは Jakarta BCEL を使っていましたが, 新しいバージョンでは使っていません.java.io.ObjectStreamClass を使って serialVersionUID を取得するようになっています.内部の処理としては serialver コマンドとほぼ同じようにしました.

しかし、あとから調べるには serialvar を実行しなければならない。 いちいち、複数のクラスを調べるのに serialvar コマンドを実行するのは面倒臭い。 更に serialvar コマンドはクラスの完全修飾名を引数に取るため、tab が効かないのだ。 こんなのは駄目だ。ant から見えるようにしよう。

ということで作ってみました。ViewSerialVersionTask。 よろしければお使い下さい。

ちなみに、使い方。

<taskdef name="serialver"
         classname="com.oikaze.tama.ant.taskdefs.ViewSerialVersionTask"
         classpathref="project.class.path"
/>
<serialver basedir="${class.dir}">
  <include name="**/*.class" />
</serialver>

属性は basedir のみです。もし、basedir が指定されなかった場合は ant のプロジェクトディレクトリとなります。 この basedir はクラスパスの起点となるディレクトリのことです. この指定を間違うと動きませんので注意してください. 以下の jar ファイルを project.class.path の通っている場所に置いて下さい。

serialver.jar

ソースプログラム

クラスファイルの情報を出力する

クラスファイルの情報を直接みたい場合がある. javap -c では表示されないコンスタントプールであるとか, 細かな Attribute_info も見たい.適当なツールもないので,適当に作ってみた.

出力方法はプログラムをサボって,bcel に任せてる.コマンドラインオプションもなし. java -jar でクラスファイルを指定すると,情報が出力される.

classinfo.tar.gz
md5sum: 3e85afbc9452513ca9a8c1dd70904a36

ページのトップへ

パッチ

GNU tar 1.13 に bzip2 圧縮を加えるパッチ

GNU tar には標準で gzip 圧縮のオプションがついています. このパッチはそれに加えて bzip2 圧縮のオプションを加えます.

$ patch -p1 < tar-1.13-exec_bzip2.diff 

とやればパッチが適用されます.

オプションスイッチは 'j' にしています.なので,

$ tar cvfj aaa.tar.bz2 aaa bbb ccc

とすることで,tar + bzip2 アーカイブが作成できます. ただし,bzip2 が既にインストールしていることが条件です.

tar-1.13-exec_bzip2.diff

ttyrec の ttytime に見易い出力のオプションを付ける

ttyrec は tty を録画するコマンドです。 ttyrec-1.0.5 から録画データの収録時間を調べるコマンド、ttytime が追加されましたが、この ttytime、秒で表示されるので、 収録時間が長い場合、実際にどれくらいの時間なのか一見してわかりません。

なのでもっとわかり易く表示させようと手を入れました。

$ ttytime -f ttyrecord

とすれば hh:mm:ss 形式で表示されます。

ttytime.diff

ページのトップへ

Ruby

今日の Google

http://www.higuchi.ecei.tohoku.ac.jp/%7Emiyabi/diary で、 「今日の Google」として Google から飛んできた人の検索ワードを掲載していらっしゃいます。 しかし、一つ一つ調べていくのが面倒臭い。コマンド一つで「今日ぐる」を一覧で出して欲しい。

そんな時にこのコマンド。どこからどんな検索ワードでどのページにやってきたのかを一発で調べられます。 あなたも今日から「今日ぐる」。

「今日ぐる」のアイデアは 夏井 雅典 (Masanori Natsui) さんから頂きました。

UTF-8 のエンコーダを http://www.higuchi.ecei.tohoku.ac.jp/%7Emiyabi/diary/2003-02.html#2003-02-06 で教えて頂きました。

問題点

googletoday

ChangeLog から特定の日付を取り出す

ChangeLog から特定の日付の項目を取得します。 また、オプションで特定の日付を出力から削除することもできます。

clpickup

ページのトップへ