2012年10月30日 星期二

JForthBlocks--Include Forth sourcecode file

Jimmy's papa已做好include積木,可引入並執行Forth檔,同時也加入註解"\"積木,為了JForthBlocks的Web環境,註解"\"積木花了不少時間修正,適應由積木產生的註解字串,而非只有來自檔案內容的註解

隨著JForthBlocks收錄的積木(Forth words)越來越多,Jimmy's papa實在很擔心會一時疏忽讓bug住了進來,有了include積木,Jimmy's papa就可以寫一些測試案例(Test Case)隨時測試
寄件者 scratchlab02
請直接將積木XML,貼至XML編輯區,便可見上圖出現的積木
<xml xmlns="http://www.w3.org/1999/xhtml"><block type="text_cquote" notchtype="LEFT_RIGHT" inline="false" x="1121" y="1274"><title name="STRING">./forth/testcase.f</title><value name="NEXTWORD"><block type="utility_include" notchtype="LEFT_RIGHT" inline="false"></block></value></block><block type="text_backslash" notchtype="LEFT_RIGHT" inline="false" x="1118" y="1316"><title name="STRING">Jimmyscratchlab 附註 執行測試案例</title></block></xml>
目前testcase.f的檔案內容
\ 試印出 99 乘法表 
: x 9 for cr r@ 9 for dup r@ * 2 .r space next drop next ; x

2012年10月29日 星期一

[Javascript] XMLHttpRequest同步與非同步取檔

在本機未使用Web Server的情況下測試網頁Javascript程式,若需要讀取檔案,以Web File API需搭配INPUT tag但只限本機檔案, Jimmy's papa也測試過
var file=File(path) //insecure exception
但會產生insecure例外

如果要讀取網頁路徑下的檔案,則需借助AJAX,也就是運用XMLHttpRequest物件
    var xmlhttp,fname;  
    if (window.XMLHttpRequest) xmlhttp=new XMLHttpRequest();    
    if (xmlhttp == null) alert("Your browser does not support XMLHTTP.");
    /*異步時,在open與send之前用這段程式碼*/
    //xmlhttp.onreadystatechange = function() {
    //    if (xmlhttp.readyState==4) {
    //        alert(xmlhttp.responseText);}}
    xmlhttp.open("GET", fname, false);//false為同步,true為異步
    xmlhttp.send(null);
    /*同步時,在open與send之後用這段程式碼*/
    if (xmlhttp.status == 200 || xmlhttp.status == 0) { //0為本機開檔 
        alert('xmlhttp.status '+xmlhttp.status);
        alert(xmlhttp.responseText);  
    }else{  
       alert(xmlhttp.statusText);}  

2012年10月27日 星期六

將Forth當做Web Script?

底下兩段程式碼,可看到已經有人把Ruby與Processing移植到Web,將各自的指令語法或原始碼檔夾入HTML標籤,做為Web Script執行

由於現今Javascript已然成為Web Assembly,或許許多常見的程式語言皆可如此

<script type="text/ruby">
#class Foo; def initialize; @foo = 'whee'; end; end; f = Foo.new; f
Time.now
</script>
<script src="/processing.js"></script>
<canvas datasrc="blendColor.pjs" width="200" height="200"></canvas>


Jimmy's papa在想,如果其他程式語言都能成為網頁腳本,那對Forth來說應該也不成問題呀!

<script type="text/forth">
/ 試印出 99 乘法表
: x 9 for cr r@ 9 for dup r@ * 2 .r space next drop next ; x
</script>
或是
<script type="text/forth" src="/9x9.f"></script>
不過想歸想,實作時或許會遇到很多有趣的挑戰吧!!

2012年10月17日 星期三

JForthBlocks--Forth說 I,J,K 即非 I,J,K 是名 I,J,K

Jimmy's papa為了讓Jimmy小朋友認認字,收收心,偶而會要他念幾頁金剛經,

經中須菩提有云
【 世尊說:我見、人見、眾生見、壽者見, “Because (when) the Tathagata speaks of the view of an ego, a Personality, a being and a life, 即非我見、人見、眾生見、壽者見,是名我見、人見、眾生見、壽者見 “it is not really, (but) is (expediently) called the view of an ego, a personality a being and a life.” 】。
雖然不甚了解此段經文的意義,反正是經典,小朋友有唸有保佑(BoBee)啦!!

不過今天寫Forth小範例時,使用Loop Index卻遇見非預期的結果,讓Jimmy's papa見識到了
Forth說 I,J,K 即非 I,J,K 是名 I,J,K
寫慣一般程式語言的人,或許看了書上的Forth程式碼會主觀認定I是最內迴圈索引,J是外迴圈索引,K是外外迴圈索引

