顯示具有 Squeak 標籤的文章。 顯示所有文章
顯示具有 Squeak 標籤的文章。 顯示所有文章

2013年2月18日 星期一

Smalltalk是個好東西,可惜它不說中文

Jimmy's papa好久沒碰Smalltalk or Pharo,換句目前比較流行的清宮劇說法,就是許久沒翻它們的牌子了,已打入冷宮久矣

回想當初放棄的理由之一,應該是Smalltalk or Pharo這些洋妞打從DNA裡不支持Unicode,凡是寫入程式的中文字串或中文註解,編譯後一律成亂碼, 想要叫它們秀幾個漢字,總要用上間接迂迴的手段,曠日費時,雖然生命應該浪費在美好的事物上(我指的是Smalltalk的物件導向觀念及開發環境),但是說不了中文,有文化上的代溝,在漢字流行的地區終究不能天長地久

不過,或許情況有變,改天回頭研究看看

2012年3月3日 星期六

Smalltalk沒有Switch語法

Smalltalk沒有Switch語法?!
這會造成困擾嗎?
其實Switch語法蠻耗CPU時間,我們可以下列方法代替
1.使用多個IF-ELSE敘述
2.聯合多個selector(其實是第一種方法的變形)
3.利用陣列索引及多型
未完待續.....

2012年1月15日 星期日

Talk2NXT beta released!!!

能夠以Smalltalk/Squeak/Pharo操控LEGO MINDSTORMS NXT 2.0樂高機器人,一直以來是Jimmy's papa的夢想,直到最近與Squeak FFI奮戰多日後,終於將Talk2NXT的部份功能實作出來,同時也寫了測試MotorA,MotorB以及port2的Color Sensor的簡單範例,提供給有興趣的網友鑑賞,目前我僅在Ubuntu 10.10的環境下測試過,這段時間讓我對Smalltalk有更深一層的理解,敲下程式碼毫不遲疑,然後不斷地重構(Refactoring)再重構,收穫不少!!!

ps.Jimmy's papa擅長寫又臭又長的程式碼命名(美其名所謂的"程式即說明文件"),但是請不要害怕,善用Tab key就讓Jimmy's papa撰寫Smalltalk的過程輕鬆不少


1.Unzip Talk2NXT-beta-XXXXXXXX-linux32-OneClick.app.zip
2.Run talk2nxt.sh
寄件者 scratchlab01

3.Scan NXT MAC address.Please wait for 30 second.....
寄件者 scratchlab01

4.Copy your NXT MAC address
寄件者 scratchlab01

5.Paste your NXT MAC address to Test1 and Do it
寄件者 scratchlab01

6.Paste your NXT MAC address to Test2 and Do it
寄件者 scratchlab01

7.Try it with your NXT Robot
寄件者 scratchlab01

2012年1月4日 星期三

Install scat (Scratch) to Android Tablet(XOOM)--簡易安裝Scratch到Android平板

今天Jimmy's papa將XOOM成功的升級到Android 3.2版本,雖然沒看到什麼讓人驚豔的功能,但很高興我的XOOM沒有成為棄嬰,希望MOTO給我努力用力的升級下去,因為Jimmy's papa很想吃到Ice Cream啊!!!

Jimmy's papa也趁便測試一下是否不需要PC,直接在Android安裝scat(Scratch)及CogDroid,安裝流程如下,希望大家看得懂我的poor english,haha!!!

1.Open Web Browser in Android
啟動平板電源,並且打開Android Browser

2. Download CogDroidVM APP
到http://code.google.com/p/squeakvm-tablet/downloads/list
downloadCogDroid.apk

3. Install CogDroid.apk
Open Files Manager on your Android Tablet.
Find /Download/CogDroid.apk in Internal Storage and install it.

4. Download http://jimmyscratchlab.googlecode.com/files/scat.zip

5.Unzip scat.zip
Open Files Manager and unzip /Download/scat.zip,
you will get 3 file(scat.image , scat.changes , PharoV10.sources).

5. Create /Presentation directory
Open Files Manager and create /Presentation in Internal Storage

6.Copy scat.image
Open Files Manager and copy 3 file(scat.image , scat.changes , PharoV10.sources) to /Presentation

