2013-10-20

Windows 8.1にアップデートした

メインマシンをWindows 8.1にアップデートしてみました。



スタートボタン復活はClassic Shellを使っているので、正直なところ今さらどうでもいいのですが、まあ、アップデートは無償ということで、せっかくですし。

Windows 8.1へのアップデート方法

手順はMicrosoftのサイトにあるWindows 8 から Windows 8.1 にアップデートするのとおり。

Microsoftアカウントに紐付けないで使うなら「ローカル アカウントの使用を続けるには」に目を通しておきます。
[新しいアカウントの作成] を選択したうえで [既存のアカウントを使用] を選ぶ、というのはちょっと分かりにくい。

アップデートしたら初期化された設定


8.1にアップデートしたら、いくつか設定が初期化されてしまいました。

マシン起動時に自動ログオン:
  1. 「ファイル名を指定して実行」(Win+R)で「control userpasswords2」
  2. 「ユーザーがこのコンピューターを使うには、ユーザー名とパスワードの入力が必要(E)」のチェックを外す

ログオン時にデスクトップを自動表示:
  1. タスクバーを右クリックして「プロパティ(R)」
  2. 「ナビゲーション」タブの「サインイン時または画面上のすべてのアプリを終了したときに、スタート画面ではなくデスクトップに移動する(D)」にチェック。

CapsLockキーとCtrlキーの入れ替え:
  1. regeditで HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout
  2. [新規]→[バイナリ値]、名前は「Scancode Map」
  3. 00 00 00 00
    00 00 00 00
    03 00 00 00
    1d 00 3a 00
    3a 00 1d 00
    00 00 00 00
  4. 再起動

あと、「Lenovo Auto Scroll Utility」をWin8.1アップデート前にアンインストールさせられたので、Lenovoのサイトから再導入。
対応OSに「Windows 8.1 64bit」が入っているので安心してインストールできます。

8.1に上げて何が変わった?

スタートボタンはもともとClassic Shell使ってるし、モダンUIやWindowsストアも使ってないので目に見える恩恵は今のところなし。
これまでのWindowsでのSP(サービスパック)を入れたような安心感が得られる、というのがいちばん大きいでしょうか。

2013-08-10

F-02E(ARROWS X)の液晶保護シート選び&飛散防止フィルム剥がし

F-02Eの液晶保護シートを何枚も買って試したけれど

ドコモF-02E(ARROWS X)を買いました。
液晶保護シートを貼って使いたいのだけど、どうも満足できる保護シートに巡り会えません。

最初に買ったのは500円強の光沢・防指紋タイプ。
確かに指紋は目立ちにくいけど、指のすべりが悪い。摩擦で指紋がなくなりそうです。

そこで別メーカーのアンチグレア(反射防止)タイプを500円弱で購入。
確かに指すべりはいいけど、思った以上に白い。液晶輝度をかなり明るくすれば多少はマシになりますが、バッテリーがガンガン減るわりには、それほど見やすくなるわけでもなく。

買ったケースに同梱されていた光沢の保護シートも試してみましたが、やはり指すべりは残念。まあ、これはオマケなので致し方ない。

フィルム2枚重ねをやめれば見やすくなる?

どんな保護シートを買えばいいのかネットで調べていたら、どうもこの機種は最初から「飛散防止フィルム」というものが画面に貼ってあるそうな。(工場出荷時に貼ってあるペナペナの保護フィルムとは違う物)

端末を落としたりしてガラスが割れた時に飛び散らないように、という意味で「飛散防止」だそうですが、どうせ液晶保護シートを貼るなら、飛散防止フィルムは要らないのでは? 剥がしてしまえば、さっきのアンチグレアなシートでも多少は画面が明るくなる?

実際に剥がしちゃったケースをネットでは何件か見たので、試してみました。

飛散防止フィルムを剥がした

飛散防止フィルムを剥がすメリットはと言うと……
画面がキレイになる(ような気がする)
とはいえ、もともと透明なフィルムを剥がして、体感できるほど変わるかどうか。プラシーボかも。
端末がちょっと薄くなる
剥がしたフィルムの分だけ薄く軽くなります。薄さはともかく、軽さは体感できる違いじゃないですが。
ガラス面がむき出しになる
保護シートを貼るのではなく、ガラス用のコーティング剤を塗布する、という選択肢も選べるようになります。
「NTT docomo Xi」のロゴがなくなる
実はロゴは飛散防止フィルムに印刷されているため、剥がすと見た目スッキリ。
(この記事の最後に写真があります)
もちろん、剥がすことのデメリットもあります。
剥がしたら貼り直せない
フィルムを痛めずに剥がすのはおそらく無理。剥がしたフィルムはベコベコになっちゃったので、元には戻せません。
ドコモの保証が効かなくなるかも
少なくとも初期不良がないことは確認しておきたいところ。
フィルムは接着剤でベッタリ貼ってあるので、何かの弾みで偶然に剥がれるようなことはなく、故意に剥いだことはすぐバレます。
(使ってるうちにフィルムの角が浮いてきたので剥いじゃった…というシナリオはありえるかもしれませんが)
剥がすときに傷をつけちゃうかも
剥がすのに金物を使う場合、作業中にガラス面や筐体を傷つけてしまう可能性も。
剥がす作業が大変
端末を傷つけないように剥がすのは神経を使います。

