自分用に Debian の Docker Image を構築する
Docker Hub に Debian のイメージがあるので、それを使えばいいんだけれど、タイムゾーンを JST にしたかったり、やっぱりなんか自分で作ってみたかったので試してみることに。
あくまでもスタートとなる Base Image だけを作りたいので、Packer とか Ansible とかは使わないことに。
アプリケーションを構築するときには使おうかな。
内容としては以下の記事を大いに参考している。というか、写経みたいなものです。
dockerのカスタムベースイメージを作成する - @znz blog
AWS 上に Vagrant を使って CoreOS のマシンを起動する
今更な感じだし、ありきたりの話しですが、手順のメモメモ。
vagrant のインストール
普通にダウンロードしてインストールすれば OK。
rbenv を使っていますが、特にはまるポイントはありませんでした。
.env ファイルに秘密の設定を書く
ACCESS_KEY_ID = "<AWS_ACCESS_KEY_ID>" SECRET_ACCESS_KEY = "<AWS_SECRET_ACCESS_KEY>" KEY_PAIR_NAME = "<AWS_KEY_PAIR_NAME>" SECURITY_GROUPS = "<AWS_SECURITY_GROUPS>" # カンマ区切りで複数指定可
EC2 のセキュリティグループ作成
まずは SSH のみ許可するセキュリティグループを作成
EC2 の鍵ペア作成
普通に作成
Vagrantfile の作成
CoreOS PV 版を選択
- https://coreos.com/docs/running-coreos/cloud-providers/ec2/
- t2micro に
したいした- 次回作にご期待ください
- t2micro に
vagrant up!
vagrant up --provider=aws
AngularJS で Semaphore したい
とある API を AngularJS から呼び出す時、1秒間にコールできる回数が制限されているため、同時に大量のリクエストが飛ばないよう制御したかったんだけど、AngularJS の $resource ではその辺がうまく制御できないような感じがするので*1、とりあえず Semaphore を実装してみて同時に飛ぶリクエスト数を制限してみることに。
とりあえず作ってみたら、ちょっと Semaphore とは違う気がするけれど、まぁうまく機能しているから、これでいいかなー。
あとは、$timeout を使ってリクエストがある程度分散するようにすればいいかな?
Promise API は覚えると便利だけど、なんでもやたらと Promise したくなる病気になりますね。
*1:もし制御する方法があったら教えてください
GrowthForecast のバックエンドに PostgreSQL を使う
デフォルトで SQLite が利用できるし、たぶん得する人はいないと思うけれど、いろいろな理由で PostgreSQL しか選択肢がなかったので、PostgreSQL でも動くようにちょっと手を加えてみました。
といっても、CREATE TABLE しているところを PostgreSQL に対応するよう、適当に書き換えただけだけど。
差分は、こんな感じ。
https://github.com/hatyuki/GrowthForecast/compare/kazeburo:master...master
とりあえずこれで、以下のように起動すれば
$ carton exec -- perl ./growthforecast --with-pgsql='dbi:Pg:database=gf'
こんな (↓) 感じでグラフが取れているので OK ということにしよう。
2段階認証を実装したい
ちょっとした理由から Google などで使われている 2段階認証を実装してみることに。
Google の 2段階認証の場合はワンタイムパスワードを生成に、以下のスマホアプリを利用することができますので、今回はこのアプリに相乗りする形での実装を目指しました。
Google 認証システム - Google Play の Android アプリ
相乗りとは言っても仕様は広く一般的に使われているため、同様のアルゴリズムで実装されたアプリであれば、他のアプリでもワンタイムパスワードを発行・認証することができます。
続きを読むPerl の定数畳み込み
当然だけれど、定数の畳み込みが発生するのは constant モジュールを利用して宣言した場合のみですね。