About虛擬&實際

@分享虛擬與實際的世界中所遊玩的心得紀錄,從物理化學到生命科學、從人文藝術到現代科技、從虛擬介面到實際生命體。享受的只是一種學習與體驗。若文章內容有誤,歡迎提出以供修改,對文章的回饋,歡迎寄信給我!一起分享,互相學習成長的環境。
@個人簡介在『關於韃靼』
@我是韃靼~我的信箱:chenyuquan at gmail dot com

2013年4月27日 星期六

(轉帖) Arduino Uno vs BeagleBone vs Raspberry Pi

前言:
Make網站提供了一篇好文章在介紹Arduino, BeagleBone以及Raspberry Pi的性能比較,提供想入手的新手(或欲增加新夥伴的老手)一些建議與資訊。最直接有趣的當然是表格的呈現如下:
(資料來源:Makezine.com)



三個產品照片:(來源:RS component, Arduino.cc, BeagleBoard.org)








參考網站:
中文:Arduino Uno、BeagleBone與Raspberry Pi之比較
原文:Arduino Uno vs BeagleBone vs Raspberry Pi
另外自己也備份網頁為PDF檔案,以避免網站失聯。

Auto-Named filter sample producer_名稱自動生成器

前言:
從開始進行紅外光譜儀的樣品分析後,就覺得替樣品編名字實在是個“瑣碎”的工作,本來Excel是有自動代入的功能,但有些編號與名稱就比較麻煩,還是得一個一個key-in,這兩天決定花點時間寫個樣品名稱自動生成器。

架構:
最主要的關鍵點是:
每天與連續的天數,所以我用了這樣的方式:
" - " :dash, 用來表示連續,例如4-7,表示4,5,6,7共四天。
" , " :comma, 用來表示分開,例如,4,8,表示4,8兩天。
另外兩個subVI:
A:用來判斷上面提到的dash & comma兩個的邏輯判斷
B:用來規範名稱長度的標準,可以定義月/日的位數,我通常習慣兩位如YYYY/MM/DD,例如,2013/03/04這樣。

Code:
MainVI;
SubVI
後記:
目前這樣的設計對於擴展功能稍微侷限了點,本來是想設計幾個輸入端,例如“名稱”、“數字”兩種,然後就可以自定義各種的名稱,不過現在的設計結果已經堪用,暫時就不用修改了。

2013年4月24日 星期三

[學習資料] Python


前言:

最近開始了新程式語言的學習-Python,除了網路上的大量資料外,我也選用了幾本書作為開頭。這間紀錄了一些實體上以及網路上的資訊、教學、技術文章和一些論壇。

安裝:

安裝在Window XP上面是非常的順利,而且書中的確也這麼地說。

不過在2013/05/02也在Mac上安裝,就出現了一些小問題:

安裝主程式:
Python 3.3.1 Mac OS X 64-bit/32-bit x86-64/i386 Installer 
安裝後開啓發現有個元件安裝不正常,所以不能執行,根據建議安裝了這個:
ActiveTcl 8.5.13
在安裝結束後就正常囉!
而這個ActiveTcl元件根據網頁的說明,就是Tcl/Tk,這個在我開始學習更多程式語言後就蠻常看到的,值得多花點時間瞭解。


參考書籍:(O:已有書籍)

[O]The Quick Python Book, Vernon L. Ceder
[O]徹底研究 Python 科學計算 _ 張若愚

Beginning Python_ from Novice to Professional- Magnus Lie Hetland
Dive into Python 3- Mark Pilgrim 
Head First Python- Paul Barry
head_first_programming- Paul Barry & David Griffiths
Programming in Python 3, 2nd- Mark Summerfield
Learning Python 4th- Mark Lutz
Programming Python 4th- Mark Lutz
Python Essential Reference, 4th- David M. Beazley 
Real world instrumentation with python- J.M. Hugbes


網際網路:

Python official Site
Python Wiki
Python 台灣使用者群組
Python 教學文件
Python Gossip

[學習紀錄] Python-The Quick Python Book

前言:
幾經考量後,以Python為第一個學習開始了文字型態的程式語言,雖然MATLAB也學了一些,不過還是偏向科學運算為主。Linux的部分則還是先以大綱式學習為主。我是以"The Quick Python Book, Vernon L. Ceder" 這本有人推薦的書籍開始,內容相對於其他的份量較少,也描述得比較簡易(這點可能要等我研讀玩其他相關的書籍才能做評論)。在這裡的紀錄會以一些我想要記下的關鍵點,觀念,常用/重要指令、說明等等為主,也是屬於持續更新的紀錄。時間有限,珍惜每時每刻,是知足的起點。(扯遠了)

