物置


暇があったら公開できればいいな、みたいな。内容については完全無保証です。自己責任ということでお願いします。気の向くままに構成を変える可能性があるため(実績あり)、ファイル直リンクはお勧めできません。ご意見・ご要望・バグ報告・足跡等はこちらの掲示板でどうぞ。

当サイトにおけるパッチは Cygwin の diff によって生成されています。そのため改行コードによる問題を引き起こす可能性があります。うまく当たらない場合は patch に --binary オプションをつけてみる、改行コードを調整してみる、等を試してみてください。

ごめんなさい。お使いのブラウザではここに更新履歴が表示されないようです。↓のリンクを辿ってください。

更新履歴を普通に見たいかたはこちらです。/.-J で日記をつけはじめました。twitter のアカウント(@yak_ex)とってみました。プログラミング系のネタは Blogger の方で。

構想中というか妄想中

実現には時間と気合いが…。上の方ほど難易度が低かったり進んでいたりするので実現可能性は高いです。


UltraVNC 関連

多くのプラットフォーム間で相互運用可能な遠隔操作ソフト RealVNC の Windows 専用機能強化版 UltraVNC に関してです。

漢字キー対応版 円記号キー・かな入力再修正&ファイル転送時の日本語(Shift_JIS)ファイル名化け修正パッチ版

KP774 氏により UltraVNC 1.0.4RC14 日本語版 Release 1 が公開されています。本パッチの修正を含んだ上、さらに修正と強化がされていますのでそちらを参照ください。

UltraVNC 1.0.4 RC 日本語版

KP774 さんのところで公開されていた UltraVNC 1.0.2 日本語版 Release 2 に相当する変更を UltraVNC の Sourceforge SVN リポジトリ 最新に対して適用したパッチを公開していましたが、前記公式リポジトリに取り込まれました。本家から RC14 をダウンロードしてもらえれば漢字キー使用可能な実行ファイルになっています。ただし、こちらで公開していたものをそのまま取り込んで頂いたようで、色々と中途半端な状態になっている可能性があります(JavaViewerとか)。

なお、漢字キーを利用したい場合は、viewer の設定で Japanese keyboard が追加されていますので、忘れずチェックしましょう。.vnc ファイルがある場合は、JapKeyboard=1 という行を追加すれば OK です。

また、こちらの環境では、Vista をサーバとして、ビューワで接続している際に DSM プラグインの設定ダイアログを開こうとするとサーバが落ちます。また、レジストリを設定に使用する DSM プラグインの場合、設定ダイアログでの表示が空白、文字化け、1文字のみ等になるようです。直接レジストリに設定しておけば動作はしているようですが、レジストリ非使用版を使う方がいいかもしれません。また、正常にインストールできない場合は、(UltraVNC の別バージョンがインストールされている場合は)先にアンインストールだとか、再起動していみるとかいろいろやってみてください。

上記、KP774氏の日本語版最新版(1.0.4RC14 日本語版 Release 1)も参照ください。

UltraVNC 1.0.4 RC 日本語リソース

ということで、本家 RC14 用の日本語リソースを作成しました。ソース自体は前記 UltraVNC の Sourceforge SVN リポジトリ Rev:265 でこれに対してバージョン表記等、微細な修正をしたものになります。使用する場合は、単に展開してできる DLL を UltraVNC インストール先に置けば OK です。

リソースDLL: UltraVNC-104rc14-jpres1.zip
パッチ: UltraVNC-104-rc14-jpres1.patch


あふ関連

超低機能2画面ファイラーこと あふ に関してです。キーボード派かつカスタマイズ野郎にお勧め。

afx_run_v2

2ch ソフトウェア板の おい!あふを語ろうぜ!Ver.17 において SKid 氏によって公開されました afx_run_v2 のミラーです。任意の実行ファイルの出力結果をあふ内蔵ビューワで表示することができます。テキスト変換系フィルタ(xdoc2txt 等)に限らずテキスト出力するものならなんでも OK なのでアイデア次第で色々できると思います。

afx_run_v2: afx_run_v2.zip

afxview

上記 afx_run_v2 の拙作によるぱちもんです。リダイレクトファイル名を固定せず、複数のあふから並行実行できるようにしてみました。またリダイレクトファイルの後始末をします。手抜きなので、設定を別ファイル化したり外部ビューワに対応したりはしてません。

afxview: afxview_0_03.zip

afx4v

2ch ソフトウェア板 おい!「あふ」を語ろうぜ! Ver.22 673氏 によって公開された afx_run_v2 の強化版です。主な変更点は次の通りです。

afx4v: Afx Wiki ファイル置き場からどうぞ。

あふのぶっくまーく関連

配布元が消えてしまっているようですし、パブリックドメイン相当とのことですので、公開されていたあふ関連ファイル群をここでミラーしておきます。とりあえず「や」が保持しているバージョンですので最新版ではない可能性があります。

Afx Wikiファイル置場でミラーされていますのでそちらからどうぞ。

AutoHotkey で「あふ」の状態を判別する(ビュア状態での対象ファイル移動)

「あふ」自体は任意のキーに機能・コマンドを割り当て可能という強力なキーカスタマイズ機能を備えていますが、残念ながら複数の機能・コマンドを単一のキーに割り当てる事ができません。例えば、テキストビュア状態で別のファイルに移動しようとすると、「ESC」でビュア状態を解除→「↑」or「↓」等でカーソル移動→「v」でビューワ表示というキーストロークが必要になるため「あふ」単体では実現不可能であり、何らかの補助ツールが必要になります。

おい!あふを語ろうぜ!Ver.18 の http://pc7.2ch.net/test/read.cgi/software/1120107805/610 (元質問は>600) では窓使いの憂鬱を使ってさくっと解決されていますが、こちらでは AutoHotkey を使って実現してみました。単に行数増えてるだけのような気もしますが、一応「あふ」の表示状態を判別するようにしてあるのでひょっとしたら役に立つかもしれません。

判別処理は以下の関数 AfxStatus() で行っており、afxstatus.ahk に分割してあります。使用例の afxvwc.ahk は、C-↑,C-↓によるテキストビュア状態での対象ファイル移動+「あふ」使いとしては邪道ですが画像ビュア フルスクリーンモードでのマウスホイールによる対象ファイル移動&中ボタンクリックによるファイラー表示への復帰を行っています。

関数名
AfxStatus
引数
なし
返値
アクティブな「あふ」の状態により以下の文字列が返ってきます。「あふ」がアクティブでない場合は "" (空文字列)です。
「あふ」の状態返値の文字列
通常のファイラー表示"Normal"
画像ビュア"Image"
画像ビュア フルスクリーンモード"ImageFull"
簡易テキストビュア"Text"
簡易テキストビュア メッセージ窓も使用"TextFull"
不明"Unknown"
使い方の例
#Include afxstatus.ahk
state := AfxStatus()
if state in Image,ImageFull
    ; 適当な処理
else
    ; 適当な処理

AfxStatus() とその使用例: afxstatus_0_01.zip

『真』 特殊フォルダをあふで開く (afxspdir.spi)

右ペインでコントロールパネルを表示している図

Afx Wiki でも 特殊フォルダをあふで開く という項がありますが、一言、苦言を呈したいことがあります。それはあふ「で」開いてないじゃん、ということです。explorer を起動してそこで開いてるわけであって、それはあふで開くというのとはちょっと違うと思うわけですよ。あふ「で」開くと言うからには←こういうことでなくてはならないわけです(クリックすると拡大しします)。ということで、強引に、あふで擬似的に特殊フォルダを開く Susie Plugin を作成してみました。自分でも「あほだなー」とは思いますがやっちまったもんはしょうがないです。

詳細については同梱のドキュメントを参照してもらうこととして簡単に挙動を説明しますと、拡張子判別実行で、&S_ARC afxspdir.spi を登録し、該当拡張子のファイルに設定を書き込みます。この設定ファイルを開く事によって特殊フォルダを開く事ができますが、フォルダの中身は全てショートカットファイルとなります。(ついでにいうと現段階ではタイムスタンプが 1970/01/01 09:00:00 で 0 byte のファイルとして表示されます)。コピーしても実際のファイルでなくてショートカットファイルになってしまいますが、コントロールパネルの要素等でも(コピーせずに)その場で CTRL+ENTER で実行することができます。サンプルの設定ファイルも入れていますので動かして頂いた方がわかりやすいかとは思いますが、とりあえず動くという形でエラーチェック等もゆるゆるですのでコンセプト検証人柱バージョンということで一つお願いします。

一式(ソース同梱): afxspdir_0_01.zip

Noah 連携用 AutoHotkey スクリプト

あふではコピー中に他の操作は不可能です。そのため、うちでは多数のファイルや大きなサイズのファイルのコピーは Fire File Copy に渡してバックグラウンドで処理させています。書庫ファイルの解凍でも同じようにバックグラウンドで処理させようと Noah に渡してみましたが微妙に挙動が。探せば希望の挙動をするソフトがあるような気もしますが面倒なので AutoHotkey でラッパーを作ってみました。このラッパーを通すことで以下のような挙動になります。

スクリプトなのでコメントを参考に該当処理の行をコメントアウトするなり削除してもらえば↑の挙動をはずすことも可能です。Afx 側の設定例は以下の通り。キー番号、キーコード、パスは適宜調整してください。

