おぎろぐはてブロ

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

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

iTunes MatchでiOSデバイスで曲が重複する問題の対処

解消方法を探して、微妙ながらも解決したのでメモ。

事象としては、上の記事のスクリーンキャプチャのように、購入した楽曲なんかが、ローカルとiCloudで重複して表示され、雲マークをクリックしてダウンロードしたら同じ曲が2曲になるというもの。

解決方法

MacやWindowsのiTunesとローカルで同期せず、全てiCloudからダウンロードするようにする。

  1. iOSデバイスでiTunes Matchをオフにする
  2. 設定 → 一般 → 使用状況 からミュージックを開き、編集から、全ての楽曲を削除
  3. 母艦のiTunesで、楽曲の同期のチェックをオフにする
  4. iOSデバイスでiTunes Matchを再び有効にし、ダウンロードをがんばる

当然ながら、楽曲をダウンロードするのにはだいぶ時間がかかるので注意。 あと、一時的なエラーということで、一部の曲をダウンロードできないことがよくある。

IPv4固定IP付きのフレッツ接続を月500円で取得する

IPv6 IPoEによるネイティブ接続をやってみたかったので、自宅のフレッツ光ネクストはFiberAccess/NFを使っています。

このプランは、IPv6アドレスは半固定で割り当てられるものの、v4は動的IPとなっています。 v6ネイティブ接続を使いたがる人が、v4の固定IPを欲しくないわけもないのですが、有限なリソースですし難しいところ。 そして今のところv6のIPはいまいち有用ではない。

固定のIPv4アドレスを安価で

で、先日、なんでこのVPN接続落ちてて繋がらないんだろうと考えていたら、IPが変わっていたというオチがあり、IPv4の固定IPがほしいんじゃとFacebookでぼやいたら、 i-revoで月額500円で契約できると識者の方に教えてもらいました。

非常にシンプルで固定IPのフレッツ接続が月額500円で契約できる。

即時発行というのは備考にあるように罠があって、平日の日中しか受け付けをしておらず、週末などにやろうとすると、追ってお知らせとかでなく、そもそも受け付けていないという男らしさ。

セッション数と追加オプション

これも有識者の方に教えてもらったのだが、フレッツでは、回線ごとにPPPoEのセッション数の上限があって、それを超える場合は有料オプションで追加する必要があるとのこと。

ちなみにPPPoEセッションなので、IPoEのv6セッションは関係ないらしい。

家庭用のフレッツでは、2セッションまで基本サービスになっていて、普通はプロバイダ回線で1つ、ひかり電話でもう1つくらいのイメージっぽい。 我が家はひかり電話は使わないので1セッションしか使っておらず追加オプションは必要なかった。

できたよー

ルーティングちゃんと設定してないけど、とりあえずつながった。

f:id:i_ogi:20140601232350p:plain

が、i-revoはIIJの設備を使っているらしく冗長化という面では微妙な感。

ポータブルなHD動画レコーダーHyperDeck Shuttleを買った

Blackmagic Design HyperDeck Shuttle 2 最近はデジタル一眼で動画も撮影するのが流行っていますが、ビデオカメラだと関税が上がるという問題で動画が30分までしか撮影できない制約があることが多いです。 α7でもそうなのですが、HDMIクリーンアウトがあるのでそれを録画すればこの制限を超えられます。

ということで、外部記録媒体としてBlack Magic DesignのHyperDeck Shuttleを購入したのでざっくりレビュー

続きを読む

関西国際空港でPeachに乗る

帰りはLCCのPeachでKIXからNRTへ。

関西国際空港は第2ターミナル

関西国際空港に到着してから把握したのですが、Peachは第2ターミナルとなっています。 第2ターミナルはLCC専用ターミナルらしいのですが、現時点ではPeachのみ運行しています。

第2ターミナルへは、第1ターミナルからバスへの移動なので、急いでいる時には厳しいかもしれません。

直接飛行機に乗り込む

ターミナルから直接飛行機に乗り込むボーディングブリッジではなくて、飛行機の近くまでの通路を歩いて、そこからタラップで乗り込む。 昔の新北九州空港みたいな、というか、小規模空港みたいな感じ。

で、景色がすごかった。 こんな景色はなかなか見られない。

DSC00865.jpg

DSC00874.jpg

ということで、なんか得した感じでした。

機内

たしかに座席ピッチがちょっと短め。まぁでも、成田-関空間なので、さほど時間は長くないので問題ない。遠い場合はちょっと厳しいかもなぁという感。