平衡点
2008/08/30
_ extreme "Saudades de Rock", "waiting for the punchline"
ジワジワ効いてきている. やっぱ良いわー. Extreme. おもわず waiting for the punchline もひっぱり出してきましたが.
_ 天文台ミーティングにて
ログは <URL:http://www.gfd-dennou.org/library/dcmodel/workshop/2008-08-18/memo/dcmodel_2008-08-18.htm:title> ということで. 以下は不真面目な話.
計算機見学
NEC SX-9 と CRAY XT-4 を見学.
NEC SX-9
X の怪しい輝きが, なんか, いやらしい. X が点滅している動画は以下. X だけが目立つと OSX みたいな... <URL:http://video.google.com/videoplay?docid=-6541241200825960536:movie>
CRAY XT-4
壮観. 前面は CfCA のロゴ入り 前面のフロントパネルを開けたトコロ. ブレード一つに QuadOpteron が 4 つ. ピカピカ光ってます. 計算中です. 背面. 通信ケーブルが凄いことになってます.
多聞で深大寺蕎麦
毎度恒例. 前回は2008/01/01 の日記を参照. ここは盛りが豪勢な事で有名.
N 多さん注文のざる大盛り.
私が注文したつけとろ大盛り. 器がなにか間違っている気がしないでもない.
N 多さんはここでギブアップでした:
私が注文したつけとろはあっさり完食してしまった. I 藤さん曰く「今日は盛りが少ない」らしい. たしかにそんな気はした.
_ Rails で文献管理システムを作ってみるよ(1/n)
この手の話はドコにでもありそうですが(笑) 近場で Rails 弄り始めた人々がいるので, 以前から作っていたコードとかを晒し始めてみます.
やりたい事はそんなに大変な事ではなくて.
- 論文(電子ジャーナル)を管理したい.
- 取得した PDF を適切なディレクトリに保管したい.
- 著者名, ジャーナル名, タイトル名で検索したい.
- 某所で仕様している文献カード形式(テキスト)で情報を出力したい.
- 選択したファイルの文献情報を tex の bib 形式で出力したい.
- 簡単なコメント, レビュー文書を元の論文に関連づけて保存した.
かな. 見栄えもまあそれなりに弄りたいですけどね.
環境構築
OS は Debian GNU Linux(testing) です. 以前 <URL:http://www.gfd-dennou.org/arch/davis/gfdnavi/:title> で, Debian で Rails 動かすために書いたドキュメントがありますので, それを参考に -> <URL:http://www.gfd-dennou.org/arch/davis/gfdnavi/doc/install/gfdnavi-on-debian-etch.htm:title>
基本的には, rubygems のみ Debian パッケージを使用して, それ以外は gem 経由で install します.
$ ruby -v ruby 1.8.7 (2008-06-20 patchlevel 22) [i486-linux] $ gem list *** LOCAL GEMS *** actionmailer (2.1.0) actionpack (2.1.0) activerecord (2.1.0) activeresource (2.1.0) activesupport (2.1.0) cgi_multipart_eof_fix (2.5.0) daemons (1.0.10) fastthread (1.0.1) gcalapi (0.1.1) gem_plugin (0.2.3) hpricot (0.6.161) icalendar (1.0.2) mongrel (1.1.5) mongrel_cluster (1.0.5) rack (0.4.0) rails (2.1.0) rake (0.8.1) refe (0.8.0.3) sqlite3-ruby (1.2.4) tmail (1.2.3.1)
関係無いものもまざってますが, 気にせずに.
プロジェクトの開始, リポジトリの作成
作るプログラムの名前は bookshelf にします. 今の所論文だけですけれど, 蔵書の管理もしたいので.
$ rails bookshelf create create app/controllers create app/helpers create app/models create app/views/layouts ... create log/server.log create log/production.log create log/development.log create log/test.log
git リポジトリの作成
$ cd bookshelf $ git init
gitignore の作成
$ cat .gitignore #*# *.*~ *~ *.#* *.bk *.bak tags log/*.log tmp/**/* .DS_Store doc/api doc/app $ touch tmp/.gitignore $ touch log/.gitignore
リポジトリにファイルの追加とコミット
$ git add . $ git commit -m "initial import"
サーバへ転送するための裸(bare)リポジトリの作成, 転送
$ git clone --bare . ~/tmp/bookshelf.git $ scp -r ~/tmp/bookshelf.git server@git_repos/
ちなみに, リポジトリの取得, マスターへの反映は
- 取得 - $ git clone ssh://[アカウント]@server/[git リポジトリの場所] - 更新の反映 - $ git push ssh://[アカウント]@server/[git リポジトリの場所]
git のコミットはローカルにしか反映されないので, マスターへの反映を適宜行なう必要あり.
Article テーブルの作成
bibtex の形式に変換するための情報として, Article には最低限
- 論文タイトル
- 著者(複数)
- 雑誌名
- 発行年
- ボリューム
- ページ(開始と終了)
が必要. 著者名はそのうち別のデータベースにするけど. とりあえず.
$ ./script/generate scaffold Article \ title:string \ authors:string \ journal:string \ year:datetime \ volume:integer \ start_page:integer \ end_page:integer ...
これで, 一通り足場(scaffold)ができる. db/migrate/XXXXXXXX_create_articles.rb[XXXXX は日付による timestamp] によれば
class CreateArticles < ActiveRecord::Migration def self.up create_table :articles do |t| t.string :title t.string :authors t.string :journal t.datetime :year t.integer :volume t.integer :start_page t.integer :end_page t.timestamps end end def self.down drop_table :articles end
end
となっている. データベースの作成は
$ rake db:migrate
これで
$ ./script/server
として, ブラウザで http://localhost:3000/articles にアクセスしてみると一応それっぽい画面ができている. で, この状態では [New Article] で情報が全く無い論文データが作成できてしまう. なので, model の方に最低限の validation をかけておく. 少なくとも title, author(s), year は必須項目にしたい. app/models/articles.rb を弄る. 結果は以下.
class Article < ActiveRecord::Base validates_presence_of(:title, :authors, :year) end
()をつけるのは, コーディングスタイルとしてはどうなんだろう. 個人的にはつけた方が好みなんだけど, ものの本ではつけてないなぁ... これで, 空の文献データを作成しようとすると, ちゃんと怒られる.
次回
まだまだ始めたばっかなのでやることイッパイあるよー
- test の修正, 追加
- 作成時
- year, (start|end)_page を integer で入力, チェック
- year は Date オブジェクトを渡すようにする. 選択できるように.
- 見栄えの修正その (1/n)
- PDF のアップロードを可能にする.
- 置き場のディレクトリは文献データから適宜決定する.
- 文献データを更新した際は, PDF 置き場も変更する?
- 存在しない文献データのディレクトリを適宜フラッシュする?
の予定.