afx.key 設定例 (Alt + U でカーソル上のファイルを別窓に解凍)

; A-U as extracted by noah
K0032="4085"c:\path\to\AutoHotkey.exe" "c:\path\to\noah.ahk" "c:\path\to\Noah.exe" -x "-d$O" "$P\$F""

ラッパースクリプト: noah.ahk

あふすくりぷた →DL link

あふ使いの夢、スクリプト処理にちょっとだけ近づける AutoHotkey 用ライブラリと単体実行ファイルです。実際には、強力版あふこまんどと言った方がイメージが近いかもしれません。「あふ」を AutoHotkey によって外部からコントロールする際のヘルパーライブラリです。全機能を使用するには前準備が必要な場合がありますが、以降関数呼び出しによって「あふ」をコントロールすることが可能になります。例えばマークされたファイルを連結して内蔵テキストビューワで表示するコードとしては以下のようになります(あくまでコード例なのでこのまま使用はしないでください)。詳細は zip ファイル内のドキュメントを参照してください。

Ver 0.05 において、AfxFindWindow()、AfxSendCommand()、AfxGetVariable() が追加されたため、大分まともに使えるようになったと思います。

; あふすくりぷたの読み込み
#Include afxscript.ahk

; ウィンドウハンドル取得
hwnd:=AfxFindWindow()

; マークされたファイルのフルパスを取得
Target:=AfxGetVariable(hwnd, "$QN$JT$MF")
; 各ファイルに対して
Loop, Parse, Target, %A_Tab%
{
    ; ファイル名出力
    FileAppend, === %A_LoopField% === `n, temp.txt
    ; ファイル内容を出力
    Loop, Read, %A_LoopField%, temp.txt
    {
        FileAppend, %A_LoopReadLine% `n
    }
}
; 内蔵テキストビューワで表示
AfxSendCommand(hwnd, "&VIEW " A_WorkingDir "\temp.txt")

Ver 0.08 において、eval 系機能と hwnd の省略が追加されたため、↑と同様のことを↓のようなファイルを用意し、そのファイル名を afxeval.ahk に対して渡すことで実現できるようになりました。詳細は添付ドキュメントを参照して下さい。

; マークされたファイルのフルパスを取得
Target := $QN$JT$MF
; 各ファイルに対して
Loop, Parse, Target, %A_Tab%
{
    ; ファイル名出力
    FileAppend, === %A_LoopField% === `n, temp.txt
    ; ファイル内容を出力
    Loop, Read, %A_LoopField%, temp.txt
    {
        FileAppend, %A_LoopReadLine% `n
    }
}
; 内蔵テキストビューワで表示
&VIEW  A_WorkingDir "\temp.txt"
<path>\AutoHotkey.exe <path>\afxeval.ahk <↑のファイルのパス>

また、↓のように直接コマンド列を渡すこともできます。これでいまいち使いどころに困る &SET も有効活用できるようになるかも。

<path>\AutoHotkey.exe <path>\afxeval.ahk "&SET \"0 -crc16\"" "dir:=AfxExecPath()" "&MENU dir \"\\hash.mnu\""

Ver 0.10 でキー設定不要な関数を afxctrl.ahk に分離しました。また、サンプルスクリプトとしてハードリンク数、作成日時、サクセス日時をステータスバーに表示する ntfsinfo.ahk を同梱しています。Ver 0.12 では拡張マークスクリプト afxmark.ahk も追加しました。最新の 50 ファイル、だとか、カーソル以降の 1000 ファイル、だとかのマークが可能です。詳しくはドキュメントを参照ください。

Ver 0.50 において、前準備不要の Type2 バックエンド、およびそれを利用した内部コマンド連続実行用単体 exe ファイルが追加されました。Ver 0.52 において行頭 ; によるコメントと行頭 # によるキーコード送信が追加、Ver 0.54 で行頭 % による内部コマンドが追加されたため、test.afx として以下のようなファイルを用意し、

; 入力した値でマークして
&MARK $I"move mark"
; メッセージ窓の更新を中断
%SUSM
; (m に相当するキーコードを送信→標準キーバインドで) 移動
#0077
; メッセージ窓の更新を再開
%RESM
; カーソルを別窓に移動
&TOW
; 終了メッセージを出力
%MES スクリプト終了

次のように実行することで

afxscript.exe test.afx

最後にアクティブになった「あふ」上(のはず)でコマンドが実行されます。上の例では入力ボックスが表示され、入力を行うとそれに応じてマークが行われ、ファイルを別窓に移動してカーソルも別窓に移ります。ファイル移動中にメッセージ窓の更新が中断されるため一応の高速化が可能です。完了時にメッセージ窓にメッセージが追加されます。

AfxSendCommand, AfxGetVariable 等の制約も緩和されており次のような表記が可能です。

; あふすくりぷたの読み込み(Type2)
#Include afxscript2.ahk

AfxSendCommand("&MARK $I""mark""")
str := AfxGetVariable("dir $P file $F")
MsgBox, str

なお、「あふ」の内部ルーチンを直接呼び出すという荒技を使用していますので、変になった場合のリスクは上がっています。

Ver 0.52 で追加された関数の使用例です。

; あふすくりぷたの読み込み(Type2)
#Include afxscript2.ahk

; とりあえず単純に出力してみる。
AfxAddMessage("テスト出力")

; メッセージ窓の更新を中断すると
AfxSuspendMessageWindow()
; メッセージ窓にメッセージを追加しようとしても
AfxAddMessage("テスト出力")
; ここではメッセージ窓は更新されない
MsgBox
; メッセージ窓の更新を再開すると
AfxResumeMessageWindow()
; ここでメッセージ窓の内容が更新

Ver 0.58 で「あふw」に対応しました。ユニコード入出力の必要がなければそのまま、あるいは AfxFindWindow() で第2引数を指定して「あふw」限定にすることで動作するはずです。ユニコード入出力を行いたい場合は、AfxSendCommandU(), AfxGetVariableU() あるいは afxscriptw.exe を使用してください。詳細は添付ドキュメントを参照ください。

「あふw」の左側に「たふ」ウィンドウが表示指されている図

Ver 0.60 でサンプルスクリプト:タブのように使えるかもしれない何か「たふ」を追加しました。余波で AfxRegisterOnMessage() でウィンドウ移動、サイズ変更、アクティブ状態変更、終了([0.65])を検知できるようになっています。

いずれも「たふ」(tafx.ahk)自体は同梱です。AutoHotkey をインストールしたくない/できない場合用に exe 化した tafx.exe を含むのが下のアーカイブです。
Ver 0.67 で「あふw」正式版(v1.7)で動作するよう修正したつもりです。
Ver 0.69 で「あふw」v1.50β(32bit版のみ)で動作するよう修正したつもりです。最新版 AutoHotkey への追従等は未実施です。

一式(ソース同梱): afxscript-0_69.zip
一式(exe化版「たふ」、ソース同梱): afxscript-0_69t.zip


Privoxy 関連

オープンソースなローカルプロキシである Privoxy に関してです。同種のソフトウェアとしては Proxomitron が有名ですが、作者さんが亡くなられており開発停止状態です。一応オープンソースクローンとして Proximodo というのが開発中だそうですが。まぁ、Privoxy もほとんど開発停止状態…だったのですが新たに開発者が参加したようで、リリースが再開されました。以前の↓機能追加版の機能も一部本家に実装されています(ヘッダに対する正規表現フィルタ等)。Privoxy Wiki なんかも立ててみたので使ってやってください。

機能追加版 →DL link

Privoxy-3.0.34-stable に対して以下の機能を追加したものです。

forward-class については、forward-class 自体の設定と、forward, forward-socks4, forward-socks4a に対する割り当てが必要です。

設定例:config(.txt)

# forward-class の出現順に 0 から番号が振られます。
# ↓の場合、Normal が 0、Annonymous が 1、SOCKS が 2 です。
# ↓の場合、デフォルトでは Normal のみが ON となります。
forward-class Normal 1
forward-class Annonymous 0
forward-class SOCKS 0
# forward, forward-socks4, forward-socks4a の設定で forward-class 番号を末尾に付加できます。
# Normal
forward / www.example.com:8080 0
# Annonymous
forward .com www.example.com:80 1
# SOCKS
forward-socks4 .net www.example.com:1080 . 2
forward-socks4 .org www2.example.com:1080 . 2

# ↓のように設定すれば、メニュー上は regex-ref 及び block として表示されます(両方ともデフォルト無効)。
# タグ自体は任意の文字列なので↓みたいにヘッダっぽい表記にしなくても問題ありません。
manual-tagger regex-ref X-Manual:RegexReferrer 0
manual-tagger block BLOCK 0

設定例:*.action

# ↓で必須タグとして BLOCK を指定。
# 各行をタグに対する正規表現として解釈する(通常のアクションに対するタグパターンでの TAG: 以降と同じ)。
# 複数行記述した場合は、全てを満たす必要がある。
# 以降、次に {{required}} が出てくるまでの全てのアクション、パターンに対して有効。
{{required}}
^BLOCK$

# BLOCK タグが有効の場合、全ての接続を block する。
{+block{User request by UI}}
/

