serverspecの結果を雑にslack通知させる為のrspecカスタムフォーマッタ書いた
Jenkinsとかから実行してる時は、そっちでやればいいんだけど、単体でcronとか実行してるときに通知させたいなーと思って。
前提
- rspec3系
- serverspecとしてふつーに動く状態
- slack incoming webhookのurlをとっておく
Gemfileにslack-notifierたす
source 'https://rubygems.org' gem 'serverspec' gem 'rake' gem 'slack-notifier'
lib/slack_formatter.rbを書く
require 'rspec' require 'slack-notifier' RSpec::Support.require_rspec_core "formatters/base_formatter" class SlackFormatter < RSpec::Core::Formatters::BaseFormatter RSpec::Core::Formatters.register self, :example_passed, :example_failed def initialize(output) super(output) @results = Array.new end def example_passed(notification) @results << "OK" end def example_failed(notification) @results << "NG" end def close(notification) post_slack() end def post_slack notifier = Slack::Notifier.new('webhook-url') if @results.include?("NG") then note = { text: "ダメー", color: "warning" } else note = { text: "おっけー", color: "good" } end notifier.post text: "", attachments: [note] end end
.rspecにSlackFormatterの記述をたす
--color --format d --format SlackFormatter
実行するときはこんなかんじ
bundle exec rake spec:all -t -r ./lib/slack_formatter.rb
通知の内容を細かくアレコレしたいときは、slack_formatter.rbの中身をちゃんと書こう。
おしまい。
2016年読んだ10の漫画について書く
去年読んだマンガを振り返ってみる。
会社辞める時にもらったものが多い(電子書籍のマンガ売ってる職場だったのでね)。感謝感謝。
読んだけど、刺さらなかったものは触れてない。

- 作者: 山本さほ
- 出版社/メーカー: 小学館
- 発売日: 2015/05/20
- メディア: コミック
- この商品を含むブログ (13件) を見る
懐かしい度:★★★

- 作者: 沙村広明
- 出版社/メーカー: 太田出版
- 発売日: 2007/12/18
- メディア: 単行本
- 購入: 27人 クリック: 839回
- この商品を含むブログ (282件) を見る
落ちたいときに有用度:★★★

デッドデッドデーモンズデデデデデストラクション(1) (ビッグコミックス)
- 作者: 浅野いにお
- 出版社/メーカー: 小学館
- 発売日: 2014/12/22
- メディア: Kindle版
- この商品を含むブログ (2件) を見る
破壊される世界を妄想しつつの日常度:★★★

- 作者: 五十嵐大介
- 出版社/メーカー: 小学館
- 発売日: 2004/04/30
- メディア: コミック
- 購入: 10人 クリック: 169回
- この商品を含むブログ (180件) を見る
味わい方がわからない度:★★★

- 作者: 吉田覚
- 出版社/メーカー: 新潮社
- 発売日: 2016/11/09
- メディア: コミック
- この商品を含むブログ (1件) を見る
日曜の夜に読みたい度:★★★

- 作者: 中島三千恒
- 出版社/メーカー: 新潮社
- 発売日: 2016/11/09
- メディア: コミック
- この商品を含むブログ (5件) を見る
実際の歴史を調べたくなる度:★★★

アンゴルモア 元寇合戦記(6)<アンゴルモア 元寇合戦記> (角川コミックス・エース)
- 作者: たかぎ七彦
- 出版社/メーカー: KADOKAWA / 角川書店
- 発売日: 2016/08/26
- メディア: Kindle版
- この商品を含むブログ (2件) を見る
鎌倉萌度:★★★

- 作者: 岡本倫
- 出版社/メーカー: 集英社
- 発売日: 2016/05/19
- メディア: コミック
- この商品を含むブログ (1件) を見る
伏線回収がんばりました度:★★★

ハイスコアガール(6) (ビッグガンガンコミックススーパー)
- 作者: 押切蓮介
- 出版社/メーカー: スクウェア・エニックス
- 発売日: 2016/07/25
- メディア: コミック
- この商品を含むブログ (14件) を見る
続いてくれてうれしい度:★★★

