さるぅん プロジェクト

ここは私の作った Free Software の置き場です。 私の作り上げる Free Software は さるぅん プロジェクト(Saroon Project) の一貫として、 GPL に基づいて公開されています。

さるぅん プロジェクト(Saroon Project)とはなにか?

お詫び

ここで公開しているソフトの多くは

はずです。 しかもインストーラーの類いがほとんどといっていいほどない。

実行バイナリだけのファイルや、 zip などでまとめたファイルはないのか? という質問があり得るかと思うので予め言っておきます。

すまん!

ディスクスペースの関係で、様々なフォーマットや、 実行バイナリだけのファイルを用意できる状態にない。 また、Zip を伸長するソフトは持っているが、 圧縮するソフトは私は持っていないし、 WinZip のようにお金がかかるソフトをこれだけのために買うつもりもない。

Windows 用の bzip2 は Cygwin というツール群の中に入っています。 これを使ってください。 ここには tar も存在していますので bzip2 をほどいた後、 tar を展開するためにもつかえます。

Machintosh 用には Easy-Bz というツールがあるそうです。 ただ、私自身は Machintosh を使わない人なので、 詳しいことは判りません。

OS/2 用には OS/2 util archiver から手繰れるところにあるそうです。

インストーラーがないのは、 私のプログラム自身はそのようなものを必要としないからです。 適当に PATH の通っているところに置いてくれれば動くでしょう。 また、それでは済まない場合は、Readme などに使い方が書いてあるはずです。 でも、時々忘れて、慌ててソフトの説明のところに書くかも知れません。

ここにあるソフトは全て、無保証です。 これらのソフトウェアを実行する、 あるいは実行できないことによって生じたいかなる損害も 当方は一切関知致しません。 ご自分の責任において利用してください。 その判断材料とするために、ここにあるソフトウェアは全てソースを公開し、 自分で自由に変更し、re-compile する権限をみなさんに提供しています。

また、ここにあるソフトを誰かが実行したことにより、 生じた一切の問題を当方は関知しません。 金槌は建築道具として極めて有能である一方、 凶器としても極めて有能です。 だからといって金槌にも、金槌の作成者にも一切罪が問われないのと同様、 ソフトウェアの作者もその利用者の行動に対する 連帯責任を問われるいわれはありません。

あなたはここにある全てのソフトウェアを GPL に従って、自由に変更し、再配布する権利を持ちます。 ただし、 GPL にある通り、それらのソフトウェアも GPL の制約を受けなくてはいけません。 すなわち、あなたの変更した部分も、 ソースコードを公開し、自由な変更を認めなくてはいけません。

現在のところ公開している、さるぅん なソフト一覧

Performance Monitor 関連ツール

Windows 2000 以降で標準装備されている、 Performance Monitor の取得データ … 正確にはそれを relog.exe で TSV 形式に変換したデータを操作する スクリプトをまとめています。

Palm/WorkPad 関連

3Com/Palm Computing 社が出している Palm 並びに、 その IBM の OEM である WorkPad に関連したソフトである。

なんか…デバッグツールばっかりだ。

Real Time Clock State reporter

update:2000/01/16
Stateus Register の値を参照するルーチンに問題があったのを 直した(参照するつもりで書き込んでいたとは…)。
かなり書き直した。
ChipSelectUnit の内部状態を参照するルーチンを追加した。 これを適切に制御すれば「書き込み禁止」領域に対する書き込み制御が 自在にできるようになるはずだ。 そのための調査用のルーチンである。
あと、正規の Creator ID を獲得した。

update:1999/10/08
Dragonball 機種の場合、Interrupt Controller のレジスター値を 表示していなかったのを直した。

update:1999/10/07
Interrupt Controller のレジスターも参照できるようにした。

update:1999/10/06
CPU State register も参照できるようにした。

Palm/WorkPad はモトローラ社が出している Dragonball/EZ Dragonball という MC68000 ベースの cpu チップセットを使って作られています。 このチップセットには Realt Time Clock unit というものがついており、 時刻の管理や時刻に基づく割り込みの起動を行っています。 このソフトはこの Real Time Clock unit の register を読み出して、 報告してくれるソフトです。

