January 24, 2009

第5回Smalltalk勉強会に行ってきました

第5回Smalltalk勉強会に行ってきました。
制御構造を自分で作ってみるというのが今回のテーマでした。
僕はまだまだ Smalltalk のスキルが足りてないので、if 文を書いてみたり Smalltalk のソースを読んだりしてました。
他の人は GOTO っぽいものを実現したり、C の for 文みたいなものを作ったり(continue も break もある!)してました。

Smalltalk の if 文の書き方がなかなかおもしろくて、例えば以下のような Ruby コードが、

if a > 0
  ごにょごにょ
end

Smalltalk では以下のような感じになります。

(a > 0) ifTrue: [
  ごにょごにょ
]

(a > 0) の結果は True クラスもしくは False クラスのインスタンスになります。
あと、Smalltalk では [ 〜 ] がブロックの定義で、引数をとる場合は [:foo | 〜 ] というふうに書きます。
True クラスと False クラスには ifTrue: というメソッドが定義されていて、それぞれ以下のような実装になっています。

True ifTrue:

ifTrue: alternativeBlock
  ^alternativeBlock value

False ifTrue:

ifTrue: alternativeBlock
  ^nil

ブロックの value メソッドを呼ぶとそのブロックが評価されます。
Ruby の Proc#call みたいなものだと思います。
True ifTrue: は引数として渡されたブロックを評価し、False ifFalse: は何もせずに nil を返すだけです。
非常に単純ですね!

Smalltalk で「if 〜 else 〜 」みたいなコードを書きたいときは ifTrue: ifFalse: メソッドを使います。
例えば以下のような感じになります。

(a > 10) ifTrue: [
  ごにょ
] ifFalse: [
  にょご
]

実装はそれぞれ以下のようになっています。

True ifTrue: ifFalse:

ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock
  ^trueAlternativeBlock value

False ifTrue: ifFalse:

ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock
  ^falseAlternativeBlock value

これも非常に単純ですね!

他にも and:or: といったメソッドがあって、これを使うと Ruby みたいな if 文が書けます。

(a > 1 and: [a < 4]) ifTrue: [
  Dialog warn: '1 < a < 4'.
]

and: の実装は True クラスと False クラスでそれぞれ以下のようになっています。

True and:

and: alternativeBlock
	^alternativeBlock value

False and:

and: alternativeBlock
	^self

また、or: の実装は以下のようになってます。

True or:

and: alternativeBlock
	^self

False and:

and: alternativeBlock
	^alternativeBlock value

あ、そうだ、Smalltalk では ^ が Ruby でいうところの return を意味します。

あとは、Collection クラスもなかなか面白いです。
do: メソッドが Ruby の each に相当する感じですかね。
コレクションを普通にループしたい場合は以下のようにします。

|collection|

collection := OrderedCollection new.
collection add: 'foo'.
collection add: 'bar'.
collection add: 'jugyo'.

collection do: [:each|
  Dialog warn: each.
]

Ruby っぽいですね!
というか逆で、Ruby が Smalltalk っぽいんですね。

Collection クラスには collect:select:inject: なんかもありますよ。

December 24, 2008

Rails勉強会@東京第36回に参加してきました

Rails勉強会@東京第36回 に参加してきました。

あとで書く。

詳細なレポートはこちらをどうぞ。
Rails勉強会@東京第36回に行ってきた – なんとなく日記

前半セッション – Cucumber

Cucumber はテストツールのようです。
自然言語でテストを書くことが可能だそうです。
日本語でも書けるらしいです。
自然言語といっても正規表現でマッチさせてるだけらしいです。
自然言語で書ける、さらに日本語で書けると何が嬉しいのかというと、プログラムがわからない人にも理解できるテストを作成できることなんだと思います。
「システムがこのように動作する」という仕様そのものがテストケースとして動作するイメージでしょうか。
これがその通りに実現すれば実に素晴らしいですね。

Cucumber では Webrat というライブラリを使って実際にテストを動作させています。
僕はこの Webrat のほうにすごく興味を持ちました。
Webrat については以下の記事が詳しいです。
Webratがスゴい(続:Cucumberがアツい) – moroの日記
えーっと、要するに Webrat を使うと Web アプリケーションのテストが簡単に書けるみたいです。
例えば、clicks_button("送信") と書くことで「送信」ボタンを押したときの挙動を再現できるとか、なんかそういったものらしいです。
僕は Web アプリのテストによく Selenium IDE を使ってますがあんな感じでしょうか。
Selenium は実際にブラウザを動かしてるので、厳密に言うと Webrat とはちょっと違いますが、あんな感じのことを Ruby だけできるということなのであればかなり便利かもしれません(ていうか mechanize 使えばできるか)。

後半セッション – Merb

Merb というか DataMapper の説明でした。
DataMapper は ActiveRecord に比べていろいろ書きやすそうです。
検索メソッドも簡単で、取っつきやすい感じです。
ActiveRecord は :conditions => ... なんて書かないといけないのがプチストレスなんですよねぇ。
DataMapper は全体的に見て ActiveRecord よりも楽に使えそうな印象です。
ActiveRecord を理解している人であれば DataMapper を使い始めるのは簡単だと思います。
でも DataMapper にも問題がないわけではなくて、バグがあったりあやしい動きのところがあったりして実用に耐えるかどうかはまだ微妙みたいです。

その他

角谷さんの「実践Rails」の話も聞きたかった。

ていうか、
MerbはRails3にマージされる事になった – Hello, world! – s21g
らしいです(ビックリ〜)。
OR マッパーとかどうなるんですかね。
Merb 調べないとなぁ〜。

第4回Smalltalk勉強会に参加してきました

