2012年6月23日 星期六

Try Google-Blockly & JeForth

Jimmy's papa目前試用Google-Blockly搭配JeForth,比起WaterBear,可以塞入更多的程式碼積木,Jimmy's papa也改寫了ContextMenu,可以切換不同方向的接槽(notch),讓Forth積木可實現橫式或直式兩種拼接風格,盡量有效的利用到PlayGround的有限空間,尤其以橫式拼接Forth積木時,總覺得我正在搞DNA序列哩,呵呵!!!

之前用WaterBear由於無法附上註解或說明,每次閱讀Forth積木時實在很是折磨腦細胞,而Google-Blockly已內建註解功能,為了讓Forth程式積木能夠更一目了然, 我特別製作了Comment積木,當直式拼接風格時,可嵌入程式積木右側

這是下圖的Forth原始碼,可印出費波那西數列(Fibonacci Sequence),參考自The Zen of Forth

: Fibonacci 1 swap 1 do dup . i swap +loop . ;
: Fibonacci2 1 swap 1 do dup . i swap +loop . ;
: Main 10 Fibonacci 10 Fibonacci2 ;

Main
寄件者 scratchlab02

2012年6月20日 星期三

2012年6月11日 星期一

Google-Blockly : "Scratch-like"家族又有生力軍加入

Google-Blockly是一套新釋出的"Scratch-like"視覺化程式語言,如同Jimmy's papa之前研究過的WaterBear工具,Blockly也是以HTML5,CSS3和Javascript打造而成的,視覺化可拖拉拼貼式程式積木系統,不過比起已經好幾個月沒改版的WaterBear,新釋出的Blockly似乎提供程式積木更多的操作特色,這有待Jimmy's papa研究看看,如果順利的話,也許不久後JForthBlocks就會移植到Blockly

Google-Blockly Project

底下是Blockly提供的走迷宮(Maze)範例,右邊是小Jimmy試玩的解法,沒用上Logic積木
寄件者 scratchlab02

2012年6月8日 星期五

MINDdroid 1.3

其實Jimmy's papa有點孤陋寡聞,直到最近才知道於2010年老早就有MINDdroid這個東東,可在Android上操控NXT機器人,原本還打算以Android NDK打包C/C++ Library的方式,不過既然有了MINDdroid這套java函式庫,拿來開發Android App就直接了當多了也比較容易除錯

Jimmy's papa想看看有無法子整合到Scratch或Waterbear,不過整合到Scratch應該會比較麻煩,因為還要懂得squeakvm-tablet的FFI寫法

MINDSTORMS官網介紹MINDdroid 1.3
GitHub下載

2012年6月6日 星期三

JForthBlocks--以Create...Does>造立即詞(Immediate word)

這是Jimmy's papa在網路上看到的技巧,這是利用Create...Does>造新詞之際,順便註記為立即詞(Immediate word),以下做兩個小範例,分別比較有無使用immediate積木的差別
寄件者 scratchlab02
結果可以看到y:之後沒有10,因為10已經早於y:偷跑(編譯時期)推入堆疊了
寄件者 scratchlab02
這是有用到immediate的Forth原始碼,附上註解
: constx
create \ 將記憶體區塊位址指定給新詞
immediate \ 註記新詞為立即詞
, \ 將堆疊頂端數值存入記憶體區塊位址之後
does> \ 將後續位址設為新詞的執行位址
@ ; \ 取出記憶體區塊內存值
10 constx ten \ 10指定給ten,而ten是立即詞,執行ten會將10推入堆疊
: y s" y:" ten ; \ ten於編譯時期立即執行將10推入堆疊,不會編入y
: z s" z:" postpone ten ; \ ten雖是立即詞但被強迫編入z
ten \ 將10推入堆疊
y
z \ 將10推入堆疊
.s \ 印出堆疊內容
寄件者 scratchlab02
因為不是立即詞,所以10都是中規中矩的在執行(解譯)時期推入堆疊,不會偷跑
寄件者 scratchlab02
這是沒用到immediate的Forth原始碼,附上註解
: constx
create \ 將記憶體區塊位址指定給新詞
, \ 將堆疊頂端數值存入記憶體區塊位址之後
does> \ 將後續位址設為新詞的執行位址
@ ; \ 取出記憶體區塊內存值
10 constx ten \ 10指定給ten,執行ten會將10推入堆疊
: y s" y:" ten ; \ ten編入y
: z s" z:" postpone ten ; \ ten編入z
ten \ 將10推入堆疊
y \ 將10推入堆疊
z \ 將10推入堆疊
.s \ 印出堆疊內容

2012年6月2日 星期六

JForthBlocks--穿梭陰陽界,任意切換編譯或直譯狀態

今天的標題下的有點奇怪,不過Jimmy's papa只是在強調,就像某些科幻電影主角一樣,可依意願將意識狀態切換到不同的維度,Forth也可以隨時切換為編譯或直譯狀態,所以Forth亦有雙態系統之稱

底下是個小測試範例,首先定義名為statereporter的高階積木,並將它設為立即詞(immediate),這樣一來,statereporter就像維度穿梭者一樣,可以隨時報告目前身處的狀態
寄件者 scratchlab02
寄件者 scratchlab02
這是產生出來的Forth原始碼,附上註解
: statereporter
state@ \ 是否為編譯狀態
if s" (編譯中compiling)" . \ 印出訊息
else s" (執行中executing)" . \ 印出訊息
then ; immediate \ 設為立即詞,進入編譯狀態也會立即執行
: test
statereporter ; \ 處於編譯中
statereporter \ 處於直譯中
] \ 系統進入編譯狀態
statereporter \ 處於編譯中
[ \ 系統進入直譯狀態