RBC総会

RBC総会

遅くなりましたが報告です。
7月22〜23日にかけて
RBC総会に参加してきました。
このような活動に参加するのは初めてで
いろいろな貴重な経験をすることができたんで
自分が参加したイベントについてまとめておきます。

■イケテルビジネス勉強会【22日9:30〜12:30】

この勉強会では「地球防衛隊のポータルサイト」を作ろうというテーマの元に
5〜6人のグループでペルソナとサイトマップを作成し最後に各チームで
プレゼンをしました。

初対面の方々とアイデアを出し合って一つのものを作っていくという作業は
初めての経験でした。
僕のチームには全体を纏めるのがうまい人やアイデアを次から次へと出す人
など自分にないものを持っている人がたくさんいました。
やはりこういう場では如何に自分のキャラを出してチームに貢献できるかが
重要だと感じました。

AIR+Rails勉強会【22日13:00〜18:00】

AIRRailsを使ったアプリを作成しました。
まずは我らがakimatterさん講師のもとRailsのアプリを作成して
その後アドビの方がAIRの使い方をレクチャーしてくれました。

Railsは業務でも扱っているのですがAIRははじめて触りました。
AIRに関して軽く知識がついたのでこれからもっと勉強して
使えるようになっていきたいです。

■まつもとさんライブコーディング【23日10:00〜12:00】

Rubyの生みの親まつもとさんのライブコーディングに参加しました。
Rubyのコード自体はぐー、ちょき、ぱーの文字列をランダムに出力する
簡単なじゃんけんコードを披露してくださったぐらいでしたが
まつもとさんの開発環境の紹介(メーターマニアらしくデスクトップでたくさんメーターが動いてた)や
これからRubyに入れたい機能を教えてくれたりとても面白かったです。

■記念セミナー【23日13:00〜18:00】

●オープニング

RBC会長がかっこいいスライドショーとともに
Rubyに対する熱い思いを語ってくれました。
今年のキーワードはRubinnovationだそうです。

●麻生知事挨拶

知事もまたRBC会長に負けないくらい熱く
Rubyビジネスに期待する思いを語ってくれました。
行政もRBCの活動を応援してくれるということは

●まつもとさん講演

今度はまつもとさんがRubyの歩みを話しました。
Rubyがどんなふうに生まれてここまで普及したのか
を知ることができました。

●トーマス・エネボさん講演

JRubyのCore Developerのトーマス・エネボがJRubyについて
話をしてくれました。
JRuby自体はまだ触ったことがないのですが
うちの会社もJRuby 徹底入門という本を出版したので
これを機にJRubyについても勉強していきたいです。

●ギャレット・イルグさん講演

アドビ・ジャパン社長のギャレッド・イルグさんが
開発とデザインの融合の大切さの話をされました。

ユーザーが使いやすいくイケテルデザインのWebアプリを
これから僕自身開発していきたいと思いました。

●各地RBCメンバによるパネルディスカッション

仙台、東京、名古屋、福岡、長崎の
RBCに深く関わっているメンバが
RBCの活動意義や今後RBCに期待することについて
熱く語り合いました。

●閉会挨拶

閉会挨拶時にakimatterさんが
Rubeusというプロジェクトを紹介してくれました。
JRubyを使ってJavaAPIRubyっぽくしちゃえという
コンセプトのもと立ち上がったプロジェクトだそうです。

懇親会

この懇親会は帰りの飛行機の時間の関係で30分ぐらいしか
参加できませんでした。
残念!

まとめ

以上のようにタイトなスケジュールでとても濃密な2日間を過ごすことができました。
今回のRBCの活動に参加していろいろな人と出会うことができました。
(すごい名刺なくなった。。。)
RBCのメンバには開発者だけでなくWebデザイナーや学校の先生、学生
行政の方、企業の重役の方などいろいろな立場の方が参加しているので
いろんな視点での話を聞くことができ刺激になりました。
これからもRBCの活動に積極的に参加していきたいです。

