ごるあなゆーぴーえっくす
つい最近は・・・10 月だというのに夏のような暑さがある。2 つ前の月が 8 月。8±2. 6 月と同じと考えたらいいのか? 6 月は暑かった気もしないでもないから、不思議ではないのかな。
ごるあな
久々に、あなごるの問題を解いてみた。 rotate arrows FIXED.js だ。トップが 70B で、自分のコードはそれより 1B だけ短い 69B だったので、投稿した。まだ抜かれてない。これより短い解答はあるかもしれないな。あんまり吟味せず、「トップより短くなったから投稿しよう」という短絡的なポストなのでなおさら。
ゆーぴーえっくす
こないだ、ブログに gcc -nostartfiles について書いたが、もっとファイルサイズを小さくするためには、UPX を使うのがいい。
Windows やその他の OS 向けにバージョン 3.91 が出ている。最新版だ。リリース日は 2013 年。今年だ。最初の版が 1996 年に出たから、随分と息の長いプロジェクトである。そして更新が活発だ。
Windows 版 UPX では、EXE と DLL の圧縮ができる。upx.exe に、目的のバイナリをドラッグアンドドロップすればお手軽。正式にはコマンドラインツールなので upx hoge.exe
とか打って使う。MS-DOS のワイルドカード記法を使って upx *.exe *.dll
のように指定すると、カレントディレクトリにあるすべての実行ファイルおよび DLL をまとめて圧縮できる。素晴らしきユーザビリティの高さである。
それから、圧縮したバイナリに対して、upx -d hoge.exe
のようなコマンドを打つと、解凍もできる。あろうことか、可逆圧縮なのである。神にも程がある。
ただし、実際には、解凍したバイナリは、圧縮前のバイナリと、ファイルサイズが同じでも、バイナリエディタで比較したところ、中身はところどころ違っていた。たとえば、kernel32.dll
という文字列が KERNEL32.DLL
というふうに大文字になっていたりする。
一般に拡張子が exe である Windows の実行ファイルの中身はバイナリであり、その構造は Portable Executable (PE) というフォーマットであるが、これについてはよくわからない。なので、圧縮前バイナリと UPX による解凍後バイナリ間の差異が、アプリケーションの挙動にどういう違いをもたらすのかがわからない。