GROUNDLESS : 6?豚の鉄槌? (アクションコミックス)
- 作者: 影待蛍太
- 出版社/メーカー: 双葉社
- 発売日: 2016/06/01
- メディア: Kindle版
- この商品を含むブログ (1件) を見る
スナイパー中二度:★★★
10紹介するだけで大変だ。( ´ー`)フゥー...
2016年の振り返り
今年もお疲れ様でした。 チラ裏たる自分のブログで、2016年をつらつら振り返ってみたいと思います。
アウトプット
このブログ以外に書いたものは以下の感じです。いつか自分が興味を強く持てるテーマの本とか書いてみたいなぁ。
- qiita
- 会社のブログ
相変わらず体外的なアウトプットが質、量共に不足してますねー。先達を見習わねば。
仕事
特に退職エントリとかは書いてないですが、渋谷の会社を退職して八重洲の会社で働くようになりました。環境を変えると新しくいろいろ学ばないといけないなぁ、という当たり前のことを感じています。(この点は非常にポジティブに感じています)。
最初の転職の時は結構、崖から飛び降りる!ぐらいの感じがありましたが、今年の転職はそうでもなく、日本の狭い業界でスライドした感が。。。ただ、入ってみたら予想以上に若者が多かったので、サラリーマン10年選手の自分が出せるバリュー、ってのはどういうことなんだろうなぁというのを日々模索中です。
齢30を過ぎ、30代の身の振り方、40代の身の振り方をどうしたものかなーというのが、ここ最近の懸案だったりします。今のところ特に結論めいたものは無いんですけど。
今の仕事内容としては、成り行きなんですが、とあるサービスのSite Reliability Engineeringチームとして、結構なんでも屋っぽい仕事を今はしています。Java書いたり、Ruby書いたりという感じです。ちょっとインフラ屋時代に近い側面もあり懐かしさもあります。
プライベート
個人的なところで言えば、不健康な年だった、に尽きます。
人生初の入院(腸炎)であったり、ちょっとした風邪などなど。
来年は家庭の環境も激変しそうなので、自分が健康に過ごさないといけないなぁという必然性を感じています。今まで以上に、自分が元気でないといけないですね。
2017年に向けて
スキルとして伸ばしていきたいのは、数学であったり、英語であったり、プログラミング(ネイティブアプリ何か作りたいなー)であったりと、2016年に考えていたことと特に変わりません。
加えて、プライベートでもますますがんばる必要が出てきているので、健康に気をつけて日々を過ごしたいと思います(実は以前より酒量も減らしているんですよ)。
それでは皆さんも良いお年を〜

Site Reliability Engineering: How Google Runs Production Systems
- 作者: Betsy Beyer,Chris Jones,Jennifer Petoff,Niall Richard Murphy
- 出版社/メーカー: Oreilly & Associates Inc
- 発売日: 2016/04/16
- メディア: ペーパーバック
- この商品を含むブログを見る
Capistrano3を最低限の構成ではじめてみる
やりたいこと
- Mac OS X前提
- sshでログインできる環境で、capistranoのタスクファイルを分割して、パイプライン定義して呼び出したい。
- 最低限の記述で書き始めたい。
install
$ gem install capistrano $ cap -v Capistrano Version: 3.6.1 (Rake Version: 10.4.2)
getting start
# ディレクトリつくる mkdir sample cd sample # 初期ファイル生成する cap install # とりあえず使わないものを消す rm config/deploy/*
全体像
. ├── Capfile ├── config │ ├── deploy │ │ ├── local.rb │ │ └── recipes │ │ ├── hello1.rb │ │ └── pipeline.rb │ └── deploy.rb ├── lib │ └── capistrano │ └── tasks └── log
各タスク置き場のディレクトリつくる
mkdir config/deploy/recipes
deploy.rbをかく
config/deploy.rb
lock '3.6.1' Dir['config/deploy/recipes/*.rb'].each { |plugin| load(plugin) }
local.rbかく(local用の設定ファイルつくる)
config/deploy/local.rb
set :user, ask('user-name', nil) set :password, ask('user-password', nil) server '127.0.0.1', port: 22, user: fetch(:user), password: fetch(:password), roles: %w{app}
pipeline.rbをかく(パイプライン制御用)
config/deploy/recipes/pipeline.rb
task :hello do after "hello", "hello1:echo1" end
hello1.rbをかく(実際のタスク)
config/deploy/recipes/hello1.rb
namespace :hello1 do task :echo1 do on roles(:app) do execute 'echo "hello world"' end end end
実行例
$ cap local hello --trace ** Invoke local (first_time) ** Execute local ** Invoke load:defaults (first_time) ** Execute load:defaults Please enter user-name (): Please enter user-password (): ** Invoke hello (first_time) ** Execute hello ** Invoke hello1:echo1 (first_time) ** Execute hello1:echo1 00:00 hello1:echo1 01 echo "hello world" 01 hello world ✔ 01 xxx@127.0.0.1 0.272s
こんな感じ
その後の拡張のやり方
- これから開発していくときは、環境が増えたら、local.rbのように、xxx.rbを配置すればよい。
- hello1以外のタスクを定義をしたくなったら、hello1.rbのように、xxx.rbを配置すればよい。
おしまい。
踏み台経由のsshでsocks proxyをつくって、jmx接続して監視する話
やること
環境
ローカルMac OS version
sw_vers ProductName: Mac OS X ProductVersion: 10.11.6 BuildVersion: 15G31
ローカルSSH version
ssh -V OpenSSH_6.9p1, LibreSSL 2.1.8
java version
java -version java version "1.8.0_102" Java(TM) SE Runtime Environment (build 1.8.0_102-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
Javaアプリケーションの設定
Javaアプリケーションの起動シェルはこんなかんじ
#!/bin/sh JVM_OPS="-server -Xms128M -Xmx128M \ -Dcom.sun.management.jmxremote.rmi.port=18080 \ -Djava.rmi.server.hostname=10.x.x.x \ -Dcom.sun.management.jmxremote=true \ -Dcom.sun.management.jmxremote.port=18080 \ -Dcom.sun.management.jmxremote.authenticate=false \ -Dcom.sun.management.jmxremote.ssl=false" java ${JVM_OPS} -jar foo.jar >/dev/null 2>&1 & exit 0
これをたたく。
sshでsocks proxyをつくる
ssh configはこんなかんじ
Host fumidai HostName 10.x.x.x Port 22 IdentityFile ~/.ssh/foo.pem User user Host target HostName 10.x.x.x Port 22 IdentityFile ~/.ssh/foo.pem User user ProxyCommand ssh -F ~/.ssh/config -W %h:%p fumidai DynamicForward 10000
sshコマンド実行、proxyつくる
ssh -F ~/.ssh/config target
これでproxyがつくられる
VisualVM or JConsoleで接続する
VisualVM
jvisualvm -J-DsocksProxyHost=localhost -J-DsocksProxyPort=10000 -J-DsocksNonProxyHosts=
VisualVMが起動したら、上の例だと、127.0.0.1:18080に対して、JMX接続を追加すればOK
JConsole
jconsole -J-DsocksProxyHost=localhost -J-DsocksProxyPort=10000 -J-DsocksNonProxyHosts=
ここまで至るの長かったわー
fire HD 8 (2016)が来てから1週間
古いiPadを長らく使っていたのですが、電子書籍のリーダーとして見たときにいくつか欠点があって、新しいタブレットを探していました。
iPadというか、iOSの思想的なところなんですが、やっぱり自炊した本、電子書籍書店で買った本なんかを読むときに、不便を感じます。
- microSDなどの外部メディアが使用できること
- ftpdなどを用意に立ち上げられること(自宅のLAN内で、PCからの直接転送をしたい)
これらの機能が欲しいなと思い、8インチクラスでいろいろ探していたんですが、ちょうどfire HDの新型が出るということで、世間のレビューも待たずに買うことにしました。
Primeじゃない定価で、16GBモデルを購入。
特に不満はないんですが、感想をちょっとだけ。
- iPad,iPhoneの液晶に目が慣れたせいか、やっぱり、液晶は見劣りするが、値段相応
- 解像度はまぁまぁ、本を読むのがメインだと気にならないレベル
- fireOSのストアは、google playに比べれば、当然アプリは少ないんですが、ノンサポートでAPKを配ってるところもあるのであまり気にならず(例えば、KADOKAWA BookWalkerとか)
12,980で買える8インチタブレットしては上々ではないでしょうか。

- 出版社/メーカー: Amazon
- 発売日: 2016/09/21
- メディア: エレクトロニクス
- この商品を含むブログ (1件) を見る

Amazon Fire HD 8 (Newモデル) 用カバー ブラック
- 出版社/メーカー: Amazon
- 発売日: 2016/09/21
- メディア: エレクトロニクス
- この商品を含むブログを見る

【Amazon.co.jp限定】Transcend microSDXCカード 128GB Class10 UHS-I対応 400× (無期限保証) TS128GUSDU1PE (FFP)
- 出版社/メーカー: トランセンド・ジャパン
- 発売日: 2016/01/06
- メディア: Personal Computers
- この商品を含むブログを見る
自分のsshのpassphrase忘れた愚か者がクラックする話
タイトルそのまんまなんだが...
想定する環境
- homebrewが使えるMac
John the Ripper導入
brew install john
もし、opensslが入っていなかったら入れておく
brew install openssl
ssh-privkey-crack.cを拾ってきてコンパイル
curl -O https://raw.githubusercontent.com/Boran/lusas/master/ssh-key-crack/ssh-privkey-crack.c cc -I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib -o ssh-privkey-crack ssh-privkey-crack.c -lssl -lcrypto chmod +x ssh-privkey-crack
いざ解析
john --stdout --incremental | ./ssh-privkey-crack .ssh/{target_key}
まぁ、これはインクリメンタルに探していくわけで、凝ったパスワードの場合やはり時間がかかる。
私の場合は、いくつか候補があって、どれかわからんかったので、候補ファイルを別途つくってそれを食わせてなんとかしました。
wordlist.txtにずらずら候補を並べただけ。
john --stdout --wordlist=./wordlist.txt |./ssh-privkey-crack .ssh/{target_key}
マッチするとこんなんが出る
------------------------------------------------------------------------ -- - Passphrase match: <xxx>. Found password after 0 seconds and 0 tries. -------------------------------------------------------------------------- -- -
愚か者の戦いはこれで終わり