2015年2月に読んだ本を振り返る

今月は5冊。冊数だけで見ると少ないが、週1くらいのペースで面白い本が読めた。

最初に読んだ ボナンザVS勝負脳―最強将棋ソフトは人間を超えるか (角川oneテーマ21) は2007年の本。実は今読むとかなり状況は異なってはいるが、そもそもどういった思想でコンピュータ将棋のアルゴリズムが実装されているのか。それに対してプロ棋士はどの様に考えるのかなどが双方の立場から交互に章で述べられていてとてもおもしろかった。


hideackの本棚 - 2015年02月 (5作品)
powered by booklog

evac weekly – Slack ouput plugin 追加

evac - Node.js based simple aggregator - でこの一週間改良した箇所まとめです。

Slack output plugin追加

SlackのIncoming webhookを利用してevacの出力をSlack上に流せる様にしました。

例えば、

in:
staticWord:
text: Hello, slack! <http://www.remp.jp>
out:
slack:
url: https://hooks.slack.com/services/***/***/****

の様にoutputとしてslackプラグインを指定し、SlackのIncoming webhookの設定で示されたhook用のURLを指定してやることで任意のルームで発言することができます。

f:id:hideack:20150222154432p:plain

SlackでHubotを使う

REMPチームで今までチャットシステムにLingrを利用していたのだけど、会社でもSlackの試用を始めたりしているので丸っとSlackに移動させようとLingrで動かしていたHubotをSlackに移した。

Slack自体がHubotを稼働させるためのintegrationとして準備しているのでほとんど障壁が高く無かったのだけど、一応動かした際のメモ。

1. Integrationを追加

https://〜.slack.com/services の Integrations で Hubot を追加する

2. 環境変数の設定

  1. のIntegrationsで追加すると Setup Instructions として表示される HUBOT_SLACK_TOKEN の値をHubotが稼働しているサーバーへ環境変数として追加する。

3. npmパッケージのhubot-slack追加

Hubotのプロジェクトに slackhq/hubot-slack · GitHub を追加する。

$ npm install hubot-slack --save

4. 起動時にslackアダプタを指定

Hubotを起動させる際にアダプタとしてslackを指定する。起動時に -a のオプションを指定する。

$ bin/hubot -a slack

Hubot自体も、Hubotを永続化させるのに利用しているsupervisorの設定もChefのテンプレートとしてリポジトリ管理してたのでその辺りも我ながらよかった。*1

*1:というか普通はきっとherokuで動かしてるんだろうな。

"天ぷらにソースをかけますか?" という本を読んだ

天ぷらにソースをかけますか?―ニッポン食文化の境界線 (新潮文庫)という本を読んだ。

食文化って面白い。東京に出てきて大分時間は過ぎたのだけど、外でご飯を食べたり人とお酒を呑んでいると、稀に「あれ?こんな食べ方するのか。」と思うことがままある。

ちなみに東京では、決してコンビニで豚まん(肉まん)を買っても何もついてこない。豚まんには酢醤油が欲しいとやっぱり思ってしまう。

f:id:hideack:20150222151154j:plain

この本では、

  • 天ぷらにウスターソースをかけて食べるか?
  • ばら寿司と呼ぶか、ちらし寿司と呼ぶか
  • 小豆、お餅が入った甘い椀物をなんと呼ぶか(ぜんざい or おしるこ)
  • 豚まんと呼ぶか肉まんと呼ぶか。そしてそれに何かをつけて食べるか?
  • メロンパンとサンライズ
  • そもそもお肉と聞いて「牛肉」が浮かぶか「豚肉」が浮かぶか
  • 冷やし中華にマヨネーズを付けるか?
  • カレーライスに卵をのせるとしたら「生卵」か「ゆでたまご」か

などといった日本各所によって異なる食文化の断片を知ることができてとても面白い。


minaでデプロイステージを切り替える

REMPSTORYBOARDS ではminaを利用してデプロイを行っているのだけど、これらのアプリケーションでもステージング環境を扱いたいなと思った時に切り替えをどの様にすればよいのか調べたのでメモ。

以下の様な感じで切り分けができる。

case ENV['to']
when 'staging'
set :deploy_to, '/foo/bar/storyboards_staging'
else
set :deploy_to, '/foo/bar/storyboards'
end

これでデプロイする際に

$ bundle exec mina deploy to=staging

とすることでパラメータとして渡すことができるので、これでデプロイ先を切り分けることができる。

美味しい餃子の焼き方

突然ですが餃子好きですか?

餃子は美味しいので家でもタネから作ったり、お手軽に冷凍食品のものを買ったりして家で焼くことが多いのですが、意外と焼くのは簡単なのでその時のコツ3つ。

  • フライパンに火をかける前に餃子を並べてしまう
  • いい焼き色がついたら餃子を半身浴になるぐらい水を投入
  • 水が蒸発する直前にごま油を入れる

これだけで餃子は上手に焼ける(はず)


フライパンに火をかける前に餃子を並べてしまう

