かまたま日記3

プログラミングメイン、たまに日常

家電三種の神器を買ってQOLが上がった件

先月に一大決心してルンバ、食器洗い乾燥機、ドラム式洗濯機を買いました。 全部かなりなライフチェンジングな買い物で満足しています。

どれも良かったですが、しいて言えば個人的な費用対効果としては ルンバ > 食洗機 > ドラム式 かなと思いました。参考にしていただけると幸いです。

ルンバ

出社前にルンバかけて帰ったら終わっているというのが本当に感動的です。
最上位モデルの885と迷いましたが、部屋もそこまで広くないし予算の関係もあり875にしました。

  • 掃除のクオリティは問題なし *1
  • 今までは床掃除をしたら疲れ果てて棚とかはほとんど掃除してなかったけど、床はルンバが全部やってくれるのでそういった所の掃除に力を入れられるようになりました
  • 音は結構大きい

あとよくルンバのレビュー記事にも書かれてたりしますが、副次的な効果としてルンバを使うために床に余計な物を置かなくなり、部屋が広くなりました。

食器洗い乾燥機

食器を入れてボタン押すだけで、数十分後に洗えて乾燥もされているというのは本当感動的です。

  • 一番大きなタイプを買いましたが、思ったよりスペースを取るのでどのサイズのを使うかというのは、キッチンの大きさと要相談
  • 設置のために分岐水栓の設置が必要なので、その分の予算も必要
    • 自分で設置しましたがそこまで難しくは無かったです。
    • が、ク◯シアン案件のリスクもあるので自己責任で
  • 食器をたくさん入れるための入れ方は結構工夫が必要
  • 音は結構大きい
  • 水道代は手洗いに比べて少なくなるらしい(未確認)

ドラム式洗濯機