基本的目標是將基礎的章節先學過一遍,進階的部分則有空時瀏覽或者實際使用遇到時參考。

Ch 1: About Python~
快速地介紹有關Python的一些事情,如為何使用跟Python可以做到什麼,什麼不可以做到,以及介紹學習新版本Python 3。

Part II, The Essentials
Ch 2: Getting started

介紹Python的優缺點以及為什麼適合學這套程式語言,還有一些一開始必須要知道的觀念,例如help(),每套程式語言,包含LabVIEW, MATLAB都一樣,help是除了解決使用者的疑惑外,其實也同時是學習過程的一部份。而Python的界面有兩種:一種為command-line(basic interactive mode)而另一種IDLE(integrated development environment)。

小技巧:

1. Cursor點到已打過的那行後,按下enter就會“重複&貼上”那行到最新的一行。或者使用Alt-P/N瀏覽上下的歷史指令。
2. key-in一半的指令,按下Alt-/就可以自動補完相對應的指令。
3. 若"lost prompt"則輸入Ctrl-C則重新新的一行。
4. 對於IDLE上方的menu,double-clicking虛點則可以分離sub menu到其他想要的位置。

Ch 3: The quick Python overview

快速地介紹一些概要,如data types, control flow structures, Module creation以及object-oriented programming等等,非常的概念性,包含一些範例,不過說真的我很多都看不懂,誠如作者所說的,先有初步的概念(broad strokes),接著就要進入基本的練習與操作了。

Ch 4: The absolute basic (Part II, the essentials)
有介紹到的command:
while, print, del, 

(p39)ex: x = 'Can\'t get by without a backslash'
其中Can\'t 在print出來後就是Can't,但是若沒有加入"\"的話會被視為string已經結束(即只有Can是string),所以加入是要表示 ‘ 是string的一部份。 

(p43)The None Value, "None"的"N"是大寫,小寫不會有作用,然後None是用來表示空的數值(Empty Value)

(p43)提到使用者輸入資訊,可以打入:
name = input ("Name?")
會出現:
Name? XXX (XXX就是要自己打入)
然後鍵入print(name)
就會出現剛剛打的:
XXX

(p44)有Python coding conventions的整理table4.1可供參考。

Ch 5: List, tuples, and sets

這章節介紹了Lists, tuples, and sets. Lists是彈性很大,而tuples是嚴格形式的lists.

(p46)list內若有另外的list,則在計算len(長度)的時候是不會計算裡面list所含的元素數目的。

(p47)list的計算可以從前面算,也可以從後面算來(這點,LabVIEW好像就不行了)

(p48)複製新的list可以不改變原本的list而衍生應用更廣(x[:]指x全部)。ex: y = x[:]

(p48)append, extend都是直接加到最後,將list加到另外的list要用extend否則會變成list中的list.

(p50)del list[n] = list[n:n+1]

(p50)remove會先刪除list中的第一個,若要刪除多個,就必須重復使用remove指令。

單字:(p51) lexicographic 辭彙編纂的.

