2013年5月25日 星期六

使用差動雙投擲計時器應用於時鐘製作之研製

minecraft是一款我認為設計得相當好的遊戲,透過簡單方塊的堆積,讓你組出任何你想要的內容;而紅石又是其中最有變化的物件,可以模擬出許多數位電路的行為,老實說基本的邏輯設計課程應該可以用minecraft當作輔助教材(XD)。

minecraft升級到1.5之後,多了很多新的紅石元件,其中包括可以測定日光強度的日光sensor,讓我們有機會在minecraft當中,實現時鐘的功能。
之前已經有相當多相關的設計,包括直接用sensor輸出信號接在redstone lamp(1),及用長線分離出各時段的信號(2)等。
因為sensor輸出信號在白天呈現山形,第一種時鐘,共有上午和下午時會呈現相同的時間、計時非線性、晚上也只能顯示為晚上而非確切時間等問題;第二種則需要相當大的空間和電路,在一般server不用creative mode難以實現。
這裡我們就要設計的是,能夠線性計時,利用daylight sensor來校正,同時體積儘量小的設計。

最終設計的minecraft時鐘共有兩個主要部分,分別為:差動雙投擲計時器、雙比較器實現計數器(counter).本文將分為以下幾個部分:
1. minecraft 時間及sensor介紹:
2. 差動雙投擲計時器之設計:
3. 雙比較器實現計數器之設計:
4. 設計展示:
5. 相關設計:

1. minecraft 時間及sensor介紹:

minecraft一天有現實的20分鐘,共分為24000個基本時間單位ticks,ticks設為0時相當於每日早上6點。sensor的部分,固定每天22500ticks到13500ticks會發出信號,其他時間則不發射,信號強度依日光強度有所不同。
詳細資料請參考:(3)minecraft wiki daylight sensor。

2. 差動雙投擲計時器之設計:

過去minecraft上常難以實現長時間的delayer,可行的辦法包括用rail+detect rail、dispensor+蜘蛛網、鐵路+流水回收(4)等、活塞循環(5)等;但一般rail+detect rail需要相當大的面積來達成長delay,一般大小下delay只有約10-20秒,且重登入時不容易reset;dispensor+蜘蛛網、鐵路+流水回收則不夠精確,delay時間的可調長度與可調精度不佳;活塞循環相較之下較為可行,但拉到四角的紅石信號容易造成信號線相當複雜,一般體積也較大。 

本文提出之差動雙投擲計時器,除了能精確計時外,還具有容易reset、停止、可調長度相當廣及所佔體積相當小等好處,主要的參考來源為「SCAMP全自動造山機」(6)。 

雙投擲器將兩個投擲器相對,驅動一個投鄭器即會將內容物送至另一個投擲器內,透過1.5版新增的比較器,偵測投擲器是否內含物品,驅動比較器製成的振盪器(圖左),即可自動將一投擲器(下稱發射端)的物品送到另一側(下稱預備端),調整投擲器內的物品數量和振盪器的頻率,可以調整輸出變化的時間,由於comparator的delay不明,粗估送完的時間方式為,投擲器內的物品數量*(Osc. Delay),實測上兩個repeater調最長,17個物品送完的時間是30秒。
理論上可以在另一邊複製相同的振盪電路,將一側電路的輸出鎖住另一方向的repeater,達到來回振盪的功能,但如下圖,repeater要鎖住的方向不同,這樣的設計會讓電路變得相當大;同時兩邊都是相同的振盪頻率,實用上不容易做到校正的功能。


新架構加入另一套雙投擲計時器,兩計時器互鎖,當A方鎖住B方時(A方的Q值為1),A方輸出和B方預備端是否含物品的信號通過AND閘,驅動高速振盪器,將物品送回發射端。



運作包含五個相位:
1. A方發射端將物品送入預備端,B方預備端高速送物品回發射端。
2. B方預備端送完,高頻振盪器停止。
3. A方發射端送完,B方發射端解鎖,使A方輸出鎖住,並啟動A方預備端高頻振盪器。
4. A方預備端送完,高頻振盪器停止。
5. B方發射端送完,A方發射端解鎖,使B方輸出鎖住,並啟動B方預備端高頻振盪器,回到相位一。