Palm 用のソフトの常として、prc ファイルが1つ存在しますので、 これをインストールすれば出来上がりです。 あとは、適当なタイミングでアイコンを Tap したり、 動けと頼んだ覚えがないのに勝手に動いたりして、 記録をとってくれます。

とった記録は RTC-log という名前の database に保存されていますので、 pilot-xfer ( for windows ) などを使って RTC-log.pdb というファイルに引きずり出し、 pdb ファイルヘッダーを切り捨てると、 めでたくlog になります。 詳細は、 Dragonball 資料の場所 Dragonball/EZ 資料の場所 にある Dragonbal 関連のドキュメントを見つつ、 付属の readme を読むこと。

split.perl

これは、perl のスクリプトですので、perl5 を必要とします。 また、実行には先頭行の書き直しを必要とする環境がほとんどでしょう。 どのように書き直すと適切なのかは、各々の環境によって異なります。 適切な解説書をお読みください。

Palm と data をやり取りする際に使う prc/pdb ファイルというものを、 record 単位に分解するスクリプトです。 前は apart-pdb.perl という名前でしたが、prc ファイルも処理できるように なったので名前を変更しました。

使い方は

     split.perl <pdbfile> <expansion directory name>
    

です。

pdbfile には展開したい prc/pdb ファイル名を与えてください。

expansion directory name にはディレクトリ名を与えます。 存在しないディレクトリ名は与えないでください。 また、この引数を与えないと current directory を指定されたと見なします。 指定されたディレクトリに、 0.rec, 1.rec ... のように record データを展開したファイルを作成します。

処理に伴って、stdout に Database の情報を出力します。 必要に応じてリダイレクトしてファイルに書き込んでください。

PDBHeaderPealer.perl

update:2000/02/13
データ部を出力するためのループがちゃんと回ってない気がするので 書き直した。変だなぁ…前のでもいいと思ってたんだが…。

