2007年9月30日日曜日

selfとsuper その2

「superはなぜレシーバーオブジェクトのsuperclassじゃないのか?」
という初めてSqueakを勉強したときに思った疑問は先日再び発生.

なぜsuperは「実行中のメソッドの属するクラスのスーパークラスから始める」なんだろうか?

その理由がSqueak by Example のp.100に書いてありました.
なるほど・・・.

PDFはフリーなので読んでみてください.

Squeak By Example
http://news.squeak.org/2007/09/14/squeak-by-example-now-published/



最近「なぜ?」が増えてきたような.
もっとSqueakが自由自在に使えたらな・・・.

その前にアルゴリズムを勉強しないといけないかも・・・.

2007年9月27日木曜日

Squeakでcdr?

関数型言語はぜんぜん書けませんが,最低限の機能からいろいろ作るところは何かかっこいい気もします.(Squeakももちろんかっこいいです)

ふとSqueakで関数型言語で有名なcdrをするにはどうするか.
相変わらずあやしいcodeかもしれません.

#(1 2 3) atButFirst "#(2 3)"

#(1 2 3) allButFirst "#(2 3)"

結果的にはこれでよし.

SequenceableCollection>>allButFirst は SequenceableCollection>>copyForm:to:を使っているみたい.

これはcdrと言えるのかな?

もう眠たいので今日はここまでにしようと思います.

sumimさんより指摘があるように,atButFirstではなく正しくはallButFirstです.

2007年9月26日水曜日

self と super

selfとsuperを考えると改めてSqueakというのは奥が深いと思います.

普段なんとなく使っていますが,意外に難しい.
とりあえずSqueakのself と superをしっかり理解することに.

superとselfは同じオブジェクト.
なのでsuperもレシーバーオブジェクトを参照しているのですが,selfとの違いはmethod探索ときに「実行中のメソッドの属するクラスのスーパークラスから始める」ようです.

Squeak by Exampleとか自由自在Squeakに載っています.(こういうことを書くのはもしかして著作権違反?)

なんとなくsuperをレシーバーオブジェクトのsuperclassを示すものと勘違いしてしまうので注意しないと・・・.(はじめてのときはそう思っていた)

superの「実行中のメソッドの属するクラスのスーパークラスから始める」という仕様はsuperの使い道がmethodの再利用だからなのでしょうか?



他のOOLはどうだったか調べてみよう.


どうでもいいですが,TwoPTextEditerのLinkを直しました.
TwoPTextEditer0.01.st

2007年9月21日金曜日

Magma

SqueakでDBを扱いたい!ということで,Magmaというオブジェクトデーターベースを使ってみました.
日本語も何もパッチを当てずに保存できるのでびっくり.

僕のやりたいことができそうです.

参考にしたのはSqueak Wikiで

Magma
http://wiki.squeak.org/squeak/2665

です.

英語なので,ちょっと抵抗があったのですが扱い方も簡単.
(もし間違った説明をしていたら指摘してください)


mypath := FileDirectory default fullName. "保存先のディレクトリパス"

"リポジトリを作成"
MagmaRepositoryController
create: mypath
root: Dictionary new.

"ローカルでセッション開始"
mySession := MagmaSession openLocal:mypath.
mySession connectAs: 'ringo'.

"コミット"
mySession commit:
[ mySession root
at: 'persons'
put: (OrderedCollection with: ('りんごです')) ].

"データの取り出し"
mySession root at:'persons'.

"セッションを閉じ,リポジトリも閉じる"
mySession disconnect; closeRepository.

これで僕の大学での仕事が楽になりそうです.

ただここで思ったのはrootでDictionaryとして作ったこと.
Dictionaryは順序がないので・・・.

こんなRubyみたいに順序付きのDictionary(OrederedHash)があれば,いいのにと思います.
こんど作ることができないかチャレンジしたいと思います.


MagmaCollectionというのがあるみたいです.
詳しくはまた後日.

SquekaとRuby [Array編]

SqueakとRubyは僕は親戚同士としていつも扱っています.(勝手にそうするな!と思う方には申し訳ありません)

時と場合によってその二つを最近使い分けないといけない状況があったりするので,Rubyを復習しているのですが,これがなかなか忘れていて困っています.

今日はArrayのメモ

Squeak

x := #(1 2 3).
x at:1. "1"

Ruby

x:=[1,2,3]
x.at(0)

Rubyは0から始まるw

Squeakはやっぱりすごいです

先日大学の他の研究室でSqueakについて話をしました.

その研究室の先生はSqueakがだいたいどういうものかは知っていましたが,実際に実演しながら話をしたら,かなりいい反応でした.