第4回Smalltalk勉強会に参加してきました。
12月19日(金) に株式会社豆蔵で行なわれました。

あとで書く。

いや〜、面白かったです。
いろんな Smalltalk 処理系を見れて非常に楽しかったです。
ていうか Smalltalk 処理系多すぎ(笑)
でも見た目はどの処理系も Squeak に似てるんですねぇ。
Squeak がそれほど昔と変わってないということなんですかね、見た目に関して。

阿部さんのプレゼンが熱くて良かったです。
Smalltalk に対する情熱がビシビシ伝わってきました。

いろいろなSmalltalkでフィボナッチベンチ

梅澤さんによる、各処理系・言語によるベンチマークの結果が非常に興味深かったです。
ていうか VisualWorks 早すぎ。
それに比べて Squeak はかなり遅くて、Python(3.0) はもっと遅くて Ruby はもっともっと遅い。
Smalltalk の古い VM でも Python や Ruby なんかよりも断然早い。
梅澤さん曰く、VisualWorks の VM はものすごく最適化されているらしいです。
その技術が Java にも使われているとこのこと。
Squeak が若干遅めなのは VM のポータビリティを重視しているかららしいです。

いまやマシンの性能が非常に良くなっているので、遅いスクリプト言語でもあまり遅く感じなくなってるんですかねぇ、僕たちは。
ちょっと Smalltalk を使い込んでみて体感でどのくらいスピードの差があるのか確かめてみたくなりました。

GNU Smalltalkの紹介

林さんの GNU Smalltalk の話も興味深かったです。

GNU Smalltalk ですが、そこそこ動くみたいです。
X Window を使ってクラスブラウザも起動できるようです。
C 言語で書かれたプログラムとの連携もできるようになってるらしいです。

あとで Ubuntu にインストールしてみるつもりです。

November 20, 2008

第3回Smalltalk勉強会に参加してきました

第3回Smalltalk勉強会に参加してきました。

あとで

書く。

追記

風邪でダウンしてました。
PC のディスプレイを長く見てるとだんだん気持ち悪くなってくる、といった状態でした。

さて、Smalltalk 勉強会なるものに参加してきました。
実は僕、昔から Smalltalk のファンなんです。
オージス総研のサイトにオブジェクトの広場というコーナーがあるんですけど、そこに梅澤真史さんによって書かれた Squeak(Smalltakl の処理系の一つ)の記事があって、それを読んで勉強してました。
Happy Squeaking!! -オブジェクト指向再入門

今も Seaside というフレームワークの記事が載ってたりします(これはそのうち読む予定)。
Seaside へ GO!!(第1回)

あとは、Smalltalk 界隈では有名な青木淳さんのサイトにあるドキュメントもだいたい読んでるはずです(あ、でも難しいところは飛ばしてるかも)。
Smalltalk Idioms

青木さんは最近本も出してますね。

Smalltalkで学ぶオブジェクト指向プログラミングの本質 Smalltalkで学ぶオブジェクト指向プログラミングの本質
青木 淳

日経BP社 2008-07-24
売り上げランキング : 46290

Amazonで詳しく見る by G-Tools

Smalltalk 勉強会ではこの本をテキストとして進めていってるみたいです(ちなみに勉強会の当日僕はこの本を会社に忘れました…)。

(続く)

October 27, 2008

Rails勉強会@東京第34回に参加してきました

後で書く。

追記

Rails勉強会@東京第34回に参加してきました。

勉強会と呼ばれるようなものに参加するのはこれが初めてです。
いやー、行ってよかったです。

勉強会の前半は Yuumi3 さんの「Scaffoldの半歩先へ」という Rails 初心者向けのセッションに参加しました。
Yuumi3 さんは Ruby on Rails のセミナーやってたり、Gauche on Rails なんかも作っていたりするすごい人です。
そんな人に教えてもらえる勉強会っていいですよね。
教えてもらってばっかりじゃだめだと思うんですが、まだまだ僕は初心者です。

やっぱり Ruby とか Rails にもっとコミット(ソースをコミットするとかじゃなくて)していかないとだめだなぁ、と思いました。
だって、知れば知るほどおもしろいですからね、Ruby も Rails も。
(ちなみに、PHP は知れば知るほど嫌いになる言語な気が最近すごくしてます)

Rails や Ruby は、ただ使い方を覚えるだけじゃなくて、その思想を理解する必要があると思うんですよねぇ。
Ruby や Rails の目指していることろって、如何にスマートに問題を解決するか、ってところだと思うんですよ。
実際に Rails でバリバリ開発している人の話を聞いてると、そういった思想とか考え方みたいなものがすごく伝わってくる気がするんですよね。
こういうのが勉強会のいいところなんだなぁと思いました。

勉強会の後半は Yugui さんによる「Railsのリファレンスを全部読む」というセッションでした。
話のスピードにちょっとついていけないところもあったんですけど、Yugui さんの独り言みたいな喋りともろはしさんの親切な解説がなかなか良かったです。
「リファレンスを全部読む」っていうのは重要だなと思いました。
全部暗記しなくとも、確かこういうのがあったなくらい思い出せるだけで全然違ってくると思います。

初めての参加でかつ知ってる人もいないのでドキドキしましたが、まあ、そんな緊張する必要もなかったな、と思いました。
勉強会行きたいけどなんかドキドキするなぁなんて思って躊躇している人がいたら僕に連絡してください。
一緒に行きましょう。

追記

懇親会にも参加しました。
8人くらい来てました。
Mac と iPhone の話題で結構盛り上がってました。
MacBook と iPhone 欲しくなりました。
やっぱり新しい MacBook かっこいいですねー。
あと、id:willnet さんと話ができてよかった。