おぎろぐはてブロ

なんだかんだエンジニアになって10年以上

シアトル日記 (1日目)

くたばってだいぶ遅れて記憶が薄れる中、日記をかいておく。 久し振りの海外は初めての羽田便。

羽田空港

何も食べずに羽田にだいぶ前にたどり着いた。が、手荷物があったのでカウンターが開くまで待たないといけない。 航空会社にもよるが、だいたい3時間前らしい。

おなか空いてがっつり食べたいなーとさまようも、高い店か、カフェみたいなのしかない。 結果、到着フロアのカフェで本日のランチの親子丼を食べる。

f:id:i_ogi:20140810165307j:plain

電源があると思ったのだけれど、後付けなのか、上の手すりのため、MacBookのアダプタは挿せず。

f:id:i_ogi:20140810165413j:plain

ちなみに、ここのとなりにシャワールームがある。朝到着でそのまま仕事があるとかのときは便利かもしれない。

出国後エリア

中は寿司とかいろいろあって、夜遅くでも開いてて。よさそう。 ラウンジで電源供給していた。

f:id:i_ogi:20140810231140j:plain

飛行機

飛行機はおしりがいたい。 ノイズキャンセリングヘッドホン MDR-1RNCMK2を初投入。結局のところ、Quiet Comfortとどちらがよいのだろうか。 とりあえず、移動中のヘッドホンとしてはでかいということは MDR-1RNCMK2 の難点だと思った。

SONY ノイズキャンセリングヘッドホン MDR-1RNCMK2

SONY ノイズキャンセリングヘッドホン MDR-1RNCMK2

Kindle Paperwhiteで、ビートたけしのヒンシュクの達人を読了。 飛行機で読むには非常によいデバイス。

ヒンシュクの達人(小学館新書)

ヒンシュクの達人(小学館新書)

機内の映画はレゴと、アナと雪の女王途中まで。 レゴは映像がなかなか面白くて楽しかった。 アナ雪は、山にこもってアナたちを追い出すととこまで。ディズニーだなーという感。

LEGO®ムービー 3D&2D ブルーレイセット(初回限定生産/2枚組/デジタルコピー付) [Blu-ray]

LEGO®ムービー 3D&2D ブルーレイセット(初回限定生産/2枚組/デジタルコピー付) [Blu-ray]

【Amazon.co.jp限定】アナと雪の女王 MovieNEX (オリジナル絵柄着せ替えアートカード付) [Blu-ray + DVD]

【Amazon.co.jp限定】アナと雪の女王 MovieNEX (オリジナル絵柄着せ替えアートカード付) [Blu-ray + DVD]

空港から宿

シアトルのダウンタウンの宿まで、Link Light Railで移動。なんだか乗り場まで相当歩かされるが、$2.75と安い。 途中から地下に入っていくのがよい。

8時ごろ宿にたどり着きシャワーを浴びて一眠りしたら、十二時を過ぎており何も店がない。お菓子を食べてすごした。

Bluetoothヘッドセット Voyager Legendを購入

表題通り、PlantronicsのBluetoothヘッドセットVoyager Legendを購入したのでざっくりレビュー。

【国内正規品】 PLANTRONICS Bluetooth ワイヤレスヘッドセット Voyager Legend VOYAGERLEGEND

【国内正規品】 PLANTRONICS Bluetooth ワイヤレスヘッドセット Voyager Legend VOYAGERLEGEND

機能

声で着信、拒否ができる

着信時にAnswer、Ignore (日本語では、着信応答、着信拒否) で、ハンズフリーで応答ができます。 出荷時は英語ですが、ファームアップデートで日本語に切り替えられます。

ボイスコマンドが使える

とはいっても、ボタンを押してからボイスコマンドを発音するので、ハンズフリーではないのであまり意味がない。

ファームアップデートで日本語化

ファームアップデートをすることで、音声認識の言語を切り替えられる。

Voyager Legend を選択

USBで接続し、起動したアプリで Japanese を選択

ボイスコマンド一覧

非常に残念な感じ。

