2007年12月26日水曜日

今年を振り返って

今年は本当にプログラミング言語に関してはいい年でした.

プログラミング言語とはこれほど楽しいものだとは.
きっかけはやはりSmalltalkですが,そこから広がった世界はすさまじいものです.

オープンソースカンファレンスもかなり刺激になりました.
やはり名古屋から外へ出て,いろいろなものを見ることはいいことと痛感しました.

昨日から自宅を離れて,休養をしています.
これからのことを考えてみました.

大学院にいくことは決まりましたが,来年の目標をしっかりと考えたいと思います.

だけど一つ思ったことはやはりSmalltalkによって,変えられたこの考え.
来年はなにか一つでもSmalltalkに貢献したいと思います.

今年の残りの時間はいろいろと来年どうするか考える時間にしたいと思います.

とりあえず体をやすめながら・・・.


では,みなさんよいお年を.

来年はいっぱいプログラミングメモを書こう.

2007年12月15日土曜日

Squeakのcopyを学ぶ

今日もSqueakについて勉強です.(やっと趣旨らしくなってきた)

Squeakのcopyについてです.

Object>>copy
^self shallowCopy postCopy

まずはshallowCopyについて勉強していました.

x := {{'a'}}.
y := x shallowCopy.
x == y. "false"
x at:1 put:'b'.
x #('b')
y #(#('a'))


x := {{'a'}}.
y := x shallowCopy.
x == y. "false"
(x at:1 )at:1 put:'b'.
x #(#('b'))
y #(#('b'))

なるほどshallowCopyはその意味通り浅いcopyみたいですね.
deepCopyがあるので,そちらを試すと完全コピーになるようです.

ただこれはお互いに参照していたら,大変なことになります.
なのでcopyはpostCopyをオーバーライドすることで振る舞いを変更してcopyをきちんと指定するみたいです.

copyは気をつけないといけませんね.(現実世界に無いことをやっているのだから,当然ですね).
きっと僕はdeepCopyを何かと使いたくなりそうな・・・.

VisualWorksを少しながめていたらdeepCopyというmethodはなかった.正しいかもしれませんね.

2007年12月8日土曜日

Haskellのzip関数をSqueakで考えてみる

Haskellを勉強したいと思っていますが,卒研がいまいちなのであまり勉強が進んでいません.

面白い関数の一つZip関数.
Squeakでやってみたいと思います.

| x |
x :=#(1 2 3).
x with:#(4 5 6) collect:[:v1 :v2 | Array with:v1 with:v2]. #(#(1 4) #(2 5) #(3 6))

collectの引数のblockを好きなようにすれば,いろいろできそうです.

Squeakって本当にいろいろ書けると関心.

2007年12月2日日曜日

言語を学ぶのは

最近,プログラミング言語にすごく興味を持っています.

本屋へいくとさまざまな言語の解説書,入門書があります.
そんな中にいくと結局何が勉強したいかわからなくなるので,Webで言語のよさなどと調べてから勉強したいと思っています


さて最近僕が最近読み始めているBlogでは何か少しもめているようです.
Smalltalk,Objective-C,Javaについて・・・?.

しゃくしゃしてやった。OOPが解ればそれでよかった。今は反省している。 - みねこあ
Java] 元ネタ != 発明CommentsAdd Star - カレーなる辛口Javaな転職日記


僕みたいなど素人が発言するのは本当に失礼だと思いますが,もっと平和的に話せないものなのでしょうか.
なんだか少し怖いですw(ネガティブな正確なものでなんだか自分が怒られているみたいに感じてしまいます.読まなければいいと言われれば,それまでなのですが・・・)


3つとも僕としては人生の間で全て学びたい言語です.

全ての言語に関して言えますが,プログラミング言語を学ぶのは僕みたいな人にはとても大変なことです.

初めてC言語と勉強したときポインタは意味不明でした.(今も結局よくわかっていません.いろいろと個人的な理由はありますが,言い訳になるので,ただの勉強不足と言っておきます)

ポインタもわからない人間は素養がなさそうなことが書かれていることや,Javaが分からない人はプログラマーをやめた方がいいかも発言はちょっと控えていただきたい.

