Nikushi's blog Our Time is Limited.

コピペ誤爆対策

SQLをコピペでデータベースに投入するときとか、rootでコマンドコピペ作業するときとか、コピペする内容は意図通り? さっきみたメールの本文だったりしないか? と不安になるときもある。

pbwatchというコマンドラインツールを作ってみた。ターミナル上でクリップボードのテキストをターミナル上で表示しつづけるだけのシンプルツール。Macオンリーです。

ちなみに別解としては、シェルで $ while [ 1 ] ; do clear; pbpaste; sleep 1; done とかでもほぼ同じことはできたりする。

前職でWindows使ってたときはこういうフリーソフトがあって使ってたんだけど、今はMac使っててMacでもシンプルなツールないかと探してみたもののこのくらいシンプルなのが無かったのでGoでコマンドラインでいいやと作ってみた次第。コピペ前にテキストエディタとかに貼り付けて確認(無意識的に)してるかもしれないけど、少し手間が減って良さそう。

Nagiosの監視変更作業をGitHubを使って楽にした話

NetOpsCoding Advent Calendar 2015の7日目の記事です。

DeNAという会社のネットワークチームで働いています。ネットワーク機器の死活監視にNagiosを使っています。今日書くのは監視対象追加や閾値修正等の運用について、レガシーな従来の仕組みをGitHub(とpull request)と自動deployで改善した話しをします。

私の入社当時はNagiosの設定ファイルはCVSで設定ファイルを管理されてはいましたが、日々の作業(閾値変更など)は監視サーバへSSHログインして行う必要がありました。またNagiosサーバの数が複数台あり、どのサーバでどのネットワーク機器が監視されているか分かりにくかったとおもいます。

以下、改善したかった点です。

  1. 誰が作業してるか見える化したかった
  2. 閾値変更等に対して作業前にレビューを可能にしたかった(レビュー必須ではない)
  3. サーバログインレスにする。複数台のNagiosサーバのどれにログインするとか考えたくない

これらを実現するためにの仕組みは以下のようになりました。

  • 設定ファイル管理はCVSからGitHubへ移行
    • nagios-etc みたいな名前で1プロジェクト作成。Nagiosサーバホスト名毎にディレクトリ切って1プロジェクトで全監視サーバ分入れる。
    • テンプレートエンジン等の自動生成の仕組みは不要だったので、素の設定をGitに突っ込むだけ
    • Git移行にあたりCVSの過去の履歴は捨てた。履歴見ることあまり無いし、いざ見たくなればCVSのログを見る
  • 変更はPull Requestで。いわゆるGitHub Flowで運用
    • 手元のMac等で監視項目追加、閾値変更等毎にトピックブランチを作りmasterブランチに対してpull request
    • レビューする(ケースバイケース)
    • masterブランチにマージされるとCIサーバがNagiosサーバへ設定ファイルをdeploy && Nagiosプロセスreload
    • GitHubからCIサーバへはwebhookで通知し連携
  • CIサーバ兼、撒き元サーバ
    • CIにはJenkinsを使う
    • CIサーバからNagiosサーバへはsshログイン可能にしておく
    • 撒きスクリプトはCapistrano + RSync(+ssh) で実装
    • 撒きスクリプトはJenkinsのbuildタスクとして登録しておく
    • 撒きの結果はSlackで通知

この改善により、pull requestベースで変更が全て行われるようになるので作業が見える化され、また閾値の妥当性などについてコメントで議論することもでき色々捗るようになりました。またmasterブランチへマージするとNagiosサーバのreloadまでが裏側で自動実施されるのでサーバログイン不要となりまた気軽に閾値変更できるようにもなりました。

実のところWebアプリケーションのCIとdeploy作業の自動化といったコンテキストでよく出てくるワークフローと同じです。また設定を撒くところはChefやPuppetで置き換えてもいいかもしれませんが、私の所ではテンプレートエンジン等も不要だったのでシンプルで早いRSyncにしました。

