<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Windows Phone Development</title>
	<atom:link href="http://winphonedev.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://winphonedev.de</link>
	<description>Mobility on the run</description>
	<lastBuildDate>Wed, 22 May 2013 06:21:31 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Nokia Remote Device Access</title>
		<link>http://winphonedev.de/2013/05/22/nokia-remote-device-access/</link>
		<comments>http://winphonedev.de/2013/05/22/nokia-remote-device-access/#comments</comments>
		<pubDate>Wed, 22 May 2013 06:09:00 +0000</pubDate>
		<dc:creator>Peter Nowak</dc:creator>
				<category><![CDATA[Nokia]]></category>
		<category><![CDATA[wp8dev]]></category>

		<guid isPermaLink="false">http://winphonedev.de/?p=18199</guid>
		<description><![CDATA[Relativ still und fast heimlich wurde auf den Entwicklerseiten von Nokia ein Remote Device Access veröffentlicht. Darüber erhält man einen zeitlich limitierten Zugriff auf ein physische Nokia Gerät, sei es nun mit Series40 oder Windows Phone. Zugegriffen wird dabei über eine &#8230; <a href="http://winphonedev.de/2013/05/22/nokia-remote-device-access/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Relativ still und fast heimlich wurde auf den Entwicklerseiten von Nokia ein Remote Device Access veröffentlicht. Darüber erhält man einen zeitlich limitierten Zugriff auf ein physische Nokia Gerät, sei es nun mit Series40 oder Windows Phone. Zugegriffen wird dabei über eine kleine Java Anwendung. Bei den Geräten handelt es sich wirklich um physische Geräte, welche in Finnland via USB angeschlossen sind.<br />
Es gibt dabei ein tägliches Limit von 8 Stunden, die man insgesamt für alle angebotenen Geräte verwenden darf.</p>
<p>Zugriff auf diese Tools erhält man über <a title="https://www.developer.nokia.com/Devices/Remote_device_access/" href="https://www.developer.nokia.com/Devices/Remote_device_access/">https://www.developer.nokia.com/Devices/Remote_device_access/</a>.</p>
<p><a href="http://winphonedev.de/wp-content/uploads/2013/05/RDA.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="RDA" alt="RDA" src="http://winphonedev.de/wp-content/uploads/2013/05/RDA_thumb.png" width="397" height="484" border="0" /></a></p>
<p>Wählt man nun <em>Remote Device Access</em> aus und hat sich zuvor mit einem gültigen Nokia Developer Account eingeloggt, so erhält man folgende Darstellung nun angezeigt.</p>
<p><a href="http://winphonedev.de/wp-content/uploads/2013/05/devices.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="devices" alt="devices" src="http://winphonedev.de/wp-content/uploads/2013/05/devices_thumb.png" width="957" height="772" border="0" /></a></p>
<p>Über die hier dargestellten Geräte sind weitaus mehr in der Liste  vorhanden. Man sieht darüber hinaus den Softwarestand, wie auch die zugehörige Mobilfunknummern. Die hier dargestellte Liste ist natürlich nicht vollständig.</p>
<p>Wenn man ein entsprechendes Gerät für den Zugriff ausgesucht hat, kann man die Reservierung ganz simpel auswählen und Starten.</p>
<p><a href="http://winphonedev.de/wp-content/uploads/2013/05/Selected-Device.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Selected Device" alt="Selected Device" src="http://winphonedev.de/wp-content/uploads/2013/05/Selected-Device_thumb.png" width="314" height="356" border="0" /></a></p>
<p>Es wird bei Bestätigung von &#8220;Start&#8221; eine Java Anwendung heruntergeladen und ausgeführt, in welcher ein digitales Zertifikat akzeptiert werden muss.</p>
<p><a href="http://winphonedev.de/wp-content/uploads/2013/05/image.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" alt="image" src="http://winphonedev.de/wp-content/uploads/2013/05/image_thumb.png" width="532" height="364" border="0" /></a></p>
<p>Danach ist folgende Anwendungsoberfläche sichtbar.</p>
<p><a href="http://winphonedev.de/wp-content/uploads/2013/05/image1.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" alt="image" src="http://winphonedev.de/wp-content/uploads/2013/05/image_thumb1.png" width="1038" height="875" border="0" /></a></p>
<p>Über diese Oberfläche lässt sich nun das Gerät steuern. Zugegeben – entsprechend der zur Verfügung stehenden Bandbreite kann das Livebild vom Gerät sich verzögern / dabei ruckeln. Dafür ist es aber trotzdem ein physisches Gerät.</p>
<p>Man kann aber nicht nur auf das Dateisystem zugreifen, sondern auch Apps als XAP-Datei deployen, Screenshots anfertigen, sowie auch den Bildschirm filmen (installierten XVID Codec vorausgesetzt) und mit Sprache zu Schulungszwecken versehen. Auch die Qualität der übertragenen Oberfläche lässt sich anpassen. Verringert man diese auf die Stufe “1”, so wird nur noch ein Bild in Graustufen übertragen – dafür jedoch schneller.</p>
<p>Wird der Emulator nicht weiter benötigt, kann man diesen Schließen und die nicht genutzte Zeit wird einem für diesen Tag wieder gut geschrieben. Darüber hinaus werden alle auf dem Gerät vorgenommenen Änderungen gelöscht / zurückgesetzt.</p>
<p>Meine persönliche Meinung: Zwar ist die Verbindung ein wenig langsam, aber man kann vieles damit machen, was einem sonst nicht ermöglicht wird!</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwinphonedev.de%2F2013%2F05%2F22%2Fnokia-remote-device-access%2F&amp;title=Nokia%20Remote%20Device%20Access" id="wpa2a_2"><img src="http://winphonedev.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://winphonedev.de/2013/05/22/nokia-remote-device-access/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Azure Mobile Services &#8211; Busy Indicator f&#252;r Windows Phone 8 Apps</title>
		<link>http://winphonedev.de/2013/05/21/windows-azure-mobile-services-busy-indicator-fr-windows-phone-8-apps/</link>
		<comments>http://winphonedev.de/2013/05/21/windows-azure-mobile-services-busy-indicator-fr-windows-phone-8-apps/#comments</comments>
		<pubDate>Tue, 21 May 2013 16:02:15 +0000</pubDate>
		<dc:creator>Peter Nowak</dc:creator>
				<category><![CDATA[Windows Azure Mobile Services]]></category>
		<category><![CDATA[wp8dev]]></category>

		<guid isPermaLink="false">http://winphonedev.de/?p=18102</guid>
		<description><![CDATA[Im dritten Teil seiner Serie zu den Windows Azure Live Services zeigt Sascha Dittmann, wie man einen Busy Indicator in der Windows Store App bereitstellt, also einen Indikator der dem Anwender gegenüber optisch mitteilt, dass die App “beschäftigt” ist. Hierfür &#8230; <a href="http://winphonedev.de/2013/05/21/windows-azure-mobile-services-busy-indicator-fr-windows-phone-8-apps/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Im <a href="http://www.sascha-dittmann.de/post/Windows-Azure-Mobile-Services-Busy-Indicator.aspx">dritten Teil</a> seiner Serie zu den Windows Azure Live Services zeigt <a href="http://www.sascha-dittmann.de/">Sascha Dittmann</a>, wie man einen <em>Busy Indicator </em>in der Windows Store App bereitstellt, also einen Indikator der dem Anwender gegenüber optisch mitteilt, dass die App “beschäftigt” ist. Hierfür implementiert er eine von der <a href="http://msdn.microsoft.com/en-us/library/system.net.http.delegatinghandler.aspx"><em>DelegatingHandler</em>-Klasse</a> ableitende Klasse, die konkret darüber informiert, ob nun mit den Windows Azure Mobile Service interagiert wird, oder nicht. Findet eine Kommunikation statt, so wird das Feld <span style="font-family: Consolas;">_busyIndictator</span> gesetzt und die registrierte Methode im ViewModel ausgeführt, welche wiederum die Eigenschaft <span style="font-family: Consolas;">IsBusy </span>setzt, wodurch der Zustand des gebundenen Steuerelements <span style="font-family: Consolas;">ProgressRing</span> geändert wird.</p>
<h2>ViewModel</h2>
<p>Zufälligerweise wurde diese Funktionalität bereits <a href="http://winphonedev.de/2013/05/16/windows-azure-mobile-services-crud-fur-windows-phone-8-apps/">im ersten Teil</a> der Konvertierung hinzugefügt. Dabei fand keinerlei Austausch mit Sascha zu diesem Thema stand; auch wurde der Quellcode vorab nicht gelesen, so dass nun 2 Lösungsansätze existieren, die ziemlich identisch sind. So besitzt das ViewModel nicht die Eigenschaft <span style="font-family: Consolas;">IsBusy</span>, sondern <span style="font-family: Consolas;">Progressing</span>. Über den Namen ließe sich wirklich streiten, jedoch ist der Zweck der Eigenschaft der Selbe: Es soll optisch den Anwender gegenüber angezeigt werden, dass eine Verarbeitung der Daten stattfindet. Dies soll ebenfalls mittels Datenbindung stattfinden. Dazu jedoch gleich mehr.</p>
<p>Den Ansatz, den hier von Sascha gewählt wurde, finde ich persönlich nicht vollständig. Zwar ist es für seinen Fall richtig darzustellen, dass die Kommunikation mit dem Server stattfindet, doch mein Wunsch ist es darüber hinaus, auch die clientseitige Verarbeitung zu erfassen. Zwar dürfte sich der Unterschied generell nur im Millisekundenbereich abspielen, doch wenn man sich einmal die <span style="font-family: Consolas;">LoadMessages</span>-Methode im Detail anschaut, sieht man hier neben der Kommunikation eine weitere Verarbeitung der abgerufenen Nachrichten. Bei einer größeren Anzahl von Nachrichten (man denke hier beispielsweise nur einmal an WhatsApp), würde man eine potentiell lange Verarbeitungszeit mit der hier dargestellten Methode ebenfalls erfassen.</p>
<pre class="csharpcode">...
        <span class="kwrd">private</span> async <span class="kwrd">void</span> LoadMessages()
        {
            Progressing = <span class="kwrd">true</span>;
            RefreshCommand.IsEnabled = <span class="kwrd">false</span>;

            var error = String.Empty;
            <span class="kwrd">try</span>
            {

                var newMessages = await _messagesTable
                                            .OrderByDescending(m =&gt; m.CreatedAt)
                                            .Take(MaxMessageCount)
                                            .ToListAsync();

                <span class="rem">// Perform a simple sync of the existing list using the Ids.</span>
                var matched = <span class="kwrd">new</span> Queue&lt;Message&gt;();
                var removals = <span class="kwrd">new</span> Queue&lt;Message&gt;();

                <span class="kwrd">foreach</span> (var item <span class="kwrd">in</span> Messages)
                {
                    var didMatch = <span class="kwrd">false</span>;

                    <span class="kwrd">foreach</span> (var newMessage <span class="kwrd">in</span> newMessages)
                    {
                        <span class="kwrd">if</span> (newMessage.Id == item.Id)
                        {
                            matched.Enqueue(newMessage);
                            didMatch = <span class="kwrd">true</span>;
                            <span class="kwrd">break</span>;
                        }
                    }

                    <span class="rem">// If no match, we should remove from Items collection</span>
                    <span class="kwrd">if</span> (!didMatch)
                    {
                        removals.Enqueue(item);
                    }

                    <span class="rem">// remove new items as quickly as soon as they're matched </span>
                    <span class="kwrd">while</span> (matched.Count &gt; 0)
                    {
                        newMessages.Remove(matched.Dequeue());
                    }
                }

                <span class="kwrd">while</span> (removals.Count &gt; 0)
                {
                    Messages.Remove(removals.Dequeue());
                }

                <span class="rem">// add any remaining newItems - the must be genuinely new items</span>
                <span class="kwrd">foreach</span> (var newMessage <span class="kwrd">in</span> newMessages)
                {
                    var pos = 0;
                    <span class="kwrd">foreach</span> (var message <span class="kwrd">in</span> Messages)
                    {
                        <span class="kwrd">if</span> (newMessage.CreatedAt.CompareTo(message.CreatedAt) &lt; 0)
                            pos++;
                        <span class="kwrd">else</span>
                            <span class="kwrd">break</span>;
                    }
                    Messages.Insert(pos, newMessage);
                }
            }
            <span class="kwrd">catch</span> (Exception ex)
            {
                error = ex.Message;
            }
            <span class="kwrd">if</span> (!String.IsNullOrEmpty(error))
                MessageBox.Show(error,<span class="str">"Error while loading messages"</span>,MessageBoxButton.OK);
            RefreshCommand.IsEnabled = <span class="kwrd">true</span>;
            Progressing = <span class="kwrd">false</span>;
        }</pre>
<style type="text/css"><!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--></style>
<p>Die Methode ist somit ganz einfach: <span style="font-family: Consolas;">LoadMessages</span>, <span style="font-family: Consolas;">SendMessage</span> und <span style="font-family: Consolas;">RemoveSelectedMessage</span> erhalten eine zusätzliche Zeile am Anfang und am Ende der Methode, worin der Wert in <span style="font-family: Consolas;">Progressing</span> jeweils geändert wird. Dies ist simpel und effektiv.</p>
<h2>View</h2>
<p>Zur Darstellung, dass die App beschäftigt ist, wird ein <span style="font-family: Consolas;">ProgressIndicator</span> verwendet. Dieser ist ähnlich zum <span style="font-family: Consolas;">ProgressRing</span>.</p>
<p>Die Deklaration, inklusive Datenbindung, sieht in der <span style="font-family: Consolas;">MainPage.xaml</span>, wie folgt aus.</p>
<pre class="csharpcode">&lt;phone:PhoneApplicationPage
    x:Class=<span class="str">"LetsTalkWP8.MainPage"</span>
...
    shell:SystemTray.IsVisible=<span class="str">"True"</span>&gt;

    &lt;shell:SystemTray.ProgressIndicator&gt;
        &lt;shell:ProgressIndicator IsIndeterminate=<span class="str">"true"</span> x:Name=<span class="str">"indicator"</span> 
                IsVisible=<span class="str">"{Binding Progressing}"</span> Text=<span class="str">"Progressing"</span> /&gt;
    &lt;/shell:SystemTray.ProgressIndicator&gt;
...</pre>
<p>Somit besitzt die App nun eine optische Anzeige in der oberen Systemleiste, wenn eine Verarbeitung der Daten stattfindet. Ist diese aktiv, so werden animierte durchlaufende Punkte mit dem Text “Progressing” dargestellt.</p>
<p>Den Sourcecode dieser App finden Sie <a href="https://github.com/PeterNowakDe/">hier</a> unter GitHub im Ordner <a href="https://github.com/PeterNowakDe/LetsTalk/tree/master/01_LetsTalk_WP8_CRUD">01_LetsTalk_WP8_CRUD</a>.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwinphonedev.de%2F2013%2F05%2F21%2Fwindows-azure-mobile-services-busy-indicator-fr-windows-phone-8-apps%2F&amp;title=Windows%20Azure%20Mobile%20Services%20%E2%80%93%20Busy%20Indicator%20f%C3%BCr%20Windows%20Phone%208%20Apps" id="wpa2a_4"><img src="http://winphonedev.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://winphonedev.de/2013/05/21/windows-azure-mobile-services-busy-indicator-fr-windows-phone-8-apps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Phone Blue &#8211; Developer API</title>
		<link>http://winphonedev.de/2013/05/21/windows-phone-blue-developer-api/</link>
		<comments>http://winphonedev.de/2013/05/21/windows-phone-blue-developer-api/#comments</comments>
		<pubDate>Tue, 21 May 2013 15:35:26 +0000</pubDate>
		<dc:creator>Peter Nowak</dc:creator>
				<category><![CDATA[Windows Phone Blue]]></category>
		<category><![CDATA[wp8dev]]></category>

		<guid isPermaLink="false">http://winphonedev.de/?p=18226</guid>
		<description><![CDATA[It is still a couple of month until we will here anything about any API regarding a Windows Phone Blue release. But today I interestingly stumbled over this post by Justin Angel, where he takes a sneak peak on the &#8230; <a href="http://winphonedev.de/2013/05/21/windows-phone-blue-developer-api/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a title="http://www.plaffo.com/2013/02/rumor-windows-phone-blue-potrebbe-ritardare-ed-essere-disponibile-solo-nel-2014/" href="http://www.plaffo.com/2013/02/rumor-windows-phone-blue-potrebbe-ritardare-ed-essere-disponibile-solo-nel-2014/"><img style="background-image: none; float: left; padding-top: 0px; padding-left: 0px; margin: 0px 20px 0px 0px; display: inline; padding-right: 0px; border-width: 0px;" title="windows-phone-blue" alt="windows-phone-blue" src="http://winphonedev.de/wp-content/uploads/2013/05/windows-phone-blue.png" width="244" height="184" align="left" border="0" /></a>It is still a couple of month until we will here anything about any API regarding a Windows Phone Blue release. But today I interestingly stumbled over <a href="http://justinangel.net/Win81APIs">this post</a> by Justin Angel, where he takes a sneak peak on the API, which he found on a leaked Win 8.1 version that already is a couple of months old, but nevertheless interesting to see, what could be possibly in this API for Phone developers. This is my personal information, where I’m putting together assumptions – nothing more, nothing less.</p>
<p>(Picture Source: <a title="http://www.plaffo.com/2013/02/rumor-windows-phone-blue-potrebbe-ritardare-ed-essere-disponibile-solo-nel-2014/" href="http://www.plaffo.com/2013/02/rumor-windows-phone-blue-potrebbe-ritardare-ed-essere-disponibile-solo-nel-2014/">http://www.plaffo.com/2013/02/rumor-windows-phone-blue-potrebbe-ritardare-ed-essere-disponibile-solo-nel-2014/</a>)</p>
<h4>Why do I think I’m able to do these assumptions?</h4>
<p>From what we learned with Windows Phone 8 is, that the Kernel is already running a Windows NT Kernel, and not, like before, a Windows CE Kernel. This means, that Windows 8 and Windows Phone 8 already have a common base to share. It seems to me more than obvious, that streamlining both plattforms is one designated goal to achieve, to reduce costs for developing, maintaing and especially testing Windows Phone. Especially having a different UI Layer (WP8: still Silverlight, W8: WinRT XAML) makes it more than hard creating Apps targeting both plattforms directly. This makes me believe, that the UI Layer will be shared here as well and my guess is, that it will happen with the “Blue Wave”.</p>
<h4>Disclaimer: Please don’t sue me</h4>
<p>The article is written to share personal opinion based on <a href="http://justinangel.net/Win81APIs">this post</a> . I have no insider information what-so-ever on Windows 8.1, Windows Phone Blue, or any related technology.</p>
<p>This article compromises my personal conclusions from “leaked” information. No NDAs were harmed in the making of this article. I do not have and never had any pre-release access the components mentioned in this article. It was written and researched on my own time and has no affiliation with my employer.</p>
<h4>The Base</h4>
<p>Justin already dissected the parts in for the Windows 8.1 API, where I’ll only focus on the parts, that I think could be in the package for Windows Phone Developers. Therefore I’m just commenting my thoughts on the ToC.</p>
<ol>
<li>Bluetooth 4.0 RfComm and GATT support<br />
With Windows 8 and Windows Phone 8, sharing Information between Modern UI Style Apps is impossible, as both share a different <em>PeerFinder </em>implementation. Therefore I guess, that App2App Communication between W8 and WP8 will be enabled.</li>
<li>VPN support for Modern UI apps<br />
This is a number one feature that Windows Phone Business Users are demanding since Windows Phone 7. So, if it is likely to come to Windows 8.1, I think it will come over to Windows Phone Blue as well.</li>
<li>Support for any External / USB device<br />
As there is already existing Support for Storage Cards within Windows Phone 8, my guess is, that this will be expanded for Windows Phone Blue as well. Having a Storage Card today working only with Readonly Access for registered filetypes doesn’t sound feasible anymore.</li>
<li>Camera: Low-lag cameras / HDR<br />
As Nokia is actually showing more and more devices, which have an incredible camera included, I guess that this feature might come with Windows Phone Blue as well</li>
<li>New App Type: GeoFenced activation<br />
If this comes to Windows 8.1, my best guess is, that this will be included in Windows Phone Blue as well. This is a feature, that a lot of Mobile Device Management (MDM) solutions offer, so having this out of the box would make Windows Phone Blue more attractive to Business users, who want to have such a control.</li>
<li>New App Type: Lock screen call<br />
Whoever tried to use Skype on Windows Phone 8 ran into this specific problem, so I’m guessing that this would be included as well for enhancing the user experience for those apps!</li>
</ol>
<p>I hope sharing this ideas helps to get an idea, where the journey with Windows Phone Blue could take us.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwinphonedev.de%2F2013%2F05%2F21%2Fwindows-phone-blue-developer-api%2F&amp;title=Windows%20Phone%20Blue%20%E2%80%93%20Developer%20API" id="wpa2a_6"><img src="http://winphonedev.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://winphonedev.de/2013/05/21/windows-phone-blue-developer-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft App Developer Days in Berlin als Special Edition</title>
		<link>http://winphonedev.de/2013/05/21/microsoft-app-developer-days-in-berlin-als-special-edition/</link>
		<comments>http://winphonedev.de/2013/05/21/microsoft-app-developer-days-in-berlin-als-special-edition/#comments</comments>
		<pubDate>Tue, 21 May 2013 15:33:00 +0000</pubDate>
		<dc:creator>Peter Nowak</dc:creator>
				<category><![CDATA[Nokia]]></category>
		<category><![CDATA[wp8dev]]></category>

		<guid isPermaLink="false">http://winphonedev.de/?p=18109</guid>
		<description><![CDATA[Am 11. Juni findet in Berlin der “App Developer Day – Nokia Lumia Edition” statt. (Anmeldung hier) Das interessante daran ist, dass man hier nicht nur, wie sonst, die Windows Phone 8 Features für Entwickler präsentiert (wie in der üblichen &#8230; <a href="http://winphonedev.de/2013/05/21/microsoft-app-developer-days-in-berlin-als-special-edition/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Am 11. Juni findet in Berlin der “App Developer Day – Nokia Lumia Edition” statt. (Anmeldung <a href="https://msevents.microsoft.com/cui/EventDetail.aspx?culture=de-DE&#038;EventID=1032554218&#038;IO=ZvKlESeB1sTu6c%2f6u%2bDNFg%3d%3d">hier</a>)</p>
<p>Das interessante daran ist, dass man hier nicht nur, wie sonst, die Windows Phone 8 Features für Entwickler präsentiert (wie in der üblichen “App Developer Day”-Reihe), sondern insbesondere auf die Lumia eigene Entwicklungsbibliothek und Dienste eingegangen wird.</p>
<p>Ich werde es persönlich leider nicht schaffen dort hin zu kommen, aber wer die Zeit findet, sollte ruhig hier einmal vorbeischauen – falsch machen kann man da nichts.</p>
<p>Hier die zugehörige Agenda:</p>
<p>9:30       Nokia Lumia mit Windows Phone 8: neue Features für Entwickler<br />
10:30     Kaffeepause<br />
11:00     Location Based Services mit HERE-Karten<br />
12:00     Mittagspause<br />
13:00     Nutzung der PureView-Technologie über das Kamera-API<br />
14:00     Neue Anwendungsfälle dank NFC und Bluetooth<br />
15:00     Kaffeepause<br />
15:30     Zugang zu Lumia Smartphones für Entwickler und Lumia Developer’s Library<br />
16:30     Q&#038;A<br />
17:00     Ende der Veranstaltung</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwinphonedev.de%2F2013%2F05%2F21%2Fmicrosoft-app-developer-days-in-berlin-als-special-edition%2F&amp;title=Microsoft%20App%20Developer%20Days%20in%20Berlin%20als%20Special%20Edition" id="wpa2a_8"><img src="http://winphonedev.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://winphonedev.de/2013/05/21/microsoft-app-developer-days-in-berlin-als-special-edition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Azure Mobile Services &#8211; CRUD für Windows Phone 8 Apps</title>
		<link>http://winphonedev.de/2013/05/16/windows-azure-mobile-services-crud-fur-windows-phone-8-apps/</link>
		<comments>http://winphonedev.de/2013/05/16/windows-azure-mobile-services-crud-fur-windows-phone-8-apps/#comments</comments>
		<pubDate>Thu, 16 May 2013 16:11:00 +0000</pubDate>
		<dc:creator>Peter Nowak</dc:creator>
				<category><![CDATA[Windows Azure Mobile Services]]></category>
		<category><![CDATA[Windows Phone Development]]></category>
		<category><![CDATA[wp8dev]]></category>

		<guid isPermaLink="false">http://winphonedev.de/?p=15611</guid>
		<description><![CDATA[Was sind Windows Azure Mobile Services eigentlich genau? Die Kurzantwort: Eigentlich ist es eine fehlende Komponente, die fast jeder App-Entwickler benötigt: Eine Serverkomponente. Dabei rede ich hier nicht explizit von Windows, iOS oder Android Apps, sondern Apps im Allgemeinen. Meist &#8230; <a href="http://winphonedev.de/2013/05/16/windows-azure-mobile-services-crud-fur-windows-phone-8-apps/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Was sind Windows Azure Mobile Services eigentlich genau?</p>
<p>Die Kurzantwort: Eigentlich ist es eine fehlende Komponente, die fast jeder App-Entwickler benötigt: Eine Serverkomponente. Dabei rede ich hier nicht explizit von Windows, iOS oder Android Apps, sondern Apps im Allgemeinen. Meist möchte man Informationen <span style="text-decoration: underline;"><strong>einfach</strong></span> auf einem Server ablegen, ohne sich um einen Server, Datencontainer und andere infrastrukturelle Themen Gedanken zu machen. Dabei kann dies schnell teuer werden, wenn man einen ganzen Server betreiben muss. Dabei ist ein App Entwickler meist kein Serveradmin, so dass die Einrichtung schnell kompliziert werden kann und man den Kernfokus verliert. Dabei setzten hier genau die Windows Azure Mobile Services. Sie bieten eine Möglichkeit Daten einfach in einer Datentabelle abzulegen, ohne sich um Themen, wie Betriebssystem o.ä. zu kümmern.<br />
Diese Dienste sind natürlich nicht nur auf Apps beschränkt – jede andere Technologie kann ebenfalls auf diese Dienste zugreifen, sofern Sie HTTP, REST und JSON unterstützt.<br />
<a href="http://www.sascha-dittmann.de/">Sascha Dittmann</a>, MVP für Windows Azure, began im April die Windows Azure Mobile Services näher zu beleuchten. So finden sich detaillierte Informationen, welche Technik bei den Mobile Services eingesetzt wird und welche Funktionen einem Entwickler zur Verfügung gestellt werden und wie man einen solchen Dienst mit ein paar einfachen Mausklicks erstellen kann, in diesem von ihm erstellten <a href="http://www.sascha-dittmann.de/post/Windows-Azure-Mobile-Services-Die-Starthilfe-fuer-App-Entwickler.aspx">Artikel</a>.</p>
<p>Um die Mobile Services und deren Funktionen beschreiben zu können, erstellt er eine aufeinander aufbauende Nachrichten-App für Windows 8 App namens “Let’s Talk”, angefangen mit den CRUD-Operationen, über Eingabevalidierung auf Serverseite, hin zu einer Windows Account Authentifizierung. Die Serie der Artikel findet man <a href="http://www.sascha-dittmann.de/?tag=/App+Entwicklung">hier</a>, der Sourcecode ist <a href="https://github.com/SaschaDittmann/LetsTalk">hier</a> unter GitHub zu finden.</p>
<h2>Das Projekt</h2>
<p>Diese Reihe brachte mich auf die Idee, Saschas Spuren einfach mal zu folgen und eine “Let’s Talk WP8” App zu erstellen. Dies hat mehrere Gründe:</p>
<ul>
<li>Zu zeigen, wie eine Windows 8 App zu Windows Phone 8 “portiert” werden kann und dabei die Probleme aufzuzeigen</li>
<li>Zu zeigen, wie das Windows 8 UI Konzept unter Windows Phone 8 umgesetzt werden kann</li>
<li>Zu zeigen, wie einfach die Windows Azure Mobile Services zu verwenden sind.</li>
</ul>
<p>Den Sourcecode zur ersten Windows Phone 8 App finden Sie ebenfalls auf GitHub unter dem Fork <a title="https://github.com/PeterNowakDe/LetsTalk" href="https://github.com/PeterNowakDe/LetsTalk">https://github.com/PeterNowakDe/LetsTalk</a>.</p>
<h2>Die Konvertierung</h2>
<p>Die Konvertierung für sich genommen ist einfach, da in der Windows 8 App idealerweise MVVM für die Abstraktion der Schichten genutzt wird.</p>
<p>Eine ansprechende, an Windows Phone 8 angepasste UI zu entwerfen ist auch einfach. Schwieriger stellt sich da der vom System genutzte UI Layer dar, der eine simple Konvertierung nicht zulässt. So wird in der Windows 8 App der WinRT XAML Layer verwendet, während der XAML Layer von Windows Phone 8 immer noch auf Silverlight basiert. So sind viele Steuerelemente unterschiedlich, oder gar nicht erst vorhanden. Ist ein Steuerelement vorhanden, findet es sich dann meist auch in eine anderen Namespace wieder. Mehr dazu jedoch später.</p>
<p>Analog zur Windows 8 App wird in Visual Studio ein neues Projekt vom Typ <em>Windows Phone App</em> mit dem Namen  <em>LetsTalkWP8</em> erstellt.</p>
<p><a href="http://winphonedev.de/wp-content/uploads/2013/05/NewProject.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="NewProject" alt="NewProject" src="http://winphonedev.de/wp-content/uploads/2013/05/NewProject_thumb.png" width="834" height="578" border="0" /></a></p>
<p>Danach wird auch hier das Windows Azure Mobile Services SDK via <a href="http://nuget.org/">NuGet</a> hinzugefügt.</p>
<p>Da die <em>Pre-Release</em> Version in den Quick Start Apps verwendet wird, und sich diese erheblich von der <em>Stable</em> Version unterscheidet, sollte bei <a href="http://nuget.org/">NuGet</a> der &#8220;Pre&#8221; Parameter verwendet werden:</p>
<p><a href="http://winphonedev.de/wp-content/uploads/2013/05/NuGet.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="NuGet" alt="NuGet" src="http://winphonedev.de/wp-content/uploads/2013/05/NuGet_thumb.png" width="843" height="84" border="0" /></a></p>
<p>Das Ausführen des Kommandos fügt folgende Bibliotheken dem Windows Phone Projekt hinzu.</p>
<p><a href="http://winphonedev.de/wp-content/uploads/2013/05/packagemanagerconsole.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="packagemanagerconsole" alt="packagemanagerconsole" src="http://winphonedev.de/wp-content/uploads/2013/05/packagemanagerconsole_thumb.png" width="644" height="362" border="0" /></a></p>
<p>Neben der Bibliothek für die Mobile Services werden noch einige weitere Hilfsbibliotheken für beispielsweise HTTP Kommunikation, wie auch die JSON Bibliothek von Newtonsoft hinzugefügt.</p>
<h2>Model</h2>
<p>Wie bei MVVM üblich unterteilen sich die Schichten in die <em>View</em> (also die UI), dem <em>ViewModel</em> (der Verbindung zwischen UI und Model) und dem <em>Model</em> selbst, welche somit die Datenschicht darstellt.</p>
<p>Ein solches Model ist hier die Klasse <span style="font-family: Consolas;">Message</span>. Sie stellt die Nachrichten dar, die mit anderen Benutzern über den Server ausgetauscht werden. Dabei ist die Datenstruktur auch gleich die Datenstruktur, welche auf dem Server in Form einer Datentabelle angelegt wird .</p>
<p>Die Klasse besitzt folgende Felder und Eigenschaften:<br />
<a href="http://winphonedev.de/wp-content/uploads/2013/05/Message-Struktur.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Message-Struktur" alt="Message-Struktur" src="http://winphonedev.de/wp-content/uploads/2013/05/Message-Struktur_thumb.png" width="216" height="243" border="0" /></a></p>
<p>Die Klasse, wie auch die Eigenschaften werden mit Attributen dekoriert, wie man es auch vom <span style="font-family: Consolas;"><span style="font-family: Consolas;">DataContract</span> </span>her kennt.</p>
<p><a href="http://winphonedev.de/wp-content/uploads/2013/05/Message-Source.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Message-Source" alt="Message-Source" src="http://winphonedev.de/wp-content/uploads/2013/05/Message-Source_thumb.png" width="440" height="400" border="0" /></a></p>
<p>Das <span style="font-family: Consolas;">DataTable</span>-Attribut aus dem Namespace <span style="font-family: Consolas;">Microsoft.WindowsAzure.MobileServices </span>beschreibt, dass die Daten in einer Datentabelle mit dem Namen <span style="font-family: Consolas;">messages</span> abgelegt werden. Die Klasse leitet zusätzlich von der Helferklasse <span style="font-family: Consolas;">BindableBase</span> ab, die man im Ordner <span style="font-family: Consolas;">Common </span>wiederfindet. Diese abstrakte Klasse implementiert generisch die Schnittstelle für <span style="font-family: Consolas;">INotifyPropertyChanged</span>, um eine Zwei-Wege-Datenbindung mit der UI zu ermöglichen.</p>
<p>Die Eigenschaftsattribute der Klasse <span style="font-family: Consolas;">Message</span> beschreiben, ob diese in JSON serialisiert  (<span style="font-family: Consolas;">JsonProperty</span>), oder ignoriert (<span style="font-family: Consolas;">JsonIgnore</span>) werden sollen.</p>
<p>Das Konvertieren der Klasse zu Windows Phone 8 ist relativ überschaubar. So sind hier primär die Referenzen der Namespaces anzupassen.</p>
<p><a href="http://winphonedev.de/wp-content/uploads/2013/05/ModelChanges1.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="ModelChanges1" alt="ModelChanges1" src="http://winphonedev.de/wp-content/uploads/2013/05/ModelChanges1_thumb.png" width="925" height="183" border="0" /></a></p>
<p>Daraus resultiert auch eine weitere Änderung am Quellcode im Getter der Methode <span style="font-family: Consolas;">UserImage</span>. So wird aus:</p>
<p><span style="font-family: Consolas;">_userImage = new BitmapImage(new Uri(App.BaseUri, _userImageUrl));</span></p>
<p>einfach</p>
<p><span style="font-family: Consolas;">_userImage = new BitmapImage( new Uri(_userImageUrl,UriKind.RelativeOrAbsolute));</span></p>
<h2>ViewModel</h2>
<p>Als Basis für das <span style="font-family: Consolas;">MainPageViewModel</span> wird die Schnittstelle <span style="font-family: Consolas;">IMainPageViewModel</span> deklariert.</p>
<p><a href="http://winphonedev.de/wp-content/uploads/2013/05/IMainPageViewModel.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="IMainPageViewModel" alt="IMainPageViewModel" src="http://winphonedev.de/wp-content/uploads/2013/05/IMainPageViewModel_thumb.png" width="387" height="183" border="0" /></a></p>
<p>Diese Schnittstelle definiert neben einer <span style="font-family: Consolas;">ObservableCollection</span> vom Typ <span style="font-family: Consolas;">Message</span>, welche als Container für die dem Anwender darzustellenden Nachrichten verwendet wird, die Eigenschaften <span style="font-family: Consolas;">MessageText</span>. Sie dient als Container für den vom Benutzer eingegebenen Text. Die Eigenschaft <span style="font-family: Consolas;">SelectedMessage </span>beinhaltet die aktuell vom Anwender selektierte Nachricht.</p>
<p>Für die einzelnen CRUD-Operationen wird jeweils ein entsprechendes Objekt vom Typ <span style="font-family: Consolas;">DelegateCommand</span> definiert:</p>
<ul>
<li><span style="font-family: Consolas;">SendMessageCommand</span> zum Erstellen (Create) einer Nachricht in den Windows Azure Mobile Services.</li>
<li><span style="font-family: Consolas;">RefreshCommand</span> zum Aktualisieren / Lesen (Read) serverseitiger Nachrichten.</li>
<li><span style="font-family: Consolas;">DeleteMessage</span> zu Löschen (Delete) einer serverseitigen Nachricht</li>
<li>Eine Aktualisierung (Update) einer Nachricht findet hier keine Anwendung</li>
</ul>
<p>Die Schnittstelle wird im ViewModel <span style="font-family: Consolas;">MainPageViewModel</span> implementiert und hat folgende Struktur:</p>
<p><a href="http://winphonedev.de/wp-content/uploads/2013/05/MainPageViewModel-Struktur.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="MainPageViewModel-Struktur" alt="MainPageViewModel-Struktur" src="http://winphonedev.de/wp-content/uploads/2013/05/MainPageViewModel-Struktur_thumb.png" width="310" height="347" border="0" /></a></p>
<p>Zusätzlich leitet diese Klasse ebenfalls von <span style="font-family: Consolas;">BindableBase</span> für die vereinfachte Datenbindung ab.</p>
<p>Die Methoden <span style="font-family: Consolas;">LoadMessages</span>, <span style="font-family: Consolas;">SendMessage</span> und <span style="font-family: Consolas;">RemoveSelectedMessage</span> sind die implementierten Methoden zur Kommunikation mit den Windows Azure Mobile Services. Sie werden von den zugehörigen <span style="font-family: Consolas;">DelegateCommand</span>-Objekten verwendet.</p>
<p>Zusätzlich existiert ein Objekt vom Typ <span style="font-family: Consolas;">DispatcherTimer</span>, welcher alle 30 Sekunden die Nachrichten erneut vom Server liest. Der Einfachheit halber wurde hier auf eine Implementierung verzichtet, in welcher nur neue Nachrichten abgerufen werden.</p>
<p>Die Windows Azure Mobile Services Bibliothek wird primär im ViewModel verwendet. Dazu wird ein Objekt vom Typ <span style="font-family: Consolas;">MobileServiceClient</span> global definiert und im Konstruktor instanziiert.</p>
<pre class="csharpcode">        <span class="kwrd">private</span> <span class="kwrd">readonly</span> MobileServiceClient _mobileServiceClient;
        <span class="kwrd">private</span> <span class="kwrd">readonly</span> IMobileServiceTable _messagesTable;
...
        <span class="kwrd">public</span> MainPageViewModel()
        {
            _mobileServiceClient = <span class="kwrd">new</span> MobileServiceClient(
                App.MobileServiceUrl,
                App.MobileServiceKey);

            _messagesTable = _mobileServiceClient.GetTable();
...</pre>
<style type="text/css"><!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--></style>
<p>Als Parameter werden neben der von Windows Azure für den Dienst vergebene Url auch der ServiceKey übergeben. Diese sind als Konstanten in der App.xaml.cs definiert.</p>
<pre class="csharpcode">    <span class="kwrd">public</span> <span class="kwrd">partial</span> <span class="kwrd">class</span> App : Application
    {
        <span class="kwrd">public</span> <span class="kwrd">const</span> String MobileServiceUrl = <span class="str">""</span>;
        <span class="kwrd">public</span> <span class="kwrd">const</span> String MobileServiceKey = <span class="str">""</span>;
...</pre>
<p>Über das Objekt vom Typ <span style="font-family: Consolas;">IMobileServiceTable</span> wird auf die in den Windows Azure Mobile Services abgelegte Tabelle zugegriffen. Diese Referenz auf die Tabelle wird über die Methode <span style="font-family: Consolas;">GetTable</span> abgerufen und in <span style="font-family: Consolas;">_messageTable</span> abgelegt. Es dient primär zur Serverkommunikation.</p>
<pre class="csharpcode">...
        <span class="kwrd">private</span> async <span class="kwrd">void</span> LoadMessages()
        {
...
                var newMessages = await _messagesTable
                                            .OrderByDescending(m =&gt; m.CreatedAt)
                                            .Take(MaxMessageCount)
                                            .ToListAsync();

...
        }

        <span class="kwrd">private</span> async <span class="kwrd">void</span> SendMessage()
        {
...
            <span class="kwrd">try</span>
            {
                var message = <span class="kwrd">new</span> Message
                {
                    Body = MessageText,
                    CreatedAt = DateTime.Now,
                };

                MessageText = String.Empty;

                await _messagesTable.InsertAsync(message);
                Messages.Insert(0, message);
            }
            <span class="kwrd">catch</span> (Exception ex)
            {
                error = ex.Message;
            }
            <span class="kwrd">if</span> (!String.IsNullOrEmpty(error))
                MessageBox.Show(error, <span class="str">"Error while sending a message"</span>, MessageBoxButton.OK);
        }

        <span class="kwrd">private</span> async <span class="kwrd">void</span> RemoveSelectedMessage()
        {
            <span class="kwrd">if</span> (SelectedMessage == <span class="kwrd">null</span>) <span class="kwrd">return</span>;

            var error = String.Empty;
            <span class="kwrd">try</span>
            {
                var dialog = MessageBox.Show(<span class="str">"Do you really want to delete the message:\n"</span> + SelectedMessage.Body,
                    <span class="str">"Delete Message"</span>, MessageBoxButton.OKCancel);
                <span class="kwrd">if</span> (dialog == MessageBoxResult.OK)
                {
                    await _messagesTable.DeleteAsync(SelectedMessage);
                    Messages.Remove(SelectedMessage);
                    SelectedMessage = <span class="kwrd">null</span>;
                }
            }
            <span class="kwrd">catch</span> (Exception ex)
            {
                error = ex.Message;
            }
            <span class="kwrd">if</span> (!String.IsNullOrEmpty(error))
                MessageBox.Show(error, <span class="str">"Error while deleting a message"</span>, MessageBoxButton.OK);
        }</pre>
<p>Für die CRUD-Operationen Zum Löschen und Einfügen eines neuen serverseitigen Eintrags werden die asynchronen Methoden <span style="font-family: Consolas;">DeleteAsync</span> und <span style="font-family: Consolas;">InsertAsync</span> verwendet. An diese wird das zu zugehörige Objekt vom Typ <span style="font-family: Consolas;">Message</span> übergeben.</p>
<p>Die Operation wird auch direkt ausgeführt, so das die Änderungen auf dem Server sofort sichtbar sind.</p>
<p>Zum Abfragen der Daten wird eine LINQ-Abfrage genutzt. Diese wird entsprechend in eine REST-Abfrage beim Ausführen umgewandelt. So wird aus der oben dargestellten Abfrage, folgender Aufruf: GET <span style="font-family: Consolas;">https://yourinstance.azure-mobile.net/tables/messages?$orderby=createdAt%20desc&amp;$top=50</span>.</p>
<p>Die Unterschiede bei der Portierung sind auch hier eher gering. So werden folgende Namespaces gewechselt, bzw. hinzugefügt.</p>
<p><a href="http://winphonedev.de/wp-content/uploads/2013/05/ViewModel-Usings.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="ViewModel-Usings" alt="ViewModel-Usings" src="http://winphonedev.de/wp-content/uploads/2013/05/ViewModel-Usings_thumb.png" width="916" height="213" border="0" /></a></p>
<p>Darüber hinaus wird anstatt de asynchronen <span style="font-family: Consolas;">MessageDialog</span> hier noch die synchrone <span style="font-family: Consolas;">MessageBox</span> verwendet, da der <span style="font-family: Consolas;">MessageDialog</span> unter WP8 nicht zur Verfügung steht.</p>
<p>Eine Erweiterung ist die Eigenschaft <span style="font-family: Consolas;">Progressing</span>, die im Ursprungsprogramm nicht vorhanden ist. Diese wird in diese Klasse gesetzt, wenn eine Datenkommunikation mit dem Server stattfindet. Über einen Datenbindung wird dies dann über einen <span style="font-family: Consolas;">ProgressIndicator</span> dem Anwender gegenüber dargestellt, das einer Verarbeitung / Kommunikation aktuell stattfindet.</p>
<p>In <span style="font-family: Consolas;">RemoveSelectedMessage</span> wird nach <span style="font-family: Consolas;">Messages.Remove(SelectedMessage);</span> noch <span style="font-family: Consolas;">SelectedMessage=null</span> hinzugefügt. Dies verhindert einen Bug, wodurch eine bereits gelöschte Nachricht erneut gelöscht werden soll.</p>
<p>Im Ordner <em>ViewModel </em>existiert noch ein <span style="font-family: Consolas;">SampleMainPageViewModel</span>, welches unter WP8 keine Anwendung findet, da dies in dieser Art und Weise nicht unterstützt wird.</p>
<h2>Die View / UI</h2>
<p>Die App-Oberfläche der Anwendung ist hinsichtlich der Portierung ein wenig aufwendiger. Grund hierfür ist einerseits der ungleiche UI Layer, aber auch der Aufbau der UI, welcher sich aufgrund der zur Verfügung stehenden Bildschirmgröße unterscheiden muss. Glücklicherweise gibt es unter WP8 keine SnapView, welche betrachtet werden muss. Die UI wird von einer breiten Form zu einer länglichen Form verändert, da es sich bei der App anbietet.</p>
<p>So wird aus</p>
<p><a href="http://winphonedev.de/wp-content/uploads/2013/05/w8.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="w8" alt="w8" src="http://winphonedev.de/wp-content/uploads/2013/05/w8_thumb.png" width="589" height="333" border="0" /></a></p>
<p>nun</p>
<p><a href="http://winphonedev.de/wp-content/uploads/2013/05/Screenshot.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Screenshot" alt="Screenshot" src="http://winphonedev.de/wp-content/uploads/2013/05/Screenshot_thumb.png" width="337" height="605" border="0" /></a></p>
<p>Der größte Teil der Oberfläche ist übernommen und kaum verändert worden, so dass der Wiedererkennungswert sehr groß ist.</p>
<p>So wird das Hintergrundbild wieder verwendet, der Nachrichtenteil ist etwas verkleinert beibehalten worden und der Eingabeteil für neue Nachrichten ist unter den Nachrichtenbereich gewandert. Diesem wurde zusätzlich ein transparenter dunkler Hintergrund spendiert, um die Lesbarkeit des eingegebenen Textes zu erhöhen. Unter dem Eingabebereich befindet sich noch eine AppBar, über welche Nachrichten gelöscht, oder aktualisiert werden können. Für diese wurden Modern UI Icons aus dem Installationspaket des WP8 SDKs verwendet. Auch der sichtbare Appname wurde aus Platzgründen deutlich verkleinert.</p>
<p>Im Nachrichtenteil wurden ebenfalls aus Platzgründen Benutzername und Sendedatum untereinander gruppiert.</p>
<p>Das Profilbild wurde ein wenig verkleinert, damit so mehr Platz für die Nachrichten zur Verfügung steht.</p>
<p>Als Steuerelemente wurden hier die WP8 nativen Steuerelemente verwendet. Einzig die AppBar ist eine zusätzliche Komponente, da diese eine Datenbindung unterstützt.</p>
<p>Die für die Steuerelemente verwendeten Styles wurden auch für die neue Oberfläche optimiert. So findet man nun folgende Style Definition unter <em>Common/Styles.xaml </em>vor:</p>
<pre class="csharpcode">"http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x=<span class="str">"http://schemas.microsoft.com/winfx/2006/xaml"</span>
    xmlns:common=<span class="str">"clr-namespace:LetsTalkWP8.Common"</span>&gt;

    "BooleanToVisibilityConverter" /&gt;
    "TimeAgoConverter"/&gt;
    "AccentColor" Color=<span class="str">"#FF00A8D9"</span>/&gt;

    "SpeechBubble"&gt;
        "150"&gt;

                "30" /&gt;

                "130"/&gt;

            "2" Width=<span class="str">"120"</span> Height=<span class="str">"120"</span>&gt;
                "{Binding UserImage}" Stretch=<span class="str">"UniformToFill"</span> AutomationProperties.Name=<span class="str">"{Binding UserName}"</span>/&gt;

            "1" Fill=<span class="str">"{StaticResource AccentColor}"</span> RadiusX=<span class="str">"25"</span> RadiusY=<span class="str">"25"</span> Margin=<span class="str">"0,5,5,0"</span>/&gt;

            "1" FontSize=<span class="str">"16"</span> Text=<span class="str">"{Binding Body}"</span> TextWrapping=<span class="str">"Wrap"</span> Margin=<span class="str">"12,12,17,10"</span>/&gt;

            "M190,100 L130,130 L155,100" Fill=<span class="str">"{StaticResource AccentColor}"</span> HorizontalAlignment=<span class="str">"Left"</span> Height=<span class="str">"50"</span> Grid.Row=<span class="str">"1"</span> Stretch=<span class="str">"Fill"</span> UseLayoutRounding=<span class="str">"False"</span> VerticalAlignment=<span class="str">"Bottom"</span> Width=<span class="str">"70"</span> Grid.Column=<span class="str">"1"</span> Margin=<span class="str">"0,-5,0,25"</span>/&gt;
            "1" Grid.Row=<span class="str">"1"</span>&gt;
                "16" Text=<span class="str">"{Binding UserName}"</span> HorizontalAlignment=<span class="str">"Right"</span> VerticalAlignment=<span class="str">"Center"</span> Margin=<span class="str">"0"</span>/&gt;
                "16" Text=<span class="str">"{Binding CreatedAt, Converter={StaticResource TimeAgoConverter}}"</span> TextWrapping=<span class="str">"NoWrap"</span> HorizontalAlignment=<span class="str">"Right"</span> VerticalAlignment=<span class="str">"Center"</span> Margin=<span class="str">"0"</span>/&gt;</pre>
<style class="str"><!--
"SmallText"</span> TargetType=<span class="str">"TextBlock"</span> >
        <Setter Property=<span class="str">"TextWrapping"</span> Value=<span class="str">"Wrap"</span> />
        <Setter Property=<span class="str">"FontSize"</span> Value=<span class="str">"20"</span> />
        <Setter Property=<span class="str">"FontFamily"</span> Value=<span class="str">"Segoe UI Light"</span> />
        <Setter Property=<span class="str">"FontWeight"</span> Value=<span class="str">"Thin"</span> /></p>
<p>--></style>
<p>Der erste Unterschied ist, dass in der XML-Namespace Deklaration anstatt <span style="font-family: Consolas;">using:</span> noch “das alte” <span style="font-family: Consolas;">clr-namespace:</span> verwendet wird. Dieses wird unter WP8 noch nicht unter unterstützt.</p>
<p>Der <span style="font-family: Consolas;">MergedDictionaries</span> Anteil ist nicht vorhanden, da es in WP8 kein <em>StandardStyles.xaml</em> gibt.</p>
<p>Das <span style="font-family: Consolas;">SpeechBubble</span>-DataTemplate wurde in seiner Größe und den definierten Dimensionen angepasst. Das darin enthaltene erste <span style="font-family: Consolas;">Border</span>-Element besitzt hier keinen Hintergrund.</p>
<p>Das in de <span style="font-family: Consolas;">Grid</span> geschachtelte <span style="font-family: Consolas;">Grid</span> wurde durch ein simples <span style="font-family: Consolas;">StackPanel</span>-Steuerelement ersetzt; die darin enthaltenen <span style="font-family: Consolas;">TextBlock</span>-Elemente wurden rechtsbündig ausgerichtet.</p>
<p>Das nicht verwendete <span style="font-family: Consolas;">SpeechBubbleSnapped</span>-DataTemplate wurde entfernt.</p>
<p>Damit diese Styles in der App verwendet werden, ist eine Anpassung der <em>App.xaml </em>notwendig, um diese der App bekannt zu machen.</p>
<p>So wird aus</p>
<pre class="csharpcode">    <!--Application Resources-->

        "clr-namespace:LetsTalkWP8" x:Key=<span class="str">"LocalizedStrings"</span>/&gt;</pre>
<p>nun</p>
<pre class="csharpcode">    <!--Application Resources-->

                "Common/Styles.xaml"/&gt;

            "clr-namespace:LetsTalkWP8" x:Key=<span class="str">"LocalizedStrings"</span>/&gt;</pre>
<p>Zu guter Letzt fehlt noch die Definition der <span style="font-family: Consolas;">MainPage </span>selbst.</p>
<pre class="csharpcode">"LetsTalkWP8.MainPage"
    xmlns=<span class="str">"http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span>
    xmlns:x=<span class="str">"http://schemas.microsoft.com/winfx/2006/xaml"</span>
    xmlns:phone=<span class="str">"clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"</span>
    xmlns:shell=<span class="str">"clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"</span>
    xmlns:d=<span class="str">"http://schemas.microsoft.com/expression/blend/2008"</span>
    xmlns:mc=<span class="str">"http://schemas.openxmlformats.org/markup-compatibility/2006"</span>
    xmlns:bar=<span class="str">"clr-namespace:BindableApplicationBar;assembly=BindableApplicationBar"</span> 
    mc:Ignorable=<span class="str">"d"</span>
    xmlns:common=<span class="str">"clr-namespace:LetsTalkWP8.Common"</span>
    xmlns:viewModels=<span class="str">"clr-namespace:LetsTalkWP8.ViewModel"</span>
    FontFamily=<span class="str">"{StaticResource PhoneFontFamilyNormal}"</span>
    FontSize=<span class="str">"{StaticResource PhoneFontSizeNormal}"</span>
    Foreground=<span class="str">"{StaticResource PhoneForegroundBrush}"</span>
    SupportedOrientations=<span class="str">"Portrait"</span> Orientation=<span class="str">"Portrait"</span>
    shell:SystemTray.IsVisible=<span class="str">"True"</span>&gt;

        "true" x:Name=<span class="str">"indicator"</span> IsVisible=<span class="str">"{Binding Progressing}"</span> Text=<span class="str">"Downloading"</span> /&gt;

    <!--LayoutRoot <span class="kwrd">is</span> the root grid <span class="kwrd">where</span> all page content <span class="kwrd">is</span> placed-->
    "LayoutRoot" Background=<span class="str">"Transparent"</span>&gt;

            "Auto"/&gt;
            "*"/&gt;

        "TitlePanel" Grid.Row=<span class="str">"0"</span> Margin=<span class="str">"12,17,0,0"</span> Height=<span class="str">"27"</span> VerticalAlignment=<span class="str">"Top"</span>&gt;
            "Let's Talk WP8" Style=<span class="str">"{StaticResource PhoneTextNormalStyle}"</span> Margin=<span class="str">"12,0"</span>/&gt;

        <!--ContentPanel - place additional content here-->
        "ContentPanel" Grid.Row=<span class="str">"1"</span> Margin=<span class="str">"12,0,12,0"</span>&gt;

                "/Assets/bg.jpg" Stretch=<span class="str">"UniformToFill"</span>/&gt;

                "2*"/&gt;
                "*"/&gt;

            "lls" HorizontalAlignment=<span class="str">"Left"</span> VerticalAlignment=<span class="str">"Top"</span> Grid.Row=<span class="str">"0"</span>
                                    Margin=<span class="str">"0"</span>
                                    Padding=<span class="str">"0,0,0,0"</span>
                                    ItemsSource=<span class="str">"{Binding Messages}"</span>
                                    ItemTemplate=<span class="str">"{StaticResource SpeechBubble}"</span>
                                    SelectedItem=<span class="str">"{Binding SelectedMessage, Mode=TwoWay}"</span> Width=<span class="str">"456"</span>
                                    /&gt;
            "1" Background=<span class="str">"#D8000000"</span>&gt;
                "itemDetail"
                    Orientation=<span class="str">"Vertical"</span>&gt;
                    "MessageTextBox" Text=<span class="str">"{Binding MessageText, Mode=TwoWay}"</span>  MaxLength=<span class="str">"140"</span> TextWrapping=<span class="str">"Wrap"</span> FontSize=<span class="str">"20"</span> Height=<span class="str">"150"</span> /&gt;
                    <button class="str">"SendButton" Command=<span class="str">"{Binding SendMessageCommand}"</span> Content=<span class="str">"Send"</span> HorizontalAlignment=<span class="str">"Right"</span> Width=<span class="str">"169"</span> FontSize=<span class="str">"20"</span> Height=<span class="str">"72"</span>/&gt;
                </button>

            "Löschen"
                Command=<span class="str">"{Binding DeleteMessageCommand}"</span>
                IsEnabled=<span class="str">"{Binding DeleteMessageCommand.IsEnabled}"</span>
                IconUri=<span class="str">"Assets/delete.png"</span> /&gt;

            "Aktualisieren"
                Command=<span class="str">"{Binding RefreshCommand}"</span> 
                IsEnabled=<span class="str">"{Binding RefreshCommand.IsEnabled}"</span>
                IconUri=<span class="str">"Assets/refresh.png"</span> /&gt;</pre>
<p>Anstatt einer <span style="font-family: Consolas;">LayoutAwarePage</span> (Windows 8) wird hier eine <span style="font-family: Consolas;">PhoneApplicationPage</span> als Basis verwendet. Diese unterstützt in diesem Fall auch nur den Portrait-Modus.</p>
<p>In der Deklaration der Seite wird der Datenkontext nicht gesetzt, da dies in der Codebehind-Datei, wie auch bei der Windows 8–App, geschieht.</p>
<p>Die verwendeten XML-Namespaces unterscheiden sich kaum voneinander. Unter WP8 ist neben den zusätzlichen <span style="font-family: Consolas;">phone:</span>- und <span style="font-family: Consolas;">shell:</span>-Namespace auch noch ein <span style="font-family: Consolas;">bar:</span>-Namespace für die <span style="font-family: Consolas;">BindableApplicationBar</span> definiert. Mehr Informationen zur <span style="font-family: Consolas;">BindableApplicationBar</span> gibt es <a href="http://bindableapplicationb.codeplex.com/">hier</a>.</p>
<p>Diese kann einfach über die Package Manager Console mittels <span style="font-family: Consolas;">Install-Package BindableApplicationBar</span> hinzugefügt werden. Die XAML-Deklaration ist selbsterklärend.</p>
<p>Als erstes Element in der Deklaration ist ein <span style="font-family: Consolas;">ProgressIndicator</span> instanziiert, der wie zuvor Beschrieben für die optische Darstellung einer stattfindenden Datenkommunikation genutzt wird.</p>
<p>In der Windows 8 App wird im Ressourcenbereich eine <span style="font-family: Consolas;">CollectionViewSource</span> deklariert, welche hier nicht genutzt wird. Grund hierfür ist, dass die Deklaration einer Designseite unter WP8 nicht unterstützt wird und aus diesem Grund auch dann nicht benötigt wird.</p>
<p>Die Aufteilung der Anwendungsoberfläche ist fast klassisch für eine Windows Phone 8 App. So wird diese in die Bereiche Kopfzeile und den Inhaltsbereich aufgeteilt, was dargestellt wird durch das Grid <span style="font-family: Consolas;">LayoutRoot</span>, welches die beiden Grids <span style="font-family: Consolas;">TitlePanel</span> und <span style="font-family: Consolas;">ContentPanel</span> beinhaltet. Im <span style="font-family: Consolas;">TitlePanel</span> ist nur das kleine <span style="font-family: Consolas;">TextBlock</span>-Element mit dem App-Namen vorhanden, um Platz zu sparen.</p>
<p>Als Container für die Nachrichten wird ein <span style="font-family: Consolas;">LongListSelector</span>-Steuerelement verwendet, da aktuell ein anderes Steuerelement hier keinen Sinn macht und die <span style="font-family: Consolas;">ListView</span> unter WP8 nicht existiert. Leider besitzt der <span style="font-family: Consolas;">LongListSelector</span> keine Möglichkeit eine Vorlage für ein <span style="font-family: Consolas;">SelectedItemDataTemplate</span> zu erstellen, so dass man zwar ein Element aus der Liste auswählen kann, dies aber gegenüber dem Anwender optisch nicht wiedergespiegelt wird.</p>
<p>Wer genau hinschaut sieht auch, dass hier nicht das Steuerelement aus dem Framework verwendet wird. Dieses besitzt einen Bug, so dass eine Datenbindung für <span style="font-family: Consolas;">SelectedItem</span> schlichtweg nicht möglich ist. Der Workaround ist unter <em>Common/LongListSelector.cs</em> zu finden.</p>
<h2>Zusammenfassung</h2>
<p>Die Migration hinsichtlich des Models und des ViewModels ist von Windows 8 nach Windows Phone 8 relativ schnell erledigt, auch wenn einige Namespaces angepasst und nicht vorhandene Elemente, wie beispielsweise dem asynchronen <span style="font-family: Consolas;">MessageDialog</span>, durch alternative Elemente ersetzt werden müssen.</p>
<p>Der größte Aufwand ist jedoch die Migration der View. So ist nicht nur eine angepasste UI für die entsprechende Auflösung notwendig, sondern wahrscheinlich auch eine Neuentwicklung der UI nötig, da das Windows 8 WinRT XAML und das Windows Phone 8 “Silverlight” XAML von den unterstützten Funktionen und Steuerelementen sehr unterschiedlich sind.</p>
<p>Ich hoffe aber, das dieses erste Beispiel gezeigt hat, wie man es machen kann und nebenbei auch noch die Windows Mobile Azure Services ganz einfach einbindbar sind.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwinphonedev.de%2F2013%2F05%2F16%2Fwindows-azure-mobile-services-crud-fur-windows-phone-8-apps%2F&amp;title=Windows%20Azure%20Mobile%20Services%20%E2%80%93%20CRUD%20f%C3%BCr%20Windows%20Phone%208%20Apps" id="wpa2a_10"><img src="http://winphonedev.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://winphonedev.de/2013/05/16/windows-azure-mobile-services-crud-fur-windows-phone-8-apps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Impressionen vom Global Azure Bootcamp</title>
		<link>http://winphonedev.de/2013/04/29/impressionen-vom-global-azure-bootcamp/</link>
		<comments>http://winphonedev.de/2013/04/29/impressionen-vom-global-azure-bootcamp/#comments</comments>
		<pubDate>Mon, 29 Apr 2013 05:25:18 +0000</pubDate>
		<dc:creator>wp_admin</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://winphonedev.de/?p=8090</guid>
		<description><![CDATA[Am vergangenen Samstag fand weltweit das Global Azure Bootcamp statt. An über einhundert Standorten wurde jeweils um 9 Uhr lokaler Zeit dieses Bootcamp durchgeführt. In Deutschland waren die Standorte Berlin und Bad Homburg vertreten. Ich selbst habe an dem in &#8230; <a href="http://winphonedev.de/2013/04/29/impressionen-vom-global-azure-bootcamp/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p align="justify"><a href="http://winphonedev.de/wp-content/uploads/2013/04/bootcamp.png"><img title="bootcamp" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: left; padding-top: 0px; padding-left: 0px; margin: 0px 20px 0px 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="bootcamp" align="left" src="http://winphonedev.de/wp-content/uploads/2013/04/bootcamp_thumb.png" width="244" height="166"></a>Am vergangenen Samstag fand weltweit das Global Azure Bootcamp statt. An über einhundert Standorten wurde jeweils um 9 Uhr lokaler Zeit dieses Bootcamp durchgeführt. In Deutschland waren die Standorte Berlin und Bad Homburg vertreten. Ich selbst habe an dem in Bad Homburg teilgenommen.</p>
<p align="justify">Inhaltlich präsentierten <a href="http://www.sascha-dittmann.de/">Sascha Dittmann</a> (Microsoft MVP für Windows Azure) und <a href="http://winphonedev.de/wp-content/uploads/2013/04/WP_20130427_0071.jpg"><img title="WP_20130427_007[1]" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: right; padding-top: 0px; padding-left: 0px; margin: 0px 0px 0px 20px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="WP_20130427_007[1]" align="right" src="http://winphonedev.de/wp-content/uploads/2013/04/WP_20130427_0071_thumb.jpg" width="301" height="171"></a><a href="http://developers.de/blogs/damir_dobric/default.aspx">Damir Dobric</a> (Microsoft Integration MVP and Windows Azure VTSP) das, was ich von einem solchen Bootcamp erwarten würden: Einen “Rundflug” über die Microsoft Cloud mit einigen Exkursen, wie beispielsweise den Azure Websites, dem Azure Storage, den mobile Services und noch vielen weiteren mehr.</p>
<p align="justify"><a href="http://winphonedev.de/wp-content/uploads/2013/04/WP_20130427_0031.jpg"><img title="WP_20130427_003[1]" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: left; padding-top: 0px; padding-left: 0px; margin: 0px 20px 0px 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="WP_20130427_003[1]" align="left" src="http://winphonedev.de/wp-content/uploads/2013/04/WP_20130427_0031_thumb.jpg" width="244" height="139"></a>Mehr als ein Rundflug war aber auch nicht möglich, da jedes Modul für sich genommen eine mehrtätige Schulung füllt. Somit war auch der Begriff Bootcamp völlig richtig gewählt. Was leider auch ein wenig zu kurz kam waren die Hands-On Labs. Grund hierfür war einfach die miserable WiFi Verbindung, die für dieses Event zur Verfügung gestellt wurde. Damit dauerte das Deployen einer einfachen Website mehrere Minuten, was einfach nur Zeit schluckte. Dafür wurden dies Samples gemeinsam vorne am Beamer gemeinsam durchgearbeitet, was somit ein kleiner Trost war.</p>
<p align="center"><a href="http://winphonedev.de/wp-content/uploads/2013/04/1.png"><img title="1" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="1" src="http://winphonedev.de/wp-content/uploads/2013/04/1_thumb.png" width="244" height="190"></a><br />(Locations des Globale Azure Bootcamps, Quelle: <a title="http://globalwindowsazure.azurewebsites.net/?page_id=151" href="http://globalwindowsazure.azurewebsites.net/?page_id=151">http://globalwindowsazure.azurewebsites.net/</a>)</p>
<p align="justify">Es gab aber noch ein zusätzliches Highlight: Das Global Render Lab (Hintergrundinformationen <a href="http://geekswithblogs.net/asmith/archive/2013/04/28/152812.aspx">hier</a>).<a href="http://winphonedev.de/wp-content/uploads/2013/04/clip_image002_thumb.jpg"><img title="clip_image002_thumb" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: right; padding-top: 0px; padding-left: 0px; margin: 0px 0px 0px 20px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="clip_image002_thumb" align="right" src="http://winphonedev.de/wp-content/uploads/2013/04/clip_image002_thumb_thumb.jpg" width="350" height="210"></a> In diesem wurden Aufnahmen eines Kinect Tiefensensors in eine virtuelle Szene gerendert. Das Rendering selbst wurde in Azure gemacht. Damit aber noch nicht genug, denn dieses Rendering wurde auf Standort- und Landesebene als Ranking zu einem virtuellen Wettstreit herangezogen.<br />Die Ergebnisse des Rendering sind hier zu sehen: <a title="http://renderlab.azurewebsites.net/" href="http://renderlab.azurewebsites.net/">http://renderlab.azurewebsites.net/</a></p>
<p align="justify">Wie zu vermuten war, war Deutschland natürlich zwischenzeitlich auf Platz eins beim Renderen, jedoch war gegenüber den USA bei uns auch die Kapazität irgendwann begrenzt, so dass Deutschland nur auf Platz 2 landete. Einen kleinen&nbsp; Sieg konnte jedoch Berlin für sich verbuchen: Kein Standort renderte mehr als Berlin!<a href="http://winphonedev.de/wp-content/uploads/2013/04/render.png"><img title="render" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 20px 0px 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="render" src="http://winphonedev.de/wp-content/uploads/2013/04/render_thumb.png" width="684" height="571"></a></p>
<p>Das Event war also ein voller Erfolg. Gerne kann es hiervon nochmal ein “Reboot” geben, denn interessant war es auf jeden Fall.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwinphonedev.de%2F2013%2F04%2F29%2Fimpressionen-vom-global-azure-bootcamp%2F&amp;title=Impressionen%20vom%20Global%20Azure%20Bootcamp" id="wpa2a_12"><img src="http://winphonedev.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://winphonedev.de/2013/04/29/impressionen-vom-global-azure-bootcamp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2 Wege Authentifizierung f&#252;r Microsoft Konten&#8211;auch f&#252;r Windows Phone</title>
		<link>http://winphonedev.de/2013/04/19/2-wege-authentifizierung-fr-microsoft-kontenauch-fr-windows-phone/</link>
		<comments>http://winphonedev.de/2013/04/19/2-wege-authentifizierung-fr-microsoft-kontenauch-fr-windows-phone/#comments</comments>
		<pubDate>Fri, 19 Apr 2013 09:52:31 +0000</pubDate>
		<dc:creator>wp_admin</dc:creator>
				<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://winphonedev.de/?p=2931</guid>
		<description><![CDATA[Wer seine Microsoft-Konten weiter schützen mag, kann nun die “Prüfung in zwei Schritten” aktivieren. Dabei wird nicht nur das Passwort als Merkmal zur Authentifizierung genommen, sondern zusätzlich ein Sicherheitscode. Natürlich verliert man hierdurch ein wenig Komfort, aber wem Sicherheit wichtig &#8230; <a href="http://winphonedev.de/2013/04/19/2-wege-authentifizierung-fr-microsoft-kontenauch-fr-windows-phone/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Wer seine Microsoft-Konten weiter schützen mag, kann nun die “Prüfung in zwei Schritten” aktivieren. Dabei wird nicht nur das Passwort als Merkmal zur Authentifizierung genommen, sondern zusätzlich ein Sicherheitscode. Natürlich verliert man hierdurch ein wenig Komfort, aber wem Sicherheit wichtig ist, kann dieses Feature nun nutzen. Wie das funktioniert und wie man das Feature aktiviert und es auch unter Windows Phone 8 verwendet, zeigt Dr. Windows <a href="http://www.drwindows.de/content/1850-microsoft-konto-absichern-pruefung-zwei-schritten-einrichten.html">in diesem Artikel</a>.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwinphonedev.de%2F2013%2F04%2F19%2F2-wege-authentifizierung-fr-microsoft-kontenauch-fr-windows-phone%2F&amp;title=2%20Wege%20Authentifizierung%20f%C3%BCr%20Microsoft%20Konten%E2%80%93auch%20f%C3%BCr%20Windows%20Phone" id="wpa2a_14"><img src="http://winphonedev.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://winphonedev.de/2013/04/19/2-wege-authentifizierung-fr-microsoft-kontenauch-fr-windows-phone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8230;und noch mehr Updates</title>
		<link>http://winphonedev.de/2013/04/11/und-noch-mehr-updates/</link>
		<comments>http://winphonedev.de/2013/04/11/und-noch-mehr-updates/#comments</comments>
		<pubDate>Thu, 11 Apr 2013 07:50:55 +0000</pubDate>
		<dc:creator>wp_admin</dc:creator>
				<category><![CDATA[wp8dev]]></category>

		<guid isPermaLink="false">http://winphonedev.de/?p=327</guid>
		<description><![CDATA[Neben dem Update 2 für Visual Studio 2012 wurde auch noch das Windows Phone Development Center aktualisiert. Die Neuerungen in Kürze: Screenshots lassen sich einzeln nun direkt im Portal drehen Eine Submission kann nun abgebrochen werden, um vielleicht Aktualisierungen am &#8230; <a href="http://winphonedev.de/2013/04/11/und-noch-mehr-updates/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://winphonedev.de/wp-content/uploads/2013/04/devcenter.png"><img title="devcenter" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: left; padding-top: 0px; padding-left: 0px; margin: 0px 35px 0px 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="devcenter" align="left" src="http://winphonedev.de/wp-content/uploads/2013/04/devcenter_thumb.png" width="177" height="164"></a>Neben dem Update 2 für Visual Studio 2012 wurde auch noch das Windows Phone Development Center aktualisiert.</p>
<p>Die Neuerungen in Kürze:</p>
<ul>
<li>Screenshots lassen sich einzeln nun direkt im Portal drehen
<li>Eine Submission kann nun abgebrochen werden, um vielleicht Aktualisierungen am Text, Bildmaterial o.ä. vorzunehmen
<li>Automatische Skalierung der Screenshot. Somit ist es nicht unbedingt notwendig für alle 3 Auflösungen (WXGA, 720p und WVGA) eigene Screenshots zur Verfügung zu stellen.</li>
</ul>
<p>Die Neuigkeiten in voller Gänze gibt es <a href="http://blogs.windows.com/windows_phone/b/wpdev/archive/2013/04/05/more-dev-center-features-we-re-listening.aspx">hier</a>.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwinphonedev.de%2F2013%2F04%2F11%2Fund-noch-mehr-updates%2F&amp;title=%E2%80%A6und%20noch%20mehr%20Updates" id="wpa2a_16"><img src="http://winphonedev.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://winphonedev.de/2013/04/11/und-noch-mehr-updates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WP8 Unit Testing gef&#228;llig?</title>
		<link>http://winphonedev.de/2013/04/11/wp8-unit-testing-gefllig/</link>
		<comments>http://winphonedev.de/2013/04/11/wp8-unit-testing-gefllig/#comments</comments>
		<pubDate>Thu, 11 Apr 2013 06:52:16 +0000</pubDate>
		<dc:creator>wp_admin</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://winphonedev.de/?p=324</guid>
		<description><![CDATA[Vor wenigen Tagen ist das Visual Studio 2012 Update 2 erschienen. Es erscheint an sich ein wenig unscheinbar, doch bringt es für die Windows Phone 8 Entwicklung ein lange gewünschtes Feature mit: Unit Testing! Quelle: http://blogs.msdn.com/b/visualstudioalm/archive/2013/01/31/windows-phone-unit-tests-in-visual-studio-2012-update-2.aspx Das hierfür notwendige Projekttemplate &#8230; <a href="http://winphonedev.de/2013/04/11/wp8-unit-testing-gefllig/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Vor wenigen Tagen ist das <a href="http://www.microsoft.com/de-de/download/details.aspx?id=38188">Visual Studio 2012 Update 2</a> erschienen. Es erscheint an sich ein wenig unscheinbar, doch bringt es für die Windows Phone 8 Entwicklung ein lange gewünschtes Feature mit: Unit Testing!</p>
<p><a href="http://winphonedev.de/wp-content/uploads/2013/04/WP8UnitTest.png"><img title="WP8UnitTest" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="WP8UnitTest" src="http://winphonedev.de/wp-content/uploads/2013/04/WP8UnitTest_thumb.png" width="630" height="393"></a><br /><font size="1">Quelle: </font><a title="http://blogs.msdn.com/b/visualstudioalm/archive/2013/01/31/windows-phone-unit-tests-in-visual-studio-2012-update-2.aspx" href="http://blogs.msdn.com/b/visualstudioalm/archive/2013/01/31/windows-phone-unit-tests-in-visual-studio-2012-update-2.aspx"><font size="1">http://blogs.msdn.com/b/visualstudioalm/archive/2013/01/31/windows-phone-unit-tests-in-visual-studio-2012-update-2.aspx</font></a></p>
<p>Das hierfür notwendige Projekttemplate ist nun somit im Visual Studio zu finden. Die Tests selbst werden, wie auch bei anderen Projekten im Visual Studio, im zugehörigen Testframework geschrieben, die vom Windows Phone nun unterstützt werden. Kennt man diese Funktionalität bereits muss man hier nichts Neu lernen. Die Edition des Visual Studio ist ebenfalls uninteressant, da selbst die Express Edition unterstützt wird.</p>
<p>Auch das Ausführen der Unit Tests von der Konsole aus wird unterstützt.</p>
<p>Wo Licht ist, ist bekanntlich auch Schatten. So wird Windows Phone 7.x leider nicht unterstützt.</p>
<p>Weiter Informationen finden Sie hier: <a title="http://blogs.msdn.com/b/visualstudioalm/archive/2013/01/31/windows-phone-unit-tests-in-visual-studio-2012-update-2.aspx" href="http://blogs.msdn.com/b/visualstudioalm/archive/2013/01/31/windows-phone-unit-tests-in-visual-studio-2012-update-2.aspx">http://blogs.msdn.com/b/visualstudioalm/archive/2013/01/31/windows-phone-unit-tests-in-visual-studio-2012-update-2.aspx</a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwinphonedev.de%2F2013%2F04%2F11%2Fwp8-unit-testing-gefllig%2F&amp;title=WP8%20Unit%20Testing%20gef%C3%A4llig%3F" id="wpa2a_18"><img src="http://winphonedev.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://winphonedev.de/2013/04/11/wp8-unit-testing-gefllig/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reboot&#8230; and I&#8217;m back!</title>
		<link>http://winphonedev.de/2013/04/11/reboot-and-im-back/</link>
		<comments>http://winphonedev.de/2013/04/11/reboot-and-im-back/#comments</comments>
		<pubDate>Thu, 11 Apr 2013 06:27:13 +0000</pubDate>
		<dc:creator>wp_admin</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://winphonedev.de/?p=321</guid>
		<description><![CDATA[Fast ein Jahr ist es her, dass der letzte Blogpost hier erschienen ist. Erschreckend! Doch es war ein schöner Anlass: Unser Updatekapitel zu Windows Phone 7.5 Refresh wurde veröffentlicht. Doch danach wurde es ein wenig ruhig in diesem Blog. Weder &#8230; <a href="http://winphonedev.de/2013/04/11/reboot-and-im-back/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://winphonedev.de/wp-content/uploads/2013/04/updates.jpg"><img title="updates" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: left; padding-top: 0px; padding-left: 0px; margin: 0px 23px 0px 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="updates" align="left" src="http://winphonedev.de/wp-content/uploads/2013/04/updates_thumb.jpg" width="210" height="347"></a>
<p>Fast ein Jahr ist es her, dass der letzte Blogpost hier erschienen ist. Erschreckend! Doch es war ein schöner Anlass: Unser Updatekapitel zu Windows Phone 7.5 Refresh wurde veröffentlicht.</p>
<p>Doch danach wurde es ein wenig ruhig in diesem Blog. Weder das Update zu Windows 7.8 wurde behandelt, noch der Start von Windows Phone 8 begleitet. Dies führte u.a. auch dazu, dass ich seit April korrekterweise kein MVP für Windows Phone Development mehr bin.</p>
<p>Da ich aber seit Anfang April einen neuen Arbeitgeber habe, der mir nicht nur die Möglichkeit wieder in meinem Technologiestack unterwegs zu sein, sondern auch ein wenig etwas für die Community zu tun, war der erste Schritt diesen Blog einmal zu entstauben und auch wieder mit Leben zu füllen. Es wird auch wieder frischen Windows Phone 8 Content geben, über den ich&nbsp; ich aktuell nicht sprechen mag / kann. <img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none; border-left-style: none; border-bottom-style: none; border-right-style: none" alt="Smiley" src="http://winphonedev.de/wp-content/uploads/2013/04/wlEmoticon-smile.png"></p>
<p>Somit fangen wir einmal ganz einfach an: Was interessiert euch an Windows Phone 8, sowohl Consumer- als auch Entwicklerseitig? Immer her damit – mal sehen, was sich davon machen lässt.<br />Würden euch eher englische oder deutsche Inhalte interessieren? Hinterlasst mir einfach ein Kommentar.</p>
<p>Bis dahin verbleibe ich mit den treffenden Worten meines neuen Chefs:</p>
<p><strong>“Rock ‘n’ Roll!&#8221;</strong></p>
<p><a href="http://winphonedev.de/wp-content/uploads/2013/04/burnbaby.jpg"><img title="burnbaby" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="burnbaby" src="http://winphonedev.de/wp-content/uploads/2013/04/burnbaby_thumb.jpg" width="122" height="122"></a><br /><em><font size="1">Quelle: </font></em><a title="http://pommesgabeln.de.tl/" href="http://pommesgabeln.de.tl/"><em><font size="1">http://pommesgabeln.de.tl/</font></em></a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwinphonedev.de%2F2013%2F04%2F11%2Freboot-and-im-back%2F&amp;title=Reboot%E2%80%A6%20and%20I%E2%80%99m%20back%21" id="wpa2a_20"><img src="http://winphonedev.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://winphonedev.de/2013/04/11/reboot-and-im-back/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