これから目指そうと思うのに,これはかなりの不安を感じます.

言語はあうあわないがないのでしょうか?
人間の言語でもそういうことはあると思います.

仲良く話し合えたら本当にいいですけどね.

それにしてネットのプログラマーと言われる人は本当にいろいろな言語を学ばれているのですね.
いつになったらそうなれるのか.









時よ止まってください.僕に理解する時間をください.
そして,理解するまでしからないでください.

Squeakはやっぱりすごい

BlockClosureができないことを知りちょっとショックでしたが,そんな必要はなさそう?です.
sumimさんのBlogにBlockClosureのことが書かれていました.(本当にsumimさんはすごいですね.読んでいるだけですごくためになります)

それによるとClosureComplierを入れればできるみたい.
Squeak3.9の場合はNewComplierという名前になっています.

やはり僕のなかでSqueakは一番の言語です.
ちょっと一安心.
といっても無いならないで,普通にSqueakに適用して書けばいいんですけどねw
できると思えば,またSqueak自慢ができます.

ClosureCompilerCommentsAdd Star - sumim’s smalltalking-tos

あと,sumimさんの記事によるとVisualWorksは普通にBlockClosureが使えるらしい.
さすがですね.


自宅に帰ってからやってみようと思います.

2007年12月1日土曜日

決意 Haskellを勉強することにします

BlockClosureがやはり分かっていないのでは?

最近思うのは,いつでも読めるプログラミングのメモを残そうと思ったこのBlogですが,誤った情報ばかりながすものとなっています.
こういう記事がネット全体の質を下げちゃうのでは?と思ってしまいます.(ネガティブ指向)

コンピュータを勉強する学生としていいのか?もっと基礎から丁寧に勉強しないといけませんね.

ということでまずは関数型言語を勉強することにします.
多くのことはできないのでJavaは保留.
関数型の方がこの先に役立つと思いますし,僕にとっては今優先順位が高くなりました.

さてMacPortを使ってghcを簡単に入れようと思ったのですが,エラー発生.
LeopardはX11がよく分からないことになっているので,そのせいではないかと思っています.

[追記] MacPortはあきらめ,Binary Packageで入れました

2007年11月30日金曜日

BlockContext と BlockClosure

先日do~whileについて書きましたが,すみません.BlockContext Classです.

言い訳を言ってしまうと,method finderで検索したときにBlockClosureが見つかったので・・・.
BlockはBlockContext Classです.


さてここで,不思議におもったのはBlockContext と BlockClosureとありますが,これはなんのためにあるのでしょうか.


Closureでないみたいです.
関数型言語をほとんど知らないので,ラムダとClosureをしっかり理解していませんが,Squeakのブロックがそういうものだと思っていましたが,これはどうやら間違い?なのかもしれませんね.

う〜ん,VisualWorksもそうなのかな?

さて心配する前に目の前の卒研を取り組まないと.


参考 : ど素人のためのど素人によるSqueak入門

2007年11月29日木曜日

Seaside2.8

VisualWorksでSeaside2.8を動かすと速いと思っていました,どうやら2.8そのものが早いようです.
Squeakにも2.8をようやく入れてみました.ブラウザでのHaloがかわいいデザインになっていました.
とりあえず,サイトで変更点をさらっと読んでみる.(英語だから大変w)


The new backtracking system

Backtracking is no longer done by sending #registerObjectForBacktracking: or #registerForBacktracking but by implementing the #states selector. This allowed us to simplify and improve a lot of code. It's also very similar to the existing #children. You can have a look the implementors to see examples.


#registerForBacktracking がなくなり,
WAPresenter>>states でCollectionでbacktrackしたいオブジェクトを返せばいいようです.

children風でいいですね.
2.8はとくに何も入れなくて,日本語も扱えています?

ちょっと強い記事を読んだのですが,

Squeakers' Night in 未来パーティ 2.0 - yojik no life

その中に
P.S. そんなに活用している「継続」ですが、将来廃止される予定です!!

えええ!本当ですか?
かなり困ります.

今のうちに他の継続も探さないといけないのかな・・・.

2007年11月28日水曜日

Squeakでdo~while文

Javaを勉強しています.
do~while文がありました.