またこれにあたってはZabbixなど他の監視ミドルウェアへの移行も検討していましたが、最終的にはデータベースもいらず学習コストも低くメンバが仕組みにもなれたNagiosから別のミドルウェアに移行するほどのメリットが見いだせずNagiosを使って運用を改善することにしました。

最後にネットワーク機器の監視に関して少しだけ本音を言うと外形監視って面倒です。ルータがオンラインになったら(つまり設置されて火が入ったら)勝手に監視登録されるようになると嬉しい。そういう機能を持った機種もありますがマルチベンダで運用していると全部が全部そうはならないんですよね。最近のサーバ監視だとZabbixのagentだったりSensuだったりMackerelだったり、インスタンスが起動すると監視が登録されてる世界なので、ネットワーク機器も(標準的に、標準規格で)そうなると良い世界だなとおもったり。

実はこれやったのは結構前の話しだったりするのですが、ソフトウェアからのネットワーク機器操作によってネットワーク運用の自動化を志す人達のAdvent Calendar、という機会を得てようやく書けた次第でよかった。

英語学習 x コマンドラインツール

最近Skypeで英会話レッスンを受けてレッスン後には復習をさっとやるのですが、辞書を引く、単語の発音確認などの作業をささっとコマンドラインツールで出来たらとおもいまとめてみました。ほぼMac限定です。

辞書

open dict://WORDでターミナルからMac付属のDictionaly.app(辞書.app)を開ける

$ open dict://Hello

.bashrc, .zshrcなどにエイリアス登録しとくと$ dict Helloで使えて便利。

