Railsのscaffoldを動作させる

前回まででRailsの環境が出来たので,簡単なアプリを動かしてみる.

環境は以下の通り.portsportsで入れたRubyGemsで環境を構築した.

Rails実行

% rails -d mysql hellorails

データベースファイル設定

hellorails/config/database.ymlを編集.ここではdatabaseとpasswordのみ修正

scaffold作成

ここでは,値段と名前を値として持つ,買い物リストを作る.

% ruby script/generate scaffold Purchase name:string price:integer
% rake db:migration

起動

% ruby script/server

これで,http://localhost:3000/purchases でアクセス可能.

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, RubyGemsRailsが入っている.
自分の環境では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上でのOpenCVOpenGLを組み合わせてみる。
OpenGLここなどを見ると、どうやらMacには最初っからOpenGLが開発環境中に入っている模様で、
コンパイル時のオプションに-frameworkと付けてGLUTOpenGLを追加すれば良いみたい。

というわけで、以下のMakefileを使えば、OpenCVOpenGLを同時に使えるようになる。

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>

GLUTOpenGLは、-frameworkでの指定のみでヘッダファイルを見つけてくれるみたいで、便利。

flvファイルからmp3作成

色々なサイトからダウンロードできるflvファイルの音声部分のみの抜き出し方法。

ffmpegのインストール

調べたところMacPortsで下記コマンドで良いとのこと。

sudo port install ffmpeg

しかし、自分の環境ではこれではエラーになってしまい上手くいかず。
色々調べた結果、以下のコマンドで成功。

sudo port install ffmpeg +lame +libogg +vorbis +faac +faad +xvid +x264 +a52

参考までに、MacPortsでアップデートと失敗した場合のコマンドは以下。

#最新版に
sudo port -v selfupdate 

#失敗した際のクリーン
sudo port clean ffmpeg

mp3の作成

このようにしてffmpegが入れば、後は以下のコマンドのみでmp3に変更可能。

ffmpeg -y -i foo.flv -acodec copy foo.mp3

ffmpegがあれば逆に音声と映像を合わせて動画作るのもできる、、はず…

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キーで終了。