Squeakでdo~whileってあるのかなって思ったので(まぁあると思いますがw),探してみました.
BlockClosureクラスだと予測.
ありましたw

(BlockContext Classでした.すみません)


counter := 0.
[counter := counter + 1.
Transcript cr;show:counter]doWhileTrue:[counter < 10].

1
2
3
4
5
6
7
8
9
10

OKですね.
ついでにBlockClosure>>whileFalse:というのも発見.
面白いですね.

2007年11月25日日曜日

オブジェクト指向をもう一度勉強する

オブジェクト指向をもう一度勉強したいと思います.

なんとなくから,しっかりとした知識にしたいそう思っているのに実行できない.
無理をしてでも,やってみよう.

ちょっと個人的な用でJavaも勉強することになった.
Squeak Smalltalk,Javaを使いながらもう一度OOLを考えていきたい.

まずは計画.

2007年11月24日土曜日

Squeakで入力,出力

あるプログラミング言語の本を読んでいたら,気がついたこと.

入門書の始めに出力と入力があるが,出力はいいとして,入力というのはプログラム初心者にとって本当はかなり高度な話ではないかと思った.


そうではあるものの,Squeakで入力した文字を出力することをやってみた.

|io|
"入力"
io := FillInTheBlank request:''.
"出力"
Transcript cr;show:io.

どっかの言語と比べると非常に簡単だ.

2007年11月23日金曜日

VisualWorksの謎 [その2] の答え

前回まで書いていた謎について,紹介してあるブログを発見.

名前空間 - VisualWorks

やはり名前空間のようです.
詳しくは紹介したサイトに書いています.
ただ途中から僕のレベルでは途中からちょっと分からなくなりました.

VisualWorksをよく分からないうちに新しいことを学ぶからでしょう.
もうちょっとスキルがついたら読もうと思います.
オブジェクト指向も最初は難しいと思いましたが,今ではSqueakのおかげで普通に使えます.(むしろ他の言語はもう忘れて・・・w)

やっぱりSmalltakは楽しい.

2007年11月17日土曜日

VisualWorksの謎 [その2]

VisualWorksも使ってみたい!ということでダウンロードしたのはいいのですが,Squeak Smalltalkとはやはりちょっと違う様子.

VisualWorksのクラス定義はCore.Timeは

Smalltalk.Core defineClass: #Time
superclass: #{Core.Magnitude}
indexedType: #none
private: false
instanceVariableNames: 'hours minutes seconds '
classInstanceVariableNames: ''
imports: ''
category: 'Magnitude-General'

となっていた.

Squeak Smalltalkのように

Magnitude subclass: #Time
instanceVariableNames: 'seconds nanos'
classVariableNames: ''
poolDictionaries: 'ChronologyConstants'
category: 'Kernel-Chronology'

ではない.

う〜ん名前空間みたいなのがあるようですね・・・.
プール辞書がない?,privateみたいなものが存在しています(これはJavaのあれなのか?).

Squeakの親戚といっていても,似ているようで似ていないのかな.

おとなしくSqueakだけにしようかな.

2007年11月16日金曜日

VisualWorks謎

Seasideを入れたあと,Timeクラスを使おうとしたらReplace画面が表示された.

Core.Time dateAndTime

としないといけなくなってしまった.
このCoreはどういう意味なんだろう.




さて今日ももう寝なければ・・・.

VisualWorksにSeaside

sumim'sさんにVisualWorksについて教えていただいてから(今のSmalltalkは? - 参考),すごくVisualWorksが気になっています.

前回入れたVisualWorksにSeasideを入れても見ました.
Public RepositoryからSeasideWebforKitをloadで完了.

SeasideのSample codeとして含まれているalltest内のlinkを実行.
おお!何か早い.
Seaside2.8ということもあるかもしれませんが,すごくいい反応です.
Squeakでやるのはもちろんですが,こちらもいいですね.

春休みにVisualWorksで何か作ってみるとのいいかもしれません.

2007年11月15日木曜日

パッケージをネットワークから取得する言語

VisualWorksのPublic Repository,Squeak SmalltalkのSqueakMapを見ていると,本当に僕みたいな人にはありがたいと思います.