最後則是控制信號的部分,可以透過強制將A/B方鎖住信號設在1來達成開關計時器的功能;但要注意的是,repeater的鎖住是鎖在 0或1,如果鎖在1的話,會使雙投擲器進入來回投擲的不穩定狀態;因此我們要在控制信號的輸入處,加入一個由輸出控制的鎖,以避免上述狀況的發生,詳細如下圖所示。
完成之雙投擲計時器所佔面積為10*8*3,相當compact,理論上的最長delay時間估計為2032秒左右




3. 雙比較器實現計數器之設計:

由於上述差動雙投擲計時器的輸出端,只能隨時間輸出長週期的1/0信號,因此輸出端先接入一個上升/下降緣檢測電路(edge detector),產生短脈衝;再接入計數器計算短脈衝的數量,以達成隨不同時間輸出不同信號的能力。

這裡狀態機的設定參考(7)的設計,功能考量,我們只取其中的down counter跟重設的能力,同樣由雙比較器維持信號強度,每一個脈衝進來,經比較器產生強度一的信號,使狀態強度減小一,達到狀態記錄。
實作上計數器記錄的是計時器發出多少次信號;在這裡我們用來記錄經過多少時間,在日間感測器開始運作之後,到日落的時間為15000ticks=12.5分,晚上感測器則是9000ticks=7.5分,分別需要記錄12, 7個狀態。

為了reset計數器,我們需要特定強度的信號,當然也可以用強度15的信號reset,但這樣會加大計數器的體積;這部分使用箱子+comparator產生,並利用另一個信號為15的信號相減,來產生所需的強度。
以日間計數器需設到強度12的信號,箱子要放345-460個物品。
以日間計數器需設到強度7的信號,箱子要放921-1036個物品。(雞蛋的話請除4)
這個用骨粉來放最容易了。



4. 設計展示:

最終時鐘設計如下圖所示:

中央的日光偵測器為核心,左右各為一套雙投擲計時器,分別在日、夜時工作(左日右夜,不想看到紅石電路請自己拉到地底=w=);計時器Q+輸出經edge detector進到計數器-1端,Q-經edge detector到對方計數器reset端;上方為夜間計數器,七個狀態;下方為日間計數器,12個狀態;有一些些調整是在鎖住sensor信號跟接到計數器的部分,都是為了讓體積更小。

稍微提一下,因為在雙投擲計時器,鎖住控制信號的那一方(Q-),在計時器被鎖住時,其輸出為0,如圖中左邊上半的狀態,因此在停止工作的瞬間,會有一個negative edge pulse,利用negative edge detector偵側這個信號幫另一方重設。
開始計時的時候,Q-端會先變1,然後30秒後換Q+端變1,再30秒Q+變0;因此從Q+端接到計數器減一端的detector同樣是negative edge detector。

這大概是整體時鐘的設計了,每個一紅石燈的信號可以自行拉線到想顯示的方式上;就我所知,這是目前能線性計時,同時體積最小的設計。

5. 參考資料:

(1)Basic Minecraft Clock Using 13w01a "Daylight Sensors"
http://www.youtube.com/watch?v=2x-l0owQGF0
(2)WORKING 12-HOUR CLOCK IN MINECRAFT
http://www.youtube.com/watch?v=1-ylYISMAck
(3)daylight sensor
www.minecraftwiki.net/wiki/Daylight_Sensor
(4)Minecraft clocks (6min)
http://www.youtube.com/watch?v=Rz1Qxbh3_XI
(5)Minecraft : Piston clock for long delay
http://www.youtube.com/watch?v=M19UQ5Y_wzQ
(6)The SCAMP: How it Works, and How to Use It
http://www.youtube.com/watch?v=vBpPKVwIwP4
(7)Decimal Counter with Comparators [Tutorial] Minecraft 1.5
http://www.youtube.com/watch?v=J7mRNZXshCQ

2013年5月17日 星期五