7. Open CogDroid App

8. Select scat.image in CogDroid's Files List

9.Enjoy scat(Scratch)!!!
Don't worry 'PrimitiveFailed' warning,just click 'Abandon' Button.

2012年1月1日 星期日

迎接2012年 啟動talk2NXT新計畫

Jimmy's papa終於等到2012年的到來,這個傳說中充滿挑戰的一年

Jimmy's papa新年的新計畫打算將JNXT的middleware(以nxt-python開發的)換掉,改以暫名為talk2NXT的新專案代替,讓Pharo/Smalltalk直接透過FFI存取C Library,將可提供更多細部指令且更有效率的驅動LEGO Mind Storms NXT機器人

哇咧!想不到原本只是想改寫Scratch添上遙控NXT的陽春功能給我兒子玩玩的,想不到越搞越專業囉!!!

2011年12月31日 星期六

FFI(Foreign Function Interface)-擴展Smalltalk的特異功能

如果想讓Smalltalk能使用我們電腦平台的特殊硬體設備或是運算能力,那麼可以透過FFI,存取作業系統的library或是自行編寫shared library所提供的接口

例如,可以添購產生真實亂數量子物理設備或是為了加入全球意識計畫 (The Global Consciousness Project )而安裝REG(random event generators)設備,這時我們只要為Smalltalk/Squeak/Pharo加入一些程式碼,就能讓你的Smalltalk達成量子跳躍(Quantum leap)

關於FFI的詳細用法,請參考How to Use FFI


底下是Jimmy's papa的實驗過程
首先Pharo先載入FFI package
寄件者 scratchlab01
接著編寫shared library的c原始碼
junkDNA.c
#include <stdio.h>

char* quantumCommunication() {
    return "hello parallel worlds!\n";
}

junkDNA.h
char* quantumCommunication();

編譯,產生junkDNA.o
gcc -fPIC -Wall -c junkDNA.c

編譯成libjunkDNA.so(必須是lib開頭),加入junkDNA.o
gcc -shared -o libjunkDNA.so junkDNA.o

直接copy檔案到預設Pharo的/Contents/Linux/目錄下
cp libjunkDNA.so /home/<your-dir>/Pharo-1.3-OneClick.app/Contents/Linux/ 

寄件者 scratchlab01

耶!成功了,我的Pharo擁有新的特異功能囉!!!
寄件者 scratchlab01

2011年11月2日 星期三

Physical Etoys--用Smalltalk EToys玩機器人

Physical Etoys這套軟體,讓小朋友可藉由Etoys簡易的開發環境,以物件導向的方式拖拉腳本程式碼區塊,就能玩多種教育性機器人與硬體

目前支援的硬體有
Arduino
Nintendo Wiimote
Parallel port
RoboSapien v2
Roboquad
I-Sobot
Lego Mindstorms Nxt

下載軟體
Physical Etoys 1.8.1 for Windows
Physical Etoys 1.7 for Linux

進入主畫面,會出現Physical Etoys目前支援哪些機器人,Jimmy's papa當然選小兒Jimmy平常在玩的NXT機器人

寄件者 scratchlab01

會出現NXT機器人的簡單範例,此時顯示EToys尚未連結到機器人
寄件者 scratchlab01

先確認你的藍牙使用的serial port,再按Connect,如果手邊正好有聲音偵測器的話,便可試試畫面下方的簡單測試腳本(script)
寄件者 scratchlab01

到Object Catalog的LegoNxt分頁,可看到幾個常用的馬達及偵測器物件
寄件者 scratchlab01
這是Jimmy's papa測試時的畫面
寄件者 scratchlab01

這是Physical Etoys團隊在ESUG的簡報影片

2011年10月30日 星期日

Dr. Geo

目前EToys最新版本已將Dr. Geo整合進來,有興趣的人可以去看看它的部落格Education 0.2
底下是Jimmy's papa的隨意測試

點選Object Catalog物件目錄

寄件者 scratchlab01
點選tool分頁,這時看到了Dr. Geo物件
寄件者 scratchlab01
點一下,現出了Dr. Geo工作區,哈哈,這叫做借殼上市
寄件者 scratchlab01