洗濯だけでなく乾燥もされているというのは本当感動(ry *2
選択肢が多すぎて非常に迷いましたが、日立にしました。

  • 風アイロン*3は思っていたほど伸びなかったですが、許容範囲
  • 音は結構大きい
  • 水道代は縦型式に比べて少なくなるらしい(未確認)

*1:たまにコードが絡まったりして止まってたりしますが...w

*2:洗濯で一番辛いのは干す && 取り込む作業だと思うので、そこがなくなるのが本当に助かります

*3:乾燥しつつ服のシワを伸ばす的な機能

GitHubでsquash mergingが出来るようになった。

最近某氏のGitの記事がバズったので対抗意識を燃やしてGitHubの新機能の記事を書いてみることにします。

github.com

ここ3日くらいのうちにプルリクをマージしてる人はUIの変化で気づいている人も多いかと思いますが、この機能はPull Requestをマージするときに一つのコミットにまとめてマージできます。
たとえばプルリク内で

  • [tmp] コメントアウト とか
  • デバッグ用 とか
  • とりあえずここまで

みたいな開発時の一時的なコミットが散乱していて、最終的には一つにまとめたい、そんな時にはこちらの

  • Squash and merge

ボタンを使います。

f:id:kamatama_41:20160406020804p:plain:w300

そうすると一個のコミットにsquashされた状態でリクエスト先にマージされます、もちろんコミットコメントも編集可。 個人的にコミットはマージ前にちゃんと整理しよう派なので良い機能だと思います。*1

*1:本当はもうちょい細かくsquash出来る方が良いと思っていますが、それをGitHubのUIでやるのは大変そう

Chrome Developer Tools で帯域制限した状態のテストをする

Web開発をやっていると地方や海外の回線が遅い環境の場合の挙動確認を行いたい場合があったりするのですが、そんな時に便利なのがタイトルの機能です。

たとえば何もしない場合、今インターネットに繋いでいる回線でこのブログを開いた場合、だいたいこのブログ本体をgetするのに54.71msかかり、全体のロード時間は8.33sでした

f:id:kamatama_41:20160316022442p:plain

制限方法

つぎに帯域制限をかける方法ですが、Developer Tools のDisable Cacheの横のNo Throttlingと書かれているプルダウンをクリックすることで選択できます。

f:id:kamatama_41:20160316022916p:plain

試してみる

試しにRegular3G(750kb/s↑ 250kb/s↓ 100ms RTT)で試してみると、ブログ本体をロードするのに330ms、全体のロード時間は18sでした。

f:id:kamatama_41:20160316023347p:plain

Jinja2テンプレートでデリミタを文字列として表示する

ここ最近Jinja2というかAnsibleネタが続きますが、AnsibleのJinja2テンプレートでデリミタになってる文字列({{, {%など)自体を表示したい場合、{{}}式の中に表示したい文字列を書きます

{{ "{% Hello }" }}

Jinja2テンプレートでincludeしたファイルにインデントをつける

環境

  • Jinja2 2.2.8 *1

何に困っていたか

AnsibleでNginxの設定ファイルを作ってた時に、共通設定ファイルを作って必要な箇所でincludeしていたが、共通ファイルの方がインデント付いてなくて出来たファイルのインデントが崩れてしまう。

このファイルを(common.j2とする)

location /common {
    proxy_pass https://common.example.com;
}

このファイルに普通にincludeすると

server {
    listen 443 ssl http2;
    server_name example.com;

    {% include "common.j2" %}
}

こうなる

server {
    listen 443 ssl http2;
    server_name example.com;

    location /common {
    proxy_pass https://common.example.com;
}
}

解決策

FilterブロックとIndentフィルター(この辺)を使います。

FilterとIndentを使ってこう書くと

server {
    listen 443 ssl http2;
    server_name example.com;
{% filter indent %}
    {% include "common.j2" %}
{% endfilter %}
}

こうなります

server {
    listen 443 ssl http2;
    server_name example.com;
    location /common {
        proxy_pass https://common.example.com;
    }
}

調整する

インデントを付ける幅を変えたい場合は第一引数にスペース幅を(デフォルトは4)、最初の行をインデント付けたい場合は第二引数にTrueを入れます。
こんな感じ(common.j2もインデント幅が2になってるの前提)

server {
  listen 443 ssl http2;
  server_name example.com;
{% filter indent(2,True) %}
{% include "common.j2" %}
{% endfilter %}
}

*1:Ansible1.9.4に同梱のバージョン

Ansibleでパイプを使いたい場合はshellモジュールを使う

AnsibleにはCommandモジュールShellモジュールがあるのですが、commandモジュールは安全な代わりに一つのコマンドしか実行できません。|;なんかを使って複数のコマンドを同時に実行したい場合はShellモジュールを使いましょう。

Commandの場合はパイプ以降が解釈されてないのかechoの出力として表示されます。

% ansible node1 -i ./hosts -m command -a 'echo "Hello World" | cut -d" " -f 1'
node1 | success | rc=0 >>
Hello World | cut -d  -f 1

Shellの場合はちゃんと想定通りの結果が返ります。

% ansible node1 -i ./hosts -m shell -a 'echo "Hello World" | cut -d" " -f 1'
node1 | success | rc=0 >>
Hello

AWS上に構築したAnsible Towerのバージョンアップ

会社で使っているAnsible Towerのインスタンスが急にEC2のDynamic Inventory出来なくなり*1、急きょバージョンアップすることになったのでそのメモ。

基本的に以下のページの手順に従うだけです。
12. Upgrading an Existing Tower Installation — Ansible Tower Installation and Reference Guide v2.4.4

まったく複雑な設定をしてなかったのでかなり楽ちんでした。

前提

  • Ansible Towerのバージョンは2.3.1 -> 2.4.4
  • Ansibleが用意してくれているAMIをそのまま使用。特にHA構成やDBをlocalhostから外部に移行といったことはしていません。
  • OSはUbuntu
  • TowerのライセンスはFreeTrail版

手順

  • 準備
    • バージョンアップには10GB以上の空きディスクが必要なので、空けておく
    • 念の為にEBSボリュームのスナップショットをとっておく
  • サーバにSSHする、Rootになる
  • Setupスクリプトのアーカイブに行って欲しいtarballのリンクを確認し、wgetで取ってくる。最新版でいいのであればlatestでOK
wget http://releases.ansible.com/ansible-tower/setup/ansible-tower-setup-latest.tar.gz
  • tarballを解凍する
tar xvzf ansible-tower-setup-latest.tar.gz
  • configureスクリプトを実行する、localで実行する場合は--localをつける
./configure --local

でOK

./setup.sh
  • 終わり

*1:現在も原因不明