(有電)星際爭霸戰-闇黑無界Star Trek XII

以下有電,不想被電請慎入。





上星期五上映的ST12,身為老trekkier當然不能錯過,而且同樣JJ abrams導的ST11是部還不錯的作品,立馬星期六就去看了。
我對這部電影的評價其實普普,遠遜於ST11的表現。

ST11至少有個另一條時間線影響現在這條,Nero復仇、Spock融入人類社會、Kirk成長為艦長的主線劇情在,但ST12就沒什麼主線,Khan幹嘛沒事大發神經不怎麼提,頂多從禁閉室一小段對話裡看到一些原因。
我本來期待Khan可以從大反派漂白為正派的機會,畢竟大多數人沒有接觸過原初系列,大部分進場的人連Khan是誰都不知道吧,可能有些人看過ST2,至少知道他是個反派,但我的經驗這種人已經非常少,更別提看過TOS裡Khan被流放的過程。

沒想到他一拿到無畏級星艦,很高興的想要試試新武器,又變成大反派了…老實說上一集都玩過修改時間線的梗,這裡就沒什麼發揮,頂多讓老Spock出來充充場面,但他講的話有影響劇情,或是幫助打敗Khan嗎?也沒有,他只說Khan很危險。
我反而會期待老Spock指出Khan極端危險,然後小Spock為這個時間線的Khan辯護,劇情更刺激,也可以思考壞人到底為什麼要當壞人…,然而ST12沒有這樣做,這部Khan堪稱ST電影最帥反派,卻有種沒靈魂為反而反的感覺,滿可惜的。

動作場面太多,讓人目不暇給,卻也少了讓人思考的橋段。
例如ST11在Spock被換下來後,總要在傳送室有個沉思的片段,讓人體會他心裡的矛盾,或者在小林丸事件後,讓Krik和Spock在聽證會上,沒有誇張的音效,只有兩人觀念的衝突;但ST12幾乎是從頭就一直是大場面,一點思考的時間都沒有,拆個魚雷都要搞得那麼緊張,沒必要啊。
當然反過來說,這部也沒什麼觀念要讓觀眾去體會…
這部的預告片,一直反覆強調派克對Kirk說的那番話:「你所做的每個決定都會影響到你及所有人的性命」可是電影裡看不出來,只有Spock跟Kirk反覆爭論個人性命與整體規則的差別;直到Kirk最後轉頭說:「I'm sorry」,可是我看不出他錯在哪?他並沒有恣意行事、也不像開頭那樣胡搞瞎搞,廣告想表達的在電影裡完全看不到,也許當ST11的廣告說詞還好一些。

最後則是電影裡面不合理之處有點多,這部分有些跟我是老trekkier有關。
例如就我知道,star trek原初設定是類似當年歐洲大航海的規模,曲速從一顆星到另一顆星費時要幾天不等,橫越聯邦甚至要以月來算;無論是ST11或ST12,為了求劇情的速度感,這個時間要不是短了很多(ST11, 地球->瓦肯),就是短得有點誇張,ST12, Qo'noS->地球甚至只花了幾分鐘的感覺。
那ST6企業號花了大半天橫越Klingon帝國是橫越心酸的嗎?中立區根本就不用設計了,莫名奇妙就飛到別人星球了,開著飛船拆別人家,先生我記得聯邦對Klingon一直都是劣勢,直到Qo'noS衛星爆炸雙方才和解啊,怎麼這集klingon變得超弱的感覺。

整部電影裡Klingon的角色不明,Qo'noS的劇情也不是很必要,頂多是出來讓Khan出來電一下Klingon,也許是要強調Khan過人的能力?但對新看的人來說,他們也不知道Klingon在戰鬥上的天生優勢,只會覺得是Khan在開無雙。

另外還有個表現手法的問題,雖然說真實情況大概相差不遠…
從ST11之後,我覺得開始強調爆炸炸穿艦體的動態畫面,有可能是成本之類的考量,在前10部裡比較少這樣的畫面,特別是Abrams好像又特別喜歡拍人從艦體被吸到太空中的畫面,這次更扯,甚至被吸到曲速空間的畫面都出現了…,而且還是有些重點式的體調,看多了就會覺得有點不舒服。