不過事實上Forth的I,J,K是指返回堆疊(Return Stack)當下時間點實際暫存的迴圈體索引, 所以光看程式會以為外外迴圈的索引值要用K,但實際執行取索引值時,返回堆疊(Return Stack)或許只有外外迴圈一個迴圈體而已 ,所以只能用I取索引值
寄件者 scratchlab02
寄件者 scratchlab02
底下是XML,直接貼到XML編輯區,便能自動載入積木程式
<xml xmlns="http://www.w3.org/1999/xhtml"><block type="processing_Setup" notchtype="LEFT_RIGHT" inline="false" x="54" y="20"><value name="NEXTWORD"><block type="variable_value" notchtype="LEFT_RIGHT" inline="false"><title name="NAME">psjObj</title><value name="NEXTWORD"><block type="procedures_callnoreturn" notchtype="LEFT_RIGHT" inline="false"><mutation name="psjObj"></mutation><value name="NEXTWORD"><block type="math_PushNumber" notchtype="LEFT_RIGHT" inline="false"><title name="NUM">230</title><value name="NEXTWORD"><block type="math_PushNumber" notchtype="LEFT_RIGHT" inline="false"><title name="NUM">230</title><value name="NEXTWORD"><block type="math_PushNumber" notchtype="LEFT_RIGHT" inline="false"><title name="NUM">230</title><value name="NEXTWORD"><block type="processing_BackgroundByValues" notchtype="LEFT_RIGHT" inline="false"></block></value></block></value></block></value></block></value></block></value></block></value></block><block type="procedures_callnoreturn" notchtype="LEFT_RIGHT" inline="false" x="55" y="58"><mutation name="psjObj"></mutation><value name="NEXTWORD"><block type="math_PushNumber" notchtype="LEFT_RIGHT" inline="false"><title name="NUM">0</title><value name="NEXTWORD"><block type="processing_FillByGray" notchtype="LEFT_RIGHT" inline="false"></block></value></block></value></block><block type="compile_define_highword" notchtype="Top_Bottom_Right" inline="false" x="55" y="96"><title name="NAME">MyHighWord</title><statement name="STACK"><block type="math_PushNumber" notchtype="TOP_BOTTOM_RIGHT" inline="false"><title name="NUM">20</title><value name="NEXTWORD"><block type="math_PushNumber" notchtype="LEFT_RIGHT" inline="false"><title name="NUM">0</title></block></value><next><block type="control_DoLoop" notchtype="Top_Bottom_Right" inline="false"><statement name="STACK"><block type="control_i" notchtype="TOP_BOTTOM_RIGHT" inline="false"><value name="NEXTWORD"><block type="math_PushNumber" notchtype="LEFT_RIGHT" inline="false"><title name="NUM">2</title><value name="NEXTWORD"><block type="math_Mod" notchtype="LEFT_RIGHT" inline="false"><value name="NEXTWORD"><block type="math_TwoSlash" notchtype="LEFT_RIGHT" inline="false"><value name="NEXTWORD"><block type="comment" notchtype="LEFT_RIGHT" inline="false"><title name="COMMENT">為何用I不用J,這是Forth有趣的特性,因為此時間點Return Stack只存在一個迴圈體</title></block></value></block></value></block></value></block></value><next><block type="math_PushNumber" notchtype="TOP_BOTTOM_RIGHT" inline="false"><title name="NUM">25</title><value name="NEXTWORD"><block type="math_PushNumber" notchtype="LEFT_RIGHT" inline="false"><title name="NUM">0</title></block></value><next><block type="control_DoLoop" notchtype="Top_Bottom_Right" inline="false"><statement name="STACK"><block type="stack_dup" notchtype="TOP_BOTTOM"><next><block type="procedures_callnoreturn" notchtype="TOP_BOTTOM_RIGHT" inline="false"><mutation name="psjObj"></mutation><value name="NEXTWORD"><block type="math_PushNumber" notchtype="LEFT_RIGHT" inline="false"><title name="NUM">25</title><value name="NEXTWORD"><block type="control_j" notchtype="LEFT_RIGHT" inline="false"><value name="NEXTWORD"><block type="math_Multi" notchtype="LEFT_RIGHT" inline="false"><value name="NEXTWORD"><block type="stack_rot" notchtype="LEFT_RIGHT" inline="false"><value name="NEXTWORD"><block type="control_i" notchtype="LEFT_RIGHT" inline="false"><value name="NEXTWORD"><block type="math_Add" notchtype="LEFT_RIGHT" inline="false"><value name="NEXTWORD"><block type="math_PushNumber" notchtype="LEFT_RIGHT" inline="false"><title name="NUM">20</title><value name="NEXTWORD"><block type="math_Multi" notchtype="LEFT_RIGHT" inline="false"><value name="NEXTWORD"><block type="math_PushNumber" notchtype="LEFT_RIGHT" inline="false"><title name="NUM">20</title><value name="NEXTWORD"><block type="math_PushNumber" notchtype="LEFT_RIGHT" inline="false"><title name="NUM">8</title><value name="NEXTWORD"><block type="processing_DrawRect" notchtype="LEFT_RIGHT" inline="false"><value name="NEXTWORD"><block type="comment" notchtype="LEFT_RIGHT" inline="false"><title name="COMMENT">此I非彼I</title></block></value></block></value></block></value></block></value></block></value></block></value></block></value></block></value></block></value></block></value></block></value></block></value></block></next></block></statement><next><block type="stack_drop" notchtype="TOP_BOTTOM"></block></next></block></next></block></next></block></statement></block></next></block></statement></block><block type="procedures_callnoreturn" notchtype="LEFT_RIGHT" inline="false" x="58" y="431"><mutation name="MyHighWord"></mutation><value name="NEXTWORD"><block type="comment" notchtype="LEFT_RIGHT" inline="false"><title name="COMMENT">JimmyScratchLab Demo</title></block></value></block></xml>

