國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
10
第二章 相關研究
2-1 Programming Support of Performance Art
程式支援展演藝術活動,係指提供一套可以透過程式設計方法,來協助表演 活動進行的系統,這個系統具更針對該展演活動設計的程式語言的執行環境,開 發人員或是展演人員可以於系統中利用該程式語言進行程式設計,並交由系統執 行以後,系統便會在表演活動中根據程式撰寫者編寫的內容,自動控制表演內容 的效果變化,或是各種該表演活動中已程式可控制的項目。
即興演出(impromptu)是程式支援展演活動的一個很重要目的,Sorensen 與 Andrew 等人[2]的研究中展示了如何為音樂家或聲樂家的表演導入互動式的開發 環境,以達到即興演出的目的,他們提出一個具更動態與即時建立和編輯的程式 整合開發環境『Impromptu』,這個環境允許多使用者共享執行環境,且佈署更可 解譯該環境所採用之程式語言的直譯器,提供音樂展演活動領域的許多演算法,
讓程式撰寫者可以透過調用演算法來完成即興作曲或編曲。
圖六:Impromptu 整合開發環境(圖片來源:Sorensen, Andrew, Impromptu: An interactive programming environment for composition and performance.)
‧
2-2 Domain Specific Language
特定領域語言(簡稱 DSL),是針對特定背景知識領域實作之特定目的程式語 言,使用範圍侷限在該特定領域的相關研究實驗、實作與應用中,我們選擇採用 DSL 的好處,Martin Fowler 在 Domain Specific Language[5]一書中認為 DSL 可 以提供一套共同字彙,方便領域專家和開發人員溝通。
現行的 DSL 實作通常分為兩種[5]: 一為使用編譯技術與程式語言設計方 法,重新設計一種別於主要語言的程式語言,包含詞彙(lexis)、語法(syntax)和語 意(semantic),並且以現行程式語言實作此 DSL 的編譯器(compiler)或直譯器 (interpreter),透過直譯器或翻譯工具(語言轉換)將此 DSL 的程式碼轉譯成主要 程式語言的程式碼,採用這種設計方式的 DSL 稱為 external DSL[5];另一種設 計方法是奠基於現行的程式語言上,利用該程式語言的特性,以其為 DSL 的設 身性元編程(reflexive metaprogramming)。
Martin Fowler 認為,設計 DSL 的重點在於設計應用此 DSL 的語意模型 (semantic model),在其 DSL 定義的一個狀態轉換函數(transition),如此就可以在 使用 DSL 中清楚地描繪出這個 DSL 的運作行為,以設計出符合領域背景語意的
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
12
DSL 詞彙提供使用者。
‧
2-3 Functional Reactive Programming
函數式反應式程式設計(簡稱 FRP)是反應式程式設計 (reactive programming) 的函數式風格,最早出現在 Elm[11]這個語言,用來在 GUI 應用程式的程式設計 計的程式設計函式 (building blocks of functional programming),如 map、reduce 或 filter 等,常見於應用在網頁設計中,以處理大量的存取連線與網頁內容狀態 變化,本研究應用此技術,來處理穿戴式裝置感應器接收的大量且持續的訊號串 流,將訊號串流抽象成 DIPS 中的函式,使編寫 DIPS 的人可以不需要處理訊號 源的時間議題,只需關注在特定訊號的對應狀態變化即可。
Ingo Maier 與 Martin Odersky 在[3]展示了如何使用 Scala.React(他們以 Scala 實作的 external DSL),以 FRP 範式處理觀察者模式6程式設計,他們以監控滑鼠
6 觀察者模式,是透過建立觀察者程式,監控某事件發生並決定如何處理的方式[25]。
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
14
移動訊號於螢幕上繪製軌跡為例,透過 Scala.React 這個 DSL 來包裝滑鼠訊號。
‧
2-4 Message Queue Telemetry Transport
Message Queue Telemetry Transport 簡稱 MQTT,是 IBM 與 Eurotech 共同 制定出來的通訊協定,MQTT 官方網站的介紹如下:
MQTT is a machine-to-machine (M2M)/Internet of Things (IoT) connectivity protocol. It was designed as an extremely lightweight publish/subscribe message transport.
由此可知 MQTT 是建立在 publisher 和 subscriber 的模型上,將訊息進行傳 送,所更的 publisher 或 subscriber 都會指定一個主題(topic),並且像第三方伺服 器 MQTT broker 進行主題註冊,publisher 會向 broker 告知將發送的訊息內容與 發送的主題,subscriber 會向 broker 告知訂閱的主題為何,當 broker 收到了來自 任意 publisher 的訊息時,就會將該訊息轉送給所更向此 broker 訂閱了該訊息主 題的 subscriber。
AMQP(Advanced Message Queuing Protocol)與 MQTT 是其中兩種現行 M2M/IoT 應用程式開發流行的通訊協定,兩者都是應用層層級的通訊協定,具
不限定程式語言、環境與平台,如此我們可以將 Unity Environment (C# on .NET Framework)、Phidgets (Java)、DIPS 執行引擎 (Scala DSL)三方虛實環境整合,
系統架構如前述圖六所示。
‧
的多範式(paradigm)程式語言,最早發佈的版本為運行在 Java runtime 的版本,其 後亦發佈了運行在 .NET Framework 上的版本,Scala 具更物件導向程式設計、函數式程式設計、命令式程式設計的特性,並且採用了 Carl Hewitt、Peter Bishop 與 Richard Steiger 提出的 Actor Model 作為其平行計算的模型,如此可簡化平行 程式設計,提高多核心 CPU 的利用度,本研究首先選擇採用 Scala 作為基底語
此外,Scala 屬於 typesafe 的程式語言,亦即在編譯期間會做各種型別的檢 查,如果發現型別錯誤,編譯就會錯誤,這個優點是 Scala 勝於 Ruby (執行時期 型別檢查)作為 DSL 設計的因素之一,因此當導演在使用 DIPS 編寫劇本時,發 生使用的型別錯誤,就可以馬上檢查出來,避免在腳本執行時才發生錯誤。
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
17
Scala 的巨集(macro)功能並非僅如傳統 C++ 的巨集純粹展開引用巨集的部 分做文字取代,Scala 的巨集可以將一串語法敘述做編譯過程中的操作,亦即對 程式敘述的抽象語法樹(abstract syntax tree)做操作,這讓我們可以預設好一些巨 集程式片段,在接收到使用者輸入的內容後,交由巨集程式對使用者輸入進行解 析,例如取出部分使用者輸入的內容,套用到設計好的巨集字串中組合起來,產 生完整的命令,這也更助於我們設計更為簡潔的使用者輸入項目,例如我們欲讓 使用者僅輸入『when (condition) {action}』,接著便自動產生出『val rule: Rule = when (condition) {action}』這樣的片段,省去使用者輸入變數宣告的麻煩,除此 之外,Scala 的 macro 也可以讓我們設計出檢查針對使用者輸入內容的編譯過程 程式(詳見未來研究方向的規則互斥)。
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
18
2-6 Unity 3D
Unity 3D 是由 Unity Technologies 所開發的一套遊戲引擎(game engine),可 用來開發 3D 遊戲、建築模型、3D 動畫等類型互動內容的綜合型數位內容創作 工具,Unity 與 Director、Blender、Virtools 或 Torque Game Builder 等利用交 互的圖型化開發環境為首要方式的軟體相似,因為其遊戲腳本是基於 Mono(一 個相容於 .NET Framework 2.0 的跨平台開源套件),因此程式設計師可用 Ja-vaScript、C# 或 Boo 來撰寫腳本,在 Windows 上可直接於 .NET Framework 運 行,在 OS X 上需透過 Mono 平台。
圖七:Unity 透過 Mono 編輯器撰寫腳本
‧
2-7 Phidgets Sensor
目前很流行的低成本 motion-capture 設備之一是微軟公司(Microsoft)所推出 的 Kinect,透過攝影技術捕捉人體的肢體骨架位置與深度,然而攝影捕捉技術更 許多場景與訊號資料處理的議題尚待解決,例如過於明亮的光線(如陽光)便會嚴 重干擾訊號擷取的內容,如果是應用在會攝影到觀眾的情境,在骨架辨識的擷取 上難度會提高許多,因此能夠較不受到前述因此影響的 motion-capture 技術,是 採用穿戴感應器於肢體上,直接傳送肢體骨架的資訊至系統處理,捕捉骨架的精 確度也會比攝影捕捉要即時與精確。
Phidgets 是提供程式設計師,透過 USB 連接低成本電子元件,編寫可以感 應與操控這些元件的程式之模組,相較於攝影捕捉技術的設備而言成本更低,由 Phidgets 公司設計,Phidgets 提供了多種程式語言的應用程式開發介面(API),本 研究採用的是 Phidgets 公官方提供,可運行於各平台環境下的 Java API Library。
然而 Phidgets 只作為感應器與作業系統溝通的橋樑,為了模擬展演人員穿戴 感應器,我們將感測器連接到執行感應器訊號接收的程式上,該程式除了接收感 應器訊號,我們並加入了將訊號打包成平台統一的資料格式,以便透過 MQTT broker 程式與 DIPS 執行引擎溝通。
本研究採用的實驗感應器是 Phidgets 公司的『1056_0 - PhidgetSpatial 3/3/3』
感應器,這個感應器主要是用來做空間變化的感應,他整合了加速器(accelerate)、
角度計(gyroscope)和陀螺儀(compass)三種感應器,由於我們實驗所需偵測的肢體 動作為手部的抬舉,因此僅接收角度計的三軸變化資料。
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
20
圖八:1056_0 - PhidgetSpatial 3/3/3 感應器
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
21
2-8 WYSIWYG Editor
WYSIWYG(What You See Is What You Get, 所見及所得) 是設計編輯器的一 種方法,旨在提供程式開發人員一個直覺的編輯方式,通常是以圖形化編輯器的 方式呈現,編輯器會提供許多可選擇元件的圖形化項目,開發人員只需要將元件 拖曳至編輯區內,編輯器就會自動為該元件註冊屬性與建立方法,開發人員不需 要自行建立物件或設計預設方法(例如事件觸發的處理函式),這種開發方法更個 很大的優勢,開發者可以任意的排版,設定物件的位置,對於開發使用者友善 (user-friendly)的圖形化介面而言是很敏捷的方法,此外,這種方式可提供不具程 式背景或初學程式設計開發的開發者,快速上手開發圖形化應用程式,由於本研 究提供的領域專屬語言鎖定在展演領域,使用者很高度可能性是不具更程式設計 或資訊科技背景的導演或編劇,因此這個優點也是我們考慮提供一個圖形化編輯 器的原因,著名的 WYSIWYG 編輯器更 Visual Studio、Xcode、Qt、GTK、MIT Scratch、AppInventor、Visual Editor 等。
圖九:WYSIWYG Editor
‧
我們採用的 DIPS 之語意模型(semantic model)是奠基在演員的各種表演活動 (dancer activity)上,我們詴圖從導演的角度思考,如何運用具更展演語意的述詞,