レースジェネレーター

こんなものつくりました。
レースジェネレーター


アイデアもと:レースの描き方メモ(SAI) on Twitpic

参考URL:ASCII.jp:HTML5のCanvasで作る、Flash不要のお絵かきツール|古籏一浩のJavaScriptラボ


基本的なお絵描きコードは参考URLを少しいじっただけ。
あとは複数のCanvasを用意して左右反転したり上下反転したり、回転させたりして出力。
回転部分はsetImageDataとputImageDataを使ってやろうとしたものの回転せずに断念。
putImageDataのときはTransformMatrixって無視されるのね。


マウスをすこし動かすごとに55回描画してるけどしかたないよね。

formtasticを使ってみた。

ruby-toolboxの"Rails FormBuilders"部門の一番人気formtasticを使ってみた。

step1 インストール

formtasticのインストール方法は簡単

gem install justinfrench-formtastic

とgemをインストールしたあと、

config.gem "justinfrench-formtastic", 
  :lib     => 'formtastic', 
  :source  => 'http://gems.github.com'

config/enviroment.rbに追加すればOK。


このformtasticは"semantic_form_for"というメソッドを追加してくれる。
これは手でformを作っていくときに非常に頼りになるメソッドだ。


準備としてモデルを作り

ruby script/generate  model test string:string date:date datetime:datetime integer:integer boolean:boolean

そしてroutes.rbに

  map.resources :tests

を追加する。

コントローラーを作り

ruby script/generate controller test test1 

書き換える。

class TestController < ApplicationController
  def test1
    @test = Test.new
  end
end

view

semantic_form_for
<% semantic_form_for @test do  | f |%>
  <%= f.inputs %>
<% end -%>

このコードだけで以下のようなviewが生成される。
f:id:yuuki-n:20090901081717p:image

formtasticはl18nにも対応しているから日本語化をしてみよう。
local fileの生成は
i18n_generatorsを使って生成してみるよ。

 sudo gem install amatsuda-i18n_generators

でインストール後 RailsRootで

ruby script/generate i18n ja 

とやろう。
いろいろなファイルを自動で生成してくれる。

translation_ja.yml

ja: 
  activerecord: 
    models: 
      test: "試験"  #g
    attributes: 
      test: 
        string: "文字列"  #g
        date: "日付"  #g
        datetime: "日時"  #g
        integer: "整数"  #g
        boolean: "ブール"  #g

なんて感じになっているからブラウザをリロードしてみよう。
きっとこんな画面になっているはずだ。
f:id:yuuki-n:20090901084852p:image

もちろん、attributesの一部だけを出力することも可能だよ。

semantic_form_for
<% semantic_form_for @test do  | f |%>
  inputs
  <%= f.inputs :datetime, :string %>
  input
  <%= f.input :integer %>
<% end -%>

f:id:yuuki-n:20090921230256p:image
Formtasticはもっといろいろな機能があって、アプリケーションの開発を確実に楽にすると思うよ。

sinatraをthin上で動かす方法

sinatraは凄くシンプルなフレームワークだよね。そのsinatraをthin上で動かすには最低限以下のような設定を書けば動くみたい。
config.yml

---
  address: 127.0.0.1
  rackup: ./config.ru

config.ru

require 'sinatra'
require 'app'
run Sinatra.application

app.rb

require 'rubygems'
require 'sinatra'
require 'rack'

get '/' do
  'Hello, world'
end

railsプロジェクトをgit-pushしたときに自動的にデプロイする方法

gitはとてもスマートだから標準でいろいろなイベントをhookする機能を用意してくれているよ。
これを利用して、中央リポジトリにpushすると自動的にデプロイをするようにしたいと思う。

本番サーバは慎重にデプロイする必要があるけど、テストサーバはそのとき最新の作業分を常に確認したいからね。

環境

ローカルPC「Alice」
中央リポジトリ「Bob」
テストサーバ「Carol」

やりたいこと

AliceからBobへpushすると自動的にCarolがpullし、db:migrateを行う。場合によってはサーバのリスタートやfixtureの読み込み、その他諸々を行う。

code

hookするイベントは"post-receive"、pushされたら発生するイベントだよ。
まずはRAILS_ROOTに以下のファイルを作ろう。
deploy.rb

rake("db:migrate")

そして、Bobのhooksに"post-receive"ファイルを作ろう。中身は以下の通り
post-receiv

#!/bin/sh
(
cd /path/to/Carol && \
git --git-dir=.git pull && \
rake rails:template LOCATION=deploy.rb
)

こうしておけば、AliceからBobへpushしたときに自動的にCarolが更新されてmigrateが走るよ。
deploy.rbはrails-templateなので簡単にrailsに関する操作ができるのも便利。



参考:http://at-aka.blogspot.com/2009/05/git-push.html