Windows10 TH2 の更新に失敗する
TH2の更新に成功したら、なぜかイベントログが全部吹き飛んでしまい、今となっては詳細の記述ができないのだが……
Windows Update関連のイベントで 0x8024200D というエラーコードが1回、かつWindowsを再起動する度にソース Service Control Manager で 7031 が発生して、TH2のアップデートに失敗するということがあった。
これはシステムの保護を無効にしてから再起動したらうまくいくったのだが、なんとなくもうこのPCはハードウェアが壊れてかけているような気がしないでもない。
ヘルプファイルがフリーズするんだが
Autohotkeyのヘルプファイル(AutoHotkey.chm)でキーワード検索しようとすると
hh.exeがCPUコアを100%使いきって「応答なし」になる現象が発生。
これ前から気になっていて、どうしても解決できなかったんだけど、今日このフォルダーを削除すると、ヘルプファイルが正常に動くようになることに気がついた。
%LOCALAPPDATA%\VirtualStore\ProgramData\Microsoft\HTML Help
フォルダーの中には何も入ってない。なんなこりゃ?
これファイルの仮想化か、HTMLヘルプのバグなんじゃないかなあ。誰か再現できるなら報告しておいてくれ。
Googleマップが遅い
GoogleのIPv6が復活したと思ったら、何かGoogleが凄く遅い。特に細かいデータをやり取りする(と思われる)Googleマップが遅い。
ひょっとしてプロバイダーのIPv6が遅いのかなと思い、IIJmio IPv6スピードテスト(β) でテストしてみるが、遅くない。むしろIPv4よりはいくらか高速である。別のIPv6対応サイト(例えばMozilla Japanとか)では特に何も感じないので、ISPは悪くないと思われる。
次にpingを打ってみたんだけど、ここで異常を発見する。GoogleのIPv6サーバーの反応速度が凄く遅い。
ping -4 www.google.co.jp ラウンド トリップの概算時間 (ミリ秒): 最小 = 5ms、最大 = 6ms、平均 = 5ms
ping -6 www.google.co.jp ラウンド トリップの概算時間 (ミリ秒): 最小 = 152ms、最大 = 153ms、平均 = 152ms
「4桁ごとに区切ると読みやすいよ」「は?」
大きな数字は4桁ごとに区切ると読みやすくなるよって言っても、すぐには理解してくれないことがよくあるので表で説明。
一般的に数字は3桁ごとにコンマを振るようになっているが、これは欧米にとって都合のいいやり方。*1
表記(3桁毎にコンマ) | 読み方(英語) |
---|---|
1,000 | 1 thousand |
1,000,000 | 1 million |
1,000,000,000 | 1 billion |
1,000,000,000,000 | 1 trillion |
例: $ 12,345,678 → 12 million 345 thousand 678 dollars
日本を含め東アジアでは4桁ごとに区切ると都合がいい。
表記(4桁毎にスペース) | 読み方(日本語) |
---|---|
1 0000 | 1万 |
1 0000 0000 | 1億 |
1 0000 0000 0000 | 1兆 |
1 0000 0000 0000 0000 | 1京 |
例:¥ 12 3456 7890 → 12億3456万7890円
区切るのに使う記号は何でもいい。従来通りのコンマでもいいし、スアポストロフィでもハイフンでも何でもいい。
さらに、インドでは3桁でも4桁でもない別の方式が使われているらしい。
ちなみに、コンピュータの方は既に世界の様々な事情に合わせて桁区切りできるようになっている。例えば、以下のコードを実行してみると、最初3桁、次からは2桁というインドの変なやり方で区切れるようになっていることがわかる。
#include <string> void test(void) { std::wstring output; wchar_t buf[256]; wchar_t *sample = L"123456790"; output += L"日本語:"; if (! GetCurrencyFormat(0x0411, LOCALE_NOUSEROVERRIDE, sample, NULL, buf, 256)) { return; } output += buf; output += L"\n"; output += L"ヒンディー語:"; if (! GetCurrencyFormat(0x0439, LOCALE_NOUSEROVERRIDE, sample, NULL, buf, 256)) { return; } output += buf; MessageBox(NULL, output.c_str(), L"", MB_OK); }
そういえば、最近インドの実情に合わせた電卓を発売したらバカ売れしたとかいう話があったか。
toyokeizai.net
ちにみに、何で日本ではこうなっていないのか調べてみたのだが、明治時代から4桁に変更しようという話は一応ある模様。
ameblo.jp
他にも明治時代に決まってしまった不合理なルールと言えば、モールス符号があるか。オリジナルのモールス符号は、英文を表現したときに、電文の長さが短くなるよう可変長のコードが採用されている。しかし、和文モールスでは平仮名の頻度に関係なく割り当てられていているので短くならないという。これなら、初めから固定長にした方が聞き取りやすかっただろうに。6ビットあれば「平仮名+記号類+数字」がちょうど入りそうだし。*2
このように、表面だけ真似して本質な部分が置き去りになっている状態を「カーゴカルト」と呼ぶので覚えておこう。
Firefoxは訪問回数を記録している
places.sqliteに入ってるmoz_historyvisitsというテーブルを見ればわかると思うけど、Firefoxはユーザーがいつどこのサイトに訪問したのか記録している。
こういうデータを解析すると面白いことがわかりそうなのだが、残念ながら小生は統計にもSQLにも詳しくないので、あまり複雑なことができない。とりあえず「よくアクセスするページのランキング」を作ってみた。
SQLを勉強中で、なおかつFirefoxユーザーであるなら、実際のデータを見てみると色々参考になるかも。
-- よくアクセスするページのタイトルとURLを訪問回数順に100件表示 SELECT h.visit_count, p.title, p.url FROM moz_places AS p INNER JOIN ( SELECT place_id, count(place_id) AS visit_count FROM moz_historyvisits GROUP BY place_id ORDER BY count(place_id) DESC LIMIT 100 ) AS h ON p.id = h.place_id ORDER BY h.visit_count DESC;
SQLを実行するツールだけど、いくつか候補がある。FirefoxのアドオンであるSQLite Managerか、単体で動くDB Browser for SQLiteが単純でいいと思う。もっと豪華なやつはたくさんあるけど、さしあたりはこの2つで間に合う。
ちなみに上のコードだけど、SELECTを1個にすると微妙に重いので、サブクエリーを使っている。いや、最適化とか全然知らないんだけどさ、たぶんmoz_historyvisitsが大きすぎるので早いうちに集約しておかないと連結処理に時間がかかるんだと思う。
OPTIONSとHTTPの行方
CORSについて調べていたら、OPTIONSメソッドが出てきた。
そういえばHTTPにはそんなようなメソッドがあったねと思い、Yahoo! JAPAN に試してみたらガン無視された。次にGoogleに試したら 405 Method Not Allowed が返ってきて拒否られる。おまえらウェブを代表するサイトなのにやる気あるのかと。
で、最後に www.example.com に試したら、きちんと返ってくるじゃないですか。すばらしい。
OPTIONS * HTTP/1.1 Host: www.example.com Connection: close HTTP/1.1 200 OK Allow: OPTIONS, GET, HEAD, POST Date: Wed, 08 Jul 2015 06:26:48 GMT Server: ECS (pae/37A2) x-ec-custom-error: 1 Content-Length: 0 Connection: close
HTTPは、実装する人間が「そういえば、そんな機能あったね」状態でもそれなりに動いてしまうのが利点だなと、HTTP/2普及前夜に思った。