在Azure上執行NCBI BLAST

BLAST可以用來比對不同DNA或胺基酸的序列,可以用來追查Covid-19的源頭,或是人類和尼安德塔人的基因相似度。用一般機器跑BLAST通常非常耗時,這篇文章除教導如何在Azure上跑BLAST及其最佳化的過程。

BLAST can be used to compare different DNA or protein sequences, and can be used to trace the origin of Covid-19, or the genetic similarity between humans and Neanderthals. Running BLAST is usually very time-consuming. This article will guide you how to run BLAST on Azure, optimization process, and best practice.

Running NCBI BLAST on Azure – Performance, Scalability and Best Practice (microsoft.com)

如何利用 Azure 「機器學習」贏得黑客松 (Hackathon)?

預測某個 YouBike 租借站在某個時間點是否還有車可以借、是否還有車位可以停;預測某個城市在不同的時間發生犯罪的機率;依據下眼瞼的照片判斷貧血的程度;找出不同的開車模式和車禍發生機率的關係。以上都是你可以利用 Azure  Machine Learning「機器學習」贏得一場黑客松 (Hackathon) 的題目,甚至成為你開始新創公司的契機!

本文將介紹使用 Azure 「機器學習」的步驟及各種資源,方便你在黑客松活動中使用。其中前二個步驟可以在參加之前即先行完成。

步驟一:開通 Azure 「機器學習」帳號

