第23回Ruby/Rails勉強会に参加しました。

病院に寄っていたら1時間くらい遅刻しました。残念。
以下、個人的なメモです。

純粋関数型言語Ruby(3) 30分でわかるモナド by ujihisaくん

  • モナドは普通の人によって難易度高いような。。。
  • Maybeモナド
  • 副作用が怖い人? 可換な演算子。>>。副値。>>=。
  • RushCheck。モナドの実装例。
  • プレゼン、理解できている人いるのかなぁ。
  • 質問がないと予想された。
  • Haskell Hackathon 2008。みんなでHaskellの処理系を作っちゃおうぜ!というイベント。梅田グッディ。会場から4〜5人参加。僕は、無理だ〜。
  • Haskell勉強会#9。2/22(金)。こっちも無理だ〜。残念。
  • curry実装。[ruby-dev:33676]。ぶらぼー。

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

  • merb。ストヤンさんがめるぶと呼んでいた。作り直したRails。3倍早い。Railsはeval使いまくり。遅い。シンプルな作り。シンプルなままでいられるか。
  • Camping。超軽量。ファイルを1つつくれば開発を始められる。RubyソースコードでHTMLを書く。Campingの変態的なところ。ルーティングが変態的。/edit/以下をEditコントローラに割り当てたい。class Edit < R '/edit/(\d+)', '/edit'。4Kライブラリ。コアが4000バイト? Golfされてました。
  • ramaze。らまぜ。ロゴに読み方が書いてある。×ラマーズ。シンプルなMVC。モジュール化されている。中規模向け。ソースコードが綺麗。チュートリアル・サンプルが豊富。設定ファイルが箇条書き。oっていうメソッドが定義されている。この発想はなかった。お茶目な一面。
  • それぞれ目標が違っていて面白い。
  • 一番のおすすめは。Ruby on Rails。本が多い。情報が多い。人に聞きやすい。完成度は一番高い。大は小を兼ねる。

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

  • 想定バージョンは1.8.6。
  • Rubyの基本。大半の機能が実行時処理。実行前の処理に手を出せない。構文木をいじる方法がない。Lispのマクロのようなものがない。以下のクラスが中心的役割を果たす。Module/Class、Object。
  • 変数定義とか。存在するメソッドの調査。クラス階層。eval関係。hook関係。
  • クラス階層と継承と特異クラス。特異クラスとは?
  • 今日は難易度の高い話題が多いなぁ。
  • Module#define_method。今回のテーマ。メソッドを定義するメソッド。インスタンス変数もどき。クラス変数もどき。ローカル変数を共有するのがポイント。
  • こつ。必要な情報はどのクラスが持っているかを意識する。どのクラス/オブジェクトに情報を持たせるか意識する。
  • その他。アクセサのないインスタンス変数の読み書き。privateメソッドの外部からの呼び出し。メソッドつくったり。
  • おまけ。MethodとUnboundMethod。
  • メソッドをオブジェクト化する。(1 .. 10).map(&3.method(:+))。ほう。
  • UnboundMethod。クラスからメソッドを取り出す。そのままでは呼び出せない。適当なクラスにバインドする。Time.instance_method(:to_s).bind(Time.now).call。ほう。
  • 特徴。Procと互換。メソッドの名前ではなく実体を持つ。上書きしても元の情報を持っている。
  • リフレクションを学ぶのによい標準添付ライブラリは? delegate? forwardable? 何だろう。。。

Ruby初級者レッスン第17回

  • イテレータの種類。要素アクセス型、アクセスユーティリティ型、範囲型、登録型、パラメータ型、仕事分割型、コンテキスト型。
  • 演習問題。for、whileは禁止。九九の表。100マス計算、色見本作成。とりあえず九九だけ。
n_range = (1 .. 9)
m_range = (1 .. 9)

puts('   |' + n_range.map {|n| '%2d' % n }.join(' '))
puts('---+--------------------------')
m_range.each do |m|
  puts(('%2d' % m) + ' |' + n_range.map {|n| '%2d' % (m * n) }.join(' '))
end
# =>    | 1  2  3  4  5  6  7  8  9
#    ---+--------------------------
#     1 | 1  2  3  4  5  6  7  8  9
#     2 | 2  4  6  8 10 12 14 16 18
#     3 | 3  6  9 12 15 18 21 24 27
#     4 | 4  8 12 16 20 24 28 32 36
#     5 | 5 10 15 20 25 30 35 40 45
#     6 | 6 12 18 24 30 36 42 48 54
#     7 | 7 14 21 28 35 42 49 56 63
#     8 | 8 16 24 32 40 48 56 64 72
#     9 | 9 18 27 36 45 54 63 72 81