docker-compose.yml の中で環境変数を展開する

下記のようにして環境変数を展開することができる。

version: '3.5'
services:
app:
build:
network: host
context: ./
environment:
APP_MODE: ${APP_MODE}
APP_PASS: ${APP_MODE}

また.envファイルで定義することもでき、下記のようにdocker-compose.ymlと同階層で定義しておけば、ユーザー固有の定義が簡単にできる。

APP_PORT=local
APP_PASS=password

特にリポジトリにパスワード等を含めたくない時は.envファイルは.gitignoreに入れつつ、.envファイルでパスワードを定義するのが良い。

参考

https://qiita.com/friedaji/items/c1894821a2c49395cfd7

DockerHubのイメージのタグ一覧をコマンドで得る

https://registry.hub.docker.com/v1/repositories/[IMAGE]/tagsからJSONでタグ一覧を得られるのでそれをjqで分解するのがお手軽。以下が例。

$ curl -s https://registry.hub.docker.com/v1/repositories/ubuntu/tags | jq -r '.[] | [.name] | @tsv'
latest
10.04
12.04
12.04.5
12.10
13.04
13.10
14.04
14.04.1
14.04.2
14.04.3
14.04.4
14.04.5

Ubuntuの/tmpが消えるタイミング

Ubuntu Tipsによると

/tmp/
一時的な作業用ディレクトリです。基本的に起動時に空になります。(/etc/init/mounted-tmp.conf) temporary の略です。

とのことでした。RedHat系だとtmpwatchってのがあって、一定時間アクセスのないファイルを削除していた。

docker-composeでthe input device is not a TTYと言われた時の対策

docker-compose  exec app hoge.py < input.txt

で出力を流し込もうとするとTTYが無いよと言われることがある。これはTTYが割り当てられているからであり、下記のようにして無効化するといいみたい。

docker-compose  exec -T app hoge.py < input.txt

-T オプションは

Disable pseudo-tty allocation. By default docker-compose exec allocates a TTY.

TTYを無効にするもの。通常デフォルトの挙動はTTYを割り当ててるらしいが、それが返って邪魔をしているのかなあ。

jqでJSONをCSVやTSVに変換する

jqをインストールする

sudo apt install jq

CSVに変換する

$ echo '[{"a":1},{"a":2},{"a":3}]' | jq -r '.[] | [.a] | @csv'
1
2
3

TSVに変換する

$ echo '[{"a":1},{"a":2},{"a":3}]' | jq -r '.[] | [.a] | @tsv'
1
2
3

Slackで特定のユーザーやボットをミュートするHide Slack Messages

Chrome拡張にこんなものがありました。

https://chrome.google.com/webstore/detail/hide-slack-messages/mjingehmnkofkklkdlipioiinepjghlo

特徴

  1. 任意のユーザーからのメッセージを隠す
  2. ボットからのメッセージを隠す
  3. オプションでメッセージをDMからのみ隠すことを許可する
  4. スレッドでも動作

参考

https://www.quora.com/How-do-you-block-someone-on-Slack

二段階認証を使いながらGithubのアカウントを複数使い分ける

Githubは本業用とプライベート用を使い分けるといった運用が可能ですがコツがいります。

リポジトリをcloneする時に https から始まるURLで管理すれば、pushするときにGithubのIDとパスワードを求められ、認証すれば鍵など不要でpushができるのですが、二段階認証を導入するとこれが使えなくなります。(部分的に認証を通るようにできるみたいですが、全てのリポジトリに対してこの設定をするのが面倒。)

解決策として今の所思いつくのが、.ssh/configでホスト毎に使う鍵を分けることです。

アカウント毎の鍵を.ssh/configで指定する

.ssh/config を開いて下記のように、それぞれの鍵にそれぞれのHostを割り当てます。

Host one.github.com
HostName github.com
IdentityFile ~/.ssh/one_rsa
Host two.github.com
HostName github.com
IdentityFile ~/.ssh/two_rsa

リポジトリのURLがをちょちょいと変更

最後にプロジェクトの.git/configを開いて下記のようになっている項目を

[remote "origin"]
url = git@github.com:user/repo.git

このように変更することで指定した鍵を使わせることができます

[remote "origin"]
url = git@one.github.com:user/repo.git

BigQueryで時間単位の集計を行う方法

時間単位での計算をする場合、MySQLではHOURを使っていたが、BigQueryではそれではできず、下記の2種類の方法で行う。

EXTRACTを使う場合

この方法だと時間の数値部分だけを得られる(例えば2019-07-04 12:13:14だと、12が得られる。)

SELECT
EXTRACT(HOUR FROM datetime) AS hour,
COUNT(*)
FROM example.hoge
GROUP BY hour

TIMESTAMP_TRUNCを使う場合

これはEXTRACTと違ってDATETIME全体を得ることができます。(例えば2019-07-04 12:13:14だと、2019-07-04 12:00:00が得られる。)

SELECT
TIMESTAMP_TRUNC(datetime, HOUR) AS hour,
COUNT(*)
FROM example.hoge
GROUP BY hour

おわり

EXTRACTの場合は純粋な時間だけなので、日をまたぐ場合は混ざってしまいますが、TIMESTAMP_TRUNCを使えば年月日を意識することなく直で日を跨いだ処理ができるのがポイントです。

tcコマンドを利用してqdiscを変更する

設定前

$ tc qdisc show dev enx0ex
qdisc fq_codel 0: root refcnt 2 limit 10240p flows 1024 quantum 1014 target 5.0ms interval 100.0ms memory_limit 32Mb ecn

qdiscをnoqueueに設定する

sudo tc qdisc add dev enx0ex root noqueue

変化を確認

$ tc qdisc show dev enx0ex
qdisc noqueue 0: root refcnt 2

設定を削除する

sudo tc qdisc del dev enx0ex root

最初の状態に戻った

$ tc qdisc show dev enx0ex
qdisc fq_codel 0: root refcnt 2 limit 10240p flows 1024 quantum 1014 target 5.0ms interval 100.0ms memory_limit 32Mb ecn

参考

https://qiita.com/hana_shin/items/d9ba818b49aca87b2314