(p56)範例中:original = [[0], 1]
nested[0] = 'zero'
original
[['zero], 1]
original[0][0] = 0
其中original[A][B], [A]是list中的第幾個位置,因為初始位址([0])剛好是個list所以[B]是定義內部list的位置。

(p56)提到比較深入的shallow & deep討論如何複製原始的list。shallow會改變原本的list中的list,而deep則不會有任何改變。

5.8 Sets, sets的項目必須是immutable & hashable, 中文含意大概是“永不變的”以及“可細分為極小碎片/片段的”。屬於Set的有:ints, floats, strings, and tuple, 而list, dictionaries, and sets自己本身就不屬於sets. 補充sets與list & tuple兩個不一樣的點:A. sets中的原數必須是獨一的,亦即有重復的會自動刪除。B. 另外的不一樣,是sets中的排列是隨機的,無法控制。

若要將set變成sets中的一員,就必須使用到"frozensets" function了,而且建立後就不是sets了。書中範例是定義令一個變數為某個sets的變形,例如x: {1, 2, 3, 5}, z = frozensets(x), 這樣z就不再是set且可以被加入x中了。

Ch 6: String

Ch 7: Dictionaries
Ch 8: Control flow
Ch 9: Functions
Ch 10: Modules and scoping rules
Ch 11: Python programs
Ch 12: Using the filesystem
Ch 13:Reading and writing files
Ch 14: Exceptions
Ch 15: Classes and object-oriented programming
Ch 16: Graphical user interfaces

Part III, advanced language features
Ch 17: Regular expressions
Ch 18: Packages
Ch 19: Data types as objects
Ch 20: Advance object-oriented features

Part IV, where can you go from here?
Ch 21: Testing your code made easy(-er)
Ch 22: Moving from Python 2 to Python 3
Ch 23: Using Python libraries
Ch 24: Network, web, and database programming

後記:


參考:

[學習資料] Python 


2013年4月21日 星期日

Project List for everything_持續更新...

前言:
常常有很多想要做的計畫,但是總是靈光一閃之後就不了了之,或者暫時碰壁無解也是常有的!藉由電子紀錄與置放在列表清單中(就不會忘了!!!)來提醒自己還有很多有趣的東西可以玩的啦!!

清單:
1. (20130421) 從Blogger擷取訪客流量,使用LabVIEW,或者.....
2. (20130816) 結合Raspberry Pi & Arduino
3. (20130816) 使用LabVIEW控制Arduino
4.

2013年4月20日 星期六

一元二次方程式 for LabVIEW

前言:
一元二次方程式,應該是國中?(還是國小?)的數學,2007年在練習LabVIEW的時候寫了這樣的code來表示,這幾天在整理檔案的時候又瞧見了他,所以順便玩玩,發現"正常"情況下,若輸入a=0(事實上這樣是不正常的,因為就不是一元二次方程式了唷)。不過我認為,一個良好程式本來就該判斷輸入是否合理,因此我改寫了判斷機制。

Code:
簡易的判斷a是否為0即可,若a=0則要求重新檢察並輸入正確的數值。
後記:
好像很多餘的設計,不過自己的經驗卻常常在寫些程式(越來越大的格局時),小小的邏輯判斷可能就會導致一連串的不合理,給自己謹記在心的紀錄。

2013年4月18日 星期四

Timing- Wait (ms) & Wait Until Next ms Multiple(ms)_ 補充

前言:
討論了兩次的Timing工具,再找一些其他資料的時候,赫然發現原來以前也曾經參予過這樣的題目。

主要有兩張圖片從網頁擷取,可由參考網址連到原文,當作是備份文章囉。


















參考:
剛學labVIEW搞不太懂Timing VIs_IT360
Labview 多重時間延遲與輸入_IT360

2013年4月13日 星期六

安裝LabVIEW 到 MAC Book Air

碎碎念:
今天在整理程式的時候,忽然想到前兩個星期安裝LabVIEW到MBP時候一直出現錯誤,什麼原件沒有安裝(忘了將提示給抓圖是我的超級疏忽!!),本來就想說那還是持續用Window系統下撰寫就好,結果沒想到再一次打開MBP內的Window 7時候發現程式列,卻發現有耶~不過打開後來是以MAC系統為主(有顯示在Window 7內就是了)。真是奇怪!!

參考:
NI.com

LabVIEW Projects_股票資料蒐集與分析

前言:
一年多前,開始學習如何投資理財,讀了一本書有教一些基本的EXCEL與公司股票資訊如何計算。不過台灣股票就上千種,如何一間一間的去篩選呢?就想到了使用LabVIEW去截取網路資訊,帶入書中所提供的參數與建議公式,可以快速地取得結果。雖然算出來也是很大量,不過可以作為一個參考基準點倒是也不錯。

程式設計:
A:從範例程式中找到如何從web serve中擷取資訊,不過一般來說截取下來就像是你在網頁按右鍵中的檢視網頁原始碼後呈現的一樣,需要再進一步的篩選,像是下列:


這個VI部分就是將股票號碼輸入,然後篩選需要的部分(例子中是取得歷年股利的資訊)。將所以股票資料鍵入,然後就可以輸出所有的股票的歷年股利了。


B:另外的部分是,取得股票當下的價值,然後將這些資料跟A部分歷年股利代入書中的公式,可以得到理想股價與價差資料。這樣就可以作為選股票的一項參考值了。


PS1:因為我是從YAHOO中擷取資訊,所以只有“上市”的股票,未上市的就沒有了。

PS2:程式與伺服器連結截取資訊時,我有放個"wait until next multiple"以減少“下載資料“的速度,我試過太快”下載“資訊,會被YAHOO伺服器認定為有問題的IP來源,而被鎖住(或者擋住一陣子)。真是有趣~哈哈。

後記:

本來前一陣子是有打算重新撰寫的,不過後來釐清原本寫的邏輯,發現還是可以使用!所以偷懶先不更改了,那時也寫了幾個subVI作規劃與將來的衍生應用。
另外的好事是,從裡面的確挑了兩個不錯的股票小小的賺了一點錢,現在本金少,只能先從低價的開始練習。

參考:

第一次領薪水就該懂的理財方法: 買股票、基金、房地產,這樣算才會賺 _怪老子


2013年4月7日 星期日

LabVIEW Projects_2008/11-2009/02_Integration of MEMS-Fabricated Gas Chromatography

前言:
2008年畢業時,因為當兵一些事情的陰錯陽差,有了三個月多的空檔,跟研所的前老闆提到,剛好他跟業界有個計劃要做,希望找個有些經驗的人來做,所以我就上台北去師大作個短期的專案了。這個專案主要作微小化的氣相層析儀,搭配非傳統&市售的感測器作為偵測器,做出來大概比一般球鞋盒子還要小吧(理想上)。我的工作除了元件中的某個部分(研所的論文一半)外,主要的就是軟硬體整合了,其他的元件都是學弟妹們努力的結晶。

硬體設計:
ref:這張的所有權是我學弟的,因為收到兵單去當兵,只能讓他辛苦地將剩下的收尾!

軟體設計:

實驗流程大概是,從環境中採集空氣-->濃縮管加熱將空氣樣品取出-->進入層析管分離-->進入感測器偵測樣品-->(乾燥空氣清洗濃縮管&感測器等等)-->下一個循環

Code:

由於曾經是業界計畫,雖然已經過了這麼多年且當初的程式早已改版N種,但是基於信任守則還是只秀出人機介面,程式區就免了。


後記:

這個計畫對我而言是從開始學習LabVIEW後寫得比較大型的儀器控制,因為要考量到的硬體數量變多,要設計流程,不過因為主要都是使用NI-DAQ所以在資料截取與硬體控制的部分比較沒這麼複雜,難的是去思考如何“合理”地完成實驗的流程。而且為了只是能夠運作,所以當初一開始並沒有試著去使用狀態機(state machine)以及其他更好的方式(一定有的)。雖然在服役期間的空檔,也著手想優化程式,主要的心態是挑戰自己,但是寫了一半以後,知道沒硬體測試,對方(業界)也不見得會在想用這樣的程式,畢竟對方也請了新的人員。現在又有新的計劃可以嘗試,因此好好的改用新的寫法試試也是一種樂趣跟挑戰了。

參考:

奈米銀光學感測器之表面修飾與氣體選擇性研究暨微機電-氣體樣品前濃縮裝置之自動化系統建立

2013年4月6日 星期六

LabVIEW Projects_ 個人帳務系統-part I

前言:
從2010年以後,開始學習記帳,從一開始的零零落落,直到努力往前追朔至無法再取得資料的日期,現在也記了三年有餘。大部分都是使用EXCEL的方式記帳,經過三年的整理也有模有樣,可惜的是在搜尋舊資料以及歸檔總是有點累贅,雖然現在的智慧型手機(或者更多免費的網路資源)有很不錯的記帳程式,但是總是有一點點的不是我所想要的,於是乎,動手寫個程式不也很好,這樣就可以把程式衍生到資料處理的領域。不過從開始雛形到現在也已經一年有餘了,可見人沒有幹勁真的是沒有藉口-”懶“就是了。


程式架構:
預計是先使用筆記本鍵入(table分隔)或者使用excel簡易輸入資料,然後再使用LabVIEW去取得資訊,排列,分類,重組等等。因為我有預設了記帳的時候可能不會按照日期去記錄,所以先寫了subVI是有關日期重新排列,然後同時也將相對應的項目同時完成排列。

Code:


後記:
沒想到幾個構想就花了我一天多才完工,不過也整理了之前撰寫的程式,改成SubVI以供將來可活用的項目。雖然這些功能在EXCEL裡面就只是”按一下“就成功了,但是實際用程式語言來寫,就真的是考驗自己的邏輯囉。

下個目標,依照”主分類“、”次分類“來處理資料。

不過打到這裡忽然想到,如果直接進行分類,也不需要先將時間排列;不過隨即想到,若我先分類的,但是若要”檢視“整理後的資料,其實還是將時間排列整齊會比較俱有”易讀性“。

2013年4月4日 星期四

Timing- Wait (ms) & Wait Until Next ms Multiple(ms)_ 修改版

前言:
自從上次自己搞的糊塗的地方:Timing- Wait (ms) & Wait Until Next ms Multiple(ms),後來想想應該回歸最原本的測試,從簡易的觀點思考。

修改版本:



測試:
若按照原本的測試,同為"Wait" 或者 "Wait until next multiple"的設定時,的確從結果是可以看出合理。即在"Wait"的條件下,較高的code運行會持續地向下執行而不理會所設定的數值,但"wait until next multiple"會變成每圈執行的起始時間相同,就變成兩個迴圈變得沒有誤差了!
所以結果是:一個"wait"而另一個"wait until next multiple"在高於設定值時(ex: code running time = 120ms, looptime = 100ms),"wait"的執行圈數就會變得比"wait until next multiple"少了!

另外在上一篇有提到,在code time>=198以上的話,兩個loop幾乎就不會有次數差異,但是在198以下的話,大概就是兩個差異的時間造成的次數差異。整理如下:
code time---相差次數(wait是屬於較少圈的)
190---45
180---40
170---35
160---30
150---25
140---20
130---15
120---10
很有趣,就是190 & 100 (looptime)的平均時間,然後"wait"需要較久的時間,多出的時間可讓"wait until next multiple"多跑的時間。
然後code time在大於200ms後,又開始慢慢地增加兩種回圈的運行次數。但是次數稍微較少,例如:

code time---相差次數(wait是屬於較少圈的)
220---8
250---18
280---28

後記:
總結來看,目前大概的猜測是因為當進行"wait"時候需要較久,所以達到99次會需要較久時間,可是同時"wait until..."卻“似乎“不會受到影響,所以可以”多“執行幾次100ms的倍數。這...令人費解呢?怪哉~怎麼解釋比較合理?還是一頭霧水!!


參考資料:
LabVIEW Pro_基礎教學_程式執行架構


Image J 測試

前言:
之前因為計算採樣的Filter使用量,所以拍了照片,本來也是想使用ImageJ來計算,不過一開始小小的失敗,後來改用土法煉鋼的使用powerpoint計算面積也是可行。後來又異想天開地想說使用照片的色階程度(RGB-->Gray),就再次的使用ImageJ,參考了手冊與幾個網頁,得到了很不錯的結果。

方式:
Open->selected picture
開啟Pixel inspection Tool,點選畫面上的位置就會出現Pixel Value table上面就有你所選擇的範圍內的資料。點選這個table左上方的Prefs就會出現“Pixel Inspector Prefs..”選項裡面可以修改點選的範圍&RGB的輸出值,可以直接改成Gray Value,還有其它參數等等。

(小紅框就是點選的範圍)

另外,若要在更大的面積計算RGB或者Gray value可以使用安裝後已經有的套件可供計算。先選擇你想要計算的範圍,然後按照這個路近:

路徑:Plugins-->Analyze-->Measure RGB
就可以計算出完整的數值,如下:

(黃色的框框就是選取的範圍)

小結論:

目前看起來是8bit的解析,還不是很瞭解圖像的資訊,還要多收集資料學習囉,另外跟學弟討論過MATLAB好像讀入也是8 bit(~255)所以我想應該基本上都是這樣吧!
還有個小目標就是改用LabVIEW的方式讀取與做一樣的分析。

附記:

ImageJ是基於JAVA且可以通用在很多平台(不過還是有分平台選擇下載的版本),是個Open Source,可供修改、創造與分享。

(from ImageJ教學)

Pixel的校正,不過還不是很會用!
Analyze-Calibration-"select area"-"ctrl 1 + ctrl 3"-

Reference:

ImageJ教學
以ImageJ測量葉面積
Image J_ IJ 1.46r User Guide(PDF file from ImageJ website)

2013年4月3日 星期三

Projects & LLB manager

前言:
最近開始撰寫另個案子,為了整理方便,也開始來使用LLB或者Projects管理,使用LLB是之前就有養成的習慣,但是發現若含一些.dll檔案或者其他不是LabVIEW的物件,管理上比較不方便,所以改試著使用Projects manager,發現其中有很多新東西可以學。

Projects & LLB 了解:
首先在打開LabVIEW的時候就可以選擇,blank Project,或者在一般VI是窗下從File裡面點選new project。然後選擇主要的VI後其他的subVI就可以自動地匯入到Project裡的Dependencies項目。

比較有問題的發現是,若直接從main VI的時候建立blank VI然後寫成subVI,但此時subVI會變成與main VI落入"My Computer"的主項目之一,其實這只是看起來不順吧!(是嗎?)所以要避免此狀況的話,就必須在不是Project的VI內開啓(另外開啟新的!!),就不會落入Project的項目內拉。因為到時候在main VI中放入subVI然後存檔後,subVI就會自動地出現在Project囉!!




參考:
Using LabVIEW Projects
Managing a Project in LabVIEW

LabVIEW 學習資料
LabVIEW 北方客棧
IT 360
LabVIEW Pro