Rubyist九州定例会のログ
自分の主観や勘違いが入っていると思う。変な書き方になってたらすみません。
Rubyist九州 090516
山崎さん発表
Rubyを「WEBスクリプト言語」として語る postscriptの衝撃 プリンタにCPUが載るのかよ! PCが機械を制御するんでなく、機械がPCの命令(モバイルコード)を解釈して自分で考える Javaの初期の目的がそうだった。(JavaApplet) モバイルコードにはセキュリティの問題が付いて回る ・security-故意の破壊から機械を守る。 電子署名とか ・safety-うっかりのバグで破壊されることから機械を守る ポインタをほぼ禁止 メモリ管理の自動化 -> コードをがんじがらめに監視する 強い型付け がんじがらめなのでJavaは楽しくない。 エラーうるさい 構文が冗長 人よりも機械のほうをむいている WEBもモバイルコードだよね CGIによってHTML+CSS+Javascriptを生成する Rubyはモバイルコード型の言語ではない Javaの逆。人間がプログラムを楽に出来るように設計されている。 セキュリティ軽視なわけじゃないよ Mix-in継承 Telescriptのラバースタンプモデル。(MagicCAPに載ってたやつ) スタンプをはっつけると機能がミックスされる Mix-inの起源はアイスクリーム いろいろ混ぜてあなた好みに Railsはmix-inを利用したwebの部品組み込みと捉えることも出来る。 DSLとしてのRuby メタプログラミングに向いている ヘルパメソッド=>HTMLをRubyでかく form_forメソッドはCSRF対策のコードも自動生成してくれる RJS=>javascriptをRubyでかく YAML=>YAMLもRubyのクラスから変換できるよ! コード生成の効率化かについて つるはしとスコップで地下鉄は作れるか PHP、eRuby=>つるはし、スコップ(原理的には可能だけどちょっとね) Rails=>重機 RubyはUnixの思想を受け継いだ、テキスト処理エンジン 言語の好き嫌い 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
あらいさん発表
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 スライドへのリンクを追加しました