2012年10月11日 星期四

JForthBlocks--使用[IF]...[ELSE]...[THEN]積木

使用[IF]...[ELSE]...[THEN]積木可以讓Forther選擇控制哪些程式碼段落需要編譯與解譯,哪些段落則不需要

在開發Library時,因為各個Forth系統不一定實作Library所用到的符式詞(Forth word),需要用到[IF]...[ELSE]...[THEN]積木適時補上缺漏

以下範例說明,如何選擇哪些段落需要執行,可到JForthBlocks線上試玩版 jforthblocks.appspot.com試玩看看

寄件者 scratchlab02
寄件者 scratchlab02

2012年10月9日 星期二

Jimmy的樂高積木修行--虎之卷30頁

凡走過必留痕跡,紀錄Jimmy的積木組裝修行,簡單的小組件,Jimmy很快就組完了

寄件者 scratchlab02
寄件者 scratchlab02
寄件者 scratchlab02

Jimmy的樂高積木修行--虎之卷26頁

凡走過必留痕跡,紀錄Jimmy的積木組裝修行,雖然看似簡單,但因為手上的鏈條不夠長,也沒有適合的大齒輪,Jimmy花得時間比預期久

寄件者 scratchlab02
寄件者 scratchlab02

2012年10月7日 星期日

新貢品LEGO TECHNIC 9398 四輪驅推動車

凡走過必留痕跡,這是Jimmy童心未泯的叔叔貢獻的LEGO TECHNIC 9398,組裝完後拍特寫謹此留念,接下來它的命運就是拆散進入Jimmy的積木箱,它的大輸出動力馬達及彈簧避震支架是少見的積木配件,將來Jimmy想組裝的機器人就可以考慮運用這些特殊組件

寄件者 scratchlab02
寄件者 scratchlab02
寄件者 scratchlab02

2012年10月6日 星期六

[UFO]高雄左營上空的不明飛行物體

Jimmy's papa外出散步時,經常會抬頭看看天上的雲朵或星星月亮,讓長時間注視電腦螢幕的眼睛能舒緩一下,有天晚上經過華夏路時,赫然發現前方大樓上方有個閃著紅藍光的不明飛行物體,沒有盤旋也沒有移動,我和Jimmy's 媽看了快十分鐘的時間,它還是滯留不動

後來回家時,往蓮潭的方向一望,發現夜空中竟然有兩個一高一低的閃著紅藍光的光點,叫家人過來看,Jimmy's grandma也說微笑公園那邊常做運動的老人家也經常看到這一閃一閃的物體

現在,只要Jimmy's papa抬頭看到那兩三顆經常看到的星星,就會覺的越發可疑....


以下這些網友拍到的不明物體,很像我那天見到的,想不到2010年就有人看到啦!!! ps.最近左營萬年祭,Jimmy's papa行經蓮潭會館平交道前,等待火車通過時,抬頭赫然又看到那個飛行物,好多人都拿起手機拍照,應該是有人施放遙控的飛行器,是交通單位嗎?

2012年10月5日 星期五

[符式相關活動]魔法自走車 Arduino eForth 程式設計 研習 競賽 第一期活動已 開放報名

臺灣符式推廣協會正在舉辦『魔法自走車趣味競賽』,主辦單位還提供免費課程及器材,教大家如何以精幹剽悍的符式(Forth)語言控制硬體

可惜Jimmy's papa住在路途遙遠的高雄,否則也很想報名參加啊!!!