update:2000/02/10
Version を RCS で制御させるように変更したら 実はその行がちゃんと ; で終わってなかった。きゅー。 こんな理由で revesion が進むなんてぇ…(///)。

update:2000/02/08
Verbose/Silent モードを削った。 作ってみたら Verbose もへったくれもないんだもの。

これは perl のスクリプトですので perl5 を必要とします。 また、実行には先頭行の書き直しを必要とする環境がほとんどでしょう。 どのように書き直すと適切なのかは、各々の環境によって異なります。 適切な解説書をお読みください。

Palm と data をやり取りする際に使う pdb ファイルから、 pdb 管理ヘッダーを取り除くためのスクリプトです。 prc ファイルであっても正常に動作する…ように見えているんだけどなぁ…。

利用方法などの技術的詳細に関しては WorkPad 用プログラムの組み方(4) を読んでください。 ただし、ここの内容を理解するには、 ドキュメント 全般を読む必要があるかも知れません。

     PDBHeaderPealer.perl --help
    

と叩くと help が出てきますので、 オプション等に関してはそちらを見てください。

PDBHeaderAttacher.perl

これは perl のスクリプトですので perl5 を必要とします。 また、実行には先頭行の書き直しを必要とする環境がほとんどでしょう。 どのように書き直すと適切なのかは、各々の環境によって異なります。 適切な解説書をお読みください。

通常のファイルに pdb header をつけて、 Palm デバイスに load できる pdb ファイルにしたイメージを、 標準出力から出力します。 その際に必要に応じて複数の record に分割します。

利用方法などの技術的詳細に関しては WorkPad 用プログラムの組み方(4) を読んでください。 ただし、ここの内容を理解するには、 ドキュメント 全般を読む必要があるかも知れません。

     PDBHeaderAttacher.perl --help
    

と叩くと help が出てきますので、 オプション等に関してはそちらを見てください。

Windows/unix 関連

unix や Windows などにおいて、 共通して使えるシェルスクリプトなど。

unique.sh compare.perl

これは2つで1セットのスクリプトです。 unique.sh は bash script、 compare.perl は perl5 のスクリプトで、 sh, cksum, cmp など、unix では標準的なコマンドを使って、
「指定されたディレクトリ(複数)に存在する重複したファイルを発見し、 後に発見されたものを消去する」
という作業をします。

どちらのファイルも、共に最初の行を正しく設定する必要があります。 これはシェルスクリプトにおける一般的な指定法ですので、 ここでは特に説明しません。 bash, csh, sh などの説明書、説明本を読んでください。

まず、unique.sh から説明します。

     unique.sh [option] <directory> [[option] <directory> ....]
     or
     unique.sh -table <table file> <table directory>
    

unique.sh は指定されたディレクトリに存在するファイルの一覧を作り、 そのファイル名、ファイルサイズ、CRC の値を出力します。

unique.sh は option が4種類あります。 たとえば、本 index.html の存在するディレクトリで

     unique.sh -table .
    

を実行すると、

     t 318922797 2782 ./apart-pdb.perl.bz2
     t 2645434625 49064 ./RTCState.00.04.tar.bz2
     t 186838288 8272 ./WhatIsSaroonProject.html
     t 654095203 8916 ./index.html
     t 382891518 372 ./unique.sh.bz2
     t 2842233573 645 ./compare.perl.bz2
    

が得られます。 左から順番に、type, CRC, filesize, filename の順で、 1行1ファイルづつリストされます。

オプションは一旦していされると(あるいは一切指定されない場合)、 次にオプションを指定するまで、 そのオプションが指定され続けた状態と同等になります。 つまり

      unique.sh -single /afo /bfo /cfo -const /dfo
    

という指定の場合、 /afo, /bfo, /cfo には -single オプションが指定された状態が、 /dfo には -const オプションが指定された状態が、 それぞれ有効となります。

オプションは次の通りです。

-test
指定されたディレクトリよりもしたに存在するすべてのファイルを type フィールドを 't' としながら出力します。 もし、オプションを一切指定しなかった場合、 このオプションが指定されたものとなります。
-single
type フィールドが 's' となる以外は -test と等価です。
-const
type フィールドが 'c' となる以外は -test と等価です。
-table

前の3つのオプションとは大幅に異ります。

-table は2つの引数、table file と table directory をとります。

table file はファイル名です。 -table は指定されたファイルの中身を、 基本的には cat します。 このファイルの中身は unique.sh 自身が吐いた内容を、 そのままファイルに書き出しているものと仮定しています。

table directory は directory 名です。 各行のファイル名の先頭に、指定された table directory 名をつけた結果を、 出力します。 たとえば、MO に入っているファイルについて予め

      unique.sh -const ./ > table
     

を実行して table というファイルを作ったとします。結果は

      c 318922797 2782 ./apart-pdb.perl.bz2
      c 2645434625 49064 ./RTCState.00.04.tar.bz2
     

となったとしましょう。 この MO のドライブが //d/ である場合、

      unique.sh -table //d/table //d
     

を実行すると、

      c 318922797 2782 //d/./apart-pdb.perl.bz2
      c 2645434625 49064 //d/./RTCState.00.04.tar.bz2
      

という出力が得られます。

-table は CD-ROM や MO など、過去に保存した、 重複がないと判っているファイルを処理する場合に使います。 CRC を計算するためにはそのファイル全体をスキャンする必要がありますが、 これは実行時間がかかる一方、 CRC の値はファイル内容が変らない限り変化することはありません。 そこで、予めファイルの一覧を作っておき、 -table オプションを使ってそのファイルの内容をそのまま利用することが できるようになります。

compare.perl は unique.sh の出力結果を使って、ファイルを比較します。

基本的には、unique.sh の出力結果から、 各ファイルのファイルサイズと、CRC を比較し、 両方とも同じ場合はその2つのファイルが同じである可能性がある、 として cmp を実行します。 cmp はエラーがなく、ファイルが同じ内容の場合は 0 を返しますので、 この場合は、

     rm <一覧上であとに出てきたファイル>
    

という出力を出します。 これを sh にリダイレクトすると重複しているファイルが消去されます。

compare.perl の動きは、 unique.sh が発行したファイルの一番最初のフィールド、 type 領域によって挙動が微妙に違います。

t
すでに登録されているファイルと与えられたファイルを比較します。 もし、CRC, filesize が同一であるファイルがあれば cmp を実行し、 同一であると判れば rm 行を発行します。 もし、同一ではないと判った場合、 compare.perl が管理している内部のファイルテーブルに そのファイル名、CRC、ファイルサイズなどを登録します。
c
他のファイルと比較しないで、 単に compare.perl が管理している内部のファイルテーブルに そのファイル名、CRC、ファイルサイズなどの情報を登録します。
s
すでに登録されているファイルと比較します。 もし、同一と思しきファイルがあれば cmp を実行し、 同一であると判れば rm 行を発行します。 もし、同一ではないと判っても登録は行いません。

もっとも標準的な使い方は

     unique.sh -table ./ | compare.perl | sh
    

のようなものです。 unique.sh は現在のディレクトリ以下のファイルについて一覧を作り、 compare.perl でファイルを比較し、 同一のファイルについては sh を実行します。

Windows 上で動く cygwin と bash.exe の場合、 パイプは unix の場合ほど堅牢ではありません。 大量の出力があるとパンクしてしまいます。 これは主にタスクスイッチが適切に行われないのが原因であり、 Windows98, WindowsNT, Windows2000 の区別なく発生します。 この場合は、

     unique.sh -table ./ > res1; compare.perl res1 > res2; sh res2
    

のように一時ファイルを使ってください。 実行時間は20倍ほどかかることになりますが、 正常に実行を完了することができるでしょう。 また、これは Windows の弱点を最も典型的に示していますので、 これが問題であると感じる場合、 あなたは unix を使う十分な理由がある、とも言えます。

lookfor_k.bc

これは Fermat数 の素因数を探すためのプログラムです。 GNU の bc というプログラム用のスクリプトです。 bc は FreeBSD や Linux など、 大抵の unix ではデフォルトで存在するか、 あるいは存在しなくてもコンパイル可能なはずです。 Cygwin を使えば(若干テキスト出力がおかしい場合があるものの) Windows 上でも実行できるものがコンパイル可能です。

このファイルの行頭にある通り、

     bc -l lookfor_k.bc
    

のように起動します。 あるいは、1行目を適切に設定して、 bc の存在するところを絶対パスで指定し ( -l をオプションとしてつけるのも忘れない)、 chmod +x を実行してやれば、

     ./lookfor_k.bc
    

だけでも起動できるでしょう。

探索方法は基本的に「力業」とか「Brout Force」と言われるものです。 F(n) の n の範囲と k*2n+2+1 の k の値を指定し、 あとはひたすら探し続けます。 ですので、決して早くありません。

n の範囲の指定をするには、 nstart と、 nend という変数に値を指定します。 すると、

     nstart <= n <= nend
    

の範囲について、検索してくれます。 同様に、 kstart kend を設定することで、

     kstart <= k <= kend
    

の範囲について、検索してくれます。 n だの k だのについては Fermat数 を参照してください。

見ての通り、何も特別なことはしていません。 あるとしても、 2m % x を、 2m を全部は求めずに処理するところぐらいなものです。 k が小さく、 n が 100 以内であれば、これで十分でしょう。 ただし、n が大きくなっていくと見る見る内に実行時間が延びていきます。 大きな n について試す場合は、 速い計算機を長時間使うことを覚悟しましょう。

signal-core.sh

unixにおいて、core file を作らせないようにするために、 意図的に sigaction が設定してあるプログラム、 と言うのは製品モノにはよくあります。 しかし、そういう代物が SIGSEGV だの SIGABRT だのでこける事があるのもまた事実。 その場合に core ファイルも無ければ abort() メッセージも貧相で 障害究明に著しく困る…と言うことがあります。

このスクリプトは gdb を使ってそういうプロセスをとっつかまえ、 所定のシグナルを受けたときに gdb の gcore コマンドを使ってコアを吐かせる、 と言うものです。

一応、1 から 15 までは対応しているはずですが…実験してません。 9 とか…できるんかいな?? つーか意味あるんかいな。

各自自分の必要な signal に応じて変更・拡張するのは容易だと思います。 と言うか、OSごとにこの辺の番号は微妙に変化するので、 ちゃんとチェックして変更・拡張しなくては駄目です。

Data Collector Template

bash の存在する環境において、いろいろな情報収集をして、 結果を tar-ball 形式にまとめるシェルスクリプトを作るためのテンプレート。

このテンプレートを元にすれば、 スクリプト書きは大幅に楽になるはず。