第29回 Ruby/Rails勉強会@関西

投稿者 okkez 2008-08-19 05:31:00 GMT

行ってきました。

ちょっと睡眠不足気味だったので各セッションの記憶はあまりなかったりします。

なので今回は行ったという記録のみ残しておきます。

カテゴリ  | タグ ,  | コメントなし | トラックバックなし

KansaiWorkshop#27 on 2008-06-28

投稿者 okkez 2008-06-18 08:10:00 GMT

日本Rubyの会 公式Wiki - 第27回 Ruby/Rails勉強会@関西

もうすぐ開催されます。

今回はかずひこさんも久しぶりに登壇しますので、すごく楽しみです。

お時間のある方は、上記URIに申し込み方法が書いてあるので、そちらを参照の上、参加申し込みしてくださいね。

カテゴリ  | タグ  | コメントなし | トラックバックなし

るりまに検索機能とかいろいろ付きました

投稿者 okkez 2008-06-12 07:52:00 GMT

羊堂本舗 脳ざらし紀行 (2008-06-11)

sheepmanさん++

俺も、1.8.7対応頑張ろう。まだ 1/3 も出来てない。

Ruby reference manual (beta)

カテゴリ  | タグ ,  | コメントなし | トラックバックなし

Passenger (mod_rails) を使ってみた

投稿者 okkez 2008-04-15 13:58:00 GMT

Overview — Phusion Passenger (a.k.a. mod_rails)

思ったより簡単だったのでちょっとだけ手順を書いておく。

  • Apache は 2.2 系
  • Rails2.0.2
  • Redmine0.7.0RC1

上記はインストールできている and 動作確認できている前提で。 まずは、Passenger をインストール。

sudo gem install passenger

で以下のコマンドを実行。

passenger-install-apache2-module

そうすると対話型っぽい感じになって色々と親切に教えてくれる。足りないライブラリとそれらの入手方法とか。 個人的にはもう少し不親切でもいいような気がした。

このコマンドではApacheのモジュールをビルドするので Windows ではかなり苦労するであろう事が予想される。(調べてないけど)

最後に、httpd.conf に書く設定内容が表示されるのでそれをコピペして Apache を再起動すればOK。 各アプリの設定は後で書く。

もう一つのインストール方法でやる場合は、ソースを展開したディレクトリの下にビルドしてインストールされてしまうので、ちょっと気持ち悪い。手でコピーすればいいけどコマンドが動的に生成されるっぽいのでその辺の調整が必要。

### Redmine を使う

  • /var/webapps/redmine に置いている
  • /var/www/html が Apache の DocumentRoot

サブドメインが使える場合は以下でOK。

<VirtualHost *:80>
    ServerName redmine.example.com
    DocumentRoot /var/webapps/redmine/public
</VirtualHost>

サブドメインが使えない場合(素朴なイントラネットなど)。

 ln -s /var/webapps/redmine/public /var/www/html/redmine

のようにシンボリックリンクを DocumentRoot 以下に用意する。 で、以下の内容を httpd.conf を追加する。

    DocumentRoot /var/www/html
    RailsBaseURI /redmine

サブドメインが使える場合は NameBase の VirtualHost でいくらでもアプリケーションを置くことができるが、そうでない場合は以下のようにすればいけるかもしれない。(まだ試してない)

  RailsBaseURI /redmine1
  RailsBaseURI /redmine2

考えてみたけど VirtualHost を使用せずに一つのアプリに別々のRailsEnv を設置する方法がわからない。 上のやり方だと、一つの環境しか設定できないような気がするし。

以上の設定内容は全部、 Passenger のサイトに書いてあった。最初からドキュメントが揃っているのは素晴らしい!

カテゴリ  | タグ ,  | コメントなし | トラックバックなし

第23回Ruby勉強会@関西の初級者レッスン演習問題の解答例たち

投稿者 okkez 2008-02-22 15:04:00 GMT

ざっとこんなもんかな。時間ある時に勝手に添削する。

# 添削希望のものだけね。

Kanasan の 100 マス計算

趣味も大分入るけど以下のような感じで添削しました。

  • 題意を勘違いしてる?
    • 演算子もランダムにして欲しかったけどこれはこれでアリなので活かすことにする
  • 使える演算子は決まっているので、定数化する
  • 入力値のチェックに正規表現を使っていたがこの程度なら文字列比較で十分
  • 一度初期化したら変わらない変数は定数にする
  • メソッド定義のカッコは省略しない
    • るりまのフォーマットに従う方向で。
  • exit 1 にしとく
    • コマンドの失敗時の戻り値は 1 であることが多いため
  • 一文字変数はスコープが短い所で使用する
  • 配列の変数名は配列であることが予想できるような名前にする
kanasan's 100マス計算添削後
#! /usr/bin/ruby OPERATORS = %w[+ - * / %] DIGIT = 2 SEPARATOR = " " VERTICAL_LINE = "|" HORIZONTAL_LINE = "-" CROSS_LINE = "+" operator = ARGV[0].to_s unless OPERATORS.include?(operator) puts "wrong parameter: operator is only +-*/%" exit 1 end def display100Math(xs, ys, operator, display_answer) print SEPARATOR * (DIGIT - operator.size) print operator print SEPARATOR print VERTICAL_LINE xs.to_a.each do |x| print SEPARATOR print SEPARATOR * (DIGIT - x.to_s.size) print x end puts "" print HORIZONTAL_LINE * DIGIT print HORIZONTAL_LINE print CROSS_LINE xs.size.times do print HORIZONTAL_LINE print HORIZONTAL_LINE * DIGIT end puts "" ys.each do |y| print SEPARATOR * (DIGIT - y.to_s.size) print y print SEPARATOR print VERTICAL_LINE if display_answer xs.each do |x| answer = y.send(operator, x) print SEPARATOR print SEPARATOR * (DIGIT - answer.to_s.size) print answer end end puts "" end end xs = (1..9).sort_by{rand} ys = (1..9).sort_by{rand} display100Math(xs, ys, operator, false) puts "" display100Math(xs, ys, operator, true)