RubyもGemsがあって便利ですが,僕にはこちらの方がいいですね.
なんだかんだ言って,僕もやはりGUI世代なんでしょうね・・・.


それにしてもRubyは春以来勉強していないので,ほとんど忘れてしまいました.
やっぱりSqueak Smalltalkを見ているとこちらの方が落ち着くので,結局卒研もそちらなのですが,やはり他の言語も書けないと世の中に通じないのかなって思ってしまいます.

もっとSmalltalkを理解するためにLisp,Haskellかな.
それともやはりJavaかC++をやるべきだろうか.

Pythonというのもいいのですが,やはり僕の今の能力だとたくさんの言語を学べる力がないのでどれかに絞りたいと思っています.

それにしてもプログラミング言語というのは本当に面白いですね.可能であれば全部知りたい.

2007年11月12日月曜日

Transcript

先日の丸めを再び調べ始めているのですが(う〜ん,よくわからない・・・),ちょっと本当の親戚VisualWorksを使ってみたのですが,そのとき気がついたのがTranscirptがSqueakと少し違うようです.

Squeakは例えば
Transcript cr;show:1.

で引数にobjectを取れるのですが,
VisualWorksはStringのみみたいです.

Transcript cr;show:1. "error!!"

VisualWorksでSqueakみたいにTranscriptを使うには

Transcript cr;printOn:1.

でよさそうです.
他の方法としてはSpTranscript>>(class)show:でもよさそうです.

SqueakはTranscriptはTranscriptStreamでできているようですが,VisualWorksはTextCollectorでできているみたいです.

ちなみにSqueakのTranscriptStream>>show:のコメントには

"TextCollector compatibility"

と書いてあります.
いつもお世話になっているmethodですが,こうやって見てみると面白いですね.

Squeakの直感的な感じもいいですが,VisualWorksの豊富なClassたちも魅力的ですね.

言語を作る人ってやっぱりすごいなと思います.

さて丸めを調査しないと・・・.

2007年11月10日土曜日

丸め

大学の友人にSqueakで少数以下2桁まで表示させるにはどうすればいいかと聞かれたので,

1.2450 printShowingDecimalPlaces:2 '1.25'

よしと思っていたのですが・・・

1.2347 printShowingDecimalPlaces:2 '1.22'

なんだこれはと思い.大学で学んだ工業規格だと確かこれだと1.23になるはず,他にないか探索

1.2347 asScaledDecimal:2 1.23s2
ScaledDecimalとして返ってくる,何かよくわからないな.返ってきたものはどうやって扱えばいいのか・・・.

他ので実験
1.2450 printShowingDecimalPlaces:2 '1.25'

1.2350 printShowingDecimalPlaces:2 '1.22'
よくわかりません.
偶数丸めでもなさそう・・・.

1.2350 asScaledDecimal:2 1.23s2
1.2450 asScaledDecimal:2 1.24s2

こちらもそうじゃないみたい.

とりあえず,もう寝ないといけないので(学生は学生なりに忙しいのです)明日にします.

2007年10月29日月曜日

MacPortでSearch

MacPortをupdateして

bash-3.2# port search squeak
squeak lang/squeak 3.9 Full, portable, Smalltalk-80 system

Squeakでてきた.
UbuntuでもインストールaptでSqueakを見つけられるけどportでもあるなんて,すごい感動.

Squeakって3.9って結構見かけるようになってきたので,なんだかうれしいです.

2007年10月27日土曜日

Bag探索 その1

以前書いたMagmaにはMagmaCollectionというのがあり,それはどうやらBagのようなイメージ?を持っていればいいようだが,Bagについてあまりにもしらないので探索をしてみることにした.

Bagはcontentsというインスタンス変数を持っているようだがそれはどうやらDictionaryらしい.
つまりDictionaryを内部で使っているようだ.

Bagの代表的なmethodとしてはadd:,remove:があるが最近それがよくわからなくなっている.
使い方というより,仕組みがよくわからない.
ただ内部的にDictionaryを使っていて,どうやらobjectをkeyとして使っているよう?だ.