Ruby Enterprise Edition+Passengerの環境構築

VMware playerをインストール

  以下からダウンロード
  http://www.vmware.com/jp/products/player/

subversionインストール

  root$ yum install subversion

Ruby Enterprise Editionをインストール

  http://www.rubyenterpriseedition.com/
  上記からダウンロードして
  tar xzvf ruby-enterprise-1.8.6-20080621.tar.gz
  解凍し
  ./ruby-enterprise-1.8.6-20080621/installer
  でインストール
  途中で
  GNU C++ compiler
  Zlib development
  OpenSSL development
  などがnot foundで怒られたのでそれらを入れて再度
  ./ruby-enterprise-1.8.6-20080621/installer
  したらうまくいった。

■パスを通す

  export PATH=$PATH:/opt/ruby-enterprise-1.8.6-20080507/bin

■PJをcheckout

  svn checkout URL
  でpjをチェックアウト

■sambaを設定

  yum -y install samba

  設定はshare/samba.txt
  and
  以下を参考に
  http://centossrv.com/samba.shtml  
  http://www.miloweb.net/samba.html
  http://www.geocities.jp/tatsus490824/selinux_status-change.html
  http://www.nextren.com/okamoto/2007/10/centos5_samba.html

■oracle10g-instant cliantインストール

  rpm -hiv oracle-instantclient-basic-10.1.0.4-1.i386.rpm
  rpm -hiv oracle-instantclient-devel-10.1.0.4-1.i386.rpm
  rpm -hiv oracle-instantclient-sqlplus-10.1.0.4-1.i386.rpm
でインストール、sqlplusコマンドを叩いたら下記のエラー
  sqlplus: error while loading shared libraries: libsqlplus.so: cannot      open shared object file: No such file or directory 
  原因はlibsqlplus.so が見つからないとのこと
  export LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.3/client/lib/
  
  [m-matsumoto@CentOS ~]$ echo $NLS_LANG
  [m-matsumoto@CentOS ~]$ export NLS_LANG=Japanese_Japan.UTF8
  [m-matsumoto@CentOS ~]$ sqlplus m-matsumoto_d/m-matsumoto_d@10.6.0.99/madison
  でつながることを確認

ruby-oci8(http://ruby-oci8.rubyforge.org/ja/)のインストール

  http://rubyforge.org/frs/?group_id=256
  より1.0.0-rc3をインストール
  
 tar xzvf ruby-oci8-1.0.0-rc3.tar.gz
  で解凍
  cd ruby-oci8-1.0.0-rc3/
  make
  make install

  でインストール

■パス設定

  source /home/m-matsumoto/.bash_profile

■ファイアフォール解除

  /etc/init.d/iptables stop
  で解除できる
  特定のポートを解除するには
  vi /etc/sysconfig/iptables
  で下から3行目に
  -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT
  を追加して
  /etc/init.d/iptables restart
  で再起動



■Passengerをインストール

  gem install passenger
  でインストール
  Apache 2 development headers... not found

  * To install Apache 2 development headers:
  Please run yum install httpd-devel as root.
  といわれたので
  yum install httpd-devel
  でインストールし再度
  gem install passenger
  最後下記のメッセージが出てインストール完了

--------------------------------------------
The Apache 2 module was successfully installed.

Please edit your Apache configuration file, and add these lines:

   LoadModule passenger_module /opt/ruby-enterprise-1.8.6-20080507/lib/ruby/gems/1.8/gems/passenger-1.0.5/ext/apache2/mod_passenger.so
   RailsSpawnServer /opt/ruby-enterprise-1.8.6-20080507/lib/ruby/gems/1.8/gems/passenger-1.0.5/bin/passenger-spawn-server
   RailsRuby /opt/ruby-enterprise-1.8.6-20080507/bin/ruby

After you restart Apache, you are ready to deploy any number of Ruby on Rails
applications on Apache, without any further Ruby on Rails-specific
configuration!

Press ENTER to continue.


--------------------------------------------
Deploying a Ruby on Rails application: an example

Suppose you have a Ruby on Rails application in /somewhere. Add a virtual host
to your Apache configuration file, and set its DocumentRoot to
/somewhere/public, like this:

   <VirtualHost *:80>
      ServerName www.yourhost.com
      DocumentRoot /somewhere/public
   </VirtualHost>

And that's it! You may also want to check the Users Guide for security and
optimization tips and other useful information:

  /opt/ruby-enterprise-1.8.6-20080507/lib/ruby/gems/1.8/gems/passenger-1.0.5/doc/Users guide.html

Enjoy Passenger, a product of Phusion (www.phusion.nl) :-)
http://www.modrails.com/

