Rubyist九州定例会のログ

自分の主観や勘違いが入っていると思う。変な書き方になってたらすみません。
Rubyist九州 090516

山崎さん発表

  Rubyを「WEBスクリプト言語」として語る
  postscriptの衝撃 プリンタにCPUが載るのかよ!
  PCが機械を制御するんでなく、機械がPCの命令(モバイルコード)を解釈して自分で考える
  Javaの初期の目的がそうだった。(JavaApplet)
  モバイルコードにはセキュリティの問題が付いて回る
    ・security-故意の破壊から機械を守る。
                電子署名とか
    ・safety-うっかりのバグで破壊されることから機械を守る
              ポインタをほぼ禁止
              メモリ管理の自動化 -> コードをがんじがらめに監視する
              強い型付け
    がんじがらめなのでJavaは楽しくない。
      エラーうるさい
      構文が冗長
      人よりも機械のほうをむいている

    WEBもモバイルコードだよね
      CGIによってHTML+CSSJavascriptを生成する

  Rubyはモバイルコード型の言語ではない
   Javaの逆。人間がプログラムを楽に出来るように設計されている。
   セキュリティ軽視なわけじゃないよ

  Mix-in継承
    Telescriptのラバースタンプモデル。(MagicCAPに載ってたやつ)
    スタンプをはっつけると機能がミックスされる

  Mix-inの起源はアイスクリーム
    いろいろ混ぜてあなた好みに

  Railsはmix-inを利用したwebの部品組み込みと捉えることも出来る。

  DSLとしてのRuby
    メタプログラミングに向いている
    ヘルパメソッド=>HTMLをRubyでかく
      form_forメソッドはCSRF対策のコードも自動生成してくれる
    RJS=>javascriptRubyでかく
    YAML=>YAMLRubyのクラスから変換できるよ!

  コード生成の効率化かについて
    つるはしとスコップで地下鉄は作れるか
    PHP、eRuby=>つるはし、スコップ(原理的には可能だけどちょっとね)
    Rails=>重機

  RubyUnixの思想を受け継いだ、テキスト処理エンジン

  言語の好き嫌い
    Rubyプログラマに好かれる。

  (プログラマにとって)どんな言語か
    型を意識させない
      でも意識させないためにすごい複雑な仕組みが使われている
      クラスを作らなくてもオブジェクト指向プログラミングが出来る。
      (シングルトンにどんどんメソッドを定義できちゃうから)

  マルチン・レフの型理論によれば型はプログラムの外部仕様になる
  型が決まれば言語が出来るはずだが関数の型を決めるのは難しい(Haskelとかやってるけどまだ完璧じゃない)
  
  テストファースト型推論とよく似てるけどBeckたんはそのへんを知ってるくせにいわないところがカコイイ
  そもそも言語とは。。。ヴィトゲンシュタインとか出てきた。
  自然言語の構文はLispのような型なし言語によく似てるー>プログラムしやすい

 ***変数と代入を見れば言語の特徴がわかる(関数型、手続き型)
 Rubyは純粋な関数型ではないが、かなり関数型に近くできる(Proc)
 (あらい:関数型言語モナドとかむずかしいよね。頭いい人じゃないとつかえない。)

 ***Rubyの代入をirbでためして特徴を見ていこう。
  破壊的メソッド(tr と tr!)
  mutableとかimutableとか

  シンボルとは何か?=>説明難しい(ハッシュのキーそのものと考えられる。)
  (田代:シンボル使うとメモリ効率がいいって本当?=>いいはず。調べてください)

  push/popは破壊的なだけど!は伝統的に付かない。

  これやってみ?面白いよ。
  >>x=[1,2,3,4]
  >>x.push x
  x,y = y,x で変数の内容を交換できたり

  x ||= 2 とかやると代入文でorができたり

  オブジェクトの属性に対する代入はメソッド呼び出し。

  freezeメソッドで変数を"凍結"=代入しようとするとエラーになる

  等しいと言うこと
    ライプニッツの原理
ある”もの”に対するどんな質問に対しても同じ答えが返ってくるのならそれらの”もの”は等しいと言える
    Rubyでも考え方は同じ「区別できないものは等しい」
    ただし、いろいろな「等しい」のレベルが用意されている
    == , equal?, === それぞれで「等しい」の定義は違う。
    === は「等しい」なのか?
    (1..3) === 2 #=> true
    (1..3) === 4 #=> false

    あらい:これは「イコール」じゃなくて「マッチ」と読むべき
    /abc/ === 'aaabccc' #=> true
    =~との違いはインデクスを返すかどうか

    ダックタイピング


  dupとかcloneはディープコピーしてくれない。
  ※裏技
    >>e=Marshal.dump d
    >>Marshal.load e

橋本発表

  WAVEの読み書き
  arduinoの紹介&エレドラつくってみた

あらいさん発表

  Egaliteライブコーディング

  Rails嫌いなので独自フレームワーク作った。(Rails3.0になったら使うかも)

  ブログアプリ

  start.rbにサーバ起動時の処理を書く。これを走らせるだけで一応サーバ起動。
  HTTPDとのやり取りはRack経由
  DBとのやり取りはsequel経由

  sequelでマイグレーションスクリプト書けるけど今回はCreate文直書き。
  main.rbにコントローラを書く
  メソッド名が自動的にURLにマッピングされる
  メソッドの戻り値がレスポンス(ハッシュを返すとテンプレート内の変数に展開される)

  Model[id]でDBからレコードを取ってこれる。
  コントローラのなかでform()とよぶとフォームのHTMLを作ってレスポンスに入れられる
  form(model)でmodelの構造が自動的にformにつくられる。
  form.textarea(:member)でmemberに対応するinputがtextareaに
  form.text(:member)でmemberに対応するinputがtextに
  update_withメソッドでCGIがわで受け入れるpostを制限できる。

  TableHelper
    リストを取ってテーブルにする(table_by_array)
    テーブルはVIEWなのでコントローラに入れるかどうかは賛否が分かれるところ

  テンプレートはコントローラ名_メソッド名.htmlと同じものが自動的に適用される

*1:2009/05/18 スライドへのリンクを追加しました