はちゅにっき

こっちのブログはまったり更新

自分用に Debian の Docker Image を構築する

Docker Hub に Debian のイメージがあるので、それを使えばいいんだけれど、タイムゾーンJST にしたかったり、やっぱりなんか自分で作ってみたかったので試してみることに。
あくまでもスタートとなる Base Image だけを作りたいので、Packer とか Ansible とかは使わないことに。
アプリケーションを構築するときには使おうかな。
内容としては以下の記事を大いに参考している。というか、写経みたいなものです。


dockerのカスタムベースイメージを作成する - @znz blog

続きを読む

AWS 上に Vagrant を使って CoreOS のマシンを起動する

今更な感じだし、ありきたりの話しですが、手順のメモメモ。

vagrant のインストール

普通にダウンロードしてインストールすれば OK。
rbenv を使っていますが、特にはまるポイントはありませんでした。

Vagrant
http://www.vagrantup.com/

vagrant-aws plugin

vagrant から EC2 インスタンスを操作するのに必要なプラグイン

vagrant plugin install vagrant-aws

vagrant-dotenv plugin

AccessKey などの情報を Vagrantfile に書きたくないので導入しておく

vagrant plugin install dotenv

.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 版を選択


vagrant up!

vagrant up --provider=aws

まとめ

vagrant ssh

で、すんなり AWS 上の CoreOS にログインできました。
あっさり簡単。

AngularJS で Semaphore したい

とある API を AngularJS から呼び出す時、1秒間にコールできる回数が制限されているため、同時に大量のリクエストが飛ばないよう制御したかったんだけど、AngularJS の $resource ではその辺がうまく制御できないような感じがするので*1、とりあえず Semaphore を実装してみて同時に飛ぶリクエスト数を制限してみることに。

とりあえず作ってみたら、ちょっと Semaphore とは違う気がするけれど、まぁうまく機能しているから、これでいいかなー。
あとは、$timeout を使ってリクエストがある程度分散するようにすればいいかな?

Promise API は覚えると便利だけど、なんでもやたらと Promise したくなる病気になりますね。

*1:もし制御する方法があったら教えてください

Lua を一般ユーザでソースコードからインストールする

ただし、readline も ncurses も一般ユーザでソースコードからインストールしている場合の方法。
そんな奇特な人はそんなにいないと思うけれど、自分のためにメモ。

各ソフトウェアのバージョン等は以下の通りです。

  • Lua (5.2.3)
    • ${HOME}/local/lua にインストールしたい
  • readline (6.3)
    • ${HOME}/local/readline にインストール済
  • ncurses (5.9)
    • ${HOME}/local/ncurses にインストール済
続きを読む

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 ということにしよう。

f:id:magicalhat:20140313151500p:plain

2段階認証を実装したい

ちょっとした理由から Google などで使われている 2段階認証を実装してみることに。
Google の 2段階認証の場合はワンタイムパスワードを生成に、以下のスマホアプリを利用することができますので、今回はこのアプリに相乗りする形での実装を目指しました。

Android

Google 認証システム - Google Play の Android アプリ

iPhone
Google Authenticator

Google Authenticator

  • Google, Inc.
  • ユーティリティ
  • 無料

相乗りとは言っても仕様は広く一般的に使われているため、同様のアルゴリズムで実装されたアプリであれば、他のアプリでもワンタイムパスワードを発行・認証することができます。

続きを読む

Perl の定数畳み込み

当然だけれど、定数の畳み込みが発生するのは constant モジュールを利用して宣言した場合のみですね。