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年10月21日 星期五

Jimmy闖關Squeak Etoys

這兩天Jimmy's papa與Jimmy一齊玩Squeak Etoys裡面的闖關遊戲,由於這幾個月常帶著Jimmy閱讀英文短篇故事,所以他對EToys裡面的簡單的英文單字比較不會陌生或排斥,藉由這個遊戲可以訓練Jimmy的邏輯思考的能力,並熟習物件導向的程式工具,以下是Jimmy's papa整理過的闖關圖解,解最後兩關讓Jimmy's papa想起與之前的用JNXT寫Line Finder機器人程式好像有異曲同工之妙

第一關,這關簡單,主要要讓小朋友如何擺放及執行指令

寄件者 scratchlab01
寄件者 scratchlab01

第二關,這一關也很簡單,可讓小朋友理解指令的擺放順序造成的執行結果,跟小朋友心裡預期的結果有何落差

寄件者 scratchlab01
寄件者 scratchlab01

第三關

寄件者 scratchlab01
寄件者 scratchlab01

第四關,這關是重點,可以教Jimmy什麼是邏輯判斷結構

寄件者 scratchlab01
寄件者 scratchlab01

第五關,這關需要用到比較複雜的邏輯

寄件者 scratchlab01
寄件者 scratchlab01

第六關

寄件者 scratchlab01
寄件者 scratchlab01

第七關

寄件者 scratchlab01
寄件者 scratchlab01

2011年10月20日 星期四

Jimmy的畫作--大樹

上星期Jimmy的三阿姨送他一盒30色的水彩顏料,他突然想學畫半年前在YouTube上看到的教學影片教人如何用水彩畫樹,這次Jimmy的姑丈和姑姑回高雄看到這幅畫,笑說很像廣告上台灣很多人一起認養的那顆大樹
寄件者 scratchlab01

Precompiled Dart VM

想學Google Dart Language又沒有時間編譯Dart VM(虛擬機器)的網友,Jimmy's papa告訴大家有個好消息,DARTForce這個網站提供現成的VM供Dart學習者使用,底下有相關檔案連結可供下載

已編譯的DART VM for Linux
http://www.dartforce.com/static/software/dart_bin.tgz
已編譯的DART VM for Windows
http://www.dartforce.com/static/software/dart_bin.exe
範例下載
http://www.dartforce.com/static/software/samples.tgz


在Linux,執行Dart程式的指令如下

 ./dart_bin "your_dart_script_filename"

可試試將下列程式碼,存至hello.dart
main() 
{ print('Hello, Dart!'); }
然後啟動Dart VM執行
./dart_bin hello.dart

2011年10月17日 星期一

金貝鼓(Djembe)---Jimmy的新禮物

Jimmy收到姑丈和姑姑送的新禮物,一個金貝鼓(Djembe),這個鼓是很有來歷的,它是來自台灣非洲鼓製鼓第一人徐治平先生的吉泰便利商店,姑丈和姑姑很用心找到這面好鼓,希望Jimmy也要多多練習,說不定未來能當個小鼓王,不過當鼓王之前,Jimmy's papa比較想扮演酷型男(Jack Kahuna Laguna)玩鼓,然後說出他的著名台詞"只要呼吸就好"("just keep breathing"),哈哈,超搞笑的!!!

寄件者 scratchlab01

Jimmy的姑丈和姑姑送的新禮物,一個金貝鼓

寄件者 scratchlab01

這裡是MIT(Made in Taiwan)金貝鼓(Djembe)的大本營

寄件者 scratchlab01


蘋果日報--非洲鼓 第一人
http://tw.nextmedia.com/applenews/article/art_id/2640142/IssueID/20060529
八卦的部落格--老實做鼓的老實人~徐治平先生
http://tw.myblog.yahoo.com/hejinghan-bagua/article?mid=1567&prev=1581&next=1548&page=1&sc=1#yartcmt
一位超會玩Djembe的小朋友
http://www.youtube.com/watch?v=iZhAxbAx72U