設計書

今日の作業

設計書作成

今日の作業でわかったこと&わからなかったこと

今日は設計書の作成を行った。
その作業をしていて複雑な処理を読む相手に伝わるように
わかりやすい日本語で記述することがすごく大変だった。
というか全然わかりやすくまとめることができなかった。

調べたことのまとめ

CR-LF
行末を表す記号として、キャリッジ・リターン(carrige return,CR)とライン・フィード(Line feed, LF)がある。

勉強日

今日の作業

Railsについての学習
ActiveScaffold
GetText

調べたことのまとめ

ジェネレータとプラグイン

ジェネレータは静的であり、1度だけ実行されコードを生成する。
プラグインは動的であり、アプリケーションランタイムの一部として実行される。
Railsのscaffoldジェネレータは1度だけ実行され、モデルの中の現在のフィールドに基づいて静的なHTMLテンプレートを作成する。
列を追加したいときにはビューを再生成するか、手動でビューにフィールドを追加する必要がある。
それに対しプラグインは、ビューを実行時に生成する為モデルの変更は苦労なく行える。

ActiveScaffold

http://blog.codezine.jp/editor/2007/09/ruby_on_railsactivescaffold_1.php

このサイトを参考にActiveScaffoldを使ってみた。

mysql> create database bookmark_development default character set utf8;

bookmarkというRailsアプリを作り
environment.rbファイルに文字コードを指定

$KCODE = 'u' 
require 'jcode'

を追加。次はdatabase.ymlの設定
次に

bookmark>ruby script/generate model bookmark

でmodelファイルbookmarkの作成
migrationファイルを

class CreateBookmarks < ActiveRecord::Migration
  def self.up
    create_table :bookmarks do |t|
      t.column :title, :string
      t.column :url, :string
      t.column :created_at, :datetime
      t.column :updated_at, :datetime
    end
  end
  def self.down
    drop_table :bookmarks
  end  
end

こんな感じに記述し実行
次に

bookmark>ruby script/generate controller user

でuserコントローラ作成
次にActiveScaffoldをインストール

bookmark>ruby script/plugin install  http://activescaffold.googlecode.com/svn/tags/active_scaffold

インストール後app/views/layoutsにactivescaffold.rhtmlを作り

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>ブックマーク管理</title>
    <%= javascript_include_tag :defaults %>
    <%= active_scaffold_includes %>
  </head>
  <body>
  <%= yield %>
  </body>
</html>

こんな感じに記述。
次にscaffoldを実行するControllerであるUserControllerに

class UserController < ApplicationController
  active_scaffold :bookmark 
  layout "activescaffold"
end

を記述し完了。
サーバを起動しhttp://localhost:3000/user
英語でわかりづらいからUserControllerを

class UserController < ApplicationController
  layout "activescaffold"
  active_scaffold :bookmark do |config|
    config.label = "ブックマークテーブル"
    config.columns = [:title, :url, :created_at, :updated_at]
    list.columns.exclude :created_at
    list.sorting = {:title => 'DESC'}
    columns[:title].label = "タイトル"
    columns[:created_at].label = "作成日"
    columns[:updated_at].label = "更新日"
  end 
end

