ラベル Squeak の投稿を表示しています。 すべての投稿を表示
ラベル Squeak の投稿を表示しています。 すべての投稿を表示

2008年6月11日水曜日

プロキシ経由でHTTP接続する方法

Squeak上でプロキシを経由してHTTP接続する方法を以下にメモしておきます.

proxyHost := 'hogehoge'.
proxyPort := 8080.
"使用するプロキシサーバと除外するホストの設定"
HTTPSocket useProxyServerNamed: proxyHost port: proxyPort.
HTTPSocket addProxyException: 'hagehage'.

url := 'http://www.google.co.jp'.
HTTPSccket httpGet: url.

"プロキシサーバの解除と除外するホストの消去"
HTTPSocket removeProxyException: 'hagehage'.
HTTPSocket stopUsingProxyServer.


プロキシの設定は,消去しないと残ってしまうみたいなので,それを忘れないように注意すること.

[1] ど素人のためのど素人によるSquek入門
http://squeak.qp.land.to/wiki/

2008年5月29日木曜日

Squeak上でObserverパターンを適用する方法

Squeak上でObserverパターンを適用する方法を以下にメモしておきます.

Observerパターンは,あるオブジェクトの内容に関与するオブジェクトに,その内容の変化に応じて何らかの処理を行わせたいときに使われるデザインパターンです.

Observerパターンでは,Subjectという役割のクラス(あるオブジェクトが所属するクラス)とObserverという役割のクラス(あるオブジェクトの内容に関与するオブジェクトが所属するクラス)が登場します.Squeakでは,それら両方の役割を最上位のクラスであるObjectクラスに与えています.したがって,Objectクラスを継承したクラスは,その時点でどちらの役割も果たせる状態になっています.ただし,Objectクラスのメソッド名は,デザインパターンの資料[1],[2]で紹介されているメソッド名と異なっているので,その対応関係を以下に記しておきます.
  • Subject::attach <-> Object::addDependent:
    SubjectにObserverを追加
  • Subject::detach <-> Object::removeDependent:
    SubjectからObserverを削除
  • Subject::notify <-> Object::changed:
    SubjectがObserverに通知.
  • Observer::update <-> Object::update:
    SubjectがObserverに通知した際に呼び出されるメソッド.中身は空っぽ.
[1] Observer pattern
http://en.wikipedia.org/wiki/Observer_pattern

[2] オブジェクト指向における再利用のためのデザインパターン改訂版
Erick Gamma, Richard Helm, Ralph Johnson, John Vlissides: ソフトバンクパブリッシング, 1999

[3] 7. Squeak演習:Observerパターン
http://www.ogis-ri.co.jp/otc/hiroba/technical/Squeak5/S5-7-1.html
http://www.ogis-ri.co.jp/otc/hiroba/technical/Squeak5/S5-7-2.html

2008年5月22日木曜日

SqueakMapパッケージローダーのトラブル

ある日,SqueakMapパッケージローダーを起動すると,下記のメッセージが表示されるようになり,パッケージローダーでパッケージをダウンロードできなくなりました.

Reading an instance of SMMaintainableObject.
Which modern class should it translate to.

少しググってみると,どうやらsmディレクトリを複数のイメージで共有した際に生じる問題だということが分かりました.

"Don't make me think"...
http://lists.squeakfoundation.org/pipermail/squeak-dev/2006-April/102705.html

解決方法を以下にメモしておきます.

1. SMSqueakMap bootStrapを実行

2008年4月17日木曜日

XPathでXML文書の要素にアクセスする方法

XPathでXML文書の要素にアクセスする方法をメモしておきます.


document := XMLDOMParser parseDocumentFrom: xml stream.
xpath := XPath for: path.
nodeList := xpath in: document.


[/]の位置がSqueakとJavaでは違うようです.
Squeakだと,「/」は「/eivs/」を指し,Javaだと「/」は「/」を指します.
どちらが,XPathの仕様に準拠しているのかはわかりませんが,このおかげでちょっとはまりました.


