這裡是Jimmy的實驗室用來發表Jimmy的Scratch程式作品,還有LEGO WEDO & NXT機器人設計 & Android, (本部落格引用圖文為教育教學目的合理使用) 想與我(Jimmy的爸爸 )聯絡 jimmyscratchlab@gmail.com
2013年2月18日 星期一
Smalltalk是個好東西,可惜它不說中文
回想當初放棄的理由之一,應該是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 |
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月18日 星期五
SandstoneDB
SandstoneDB一套以smalltalk開發的物件導向資料庫
下面是一些文章連結
http://onsmalltalk.com/sandstonedb-simple-activerecord-style-persistence-in-squeak
http://book.seaside.st/book/advanced/persistency/sandstone/api
http://www.pharocasts.com/2010/04/sandstonedb-simple-activerecord-style.html
http://onsmalltalk.com/simple-image-based-persistence-in-squeak
這篇說明以Fuel序列化機制加速SandstoneDB的存取
http://marianopeck.wordpress.com/2011/08/19/boosting-sandstonedb-with-fuel/
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 |
![]() |
| 寄件者 scratchlab01 |
這是Physical Etoys團隊在ESUG的簡報影片
2011年10月30日 星期日
Dr. Geo
目前EToys最新版本已將Dr. Geo整合進來,有興趣的人可以去看看它的部落格Education 0.2
底下是Jimmy's papa的隨意測試
點選Object Catalog物件目錄
![]() |
| 寄件者 scratchlab01 |
![]() |
| 寄件者 scratchlab01 |
![]() |
| 寄件者 scratchlab01 |
按滑鼠右鍵,周遭會出現叫做Halo的小工具,按右下角黃色小工具可拉大物件
![]() |
| 寄件者 scratchlab01 |
從外面拉圖檔進來,這次以麥田圈做測試
![]() |
| 寄件者 scratchlab01 |
準備做圓形
![]() |
| 寄件者 scratchlab01 |
![]() |
| 寄件者 scratchlab01 |
複製
![]() |
| 寄件者 scratchlab01 |
移動調整
![]() |
| 寄件者 scratchlab01 |
繼續複製
![]() |
| 寄件者 scratchlab01 |
![]() |
| 寄件者 scratchlab01 |
點選Halo的Menu
![]() |
| 寄件者 scratchlab01 |
準備改變線條顏色
![]() |
| 寄件者 scratchlab01 |
用滴管挑顏色
![]() |
| 寄件者 scratchlab01 |
![]() |
| 寄件者 scratchlab01 |
![]() |
| 寄件者 scratchlab01 |
![]() |
| 寄件者 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 |
![]() |
| 寄件者 scratchlab01 |
![]() |
| 寄件者 scratchlab01 |
啟動Pharo
![]() |
| 寄件者 scratchlab01 |
下載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 |
![]() |
| 寄件者 scratchlab01 |
接著打開Linux/Ubuntu的終端機shell,執行
cd build
cmake .
跑出一卡車訊息
![]() |
| 寄件者 scratchlab01 |
![]() |
| 寄件者 scratchlab01 |
make
還是一堆編譯訊息
![]() |
| 寄件者 scratchlab01 |
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一點靈套件
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小貓咪程式!!!
安裝過程請參考這裡
![]() |
| 寄件者 scratchlab |
2011年6月15日 星期三
在XOOM安裝squeakvm-tablet
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 |



















