と記述。内容は
・config.label…テーブル名の表記を設定
・config.columns…表示するカラムを設定。また、この順番で表に表示されます。
・list.columns.exclude…表には表示しないカラム。created_atカラムを非表示にしてみました。
・list.sorting…デフォルトソート。複数指定できるようです。
・columns.[].label…カラムの表記を設定。
次に
/vendor/plugins/active_scaffold/lib/configのファイルの
「:label => 'Edit'」を「:label => '編集'」などに書き換えリンク名を日本語に。

Gettext

次にGettextを使ってみる。
http://rubist.blog77.fc2.com/blog-entry-74.html
を参考に。

$>gem install gettext 

次に参考サイトのようにbookmarkモデルにバリデーションを追加

class Bookmark < ActiveRecord::Base
  #必須チェック
  validates_presence_of :title
  validates_presence_of :url
  #長さチェック
  validates_length_of :title, :maximum => 15
  #形式チェック
  validates_format_of :url, :with => /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$/ix
end

時間がなくなったため続きは明日。
今日の作業でScaffoldとActiveScaffoldの違いがわかった。

明日の作業

未定

テスト

今日の作業

項目、バリデーション、アクションのチェック
修正されたバグの確認

今日の作業でわかったこと&わからなかったこと

最近テストをproductionモードでやっている。
サーバを起動したままMOCKデータを変更してテストを行おうとしたけど変更が反映されない。
developmentモードのときはできてたのに。
と思いバグとして報告した。
結果から言うと実装が悪いわけではなくただ自分の知識不足でした。
以下は先輩の説明引用

developmentモードは、その名の通り開発用のモードなので、
開発者がいちいちサーバーを止めなくても、ソースコードへの変更
が反映されるようにソースコードが自動ロードされています。
また、開発者用なので、例外が発生した場合に原因を見つけやすい
ようにスタックトレースなどの情報がエラー画面には表示されます。

productionモードは、製品用のモードです。つまり本番環境で
動作することを前提としているので、余計な動作をしないように、
ソースコードが変更されてもそれを感知しません。一つのソースファイル
は一度読みこまれたらそれっきりです。
こちらは、エラーがあった場合にスタックトレースなどを表示しても
エンドユーザーには意味がないので、専用のエラー画面を表示します。

前にも実行環境の違いは本で読んだことがあったけど完全に忘れてた。
今度はしっかり覚えておこう。

View作成

今日の作業

ビュー作成


今日の作業でわかったこと
今日もオレンジニュースを見ての感想というか、
わからなかった用語について。
Wi-Fiについて
無線LAN機器間の相互接続性を認証されたことを示す名称。
無線LAN製品の普及促進を図ることを目的とした業界団体Wi-Fi Allianceによって
認定された機器はWi-Fiロゴの使用が許可される。
最近はノートパソコン以外にもニンテンドーDSipodにも搭載されている。

明日の作業

ビュー作成
項目、バリデーション、アクションのテスト

テスト

今日の作業

ビュー作りの続き
項目、バリデーション、アクションのテスト

調べたことのまとめ

今日はオレンジニュース見ての感想的なものを書こうと思う。
本来なら技術的な記事に対しての感想を書くべきだと思うが、
一通り見てみたがまだ今の自分には敷居が高いものばかりだったので、
ITPro Challenge!、伊藤直也氏の講演「ベンチャー志向プログラマ」の動画を公開
http://itpro.nikkeibp.co.jp/article/Watcher/20071009/284072/
を読んでの感想を書きたいと思う。
この記事で一番印象に残った言葉は
「なりたいと思っていた自分になれた。でももっとこうなりたいと思うようになった。」
という言葉。最近、自分は将来どうなっていきたいのかということをよく考える。
今一番思うことは早く実装できるぐらいの技術力を身に付けたいということだ。
そしてその目標をできるだけ早く達成し、
新たな「もっとこうなりたい」という目標を見つけていきたい。

明日の作業

項目、バリデーション、アクションのテスト
ビューの作成