# ↓で必須タグなし(デフォルト)の状態に戻る。
{{required}}

# 正規表現 Referrer と UI 指定タグの組み合わせの例。
# ↓が適用された場合は、+add-referer{directory} +hide-referer{directory} と同じ効果になるはず。
# 注:「,」は正規表現の区切り。
{+add-referer{%s,/[^/]*$,/,} +hide-referer{%s,/[^/]*$,/,}}
TAG:X-Manual:RegexReferrer

AutoHotKeyによる外部からの設定操作例[3.0.34-stable_y1]

; ウィンドウが非表示(タスクトレイに格納された状態)でも操作できるようにする
DetectHiddenWindows True
; メッセージIDを取得(Win32 API RegisterWindowMessageの呼び出し)
msg := DllCall("RegisterWindowMessage", "str", "PrivoxyEnhancedQueryMessage")

; wParam=6000はforward-classの最大設定可能数の取得(現在設定されている数ではない)
result := SendMessage(msg, 6000, 0, , "ahk_class PrivoxyLogWindow")
MsgBox result
; wParam=6001は現在のforward-class設定状態の取得(LSBがID 0のビットフラグ)
result := SendMessage(msg, 6001, 0, , "ahk_class PrivoxyLogWindow")
MsgBox result
; LSB(ID 0)のビット反転
result ^=1
; wParam=6002はforward-class設定状態の設定(lParamがLSBがID 0のビットフラグ)
result := SendMessage(msg, 6002, result, , "ahk_class PrivoxyLogWindow")
MsgBox result

; wParam=7000はmanual-taggerの最大設定可能数の取得(現在設定されている数ではない)
result := SendMessage(msg, 7000, 0, , "ahk_class PrivoxyLogWindow")
MsgBox result
; wParam=7001は現在のmanual-tagger設定状態の取得(LSBがID 0のビットフラグ)
result := SendMessage(msg, 7001, 0, , "ahk_class PrivoxyLogWindow")
MsgBox result
; LSB(ID 0)のビット反転
result ^= 1
; wParam=7002はmanual-tagger設定状態の設定(lParamがLSBがID 0のビットフラグ)
result := SendMessage(msg, 7002, result, , "ahk_class PrivoxyLogWindow")
MsgBox result

バイナリ作成時の configure オプションは env CC=i686-w64-mingw32-gcc ./configure --enable-mingw32 --disable-pthread --enable-static-linking --enable-extended-statistics --enable-pcre-host-patterns --enable-strptime-sanity-checks --with-mbedtls --with-brotli です。こちらで追加した機能以外は、Windows 用に配布されてるものと同じになってるはず(多分)。configure 時に指定できるオプションとして

を追加しています。↓のコンパイル済みバイナリは追加機能を全て有効にしてあります。バイナリパッチとして作成していませんので、インストール先ディレクトリにあるファイルにそのまま上書きしてください。設定ファイルの更新等がありますので、公式配布のファイルも更新しておくのがお勧めです。templates/ 以下のファイルは http://p.p/ や http://config.privoxy.org/ の Web ユーザーインタフェース用のものです。Web ユーザーインタフェースを使わない場合は必要有りません。必要に応じて上書き・コピーしてください。なお、パッチを当て直しただけなので新機能との衝突が起こっている可能性があります。挙動がおかしい場合はご連絡ください。使用しているコンパイラの都合で DLL が公式配布版と変わっているため追加しました(zlib1.dll)。[3.0.34-stable-y0]以降は静的リンクにしたうえ差分ではなく本家配布zip一式全体も含む形でzipにしています。

リポジトリ
GitHub
パッチ
privoxy-3.0.34-stable_y2.patch
バイナリ(と差し替えファイル)
privoxy-3.0.34-stable_y2.zip

2ch へのリンクを Jane で開く

気軽に「こんなソフトありませんか?」 17での http://pc8.2ch.net/test/read.cgi/software/1122623497/21 を見て思いついた小ネタです。基本方針は、Windows 上で URL scheme (http とか ftp とか :// の前にある部分) にも関連づけできることを利用し、

  1. ttp scheme に対して Jane を関連づける。
  2. ローカルプロキシにより 2ch へのリンクを ttp:// に書き換える

というものです。ttp scheme に対する関連づけ設定用 .reg ファイルはこちら。内容は↓な感じです。Jane へのパスは適宜書き換えてください。ディレクトリ区切りが \ ではなく \\ であることにも注意。ダウンロードしてダブルクリックするか、自分でレジストリエディタを使って設定してください。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\ttp]
"URL Protocol"=""
@="URL: HyperText 転送プロトコル (HTTP) for 2ch"
"EditFlags"=dword:00000002

[HKEY_CLASSES_ROOT\ttp\shell]

[HKEY_CLASSES_ROOT\ttp\shell\open]

[HKEY_CLASSES_ROOT\ttp\shell\open\command]
@="\"C:\\Program Files\\ToolGUI\\jane\\Jane2ch.exe\" %1"

Privoxy の設定例はこんな感じです。↓にも書いてますが「誤爆上等」な感じなので各自で修正してください。

設定例:filter 用ファイル

# 2ちゃんねるとPinkちゃんねる対応
# ↓だと Be とか通常の掲示板じゃないところにも誤爆しますので必要なら適宜修正してください。
FILTER: 2ch-ttp Convert links to 2ch into ttp protocol
s,href="http://([^/.]*\.(2ch\.net|bbspink\.com)/[^"]*)"([^>]*)(target="?_blank"?)?([^>]*)>,href="ttp://$1"$3 $5>,ig
s,href=http://([^/.]*\.(2ch\.netb|bbspink\.com)/[^ >]*)([^>]*)(target="?_blank"?)?([^>]*)>,href=ttp://$1$3$5,ig

設定例:action 用ファイル

# 後でやばい拡張子に対して -filter 設定がされているとして
{+filter{2ch-ttp}}
/
# /.*\.(html|html) とかにした方が無難かも。

以上の設定により、2ch に対するリンクをクリックすると Jane 側で該当板、スレッド、レスが開くようになります。こちらで確認したブラウザの挙動は以下の通りです。

うちで確認したのは Jane View Doe ですが、Jane 系ならどれでもいけるはず。URL scheme 関連づけ+リンク書き換え自体は汎用的に使えそうな手法なので、工夫次第で面白いことが可能かも。

Privoxy + Google Desktop Search + Opera における不具合

何がどうなってそうなるのかよく分かりませんが、以上の組み合わせだと「リモートサーバーから切断されました」という表示が出て Google での検索が正常に行えなくなるという不具合が発生します。Privoxy を通さない(Enable をはずすのではなくプロキシ設定を変える)、GDS の常駐を切る、IE, Fire Fox を使う、のいずれでも回避可能という激しくピンポイントな不具合です。Google で検索を行う際の HTTP リクエストに対して、GDS が User-Agent に「; Google-TR-1」という文字列を挿入し、その結果、Google からの応答に何らかの変化が起こり、その変化によって Opera が誤動作する、ということのようです。それでも上記組み合わせで使いたいんじゃ、という頑固者は hide-user-agent あるいは上記 request-filter で「; Google-TR-1」を含まない User-Agent: にしてやれば回避できるようです。


Cygwin 関連

Windows 上で Linux 風環境を実現するライブラリ・ツール群である Cygwin に関してです。Beta 時代から使ってるんで思えば長いもんですね。ちまっとパッチを当てたものとか、野良ビルドしたものとかを setup.exe でインストールできるように公開しております。よろしかったらどーぞ。インストールする際には、setup.exe 用 URLの記述を確認ください。基本的に cygport 化してソースパッケージも置いてあります。なお、本ページの記述は Cygwin 1.7 用のものです。Cygwin 1.5 用の旧パッケージについては物置 - Cygwin 1.5のページを参照ください。x86_64 用パッケージも一部配布を開始しました(14/05/06)。

cygport 化したものについては、ビルドに cygport-usrlocal が必要なことと、環境変数 USRLOCAL を設定すると /usr/local 以下に配置されるパッケージが作成される点が本家のものと異なります。

$ cygport ./package-0.00.0-0.cygport all # cygwin 標準配置
$ env USRLOCAL=1 cygport ./package-0.00.0-0.cygport all # /usr/local 以下に置きたい場合

setup.exe 用 URL

http://yak3.mydns.jp:8080/junks/cygstdtree
cygwin 標準配布パッケージと同じディレクトリ配置のパッケージです。標準配布パッケージのパッチ適用版+自前ビルド(のうち気が向いたもの)があります。
http://yak3.mydns.jp:8080/junks/usrlocal
自前ビルドものを /usr/local 以下に配置したパッケージです。大抵は ./configure に対して特にディレクトリを指定しなかった場合となります。
http://yak3.mydns.jp:8080/junks/mixed
上記のちゃんぽんで、標準配布パッケージのパッチ適用版は標準配布パッケージと同じディレクトリ配置に、自前ビルドものは /usr/local にしたパッケージです。基本的にこれを使っています。FreeBSD 使いなので外からきたものは /usr/local に置きたくなるのです。

setup.exe にて署名の検証が必要となったため、

setup.exe -X

として setup.exe を起動し、署名の確認をスキップするか、

setup.exe -K <ダウンロードした公開鍵のパス>

