RMagick과 Gruff로 그래프를 그려보자

Gruff는 이쁜(루비스런?) 그래프를 그려주는 라이브러리이다. 광우병에 대해 썼던 글의 그래프가 바로 Gruff로 그린 것이다.  Gnuplot처럼 다재다능하지는 않지만, 한글로 라벨을 넣기도 쉽고 코드 몇 줄로 꽤 보기좋은 그래프를 얻을 수 있다.

RMagick 설치

RMagick은 다른 gem들에 비해 설치가 좀 까다롭다(고 한다.) Installation FAQ을 먼저 훑어보고, 권장하는 FreeType, libjpeg, libpng, libwmf, ghostscript등의 패키지를 먼저 설치한다.

데비안의 경우 RMagick이 패키징 되어 있어서 apt(dselect)를 이용하여 RMagick을 쉽게 설치할 수 있다.

  1. apt-get install librmagick-ruby


Gruff 설치

  1. gem install gruff

여기 있는 예제를 실행했을 때 png파일이 잘 생기는 지 확인해본다. 소스를 보면 사용법이 정말 쉬움을 알 수 있다. 객체를 만들고 타이틀과 레이블 지정하고, 데이터를 넣어주면 끝이다.


테마

Gruff는 미리 만들어놓은 몇 가지 테마를 메쏘드로 제공한다. 데이터를 넣기전에 이들 메쏘드를 호출하면 색들을 조정해준다. 'keynote', '37signals', 'rails_keynote', 'odeo'등의 테마를 제공한다. 'keynote' 테마를 선택하면 사람들이 키노트로 그렸다고 생각한다. ㅎㅎ

물론 직접 설정하는 것도 가능하다. 테마는 'colors', 'marker_color', 'background-color'들로 구성된다. 'colors'는 데이터를 그리는 색상들이고, 'marker_color'는 보조선의 색상, 'background-color'는 그라데이션으로 그려주는 배경 색상이고, 이런 색상들을 정해서 Array로 넣어주면 된다.

근데 데이터 색상의 경우, 'data'함수를 이용하여 데이터를 넣을 때 색상이 지정되므로, 이후에 테마 메쏘드를 실행하더라도 데이터 색상은 바뀌지 않는다. 그러므로 데이터를 넣기 전에 색상 설정을 끝내놓는게 좋다.

레일즈에서 쓰기

그림만 보여주는 메쏘드를 쓰려면 이 튜토리얼을 참고하면 된다. 그림을 웹사이트 안에 삽입하려면 컨트롤러에서 파일을 저장하고 뷰에서는 그 파일을 읽어서 보여주도록 하면 될 것이다. (캐싱을 적절히...)

한글

한글을 쓰려면 한글 ttf 폰트의 경로를 'font' 메쏘드로 지정해야 된다.

이 글은 스프링노트에서 작성되었습니다.

2007/10/15 19:30 2007/10/15 19:30

루비 온 레일즈에서 OpenID 로그인

해봤더니 기본적인 기능은 무척 쉽게 작동시킬 수 있었다.

설치

먼저 openid_login_generator를 설치한다. 이건 login_generator의 openid버전이고 login_generator와 거의 똑같은 방법으로 쓸 수 있다고 한다.

  1. gem install openid_login_generator

생성기를 실행한다.

  1. ./script/generate openid_login auth

다음과 같은 파일들이 생성된다.

  1.      create  lib/openid_login_system.rb
         create  app/controllers/auth_controller.rb
         create  test/functional/auth_controller_test.rb
         create  app/helpers/auth_helper.rb
         create  app/models/user.rb
         create  test/unit/user_test.rb
         create  test/fixtures/users.yml
         create  app/views/layouts/scaffold.rhtml
         create  public/stylesheets/scaffold.css
         create  app/views/auth
         create  app/views/auth/welcome.rhtml
         create  app/views/auth/login.rhtml
         create  app/views/auth/logout.rhtml
         create  README_LOGIN

'README_LOGIN' 파일에 필요한 것들은 거의 기록되어 있다. 열어서 따라한다. 애플리케이션 콘트롤러 ('app/controllers/application.rb')를 열어서 다음과 같이 보이도록 바꾼다.

  1. require_dependency "openid_login_system"

    class ApplicationController < ActionController::Base
      include OpenidLoginSystem
      model :user

테이블 만들기

'app/models/user.rb'파일은 만들어져 있지만, db에는 아무것도 없기 때문에 users 테이블을 추가해야 한다. user.rb를 열어보면 이런 메쏘드 딱 하나가 있다.

  1. def self.get(openid_url)
      find_first(["openid_url = ?", openid_url])
    end

users 테이블에 'openid_url'라는 컬럼만 만들어주면 openid login이 작동한다. migration을 하나 만들어서 테이블을 만들어 준다.

  1. class InitialSchema < ActiveRecord::Migration
      def self.up
         create_table "users" do |t|
          t.column "openid_url", :string
          t.column "name", :string
          t.column "email", :string
  2.      end
  3.   end
  4.   def self.down
  5.     drop_table "users"
  6.   end

이제 마이그레이션을 실행하고

  1. rake db:migrate

편한 툴로 테이블이 잘 만들어졌는지 본다.

뷰 손보기

이제 http://localhost:3000/auth/login 으로 접근하면 로그인폼이 나올 것이다. 근데 오픈아이디 로고도 없고 영 멋이 없다. 먼저 뷰를 모범답안으로 수정한다. app/views/login.rhtml의 input 태그를 다음처럼 바꾼다.

  1. <input type="text" name="openid_identifier" class="openid_login" size="30" value=""/><br/>

name 속성을 바꾸었으니 컨트롤러('auth_controller.rb')를 열어서

  1. @params[:openid_url]

  1. @params[:openid_identifier]

로 고쳐준다.

그 다음에 'public/stylesheets/scaffold.css'나 아니면 자신의 레이아웃에서 사용하는 css파일에 다음을 추가한다.

  1. input.openid_login {
       background: url(http://openid.net/login-bg.gif) no-repeat;
       background-color: #fff;
       background-position: 0 50%;
       color:#000;
       padding-left: 18px;
    }

이제 다시 페이지를 열어보면 폼이 이뻐졌을 것이다. ㅎㅎ

사용하기

사용은 간단하다. 접근을 제한하고 싶은 컨트롤러에다가

  1. class SomeController < ApplicationController
      before_filter :login_required

라고 써 주면 된다. 메쏘드별로 접근을 제한하고 싶으면 :only, :except를 쓸 수 있다.

  1. before_filter :login_required, :only => [:myaccount, :changepassword]
    before_filter :login_required, :except => [:index]

현재 사용자의 아이디는

  1. @session[:user_id]

에 저장되어 있다. 예를 들어

  1. user = User.find(@session[:user_id])

이런 식으로 사용하면 된다.


이 글은 스프링노트에서 작성되었습니다.

2007/10/04 21:38 2007/10/04 21:38

Search Results for '루비'

2 POSTS

  1. 2007/10/15 RMagick과 Gruff로 그래프를 그려보자 (5)
  2. 2007/10/04 루비 온 레일즈에서 OpenID 로그인