う〜ん,メモリのことや,参照?ということがよく分かっていない(だと思う)ためこのあたりがよく分からない.
考えてみたら「参照」ということがよくわからないとCollectionやシンボルも本当に理解できているといえない,ましてはオブジェクト指向そのものがわかっていないのではないか.

Cのポインタとかをもっとしっかり理解するべきかもしれない.
プログラムに対してあまりに初心者で焦ってはいるが,最近は何かもっと言語について知りたいが多くなってきただけいいとしよう.

LeopardでSqueak

どうでもいいことだと思いますが,一応メモ.

Mac OS X LeopardでSqueak3.9-7067mac vm 3.8.18beta1Uを使ってSqueakを起動.
問題なしに起動.
よかった.

最近すこしだけObjective-Cが気になっています.

Xcode3.0も入ったことなので,勉強してみるのもいいかもしれませんね.

MacやSmalltalkにとても関係があるようですし・・・.




それにしても僕のDockはいれすぎですね・・・.

2007年10月20日土曜日

Smalltalkだけに

Squeakの素晴らしさに感動している自分ですが,やはり他人からの批判的な?意見が多いです・・・.
「触ったこともないのに,よくもそう言えますね・・・」っと言いたくなります.

って愚痴はいいとして・・・.
以前書いたようにSqueakの実行速度に関して聞かれることがあったりするので,自分ではどのような計測ならいいのかわからなかったので,ある先輩(この人はすごいプログラマー)から教えてもらったサイトで調べてみることに.

Gentoo : Intel Pentium 4 Computer Language Shootout

速度に関してはやはり厳しいものがあるのかな.

僕としてはSqueakはイメージを形にするものとして考えているので,別に実行速度など別にいいかなと思っています.

sumimさんがレイトレースのプログラムを書いていたので,僕も今度実行してみよう.

レイトレースベンチを Squeak Smalltalk で



最近,ヤジを対抗ために卒研が終わり次第,Squeakについてもっといろいろ勉強しようと思っています.



だがまず卒研がいまいちうまくいっていない.
プログラミングの才能がないのかな・・・.
はぁ〜・・・.

速度とか,言語とかの問題よりまず何より使う人が問題だ(僕のことです).

VisualWorksを入れてみる

卒研やアルバイトに疲れたので,気晴らしを.
少し前にsumimさんのBlogにVisualWorksのインストールを紹介したサイトのリンクがあったので,インストールしてみました.

http://www.sra.co.jp/people/h-asaoka/study/VisualWorksInstall/

浅岡さんのサイトですね(日経ソフトウェアでみたことがあります.最近お金がないので買っていませんが・・・)

ちなみに僕はMacユーザなので,Mac版を入れてみました.
intelMacもきちんと対応されていますね.

GNU Smalltalkよりやっぱり使いやすい.
やっぱりSmalltalkは環境があってこそSmalltalkなんでしょうね.

直系Smalltalkとのことなので,わくわくします.

ところで日本語は入力できるみたいだけど,何かおかしいです.
う〜ん,よくわかりません.

調べるのはまたにしよう.


VisualWorksを入れるときに思ったのですが,Macの場合X11のVMと普通のVMだと実行速度とか変わるのだろうか.
SqueakもいろいろVMがあるようですが,もしかしたらVMの違いで僕のSqueakは激変するのでしょうか.

VMはぜんぜん詳しくないので,困ったものです.
もっといろいろなことを勉強しないと.(言語そのものもそうだけど,Computer全体に関することも)

2007年10月18日木曜日

GNU Smalltalk

コマンドラインで使える?Smalltalk,GNU Smalltalkを入れてみました.

インストールはたぶん成功.
gstと入力するだけで起動しますが,readlineが使えないと困るのでrlwrapを使いながら起動.

rlwrap gst

GNU Smalltalk ready

st>

なんとか起動完了.

st> 1 + 2 !
3

!はオブジェクトにメッセージを送るために使うみたい.

st> 1 + 2
st> + 3 !
6

なるほど.

代入を・・・

st> x := 1 !
stdin:1: assignment to undeclared variable x

できない.
ならば,一時変数を宣言して
st> |x |
st> x := 1 !
1

できました.一時変数でなくする方法はないのかなとチュートリアルをちょっとみたら.

