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年12月25日 星期日

Earth 2.0!!開放免費是王道!?

Jimmy's papa應該是屬於Earth 1.0的人類,很難想像Earth 2.0的世界,對我兒子Jimmy來說,如果每天都能上網玩3D遊戲兼學習,三不五時政府還會寄送類似樂高NXT或Arduino或太陽能板或小型植物生技工廠等免費套件,讓人民自行組裝設計家戶民生設施,這樣科技免費開放共享的世界,應該是蠻有趣的!!!

呵呵!不知道台灣要等到哪一屆的總統候選人才會提出這樣子的政見.

自由免費世界憲章簡介 An introduction to The Free World Charter Earth 2.0 -Time to Upgrade - SYMBIOSIS

2011年12月21日 星期三

蒙地卡羅法求圓周率(Pi Estimation using Monte Carlo Method in Smalltalk)

维基百科關於蒙地卡羅方法求圓周率的解釋
蒙地卡羅方法可用於近似計算圓周率:讓計算機每次隨機生成兩個0到1之間的數,看以這兩個實數為橫縱坐標的點是否在單位圓內。生成一系列隨機點,統計單位圓內的點數與總點數,(圓面積和正方形面積之比為PI:4,PI為圓周率),當隨機點取得越多(但即使取10的9次方個隨機點時,其結果也僅在前4位與圓周率吻合)時,其結果越接近於圓周率。實際上,計算機產生的隨機數隻能精確到某位數,並不能產生任意實數(例如無理數等等);上述做法將平面分割成一個個網格,由此計算出來的面積當然與圓或多或少有差距。
蒙地卡羅法求pi,在網路上可以查到C/C++,Java,Python,Ruby等等各種程式語言的寫法,唯獨似乎沒看過Smalltalk的實作,所以Jimmy's papa在這裡貢獻一下smalltalk程式碼寫法
n := 10000000.
sum := 0.
r := Random new.
1 to: n do: [:a | (r next squared) + ( r next squared ) <=  1 ifTrue: [sum := sum + 1] ].
pi := (4 * sum / n) asFloat.
Transcript show: 'pi =' , pi asString.
寄件者 scratchlab01

2011年12月16日 星期五

Catroid--用Android操控NXT機器人除了App Inventor的另一選擇

Catroid是一套類似Scratch的積木式程式碼開發工具的Android APP,之前Jimmy's papa曾下載Catroid到我的Android平板小玩一下,那時覺得它的功能跟Scratch對照之下實在非常陽春,不過最近釋出的版本讓Jimmy's papa眼鏡一亮,想不到已經進化到能支援藍牙操控NXT機器人了,改天安裝到我的XOOM平板讓我兒子Jimmy玩玩看

Catroid官網
http://www.catroid.org/catroid/index
Catroid專案
http://code.google.com/p/catroid/

OpenPCR--用買台智慧型手機的錢也可以買台PCR機器在家搞生技

最近宇昌案很火熱,隨著媒體各種相關報導出爐,其中透露出,台灣未來的黃金十年有一部分是靠生技夢實現,這讓Jimmy's papa想起之前看到的一篇文章"連DNA也DIY的時代開始了",文章中介紹的OpenPCR這台便宜的機器,可以在家裡或戶外,運用原本只能在實驗室做的PCR(Polymerase chain reaction 聚合酶鏈鎖反應)技術,擴增一小段已知的DNA片斷來作相關基因研究,它的溝通介面是開放的Arduino,所以你可以研究它公開的原始程式碼,讓它更符合自己的需求,擁有OpenPCR似乎讓人人有機會在家孵生技大夢

Jimmy's papa在想,是不是等Jimmy上國中時,也購入一台來玩玩,研究看看他的調皮基因是從哪裡來的,呵呵,想太多了^ ^

OpenPCR官網
http://openpcr.org/
論壇
http://groups.google.com/group/openpcr
程式碼
https://github.com/jperfetto/OpenPCR

以下是兩段視頻,介紹操作PCR的流程,坦白說寫程式都比它有趣多了,希望看完視頻後不會影響各位的生技大夢
How to do a PCR

pcr procedure

2011年12月15日 星期四

Lestat--用來開發控制Lego NXT機器人軟體的C++函式庫

Lestat: Lego STandard AbsTraction layer (LEGO標準的抽象層)從它的全名可以知道,其實它只是個將通訊底層封裝起來的陽春函式庫,在這個基礎上還可以依自己的需求再進一步加入馬達及偵測器等C++類別,不過Jimmy's papa覺得目前這樣就挺好用了,有些NXT的C++函式庫,封裝得太複雜反而不易除錯

以下是Jimmy's papa在我的linux環境,依Lestat官網指示的測試過程
下載程式碼
https://csrg.inf.utfsm.cl/twiki/pub/ACS/LesTat/lestat-0.2.tar.gz
需求
* 以藍牙控制,則需確定bluez-libs-3.20 已安裝
* 以USB連接線控制,則需確定libusb-0.1.12 已安裝
* 確定編譯工具 scons 已安裝

安裝及使用
* 解壓縮 lestat-0.2.tar.gz
* 在解開的程式碼目錄底下執行編譯 run scons
* 若編譯無誤則執行測試範例./main_test