英語 日本語
Answer 着信応答
Ignore 着信拒否
Am I connected? 接続していますか?
Cancel キャンセル
Check battery バッテリーチェック
Pair mode モードを組み合わせる
Call back かけ直す
What can I say なんと言えばいいですか?

日本語訳が微妙で "Pair mode" が "モードを組み合わせる" に。着信応答とかも応答とかじゃいかんの?とかいろいろつらい。 英語版で使うのもありだと思います。

微妙な点

音声コマンドの日本語と、実用の面としては、おしゃれ形状故に、持ち運びに適さないこと。 ということで、充電もできるケースが売っています。

PLANTRONICS Voyager Legend 充電ケース 89036-01

PLANTRONICS Voyager Legend 充電ケース 89036-01

Belkin Thunderbolt Express Dockを購入した

【国内正規代理店品】belkin ベルキン Thunderbolt対応 ドッキングステーション Thunderbolt Express Dock F4U055jaAPL 表題どおり。 MacBookで便利なThunderbolt拡張ドック、Belkin Thunderbolt Express Dockを購入しました。

概ね、便利に使っているのですが、購入してから気づいたこと

  • Thunderboltポートは2個あるけど、1つは母艦につなぐものなので、実質利用可能なのは1ポート (増えてない)
  • 表からThunderboltケーブルを出す場合、背面ポートに接続して、折り返して溝を通すのだけど、Thunderboltコードはちと固めなので、余裕をもったケーブル長が必要
  • 結構、MacBook側のThunderboltコネクタが熱を持っていて気になる。安いケーブルとか使うと燃えそう。
  • 母艦の電源は当然ながらまとめられない。2本は諦めても、MacBookの場合、左サイドから電源、右サイドからはThunderboltと左右から出てくる残念な状態。

新しいHTTPの話をしよう (HTTP/1.1 RFCs)

先月2014年6月に、HTTP 1.1関連の新しいRFCが提案され、従来のRFC 2616はobsoleteにマークされました。

RFC 2616 は6つのRFC (7230-7235) に分割され、また、RFC 7236-7239 の新しい1.1関連のRFCも提案されています。 ということで、Webアプリ系のエンジニアの視点で深追いせずにざっくりまとめてみました。

Slide

RFC2616が定義された1999年6月というのは、ちょうど15年前。ノストラダムスが世界の終焉を予知していた7月の前の月、エンジニアが2000年問題と戦っていた頃です。世界の終焉は来ませんでしたし、Y2Kを乗り越えたシステムもおそらく多く生き残っています。

Reference

RFCs

でかい除湿機 SHARP CV-C140-W を購入

SHARP プラズマクラスター除湿機(コンプレッサー方式) ホワイト CV-C140-W 梅雨の時期が終わろうというタイミングで今更感もあるのですが、新しく除湿機を購入しました。

理由としては、家に一台少し大きめのものを設置して、昼間はドアとか開放して全体的に除湿しているのですが、どうしても効果は局地的だったのと、寝室 (というか普段過ごしている部屋)の湿度が気になっていたため。買い増しして、既存の除湿機をこっちに移動してリビングには新しいのを買おうとなった次第です。

選択の理由

この機種を選んだ理由は、

  • ハイブリッド型とかいらない (冬は除湿しないし)
  • 除湿性能が高いこと
  • タンクがでかいこと
    • タンクが小さいと満水になって停止してしまいますし、単純に頻繁に排水するのは面倒です

とくに、タンクが大きいことが必須条件でした。こいつは4.2リットルです。

買ってみて

結論としては、性能よく除湿してくれて、水のたまり具合にびっくりな感じです。

ただ、ソフトウェアが問題あるのか、タイマー設定してないのに、気が付くとタイマーの時間切れで停止していることがすでに何度か起きており、再現条件の把握を試みているところ。 説明書を確認。コンセントに接続した時点では、自動パワーオフが有効になっていて、12時間で切れるとのこと。この動作を変更するには、停止とタイマーボタン同時押し3秒。 って、それ12時間ってタイマーのランプがあればいいんじゃないのかしら。。

Wi-Fi等から現在のコンテキストを把握してアクションを実行できるControlPlane