按滑鼠右鍵,周遭會出現叫做Halo的小工具,按右下角黃色小工具可拉大物件
寄件者 scratchlab01

從外面拉圖檔進來,這次以麥田圈做測試
寄件者 scratchlab01

準備做圓形
寄件者 scratchlab01
好簡單,做好一個圓圈了
寄件者 scratchlab01

複製
寄件者 scratchlab01

移動調整
寄件者 scratchlab01

繼續複製
寄件者 scratchlab01
寄件者 scratchlab01

點選Halo的Menu
寄件者 scratchlab01

準備改變線條顏色
寄件者 scratchlab01

用滴管挑顏色
寄件者 scratchlab01
寄件者 scratchlab01
哇勒!!!,做好了9個,可是每個都對不準,難道麥田圈的空拍圖有扭曲變形??? 不要緊,還有其他的法寶可用
寄件者 scratchlab01
出現Viwer視窗,這時可將圓形的屬性做各種微調
寄件者 scratchlab01

不過,上述的作法在Dr. GeoII本身是做不到的,因為拉出來的幾何物件的Z-order會排到麥田圈圖的後面
寄件者 scratchlab01

2011年10月28日 星期五

自己動手建置Smalltalk VM(CogVM)

Jimmy's papa平常都拿人家已建置好的VM執行Pharo,但讀了這篇文章後Building the VM from scratch using Git and CMakeVMMaker, 也搜尋了關於Slang這個有趣的東東,Slang是Smalltalk語法的子集合,可轉譯為標準C語言,Slang能夠用來撰寫Smalltalk VM自身,雖然以現在的編譯器技術這應該不是什麼先進的技術,但在早期的年代用Smalltalk開發Smalltalk這構想實在太厲害了!!!

以下是轉譯smalltalk "slang" to C的小小例子
這是Smalltalk程式

sayHello
<returnTypeC: 'char*'>
^ 'JimmyScratchLab say hello'
這是對應的C程式
static char*
sayHello(void)
{
 return "JimmyScratchLab say hello";
}
看了那麼多資料,Jimmy's papa一時手癢也想親自動手建置虛擬機器,於是開始捲起袖子開始動工

安裝gcc, make...一些開發工具到Linux/Ubuntu
sudo apt-get install build-essential

安裝cmake
sudo apt-get install cmake

到這裡下載cogvm-blessed-master.tar.gz
https://gitorious.org/cogvm/blessed/archive-tarball/master

下載Pharo 1.3 one-click
http://www.pharo-project.org/pharo-download/release-1-3
解開Pharo 1.3 one-click,進入/Contents目錄
寄件者 scratchlab01
將解開的cogvm-blessed-master.tar.gz的所有檔案拉進去上述的/Contents目錄
寄件者 scratchlab01
檔案一堆,其實依照這篇文章有些檔案目錄是不需要
寄件者 scratchlab01