這是更簡單的C++測試程式碼
int main()
{
    BlueComm nxt;//以藍牙通訊
    try{
        nxt.connect("xx:xx:xx:xx:xx:xx");//用hcitool scan可查出NXT編號
    }catch(NxtEx &ex){
        cout<<ex.toString()<<endl;
        return -1;
    }

    try{
        Opcodes op(&nxt);
        op.playTone(523,500);//音頻
        op.playTone(587,500);//音頻
        op.playTone(523,500);//音頻
        printf("Battery level: %hu [mv]\n",op.getBatteryLevel());//顯示目前電池電力
        
        unsigned char status=1;
        op.setOutputState(0x00,80,0x01,0x00,50,0x20,980,true,&status);//驅動A馬達
        sleep(1);
        op.setOutputState(0x01,80,0x01,0x00,50,0x20,980,true,&status);//驅動B馬達
        sleep(1);
        nxt.disconnect();

    }catch(NxtEx &ex){
        cout<<ex.toString()<<endl;
        nxt.disconnect();
        return -1;

    }
    return 0;

}

2011年12月6日 星期二

安裝scat(Scratch)到Android平板

以下是Jimmy's papa整理出來的安裝步驟,由於我的工作環境大多在linux上,Windows的使用者可能要稍微注意不同處,而且提供的檔案連結可能因為新版本而失效,可能要麻煩各位網友到原始下載頁面點選下載 ,倉促之間寫成有任何問題歡迎告訴Jimmy's papa

下載scratch image
為了簡化程序,Jimmy's papa將image相關檔案整理好了
下載scat.zip
將scat.zip解壓縮
內含scat.image , scat.changes , PharoV10.sources 三個檔
寄件者 scratchlab01


CogDroid VM APP
http://code.google.com/p/squeakvm-tablet/downloads/list
下載CogDroid-alpha-20111009.apk

安裝Android SDK
再到http://developer.android.com/sdk/index.html下載Android SDK(依你的OS擇一),並解壓縮
http://dl.google.com/android/android-sdk_r15-windows.zip
http://dl.google.com/android/installer_r15-windows.exe
http://dl.google.com/android/android-sdk_r15-linux.tgz

安裝SDK其他元件
# On Windows, double-click the SDK Manager.exe file at the root of the Android SDK directory.
Windows使用者請以滑鼠點擊SDK Manager.exe
# On Mac or Linux, open a terminal and navigate to the tools/ directory in the Android SDK, then execute: android
寄件者 scratchlab01

Linux則須開啟終端機命令列視窗,執行
cd /tools
執行
./android
寄件者 scratchlab01
執行完成後,會發現多了好幾個目錄,其中的/platform-tools目錄裡,有我們要的adb(Android Debug Bridge)這隻程式
寄件者 scratchlab01
準備傳輸檔案及APP到Android平板
將先前四個檔案scat.image , scat.changes , PharoV10.sources , CogDroid-alpha-20111009.apk
複製到/(你安裝的目錄)/android-sdk-linux_x86/platform-tools
將你的平板的資料傳輸線,插入PC及平板的USB插槽
在你的終端機命令列視窗執行
cd ~/(你安裝的目錄)/android-sdk-linux_x86/platform-tools$

./adb push scat.image /sdcard/Presentation/scat.image 

./adb push scat.changes /sdcard/Presentation/scat.changes 

./adb push PharoV10.sources /sdcard/Presentation/PharoV10.sources 

./adb push install CogDroid-alpha-20111009.apk

按一下平板的CogDroid圖示,會出現以下畫面
寄件者 scratchlab01

若出現PrimitiveFailed警告視窗,沒關係,按下Abandon按鈕就對了

2011年12月3日 星期六

超有趣的土風舞人肉排序演算法

最近Jimmy's papa在YouTube看到一群舞者竟然以匈牙利民俗舞蹈玩起泡泡排序演算法,不禁懷念起在學生時代用C語言寫排序演算法的快樂時光, 其實在台灣土風舞社團蠻多的,常常在公園或廣場上就可看到一群婆婆媽媽們在跳,或許有人可以號招阿公阿嬤共襄盛舉,或是有請三太子也來玩泡泡排序演算法

泡泡演算法(Bubble-sort)匈牙利土風舞

快速演算法(Quick-sort)匈牙利土風舞

這裡還有吉普賽及羅馬尼亞的土風舞
http://www.youtube.com/user/AlgoRythmics

2011年12月2日 星期五

Brain Stopping

Jimmy's papa在網路上讀到「頭腦過後」這篇文章,開頭有段話蠻有趣的
在短時間大量閱讀有一種效果 那就是透過資訊將大腦操到當機,大腦就會停止思考 也或是在不斷的思慮與計算後,我們就會討厭使用大腦 於是就在大腦停止運作的那一瞬間 我們會感覺原來的世界出現一道裂縫 裂縫打開的時間非常短 但只要那麼一瞬間敏感的覺察 就會看到有某種東西從這道裂縫溜進來了 如果說這個我們身處的世界是邏輯運作的世界 那這種東西就是從「非邏輯」的世界所跑進來的
作者這幾段話,Jimmy's papa也曾在某些網站讀到類似的說法,及運用相似原理的一些練習法(如特殊的呼吸法), 上述的作法似乎比較激烈,或許只適合這時代資訊科技或金融交易從業人員,不過或許即將來臨的 2012年, 據說有大量的事件會壓縮在這個時間發生,大家都有機會體驗到這種效果
Jimmy's papa比較喜歡我的偶像酷型男的方式,當面對宇宙無敵超級完美大巨浪-大瘋狗-迎面而來時,面不改色的拍完鼓,說著「只要呼吸就好」^ ^