<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>hermanwu</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/hermanwu/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/hermanwu/feed.xml</link>
    <description />
    <lastBuildDate>Wed, 17 Apr 2019 03:20:46 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>快速建置物聯網系統:  Azure IoT Suite - Remote Monitoring 簡介及客製化</title>
      <link>https://docs.microsoft.com/archive/blogs/hermanwu/azure-iot-suite-remote-monitoring</link>
      <pubDate>Fri, 29 Jan 2016 16:33:00 GMT</pubDate>
      <dc:creator><![CDATA[HermanWu]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/hermanwu/2016/01/29/azure-iot-suite-remote-monitoring/</guid>
      <description><![CDATA[＜2/15 更新：補充 IoT Hub GA 後支援MQTT, 新增 Azure-PowerShell v0.9.8.1 下載連結&gt;
Azure IoT Suite...]]></description>
      <content:encoded><![CDATA[<p>＜2/15 更新：補充 IoT Hub GA 後支援MQTT, 新增 Azure-PowerShell v0.9.8.1 下載連結&gt;</p>
<p>Azure IoT Suite 是微軟針對物聯網應用所規畫出來的雲端服務套件。 它具有快速建置， 高度擴展(High Scalable )性及高安全性， 加上支援多種裝置端作業系統（包含Linux、Windows、mbed、TI-RTOS) 並將裝置端SDK及系統客製化程式在GitHub上開源(Open Source)等特性；可以大幅減少一般物聯網專案的建置時程，加速IoT產品解決方案推出市場。 透過微軟IoT Suite 的Portal 網站， 甚至可以20 分鐘內就建置完一個 IoT Suite 的展示網站。 <br /><br />有關更多IoT Suite的介紹， 可以參考 :</p>
<ul>
<li><a href="https://channel9.msdn.com/Series/herman-iot/Azure-IoT-Suite" target="_blank">絕佳搭配 Azure IoT Suite</a></li>
<li><a href="https://channel9.msdn.com/Series/herman-iot/overview">打造新世紀物聯網舞台</a></li>
<li><a href="https://channel9.msdn.com/events/AzureConTW/2015/b01">物聯網新應用 - 貫通物聯網每一哩路</a></li>
</ul>
<p>由於各類物聯網情境的應用特性及作業流程不一， 因此Azure IoT Suite 在Device 端 SDK 及呈現介面上採取在GitHub 上OpenSource 的方式， 開發者可以在GitHub 上取得相關原始碼， 以修改成符合各自領域應用所需的網站系統。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4201.1.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4201.1.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4201.1.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4201.1.png" alt="" border="0" /></a><br /><br />跟Azure IoT Suite Remote Monitoring 有關的GitHub 專案有 :</p>
<p>&nbsp;&bull; <strong><a href="https://github.com/Azure/azure-iot-remote-monitoring" target="_blank">azure-iot-remote-monitoring </a></strong>: 這是遠端監控應用情境的IoT Suite 範本專案 ， 也是本文主要應用的專案。 <br />&nbsp;&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2376.2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2376.2.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2376.2.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2376.2.png" alt="" border="0" /></a></p>
<p>&nbsp;&bull; <strong><a href="https://github.com/Azure/azure-iot-predictive-maintenance" target="_blank">azure-iot-predictive-maintenance</a></strong> : 這是應用在預測行維護情境的IoT Suite 範本專案。<br />&nbsp;&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4718.3.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4718.3.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4718.3.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4718.3.png" alt="" border="0" /></a></p>
<p>&nbsp;&bull; <strong><a href="https://github.com/Azure/azure-iot-sdks" target="_blank">azure-iot-sdks</a></strong> : 這是在裝置端使用的IoT Hub SDK， 提供C、Csharp、Jave、Node.js 等不同程式語言的版本。<br />&nbsp; <a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5025.4.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5025.4.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5025.4.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5025.4.png" alt="" border="0" /></a></p>
<p>&nbsp;&bull; <strong><a href="https://github.com/Azure/azure-iot-protocol-gateway" target="_blank">azure-iot-protocol-gateway</a></strong> : 由於Azure IoT Suite 主要提供AMQP 1.0&nbsp;, MQTT v3.1.1 及 HTTPS 兩種通訊協定， 如果想要使用其他通訊協定， 可以透過雲端閘道(Cloud Gatway) 的架構來達成。 這個專案實作 MQTT的通訊協定，由於IoT Hub 在GA 後已經內建支援MQTT v3.1.1 協定，此專案只是展示如何擴充IoT Suite 所支援的通訊協定。<br />&nbsp;&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8875.5.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8875.5.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8875.5.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8875.5.png" alt="" border="0" /></a></p>
<p>&nbsp;&bull; <a href="https://github.com/Microsoft/PowerBI-visuals" target="_blank"><strong>PowerBI-visuals&nbsp;</strong>:&nbsp;</a> 由於要呈現各式裝置回傳值最好的方式是透過圖形化介面， 因此在Remote Monitoring 專案中藉由PowerBI 的許多資料視覺化圖表功能，將物聯網裝置的回傳值呈現在專案管理介面上。 PowerBI-visuals 上提供了超過20種圖表呈現方式， 全部都開源在GitHub上， 讓資料呈現更直覺與豐富。 <br />&nbsp; <a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1273.6.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1273.6.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1273.6.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1273.6.png" alt="" border="0" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8737.7.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8737.7.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8737.7.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8737.7.png" alt="" border="0" /></a></p>
<p>本文主要介紹 Azure IoT Suite 中的遠端監控( remote morning )範本客製化， 基本上它已經包含了微軟在Azure 物聯網上提供的主要技術與雲端服務元件。 <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0245.8.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0245.8.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0245.8.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0245.8.png" alt="" border="0" /></a><br /><br />下圖大致是遠端監控範本的架構圖 : &nbsp;<br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0407.9.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0407.9.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0407.9.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0407.9.png" alt="" border="0" /></a><br /><br /><br />來自 &lt;<a href="https://azure.microsoft.com/en-us/documentation/articles/iot-suite-remote-monitoring-sample-walkthrough">https://azure.microsoft.com/en-us/documentation/articles/iot-suite-remote-monitoring-sample-walkthrough</a>/&gt; <br /><br /></p>
<p>遠端監控主要用到 :</p>
<p>&nbsp;&nbsp;&nbsp; &bull;&nbsp;<strong> IoT Hub</strong> :&nbsp; IoT Hub 是今年九月推出， 在Preview 階段的雲端服務。 它以Unit 為單位， 分別有三個等級， 每個等級每天可以接受的訊息量不一， 最基本的免費等級每天可以接收8000 個訊息量。 透過同時使用多個Unit， IoT Hub 可以承載每秒數百萬的訊息量。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7167.10.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7167.10.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7167.10.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7167.10.png" alt="" border="0" /></a> 　<br />&nbsp;&nbsp; &nbsp;&bull; <strong>Azure Stream Analytics (ASA)</strong> : 在Azure上的即時訊息處理服務，它可以將訊息的Stream 及時分類，根據時間加總運算(例如計算過去五分鐘收到的溫度平均值)。&nbsp; 透過ASA 即時運算，彙總，可以節省許多後製處理(Post Process)資料的時間。 　<br />&nbsp;&nbsp; &nbsp;&bull; <strong>Event Hub (事件中樞）</strong> : Event 可以每秒接收數百萬訊息的服務，同時可讓多個應用程式去處理及使用這些訊息．特別是針對訊息量不固定或是偶有暴增裝況，Event Hub 可以避免批次處理及後製處理程式被未預期的訊息量壓垮。 <br />&nbsp;&nbsp; &nbsp;&bull; <strong>Document DB</strong> : 屬於NoSQL 的一種，它是一種類似MangoDB 的JSON 資料庫．具有可以處理大量非固定結構的JSON 資料，並可以透過常見的SQL語法查詢這些文件．提供Restful API 以及JavaScript、Java、Node.js、Python及.Net SDK。 <br />&nbsp;&nbsp; &nbsp;&bull; <strong>App Service - Web App</strong> :&nbsp; 支援.Net、Java、PHP、Node.js及Python 的網站環境， 提供自動調整(Auto Scale)與負載平衡，並且可以透過Git、TFS、GitHub 及VS Team Services 做連續部署．前述提到的azure-iot-remote-monitoring 就是執行在上面．　<br />&nbsp;&nbsp; &nbsp;&bull; <strong>App Service -Web Job</strong> : 是在Web App 上執行的背景工作及服務， 可以執行PHP、Python、Node.js、Java、Bash、Powershell、cmd、bat、exe 等背景或批次處理程式．透過Azure 入口網站中的 WebJob 儀表板能夠掌控 WebJob 的執行。 <br />&nbsp;&nbsp; &nbsp;&bull; <strong>Azure AD</strong> : 提供雲端身分識別和存取管理功能，由於Remote Monitoring 的網站需要有權限管理的功能，因此會用到Azure AD 的服務<br />&nbsp;&nbsp; &nbsp;&bull; <strong>PowerBI</strong> :&nbsp; 在Remote Monitoring 的網站會透過圖表呈現各個Device 目前傳入遙測數值， 因此會借重Microsoft Power BI visuals project 來做資料圖表的呈現。 <br /><br /><br />透過<a href="https://www.azureiotsuite.com/" target="_blank">IoT Suite 的Portal 網站</a>在建置IoT Suite 方案時， 也會列出所使用的Azure 服務。 <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0878.11.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0878.11.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0878.11.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0878.11.png" alt="" border="0" /></a><br /><br />建置Azure IoT Suite時， 除了透過IoT Suite 的Portal 網站做自動建置外， 也可以手動透過PowerShell 建置。 <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8623.12.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8623.12.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8623.12.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8623.12.png" alt="" border="0" /></a><br /><br />在下載下GitHub 上的<a href="https://github.com/Azure/azure-iot-remote-monitoring">azure-iot-remote-monitoring 專案</a>後， 可以看到整個專案結構包含幾部分 :<br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6366.13.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6366.13.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6366.13.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6366.13.png" alt="" border="0" /></a><br /><br /></p>
<ul>
<li><strong>Common 專案</strong>：放置一些公用的工具型Class。 例如 輔助存取Document DB 的工具，產生Sample 資料的工具。</li>
</ul>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6866.14.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6866.14.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6866.14.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/400x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6866.14.png" alt="" border="0" /></a></p>
<ul>
<li><strong>EventProcessor.WebJob 專案</strong> :&nbsp; IoT 裝置的設定及狀態資訊處理程式，接收經ASA 分類過送到EventHub的裝置資訊 (藉由EventProcessorHost） ，將之更新到Document DB 以及執行被觸發的Action。<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5468.15.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5468.15.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5468.15.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/400x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5468.15.png" alt="" border="0" /></a></li>
</ul>
<ul>
<li><strong>Infrastructure 專案</strong>：許多基本的資料物件，資料儲存位置，業務邏輯等，都撰寫在這個專案中。</li>
</ul>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8255.16.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8255.16.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8255.16.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/400x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8255.16.png" alt="" border="0" /></a></p>
<ul>
<li><strong>Simulator.WebJob專案</strong>：包含產生模擬的裝置，在這個模擬的是一個冷卻裝置，它會量測溫濕度數值，送出模擬的遙測值 。&nbsp;</li>
</ul>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4520.17.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4520.17.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4520.17.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/400x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4520.17.png" alt="" border="0" /></a></p>
<ul>
<li><strong>Web :</strong> 這是IoT Remote Monitoring 的管理及監控網站，可以新增連線裝置，產生模擬裝置，顯示裝置狀態及回傳的遙測值．整個網站是以ASP.Net MVC 5 架構寫成。</li>
</ul>
<p>&nbsp;&nbsp;&nbsp; <a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7522.17.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7522.17.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7522.17.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/350x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7522.17.png" alt="" border="0" /></a><br />如果要客製化自己的IoT 管理後台，建議可以先在本機部署RemoteMonitoring 這個專案。 由於有些Azure 服務無法在本機模擬， 因此我們仍要建置以下Azure 服務 :<br />&nbsp;&nbsp; &nbsp;&bull; <strong>IoT Hub</strong> : 規格 S1<br />&nbsp;&nbsp; &nbsp;&bull; <strong>DocumentDB</strong> : 規格 Standard<br />&nbsp;&nbsp; &nbsp;&bull; <strong>Event Hub</strong><br />&nbsp;&nbsp; &nbsp;&bull; <strong>Azure Steam Analytic</strong> x 3<br />&nbsp;&nbsp; &nbsp;&bull; <strong>Blob Storage</strong> : 規格 Standard GRS<br /><br />建置的Script 已經在專案中， 在專案的跟目錄下可以找到一個build.cmd 的Script。 <br />首先先進入 Developer Command Promo for VS2015，並按右鍵選擇以 Administrator權限執行。 <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1513.19.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1513.19.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1513.19.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/300x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1513.19.png" alt="" border="0" /></a><br /><br /><br />到專案的目錄後執行 build.cmd local 指令， 就會透過Powershell 部署相關服務並設定參數值。 <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0068.20.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0068.20.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0068.20.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0068.20.png" alt="" border="0" /></a><br /><br />這邊要注意的是 由於目前(2015/12)最新版的 Azure -PowerShell 已經是1.0.1 版， 在 Azure -PowerShell 在1.0 版後做比較大的改版， 針對Azure Resource Manager (ARM) 的指令有大幅度的更動， <span style="background-color: #ffff99;">但是 RemoteMonitoring 這個專案的Build Scrip 還未更新支援新的指令， 因此必須要安裝 Azure -PowerShell 0.9 版的才可以順利部署 。</span>&nbsp;&nbsp; 本篇是用 Azure-PowerShell 0.9.8.1 環境建置, 這個版本可以在<a href="https://github.com/Azure/azure-powershell/releases/download/v0.9.8.1-October2015/azure-powershell.0.9.8.1.msi">GitHub 這邊</a>下載 。 (要確認目前環境所使用的 Azure-PowerShell 版本，可以透過<a href="https://gallery.technet.microsoft.com/scriptcenter/Azure-PowerShell-cmdlets-13dc4937">這邊</a>的Script 。)</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3058.Image%201.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3058.Image-1.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3058.Image%201.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3058.Image-1.jpg" alt="" border="0" /></a></p>
<p><br />成功部署完後可以在Azure Portal ， IotSuiteLocal 的Resourge Group 上看到相關的服務已經建置完成<br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4527.21.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4527.21.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4527.21.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/400x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4527.21.png" alt="" border="0" /></a><br /><br />同時build.cmd local 也會更新 local.config.user 這個設定檔， 這個設定檔包含剛剛在部署過程中所建立的Azure 服務連線資訊。 <br /><br />接下來可以在 RemoteMonitoring的Solution中設定啟動專案， 同時將&nbsp; EventProcessor、WebJob、Simulator、WebJob、Web 設為啟動。 <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7624.22.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7624.22.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7624.22.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/400x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7624.22.png" alt="" border="0" /></a><br /><br />然後按下執行， 就可以看到專案在本機執行起來並且連線到剛剛建立的Azure 服務。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3757.23.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3757.23.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3757.23.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3757.23.png" alt="" border="0" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3465.24.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3465.24.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3465.24.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3465.24.png" alt="" border="0" /></a></p>
<p>之後就可以依照需求需修改及測試 Web 專案， 例如我們可以很快的Strings.resx檔來修改網站的Title並做一些中文化。 (這邊僅是為了快速展示的取巧作法， 這個專案已經透過ResourceManager實作多國語系資源， 正確中文化的方式仍是要建立 Message.zh-TW.resx檔案)<br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6562.25.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6562.25.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6562.25.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6562.25.png" alt="" border="0" /></a><br /><br />重新編譯後網站上的一些文字描述已經轉成剛剛修改的中文。 <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1541.26.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1541.26.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1541.26.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1541.26.png" alt="" border="0" /></a><br /><br /><br />之後如果要發布到Production環境， 則在部署時可以使用: build.cmd cloud [debug | release] &lt;deploymentname&gt; &nbsp;<br /><br />如果要自己的IoT裝置可以連上剛剛建置的網站， 首先要在網站上的裝置管理介面上新增一個Custom Device， 並取得Device Key。 <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7331.27.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7331.27.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7331.27.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7331.27.png" alt="" border="0" /></a><br /><br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1067.28.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1067.28.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1067.28.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1067.28.png" alt="" border="0" /></a><br />&nbsp;</p>
<p>接下來就可以透過Device ID， IoT Hub Hostname， 跟Device Key 來進行連線。 <br />以Raspberry Pi 上安裝Windows 10 IoT Core 的專案來說， 可以透過Nuget 加入 Microsoft.Azure.Devices.Client SDK。 <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2768.29.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2768.29.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2768.29.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2768.29.png" alt="" border="0" /></a><br /><br /></p>
<p>在後再加入以下程式碼 : <br /> <!-- HTML generated using hilite.me --></p>
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<table>
<tbody>
<tr>
<td>
<pre style="margin: 0; line-height: 125%;">  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135</pre>
</td>
<td>
<pre style="margin: 0; line-height: 125%;"><span style="color: #888888;">//[設定連線Azure IoT Suite 物件]</span>
      <span style="color: #008800; font-weight: bold;">private</span> <span style="color: #008800; font-weight: bold;">const</span> <span style="color: #333399; font-weight: bold;">string</span> DeviceConnectionString = <span style="background-color: #fff0f0;">"HostName=hermanIoT15a.azure-devices.net;SharedAccessKeyName=device;SharedAccessKey= [modify to YOUR SHARED ACCESS KEY]"</span>;
        <span style="color: #008800; font-weight: bold;">static</span> <span style="color: #333399; font-weight: bold;">string</span> IOTHUB_RUI = <span style="background-color: #fff0f0;">"[modify to YOUR IOTHUB RUI]"</span>;
        DeviceClient _deviceClient = DeviceClient.Create(IOTHUB_RUI, <span style="color: #008800; font-weight: bold;">new</span> DeviceAuthenticationWithRegistrySymmetricKey(<span style="background-color: #fff0f0;">"[DEVICE ID]"</span>, <span style="background-color: #fff0f0;">"[DEVICE KEY]"</span>), TransportType.Http1);


 <span style="color: #888888;">//傳送遙測資訊到Azure IoT Suite 範例</span>
        <span style="color: #008800; font-weight: bold;">async</span> Task <span style="color: #0066bb; font-weight: bold;">SendEvent</span>(DeviceClient deviceClient, <span style="color: #333399; font-weight: bold;">double</span> distance)
        {
            RemoteMonitorTelemetryData rmtd = <span style="color: #008800; font-weight: bold;">new</span> RemoteMonitorTelemetryData();
            rmtd.Humidity = distance;

            Random random = <span style="color: #008800; font-weight: bold;">new</span> Random();
            <span style="color: #333399; font-weight: bold;">int</span> i = random.Next(<span style="color: #6600ee; font-weight: bold;">15</span>);
            rmtd.Temperature = <span style="color: #6600ee; font-weight: bold;">15</span> + i; <span style="color: #888888;">//產生隨機資料</span>

            rmtd.ExternalTemperature = <span style="color: #6600ee; font-weight: bold;">35</span>; <span style="color: #888888;">//假資料</span>
            rmtd.DeviceId = <span style="background-color: #fff0f0;">"HermanRP2_001a"</span>;

            <span style="color: #333399; font-weight: bold;">var</span> msgString = JsonConvert.SerializeObject(rmtd);
            <span style="color: #333399; font-weight: bold;">var</span> msg2 = <span style="color: #008800; font-weight: bold;">new</span> Message(Encoding.ASCII.GetBytes(msgString));

            <span style="color: #008800; font-weight: bold;">await</span> _deviceClient.SendEventAsync(msg2);

            Debug.WriteLine(<span style="background-color: #fff0f0;">"\t{0}&gt; Sending message: {1}, Data: [{2}]"</span>, DateTime.Now.ToLocalTime(), <span style="color: #6600ee; font-weight: bold;">0</span>, msgString);
        }

        <span style="color: #888888;">//接收 IoT Suite上傳給裝置的指令</span>
        <span style="color: #008800; font-weight: bold;">async</span> Task <span style="color: #0066bb; font-weight: bold;">ReceiveCommands</span>(DeviceClient deviceClient)
        {
            Debug.WriteLine(<span style="background-color: #fff0f0;">"\nDevice waiting for commands from IoTHub...\n"</span>);
            Message receivedMessage;
            <span style="color: #333399; font-weight: bold;">string</span> messageData;

            <span style="color: #008800; font-weight: bold;">while</span> (<span style="color: #008800; font-weight: bold;">true</span>)
            {
                receivedMessage = <span style="color: #008800; font-weight: bold;">await</span> deviceClient.ReceiveAsync();

                <span style="color: #008800; font-weight: bold;">if</span> (receivedMessage != <span style="color: #008800; font-weight: bold;">null</span>)
                {
                    messageData = Encoding.ASCII.GetString(receivedMessage.GetBytes());
                    Debug.WriteLine(<span style="background-color: #fff0f0;">"\t{0}&gt; Received message: {1}"</span>, DateTime.Now.ToLocalTime(), messageData);
                    <span style="color: #888888;">//this.firstText.Text = "Received Command:";</span>
                    <span style="color: #008800; font-weight: bold;">await</span> deviceClient.CompleteAsync(receivedMessage);
                }

                <span style="color: #008800; font-weight: bold;">await</span> Task.Delay(TimeSpan.FromSeconds(<span style="color: #6600ee; font-weight: bold;">10</span>));
            }
        }

        <span style="color: #888888;">//設定裝置狀態為啟動</span>
        <span style="color: #008800; font-weight: bold;">private</span> <span style="color: #008800; font-weight: bold;">async</span> <span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">StartDevice</span>()
        {

            JObject device = <span style="color: #008800; font-weight: bold;">new</span> JObject();

	<span style="color: #888888;">// 需修改為實際值</span>
            JObject deviceProps = <span style="color: #008800; font-weight: bold;">new</span> JObject();
            deviceProps.Add(<span style="background-color: #fff0f0;">"DeviceID"</span>, <span style="background-color: #fff0f0;">"HermanRP2_001a"</span>);
            deviceProps.Add(<span style="background-color: #fff0f0;">"HubEnabledState"</span>, <span style="color: #6600ee; font-weight: bold;">1</span>);
            deviceProps.Add(<span style="background-color: #fff0f0;">"CreatedTime"</span>, DateTime.UtcNow);
            deviceProps.Add(<span style="background-color: #fff0f0;">"DeviceState"</span>, <span style="background-color: #fff0f0;">"normal"</span>);
            deviceProps.Add(<span style="background-color: #fff0f0;">"UpdatedTime"</span>, <span style="color: #008800; font-weight: bold;">null</span>);
            deviceProps.Add(<span style="background-color: #fff0f0;">"Manufacturer"</span>, <span style="background-color: #fff0f0;">"Raspberry Pi Org"</span>);
            deviceProps.Add(<span style="background-color: #fff0f0;">"ModelNumber"</span>, <span style="background-color: #fff0f0;">"Raspberry Pi 2 B+"</span>);
            deviceProps.Add(<span style="background-color: #fff0f0;">"SerialNumber"</span>, <span style="background-color: #fff0f0;">"A9090"</span>);
            deviceProps.Add(<span style="background-color: #fff0f0;">"FirmwareVersion"</span>, <span style="background-color: #fff0f0;">"10.0586"</span>);
            deviceProps.Add(<span style="background-color: #fff0f0;">"Platform"</span>, <span style="background-color: #fff0f0;">"Windows10 IoT Core"</span>);
            deviceProps.Add(<span style="background-color: #fff0f0;">"Processor"</span>, <span style="background-color: #fff0f0;">"ARM"</span>);
            deviceProps.Add(<span style="background-color: #fff0f0;">"Latitude"</span>, <span style="color: #6600ee; font-weight: bold;">35.626897</span>);
            deviceProps.Add(<span style="background-color: #fff0f0;">"Longitude"</span>, <span style="color: #6600ee; font-weight: bold;">139.740729</span>);
            device.Add(<span style="background-color: #fff0f0;">"DeviceProperties"</span>, deviceProps);
            device.Add(<span style="background-color: #fff0f0;">"Commands"</span>, <span style="color: #008800; font-weight: bold;">new</span> JArray());
            device.Add(<span style="background-color: #fff0f0;">"IsSimulatedDevice"</span>, <span style="color: #6600ee; font-weight: bold;">0</span>);

            device.Add(<span style="background-color: #fff0f0;">"ObjectType"</span>, <span style="background-color: #fff0f0;">"DeviceInfo"</span>);
            device.Add(<span style="background-color: #fff0f0;">"Version"</span>, <span style="background-color: #fff0f0;">"1.0"</span>);


            JObject command01 = <span style="color: #008800; font-weight: bold;">new</span> JObject();
            command01.Add(<span style="background-color: #fff0f0;">"Name"</span>, <span style="background-color: #fff0f0;">"SetTemperature"</span>);
            command01.Add(<span style="background-color: #fff0f0;">"Parameters"</span>, <span style="color: #008800; font-weight: bold;">null</span>);

            JObject command02 = <span style="color: #008800; font-weight: bold;">new</span> JObject();
            command02.Add(<span style="background-color: #fff0f0;">"Name"</span>, <span style="background-color: #fff0f0;">"PingDevice"</span>);
            command02.Add(<span style="background-color: #fff0f0;">"Parameters"</span>, <span style="color: #008800; font-weight: bold;">null</span>);

            JObject command03 = <span style="color: #008800; font-weight: bold;">new</span> JObject();
            command03.Add(<span style="background-color: #fff0f0;">"Name"</span>, <span style="background-color: #fff0f0;">"StartTelemetry"</span>);
            command03.Add(<span style="background-color: #fff0f0;">"Parameters"</span>, <span style="color: #008800; font-weight: bold;">null</span>);

            JObject command04 = <span style="color: #008800; font-weight: bold;">new</span> JObject();
            command04.Add(<span style="background-color: #fff0f0;">"Name"</span>, <span style="background-color: #fff0f0;">"StopTelemetry"</span>);
            command04.Add(<span style="background-color: #fff0f0;">"Parameters"</span>, <span style="color: #008800; font-weight: bold;">null</span>);

            <span style="color: #333399; font-weight: bold;">dynamic</span> commands = GetSupportedCommands(device);
            commands.Add(command01);
            commands.Add(command02);
            commands.Add(command03);
            commands.Add(command04);

            <span style="color: #333399; font-weight: bold;">var</span> messageString = JsonConvert.SerializeObject(device);
            <span style="color: #333399; font-weight: bold;">var</span> message = <span style="color: #008800; font-weight: bold;">new</span> Message(Encoding.ASCII.GetBytes(messageString));
            <span style="color: #008800; font-weight: bold;">await</span> _deviceClient.SendEventAsync(message);
            Debug.WriteLine(<span style="background-color: #fff0f0;">"Send Start Device Info: "</span> + messageString);

        }

        <span style="color: #888888;">//設定裝置接受那些指令</span>
        <span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">static</span> <span style="color: #333399; font-weight: bold;">dynamic</span> <span style="color: #0066bb; font-weight: bold;">GetSupportedCommands</span>(<span style="color: #333399; font-weight: bold;">dynamic</span> device)
        {
            <span style="color: #008800; font-weight: bold;">if</span> (device == <span style="color: #008800; font-weight: bold;">null</span>)
            {
                <span style="color: #008800; font-weight: bold;">throw</span> <span style="color: #008800; font-weight: bold;">new</span> <span style="color: #0066bb; font-weight: bold;">ArgumentNullException</span>(<span style="background-color: #fff0f0;">"device"</span>);
            }

            <span style="color: #333399; font-weight: bold;">dynamic</span> commands = device.Commands;

            <span style="color: #008800; font-weight: bold;">if</span> (commands == <span style="color: #008800; font-weight: bold;">null</span>)
            {
                commands = <span style="color: #008800; font-weight: bold;">new</span> JArray();
                device.Commands = commands;
            }

            <span style="color: #008800; font-weight: bold;">return</span> commands;
        }

  <span style="color: #888888;">// 遙測資訊格式</span>
    <span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">RemoteMonitorTelemetryData</span>
    {
        <span style="color: #008800; font-weight: bold;">public</span> <span style="color: #333399; font-weight: bold;">string</span> DeviceId { <span style="color: #008800; font-weight: bold;">get</span>; <span style="color: #008800; font-weight: bold;">set</span>; }
        <span style="color: #008800; font-weight: bold;">public</span> <span style="color: #333399; font-weight: bold;">double</span> Temperature { <span style="color: #008800; font-weight: bold;">get</span>; <span style="color: #008800; font-weight: bold;">set</span>; }
        <span style="color: #008800; font-weight: bold;">public</span> <span style="color: #333399; font-weight: bold;">double</span> Humidity { <span style="color: #008800; font-weight: bold;">get</span>; <span style="color: #008800; font-weight: bold;">set</span>; }
        <span style="color: #008800; font-weight: bold;">public</span> <span style="color: #333399; font-weight: bold;">double?</span> ExternalTemperature { <span style="color: #008800; font-weight: bold;">get</span>; <span style="color: #008800; font-weight: bold;">set</span>; }
    }
</pre>
</td>
</tr>
</tbody>
</table>
</div>
<p><br />然後再呼叫 StartDevice() method之後， 就可以透過 SendEvent() method 送出遙測資訊到Azure IoT Suite。</p>
<p>有興趣的朋友也可以參考: <a href="https://channel9.msdn.com/Series/mini-Connect-2016/smarthome" target="_blank">打造個人化智慧家庭 - 家庭成員人臉辨識 (Azure IoT + Azure SQL + Project Oxford</a> 中的展示。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>30分鐘快速建立Azure 上的巨量資料操作分析環境 (CentOS, Spark, MySQL, Hive)</title>
      <link>https://docs.microsoft.com/archive/blogs/hermanwu/30azure-centos-spark-mysql-hive</link>
      <pubDate>Fri, 21 Aug 2015 05:08:00 GMT</pubDate>
      <dc:creator><![CDATA[HermanWu]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/hermanwu/2015/08/21/30azure-centos-spark-mysql-hive/</guid>
      <description><![CDATA[Hadoop Ecosystem 的發展十分快速， 從上一篇 "Azure上架設與使用Apache Spark 服務" 到目前不過一個半月， Hadoop 部屬環境的打包跟測試工具 BigTop...]]></description>
      <content:encoded><![CDATA[<p>Hadoop Ecosystem 的發展十分快速， 從上一篇 "Azure上架設與使用Apache Spark 服務" 到目前不過一個半月， Hadoop 部屬環境的打包跟測試工具 BigTop 已經GA ， 而在Azure 上現在也推出<a href="http://azure.microsoft.com/zh-tw/services/hdinsight/apache-spark/">支援Spark 1.3.1 的預覽版</a>， 同時也支援運用 Jupyter (IPython) 或 Zeppelin 來做資料操作及圖表呈現。所以現在在Aure 上使用Spark 服務更加方便， 只要幾個點擊就可以建置完Spark 環境， 不需要像之前那樣需透過像指令碼動作 ( Script Action)這樣的方式自行安裝。</p>
<p>對於Apach Spark for Azure HDInsight 有興趣的可以到<a href="http://azure.microsoft.com/zh-tw/services/hdinsight/apache-spark/">這邊</a>參考相關資料。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4375.1.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4375.1.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4375.1.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4375.1.png" alt="" border="0" /></a></p>
<p>在新的HDInsight 叢集中多了Spark 的叢集類型。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7444.2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7444.2.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7444.2.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7444.2.png" alt="" border="0" /></a></p>
<p>這個版本是基於Windows Server 2012 D2 DataCenter 作業系統。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5822.3.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5822.3.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5822.3.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5822.3.png" alt="" border="0" /></a></p>
<p>在Hadoop 生態系中有三大版本發行商，分別是 Hortonworks、Cloudera 以及MapR。有關Hadoop 生態系及三大版本發行商的介紹， 可以參考 資策會 蘇國鈞組長在 2014&nbsp;Java Developer Day&nbsp;上的<a href="http://www.slideshare.net/KuoChunSu/hadoop-the-apple-of-our-eyes-hadoop">介紹</a>。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4666.52.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4666.52.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4666.52.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4666.52.jpg" alt="" border="0" /></a></p>
<p><span style="font-size: x-small;">(謝謝蘇國鈞先生同意引用, 原文在&nbsp;<a href="http://www.slideshare.net/KuoChunSu/hadoop-the-apple-of-our-eyes-hadoop">這些年，我們一起追的 Hadoop</a>)</span></p>
<p>除了Hortonworks、Cloudera 這兩家主要的 Hadoop 版本發行商已在可以在Azure上選用外， 第三家主要的Hadoop 版本發行商 MapR 也在<a href="http://blogs.technet.com/b/dataplatforminsider/archive/2015/06/10/mapr-based-hadoop-clusters-coming-to-the-azure-marketplace.aspx">今年六月宣布</a>會在Azure 市集上推出。習慣用這些版本的使用者現在都可以在Azure市集上很快建立由這些發行商提供的Hadoop 服務。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5584.4.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5584.4.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5584.4.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5584.4.png" alt="" border="0" /></a></p>
<p>上一篇是在Azure HDInsight上做Spark 的安裝與使用， 本篇主要介紹如何在Azure 上透過Hortonworks 發行的Hadoop 版本， 快速建立一個基於CentOS 上的Spark/Hive/MySQL 操作環境， 作為巨量資料與機器學習的分析與操作使用。</p>
<p><strong>[開發環境準備]</strong><br />&nbsp;&bull; Microsoft Azure 帳號 (如果尚未有帳號， 可以到<a href="https://azure.microsoft.com/zh-tw/pricing/free-trial/">這邊</a>來申請免費試用帳號)<br />&nbsp;&bull; 支援SSH 的Telnet 環境， 在Windows 上我們用<a href="http://www.putty.org/"> Putty</a>， 它是一套免費的 SSH / Telnet 程式，我們會需要用它來連入Hadoop 環境進行操作 <br />&nbsp;&bull; Azure Storage 管理工具 : 本篇使用的是 ClumsyLeft 出的工具CloudXplorer， 試用版可以在<a href="http://clumsyleaf.com/products/cloudxplorer">這邊</a>下載。<br />&nbsp;<br />首先第一步建立Azure HDInsight (Hadoop) 環境，登入Azure 管理網站&nbsp;<a href="http://portal.azure.com">http://portal.azure.com</a> 。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3755.05.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3755.05.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3755.05.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3755.05.png" alt="" border="0" /></a><br />&nbsp;<br />&nbsp;選取 "新增服務"，在 "資料+分析" 類別下可以找到 "Hortonworks Sandbox with HDP 2.2" 的Hadoop 環境， 並選擇以"傳統" 模式 建立。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0815.06.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0815.06.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0815.06.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0815.06.png" alt="" border="0" /></a></p>
<p>&nbsp;接下來需要輸入"主機名稱"，" 使用者名稱"， "密碼"， 並選擇要用什麼等級的VM。從畫面上也可以看到不同等級VM 每個月的成本。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7522.07.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7522.07.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7522.07.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7522.07.png" alt="" border="0" /></a></p>
<p>以基本的A3等級來說，Azure 的試用帳號 (有6700塊Azure 額度)可以使用一個半月左右。不過如果有大量資料要實際進行巨量資料分析，建議可以使用D4等級以上VM。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8713.08.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8713.08.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8713.08.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8713.08.png" alt="" border="0" /></a></p>
<p>接下來可以設定VM 要開在哪一個Azure的資料中心。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6567.09.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6567.09.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6567.09.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6567.09.png" alt="" border="0" /></a></p>
<p>接下來選擇建立後， 在管理介面上就可以看到 Hortonworks Sandbox 正在建立中。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5025.10.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5025.10.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5025.10.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5025.10.png" alt="" border="0" /></a></p>
<p>建立完成後可以點擊該VM， 可以看到該VM的IP Address 及VM 。<br />在設定中點選端點 ，可以看到各個Hadoop 服務所使用的Port， 包含Hue 使用的port 8000， Ambari 使用的8080 port， 都可以在這邊看到。<br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5707.11.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5707.11.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5707.11.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5707.11.png" alt="" border="0" /></a></p>
<p>另外我們也透過 CloudXplorer 去Azure Storage 看所建立的VM。在所有資源找到建立的儲存體，點開後找到存取金鑰。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0574.28.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0574.28.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0574.28.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0574.28.png" alt="" border="0" /></a></p>
<p>在&nbsp;CloudXplorer 建立新的Account， Account 類別選擇&nbsp;&nbsp;Azure Blobs Account，並輸入儲存體存取金鑰。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7658.27.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7658.27.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7658.27.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7658.27.png" alt="" border="0" /></a></p>
<p>連線上Azure Blobs Storage 之後打開VHDS 容器 (Container)， 就可以看到剛剛建立VM 所用到的 VHD 檔。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1145.29.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1145.29.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1145.29.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1145.29.png" alt="" border="0" /></a></p>
<p>接下來打開PuTTY， 設定透過Port 22 連到剛剛建立好的Haddop 環境。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5226.12.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5226.12.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5226.12.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5226.12.png" alt="" border="0" /></a></p>
<p>開啟連線後，用先前設定的帳號及密碼登入。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6406.13.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6406.13.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6406.13.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6406.13.png" alt="" border="0" /></a></p>
<p><br />由於在這個版本的Hortonworks 並沒有內建Spark 服務， 因此我們需要手動進行Spark 的安裝。<br />接下來我們需要手動安裝 Spark。</p>
<p>安裝時需要用root 權限。首先先重設root 密碼。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0160.14.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0160.14.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0160.14.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0160.14.png" alt="" border="0" /></a></p>
<p>&nbsp;為了安全性，重設root 密碼時需要再提供一次目前使用者的密碼。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2766.15.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2766.15.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2766.15.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2766.15.png" alt="" border="0" /></a></p>
<p>設定完後改成使用 root 身分。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1537.16.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1537.16.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1537.16.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1537.16.png" alt="" border="0" /></a></p>
<p>先透過wget 取得有Spark 1.3.1 版本的 RPM repo。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1440.17.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1440.17.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1440.17.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1440.17.png" alt="" border="0" /></a></p>
<p>接下來用yum 安裝Spark 1.3.1 版Package。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0257.18.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0257.18.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0257.18.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0257.18.png" alt="" border="0" /></a></p>
<p>這部分安裝約需要五分鐘。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8345.19.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8345.19.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8345.19.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8345.19.png" alt="" border="0" /></a></p>
<p>&nbsp;接下來安裝 PySpark。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3426.21.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3426.21.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3426.21.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3426.21.png" alt="" border="0" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3225.22.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3225.22.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3225.22.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3225.22.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>接下來用HDP-Select 指令來指定 Spark Package，這樣整個Spark 環境已經架設完成， 可以開始使用Spark 服務。</p>
<p>先到spark 目錄， 並切換成身分成Spark 服務使用者。然後先試著執行Spark 計算Pi 值得範例。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1817.23.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1817.23.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1817.23.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1817.23.png" alt="" border="0" /></a></p>
<p>範例順利執行完， 也得到Pi 值。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8103.24.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8103.24.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8103.24.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8103.24.png" alt="" border="0" /></a></p>
<p>接下來我們到Hue 的介面上， 可以看到 Spark Pi 的工作順利執行完。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4705.25.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4705.25.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4705.25.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4705.25.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>在上一篇Spark 環境介紹中我們透過Spark 去計算湯姆歷險記中提到湯姆跟哈波的次數， 我們這次改以紅樓夢來計算裏頭提到林黛玉跟賈寶玉的次數。</p>
<p>首先下載紅樓夢電子書文字檔， 放到暫存資料夾中。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6567.30.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6567.30.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6567.30.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6567.30.png" alt="" border="0" /></a></p>
<p><br />然後將檔案放到HDFS中。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5282.31.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5282.31.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5282.31.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5282.31.png" alt="" border="0" /></a></p>
<p>再啟動Spark Scala介面。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3386.32.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3386.32.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3386.32.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3386.32.png" alt="" border="0" /></a></p>
<p>接下來用Scala 語言撰寫讀取紅樓夢文字檔，並分別計算提到"寶玉" 及"黛玉"的次數。</p>
<p><br />// 讀取紅樓夢文字檔 <br />val file = sc。textFile("/tmp/redhouse。txt")<br />print (file。count())</p>
<p>// 挑出內含"黛玉" 的句子<br />val DiUCount = file。filter(line =&gt; line。contains("黛玉"))</p>
<p>//挑出內含"寶玉" 的句子<br />val BauUCount = file。filter(line =&gt; line。contains("寶玉"))</p>
<p>// 計算黛玉 出現的句子數<br />DiUCount 。count()</p>
<p>// 計算寶玉出現的句子數<br />BauUCount 。count()</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2728.34.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2728.34.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2728.34.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2728.34.png" alt="" border="0" /></a></p>
<p>我們也可以在Hue的Job Browser 中看到完成的工作。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6445.35.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6445.35.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6445.35.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6445.35.png" alt="" border="0" /></a></p>
<p>另外在資料分析情境中通常會用到SQL 資料庫， 在這邊我們也建立一個MySQL 資料庫。<br />為了練習方便先選擇在VM 中安裝mySQL。</p>
<p>Sudo yum install MySQL</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3060.48.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3060.48.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3060.48.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3060.48.png" alt="" border="0" /></a></p>
<p>安裝完後我們可以下載mySQL 的範例資料庫 sakila。</p>
<p>&nbsp;</p>
<p>將sakila 範例資料庫匯入mySQL 。<br />&nbsp;mysql &lt; sakila-schema。sql<br />mysql &lt; sakila-data。sql</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2514.49.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2514.49.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2514.49.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2514.49.png" alt="" border="0" /></a>　</p>
<p>查詢一下sakila資料庫中的actor 資料表，確認資料成功匯入。　</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1777.50.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1777.50.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1777.50.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1777.50.png" alt="" border="0" /></a></p>
<p>除了在本機VM上直接建立MySQL 外，Azure 上也可以使用由ClearDB 提供的MySQL 資料庫服務。</p>
<p>在Azure Portal 的建立-&gt;資料+儲存體中 選擇建立由ClearDB 提供的MySQL 資料庫。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1614.36.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1614.36.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1614.36.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1614.36.png" alt="" border="0" /></a></p>
<p>MySQL 服務等級選免費的水星等級(可以視需要選擇其他須付費等級， 但需注意付費等級會從信用卡中扣款， 不能從試用帳號、 Azure Pass、MSDN 、BizSpark等計畫提供的免費Azure額度中扣)。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5751.37.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5751.37.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5751.37.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5751.37.png" alt="" border="0" /></a></p>
<p>&nbsp;輸入所要用的資料庫名稱 (免費的水星等級只能有一個資料庫)。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4380.38.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4380.38.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4380.38.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4380.38.png" alt="" border="0" /></a></p>
<p>選擇建立資料庫。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5810.39.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5810.39.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5810.39.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5810.39.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2248.40.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2248.40.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2248.40.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2248.40.png" alt="" border="0" /></a></p>
<p>Azure系統通知也會通知資料庫建立成功。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7416.41.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7416.41.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7416.41.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7416.41.png" alt="" border="0" /></a></p>
<p>如果要查看使用狀態， 點選管理資料庫功能 就會開啟Clear DB的監控及管理介面。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7750.43.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7750.43.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7750.43.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7750.43.png" alt="" border="0" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6835.44.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6835.44.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6835.44.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6835.44.png" alt="" border="0" /></a></p>
<p>點選設定-&gt; 屬性就可以看到可以資料庫的連線帳號密碼。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7120.45.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7120.45.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7120.45.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7120.45.png" alt="" border="0" /></a></p>
<p>我們可以嘗試連入資料庫．　</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6888.47.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6888.47.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6888.47.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6888.47.png" alt="" border="0" /></a></p>
<p>目前ClearDB在Azure 上提供的免費水星等級資料庫提供99.95%的SLA， 但只能有單一資料庫，其他付費等級就沒有這個限制。</p>
<p>到此我們透過Hortonworks的Hadoop VM ，再自行加上Spark及MySQL ，<span style="color: #333399;">已經在Azure 建立一個基於CentOS， 有Spark、 MySQL、 Hue、 Hive、 Sqoop、 Beeswax、 Pig 、 HDFS等相當完整的巨量資料操作及分析環境</span>。</p>
<p>如果是對於Hadoop 有興趣的入門者， Hortonworks 也提供包含"Apache Spark on HDP"、&nbsp; "Hello World"、 "Real World Examples" 等相當完整的Tutorial，&nbsp; 也可以在這個環境Tutorial 的練習。<br /><a href="http://hortonworks">http://hortonworks.com/products/hortonworks-sandbox/#tutorial_gallery</a></p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8130.51.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8130.51.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8130.51.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8130.51.png" alt="" border="0" /></a></p>
<p>本篇介紹如何在30分鐘內在Azure上透過Open Source 軟體快速建立一個可進行巨量資料處理的環境。Azure 上目前已經支援Hadoop 生態系中三家主要Hadoop 套裝環境發行商，提供相當便利的Hadoop 資料分析環境方式。而Azure 本身也提供命名為HDInsight的Hadoop 服務，同時也提供Storm、Hbase、Spark等叢集服務類型。使用者可以根據自己的需求，在Azure 上找到適合的部屬方式，快速的建立巨量資料操作與分析環境。</p>
<p>&nbsp;</p>
<p>&nbsp;[參考資料]</p>
<p><a href="http://hortonworks.com/blog/hortonworks-sandbox-azure">&nbsp;<span style="background: #f6f6f6;">Getting Started with Hortonworks Sandbox on Azure</span></a></p>
<p><a href="http://www.searchbi.com.cn/showcontent_89359.htm">&nbsp;Hadoop哪家强？Hortonworks、Cloudera、MapR案例集锦</a></p>
<p><a href="http://hortonworks.com/hadoop-tutorial/using-apache-spark-technical-preview-with-hdp-2-2">Apache Spark 1.3.1 : Technical Preview with HDP 2.2</a></p>
<p><a href="https://azure.microsoft.com/zh-tw/documentation/articles/hdinsight-apache-spark-zeppelin-notebook-jupyter-spark-sql">&nbsp;在 HDInsight 上佈建 Apache Spark 並使用 Spark SQL 執行互動式查詢</a></p>
<p><a href="http://dev.mysql.com/doc/sakila/en/">Sakila Sample Database</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Windows 10 UWA( UWP APP) 開發入門 (附範例)</title>
      <link>https://docs.microsoft.com/archive/blogs/hermanwu/windows-10-uwa-uwp-app</link>
      <pubDate>Mon, 03 Aug 2015 08:39:00 GMT</pubDate>
      <dc:creator><![CDATA[HermanWu]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/hermanwu/2015/08/03/windows-10-uwa-uwp-app/</guid>
      <description><![CDATA[本篇主要是介紹如何開發第一個Windows 10 UWP 的應用程式， 並整理目前的一些相關開發資源。本篇適合對開發Windows 10 App&nbsp;(UWA)...]]></description>
      <content:encoded><![CDATA[<p>本篇主要是介紹如何開發第一個Windows 10 UWP 的應用程式， 並整理目前的一些相關開發資源。本篇適合對開發Windows 10 App&nbsp;(UWA) 有興趣的新手及iOS、Android 開發者。</p>
<p>如果你是Windows App 開發的新手 ( 沒有Windows 8/8.1市集App 或 Windows Phone&nbsp; App 的開發經驗) 建議可以先到<a href="https://dev.windows.com/zh-tw/"> Windows 開發人員中心</a> 逛逛， 了解一下上面提供的資訊。&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4760.Image%2086.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4760.Image-86.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4760.Image%2086.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4760.Image-86.jpg" alt="" border="0" /></a></p>
<p><span style="font-size: small;">在Windows 開發人員中心上面有蠻多的開發資源, 包括: </span></p>
<p style="padding-left: 30px;"><span style="font-size: small;">- <a href="https://dev.windows.com/zh-tw/getstarted">Windows 應用程式入門</a><br />- <a href="https://dev.windows.com/zh-tw/develop">開發 Universal Windows app</a><br />- <a href="https://dev.windows.com/zh-tw/design">設計 UWP 應用程式</a><br />- <a href="https://dev.windows.com/zh-tw/publish">發佈 Windows 應用程式</a></span></p>
<p>都值得看一看。</p>
<p><strong>[主要用語 UWP、 UWA、 Bridges]<br /></strong><br /><strong><span style="color: #333399;">UWP ( Universal Windows Platform )</span></strong> : 又稱作 "通用Windows 平台" 。 由於Windows 10 的系統架構設計是可以在<strong>多種裝置</strong> ( 平板、手機、桌機、筆電、Xbox One、HoloLens、Surface Hub、Raspberry Pi 2.. )上運行， 為了要方便開發者在各型裝置上設計應用程式， 不用面對各式不同的API介面、呼叫方式以及App 生命週期；同時開發好的APP也可以輕易地在不同裝置上執行，因此微軟定義了<strong>UWP（通用Windows 平台</strong>）。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2818.Win10CrossP.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2818.Win10CrossP.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2818.Win10CrossP.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2818.Win10CrossP.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>開發者無論是在那一種Windows 10 裝置上開發， 都只要面對UWP （所以才叫通用），<strong>同時編譯出來的程式也只有需要一種編譯檔 (Binary) 即可</strong>。&nbsp; 每個Windows 10 裝置上都有UWP， 而UWP 也會負責讓程式人員開發好的APP 順暢地在各裝置上執行，大大減少開發成本以及開發人員負擔。&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6758.Win10CrossP2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6758.Win10CrossP2.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6758.Win10CrossP2.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6758.Win10CrossP2.png" alt="" border="0" /></a></p>
<p>也因為程式是在UWP 架構上開發， 所以開發人員在開發時需要在專案的設定檔 <strong>package.appxmanifest</strong>中指定所支援的UWP 版本。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0755.Project%20TargetDev.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0755.Project-TargetDev.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0755.Project%20TargetDev.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0755.Project-TargetDev.png" alt="" border="0" /></a></p>
<p>另外果遇到在特定類型裝置才能夠使用的API， 則要是<strong>透過 Extension</strong> 的方式來擴充。&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1258.Image%2087.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1258.Image-87.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1258.Image%2087.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1258.Image-87.jpg" alt="" border="0" /></a></p>
<p><span style="color: #333399; background-color: #ffffff;"><strong>UWA ( Universal Windows App)&nbsp;</strong>: </span>是指在UWP 架構上執行的原生 App 程式 。也有人稱作<strong>UWP App</strong>。&nbsp;&nbsp;</p>
<p>目前支援四種開發語言， 分別是<strong> Visual C#、Visual Basic、Visual C++ 以及JavaScript</strong>。</p>
<table style="width: 269px; height: 68px;">
<tbody>
<tr>
<td><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2161.04.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2161.04.png"><img style="width: 155px; height: 101px;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2161.04.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/250x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2161.04.png" alt="" width="199" height="125" border="0" /></a></td>
</tr>
<tr>
<td>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6242.05.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6242.05.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6242.05.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/200x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6242.05.png" alt="" width="158" height="83" border="0" /></a></td>
</tr>
<tr>
<td>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8715.06.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8715.06.png"><img style="width: 158px; height: 84px;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8715.06.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/200x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8715.06.png" alt="" width="158" height="85" border="0" /></a></td>
</tr>
<tr>
<td>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3007.07.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3007.07.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3007.07.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/200x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3007.07.png" alt="" width="151" height="80" border="0" /></a></td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><strong><span style="color: #333399;">Bridges &nbsp;( UWP 的造橋計畫) </span></strong><span style="color: #333399;">&nbsp;: </span>除了原生的UWA 外， Windows 10 也透過Bridges 計劃裡的Project Westminster (西敏專案)， Project Centennial(&nbsp; 百年專案)， Project Astoria ( 阿斯托利亞專案)， Project IslandWood (島木專案)， 讓 <strong>無論是熟悉JavaScript/CSS的前端網頁開發人員、熟悉傳統Windows 應用程式的 。Net 或C++ 開發人員、熟悉&nbsp; Android 平台的Java開發人員、或者是熟悉iOS 的Objective C 開發人員，都可以藉由這四大專案將他們開發的軟體快速地帶到通用Windows 平台上</strong>&nbsp;。不過API 及 跨Windows&nbsp;裝置支援最完整的還是原生的UWA 程式。&nbsp;Project &nbsp;Westminster 已經於2015年七月發表， 可以參考這篇 : <a href="http://blogs.msdn.com/b/hermanwu/archive/2015/07/14/windows-10-w-project-westminster.aspx">Windows 10 造橋計畫， 第一橋 W專案 (Project Westminster )。</a></p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3583.08.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3583.08.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3583.08.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3583.08.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>介紹了一些基本概念， 接下來說明如何開發第 一個UWP App。</p>
<p><strong>[開發工具及環境]</strong></p>
<p>UWA&nbsp; 的開發會需要 : <br />&nbsp;- Windows 10 作業系統 (所有Windows Vista,&nbsp;Windows 7, Windows 8/8.1 使用者都可以免費升級) <br />&nbsp;- Visual Studio 2015&nbsp; ( 個人或年營收小於3000萬台幣的小型團隊可以使用免費版的<a href="https://www.visualstudio.com/downloads/download-visual-studio-vs">Visual Studio Community 版</a> )&nbsp;及 Windows 10 SDK (安裝方式已內建在Visual Studio 2015 中) <br /><br />&nbsp;<br />建立開發環境的相關資源都可以在這裡(<a href="https://dev">https://dev.windows.com/zh-tw/downloads</a>)找到。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4718.09.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4718.09.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4718.09.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4718.09.png" alt="" border="0" /></a></p>
<p>&nbsp;<br />準備好環境後， 接下來開啟 Visual Studio ， 選擇建立新的專案。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5415.10.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5415.10.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5415.10.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5415.10.png" alt="" border="0" /></a></p>
<p>接下來選擇 Windows -&gt; Windows Universal -&gt; Blank App ( Windows Universal ) 專案範本 建立專案。&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6685.11.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6685.11.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6685.11.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6685.11.png" alt="" border="0" /></a></p>
<p>接下來我們準備要App 要使用的資料源， 這邊我們用行政院環境保護署提供的紫外線即時監測資料 每小時UV 指數當作資料源。<br /><a href="http://data">http://data.gov.tw/node/6076</a></p>
<p>紫外線即時監測資料 的JSON資料格式如下:</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8507.12.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8507.12.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8507.12.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/250x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8507.12.png" alt="" width="233" height="155" border="0" /></a></p>
<p>我們先為上面JSON資料 建立Data Object， 以方便後續讀取及使用。 <br />在專案中建立一個Models 資料夾， 然後建立 名為TaiwanCityUV 的Class</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4274.13.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4274.13.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4274.13.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4274.13.png" alt="" border="0" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5305.14.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5305.14.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5305.14.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5305.14.png" alt="" border="0" /></a></p>
<p>&nbsp;接著根據Json 的格式將TaiwanCity Data Object 撰寫如下 :&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4431.15.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4431.15.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4431.15.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4431.15.png" alt="" width="299" height="476" border="0" /></a></p>
<p>這邊比較特別的是在 "PublishTime" 還有 "UVI" &nbsp;這兩個properties 加上NotifyPropertyChanged Event， 主要是這兩個欄位是比較容易更新的欄位，我們加上這兩個屬性可以確保一旦我們更新資料時，在ＵＩ介面上的值也會跟著更新。<br />（有關NotifyPropertyChanged 可以參考<a href="https://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(v=vs.110).aspx">INotifyPropertyChanged Interface</a>)</p>
<p>接下來我們要讀取網路上的紫外線即時監測公開資料 : <br />先建立一個Services 資料夾，然後再建立TaiwanUVOpenDataService Class。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1385.16.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1385.16.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1385.16.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1385.16.png" alt="" border="0" /></a></p>
<p>在這邊我們利用 HttpClient 物件取得JSON內容， 然後透過 DataContractJsonSerializer 的 ReadObject 物件去 DeSerialize (反序列化) 而將所有Json 格式的紫外線即時資料轉成 放在List 中DataObject TaiwanCityUV， 以方便我們後續作資料使用及顯示。</p>
<p>在使用HttpClient 物件時， 建議用Windows.Web.Http 命名空間下的 HttpClient， 不要用 System.Net.Http 的命名空間。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2084.17.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2084.17.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2084.17.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2084.17.png" alt="" width="545" height="248" border="0" /></a></p>
<p>這邊比較特別的是<span style="text-decoration: underline;">我們希望後續可以很容易追蹤 App 的Crash 狀況 以及使用狀況</span>。 這部分微軟的雲端服務 Azure 提供了<span style="color: #333399;"><strong>Application Insight 功能</strong></span>，<span style="color: #333399;"> 它可以很方便地<strong>提供App使用狀況分析及Crash 分析</strong>， 而且支援UWP、iOS、Android、Web (PHP、Python、Ruby、 Node.js、WordPress..etc) 及傳統Windows Desktop 程式。</span>&nbsp;同時它也提供每個月 5百萬個Data Points 免費的額度，&nbsp;對大部分中小型 App 應該相當夠用，也適合本範例使用。</p>
<p>為了追蹤我們連到網路取得資料時是否有異常， 我們直接宣告 Application Insight SDK 中的 TelemetryClient ， 並且呼叫TrackException method 來將 遇到的Exception 送到Application Insight 服務做分析。 只要兩行程式碼就完成。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0020.18.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0020.18.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0020.18.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/400x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0020.18.png" alt="" border="0" /></a></p>
<p>接下來開始開發 App 前端介面的部分。 <br />在Windows 10 Univeral App 的設計上有幾個有別於過去Windows 8 設計的地方， 特別是透過 SplitView&nbsp; 控制項做出漢堡圖的效果已經被大量應用在官方的 App 上。&nbsp;</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5226.19.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5226.19.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5226.19.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5226.19.png" alt="" border="0" /></a></p>
<p>另外幾個重要的新控制項功能包括 : <br />&nbsp;- <a href="https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.adaptivetrigger.aspx">AdaptiveTrigger</a><br />&nbsp;- <a href="https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.visualstate.setters.aspx">VisualState.Setters</a><br />&nbsp;- <a href="https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.relativepanel.aspx">RelativePanel</a></p>
<p><br />&nbsp;<br />如一開頭所提的， UWA 很重要的一個特性就是能橫跨多種不同的裝置，由於不同的裝置的螢幕大小差異很大，以上幾個新的控制項功能可以很快的協助開發者針對不同的螢幕尺寸動態調整UI 上的配置。</p>
<p>以下我們就透過這些新的控制項功能做出能同時適應大尺寸螢幕(eg。 PC， 平板，Surface Pro) 及小尺寸螢幕(eg。 手機）的UI 介面。</p>
<p>首先先做主版型，先打開 MainPage.xaml， 在 Grid 下面加入 SplitView 控制項， 用來做出漢堡圖功能。&nbsp; 同時把Grid 命名為 rootGrid。&nbsp; 在SplitView&nbsp;</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7870.20.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7870.20.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7870.20.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7870.20.png" alt="" border="0" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6471.21.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6471.21.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6471.21.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6471.21.png" alt="" border="0" /></a></p>
<p>在漢堡圖的Button 上新增&nbsp; Click Event : clickHamburgerBtn</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6428.22.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6428.22.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6428.22.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6428.22.png" alt="" border="0" /></a></p>
<p>在 clickHamburgerBtn Method 中加入讓 漢堡圖選單開關的程式碼。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5556.23.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5556.23.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5556.23.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5556.23.png" alt="" border="0" /></a></p>
<p>為了建立選單內容， 我們在Model 資料夾下建立MenuItem&nbsp; Data Object。&nbsp;</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7658.24.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7658.24.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7658.24.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7658.24.png" alt="" border="0" /></a></p>
<p>接下來要處理MainPage 頁面相關的DataBinding。 我們在專案下面建立一個ViewModels 資料夾， 再建立一個 MainViewModel Class。&nbsp; 這個Class 的內容如下:</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2664.25.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2664.25.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2664.25.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2664.25.png" alt="" border="0" /></a></p>
<p>由於這個Class 會被用來做UI 的Data Binding， 因此我們繼承了INotifyPropertyChanged Interface 以確保資料的更新可以立即反映在UI 上。</p>
<p><br />同時我們也加入了 MenuItems&nbsp; 屬性作為UI 上漢堡圖選單在做DataBinding 時的資料源。 針對MenuItems 的預設值， 我們也加入這次會用到的 三個功能選項， 分別是 " 地圖瀏覽模式"， "列表瀏覽模式" 以及"關於紫外線指數" 。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4130.26.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4130.26.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4130.26.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4130.26.png" alt="" border="0" /></a></p>
<p>準備好 MainPage 所需要的 ViewModel "MainViewModel" 後，&nbsp; 在 MainPage.cs 的程式碼中 Override <strong>OnNavigatedTo</strong> Methond， 並在其中 Create MainViewModel 物件， 設定為 roodGrid的 DataContext。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2514.27.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2514.27.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2514.27.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2514.27.png" alt="" border="0" /></a></p>
<p>這時候按下 F5 執行， 一個簡單的漢堡圖功能選單就已經完成。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7624.28.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7624.28.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7624.28.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7624.28.png" alt="" border="0" /></a></p>
<p>接下來我們透過 AdaptiveTrigger、 VisualState.Setters， 改變SplitView 的顯示模式，&nbsp; 讓這個UI 可以在不同大小的螢幕上做變化。 <br />在MainPage.xaml 中， 加入 "WideState"、"MiddleStee" 及 "NarrowState" 三種ViewState。 <br />這三個ViewState 的StateTriggers 都用 AdaptiveTrigger， 同時設定 MiniWindowWidth 分別為 1000、600 及 0</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2604.29.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2604.29.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2604.29.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2604.29.png" alt="" border="0" /></a></p>
<p>然後在ViewState.Setters 中設定 SplitView 的 DisplayMode、 IsPaneOpen 及 PaneBackground 屬性。 這時在按F5 執行App， 然後拖拉App 的寬度，&nbsp; 就可以看到 不同的顯示狀態。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7345.30.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7345.30.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7345.30.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7345.30.png" alt="" border="0" /></a></p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8284.31.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8284.31.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8284.31.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8284.31.png" alt="" border="0" /></a></p>
<p>接下來要實作各個選單功能的功能介面。 <br />先在ViewModels 目錄下建立 UVMapViewModel Class ， 加入會用到的&nbsp; TaiwanUVData 屬性及 LoadData Method。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7271.32.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7271.32.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7271.32.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7271.32.png" alt="" border="0" /></a></p>
<p>接下來在專案下來建立一個Views 資料夾， 分別新增UVMapView.xaml、UVDetailView、AboutView&nbsp; 三個 空白的XAML 頁面。</p>
<p>首先 在UVMapView.xaml&nbsp; 上新增 Title 跟 Map控制項。因為我們希望這頁的標題顯示一樣可以根據 螢幕大小來做不同版型變化， 因此 將 顯示 Title 的 TextBlock 控制項 titleText 及 subTitleText 放在 RelativePanel 中 ， 同時設定 subTitleText 的位置在titleText的上方&nbsp; (RelativePanel.Above="titleText")</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0815.33.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0815.33.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0815.33.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0815.33.png" alt="" border="0" /></a></p>
<p>&nbsp;<br />要使用MapControl 前先要取得 微軟Bing Map Services 的Token， 取得方式可以到 Bing Map 開發者中心 <a href="http://www">http://www.bing.com/dev/</a>&nbsp;</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4571.34.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4571.34.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4571.34.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4571.34.png" alt="" border="0" /></a></p>
<p>點選Maps， 或者直接到 <a href="https://www">https://www.bingmapsportal.com/</a></p>
<p>&nbsp;</p>
<p>登入後在 My Account 功能底下選擇 Create or View Keys，</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6574.36.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6574.36.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6574.36.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6574.36.png" alt="" border="0" /></a></p>
<p>再選擇Create a New Key。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1526.37.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1526.37.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1526.37.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1526.37.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>最後填入你的App 名稱， Application Type 後就可以取得Bing Map 的授權 Key 值。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2604.38.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2604.38.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2604.38.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/400x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2604.38.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>目前只要是給一般非企業使用者的免費UWP ， 都可以<strong>每天享有最多 50000 次免費的 地圖資料Access</strong>。 詳細的使用規定可以參考 <a href="http://www.microsoft.com/maps/Licensing/licensing.aspx">http://www.microsoft.com/maps/Licensing/licensing.aspx</a>&nbsp; 。<br />再來因為紫外線即時監測資料所取得的經緯度是以 TWD97 的度分秒格式顯示， 而Bing Map 使用的是 WGS84 。 TWD97 跟WGS84 的誤差不大， 約數十公分， 因此我們可以直接使用， 只要把度分秒格式轉為 對應數字即可。 <br />為了方面我們在Utils 資料夾下在增加一個GeoCoordinateTransformer Class， 並撰寫度分秒轉換的method。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0624.39.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0624.39.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0624.39.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0624.39.png" alt="" border="0" /></a></p>
<p>這個頁面我們希望能將取得的資料顯示在地圖上， 因此加入 AddUVDataPinPoint 及 AddPushpin 兩個Method</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7870.40.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7870.40.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7870.40.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7870.40.png" alt="" border="0" /></a></p>
<p>另外我們希望能追蹤使用者看了這個頁面看了多久， 因此我們建立一個 Utils 資料夾， 在新增一個 BasicInfo 的物件協助取得 使用者及裝置的ID。 BasicInfo.cs 的內容如下:</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3414.41.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3414.41.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3414.41.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3414.41.png" alt="" border="0" /></a></p>
<p>這邊要注意的是 由於取得 使用者相關資料 跟 裝置ID 是透過 <strong>Windows.System.Profile</strong> 命名空間下的 HardewareIndentification 及 <strong>Windows.System.UserProfile</strong> 命名空間下的 UserInfomation 兩個Class。 而這兩個命名空間僅支援 Desktop 及 Mobile 版本的裝置 (如IoT 裝置就不能使用這兩個功能) 。 如一開始所提的，&nbsp; 這部分API 需要透過 Extension 來使用， 因此我們必須在專案中加入 Windows Desktop Extensions for the UWP 及 Windows Mobile Extensions for the UWP。&nbsp;</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4403.42.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4403.42.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4403.42.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4403.42.png" alt="" border="0" /></a></p>
<p>並且在呼叫要透過&nbsp; <strong>Windows.Foundation.Metadata.ApiInformation.IsTypePresent</strong> 先檢查該API 是否存在。</p>
<p>最後在這頁我們加上預設地圖顯示的經緯度， 地圖顯示精細度 (ZoomLevel)。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0714.43.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0714.43.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0714.43.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0714.43.png" alt="" border="0" /></a></p>
<p>在追蹤使用者瀏覽該頁面多久的部分， 我們透過Application Insight SDK 中的&nbsp; TelemetryClient、PageViewTelemetry 來記錄使用者瀏覽該頁面瀏覽多久。</p>
<p>在開發過程中我們加入了 <span style="color: #0000ff;">TelemetryConfiguration.Active.TelemetryChannel.DeveloperMode = true;</span>&nbsp;&nbsp; 這樣可以讓Azure Portal 較快顯示所取得的App 分析資料。</p>
<p>接下來為了讓漢堡圖選單點選後可以瀏覽到指定頁面， 編輯 MainViewModel.cs 程式。 <br />修改 InitialMenuItems、InitialMenuItems&nbsp; method 並加入 Navigate method</p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8712.44.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8712.44.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8712.44.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8712.44.png" alt="" border="0" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3733.45.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3733.45.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3733.45.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3733.45.png" alt="" border="0" /></a></p>
<p>這時在按 F5 執行， 就可以看到 我們已經成功讀取地圖， 並將全台紫外線指數顯示在地圖上了。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0511.46.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0511.46.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0511.46.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0511.46.png" alt="" border="0" /></a></p>
<p>接下來一樣我們透過 VisualState 及 VisualState.Setters 設定不同顯示寬度大小時 版面的變化</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0572.47.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0572.47.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0572.47.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0572.47.png" alt="" border="0" /></a></p>
<p>再次按下F5， 這時 "全台紫外線指數"&nbsp;&nbsp;的標題文字格式已經可以隨著版面大小變化。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8037.48.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8037.48.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8037.48.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8037.48.png" alt="" border="0" /></a></p>
<p>接下來開發列表模式的頁面。 <br />首先在 ViewModels 資料夾下建立 UVDetailViewModel Class， 其內容如下:</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6765.49.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6765.49.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6765.49.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6765.49.png" alt="" border="0" /></a></p>
<p>然後編輯先前建立好的 UVDetailView.xaml</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2604.50.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2604.50.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2604.50.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2604.50.png" alt="" border="0" /></a></p>
<p>在修改 UVDetailView.xaml.cs 如下 :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4747.51.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4747.51.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4747.51.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4747.51.png" alt="" border="0" /></a></p>
<p>在這頁我們一樣透過<strong>Application Insight SDK</strong> 來追蹤使用者瀏覽這個頁面的時間跟次數。</p>
<p>在按 F5 ， 就可以看到執行成果。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4353.52.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4353.52.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4353.52.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4353.52.png" alt="" border="0" /></a></p>
<p>接下來我們修改 AboutView.xaml， 透過WebView 讓此頁顯示Wiki上有關紫外線指數的介紹。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8512.53.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8512.53.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8512.53.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8512.53.png" alt="" border="0" /></a></p>
<p>從Windows Phone 7 時代開始， 一直到Windows/Windows Phone 8.1 及現在的 Windows 10， 動態磚的顯示方式一直是受使用者喜愛也是Windows Store App 很大的一個特色。 <br />設定App 的動態磚有兩種常用的方式， 一種是透過Background Task， 在固定時間週期 (eg. 每小時or&nbsp; 每天) 去更新動態磚， 另一種方式是在App 打開時順邊也更新動態磚。 <br />在這邊為了簡化程式， 我們先用第二種方式。</p>
<p>在MainPage.xaml.cs 程式中加入 UpdateTile method， 並且在程式一開始就更新動態磚。 <br />UWP 的動態磚顯示方是有多種格式， 這裡我們用的是 TileSquare150x150Block。 <br />更多的格式可以在<a href="https://msdn.microsoft.com/zh-tw/library/windows/apps/hh761491.aspx">這邊找到</a>。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7384.54.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7384.54.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7384.54.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7384.54.png" alt="" border="0" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3644.55.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3644.55.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3644.55.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3644.55.png" alt="" border="0" /></a></p>
<p>然後按F5 執行後， 把App 釘選到開始畫面後， 就可以看到動態磚的顯示。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7510.56.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7510.56.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7510.56.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/300x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7510.56.png" alt="" border="0" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8637.57.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8637.57.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8637.57.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/300x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8637.57.png" alt="" border="0" /></a></p>
<p>最後為了把App 使用狀況透過Application Insight 收集， 要設定一下 Application Insights。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6648.58.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6648.58.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6648.58.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6648.58.png" alt="" border="0" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1817.59.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1817.59.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1817.59.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1817.59.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>這樣日後隨時都可以很方便的打開Applicatoin Insight 服務， 查看App 使用的狀況或是 Crash 的狀況。</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2465.60.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2465.60.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2465.60.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2465.60.png" alt="" border="0" /></a></p>
<p>以下是一些Application Insight 上的App 使用狀態分析介面 :</p>
<p><strong>Applicatoin Insight App 分析報表 - 應用程式概觀</strong></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6886.61.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6886.61.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6886.61.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6886.61.png" alt="" border="0" /></a></p>
<p><strong>Applicatoin Insight App 分析報表 - 自訂分析圖表</strong></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7853.62.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7853.62.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7853.62.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7853.62.png" alt="" border="0" /></a></p>
<p><strong>Applicatoin Insight App 分析報表 - 使用者停留頁面分析</strong></p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0272.63.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0272.63.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0272.63.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0272.63.png" alt="" border="0" /></a></p>
<p>如先前所說明的， 目前<strong>Application Insight 提供每個月5百萬免費的資料點</strong>， 對於一般中小型的App 應該夠用。 <br />相關定價資料可以參考 <a href="http://azure">http://azure.microsoft.com/zh-tw/pricing/details/application-insights/</a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2678.64.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2678.64.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2678.64.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2678.64.png" alt="" border="0" /></a></p>
<p>以上我們透過一個範例很快介紹UWA 的幾個主要核心概念，包括漢堡圖選單、可適性UI、App 使用狀態追蹤及動態磚。</p>
<p>為了精簡範例，我們捨棄使用一些熱門的第三方元件如 <a href="http://www.newtonsoft.com/json'">JSON.Net</a>, <a href="http://mvvmlight.codeplex.com/">MVVM Light</a> 等，也避免太多繼承架構。如在實際的專案中，仍建議評估使用一些熱門的第三方資料處理及程式框架工具。</p>
<p>&nbsp;</p>
<p># 9/22 Update: 本範例專案發布在GitHub <a href="https://github.com/Herman-Wu/TaiwanUV">https://github.com/Herman-Wu/TaiwanUV</a></p>
<p>&nbsp;</p>
<p>[其他學習資源]</p>
<p><a href="https://channel9.msdn.com/Events/Build/2015?sort=sequential&amp;direction=desc&amp;term=&amp;tag=app-model&amp;tag=uwp&amp;tag=xaml&amp;tag=xamlux">&nbsp;//Build/ 2015 大會 UWP App 相關課程</a></p>
<p><a href="http://www.microsoftvirtualacademy.com/training-courses/best-of-build-and-windows-10">A Developer's Guide to Windows 10</a></p>
<p><a href="http://www.microsoftvirtualacademy.com/">&nbsp;Microsoft Virtual Academy</a></p>
<p><a href="https://social.msdn.microsoft.com/Forums/zh-tw/home?category=windowsappszhtw&amp;filter=alltypes&amp;sort=lastpostdesc">Windows 市集應用程式(Windows Store app) 討論區</a></p>
<p>&nbsp;</p>
<p>[參考資料]</p>
<p><a href="https://msdn.microsoft.com/en-us/library/dn894631.aspx">Guide to Universal Windows Platform (UWP) apps</a></p>
<p><a href="http://blog.jerrynixon.com/2015/04/implementing-hamburger-button-with.html">&nbsp;Implementing an Awesome Hamburger Button with XAML&rsquo;s new SplitView control in Windows 10</a></p>
<p>&nbsp;<a title="Permanent Link to Building adaptive layout in Windows 10 with RelativePanel and AdaptiveTrigger" href="http://blog.galasoft.ch/posts/2015/04/building-adaptive-layout-in-windows-10-with-relativepanel-and-adaptivetrigger/" rel="bookmark">Building adaptive layout in Windows 10 with RelativePanel and AdaptiveTrigger</a></p>
<p><a href="http://www.10thmagnitude.com/tech-blog/microsoft-application-insights-top-six-features-to-get-a-360-view-of-your-a">&nbsp;Microsoft Application Insights: Top Six Features to Get a 360⁰ View of Your App</a></p>
<p><a href="http://www.techgig.com/skill/visualbasic/blog/Application-Insights-Exception-Telemetry/968662">Application Insights: Exception Telemetry</a></p>
<p><a href="http://www.kunal-chowdhury.com/2015/03/live-tile-in-universal-apps.html">How to update Live Tile in Universal Windows apps?</a></p>
<p><a href="http://modernicons.io/segoe-mdl2/cheatsheet/">Segoe <abbr title="Microsoft Design Language 2.0">MDL2</abbr> Assets - Cheatsheet</a></p>
<p><a href="http://blogs.msdn.com/b/mengtsai/archive/2015/04/08/windows-10-extension-sdk.aspx">[Windows 10] Extension SDK: 讓同一隻應用程式能在不同裝置上執行的秘密</a></p>
<p><span><a href="https://azure.microsoft.com/zh-tw/documentation/articles/app-insights-detect-triage-diagnose/">使用 Application Insights 刪除、分級和診斷</a></span></p>
<p><span><a id="viewpost_ascx_TitleUrl" href="http://www.dotblogs.com.tw/pou/archive/2015/07/10/151817.aspx">學習 Application Insights 協助記錄 Apps 的相關動作</a></span></p>
<p>&nbsp;</p>
<p><span>&nbsp;</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>　<br /><br /></p>]]></content:encoded>
    </item>
    <item>
      <title>Windows 10 造橋計畫, 第一橋 W專案 (Project Westminster )</title>
      <link>https://docs.microsoft.com/archive/blogs/hermanwu/windows-10-w-project-westminster</link>
      <pubDate>Mon, 13 Jul 2015 23:44:00 GMT</pubDate>
      <dc:creator><![CDATA[HermanWu]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/hermanwu/2015/07/13/windows-10-w-project-westminster/</guid>
      <description><![CDATA[在2015 年4月微軟年度的技術大會 //Build 上，最受到App 開發者矚目的其中一項宣布，應該就是從通用Windows 平台 (Uinversal Windows...]]></description>
      <content:encoded><![CDATA[<div>
<div>在2015 年4月微軟年度的技術大會 //Build 上，最受到App 開發者矚目的其中一項宣布，應該就是從<span style="color: #000000;"><strong>通用Windows 平台</strong></span> (Uinversal Windows Plateform，簡稱UWP) 延伸出來的<span style="color: #333399;"><strong>造橋 (Bridges) 計畫</strong></span>。</div>
<div>&nbsp;</div>
<div>透過造橋計畫裡頭的 <span style="color: #000000;"><strong>W專案</strong></span> ( 或稱<span style="text-decoration: underline;">西敏專案</span>，Project Westiminster)、<span style="color: #000000;"><strong>C 專案</strong></span>( 或稱 <span style="text-decoration: underline;">百年專案</span>，Project Centennial)、<span style="color: #000000;"><strong>A 專案</strong></span> ( 或稱 <span style="text-decoration: underline;">阿斯托利亞專案</span>，Project Astoria)、<span style="color: #000000;"><strong> I專案</strong></span> (或稱 <span style="text-decoration: underline;">島木專案</span>，Project IslandWood )，無論是熟悉JavaScript/CSS的<strong>前端網頁開發人員、</strong>熟悉傳統Windows 應用程式的<strong> .Net 或C++ 開發人員、</strong>熟悉&nbsp; Android 平台的<strong>Java開發人員、</strong>或者是熟悉iOS 的<strong>Objective C 開發人員</strong>，都可以藉由這四大專案將他們開發的軟體快速地帶到通用Windows 平台上。&nbsp;</div>
<div>&nbsp;</div>
<div>雖然要<span style="text-decoration: underline;"><strong>充分發揮Windows 10 平台功能與特性的最佳選擇仍是開發原生UWP 專案</strong></span>，但是對於許多已經在其他系統研發好產品的軟體公司來說 ，Bridges 仍是快速在Windows 10 上產出App，接觸到十多億Windows 裝置使用者的快捷通道。</div>
</div>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3058.Image%2013.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3058.Image-13.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3058.Image%2013.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3058.Image-13.jpg" alt="" border="0" /></a></div>
<div>
<div><br />目前造橋計畫裡頭的各個專案都預計在今年(2015)下半年陸續推出，而<strong>這個月率先推出的是給<span style="text-decoration: underline;">前端開發人員</span></strong>，協助快速將網站變成Windows 10 App 的<strong>W (西敏)專案 ( Project Westiminster</strong>)。&nbsp; 由於現代網站通常已經採用 Responsive Web Design ( 響應式網頁設計) ，可以同時支援大螢幕(PC、筆電、平板瀏覽模式 ) ，加上HTML 5 規範裡也有包含 Offline Storage、Index DB&nbsp; 等離線資料處理技術，現代網站能達到的功能已經跟App 越來越接近。 <span style="text-decoration: underline;">W專案就是讓網頁開發者可</span>以<span style="color: #993300; font-size: medium;">極快速地</span><span style="text-decoration: underline;">將網站變成一個App 發佈到Windows 市集</span>，並且充分運用Windows 10 平台的系統功能。</div>
<div>&nbsp;</div>
<div>&nbsp;簡單的說 Windows 10&nbsp; 造橋計畫的W 專案提供以下幾個功能 :</div>
<ul>
<li>改善Windows 8.X 時代 HTML5/JavaScript 程式 僅能存放在本地端，放在Server Side 程式一定得用Web View瀏覽的限制，也就是說所有程式都可以放在伺服器端(Server Side)。 既然網頁程式本來就是放在網站伺服器上，所以幾乎是<span style="color: #333399; text-decoration: underline;">大部分網頁馬上可以在<span style="font-size: medium;"><strong><span style="text-decoration: underline;">不更動</span></strong></span>任何程式碼的狀況下變成Windows 10 App</span> 。 除外的就是有用到Flash、ActiveX 之類嵌入式元件的網頁。</li>
<li><span style="text-decoration: underline;"><span style="color: #333399; text-decoration: underline;">提供存取Windows 10 API 的功能</span></span>，包含 整合 Cortana 語音指令，存取聯絡人，行事曆，整合Single-SingOn (透過Web Authentication Broker) ，傳送Notification與更新動態磚。&nbsp; 雖然是在Server Side 的HTML5/JacaScript 程式，藉由W 專案現在都可以做到跟原生App 一樣呼叫Windows 10 的API。</li>
<li><span style="text-decoration: underline;"><span style="color: #333399; text-decoration: underline;">支援 W3C&nbsp; Manifest for a web application</span></span>，這是一個跨平台的Web App 描述標準，透過這個標準可以產生Windows、 iOS、Android、Chrome&nbsp; 的Hosted Web App。</li>
<li>透過<span style="text-decoration: underline;"><span style="color: #333399; text-decoration: underline;"> Application Content URI Rules (ACURs)</span></span> 定義Web App 的Windows 10 API 存取權限</li>
</ul>
<div>對於一個網站來說， 把網站變成Windows 10 App 上架到Windows 市集上最大的好處是只要使用者下載並安裝了這個App，日後就可以很方便<strong>推送通知</strong>給用戶，也可以透過動態磚更新以比較不干擾用戶的方式<strong>吸引使用者</strong>回來瀏覽網站。 或者是網站上的任何活動，也可以透過呼叫Windows 上的聯絡人清單以及行事曆 API，很方便地將活動註記在<strong>用戶行事曆</strong>上或是讓用戶<strong>邀請更多朋友</strong>參加。 而<span style="color: #333399; font-size: medium;">這一切只要幾行<span style="text-decoration: underline;">xml 宣告</span></span>，<span style="color: #333399;">並在網站上加入一些<span style="text-decoration: underline;">呼叫Windows API 的JavaScript</span></span>。</div>
<div>接下來我們示範一次如何將網站建置成一個Windows 10 App，並且呼叫Windows 10的API 進行操作。</div>
<div>&nbsp;</div>
<div><strong></strong>&nbsp;</div>
<div><strong>[所需環境]</strong>&nbsp;</div>
<ul>
<li>最新版 <a href="https://www.visualstudio.com/zh-tw">Visual Studio</a> ( 本文使用的是Visual Studio 2015 RC) 或是任何你習慣上手的網站開發工具 ( 只要能方便編輯HTML 跟JavaScript即可)</li>
<li>安裝好最新版Azure SDK for Visual Studio 或是<span style="text-decoration: underline;">任何你習慣的網站部署工具</span>。</li>
</ul>
<div>首先先準備一個網站 （<span style="color: #333399;">如果你已經有網站，可以跳過這一步，直接到<span style="text-decoration: underline;">準備Windows 10 App 部分</span></span>）。&nbsp; 這邊我們使用的是<span style="color: #000080;"><strong><a href="https://azure.microsoft.com/zh-tw/pricing/details/app-service/">免費版的Azure App Services</a></strong></span>&nbsp;(適合運用於Web、行動或 API 應用程式) 。</div>
<div>&nbsp;</div>
<div>在最新版的 Visual Studio 中 ( 目前是 Visual Studio 2015 RC，個人或年營收小於3000萬台幣的小型團隊可以使用<span style="text-decoration: underline;"><span style="color: #000080; text-decoration: underline;"><a href="https://www.visualstudio.com/zh-tw/products/visual-studio-community-vs"><strong>免費版</strong>的Visual Studio Community 版</a></span></span>) 選擇建立一個 空白的專案放在 AzureWebSite ( Visual C# -&gt; Cloud -&gt; Empty Template) 。</div>
<div>&nbsp;</div>
</div>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1732.Image%2015.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1732.Image-15.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1732.Image%2015.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1732.Image-15.jpg" alt="" border="0" /></a></div>
<div>&nbsp;</div>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2821.Image%2016.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2821.Image-16.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2821.Image%2016.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2821.Image-16.jpg" alt="" border="0" /></a></div>
<div>&nbsp;</div>
<div>並將設定好Azure 上的Web App Name。</div>
<div>&nbsp;</div>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4478.Image%2017.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4478.Image-17.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4478.Image%2017.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4478.Image-17.jpg" alt="" border="0" /></a></div>
<div>&nbsp;</div>
<div>接下來建立一個空白的HTML 網頁。</div>
<div>&nbsp;</div>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7418.Image%2018.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7418.Image-18.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7418.Image%2018.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7418.Image-18.jpg" alt="" border="0" /></a></div>
<div><br />建立好空白網頁後，先做網站第一次發佈。</div>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1462.Image%2019.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1462.Image-19.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1462.Image%2019.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1462.Image-19.jpg" alt="" border="0" /></a></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1108.Image%2020.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1108.Image-20.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1108.Image%2020.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1108.Image-20.jpg" alt="" border="0" /></a></div>
<div>&nbsp;</div>
<div>在Visual Studio 中可以看見發佈的狀態。</div>
<div>&nbsp;</div>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3225.Image%2021.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3225.Image-21.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3225.Image%2021.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3225.Image-21.jpg" alt="" border="0" /></a></div>
<div>&nbsp;</div>
<div>
<div>確認網站發布成功並可以正常瀏覽後，接下來開始準備主要Windows 10 App。</div>
<div><br />在Visual Studio 中建立一個空白的Windows Universal 專案，這邊記得選JavaScript&nbsp; -&gt; Windows -&gt; Windows Universal 下面的Blank App (Windows Universal) 專案範本。</div>
<div>&nbsp;</div>
</div>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8838.Image%2022.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8838.Image-22.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8838.Image%2022.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8838.Image-22.jpg" alt="" border="0" /></a></div>
<div>&nbsp;</div>
<div>接下來點選編輯 package.appxmanifest 檔案。</div>
<div>&nbsp;</div>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1452.Image%2023.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1452.Image-23.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1452.Image%2023.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1452.Image-23.jpg" alt="" border="0" /></a></div>
<div>
<p>在Application 的XML element 下新增：</p>
<p><span style="color: #3366ff;">&nbsp;&nbsp;&nbsp;&nbsp; StartPage="http://[剛剛建立的網站首頁, eg. <a href="http://blogs.msdn.com/"><span style="color: #3366ff;">http://hermanXXXXX.azurewebsites.net/MyWin10WebApp.html</span></a> ]"&gt;</span></p>
<p><span style="color: #3366ff;">&nbsp;&lt;uap:ApplicationContentUriRules&gt;</span></p>
<p><span style="color: #3366ff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;uap:Rule Match="http://[剛剛建立的網站網址, 範例：hermanXXXXX.azurewebsites.net]/" Type="include" WindowsRuntimeAccess="all"/&gt;</span></p>
<p><span style="color: #3366ff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/uap:ApplicationContentUriRules&gt;</span></p>
<p lang="en-US">&nbsp;</p>
<p lang="en-US">建完後後應該跟下圖類似：　</p>
</div>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4130.Image%201.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4130.Image-1.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4130.Image%201.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4130.Image-1.jpg" alt="" border="0" /></a></div>
<p>&nbsp;</p>
<p>文章開頭提到造橋計畫的W 專案提供提供存取Windows 10 API 的功能，而這功能是透過Application Content URI Rules (ACURs) 定義Windows 10 API 存取權限。</p>
<p>剛剛設定的 uap:ApplicationContentUriRules 用意就是要授權只有在 Application Content URI Rules (ACURs) 所定義的網址下的網頁, 才會有適當權限去存取Win10 UWP 下的API 。</p>
<p>ACURs總共有三種權限 :</p>
<ul>
<li><span style="color: #000080;"><strong>all</strong>: 指定URN 底下的所有JavaScript 程式碼可以存取所有UWP API 以及APP本地端的API 與資源</span></li>
<li><span style="color: #000080;"><strong>allowForWeb</strong>:&nbsp; 指定URN 底下的所有JavaScript 程式碼可以存取APP本身所提供的客製化API</span></li>
<li><span style="color: #000080;"><strong>none</strong>:&nbsp; 預設值. 指定URL 無任何 APP API&nbsp;與資源存取權限</span></li>
</ul>
<p><span lang="zh-TW">在本文中我們直接給予all 的權限。</span><span lang="zh-TW">到此你的Windows 10 App<span style="color: #333399; font-size: medium;"> 已經完成</span>並可以按下 F5 執行 (三行 XML，沒有任何程式碼，有沒有嚇到竟然這麼快 :P !) 。</span></p>
<div><span lang="zh-TW"><br /></span></div>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5826.Image%2024.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5826.Image-24.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5826.Image%2024.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5826.Image-24.jpg" alt="" border="0" /></a></div>
<div>&nbsp;</div>
<div>
<div>當然如果是正式要發布的App， 還有包括加入 App Icon，App 名稱設定與保留，開發者帳號申請設定等程序。 不過這跟所有的Win10 App程序 都一樣，不在本篇的討論範圍。</div>
<div>&nbsp;</div>
<div>剛剛建立網站時只建立一個空白網站， App 打開後也是一個空白的App。 接下來我們要對網站<span style="text-decoration: underline;">加點料</span>，讓它可以呼叫Windows 10 UWP API 來做些事情。在方才網站的空白網頁中，<span style="color: #993300;">加入下面HTML 跟 JavaScript</span>。</div>
<div>&nbsp;</div>
</div>
<p><iframe style="border: none; height: 200px; width: 100%;" src="http://pastebin.com/embed_iframe.php?i=m09dcgWS"></iframe></p>
<div><br />然後在Visual Studio 中選擇Publish 將新的網頁更新到網站上 。</div>
<div>&nbsp;</div>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1207.Image%205.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1207.Image-5.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1207.Image%205.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1207.Image-5.jpg" alt="" border="0" /></a></div>
<div>&nbsp;</div>
<div>然後再打開剛剛的App，就可以看到新的網頁功能，而在App 中點選各個功能就能看到展示效果。</div>
<div>&nbsp;</div>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4606.Image%206.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4606.Image-6.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4606.Image%206.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4606.Image-6.jpg" alt="" border="0" /></a></div>
<div>&nbsp;</div>
<ul>
<li>呼叫UWP 彈跳視窗效果</li>
</ul>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4353.Image%207.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4353.Image-7.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4353.Image%207.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4353.Image-7.jpg" alt="" border="0" /></a></div>
<div>&nbsp;</div>
<ul>
<li>呼叫UWP相機功能效果</li>
</ul>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2055.Image%208.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2055.Image-8.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2055.Image%208.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2055.Image-8.jpg" alt="" border="0" /></a></div>
<div>&nbsp;</div>
<ul>
<li>新增會議至使用者行事曆效果</li>
</ul>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2705.Image%209.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2705.Image-9.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2705.Image%209.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2705.Image-9.jpg" alt="" border="0" /></a></div>
<div>&nbsp;</div>
<ul>
<li>存取使用者聯絡人清單效果</li>
</ul>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8270.Image%2011.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8270.Image-11.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8270.Image%2011.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8270.Image-11.jpg" alt="" border="0" /></a></div>
<div>&nbsp;</div>
<div>&nbsp;另外在程式除錯上，雖然是App， 但是跟一般網頁一樣可以直接透過Windows 10 預設瀏覽器Edge 來除錯 。 只要在 App 介面上按下 F12， 就會開啟Edge 網頁開發工具。 這時就可以檢視程式碼， 透過除錯工具偵錯。</div>
<div>&nbsp;</div>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3782.Image%2029.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3782.Image-29.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3782.Image%2029.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3782.Image-29.jpg" alt="" border="0" /></a></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>本文介紹如何透過Window 10 造橋計畫 (Bridges)裡頭的<span style="color: #000000;"><strong>W專案</strong></span> ( Project Westiminster)，很快的將網站發布成Windows 10 App。 在開發過程中也是沿用一般網站的前端開發工具與語言, 。如果你想很快速地體驗Windows 10 &nbsp;<span style="color: #000000;"><strong>W專案</strong></span> (Project Westiminster)帶來的效果，也可以直接Reuse 本文已經建立好的範例網站。網址在 <a href="http://hermanwestminster02.azurewebsites.net/MyWin10WebApp.html">http://hermanwestminster02.azurewebsites.net/MyWin10WebApp.html </a>&nbsp;(請記得要包在W10 App 中才會有效果)。</div>
<div>&nbsp;</div>
<div>如果你是 iOS 的Objective C 開發者、Android 的Java 開發者、或者是傳統 傳統Windows 應用程式的 .Net 或C++ 開發者，請敬請期待造橋計畫 (Bridges)裡頭接下來幾個月其他專案的推出。</div>
<div>&nbsp;</div>
<div>不過對於Windows 10 平台來說，如果要在所有 Windows 10 支援的裝置如 HoloLens、 <a href="https://dev.windows.com/zh-tw/iot">IoT 裝置</a>、 Surface Hub上執行；要能使用所有的Windows 10 UWP API；要針對操作介面做最佳化；或者是追求最好的程式效能表現，那開發原生UWP 還是最能滿足需求的開發方式。</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&lt;參考資料&gt;</div>
<ul>
<li><a href="http://blogs.windows.com/buildingapps/2015/07/06/project-westminster-in-a-nutshell/">Project Westminster in a nutshell</a></li>
<li><a href="http://microsoftedge.github.io/WebAppsDocs/en-US/win10/CreateHWA.htm">UWP Bridge for web apps - Create your app now</a></li>
<li><a href="https://msdn.microsoft.com/en-us/library/windows/apps/dn705792.aspx">Create hosted web apps</a></li>
</ul>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Azure上架設與使用Apache Spark 服務 - 入門篇</title>
      <link>https://docs.microsoft.com/archive/blogs/hermanwu/azureapache-spark</link>
      <pubDate>Tue, 07 Jul 2015 02:50:00 GMT</pubDate>
      <dc:creator><![CDATA[HermanWu]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/hermanwu/2015/07/07/azureapache-spark/</guid>
      <description><![CDATA[Apache Spark 是近年來快速興起的巨量資料處理技術。 一開 始在2009年由加州大學柏克萊分校的AMPLab開發，並於2010年成為Apache的Open Source 專案之一。Spark...]]></description>
      <content:encoded><![CDATA[<p>Apache Spark 是近年來快速興起的巨量資料處理技術。 一開 始在2009年由加州大學柏克萊分校的AMPLab開發，並於2010年成為Apache的Open Source 專案之一。Spark 藉由在資料處理過程中(運算, 儲存等)大量採用In-Memory 的處理方式<span lang="ZH-TW">，</span>具有優於過往以MapReduce 架構為核心的資料處理技術速度<span lang="ZH-TW">，</span>一般說來可以達到數十倍的效能提升(理論上甚至可以達到百倍的處理效能提升)<span style="font-size: x-small;">。</span> 在2014年的Sort Benchmark Competition（資料排序基準競賽）中<span lang="ZH-TW">，</span>Spark用更少機器且花了不到一半的時間<span lang="ZH-TW">，</span>打破過去由Hadoop 保持的世界紀錄<span lang="ZH-TW">，</span>更是奠定它在巨量資料處理速度上的領先者地位。 目前在Spark 的框架上<span lang="ZH-TW">，</span>已經發展出 Spark SQL (以SQL 語法操作查詢資料)<span lang="ZH-TW">，</span> MLlib (機器學習),以及處理即時串流資料的Spark Stream。豐富的擴充模組加上效能的優勢<span lang="ZH-TW">，</span>讓Spark 的使用人數快速增加。<span style="font-size: small;">尤其</span><span style="font-family: Times New Roman; font-size: small;">M</span><span style="font-size: small;">L</span><span style="font-family: Times New Roman; font-size: small;">lib</span><span style="font-size: small;">的機器學習演算法日益完備<span lang="ZH-TW">，</span></span><span style="font-size: small;">在</span><span style="font-size: small;">Apache </span><span style="font-size: small;">專案中已經逐漸取代</span><span style="font-size: small;">Mahout</span><span style="font-size: small;">專案在機器學習中的地位。</span><span style="font-size: small;">&nbsp; </span></p>
<p>&nbsp;</p>
<p>Microsoft Azure 的HDInisght 叢集服務原本就支援Spark 1.0, 在今年(2015)三月12號後 HDInsight 叢集服務 3.2 也正式支援Spark 1.2.　 Spark 1.2 相較於 Spark 1.0 提高了效能跟穩定度, 並且在各擴充模組上新增多項重要功能 (如在Spark Stream 上支援完整 H/A 模式). 本篇文章介紹逐步介紹如何在微軟 Azure 雲端服務中部屬Spark 1.2.&nbsp; (Spark 在2015 六月11日推出1.4 版, 日後會再補充1.4版的安裝)</p>
<p>&nbsp;</p>
<p><span style="font-family: Times New Roman; font-size: small;">&nbsp;</span><span style="font-family: Times New Roman; font-size: small;">[</span><span style="font-size: small;">開發環境準備</span><span style="font-family: Times New Roman; font-size: small;">]</span></p>
<ul>
<li>
<p>Microsoft Azure 帳號 (如果尚未有帳號, 可以到<a href="https://azure.microsoft.com/zh-tw/pricing/free-trial/"><span style="color: #0563c1;">這邊</span></a>來申請免費試用帳號)</p>
</li>
<li>
<p>Azure Storage 管理工具 : 本篇使用的是 ClumsyLeft 出的免費工具CloudXplorer, 可以在<a href="http://clumsyleaf.com/products/cloudxplorer"><span style="color: #0563c1;">這邊</span></a>下載.</p>
</li>
</ul>
<p><span style="font-family: Times New Roman; font-size: small;">&nbsp;</span></p>
<p><span style="font-size: small;">首先第一步建立</span><span style="font-size: small;">Azure HDInsight (Hadoop) </span><span style="font-size: small;">環境</span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5314.A01.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5314.A01.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5314.A01.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5314.A01.jpg" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span lang="ZH-TW"><span style="font-size: small;">為了指定使用</span></span><span lang="EN"><span style="font-size: small;">HDInsight 3.2 (Hadoop 2.6, HDP2.2) </span></span><span lang="ZH-TW"><span style="font-size: small;">版本</span></span><span lang="EN"><span style="font-size: small;">, </span></span><span lang="ZH-TW"><span style="font-size: small;">在建立時選擇</span></span><span lang="EN"><span style="font-size: small;"> &ldquo;</span></span><span lang="ZH-TW"><span style="font-size: small;">自訂建立</span></span><span lang="EN"><span style="font-size: small;">&rdquo;</span></span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4848.2.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4848.2.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4848.2.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4848.2.jpg" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p><span lang="ZH-TW"><span style="font-size: small;">記得</span></span><span><span style="font-size: small;">HDI</span></span><span><span style="font-size: small;">nsight</span></span><span lang="ZH-TW"><span style="font-size: small;">版本要指定</span></span><span><span style="font-size: small;">3.2, </span></span><span lang="ZH-TW"><span style="font-size: small;">以確保能相容</span></span><span><span style="font-size: small;">Spark 1.2 </span></span><span lang="ZH-TW"><span style="font-size: small;">以上版本</span></span><span><span style="font-size: small;">. </span></span></p>
<p><span style="font-size: small;">在作業系統上目前</span><span style="font-size: small;">HDI</span><span style="font-size: small;">nsight </span><span style="font-size: small;">支援使用</span><strong><span style="font-size: small;"> U</span></strong><strong><span style="font-size: small;">buntu 12.04 LTS</span></strong><span style="font-size: small;">或是</span><strong><span style="font-size: small;">W</span></strong><strong><span style="font-size: small;">indows Server 2012 R2 </span></strong><strong><span style="font-size: small;">資料中心</span></strong><span style="font-size: small;">版</span><span style="font-size: small;">. </span><span style="font-size: small;">&nbsp;</span><span style="font-size: small;">(Ubuntu </span><span style="font-size: small;">版目前在預覽</span><span style="font-size: small;">)</span></p>
<p><span style="font-size: small;">在操作</span><span style="font-size: small;">Spark </span><span style="font-size: small;">上並無太大差異</span><span style="font-size: small;">, </span><span style="font-size: small;">主要是操作上</span><span style="font-size: small;"> Ubuntu </span><span style="font-size: small;">需要透過</span><span style="font-size: small;">Terminal (</span><span style="font-size: small;">使用</span><span style="font-size: small;">Windows </span><span style="font-size: small;">的人可以考慮用</span><span style="font-size: small;"> Putty ) </span><span style="font-size: small;">連入操作</span><span style="font-size: small;">. </span><span style="font-size: small;">而</span><span style="font-size: small;"> Windows Server </span><span style="font-size: small;">版可以透過遠端桌面</span><span style="font-size: small;"> (RDP) </span><span style="font-size: small;">連線操作</span><span style="font-size: small;">. </span><span style="font-size: small;">可以選擇自己習慣的系統就好</span><span style="font-size: small;">. </span><span style="font-size: small;">&nbsp;</span><span style="font-size: small;">( </span><span style="font-size: small;">這段有點廢話</span><span style="font-size: small;">)</span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5756.3.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5756.3.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5756.3.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5756.3.jpg" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p><span lang="ZH-TW"><span style="font-size: small;">設定叢集節點大小</span></span><span><span style="font-size: small;">, </span><span lang="ZH-TW"><span style="font-size: small;">這邊可以視需要調整</span></span><span style="font-size: small;">. </span></span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6281.4.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6281.4.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6281.4.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6281.4.jpg" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>分別設定叢集HTTP及 遠端桌面登入帳號密碼. &nbsp;稍後我們會直接用遠端桌面登入操作Spark.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1464.5.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1464.5.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1464.5.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1464.5.jpg" alt="" border="0" /></a></p>
<p><span lang="ZH-TW">設定儲存體帳戶</span><span>, </span><span lang="ZH-TW">如果沒有既有儲存體帳戶的話就先去建立一個</span><span>. </span><span lang="ZH-TW">建立完後會出現在下拉選單中</span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1667.6.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1667.6.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1667.6.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1667.6.jpg" alt="" border="0" /></a></p>
<p><span style="font-size: small;">最後一個也是最重要的一個</span><span style="font-size: small;">, </span><span style="font-size: small;">就是要指定指令碼動作</span><span style="font-size: small;"> ( Script Action) </span><span style="font-size: small;">來同時將</span><span style="font-size: small;">Spark 1.2 </span><span style="font-size: small;">環境安裝到這個</span><span style="font-size: small;">HDInsight( Hadoop) </span><span style="font-size: small;">叢集中</span><span style="font-size: small;">. </span></p>
<p><span style="font-size: small;">網路上已經有寫好的 </span><span style="font-size: small;">&nbsp;</span><span style="font-size: small;">Spark 1.2 </span><span style="font-size: small;">安裝 指令碼動作</span><span style="font-size: small;"> ( Script Action). </span></p>
<p><span style="font-size: small;">直接在</span><span style="font-size: small;"> Script URI </span><span style="font-size: small;">欄位中填入以下網址</span><span style="font-size: small;">:</span></p>
<p><a href="https://hdiconfigactions.blob.core.windows.net/sparkconfigactionv03/spark-installer-v03.ps1"><span style="font-size: small;">https://hdiconfigactions.blob.core.windows.net/sparkconfigactionv03/spark-installer-v03.ps1</span></a></p>
<p><span style="font-size: small;">Node Type </span><span style="font-size: small;">選擇</span><span style="font-size: small;"> Head Node </span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5633.7.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5633.7.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5633.7.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5633.7.jpg" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p><span style="font-size: small;">最後按下打勾符號確認開始建置</span><span style="font-size: small;">Azure HDInsight +Spark 1.2 </span><span style="font-size: small;">叢集</span><span style="font-size: small;">, </span><span style="font-size: small;">&nbsp;</span><span style="font-size: small;">這部分會花一點時間</span><span style="font-size: small;">, </span><span style="font-size: small;">一般要</span><span style="font-size: small;">20</span><span style="font-size: small;">分鐘以上</span><span style="font-size: small;">. </span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0624.8.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0624.8.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0624.8.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0624.8.jpg" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span lang="ZH-TW"><span style="font-size: small;">在耐心等候叢集建置完後</span></span><span><span style="font-size: small;">, </span></span><span lang="ZH-TW"><span style="font-size: small;">就可以開始準備使用</span></span><span><span style="font-size: small;">Spark</span><span lang="ZH-TW"><span style="font-size: small;">了</span></span><span style="font-size: small;">. </span></span></p>
<p><span lang="ZH-TW"><span style="font-size: small;">在</span></span><span><span style="font-size: small;">Azure </span></span><span lang="ZH-TW"><span style="font-size: small;">管理介面上點選剛剛建立的</span></span><span><span style="font-size: small;">HDInsight</span><span lang="ZH-TW"><span style="font-size: small;">叢集</span></span><span style="font-size: small;">, </span><span lang="ZH-TW"><span style="font-size: small;">選 </span></span><span style="font-size: small;">&ldquo;</span><span lang="ZH-TW"><span style="font-size: small;">連接</span></span><span style="font-size: small;">&rdquo;</span><span lang="ZH-TW"><span style="font-size: small;">透過遠端桌面登入</span></span><span style="font-size: small;">. </span></span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5025.9.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5025.9.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5025.9.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5025.9.jpg" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p><span lang="ZH-TW"><span style="font-size: small;">登入後應該可以看到類似下面的桌面</span></span><span><span style="font-size: small;">. </span></span></p>
<p>&nbsp;</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5756.10.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5756.10.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5756.10.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5756.10.jpg" alt="" border="0" /></a></p>
<p><span style="font-size: small;">然後到</span><span style="font-size: small;"> C:\Apps\Dist\Spark-1.2.1 </span><span style="font-size: small;">的目錄</span><span style="font-size: small;">.&nbsp;</span>&nbsp;</p>
<p><span style="font-size: small;">由於本篇我們會使用</span><span style="font-size: small;">Scala </span><span style="font-size: small;">語言來操作</span><span style="font-size: small;">Spark, </span><span style="font-size: small;">所以輸入</span><span style="font-size: small;">&nbsp; </span><span style="font-size: small;">&ldquo;.bin\spark-shell --master yarn&rdquo;</span><span style="font-size: small;">來啟動</span><span style="font-size: small;"> Spark</span><span style="font-size: small;">的 </span><span style="font-size: small;">Scala </span><span style="font-size: small;">操作環境</span><span style="font-size: small;">. </span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1273.11.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1273.11.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1273.11.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1273.11.jpg" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p><span lang="ZH-TW"><span style="font-size: small;">經過約莫一分鐘後</span></span><span><span style="font-size: small;">Scala </span></span><span lang="ZH-TW"><span style="font-size: small;">操作環境就準備好</span></span><span><span style="font-size: small;">, </span><span lang="ZH-TW"><span style="font-size: small;">可以開始透過</span></span><span style="font-size: small;">Scala </span><span lang="ZH-TW"><span style="font-size: small;">語言使用</span></span><span style="font-size: small;">Spark </span><span lang="ZH-TW"><span style="font-size: small;">豐富的功能</span></span><span style="font-size: small;">. </span></span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5008.12.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5008.12.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/5008.12.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/5008.12.jpg" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p><span lang="ZH-TW"><span style="font-size: small;">這時也可以開啟瀏覽器</span></span><span><a href="http://headnodehost:9014/cluster"><span style="color: #0563c1; font-size: small;">http://headnodehost:9014/cluster</span></a></span><span><span style="font-size: small;">, </span></span><span lang="ZH-TW"><span style="font-size: small;">可以看到</span></span><span><span style="font-size: small;">H</span></span><span><span style="font-size: small;">adoop </span></span><span lang="ZH-TW"><span style="font-size: small;">上的確正在執行</span></span><span><span style="font-size: small;">Spark </span></span></p>
<p><span lang="ZH-TW"><span style="font-size: small;">再點選</span></span><span><span style="font-size: small;">ApplicationMaster </span></span><span lang="ZH-TW"><span style="font-size: small;">連結</span></span><span><span style="font-size: small;">, </span></span><span lang="ZH-TW"><span style="font-size: small;">就可以看到</span></span><span><span style="font-size: small;">Spark </span></span><span lang="ZH-TW"><span style="font-size: small;">執行過那些工作</span></span></p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6866.13.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6866.13.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6866.13.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6866.13.jpg" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7673.14.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7673.14.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7673.14.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7673.14.jpg" alt="" border="0" /></a></p>
<p>&nbsp;&nbsp;</p>
<p><span style="font-size: small;">接下來要小試牛刀用</span><span style="font-size: small;">Spark </span><span style="font-size: small;">簡單的處理文字資料。</span></p>
<p><span style="font-size: small;">由於要處理的資料需要放在Azure Blob Storage, Blob Storage 本身並不是採用樹狀目錄結構的概念, 但是可以透過檔名中包含 "/" 資源來模擬類似效果. </span></p>
<p><span style="font-size: small;">為了方便處理, 我們使用 免費的<span style="font-size: small;">CloudXplorer 來瀏覽Azure Blob Storage, 它可以用類似檔案總管的介面自動模擬出樹狀結構目錄, 並進行檔案操作. &nbsp;</span></span></p>
<p><span style="font-size: small;">先用</span><span style="font-size: small;">CloudXplorer </span><span style="font-size: small;">連上 </span><span style="font-size: small;">Azure Storage ， </span><span style="font-size: small;">在 </span><span style="font-size: small;">&nbsp;</span><span style="font-size: small;">/user/[user name]&nbsp; </span><span style="font-size: small;">下建立一個</span><span style="font-size: small;">SparkTestingData </span><span style="font-size: small;">資料夾，</span><span style="font-size: small;">&nbsp; </span><span style="font-size: small;">並且將英文版的湯姆歷險記</span><span style="font-size: small;"> ( The Adventures of Tom Sawyer.txt) </span><span style="font-size: small;">文字檔放到該目錄中。</span></p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1273.15.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1273.15.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1273.15.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1273.15.jpg" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p><span lang="ZH-TW"><span style="font-size: small;">在</span></span><span><span style="font-size: small;">Scala </span></span><span lang="ZH-TW"><span style="font-size: small;">介面中執行</span></span><span><span style="font-size: small;">: </span></span></p>
<p><span><span style="font-size: small;">// 讀取湯姆歷險記 英文版文字檔</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">val file = sc.textFile("SparkTestingData\\The Adventures of Tom Sawyer.txt")</span></p>
<p><span style="font-family: Calibri; font-size: small;">print (file.count())</span></p>
<p>&nbsp;</p>
<p><span style="font-family: Calibri; font-size: small;">// 挑出內含"Tom" 的句子</span></p>
<p><span style="font-family: Calibri; font-size: small;">val TomCount = file.filter(line =&gt; line.contains("Tom"))</span></p>
<p><span style="font-family: Calibri; font-size: small;">//挑出內含"Harper" 的句子</span></p>
<p><span style="font-family: Calibri; font-size: small;">val HarperCount = file.filter(line =&gt; line.contains("Harper"))</span></p>
<p><span style="font-family: Calibri; font-size: small;">// 計算Tom 出現的句子數</span></p>
<p><span style="font-family: Calibri; font-size: small;">TomCount.count()</span></p>
<p><span style="font-family: Calibri; font-size: small;"><span style="font-family: Calibri; font-size: small;">// 計算Harper出現的句子數</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">HarperCount.count()</span></p>
<p><span lang="ZH-TW"><span style="font-size: small;">就可以透過</span></span><span><span style="font-size: small;">Spark </span></span><span lang="ZH-TW"><span style="font-size: small;">很快計算出</span></span><span lang="ZH-TW"><span style="font-size: small;">在湯姆歷險記中</span></span><span><span style="font-size: small;">, </span></span><span lang="ZH-TW"><span style="font-size: small;">提到湯姆</span></span><span><span style="font-size: small;">(Tom)</span><span lang="ZH-TW"><span style="font-size: small;">幾次</span></span></span><span><span style="font-size: small;">, </span></span><span lang="ZH-TW"><span style="font-size: small;">提到他的好朋友哈伯</span></span><span><span style="font-size: small;">(Harper)</span><span lang="ZH-TW"><span style="font-size: small;">幾次了</span></span></span><span><span style="font-size: small;">. </span></span></p>
<p><span style="font-size: small;">&nbsp;</span><span style="font-size: small;">&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4188.16.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4188.16.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4188.16.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4188.16.jpg" alt="" border="0" /></a></span></p>
<p>&nbsp;</p>
<p><span style="font-size: small;">執行完後可以再打開</span><span style="font-size: small;"> Spark </span><span style="font-size: small;">&nbsp;</span><span style="font-size: small;">ApplicationMaster</span><span style="font-size: small;">網頁</span><span style="font-size: small;"> , </span><span style="font-size: small;">可以看到剛剛的工作花了多少時間執行</span><span style="font-size: small;">. </span></p>
<p><span style="font-size: small;">下一篇我們會再介紹</span><span style="font-size: small;">如何透過</span><span style="font-size: small;">Spark + MLlib </span><span style="font-size: small;">進行機器學習的應用</span><span style="font-size: small;">. </span></p>
<p>&nbsp;</p>
<p><span><span style="font-size: small;">&lt;</span><span lang="ZH-TW"><span style="font-size: small;">參考資料</span></span><span style="font-size: small;">&gt;</span></span></p>
<ul>
<li>
<p><span><a href="http://spark.apache.org/docs/latest/index.html"><span style="color: #0563c1;">Spark Overview</span></a></span></p>
</li>
<li>
<p><span><a href="https://azure.microsoft.com/en-us/documentation/articles/hdinsight-component-versioning/"><span style="color: #0563c1;">What's new in the Hadoop cluster versions provided by HDInsight</span></a></span></p>
</li>
<li>
<p><span><a href="http://windowswideopen.com/category/apache-spark/"><span style="color: #0563c1;">Azure HDInsight Clusters Allows Custom Installation of Spark Using Script Action</span></a></span></p>
</li>
<li>
<p><span><a href="http://taiwansparkusergroup.gitbooks.io/spark-programming-guide-zh-tw/content/quick-start/using-spark-shell.html"><span lang="ZH-TW"><span style="color: #0563c1;">使用</span></span><span><span style="color: #0563c1;"> Spark Shell</span></span></a></span></p>
</li>
<li>
<p><span><a href="http://azure.microsoft.com/blog/2015/03/16/how-to-install-spark-1-2-on-azure-hdinsight-clusters/"><span style="color: #0563c1;">How to install Spark 1.2 on Azure HDInsight clusters</span></a></span></p>
</li>
</ul>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>//Build/ 2014  Windows Phone 8.1 重點Session 整理</title>
      <link>https://docs.microsoft.com/archive/blogs/hermanwu/build-2014-windows-phone-8-1-session</link>
      <pubDate>Mon, 07 Apr 2014 11:05:00 GMT</pubDate>
      <dc:creator><![CDATA[HermanWu]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/hermanwu/2014/04/07/build-2014-windows-phone-8-1-session/</guid>
      <description><![CDATA[不知道有多少讀者跟筆者一樣在4/2 號晚上熬夜看了&nbsp;2014&nbsp;//Build/&nbsp;大會上的Keynote, 並且對&nbsp;Windows Phone 8.1...]]></description>
      <content:encoded><![CDATA[<p>不知道有多少讀者跟筆者一樣在4/2 號晚上熬夜看了&nbsp;2014&nbsp;//<a href="file://\\Build">Build</a>/&nbsp;大會上的Keynote, 並且對&nbsp;Windows Phone 8.1 帶來的新功能及開發技術更新感到非常的興奮.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1351.WPBuild.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1351.WPBuild.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/1351.WPBuild.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/1351.WPBuild.jpg" alt="" border="0" /></a></p>
<p>Windows Phone 8.1 在開發技術上, 除了帶來像 新的行事曆行事曆,&nbsp;聯絡人, 動態磚&nbsp;等API功能強化外, 也正式發表可以跨Windows Phone 及Windows 8 APP&nbsp;的Universal APPs&nbsp;專案類型, 讓開發者可以開發一次就產生同時適合手機, 平板, 筆電, 桌機的APP.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3730.16574772%2016.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3730._16574772_-16.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3730.16574772%2016.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3730._16574772_-16.jpg" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>由於//Build/ 中有太多精采的課程, 先將一些跟Windows Phone 有關的部分課程分類整理如下, 希望對還沒時間細看 Build 大會內容的讀者有些幫助.</p>
<p>&nbsp;</p>
<p>&nbsp;[基礎篇]</p>
<p><a href="https://channel9.msdn.com/Events/Build/2014/2-507">Developing Apps using the Common XAML UI Framework</a></p>
<p><a href="https://channel9.msdn.com/Events/Build/2014/2-509">The New Windows Phone Application Model</a></p>
<p><a href="https://channel9.msdn.com/Events/Build/2014/2-518">Multitasking and Triggered Background Tasks for Windows Phone Apps</a></p>
<p><a href="https://channel9.msdn.com/Events/Build/2014/2-521">Notification Platform Development on Windows</a></p>
<p><a href="https://channel9.msdn.com/Events/Build/2014/2-524">Deploying and Managing Enterprise Apps</a></p>
<p><a href="https://channel9.msdn.com/Events/Build/2014/2-523">Live Tiles Enhancements</a></p>
<p><a href="https://channel9.msdn.com/Events/Build/2014/2-566">User Data Management in Windows Phone</a></p>
<p><a href="https://channel9.msdn.com/Events/Build/2014/2-550">Windows Runtime for Windows Phone Developers</a></p>
<p><a class="title" href="https://channel9.msdn.com/Events/Build/2014/2-512">Windows Phone and Windows: Store and Dev&nbsp;Center</a></p>
<p><a class="title" href="https://channel9.msdn.com/Events/Build/2014/3-591">Using Visual Studio to Build XAML Converged&nbsp;Apps</a><!--spans + , are required for ie7, and no comments can be placed after the span--></p>
<p class="grouping speaker"><a class="title" href="https://channel9.msdn.com/Events/Build/2014/2-516">What about XAML UI and&nbsp;Controls?</a></p>
<p>&nbsp;</p>
<p>[進階篇]</p>
<p><a class="title" href="https://channel9.msdn.com/Events/Build/2014/2-649">Building Windows, Windows Phone, and Xbox One Apps with HTML/JS/CSS &amp;&nbsp;C++</a></p>
<p><a href="https://channel9.msdn.com/Events/Build/2014/3-578">Diagnosing Issues in Windows Phone XAML Apps Using Visual Studio</a></p>
<p><a href="https://channel9.msdn.com/Events/Build/2014/3-542">Managing Resource Constraints on Windows Phone</a></p>
<p><a href="https://channel9.msdn.com/Events/Build/2014/4-557">How to Analyze Performance Issues in Your Windows and Windows Phone Apps</a></p>
<p><a href="https://channel9.msdn.com/Events/Build/2014/3-593">Automated Testing of XAML-Based Apps for Windows and Windows Phone</a></p>
<p><a class="title" href="https://channel9.msdn.com/Events/Build/2014/3-541">From 4 to 40 inches: Developing Windows Applications across Multiple Form&nbsp;Factors</a></p>
<p>&nbsp;<a class="title" href="https://channel9.msdn.com/Events/Build/2014/2-528">Building Video and Audio Streaming&nbsp;Apps</a></p>
<p><a class="title" href="https://channel9.msdn.com/Events/Build/2014/2-520">Contracts and Pickers: Building Apps that Work Together on&nbsp;Windows</a></p>
<p><a class="title" href="https://channel9.msdn.com/Events/Build/2014/2-526">Building Geo-Aware Apps with Maps and&nbsp;Geofencing</a></p>
<p><a class="title" href="https://channel9.msdn.com/Events/Build/2014/2-555">The New Video Editing APIs for Windows Phone:&nbsp;Windows.Media.Editing</a></p>
<p>&nbsp;</p>
<p>[企業應用篇]</p>
<p><a href="https://channel9.msdn.com/Events/Build/2014/2-531">New Security Features for Windows Phone</a></p>
<p><a href="https://channel9.msdn.com/Events/Build/2014/2-513">Windows Phone Enterprise Management</a></p>
<p><a class="title" href="https://channel9.msdn.com/Events/Build/2014/2-547">Wrap a Mobile API around your Enterprise and take Data Offline with NoSQL on Windows Phones&nbsp;and&hellip;</a></p>
<p>&nbsp;</p>
<p>[開發商收益篇]</p>
<p><a class="title" href="https://channel9.msdn.com/Events/Build/2014/2-504">Maximizing Revenue for Phone, Tablet and PC Apps in the Windows&nbsp;Store</a><!--spans + , are required for ie7, and no comments can be placed after the span--></p>]]></content:encoded>
    </item>
    <item>
      <title>Windows Phone App Studio - 開啟全民寫App 運動之神器</title>
      <link>https://docs.microsoft.com/archive/blogs/hermanwu/windows-phone-app-studio-app</link>
      <pubDate>Wed, 21 Aug 2013 09:59:00 GMT</pubDate>
      <dc:creator><![CDATA[HermanWu]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/hermanwu/2013/08/21/windows-phone-app-studio-app/</guid>
      <description><![CDATA[近年來行動裝置上APP 的盛行已經是一個讓大家都上癮的趨勢, IDC 的統計也顯示2012年台灣智慧型手機的市佔率超過七成.
不過APP 的開發一直都還停留在專業工程師才能進行的一項工作,...]]></description>
      <content:encoded><![CDATA[<p>近年來行動裝置上APP 的盛行已經是一個讓大家都上癮的趨勢, <a title="http://bnext.com.tw/article/view/id/25606" href="http://bnext.com.tw/article/view/id/25606" target="_blank">IDC 的統計</a>也顯示2012年台灣智慧型手機的市佔率超過七成.</p>
<p>不過APP 的開發一直都還停留在專業工程師才能進行的一項工作, 甚至大部分有IT部門的公司, 一旦有相關需求也都往往需要借重專精App開發的外包團隊來協助製作APP.</p>
<p>然而這樣開發APP 的高門檻在微軟 <a title="http://apps.windowsstore.com/default.htm" href="http://apps.windowsstore.com/default.htm" target="_blank">Windows Phone App Studio (beta)</a> 發表後算是正式被打破.&nbsp; 透 Windows Phone App Studio 甚至只要不到十分鐘的時間, 就可以完成製作出類似公司介紹, 產品型錄, 或者專屬生日Party App.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6102.AppStudio.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6102.AppStudio.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6102.AppStudio.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6102.AppStudio.jpg" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a title="http://apps.windowsstore.com/default.htm" href="http://apps.windowsstore.com/default.htm" target="_blank">Windows Phone App Studio (beta)</a>&nbsp;是一個免安裝且免費的線上工具. 只要登入你的 Microsoft ID&nbsp;(hotmail.com, live.com, outlook.com..), 然後寄信到 <a href="mailto:studio@microsoft.com">studio@microsoft.com</a> 去申請使用的Token (因為目前還在Beta階段, 所以必須發信去申請, 目前大約3~4小時內就會寄給你使用的Token), 之後就可以透過數十種預設的的範本, 去快速製作不同的APP 應用.</p>
<p>使用及製作過程也可以參考這篇 <a title="http://www.dotblogs.com.tw/eternaltung/archive/2013/08/07/wpappstudio.aspx?fid=59880" href="http://www.dotblogs.com.tw/eternaltung/archive/2013/08/07/wpappstudio.aspx?fid=59880">"使用Windows Phone App Studio快速建立出一個App</a> "的專文介紹.</p>
<p>這邊稍微再補充的是如果你是Windows Phone 8 的使用者, 在最後產生App 後是可以馬上把這個App 裝在自己的手機上或者是分享給親朋好友. &nbsp;不過有幾點要注意的:</p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7725.GenerateApp.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7725.GenerateApp.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/7725.GenerateApp.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/7725.GenerateApp.jpg" alt="" border="0" /></a><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3146.ShareApp.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3146.ShareApp.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/3146.ShareApp.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/3146.ShareApp.jpg" alt="" width="441" height="546" border="0" /></a></p>
<p>1. 這些APP 是並不會出現在ㄧ般的市集上. 如果要發佈到市集上給使用者購買或安裝, 仍需要到<a title="http://dev.windowsphone.com/en-us" href="http://dev.windowsphone.com/en-us" target="_blank"> Windows Phone Dev Center</a> 申請Windows Phone 開發者帳號.</p>
<p>2. 這些APP 透過微軟憑證加簽後產生的. 要安裝這些APP, 您的手機上必須要先安裝微軟憑證 ( 網站上有一段 "Remember you have to <a class="install-certificate" href="http://apps.windowsstore.com/Job/State?ticket=85662.sbhtfx&amp;appId=bb6c736f-42f5-456e-80ad-40374e99a865" data-toggle="modal">install the Certificate</a> we sent you via Email" ), 用手機點選<a class="install-certificate" href="http://apps.windowsstore.com/Job/State?ticket=85662.sbhtfx&amp;appId=bb6c736f-42f5-456e-80ad-40374e99a865" data-toggle="modal">install the Certificate</a> 這個超連結後, 手機上的IE瀏覽器會打開, 顯示一段是否要安裝Microsoft憑證的資訊. 安裝完憑證後就可以透過QRCode 將剛剛熱騰騰產生出來的App 裝到手機中使用.</p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2474.a1.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2474.a1.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2474.a1.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2474.a1.jpg" alt="" border="0" />&nbsp;</a><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8875.a2.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8875.a2.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8875.a2.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8875.a2.jpg" alt="" border="0" /></a>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4745.a3.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4745.a3.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/4745.a3.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/4745.a3.jpg" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>Windows Phone App Studio (beta) 在發布<a title="http://blogs.windows.com/windows_phone/b/wpdev/archive/2013/08/19/windows-phone-app-studio-beta-response-exceeds-expectations-new-capabilities-released-today.aspx" href="http://blogs.windows.com/windows_phone/b/wpdev/archive/2013/08/19/windows-phone-app-studio-beta-response-exceeds-expectations-new-capabilities-released-today.aspx" target="_blank">48 小時之內</a>就吸引超過20,000個使用者, 開發出超過30,000個APP. 而至今在上面已經製作出超過六萬個APP, 使用者人數還在不斷增加中.</p>
<p>&nbsp;</p>
<p>想製作公司產品介紹APP, 或為親愛的親戚朋友製作生日Party APP&nbsp;,&nbsp; 馬上到&nbsp;<a title="http://apps.windowsstore.com/default.htm" href="http://apps.windowsstore.com/default.htm" target="_blank">Windows Phone App Studio (beta)</a> 開始吧!</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Windows Phone 台灣市集遊戲分級新規定 - 遊戲開發商請注意 ( Windows Phone Taiwan Marketplace game rating - Attetion ! Game publishers)</title>
      <link>https://docs.microsoft.com/archive/blogs/hermanwu/windows-phone-windows-phone-taiwan-marketp</link>
      <pubDate>Sun, 25 Nov 2012 03:27:00 GMT</pubDate>
      <dc:creator><![CDATA[HermanWu]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/hermanwu/2012/11/25/windows-phone-windows-phone-taiwan-marketp/</guid>
      <description><![CDATA[為了配合及遵守行政院在101年5月29日公布的"遊戲軟體分級管理辦法", Windows Phone...]]></description>
      <content:encoded><![CDATA[<p>為了配合及遵守行政院在101年5月29日公布的<a title="&quot;遊戲軟體分級管理辦法" href="http://www.gamerating.org.tw/gsgi_way.php" target="_blank">"遊戲軟體分級管理辦法</a>", Windows Phone 台灣市集的遊戲未來都必須要按照辦法中的五個遊戲分級做分類.</p>
<p>這五個分級分別為:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2308.16574772%204.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2308._16574772_-4.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/2308.16574772%204.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/2308._16574772_-4.jpg" alt="" border="0" /></a></p>
<p>分級的詳細規則請參考"<a title="遊戲軟體分級查詢網" href="http://www.gamerating.org.tw/gsgi_way.php" target="_blank">遊戲軟體分級查詢網</a>".</p>
<p>&nbsp;</p>
<p>從這周(11/26)起Windows Phone 市集也會開始要求軟體商在發布遊戲到台灣市集時需要選擇該遊戲的等級.&nbsp;這個等級將由遊戲開發商自己認定, 微軟市集審查團隊並不負責驗證.</p>
<p>另外根據辦法中的規定, 在台灣區發布的遊戲在遊戲內容描述時, 將會<span style="color: #000080;">由系統自動加上"<strong>注意使用時間 避免遊戲沉迷</strong>"警語</span>.</p>
<p>而有 In-App Purchase(IAP) 功能的遊戲, 系<span style="color: #000080;">統會自動加上 "<strong>本遊戲部分內容或服務需另行支付其他費</strong>用"警語.</span></p>
<p>&nbsp;</p>
<p>除了11/26起發布的到台灣市集的遊戲需要強制選擇遊戲等級外,</p>
<p>已經發佈到台灣市集的遊戲也會陸續被要求指定遊戲分級.</p>
<ul>
<li><span style="color: #993300;">在 2012年五月29日以後發布的遊戲, 需要在<strong> 2013年1月1日前指定遊戲分級</strong>. </span></li>
<li><span style="color: #993300;">在&nbsp;2012年五月29日以前發布的遊戲, 需要在<strong>2013年12月31日前指定遊戲分級</strong>.</span></li>
</ul>
<p>受影響的遊戲開發商接下來會陸續收到微軟市集團隊的通知,<span style="text-decoration: underline;"> 如果遊戲開發商沒有在指定日期前提供分級資料, 該遊戲將會在台灣地區市集被下架</span>.</p>
<p>也就是說2013年1月2日起, 不符合以上規定的遊戲會被下架.</p>
<p><span style="color: #333399;">如果你是遊戲開發商, 請記得為你的遊戲設定分級資料. </span></p>
<p><span style="color: #333399;">如果你是玩家, 也記得為你喜愛的遊戲發個信給遊戲開發商, 提醒他們設定分級資料.</span></p>
<p>詳細說明也可以參考 Windows Phone Developer Blog: &nbsp;<a title="Windows Phone Store market expansion and new game ratings&amp;nbsp;" href="http://blogs.windows.com/windows_phone/b/wpdev/archive/2012/11/30/windows-phone-store-market-expansion-and-new-game-ratings.aspx" target="_blank">Windows Phone Store market expansion and new game ratings</a>&nbsp;</p>
<p>-------------------------------------------------------------------------------------------</p>
<p>[English Version]</p>
<p>On May 29, 2012, Taiwan goverment announced a new game rating system (CSRR) the includes mobile games. The requlation requires ratings icons, content descriptors and warning statements online and in game descriptions visible to customers in the store.</p>
<p>Effective January 1, 2013, all games published in Taiwan must have a valid CSRR rating, which developers are required to register with the Taiwan government database before distributing.</p>
<p>The rating has five classes: 0~6, 6+~12, 12+~15, 15+~18, 18+~, for the detail&nbsp;please refer to <a title="Wiki here" href="http://en.wikipedia.org/wiki/Computer_Software_Rating_Regulation">Wiki here</a>.</p>
<p>The CSRR rating is self-reported, but must accurately reflect the game's content.</p>
<p>To support this new game rating system, Windows Phone marketplace will implement two changes in the comming weeks:</p>
<p><span style="color: #333399;">1. Dev Center will require developers to select a CSRR rating during game submission. But not extra CSRR rating certificate required. </span></p>
<p><span style="color: #333399;">2. To support the warning statements requirements, all games will have an addictiction warning(<strong>注意使用時間 避免遊戲沉迷</strong>) and an&nbsp;in-app purchase warning (<strong>本遊戲部分內容或服務需另行支付其他費</strong>用) automatically added to game descriptions.</span></p>
<p>Also game publishers will be requred to add a valid game&nbsp;rating:</p>
<p><span style="color: #993300;">- Published after May 29, 2012: Game must be updated to displayed a valid rating by January 1, 2013</span></p>
<p><span style="color: #993300;">- Published before May 29, 2012: Game must be updated to dispaly a valide rating by December 31, 2013</span></p>
<p><span style="color: #993300;">- Beginning January 2, 2013, those publisher who have not updated their apss to include a valid game rating for those apps published after May 29, 2012, will be removed from the Windows Phone Store in Taiwan</span>.</p>
<p>If you are an gammer, please remind the publishers of your favorite games to add a valid rating.</p>
<p>You can refer to &nbsp;Windows Phone Developer Blog: &nbsp;<a title="Windows Phone Store market expansion and new game ratings&amp;nbsp;" href="http://blogs.windows.com/windows_phone/b/wpdev/archive/2012/11/30/windows-phone-store-market-expansion-and-new-game-ratings.aspx" target="_blank">Windows Phone Store market expansion and new game ratings</a> for detail infomation. &nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>好的Windows Phone App 通常具備的特點 - 開發人員觀點</title>
      <link>https://docs.microsoft.com/archive/blogs/hermanwu/windows-phone-app</link>
      <pubDate>Sat, 24 Nov 2012 05:16:43 GMT</pubDate>
      <dc:creator><![CDATA[HermanWu]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/hermanwu/2012/11/24/windows-phone-app/</guid>
      <description><![CDATA[Windows Phone 有別於其他以App圖示(Icon)為介面核心智慧型手機平台,試圖設計出一個可以讓使用者可以更直覺並更快到達所要資訊的使用者介面....]]></description>
      <content:encoded><![CDATA[<p>Windows Phone 有別於其他以App圖示(Icon)為介面核心智慧型手機平台,試圖設計出一個可以讓使用者可以更直覺並更快到達所要資訊的使用者介面. (有興趣的讀者可以看一下<a title="這段影片" href="https://www.youtube.com/watch?v=GGJJ46fYhEE" target="_blank">這段影片</a>)</p>
<p><br />最後的成果就是基於包浩斯(Bauhaus),瑞士平面設計風格(Swiss Design) , 攝影(Cinematography) 所發展出來的Windows Phone 使用者經驗 (舊稱Metro Style).</p>
<p><br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8540.16574772%201.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8540._16574772_-1.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/8540.16574772%201.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/8540._16574772_-1.jpg" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0523.Picture1.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0523.Picture1.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/0523.Picture1.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/0523.Picture1.png" alt="" border="0" /></a></p>
<p>&nbsp;不過 身為沒有設計背景的程式開發人員, 以上這段話我其實不知道指的是什麼. 如果你有興趣更深入的了解的話, 建議可以把<strong>王森</strong>講師有<span style="text-decoration: underline;">關Windows Phone 使用者介面和圖形處理 </span><a title="Windows Phone 使用者介面和圖形處理   的三份投影片" href="https://skydrive.live.com/?cid=fb49c7ced61bd893&amp;id=FB49C7CED61BD893%21749" target="_blank">的三份投影片</a>看完.</p>
<p>以技術的角度來看, 所謂的Windows Phone使用者經驗是代表由個人化的動態磚, Infomation Hub (暫翻為"資訊匯流中心") ,&nbsp; 全景式介面(Panorama) , Pivot&nbsp;以及應用程式列(Application Bar)&nbsp;所建構出來Windows&nbsp;Phone 應用程式. &nbsp;<br />並透過版面上適當的文字排版與對齊, 讓資訊看起來乾淨整齊.&nbsp;(個人甚至覺得文字排版, 包括字體大小與顏色變化, 加上排列整齊, 已經包括80% 的Windows Phone 介面設計精隨)</p>
<p>根據過去協助一些App開發商設計出符合微軟總部定義的 "好的" Windows Phone&nbsp;App, 把幾個重點摘要如下:</p>
<ul>
<li><strong><strong><span style="color: #333399;">視覺與操作設計( 9則 )</span><br /></strong></strong><br /><span style="color: #0000ff;">- 首頁採用Panorama 或Pivot&nbsp;</span>
<p><span style="color: #0000ff;">- 資料要<span style="text-decoration: underline;">向左對齊</span>, 留白24PX, <span style="text-decoration: underline;">同一行資料要齊頭</span>高</span></p>
<p><span style="color: #0000ff;">- 資料間距為<span style="text-decoration: underline;">24PX</span> 或<span style="text-decoration: underline;">12</span>的倍數</span></p>
<p><span style="color: #0000ff;">- 視覺物件<span style="text-decoration: underline;">不要</span><span style="text-decoration: underline;">有</span>3D, 漸層, 陰影, 透視效果</span></p>
<p><span style="color: #0000ff;">- 不要有框線, 表格, 圓角</span></p>
<p><span style="color: #0000ff;">- 除了Application Bar 外, 畫面上不要有其他功能Button (可以有Link)</span></p>
<p><span style="color: #0000ff;">- 所有可按的Link 要實作<span style="text-decoration: underline;">Tilt</span><span style="text-decoration: underline;">效</span><span style="text-decoration: underline;">果</span> (可以參考: <a title="How to: Use the Control Tilt Effect for Windows Phone" href="http://msdn.microsoft.com/es-ES/library/windowsphone/develop/ff941108(v=vs.92).aspx" target="_blank">How to: Use the Control Tilt Effect for Windows Phone</a>)</span></p>
<p><span style="color: #0000ff;">- 背景圖要跟App主題有關(沉浸式體驗)</span></p>
<p><span style="color: #0000ff;">- 詳細資訊頁面透過手指左右滑動切換上下一則</span></p>
</li>
<li>
<p><span style="color: #333399;"><strong>效能 ( 5則 )</strong></span></p>
<p><span style="color: #0000ff;">- 進App 看到資料要3秒內,</span><span style="color: #0000ff;">最多不超過5秒</span></p>
<p><span style="color: #0000ff;">- 資料Load時要有Loading中畫面</span></p>
<p><span style="color: #0000ff;">- 是否採用資料快取</span></p>
<p><span style="color: #0000ff;">- 使用者沒有動作, 沒有Load 資料時, </span><span style="color: #0000ff;">CPU 使用率不能超過30% (避免影響電池效能)</span></p>
<p><span style="color: #0000ff;">- 確認是否可執行於256 MB RAM 裝置</span><span style="color: #0000ff;">(針對256 MB RAM 裝置可自動關閉部分耗系統資源功能)</span></p>
</li>
<li>
<p><span style="color: #333399;"><strong>穩定性( 2 則)</strong></span></p>
<p><span style="color: #0000ff;">- 在<span style="text-decoration: underline;">網路</span>,<span style="text-decoration: underline;">GPS </span><span style="text-decoration: underline;">裝置</span>關閉狀況下要能提供使用者適當提示與說明</span></p>
<p><span style="color: #0000ff;">- 切換到其他App, 再切回原App 頁面不能亂掉或空白(App是否能從Tombstone恢復)</span></p>
</li>
</ul>
<p>&nbsp;</p>
<p>以上大概是幾個App被檢視品質時的重點, 也是你在官方App中幾乎都會看到的特色. &nbsp;因此如果你想知道你的App 在微軟審查人員眼中有幾分, 大概可以用下面的方式:<br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6663.16574772%202.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6663._16574772_-2.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/43/60/6663.16574772%202.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-43-60/6663._16574772_-2.jpg" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>也就是前面16條規則各乘以五, 如果都有做到, 那這個App 就幾乎有80 分, 之後再加上有沒有實作動態磚, 由於動態磚一直是被微軟非常重視的特色, 所以價值20分.</p>
<p>在不考慮App功能的實用度情況下, 透過上面的公式, 可以很快算出一個App的品質 大約在微軟的評價中有幾分.</p>
<p>你算過你的App大概有幾分了嗎? 小小提醒, 這個分數是影響App在Windows Phone市集顯示的排名順序因子之一.</p>
<p>&nbsp;</p>
<p>註1: 以上特性不適用於遊戲類App<br /><br />註2: 同主題簡報請參考:&nbsp;<a href="http://www.slideshare.net/zobeide/windows-phone-app-15326335">http://www.slideshare.net/zobeide/windows-phone-app-15326335</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Windows Phone App 必備的資料快取 Framework - AgFx</title>
      <link>https://docs.microsoft.com/archive/blogs/hermanwu/windows-phone-app-framework-agfx</link>
      <pubDate>Mon, 03 Sep 2012 09:07:01 GMT</pubDate>
      <dc:creator><![CDATA[HermanWu]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/hermanwu/2012/09/03/windows-phone-app-framework-agfx/</guid>
      <description><![CDATA[在開發 App 程式時, 程式的反應速度是影響使用者操作體驗重要的因素. 尤其是行動裝置常處在網路不穩的環境 (如捷運人多時, 或3G...]]></description>
      <content:encoded><![CDATA[<p>在開發 App 程式時, 程式的反應速度是影響使用者操作體驗重要的因素. 尤其是行動裝置常處在網路不穩的環境 (如捷運人多時, 或3G 訊號較弱時)&nbsp;.</p>
<p>為了確保使用者在來回操作App的過程中, 不需要反覆的存取網路上相同的資料, 因此在這邊推薦給Windows Phone 的開發者,&nbsp; <a title="AgFx" href="http://agfx.codeplex.com/" target="_blank">AgFx </a>這個相當棒的資料快取 Framework.</p>
<p>原作者已經提供一個相當清楚的<a title=" Step by Step Sample" href="http://agfx.codeplex.com/wikipage?title=Tutorial&amp;referringTitle=Home"> Step by Step &nbsp;Sample</a>.</p>
<p>主要有五個步驟:</p>
<p><strong>1. 分析你的資料來源:</strong> 通常是確認資料來源如何解析, 筆者通常會先試著寫程式解析看看. 例如資料源是Json 就用 <a title="Json.NET" href="http://james.newtonking.com/pages/json-net.aspx" target="_blank">Json.Net</a>&nbsp;先Parse&nbsp;成 Data Object. XML&nbsp;.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;eg.&nbsp;&nbsp;&nbsp;&nbsp;MyDataObject myDataObject= (MyDataObject )JsonConvert.DeserializeObject(contents, typeof(MyDataObject ));</p>
<p>&nbsp;</p>
<p><strong>2.&nbsp;找出要快取資料的Key&nbsp;值</strong>: 也就是系統用來辨識這個資料是不是已經存在快取資料區中的唯一依據.</p>
<p>&nbsp;&nbsp;&nbsp; Key 值建議是string(如果是複雜的Key值, 不是string 的話, 要額外實作一個ToString()的方法) , 同時宣告一個繼承&nbsp;AgFx LoadContext 物件的 LoadContext物件.&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; public class MyLoadContext: LoadContext<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string KeyValue{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (string)Identity;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public MyLoadContext(string keyValue)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : base(KeyValue) {<br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }</p>
<p><strong>3. 第三部會需要定義 ViewModel 物件:</strong> &nbsp;也就是要透過AgFx 來協助做快取的資料物件. 這個物件需要繼承 AgFx 的 ModelItemBase 物件</p>
<p>&nbsp;<span class="kwrd">public</span> <span class="kwrd">class</span> MyViewModel: ModelItemBase&lt;MyLoadContext&gt;&nbsp;&nbsp; {</p>
<p><span class="kwrd">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public</span> MyViewModel()&nbsp; {&nbsp; }&nbsp;&nbsp;</p>
<p><span class="kwrd">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public</span> MyViewModel(<span class="kwrd">string</span> keyValue): <span class="kwrd">base</span>(<span class="kwrd">new</span> MyLoadContext(keyValue))&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ........</p>
<p>}</p>
<p>&nbsp;</p>
<p><strong>4. 第四部份是決定資料快取的方式</strong>: AgFx 提供四種資料快取的部分&nbsp;</p>
<p><strong>CachePolicy.NoCache : </strong>不做快取</p>
<p><strong>CachePolicy.ValidCacheOnly :</strong> 僅使用未過期的快取資料, 這是確保不會顯示過期資料最普遍的設定</p>
<p><strong>CachePolicy.CacheThenRefresh:&nbsp;</strong>先顯示快取資料, 但如果資料過期了, 馬上從網路取得更新資料並更新UI.&nbsp;如果希望App 可以先顯示資料給使用者, 然後再更新過期資料, &nbsp;這是最常用的設定.</p>
<p><strong>CachePolicy.AutoRefresh</strong>&nbsp;: 當資料過期時, 自動更新資料.</p>
<p>宣告資料快取的範例如下:</p>
<p>[CachePolicy(CachePolicy.CacheThenRefresh, 60*15)]&nbsp; // 資料快取15分鐘<br />&nbsp;&nbsp;&nbsp; <span class="kwrd">public</span> <span class="kwrd">class</span> MyDataVM: ModelItemBase&lt;MyLoadContect&gt;{&hellip;}</p>
<p>&nbsp;</p>
<p><strong>5.第五步驟是 取得資料</strong>: 為了使用AgFx的快取, 所有資料都必須透過 實作 AgFx 的 IDataLoader 介面的DataLoader 物件去讀取資料.</p>
<p>&nbsp;&nbsp; DataLoader 物件通常是宣告再ViewModel物件中. 在&nbsp;IDataLoader 介面裏頭主要有兩個Method:</p>
<p>&nbsp;<span class="kwrd">public</span> LoadRequest GetLoadRequest(MyLoadContext loadContext, Type objectType)<br />{....}</p>
<p><span class="kwrd">public</span> <span class="kwrd">object</span> Deserialize(MyLoadContext loadContext, Type objectType, System.IO.Stream stream)<br />{ ....}</p>
<p>完成這幾個部分後, 就可以透過 DataManager 物件去載入資料:</p>
<p>DataManager.Current.Load&lt;MyDataVM&gt;(<span class="str">"keyValue"</span>);</p>
<p>&nbsp;</p>
<p>AgFx 將會跟去Cache Policy 決定需不需要從網路讀取新的資料.</p>
<p>在測試過程中, 你也可以開 Visual Studio 的OutPut 視窗 來檢視 快取運作的狀況.</p>
<p>以上很快介紹 AgFx 的資料快取Framework. 希望大家有機會都可盡量把資料快取加入App 中, 可以讓你的App帶給使用者更順暢的體驗.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
  </channel>
</rss>