として、Yak! の公開鍵を渡してください。公開鍵の情報は以下の通りです。大分古くなったので公開鍵を更新しています。旧鍵による署名も付けているので旧鍵のままでもインストール可能なはず(22/08/19)。

Name
yak_ex (Yak!) <yak_ex@mx.scn.tv>
KeyID
38153904
Fingerprint
9265 F426 1AB5 D611 58E8 D843 5E51 1984 3815 3904
(旧)KeyID
2087F696
(旧)Fingerprint
F4B0 63B7 7A3B 118E 87BA 8D75 011C 86F7 2087 F696

setup.exe なんていらねぇ、直接展開してやる、という方はリンクを辿ればディレクトリの Index になるのでそこからダウンロードしてください。release フォルダ内が Cygwin 1.7 用パッケージになっています。パッチ適用版については標準配布版と区別するために setup.ini 内のパッケージ名には _hogehoge といったものをつけていますが、setup.ini 内の requires の問題とか考えるとつけない方がいいのかもしれません。なお、ファイル名自体は同じなので気をつけてください。どうするのがいいのかよく分からないので意見ください。各パッケージに関する詳細は以下を参照してください。

APR - Windows ロケール強制パッチ適用版

Cygwin 1.7 にて遂に念願のロケール機能が(一部)有効となりました。これにより環境変数 LANG を ja_JP.UTF-8 と設定してやれば本パッチ適用版のインストールなしで日本語ファイル名を扱うこともメッセージを日本語にすることも可能となりました。Cygwin 1.5 については 物置 - Cygwin 1.5 を参照ください。

Boost C++ Library →DL link

C++ の準標準ライブラリ(一部は C++11 に採用済、TS/C++14 でも採用予定です)ともいえる Boost C++ Library をビルドしたものです。基本的に cygwin 本家ベースで新しいバージョンにしたものです(1.53.0 → 1.55.0)が、patch は趣味に応じて選択しています。Cygwin 本家パッケージと同じく ICU 有効、MPI 無効になっています。

1.52 で Boost.Context も動作するようにしましたが、元々のコード通り NT TIB のスタックベース、スタックトップの情報を切り替えてしまうとコンテキストを切り替えた先で Cygwin のシステムコールを正常に使えないため、あきらめて NT TIB のスタック情報の切り替えをしていませんので問題があるかもしれません。