1. 不需要信用卡就可以免費開始使用 Azure Machine Learning (https://studio.azureml.net/):擁有 10GB Azure Storage 的 Datasets 空間、最多建制 100 modules 以及一小時的 Machine Learning experiments 時間。

image

2. 如果你是成立不到五年的新創公司,可以免費申請 BizSpark 方案,享有每個月 NT$4,700 額度的 Azure credit。開通時亦無需輸入信用卡,所以沒有付費的風險。

3. 如果你是 MSDN 訂閱用戶,本來就有 Azure 免費額度,只要開通即可。

4. 當然你也可以直接申請免費試用一個月,取得 NT$6,300 元的 Azure 信用額度。

(如果你是學校老師或學生,有更多 Azure 免費資源)

步驟二:學習使用 Azure Machine Learning Studio

如果你是機器學習的完全初學者,除了可先閱讀專門爲初學者所寫的二篇文章之外:

Azure 「機器學習」初體驗
如果你搭上了鐵達尼號,有機會生還嗎?

強列建議走一遍官方中文教學:在 Azure Machine Learning Studio 中建立您的第一個實驗

步驟三:尋找合適的訓練資料

如同文章一開始所提出的各種問題,Azure 「機器學習」的強項即是能根據歷史資料作數值預測 (Regression)、分類  (Classification) 或是分群 (Clustering),成為解決這些問題的強力工具。請記得,能問出一個好問題、進而定出一個好題目,常常是贏得一場黑客松非常重要的關鍵!

定出題目之後,就要尋找合適的資料作為機器學習模組的訓練之用了。資料集 (datasets) 的提供可以透過直接上傳(如 .csv 格式)、或是提供連結 (如 OData feed provider) 的方式。若要使用公開資料,以下是幾個常用的國內外站點:政府資料開發平台美國政府開放平台KaggleUC Irvine Machine Learning Repository 等。

步驟四:建構你的學習模型

「機器學習」之中,若是作為數值預測 (Regression) 或分類 (Classification) 之用途.皆是屬於監督式學習 (Supervised Learning) 的範疇。監督式學習基本上會遵守以下的流程:

image

別小看了其中”資料清理”的工作喔! 因為你所選擇的訓練資料,可能有缺漏或不全之處需要補全或是移除、有些欄位 (如姓名、ID等) 不應該作為訓練之用、有些資料需要先”類別化” (Categorized) 以作為訓練之用並讓使用者選擇 (如性別、鐵達尼號的上船港口等)。建議大家可看看”鐵達尼號”的模型如何作資料清理,並據此學習。

步驟五:選擇合適的演算法

在此文章中有介紹各種不同演算法,及各自的使用時機,大方向如下:

  • 如果您期望的解答是一個數值的話 => Regression (迴歸分析)
  • 如果您的問題能夠以 Yes/No 來回答 => Classification (分類)
  • 如果您想將具相同特性的資料群集分類 => Clustering (分群)

微軟也製作了一個 PDF 小抄可供下載,方便大家依步驟判斷,以選擇最合適的演算法:

Machine Learning Algorithm cheat sheet: Learn how to choose a Machine Learning algorithm.

步驟六:優化你的訓練模型

個人覺得 Azure Machine Learning Studio 這個工具最酷的地方,就是可以自動找到最適合的演算法設定參數了。例如,我用了決策樹 (Decision Tree) 演算法,但我怎麼知道節點或是葉子的數目該設為多少呢?

預設的單一參數 (Single Parameter) 設定:

image2

你只要更改為參數區間 (Parameter Range),就能設定參數範圍 (以等差或等比遞增)、指定數個參數、或是混合設定。訓練模型就會自動根據你的設定找出最佳的參數!

image3

選擇參數來最佳化 Azure Machine Learning 中的演算法

同時也不要忘記,可在 “Score Model” 及 “Evaluate Model” 中檢視你的模型預測準確度。

多元分類評估結果

在 Azure Machine Learning 中評估模型效能

在 Azure Machine Learning 中解譯模型結果

步驟七:發佈為 Web Service

模型優化之後,就可以發佈為 Web Service 以進行預測了。在下方選擇 “SET UP WEB SERVICE” => “Predictive Web Service” ,再點選 “DEPLOY WEB SERVICE” 即可佈署使用。

Convert to scoring experiment

Deploy the web service

部署 Azure Machine Learning Web 服務

步驟八:使用 Web Service

最貼心的是,還提供 C#, Python 及 R 語言的 sample code,協助大家節省時間贏得比賽!

image

Web Service 提供了兩種呼叫方式

1. Request/Response: 提供快速可延展的呼叫服務,接受一或多筆資料作為輸入、也可輸出一或多筆結果,適合用在單筆且快速回應的需求,例如即時回應使用者對股市收盤行情的預測。

2. Batch Execution:適合處理批次、大量、非同步的資料,例如批次性的處理 IoT 在一段時間之中收集的所有資料。

希望以上對大家有幫助,值得一提的是,2015 年 8 月舉辦的台大 HackNTU 中,前 2 名都是與 Azure Machine Learning 有關的喔!

image

其中第一名使用了Project Oxford 服務,包括 Speech APIs (Speech recognition + Text to Speech Conversion 等),其背後機制即是微軟的「機器學習」;第二名則是運用 Azure 機器學習來訓練六種手語手勢。

千人黑客松HackNTU得獎團隊揭曉 語言學習App、手語辨識系統、救災無人機獲獎

image

延伸閱讀:

1. How to win a hackathon using Azure Machine Learning – 作者為微軟總部高級主管 Jennifer Marsman,本篇主題及內容來自她的文章,並已取得她的同意作適當的翻譯及在地化。

2. 本部落格所有機器學習相關文章: http://blogs.msdn.com/b/mengtsai/archive/tags/machine+learning/

Azure 校園免費方案整理 (學生及老師適用)

1. 所有學生:“Azure for Students” 方案開放給所有學生,不用信用卡即能開始使用,直接至 Microsoft Azure for DreamSpark 認證您的學生身份,即可免費使用多種 Azure 公有雲服務,目前包含以下 4 種,將會不定期持續新增:

  • Azure App Service Web Apps is a part of a fully managed cloud offering that enables you to build and deploy web apps in seconds. Use ASP.NET, Java, PHP, Node.js or Python. Run popular web apps and CMS solutions. Set up continuous integration and deployment workflows with VSO, GitHub, TeamCity, Hudson or BitBucket – enabling you to automatically build, test and deploy your web app on each successful code check-in or integration tests.
  • MySQL Database from ClearDB adds the power of MySQL to your Web Apps. With clearDB MySQL you can deploy more kinds of web apps and CMS solutions such as WordPress, Joomla, Acquia Drupal, phpBB, and more.
  • Application Insights provides a 360° view across availability, performance and usage of your ASP.NET services and mobile applications for Windows Phone, iOS and Android platforms. Search and analyze your data to continuously improve your application, prioritize future investments and improve overall customer experience.
  • Visual Studio Online is the fastest and easiest way yet to plan, build, and ship software across a variety of platforms. Get up and running in minutes on our cloud infrastructure without having to install or configure a single server.

2. 學校開課Microsoft Educator Grant Program provides access to Azure for use in the classroom by university students and their professor.

請直接填寫相關資料即可申請: http://www.microsoftazurepass.com/azureu

  • Faculty will receive a 12 month, $250/month account
  • Students will receive a 6 month, $100/month account

3. 研究專案Microsoft Azure for Research 目前有 Ebola Research,Azure Machine Learning, Climate Data Initiative 等不同的專案可申請:http://research.microsoft.com/en-US/projects/azure/awards.aspx

我看起來幾歲 How old do I look? 幕後花絮

【原文來自: 台灣微軟雲端與企業平台事業部副總經理葉怡君網誌

這幾天有款 App (or 網站?) http://how-old.net/# 爆紅 – “How Old Do I Look?” (我看起來幾歲?), 短短 48 個小時就有一百萬人上去 PO 照片測試. 我的臉書幾乎被大家的自拍照片洗版, 大部份的人都很滿意他們的測試結果, 因為都比實際年齡少了許多, 連我 91 歲的阿嬤也立馬叫她的朋友來試, 因為她有一張笑開懷的照片看起來只有 76 …

當然囉, 也有一些例外, 但基本上是款相當討喜的軟體,所以也被瘋狂轉載. 也因為基本上蠻準的(特別對老人及小孩), 也或是很不準(特別是涷齡的東方女生), 所以引起很多討論, 包含:

  • 這到底怎麼猜的? 怎麼這麼準?
  • 這到底怎麼猜的? 為什麼我表情不一樣, 猜的年齡也不一樣?      
  • 這到底怎麼猜的? 為什麼我一直被猜出是女生? 我明明是男的? (Who knows?)       
  • 這到底怎麼猜的?我PO上去的照片會不會被Microsoft拿去使用?

由於這個網站是敝公司做的, 當初只是為了開發者大會 (//Build) 做的一款 demo, 用了蠻多物聯網及大數據的技術, 所以我就去查了一下幕後花絮, 結果發現一些有趣的故事.

樣本那裡來?

一開始那個開發團隊只想找 50 個人, 結果最後弄到了3萬5仟個人參加 (而且2萬9仟人來自土耳其, 土耳其!!!! 只能說要讓全世界看到, 一定要積極參與國際事務). 總共上傳了21萬張照片, 再用Microsoft Azure 雲端服務上的 Face detection APIs 去找到人臉, 去分類, 去看是不是同一個人。

個人覺得很準, 因為我拿我們家阿布的臉去測, 即使他很帥, 還是測不出來的.

性別跟年齡怎麼猜出來

要在一兩天就寫出這款討喜的App, 當然不能不能從研究演算法開始, 當然也站在巨人的肩膀上摘水果, 所以這個開發團隊用了微軟的機器學習套件 – Azure Machine Learning Gallery 中, 由一個叫 “牛津專案” (Project Oxford) 所做出來的雲端智能服務, 包含Face, Speech, and Vision. 另外, 考量大家除了測自已跟家人的年齡外, 也一定想惡搞一番, 去找名人或古人的照片, 所以再用了Bing Search API 去搜尋網路上的有趣照片.

Microsoft 到底會不會把上傳的照片存下來?

真的不會. 這是官網上的說明:

We’ve had some questions so we updated this post to be more clear. To answer the top one: No we don’t store photos, we don’t share them and we only use them to guess your age and gender. The photos are discarded from memory once we guess. While the terms of service very common in our industry, and similar to most other online services, we have chosen not to store or use the photos in any way other than to temporarily process them to guess your age.

那大家一定會問, 真的嗎? 照片一直不斷的傳上來, 你不存起來怎麼分析, 怎麼學習?

問的好, 重點來了, 這就是大數據即時分析的神妙之處啊啊啊. 別忘了有 Azure 啊.

資料的匯集跟派送可以用 Azure Event Hubs, 可以一秒鐘進出幾百萬份資料, 你的照片不會被存下, 我們存下的是從照片萃取出來的資料, 是什麼資料呢? 我同事說是叫”顏值” 的資料, 也就是青春的軌跡吧. 所以大家放心. 你的照片不會被留下來.

但對於寫程式的人來說, 怎麼抽出這些像是性別, 年齡資料, 來做即時呈現呢? 大家上傳照片一定想要立馬知道結果, 没有人想過幾天再開獎, 又不是全身健檢… 當然, 又得靠工具了. Azure Stream Analytics 可以讓開發者用簡單的 SQL query 語法捉到即時的串流資訊, 立馬回報.

比起別的國家來, 台灣人是不是看起來比實際年齡年輕?

我不確定, 但根據這幾天我所看到的結果, 好像我們普徧看起來年輕很多 (只要不要亂做鬼臉, 拍太暗…). 但如果你真的有心想要開發新的App來統計一下, 也有好用的工具來做圖表分析, 那就是(噹噹噹…) PowerBI http://www.powerbi.com!

還是那句話, 實際幾歲不重要, 看起來幾歲比較重要, 去玩玩看吧, 或許你會找到讓自已看起來年輕的秘訣. 還有, 如果你是開發者, 發揮想像力吧, 利用 Azure 這些 API,

看你可以寫出什麼讓大家瘋傳的 App!

原文參見 http://blog.how-old.net/

(應用程式篇) 免費取得程式編碼軟體 Microsoft Imagine Access

羅列 Microsoft Imagine Access 網站中,所有免費編寫應用程式的軟體及資源,依初學者至專業遊戲開發排列如下。

使用 Windows App Studio 創作您的第一個簡單型應用程式

花費數分鐘即可直接在網頁瀏覽器中創作應用程式! 您可以透過 Windows App Studio 使用預先製作好的範本來設計應用程式,然後填入您的文字與圖片。

建立您的第一個 Windows App Studio 應用程式
瀏覽 Windows App Studio 應用程式

了解如何使用 SmallBasic 編寫所有類型的應用程式

使用免費的學生程式設計工具 SmallBasic,進一步實際體驗編寫程式碼。 雖然只有 20 個可運用的命令,卻足以建立整個世界的應用程式,這是學習編寫程式碼基本知識的簡易方式。

免費下載 SmallBasic
了解如何編寫程式碼
瀏覽 SmallBasic 應用程式

了解如何使用 WebMatrix 編寫網站

想要製作自己的網站嗎? 立刻免費下載 WebMatrix 3,然後學習編寫網站的基本知識。 您很快就能建置非常棒的網站。

下載 WebMatrix 3
學習編寫網站的基本知識

使用這些免費的專業工具開發您的應用程式

您可以透過 Microsoft Visual Studio 取得與專業人員相同的開發應用程式工具! 此外,還可以透過免費的 Windows 市集開發人員帳戶,在 Windows 和 Windows Phone 市集販賣您的應用程式。

下載 Visual Studio
免費取得 Windows 市集開發人員帳戶

經由免費的線上學習即可和專業人員一樣地開發應用程式

準備好深入了解嗎? 如果您是已具經驗的學生開發人員,可以取得免費的線上課程影片、程式碼編寫指南和文件,而且是為自己獲取增進第一份工作之技能的大好機會。

在 Microsoft Developer Network 尋找免費的線上影片課程以及其他內容

延伸閱讀

1. 學生免費公有雲服務 “Azure for Students”

2. 免費取得程式編碼軟體 Microsoft Imagine Access (遊戲篇)

(遊戲篇) 免費取得程式編碼軟體 Microsoft Imagine Access

羅列 Microsoft Imagine Access 網站中,所有免費編寫遊戲的軟體及資源,依初學者至專業遊戲開發排列如下。

Kodu Game Lab

使用 Kodu Game Lab 創作您的第一個視訊遊戲

免費下載 Kodu,就可以在 Windows 電腦上建立刺激的遊戲。 不論是賽車遊戲、動作遊戲和策略遊戲或其他遊戲,您可以即刻創作您最愛的遊戲類型!

免費下載 Kodu Game Lab
創作您的第一個遊戲
瀏覽 Kodu 遊戲

了解如何使用 Project Spark 編寫神奇的世界

如果您有 Xbox One 或 Windows 8.1 的電腦,可免費下載 Project Spark,您會很驚訝竟然可以創造出如此神奇的世界。 然後立刻可以使用視覺化程式設計語言編寫程式,讓所有想像成真!

下載 Project Spark for Xbox One
下載 Project Spark for Windows 8.1
建立您的第一個 Project Spark 遊戲

了解如何使用 SmallBasic 編寫遊戲

使用免費的學生程式設計工具 SmallBasic,進一步實際體驗編寫程式碼! 學習非常基本的程式編寫知識,只需運用 20 個命令,即可創作整個世界的遊戲。

免費下載 SmallBasic
了解如何編寫程式碼
瀏覽 SmallBasic 遊戲

使用免費的專業工具開發您的遊戲

您可以使用 Microsoft Visual StudioUnity 遊戲引擎,像專業人員一樣地創作遊戲。 此外,您還能免費獲得發行作品所需的一切所需!

下載 Visual Studio
下載 UnityVS 外掛程式
下載 Unity 遊戲引擎

透過免費的線上學習即可和專業人員一樣地開發遊戲

準備好深入了解嗎? Microsoft Virtual Academy (MVA) 有免費的線上影片課程,您隨時都可以上課。 已有經驗的學生透過適當的課程,能了解專業遊戲開發的基本知識!

在 MVA 尋找遊戲開發人員的免費線上課程影片

延伸閱讀

1. 學生免費公有雲服務 “Azure for Students”

2. 免費取得程式編碼軟體 Microsoft Imagine Access (應用程式篇)

初探「機器學習」投影片下載

分別於今年 2 月及 4 月於松山文創美國創意中心演講的課程投影片,簡介 Azure Machine Learning 以及微軟提供的各項創業所需要的資源,如 BizSpark 等:

[AIC課程] 初探「機器學習」與創業資源

相關閱讀:

1. 本部落格 Machine Learning 系列文章 (中文): http://blogs.msdn.com/b/mengtsai/archive/tags/machine+learning/

2. Microsoft Azure 機器學習官方學習網站 (含教學影片及文件): http://azure.microsoft.com/zh-tw/documentation/services/machine-learning/

3. 美國創意中心 (American Innovation Center) FB: https://www.facebook.com/twaic?fref=ts 

[Windows 10] Extension SDK: 讓同一隻應用程式能在不同裝置上執行的秘密

微軟在今年三月揭示了未來的 Universal Apps,將能在各種不同裝置上執行的願景。這些裝置包含了 PC, Mobile, IoT 裝置, Xbox, Surface Hub, 甚至 HoloLens

Gallo blog 1 v2

那麼,要如何讓同一隻 Universal App 在這些不同的裝置上執行呢? Extension SDK 即是解答之一。

以往的作法是什麼?

我們先檢視一下在 Windows 8/8.1 上,欲同時開發 Windows Store App 及 Windows Phone App 的方法。我們可以將共享的程式碼 (如 Business Logic, Data Model, etc.) 實作於 Shared Projects 中,開發者只需額外處理如螢幕大小等 User Experience 上的不同。

但是,編譯之後將會產出兩份針對不同裝置的 Binary or Package,必需分別上傳至不同的 Store 作審核、也必需在不同的 Dev Center 之中作管理:

image

另一個開發者會面對到的問題是,當有些 API 只適用於某些裝置時,要如何處理呢? 例如 :Windows Phone 手機上的實體 Back 鍵、Xbox One 的遙控器、HoloLens 的互動控制等,都不會出現在 Windows 平板上:

image

常見的處理方式即是 Compilation directives,透過 #if 語法,讓開發工具在編譯 (compile) 期間即決定某功能是否會被引入:

image

小結以上:

  • 現有作法會根據不同的裝置,編譯成數個不同的 Binary,也增加了應用程式管理及維護上的負擔;
  • 同時,#if 的作法是在編譯 (compile) 階段即需決定是否引入某些裝置上的功能,亦即無法在執行 (runtime) 階段動態決定。

簡介 Extension SDK:

Windows 10 的 Extension SDK 即是要達成同一個應用程式 (Binary) 能執行在不同裝置上的解決方案:

  1. 它是既有 UAP (Universal Applications Platform) 的延伸、
  2. 針對不同的裝置,即會有不同的 Extension SDK、
  3. 正因為如此,個別的 Extension 即能各自更新其版本

image

如下圖。不同的裝置上都跑著 Windows Core,提供諸如 File I/O, Drivers 等基礎服務;UAP 則提供了一些通用型的控制項,也就是一群 API 的集合,作為通用型應用程式開發的基礎:

image

而在特定裝置上才提供的 APIs,則以 Extension SDK 的方式來實作,表現在圖中的話,即是以延伸的方式由 UAP 的通用型 APIs 再向外擴展:

image

實作 Extension SDK:

1. 透過 Project > Add Reference > Universal App Platform > Extensions ,即可新增您所需要的 Extension 至專案之中。各位可注意到其後有版本別,亦即可各自分別更新並被引入:

image

2. 接下來,即可於程式中使用 Windows.Foundation.Metadata.ApiInformation 這個 Class,在執行 (runtime) 期間判斷某 API 是否存在:

image

若您只想實作一小部份的 APIs,可以考慮直接使用 ApiInformation.IsTypePresent:

// Note: Cache the value instead of querying it more than once.

bool isHardwareButtonsAPIPresent =

    Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons");

 

if (isHardwareButtonsAPIPresent)

{

    Windows.Phone.UI.Input.HardwareButtons.CameraPressed +=

        HardwareButtons_CameraPressed;

}

以上程式中,我們只需驗證此裝置是否支援 HardwareButtons 這個 class,若支援,則必定亦包含 CameraPressed 這個事件,我們即可放心的使用它。

當然,除了 IsTypePresent,我們也可使用 IsEventPresent, IsMethodPresent, IsPropertyPresent 測試個別的事件、方法、參數等是否存在:

bool isHardwareButtons_CameraPressedAPIPresent =

    Windows.Foundation.Metadata.ApiInformation.IsEventPresent

        ("Windows.Phone.UI.Input.HardwareButtons", "CameraPressed");

小結:

  • Extension SDK 成為 Windows 10 UAP 的開發架構中,達成同時支援多種不同裝置的一步活棋。由於是以延伸方式向外作擴增,其保有隨著各裝置的進化而各自演進版本的彈性。
  • 對於開發者而言,能夠簡單的在執行階段 (runtime) 判斷特定裝置上的 API 是否存在,方便達到讓同一隻應用程式執行在不同裝置上的目標。
  • 最後,由於可以僅產出一份 Binary,即能達到 One Store + One Dev Center 的目標,減少開發者的後續維護及管理成本。

另請注意,Extension SDK 的目的並非取代 #if 的功能,Compilation directives 的方式仍然是可行的!

註:

若要嘗試這些新功能:

  1. 請加入 Windows Insider Program,取得並安裝 Windows 10 Developer Preview.
  2. 取得並安裝 Visual Studio 2015 CTP. (目前版本為 CTP6)
  3. 新專案中即會出現 Windows 10 Universal App 的範本。

同時:

1. 若您在測試過程中遇到問題:

2. 若您對 API 有任何新功能的需求,則可透過 Windows platform developer UserVoice site 來建議,這網站會在 BUILD 2015 前持續更新,反應最新的 API 功能。

延伸閱讀:

  1. Developer’s Guide to Windows 10 Preview: (04) Extension SDKs (英文教學影片)https://channel9.msdn.com/Series/Developers-Guide-to-Windows-10-Preview/04 
  2. Guide to Windows universal apps: https://msdn.microsoft.com/en-us/library/dn894631.aspx 

 

[Windows 10] Inking: 筆跡功能的應用及實作

Windows 10 推出之後將支援許多種的輸入 (input) 方式,包括 Windows Hello 透過臉部特徵或虹膜取代密碼輸入、HoloLens 利用全息虛擬實境技術與人作 3D 互動等等。

本文則將介紹 Windows 10 加強後的筆跡 (Pen & Ink) 技術。 對開發者而言,多了 InkCanvas 控制項與基礎 DirectInk 類別,可以使用您已熟悉的程式語言如: C++、C# 或 Visual Basic 等,在 Windows 10 Apps 中實現更強大的筆跡功能。

比如:

叫出地圖後,用筆(或手指)畫上路線圖:

image

在連線遊戲中,即時紀錄如「狙擊手在右邊建築物屋頂」的筆跡訊息:

image

用原始筆跡回信:

image

或是先轉成文字…

image

image

Windows 10 在 Pen & Ink 的擴充性

要作到以上應用, Windows 10 提供的 InkCanvas 控制項定義了一個用於繪圖以及轉譯筆跡筆觸的重疊區域。此控制項的功能 (輸入、處理和轉譯) 則來自 InkPresenterInkStrokeInkRecognizerInkSynchronizer 等類別。

(目前使用 JavaScript 的 Windows 應用程式不支援這些類別)

也就是說,無論使用者是以「觸控筆」或是「手指」作輸入所得到的 “Ink” 物件,都能以原始筆跡、加上述解或描述 (metadata)、亦或轉譯成文字或圖檔等方式,作進一步創意的實踐。

image

開始實作吧!

假設我想在一個影像 (image) 上面疊一個筆跡畫布,在 XAML 描述中只要多加一個 InkCanvas 即可,非常直覺簡單:

<ScrollViewer>

    <Grid>

        <Image Source="Assets/signature.jpg" />

        <InkCanvas x:Name="myInkCanvas" />

    </Grid>

</ScrollViewer>

執行畫面如以下,各位可注意其中細微的筆觸差異,這些都會被紀錄在 Ink 物件中;同時寫字速度等資訊也會被紀錄下來,可作為進一步 (如筆跡辨認) 的應用。

image

想更進一步了解 Windows 10 在筆跡功能上的應用,請參考以下 10 分鐘的影片: (Developer’s Guide to Windows 10 Preview: (07) Pen & Ink)

https://channel9.msdn.com/Series/Developers-Guide-to-Windows-10-Preview/07/player

註:

若要嘗試這些新功能:

  1. 請加入 Windows Insider Program,取得並安裝 Windows 10 Developer Preview.
  2. 取得並安裝 Visual Studio 2015 CTP. (目前版本為 CTP6)
  3. 新專案中即會出現 Windows 10 Universal App 的範本。

同時:

1. 若您在測試過程中遇到問題:

  1. 請先檢視 release notes 以及 known issues with Visual Studio 2015 CTP6,查看是否為已知問題。
  2. 使用 Windows Store 及 Windows Phone Apps 論壇詢問。
  3. 若您發現的確是個 bug,可透過 Windows 10 內建的 Feedback App 來回報協助。

2. 若您對 API 有任何新功能的需求,則可透過 Windows platform developer UserVoice site 來建議,這網站會在 BUILD 2015 前持續更新,反應最新的 API 功能。

[Windows 10] Adaptive UI: 因應不同螢幕大小,動態改變畫面呈現方式 (使用 RelativePanel & VisualStateManager)

 

Gallo blog 1 v2

本文將介紹 2 種全新的 XAML 作法, 來達到 Windows 10 的 UAP 中 “Adaptive User Interface” 的要求。讓我們的 App 在任何螢幕大小的環境之下,都能適切的調整元件的相對位置、或是動態改變元件的呈現方式。

1. RelativePanel:可決定控制項之間的相對位置

<RelativePanel>

  <TextBox x:Name="textBox" Text="我是一段文字我是一段文字我是一段文字" />

  <Button x:Name="yellowBtn" Background="Yellow" Content="黃色按鈕" RelativePanel.RightOf="textBox" />

  <Button x:Name="blueBtn" Background="Blue" Content="藍色按鈕" RelativePanel.RightOf="textBox" RelativePanel.Below="yellowBtn" />

</RelativePanel>

請注意裡面出現了 RelativePanel.RightOf 以及 RelativePanel.Below,望文生義即可理解,App 會把這 3 個控制項的相對位置確認下來,無論螢幕大小如何改變。亦即:
「”yellowBtn” 將位於 “textBox” 的右邊;而 “blueBtn” 不但位於 “textBox” 的右邊,也會位於 “yellowBtn” 的下方。」

image

 

2. VisualStateManager:可根據螢幕的大小動態改變控制項的呈現方式

<TextBlock x:Name="text" Foreground="Azure" HorizontalAlignment="Center" VerticalAlignment="Center"/> 

<VisualStateManager.VisualStateGroups>

 <VisualStateGroup x:Name="SizeStateGroup">

     <VisualState x:Name="Min">

         <VisualState.StateTriggers>

           <AdaptiveTrigger MinWindowWidth="0" />

         </VisualState.StateTriggers>

         <VisualState.Setters>

           <Setter Target="text.Text" Value="喔喔好窄!!!!!" />

         </VisualState.Setters>

     </VisualState>

     <VisualState x:Name="Middle">

         <VisualState.StateTriggers>

           <AdaptiveTrigger MinWindowWidth="651" />

         </VisualState.StateTriggers>

         <VisualState.Setters>

           <Setter Target="text.Text" Value="寬多了啊!!!!!" />

         </VisualState.Setters>

     </VisualState>

     <VisualState x:Name="Wide">

         <VisualState.StateTriggers>

           <AdaptiveTrigger MinWindowWidth="1000" />

         </VisualState.StateTriggers>

         <VisualState.Setters>

           <Setter Target="text.Text" Value="可…以…躺…下…了!!!!!" />

         </VisualState.Setters>

     </VisualState>

 </VisualStateGroup>

</VisualStateManager.VisualStateGroups>

觀察以上的 XAML,我們只要注意兩點:

  • StateTriggers: 是用來定義一個條件臨界值,當螢幕大小滿足條件時,就會作以下 Setter 所描述的變動。
  • Setter: 可在此改變元件的 attributes,如改為 Horizontal、改變 width 等等;可以同時設定多個 Setters。

以白話文說明以上 XAML 描述:

「若 App 寬度至少為 0 pixel 的話,改變文字為 “喔喔好窄!!!!!”;若寬度至少為 651 的話,改為 “寬多了啊!!!!!”,若寬度至少為 1000 的話,改為”可…以…躺…下…了!!!!!”。」

以下是結果,請觀察寬度及文字的關係:

image

image

image

將以上的 RelativePanelVisualStateManager 綜合使用,就可以作到微軟資深技術主管 Kevin Gallo 在 Mobile World Congress 2015 上的 Demo 效果 (約第 30:00 開始約 3 分鐘):

註:

若要嘗試這些新功能:

  1. 請加入 Windows Insider Program,取得並安裝 Windows 10 Developer Preview.
  2. 取得並安裝 Visual Studio 2015 CTP. (目前版本為 CTP6)
  3. 新專案中即會出現 Windows 10 Universal App 的範本。

同時:

1. 若您在測試過程中遇到問題:

  1. 請先檢視 release notes 以及 known issues with Visual Studio 2015 CTP6,查看是否為已知問題。
  2. 使用 Windows Store 及 Windows Phone Apps 論壇詢問。
  3. 若您發現的確是個 bug,可透過 Windows 10 內建的 Feedback App 來回報協助。

2. 若您對 API 有任何新功能的需求,則可透過 Windows platform developer UserVoice site 來建議,這網站會在 BUILD 2015 前持續更新,反應最新的 API 功能。

延伸閱讀:

Guide to Windows universal apps: https://msdn.microsoft.com/library/windows/apps/xaml/dn894631.aspx