やらなかったこと * 100マス化 * 今のは 81 マスしかない * 短く簡潔にすること * やっちゃうと大改造になるため(元が残らない)

sixeight さんの 100 マス計算

同じく趣味が入るけどこんな感じ。

  • いくつかの変数名/メソッド名を変更した
    • 多分、わかりやすくなった?
  • initialize に仕事積めすぎなので @header を make_question に移動
    • そうするとインスタンス変数である必要がなくなるのでローカル変数にした
  • make_matrix は表作成専用にした

適切に仕事を分割することでよりよくなったはず。

sixeight's 100 マス計算添削後
class Hyakumasu def initialize @op = [:+, :-, :*, :/][rand(4)] @row = (0..9).sort_by{ rand } @col = (0..9).sort_by{ rand } end def make_matrix header = "#{@op} | " + @col.join(' ') + "\n--|" + "---" * @col.length @row.inject(header){|r, v| r + "\n#{v} |" + (block_given? ? yield(v) : '') } end def display puts make_matrix puts puts make_matrix{|v| @row.map {|i| "%3d" %((@op == :/ && i.zero?) ? 0 : v.send(@op, i)) }.join } end end Hyakumasu.new.display

カテゴリ ,  | タグ  | コメントなし | トラックバックなし

第23回 Ruby勉強会@関西に行ってきた

投稿者 okkez 2008-02-17 13:56:00 GMT

いつも通りみんなの集合時間より早く行って簡単な打ち合わせ。

日本Rubyの会 公式Wiki - 第23回 Ruby/Rails勉強会@関西

Ruby1.9 の仕様 − Array 関連の新しい機能 by こなみ さん

よくも悪くも講義?って感じだった。 最後の方の内容が面白かっただけに尻切れとんぼっぽくなったのが残念。

純粋関数型言語Ruby(3) 30分でわかるMonad by 氏久(ujihisa)さん

やっぱり 30min ではわからなかった Monad

参加者大半おいてけぼり??

Rails以外のWebアプリケーションフレームワーク」 by yhara さん

merb, capmping, ramaze の紹介。前二つはストヤン経由で聞いてたけど結局試してなくてごめんなさい。

今度、試す。

Rubyのリフレクション by 大林さん

おもしろかった。久しぶりに燃えるセッションだった。 # って自分こんなにリフレクション好きだったっけ?

すごく勉強になった。要復習。

これくらいの濃さのセッションが毎回あるといいのだけど。

Ruby初級者向けレッスン第17回 by okkezさん

自分のセッション。

初級者レッスンと言いつつ、るりまの宣伝乙。 演習問題もリファレンスを見てやってもらう前提だったのでこんなものかと。

演習問題の最後に、使うかもしれないメソッド一覧を載せたのは良かったらしい。Keep

そう言えば、自分が発表する場合の時間の読み方がかなり正確になってきた気がする。

カテゴリ  | タグ ,  | コメントなし | トラックバックなし

Date#cweek

投稿者 okkez 2008-01-23 13:18:00 GMT

Ruby には暦週を求める Date#cweek というメソッドがあるが、こいつは月曜日スタートで日曜日で終わる。

でも、たまに日曜日から土曜日での暦週が欲しくなることがある。というか今日必要になった。

なので作ってみた。


class Date
  def myweek
    if wday == 0
      (self + 3).cweek
      # cweek + 1 でいいかも。。。
    else
      cweek
    end
  end
end

とりあえず試した範囲では上手く動いてた。

カテゴリ  | タグ  | コメントなし | トラックバックなし

第 20 回 Ruby 勉強会@関西 初級者レッスン演習課題解答例(RSpec版)

投稿者 okkez 2007-11-04 03:22:00 GMT

Test::Unit版 と同じことを RSpec でやってみた。

第 20 回 Ruby 勉強会@関西 に解答例(answer.pdf)がアップされていますがそれの捕捉説明的なものです。前回と同様、配布資料(print.pdf)が手元にある前提で進めます。

Test::Unit 版とは書いた時期が違うので微妙に実装が違っていたりします。

ちなみに RSpec を使って書くのは初めてです。RSpec についてはるびまの記事を参照してください。

なお、stack_spec.rb は、そのとき注目している機能に関係のある部分のみ掲載します。

続きを読む...

カテゴリ  | タグ ,  | コメントなし | トラックバックなし

第20回 Ruby 勉強会 @ 関西

投稿者 okkez 2007-11-02 11:52:00 GMT

行ってきた。

第 20 回 Ruby 勉強会

内容は置いといて、初級者レッスンの解答例(answer.pdf)に補足説明を入れておく。 資料は上記サイトでダウンロードしてくださいな。

以下では、配布資料(print.pdf)が手元にあることを前提に進めていきます。

実装するメソッド

  • empty?
    • スタックが空なら true、そうでなければ false を返す。
  • size
    • スタックのサイズを返す。
  • push(val)
    • 引数の値をスタックの一番上に積む。
  • pop
    • スタックの一番上の値を取り除いて返す。 スタックが空の場合は Stack::EmptyStackErrorが発生する。
続きを読む...

カテゴリ  | タグ ,  | コメントなし | トラックバックなし