剥がし方は、別に複雑な作業は必要なくて、
  1. フィルムの角から、フィルムとガラスの間に薄くて硬くて丈夫なものを差し込む。カッターナイフとか。
  2. 何とかしてフィルムの角を浮かせる。
  3. がんばって剥がす。フィルムは接着剤で貼ってあるので頑張りが必要。
溶剤とか超強力ガムテープなどをうまく使うと、もうちょっとガラスや筐体を傷つける可能性を低くできるかもしれません。
私はカッターでカリカリやってるうちに、ガラスと筐体にちょっと傷をつけてしまいました。

筐体の傷つけそうなところは、あらかじめマスキングでもしておくと良かったのかも。

剥がしたあとの飛散防止フィルム。
なんかガビガビしてるのは接着剤です。
「NTT docomo Xi」のロゴ印刷が見えるでしょうか?

「ファンデーション防止」液晶保護シートは評判どおり

飛散防止フィルムと接着剤がなくなって、これでアンチグレアな保護シートでも多少は画面が見やすくなったかなと貼り直してみました。
……あまり変わった気がしません。

けっきょく、もう1枚、保護シートを買うことにしました。ネットで評判のよかったラスタバナナの「ファンデーション防止フィルム」。ファンデーションと書かれてる時点で自分とは無関係だと思っていたので、考えたこともありませんでした。

780円と、これまで買った保護シートの中では最高級品でしたが、確かに指すべりも良く、光沢タイプなので画面も明るくキレイ。画面への映り込みはありますが、気にしないようにすれば意外と気になりません。
最初っからこれ買えばよかった……。

F-02E本体はもう型落ちで叩き売り状態なので、対応する保護シートもだんだん店頭から姿を消しつつあります。
買うなら早めの確保がオススメ。
アマゾンで買う
楽天でさがす
Yahoo!シッピングからさがす

けっきょく飛散防止フィルムを剥がした意味があったのかどうか微妙なオチになりましたが、たぶん剥がしたほうが、より画面がキレイで電池持ちもよくなった(輝度を下げられるから)はず!

↓剥がした後の外観(剥がす前の外観写真を表示中)。

2013-06-17

NETGEARの無線ルーターWNDR4500が特価だったので

無線LANのAPが壊れたので新調しようかと

家で使っていた802.11g/nのアクセスポイントの電源が入らなくなりました。
今から買うとなると11ac対応ルーターも気になりますが、対応するクライアントを持ってないし、まだ初物すぎるのでもうちょっと枯れてからでいいかな……ということで11nルーターを新調することに。

どうせなら11nの中では性能のいい品をと考え、最初はNECのAterm WR9500Nあたりを検討。アマゾンだと8,080円、新宿を回ってみたらヨドバシもヤマダも8,080円のポイント10%(ビックは高かった)。
ヤマダならポイントルーレットが4回分、最低でも200ptもらえるから一番お得かな……とソロバンを弾いていたら、NTT-X Storeから在庫処分セールのお知らせが。

◆超ハイスペック無線LANルーターの決定版!箱汚しまして超特価!◆
▽NETGEAR▽【箱汚れ品/3年保証】450Mbps対応 WNDR4500-100JPS
5,980円(税込)+期間限定:500円割引 = 5,480円(税込) + 送料無料



NTT-X Storeの「箱汚し品」は何度か買ったことがありますが、汚れ・凹みは一度も見たことがありません。
型落ち在庫を処分するときには、そういうことにでもしておかないと何か都合の悪いことでもあるのでしょう。

というわけであっさり乗り換え。
金曜の夜に注文して、日曜の朝に届きました。

NETGEAR WNDR4500のpros/cons

届いた品をざっとセットアップしての所感です。

よいところから。
2.4GHz/5GHz帯の両方とも450Mbps
比べていたNECのWR9500Nは2.4GHz帯は300Mbps。まあ、実効速度は大差ないかもしれませんが。
(そもそもウチに2.4GHzで450Mbps対応の子機はないので宝の持ち腐れだったり)
USB端子で簡易NASとかプリントサーバー
NECのWR9500NはNASにはなってもプリンターはつながらないっぽい。
(ウチはどちらも利用予定はないので詳しく調べてません)
箱はキレイだった
ラップシュリンクされた箱だったので、仮に汚れていたとしても問題なさそうです。凹みもありませんでした。
もっとも、ひととおり動作が確認できたら(初期不良の返品の必要がなさそうだと判ったら)箱は捨てちゃうので、キレイかどうかは大した問題ではないです。