iPodで音楽聴きながらカフェでMac広げてドヤリングしてたら、ミュートになってなくて派手に音を垂れ流して急いでミュートにし、帰宅すると音を鳴らすのにミュート解除しないと、とか面倒ですよね。

出先だったら勝手にミュートしてほしい、このアプリを開いてほしいといった操作を自動化するControlPlaneを利用しています。

今自宅なのか、職場なのか、はたまた出先のカフェなのか、環境を把握するのに使える材料として有用なのは無線LANのSSIDですが、それ以外にもコンテキストを判断するエビデンスとして、いろいろなものに対応しています。

  • アクティブなアプリケーション
  • オーディオ出力先 (スピーカー、ヘッドフォン)
  • AC電源接続有無
  • 接続中のBluetooth、FireWire、UBSデバイス、モニタ
  • Bonjour、ネットワーク (検知しているWifi、接続中のLAN、DNS、IPアドレス等)
  • OS XロケーションサービスのCoreLocation
  • ライトセンサー
  • 独自のシェルスクリプトでの定義
  • Sleep、Wakeのタイミング

これらを組み合わせ、アプリを起動、終了させたり、ミュート、ミュート解除したり、いろいろできます。

たとえば、テザリングしているときはDropbox等を落とす、など可能性は無限大です。 Macなんで、cronでシェル走らせてもできるんですが、GUIで設定できて便利なのでオススメです。

awscli s3apiでの日本語を含むオブジェクト操作

日本語などnon-ascii文字列を含むオブジェクト操作のメモ

"nonあascii" (unicode: \u3042) というオブジェクト名を想定します。

aws s3 rm

ふつうに日本語で実行できる。 (おそらく実行環境に依る)

# Key does not exist
aws s3 rm "s3://bucket/non\u3042ascii"

# delete successful
aws s3 rm "s3://bucket/nonあascii"

s3api delete-object

こちらも同様。 ただ、s3コマンドと違ってファイルの存在を確認しないため、バージョニングが有効だと存在しないファイルにデリートマーカをつくる。

# successful
aws s3api delete-object --bucket "bucket" --key "nonあascii"

# fail (create delete marker to non\\u3042ascii)
aws s3api delete-object --bucket "bucket" --key "non\u3042ascii"

s3api delete-objects

複数指定したい場合は、delete-objects。

以下は失敗パターン。 defaultencoding=asciiの環境だと 'ascii' codec can't encode character u'\u3042' in position 24: ordinal not in range(128) のエラーが出る。

aws s3api delete-objects --bucket "bucket" \
--delete '{"Objects":[{"Key":"non\u3042ascii"}],"Quiet":false}'

aws s3api delete-objects --bucket "bucket" \
--delete '{"Objects":[{"Key":"nonあascii"}],"Quiet":false}'

sitecustomize.pyでデフォルトエンコーディングをUTF-8に変更するとどちらもXML不正エラーが出る。

A client error (MalformedXML) occurred when calling the DeleteObjects operation: The XML you provided was not well-formed or did not validate against our published schema

何が起きているかというと、XMLがおかしい。

0x0000:  4500 0074 8db1 4000 4006 10a5 ac1f 18d5  E..t..@.@.......
0x0010:  36e7 a052 bab8 0050 ddd0 5f96 019d f618  6..R...P.._.....
0x0020:  5018 0073 9c94 0000 3c44 656c 6574 653e  P..s....<Delete>
0x0030:  3c4f 626a 6563 743e 3c4b 6579 3e6e 6f6e  <Object><Key>non
0x0040:  e381 8261 7363 6969 3c2f 4b65 793e 3c2f  ...ascii</Key></
0x0050:  4f62 6a65 6374 3e3c 5175 6965 743e 6661  Object><Quiet>fa
0x0060:  6c73 653c 2f51 7569 6574 3e3c 2f44 656c  lse</Quiet></Del
0x0070:  6574 653e                                ete>

ということで、XML実体参照で送る。

aws s3api delete-objects --bucket "bucket" \
--delete '{"Objects":[{"Key":"non&#x3042;ascii"}],"Quiet":false}'

まとめ

  • s3apiの引数でJSONを指定する場合、non-asciiな文字列はXML実体参照で入れる

JSONとXMLの変換の闇でした。