About虛擬&實際

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

2013年8月25日 星期日

超閱讀力,不誇張!一分鐘讀懂?本書

前言:
在採購其他書籍的時候,恰好看到有賣這本書籍,看了一些介紹跟網路上其他幾個人的評論,覺得這是一本很吸引人的書籍,因為雖然是“超閱讀...”事實上是在訓練“導讀力”,並不是速讀的一種。的確我也覺得有點疑惑,是否真的能夠達成作者所提到的目標。因為自己也很喜歡閱讀書籍,之前也曾經看過一本“不用讀完一本書”也是講了另一種方式。但都是針對如何“有效率”的瞭解書籍。(另一本沒有做記錄)在這裡只列出一些名言佳句跟觀念。

記錄:
Time Magic = 縮短時間的魔法(導讀)
Color Magic = 右腦的魔法(記憶)

反覆進行短時間的記憶,就可以停留到長期記憶

「就像所羅門曾說的,競爭時從容不迫地就是勝者」[Benjamin Disraeli]

用手寫的讀書,正是把讀書時間拉長的萬惡根源
    利用「視覺」的讀書方式是最有效率有快速的

時間分成早、午、晚:
    早:腦子活性化,適合讀書
    午:腦的活動力降低
    晚:腦運轉遲鈍,適合復習

「不是要擊倒,重點是要打中。這樣子就會獲勝」[穆罕默德。阿里]

記憶過後的第一天是一望最快速的時候,之後的遺忘量就會逐漸變慢。

讓每天勤勉不斷地讀書變成一件理所單然的事情

「真正有價值的資訊來自直覺」[阿爾伯特。愛因斯坦]

導讀:靠直覺來行動