次に、とまどったところ。
ジャンボフレーム非対応
個人的にはこれがいちばん残念。
NAS間の実効転送速度が、ジャンボフレーム対応ルーターを介していたときは30MB/s弱は出ていたのに、これに替えたら20MB/s程度と3分の2になってしまいました。けっこう違いが出るものですね。
とはいえ、「ジャンボフレーム対応の安いギガハブ」を買ってきてかませても、まだ他の同等無線ルーターを買うより安い、という考え方もあります。
たとえばアマゾンではギガハブは1,714円から
でかい
写真からはイメージ湧きにくいですが、高さ26cm、奥行き17cm。
NECのWR9500Nは高さ15cm、奥行き11cm。容積差はなんと6倍。(重さは2倍)
(ウチでは普段目に入らない場所に置くので、大きかろうと気になりません)
付属の電源ケーブルがアース付きの3ピン
ウチは3ピンの電源タップを使っているので問題になりませんでした。
WEP非対応
WPAやTKIPは選べますが、WEPが選べません。 DSをつなぐときには困るかもしれませんが、もう古いDSソフトをオンラインで遊ぶこともないので気にしないことにします。
どうしてもDSをつなぎたいときは、標準ではオフになっている「ゲストネットワーク」を暗号化なしで一時的に開放するとか。WEPなんて今どき暗号化してないに等しいので、「使う時だけ波を吹く」が正しい運用かもしれません。

あと、デフォルトのIPアドレスが 192.168.1.1 なので、192.168.0.* でネットワークを組んでると、ひと手間設定変更が必要です。

2chや価格comを見てるといくつか不具合もあるようですが(設定値によっては管理画面で入力しても保持されないなど)、ウチではあんまり細かい運用をする予定はないので、まずはこのまま様子を見たいと思います。

DD-WRTもあり

どうしても細かい設定をしたい場合は、DD-WRTを導入できるみたいです。メーカー保証とか電波法とかの問題がありますが。
DD-WRT for WNDR4500v1

2013-06-06

Gmailの受信トレイのタブ移動、なぜ「`」と「~」キー?

Gmailの受信トレイに「タブ」機能が導入されました。

数日使ってみていますが、確かにいいかも。
少なくとも「重要マーク」よりはずっと役に立っています。重要マークは私には使いこなせませんでした……。

タブを移動するショートカットキーは`~…なぜ?

Gmailはだいたいキーボードで操作しているのですが、タブを移動するキーボード ショートカットはあるのでしょうか?
ヘルプを読んでも見つからなかったので諦めていたのですが、実はGmailの画面で?を押すと表示される一覧には載っていたのでした。

「受信トレイ セクション」がタブのことを指しているのに気づくまで、しばらくかかりましたが。

