はじめての Alembic

http://alembic.readthedocs.org/en/latest/

インストール

$ pip install alembic

大まかな流れは

  1. alembic init migration で Alembic 環境を migration ディレクトリに作成
  2. alembic revision -m 'Create users table で version ファイルを作成
  3. alembic upgrade head でマイグレーション

というかんじ。alembic コマンドでいろいろできる。

Alembic 環境の作成

$ alembic init migration

すると

myapp/
  migration/
    env.py
    README
    script.py.mako
  alembic.ini

のようにテンプレートが生成される。

alembic.inialembic コマンドのための設定ファイル。alemblic コマンドはデフォルトではコマンド実行時のカレントディレクトリにある alembic.ini を使う。--config コマンドラインオプションで指定することもできる。

alembic.inisqlalchemy.url でデータベースを指定する。とりあえず

sqlalchemy.url = sqlite:///%(here)s/development.db

としてみる。

Read More

『リーダブルコード』の retval について

2.2 tmp や retval などの汎用的な名前を避ける

var euclidean_norm = functiion (v) {
    var retval = 0.0;
    for (var i = 0; i < v.length; i += 1) {
        retval += v[i] * v[i];
    }
    return Math.sqrt(retval);
};

retval の代わりに sum_squares を使うようにとある。この改善自体には同意だけど、その理由が

retval という名前には情報がない。変数の値を表すような名前を使おう。

というもので retval の使用を否定しているのには反対。

この例の場合は、retvalが「戻り値」の意味なのに、代入されている値が戻り値でない(実際の戻り値はその平方根)から sum_squares にすべきなのであって、retval という名前がダメだからではない。

たとえば

var squared_euclidean_distance = functiion (v) {
    var retval = 0.0;
    for (var i = 0; i < v.length; i += 1) {
        retval += v[i] * v[i];
    }
    return retval;
};

だと retval を使っていい。retval には戻り値であるユークリッド平方距離が代入されるので問題ない。何より、コードを読むときに「最後に何が返されるか」その名前から分かるのは意味がある。

ただ retval より resultresults の方が変数名としては好きかな。

はじめての vagrant

インストール

VirtualBox をダウンロードしてインストールしておく。VirtualBox 4.2.12 for OS X hosts をインストールした。

Vagranthttp://downloads.vagrantup.com/ から Vagrant-1.2.1.dmg をダウンロードしてインストール。

基本的な使い方

Ubuntu 12.04 LTS 64 ビット版の仮想環境を作成する。

すると、precise64.box はダウンロード後 ~/.vagrant.d/boxesprecise64 ディレクトリで展開される。カレントディレクトリには Vagrantfile が作成される。

Vagrantfile には

Vagrant.configure("2") do |config|
  config.vm.box = "precise64"
  config.vm.box_url = "http://files.vagrantup.com/precise64.box"
  ...

のようなエントリが書かれている。Vagrantfile はバージョン管理されるべきファイルなので、誰でも同じ環境を生成できるように config.vm.box_url がある。

Vagrantfile のあるディレクトリは VirtualBox の Shared Folders によって共有されていて、仮想環境では /vagrant にマウントされている。

Read More

Haskell 環境

Haskell Platform に同梱されている GHC と cabal-install は古い。

Homebrew で Haskell Platform をインストールして、促されるままに cabal install cabal-install して cabal-install をアップデートすると、アップデートされた cabal-install は ~/.cabal/bin/cabal にインストールされた。

でも ~/.homebrew/bin/cabalHOMEBREW_PREFIX/Cellar/haskell-platform/2012.4.0.0/bin/cabal-install へのリンクになっているのが気持ち悪い。なので、Haskell Platform はインストールせずに GHC と cabal-install を別々にインストールすることにした。

でも Homebrew の GHC は古い。Pull Request があるけど不穏。なので、とりあえず Hombrew を使わずにインストールすることにする。

~/local/ghc-7.6.2 に GHC をインストール。

$ wget http://www.haskell.org/ghc/dist/7.6.2/ghc-7.6.2-x86_64-apple-darwin.tar.bz2
$ tar xf ghc-7.6.2-x86_64-apple-darwin.tar.bz2
$ cd ghc-7.6.2
$ ./configure --prefix=$HOME/local/ghc-7.6.2
$ make install

ln -s ~/local/ghc-7.6.2 ~/local/ghc してから ~/local/ghc/bin に PATH を通す。

インストールした GHC を使って cabal-install をインストール。

~/.cabal/bin に PATH を通す。おわり。