フライパンを温めてから餃子を並べると最初に入れた餃子はきれいな焼き色がついたのに、並べ終えて最後に入れた餃子は全く焼き色が付かない。というケースがあるので、そうであれば火を付ける前から並べれば良い。ということで、フライパンに油を引いたら餃子を並べてしまいます。

焼きムラ気にして慌てなくても良いし、並べるときに鍋は熱くないのでゆっくり作業できます。

いい焼き色がついたら餃子を半身浴になるぐらい水を投入

餃子を2,3個箸で上げてみて焼き面を見ていい焼き色がついていたらフライパンに水を入れます。

これは一般的だと思いますが、いざ実際やってみるときになると「こんなに入れて焼き餃子になるのだろうか!」という不安に襲われて稀に控えめにお水入れる方もありますが、心配せずに餃子が1/3〜1/2程度水に浸かる程度入れてしまいます。

ここで入れる水を中華スープの素を薄く溶いたものを使うと餃子の皮に外側からも味がしみこんで美味しくなりますがスープが濃すぎると「これは中華スープに浸かった餃子を焼いたな」という餃子になるのでお好みで....。

入れたら 強火&蓋をして 水を蒸発させていきます。

水が蒸発する直前にごま油を入れる

水をどんどん蒸発させていき、フライパンのそこに水が多少残ってぐつぐついっている段階でごま油をフライパンの周りにかけます。水が残っているところに油をかけると、これもまた不思議な感覚に襲われることもありますが気にせず回しかけます。

その後は蓋を取ったまま水を完全に蒸発させて、ごま油で餃子の皮がカリッとなったら出来上がりです。

evac weekly – 標準入力プラグインとYAML対応

evac - Node.js based simple aggregator -で今週改良した箇所まとめです。

トピックとしては、以下の2点。

  • YAMLファイルをレシピとして扱える様になった
  • 標準入力をevacの入力として扱える様になった

レシピのYAML対応

今までJSONでレシピを対応する仕様にしていたのですが、YAMLでも定義できる様になりました。

in:
staticWord:
text: "test word."
filter:
through:
out:
stdout:

上記の様なYAMLファイルを用意した上でevacコマンドに渡してやれば、

$ evac test_stdout.yaml
test word.

と今までどおり扱うことができます。

標準入力プラグイン追加

標準入力のプラグインを追加しました。入力として標準入力を扱うことができる様になったので、例えば、標準入力で渡された内容をそのままPushbulletで通知したい場合、

in:
stdin:
out:
pushbullet:
device: ******@gmail.com
token: *******
title: テスト
mode: note

といったレシピファイルを用意した上で実行時にパイプを利用して文字列を渡してやることで、その内容をPush通知できます。

実際に標準入力で渡された文字列をPushbullet経由で通知している様子はこの様な形。

$ echo "Hey" | evac -v test_stdin.yaml


nconfでYAMLファイルを扱える様にする

evacでは、アグリゲータとしての挙動をJSONファイルで定義する様にしていて、その内容の解釈にnconfを利用しているのだけど、YAMLもフォーマットとしてサポートさせたいので試してみたのでその際のメモ。

nconf自体はパーサーを外部に指定できる仕組みがあるので以下の様に組み合わせるとYAMLJSONを扱うのと同様に解釈できた。

YAMLのパーサーには以下を利用した。

YAMLファイルを適当に準備。

in:
staticWord:
text: "test word."
filter:
through:
out:
stdout:

これをnconfと組み合わせてYAMLを設定ファイルとして解釈させるには以下の様にすればよい。

var config = require('nconf');
var yaml = require('js-yaml');
config.use('file',{
file:'/home/hideack/foo.yaml',
format:{
parse: yaml.safeLoad,
stringify: yaml.safeDump
}
});
config.load(function (err, conf) {
console.log(conf);  //{ in: {staticWord: {text:'test word.'}},filter: {through: null},out: {stdout: null}}
});

JSONで設定ファイルだとちょっと...といったケースでYAMLを使いたいときに試してみると良さそう。

npmでnpm自体をアップデートする方法

素朴にどうやんだ?と思ってしまったのでメモ。気づけばnpmはnodebrewで入れたきりそのままだった...。

結論 "npm install -g npm" でnpm自体をアップデートすることができる。

$ npm install -g npm
/Users/hideack/.nodebrew/current/bin/npm -> /Users/hideack/.nodebrew/current/lib/node_modules/npm/bin/npm-cli.js
npm@2.5.0 /Users/hideack/.nodebrew/current/lib/node_modules/npm

$ npm -v
2.5.0

2015年1月に読んだ本

1月は雑誌含めて9冊。年初があった割にあまり読めなかった。余裕が無いのはいけないと思いつつ。


hideackの本棚 - 2015年01月 (9作品)
電車の顔
鈴木さちこ
読了日:01月31日


Serverspec
宮下剛輔
読了日:01月31日


WEB+DB PRESS Vol.84
藤吾郎
読了日:01月31日


powered by booklog