2008年11月26日水曜日

オブジェクト指向

最近,オブジェクト指向の誕生などについて書かれている本を少し読んだのだが,少し疑問に思った.

今,世の中で言われているオブジェクト指向とはどんなものを言うのか.
なんだかよくわかなくなってきました.

さらによくわかないことを書くと

  1. 元祖オブジェクト指向言語とは
  2. オブジェクト指向とは
  3. オブジェクト指向プログラミングとは
  4. オブジェクト指向言語とは

3はプログラミングテクニックのようなもので,4は3が容易にできる言語と理解しているのですが,いまいちしっくりこない.
オブジェクト指向とはどのようなものから考えられたものなのか.

はっきりと答えがわからないことに,嫌になってきそう.

今現在Squeak,Ruby,Objective-Cを勉強しているが,やはり答えはみつからない.

Alan Kayが考えたものこそが,オブジェクト指向なのか.
まずは,sumimさんのページをじっくり読んで勉強してみよう.

「オブジェクト指向入門」も読んでみるのもいいかもしれない.


オブジェクト指向の概念の発明者は誰ですか? - sumim’s smalltalking-tos

2008年11月24日月曜日

Squeak Carbon OS-X VM 3.8.19beta2U

先日のMLにこんなのがありました.

[squeak-dev] Squeak Carbon OS-X VM 3.8.19beta2U ships.
http://lists.squeakfoundation.org/pipermail/squeak-dev/2008-November/132403.html

新しいVMが出たんだなって思ったら,4GBのメモリを搭載した場合の問題を解消したVMということ.
かなり英語には自信がないので,ググっていたら,

ぐる式のページにも書いてありました(さすがです).
Squeak VM 3.8.19b2 - ぐる式

ちょうど研究室の,MacProがそれに当たるので,使わないと.

僕が個人的にもっているMacはCore Duoなのでメモリが4GBなんて話ありませんね.

2008年11月20日木曜日

Rubyのスコープ・制御構造

while や for がスコープを作らないのに対し、loop や each などのイテレータはスコープを作ります


loopやeachはスコープあるんですね・・・.


(1..5).each do |i|
var = true
end
p var