st> Smalltalk at: #x put: 0!

これを実行すると使えるみたい.

st> Smalltalk at: #x put: 0!
0
st> x := 1 !
1
st>

よくよく見ているとSmalltalkにxを登録しているってこと?
Workspaceがないから仕方がないのかな?

コマンドラインでSmalltalkが書けたらいいなと思って入れてみましたが,Squeakの環境になれているためかやはり違和感が・・・.


Bloggerは好きですけど,プログラミングメモとしてはちょっと使いづらいのかな?
CSSで囲むように宣言するのもいいけど,う〜ん.


GNU Smalltalk

2007年10月14日日曜日

今のSmalltalkは?

Smalltalkは有名なパロアルト研究所でSmalltalk-72,76,80という感じで生まれたのは少しだけ知っていますが,結局今そのSmalltalkは現在どれが正当なる継承者なんでしょうか.

調べる方法がないので,まずはWikipediaでSmalltalkだけでどれだけあるか調べてみることに・・・

* Smalltalk-80
* ObjectWorks
* VisualWorks
* Squeak
* Dolphin Smalltalk
* Smalltalk/V
* Smalltalk Express
* Smalltalk/X
* VisualAge Smalltalk
* Concurrent Smalltalk
* Smalltalk MT
* Distributed Smalltalk
* Little Smalltalk
* GNU Smalltalk
* SmallScript (S#)
* #Smalltalk
* Strongtalk
* PIC/Smalltalk
* Smalltalk/JVM
* Self 4.0 Smalltalk System
* Smalltalk 72 for Squeak
* Ambrai Smalltalk

この中で知っているのはSqueak,Visual Works,Ambrai Smalltalkぐらいでしょうか.
有名なものにGNU Smalltalkがあることは知っていますが,僕はみたことがありません.

Squeakは僕の今必須アイテムで,Visual Worksはときどき読む日経ソフトウェアで見かけます.
Ambrai SmalltalkはMacなSmalltalkとして以前インストールしたのですが,評価版なのでもう使えません.

これをみているとなんだか全てのSmalltalkの関係を分かりやすく図で表して欲しい物です.

これから少しずつ調べて書いていこうと思います.

全てをSqueak Smalltalkにするには?

Squeakに初めて出会ったとき,これさえあれば全てSqueakで実現できると思いました.

僕がやりたいことは全てSqueakがかなえてくれるだろうと.

大学ではC,Javaを少し学びましたが,お馬鹿な僕には・・・.
今考えるとそのままCとJavaだけだったらとても大学院へいこうとは思わなかったでしょう.

大学院でもSqueakは使っていこうと思いますが,最近ちょっと心配なことが.

実行速度?のことをよく聞かれますが,Squeakは果たして他の言語と比べるとどうなんでしょうか?
遅いとか聞きますが,実際どうなんでしょうね.(僕がたいしたことをやっていない証拠かもw)

僕としてはSqueak Smalltalkから離れたくないので・・・.

う〜ん,僕にとってはどうでもいいのに,周りからいわれると・・・.

仕方がないので,調べてみたいと思います.
さてどうやって調べましょうね.


最後にsumimさんがSqueak Smalltalkと書いているので,僕もまねさせていただきました.

2007年10月6日土曜日

OSC2007 fall 二日目

昨日はすごいいろいろな話ができました.
お昼をとる時間を忘れてしまうぐらい,いろいろ話したり,セミナーを受けました.

利用者側からの話や技術的な話.

ちょっとうれしいのが,Firefoxのシールとかグッズとかも貰えました.(昨日は企業がなので・・)

今日もがんばるぞ.←何をだ?

詳細はまた後ほど.

オープンソース・コミュニティ
http://itpro.nikkeibp.co.jp/article/NEWS/20071005/283949/?ST=oss

2007年10月5日金曜日

OSC2007 fallへ

ただいま東京へ到着.

今日は仕事ではなく,OSC(オープンソースカンファレンス)2007へ参加するため.
オープンソースのプログラミング言語の最新情報を勉強したいと思います.

また報告はのちほど.

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/

2007年8月29日水曜日

Smalltalkを死なせない2

Smalltalkを死なせないためにはSmalltalkについてもっと知らないといけないことを今気がついた自分・・・.

そもそもSmalltalk自体は僕が生まれる前に誕生した言語であり,最終形態?のSmalltalk-80も僕はまったく知らない・・・.

知らないことばかりだ.
そもそもSqueakに出会ったのは大学3年生の春.(現在4年)

Smalltalkについて知らないことばかり・・・.
Smalltalkの資料は大学にもほとんどないし,ほぼ英語ばかり.
英語がわからない僕にはちょっとつらい.

まぁ多少の苦労は仕方ないとして,妙にいろいろ調べたくなりました.

そういえば,ここはプログラミングメモなのに普通に記事を書いている・・・.
まぁいいか.

Smalltalkは死なせない

最近sumimさんのBlogを読んで,Smalltalkを死なせるような人がいることを知った.

これは僕の意見ですが,言語(プログラミング言語だけではなく人間の言語)はそれを使う人(話す人)がいなくなったら死んだといえると思う.
ただ僕は死んだという表現は好きではない.
死んだという表現使うより「古き言葉」として扱えばいいと思う.

とにかく悲しいものです.

というかSqueakがあるのでSmalltakは死んでいないのでは?と思える.(SqueakはSmalltalkであってSmalltalkではないと思っている方がいましたら失礼.未熟な学生の意見として聞き流してください)

ちなみにSqueakは大学院生になっても使いますし,今後も使う予定.
まぁ僕が60歳までいきるとして,僕の意見によるとあと39年は「死んだ言語」といえないですね.

人は自分の経験とか意見と異なるものを嫌う性質があるようなので,そういう性質が死んだとかいう発言になるんでしょうね.プログラミング言語も宗教に近いものなのかな?

最後は無視していただいて,Smalltalkはまだ死んでいないという結論に僕はしたいです.


[Smalltalk] この教授には Smalltalk を本当に理解することなど永久に不可能かも…(追記あり)
[Smalltalk] なぜかくも人は Smalltalk を殺したがるのか?
[Smalltalk] Smalltalk は死につつある…とかってバカじゃね?CommentsAdd Star

Potential - りんごの種 by blogger: Apple と Squeak

Potential - りんごの種 by blogger: Apple と Squeak

2007年8月21日火曜日

英語がわからないので・・・

プログラミング言語を勉強をしていると本当に英語がわからない自分にいらだちを感じます.

英語を勉強しないと思ってはいるができていない.
たぶんそれは自分の意思が弱いこともあるのだろうと思う.

どうにかしないと・・・.

2007年8月11日土曜日

OrderedCollectionのvalueからkeyを調べる

Squeakを使っていたら,OrderedCollectionのvalueからkeyを調べることがちょっと必要と思いました.

必要なんですか?とか言われそうですが,ちょっと欲しいと思ったので考えてみました.

y :=OrderedCollection new.
y add:#v;add:#a;yourself.

y keysAndValuesDo:[:key :value | (value = #v) ifTrue:[^key]].

結果
-->1

一応それっぽいですが,本当にいいのか心配.

Collectionのような入れ物からvalueが何番目に入っているのか調べたいだけなので,もっと他に言い方法がありそう・・・.



こんなのも考えてみましたが,こちらは無駄そう・・・.

y :=OrderedCollection new.
y add:#v;add:#a;yourself.

((y readStream) upTo:#v;yourself)position

つくづくプログラミング言語の活用方法について書いている方がすごく思えます.

追記:sumimさんよりもっと言い方法を教えていただきました.(コメント参照)

2007年6月15日金曜日

Amabrai Smalltalk(001- window)

前回のF-Scriptのコードからついで,Amabrai Smalltalkのwindowも実行してみた.

Amabrai Smalltalk

window := MacWindowFrame new position: 100@100;
extent:300@300.

window open.

こちらの方がSqueak(Smalltalk)で好きですが,F-Scriptの方が開発環境はSqueak(Smalltalk)に近いような気がします.

やっぱり僕はSqueakが一番好きです.

F-Script and Squeak (001 - window)

F-Script とSqueakのコードを比較してみたいと思ったので,Windowを開くだけの単純のProgramを書いてみました.

F-Script

> window := NSWindow alloc initWithContentRect:(100<>100 extent: 300<>300) styleMask:NSTitledWindowMask+NSClosableWindowMask backing:NSBackingStoreBuffered defer:true

> window orderFront:nil


Squeak

window := SystemWindow new bounds:(100@100 extent:300@300).
window openAsIs




参考 マイコミジャーネル
う〜ん,どちらも似ていますね.(当たり前かな?)
SqueakでMorphを開くのはいつもopenInWorldなのですが,今回は大きさを最初に指定して,開くというCodeが書きたかったので,openAsIsを使ってみました.

この調子でがんばれば,Objective-Cなしで,MacのApplicationが書けるのかな?

ただ少しObjective-Cのノウハウがあった方がよさそうですね.

2007年6月13日水曜日

TwoPTextEditer0.01

SqueakでMorphを使ったツールを作成.

といってもすごく簡単なツール.
Workspaceが二段になっているものです.

使用方法はまた書きます.

よかったら使ってください.

TwoPTextEditer0.01.st

対応Version Squeak 3.8,3.9

このツールを使って何らかの問題が発生しても,責任はとれませんのでご了承ください.

2007年6月4日月曜日

reverse

最近関数型をほんの少し勉強して気になったこと.

reverse.
リストを反転させるものです.

SqueakやRuby,Pythonでもおなじみの機能です.

ところでSqueakではreverseはどのように動いているのでしょう.

ちょっと調べてみました.

reverseはSequenceableCollection>>reverseが元のよう.そのなかではself reversedをしているのでそちらを参考.



SequenceableCollection>>reversed

"Answer a copy of the receiver with element order reversed."
"Example: 'frog' reversed"

| n result src |
n := self size.
result := self species new: n.
src := n + 1.
1 to: n do: [:i | result at: i put: (self at: (src _ src - 1))].
^ result

なるほど・・・.

Squeakってプログラミングの勉強にもなりそうですね.

へっぽこ学生(自分のこと)にはかなりいい教材です.

2007年5月18日金曜日

F-Script

研究室の先生に教えていただいたものを紹介.

F-ScriptというSmalltalkをベースにしたものらしく,Objective-Cとも関係があるらしい.

前回Ambrai Smalltalkについて紹介しましたが,こちらの方が実行が早そうでかなり興味があります.

どちらもCocoaのアプリケーション開発ができるようなので,ウォッチしているといいのではないでしょうか.


F-Script

Apple Store for Education
人気blogランキングへ

2007年5月16日水曜日

Amabrai Smalltalk

Ambrai Smalltalkの新しいバージョンが公開されていました.

1.1評価版?あやしいなってみていたら,もっといいバージョンの1.2は有料?

とりあえず1.1で楽しみます.

Ambrai Smalltalk

2007年5月1日火曜日

文字列処理

あることをするため,文字列処理をしてみることに.

Squeakでは標準では正規表現が使えない.
とりあえずはReadStreamでできそうなので,ちょっとやってみることに.

[[]]で囲まれているところを抜き出し,[[]]の前の部分と後ろの部分も抜き出す.

a:='aaa[[test]]bbb'readStream.
a upToAll:'[['. 'aaa'
a upToAll:']]'. 'test'
a upToEnd. 'bbb'

ちなみにSqueakにはBRegexp for Squeakというのがあるので,それをいれれば正規表現も扱うことができる.

2007年4月27日金曜日

Programming Memo

プログラミングに関するメモを書こうと思います.
気がついたことをなるべくメモしていこうと思います.

ということで,まずは自己紹介.

現在大学4年生で卒研がやばい!です.

マッカーです.(Macユーザー)
愛用しているMacはMacBook Pro Core Duo 1.83GHz 80GB 1GBです.

好きなプログラミング言語はSqueak,Smalltalk,Rubyです.
ただ全然かけませんが・・・.

とにかくプログラム言語とそれに関連した話について書いていこうと思います.

主にMac OSX(10.4.9),SUSE Linux 10.2,FreeBSD(Macより)での環境で考えていきます.


Mac,その他のコンピュータ,情報系?学生情報などはりんごの種 by Potentialに公開しています.