Tweetbot で既読位置を同期する
Tweetbot では、デバイス間で既読位置の同期が可能です。
設定方法
※執筆時点の各Tweetbotのバージョン
Mac
Tweetbot for Mac では Preferences (⌘+,) から Account -> Services -> Sync で設定します。

同期方法には iCloud と Tweet Marker があり、それぞれ同期される内容に若干の差異があるようです。(かなり古い情報なので今は違うかもしれない)
Tweet MarkerとiCloud同期との違い:前者では同期できるのはTLの既読のみ、ただし対応アプリが幅広いのに対し、後者はTLだけでなくDMの既読やミュート設定なども同期可能、ただしTweetbotどうしのみ #tweetbotjp
— TweetbotJP(公認非公式) (@TweetbotJP) 2012, 4月 6
なお、Visual Sync Marker を有効にすると、同期されている位置にこんな感じのマークがつきます

iOS
Tweetbot for iOS では アカウント管理画面 -> 設定 -> アカウント設定 から設定します。 (選択する同期方法は各デバイス間で一致させる必要があります。)

また、複数のアカウントを同期したい場合は、各アカウントごとに同期設定が必要です。
どうなるの?
例えばMac版で Timeline の 2015/11/19 12:00:00 まで既読になっている状態でiOS版を起動すると、起動直後に同じ位置まで自動的にジャンプします。超便利!!
(Tweetbot を使い出してもう3年ほどですが、今まで知らなかった…)
補足: iCloud 同期
iCloud 同期にする場合、あらかじめ同期対象の各デバイスで以下の設定が必要です。
- iCloud Drive を有効化
- iCloud Drive 上への Tweetbot による保存を許可
Amazon S3 は BitTorrent プロトコルに対応している
CloudFormation のテンプレートを書いている時に S3 に設定可能な属性ってどんなのあったっけなと思って awscli で aws s3api help を眺めていたんですが

ふむふむ

むっ

ん?