$ ruby test.rb
test.rb:4: undefined local variable or method `var' for main:Object (NameError)



Squeakでいうブロック変数になると考えれば良さそう.

同じような結果にするには・・・.

(1 to: 5) do:[:v |
| var |
var = true.].
var " popupが表示され,var appears to be undefined at this point. Proceed anyway"





trap::スコープ、制御構造 - Rubyリファレンスマニュアル

Ruby on Rails

昨日,Railsを使ってWeb APを作ろうと思って最新版にしてみたのですが・・・.

$ sudo gem update --system
$ sudo gem install rails
$ sudo gem update rake
$ sudo gem update sqlite3-ruby



これで僕もRails2.0だ!って喜んでいたのですが,仕様が結構変わっている?

一番の問題はscaffoldでモデル名のあとにフィールド名とデータ形式を入力しないといけない.かなり扱いづらい.

そのため,古いのに戻すことに(他にも色々変わっていると困るので).

バージョン確認は以下のコマンド

$ rails --version
Rails 1.2.6



さて,久しぶりRubyの勉強をしないといけませんw


2008年11月18日火曜日

Squeak 3.9とOmniBase

最近,忙しくMLを読んでいなかったのですが,梅澤さんによるSeasideの解説の次回はDB接続らしい.
Seasideのアプリを作るのは凄く楽しいのだが,やはりDBとの接続はちょっと大変.
MLにはそれに関連したイメージがお試しで配布がされているが,それが凄いと思った.

[Squeak-ja: 4068] 「SeasideへGO!!」の第三回


DBと言っても,データを保存する方法はさまざまな方法があるので,それをいろいろ試せるようになっている.

また日本語を扱うためのさまざまなパッケージが同梱されている.
(それらはSqueakSourceJでダウンロードできるようだ.すごいな・・・)


一番の驚きはOmniBase.
Squeak3.9でもきちんと動作するんですね.
大元のOmniBaseは全く更新されていないのに・・・(元がしっかりしているのかな,それかOmniBaseJがきちんと改善しているのかな).

2008年10月29日水曜日

クラス変数

勉強があまり進んでいないObjective-Cについて.

Objective-Cにはクラス変数がない.

ちょっと驚いたのですが,staticで宣言することで,定義ファイルの中だけ有効な変数を宣言できるので,大丈夫.
注意としては,継承した際にクラス変数は有効になるべきなので,アクセサを宣言して解決をすればいいことが分かりました.

Squeak Smalltalkのクラスインスタンス変数とクラス変数を簡単に実現できそうだ.

Objective-CってSqueakよりもちょっと変な感じに思えてくる.
でも,面白そう.


2008年10月26日日曜日

就職活動

大学院の修士などあっという間に終わってしまうということを実感する.

もう就職活動をしないといけない.
さて,どういう企業に入りたいのか.

  • Web関係を研究しているので,できればそういう仕事に付きたい
  • プログラミング言語って本当に面白いと思うので,いろいろ勉強できたり,実際に使えるような現場があれば,いいな
  • 新しいことは好きだから,そういうのを積極的に取り組めそうなところ
  • さらに言えば,Macでもいい企業


まぁこんな理想をいっていますが,
  • 実際RDBはほとんど使えない
  • メジャーな言語?(C,Java,C++,Python)は使えない
  • かなりのネガティブ
  • 大半はWindowもしくはLinux



ずいぶん甘えた理想を語ってしまったw

できる限り,理想にそった企業に入れればいいなって思いますけど,本番とかに弱いのでw

高校,大学の経験からいくと,中に入ってがんばる性格みたい.
でも,がんばろう.

Squeakは就職してもできれば,趣味で使いたいな.

2008年10月9日木曜日

fixTemps

Squeak SmalltalkでY-combinatorを実現するには,どうすべきか.

ブロックはクロージャではないので,sumimさんのサイトを参考にするとcopy fixTempsを使えばできるようだ.
copy fixTempsで自分と環境のコピーができるのはいいだが,fixTempsだけだと何なんだろう.
調べなければ・・・.

それにしても,Squeakもそろそろクロージャにしないのかな.

fact := [ :n | n = 0 ifTrue: [ 1 ] ifFalse: [ n * ((fact copy fixTemps) value: n - 1) ] ].
fact copy fixTemps value: 10.

2008年9月1日月曜日

seaBreeze

umejavaさんの[Seaside] seaBreeze for Seasideより
http://ani.blueplane.jp/ume/130

最近,研究がまとまっていないので,Webブラウザ上からWebを開発できるアプリでも開発・研究をしてみようかなって思っていたのですが,もうすでに開発されているんですね.
やっぱり世の中同じことを考える人は多いようです.
(ただ,僕の場合プログラミング技術と知識がないから,これほどのものを超えるのは相当難しいだろうな・・・)

それにしてもSmalltalkerってほんとうにパワフルだなって思います.

2008年8月25日月曜日

Google Map API

大学のある方から頼まれて,学内の食堂を状況を表示するGoogle Mapを作ってみました(全然対したプログラムではありませんが・・・).

JavaScriptはほとんど書いたころがありませんが,簡単に作れました.
このアイコンはお気に入りです.

JavaScriptもAjaxのおかげで,見直されてよかったです.
Googleってすごいな〜.


2008年8月21日木曜日

円周率

C言語のMath.hに定義されている円周率は

#define M_PI 3.14159265358979323846264338327950288



となっている.

Squeak Smalltalkでは

Float pi ==> 3.141592653589793



VisualWorksだと

Float pi ==> 3.14159

Double pi ==>3.1415926535898d



DoubleというのはVisualWorksしかないクラスのようだ.

すこし分からないのが,Squeak SmalltalkのFloat piは3.14159265358979323846264338327950288と定義されているのだが,print itではきちんと表示されない.
何か別の方法を探さないといけないようだ.

時間がないので,またあとで.

2008年8月19日火曜日

まとめサイトについて

前から考えているSqueak Smalltalkのまとめサイトについて.

まとめサイトを作るにはやはりWikiみたいのがいいと思うのだが,実際やはり自由度が少し足りない事や,複数でのページ管理がWikiNameだけだというのが非常に問題だ.

大学ではそういうことを解決するような仕組みを研究・開発をしているので,それを実際に利用してみる(むしろそうした方がもっと研究が進むような気がする)のもいいのだが,もう少しまとめサイトを具体的にどうしたいのかを考えて作りたいと思う.

オブジェクト指向入門 第2版 方法論・実践 いよいよ発売へ

Potential: オブジェクト指向入門 第2版 方法論・実践 いよいよ発売へを書いたついでに・・・.

最近,オブジェクト指向の本について話題を見かけますが,僕はそのような本を読みましたが,読むより手を動かしながらオブジェクト指向をなんとなく理解しました.
用語というのは知らない人間にとっては魔法の言葉であって,経験こそが一番理解へ道だと思います.

Squeak SmalltalkやRubyと講義でJavaをふれながら,雰囲気はわかったと思います.

実際,しっかりと「オブジェクト指向は○○だ」とか,「開発プロセスと○○だから」ということは知りませんが,僕はまずはそれでいいと思うのですが,どうでしょう.

平凡な学生が考える幼稚な考えかもしれませんが・・・.

2008年7月31日木曜日

Objective-Cを勉強開始

Objective-Cを勉強しています.
SmalltalkっぽいC言語とかよく言われていますが,似ているようで似ていないなと思ってしまいます.

おそらくクロージャがない?
何か落ち着きませんね・・・.

forとwhileしかない?
えー.

Smalltalkっぽく書けるC言語ととらえるべきなのかな.

それにしても「この言語なら書ける」という言語が欲しい.
この夏はSqueak Smalltalk,Ruby,Objective-Cを勉強しないと.


2008年7月30日水曜日

BlackBookを読んで

BlackBookを読んでいたら,Smalltalkイディオムが欲しくなってしまいました.

イディオムはWebでも見れますが,やはり紙で読むというのはとても効率がいい勉強ができる気がします.




2008年7月29日火曜日

Squeak Smalltalkで順序付き辞書 改良

以前書いた順序付き辞書をちょっとだけ改良(removeを実装しただけw).

う〜ん.
まだ僕のレベルだとエレガントには書けないな・・・.

Collection subclass: #OrderedDictionary
instanceVariableNames: 'keys content'
classVariableNames: ''
poolDictionaries: ''
category: 'Ringo-Collection'

OrderedDictionary methodsFor: 'enumerating'
do: aBlock
keys do:[:v | aBlock value:v].

OrderedDictionary methodsFor: 'initialize-release'
initialize
keys := OrderedCollection new.
content := Dictionary new.


OrderedDictionary methodsFor: 'accessing'
at: key
^ content at: key! !

OrderedDictionary methodsFor: 'accessing'
at: key put: value
content at: key put: value.
(keys includes:key) ifFalse:[
keys add: key.
].
^ value.

OrderedDictionary methodsFor: 'accessing'
keys
^ keys

OrderedDictionary methodsFor: 'accessing'
values
| out |
out := WriteStream on: (Array new: keys size).
keys do:[:v |
out nextPut: (content at:v)].
^ out contents

OrderedDictionary methodsFor: 'accessing'
removeKey: key
keys remove: key.
content removeKey: key.



実行すると


x := OrderedDictionary new.
x
x at:#one put:1.
x at:#two put:2.
x values
x do:[:v | Transcript cr;show:v].

==>one
==>two

x removeKey:#one.
x removeKey:#two.
x ==> an OrderedDictionary()



2008年7月7日月曜日

Squeak Smalltalk

sumimさんの日記により

Squeak は、Squeak Etoys なのか Squeak Smalltalk なのか区別しましょう

Etoys本がでるのはいいのですが,それがSqueakの全てと誤解されることが多く悲しい限りです.
というか最近人と話していると

Smalltalk > Etoys > Squeak Smalltalk

って感じの知名度のようです.
これは問題ありかなっと思ってしまいます.
Smalltalk by Exampleみたいな本が日本でもでればいいのかな?

青木さんのSmalltalk本がもうじきでますが,新しいSqueak Smalltalk本もでるといいかも.
(梅澤さんのSqueak自由自在はとてもすばらしい本だと思っています)

Smalltalk by Example本を訳したサイトでも作ればいいのか.
まとめサイトを作ってみようかな.(問題は僕のSmalltalkの能力と文書力と英語力.とほほ・・・)

2008年7月5日土曜日

Smalltalk本

ついに予約が開始されました.
青木さんが書かれているSmalltalk本です.
欲しいです!

これは絶対買わないといけませんね.
最近お金がないのですが,必要経費としますw

「ブラックブック」いいですね.



自己適用とHaskell

最近,Haskellを勉強しているのですがようやくHaskellの世界の入り口にたどり着けたように気がします.
長かった・・・.
今ならモナドもわかりそう.
がんばるぞ.

ただ,ショックなのはHaskellは自己適用が書けないようだということY-Combinatorを書く方法を考えないと・・・.

2008年6月25日水曜日

順序付き辞書を一部作成

以前からいっていた順序付きDictionaryを一部作ってみました.
どこを継承すればいいのかわからなかったので,とりあえずObjectクラスの下で作ってみました.

なぜ順序付きSet,Dictionaryがないのか不思議です.
Set系は集合だから順序なんて必要ないということなんでしょうかね・・・.

Object subclass: #OrderedDictionary
instanceVariableNames: 'keys content'
classVariableNames: ''
poolDictionaries: ''
category: 'Ringo-Collection'

OrderedDictionary methodsFor: 'enumerating'
do: aBlock
keys do:[:v | aBlock value:v].

OrderedDictionary methodsFor: 'initialize-release'
initialize
keys := OrderedCollection new.
content := Dictionary new.


OrderedDictionary methodsFor: 'accessing'
at: key
^ content at: key! !

OrderedDictionary methodsFor: 'accessing'
at: key put: value
content at: key put: value.
(keys includes:key) ifFalse:[
keys add: key.
].
^ value.

OrderedDictionary methodsFor: 'accessing'
keys
^ keys

OrderedDictionary methodsFor: 'accessing'
values
| out |
out := WriteStream on: (Array new: keys size).
keys do:[:v |
out nextPut: (content at:v)].
^ out contents





実行すると‥‥‥


x := OrderedDictionary new.
x
x at:#one put:1.
x at:#two put:2.
x values
x do:[:v | Transcript cr;show:v].

==>one
==>two





2008年6月21日土曜日

LeopardでRails

Railsでちょっと試してみたいことがあったので,Railsを導入しようとMacportで入れようとしたら,失敗.

いろいろと調べていたら,LeopardにはRailsはそもそも入っているので思い出しました.
標準のRailsを使用する場合はMacportのRubyの環境は削除しておいた方がよさそうということ.

というのは,WeBrickを立ち上げようとしたら/opt/の方を読み込んでいたので,起動しないという問題がありました.
とりあえず,動かせるので安心です.

2008年6月20日金曜日

GNU Smalltalk と Seaside

いつの間にかGNU SmalltalkでもSeasideが対応しているみたいです.
夏休みにでも使ってみて調子がよければ,使ってみようと思います.

GNU Smalltalk

2008年6月12日木曜日

SqueakのVMについて

最近Squeakについて知りたいと思っていたら,SmalltalkのVM関連の情報がちらほら出ているようです.The Weekly Squeakに紹介されているVMを試したいと思ったのですが,そもそもSqueakのVMのsourceからコンパイルする方法すらわからないことが判明.
Linuxなら簡単にコンパイルできそうですが,Mac版VMを作成するには・・・.

最新のsourceを取得して・・・

svn co http://squeakvm.org/svn/squeak/trunk squeak-svn



readmeがあるようですけどBuild an interpreterのところで,遭難.

とりあえず,コンパイルはあきらめてInterpreter Classでも眺めて勉強していよう.


Qwaq developing new fast Smalltalk VM - The Weekly Squeak


2008年6月4日水曜日

サイト名変更

サイト名を変更しました

2008年4月7日月曜日

行列

ちょっと休憩中.

さて,大学院生になりました.
Squeakはもちろん使い続けようと思います.

今年度からコアなところアルゴリズムなどについてSqueakを使って勉強をしたいと思います.

そこでとりあえず数学を行列計算を.
Matrixってクラスが用意されているというのがいいですね.
わかりやすい.

x := Matrix rows:2 columns:2.
x atColumn:1 put:#(1 2).
x atColumn:2 put:#(3 4).
x ==> a Matrix(1 3 2 4)
x := x + x. ==> a Matrix(2 6 4 8)




簡単な計算ができました.


2008年3月29日土曜日

文字列処理

Python,Rubyでは次のことが書けるらしい.

>> 'test'*2
=> "testtest"



研究室のPythonを使っている先輩に教えてもらい.
さらにRubyはできることを知り,ちょっとショック.

ちょうどsumimさんのBlogでも文字列について書かれていたので読んでみると,やはりSqueakではできないようだ.

sumim - [OOPL] Squeak Smalltalk にあって Ruby にない文字列操作

同じことをしようとSqueakで書いてみることに

s:='test'.
x := WriteStream on:''.
2 timesRepeat:[x nextPutAll:s].
x contents. 'testtest'



これでいいのかな.
もう少し考えてみよう.

2008年3月19日水曜日

プール辞書の続き

前回書いたプール辞書についてみねこあさんとUmejavaさんがいろいろ書いてくださったので,本当にうれしい限りです.

[Smalltalk]プール - みねこあ


各クラスは通常2つのプール——Smalltalk辞書と、クラス変数が在るプール を持ち、さらに セレクタ poolDictionaries: で指定したプールを オプショナルで持つことが出来る



えっと,SmalltalkもSystemDictionaryという辞書から作られている.

Smalltalk at:#Smalltalk "print it =>" a SystemDictionary(lots of globals)



クラスから他のクラスについて問い合わせができるのは,Smalltalkというプールがあるのでいうのは納得です.

クラス変数があるプールを持つ



これは,じっくり読むとすごい発見.何気なく使っていますが,裏ではそういう風になっていると考えればいいのですね.

とても勉強になりました.
ただ,なかなか簡単には使うことができなさそうな気もしました.
確か自由自在でも慎重に使うようにということが書かれていたような.

そういえば,TextStyleとTextとかもTextConstansというプールを持っているようですね.

最近,Squeakを曖昧に勉強するのではなくもっとしっかりと勉強しようと思っているのですが,まだまだ入門レベルだな.


2008年3月15日土曜日

プール辞書

ふと,Squeakのプール辞書ってどう使うのか考えてみたのですがよくわかりませんでした.

実際,インスタンス変数,クラスインスタンス変数,クラス変数,一時変数,ワークスペース変数,グローバル変数はおなじみですが,ブール辞書はまったく使ったことがないです.

グローバル変数がDictionaryになったような感覚で思っているのですが,何かしっくりこない.

2008年3月11日火曜日

ガーベッジコレクション

日経Linux4月号のまつもとさんの記事でガーベッジコレクションについて書かれていました.
とても興味深かったので,Squeakについて少し調べてみようと思いました.

「Squeakの仕様を知るには?」と思い調べていたら,Squeak入門(Squeak:Open Personal Computing and Mulimedia)に書かれていました.

ちなみに英語版ならSmalltalk FreeBooksで公開されています.

FreeBooks
oe-tour-sept19.pdf


どうやら,世代別GCとマークアンドスイープのハイブリッドみたいです.
すごいですね.

いきなり難しいことをやろうとはせず,まずは自分のできる範囲から.
「1日30分Squeakを続けなさい」と自分に言ってみる.




研究室にあるSqueak入門をSqueakを知った頃に読んだときは意味不明でしたが,今読むと多少理解できるようになっていました.

読んでいたら,Squeak:Open Personal Computing and Mulimediaが欲しくなってきました.
アルバイトのお金が入ったら買おうと思います.

2008年3月7日金曜日

iPhone Developer Program

iPhone Developer Programが発表されました.

Keynoteの動画をみて,すごく感動しました.
ついに時代はここまで来たことと,それを自分の目で見れたことの喜びは何とも言えません.

ユビキタスな時代も遠くないかもしれません.

僕はiPhoneのアプリケーションは作ることはできませんが,こういうものを間接的に支援(例えばWeb上で)できるようなものを作ることができたらどれだけいいことかと思いました.





iPhone Developer Program

Traitsをやってみる

卒論が終わっても忙しかったのでなかなかSqueak自体の勉強ができなかったのですが,ようやく念願だったTraitsを使ってみました.

TraitsはSqueakで多重継承みたいなことができるようにするための仕組み?のようです.(RubyのMix-inとは違うらしい.)
本当にまだ勉強中なので実態はわからないのですが,非常に興味深いものです.
Squeak3.9から標準装備なので,使ってみました.


まずは,多重継承?(トレイトというべきなのでしょうか)するための定義を書きます.
Smalltalkおなじみの定義を書き換えます.
これは少しとまどいました.

Trait named: #Atok
uses: {}
category: 'Study-Traits'

あとはmethodを定義

Atok>>change
^ '日本語変換が得意です'


これで準備よし.非常に簡単ですね.(当たり前か)

あとはこんな感じでクラスを定義します.
Object subclass: #KanjiTalk

KanjiTalk>>henkan
^ '日本語変換は苦手かもしれません'

----

KanjiTalk subclass: #Kotoeri
uses: Atok
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'Study-Traits'

KanjiTalk>>conversion
^ '日本語変換はまぁまぁです'


ここでのポイントはuses: Atokのあたりです.
これを記述すると,Kotoeriクラスにmethodペインにchangeというmethodも表示されます.

最後に実行です.
x := Kotoeri new.
x henkan. '日本語変換は苦手かもしれません'
x conversion. '日本語変換はまぁまぁです'
x change. '日本語変換が得意です'


一応,できたようです.

ちなみにプログラムの内容は実際に思っているわけではありません.
僕もMacユーザですし,イージーブリッジが終了したのでことえりを使っています.

これでまた一つSqueakの魅力が増えました.
あとはMix-inとの違いを知ることと,多重継承で有名な菱形継承とかを調べたらいいのかな.

2008年2月27日水曜日

その気になれば

Squeakって日本語のクラス名もありなんですね.

日本語EToysで日本語のmethodを送っているので,同じ感じでクラス名も日本語で作成したらきちんと動作したので驚きです.

これを使えばオブジェクト指向の勉強にもいかせるのでは?
こういうメリットを生かして,新しいプログラミング学習方法を提案するのも面白いかもしれませんね.

ちなみに試しに作ったもの


以下の内容問題あり*1

Object>>りんご

りんご (class)>>身長
^"146cm"



そして,実行.


りんご 身長 "146cm"



それにしても,なんだか奇妙な感じですね.


以前から,bloggerでcodeを書くときに困っていたのですが,CSSで一応改善.


*1 クラスもオブジェクトなのでいいような気がしますが,やっぱりinstanceを作ってメッセージを送るほうがいいのかな・・・

2008年2月15日金曜日

Squeakに感謝

今日,卒業研究発表会がありました.
なんとか無事に終えることができました.

振り返ってみると本当にSqueakにも助けられました.
やはり来年度もSqueakを使い続けていこうと思います.

2008年1月29日火曜日

Squeakの日本語環境

Squeak3.9に正式対応した日本語環境のパッケージが公開されたようです.

僕にとっては本当にうれしいことです.
英語が読み書きできれば,本当はいいんですけどね.

最近卒業論文を書いていてSqueakの良さを再認識しています.
卒研が終わったらいろいろとSqueakについて調べようと思っています.

TraitsとかSUnitの使い方,VMについてなどなど.

それにしてもSmalltalkerの人に弟子入りしたい気分です.

2008年1月24日木曜日

メソッドの再利用

あけましておめでとうございます.
最近卒論を書くので急がしくてプログラミング言語に関して全然勉強ができていません.
卒研の発表が終わり次第,勉強を再開したいと思います.

sumimさんのblogを読んでいたら・・・

Ruby vs. Squeak SmalltalkCommentsAdd Star

Squeak3.9にはTraitsというメソッド再利用の機能があるらしい.
ちょっと調べたらかなり前から提案されているものらしく,知らない自分にちょっと失望.

僕みたいな素人にはなかなか多重継承という高度なことを使うことができないが,やはり勉強しておく内容だと思った.
以前RubyのMix-inについて勉強したので,もう一度そちらを学び直そうと思う.

オブジェクト指向についての勉強の旅はまだまだつづく.