三階段:
(單純地進行翻頁動作,不要用眼睛追逐文字,別打算去理解內容
    Ten Minutes, Leading
        一頁三秒,一面(兩頁,內跨頁)六秒
    Five Minutes, Leading
        右頁一秒,左頁一秒,翻頁一秒
    One Minute, Leading
        一秒翻兩頁內跨頁,或0.5秒,用右手拿著書本,用左手來翻,市縣都凝視在左手整個手掌的周圍上,且幾乎是不動的。

覺得重要的地方在這頁上方“折起書角”

再強調,不可以想去看全部的頁面!若想去看全部的頁面的話,最後想一個字、一個字地去看裡面的文字。

「不要去思考,要去感覺」[李小龍]
「不要想理解,就去感覺吧」

依序三階段練習,
第一天
10min + 5min + 1min + 4min(休息) = 20min重複三本書,三本書60分鐘+休息30分鐘,90分鐘三本書為一組,總計需要四小時半。
第二天
90分鐘三本書一組(上午),接著做One Minute, Leading做20~50本書(下午)
持續進行三個月,就更能使"One Minute, Leading"完美無缺

「無論如何,不徹底地執行,是不行的!如果無法徹底執行,那就只是個普通人而已」[福澤諭吉『勸學』]

超出大腦理解能力以外的事物,即使時間縮短,無法理解就是無法理解。
只要使知識量增加,導讀的精確度也會上升

「努力、用功,這才叫做天才。比任何人還多3倍、4倍、5倍用功的人,這才叫天才」[野口英世]

左腦掌管語言、理論。容量小。
右腦掌管印象。容量大。(影像)

在已經有顏色的紙上書寫,而不是用有顏色的筆。
(淺色系)紅、綠、黃、藍 (按照重要性排列)

「短暫的人生會因為時間的浪費而變得更短暫」[Samuel Johnson]

「筆記才是救命恩人」[愛迪生]

把整理好的Color Magic Sheet放進A4大小的透明文件夾,並整理好。且透明文件夾也是四種不同的顏色同筆記部分。

紅色透明文件夾是最重要的,必須經常帶著走和反覆地記憶!
    綠色(一週複習一次)
    黃色(一月複習一次)
    藍色(一年複習一次)

書籍本身的分類:也是四種顏色,紅色為重要一百本書,綠色為想再重讀幾次的書,黃色是當作參考文獻,哪天可能重讀的書,藍色應該就不會再看第二次的書。(黃色跟藍色只複習Color Magic Sheet也OK)

人生只有現在立刻去做,又或者一輩子都不做,這兩種選擇。

「我經常相信,個人能做到的事情對所有的人來說都能做到的」[甘地]

「無論如何,先思考看看。試著找到辦法。然後就去做看看。如果失敗了,只要重來就好了。」[松下幸之助]

「活著並不是指呼吸這件事情。而是行動」[盧梭]

總結:
一本書用一分鐘讀完(Time Magic)
一分鐘復習六十本書(Color Magic)
    A4分成四種顏色(紅黃綠藍)且用藍筆
右手拿書,左手翻書,眼睛只凝視左手手掌
用四色透明文件夾複習,內裝Color Magic Sheet
書籍若要複習則按照紅黃綠藍分類

心得:
買來第二天已閱讀完,覺得以導讀來說,的確是本好書,畢竟人總是以"直覺"去判定事情,而且會的就是會;不會的多花時間也不會,但不會是可以"努力與思考"後瞭解,書中說的是指一般人考試或者閱讀書籍的方式不對,才會花很多時間也進不了腦袋。

之前買的書籍裡面,也是有很多書籍並未消化完,下個充裕的周末打算拿幾本書來測試。然後測試成功後,就將家裡未閱讀的書籍給消化完(這麼巧"消化完"跟上面並排!)。

2013年8月19日 星期一

BOOK_I and LabVIEW_我和LabVIEW_阮奇楨_CH_01/02/03

前言:
最近購入了一本蠻多人也推薦的書,這個文章主要記錄裡面我所不知道的新技巧、或者不熟悉的舊知識,以及一些作者的建議。然後未免同個紀錄太長,最後還是決定分幾篇記錄好了。

觀念:
有個重要的觀念是目前看了幾本書都有提到的就是:
“不要再重複別人已經完成的工作”
意思是說,盡量去搜尋已經可以使用的程式來使用,自己重新編寫雖然可以有很多學習收獲,但對專案或者整體而言是花了太多時間的。

第一章:

連續運轉(Run continuously)按鈕,程式內的所有Code會反覆運行,沒辦法將程式中只需要運行一次的Code和需要重複運行的Code區分開來。

在Projects中,若需要加入先前的VI到項目中,在"My compute"右鍵"Add"添加"File"。


VIEW/ Navigation Window:導航畫面,對於程式佈局不得以還是很大的時候很方便。


LabVIEW程式中的大多數SubVI的存在並不是為了Code重用,而是為了提高Code的可讀性&可維護性。一個理想的VI層次結構是金字塔型。(VIEW/ Hierarchy)


Code相對比較獨立(與程式其他的部分連線較少),可以建立成SubVI


可以將常用的program放到Favorite內(在Block diagram),若有設定,則將favorite拉到Function選單的最上方(第二也可),可以右鍵彈出選單時就看得到。


工具面板(Tools)有兩個快捷鍵:Tab & Space根據在Block diagram/ Front Panel/ Running mode時候有不同的切換。(P34)


第二章:

Numeric元件在Properties/ Display Format中可以在(左下)advanced editing mode直接設定為日期模式。(不一定要用字串)

公式節點(Formula Node):類似C語言,在較為複雜的數學運算可以使用以達到較好的程式可讀性與可維護性。


腳本節點(MathScript):內嵌MATLAB的語法,可以計算更複雜的科學運算,“但是”執行效率遜色於公式節點。


使用帶單位的數值元件,可預防不一致結果,但其VI就不能再被其他不同單位的場合使用,所以也可以使用單位轉換(Convert Unit)&基本單位轉換(Case Unit Bases)來將純量與轉換成具單位的數值或者直接將某一單位直接轉換成另一單位。(P44)


Enum(中文翻譯成枚舉型,好有趣),& Ring的比較:Ring可以更改每個項目的數值,在Edit Items中選取"Sequential Values"就可以更改數值了。而Enum適合特定、有限的狀況下使用,可以增加可維護性。


Radio Buttons(單選按鈕),類似Enum,不過可以直接全部看到不需要下拉。要重新排序可以選擇右鍵選項中的Reorder controls in Cluster,所以可以知道Radio Buttons也是Cluster的一種。


Boolean:有六種機械模式,一直以來總是無法“熟記”在心。借這個機會用自己的話寫下來:(連接個LED,亮燈即數值為"True")。另外,第二列的三種類型,是不能夠使用於局部變量和“數值”屬性節點。

第一列(Row)
    Switch when Press:
        按了就亮燈,再按一下就熄燈
    Switch when Released:
        一直按著,當放開的時候亮燈,此時按鈕還是顯示按著。
    Switch Until Released:
        一直按著就會亮燈,一放開就熄滅,且放開的時候,按鈕本身也被釋放了。
第二列(Row)
    Launch when Press:
        按了就亮,但會自動釋放按鈕,燈也熄滅了,沒辦法一直壓着。
    Launch when Released:
        一直按著,放開的瞬間會亮燈,但按鈕也同時被釋放,所以燈馬上就熄滅了。
    Launch Until Released:
        按著的同時會亮燈,但一放開按鈕就會被釋放,同時燈也熄滅了。

數組數據(p47)提到了個我從來不知道的組合方式:使用Array中放著array(這跟我最近在學Python的List/ Tuple很像),用說明的有點饒舌,整理成圖如下:(雖然暫時還不知道有什麼適合的用途)

Cluster:bundle & bundle by name,筆者建議使用bundle by name等,因為可讀性較好,也可以避免前後cluster的元素順序不一致導致錯誤。

在字串符中(p53),特殊含義,比如“回車”。這個還真的不知道是什麼意思?在查了google後,才知道就是enter/ (return, "mac OS").實在是太有趣了...(大驚小怪)


路徑(path):提到了若有相關文件,SubVI等等,可以放在跟主VI相同的資料夾內,然後使用Current VI's Path讀取路徑後,就可以加上相對路徑(前提文件,SubVI的名稱等等,應該只要在path const內打上檔名,不同系統會自動加上前綴分隔符號),這樣就可以快速地在不同平台下一樣的讀取到檔案。(因為WIndow, MAC, Linux所使用的路徑分隔符號都不一樣。)


數值&字串之間的轉換:提到可以使用功能更齊全的兩種-Formal into String & Scan from String。可以一次處理多個數據,不過要先瞭解其格式語法(我自己本身並不常用, 作者也提到類似C語言中的sprintf() & sscanf()。另外可以使用string to byte array將string轉換成ASCII碼。


p57有提到可以使用Refnum to path(簡中稱
Refnum為“句柄”),在使用開啓文件等等之類的VI時候,會有refnum out的輸出,搭配Refnum to path就可以將檔案路徑給顯示出來。(ex:Macintosh HD:Users:apple:Documents:FB好句子.docx)

p58提到了Variant是我一直沒什麼機會用到(好像也不知道用在哪),提到可以將cluster轉換成variant然後使用GetTypeInfo/ GetClusterInfo ,範例
如下圖(屬於不開放的VI,作者不建議使用再給客戶的程式碼內,避免LabVIEW升級後沒有支援)

接著提到了Dictionary(容器)就挺有趣的了,有點類似資料庫的感覺。
使用到的元件是在Cluster, Class & Variant/ Variant內的:Get Variant Attribute, Set Variant Aattribute and Delete Variant Attribute三個元件。

Flatten to String一文說明不同數據是以不同格式保存在“內存”中(就是我們所講的記憶體Ram)若需要將其儲存到硬碟中或者傳輸到其它硬體設備,則必須把原本的數據規劃成一連串的數據再進行儲存&傳遞。flatten到字串後的資料不易閱讀,若要在進行中可以即時觀察,則可以使用flatten to XML (File I/O_XML_LabVIEW Schema),不過效率相對前述的會較低。

p61提到使用變體(Variant)的屬性建立表格,藉由輸入字串來得到相對應的數據。書中提到遍體的屬性是以“哈希表格式”儲存的,這個就沒聽過了。

p64提到了之前一直很好奇,但之前沒有深入瞭解的Type Cast,原理是:將數據強制轉換成另一種類型,但是內存的二進制數據並不作改變。若用的是數據類型轉換(Conversion),雖然表面看起來差不多,但是事實上已經對於內存的二進制編碼已經不一樣了~(與flatten to string的比較可以參考p65)

p65提到boolean & string在內存數據的方式都是與U8相同,所以可以相互轉換之。而string已經有內建的轉換函數,所以並不一定需要使用強制轉換的方式了。(String to Byte Array & Byte Array to String)

p67分析了不知道的Label & Caption的分別,寫LV到前一陣子,還沒很認真地去分析為什麼他們有這兩種差異,一直以為只是表示而已!?(不求甚解應該再深入反省自己),Label 是元件的唯一標識,Caption 則是“介面”上顯示出來的名稱,亦即是可以在運行中改變。這樣的解釋大略地分隔了兩種區別,不過還是要去實際使用跟分析才能更瞭解了。

p68提到了默認值(預設值),有提到為了方便測試使用,“SubVI”可以設定最常使用的數值作為預設值,還可以把control的預設值寫在Label or Caption上以便查看。

p70提到String可以右鍵選取Update value while typing。這個是方便在程式執行時,keyin數據時,即時更新輸出資料,不用等到都輸入完才將資料傳輸。對於需要即時顯示與輸出的狀況是很方便。

p72提到property node的"Value"相當於local variable但是執行程式時,效率大大低於local variable。

2.4.6節提到的調用節點(Invoke Node)與屬性節點相似,區別在於調用節點用於“選擇方法”已完成“控制元件”的“某些行為”。

2.5.3 & 2.5.4有兩個實例是在運行中改變控制元標題(Caption, 不是Lable)跟禁止Enum中的某些項目,這兩個在人機界面上有很好的應用,例如根據需求的輸入單位顯示跟選取某個特定條件時,某些項目不能使用。(Enum輸入的都是預設值,可是某些可能在某些特定情形下是不能使用的,為了使用者的誤用,可以禁止使用之)

第三章:
p88, 討論到將case structure輸入number, Enum, String,可以產生無窮的設定,範例中有提到可以對case輸入多於一個的條件,例如同時滿足2, 4, 6的話,就會執行同個case。或者是一個區段的數值,使用'x..y'兩點就可以表示從x到y的連續數直接包含(大於的話就用z..,表示z以後皆是,小於的話就反過來用..k,表示k以下皆是)。(以前好像有讀過,但沒實際的使用,也忘記了還有這樣的功能!!用'..'的方式很像現在開始在學的Python與之前Arduino有用到的一些寫法)

p91提到了程序框圖禁用結構(Diagram Disable Structure),這個對我是個很有趣且沒用過的,曾經是在其他範例程式內有看過。可以將程式的某個部分給“暫停使用”且也不會被編譯成執行代碼(不影響整體程式效能),然後要使用的話在“啟用”就可以了,適合尋找並定位錯誤代碼。

p92提到了條件禁用結構(Condition Disable Structure),這個結構類似Diagram Disable Structure,但是目前的感想是使用在跨平台的時候,可以先設定不同平台能執行哪些程式碼,在VI匯入時候會自動檢查作業系統,另外,也可以設定不同的部分給不同使用層級的人(例如發佈給不同用戶的軟體,基本功能相同,但是個別的地方會使用不同的代碼,可能就類似微軟的專業版,家庭版等等之類的含義)。

p93同樣在condition disable structure項目內,提到可以自定條件,使用的方法如下(內文的含意看了很久才知道涵義):
=>Project (Project Explorer)--->My Computer--->Properties--->Condition Disable Structure可以設定自定義的符號。

p97 Shift Register, 如fig3.38, 即使N=0,輸出也是33,因為初始值進到channel(左邊)後,就已經將數值“內存”到loop了,所以即使沒有運轉for loop,右邊的channel輸出也是初始值。

p99 Feedback Node, 在循環結構內,feedback node是針對於包含它的每一層循環結構的,相當於在每層都建立了一對的移位暫存器,然後再將其串連起來。所以若當作subVI使用的時候,要注意可能輸出值可能會考量主要VI的循環結構次數,因為會影響到feedback node的計算次數。

P101使用Feedback在SubVI必須設定"可重入運行方式"才能避免多個相同SubVI使用同一個移位暫存器。

p103使用For loop可以使用Conditional Terminal來設定一個中斷條件,類似C語言中的"break"。

p104[While loop]使用索引隧道(index channel),for loop比while loop的效能還要好,因為for loop在進行前就可以先替輸出的array大小分配一個暫存空間。

p105[Event Structure]窗格(panes)的呼叫:Modern/ Containers/ Horizontal/ Vertical Splitter Bar,而事件結構主要有六種事件:Application, This VI, Dynamic, Panes, Splitters, Controls等等。

p108 LabVIE事件可分為:通知型/ 過濾型兩種事件。

p109 每一個"VI"只需要一個事件結構就可以處理所有的事情囉。

p112-120動態事件、定時結構可重複回來複習;此外,定時方法使用的函數最小分辨的等待或延時時間皆為2 ms。而以精確度來說,最高到最低精確排序:
定時結構(Timed Structures) > Wait until next ms Multiple > Wait = Time delay

2013年8月16日 星期五

Raspberry Pi with SSH

前言:
在今年年初已經拿到RPi,經過簡單的測試後,就默默的被Arduino & LabVIEW擠掉了。真是感到心虛,不過也由於沒有適合的螢幕(家裡只有D-sub & 沒什麼機會可以搶到的液晶電視),也是導致自己不用的藉口啦。在跟學校的朋友聊天聊得很不錯後,打鐵趁熱的也去光華買了HDMI轉DVI,就在Lab啟動了。

設定:
一開始的螢幕轉接卻沒有任何訊號,當下真的產生很大的問號,想到還有另外一台也有DVI介面,先測試若不行再上網查詢,還好熟悉的螢幕就很自然的出現了!!不知道是螢幕的問題還是轉接器的問題。(說到DVI也是有點複雜的學問,另外再整理資訊)

目前一直調整不暸最佳的解析度,不過還可以進行作業,就先來處理最想要用的事情了---SSH。

造訪了常常參考的網站,先列出了幾點可以去修改或者確認網卡是否正常:

修改出廠預設的主機名稱(raspberry): sudo nano /etc/hostname -改掉名稱
重新啟動: 
$ sudo shutdown -r now

檢查網路卡驅動程式是否存在: 
$ dmesg | grep net -"|", 'shift + \' -列出網卡相關的資料

設定RPi的網路位置: 
$ sudo nano /etc/network/interfaces -然後在文件中key-in以下資料:

auto eth0 ---數字的'0',一開始看錯以為是O。
iface eth0 inet static
address 192.168.X.X ---我是用虛擬IP,區域網路內就可以使用(校外不知道可以連否?)

netmask 255.255.255.0 

然後,
重新啟動網路: 
$ sudo /etc/init.d/networking restart 

啟動SSH server: 
$ sudo /etc/init.d/ssh start 

另外若要每次開機都能自動開啟SSH(言下之意,剛剛所做的會在每次重新開機後失效)則參考這樣的方式:(reference website)
To enable SSH automatically every time the Pi starts you need to :
Prepare an SD card with the Debian “Squeeze” imageInsert the SD card in your PCRename ” boot_enable_ssh.rc” as “boot.rcEject the SD card and insert into your Pi

成功後,就可以使用SSH軟體遠端聯繫RPi了,我使用的是"PuTTY",原本文中也有介紹"Cygwin",不過這個的設定頗繁瑣的。

後記:
使用Lab的PC經由PuTTY成功的連線到RPi了,沒想到一些設定就有很多新東西可以了解,
真是一點也不能大意。接下來要做什麼呢??要趕快來想想了!!~

另外,還需要設定防火牆與一些網路方面的設定,否則後門大開,我的RPi可能就變成好用的跳板供人使用了!!

參考:
用OpenSSH取代Talent的連線方式
連上Internet
Raspberry Pi基本設定、編譯核心、上網
Putty簡介
Cygwin安裝及SSH設定教學(上)

舊文章:
Raspberry Pi B的到來
Raspberry Pi 安裝系統與開機
[學習資料] Raspberry Pi
(轉帖) Arduino Uno vs BeagleBone vs Raspberry Pi