啟動Pharo
寄件者 scratchlab01
然後打開Workspace,輸入逐步以下指令
下載VMMaker
Gofer new
squeaksource: 'MetacelloRepository';
package: 'ConfigurationOfCog';
load.
((Smalltalk at: #ConfigurationOfCog) project version: '1.5') load.
寄件者 scratchlab01
等一下下
寄件者 scratchlab01

安裝VMMaker
Gofer new
squeaksource: 'VMMaker';
package: 'CMakeVMMaker';
version: 'CMakeVMMaker-MarianoMartinezPeck.73';
load.
寄件者 scratchlab01
要等待一下
寄件者 scratchlab01

使用VMMaker將Cog SLANG轉譯為C程式碼
CogUnixNoGLConfig  new generateSources;  generate.
寄件者 scratchlab01

執行結果,會發覺多了/src目錄,還有供cmake作處理的/build目錄的相關檔案

/src/vm,一堆虛擬機器核心的C原始碼
寄件者 scratchlab01
/src/plugins,,一堆擴展虛擬機器功能插件的C原始碼
寄件者 scratchlab01

接著打開Linux/Ubuntu的終端機shell,執行
cd build
cmake .
跑出一卡車訊息
寄件者 scratchlab01
不過,到訊息結尾說少了tribox.c這個檔,不過為了完成整個步驟,Jimmy's papa將那個CMakeLists.txt稍做處理,再次cmake
寄件者 scratchlab01
接著
make
還是一堆編譯訊息
寄件者 scratchlab01
最後結果,由於我的執行環境的關係,當然還得再接再厲,不過這次建置實驗讓Jimmy's papa學到許多寶貴的經驗

2011年10月27日 星期四

Smalltalk--物件模型的規則

以下是Jimmy's papa閱讀Pharo by Example關於物件模型規則的整理筆記

Rule 1. Everything is an object.
一切都是物件(包括類別)

Rule 2. Every object is an instance of a class.
每個物件是類別的一個實例(包括類別物件也是元類別的實例)

Rule 3. Every class has a superclass.
每個類別有一個超類別(雖然僅支持單一繼承,但可共享以Trait類別打包的一些方法實作)

Rule 4. Everything happens by sending messages.
一切發生皆由發送訊息(收到訊息才來找方法執行)

Rule 5. Method lookup follows the inheritance chain.
沿著繼承鏈查找方法

共享變數
有全域變數,類別變數,變數池共三類,命名開頭需大寫字母

全域變數(Global variables)在系統隨處皆可存取

類別變數(Class variables)由類別,其子類別及其實例共享

變數池(Pool variables)由一群選定的類別共享

2011年10月26日 星期三

Smalltalk--訊息語法

以下是Jimmy's papa閱讀Pharo by Example關於Message syntax的整理筆記,Smalltalk的訊息(message)相當於Java的物件方法(method)

術語解釋

一個訊息(message)是由訊息選擇子(selector)及選擇性參數組成
一個訊息(message)傳送給一個接收者(receiver)
一個訊息(message)與它的接收者(receiver)的組合稱為一個訊息發送(message send)

訊息種類
一元訊息(Unary),只有選擇子(selector),無參數,例如
Pen new
二元訊息(Binary),選擇子(selector)以下列字元構成+, −, *, /, |, &, =, >, <, ~, @,只有一個參數,例如
1 + 2
關鍵字訊息(Keywords),選擇子(selector)以多組"關鍵字加上字尾冒號(:)"組成 ,有多個參數,例如
aPen go: 100
Color r: 0 g: 0 b: 1

多訊息混合構造的處理優先順序
規則一
一元 > 二元 > 關鍵字
Unary > Binary > Keyword
Pen new go: 100 + 200
aPen go: 100 + 200

規則二
括號第一,括號裡的訊息優先處理
括號 > 一元 > 二元 > 關鍵字
(Msg) > Unary > Binary > Keyword

規則三
由左至右,若訊息優先權皆相同則由左至右解之
Pen new down


需注意,smalltalk二元訊息的乘號與加減除的優先權相同,所以下列算式需依由左至右規則解之
10 + 2 * 5 -> 60
若加上括號,則是
10 + (2 * 5)  -> 20
句點(.),用來區隔表達式(Expressions)
Transcript show: 'JimmyScartachLab '.
Transcript show: 'say '.
Transcript show: 'hello '.
Transcript cr.
分號(;),可用來串連多個訊息依先後順序傳送至同一個接收者
Transcript
  show: 'JimmyScartachLab ';
  show: 'say ';
  show: 'hello ';
  cr
方括號([]),用來建立程式區塊閉包(block closure)
[ n := n*2 ]
[ :x | 1 + x ]
()括號,只會影響訊息的處理順序

2011年9月19日 星期一

Jtalk現在已改名為Amber

Jimmy's papa之前介紹過的【Jtalk-以JavaScript實作的Smalltalk】 ,現在已改名為Amber(琥珀),開發者的意圖或許能從它首頁出現的琥珀圖片可看出端倪, 記得電影"《侏羅紀公園》(Jurassic Park)"中讓恐龍復活的最重要關鍵,就是被密封在琥珀中達億萬年之久的吸血巨蚊,那麼,想藉由Amber,將遠古程式語言Smalltalk的DNA借javascript之體還魂,重新活躍在行動網路設備的競技場,再造Smalltalk世紀就不言可喻了

以下是英文簡介
Amber, formerly known as Jtalk, is an implementation of the Smalltalk-80 language. It is designed to make client-side development faster and easier. It allows developers to write client-side heavy web applications in Smalltalk.

Amber includes an integrated development environment with a class browser, workspace, transcript, object inspector and debugger.

Amber is written in itself, including the parser and compiler, and compiles into efficient JavaScript, mapping one-to-one with the JS equivalent.

Amber的官網
http://amber-lang.net/

有興趣的網友,可以到Amber的線上教學頁面看看,它提供ProfStef(Professor Stef)互動式教學指令
http://amber-lang.net/learn.html

這裡也有一份關於Jtalk簡報可以參考看看
http://nicolas-petton.fr/presentations/esug2011/#intro

2011年9月16日 星期五

如何升級PharoCogOneClick一點靈套件

想在linux環境下學習smalltalk的初學者,目前Pharo-1.2.1-CogOneClick一點靈套件是個不錯的工具,但隨著CogVM及Pharo image不斷地改版,若想跟得上最新的版本,請參考Jimmy's papa下列的簡易教學筆記

download files
http://ci.lille.inria.fr/pharo/job/Pharo%201.4/lastSuccessfulBuild/artifact/Pharo-1.4.zip
http://www.mirandabanda.org/files/Cog/VM/VM.r2489/coglinux.tgz
http://gforge.inria.fr/frs/download.php/28439/Pharo-1.2.1-CogOneClick.zip

tar -zx coglinux.tgz
unzip Pharo-1.4.zip
unzip Pharo-1.2.1-CogOneClick.zip

cp coglinux/lib/squeak/4.0-2489/* Pharo-1.2.1-CogOneClick/Contents/Linux
mv Pharo-1.2.1-CogOneClick/Contents/Linux/squeak Pharo-1.2.1-CogOneClick/Contents/Linux/squeakvm
cp Pharo-1.4/Pharo-1.4.changes Pharo-1.4/Pharo.changes
cp Pharo-1.4/Pharo-1.4.image Pharo-1.4/Pharo.image
cp Pharo-1.4/* Pharo-1.2.1-CogOneClick/Contents/Resources
cd Pharo-1.2.1-CogOneClick
bash Pharo.sh
若出現Pharo字樣的使用者畫面,恭喜您升級成功!!!
退出程式後,可將Pharo-1.2.1-CogOneClick目錄名改為Pharo-1.4-CogOneClick

2011年9月15日 星期四

終於可以在Android平板上寫Scratch小貓咪程式了

Jimmy's papa參考了scat及squeakvm-tablet兩個專案,經過一番努力後,終於將兩者成功安裝到我的XOOM平板電腦,實在非常感謝兩個專案的開發人員的努力奉獻,讓Jimmy's papa也可以在Android平板上寫Scratch小貓咪程式!!!

ps.現在Sratch 2.0也可以囉!!!


安裝過程請參考這裡
寄件者 scratchlab

2011年6月15日 星期三

在XOOM安裝squeakvm-tablet

squeakvm-tablet是squeak-android-vm的分支,是以android平板電腦運行Squeak為標的而開發的專案,Jimmy's papa花了些時間重新編譯它的程式,安裝到平板電腦後基本上可以載入image檔,不過沒幾秒就當掉,看看它的說明文件,似乎卡在它的C程式碼只有NDK r3之前的版本才能正確編譯,為了不浪費時間,Jimmy's papa先下載編譯好的.apk,然後在PC端以下列指令安裝到XOOM...
adb install sqandr_pres.apk
安裝後在平板啟動Squeak還蠻順利的,比較麻煩的是想在平板寫SmallTalk程式時,會遇到許多大小寫英文字母交雜的物件名稱,以虛擬鍵盤輸入大寫後一律轉為小寫,反而手寫輸入沒這個問題,Jimmy's papa也試著載入Scratch及eToy的image檔,不過都無法成功載入

不過,既然已經可以讓Squeak運行在android平板電腦上,就是好的開始,接下來一定會有人想辦法也讓Scratch運行在android平板電腦上

ps.後來Jimmy's papa選擇美式鍵盤輸入後,大小寫的困擾便不復見

寄件者 scratchlab
寄件者 scratchlab
寄件者 scratchlab
寄件者 scratchlab
寄件者 scratchlab