function dict {
  if [ $# -eq 0 ]; then
    echo "Usage: dict WORD" 1>&2
    return 1
  fi
  open dict://$@
}

あらかじめDictionaly.appの設定で必要な辞書(英英、英和、和英などなど)好みの設定にしておくとよい。

UPDATE 2015/10/12

はてブコメント経由で辞書引いた結果をターミナル内で完結しないのか、というのがあり調べてみた。

jakwings/macdictというのが良さそう。CLIオプションで辞書を選択できるようになってた。またsekimura/lookupというのも見つけたがこちらは任意の辞書選択は出来ないみたい。

ただ文字列を整形して(例えばmanみたいに)出してくれる訳ではないのでやはり読みやすくはないので、個人的な意見としてはopen dict://で辞書アプリに飛ぶ方が良いかなー。

発音確認

sayコマンドでMacが喋り出す。

$ say "Bob’s mother became sick three month ago"

-r NUMBERオプションで1分間のワードレートを変更できる。-r 100くらいにするとゆっくり喋ってくれる。

$ say -r 100 Please speak slowly

自分の発音を録音し即時再生

soxコマンド付属のコマンドを使うとコマンドラインで録音、オーディオファイル再生ができる。

インストール。sox, rec, playコマンドがインストールされる。

$ brew install sox

以下のコマンドで録音 -> Ctrl-cで録音終了 -> 即時再生となる。簡易ボイスレコーダになって便利。

$ rec /tmp/a.wav; play /tmp/a.wav; rm /tmp/a.wav

Input File     : 'default' (coreaudio)
Channels       : 2
Sample Rate    : 44100
Precision      : 32-bit
Sample Encoding: 32-bit Signed Integer PCM

In:0.00% 00:00:01.83 [00:00:00.00] Out:79.9k [   ===|===   ]  Clip:0
...

.zshrc, .bashrcなどにalias rec-play='rec /tmp/a.wav; play /tmp/a.wav; rm /tmp/a.wav'としておくと便利。

いろいろ便利。

daemontoolsインストール後にトラブった

普段と違うで順でマシンをセットアップした時のこと。daemontoolsまわりたまにハマると詰んだ。メモメモ。

  • CentOS 6.3
  • upstart経由でsvscanbootを起動させる

こういう構成

daemontoolsをrpmからインストールした後、上げたいプロセス(mysqld)が起動しなくて困った。

svscan: warning: unable to start supervise mysql: file does not exist

こういうエラーが出てる。でもためしにupstart経由せずマニュアル $ svscan /service で起動するとうまく起動する。$PATH確認してみたりパーミッション確認したりしたが問題なさそう。英語Q&AサイトでOS再起動したら治るよ、っていう記述があって乱暴だな…とおもったのだが。困ったときのreboot、マシンを再起動したらupstart経由でデーモン起動できた。謎…。

スキマトークで英会話レッスン受けてみた

スキマトークというSkypeを使ってネイティブと英会話レッスンできるサービスを使ってみた。

10月に海外出張行く関係で、会社で英会話レッスン(実際に会って会話する1 on 1 レッスン)を週1受けることになった。あまり時間はなく付け焼き刃感はあるもののいずれにせよ誠にありがたい。

先日1回目があり、レッスン終わりに次回日程を決め次回は1週間後となったのだけど、はてそこでおもったのが1週間に1回の英会話レッスンで英語が流暢に話せるようになるだろうか?….なるいやなるわけがない!ということ。最近筋トレしていて時々筋トレ基準で考えることがあるのだけど週1回30分筋トレだけでマッチョになるわけはない。

Listeningについては数ヶ月前からHuluで毎日寝る前に聞いてる一応鍛えてる。でもSpeakingは英会話レッスン以外で機会を作れない。そこでレッスン頻度を増やすべきだと考えた。ひとつは、会社に頼んで回数を増やしてもらう。この調整はできそうではあるが、社内英会話とは別のやりかたを混ぜてやってみるのも面白そうだったのでSkype英会話を試してみた。

前置きが長くなったがスキマトークを利用してみた。他にも似たサービスは沢山あるが比較検討はしてない。選択理由はスキマトークの割引が受けれたからでとりあえず使ってみて良かったら継続してみよう、くらい。ちなみに私は回し者ではないことを断っておく。

週末1回、平日1回計2回とりあえず受けてみた。

  • 世界中からネイティブの先生が登録されている
  • 自分にあうレッスンをサイトから探して、時間を決めて先生を選ぶ
  • レッスン時間になるとskypeで先生から電話がかかってくるのでレッスンのスライドを見ながら進める
  • 値段は9コイン(=$9)前後/30分、先生によって値段がちがう
  • 授業後は、生徒から先生をレーティングできる

こんな感じ。Airbnbの英会話版みたいなとは言い過ぎかもしれないけどそういう印象で、先生を評価できるので沢山レビューもらった先生はより授業のofferが来る仕組みのようだ。そうすると先生もより熱心に頑張るのかなという印象。

初回登録したとき初回10コインもらえたので1回目は実質無料で受けることができた。2回めは10コインクレジットカードでチャージした。

1回目は何も考えずに適当に先生を選んでみたらSouth Englandの先生でイギリス英語アクセントでそれはそれで興味深かった。1回目の先生は真面目で淡々とレッスンを進めるタイプでところどころ発音を丁寧に教えてくれた。1回目の先生はイギリス英語でかっちりした発音で聴きやすかった。

また2回目はアメリカのフロリダ出身で今現在はシンガポールで英語の先生をしていて普段は子供に教えてるとのこと。朝の授業にもかかわらず明るい授業をありがとうございます。2回目の先生はアメリカ英語なので流れるような流暢さ++で個人的には聞き取りにくい部分もあった。

先生によって訛りが異なるので個人的には色々な発音が聞けて面白いとおもった。また先生は毎回変えれるので合わなかったら変えることができて良いなと。実際の英会話学校だと先生変えるのって気を使うのかな?(通ったことないから分からない)

あとSkype英会話の良いなとおもったのは、授業中に指摘されることをリアルタイムにSkypeチャットで先生がメモしてくれること。アクセントとか、間違った文法を正してくれたり。授業後に振り返る時にとても助かるのでこれはいいなとおもった。

2回受けての感想としてはSkype英会話便利だった。家の外にでずに隙間時間でさくっとできて便利。

当面の目標は出張用なのでレッスン内容をも少し考えたいところ。