REXML DoS 脆弱性対策

Posted by okkez Wed, 27 Aug 2008 23:25:00 GMT

REXML DoS 脆弱性対策をしようとして typo があったため落ちてましたorz

落ちてる間に見ようとした人達がもしいたら、ご迷惑をお掛けしました。

Posted in | no comments |

Hash#default_proc をあとでセットする方法

Posted by okkez Fri, 22 Aug 2008 03:48:00 GMT

Hash#default_proc= がなかったのであるハッシュにあとで default_proc をセットする方法を考えてみました。

以下のようにするとうまく行きます。

hash = {}                             # default_proc が無い。
hash.default_proc            # => nil
other_hash  = Hash.new{|h, k| h[k] = [] }.merge(hash)
other_hash.default_proc # => #<Proc:0xb7c87474@-:3>

Posted in , | no comments |

Hiki on Rack 2

Posted by okkez Fri, 22 Aug 2008 03:04:00 GMT

続き。

とりあえず、ページを編集できるところまで確認。 作業手順をまとめると以下のような感じ。

  • hiki.ru を用意する。
  • hiki.rb を用意する。
    • Hiki::App クラスを作って call メソッドを定義する
  • @cgi を使っている部分を全て @request に変更する
  • params['hoge'][0] を全て params['hoge'] に変更する
  • ENV を使用している部分を @request.env に変更する
  • クッキーを使用している部分を修正する
    • セッションキーだけなので簡単
  • print している部分を Rack::Response 的なものを返すように変更
    • [ヘッダー,ステータス,ボディ] な配列で OK
    • 面倒なのでヘッダーとボディだけ返してステータスは常に 200 にしといた
  • Rack::Lint によるとヘッダーに Status を入れてはいけないらしいのでそれを入れてる部分を削除
  • その他こまごまとした修正が必要。
    • CGI に依存している部分とか、ロードパスとか。

まとめ

頑張ればできる。

いや、でも Hiki のソースも意外とひどいというのがわかった。統一感がないというかカオス一歩手前というか。

Posted in | no comments |

Hiki on Rack

Posted by okkez Thu, 21 Aug 2008 15:34:00 GMT

Hiki - Hiki -Front Page-Rack: a Ruby Webserver Interface に載せる実験中。

概ねうまく行きそうな感じだけど、セッションまわりに苦戦中。あと、たぶんプラグインを全部修正しないといけないのが辛いかもしれない。

ちゃんと出来たら公開する予定。

Posted in | no comments |

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

Posted by okkez Tue, 19 Aug 2008 05:31:00 GMT

行ってきました。

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

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

Posted in | no comments |

KansaiWorkshop#27 on 2008-06-28

Posted by okkez Wed, 18 Jun 2008 08:10:00 GMT

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

もうすぐ開催されます。

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

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

Posted in | no comments |

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

Posted by okkez Thu, 12 Jun 2008 07:52:00 GMT

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

sheepmanさん++

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

Ruby reference manual (beta)

Posted in | no comments |

Passenger (mod_rails) を使ってみた

Posted by okkez Tue, 15 Apr 2008 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 のサイトに書いてあった。最初からドキュメントが揃っているのは素晴らしい!

Posted in | no comments |

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

Posted by okkez Fri, 22 Feb 2008 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

Posted in , | no comments |

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

Posted by okkez Sun, 17 Feb 2008 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

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

Posted in | no comments |

Older posts: 1 2