整體看下來,我覺得ST12特效做足了,卻沒什麼內涵;看一部爽片可以,但以我的立場我會說:這不是ST……。

2013年5月1日 星期三

Office-Word系列:2.段落設定

我還記得林教授在這個section上有一句我印象深刻的告戒:「文件內,不應該出現兩個連續的空白,不應該出現兩個連續的換行符號Enter」
這是為什麼,因為Enter代表的是「換一個段落」,我們本來預期分段落的時候應該有一些格式的設定,連續兩個Enter,等於是中間插了一個沒有內容的段落,在排版上會有一些很棘手的問題。
例如:通常我們在段落的尾巴接下一個段落的標題時,都會加上一個空行,如下所示:
我是上一個段落的結尾。

我是下一段落的標題:


通常大家會這麼做:
我是上一個段落的結尾。
「這裡會插入一個Enter,產生空行」

我是下一段落的標題:

如果上一個段落多打了幾行,讓結尾停在一頁的最後時,會怎麼樣?下一頁會多出一行空白
要一頁一頁去檢查嗎?這樣一百頁的文件就要改很久,而且你每改一次內容,就要再檢查一篇。但很囧的,甚至連我們系上所謂「論文範本」也是這樣寫的。這就是段落:總管了文字行與行、段與段之間的關係出場的時候了。
在這個部分,設定都是跟著段落走的,但個人強烈建議,為了文件格式統一,最好以樣式為單位去設定;在設定樣式「1. 在樣式庫的樣式上按右鍵,選擇修改,改成你要的樣式即可。」時,選左下角的「格式」-「段落」去設定。

第一部分:縮排與行距:

縮排是文字和頁面左、右邊界的距離,行距…就是行距嘛
縮排中,比較特殊的是指定方式「第一排」或「凸排」,讓每個段落的第一排會自動空一定長度,這個也是滿常用的功能,拜託不要自己手動輸入空白。

剛剛提過每段接到下一個標題的問題,解決方式是在行距的設定,有兩種方法:
1. 是設定標題的段落:例如把「標題一」的段落,設定「與前段距離」為一個行距,這樣不需要輸入一個enter,也可以多空出一個空間。
2. 是設定內文的段落:設定「與後段距離」為一個行距,然後勾選「相同格式時不加上間距」
兩種方法都會避免上述當前段落剛好在這頁尾部結尾的問題,大家可以自己試試看;當中的差別是,第二種方法對所有標題都會生效,就文件的彈性來說,第一種方法比較好一點。

第二部分:分行與分頁設定:

這裡面我覺得比較常用的幾個功能
1. 「widow orphan control」,中譯是「遺留字串控制」。
遺留字串指的就是:某段落最後一行文字落到下一頁獨自一行,或是某段落第一行落在上一頁最後一行;這兩種在文件裡都是不允許的,只要打開遺留字串控制,word就會自動幫你調整(不截圖,自己試),下一頁出現遺留字串的時候,自動幫你加一行過去。
同樣的,請不要自己調整,那不working smart.
2. 「與下段同頁」、「段落中不分頁」,這個大概不太需要解釋,是設定標題的時候用的,這樣就不會出現,獨留標題在某頁最後,或是標題第二行跑到下一頁的狀況了。

第三部分:中文印刷樣式:

這裡的功能好像就不太常去設定了,有碰到再說。

--

以上大概就是段落的概念介紹了,如果你只是要換個行,請用Shift+Enter,這代表換行而不換段落,在排版上有著截然不同的意思,大家一齊向「文件內,不應該出現兩個連續的空白,不應該出現兩個連續的換行符號Enter」為目標努力吧。

Office-Word系列:1.樣式庫與階層

