setup rbenv

(1)install rbenv from git
cd /usr/local
git clone git://github.com/sstephenson/rbenv.git rbenv

(2)set enviroment in /etc/profile or ~/.bashrc
export RBENV_ROOT=/usr/local/rbenv
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"

(3)install ruby-bundler

mkdir /usr/local/rbenv/plugins
cd /usr/local/rbenv/plugins
git clone git://github.com/sstephenson/ruby-build.git
cd /usr/local/rbenv/plugins/ruby-build
./install.sh

(4)check installable versions
rbenv install --list

(5)install ruby
rbenv install 1.9.3-p392
rbenv rehash

(6)list installed versions
rbenv versions

(7)set it usable
rbenv global 1.9.3-p392

インストール済パッケージの一覧

Ubuntuにて、インストール済のパッケージ(dpkg)の一覧を確認したいときは、

$ dpkg -l

表示される結果について、最初(最左)の2文字は、次のような意味らしい。

First column: Desired

u for Unknown
i for Install
r for Remove
p for Purge
h for Hold

Second column: Status
n for Not Installed
i for Installed
c for Config-files
u for Unpacked
f for Failed-config
h for Half-installed

尚、特定のパッケージのみを確認したい場合は、もちろん結果をgrepすればよい。

$ dpkg -l | grep redmine

RVM on gnupack(Cygwin)

Window上でのcygwin環境構築にgnupackを使わせてもらっています。
このgnupack環境上にrvmを使ったruby環境を構築する手順について備忘録を残します。

1. gnupackのインストール
gnupackのbasicエディションのダウンロードとインストール。インストールといっても解凍展開するだけ。
※develエディションでは、Mingwの環境とgccの環境がごちゃまぜになって、rvmを使ってのrubyのコンパイルが簡単には、できないので、basicエディションを選択。

2. rvmのインストールに必要なパッケージのインストール


3. /gnupackディレクトリの作成

後々、gemがcompileされる際に、errorになるので、/gnupackディレクトリを作成しておく。

$ mkdir /gnupack


4. rvmのインストール

$ curl -L get.rvm.io | bash -s stable


5. .bashrcの編集(以下の2行目を追加)

PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting <-- これは自動的に追加されている
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*

※編集した後は、シェル(ターミナル)を再起動。

6. rubyのインストール(ここでは、1.9.2)

$ rvm install 1.9.2

7. とりあえず、1.9.2を使う(デフォルトの設定は後で行う)

$ rvm use 1.9.2


8. gemsetの作成

gemは、ぐちゃぐちゃになると後でわけがわからなくなるので、分別できるようにしておく。

$ rvm gemset create hoge


9. デフォルトのrubyとgemsetの設定

$ rvm use 1.9.2@hoge --default

すんなりうまく行けば、以上でOK!

Rubyで日付・時刻を扱うとき、どのクラスを使う?

Rubyで日付・時刻を扱う際には、(1)Timeクラス, (2)Dateクラス, (3)DateTimeクラスと、いったいどれを使うべきなのか迷う。


(1)Timeは、組込クラスでC実装。
(2)Dateと(3)DateTimeは、標準ライブラリ'date'に含まれるクラスでRuby実装。


(1)Timeクラスは、実装環境依存により、2038年問題(1970年1月1日〜2038年1月19日までしか扱えない)が発生し得る。
(2)Dateクラスは、2038年問題の心配はないが、扱えるのは日付のみで、時刻は扱えない。
(3)DateTimeクラスは、Dateクラスのサブクラスで、Dateクラスと同様に、'date'ライブラリをrequireする必要はあるが、2038年問題の心配もないし、日付も時刻も扱える。


表面的な仕様としては、(3)DateTimeクラスが最強だが、実装がRubyであるため、2038年問題の可能性よりも、性能を重要視する場合には、(1)Timeの方が有利とも言えるようである。


結局、何を使うべきかのモヤモヤは、スッキリとは解消されたわけではないが、自分としては、これらの違いを十分に認識した上で、通常は論理的な仕様を重視して、DateTimeを使うようにしようと思う。

[Emacs]長いリストが正しく表示されない場合

'*scratch*'バッファでリストを表示させた際に、「...」と途中の要素以降が
表示されないことがある。これは、Emacsが表示する結果の長さや深さに制限
を設けているためだが、それは、以下の変数によって制御されている。

評価結果の出力の深さ/長さを制御する変数

eval-expression-print-length
評価した結果を表示する際、省略せずに表示するリストのネストの深さ。デフォルトは4

eval-expression-print-level
評価した結果を表示する際、省略せずに表示するリストの要素数。デフォルトは12

どちらも値として「nil」を設定することによって、表示を無制限にすることができる。

elispのデバッギング

1. デバッガの起動方法

A. 特定の関数が呼び出されたときにデバッガが起動されるようにする

M-x debug-on-entry デバッグ対象関数名

B. エラーが発生したときにデバッガが起動されるようにする

M-x set-variable debug-on-error t

C. 関数の定義の中でブレーク・ポイントを設定しておき、関数を評価したときこのブレーク・ポイントに到達したところでデバッガが起動されるようにする
D. edebug-defunを使って、関数が呼び出されたときに、ソース・レベル・デバッガを介してこの関数の評価がステップごとに行われるようなコードになるように関数の定義を評価しておく

2. デバッガの使用方法

  • d : 実行を1ステップ進める
  • q : デバッグを終了する
  • e 変数名 : 変数の値を表示する