しかし`Shift+@)とか~Shift+^)とか、ずいぶん覚えにくいキーに割り当てられているのはどういうわけでしょう?

実はこれ、日本人ならではの悩み。
日本語キーボード(106/109キー)を使っているとそんなキー配置になってしまうのですが、英語キーボード(101/104キー)だと、これらのキーは次のような配置になっているのです。

`1の左隣(半角/全角の位置)
~Shift+`

なるほどいい位置にあるし、Shiftを押しながらだと逆順というのも、他の操作と統一感があります。
まさかこんなところで106キーボードのドメスティックさを思い知らされるとは……。

2013-05-17

SC-01E(GALAXY Tab 7.7 plus)のUSBアダプタを求めて

GALAXY Tab専用コネクタにUSBから変換するアダプタが欲しい

SC-01E(GALAXY Tab 7.7 plus)のコネクタはmicroUSBではなくGALAXY(Tab)シリーズ専用形状
USBケーブルが1本同梱されていますが、常に持ち歩くのは面倒です。

追加で買おうとしたら、純正の「USB接続ケ―ブル SC01」は1,365円(ドコモオンラインショップ)といいお値段。
非純正を買うなら……せっかくなので、「microUSB(メス)⇔Galaxy(オス)」という変換アダプタがないものか探してみます。ケーブルってかさばりますし。

いい感じの変換アダプタがあったので注文してみたら

見つけたのがMicro USB Female to Lightning 8-Pin / Apple 30-Pin / Samsung 30-Pin Male Adapter。$5.60。
新旧Apple端子も付いているなかなかキメラなアダプタですが、おおむね希望どおり。

注文して到着まで20日弱。格安中華アイテム通販サイトは格安ですが時間がかかるのが難点です。今回は別に急ぐ品じゃなかったのでいいんですが。

さて、早速試してみると……充電は、されます。でもPCからは認識されません
商品販売ページには“Supports data transfer and charging”って書いてあったのに。

iPhone4も同様。充電はできますがデータはダメです。

もう一度商品ページをよく見ると、カスタマーレビューで「サムスンでデータ使えず。返金してくれたからまあいいけど(意訳)」と書いてる人が。ちゃんと読んでおけばよかった……。

仕方ないので私も返金申請

【余談】格安中華アイテム通販サイトとの付き合いかた

ちなみに、こういう格安中華アイテム通販サイトでは「説明と実物が違う」のはザラ。怒るのは野暮というものです。ちゃんとした品をちゃんと入手したければ、ちゃんとしたお店でちゃんとした代金を払うべきで。

検品の手間を省いているのも値段が安い理由の一つなので、それなりの確率で不良品に当たるのは覚悟しなければなりません。造作が甘いなど、ある程度の悪さは「今回はハズレかー」と諦めるしかないです。
そして「ある程度」を超える問題があったら、淡々とRMAの手続きをするだけです。

手続きは英語になりますが、別に中学生レベルの英文で問題ありません。「Data transfer does not work.」とでも連絡用フォームに書けば通じます。
向こうも「本当に不良かどうか判断したいので症状を詳しく聞かせてほしい」などとまどろっこしいことは言ってきません。翌日には「再送と返金どちらがいい?」との返事が(英語で)来ました。

個体不良なら再送でもいいですが、今回は商品仕様という可能性もあるので、返金してもらって別の商品を探すことにします。

なお、RMAと言いつつ、数百円程度の品だと返金時に「返品しろ」とは言われません。
結果的に「充電ならできるアダプタ(データは通さないけど)をタダでもらった」と思えば、むしろ不良品でラッキーくらいの気持ちになれるんじゃないでしょうか。
とはいえ、本当に欲しい品は今日注文しても届くのはまた2~3週間後なのですが……。

代わりの品を探す

代わりに見つけたのがUSB to Micro USB + Mini USB + Apple 30-Pin / Samsung Galaxy Tab 30-Pin Data Charging Cable - Black。$4.20。
当初の希望だった「変換アダプタ」タイプはこのサイト(dx.com)では他に見当たらず、これは80cmの巻き取りUSBケーブル付きです。
巻き取り式だからそんなには邪魔にならないし、変換アダプタ部だけバラして使うという手もあるかも。

「Apple 30pin」「Galaxy Tab 30pin」両対応を謳ってますが、写真のように30pinコネクタは1つしかありません。
表向きに挿すとApple、裏向きに挿すとGalaxy Tab、というリバーシブルタイプです。

裏側には「For SAM Tab」と書かれているので、逆挿ししてコネクタや端末を壊す心配も要らなそうです。
(ちょっと固いのが難点ですが)

MicroUSBだのMiniUSBだのの部分も、写真のように、合体ロボ的なイイ味を出しています。

「今度は本当にデータ使えるんだろうか」という疑念はありましたが、今度は無事認識されました。

なお、「GALAXY Tab専用でケーブルも長くていいから安いのが欲しい」という場合は、$2.10からあるようです。

追記

安物のリトラクタブル(巻き取り式)ケーブルにありがちですが、あっという間にケーブル内で断線したようです。
変換アダプタ部だけ取り外して、丈夫なマイクロUSBケーブルに挿して使っています。

2013-03-25

高還元率クレカ「漢方スタイルクラブカード」申し込んだ

ポイント還元率1.75%のクレカ「漢方スタイルクラブカード」

ポイント還元率の高いクレジットカードの情報を探していると必ず目にする「漢方スタイルクラブカード」
あまり手持ちカードを増やしたくなかったので指をくわえて見ていましたが、手持ちカードの使い勝手が残念になってきたため申し込んでみました。
1.75%という比類ない高還元率
1.0%でも高いほうと言われる中で、まさかの還元率1.75%
ポイント利用時の用途制限や目減りなし
還元されたポイントは、カード引き落とし額からの値引きに使えます。 「高還元率だけど特定のお店でしか使えない」とか「汎用の金券の交換レートが渋くて目減りする」ということもありません。
年会費はボーナスポイントで埋め合わせ可能
このカードは2年目からは年会費1,575円がかかりますが、年100万円以上使えばボーナスポイントが2,500円分つくのでお釣りが来ます。「見かけの還元率が高くても、年会費も高いので実質還元率は…」という心配もいりません。 (ただし、入会タイミングに関わらず「2月~翌年1月の利用額」で算定するようなので要注意)
nanacoチャージでもフル還元
nanacoチャージでもポイント1.75%還元です。何がうれしいかというと、クレジットカードが使えない支払い(税金など)も、セブンイレブンでnanaco支払いにすれば、実質的にクレカで払ったのと同じ還元が受けられるのです。 なお、Edyチャージにはポイントはつきません。Suicaチャージは…私はビックカメラSuicaカード持ってるのでそっちで。
還元率UPキャンペーンが年4ヶ月?
年に4ヶ月間くらいのペースで還元率が2.0%に上がるキャンペーンも行なわれています。 今後もあるかどうかは分かりませんが、2012年は2~3月度・9~10月度、2013年も2~3月度。次は半年後?

申込みから到着まで約半月

えんためねっとというポイントサイト経由で申込みました。約半月で到着。審査にあたって、(私の場合は)職場に在籍確認の電話はかかってこなかったようです。
カードは本人限定受取郵便で届くので、受け取るには住所地または指定した郵便局で、本人が身分証明書を提示する必要があります。(特伝型なので家族に代理で受け取ってもらうことはできません)

カード利用と明細掲載タイミング

還元率UPキャンペーンは「2・3月度の利用代金明細書で獲得するポイントがUP」のように行なわれますが、ではその期間の明細に載るにはいつ買い物をすればいいのでしょう?
2chによると、N月度の明細に載るには、店舗からアクワイアラーに伝票が下記の期間に上がる必要があるとか。
  • JACCS加盟店 … (N-1)月12日~(N)月11日
  • JCB加盟店(JACCS非加盟) … (N-2)月16日~(N-1)月15日
どのタイミングで伝票をアクワイアラーに上げるかは、店舗によって違うので注意。JACCS加盟店で(N)月11日に買い物をしても、店によっては(N)月ではなく(N+1)月の明細になる可能性があります。
なお、VISAは最近対応したばかりでまだ情報が少ない模様。

(N)~(N+1)月度のキャンペーンの場合、(N-1)月下旬~(N)月上旬あたりの買い物なら、大体どこのお店でも安全?

2013-03-19

WebKit版Operaのユーザエージェント

WebKitを採用したAndroid版Operaを試してみました。
Opera ブラウザ ベータ版

UserAgentはというと、
HTTP_USER_AGENT:
Mozilla/5.0 (Linux; Android 4.0.4; L-01D Build/IMM76D) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.123 Mobile Safari/537.22 OPR/14.0.1025.53005
もはやOperaだかMozillaだかChromeだかSafariだか判りません…!
肝心の「Opera」という文字列が含まれておらず「OPR」となっているのも不思議です。ベータだからでしょうか。

「データ圧縮モード」にすると、従来のOpera Miniになります。Prestoはお役御免になったわけではないようです。
HTTP_USER_AGENT:
Opera/9.80 (Android; Opera Mini/14.0.1025/28.4200; U; ja) Presto/2.8.119 Version/11.10
REMOTE_HOST:
s10-02.opera-mini.net

ちなみに現在最新のOpera MiniのUAはというと、
HTTP_USER_AGENT:
Opera/9.80 (Android; Opera Mini/7.5.32193/28.4200; U; ja) Presto/2.8.119 Version/11.10
バージョン番号が7.5から14.0に変わっただけで、中身は同じようです。

2013-03-18

CloudFlareの3種類のキャッシュレベルの違いを調べた

【この記事の概要】

前回⇒ CloudFlareでキャッシュ可否の条件は「URLの末尾がキャッシュ対象拡張子に見えること」だった

CloudFlareのキャッシュレベルは Basic / Simplified / Aggressive の3段階から選べますが、その違いがイマイチ解らなかったので調べました。


3段階のキャッシュレベルの違いは?

CloudFlareの「パフォーマンス設定」画面では、Caching Levelを下記3段階に設定できるとあります。
  • Aggressive: http://cloudflare.example.jp/pic.jpg?with=query
  • Simplified: http://cloudflare.example.jp/pic.jpg?ignore=this-query-string
  • Basic: http://cloudflare.example.jp/pic.jpg
言わんとすることはだいたい分かるんですが、具体的な挙動を見てみました。

BasicSimplifiedAggressive
(1) test.js○される○される○される
(2) js.cgi?q=.js○される○される○される
(3) test.html×されない×されない×されない
(4) js.cgi?1=.js&2=query×されない×されない×されない
(5) test.js?with=query×されない△されるけど※1○されるけど※2

(1)や(2)のように、URLがキャッシュ対象拡張子で終わっている(ようにみえる)なら、3レベルともキャッシュされます。
(3)(4)のように、URLが「キャッシュ対象拡張子」で終わっていない場合は、3レベルともキャッシュされません。

レベル設定で挙動が変わるのは、
(5)のような「キャッシュ対象拡張子で、クエリ文字列がある場合」です。

(※1) Simplifiedではクエリ文字列は削られるけど……?

キャッシュレベルがSimplifiedで、上記表の(5)のパターン、つまり「キャッシュ対象拡張子・クエリ文字列あり」の場合、次のような挙動になります。
  1. エッジサーバーからオリジンサーバーへは、クエリ文字列を取り除いてリクエストが送られる
  2. ただしキャッシュ内容はクエリ文字列付きのURLごとにそれぞれ保持される

ユーザー file.js?with=query
→①→

←④←
file.js?with=query
CloudFlare
エッジ
サーバー
file.js
→②→

←③←
file.js
オリジン
サーバー

挙動Aは文字どおりですが、Bがちょっと理解しにくいので、具体例で見てみます。
次のような、日時とURIをJavaScriptで出力するCGIスクリプトを用意しました。

#/usr/bin/ruby
puts "Content-type:application/javascript"
puts
puts "document.writeln('#{Time.now.to_s}');"
puts "document.writeln('#{ENV['REQUEST_URI']}');"
このCGIスクリプトに、js.cgi/pathinfo.js?with=query という形でアクセスしてみます。
$ curl -i 'http://cloudflare.example.jp/js.cgi/pathinfo.js?with=query'
HTTP/1.1 200 OK
CF-Cache-Status: MISS

document.writeln('Mon Mar 04 00:30:00 +0900 2013');
document.writeln('/js.cgi/pathinfo.js');

$ curl -i 'http://cloudflare.example.jp/js.cgi/pathinfo.js?with=query'
HTTP/1.1 200 OK
CF-Cache-Status: HIT

document.writeln('Mon Mar 04 00:30:00 +0900 2013');
document.writeln('/js.cgi/pathinfo.js');
1回目のアクセスでキャッシュが作られ、2回目のアクセスではそのキャッシュが返ってきています。
ENV['REQUEST_URI'] が「pathinfo.js」で終わっていて、「?with=query」が付いていません。クエリ文字列はエッジサーバーが切り落としたようです。

ここで、クエリ文字列を変えてアクセスしてみます。
$ curl -i 'http://cloudflare.example.jp/js.cgi/pathinfo.js?with=query2'
HTTP/1.1 200 OK
CF-Cache-Status: MISS

document.writeln('Mon Mar 04 00:32:22 +0900 2013');
document.writeln('/js.cgi/pathinfo.js');

$ curl -i 'http://cloudflare.example.jp/js.cgi/pathinfo.js?with=query2'
HTTP/1.1 200 OK
CF-Cache-Status: HIT

document.writeln('Mon Mar 04 00:32:22 +0900 2013');
document.writeln('/js.cgi/pathinfo.js');
さっきとは別のキャッシュがエッジサーバーに作られました。(Time.nowの出力する日時もさっきと違います)
しかし ENV['REQUEST_URI'] はこちらもさっきと同じ「/js.cgi/pathinfo.js」です。

というわけで、オリジンサーバーに対してはクエリ文字列を削った状態でアクセスしにくるけど、キャッシュはそれぞれ作成されるというよく分からない挙動です。
どうせクエリ文字列を切り落とすなら、キャッシュも共有してくれたほうが嬉しかったかも。

ちなみに、表の(2)のケースではクエリ文字列は削られずにオリジンサーバーに渡ります。
$ curl -i 'http://cloudflare.example.jp/js.cgi?q=.js'
HTTP/1.1 200 OK
CF-Cache-Status: MISS

document.writeln('Mon Mar 04 00:35:00 +0900 2013');
document.writeln('/js.cgi?q=.js');

(※2) Aggressiveでクエリ文字列がある場合、すぐにはキャッシュは作られない?

続いてキャッシュレベルがAggressiveで、キャッシュ対象拡張子・クエリ文字列ありの場合。
次のような挙動になります。

  1. 同一URL(同一クエリ文字列)に複数回アクセスがあっても、すぐにはキャッシュを作らない
  2. 何回かアクセスがあったらキャッシュを作り、以降のアクセスはキャッシュを返す
$ curl -i 'http://cloudflare.example.jp/js.cgi/pathinfo.js?with=query'
HTTP/1.1 200 OK
CF-Cache-Status: MISS

document.writeln('Mon Mar 04 00:40:00 +0900 2013');
document.writeln('/js.cgi/pathinfo.js?with=query');

$ curl -i 'http://cloudflare.example.jp/js.cgi/pathinfo.js?with=query'
HTTP/1.1 200 OK
CF-Cache-Status: MISS

document.writeln('Mon Mar 04 00:40:11 +0900 2013');
document.writeln('/js.cgi/pathinfo.js?with=query');

$ curl -i 'http://cloudflare.example.jp/js.cgi/pathinfo.js?with=query'
HTTP/1.1 200 OK
CF-Cache-Status: MISS

document.writeln('Mon Mar 04 00:40:22 +0900 2013');
document.writeln('/js.cgi/pathinfo.js?with=query');

$ curl -i 'http://cloudflare.example.jp/js.cgi/pathinfo.js?with=query'
HTTP/1.1 200 OK
CF-Cache-Status: HIT

document.writeln('Mon Mar 04 00:40:22 +0900 2013');
document.writeln('/js.cgi/pathinfo.js?with=query');
最初の3回はオリジンサーバーにアクセスが行っていますが、4回めでキャッシュが返ってきました。

キャッシュを作る条件が「同一クエリで(一定期間中に?)3回アクセスがあったら」なのかどうかは不明ですが、いきなりキャッシュが作られて使われるわけではないのは要注意。

たぶん検索フォームなどで「よく検索されるワードの検索結果はキャッシュして、あまり検索されないワードの検索結果は(ロングテールになってエッジサーバーのキャッシュヒット率が悪そうなので)キャッシュしない」という使われ方を想定しているんじゃないかと。

次回:キャッシュレベル設定では選べない特殊メニュー「Cache everything」

この記事では3種類のキャッシュレベルの挙動の違いを見ましたが、実は「パフォーマンス設定」の画面からは選べない第4の選択肢が存在するのです。それが「Cache everything」。

次の記事では、この「Cache everything」の挙動を確認します。

2013-03-04

CloudFlareでキャッシュ可否の条件は「URLの末尾がキャッシュ対象拡張子に見えること」だった

【この記事の概要】

この記事を3行でまとめると、
  • CloudFlareでエッジサーバーがキャッシュしてくれるかどうかは、
  • URLの末尾が「キャッシュ対象の拡張子」に見えるか否かで決まる
  • (MIMEタイプは関係ない)

では、以下、本文です。

そもそもCloudFlareって?

CloudFlareは、無料でも転送量無制限で利用できるリバースプロキシ型サービスです。

Webサイトを運営する上で、「転送量」はなかなか頭の痛い問題です。
安いレンタルサーバーだと、ちょっとアクセスが増えるとすぐアクセス量制限に引っかかって“503 Service Temporarily Unavailable”が表示されがち。
“Bandwidth: Unlimited”をうたう海外レンタルサーバーを頑張って英語で契約してみたら、「転送量は無制限だがセッション数の上限を超えた」という理由でアカウントをsuspendされて、凍結解除の交渉を英語でするハメに陥ったり……。

そんな中で、無料プランでも転送量制限のないCloudFlareは、実にありがたい存在です。
以前はエッジサーバーが日本国内になかったので「CloudFlareを使うとサイトが遅くなる」という問題もありましたが、今では日本にもエッジサーバーが設置されたようで、pingを打つと最速で5msなんて数字を叩き出したりします。

CloudFlareはどういう動作をするの?

CloudFlareはリバースプロキシとして動作します。
つまり、対象WebサーバーへのすべてのアクセスはCloudFlareのエッジサーバーを経由します。
ユーザー →①→
←④←
CloudFlare
エッジ
サーバー
→②→
←③←
ウチの
Web
サーバー

その際、特定のファイルをエッジサーバーにキャッシュしてもらうことができます。
キャッシュされたファイルは、アクセスがエッジサーバーで折り返すようになります。
ユーザー →①→
←②←
CloudFlare
エッジ
サーバー
   
ウチの
Web
サーバー
こちらのWebサーバーまでアクセスが来ないので、転送量などの資源を節約できるというわけです。

CloudFlareがキャッシュするファイルとは?

CloudFlareがどんなファイルをキャッシュしてくれるのかと言うと、具体的にはFAQ(What file extensions does CloudFlare cache for static content?)に列挙されています。
ざっくり説明すると、以下のような拡張子を持つファイルです。
  • .css
  • .js
  • .jpg/gif/png/ico/svgなどの画像ファイル
  • .pdf/csv/doc/ppt/xlsxなどのドキュメントファイル
  • .swf
  • .midi/mid
  • .pls(プレイリストファイル)

逆に言うと、リストに含まれない次のようなファイルはキャッシュされません。
  • .html/xhtml
  • .cgi/php
  • .xml
  • .json
  • .zip/bz2/rar
  • .mp3/mp4/flv
  • その他、リストに記述されていない拡張子のファイルすべて

(これらのファイルもキャッシュしてもらう方法もあるのですが、それは次回)

キャッシュ可否を決めるのはMIMEタイプ? 拡張子?

拡張子.jsはキャッシュされて、拡張子.cgiはキャッシュされない――となると気になるのが「JavaScriptを出力するCGI」はキャッシュされるのか、それともされないのか。
そこで実験してみました。

用意したのは、下記のようなJSを出力するCGIファイル。
#!/usr/bin/ruby
puts "Content-type:application/javascript"
puts
puts "document.writeln('#{Time.now.to_s}');"

これをCloudFlare経由で、以下のURLでアクセスしてキャッシュされるかどうか見てみました。

js.cgi×キャッシュされない
js.cgi/pathinfo.js○キャッシュされる
js.cgi?query=.js○キャッシュされる

MIMEタイプだけではダメで、PATH_INFOでもQUERY_STRINGでもいいからURLの末尾が対象拡張子で終わっている必要があるようです。

【確認内容】(レスポンスヘッダは一部省略)
キャッシュされる場合:
$ curl -i 'http://cloudflare.example.jp/js.cgi/pathinfo.js'
HTTP/1.1 200 OK
Server: cloudflare-nginx
Date: Mon, 04 Mar 2013 00:00:00 GMT
Content-Type: application/javascript
CF-Cache-Status: MISS
Expires: Mon, 04 Mar 2013 02:00:00 GMT

document.writeln('Mon Mar 04 09:00:00 +0900 2013');
※↑1回目のアクセス:まだキャッシュがなかった(この内容でキャッシュが作られる)

$ curl -i 'http://cloudflare.example.jp/js.cgi/pathinfo.js'
HTTP/1.1 200 OK
Server: cloudflare-nginx
Date: Mon, 04 Mar 2013 00:00:12 GMT
Content-Type: application/javascript
CF-Cache-Status: HIT
Expires: Mon, 04 Mar 2013 02:00:12 GMT

document.writeln('Mon Mar 04 09:00:00 +0900 2013');
※↑2回目のアクセス:キャッシュが使われている

キャッシュされない場合:
$ curl -i 'http://cloudflare.example.jp/js.cgi'
HTTP/1.1 200 OK
Server: cloudflare-nginx
Date: Mon, 04 Mar 2013 00:00:30 GMT
Content-Type: application/javascript

document.writeln('Mon Mar 04 09:00:30 +0900 2013');
※↑1回目のアクセス:CF-Cache-Statusヘッダがない

$ curl -i 'http://cloudflare.example.jp/js.cgi'
HTTP/1.1 200 OK
Server: cloudflare-nginx
Date: Mon, 04 Mar 2013 00:00:42 GMT
Content-Type: application/javascript

document.writeln('Mon Mar 04 09:00:42 +0900 2013');
※↑2回目のアクセスでもキャッシュされていない

ちなみに、CGIのレベルでExpiresレスポンスヘッダをわざわざ吐いても、結果は変わりませんでした。

クエリ文字列の末尾が拡張子っぽく見えること

「クエリ文字列が拡張子っぽい場合」の挙動をもう少し掘り下げてみます。

1) js.cgi?1=query&2=.js○キャッシュされる
2) js.cgi?1=.js&2=query×キャッシュされない
3) js.cgi?1=query&2=js×キャッシュされない

1)のように、URLの末尾がキャッシュ対象拡張子であれば、クエリが複数あってもキャッシュされます。

ただし、2)のように、クエリの順番を入れ替えるとキャッシュされなくなります。
3)は1)のクエリの「.js」を「js」に置き換えた(ピリオドを削った)ものですが、これもキャッシュされません。

どうやら「URLの末尾が拡張子に見える」という形式を必ず守らなければならないようです。

次回

CloudFlareの3種類のキャッシュレベルの違いを調べた
CloudFlareのキャッシュレベルは Basic / Simplified / Aggressive の3段階から選べますが、その違いについて調べます。

2013-01-31

VAIO type PにWindows 8 (製品版)を導入した(けど耐え切れず7に戻した)

Consumer Previewを入れてあったVAIO type P(VGN-P91HS)。キビキビ動いてくれて充分実用的でした。
プレビュー版の使用期限が切れたので、製品版Windows 8を導入します。
(後述しますが、実は製品版だと全然キビキビではなく残念すぎ)

導入方法はConsumer Previewと同じ

Consumer Previewのときとまったく同じ方法で導入できました。
アップグレード版をクリーンインストールする場合は優待購入したダウンロード版Windows 8、他のPCに64bit版をクリーンインストールも参考にどうぞ。(特にインストーラーが「リムーバブルドライブが見つからない」みたいなエラーで止まってしまう場合など)

インテルWiMAX/WiFi Link 5150はやっぱり自分でドライバを導入
WiMAXモデルの場合は無線LANのドライバを自分で導入しなければならないのも相変わらずです。そしてWiFiは使えるようになっても、WiMAXを使うにはさらに何かを入れなきゃいけないのも同じ。(私はWiMAXは使っていないのでそれ以上は確かめていません) インテルのサイトの最新版は15.xになっていましたが、14.x同様インストーラーを実行してもドライバーが導入されません。13.5.0ならOK。
グラフィックドライバも自分で導入
Windows標準搭載のドライバーは描画が遅いし外部ディスプレイも使えません。ドライバーは、前回同様インテルからダウンロードしてもいいんでしょうが、今回はUSのSonyのサイトからVAIO type P用の最新版8.14.10.2024を入れてみました。 インテル純正との違いは今のところ不明。エクスペリエンス インデックスの計測をしようとすると途中で止まるのも純正と同じです。

製品版はConsumer Previewよりかなり重い…

導入してみて分かったのが、製品版Windows 8はConsumer Previewよりかなり重いということ。

タスク マネージャーを見てみると、「デスクトップ ウィンドウ マネージャー」(DWM)がリソースをがっつり持っていっています。

メモリは2GB中の50MB程度なら許容範囲ですが、問題はCPU。非力なAtom Z520だと、何かするたびに演算力を半分近く持っていかれて、かなりしんどいです。

Consumer PreviewではAeroをオフにすることでDWMを使わないようにできたのですが、製品版ではDWMを無効化できないようで。

Windows 7に戻そうかな……。

(追記)
耐えかねてWin7に戻しました。
Win7は起動してしまえば、まあ実用レベルです(Aeroを切ってあれば)。
ただ、起動にはSSDでも1分以上かかります。Win8は起動は製品版でもえらく速かったので、DWMを切る方法が見つかったらまたWin8にしたいところ。

(追記2)
試してないけど、DWMを切る方法。切った後はエクスプローラー使用禁止らしいですが。
Desktop Window Manager is always on (Windows)のコメント:
  1. Go to %WINDIR%\system32
  2. Right click on dwm.exe and select Properties → Security → Advanced → Change owner → Take ownership of file.
  3. Accept all changes, close the properties dialog, then right click on dwm.exe and select Properties → Security → Advanced → Change permissions
  4. Add Everyone → Deny Execute
  5. Accept all changes and save
  6. Now here is a tricky part, you HAVE to kill two programs Explorer.exe and dwm.exe by means of using Elevated Command prompt and typing "tskill explorer /a" and "tskill dwm /a".
Warning! You have to kill first explorer and then dwm as if you do it in other order, you will meet the black screen in which only "Top most" windows will be shown. During all time explorer MUST be not working. In order to use explorer (and Modern apps of Windows 8) again you have to reverse the procedure. (One can combine this with CreateDesktop → SwitchDesktop sort of program for automation and safety of this procedure)