前言:
Office word是我認為M$數一數二成功的產品之一,透過所視即所得的介面,讓人更能快速的編輯文件,市佔率至少超過90%;但是,如果是編個幾頁的文件,也許可以直接打一打即可,但要是要打個幾十到幾百頁的文件的話,就必須善用一些word本來的功能,確保無論如何修改,整份文件都能符合正確的格式。
個人其實也有在用LaTeX編一些文件,無論在排版的變化、格式化文件的引入、字型呈現、數學式的表現等,LaTeX許多功能是word完全無排匹敵的,這系列文章並不是試圖用word挑戰LaTeX的地位,只是介紹一些word常被忽略的功能,讓word在長文件上發揮它該有的效力。
會寫這篇文章,是因為約一年前,聽了台灣科技大學管理學院的林教授所開的Office相關課程,學了不少office的技巧;後來在研究所,看著學長們寫論文,發現會有效率使用word功能人不多,就把它寫下來,希望讓大家認識一下word許多強大之處;本文感謝林教授、及學長論文範本的指導。

事實上林教授所教的還有許許多多的小技巧、快捷鍵,但那實在太過瑣碎,我認為還是學概念比較重要,本文預期會分成下列幾個概念:
第一節:使用樣式庫
第二節:階層的概念
第三節:弄懂段落在幹嘛
第四節:管理好參考資料
由於word還有許多好用的功能,受限於作者太懶篇幅,先整理出這幾個比較重要的概念。

--

第一節:使用樣式庫

我不知道大家打文章的習慣是什麼,但有可能是有什麼打什麼,有標題就建標題、有小標題就打小標,反正不過就是調調字體、調個大小,了不起加個編號或項目符號。
如果你編的是有100頁的文件,然後老闆說話了:「今天起床,我覺得你小標題的16號字不好看,請改成16.5號字」,如果是手動改當然也OK,但這樣不smart。
因此,編文件的時候請用未來更有效率的模式:樣式庫。

樣式庫位在word視窗的右上角,預設就有很多樣式可以用(雖然我猜大家通常都忽略它…)
我個人是覺得,文件內每一個部分,都應該是用樣式庫的格式設定,而不是手動修改的格式設定;這樣一來,每當你覺得文件哪個地方需要修改,只要修改樣式庫的格式設定,整篇文件的相同格式都會跟著變化,完全不同手動一行行修改。
我們現在就用一個「標題」,來看該怎麼好好使用樣式庫,首先是選到你要的變為標題的字,再選擇樣式庫內的標題字型,預設的標題字型很大,不符合你的樣式需求,這時候有兩種作法:
1. 在樣式庫的樣式上按右鍵,選擇修改,改成你要的樣式即可。 
2. 先修改好你要的樣式,反白後選擇「右鍵-樣式-更新標題樣式xxxxx」
如此一來就完成了格式的設定。

樣式庫提供了許多的樣式,右下角的展開按下去可以看到全部的樣式,基本上打一份文件絕對OK。
如果想要修改某個樣式,同樣也在樣式庫中修改,或者修改後,再右鍵選更新即可。
如果想要加上新的樣式,也只需要右鍵後選擇「另存為新的樣式」。
套用樣式庫大概是word長文件最基本的概念,之後所講的所有概念,都需要樣式庫才有最大效力,所以從今天開始,絕對不要再一行一行自己改了格式了。

第二節:階層的概念:

用過大綱模式(檢視-大綱模式)看文章嗎?
大綱模式其實是把文章內所有格式、圖片之類都去掉,只留下文字,你會發現所有的標題之類都不見了,只有文字;這就是大綱模式;據說是因為早期電腦還不夠強的時候,所視即所得的成本太高,因此編輯內文和格式是分開的,到最後再把大綱和格式結合在一起,成為完整的文件。
不過現在大綱模式好像都什麼都看得到了。

不過我覺得大綱模式最重要的還是裡面階層的設定:word預設有九個階層加上內文(雖然我壓根不覺得有人用得到這麼多層啦)讓各位使用;例如樣式庫就有「標題一」到「標題九」可以設定,其實很直覺,愈大的項目階層就愈高,通常字體也愈大XD。
大綱模式讓大家可以很快的確定文章的架構有沒有錯,只看階層一來確認大標題都有打上去,調整文件各部分的階層等,是個快速瀏覽文件的方式。