Railsのscaffoldを動作させる
前回まででRailsの環境が出来たので,簡単なアプリを動かしてみる.
環境は以下の通り.portsとportsで入れたRubyGemsで環境を構築した.
- Mac OS X 10.5.5
- Ruby 1.8.7
- RubyGems 1.3.3
- Rails 2.2.2
- MySQL 5.0.51
Rails実行
% rails -d mysql hellorails
データベースファイル設定
hellorails/config/database.ymlを編集.ここではdatabaseとpasswordのみ修正
scaffold作成
ここでは,値段と名前を値として持つ,買い物リストを作る.
% ruby script/generate scaffold Purchase name:string price:integer % rake db:migration
Rails動作確認
前回のとおりRubyをバージョンアップしてRailsを使おうとしたが,下記のようなエラーで動かず.
!!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql. MissingSourceFile (no such file to load -- mysql): /Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `gem_original_require' /Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `require' /Library/Ruby/Gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:153:in `require' ...(略)
gemでRuby用のmysqlを入れなければならないみたい.
まずは,portで入れたRubyと,デフォルトで入っているRubyGemsが混在しているのがイヤなので修正.
Railsも入れなおす.
% sudo port install rb-rubygems % sudo gem install rails --include-dependencies % which gem /opt/local/bin/gem % which rails /opt/local/bin/rails
修正してから同じようにアクセスすると,エラーメッセージが短かくなった.
!!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql. 127.0.0.1 - - [31/Dec/2008:12:33:22 JST] "GET /contact/hello/ HTTP/1.1" 500 14203 - -> /contact/hello/
下記のように入れなおすも上手くいかず.
% sudo gem install mysql --include-dependencies ERROR: Error installing mysql: ERROR: Failed to build gem native extension. /opt/local/bin/ruby extconf.rb install mysql --include-dependencies checking for mysql_query() in -lmysqlclient... no checking for main() in -lm... yes ...(略)
色々調べた結果,ここの通りやるとうまくいった.
% sudo gem install mysql -- --with-mysql-config=/opt/local/lib/mysql5/bin/mysql_config % gem list .. mysql (2.7) ..
Railsバージョンアップ
ふとRuby on Railsのプログラムがしたくなり,調べてみた.
LeopardではデフォルトでRuby, RubyGems,Railsが入っている.
自分の環境ではRuby1.8.6と,RubyGems1.0.1,Rails1.2.6.
特に何もしなくとも利用可能なようだが,どうせなら最新版を,ということで以下.
% sudo port -d selfupdate % sudo gem update --system % sudo gem update
これで,RubyGems1.3.1,Rails2.2.2に更新された.
% sudo gem list
でRubyGemsで入れたものが全部見えるけど,最初から色々入っている模様.
ついでに,
% sudo port installed
でportでインストールした一覧が見えて,
% sudo port outdated
で既に更新済のパッケージがわかる.
% sudo port upgrade installed
とすることで更新可能..だけど時間がかかりそうなので,
% sudo port upgrade ruby
とすると,rubyだけの更新ができる.
AquaSKKでの句読点変更
まず以下のようにファイルをコピー。
$ cp /Library/Components/AquaSKKInputMethod.component/Contents/Resources/kana-rule-list ~/Library/AquaSKK/
このkana-rule-listの中は、
タイプするキー,全角モード時の変換,カタカナモード時の変換,半角カナモード時の変換
とならんでいる。
通常「。」「、」部分は以下のようになっている。
.,。,。,。 ,,、,、,、
全角モードのみで「.」「,」に変更したければ以下のようにする。
.,.,。,。 ,,,,、,、
変更後再起動で反映される.
MacでOpenCV + OpenGL(準備編)
Mac上でのOpenCVにOpenGLを組み合わせてみる。
OpenGLはここなどを見ると、どうやらMacには最初っからOpenGLが開発環境中に入っている模様で、
コンパイル時のオプションに-frameworkと付けてGLUTとOpenGLを追加すれば良いみたい。
というわけで、以下のMakefileを使えば、OpenCVとOpenGLを同時に使えるようになる。
SRC = hello.c DST = hello prefix=/opt/local INCPATH=$(prefix)/include LIBPATH=$(prefix)/lib FRAMEWORK= -framework OpenGL -framework GLUT OPT= -lcv -lcvaux -lcxcore -lhighgui CC=g++ -O CFLAGS= -I. -I$(INCPATH)/opencv LDFLAGS=-L. -L$(LIBPATH) all: $(CC) $(FRAMEWORK) $(SRC) -o $(DST) $(CFLAGS) $(LDFLAGS) $(OPT)
上記に加えて、Mac上のフレームワークを使う場合(?)は、ヘッダのインクルードは下記のようにすればOKだった。
#include <GLUT/glut.h> #include <OpenGL/gl.h>
flvファイルからmp3作成
色々なサイトからダウンロードできるflvファイルの音声部分のみの抜き出し方法。
MacでOpenCV(iSightキャプチャ)
まずは単純に画面キャプチャして表示する機能。
iSightでも何なく取り込めた。が、サイズ変更がOpenCVのホームページのサンプル通りに書いても有効では無い模様。
何も設定しないと640x480になる。
cvWaitKey関数で取得できるキーコード一覧は→http://homepage1.nifty.com/kodayan/java2/data01/apt053.html
#include <cv.h> #include <highgui.h> #include <ctype.h> #include <stdio.h> int main(int argc, char ** argv) { CvCapture *capture = 0; IplImage *src_img = 0; IplImage *dst_img; // double w = 320, h = 240; int c; capture = cvCreateCameraCapture(0); // キャプチャサイズ設定 // この設定は利用するカメラに依存する ->isightではサイズが変わらないのでひとまずコメントアウト // cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, w); // cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, h); cvNamedWindow("Capture", CV_WINDOW_AUTOSIZE); // カメラから画像をキャプチャする while (1) { src_img = cvQueryFrame(capture); // src_img と dst_imgの間で行いたい画像処理を実施する // まずは何もせず画面に表示 dst_img = src_img; cvShowImage("Capture", dst_img); c = cvWaitKey(33); if (c == 0x1b) { // Esc入力で終了 break; } else if (c == 0x73) { // 's'キー入力 } } cvReleaseCapture(&capture); cvDestroyWindow("Capture"); return 0; }
以上のファイルをhello.cとして保存して、下記Makefileでmakeする。
SRC = hello.c DST = hello prefix=/opt/local INCPATH=$(prefix)/include LIBPATH=$(prefix)/lib OPT= -lcv -lcvaux -lcxcore -lhighgui CC=g++ -O CFLAGS= -I$(INCPATH)/opencv LDFLAGS=-L. -L$(LIBPATH) all: $(CC) $(SRC) -o $(DST) $(CFLAGS) $(LDFLAGS) $(OPT)
実行した後はEscキーで終了。