boost-1.53.0-attribute.patch
1.55.0 に合わせて修正
boost-1.50.0-foreach.patch
そのまま適用(#define foreach BOOST_FOREACH 用 workaround)
boost-1.50.0-fix-non-utf8-files.patch
どうでもいいファイル(example)なので削除
boost-1.50.0-long-double-1.patch
そのまま適用
boost-1.50.0-pool.patch
そのまま適用
boost-1.53.0-context.patch
PPC アーキテクチャ用コード部分なので削除
1.40.0-cstdint-cygwin.patch
そのまま適用(Cygwin 側で対応済みな事項に対する workaround の削除)
1.53.0-asio-cygwin.patch
1.55.0 に合わせて修正(Windows API ではなく Cygwin API を使う)
1.48.0-asio-MSG_EOR.patch
不要になったので削除
1.50.0-config-cygwin.patch
そのまま適用
1.52.0-filesystem-cygwin.patch
(旧リリースより)そのまま適用(Windows API ではなく Cygwin API を使う)
1.53.0-filesystem-cygwin.patch
そのまま適用(UTF-8 エンコーディング使用)
1.40.0-interlocked-cygwin.patch
削除(同期に Windows API 使用)
1.40.0-iostreams-cygwin.patch
そのまま適用(Cygwin 対応済み workaround 削除→wide stream 有効)
1.53.0-locale-cygwin.patch
そのまま適用
1.40.0-python-cygwin.patch
1.46.1に合わせて修正(不要だと信ずる部分を削除)
1.40.0-regex-cygwin.patch
そのまま適用(Windows API ではなく Cygwin API を使う)
1.40.0-smart_ptr-cygwin.patch
削除(同期に Windows API 使用)
1.46.1-system-cygwin.patch
そのまま適用(Windows API ではなく Cygwin API を使う)
1.48.0-type_traits-qtbug22829.patch
そのまま適用(Qt workaround)
1.45.0-jam-cygwin.patch
不要のようなので削除
1.43.0-jam-toolkit.patch
そのまま適用(ライブラリファイル名からツールセット名(gcc4?)を除去)
1.50.0-jam-pep3149.patch
そのまま適用
1.55.0-context-cygwin.patch
1.52.0 に対して新規追加(MASM → gas 使用。NT TIB スタック情報切り替えなし)、1.55.0 に合わせて修正
1.52.0-math-cygwin.patch
1.46.1に対して新規追加(long double 有効)、1.52.0 に合わせて修正
libboost-devel_-1.55.0-1
ヘッダとライブラリ
libboost1.55_-1.55.0-1
DLL(Boost Python 以外)
libboost-python1.55_-1.55.0-1
DLL(Boost Python)
libboost-python-devel_-1.55.0-1
ライブラリ(Boost Python)
libboost-python3_1.55_-1.55.0-1
DLL(Boost Python)
libboost-python3-devel_-1.55.0-1
ライブラリ(Boost Python)
boost_-1.55.0-1-src
ソース一式
ソース軽量版
↑ソース一式から Boost 公式で配布されているアーカイブファイルを除いたものです。cygport boost-1.55.0-1.cygport download を実行すればアーカイブファイルが勝手にダウンロードされます(要 wget)。boost-1.55.0-1-src.tar.xz
Boost.Context gas on Windows パッチ
Cygwin gcc 向けで書いていますが MinGW gcc でもこれで MASM なしで Boost.Context がビルドできるのではないかと。Jamfile の調整が必要かもしれませんが。1.55.0-context-cygwin.patch

cygport 補助 [x86_64有] →DL link

Cygwin 本家のパッケージでも続々と cygport 利用に移行しているわけですが、当物置でもやっとこさ cygport に移行しました。少々食わず嫌いな面があったのですが、実際使ってみると、パッケージ作成の大半が自動化されるというのは超便利です。が、あくまでも「野良ビルドは /usr/local」が私の基本方針であるため、prefix 等を切り替えられるように追加の cygclass を作成してみました(cygclass とは cygport に機能を追加するシェル関数群みたいなもので .cygport ファイル中で選択的に追加できます)。ついでに、完成度が低いながら README, setup.hint の作成補助機能もつけたものが cygport-usrlocal です。当物置でソースパッケージ付きで配布しているものの再ビルドに必要になります。環境変数 USRLOCAL が定義されている場合は /usr/local 下に、未定義の場合は Cygwin 標準のディレクトリ配置に従うパッケージが作成されます。0.2-1 では、コマンド mydobin, mydolib, 設定用環境変数 OLD_CONFIGURE を追加しています。0,6-1 では mydobin, mydolib をシェル関数化(本家 dobin, dolib の変更に追従)、libtool モジュールに対する後処理の修正を行っています。0.7-1 では Graphviz のビルド用に libtool ライブラリの処理を修正しています。0.9-1 では最新の Cygwin 環境、cygport に合わせた最低限度の修正をしています。

もう一つ OCaml ライブラリ用に cygport-ocaml を作成しました。と言っても ocaml.cygclass yak-ocaml.cygclass (本家での ocaml.cygclass 配布に伴い改名) 1 ファイルだけですが。OCaml のライブラリはビルド手順があまり標準化されていないので、大抵は .cygport で各個撃破する必要がありますが、ld.conf 修正用 postinstall / preremove スクリプトの作成を共通化しています。0.4-1 では PREFIX/lib/ocaml/site-lib/stublibs に対する処理を追加しています。

双方とも内部処理の説明がありませんが、.cygport を書く人ならシェルスクリプトぐらい余裕で書けると思うのでそのまま中を見てもらった方が早いと思います。

cygport-usrlocal-0.11-1
一式
cygport-ocaml-0.4-1
一式(1ファイルのみ)

FlexDLL →DL link

UNIX 系のオープンソースソフトウェアを Cygwin 上に移植する際に、よくぶつかる問題の一つとして「Windows 上では DLL 作成時に全ての参照が解決されていなければならない」という点があります。詳細は edll のページでも参照してもらうとして、特にプラグインを使用しているソフトでぶつかることが多いです。ここで配布しているソフトでは Graphviz なんかがそうですね(1.7未配布)。で、よく見かける解決策が前記 edll のページで言うところの "The sub-DLL solution" ですが、コード構成自体を変更しなければならないのでそう簡単には対応できません。edll はリンカとローダを自前で実装してしまうという豪快な手段でこの問題を解決していますが、FlexDLL はちょっとだけ穏便に、リンカ、ローダは通常のものを使用し、そこにフック的に自前で参照を解決する仕組みを導入することで問題を解決しています。Windows 版 OCaml でも使用されておりこれにより Cygwin 上の OCaml でモジュールの動的ロードが可能になっています。同様にプラグイン的なものを使用する UNIX 系ソフトを移植する際の選択肢としても考えられると思います。

本家配布版では Native 版 OCaml を使用してコンパイルしてありますが、Cygwin の symlink を取り扱えず gcc 自体見失ってしまうため Cygwin 版 OCaml を使用してコンパイルしています。Version 0.21 で外部コマンドの呼び出しがbash 経由になり解決されたようですが、Cygwin 版のままとなっています。なお、MinGW 用 object は gcc-3 -mno-cygwin で、VC++ 用 object は VC++ 2008 でコンパイルされています。また、OCaml での fork 使用時に DLL 読み込みエラーが発生する点を修正しています。[0.25-1]。本家配布に応じて配置等変更するべきですがとりあえずパッケージ名だけ _ を付けて衝突を回避しています。

flexdll_-0.25-1
一式
flexdll_-0.25-1-src
ソース一式(cygport)

git-subtree [x86_64有] →DL link

Git において Subversion の svn:externals のように別リポジトリの内容をリポジトリの一部に取り込みたいといった場合、submodule という機能がありますが、ちょっと癖があって使いにくかったりします。似たようなことを実現する別の仕組みとして git-subtree があります。git の contrib にあるのですが Cygwin 本家パッケージには入っていないためパッケージ化しました。

git-subtree-2.36.1-1
一式
git-subtree-2.36.1-1-src
ソース一式(cygport)

GNU GLOBAL [x86_64有] →DL link

ソースコードタグシステムである GNU GLOBAL をビルドしたものです。もともとはタグジャンプの実現用のものですが、htags を使うことによりソースコードをハイパーリンク付きで HTML 化することもできます。標準では C, C++, Yacc, Java, PHP4 ですが、Exuberant Ctags (Cygwin 本家パッケージにあり)を使うことで多数の言語に対応できます。ソースコード解析のお供にどうぞ。

global-6.2.12-2
一式。
global-6.2.12-2-src
ソース一式(cygport)。

Graphviz →DL link

Cygwin 本家で配布されるようになりましたのでそちらをどうぞ。

グラフ視覚化ソフトウェアである Graphviz をビルドしたものです(ビルドしただけ、のパッケージが多い中 Graphviz は Cygwin でのビルド自体が割と難易度高いです)。グラフと言っても円グラフとか棒グラフとかそっちのグラフではなくて、点と線、ノードとエッジからなるグラフ構造のことです。簡単な書式でグラフ構造を表すテキストファイルを書き、それを食わせてやると画像ファイルを生成してくれます。Doxygen でも階層構造を視覚化するのに使えるそうです。状態遷移図とかいちいち図を書くのが面倒な時などにも有効だと思います。

GTS(GNU Triangulated Surface Library) →DL link

ポリゴンによる 3D サーフェスを扱うためのライブラらしい GTS(GNU Triangulated Surface Library) をビルドしたものです。Graphviz で利用可能らしいのでビルドしてみました。が、Graphviz 本体が未ビルドのままです。

gts-0.7.6-1
一式。
gts-0.7.6-1-src
ソース一式(cygport)。

Jam less [x86_64有] →DL link

日本語表示を可能にした less、いわゆる jless (元ページ消失) に bogytech さんの jless UTF-8 パッチ をあてたものです。文字集合認識正規表現(cs_regex)有効でビルドしています(動作未確認)。FreeBSD の ports と同じ状態です。以前は less-358-iso254-imd1 非公式パッチ を less-382-iso262 用に調整したものをあててビルドしていましたが、UTF-8 パッチに CP932 対応が含まれているためこちらは外しています。環境変数 JLESSCHARSET を japanesecp932-utf8 とするとほとんどの人にとって望む挙動になると思います。

jless-382-iso262-ext03-cx_regex-3
一式
jless-382-iso262-ext03-cx_regex-3-src
ソース一式(cygport)(パッチもすべて含みます)

Keychain →DL link

Apple のやつではなく ssh-agent や gpg-agent 用ヘルパーの Keychain です。Cygwin 本家パッケージがありますが未対応の SSH 鍵の形式があり パッチ を当てるのが面倒になったので現時点での最新リリース(と言っても2018年)をパッケージ化しています。

keychain-2.8.5-1
一式
keychain-2.8.5-1-src
ソース一式(cygport)

libiconv - cp932 パッチ適用版 →DL link

1.14 対応のパッチが存在しないため、↓日本語パッチ版を使用してください。

文字コード変換ライブラリである libiconv に対して、いわゆる cp932 パッチをあててビルドしたものです。

libiconv - 日本語エンコーディング全般の一括パッチ適用版 [x86_64有] →DL link

文字コード変換ライブラリである libiconv に対して、日本語パッチをあててビルドしたものです。

libcharset1_ja-1.14-2
libcharset DLL 多分、変更はないと思いますが念のため。
libiconv2_ja-1.14-2
DLL。
libiconv_ja-1.14-2
DLL 以外一式。
libiconv_ja-1.14-2-src
ソース一式(cygport)(パッチもすべて含みます)。

mingw64 クロスビルド用ライブラリ →DL link

Privoxy本家が静的リンクで配布されるようになりビルドに必要なライブラリがあるためいくつか追加しています。

mingw64-i686-brotli-1.0.9-3
Brotli(Cygwin版ベースにクロス用設定追加(別にソース、デバッグ情報パッケージあり))
mingw64-i686-mbedtls-2.23.0-1
Mbed TLS(Cygwin版ベースにクロス用設定追加(別にソース、デバッグ情報パッケージあり))
mingw64-i686-pcre-with-static-8.45-1
PCRE(Cygwin公式版に対して静的ライブラリビルド設定を追加(別にソース、デバッグ情報パッケージあり))

nkf [x86_64有] →DL link

漢字コード変換フィルタである nkf です。

nkf-2.1.3-1
一式。
nkf-perl-2.1.3-1
Perl モジュール。
nkf-2.1.3-1-src
ソース一式(cygport)。

OCaml →DL link

native コードが吐けて実行速度もそれなりに速いという関数型言語 OCaml です。本家で配布されているバージョン(3.08.1)は Windows 環境ではモジュールの動的ロードができませんが、最新版では natdynlink ブランチ(The natdynlink branch in OCaml's CVS)の成果が取り込まれ Cygwin 版でもモジュールの動的ロードが可能となっています。

なお、公式ソースに対して以下の変更を加えてあります。

ocaml_-3.12.0-1
一式(40MB 弱あるので注意)
ocaml_-3.12.0-1-src
ソース一式(cygport)

OCaml 用ライブラリ →DL link

いくつか OCaml 用ライブラリをビルドしてみました。いずれも cygport でパッケージを作成していますのでソースは -src を末尾につけた名前になっています。

findlib-1.2.5-1
パッケージマネージャ(サイト)
ocamlode-0.6-1
ODE の OCaml バインディング(サイト)
ocaml-odeds-0.1-1
ODE中に存在するテスト描画用ライブラリ drawstuff に対する OCaml バインディング(自作)

Cygwin 版 ODE →DL link

夏休み中に 簡単!実践!ロボットシミュレーション - Open Dynamics Engineによるロボットプログラミング を読んで感動したので作成。ODE(Open Dynamics Engine) は剛体の動力学を扱うオープンソースの物理計算エンジンです。こんな簡単に 3D で物理シュミレーションできるようになるとはすごい時代ですね。通常インストール対象にならない drawstuff ライブラリ等も含んでいます。0.11 以降では drawstuff も DLL を作成し、かつ、その DLL 内に必要なリソースが入るようになりました。また、DLL 命名規則が cygwin 標準に沿うようになりましたので DLL のパッケージ名に番号をつけています。

cygwin-libode1-0.11.1-1
DLL
cygwin-ODE-doc-0.11.1-1
HTML ドキュメント
cygwin-ODE-demo-0.11.1-1
デモプログラム群(0.8 では test という名前でしたが、本家での変更にあわせて変更しました)
cygwin-ODE-texture-0.11.1-1
drawstuff で使用されるテクスチャ
cygwin-ODE-0.11.1-1
ライブラリ・ヘッダ
cygwin-ODE-0.11.1-1-src
ソース(cygport)

GNU Screen patch 版 [x86_64有] →DL link

仮想端末多重化ソフトとでも言えばいいのか、CUI 使いの強い味方 GNU Screenが遂に Cygwin 本家配布パッケージとなりました。以前配布していたものの代わりに、古い本家配布版に対してでかいの企画さんの非公式パッチ、2ch で公開されたパッチ等↓各種パッチをあてた上、256 色表示を有効にして再ビルドしたものです。当方の環境では、最新公式配布版(4.1.0)を使用すると表示が崩れたりして vi もまともに使えませんのでとりあえず旧版で。本家版と同様コマンドプロンプトで使用する場合には環境変数 CYGWIN で tty を設定しておく必要があります。詳しくは Cygwin User's Guide の Environment VariablesThe CYGWIN environment variableの項、および ML でのアナウンスを参照してください。環境変数 CYGWIN での tty 設定はなくなりました。mintty 等を使いましょう。なお、パッケージをインストールしても termcap、terminfo の設定はされませんので、必要があれば screencapscreeninfo.src を参考に設定を行ってください。←は、オリジナルのソースから抜き出してきたファイルです。256 色表示については The 256 color mode of xterm の下の方 &Applications that support 256 colors - screen& のような設定が必要かもしれません。

screen_patched-4.0.3-4
一式。
screen_patched-4.0.3-4-src
ソース一式(cygport)。↓のパッチ等適用したパッチ全てをまとめたパッチを含みます。
2ch上のパッチ1
screen-4.0.2-EB.patch 元レス
2ch上のパッチ2
screen-4.0.2-NCR.patch 元レス
2ch上のパッチ3
screen-4.0.3-regenc.patch 元レス
savannah 上のパッチ1
bug #11021, :exec .!. and Report()
savannah 上のパッチ2
bug #19805: [PATCH] copy/scrollback from altscreen
FreeBSD ports パッチ1
patch-ansi.c(FreeBSD cvsweb)
FreeBSD ports パッチ2
patch-resize.c(FreeBSD cvsweb)
FreeBSD ports パッチ3
opt-showencoding(FreeBSD cvsweb)
sjis 変換修正パッチ
screen-4.0.3_sjis_fix.patch encoding utf8 sjis の設定下でほとんどの種類の記号が入力できなくなる点を修正します。

GNU screen cp932 変換版 [x86_64有] →DL link

上記 GNU screen に対して、さらに encoding sjis における Unicode との変換を、Microsoft による変換(いわゆる cp932)に置き換えたものです。変換用テーブルの修正に加えて、IBM 拡張文字に対しても sjis として変換が行われるように一部コードを修正してあります。変換に用いているテーブルは Unicode Consortium の CP932.TXT を元に作成しています。GNU screen の配布ソースに含まれる変換テーブルは JIS0208.TXT 相当です。テーブルを差し替えるだけでも IBM 拡張文字以外は Microsoft による変換に従うようになります。なお修正に際しては、森山 将之さんの Windows-31J 情報 のページを参考にさせていただきました。

screen_cp932-4.0.3-6
一式。
screen_cp932-4.0.3-6-src
ソース一式(cygport)。↓の差し替え用変換テーブル、パッチの内容を含みます。
差し替え用変換テーブル
バイナリファイルの patch はとれないので、02.bin .bin をとって 02 にリネームした上、utf8encodings/02 と差し替えてください。
パッチ
screen-4.0.3_cp932.patch

Syck →DL link

YAML の比較的高速なパーサライブラリである Syck です。Perl(YAML::Syck)、OCaml(ocaml-syck) で使いたかったので作成。今なら Syck じゃなくて LibYAML でしょうか。

syck-0.55-2
一式。
syck-0.55-2-src
ソース一式(cygport)。

AutoHotkey 関連

主として Windows 上での自動操作系マクロ作成に使われるスクリプトである AutoHotkey に関してです。変態的文法さえ何とか慣れれば、非常に有用かつ強力なツールとなります。UNIX 環境下で小さなシェルスクリプトとか Perl スクリプトを書いて省力化していた人なんかには特にお勧め。単に自動操作するスクリプトだけではなく GUI 作成も可能であり、また、DLL 関数の呼び出しが可能であるためほとんど何でも可能です。いや、向き不向きはありますが。

win32help.ahk (Win32 API 用ラッパ作成ヘルパスクリプト)

ダイアログ

↑の通り、AutoHotkey は DLL 関数の呼び出しが可能ですが、引数の型を指定しなければならないのが面倒です。また、構造体がネイティブにサポートされていないため、その扱いもかなり面倒なものとなります。ということで、DllCall() のラッパ、構造体操作ラッパ、加えて定数定義を作成するためのヘルパスクリプトを作成してみました。ただし実行に C++ コンパイラと Win32 API のヘッダが必要になります。

変換結果の例は↓です。Constatns, Struct の場合は、「入力」が純粋な入力ではありません(ヘッダファイルの情報も使用しています)。また、Struct で BHFI という prefix は明示的に与えています。

モード
入力
出力
SimpleConstants(単純な定数)
#define CREATE_NEW  1
#define CREATE_ALWAYS   2
#define OPEN_EXISTING   3
#define OPEN_ALWAYS 4
#define TRUNCATE_EXISTING   5
CREATE_NEW=1
CREATE_ALWAYS=2
OPEN_EXISTING=3
OPEN_ALWAYS=4
TRUNCATE_EXISTING=5
Constants(数式等を含む定数)
#define DOCKINFO_UNDOCKED   1
#define DOCKINFO_DOCKED 2
#define DOCKINFO_USER_SUPPLIED  4
#define DOCKINFO_USER_UNDOCKED  (DOCKINFO_USER_SUPPLIED|DOCKINFO_UNDOCKED)
#define DOCKINFO_USER_DOCKED    (DOCKINFO_USER_SUPPLIED|DOCKINFO_DOCKED)
DOCKINFO_UNDOCKED=1
DOCKINFO_DOCKED=2
DOCKINFO_USER_SUPPLIED=4
DOCKINFO_USER_UNDOCKED=5
DOCKINFO_USER_DOCKED=6

Functions(関数宣言)
WINBASEAPI HANDLE WINAPI CreateFile(LPCSDIV,DWORD,DWORD,LPSECURITY_ADIVIVIBUTES,DWORD,DWORD,HANDLE);
WINBASEAPI HANDLE WINAPI CreateFileMapping(HANDLE,LPSECURITY_ADIVIVIBUTES,DWORD,DWORD,DWORD,LPCSDIV);
CreateFile(arg1, arg2, arg3, arg4, arg5, arg6, arg7)
{
    return DllCall("CreateFile", "Str", arg1, "UInt", arg2, "UInt", arg3, "UInt", arg4, "UInt", arg5, "UInt", arg6, "UInt", arg7, "UInt")
}
CreateFileMapping(arg1, arg2, arg3, arg4, arg5, arg6)
{
    return DllCall("CreateFileMapping", "UInt", arg1, "UInt", arg2, "UInt", arg3, "UInt", arg4, "UInt", arg5, "Str", arg6, "UInt")
}
Struct(構造体アクセス)
typedef struct _BY_HANDLE_FILE_INFORMATION {
    DWORD   dwFileAttributes;
    FILETIME    ftCreationTime;
    FILETIME    ftLastAccessTime;
    FILETIME    ftLastWriteTime;
    DWORD   dwVolumeSerialNumber;
    DWORD   nFileSizeHigh;
    DWORD   nFileSizeLow;
    DWORD   nNumberOfLinks;
    DWORD   nFileIndexHigh;
    DWORD   nFileIndexLow;
} BY_HANDLE_FILE_INFORMATION,*LPBY_HANDLE_FILE_INFORMATION;
Init_BHFI(ByRef source)
{
    VarSetCapacity(source, 52, 0)
}
Get_BHFI_dwFileAttributes(ByRef source)
{
    return ExtractInteger(source, 0, false, 4)
}
Set_BHFI_dwFileAttributes(ByRef source, content)
{
    InsertInteger(content, source, 0, 4)
}
Get_BHFI_ftCreationTime(ByRef source, ByRef dest)
{
    CopyMemory(&dest, &source + 4, 8)
}
Set_BHFI_ftCreationTime(ByRef source, ByRef content)
{
    CopyMemory(&source + 4, &content, 8)
}
(以下略)
一式
win32help-0_06.zip

DF.ahk (DF 起動ラッパスクリプト)

MYON氏作のファイル内容比較ツール DF は非常に便利なツールですが、コマンドライン引数で設定を変更することができません。このスクリプトはオプション設定を変更して DF を起動するためのヘルパースクリプトです。

AutoHotkey.exe DF.ahk /config:Binary /set:BinSize=0 c:\foo.dat c:\bar.dat
DF.ahk.exe /config:Text c:\foo.txt c:\bar.txt

のような感じであらかじめ保存した設定を呼び出したり、特定の設定内容を上書きすることができます。詳細は同梱ドキュメントを参照してください。

一式
DF_ahk-0_03.zip
一式(exe同梱版)
DF_ahk-0_03-exe.zip

駄目文字微対策版

AutoHotkey は Unicode 非対応アプリです。そして、いわゆる Shift JIS の駄目文字(0x5C=バックスラッシュを含む文字「ソ」等) に関する問題を含んでいます。本微対策版は、ファイル名関連部分(のみ)について駄目文字対策を施した(つもりの)ものです。文字列処理(正規表現も含む)には、依然として駄目文字等の Shift JIS を扱う際の問題が含まれています。exe のみなので、本家バイナリをインストールした後、差し替えてください。本家配布 exe と同じく UPX を使って圧縮しています。

exe のみ(1.0.48.05ベース): AutoHotkey_sjis_filename_104805.zip
パッチ: AutoHotkey_sjis_filename_104805.patch


C++ 関連

C++ に関するちょっとしたコードや落とし穴などを書いていくつもりです。

printf 風 Boost Format ラッパ

#include "printf.hpp"
// namespace は省略、printf 系は yak::util 以下にある

printf("%d %f", 1, 1.5);
string s;
sprintf(s, "complex: %1%", complex(1.0, 1.0));
ofstream ofs("foo.txt");
fprintf(ofs, "bitset: %1%", bitset(0xFF));

のように、printf スタイルで Boost Format を呼び出せるラッパです。詳細については /.-j の日記エントリも参照ください。

ヘッダ(のみ)
printf.hpp

C++ 版 Quantum::Superpositions

Perl6 で Junction operator として Perl 本体に導入予定の Quantum::Superpositions の簡易 C++ 版を作ってみました。superposition と非 superposition の間の関係演算子(==, !=, < <=, > >=)しかサポートしていません。常に参照ではなく値で保存していたり色々と直したいところもありますが、とりあえず動作しているようなので公開します。

C++0x で導入される Variadic templates を利用したものと、現行 C++ 範囲内で動作するものと両方作成してみました。双方とも Boost 必須です。とりあえず Boost 1.33.1 で動作確認しています。Variadic templates 版は ConceptGCC BoostCon Edition Cygwin 版で動作確認、非 Variadic template 版は、gcc 3.4.4 cygming special、VC++ 7.1、VC++ 8 で動作を確認しています。なお、Variadic tempaltes 版はマクロ YAK_USE_BOOST_TUPLE を定義すると、std::tuple(variadic) ではなく、boost::tuple を利用します。

#include "superposition.hpp"
// namespace は省略、all, any とも yak::util 以下にある

if( all(1, 2, 5) != 3 ) { /* この場合、true */ }
if( any(0, 0, 1) ) { /* そのまま bool 値として評価することも可能 */ }
// if( any(1, 3) == all(1, 1) ) { /* これはできないが、 */ }
if( all(any(1, 2), any(0, 1)) >= 1 ) { /* 多段で重ねることは可能 */ }
if( any(1, 'a', 1.2) == 'a' ) { /* 型の混合も可能だが、対応する演算子の定義が必要 */ }

ToDo:

一式(以下をまとめたもの)
superposition-0_1.zip
共通ヘッダ
superposition.hpp
Variadic templates 用実装ヘッダ
superposition_impl_v.hpp
Variadic templates 用実装補助ヘッダ
variadic_helper.hpp
非 Variadic templates 用実装ヘッダ
superposition_impl_nv.hpp

C/C++ 版 Quantum::Superpositions

↑の Quantum::Superpositions を Boost PreProcessor で実装してみました。二項演算子のみサポート、↑と違って多段はできません。プリプロセス段階でその場に式として展開されるのでショートサーキット評価が行われます。とりあえず Boost 1.41 と gcc 4.3.4 on Cygwin で動作確認しました。C でも動くはず。詳細は /.-j の日記エントリを参照ください。

#include "qsp.h"
if(QSP(QSP_ANY(1)(2), ==, QSP_ARG(1)))
{ /* ((1==1)||(2==1)) に展開 */ }
if(QSP(QSP_ANY(1)(2), ==, (1)))
{ /* QSP_ARG は省略可能(括弧は必要) */ }
if(QSP((1), ==, QSP_ALL(1)(2)))
{ /* ((1==1)&&(1==2)) に展開 */ }
if(QSP(QSP_ANY(1)(2), ==, QSP_ALL(1)(2)))
{ /* (((1==1)&&(1==2)) || ((2==1)&&(2==2))) に展開。右辺が先に変化 */ }
ヘッダ(のみ)
qsp.h

似非 closure

きっと誰かが既にやっているよう気もしますが気にしないということで、C++ で似非 closure を作ってみました。無名関数だけなら Boost.Lambda もあるし、C++0x では無名関数サポートが追加される予定なので良いのですが、closure と言うからにはレキシカルな環境が保存されていないと駄目なわけです。無論、擬似的な実装でありコードを書く側にも多少の手間がかかりますが、一応それっぽい使い方が可能です。例えばこんな感じです。

#include <boost/test/auto_unit_test.hpp>
#include "closure.hpp"

typedef boost::function<int (void)> Func;
boost::tuple<Func, Func, Func> make(void)
{
    using yak::closure::captured;
    using yak::closure::capvar;
    using boost::lambda::constant;

    captured<int> value(0);

    Func incr = (capvar(value)++);
    Func cur = (-capvar(value));
    Func reset = (capvar(value) = constant(0));

    return make_tuple(incr, cur, reset);
}

BOOST_AUTO_TEST_CASE(test_counter)
{
    Func incr, cur, reset;
    boost::tie(incr, cur, reset) = make();

    BOOST_CHECK(incr()  ==  0);
    BOOST_CHECK(cur()   == -1);
    BOOST_CHECK(cur()   == -1);
    BOOST_CHECK(incr()  ==  1);
    BOOST_CHECK(cur()   == -2);
    BOOST_CHECK(reset() ==  0);
    BOOST_CHECK(cur()   ==  0);
    BOOST_CHECK(incr()  ==  0);
    BOOST_CHECK(cur()   == -1);
}

宣言部分と参照部分でおまじないが必要になりますが、test_counter 中の incr(), cur(), reset() が同一の変数(既にスコープガイの value)を参照しています。当然異なる make() の呼び出しでは異なる変数が参照されます。constant で定数がガードされているのは、const 参照に束縛される(かもしれない)際に作成される一時変数が呼び出し時には既に破棄されている可能性があるからです。詳細については /.-j の日記エントリを参照ください。

ヘッダ(のみでOK)
closure.hpp

その他

上記にあてはまらない雑多なものについてです。

ax7z.spi for 7-zip 4.57+ →DL link

Makito Miyano 氏による 7-zip の解凍エンジンを利用した susieプラグインである、ax7z.spi(最下段にあります) の v0.7 を 7-zip 4.57 以降向けにビルドしたものです。 一部アプリケーション(例:あふの &S_ARC)で相対パスつきアーカイブの処理に失敗する点、CRC 値が取得できない点も修正してあります。

一時、汎用ソリッド書庫展開高速化有り版だけが最新版となっていましたが、他に機能追加も行っていた為、汎用ソリッド書庫展開高速化機能を分離しました。本バージョンは無し版、有り版は↓の ax7z.spi for 7-zip 4.57+ s です。以下の記述はもともと旧版の汎用ソリッド書庫展開高速化機能有り版に対してのものでしたが、本バージョンにも適用されます。

y2b5 でパスワード付き書庫、及び 7-zip の DLL が対応している形式全てに対応できるようにしました。対応している形式か拡張子で判別していますが、ユーザー定義の拡張子を追加することが可能です(デフォルトで iso 用に img, bin, mdf を追加。なお、これらの拡張子のファイルが全て開けるわけではありません。例えば、特殊なイメージファイルであったり(しばしば mdf の場合)、MODE2 のイメージだったりすると開けません)。UDF/ISO ブリッジの扱いに難があった点は y2b4 で暫定的に対応しました(7-zip 4.65 の DLL を使用してください)。y3b2 でファイル名が暗号化された書庫に対応しました。gzip, bzip2 系の書庫(.tar.gz, .tgz 等)が展開できなかった点も修正しています。y3b3 でパスワード入力用ダイアログの最前面化設定が可能になりました。y3b4 で ini ファイルを(デフォルトでは) AppData に置くようになりました。旧バージョン使用の場合は初回読み込み時に選択ダイアログが表示されます(「はい」で AppData に移動、「いいえ」で維持)。設定で変更も可能です。y3b6 にて永らく未解決課題であった(Vista以降?で)ネットワークフォルダにアクセスするとフリーズしてしまう場合がある現象に対して手を打ってみました。手元の環境では動作しているようです。使用ソフトとの組み合わせによっては逆にうまく動作しない場合も有り得ますので旧バージョンのリンクも残しておきます。

(他のものだっていつでもβ版のようなものですが)β版です。以下の注意事項にご留意ください。

プラグイン本体
ax7z-0.7-457y3b6.zip
プラグイン本体(旧バージョン)
ax7z-0.7-457y3b5.zip
オリジナル版(ソース同梱)(ミラー)
ax7z.spi v0.7 (2006/06/19)
7-zip 9.20 の DLL
7zdll-920.zip (7-zip をインストールしない場合に必要)
7-zip 4.65 の DLL
7zdll-465.zip (旧版。↑で動作するはずですが念のため置いておきます)
7-zip 4.57 の DLL
7zdll-457.zip (旧版。↑で動作するはずですが念のため置いておきます)
パッチ
ax7z-0.7-457y3b6.patch

ax7z.spi for 7-zip 4.57+ s →DL link

「s って何だよ」という感じですが、上記 ax7z.spi for 7-zip 4.57+ の変更に加えて、汎用ソリッド書庫展開高速化機能を追加し、ax7z_s.spi としたものです(s は solid の s)。ax7z.spi for 7-zip 4.57+ に関する注意点は全てこちらにも当てはまりますので↑も参照ください。s_y4b5 が y3b6 相当の機能(ネットワークフォルダ対策も込み)を含んでいるバージョンです。特に ini ファイルの格納場所変更に注意ください。なお、本プラグインは Hamana では正常に動作しません。Hamana 使用者の方は上記 ax7z.spi for 7-zip 4.57+ をご利用ください。

もともと ax7z.spi には同じ Makito Miyano 氏作のビューワ Hamana 向けにソリッド書庫展開用特別ルーチンが実装されていますが、Hamana 専用でした。他ソフトにおいてもソリッド書庫展開高速化を図るべく実装を行ってみたものです。といっても現状では何のことはない一度メモリあるいは HDD 上に全て展開してまう、という方式となっています。現状、β版で以下のように実装が甘くバグも残存しているものと思われますが、y2b0 よりは大分まともに使えるようになったと思います。

s_y4a1 でソリッド書庫展開のバックグランド化を実装しました。全ての場合でバックグラウンド展開が有効に働く訳ではありませんので以下の点などにご注意ください。

このソフトとの組み合わせで有効だった、あるいは、うまく動作しなかった等のフィードバックを頂ければ幸いです。

プラグイン本体
ax7z-0.7-457s_y4b5.zip
プラグイン本体(旧バージョン)
ax7z-0.7-457s_y4b4.zip
オリジナル版(ソース同梱)(ミラー)
ax7z.spi v0.7 (2006/06/19)
7-zip 9.20 の DLL
7zdll-920.zip (7-zip をインストールしない場合に必要)
7-zip 4.65 の DLL
7zdll-465.zip (旧版。↑で動作するはずですが念のため置いておきます)
7-zip 4.57 の DLL
7zdll-457.zip (旧版。↑で動作するはずですが念のため置いておきます)
パッチ
ax7z-0.7-457s_y4b5.patch

axffmpeg.spi

本プラグインは動画ファイルを画像書庫とみなし指定枚数、あるいは指定間隔ごとの画像を展開するプラグインです。現在のバージョンでデフォルトで対応拡張子として認識するのは、.3g2/.3gp/.avi/.flv/.m4v/.mkv/.mov/.mp4/.mpeg/.mpg/.ogg/.ogm/.webm/.wmv です。ただし、これらの拡張子の全てのファイルが展開できるわけではありません。展開に失敗した場合はエラー画像になります。また、対応拡張子はユーザー指定できます。[0.02]

画像出力は FFmpeg の外部 exe を利用します。Zeranoe FFmpeg builds等から入手ください。また、出力は PNG 形式となっていますので PNG 表示用 Susie plugin が必要です。ソフトウェア工房αさん等から入手ください。また、初期設定が必要ですので添付文書「4.設定」の項を参照ください。出力は BMP になりました。動画ファイルアクセス時に一括展開ではなく要求された場合にのみ実画像を展開するようにしたため使用感は大分改善されたのではないかと思います。 [0.03]

プラグイン本体(ソース同梱)
axffmpeg-0_03.zip

axpdf--.spi

本プラグインは PDF 中にある画像オブジェクトを抽出する Susie plugin です。 文字や図形のレンダリングは行いません。ちゃんと PDF の内容を画像化したい場合には↓axpdfium.spi を検討ください。

PDF に対応した Susie plugin として MangaMeeya とともに配布されていた PDF.dll が存在していましたがソースコードのライセンスの面から配布停止となってしまっています。本プラグインはソースコードのライセンス的に問題のない PDF プラグインを作成しようという目標の下、作成したものです。ただし、時間と能力の都合上、画像ビューワの最小ユースケースとして PDF 中の画像オブジェクトを抜き出すことのみを目的としています。現在のバージョンでは保護されていない PDF からの JPEG 画像と PNG(相当)画像の抽出のみが対象となっています。その他、制約についてはドキュメントを参照ください。パッケージングの際の誤りから 0.02 まで動作しないファイルを公開していました。申し訳ありません。

プラグイン本体(ソース同梱)
axpdf--0_03.zip

axpdfium.spi

本プラグインはちゃんと PDF をレンダリングする Susie plugin です(普通に PDF の内容が見られる、という認識で良いです)。

↑axpdf--.spi は PDF 中にある画像オブジェクトを抽出するだけの Susie plugin でした。「文字や図形のレンダリングは行いませんし、今後私自身が行う予定もありません」と書いていた訳ですが、非 GPL な PDF レンダリングエンジン PDFium が公開されました(元々 Foxit Reader のエンジンのようで Google Chrome でも使用されているもののようです)。ということで労せずレンダリング可能になったので Susie plugin 化してみました。実際 BMP に出力するだけならほぼ丸投げ可能でサンプルソースをちょっと修正しただけですが、ファイルサイズがでかい(spi が 4MB弱)です。またとりあえず動作版的に ax7z_s, axffmpeg 初期と同様な全ページ一括展開となっています。表示されはじめるまで時間がかかりますしソフトによっては無用な展開が連続する可能性があります。

先述の通り PDF の取り扱いはほぼ PDFium に丸投げの状態ですので表示がおかしい場合には PDFium 側の修正が必要になる可能性も高いですが、単にこちらの使い方がおかしいだけという場合も大いにありえますし、必要であれば PDFium 側への報告等も代行できると思いますのでまずは連絡頂ければ良いと思います。

v0.01 (2015/01/15) には任意の DLL 読み込みに関する脆弱性があります。v0.02 以降への更新をお願いいたします。

プラグイン本体(ソース同梱)
axpdfium-0_02.zip

ifmd.spi

出力結果

本プラグインは Markdown 形式のファイルを画像として描画する Susie plugin です。例えば ifmd.spi の GitHub リポジトリの README.md だと左図のような描画になります(なお、この画像は 4bit PNG にしてありますが実際は 24bit BMP で描画されます)。Markdown から一旦 HTML に変換し InternetExplorer の描画エンジン(MSHTML)を使って画像化しています。0.10 で HTML にも対応しました。なお、以下の点に注意ください。

プラグイン本体(ソース同梱)
ifmd-0_10.zip

nlAutoLogin

ニコニコ動画用ローカルキャッシュプロキシである NicoCache_nl に自動ログイン機能を追加する Extension です。現バージョンでは動画へのアクセス(URL が /watch/ になっている)時のみ有効です。動画ページのみとはいえ、セキュリティ的にはよろしくない状態です。覚悟完了した方のみご使用ください。また、config.properties のアクセス権にも気をつけた方が良いと思います。

一式(ソース同梱)
nlAutoLogin_0_2.zip

OmegaT 用超低機能 MediaWiki フィルタプラグイン

オープンソースの翻訳メモリソフト OmegaT には、MediaWiki から原文ファイルを追加する機能はありますが、MediaWiki 記法を認識してくれません。分節化規則によってある程度対応可能な部分もありますが、改行が保存されないなどの問題もあります。

本プラグインは OmegaT に MediaWiki 記法(の極々一部)を認識させるためのものです。「超低機能」の名前通り現時点では非常に限定された機能しか持っていません。現在 wikibooks 英語版の More C++ Idioms を日本語に翻訳中であり、その助けになればいい、程度のものです。動作は OmegaT 2.1.4 で確認しており他バージョンで動作するかは未確認です。

基本的に空行で分節化を行い、かつ一部の MediaWiki 記法を認識して特別に対応を行います。現状で認識する MediaWiki 記法は以下の通りです。

一式(ソース同梱)
MediaWikiFilter-0_01.zip

reducecahe

伝統的に Windows のメモリ管理はディスクキャッシュにメモリを割り当てがちです。Windows7 系においては大分改善されたらしいですが、それでも物理メモリの大半をディスクキャッシュが保持したままになることがあります。reducecache は一瞬だけディスクキャッシュのサイズを小さなサイズに制限することで、ディスクキャッシュとして確保されたメモリを解放するソフトウェアです。64bit 専用です。実行には Administrator 権限が必要です。

一式
reducecache-0_02.zip

対 zip UTF-8 強制試行版 7z.dll (UTF-8 MAC 対応)

zip ファイル中に格納されるファイル名の文字コードについては、UTF-8 フラグ(仕様書上は Language encoding flag) が設定されている場合には UTF-8 と規定されていますが、フラグ未設定時については公式仕様書上は CP437(IBM PC の文字集合) となっています。現実にはこのような規定が置かれる前に各環境下で思い思いの文字コードでファイル名が格納されていました。従って UTF-8 フラグ未設定時に zip ファイルに格納されているファイル名についてどの文字コードで格納されているかは確実なことは何も言えません。7-zip では Windows のコードページ設定に従って解釈しようとします(日本語環境下では CP932 (いわゆる Shift_JIS 相当) となります)。しかし Mac や UNIX 上で作成されたファイルの場合、UTF-8 フラグ未設定でも UTF-8 で格納されている場合が有り得ます。本パッチ版ではまず UTF-8 として解釈しようとして失敗した場合に Windows のコードページ設定に従って解釈しようとします。また、Unicode を Windows 上で通常使用される NFC に正規化しますので Mac で作成された zip でも普通に取り扱えるはずです。環境(どういう環境で作成された zip をもらうか)によっては文字化け軽減に寄与する場合があるでしょう。

Unicode 正規化のために Normaliz.dll が必要です。Vista / Server 2008 以降ではデフォルトで存在します。XP 等でも IE7 以降が入っていれば存在するはずです。存在しないという環境のために再配布パッケージも置いておきます。

32bit 版、64bit 版のいずれも Visual Studio 2010 でコンパイル、32bit 版は nmake NEW_COMPILER=1 MY_STATIC_LINK=1 として、64bit 版は nmake NEW_COMPILER=1 CPU=AMD64 NO_BUFFEROVERFLOWU=1 MY_STATIC_LINK=1 としてコンパイルしています。

32bit版DLL(9.22betaベース)
7zdll-922_utf8_32_20120523.zip
64bit版DLL(9.22betaベース)
7zdll-922_utf8_64_20120523.zip
パッチ(9.22betaベース)
7zdll-922_utf8_20120523.patch
32bit版 Normaliz.dll 等再配布パッケージ
idndl.x86.exe
64bit版 Normaliz.dll 等再配布パッケージ
idndl.amd64.exe