そこで思ったのですがSqueakは

Squeak => 教育用プログラミング環境らしい => Etoys

という感じでやはりEtoysというイメージが多いみたいです.

確かにSqueakにEtoysはあり,売り物にしていますがそれだけではないのに・・・.

大学でSqueakを話していると一番反応がいいのはCodeがすべてみれること.
そして気にくわなければ変更可能なこと.
Squeakはものすごい勢いで更新されていること.

大学という環境から考えるとEtoysよりそっちの方がやはりいいかもしれませんね.

「入門用Blogでも作ったら?」とか言われましたけど・・・.
う〜ん,どうしよう・・・.

2007年9月20日木曜日

thisContext

Squeakには6つの疑似変数があります.

self super true false nil thisContext

問題はthisContext .

未だに僕には使い方が分かりません.
このあたりがまだまだ未熟な証拠かもしれません.

2007年9月18日火曜日

Squeakと正規表現 その2

先日同様Squeakでの正規表現パッケージを探索してRegular expressionというのを発見.
Squeak3.7用?とみたいですが,なんとか3.9でも動きました.(これは大丈夫なのか?)

http://wiki.squeak.org/squeak/558

なんだか不安です.
このまま使い続けても大丈夫なのか.

Min/Max Quantifierとかが使えるのでいいですね.
個人的にはVB-RegexにMin/Max Quantifierが使えたら最高なのですが・・・.(本当に使えないのか?)

Squeak3.9での正規表現についてご存知なかたがいましたら教えてください.

Rubyでやるか,SmaCC登場なのかな.

2007年9月15日土曜日

オープンソースカンファレンスとは? その後

オープンソースカンファレンスについていろいろ悩みましたが,いろいろな人の情報によりそれなりに行くことを決意しました.

いろいろと言い話が聞けるといいなと思います.
ちょっと心配なのは話についていけるか,何事もチャレンジということで.

Squeak,Ruby,PHP,MySQL,Xoops,Ploneを中心に情報が得られたらいいなと思っています.
まずは東京へいく,資金を.

大学生最後の年を有意義に過ごせそうです.
(大学院にいってもSqueakはもちろん使いますけどw)

オープンソースカンファレンスとは?

2007年9月14日金曜日

Squeakの本

「Squeak By Example」というSqueak入門書が公開されました.
PDFだと無料?のようです.

特にこの本はSmalltalkを使ってのプログラミングについて書かれています.

Squeakの解説書はいろいろありますが,この本も翻訳されたらいいなと思います.

PDFもいいですが,やはり解説書は本の方がいいのでさっそく注文してみました.
はやく届くといいな.


Squeak By Example
http://news.squeak.org/2007/09/14/squeak-by-example-now-published/



2007年9月7日金曜日

年度を計算するには?

年度を計算するのが卒研で必要になったので,プログラムできない学生になり考えてみました.
以下のプログラムは一応日本の年度の定義に対応するものです.
言語はSqueakです.

check1 :=DateAndTime now.
check2 :=(check1 asYear) + (Year year:1).
check3 :=DateAndTime year:(check2 year) month:4 day:1.
check4 := check2 daysInYear.
(check3 - check1)days asInteger <= check4
ifTrue:[^check1 year]
ifFalse:[^ ((check1 asYear) - (Duration days:365))year. ].

こうやって自分が書いたプログラムをみると自分ってプログラムできない人だな・・・って思い寂しい気持ちになります.

もっとすっきり書けないものなのか.
アメリカだと年度の定義はどうなんだろう・・・.
アメリカの学校は9月はじまりだけど,それが年度と直結していない様子.

年度って謎ですね.

追記:匿名さんからのコメントでワンライナーなcodeを教えていただきました.
がんばって勉強しなくては.

2007年9月4日火曜日

オープンソースカンファレンスとは?

オープンソースカンファレンスというイベントを昨年の秋に知って,その当時は「そんなのがあるんだ〜」という感じで過ぎていたのですが,今年はそれにいってみたい.

でもよくわからない.
何がわからないかというと,参加の仕方.

学生でも参加できるものなのか?
セミナーはどうやったら受けられるのか?
何か参加資格はあるのだろうか?

Webサイトを見てもよくわからない.

わかっているのは開催日と場所だけ.
困ったものです・・・.

とりあえず,もし参加できるならSqueak,Ruby,Xoopsのセミナーを受けてみたい.
まずは東京へ行く資金をためねば・・・.

というかいまいちまだカンファレンス自体もつかめていないかもしれない・・・.
身近にそういうことに詳しい人がいないので困りました.

http://www.ospn.jp/osc2007-fall/