Thanks Driven Life

日々是感謝

🎄 Merry Christmas in Emacs 🎄

f:id:gongoZ:20161225003908g:plain

https://gist.github.com/gongo/dc8fe61af6f2599c8e948035fbf66c13

クリスマスツリーが表示されて、SPACE キーを押すと雪が降る xmas-tree-mode です。 ちなみに上の GIF で雪が降ってる間、ひたすら SPACE キー連打しています。

本当は Emacs Advent Calendar 2016 の記事として投稿する予定でしたが、体力が消えたので参加取り消しました。 せっかくなのでクリスマスツリーだけは載せることにしました。Emacs 24 とか 25 あたりで動くと思います。


余談ですが

(flet ((gamegrid-display-type () 'mono-tty))
  (xmas-tree))

を実行すると

f:id:gongoZ:20161225004356g:plain

こういう感じで表示されます。これは gamegrid.el の機能を使っているのですが、これについては体力が戻ったら別で書こうと思います。

Amazon Drive の iPhone アプリで .co.jp じゃなくて .com にサインインしたい場合

前提

  • 容量無制限プランが開始したタイミングで Amazon Drive を使い始めた
  • .com の方で契約した。値段で決めた
    • .co.jp は 年間13,800円
    • .com は 年間59.99USD
    • 速度は今のところ気にならない

経緯

Amazon Drive に写真やら音楽やらをバックアップとして配置しているが、「そういえばこれ iPhone でも見れるのだろうか」と思い、 調べてみると Amazon Cloud Drive というアプリがあった。

早速インストールしてサインイン画面まできたところ

f:id:gongoZ:20161214112125j:plain

Amazon.co.jp へのサインイン」と思われるメッセージが表示されている。 通常のショッピングサイトであるところの amazon.comamazon.co.jp と同じく、 Amazon Drive も .com と .co.jp で別ストレージ扱いになる。

私がバックアップをとっているのは .com の方なので、このままサインインしても何も無い、虚無のストレージが表示される。 しかしアプリ設定を見ても「.com にサインインする」という希望を叶える UI は存在しない。不便

解決方法

  1. iPhone言語設定地域 をそれぞれ「英語」「米国」にする
    • もしかしたら他でもいけるかも
    • 言語と地域 両方 設定する必要があります
  2. Amazon Drive アプリで .com にサインインする
  3. サインイン後は言語、地域設定を元に戻しても大丈夫
    • サインアウトするとまた 1 から

参考: iPhone、iPad、iPod touch で言語を変更する - Apple サポート

f:id:gongoZ:20161214112859j:plain

一度サインインしたら、また元の設定に戻しても大丈夫です。

まとめ

今回は .co.jp → .com でしたが、もちろん逆だったり、別ドメインに対しても適切な言語や地域を設定すると、望みの Amazon Drive にサインインできるようになると思います。

実はデスクトップ版の Amazon Drive でも似たようなことがあって、その時も同じように設定画面から言語設定を変更すれば .com に入れます。

参考: Amazon Cloud Driveのデスクトップアプリでamazon.co.jpにサインインできないとき - THE えのき

"terraform plan" の変更行に色付けする tpdiff を更新しました

https://github.com/gongo/tpdiff

← before | after →

f:id:gongoZ:20161210065817p:plain

経緯

このあたりで作ったやつを会社の同僚に使ってもらっていたところ:

_人人人人人人人人人人人人人人人人人人人人人人人人_
> 全部赤色だと全部削除されるっぽく見えて怖い!!! <
 ̄YYYYYYYYYYYYYYYYYYYYYYYY ̄

というフィードバックをいただき、それもそうだなということで「追加」「削除」「変更」それぞれで色変えるようにしました。

sed 補足

前回の sed、1ヶ月後に見直した時わけわからんかったので、今回も記録しておく

# \033 は省略しています

/".*" => ".*"$/!b
/^.*: *"" => ".\{1,\}"$/  s/.*/[32m&[m/
t
/^.*: *".\{1,\}" => ""$/  s/.*/[31m&[m/
t
/^.*: *"\(.*\)" => "\1"$/!s/.*/[34m&[m/
  1. "foo" => "bar" という形式の行 じゃない場合 はこの時点で終了
    • アドレス付けない b は「スクリプトの最後までジャンプする」を意味する
  2. "" => ".+" という形式の行であれば 追加 用の色をつける
  3. t コマンドにより、直近の /s が成功していればこの時点で終了
  4. ".+" => "" という形式の行であれば 削除 用の色をつける
  5. t コマンドにより、直近の /s が成功していればこの時点で終了
  6. "foo" => "bar" 、つまり左と右の値(文字列)が 同じでない場合変更 用の色をつける

多分こんな感じです。都度 t で抜けているのは、最後の「変更」に対する正規表現が 「追加」や「削除」にもマッチしてしまい、2重で escape されてしまうからです。

まとめ

sed

Emacs の mode-line に寿司が流れる日

f:id:gongoZ:20161123231328g:plain

未完です

未完のため、ひとまず Gist に貼ってます。

https://gist.github.com/gongo/c51ac79c1669bd71714b601b42c3be18

どのあたりが未完かというと「複数バッファを開いている時」です。

buffer A buffer B issue
sushi-bar other buffer B に移動すると buffer A で作られた timer が動いてるので「お前んとこ conveyor 空っぽだな?」って言われる
sushi-bar sushi-bar run-at-time が2重に呼ばれるので寿司の速度が2倍になる

いろいろとやりようはありそうだが、ひとまず寿司が耐えず流れてくる様を見れたので満足した。 気が向いたら正式リリースしたい。

ちなみに

「寿司の絵文字表示されねーぞ」という方は

ここらへんの設定を真似したり使ったりするといけると思います。多分。

Be inspired by

go-airplay を AppleTV 4G 対応してた

Support AppleTV 4G by gongo · Pull Request #7 · gongo/go-airplay

AppleTV 4世代目が発売されてもうすぐ1年ですが、なんかようやく手をつけたみたいな感じです。

実は 4G が出た当時は、特に修正することもなく動いててよかったねーって思ってたんですが、 何度かシステムアップデートが行われた結果、 /playback-info が返す値の中の一部の型が変わっていた、という事態でした。

とりあえず今回は

switch t := info.ReadyToPlayValue.(type) {
case uint64: // AppleTV 4G
    info.IsReadyToPlay = (t == 1)
case bool: // AppleTV 2G, 3G
    info.IsReadyToPlay = t
}

client.go#L218-L223

こんな感じで凌ぎました。きっと大丈夫です。

終わり

TravisCI 上で「(GNU, BSD) sed & 各 shell」の組み合わせでテストする

成果物

雰囲気こんな感じです。

github.com/gongo/tpdiff/.travis.yml

経緯

gongo.hatenablog.com

  1. 先日書いた sed を、せっかくなので GitHub に置いておこう
  2. せっかく GitHub に置くのだからテストでも書こう

というところから始まりました。

https://github.com/gongo/tpdiff

さてテストを書くぞ!といったところで、何を重点的に見れば良いか:

  1. 使用する shell も人それぞれ違うはず
  2. sed には GNU 版 と BSD 版がある

この2点が特に注意すべきところと考えました。

1番に関しては「POSIX 準拠かどうか」みたいなのを ShellCheck を用いて確認はしているのですが、 やっぱり実際に動作した結果を見たいという気持ちがあります。

2番については、ユーザの使用マシンが Linux だったり OS X (macOS) だったりで sed にも違いが出てくるはずなので、ここも気をつけないといけません。

TraviCI ではこうしました

上記の注意点を踏まえ、TravisCI でテストを実行してもらうために

  1. 実行環境を Linux(Ubuntu) と OS X の2つを指定する
  2. テストしたい Shell をテスト前にインストールする

こんな感じにしました。

os:
  - linux
  - osx

env:
  - SH=mksh
  - SH=dash
  - SH=bash
  - SH=zsh

BSD sed が (TravisCI が用意する) Ubuntu 環境に簡単に用意できれば話は早かったのですが、なかなか難しそうだったので BSD sed を標準で持つ OSX 環境を用意してもらうことで、そこを補うことにしました。

refs: The Build Environment - Travis CI

env に定義したテスト対象のシェル選定理由なんですが、まあ特にこれといった理由はないんですけど、これぐらいカバーしてればいいかなーと。

ちょっとした問題点

TracisCI で OS X を使用すると、さすがに起動が遅くて全体的なテスト実行時間はそこそこ掛かってしまいます。

例えば https://travis-ci.org/gongo/tpdiff/builds/156956287 を見ると

> Elapsed time 21 min 12 sec
> Total time 3 min 51 sec

テストそのものの実行時間は短いのですが、環境を用意するのも併せると 20分ぐらい掛かっているのがわかります。 まあいいかってことで今は気にしてないです。

まとめ

どなたか UbuntuGNU/BSD sed を用意できる方法知りませんか

参考