!?!?!?
えっ S3 って torrent 対応してるの!!!??
ドキュメント読んだ
要点をまとめてみる:
- 追加料金なし(通常の利用方法と同じ課金)
- BitTorrent 配信への課金方法
BitTorrent プロトコルによるデータ転送は、クライアント/サーバー方式による配信の場合と同一のレートで課金されます。正確には、ダウンロードを行う BitTorrent クライアントがAmazon S3 「シーダー」にオブジェクトの「一部」をリクエストした場合、REST または SOAP プロトコルを使って匿名リクエストがその「一部」に対して行われたのと同じように課金されます。
- BitTorrent 配信への課金方法
- オンデマンド生成なので初回は時間がかかる
- Amazon S3 と BitTorrent を使用したコンテンツの発行
オブジェクトの .torrent の生成には、オブジェクトの容量に比例して時間がかかります。大規模オブジェクトの場合には、かなりの時間を要します。
- Amazon S3 と BitTorrent を使用したコンテンツの発行
- 容量が5 GB 未満のオブジェクトについてのみ取得可能
- Amazon S3 での BitTorrent の使用
Note
torrent は、容量が5 GB 未満のオブジェクトについてのみ取得できます。
- Amazon S3 での BitTorrent の使用
こういうのすごいわくわくするので機会があったら使ってみたいですね
API Gateway + Lambda で固定のパラメータを付加して HTTP Proxy する
API Gateway による HTTP Proxy は作例がたくさんある (というかコンソールぽちぽちするだけで作れる) のだけど、endpoint 側に Query String を渡す際に、client から渡ってきていないパラメータを追加しようとすると素直にはいかなかったのでメモ。
やりたかったこと
- 下図の (a) で
zipcode=hogeが渡ってくる - (b) で
zipcode=hogeをzn=hogeにした上で、 更に
ver=0というパラメータを追加したい| --(a)-> | | --(b)-> | Client | | API | | GET | | Gateway | | http://exmaple.com/api/ | <------ | | <------ |
どうすればいいのか
Lambda で HTTP Proxy 的な処理を書いて GET させるとよい。
詳細は以下のとおりです。 なお、記事にするにあたり 郵便番号検索API を利用させて頂きました。
Integration type: HTTP Proxy だとダメ
Integration type: HTTP Proxy にすると、client から渡ってきた Query String を endpoint に渡す 際、key は変更できるものの、value を変えたり、特定の key を静的に(=固定で)指定といったことはできないようです。
よって、"更にパラメータを追加" するには他の手段をとる必要がありそうです。
Lambda を使う
やや面倒ではあるものの、API Gateway に用意されている HTTP proxy ではなく、Lambda を経由して GET させてみました。
以下は Lambda のコードです。
var request = require('request'); exports.handler = function(event, context) { // endpoint 側に渡すパラメータ // event には Mapping Template に記述した内容が渡ってくる var params = { zn:event.zipcode, ver:'0' }; // コンテンツをパラメータ付きで get request.get({url:"http://zip.cgis.biz/xml/zip.php", qs: params}, function(err, res, body) { if (!err && res.statusCode == 200) { context.done(null, body); } else { console.log('error: '+ res.statusCode); } }); };
request モジュールを要求するため、AWSへは node_modules を含む zip ファイルとしてアップロードします。
npm install request zip -r zipcode.zip index.js node_modules
API Gateway の設定
(APIやResourcesの作成などの基本的な設定は省略します。)
Method Execution には以下の2つの設定を行います。
- Method Request の URL Query String Parameters に受け取るパラメータを追加
zipcode
- Integration Request に Mapping Templates を設定
- Content-Type:
application/json { "zipcode": $input.params("zipcode") }
( ちなみにシングルクオートだと上手くいかなかった )

- Content-Type:
上記の例に従った場合、Method Test の結果がこんな感じになれば成功しています。

Charlotte オリジナルサウンドトラックの Bravely You にはクリッピングがない
(Twitterはあとから遡るの大変なので参照だけ貼っておく)
afconvertの記事 で触れていますが、Charlotte OSTに収録されている Bravely You にはクリッピングが皆無です。(参考リンク: Kazukitiブログ!: CharlotteのOP/EDのBravely You/焼け落ちない翼の音割れが酷すぎる…)
Bravely You のゲイン比較。赤い部分がクリッピング発生箇所。上からシングル版、iTunes配信版、サウンドトラック版。シングル版の酷さが際立つ pic.twitter.com/T6MwxexsBR
— Chrolis (@chrolis) 2015, 11月 10
というわけで綺麗な Bravely You が聴きたかったらサントラ買えばいいんじゃないかな!

TVアニメ「Charlotte」 Original Soundtrack
- アーティスト: Charlotte
- 出版社/メーカー: Aniplex (music)
- 発売日: 2015/11/04
- メディア: CD
- この商品を含むブログ (3件) を見る
Last Login message が出なくなったのをやや暴力的に解決した
OSXのターミナル(iTerm2やTerminal.app)を利用していると、
初回ログインでない限りは新規ウィンドウ/タブを開くと
Last login: Tue Nov 10 22:24:14 on console
みたいなメッセージが出るんですが…
今日のある時点から、なんだかターミナルに違和感を感じるなと思ったら、このメッセージが出力されなくなっていました。
対処
/var/log/asl/*.aslを削除してOSを再起動したところ出力されるようになった。sudo rm /var/log/asl/*.asl
補足
- Last Login 情報は
/var/log/asl/*.aslを読んでいるらしいという情報を得て/var/log/asl/を確認してみると、25MB程ある .asl ファイルが10個ほど溜まっていた - ファイル名からして恐らくローテートされたものではあるものの、それにしても短時間でローテートされているのでなんだかおかしそう
- 後先考えずとりあえず消してみたところ直った
…という、やや暴力的な解決方法でした。
最初は .asl ファイルが壊れているのかなとも思ったものの、そもそも読む方法が分からず。
もし詳しい方が居たら教えて頂けるとうれしいです。
afconvert が便利な話
Charlotte のサントラを買った!!
先日 Charlotte のサントラを購入しました。
せっかくなのでBravely You の音割れの件も確認しておこうと、左記記事でも利用されているAudacityを導入してみたのですが、iTunes配信版と比較する場合、m4a なので直接は読めません→読めました。
コマンドラインで変換できないものか調べていると、なんと OSX には afconvert とやらが最初から入っているではありませんか。
afconvert すごい
さて、afconvert を使って m4a から aiff に変換するわけですが、対応フォーマットを見る限り、OSX上での音声ファイル形式の変換はこれさえあれば足りそうな印象。
(*'-') < afconvert -hf 2>&1 | grep =
'3gpp' = 3GP Audio (.3gp)
'3gp2' = 3GPP-2 Audio (.3g2)
'adts' = AAC ADTS (.aac, .adts)
'ac-3' = AC3 (.ac3)
'AIFC' = AIFC (.aifc, .aiff, .aif)
'AIFF' = AIFF (.aiff, .aif)
'amrf' = AMR (.amr)
'm4af' = Apple MPEG-4 Audio (.m4a, .m4r)
'm4bf' = Apple MPEG-4 AudioBooks (.m4b)
'caff' = CAF (.caf)
'ec-3' = EC3 (.ec3)
'MPG1' = MPEG Layer 1 (.mp1, .mpeg, .mpa)
'MPG2' = MPEG Layer 2 (.mp2, .mpeg, .mpa)
'MPG3' = MPEG Layer 3 (.mp3, .mpeg, .mpa)
'mp4f' = MPEG-4 Audio (.mp4)
'NeXT' = NeXT/Sun (.snd, .au)
'Sd2f' = Sound Designer II (.sd2)
'WAVE' = WAVE (.wav)
実際に変換してみる
afconvert による変換には output format (-f) と data format (-d) の指定が必要になります。
入力ファイルのビット深度は afinfo で確認できます。
(*'-') < afinfo '01 Bravely You.m4a' | grep depth source bit depth: I16
上記がわかればあとはこんな感じで変換
(*'-') < afconvert -f AIFF -d BEI16 '01 Bravely You.m4a' '01 Bravely You.aiff'
で、音割れはどうだったの
ちなみに比較結果はこんな感じでした。
上が配信版(iTunes)、下がCharlotteOST収録版。OST版はクリッピング皆無ですね pic.twitter.com/txNikalnGB
— Chrolis (@chrolis) 2015, 11月 10
- 追記: m4a そのままでも読めました