Unix系(FreeBSD/NetBSD/OpenBSD, GNU/Linux, Solaris, et al.)や、 PC-98x1(PC-9801,PC-9821) な機械の DOS や、 ATX(PC/AT) な機械の DOS などで動作するガラクタです。 ドキュメントを書くのが面倒だとか、 使う場面が凄く限定されているとか、 使う人を選ぶだとか、 そういう意味のガラクタであって、 バグがあるとか動作不良起こすとか、 そういう事ではありません。
だからといって、バグが無い事を保証・補償・保障するわけでもありませんので。
改造品やパッチのライセンスは、原作のライセンスを参照してください。
私が作成したものは、ライセンス形態を指定している物を除き、 BSD-license か GPL か LGPL か、 どれか都合の良いライセンス形態でお使いください。 利用の際はあくまで自己責任で、AS IS。
もはや ATX の DOS や PC-98x1 は必要とされない時代になってしまい、 そちら関連はメンテナンスしませんし、する気力もありません……。
RSS 2.0書いてみました。
あと、このページは 100KB超あるので、はてなアンテナは、こけます (はてなアンテナは 32KiB までしか対応していないらしい)。
本ソフトのメンテナンスは打ち切りました。
FreeBSD の portaudit より引用:
Affected package: pgp-2.6.3i_1
Type of problem: gnupg -- OpenPGP symmetric encryption vulnerability.
Reference: <http://www.FreeBSD.org/ports/portaudit/8375a73f-01bf-11da-bc08-0001020eed82.html>
CERT vulnerability note 303094
CVE name CVE-2005-0366
PGP 総本山が ver.2 系のメンテナンスを打ち切っている為、 治せませんので。そこんとこ宜しく。
DOS 汎用。
pgp 2.6.3iの MS-DOS 汎用版は、 見事に AT機のハードウェア (8253 Timer) を使用している為、 NEC PC-9801 + MS-DOS では動きません。 だから治しました。
まぁ、pgp ml を web でのぞいたら、既知の問題らしいのですが。 いくら乱数が欲しいからって言っても、MS-DOS 汎用と言いながら、 I/O port 直叩きってねぇ……。
# for AT(OADG) compatible と言っておけば問題無いのに。
DOS 汎用。
読んで字の如く、そのまんま、 テキスト形式のダンプリストをバイナリへ変換します。 当然チェックサム検査します。
昔の雑誌のダンプリストを OCR かけた後、 チェックサム検査をしながらバイナリに変換するのに使います。
何か……、ファイル全体のCRC符号も付けて欲しかったなぁ。 1行毎のチェックサムだけでは不安だ。 いや実際問題、ボロボロ OCR ミスが出て、 デバッガで追っかけをする羽目に。(;_;
Sat,06 Mar,2010 更新:
dmp2bin.cc 改訂、MZモード追加。
MZ な(旧SOFTBANK社の Oh!シリーズな?)
水平チェックサム/垂直チェックサムに対応。
MZモード時は、「SUM 」で始まる行は垂直チェックサムとみなします。
実行ファイルは LSI-C86 で生成
(コンパイラオプションに -D__MSDOS__ オプションを追加)。
DMPUTYS .LZH 32813 00-02-12 12:27
DMPUTY .LZH 36750 00-02-12 12:31
dmp2bin.ccTue,06 Apr,2010 (16KiB)
DMP2BIN.EXETue,06 Apr,2010 (21KiB)
DOS 汎用。
各種エミュレータ、 P88SR(PC-8801mk2SR) や T98 / T98-NEXT(PC-98x1 series) などで使われている ディスクファイル形式 D88 のうち、 N88-DiskBASIC / N88-DiskBASIC(86) フォーマットの ディスクの中身を、 一覧、吸い出し、書き込み、リネーム、削除、属性変更、 クリーンアップ、チェックディスク、 セクタ読み出し、セクタ書き込み、 します。 削除ファイル復活も出来ますが、完全手動操作の為、 それなりの技量が必要です。
dmp2bin が完成してすぐに作り始めた事を考えると、 何をしたのか、ばればれかもしれない。
でも、必要とする様な人は、こんな弱小ほめぱげ、 見てないだろうなぁ。
# 完成してから気付いたけれど、これってば、 ごく小さな Disk Operating System そのもの、なんでは。
## 2004/05 追記: T98-NEXT で D88 が使われている事を知らなかった人。
DOS 汎用。
プレステの実機のメモリーカードや擬似メモリーカードの、 一覧、読み、書き、削除、フォーマット、アンデリート、相互転送、 などを行います。 本物のメモリーカードを扱う場合は、専用インターフェースが 必要です。
DOS 用 PSX memory card reader/writer である PSM(総本山不明)と、 MS-Win 用の WinPSM(総本山不明)で、 使用する回路が異なり、 しかも某秋月で販売もしている WinPSM 用の回路に 気に食わない点が有ったので、 DOS 用 PSM をベースに、 ハード/ソフト共に、自分で製作した物です。
取り敢えずは、WinPSM 用ハードも使用出来る様になっています。 しかも PC-9801/9821 と AT 互換機両用です。
PlayStation Emulator で扱っている、 Plane Image の MemoryCard DataFile にも対応させました。
これで、 メモリーカードへの書き込み中に通信エラーで チェックデジット吹き飛ばしてアクセス拒否されたり(実話)、 メモリーカードの中の半田が剥がれて使用不可になったり(実話)、 Flash-EEPROM の寿命が来てデータがお亡くなりになったり (メモリーカードでは無いけれど、Compat Flash で実際に起きた)、 しても大丈夫。
で、読み出したデータファイルを、 てきとーに、ちょちょい〜と、バイナリエディットして、 書き戻してやれば、 Ace Combat 3 のプレミアムディスク無しでナイトレーベン(だっけ?)を使えたり、 初代 Armored Core 無しで Master of Arena で強化人間になったり、 出来ます。
って、いまどきやろうとする人が居るとは思えない(自爆)。
ANSI C 互換なら FreeBSD / OpenBSD / GNU/Linux / Solaris / MS-DOS / MS-Windows 何でもおっけー。 同封バイナリは MS-DOS 汎用。
極単純なデータ改竄検査用の値を計算します。
4/2/1 octet 単位の積算と XOR だけしか対応していません。
かなり昔に、ANSI 方式 / CCITT 方式の 右/左ローテート CRC16 / CRC32 算出プログラムも作りましたが、 AX.25 関連でしか使いませんでしたので、これには含んでいません。
まぁ結局、PlayStation のセーブデータレベルでは、 積算か XOR の検査程度で済んでしまう、と言うだけなのですが。
PC-9801/9821 の実機の DOS 専用。
音源内蔵の 98 に、 さらにもう1枚 C-BUS 音源(26音源)を搭載した状態で、 Joystick のみ C-BUS 音源を使用し、 音は内蔵音源から出す、 為のドライバ。
音源2枚差しドライバ、とも言う。
おまけ機能として、音源入れ替え機能、音源隠し機能、 とどめは、 内蔵と C-BUS の両方の音源から同じ音を出す音源複写機能、 付き(笑)。
某 Bio_100% の某 Dynamo が音源回りで不安定 (一部の26互換音源でこけるとか、86音源を認識しないとか) だったのを改造して治した際の副産物でもあり、 音源は内蔵しているけれど Joystick ポートが無い 98Multi で Joystick を使いたかった為でもあり。 でも Joystick を持っていなかったり。
# web で検索してみると、 件の Bio_100% の Dynamo で音源でこけている人がいる様ですが、 今更、拙作の対応パッチなんて公開しても使わないですよね……。
PC-9821/98Multi の実機専用。
私の使用している PC-9821Cs2 は、9821 のくせに、 何故か GRPH+2 による、V-SYNC の 31kHz への切り換えが 使用出来無い (GRPH+1 による 24kHz への切り換えは出来るのだけれど)。
そこで、意地で、V-SYNC の設定を切り替えるプログラムを 作ってしまいました。
設定は記録されますので、一度設定すれば、 ITL もリセットしても FD ベースでも NetBSD(98) でも、 31kHz で表示されます。
HSB の WI IGDC:31 や WI IGDC:24 でも切り替えられますが、 その場合は COLD-BOOT すると 強制的に 24kHz に戻されてしまいますし、 そもそも MS-DOS でしか切り替えできません。
本プログラムで 24kHz に設定するなり、 電源投入時/リセット時に GRPH+1 とか GRPH+2 とかすると、 元に戻ります。
元々は PC-9821 Cs 専用に作りましたが、 web で聞いた噂では、 PC-9821 Multi (21 C series) 全般で使える、 と言う噂もあります(未確認)。
本ソフトのメンテナンスは打ち切りました。
Sun,24 Sep,2006 : LHA の unlzh.c にバグ(スタックオーバー/アンダーフロー?)が 見つかったとか何とか言う情報が出ています。 詳細不明。
DOS 汎用。
PC-98x1 や PC/AT 互換機,OADG 準拠機などの、 MS-DOS, DOS/V, PC-DOS/V 上から、
が出来ます。
LHA114IM.LZH 74951 01-11-29 23:10
参考、引用元
本ソフトのメンテナンスは打ち切りました。
SocketA 系列で MBM を使っている人専用。
AMD Athlon 系 CPU 用のソフトウェアクーラー(Software Cooler) FVCool や CoolON を、 純粋 MS-DOS や、 マルチブートマネージャー MBM の拡張メニューに組み込める様に、 移植したものです。
もっとも、純粋 MS-DOS では hlt を発行せず、 常にフルパワーで動作する仕様になっているので、 全く意味が無いでしょう(^^;。 単に、MBM 拡張メニュー用の下敷きに作っただけです。
MBM - Multiple Boot Manager の拡張メニューに、 本アーカイブ内の mvcool.mbm を組み込めば、 対応ソフトウェアクーラーの無い OS でも、 ソフトウェアクーラーが有効になります。 と言っても、CoolON は MS-Win 用で、 FVCool は *BSD/Linux 用なので、 主要な OS はカバー出来ている様な気もしますが。
*BSD/Linux は適当に設定すれば適当に FVCool を動かせますが、 MS-Windows NT 系(2000 とか XP とか)では CoolON を動かすのにいちいち Administrator パスワードを入力するのが面倒です。 MBM 拡張メニューに入れ込んでしまえば、 起動時に適当に設定してくれるので便利です。
なお、本 MBM 拡張メニュー組み込み用は、 MBM 原作者 ELM 氏の MKM によるグラフィカルな拡張メニューとは 排他使用になります。 MKM の組み込みサイズ制限に収まらなかったので。
MVCOOL .LZH 11962 03-06-15 03:56
参考、引用元
CoolON Project(SoftwareCooler on MS-Win)
MotherBoard Monitor & SoftwareCooler for FreeBSD(and Linux)
いわゆる DOS/V コンパチ機汎用。
mbm038mod.lzh (8KiB)(Mon,10 Jul,2006)
mbm039mod.lzh (9KiB)(Sun,29 May,2011)
mbm039disasm.lzh(89KiB)(Sun,29 May,2011)
原作: ELM - Multiple Boot Manager
ELM氏作の MBM - Multiple Boot Manager を愛用しているのですが、 MBM は、 起動時に Activeフラグを操作するために MBR を書き戻す、 何か操作をするたびに環境設定を MBR に書き戻す、 と言う仕様になっています。
が、しかし。 BIOS で MBR の書き込み制限を有効にしている場合や、 コンパクトフラッシュや USB メモリなどの フラッシュメモリ系で運用している場合、 この「毎回毎回書き戻す」と言う仕様では、 毎回毎回ウォーニングが出てうるさかったり、 寿命に悪影響を与えたり、 困った事になります。
ので、起動時の書き戻しと、 設定変更時の書き戻しを、 行わない様に改造しました。 デフォルト起動の変更時のみ、 (他の変更も一緒に)保存を行います。
当然ながら、 アクティブフラグが設定されていないと起動できない腐れOSが 起動できなくなる、 MBM のマスクモードを使ってだまくらかさないと起動できないタコOSが 起動できなくなる、 と言う、 そもそもの MBM の高機能化を否定しかねない副作用があります。
裏事情。 職場のGNU/Linux派に 「作業/試験兼用機(別の機体にわける様な予算は無い)の 起動モードの切り替えするのに、ブートローダーどうする?」 と相談したら、 「lilo 使え。それがいやなら grub。それ以外は認めない。」 と言われ。 職場のMS-Windows派に相談したら、 「ブートローダー?、何それ。MS-Windows なら、そんなもの要らないよ。」 と言われ。 結局ブチキレて独断で勝手に改造版 MBM に入れ替えたと言う……。
一発芸ネタパッチの為、メンテナンスしません。
nest_top.tex(1KiB) 親の方
nest_int.tex(1KiB) 子の方
pLaTeX にて、ソースを親と子に分割した場合に、 親から子を \input{} / \include{} した場合でも、 子のみ単独の場合でも、 どちらでもコンパイルできる様にするマクロ。
職場の後輩 T 氏にけしかけられて、 おもわず、1日だか2日だか潰して書いてしまったが、 誰も使わなかったと言う代物。
FreeBSD とか NetBSD とか OpenBSD とか GNU/Linux とか SunOS とか Solaris とか cygwin とか MinGW とか。
xjdic24.patch4.gz(4KiB)
オリジナルの xjdic では、 辞書ファイル名が 80 文字を越えたり、 辞書データ1件が 256 バイトとか 512 バイトを越えたり、 すると、SIGSEGV 出して落ちます。 その修正。
本来、strlcpy() とか strlcat() とかを使って修正すべき所を、 とんでもない手抜きでバッファサイズを 1024バイトとか 4096バイトとかに増やしただけです。 ので、1件につき 1KiB とか 4KiB とかより大きいデータを食わせると、 やっぱり落ちます。
ついでに、^U での全文字削除を追加しました。
FreeBSD 2/3/4/6/9/11, Solaris 2.6/8 で動作確認済み。
本パッチのメンテナンスは打ち切りました。
gjiten-1.1.diff.gz(1KiB)
xjdic の GTK+ 版フロントエンドとでも言うべき、 GJITEN を、 FreeBSD で使える様にするパッチです。 何の事は無い、#include <stdint.h> を削っただけです。
gjiten-2.x は、SIGSEGV だの BusError だの出て、 修正が面倒になったのでやめました。
私個人は、CUI版のxjdic しか使わないので、 本パッチのメンテナンスはしません。
tclock 移行に伴い、本パッチのメンテナンスは打ち切りました。
mlclock-1.1-modified.tar.bz2(8KiB)
現在日時時刻を文字表示する時計 mlclock の、改造版です。 オリジナルでは -geometry オプションが利用できず、また、 窓の再描画を頻繁に失敗しているので、 そのあたりを修正しました。
私個人は、 後述の tclockディジタル表示追加版に移行したので、 本パッチのメンテナンスはしません。
mnews122PL1_diff.gz(2KiB)
mnews-1.22PL6.patch1.gzmnews-1.22PL6T1-IMAP4,Unicode用 (3KiB)
標準の mnews で -DUSE_TZ_NAME が付いている OS で -DADD_DATE_FIELD を有効にした場合、
Date: Sat,24 Jan 2004 02:16:26 JST
と言う感じの Date: フィールドを作ってくれます。 しかしながらこの形式だと、 GMT との時差が何時間かわかりませんし、 SpamAssasin が時刻を誤判読して SPAM 判定してしまいます。 そこで、
Date: Sat,24 Jan 2004 02:16:26 +0900 (JST)
と言う感じの Date: フィールドを生成する様にパッチを作りました。 但し、環境設定に jst_mode: off が無い状態で閲覧すると、 "+0900 (JST)" が "JST" に変換されて 表示されます(変換されるのは表示だけ)。
lha-ac 移行に伴い、本パッチのメンテナンスは打ち切りました。
参考:http://osdn.net/projects/lha/
lha-114i.p0-patch.bz2(2KiB) OpenBSD 3.6-RELEASE の ports の lha-1.14i.p0 パッチ内包版。
lha-114i.p6-patch.bz2(5KiB) FreeBSD 4.11-STABLE の ports の lha-1.14i.p6 パッチ内包版。
各ディストリビューター提供の Traversal Hack 対処パッチでは、 「ルートディレクトリ指定の展開」 「上位ディレクトリ指定の展開」 の拒絶だけでなく、 「カレントディレクトリ指定の展開」 も拒絶する作りになっていますが、 この私家パッチは、 「ルートディレクトリ指定の展開」 「上位ディレクトリ指定の展開」 のみを拒絶し 「カレントディレクトリ指定の展開」を 許可する様にしたものです。
有り体に言うと、以前、バックアップを取る時に、
lha p hogehoge.lzh .
として作ったアーカイブがあり、展開できなくなって困った、 と言うだけですが。
http://osdn.net/projects/lha/ 版の lha では、 「カレントディレクトリ指定の展開」 も許可する様に修正されていました。 但し、デフォルトでバックアップファイルを作らない、に、 変更になっています。
OpenBSD の場合は、OpenBSD 3.9-RELEASE から、 /usr/ports/archiver/lha が 本家ベースから sourceforge ベースに変更になっていました。
FreeBSD の場合は、/usr/ports/archiver/lha-ac が、 sourceforge ベースです。
と言う訳で、面倒なんでこのパッチのメンテナンスはしません。 sourceforge版に --enable-backup-archive 付ければ 本パッチと同等の機能になります。
参考:http://osdn.net/projects/lha/
lha-ac-1.14.i.patch1.lzh(1KiB)
lha-ac-1.14.i.patch1.tar.bz2(41KiB)
lha-1.14i-ac20050924p1 の configure で、 --with-default-method= が使えないバグを修正するパッチ。
本家の trunk を探してみたら、 Tue Feb 5 21:30:09 2008 の Revision 879 で修正済だった。
Mon,16 Feb,2009 追記: サーバリプレースの際にパッチを当てようとしたら、 lha のインストールに必要なパッチを lzh に固めていたのでは、 缶詰の中の缶切りじゃん、でハマった。tar+bz2 で固め直し。
本パッチは技術的考察の為に作成したものであり、メンテナンスは行っていません。
SmartPropo は SANWA のプロポには非対応なので、 自分でデータを解析して、 自分でコードを書きました。
SANWA の 6ch PCM プロポ SRD-6127TS の送信データを 生 wave 形式で録音し、下記 srdpcm2dat で処理すると、 プロポのスティック操作量を読み出す事が出来ます。 PPM, PE, FSK 各変調方式の復調のみも出来ます。
srdpcm2dat.cc(30KiB)
srdpcm2dat で復調のみを行い生のデータを出力した時に、 各ビットの情報量を推定する為の補助プログラム srdpcm_entropy.cc(7KiB)、 実際問題としては、 未知のデータ形式の解析を行う時にしか必要無いでしょう。
プロポの送信データを録音して wave 形式にしたデータ例 PCM_TEST.tar.bz2(94KiB)
それ以外の機種では試した事が無いので (持っていないし、借りられる相手もいない)、 どうなるか判りません。 少なくとも、このプロポが送出しているデータには、 6ch 分のデータを送るぎりぎりのデータ容量しか無かったので、 8ch PCM プロポだとデータ形式が変わっていないと 入り切らないでしょう。 そんな訳で、チャンネル数が異なると データ形式も変わっていると思います。
このソースのパーサー部分を、 適当な MCU,FPGA,CPLD などに移植して、 適当に I/F を書いて、 ラジコン受信機の AF を引っ張り出して MCU,FPGA,CPLD などに入力してやれば、 スティック操作量を PCM モードで 生データのまま受信できるでしょう。 ……。 と言うよりも、そうする為に書いたんですけど。 開発する時間とかお金とか体力とか精神力の余裕が無いよぅ(泣。
FPGA/CPLD に移植するには……、 復調アルゴリズムを見直して書き直した方が良い様な気がします。 なにぶん、 カウンタやデータラッチ、 マグニチュードコンパレータやフルアダーを、 ふんだんに使ってしまったので、 消費セル数がやたら増えそう……。 100セル台にのるのかな、のらないかな、 ……これだけで 500セルくらい行っちゃったらやだなぁ。
Futaba や JR の PCM プロポをお使いの方は、 SmartPropo のソースを拝借した方が良いでしょう。 なにぶん、私が中古で購入したプロポが SANWA の PCM プロポで、 SmartPropo は SANWA のプロポに非対応だったので、 自力で解析しなければならなかった、と言うのが、 これを作るきっかけですので。 KO の PCM プロポをお使いの方は……、 自力で解析するしか無いでしょう。
本ソフトのメンテナンスは打ち切りました。
図の、中央上のヤツ。
xmbmon204-patch.bz2(3KiB)
xmbmon205-patch.bz2(3KiB)
最近の CPU やら ChipSet やらは発熱が激しい様で。 xmbmon 入れて、てきと〜にモニターしていたのですが、 私の使っているマザーボード/BIOS では、 どうも派手にマイナスバイアスがかかっている様でした。 なので、 xmbmon にオフセットを付けられる様に改造してみました。
# オリジナルにオフセットを乗せる機能が無いのは、 マニュアルの読み落しで、実は有る、 と言う訳では無いですよね[y/n]。
xmbmon205-acpippc-patch.bz2(7KiB)
FreeBSD 4.11-STABLE / 5.2.1-CURRENT 以降では、 AMD64(Athlon64) な計算機において、 acpi_ppc を使って Cool'n'Quiet (CnQ) の制御が出来るようになりました。 そのモニタ機能を xmbmon に付けてみました。
FreeBSD 6 で cpufreq + powerd に変わったんですが、 対応させる気力が無いっす。
本ソフトのメンテナンスは打ち切りました。
gtkipmsg-0.2.6-p5.tar.bz2(127KiB)(Wed,10 Oct,2007)(メモリリーク対処版)
gtkipmsg-0.2.6-p4.tar.bz2(126KiB)(Wed,10 Oct,2007)(メモリリーク未対処版)
*BSD (FreeBSD, NetBSD, OpenBSD,..., 4.xBSD ? ) とか GNU/Linux とか Solaris とかで使える IP-Messenger(ipmsg) と言うと、 xipmsg か gtkipmsg か gipmsg(gnome ip-messenger) か g2ipmsg になりますが、 これらは athena 用か GTK+-1.x 用か GNOME 用か GNOME2 用で、 GTK+-2 (GTK2 ?) のみの環境では使用できず、 且つ、g2ipmsg 以外は開発が終了してしまった模様だし、 g2ipmsg は GNOME2 必須です。
そこで、gtkipmsg を GTK+-1.2.x と GTK+-2 のどちらかだけあれば使える様に改造しました (GTK+-1.0.x は未確認)。 GNOME や GNOME2 等は不要です。
nickname の、設定と送信と設定保存を、追加しました。 (ニックネームの受信は、 オリジナル gtkipmsg でも対応していました)
封書/非封書の選択送信機能も追加しました。
Fedora では locale が標準で UTF-8 だそうですが、 それでも問題無くビルドして使える様にしました (GTK+-2 のみ確認)。
Solaris では socket のライブラリの構成が異なっていますが、 これも問題無くビルドして使える様にしました。
GNOME2仕様(KDE3もGNOME2と同じ仕様らしい)の システムトレイに入れられる機能も追加。 FUJIE Takashi氏の GNOME1 や KDE でシステムトレイに入れるパッチもマージ。
オリジナルの gtkipmsg に、 メモリリークとか、未確保のメモリへのアクセスとか、 見つけたので修正。
GTK+-2 の GTKネイティブ用 input module にメモリリークを見つけたので、 メモリリークしない様に gtkipmsg 側で小細工を追加。
日本語入力を行う場合、 GTK+-1.2.x では、 kinput2 や uim-xim 等の XIM から入力します。 GTK+-2 では、 環境変数 GTK_IM_MODULE で指定したモジュールから入力します。
ビルドする時、
./configureの引数に(いや、私は ../configure 派なのだけれどさ)、
--enable-gtk2を付けると、GTK+-2 用にビルドします。 指定しないと、GTK+-1.2.x 用にビルドします。
--enable-systemtrayを付けると、GNOME2仕様のシステムトレイに入れます。 KDE3のシステムトレイにも入るらしいです(未確認)。 指定する場合は、 自動的に --enable-gtk2 が指定され、 また GTK+-2.10以降が必要になります、 が、GNOME2 や KDE3 は不要です。 指定しないと、システムトレイには入りません。
--enable-systemtray1を付けると、GNOME1 や KDE でシステムトレイに入れます。 指定しないと、システムトレイには入りません。
--disable-default-sealed
と付けると、初期状態が非封書になります。 指定しないと初期状態は封書です。
既知の問題点。 実用上、差し支えない範囲まで来たので、もう治さない。
原著作者、参考、引用元
本ソフトのメンテナンスは打ち切りました。
p0f.c.diff.bz2(2KiB)
オリジナルの p0f には、 どうも pflog 形式のパーサにバグが有る様なので、 適当に治してみました。
で、後になって OpenBSD の ports をよく見たら、 2004/05/03 に修正パッチが追加されていたオチ。 但し、OpenBSD の ports のパッチは 現在のバージョンの pflog で使われているヘッダ長専用ですが、 こちらの改造パッチは、一応、汎用にしてあります。 まぁ、pflog の仕様を変更してヘッダ長を変えるとは、 あまり思わないけれど。
OpenBSD 3.5 と FreeBSD 4.11-STABLE のみで動作確認。
本パッチのメンテナンスは打ち切りました。
vtwm.diff.bz2(1KiB)
twm 系の軽量で仮想スクリーン対応の vtwm ですが、 6ボタン以上(スクロールも其々の方向毎に1ボタンと数える)だと、 ボタン番号6以上を押すと落ちるバグだか仕様だかがあります。 治してみました。
ただまぁ、今の御時世、 ここまでの軽量高速にこだわる人ってそうそういないらしく、 パッチを作った所で使う人がいないのではないかと思われ。 xinerama にも対応していないし。
と、言う訳で、本パッチのメンテナンスはしません。
本パッチのメンテナンスはしません。
vtwm-5.4.7.patch1.bz2(2KiB)
twm 系の軽量で仮想スクリーン対応の
vtwm
。
ウィンドウにフォーカスが有るかどうかは、
ウィンドウのボーダーの色の変化で分かる様になっていますが、
加えてタイトルの色も変える様にするパッチです。
ただまぁ、今の御時世、 ここまでの軽量高速にこだわる人ってそうそういないらしく、 パッチを作った所で使う人がいないのではないかと思われ。 xinerama にも対応していないし。
と、言う訳で、本パッチのメンテナンスはしません。
fvwm-2.4.19-patch.bz2(Mon,25 Sep,2006)(3KiB)
fvwm 系の軽量で仮想スクリーン対応の fvwm ですが、 アプリケーション側が強制的にフォーカスを奪おうとすると、 それを許可する仕様になっているみたいです。
例:gimp とか firefox とか。
アプリケーション起動時に 勝手にフォーカスが移動してしまうのが嫌なので、 アプリケーション側が強制的にフォーカスを奪おうとした時に、 フォーカスを奪い返す様に改造しました。
やっつけ仕事なので、かなり汚いパッチです。
2.4.19用に書いたパッチですが、2.4.20でもそのまま使えます。
図の、右上のヤツ。
tclock-1.0.1.patch7.bz2(8KiB) オリジナルのソースからの差分のみ
tclock-1.0.1.patch7.tar.bz2(14KiB) オリジナルを含む全ソース
※ FreeBSD ports のパッチも同梱されています。
透過アナログ時計と言いますか、透明アナログ時計と言いますか、 の、tclock(総本山不明、原作:Copyright (C) 1991 Rob Mayoff)に、
を追加しました。 もっとも、時報は cron でやった方が良いのではないかと言う気がしますが。
ウィンドウマネージャの機能を使わずに tclock 自身の機能のみで、常に最前面に表示したい時は、 "-sticky" オプションを追加してください。 デフォルト off になっています。 そんな機能、絶対に使わない、と言う場合は、 tclock.c の先頭の "#define ENABLE_STICKY" を コメントアウトすると、より小さな実行ファイルになります。
xlock/xautolock/xlockmore 等の画面ロックをかけた場合や、 xscreensaver 等のスクリーンセーバーを動かした場合は、 「常に最前面に表示」が中断されます。 画面ロックやスクリーンセーバーが解除されると、 「常に最前面に表示」が再開されます。
"-sticky" オプションを指定した場合、 時計の針か目盛りをクリックすると、 「常に最前面に表示」が無効になります。 もう一度クリックすると、有効になります。
時報機能はデフォルト off になっています。 使いたければ、-chime オプションを付けてください。 そんな機能、絶対に使わない、と言う場合は、 tclock.c の先頭の "#define ENABLE_TIMEANNOUNCEMENT" を コメントアウトすると、より小さな実行ファイルになります。
透過アナログ時計はデフォルト on になっています。 使いたくなければ、+analog オプションを付けてください。
透過ディジタル時計はデフォルト off になっています。 使いたければ、-digital オプションを付けてください。 表示内容を変更したければ、-form オプションとロケールで指定してください、 指定内容は man strftime を見てください。 表示位置を変更したければ、-digitalgeometry オプションで指定してください。 フォントを変更したければ、-fontset オプションで指定してください。
本パッチのメンテナンスは打ち切りました。
acpi_ppc-20050313.patch.bz2(4KiB) nice指定プロセスが忙しくなってもギアを上げる版。
acpi_ppc-20050313.patch2.bz2(4KiB) nice指定プロセスが忙しくなってもギアを上げない指定ができる版。(ギアを上げる指定も可能)
acpi_ppc-20050521.patch3.bz2(5KiB) patch2 + hw.acpi.cpu.px_lowest を可変にした。
FreeBSD 6 以降では cpufreq & powerd が搭載された為、 acpi_ppc は不要です。 powerd 改造パッチは後述。
FreeBSD 4.11-STABLE / 5.2.1-CURRENT 以降で、 Athlon64 (AMD64) の Cool'n'Quiet (CnQ) や、 Intel の Enhanced SpeedStep 等での、 CPU の動作周波数を動的に制御できる様にするカーネルモジュール、 acpi_ppc (http://www.spa.is.uec.ac.jp/~nfukuda/software/) に、
してみました。
「nice 指定されたプロセス云々」は、有り体に言うと、 「distributed.net とか SETI とかスクリーンセーバーとか、 そういうもの"だけ"を動かしている時は、 どんなに負荷が上がっても最低速度を保ち、 それ以外の処理を始めたら速度を上げる。」 と言う為のものです。 もっとも、BSD系とかGNU/Linux系とかは、 なんにも処理をしていない時は、 最低速度の状態よりも さらに低消費電力の状態になっている筈ですが。 それなのにわざわざそういうものを動かすと、 たとえ最低速度のモードでも消費電力が上がっている筈です :P。 現に、xmbmon の温度計を見ていると、 温度が上昇しているし。
distributed.net とか SETI とかを動かす場合、 設定は、
hw.acpi.cpu.px_top_threshold: 95 hw.acpi.cpu.px_2up_threshold: 90 hw.acpi.cpu.px_stepup_threshold: 50 hw.acpi.cpu.px_stepdown_threshold: 35 hw.acpi.cpu.px_2down_threshold: 25 hw.acpi.cpu.px_threshold_mode: 5とか
hw.acpi.cpu.px_top_threshold: 95 hw.acpi.cpu.px_2up_threshold: 80 hw.acpi.cpu.px_stepup_threshold: 60 hw.acpi.cpu.px_stepdown_threshold: 40 hw.acpi.cpu.px_2down_threshold: 20 hw.acpi.cpu.px_threshold_mode: 5
ぐらいの、出足の軽い設定にした方が良さそうです。 たとえ distributed.net とか SETI とかを nice 指定していても、 非 nice 指定のプロセスの BUSY があまり上がらず、 acpi_ppc改造版がギアを上げる必要無しと判定し、 ギアが上がらない事が、しばしばありますので。 distributed.net とか SETI とかに、 nice と idprio の両方を指定すれば、いくらかましかも (idprio に関しては、後述の「注意」を参照のこと)。
動作確認済み環境:
Tue,13 Dec,2005 現在、 FreeBSD 4.11-STABLE(Oct 12 17:40:59 JST 2005) 上の acpi_ppc-20050313 を有効にしている環境で /usr/sbin/idprio を使用すると、 稀にマシンが再起動する現象が見つかりました。
私家改造版でも、 本家のオリジナル版 acpi_ppc-20050313 でも発生しました。
また、/usr/sbin/idprio を一切使用していなかった、 2005年4月から12月までの2台のべ10ヶ月間は、 全く平穏無事に動いていました。
現在、 FreeBSD 4系が原因なのか、 idprio が原因なのか、 acpi_ppc が原因なのか、 ACPI が原因なのか、 マシン固有なのか、 何か別のソフトが原因なのか、 追跡中です。
Thr,15 Dec,2005、中間まとめ。
Sat,17 Dec,2005、中間まとめ。
Fri,23 Dec,2005、中間まとめ。
Mon,26 Dec,2005、中間まとめ。
acpi_ppc が splx() 使っていない事がらみか? FreeBSD 4系の idprio がらみか?
と、言うわけで、個人的には、 「acpi_ppc は、たぶん問題無い。 FreeBSD 4系のスケジューラの rtprio/idprio の処理が おかしいのではないか」、 と言う結論に達しました。
Fri,29 Sep,2006、現状。
2005年12月に idprio を無効にしてから9ヶ月、 全く問題無く動作しています。
本ソフトのメンテナンスは打ち切りました。
powerd 改造パッチの原作はこちら(http://www.imasy.or.jp/~ume/FreeBSD/)。
powerd62R-thermal-20050624.diff.bz2(3KiB) タイプ0:ume氏のパッチを FreeBSD 6.2-RELEASE 対応に修正したもの。
powerd62R-thermal-20070317.diff.bz2(4KiB) タイプ1:タイプ0に加えて、クロックの1段階/2段階の上げ/下げ対応改造。
powerd62R-2007321.diff.bz2(5KiB) タイプ2:タイプ0に加えて、クロックの上げ下げのアルゴリズムを多段階にした物。
powerd62R-2007412.diff.bz2(6KiB) タイプ3:タイプ2に加えて、上限/下限クロックの設定、プロファイル切り換え、を追加した物。
powerd63R-2007412.diff.bz2(6KiB) タイプ3の FreeBSD 6.3-RELEASE 用。
注意(追記:Jan〜May,2008): CoreDuo i945GM FreeBSD/i386 6.3-RELEASE SMP-kernel な環境で使用した所、 特に X を止める時に、週数回のペースでカーネルフリーズが頻発しました。 本パッチを利用していなくても起きます。 Intel統合チップな環境で SMP と SpeedStep を同時使用すると駄目らしい? GENERIC-kernel な環境だと、1〜2ヶ月に1回のペースまで減る模様。 Athlon64 nForce3 FreeBSD/amd64 6.3-RELEASE GENERIC-kernel な環境では、 今の所、全く問題は起きていません。
FreeBSD 4 や FreeBSD 5 では、 acpi_ppc(acpi_ppc に関してはこちらを参照)を 手動で入れる事で、 負荷状況に応じて CPU の動作周波数を変更する事が出来ましたが、 FreeBSD 6 以降では、 Athlon64 (AMD64) の Cool'n'Quiet (CnQ) や Intel の Enhanced SpeedStep 等での、 CPU の動作周波数を動的に制御できるカーネルモジュール cpufreq と、 負荷状況に応じて cpufreq を制御するデーモン powerd が、 実装されました。
しかしながら、cpufreq & powerd は、 温度が上昇した時に shutdown する機能はありますが(cpufreq に内蔵)、 温度が上昇した時にクロックを落す機能が弱いです (acpi_ppc だと機能自体が無いけれど)。 BIOS だか ACPI だかに、 hw.acpi.thermal.tz0._TSP と hw.acpi.thermal.tz0._TC1 と hw.acpi.thermal.tz0._TC2 と hw.acpi.thermal.tz0._PSV と hw.acpi.thermal.tz0._ACx が有れば、 温度上昇時にクロックを落す機能が有効になるみたいですが、 どれか1つでも情報が無いと、 BIOS だか ACPI だかが温度を読む機能に対応していても、 クロックを落してくれないみたいです。 クロック制御機能とか CnQ とか SpeedStep 使ってみた感じでは、 ヒートシンクとかファンとかエアフローとかが狂っていない限り、 AthlonXP系とか Athlon64系では、 夏場に最大速度で回しても60℃±5℃で納まっており、 危険を感じた事はありませんが。 PentiumM とか CeleronM とか CoreDuo だと、 最大速度で回すと冬場なのに90℃とか100℃とか指すんですが……、 温度計が狂っている? Pentium4 とか PentiumD とか Xeon とかだと、真冬に部屋の暖房を止めても、 ファンが轟音で回り続けるんですが……。
powerd の注意1: acpi_ppc はカーネル空間で動くので、 カーネル空間からデータをコピーしないぶん、 powerd より、ほんのちょっと軽くて速いですが、 万が一バグや悪相性が有ると、カーネルごと死にます。 powerd はユーザ空間で動くので、 カーネル空間からデータをコピーするぶん重いですが、 万が一バグや悪相性が有っても、カーネルは安全です。
powerd の注意2: 標準の powerd や改造パッチ タイプ0や改造パッチ タイプ1は、 例えば make world した時の様に、 負荷が頻繁に上がったり下がったりする場合、 いちいちクロックを上げたり下げたりしてしまいます。
powerd の注意3: 標準の powerd や改造パッチ タイプ0や改造パッチ タイプ1は、 Athlon64系の様に、クロックの段階数が少ない物で使うと、 クロックが上がったり下がったり振動してしまいます。 この辺に関しては、acpi_ppc の、 切り換え前後の周波数を見てヒステリシス性を持つアルゴリズムを 移植すべきかと。
cpufreq の注意1: Athlon64 だと、監視している温度は CPU の温度では無い模様。 一体、何処の温度なんだろう……? そもそも、10秒毎に hw.acpi.thermal.tz0.temperature を見ていても、 変化しないんですが。mbmon だと変化しているのに……?
ume氏により、 温度が上昇した時にクロックを落すパッチが公開されましたが、 FreeBSD 6.0-CURRENT 用だったので、 FreeBSD 6.2-RELEASE 用に調整してみました (size_t を int と書いてしまっている点の修正を含む)。
タイプ0の注意1: Athlon64 だと、監視している温度は CPU の温度では無い模様。 一体、何処の温度なんだろう……? そもそも、10秒毎に hw.acpi.thermal.tz0.temperature を見ていても、 変化しないんですが。mbmon だと変化しているのに……?
タイプ0の注意2: 標準の powerd や改造パッチ タイプ0や改造パッチ タイプ1は、 例えば make world した時の様に、 負荷が頻繁に上がったり下がったりする場合、 いちいちクロックを上げたり下げたりしてしまいます。
タイプ0の注意3: 標準の powerd や改造パッチ タイプ0や改造パッチ タイプ1は、 Athlon64系の様に、クロックの段階数が少ない物で使うと、 クロックが上がったり下がったり振動してしまいます。 この辺に関しては、acpi_ppc の、 切り換え前後の周波数を見てヒステリシス性を持つアルゴリズムを 移植すべきかと。
ume氏のパッチは、クロック強制低下モードに入ると、 負荷が上がろうが下がろうがクロックを変えなくなる仕様だったので、 負荷が下がった場合はクロックを落す様に改造してみました。
さらに。 負荷がとても高い時には段階を踏まずに最高クロックにしたり、 負荷がちょっとだけ高い時には1段だけ上げたり (標準の powerd では2段上がる)、 負荷がとても低い時には2段下げたり (標準の powerd では1段下がる)、 nice 指定されたプロセスで負荷が上がった場合はクロックを上げなかったり、 する機能の追加をしてみました。 なお、デフォルトでは追加機能は無効にしてあります。
タイプ1の注意1: Athlon64 だと、監視している温度は CPU の温度では無い模様。 一体、何処の温度なんだろう……? そもそも、10秒毎に hw.acpi.thermal.tz0.temperature を見ていても、 変化しないんですが。mbmon だと変化しているのに……?
タイプ1の注意2: 温度上昇に関して抑圧的な挙動をします。 温度が設定値を越えると、ガンガンとクロックを落していき、 どんなに負荷が上がっても、 温度が下がるまでクロックを上げなくなってしまいます。
タイプ1の注意3: 標準の powerd や改造パッチ タイプ0や改造パッチ タイプ1は、 例えば make world した時の様に、 負荷が頻繁に上がったり下がったりする場合、 いちいちクロックを上げたり下げたりしてしまいます。
タイプ1の注意4: 標準の powerd や改造パッチ タイプ0や改造パッチ タイプ1は、 Athlon64系の様に、クロックの段階数が少ない物で使うと、 クロックが上がったり下がったり振動してしまいます。 この辺に関しては、acpi_ppc の、 切り換え前後の周波数を見てヒステリシス性を持つアルゴリズムを 移植すべきかと。
ume氏のパッチは、クロック強制低下モードに入ると、 負荷が上がろうが下がろうがクロックを変えなくなる仕様だったので、 上限クロックを下げるだけに改造してみました。 上限クロック以下の範囲で、 負荷に応じたクロックの上げ下げは続行されます。
負荷に応じたクロック変更のアルゴリズムを変更しました。 acpi_ppc のヒステリシスのアルゴリズムを元に改造して、 多段階のクロック上げ下げに対応しました。
クロックを下げる時には、 暫く待ってから下げる様に改造しました。 これで、make world の様に、 負荷がバタバタ変動しても、いちいちクロックを下げたりしなくなる……、 はず。
タイプ2の注意1: 標準の powerd やタイプ0、タイプ1、に比べ、 クロックが上がりがちになるので、 発熱量や、電気代や、ノートPCの電池の持ち時間には、 悪影響があるかもしれません。
タイプ2の注意2: クロックの変更に必要な時間に対して 温度変化に必要な時間がとても長いため、 温度の設定値と温度監視の時定数によっては、 クロックが上がったり下がったり発振します。
タイプ2に、クロックの上限と下限を設定できる様にしました。
また、設定を2セット持ち、使用中に切り換えることが出来ます。
注意事項はタイプ2と同じ。
タイプ3の注意1: オリジナルの powerd でも、sysctl debug.cpufreq.lowest にて クロックの下限は指定できます。 但し、使用中の変更はできません。
注意:freebsd-update で powerd が更新されると、再パッチが必要です。
使い方:
(1) acpi とか cpufreq とかを入れる。 cpufreq は、手動で % kldload cpufreq すると動作不良を起こすので、/boot/loader.conf で cpufreq_load="YES" する。 (2) acpi と cpufreq の状況を確認する。 % sysctl hw.acpi.thermal と % sysctl dev.cpu で、 hw.acpi.thermal.tz0.temperature: 56.0C hw.acpi.thermal.tz0._PSV: -1 dev.cpu.0.freq: 375 dev.cpu.0.freq_levels: 1667/15000 1458/13125 1333/14000 1166/12250 1000/13000 875/11375 750/9750 625/8125 500/6500 375/4875 250/3250 125/1625 とか hw.acpi.thermal.tz0.temperature: 40.0C hw.acpi.thermal.tz0._PSV: 100.0C dev.cpu.0.freq: 1000 dev.cpu.0.freq_levels: 2200/67000 2000/56000 1800/46000 1000/20000 とかなっていれば、使えるはず。 (3) クロックダウンしたい温度を設定する。 90℃に設定したいならば、 % sysctl hw.acpi.thermal.user_override=1 % sysctl hw.acpi.thermal.tz0._PSV=90C とか、/etc/sysctl.conf で hw.acpi.thermal.user_override=1 hw.acpi.thermal.tz0._PSV=90C とかする。 sysctl で設定した場合は、再起動すると変更が消える。 /etc/sysctl.conf に書いた場合は、再起動しないと変更が反映されない。 hw.acpi.thermal.tz0._HOT=90C とか hw.acpi.thermal.tz0._CRT=90C とかすると、10秒?以上 90℃以上が続くと shutdown してしまうので注意。 hw.acpi.thermal.tz0._PSV=-1 だと、温度判定しない。 (4) パッチを当てた powerd を入れる。 (5) powerd の温度対応の設定をする。 /etc/rc.conf で powerd_flags="-a adaptive -b minimum -n adaptive -p 100 -r 50 -i 60 -t" みたいに、-t オプションを追加する。 (6) powerd を起動する。 % /etc/rc.d/powerd stop % /etc/rc.d/powerd start もしくは % /etc/rc.d/powerd restart する。 (7) どんな感じでクロックが変化しているかを見たければ、 % /etc/rc.d/powerd stop % powerd -a adaptive -b minimum -n adaptive -p 100 -r 50 -i 60 -t -v とかする。 (8) タイプ0〜タイプ3共通の、温度関連の設定に関して。 温度監視を有効にしたい場合は、 -t オプションを付けます。 標準設定では無効になっています。 温度監視の時間間隔(時定数)は -c オプションで [ms] 単位で指定します。 なお、-p オプションの指定値より小さな単位で指定しても、 -p オプション指定値の倍数に丸められます。 また、-p オプションの指定値や acpi の監視時間間隔(たぶん10秒)より 小さくする事は出来ません。 標準設定では -c 10000 (10秒)です。 (9) タイプ1の独自設定に関して。 負荷がとても上がった時に、段階を経ずに最高クロックにしたい時は、 例えば負荷95%で強制的に最高クロックにしたい時は -U 5 オプションを追加します。 負荷がちょっとだけ上がった時に、1段だけクロックを上げたい時は、 例えば負荷60%時は -u 40 オプションを追加します。 負荷が大きく下がった時に、2段クロックを下げたい時は、 例えば負荷20%時は -d 80 オプションを追加します。 nice 指定されたプロセスで負荷が上がった時にはクロックを上げたくない時は、 -l 2 オプションを追加します。 標準設定では -l 0 (nice 指定されたプロセスの負荷も勘定する)になっています。 負荷割合の指定は、acpi_ppc と論理が逆になっていますので注意。 個人的な好みは、Core Duo の場合は、 -a adaptive -b minimum -n adaptive -p 100 -U 35 -r 50 -u 60 -i 80 -d 90 -l 10 -t あたりかなぁ。 Athlon64 の場合は、FreeBSD 6.2-RELEASE の標準設定のままで問題無し。 (10) タイプ2の独自設定に関して。 負荷がとても上がった時に、段階を経ずに最高クロックにしたい時は、 例えば負荷95%で強制的に最高クロックにしたい時は -U 5 オプションを追加します。 標準設定では -U 0 (負荷が100%より大きくなった時、 そんな事はありえないので、つまりこの機能は無効)に なっています。 -r オプションと -i オプションの意味が変更されています。 負荷が上がってアイドル時間が -r 指定値よりも小さくなった場合、 アイドル時間が -r での指定値よりも大きくなると推定されるクロックまで 引き上げます。 例えば、-r 60 が指定されている時にアイドル時間が 20%になった場合、 クロックを倍に引き上げます。 (処理している時間が80%だから、 クロックを倍にすると処理している時間が40%でアイドルが60%になると 想定される)。 負荷が下がってアイドル時間が -i 指定値よりも大きくなった場合、 アイドル時間が -i での指定値よりも小さくなると推定されるクロックまで 引き下げます。 例えば、-i 80 が指定されている時にアイドル時間が 90%になった場合、 クロックを半分に下げます (処理している時間が10%だから、 クロックを半分にすると処理している時間が20%でアイドル時間が80%になると 想定される)。 負荷が下がった時のクロックを下げるまでの待ち時間は、 -D オプションで [ms] 単位で指定します。 なお、-p オプションの指定値より小さな単位で指定しても、 -p オプション指定値の倍数に丸められます。 標準設定では -D 0 (待ち時間無し)です。 nice 指定されたプロセスで負荷が上がった時にはクロックを上げたくない時は、 -l 2 オプションを追加します。 割込処理で負荷が上がった時にはクロックを上げたくない時は、 -l 8 オプションを追加します。 nice 指定と割込処理の負荷の両方を無視したい場合は -l 10 オプションを追加します。 標準設定では -l 0 (全ての負荷を勘定する)になっています。 負荷割合の指定は、acpi_ppc と論理が逆になっていますので注意。 個人的な好みは、Core Duo の場合は、 -a adaptive -b minimum -n adaptive -p 100 -D 300 -c 10000 -U 25 -r 55 -i 80 -l 10 -t あたりかなぁ。 Athlon64 の場合は、FreeBSD 6.2-RELEASE の標準設定のままで問題無し。 (11) タイプ3の独自設定に関して。 タイプ2の機能は全部持っています。 クロックの上限/下限の設定と、プロファイルの切り換えが加わっています。 -H でクロックの上限を設定します。-H 1500 ならば、1500MHz が上限クロックになります。 -L でクロックの上限を設定します。-L 500 ならば、500MHz が下限クロックになります。 -0 で、プロファイル1を選択します。 これ以降の引数指定は、プロファイル1に適用されます。 -1 で、プロファイル2を選択します。 これ以降の引数指定は、プロファイル2に適用されます。 -0 か -1 か、どちらか最後に指定された方が、 powerd の起動時のプロファイルとして選択されます。 -C val で、val のプロファイルから、現在選択しているプロファイルに、 設定をコピーします。 val は 0 か 1 で、コピー元プロファイルを指定します。 powerd の起動後、powerd に SIGUSR1 を送るとプロファイル1に切り替わります。 powerd に SIGUSR2 を送るとプロファイル2に切り替わります。 sudo 使わないと、シグナルを送れないと思いますが。 個人的な好みは、Core Duo の場合は、 -0 -a adaptive -b minimum -n adaptive -p 100 -D 300 -c 10000 -U 25 -r 55 -i 80 -H 1458 -L 250 -l 10 -t -1 -C 0 -H 1667 -L 625 -0 あたり。通常時はプロファイル1を使い、 プログラミング時や製図時やゲーム時はプロファイル2に切り換えます。 でも、切り換えるのが面倒くさい。 かと言って切り換えないと、 CoreDuo の省電力時は目茶苦茶遅いし、 クロックを上げると発熱とファンの騒音が酷いし。 つくづくバランス悪いCPUだと思う。 裏を返すと、MobilePentium3 とか PentiumM とかは、そこそこバランス良かったと思う。 AMD系のモバイル用?CPUは、使う機会に恵まれないので不明。
本ソフトのメンテナンスは打ち切りました。
図の、右下のヤツ。
xsysinfo-1.4a.patch3.bz2(6KiB) (Fri,04 Jul,2008)
※ FreeBSD ports のパッチも同梱されています。 …… 2006年11月9日付で、 FreeBSD ports からは外されてしまった模様。
xsysinfo(総本山不明)では、 colors 指定にてグラフ表示の色を変更できますが、 LOAD, DISK, PKT, NFS C/S は グラデーション方式で色を使用するのに対して、 CPU, MEM, SWAP は 意味毎に色を使い分けています。 で、グラデーション用の色と、意味表示用の色を、 別個に設定できる様に改造してみました。
あと、オリジナルの xsysinfo にはメモリ破壊バグがあったので修正。
FreeBSD 4 以降では、swap の表示が間違っているバグがあったので修正。
それから、FreeBSD ports の FreeBSD 6 対応のパッチも同梱。
mcolors にてグラデーション用の色を指定し、 colors にて意味用の色を指定します。
何故 xosview を使わずに xsysinfo なのかと言うと、 同じ更新間隔に設定しても xosview の方が CPU負荷が高かったから、 と言うだけの理由。 でも、メモリ常駐量は、xsysinfo が 2.6MiB で、 xosview は 2.1MiB だった。
xosview-1.8.3.patch1(2KiB) (Tue,11 Sep,2012)
xosview-1.8.3を FreeBSD で使った場合、 メモリを 4GiB 以上積んでいる時にページサイズが 4KiB 以下だと メモリの容量計算を間違えます。 それの修正パッチ。
xosview-1.21.patch2(6KiB) (Tue,17 Mar,2020)
xosview-1.23.patch2(7KiB) (Sat,29 Apr,2023)
xosviewを FreeBSD-11.1 以降で使った場合、 メモリの Laundry が表示されません。 その Laundry を表示する様にする修正パッチ。
FreeBSD の ports のパッチを適用後に、 本修正パッチを適用します。
回路図CAD QtBSch , 回路基板CAD pcb.sourceforge.net 関連は、こちら。
本ソフトのメンテナンスは打ち切りました。
回路基板CAD pcb.sourceforge.net の RS-274X ガーバ出力 と MITS FLASH for WIN 回路基板切削機 関連は、こちら。
本パッチは技術的考察の為に作成したものであり、メンテナンスは行っていません。
1) OpenSSL ライブラリの ssl_lib.c を用意する。 2) SSL_CTX_new() だけ切り出して、ssl_ctx_new.c に保存する。 3) 編集する。SSL_DEFAULT_CIPHER_LIST を、てきとーにいじる。 こんな感じになる。 4) コンパイル:gcc -g3 -O3 -c -o ./ssl_ctx_new.o ./ssl_ctx_new.c -I$TOP -I$TOP/ssl $TOP は、OpenSSL を展開したディレクトリ。 5) リンク:gcc -shared -g3 -O3 -o ./ssl_ctx_new.so ./ssl_ctx_new.o 6) 出来上がった ssl_ctx_new.so を、適当なディレクトリに保存する。 7) 暗号強度を強制指定したいアプリケーションを動かす時のみ、 env コマンドあたりを使って環境変数 LD_PRELOAD に ssl_ctx_new.so を フルパスで追加する。強引だなぁ……、いいのかなぁ……。
本パッチのメンテナンスは打ち切りました。
Berkeley Open Infrastructure for Network Computing (通称 BOINC)版 SETI@Home / SETI@Home Enhanced の、 fftw 3.x(SSE,SSE2,3dNow対応) を利用して最適化した SETI@Home Enhanced(ver.5)系のオフィシャル版ソース もしくは SETI@Home(ver.4)系 setiboinc.sourceforge.net版ソース Seti@home Boinc Optimization と、 同じく naparst版ソース Harold Naparst を、 Pentium3(MMX,SSE対応)上の FreeBSD 4.11-STABLE の gcc34 で コンパイルが通る様に改変し、ビルドしたバイナリです。
reference_work_unit.sah での試験に合格する事を確認してあります。 但し、一切の、保証,補償,保障は、ありません。 使いたい方は、自身で判断して下さい。
SETI@Home は SETI@home Enhanced(ver.5系)に移行し、 May 16, 2006 をもって、ver.4系への work unit の生成を止めたそうです。 下記クライアントのうち ver.4系は、もはや使用できません。
boinc-client-5.4.7_build.tar.bz2(2.6MiB) Optimized boinc client 5.4.7 for i386-unknown-freebsd4.11 (Pentium3 SSE i387)
setiathome_5.12_p3-sse-fftw3-freebsd4.tar.bz2(268KiB) SETI@Home Enhanced 5.12 for i386-unknown-freebsd4.11 (Pentium3 SSE i387)
naparst版は、 hnaparst.homelinux.com に接続拒否されてソースが入手できないため、 ビルドできていません。 オフィシャルソース版は遅いからやだ、と言う方は、 Linux Emulation でも使って、 crunch3r あたりの GNU/Linux用 SETI@Home Enhanced でも動かしてください。 なお、crunch3r の app_info.xml をそのまま使うと エラー出してこけるので注意されたし (ファイル名のリビジョン番号が古いままになっている)。 crunch3r の GNU/Linux用 boinc は FreeBSD 4-STABLE の RedHat8 ベースの Linux Emulation では 動かせませんでした(RedHat8 用の libcurl.so.3 と libssl.so.0.9.7 と libcrypto.so.0.9.7 が入手できん。 自前ビルドするのは面倒だから嫌)。
FreeBSD 4系のオフィシャル ports/package では、 boinc, SETI@home Enhanced への対応をやめたそうです。
setiathome 5.12 オフィシャル版を自前で修正して、 FreeBSD 4.11-STABLE 用にビルドして試験してみたら、 計算結果は5〜7桁一致で合格だったものの、 setiathome 4.07 naparst最適化版と比べて7倍遅く、 setiathome 4.07 オフィシャル版と比べて3割遅く、 なっていました。 オフィシャルの広報にも、 Enhanced は より精細になったぶん重くなった、 と書いてはありますが。
常用の MobilePentium3 1000MHz で、 本物のデータ処理を開始してみたのですが……。 3WU ダウンロードして処理開始した所、 10時間±5時間で、 3WU 全て、よそさま3人(合計9人)の返答が完了しているのに、 私の所は、最初の WU の、しかも30%しか終わっていないのですが。 ベンチマーク値からの単純換算で、 よそさまの処理速度の半分しか出ていないのですが。 いっそのこと、 FreeBSD の Linux Emulation で走らせた方が速いんでは? ……。 1WU 完了するのに、19時間かかりました。 しかも、申報失敗で invalid 出されて granted credit が 0.00 になりました。 19時間が全て無駄に。 ……。 FreeBSD の Linux Emulation で crunch3r 版を単独試験で動かしてみた所、 約1.5倍速く(所要時間65%)完了しました。 boinc からの呼び出しで正しく処理できて valid 判定が貰えるかどうかは、 今、試しているところ。
/usr/local/etc/rc.d/boinc.sh forcestartで動くはず。
ldconfig_paths="/usr/lib/compat /usr/X11R6/lib /usr/local/lib /usr/local/lib/gcc/i386-portbld-freebsd4.11/3.4.6" boinc_enable="YES"既に ldconfig_paths が有るなら、 /usr/local/lib/gcc/i386-portbld-freebsd4.11/3.4.6 を追加。
CC=gcc34 CFLAGS=-g3 -O3 CXX=g++34 CXXFLAGS=-g3 -O3 CPP=cpp34 CPPFLAGS=-g3 -O3 LDFLAGS=-g3 -O3 ./configure --with-ssl --enable-debug --with-wx-config=false -O3 -march=pentium3 -mmmx -msse -mfpmath=387 -mfpmath=sse -ffast-math -funroll-loops -ffloat-store -funsafe-math-optimizations -mpreferred-stack-boundary=4 -fomit-frame-pointer
Makefile の LDFLAGS と LIBCURL と LIBS に 余計な -L と -rpath が付くので削除 (LIBCURL の -L/usr/local/lib は残す)。
*** config.h.org Thu May 25 19:34:20 2006 --- config.h Thu May 25 20:42:21 2006 *************** *** 183,195 **** /* #undef HAVE_STD_LOCALE */ /* Define to 1 if max is in namespace std:: */ ! /* #undef HAVE_STD_MAX */ /* Define to 1 if min is in namespace std:: */ ! /* #undef HAVE_STD_MIN */ /* Define to 1 if transform is in namespace std:: */ ! /* #undef HAVE_STD_TRANSFORM */ /* Define to 1 if you have the <strings.h> header file. */ #define HAVE_STRINGS_H 1 --- 183,195 ---- /* #undef HAVE_STD_LOCALE */ /* Define to 1 if max is in namespace std:: */ ! #define HAVE_STD_MAX 1 /* Define to 1 if min is in namespace std:: */ ! #define HAVE_STD_MIN 1 /* Define to 1 if transform is in namespace std:: */ ! #define HAVE_STD_TRANSFORM 1 /* Define to 1 if you have the <strings.h> header file. */ #define HAVE_STRINGS_H 1 *** lib/std_fixes.h.org Fri May 6 09:36:07 2005 --- lib/std_fixes.h Thu May 25 19:55:38 2006 *************** *** 19,24 **** --- 19,25 ---- #ifndef _STD_FIXES_H_ #define _STD_FIXES_H_ + #include <sys/types.h> #ifdef __cplusplus *** lib/md5_file.C.org Tue Nov 22 03:34:28 2005 --- lib/md5_file.C Thu May 25 20:33:42 2006 *************** *** 101,112 **** --- 101,117 ---- CryptReleaseContext(hCryptProv, 0); #else + for(int i=0; i<32; i++){ + buf[i] = random(); + } + /* FILE* f = fopen("/dev/random", "r"); if (!f) { return -1; } fread(buf, 32, 1, f); fclose(f); + */ #endif md5_block((const unsigned char*)buf, 32, out); return 0;
CC=gcc34 CFLAGS=-g3 -O3 CXX=g++34 CXXFLAGS=-g3 -O3 CPP=cpp34 CPPFLAGS=-g3 -O3 LDFLAGS=-g3 -O3 BOINCDIR=/tmp/setiboinc/boinc-client-5.4.7 ./configure --disable-dynamic-graphics --disable-graphics --disable-server --enable-mmx --enable-sse --enable-fast-math --with-ssl -O3 -march=pentium3 -mmmx -msse -mfpmath=387 -mfpmath=sse -ffast-math -funroll-loops -ffloat-store -funsafe-math-optimizations -mpreferred-stack-boundary=4 -fomit-frame-pointer
Makefile の BOINCDIR の設定が狂っているのを直す。
*** configure.org Sun Apr 30 16:04:46 2006 --- configure Thu May 25 21:48:01 2006 *************** *** 21986,21992 **** else printf "OpenSSL found in $ssldir\n"; LIBS="$LIBS -lssl -lcrypto"; ! LDFLAGS="$LDFLAGS -L$ssldir/lib"; cat >>confdefs.h <<_ACEOF #define USE_OPENSSL 1 --- 21986,21992 ---- else printf "OpenSSL found in $ssldir\n"; LIBS="$LIBS -lssl -lcrypto"; ! LDFLAGS="$LDFLAGS"; cat >>confdefs.h <<_ACEOF #define USE_OPENSSL 1 *************** *** 22402,22408 **** lib_is_static="yes" sah_lib_last="${sah_static_lib_last}" ! BOINC_EXTRA_LIBS="${BOINC_EXTRA_LIBS} -L${SSLDIR}/lib ${sah_lib_last}" else --- 22402,22408 ---- lib_is_static="yes" sah_lib_last="${sah_static_lib_last}" ! BOINC_EXTRA_LIBS="${BOINC_EXTRA_LIBS} ${sah_lib_last}" else
本パッチのメンテナンスは打ち切りました。
setiathome_4.07_p3-sse-fftw3-freebsd4.tar.bz2(702KiB) setiboinc.sourceforge.net version
setiathome_4.07_p3-sse-fftw3-naparst-freebsd4.tar.bz2(635KiB) naparst version
boinc-client.bz2(305KiB) Optimized boinc client version 4.68 for i386-unknown-freebsd4.11
パッケージで boinc-client-4.68.20050601_2 を入れた後、 SETI@Home に参加登録
/usr/local/bin/boinc -attach_project [hogehoge] [mogemoge]
し、参加登録完了したところでエラーが出るので一旦終了。 上記アーカイブの中身を /var/db/boinc/projects/setiathome.berkeley.edu/ に展開し、展開された /var/db/boinc/projects/setiathome.berkeley.edu/app_info.xml.fftw3f_pentium3m_optimized か /var/db/boinc/projects/setiathome.berkeley.edu/app_info.xml.fftw3f_pentium3m_naparst を /var/db/boinc/projects/setiathome.berkeley.edu/app_info.xml に cp なり mv なり ln なり ln -s なりして、 もう一度、boinc を始動
/usr/local/etc/rc.d/boinc.sh forcestart
すると、最適化版で処理を行う様になります。
fftw3f は埋め込みにしてあるので、 別途インストールする必要はありません。
マシン起動時に自動的に boinc を開始したければ、 /etc/rc.conf に
boinc_enable="YES"
を追加します。
-O3 -march=pentium3m -mmmx -msse -ffast-math -funroll-loops -ffloat-store -funsafe-math-optimizations -mpreferred-stack-boundary=4 -fomit-frame-pointer
*** client/main.cpp.org Tue Jan 4 08:39:09 2005 --- client/main.cpp Sat Dec 10 23:10:52 2005 *************** *** 40,45 **** --- 40,46 ---- #include <errno.h> #endif + #include "exception.h" #include "diagnostics.h" #include "util.h" #include "s_util.h" *** client/qtest.cpp.org Tue Dec 28 06:58:20 2004 --- client/qtest.cpp Sat Dec 10 23:12:15 2005 *************** *** 243,252 **** spacer = espace; float timeOfOneBase = (baselineTime) / ((float)runCount) * 2e6; ! timeOfOneBase = 5 * arrayCount * log2(arrayCount) / timeOfOneBase; float timeOfOneOpt = (optimizedTime) / ((float)runCount) * 2e6; ! timeOfOneOpt = 5 * arrayCount * log2(arrayCount) / timeOfOneOpt; printf(" FFT %s%d: %.2f percent; %.2f vs %.2f MFlop, %d errs forwards, %d errs backwards \n", spacer, arrayCount, (baselineTime - optimizedTime) / optimizedTime * 100, --- 243,252 ---- spacer = espace; float timeOfOneBase = (baselineTime) / ((float)runCount) * 2e6; ! timeOfOneBase = 5 * arrayCount * (log(arrayCount)/log(2.0)) / timeOfOneBase; float timeOfOneOpt = (optimizedTime) / ((float)runCount) * 2e6; ! timeOfOneOpt = 5 * arrayCount * (log(arrayCount)/log(2.0)) / timeOfOneOpt; printf(" FFT %s%d: %.2f percent; %.2f vs %.2f MFlop, %d errs forwards, %d errs backwards \n", spacer, arrayCount, (baselineTime - optimizedTime) / optimizedTime * 100,
*** client/analyzeFuncs.cpp.org Sat Dec 10 07:06:47 2005 --- client/analyzeFuncs.cpp Fri Dec 16 22:05:06 2005 *************** *** 120,125 **** --- 120,126 ---- static void cache_destroy(); + inline double round( double tmp ) { return (+0.0 <= tmp) ? floor(tmp+0.5) : ceil(tmp-0.5); } static float *acml_fft_comm(int n) // returns pointer to comm array for fft of length n, which is a power of 2. { *************** *** 660,665 **** --- 661,667 ---- } // seti_analyze() + inline int __signbit( double tmp ) { return copysign(1.0,tmp) < 0.0; } static void cache_destroy() { int i; *** client/gaussfit.cpp.org Sat Dec 10 07:06:47 2005 --- client/gaussfit.cpp Mon Dec 12 01:21:40 2005 *************** *** 185,190 **** --- 185,191 ---- return f_ChiSq; } + inline float fminf( float a, float b ){ return (a < b) ? (a) : (b); } static inline float f_GetTrueMean( float fp_PoT[], *** client/malloc_a.cpp.org Sat Dec 10 07:06:47 2005 --- client/malloc_a.cpp Mon Dec 12 04:26:02 2005 *************** *** 51,59 **** void *pmem; void *palignedMem; void **pp; ! #if defined(__SSE__) return ((void *)_mm_malloc(size,alignment)); ! #endif // ensure byteAlignment is positive (if alignment is 0, make it 1) if (alignment < 1) { alignment = 1; --- 51,59 ---- void *pmem; void *palignedMem; void **pp; ! #if defined(__ICC) return ((void *)_mm_malloc(size,alignment)); ! #else // ensure byteAlignment is positive (if alignment is 0, make it 1) if (alignment < 1) { alignment = 1; *************** *** 70,75 **** --- 70,76 ---- pp[-1] = pmem; // store original address return(palignedMem); // return aligned memory + #endif } //Frees memory that was allocated with malloc_a *************** *** 77,91 **** void **pp; if (palignedMem == NULL) return; ! #if defined(__SSE__) _mm_free(palignedMem); return; ! #endif pp = (void **) palignedMem; //pp[-1] pts to original address of malloc'd memory free(pp[-1]); } void *calloc_a(size_t size, size_t nitems, size_t alignment) { --- 78,93 ---- void **pp; if (palignedMem == NULL) return; ! #if defined(__ICC) _mm_free(palignedMem); return; ! #else pp = (void **) palignedMem; //pp[-1] pts to original address of malloc'd memory free(pp[-1]); + #endif } void *calloc_a(size_t size, size_t nitems, size_t alignment) {
reference_work_unit.sah での総処理時間で比較。 setiboinc.sourceforge.net版は、 バイナリパッケージ版と比べ 1.45倍高速化し、 バイナリパッケージ版の 70%の所要時間でした。 naparst版は、 バイナリパッケージ版と比べ 2.31倍高速化し、 バイナリパッケージ版の 43%の所要時間でした。 また、naparst版は、 setiboinc.sourceforge.net版と比べ 1.59倍高速化し、 setiboinc.sourceforge.net版の 63%の所要時間でした。
ofx2csv.lzh(Sat,15 Sep,2007)(4KiB)
ein氏のofx ファイルを csv ファイルに変換するを、 手直しして、対応するタグを増やしたものです。
Microsoft Money の ofx 形式の電子明細書を、 カンマ区切り csv 形式の電子明細書に変換します。 これで、 取引先金融機関が ofx 形式の電子明細書しか発行してくれなくても、 Microsoft Money をわざわざ買ったりせずに、 OpenOffice のままでも大丈夫(実話)。
また、csv のデータとして出力されない口座情報を、 コメントとして出力する様に変更しました。
investor.lzh(Wed,12 Apr,2017)(24KiB)
2017年4月頃の yahoo の https 移行に対応。
2012年8月1日の yahoo の株価情報の仕様変更に対応。
2011年4月25?日の nikkei の URL 変更に対応。
2011年3月24?日の yahoo の株価情報の仕様変更に対応。
2009年4月10日の infoseek の為替情報の仕様変更に対応。
2009年4月6日の yahoo の株価情報の仕様変更に対応。
2009年3月5日の yahoo の株価情報の仕様変更に対応。
2009年2月2日の yahoo の株価情報の仕様変更に対応。
2008年12月1日の日経の投信情報サイトの仕様変更に対応。
株価、為替レート、投資信託の基準価額、を調べて、 指定の下限値以下/上限値以上であったら通知するスクリプト。
crontab で
03 16 * * 1-5 $HOME/bin/investor_check.pl stock ${HOME}/investor/ >> ${HOME}/investor/error.log 2>&1 03 00 * * 2-6 $HOME/bin/investor_check.pl fund ${HOME}/investor/ >> ${HOME}/investor/error.log 2>&1 03 22 * * 1-5 $HOME/bin/investor_check.pl forex ${HOME}/investor/ >> ${HOME}/investor/error.log 2>&1
としてやれば、毎日1回ずつチェックして、 結果を "${HOME}/investor/[タイムスタンプ]" に出力する。 標準状態ではメールでの通知は切ってあるので、 アラートメールで通知したければ適当に調整されたし。
多言語対応(m17n) の国際化(i18n) エディタ、 vim +iconv ですが、 vim の日本語化版 jvim と比べると、 やっぱり +multi_byte の処理が弱いです。 以下のスクリプト群は、 kaoriya パッチを使わずに オリジナルのままの vim7 以降にて、 日本語処理を幾らか強化するスクリプト群です。
# バージョンアップ(portupgrade とか apt-get とか)毎に 香り屋パッチ当てするのは面倒なので、 オリジナルのままとかバイナリパッケージのまま使いたい、 とか、 サーバや共有計算機などで使っているので、 環境設定の変更は出来るけれど パッチ当てとかソフトウェアの追加とかするわけにはいかない、 とか、 香り屋パッチが非対応の最新版 vim を使いたい、 とか、 そんな時の為に。
vimrc_autofenc(Sat,30 Apr,2022)(9KiB)
日本語で書かれたファイルの編集用の文字コードを自動判定します。 また、モードラインでの文字コード指定に対応します。
使い方:
このスクリプトの内容を ~/.vimrc に追加してください。
modeline で文字コードを指定する場合、
vim:set fencs=euc-jp nomodified:
等と指定してください。 nomodified を忘れると、痛い事になる場合があります。
日本語を含まないファイルの場合は、 システムデフォルトの文字コードとして扱います。 注意: OpenBSD だと システムデフォルトの文字コードが latin1 になっていますので、 デフォルト文字コードも latin1 になります。
備考:
ロケールを UTF-8 にしている場合は、 UCS-2 と UCS-2LE は自動判定されません(できません)。
web で見つかる、文字コード自動判定スクリプト(香り屋系?)だと、 日本語を含まないファイルを編集する場合 ISO-2022-JP とか ISO-8859 とか判定してしまいます。 また、ファイルサイズが 0 のファイルを編集する場合 なにか適当な文字コードで処理してしまい、 その後に日本語を追加すると ISO-2022-JP とか ISO-8859 とか なにか適当な文字コードとかで保存されてしまいます。 さらに、モードラインで CP932 を指定した場合に、 ファイル内に特定の文字を含み かつ内部文字コードが euc-jp になっている場合は、 ファイルの文字コードを euc-jp として処理してしまいます。
matchit2.vim(Wed,13 Mar,2008)(25KiB)
matchit2.noesc.vim(Sun,25 Mar,2012)(25KiB)
以下の機能を、日本語対応にします。
% 対応する括弧の検索(これは jvim でも multi_byte の括弧非対応) w W 次の単語の先頭へ移動 e E 次の単語の最後尾へ移動 b B 単語の先頭へ移動 * カーソル位置の単語を後方検索 # カーソル位置の単語を前方検索 y{motion} 単語を yank d{motion} 単語を削除 c{motion} 単語を削除して insert モードへ移行
使い方:
matchit2.vim か matchit2.noesc.vim を ~/.vim/plugin/ か ~/.vim/after/plugin/ に置いて下さい。 vim の次回起動時から、 w e b % * # y d c の各コマンドが日本語対応になります。
既知バグ:
vim と jvim の違いとしては、上記だけでなく下記もありますが、 下記の物は、 m17n とか i18n とか日本語化とかは無関係の vim の仕様なので、 vim オリジナルのまま、いじっていません。
ロケール jvim だとロケールは英語のみ。 vim だとロケールは多言語(i18n)。 なんか、普通に考えると逆なんではないかと思ってしまうが。 日本語入力 jvim だと、組み込み onew。 vim だと、ターミナル依存。 im が使えない時は vim だと日本語入力ができず痛い。kon とかリモートシェルとか。 $ 行末へ移動。 jvim だと行末の文字の上、vim だと行末の改行記号の上。 これは、set selection=old でコンパチになる。 v V ビジュアルモード(領域選択)。 jvim だと V で選択モードに入っても v で選択モードの解除になる。 vim だと V で選択モードに入ったら v だと選択モードの変更になる。 jvim だとビジュアルモード時は行末にスペースが表示されるので、 空行があっても選択しているか否か判るのだけれど、 vim だとビジュアルモードだろうがそうでなかろうが、 set listchars=eol:$ の設定いかんで行末が表示されないので、 空行があると選択してるのだかいないのだかわからない。 :help ヘルプ。 jvim だと help 表示時は操作方法が専用のモードになる。 vim だと help ファイルの ReadOnly 編集モードになる。 u U ~ 大文字小文字変換。 jvim だと平仮名片仮名変換も行われる。 vim だと純粋に大文字小文字変換のみ。 あいまい検索 jvim だと、いわゆる半角文字と全角文字を区別せずに検索できる。 vim だと無理。 「aAaA」辺りが、いっしょくたに検索できるかどうかと言う話。 罫線 jvim だと、罫線描画機能が追加されている。
関連リンク:
SearchComplete2.vim(Mon,10 Nov,2008)(3KiB)
SearchComplete.vim の eregex.vim 用版。 eregex.vim版の検索コマンド / で検索文字列を入力する時に、 タブキーにて文字列補完ができます。
使い方:
SearchComplete2.vim を ~/.vim/plugin/ か ~/.vim/after/plugin/ に置いて下さい。 vim の次回起動時から、有効になります。
monday.vim(Mon,13 Jan,2009)(8KiB)
Stefan Karlsson 氏原作の インクリメント/デクリメント機能 monday.vim に 「名無しの vim 使い」氏パッチを追加した上に、 拙作デバッグ&機能追加を行った物。
数値だけでなく、 曜日や月名称のインクリメント/デクリメントが出来ます。
拙作改造部分1: 日本語名でもインクリメント/デクリメントが出来ます (月→火、とか、睦月→師走、とか)。
拙作改造部分2: カーソル位置が単語の先頭とずれていても、正しく処理できます。
使い方:
monday.vim を ~/.vim/plugin/ か ~/.vim/after/plugin/ に置いて下さい。 vim の次回起動時から、有効になります。
sessionsaver.vim(Fri,29 Jan,2010)(5KiB)
わたなべひろふみ 氏原作の Vimのセッションを自動的に保存/復元(Session Saver)に なんか色々機能追加を行った物。
使い方:
sessionsaver.vim を ~/.vim/plugin/ か ~/.vim/after/plugin/ に置いて下さい。
カレントディレクトリからセッションの復元を行った場合は、
vim 終了時に
カレントディレクトリにセッションを保存します。
「カレントディレクトリからセッションの復元を行った場合」以外は、
vim 終了時に
共通のワークエリア(~/.vim/tmp/)にセッションを保存します。
カレントディレクトリにセッションの保存するモードにするには、
vim 上から「:mks! LastSession.vim」を実行し、
それから一旦 vim を終了して
vim --cmd "let g:force_resume_current = 1"
にて vim を起動しなおすと、
カレントディレクトリにセッションを保存するモードに切り変わります。
セッションの復元をするには、
vim --cmd "let g:force_resume_current = 1"
とすると
カレントディレクトリからセッションの復元を試み、
駄目なら
共通のワークエリア(~/.vim/tmp/)から復元を行います。
vim --cmd "let g:force_resume_last = 1"
とすると
共通のワークエリア(~/.vim/tmp/)から復元を行います。
実際に使う際には、
上記の vim の起動コマンドを
シェルスクリプト等のエイリアスに登録した方が便利でしょう。
それから、
セッションを保存してあるファイル(LastSession.vim)には
セッション保存先ディレクトリも記録されているので、
セッションを保存してあるファイル(LastSession.vim)を他のディレクトリに移して
移転先でレジュームを行っても、移転前のディレクトリに
セッションを保存してしまいます。
LastSession.vim 内の「cd ほげほげ」の行を消せば、移転もできます。
cpp.vim(Mon,11 Aug,2008)(4KiB)
filetype cpp の時に、 ラベル行とマクロ行のインデント量を、 vimデフォルトの0から、 直前のインデント量から半コマ戻し、 に変更するスクリプト。
K&R系とか ANSI C FAQ 系だと、 vim デフォルトのインデント量ではなく、 このスクリプトで変更したあとのインデント量だったと思う。
使い方:
cpp.vim を ~/.vim/indent/ か ~/.vim/after/indent/ に置いて下さい。 ~/.vimrc 辺りに filetype indent on を追加すると、有効になります。
既知バグ:
vim_macro.lzh(Sat,30 Apr,2022)(3MiB)
個人的にお気に入りのスクリプトを丸ごと固めたもの。 拙作のスクリプトや拙作改造版の他、 他の方の製作されたスクリプトや、そのデバッグ版も同梱されています。 原作者や権利関係は、 各ファイルの先頭に書いてありますので、それを見てください。
eregex.vim AKUTSU toshiyuki 氏作。 正規表現を、標準的な拡張正規表現と互換にします。 拙作改造部分: 後方検索を追加、再置換を追加、hlsearch が効く様に修正、しています。 keisen.vim AKUTSU toshiyuki 氏作。原作のまま。 罫線を引けます。 mark.vim Yuheng Xie 氏作。 拙作改造部分: syntax on 時に、syntax のキーワードと重なる部分が マーク表示できなくなっていた点を、表示できる様に修正、 かわりに正規表現が使えなくなっています。 markjump.vim Robert KellyIV 氏作。 ファイル中にマークを挿入/検索します。 拙作改造部分: セレクトモードの選択をしない様に修正しています。 SessionSaver サスペンド/レジューム機能 「Just another Ruby porter,」氏原案、 拙作デバッグ&機能追加。 既知バグ: レジューム時に、 画面分割モードでは syntax のハイライティングが復帰されません。 これは vim の仕様もしくはバグと思われます。 showmarks.vim Anthony Kruize 氏、Michael Geddes 氏作。 ジャンプ位置のマークを表示します。 動作が重いのが難点。 拙作改造部分: 起動直後から表示するように修正。 vimspell.vim Mathieu Clabaut 氏作。原作のまま。 綴り間違いを検索できます。但し重いです。 ZoomWin.vim Charles Campbell 氏作。原作のまま。 バッファ分割状態とバッファ全画面表示状態を、 ショートカットキーで交互に切り替えられます。 SearchComplete2.vim Chris Russell 氏作。 検索コマンドで検索文字列を入力する際に、タブキーで補完ができます。 拙作改造部分: eregex.vim 対応化。 C++ 追加シンタックス 自作。 色を好みに変更。 演算子のハイライティングを追加してみましたが、目茶苦茶重いので封印。 doxygen 追加シンタックス 自作。 色を好みに変更しただけです。 C++ 追加インデント 自作。 プリプロセッサ指定とラベルのインデントを、半コマ戻しに変更しました。 monday インクリメント/デクリメント機能 Stefan Karlsson 氏原作、「名無しの vim 使い」氏パッチ、及び拙作デバッグ&機能追加パッチ。 数値だけでなく、曜日や月名称のインクリメント/デクリメントが出来ます。 拙作改造部分: 日本語名でもインクリメント/デクリメントが出来ます (月→火、とか、睦月→師走、とか)。 matchit2 日本語対応 移動 検索 機能 拙作。 % 対応する括弧の検索 w 次の単語の先頭へ移動 e 次の単語の最後尾へ移動 b 単語の先頭へ移動 * カーソル位置の単語を後方検索 # カーソル位置の単語を前方検索 の各機能を、日本語対応にしています。 yankround ヤンクレジスタの履歴操作を簡単にする LeafCage 氏原作、 拙作機能追加。
使い方:
個人用の設定ファイルを丸ごと固めただけなので、 unix系ならば、ホームディレクトリの下に展開するだけです。 既に個人設定をお持ちの方は、必要なファイルを保存してから、作業して下さい。 MS-Windows系は使った事無いので不明。
本ソフトのメンテナンスは打ち切りました。
middleman-1.9.1.patch.bz2(Wed,11 Oct,2006)(2KiB)
middleman-1.9.1.patch2.bz2(Fri,25 May,2007)(3KiB)
middleman-1.9.1.patch4.bz2(Fri,27 Jul,2007)(5KiB)
middleman-1.9.1.patch5.bz2(Wed,28 Nov,2007)(6KiB)
middleman-1.9.1.patch6.bz2(Mon,28 Jan,2008)(7KiB)
web フィルタの Middleman filtering proxy server (別称は middle-man とか mman とか)に、 バグとか不都合とか見つけたので、色々といじってみました。
patch1。 バッファオーバーランして、 スタックを破壊して落ちるバグを見つけてしまったので治しました。
patch1 を適用しても、 ユーザー定義の実行可能型 template 機能にも、 コア吐いて落ちるバグを見つけました。 システム定義 template 機能か ユーザー定義のファイル指定 template 機能 だけを使っていれば平気なので、 気が向くまで治さないと思う。
patch2。 webブラウザからmmanの環境設定をしようとした時に、 mmanのフィルタ名やら何やらに日本語が混じっていると、 webブラウザが文字コードの判定を間違える事があったので、 charset=UTF-8 を明示する様にしてみました。
patch3。 特定のサイトでデータ転送中に転送が切れるバグを治そうとして失敗。 のちの patch5 で、取り敢えずは解消された。
patch4。 SOCKS4a に対応しました。 tor で、privoxy を使わずに mman だけで DNS の匿名化まで行えます。
patch5。 サーバが返す text/html の中に NUL(\0) 終端文字が混じっていると、 終端文字以降に rewrite ルールが適用されないバグがあったので治した。 サーバが応答を Transfer-encoding: chunked で返した時に、 rewrite ルールが適用されると、 チャンクサイズがでたらめになる(再計算していない)バグを見つけたものの、 チャンクサイズの再計算を正しく行う様にデバッグしている余裕が無いので、 chunked で応答が来ない様に HTTP/1.0 に変更。 patch4 の内容が、OpenBSD 非対応だったので、OpenBSD 対応に修正。
patch6。 本来の URL に .. が混じっていた時に、 mman が特殊コマンドとみなして処理してしまうバグと言うか仕様と言うかがあり、 NaviTime 辺りで派手にこけていた。 ので、 ピリオドが3個以上続いた場合か、 ピリオドの前の文字列が特殊コマンド名と一致しない場合は、 スルーする様に修正した。 真っ当に考えると、 環境設定に特殊コマンドを無視する URL を記述できる様にすべきだろうが、 その仕様変更の作業量を考えると、 mman をフルスクラッチで書き治した方が良い気がしてくるので、 付け焼き刃で対応……。
ついでに拙作 mman 環境設定
本ソフトのメンテナンスは打ち切りました。
syslogd.patch.gz(1KiB)
OpenBSD 4.0-RELEASE や 4.2-RELEASE の syslogd では、 facility に想定外の物(25以上)が来た時に無視します (どっちかって言うと OpenBSD のバグ……なのか、 OpenBSD の仕様が厳しすぎるのか)。 で、IO-DATA の無線LAN 機器の syslog 機能を使うと、 facility に 26 とか 27 とか 52 とか言う数値を突っ込んで来るので、 ログに記録されません。
その辺を修正するパッチ。
本ソフトのメンテナンスは打ち切りました。
OpenBSD44.libc.getpwent.patch.gz(1KiB)
OpenBSD 4.4-RELEASE を YP(NIS) のクライアントとして運用する際、 /etc/passwd, /etc/master.passwd にて 「+@netgroup_name」エントリや「+nis_user_name」エントリを使うと、 そのエントリのパースを間違えて、 YP(NIS) からユーザ名を取得できない、多分バグ、があります。
その辺を治すパッチ。 OpenBSD のソースの cvs を見た感じだと、 OpenBSD 4.3 から 4.4 に移行する際の getpwent.c Revision 1.35 にて 重複したコードをまとめた際に、間違えたのだと思う。
本ソフトのメンテナンスは打ち切りました。
OpenBSD44.usr.sbin.bind.DontReply_REFUSED.patch(1KiB)
本パッチは、OpenBSD 4.4-RELEASE 同梱の bind 9.4.2-P2 をベースにしています。 本家の bind9 や、別の OS に同梱されている物だと、 微妙にずれているかもしれません。
2008年頃から? 送信元 IP アドレスを偽造して NS . の DNS query を送りつけ、 DDoS を行わせるアタックが大流行している模様です。 それへの対応として、REFUSED パケットすらドロップするパッチです。 副作用として、 正当な query で REFUSED が発生した場合でもドロップしてしまい、 クライアントがタイムアウトするまで待たされた上に、 リトライをかけてくる場合がある問題があります。 REFUSED をドロップまでするのは、 RFC の面から見ても過激すぎる対応だと思います。
BSD Diary Version 0.8091 「パケットドロップするのはデメリットの割りには大したメリットもないんで、 refuse 返した方がいいんでね?」 参照の事。
umix-1.0.2.patch.tar.bz2(1KiB)
CUI で音量を設定するツールの umix ですが、 ioctl するのに符号無しで行うべき所を、 符号有りで処理してしまっているバグ?があります (……、 GNU/Linux の man 見ると「符号有り」って書いてありますが、 /usr/include 見ると「符号無し」になっています)。
その辺を修正するパッチ。
本パッチのメンテナンスは打ち切りました。
XPostitPlus-2.3.i18n.patch2.bz2(4KiB)
後述のバグが治らず、あきらめました。 fusenshi でも使ってください。 なお、fusenshi の標準設定だと、 ネットワーク経由で遠隔からの操作が許可されていますので、 env WITHOUT_NETWORK=yes make した方が良いかと思われます。
XPostitPlus(総本山不明)を、I18N 化するパッチです。 日本語依存の処理は、していないので、多分 I18N。 はっきり言って、車輪の再発明なのだけれども、 以前に I18N 化した方のホームページが消え去っている上に web キャッシュにも残っていないし。
※ FreeBSD ports のパッチと、 fj.sources に流れていた HOSAKA.Eiichi 氏の xim 有効にすると大きさがこける問題の修正パッチも、 同梱しています。
お約束の XtSetLanguageProc() だけでは日本語化できず、 片手間に1週間以上かかって判明したのが、 XtCreatePopupShell() で wmShellWidgetClass しちゃうと xim が通らねぇ、とか言う現象。 topLevelShellWidgetClass なら通ったのだが……。
それから、 明示的に SetArg(XtNfontSet, text_font); SetArg(XtNinternational, True); しないと、 日本語の表示ができなかった辺りもよく判らん。
再描画が行われなくなったり、コア吐いて落ちる件は、 Xaw のかわりに Xaw3d を使う様にしたら、問題が発生しなくなった。 もう治すの面倒なので治さない。
もっとも、以前、xfig では逆に Xaw3d を使うと落ちて Xaw なら平気、 と言う事があったけれど……。
本パッチのメンテナンスは打ち切りました。
xmcd-3.3.2.fbsd_ports.6.patch1.bz2(2KiB)
xmcd-3.3.2 で CDDB に送信しようとした時に、 Disc Note とか Track Note 辺りの任意記入の欄を未記入にすると、 NULL ポインタの指す先にアクセスして SIGSEGV で落ちるバグが有ったので、 治しました。
ついでに、 利用する CDDB を cddb.com から freedbtest.dyndns.org に 変更しました。
でも xmcd は日本語データベース非対応です。 無理矢理に日本語を通すと、滅茶苦茶なデータにしてくれます。 素直に grip とか easytag とか使った方が良いと思う。
本ソフトのメンテナンスは打ち切りました。
fusenshi-0.9.0.patch1.bz2(1KiB)
fusenshi を、 GTKネイティブの input module と共に使っている場合、 付箋紙が1枚も無い状態から付箋紙を作成すると、 GTK+-2 側の IM が原因で、 毎回 2MiB ずつくらいメモリリークします。
この問題を、fusenshi 側で強引に何とかするパッチ。
このパッチを使わなくても、 使用している入力モジュールが XIM対応ならば (例えば uim の場合、uim-xim を使う)、 GTK_IM_MODULE=xim して xim な input module を使えば、 メモリーリークしなくなります。
ちなみにこの問題、 GTK+-2 で GTKネイティブの IM を使っているアプリケーションは、 全て発症します。
GTK側の問題なので、fusenshi の本家に連絡するか否か、 迷う所なんだよなぁ……。
本ソフトのメンテナンスは打ち切りました。
libusb-0.1.12.patch.bz2(2KiB)
libusb-0.1.12 には、 既に接続している USB デバイスがある時に 再度 USB デバイスの検索を行うと、 接続済みの USB の管理テーブルを破壊する バグもしくは仕様があります。
libftdi の ftdi_usb_open() を使うと、 必ずこれを引き当てて、USBデバイスとの接続を破壊してくれます。
# ftdi_usb_open() でエラーが返ってきた場合、 既に ftdi_usb_open() に成功していた他のデバイスの管理テーブルは全て、 破壊されています。
それを修正するパッチ。FreeBSD と GNU/Linux用。 Mac OS X 用は計算機が無いため作っていません(作れません)。
それから、GNU/Linux用 libusb の場合、 usb_open() すると、オープンに成功しようが失敗しようが、 常に成功を返すという痛いバグがありますが、それも修正しています。
本ソフトのメンテナンスは打ち切りました。
libftdi-0.10.patch.bz2(1KiB)
libftdi は、 FTDI なデバイスを複数台接続していた場合に ftdi_usb_open() を複数回実行した時の挙動が、 BSD系と GNU/Linuxで異なっています。
FreeBSD の場合、
struct ftdi_context ftdic[n]; for (int i = 0; i < n; i++) { ftdi_init( &(ftdic[i]) ); ftdi_usb_open( &(ftdic[i]), 0x0403, 0x6001 ); }
の様にすると、ftdic[0] 〜 ftdic[n] は、 1台目、2台目、……n台目のデバイスと接続されます。
ところが GNU/Linux の場合、全く同じソースであるにも関わらず、 ftdic[0] 〜 ftdic[n] は全て1台目のデバイスと接続され、 しかも ftdic[0] 〜 ftdic[n-1] は壊れた状態になります。
このパッチは、GNU/Linux でも FreeBSD と同じ動作に修正します。 まぁ libftdi の説明書やソースのコメントを読む限りでは、 「ftdi_usb_open() は先頭のデバイスと接続します」って 書いてあるのだけれどね。 「先頭のデバイス」って、 「未接続の先頭」(FreeBSDの挙動)なのか 「接続・未接続問わず、先頭」(GNU/Linuxの挙動)なのか、 どっちなのだろう?
なお本パッチを利用する場合は、 libusb の活線挿抜対応のバグ修正パッチ も 適用する必要があります。
また、本パッチを適用していても、 BSD系では若番から順番に接続され、 GNU/Linuxでは老番から順番に接続されます。
例: USBバス番号 バス内での機器番号 FreeBSDの場合 GNU/Linuxの場合 本パッチ適用前のGNU/Linux 1 2 優先順位1 優先順位8 接続されない 1 3 優先順位2 優先順位7 接続されない 2 2 優先順位3 優先順位6 接続されない 2 3 優先順位4 優先順位5 接続されない 3 2 優先順位5 優先順位4 接続されない 3 3 優先順位6 優先順位3 接続されない 4 2 優先順位7 優先順位2 接続されない 4 3 優先順位8 優先順位1 これのみと接続される バス内での機器番号の1は、ルートハブに割り当てられる。
本ソフトのメンテナンスは打ち切りました。
代替? jemalloc の opt.junk 使えばいいんでね?
glibc-2.3.2.ds1.patch_malloc_conf.lzh(11KiB)
BSD系の malloc()/new/new[]/realloc()/free()/delete/delete[] では、 環境変数 MALLOC_OPTIONS か シンボリックリンクファイル /etc/malloc.conf か グローバル変数 char* _malloc_options で J を指定すると、 確保したメモリや解放したメモリが 0xD0 でゼロクリア (ゼロじゃないけど)されます。 (解放したメモリが消去されるのは、 2008年6月時点では FreeBSD のみ…… NetBSD はどうだっけ?)
これにより、 渡されるメモリが 0x00 で初期化してある事を想定しているバグや、 解放したメモリに再度アクセスするバグを、 発見し易くなります。 (その手のツールは、 valgrind とか ElectricFence とか mpatrol とか ccmalloc とか leaktracer とか、 色々ありますが、0x00 で初期化してある事を想定しているバグを みつける機能は、どれにも無かったかと思います)
また、確保したメモリを一旦塗りつぶす為、 Linux Memory Overcommit の問題が起きにくくなります。たぶん。
あとはまぁ、 作業領域を初期化せずに使って、 そのままデータファイルとして出力する様なプログラムにおいても、 データの空き領域が単一のデータで埋まってくれるので、 データを保存する時の圧縮効率が大幅に上がる場合があります……、 そういう事はそのプログラムがちゃんと処理すべき事なので、 この効果は期待すべきではないのですけれども。
しかしながら、GNU/Linux の GNU libc にはその機能はありません。 なので、その機能を付けるパッチを作ってみました。
なお、本パッチでは、引数が BSD系非互換の独自仕様になっています。
で、さっそく。 glibc の calloc() が、 malloc() されたメモリが chunk_is_mmapped() なら 0x00 でクリアされている事を前提にしている仕様を発見。 glibc内から glibc内の malloc() を使っているケースだから、 malloc() したメモリがゼロクリアされている事を前提にしても、 問題ではなく「正当な」仕様ですが。
さらに、 glibc の calloc() が、 malloc() で得たメモリが !chunk_is_mmapped() でも (sbrk で割り当てられた場合でも)、 それが今回の malloc() で拡張された領域ならば、 0x00 でクリアされている事を前提にしている仕様を発見。 brk() のメモリがゼロクリアされる事って保障されていたっけ?
本パッチでは、上記の2件両方共対応しています。
acpan_mouse.freebsd64.diff(5KiB)(Mon,03 Aug,2009)
Logitech(Creative Labs) のチルトホイール付きマウスに、
ホイールをチルトしても何も起きないし、
xev で確認しても何も起きていないタイプが、
存在します。
# 手元に有るものだと、
バッファローコクヨサプライ(OEM:Logitech(Creative Labs)) BSMOU02YM(WH)。
これは、 一般的なマウスではホイールチルトが第4・5ボタン もしくは第6・7ボタンに割り当てられているのに対して、 これらのマウスではチルトが Consumer: AC Pan と言う 全然別のイベント?に割り当てられており、 マウスドライバが対応していない為です。
本パッチは、 この AC Pan イベント?をボタン操作として認識させるパッチです。
使い方: % cd /usr/src/sys/dev/usb % patch -p6 -N < acpan_mouse.freebsd64.diff あとは、通常のカーネル再構築と同様。 patch実行時は、必要に応じて適宜 sudo を付けて下さい。
備考:
本マウスでは、
となっていた。 なので、拙作パッチ側で、「離した」イベントを捏造している。
acpan_mouse.make_button_delay.freebsd64.diff(5KiB)(Wed,16 Dec,2009)
acpan_mouse.make_button_delay.freebsd8s.diff(3KiB)(Tue,26 Jul,2011)
一部のチルトホイール付きマウスにて、
特定のアプリケーションでホイールチルト(第6/7ボタン)が
使えない事があります。
# 手元に有るものだと、
Firefox3/3.5 にて、
アクロス AMS-SS/SW/SB(中身は Ione Lynx-R9 Gaming Mouse1600 らしい)の、
ホイールチルトが無視されます。
これは、 ホイールチルトを操作すると マウスが勝手に第2ボタン同時クリックの情報を送ってきてしまい、 その為に、アプリケーションが 「第2ボタンの操作中なのでそれ以外のボタン操作を無視」 と言う処理をしてしまう為です。
本パッチは、
第1〜3ボタンと第4以降ボタンの同時クリック情報が送られてきた時に、
先に第4以降ボタンのクリックイベントのみを発生させ、
直後に第1〜3ボタンのクリックイベントのみを発生させる事で、
ホイールチルトを効かせるパッチです。
# 副作用として、
「第4以降ボタンの操作中なので第1〜3ボタン操作を無視」
と言う事が発生する場合があります。
本家 FreeBSD 10-CURRENT 2012/08/?? にて、
同等の機能が実装されていました。
本パッチは不要になりましたので削除します。
loader.dosext.freebsd8.patch(3KiB)(Thu,28 Jul,2011)
loader.dosext.freebsd10C_2012319.patch(3KiB)(Thu,29 Mar,2012)
FreeBSD loader が、
拡張パーティションにインストールした FreeBSD を
読み込める様にするパッチです。
別途、
拡張パーティションにインストールした FreeBSD loader を
読み込む手段が必要です。
例えば GRUB2(要 insmod ufs2)。
[FreeBSD-users-jp 91326] (桂島@横浜 氏、Tue, 1 Jan 2008) の loader 改造パッチ(05:DOS Extend(CHS) のみ対応)を元に、 0F:DOS ExtendedX(LBA) にも対応する様に追加改造したものです。
本ソフトのメンテナンスは打ち切りました。
Firefox3 専用版。 個人的な好みと技術上の都合により後述を変更した以外は、 原作版 0.18 と同様の処理を行う版です。
For Firefox3 Only. Checking the root-CA of a connecting server.
Firefox3 専用版。 パラノイアに走って、 発行先の CN と OU、 中間 issuer 全部の FingerPrint と CN と OU と O、 まで判別する様にした版。
For Firefox3 Only. It became paranoia. Checking all FingerPrint, CN, OU and O, including middle issuer's its.
上記 petname_tool-0.18-fx.firefox3.mod3.xpi を Firefox2に再移植した Firefox2専用版。
For Firefox2 Only. Backporting from petname_tool-0.18-fx.firefox3.mod3.xpi to Firefox2.
Firefox Add-on の
Petname Tool
が Firefox3 に未対応なので、
自前で Firefox3 に対応させてみました。
(Mon,20 Oct,2008、
Firefox3版 petname_tool が公開されている事を確認したので修正)
の Firefox3版がサーバ証明書の一致検査をしない仕様に変更されたので、
Firefox2版 petname_tool と同様にサーバ証明書の一致検査を行う様に
改造してみました。
Petname Tool とは何ぞや、と言う話は
高木浩光@自宅の日記 2007年09月30日 フィッシング回避補助ツール「petname tool」
あたりを参照されたし。
注意: Petname Tool は、 「HTTPS で接続したサーバ(が提示した証明書)が、 事前に登録したサーバ(の証明書)と同じものであるかどうか」 を確認する手助けとなる能力しかありません。 接続したサーバもしくは通信路が安全だったり信用できるかとか、 閲覧している内容が信用できるかとか、 そういった事を確認する能力はありません。
原作版から拙作Firefox3用版に移行する際には、 登録データの変換を行う必要があります(手作業)。 Firefox2 にて(あるいはテキストエディタで bookmarks.html を編集して)、 description の項目を keyword(ShortcutURL) にコピーしてから ブックマークのインポートを行なって下さい、 あるいはブックマークの Import を行ってから Firefox3 にて description の項目を keyword にコピーしても構いません。 Firefox3 から Firefox2 に移行する場合は、 ブックマークの Export をすれば、そのまま使えると思います。
mod1版の登録データは mod3版でも使えますが、 mod3版の登録データは mod1版では使えません。
Javascript の書き方をまともに勉強した事など無く、 勢いと思いつきとノリだけで、 原作版のソースと mozilla.org のリファレンスマニュアルとサンプルと Add-ons のソースを 見ながら継ぎはぎして作ったので、 バグが無いかとか安定して動くかとかセキュアかとか高速かとか、 その辺は知りません。 自分で使う際に困らない程度に動作確認してはいますが。
既知バグ:
オリジナルと仕様が変わった箇所:
内部情報的な話:
蛇足その1: Firefox3 で SSL通信時に ロケーションバー? URLバー?の色を変えたい場合は (Firefox2 だと変わる)、 以下を chrome/userChrome.css か stylish Add-on に追加する。 以下の設定だと、 真っ当な SSL だとクリーム色に、 強度が低いと黄色に(見た事無いけれど)、 アヤシイ SSL(見た事無いけれど)もしくは未確認だと赤色に、 なる筈。
#urlbar[level][pageproxystate], #urlbar[level][pageproxystate], #urlbar[level][pageproxystate] > :not(#identity-box):not(#urlbar-icons), #urlbar[level][pageproxystate] > :not(#identity-box):not(#urlbar-icons), #urlbar[level][pageproxystate] > :not(#identity-box)>:not(dropmarker):not(progressmeter):not(.progress-bar), #urlbar[level][pageproxystate] > :not(#identity-box)>:not(dropmarker):not(progressmeter):not(.progress-bar) { color: #000000 !important; background: #F5BEBE !important; } #urlbar[level="high"][pageproxystate="valid"], #urlbar[level="high"][pageproxystate="valid"], #urlbar[level="high"][pageproxystate="valid"] > :not(#identity-box):not(#urlbar-icons), #urlbar[level="high"][pageproxystate="valid"] > :not(#identity-box):not(#urlbar-icons), #urlbar[level="high"][pageproxystate="valid"] > :not(#identity-box)>:not(dropmarker):not(progressmeter):not(.progress-bar), #urlbar[level="high"][pageproxystate="valid"] > :not(#identity-box)>:not(dropmarker):not(progressmeter):not(.progress-bar) { color: #000000 !important; background: #F5F6BE !important; } #urlbar[level="low"][pageproxystate="valid"], #urlbar[level="low"][pageproxystate="valid"], #urlbar[level="low"][pageproxystate="valid"] > :not(#identity-box):not(#urlbar-icons), #urlbar[level="low"][pageproxystate="valid"] > :not(#identity-box):not(#urlbar-icons), #urlbar[level="low"][pageproxystate="valid"] > :not(#identity-box)>:not(dropmarker):not(progressmeter):not(.progress-bar), #urlbar[level="low"][pageproxystate="valid"] > :not(#identity-box)>:not(dropmarker):not(progressmeter):not(.progress-bar) { color: #000000 !important; background: #F5F600 !important; }
蛇足その2: 中間証明書がころころ変わって、 Petname の mod2版もしくは mod3版で別の証明書と判定されてしまう件。 結論から言うと、中間証明書のシリアル番号が何パターンか出回っているらしい。 中間証明書を手元のブラウザに入れてシリアル番号を固定してしまえば、 常に同じと判定されるのだけれども、それもどうかと思うし……、 そこまでするなら、Petname Tool 使わなくても、 サーバ証明書を全部ローカルに登録してしまえば。
根:これはローカルの計算機で固定されているので変わらない。 74:2C:31:92:E6:07:E4:24:EB:45:49:54:2B:E1:BB:C5:3E:61:74:E2 ; Class 3 Public Primary Certification Authority; "VeriSign, Inc." パターン1:www.verisign.co.jp 29:B7:3D:9F:75:01:B8:C0:AD:FD:5E:43:37:A3:90:D1:AD:20:5F:48 VeriSign Class 3 Public Primary Certification Authority - G5; VeriSign Trust Network; "VeriSign, Inc." Version:3 Serial:57:BF:FB:03:FB:2C:46:D4:E1:9E:CE:E0:D7:43:7F:13 Date:2006/11/08 09:00:00,2021/11/08 08:59:59 B1:80:39:89:98:31:F1:52:61:46:67:CF:23:FF:CE:A2:B0:E7:3D:AB VeriSign Class 3 Extended Validation SSL SGC CA; VeriSign Trust Network; "VeriSign, Inc." Version:3 Serial:2C:48:DD:93:0D:F5:59:8E:F9:3C:99:54:7A:60:ED:43 Date:2006/11/08 09:00:00,2016/11/08 08:59:59 X.500 Name: CN = Class3CA2048-1-48 パターン2:seal.verisign.com 87:50:7F:E5:19:BD:E7:A1:19:AE:A3:2F:77:9D:76:30:5D:7A:69:13 VeriSign Class 3 Public Primary Certification Authority - G5; VeriSign Trust Network; "VeriSign, Inc." Version:3 Serial:58:F3:9E:5C:01:2B:19:47:21:A9:8E:E4:EE:E0:F8:BF Date:2006/11/08 09:00:00,2021/11/08 08:59:59 4A:8A:2A:0E:27:6F:F3:3B:5D:D8:8A:36:21:46:01:0F:2A:8B:6A:EE VeriSign Class 3 Extended Validation SSL SGC CA; VeriSign Trust Network; "VeriSign, Inc." Version:3 Serial:11:2A:00:6D:37:E5:10:6F:D6:CA:7C:C3:EF:BA:CC:18 Date:2006/11/08 09:00:00,2016/11/08 08:59:59 X.500 Name: CN = Class3CA2048-1-48 パターン3:www.verisign.com 7E:7E:02:6F:71:BF:E7:BB:C7:E7:E5:C5:91:B1:91:5C:B6:68:4E:6C VeriSign Class 3 Public Primary Certification Authority - G5; VeriSign Trust Network; "VeriSign, Inc." Version:3 Serial:63:92:6B:8A:8F:40:82:FD:AC:C0:3B:D3:78:29:A6:C0 Date:2006/11/08 09:00:00,2021/11/08 08:59:59 4A:8A:2A:0E:27:6F:F3:3B:5D:D8:8A:36:21:46:01:0F:2A:8B:6A:EE VeriSign Class 3 Extended Validation SSL SGC CA; VeriSign Trust Network; "VeriSign, Inc." Version:3 Serial:11:2A:00:6D:37:E5:10:6F:D6:CA:7C:C3:EF:BA:CC:18 Date:2006/11/08 09:00:00,2016/11/08 08:59:59 X.500 Name: CN = Class3CA2048-1-48
Firefox Add-on の cookie button の、禁止/許可/永続許可(?)のアイコン表示が小さすぎて見にくいので、 見やすくなるようにアイコンを描きなおしてみました。 それだけ。
diffregex.cc Sat,18 Oct,2008 (3KiB)
正規表現でファイル比較をします。
第1引数に中身が正規表現のプレーンテキストのファイルを指定し、 第2引数にプレーンテキストのファイルを指定します。
普通の diff と違い、出現順序は不問です (正規表現だとソートができないから)。
lpg2png.cc Sun,04 Jan,2009 (16KiB)
工画堂スタジオの 「BB TwinPack」 「ブルーフロウ」 「ブルーフロウ ファンディスク」 「ブルーブラスター」 「ブルーブラスター ファンディスク」 で使われている画像形式の lpg画像を、 png形式に変換します。 聞くところによると、「羅刹 弐」も同じ形式らしいです。
BB TwinPack BF パートの「凄い難しい」レベルで全クリした後に 工画乃郷をのぞいてみたら、 エンディング絵が2パターンあるとか書いてあって、 もう1周する気力が無かったので、勢いで作った。
バグではなくて仕様です: lpg形式では、 256色インデックスカラー + 8bitアルファ値、 と言う形式があるみたいですが、 PNG形式で多階調アルファを持てるのは 24bitカラー + 8bitアルファ のモードだけです。 なので、インデックスカラーから24bitカラーへ勝手に変換します。
fontforge_plugin_jisx0212_jisx0213.c Fri,08 Oct,2010 (14KiB)
フォントエディタ fontforge にて、 JIS X 0212, 0213-1, 0213-2 などのフォントを、 UCS/Unicode フォントに変換できる様にするプラグインです。
インストールの仕方:
fontforge のソースを展開する。
上記 fontforge_plugin_jisx0212_jisx0213.c を
fontforge のソースを展開したディレクトリの plugins/ ディレクトリに
入れる。
plugins/ ディレクトリにて、
make ./.libs/fontforge_plugin_jisx0212_jisx0213.la する。
出来上がった .libs/fontforge_plugin_jisx0212_jisx0213.* を、
fontforge をインストールした先の
share/fontforge/plugins/ ディレクトリにコピーする。
追記:
OSの種類によっては、上記手法では駄目な場合があります。
その場合は、
「LPCTSTR氏 - リククーブログ - FontForgeでJIS X 0213を使えるようにする」
に書かれている、Makefile* を書き換える方法を用いて下さい。
というよりもむしろ Makefile* を書き換える方法の方が真っ当な方法ですが。
使い方:
K14 や jisksp16 などの、
JIS X 0212/0213-1/0213-2 フォントの編集を開始する。
「エンコーディング」→「エンコーディングを強制」のメニューから、
「JISX0212」か「JISX0213-1」か「JISX0213-2」の適切な物を選ぶ。
「エンコーディング」→「エンコーディングを変換」のメニューから、
「ISO10646(BMP)」や「ISO10646(Full)」などの、変換したい先を選ぶ。
終わり。
SVN-Web-0.53.Jcode.diff Sun,22 Aug,2010 (4KiB)
subversion リポジトリを web から閲覧する為のソフト (perl) SVN::Web を、日本語対応にするパッチです。 別途 Jcode.pm が必要です。
原作版の SVN::Web だと、 I18N対応と言っておきながら、その実は UTF-8 のみの対応で、 ISO-2022 とか EUC とか ShiftJIS/CP932 とかのファイルがあると、 盛大に文字化けします。
本パッチを使用すると、 svn:mime-type にて charset の記述が有る場合は 入力文字コードを charset で指定された文字コードとみなして処理し、 無い場合は Jcode.pm にて自動判別を行います。
このパッチとは無関係に、原作版の SVN::Web を subversion-1.6系で使うと、
svn: In file 'subversion/libsvn_ra/deprecated.c' line 289: assertion failed (*path != '/') svn: In file 'subversion/libsvn_ra/libsvn_ra.c' line 759: assertion failed (*path != '/') svn: In file 'subversion/libsvn_ra/libsvn_ra.c' line 783: assertion failed (*path != '/')
とエラーを出しまくり、まともに動いてくれません。
結局、どうにもならなくて、svn側のソースをいじって、
このエラーで abort() している行をコメントアウトして使っていますが。
どうも、
書式で / を付加するか否かが、変わったか厳密化したか、したっぽいですが。
あと、これも本パッチとは無関係ですが、 SVN::Web は Fast::CGI だか FCGI だかも使っている様な気がするのですが、 依存関係が記述されていなくて自動インストールされない様な気がする。
tkcvs_8_1.locale_patch.bz2 Thu,03 Sep,2009 (2KiB) TkCvs-8.1用 日本語ロケール対応にするパッチ
tkcvs_8_2.locale_patch.bz2 Thu,03 Sep,2009 (2KiB) TkCvs-8.2用 日本語ロケール対応にするパッチ(OpenBSD非対応)
tkcvs_8_2.locale_patch2.bz2 Thu,03 Sep,2009 (6KiB) TkCvs-8.2用 日本語ロケール対応にするパッチ(OpenBSD対応)
tkcvs_8_2.font_patch.bz2 Thu,03 Sep,2009 (2KiB) TkCvs-8.2用 フォントを変更可能にするパッチ
tkcvs_bitmaps.lzh Thu,03 Sep,2009 (2KiB) おまけ:改造アイコン
subversion リポジトリを GUI で閲覧・操作する為のソフト TkCvs を、日本語ロケール対応にするパッチです。
原作版の TkCvs だと、
svn と通信をする際に、svn が英語で応答する前提で作られています。
しかしながら、日本語ロケール上で TkCvs を使用すると、
svn も日本語で応答してしまいます。
その為、TkCvs が svn と通信できなくなってしまいます。
だからと言って、TkCvs を英語ロケールにて動かすと、
svn との通信はうまく行く様になりますが、
今度は TkCvs のログビューワやファイルビューワやテキストエディタにて
日本語の閲覧・操作ができなくなってしまいます。
では、svn を「env LC_ALL=C svn」にすると。
TkCvs の内蔵ビューワーも通信もうまく行きますが、
今度は普段コマンドラインから svn を使う時にも
ロケールが英語固定になってしまいます。
ぶっちゃけて言うと、
env LC_MESSAGES=C tkcvs でも良いのかも知れませんが。
本パッチでは、
TkCvs が svn と通信する時だけ、ロケールを英語に変更しています。
備考:
なので、日本語ロケール以外、
例えば中国語ロケールだとかロシア語ロケールだとか、
でも、正しく動作する様になると思います。
試していませんが。
フォントを変更可能にするパッチを適用した後、 ${HOME}/.tkcvs に
set cvscfg(guifont) "-*-fixed-medium-r-normal--14-*" set cvscfg(browserfont) "-*-fixed-medium-r-normal--14-*" set cvscfg(listboxfont) "-*-fixed-medium-r-normal--14-*" set cvscfg(flashfont) "-*-fixed-bold-r-normal--14-*" set cvscfg(dialogfont) "-*-fixed-medium-r-normal--14-*"
等と記述すると、フォントが変更できます。
guifont がメニュー等のフォント?(これのみ原作版でも変更可能)、
browserfont がログや Annotate/Blame ブラウザや
Graphical Branch Diagram のログブラウザ等で使用するフォント、
listboxfont がファイラー等で使用するフォント、
flashfont がファイラー等でハイライト・選択された時に使用するフォント、
dialogfont がダイアログボックス等で使用するフォント、
です。
おまけの改造アイコンは、 原作版のアイコンだと、 変更ファイルと通常フォルダのアイコンの色調が似ていて区別しにくいとか、 追加アイコンと削除アイコンと不明ファイルアイコンの 色調が似ていて区別しにくいとか、 だったので、 違いが派手になる様に色を変更してみた物。
xshisen-1.51.patch Wed,02 Dec,2009 (1KiB)
ええと、開発元ページは消えてしまった模様です。
未初期化のポインタを delete してしまうミスの修正。
たぶん、 「M.H Plamo Linux Home Page 0901 - 2009年その1」 の、「xshisen 関連のパッチ」の 3番と同じ内容ではないかと思われますが。 現時点ではアクセス出来ない為、確認できません。
多言語対応ターミナル mlterm用の改造パッチです。
mlterm-3.8.0.cjk_word_separate_patch Wed,08 Mar,2017 (6KiB)
mlterm-3.6.1.cjk_word_separate_patch Sat,20 Feb,2016 (6KiB)
mlterm-3.3.2.cjk_word_separate_patch Sun,02 Feb,2014 (6KiB)
mlterm-2.9.4.cjk_word_separate_patch Thu,24 Dec,2009 (6KiB)
マウスのダブルクリック等での単語選択の際に、
日中韓/英数/記号/ギリシャ文字/キリル文字/ドイツ語/等の
文字種が変わった所を単語の区切りとみなすパッチ。
標準の機能の word_separators とは別個に機能します。
mlterm-3.8.0.underline Wed,08 Mar,2017 (1KiB)
mlterm-3.4.1.underline Sat,03 Jan,2015 (1KiB)
mlterm-3.1.8.underline Sun,12 May,2013 (1KiB)
mlterm-3.1.0.underline Wed,09 May,2012 (2KiB)
mlterm-3.0.1.underline Thu,07 Oct,2010 (2KiB)
アンダーラインの表示位置を kterm と同じ位置に変更するパッチ。
いつの頃からかは不明(たぶん、2017-04-29 の 3.8.1 から)ですが、
mlterm のアンダーラインの表示位置は underline_offset で
調整できる様になったので本パッチは多分不要です。
mlterm-3.9.1.mod.cut_scroll_by_ksym.patch Sun,14 Feb,2021 (2KiB)
mlterm でスクロールバックをしている時に、
u, d, j ,k キーを押すと
スクロール範囲が変わる機能が付いていたらしい。
その機能を無効化するパッチ。
mlterm-3.9.1.mod.line_space.patch Tue,04 May,2021 (1KiB)
line_space の値はフォントサイズの 25% までに
制限されているらしい。
その制限をフォントサイズの 100% までに変更するパッチ。
GImageView の修正パッチです。
gimageview-0.2.27.patch Sun,05 Jan,2014 (3KiB)
GImageView(gimv) 0.2.27 を amd64 にて使うと
アーカイブファイルを扱う時に SIGSEGV を出して落ちますが、
これに対する対処療法なパッチです。
Zsh の修正パッチです。
zsh-5.8.mbrtowc.patch Sun,31 Jan,2021 (2KiB)
FreeBSD 11.4-RELEASE/amd64 上の LANG=ja_JP.eucJP な環境下で、
コマンドラインに日本語の記号類を入力した時や、
補完候補に日本語の記号類を表示しようとした時に、
日本語の記号類を表示不可文字と誤判定して、
コマンドライン入力時は <a1d4> とか
補完候補時は $\161\212 とかの様に、
文字化けするのを修正する場当たり的パッチ。
FreeBSD 12.2-RELEASE/amd64 で試した所では、
本パッチを適用しなくても文字化けしなかった。
よくわからん……。
ppsspp の修正パッチです。
ppsspp-1.12.3.mod.libretro_patch Sun,26 Dec,2021 (2KiB)
ppsspp-1.14.1.mod.libretro_patch Sat,24 Dec,2022 (2KiB)
ppsspp-1.15.4.mod.libretro_patch Sun,06 Aug,2023 (2KiB)
ppsspp-1.16.6.mod.libretro_patch Sun,29 Oct,2023 (2KiB)
ppsspp-1.18.1.mod.libretro_patch Sun,08 Dec,2024 (2KiB)
RetroArch 環境(libretro環境)で ppsspp を実行すると、
ppsspp側の環境設定ファイル ppsspp.ini を
ルートディレクトリ(/)から読み込もうとして
失敗するバグの修正パッチです。
バグとは書いたものの、意図的なのか否かよくわからん。
libretro の環境設定を使うから ppsspp.ini は不要、
とか言う考え方なのかも知れず。
gpg_decrypttouch.sh
Mon,14 Jan,2008 (2KiB)
GnuPG で暗号化した *.asc か *.gpg を復号化すると同時に、
タイムスタンプやパーミッションも維持する shell script。
(gpg で普通に復号化すると、復号化を実行した時点のタイムスタンプ、
復号化した時にumaskで設定されたパーミッション、になってしまう)
lzh2tar.sh
Mon,14 Jan,2008 (2KiB)
LHA で圧縮したアーカイブを tar での無圧縮連結に固め治す shell script。
(タイムスタンプとパーミッションは元アーカイブを維持する)
pschk.sh
Sat,18 Oct,2008 (5KiB)
普段通りのプロセスが走っているか、
普段と違うプロセスが走っていないか、
チェックする shell script。
前述の diffregex.cc を diffregex と言う名前でコンパイルし ${HOME}/.bin/ に置き、
${HOME}/.bin/ps.default.all.`hostname -s` に、
プロセス一覧を正規表現で記述します。
pschk.sh を実行すると、
${HOME}/.bin/ps.default.all.`hostname -s` と
現在のプロセス一覧と
を比較して、違っている箇所を表示します。
crlfdiff2lfdiff.pl
Tue,11 Aug,2009 (1KiB)
MS-Windows で作った diffデータを、
Unix系で処理できる様に変換する perl script。
変換せずに patch に通すと、
diffファイルの CR+LF を LF に変換してからパッチを当てようとするので、
パッチを当てるべき対象の改行コードは LF である、
とみなしてパッチを当てる事になる。
変換してから patch に通すと、
パッチを当てるべき対象の改行コードは CR+LF である、
とみなしてパッチを当てる。
lssvn.pl
Fri,04 Sep,2009 (3KiB)
subversion のプロパティを
ファイル/ディレクトリ毎に1行ずつ一覧表示するスクリプト。
「svn pl -v *」とかやると、
1ファイル/ディレクトリ毎に数行ずつ表示されたり、
プロパティが無いファイル/ディレクトリだと何も表示されなかったりで、
一覧として見る時に不便だったり、
プロパティが無いファイル/ディレクトリの一覧を見られなかったり、
なので、作ってみた。
UNIX系にて S.M.A.R.T. の結果を csv に記録するスクリプト。
smartmon-csv-oneshot.pl
Thu,02 Jan,2020 (6KiB)
smartmon-csv-oneshot.conf
Thu,02 Jan,2020 (1KiB)
getttyent氏?
smartmontoolsでHDDのSMART属性を記録してrrdtoolでグラフ化するperlスクリプト(仮)
2006-07-09 22:28:14 | デジタル・インターネット
を土台に、smartmon 結果を csv へ出力する様にしたもの。