<?xml version="1.0" encoding="UTF-8"?>
<eivs>
<robot name="eisl01" type="FieldServerRobot">
</robot>
</eivs>

2008年3月13日木曜日

Squeak本

オンラインかつ無料で見れるSqueak本が「The Weekly Squeak」で紹介されていました.

その本のURLは以下のとおりです.
http://www.squeakbyexample.org/

Squeak by Example, 2.0!
http://news.squeak.org/2008/03/12/squeak-by-example-20/

2008年3月10日月曜日

部分文字列の取得

Squeakで部分文字列を取得する方法をメモしておきます.

[Java]
String string = "tr[3]";
string.substring(0, 2); // -> "tr"

[Squeak]
string := 'tr[3]'.
string copyFrom: 1 to: 2.

ループとループの中断

ループとループの中断の方法をメモしておきます.

Java:

List nameList = new ArrayList();
nameList.add("html");
nameList.add("body");
nameList.add("table");
nameList.add("tr");
nameList.add("td");

Iterator iterator = nameList.iterator();
while(iterator.hasNext()) {
String name = iterator.next();
System.out.println(name);
if(name.equals("table")) {
break;
}
}

Squeak:

nameList := OrderedCollection new.
nameList add: 'html'.
nameList add: 'body'.
nameList add: 'table'.
nameList add: 'tr'.
nameList add: 'td'.

nameList do: [:name |
Transcript cr; show: name.
name = 'table' ifTrue: [^ nil].
].

2008年3月9日日曜日

デリミターによる文字列の分割

デリミターにより文字列を分割する方法をメモしておきます.

Java:

String path = "/html/body/table/tr[position()=1]";
String[] name = path.spilit("/");

Squeak:

path := '/home/body/table/tr[position()=1]'.
nameList := path findTokens: '/'.

2007年10月28日日曜日

Squeakの用語

Squeak本を3章まで読みました.
この章までに登場した用語をまとめておきます.

オブジェクト:クラスとインスタンスの総称(今までインスタンスだけだと思ってました)
グローバルオブジェクト
リテラルオブジェクト
変数
偽変数: プログラムが値を代入できない変数.true,false,nil,self,super
クラス:インスタンスの共通する部分をまとめる仕組み
インスタンス
継承:クラスの共通する部分をまとめる仕組み
オーバライド
インスタンス変数
クラス変数
インスタンスメソッド
self: Javaではthis

Squeak本を購入しました

2007年10月26日金曜日

プロキシ越えの方法

プロキシ越えの方法ですが,早速わかりました.
具体的にコードで書くと,以下のようになります.

proxyHost := 'hogehoge'.
proxyPort := 8080.
HTTPSocket useProxyServerNamed: proxyHost port: proxyPort.

url := 'http://www.google.co.jp'.
HTTPSccket httpGet: url.


[1] ど素人のためのど素人によるSquek入門
http://squeak.qp.land.to/wiki/

フィールドサーバからHTML文書を取得する

フィールドサーバからHTML文書を取得する方法は,以下のとおりです.

HTTPSocket httpGet: 'http://www.google.co.jp'.

ただ,プロキシサーバ経由でしかHTTP通信が許されていないネットワークの場合(いわゆる,プロキシ越えをしなければならない場合)では,当然のことながら,上記の方法では無理でした.

プロキシ越えの方法については今後調べていきたいと思います.

フィールドサーバモーフを作成するにあたって

フィールドサーバという機器で観測されたデータを表示するSqueakのモーフを作ろうとしています.

処理の手順はだいたい以下のとおりでしょうか.

  1. 観測データが記されたHTML文書をフィールドサーバから取得する.
  2. 取得したHTML文書を解析して,観測データを抽出する.
  3. 抽出した観測データを表示用のモーフ(フィールドサーバモーフという名前にします)に設定する.
Squeakというのは,Smalltalkの処理系の一つ(Linuxでいうところのディストリビューションの一つ)みたいなのですが,今はまったくの素人なので,上記の手順を具体的なコードに落とすことができません.

これから実装するのに必要なAPIとかを調べていきたいと思います.