おぎろぐはてブロ

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

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の変換の闇でした。