月間アップロード容量に達しました

前から気になっていたのだが、Evernoteの使用量をクリックすると「月間アップロード容量に達しました」とか言ってくるのだよ。

まだ全然残りがあるし、どうせ誤訳だろうと思って放置していたのだが、バージョンアップを重ねても一向に直る気配がないので調べてみた。


http://pootle.evernote.com/ja/winx_evernote/enclient/Evernote.rc.po/translate/#unit=658038

元の英文は“Monthly Upload Allowance Used”だ。やはり誤訳だったようだな。「月毎アップロード割当の使用量」と書いて Suggest しておいたのだが反映されてないな。というか、この翻訳サイトはUIが斬新過ぎて使い方がよくわからんのだ。うん。

割り算と余りを一度に

Pythonには商と余りを一度に求めるdivmodっていう関数がある。

>>> divmod(10, 3)
(3, 1)

C言語にはないのかなと思って探してみると、やっぱりあった。divって関数だ。

div_t res;
res = div(10, 3);

しかしCRTの実装(VC\crt\src\div.c)を見てみると、

div_t __cdecl div (
  int numer,
  int denom
  )
{
    div_t result;

    result.quot = numer / denom;
    result.rem = numer % denom;

    return result;
}

うわー、思いっきり2回に分けて計算してるしー。

でもね、実際にコンパイルしてみると……

CDQ
IDIV DWORD PTR SS:[EBP+C]

1回にまとめられてる。VCの最適化ってすごいな。

ところで、IDIVの1つ前にCDQが置かれている。こいつが気になった。解説はここにあるが、読んでもよくわからなかった。実際にデバッガで実行してみると、EDX を 0 や F で埋めていたので、どうやら符号拡張に関わる命令らしい。

IDIVの説明によれば、どうも x86 の IDIV は「64ビット割る32ビット」をやるらしく、そのため数字のビット長を拡大する必要があって、それが符号拡張処理ってことか。

tempから不審なパケットが出てます

Winampインスコしたらrundll32.exeが204.232.180.209:80にアクセスするようになったので少し調べてみた。

まずはIPアドレスを調査

204.232.180.209の逆引きはできなかった。whoisで調べるとTexas州San AntonioにあるOpenCandyという組織のものらしい。ポート80はHTTPと決まっているので試しにブラウザでアクセスしてみたが空白が表示されるだけだ。Googleのキャッシュによると少し前までは

Heere I am ....

と表示されていたようだ。スペルミスがいかにも怪しいぞ。

次はDLLの調査

rundll32.exeはDLL内のコードを実行するときに使われるので、通信の発端となったコードは他の場所にある。Process Explorerコマンドラインを調べると、本体は一時フォルダにあることがわかった。

RunDll32.exe "C:\Users\username\AppData\Local\Temp\nab958F.tmp\OCSetupHlp.dll",_OCPRD194RunOpenCandyDLL@16 3520

OCSetupHlp.dllのハッシュ値VirusTotalで検索してみる。その結果がこれ。うん? どうも一部のアンチウイルスソフトで検出される代物らしいぞ。このDLLがなぜ一時フォルダに置かれていたのか不明だが、フォルダの作成日時からいってWinampインストーラーがやった可能性が高い。

スパイウェアか?

VirusTotalの検出名でググってみたところ、OpenCandyについて記述したWikipediaの記事を見つけることができた。これによるとOpenCandy付きのインストーラーを実行するとパソコンの中身と場所に応じて他のアプリがお勧めされるらしい。件の通信はそのためのものだろう。自分の感覚から言うと、これは明らかにアドウェアなので通信は許可しないし、DLLも削除しておいた。

ちなみに、このOpenCandyはWinampインストーラー以外にもCCleanerやWinSCP、Unlocker、Connectify などのインストーラーにも含まれているようだ。この調子だとまたスパイウェア対策ソフトをインスコする必要があるかもしれないな。

Windows版のSVNが見つからない理由

英語版Wikipediaの記事を見たら、WindowsSubversionのダウンロード先が複雑な理由がわかった。

SubversionはもともとCollabNetという会社が作り始めたもので、2009年11月にApacheに寄贈された。ここで手に入るやつは寄贈前の 1.6.6 までで、コンパイル日時を見ると2009年10月だからこの情報と合致する。

その後2011年10月にApacheから 1.7 が出た。しかしバイナリの配布はしない方針らしく、第3者がコンパイルしたやつを手に入れるしかない(もしくは自分でコンパイル)。ここにあるのは第3者が提供してるバイナリの一覧だ。

というわけで、Subversionの最新版がほしければ有志が作成したバイナリを、古くてもいいならオリジナルの開発者のやつをダウンロードすればいいということになるかな。

IrfanViewの代わり

この前i_view32.exeの中身を見たときに気付いたんだけど、IrfanViewはいまだにANSI版のWindows APIを使ってるね。これだと日本語版のWindowsならJISコード、韓国語版のWindowsならハングルしか扱えなくなる。

IrfanViewには標準でUnicode pluginなるものが付いてくる。内部ではMBCSが使われているのにどうやってUnicodeを実現してるのか不思議なのだが、とにかくこのプラグインを読み込むと世界の文字が扱えるようになるはず……なのだが実はバグ入りだ。ファイル一覧が化ける、フォルダー名の最後に「ニ」が入っているファイルを開くと次のファイルに行けなくなる(他にもダメな文字があるかも)などの不具合が出る。

正直これらのバグを調べていて、これ以上IrfanViewを使っていく気が失せたので他のソフトに乗り換えることにした。色々探してみた結果、MassiGraがよさそうである。名前がちょっとダサいが、IrfanViewのアイコンもダサいので気にするまい。IrfanViewの編集機能を使っていなければ乗り換えることを勧める。