メタプログラミング Ruby 2日目 間違い箇所?

久しぶりのエントリ.
最近はRubyの魔術書「メタプログラミングRuby」をじっくりと楽しんでます.
プログラミング言語の本にしては平易に書かれていてとても読みやすい文章ですよ!

メタプログラミングRuby

メタプログラミングRuby

一通りじっくり読み終わったので、
実際にコードを書いていたところ、2日目のブランクスレートのところでwarning発生.

バージョンは

ruby 1.9.2p0 (2010-08-18 revision 29036) [i386-darwin9.8.0]

で試しています.

methods/computer/blank.rb

class Computer
  instance_methods.each do |m|
    undef_method m unless m.to_s =~ /^__|method_missing|respond_to?/
  end
  ....
warning: undefining `object_id' may cause serious problems

http://markmail.org/message/ulp4xdsfgqledfj7#query:undefining%20%60object_id%27%20may%20cause%20serious%20problems+page:1+mid:zbpgv4wssbzd7aim+state:results


なんて記事*1があるので、
1.9.2では出てくるwarningなんでしょうね*2

とりあえず下のようにobject_idもundef_methodの対象外としてwarningを回避しておきました.
正規表現部分が長いのでmatcherを切り出した方が良さげ.

class Computer
  instance_methods.each do |m|
    undef_method m unless m.to_s =~ /^__|object_id|method_missing|respond_to?/
  end

*1:Mark Mailが個人的に見やすくて好き

*2:確かなソースが欲しいっ

Python2.5環境をLeopardに整える - 初めてのコンピュータサイエンス -

id:hyukix (@hyukix) のつぶやきが発端で、
定期的にアルゴリズムの復習をしておきたいなーという思いと
普段使ってない言語を書いてみたいなーと言う思いが勢いあまり、

「初めてのコンピュータサイエンス」

初めてのコンピュータサイエンス

初めてのコンピュータサイエンス


という本を買ってみました。
どうやら初学者向けの大学講義用のテキストのようで、
Pythonでアルゴリズムを勉強してみよー!という趣旨のようです。

で、ぱらぱらとめくってみると、
本で使うライブラリとコードはダウンロードしてきてね!
とあったので早速ダウンロード。

http://www.pragprog.com/titles/gwpy/practical-programing/

インストールを試みたところ、ライブラリ類のインストールで
Pythonのバージョンがあっていないと怒られてしまいました。
# Python2.5.1がデフォルトの環境なのにっ!


よくよくファイルを確認すると相当古いバージョンのライブラリ*1らしいので、
MacPortsで揃えることにしました。

readline

タイムリーなことに、id:plasticscafe (@plasticscafe ) が
Macのreadlineはクソ!とつぶやいていたので、環境を確認。
Rubyの環境を整える際にMacPortsで導入していました。>> 過去のエントリ

Python関係のインストール

Python2.5環境と、本で使う環境をMacportsで入れてしまいます*2

$ sudo port -d install python25
$ sudo port install python_select
$ sudo port -d install py25-pyobjc
$ sudo port -d install py25-numpy
$ sudo port -d install py25-nose
$ sudo port -d install py25-game
$ sudo port -d install py25-setuptools
$ sudo port install py25-pil
$ sudo -d port install py25-hashlib

*3

その後Python2.5の導入状況を確認、バージョンの切り替え。

$ python_select -l
$ sudo python_select python25

これで環境整った!と思いきや、pythonのパスがMacデフォルトの/usr/bin/pythonのまま。
2.5.1(デフォルト)と2.5.4(Macports)とでは、python_select で切り替えられないようですね。
この辺、使い慣れていない言語だと機微が分からず不便だなと思ってしまいます。

気を取り直して、/usr/bin/pythonのリンク元を切り替えることにしました。

$ sudo mv /usr/bin/python /usr/bin/python-leopard
$ sudo mv /usr/bin/python-config /usr/bin/python-config-leopard
$ sudo ln -s /opt/local/bin/python2.5 /usr/bin/python
$ sudo ln -s /opt/local/bin/python-config /usr/bin/python-config

対話モードで試してみると、無事Python2.5.4を確認できて、
導入したライブラリをimport出来たので良しとします!

*1:ファイル名にもmacosx10.4やら2007年なんて名称がついている

*2:easy_installでいいじゃん、というのは後で気づきました

*3:.shファイルにでもしておくと良いよっ!

redmineにプラグインを追加してみよう

redmineを使うようになって1年ほど経ち、
チケットを消化する小気味よさになれてきたなぁと思いつつも
工数管理の面で物足りなさを感じるようになってきたこの頃。

前回まででredmineのバージョンをあげたのを契機に、プラグインを追加してみることにしました。

追加してみたのは以下の二つ。

Kosu

Kosuは、1日ごとに各チケットにかけた時間を記録できるプラグインです。
これまではチケット一つ一つに概算時間を追加していましたが、
一日の作業を一画面で記録できるので便利。
特定の日を休日設定できるのも何気に便利ですよ!


インストールはいたって簡単。
ダウンロードしたファイルを解凍、migrateするだけです。

$ cd ~/redmine/vendor/plugins/ # ここは環境に合わせて
$ wget http://kusu.googlecode.com/files/redmine_work_time-0.0.60.tar.gz
$ tar xzvf redmine_work_time-0.0.60.tar.gz
$ cd ~/redmine
$ rake db:migrate_plugins RAILS_ENV=production

導入できたら、各プロジェクトの設定画面のモジュールタブにある「Work time」にチェックすれば使い始められます。
# これまでに記録していた作業時間も見ることができます。

PluginChart

バーンダウンチャートや記録時間、チケットを状態毎に集計した割合など
複数のグラフを表示してくれる優れものプラグインです。
先に導入したKosuで毎日の記録をとっておけば、
比較的楽に進捗管理が出きるようになりますね*1

このプラグインはOpenFlashChartに依存しているので、先にこのプラグインを取り込んでおきます*2

$ cd ~/redmine
$ ruby ./script/plugin install git://github.com/pullmonkey/open_flash_chart.git

続いてPluginChartをgit cloneで取得*3、migrateします。

$ git clone git://github.com/mszczytowski/redmine_charts.git vendor/plugins/redmine_charts
$ rake db:migrate_plugins RAILS_ENV=production

あとはredmine(webサーバ)を再起動して、
Kosuの時と同様にプロジェクトの設定でChartsモジュールにチェックを入れることで使えるようになります。

まとめ

この二つのプラグイン導入で、胡散臭い進捗や入力自体が怪しい時間経過ともおさらば!(できるといいな)

*1:EVMへの展開も楽にできるかも

*2:windows 環境ではgit:をhttp:と読み替えてください。また、環境によっては取得できない場合があります。

*3:アップグレード時に楽をするため

Ubuntu 10.4 でredmine その2 - git編 -

前回に続いてredmineとGitを連動させようと思った時に
気をつけておきたいことがあったのでメモを残しておきます*1

参照するリポジトリ

(追記)情報源があやふやなので未確定なお話です
Gitのリポジトリをredminで参照するには以下の条件があります。

  • ローカルのファイルパス上にある
  • bareであること(ワーキングコピーではないこと)*2

この条件をふまえて、
自分の場合はbareのリポジトリDropbox上において、
他のPCで作業した時にもpushできる中央リポジトリを用意しました。

$ cd ~/Dropbox
$ mkdir proj && cd proj
$ git init --bare
$ cd /path/to/working
$ git remote add dropbox ~/Dropbox/proj
$ git push dropbox master

あとはこのDropbox上のリポジトリredmineで設定すれば完了です。

 SCM: Git
 Path /home/hogehoge/Dropbox/proj

*1:Gitはaptでインストール済みを前提

*2:チケットと関連づいたコミットのみをredmineで閲覧できるようにする意図があるのでしょうか?

Ubuntu 10.4 でredmine その1 - rails導入編 -

ピッケル本1.9の読み進めは遅々としてなかなか進んでいないので
エントリはひとやすみ。下書き進行で書きたまった頃に公開するとします。


閑話休題


redmineが0.9.6にバージョンアップしていたので、
これを契機にお勉強用PCでの進捗記録をredmineで取ろう!
と、思い立ったので導入記録を残しておきます*1

環境

とりあえず webサーバはWebrick、DBはsqlite3としておきます。
また、一人で使うのでメール送信設定は省略します。

  • Ubuntu: Lucid Lynx (10.4) # お勉強用PC本体
  • Ruby: ree(-1.8.7) on rvm
  • DB: sqlite3
  • webサーバ: Webrick

環境整備

Ruby

redmineruby 1.8系を前提としているので、
rvm でree 1.8.7をインストール、デフォルトバージョンとしました。

$ rvm install ree -C --with-openssl-dir=$HOME/.rvm/usr
$ rvm ree-1.8.7 --default

なお、ruby enterprise edition を選択したのは

  • 興味本位(メイン)
  • passengerとの組合せで効率が良い(らしい)

といったところです。
強烈な理由は無いので、
redmineの推奨するrubyのバージョンを使っていれば問題ないと思います。

Sqlite3

apt経由でパッケージインストールしておきます。

$ sudo apt-get install libsqlite3-dev sqlite3 swig

rubygems

redmine稼働に必要なgemを追加しておきます。
バージョンの要件は下記URLを参考にしています。

http://www.redmine.org/wiki/redmine/RedmineInstall

$ gem install rack -v=1.0.1
$ gem install rails -v=2.3.5 --include-dependencies
$ gem install sqlite3-ruby
$ gem install rmagick # ImageMagickをインストール済みであれば任意で。

redmineの設定

ダウンロード

下記を参考にgithubから取得しました。
運用は$HOME 以下を想定しています。
http://www.redmine.org/wiki/redmine/Download

$ cd
$ git clone git://github.com/edavis10/redmine.git
データベース設定

sqlite3への接続のための設定ファイルを用意しておきます。
データベースのファイルは~/redmine/db/redmine.db としました*2

$ cd ~/redmine
$ cp config/database.yml.example config/database.yml
$ vi confing/database.yml

production:
  adapter: sqlite3
  dbfile: db/redmine.db
  timeout: 5000
データ用意

セッションキーやデータベーステーブルを用意しておきます。

$ rake generate_session_store
$ rake db:migrate RAILS_ENV=production
$ rake redmine:load_default_data RAILS_ENV=production

エラーログ設定

設定説明に「強くお勧め」とあったので、ログ用にディレクトリのパーミッションを変更しておきます。

$ chmod -R 755 files log tmp public/plugin_assets

redmine 起動

ここまでエラーが無ければ、webrickredmineを稼働できる状態です。

$ ruby script/server -e production

http://localhost:3000/

にアクセスして ユーザ/パスワードがadmin/admin でログインチェックして終了です。

*1:ひいてはチケット発行して自分の尻を叩こう!という手段と目的がごっちゃになった企画

*2:テスト稼働などは考えていないのでproductionのみ書いています

Ubuntu 10.4 でredmine その3 - nginx編 -

Ubunturedmineを導入した最終回の内容はウェブサーバ nginxです。

これまでの関連エントリ

Apache + passengerでredmineを動かしても良かったのですが、
これまたもののついででnginx + passengerを試してみようと思って設定してみました。

前提

  • rvm で導入したree-1.8.7 (ユーザローカルで稼働中)
  • sslは特に気にしない(ローカルに限られるので)

passenger インストール

必要なパッケージをaptで追加しておき、
rubygemsを使ってpassengerをインストールします。

$ sudo apt-get install libpcre3 libpcre3-dev libpcrecpp0
$ gem install passenger

nginxインストール

aptで取得できるnginxはpassengerをモジュールで動かせないようなので、
ソースからコンパイルするためにpassenger-install-nginx-moduleを使います。

$ passenger-install-nginx-module

幾つか選択肢を選んだ後、FTPでnginxを取得、コンパイルが自動で行われます。

注意

インストール先は

Please specify a prefix directory [/opt/nginx]:

と聞かれるので、
/opt のパーミッションを事前に緩めておきます。

設定ファイル

設定ファイルは必要最小限の追記でおさえています。
最低限rootと、passenger_enabledを追記すればOKのようです。

sudo vi /opt/nginx/conf/nginx.conf
...
pid /var/run/nginx.pid; #=> コメントアウト外す
...
server {
    # 他のウェブサーバを用意しないのでlocalhost:80で運用
    listen 80;
    server_name: localhost
    ....
    location / {
        index  index.html index.htm;
        # redmine のインストール先を指定
        # railsアプリは "public" までをパス設定する
        root: /home/hogehoge/redmine/public/
        # passengerを使う場合に必ず指定する
        passenger_enabled on;
    }

    ...
}
....
起動スクリプトの作成

/etc/init.d/nginx として起動用スクリプトを用意します。
内容は下記参照からコピー&ペーストします。

http://programmingzen.com/2009/11/20/setup-ruby-enterprise-edition-nginx-and-passenger-aka-mod_rails-on-ubuntu/

$ sudo vi /etc/init.d/nginx
$ sudo chmod a+x /etc/init.d/nginx


このスクリプトに問題が無ければ、nginx起動後に
http://localhost/redmine を利用することができます。

起動状況を確認後、

$ sudo /usr/sbin/update-rc.d -f nginx defaults

とすると、OS起動時にnginxも起動することができます。