ppedv Team Blog

insights from the oracle

Windows Phone 7 Root Zertifikat installieren

clock May 9, 2012 09:56 by author Hannes Preishuber

Unser Exchange Server Zertifikat für https ist abgelaufen. Da ich bei StartSLL einen verifizierten Account habe und das *.ppedv.de Wildcard Zertifikat dort sogar gratis ist, habe ich dort eines besorgt. Unsere Kollegen haben es installiert und es ging fast alles , OWA, Outlook außer Windows Phone 7.

Wie man in den Foren nachlesen kann ist Startcom als Stammzertifizierungstelle im Windows Phone 7 (und 7.5) nicht hinterlegt. Im IE übrigens schon. Also wie kommt das Root CA auf das Handy. Lustig fand ich den Tipp sich das als .CER Datei zusenden zu lassen. Mail geht nicht –HALLLOOO.

Also Outlook Web Access im Browser öffnen. Dort in der URL auf das Zertifikat klicken (Schloss)

image

Zertifikat anzeigen

image

Reiter Details und in Datei kopieren

image

Datei auf Webserver kopieren (iis 7.5) Für .CER muss man einen eigenen Mime Type anlegen. Für DER existiert der passende Typ schon (application/x-x509-ca-cert)

image

Ein einfaches umbenennen der .cer in .der hat es in meinem Falle getan.

Dann noch einen QR generieren zb http://createqrcode.appspot.com/für die URL des Zertifikates.

image

Und jetzt kommt das erste und einzige Mal die Schönheit der dritten Taste auf dem Windows Phone zum Einsatz, der QR Scanner. Der Scanner ist über das Auge Symbol erreichbar.

Wenn das Phone den Tag lesen kann, erscheint die URL und er wird eingerahmt. Dann nochmal drauftippen und es erscheint die Dialog Meldung ob das Zertifikat installiert werden soll.

Dann den Smarttag ausdrucken und an die User verteilen oder per Mal aufs Handy zuschicken (joke)



Live Tiles in Windows 8 angewendet

clock May 7, 2012 21:22 by author Hannes Preishuber

Wenn sich der Inhalt einer Kachel (also dem Menüpunkt) ändert, spricht man von einer Live Tile. Der Internet Explorer 10 Metro Styled nutzt das um Websites in das METRO Menü zu bringen. In der Appbar einfach Pin auswählen und schon kann die Seite in Zukunft vom Benutzer direkt angesprungen werden.

image

Wenn die Webseite ein Icon (32x32) enthält, wird dieses dann in die Kachel eingebaut. Außerdem kann man die Beschriftung per Metatag vorbelegen. Der Benutzer kann den Titel aber immer anpassen.

<head runat="server">
    <title></title>
     <link href="favicon.ico" rel="shortcut icon" />
    <meta name="application-name" content="ppedv Demo" />
    <meta name="msapplication-badge" content="frequency=30;polling-uri=http://localhost/badge.aspx" />
</head>

 

image

In der letzten Zeile der Metatags (Badge) kann man sogar ein aktives Element definieren. Das heißt eine andere Webseite liefert einen WinRT Badge typischen XML String. In diesem Beispiel verwende ich eine komplett entkernte ASPX Datei. Es sind wirklich nur die beiden Zeilen XML bzw. VB.NET Code enthalten.

<?xml  version="1.0" encoding="utf-8" ?>
<badge value="<%=cint(rnd(1)*100) %>"/>

 

Die Wiederholintervall ist in Minuten, also in dem Fall 30 Minuten. Wenn der Badge Value auf unavailable gesetzt wird erscheint ein kleines rundes Bullet Icon im Tile. Gültige Werte sind laut Doku 30, 60, 360, 720, 1440 (default=1  Tag)

image

Wenn es Neuigkeiten gibt zeigt die Kachel dies dann an. Hier ist die Kachel auch gleich markiert.

image

Damit kann man in der Appbar dann auch das “Live” an und abschalten.

image

Theoretisch sollten man den Update auch per Javascript ausführen können. Die nötige Methode  window.external.msSiteModeRefreshBadge(); funktioniert leider bei mir nicht.



Windows 8 CarouselPanel

clock May 6, 2012 19:07 by author Hannes Preishuber

Ein Karussell dreht sich. Ein WinRT Steuerlement laesst vermuten das es sich um ein Liste mit drehenden 3D Darstellung handelt. Nicht in Windows 8 Consumer Preview. Ursprünglich wurde das Control entwickelt für die Combobox, um am Ende der Liste wieder am Anfang zu beginnen.

Das ganze funktioniert aber nun auch mit typischen Listen.

<ListBox x:Name="listbox1"
            DisplayMemberPath="name"
            Height="300" Width="600">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <CarouselPanel />
           </ItemsPanelTemplate>
     </ItemsControl.ItemsPanel>
</ListBox>

Die Liste ( hier weiß) beginnt nach Vanessa wieder mit Hannes, scrollt also unendlich von unten nach oben.

image

Wenn man nun andere Listen nimmt und das Scrollen Horizontal machen möchte, geht dies z.B, mit einem Gridview und einem Stackpanel.

 <GridView 
            x:Name="gridview1" HorizontalAlignment="Left" Margin="283,17,-813,0" VerticalAlignment="Top" Width="721" Height="237">
            <GridView.ItemTemplate>
                <DataTemplate>
                    <Border CornerRadius="5"  >
                        <TextBlock Text="{Binding name}">
                        <TextBlock.RenderTransform>
                            <CompositeTransform Rotation="90"/>
                        </TextBlock.RenderTransform>
                        </TextBlock>
                    </Border>
                </DataTemplate>
                
            </GridView.ItemTemplate>
                
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <!--<CarouselPanel  CanHorizontallyScroll="true"/>-->
                    <StackPanel Orientation="Horizontal"></StackPanel>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </GridView>

 

Wie man am auskommentierten Block erkennen kann, könnte das WinRT CarouselPanel zwar Horizontales Scrollen- als Attribut - aber zur Laufzeit gibt's einen Fehler. Ich vermute, das hier der .NET Part einfach noch nicht fertig auscodiert ist. Aber die letzte Windows 8 Beta steht ha schon in den Startlöchern.



Windows 8 Search Contract

clock May 6, 2012 15:01 by author Hannes Preishuber

Mit den Windows 8 Contracts, können Anwendungen oder das Betriebssystem mit einer App kommunizieren, auch wenn diese nicht läuft. So kann der Benutzer über dem Charme Suchdialog in verschiedenen APPs suchen.

image

Wie üblich muss zunächst im Manifest die Declarationsearch aktiviert werden. Dann wird eine neue Seite mit dem Template “Search Contract” erstellt.

image\

Dies erzeugt die Page die gestartet wird, wenn die APP per Search aktiviert wird. Gesteuert wird dies in der app.xaml.vb.  mit dem Event OnSearchActivated. Der folgende Codeblock wird automatisch vom “Search Contract” Template mit erzeugt.

Protected Overrides Sub OnSearchActivated(ByVal e As Windows.ApplicationModel.Activation.SearchActivatedEventArgs)
        SearchResultsPage1.Activate(e.QueryText)

        ' TODO: Move the following code to OnLaunched to speed up searches when your
        '       application is already running:

        AddHandler Windows.ApplicationModel.Search.SearchPane.GetForCurrentView().QuerySubmitted,
            Sub(sender, queryArgs)
                SearchResultsPage1.Activate(queryArgs.QueryText)
    
       End Sub

End Sub

 

In meinem Beispiel baue ich allerdings eine davon unabhängige Suche in die APP ein. Da eine APP durchaus mehrere Listen darstellen kann, sollte in diesen auch gesucht werden können.

Hier wird vom ppedv Twitter Account die Neuigkeiten geladen. Dazu kommt der SyndicationClient zum Einsatz. Alles in WinRT und .NET vorhanden und mit einem Vierzeiler an VB Code zu erledigen.

  Private Async Sub UserControl31_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
        Dim uri As Uri = New Uri("http://twitter.com/statuses/user_timeline/ppedv.rss")
        Dim clt As SyndicationClient = New SyndicationClient()
        feed = Await clt.RetrieveFeedAsync(uri)
        listview1.ItemsSource = feed.Items
End Sub

 

Die Darstellung erfolgt im WinRT Listview Control. In diesem soll dann per Search Charme gesucht werden können. Bereits verwendete Suchphrasen werden sogar schon seitlich vorgeschlagen.

image

Die Anwendung muss nur das Event der auftauchenden SearchPane abonnieren, hier mit onQuerySubmitted.  In den Feed Elementen wird dann per LINQ eine Abfrage durchgeführt und dem Listview wiederum zugewiesen.

 Dim feed As SyndicationFeed
    WithEvents sp As SearchPane = SearchPane.GetForCurrentView
    Public Sub OnQuerySubmitted(ByVal sender As Object, ByVal args As SearchPaneQuerySubmittedEventArgs) 
Handles sp.QuerySubmitted Dim q = From i In feed.Items Where i.Title.Text.ToLower.Contains(args.QueryText.ToLower) Select i listview1.ItemsSource = q TextBox1.Text = "Suche nach " & args.QueryText End Sub


Windows 8 Kontakte

clock May 3, 2012 12:07 by author Hannes Preishuber

Das Konzept von Share by Contract in Windows 8 findet sich auch in der Verwaltung von Kontakten wieder. Es macht einfach Sinn einen Adressverwaltung zu haben und nicht zehn in Facebook, Outlook, Twitter,Messenger und co.

Eine WinRT METRO styled App, kann als Adressquelle dienen (also doch mehr als eine) oder diese konsumieren. Wer in den Manifest Einstellungen den Contact Picker auswählt, will ein Adressanbieter werden.

image

Das ist nicht Thema in diesem Blog Eintrag.

Windows 8 bietet ähnlich einem FilePicker einen ContactPicker, der es erlaubt einen oder mehrere Kontakte auszuwählen. Alles was als Kontakt Quelle per Declaration spezifiziert ist, taucht dann auf. Falls nur eine METRO App mit Contact Contract auf dem Systeminstalliert ist,wird dieser Dialog übersprungen und Benutzer befindet sich gleich in der Contacts APP.

image

Es gibt aktuell kein SDK Beispiel für C# oder VB.NET nur für JavaScript. Der nötige Code ist aber einfach, Man kann den Benutzer einen oder viele Kontakte auswählen lassen,

 Dim picker As New ContactPicker
.  Dim rawContacts As IEnumerable = Await picker.PickMultipleContactsAsync()
.. picker.PickSingleContactAsync()
       
 

 

Auf einige Eigenschaften wie Name kann man direkt zugreifen.

  Private Async Sub Button_Click_1(sender As Object, e As RoutedEventArgs)
        Dim picker As New ContactPicker
        Dim rawContacts As IEnumerable = Await picker.PickMultipleContactsAsync()
        Dim contacts = rawContacts.Cast(Of ContactInformation)()
        For Each contact In contacts
        ...    contact.Name

        Next
  End Sub

 

Andere Eigenschaften wie Locations, PhoneNumbers oder eMails sind als Listen angelegt. er Index kann dann auf das eigentliche Objekt contact.PhoneNumbers(0).Value zugegriffen werden.

Im Kontakte Dialog werden diese n Telefonnummern verwaltet.

image

Im Code kann auf die Eigenschaft Name und Value zugegriffen werden.

image

Wer noch mehr braucht, weil er z.B. spezielle Kundeninformationen für eine Geschäftsanwendung wie Umsatz oder Rabatt hinterlegen möchte, kann dafür die Custom Fields nutzen.



Windows 8 Settings Pain

clock May 1, 2012 11:28 by author Hannes Preishuber

Nein - richtig gelesen, kein Druckfehler. Die Verwendung der WinRT Standard Settings Pane ist eine Qual. Die Designer dieser Funktion haben XAML Funktionen weitest gehend außer acht gelassen. Obwohl Standard, fehlen die Wizards oder Templates um so einen Settings Dialog zu erstellen.

Einstellungen zum Programm sollen über den Settings Dialog, erreichbar per Charme, vorgenommen werden. Dieser Standard Dialog ist aber ein Windows WinRT System Dialog, den man nicht per XAML erweitern kann. Möglich sind auch nur neue HyperlinkButtons.

image

Grundsätzlich ist es egal, an welcher Stelle des Codes man den Settings Dialog um Funktionen erweitert. Wenn man das in der app.xaml.vb tut,gilt dies natürlich für die gesamte App.

Man muss das Event belegen, das den Start der Settings signalisiert (Commandsrequested) und dort neue Settingscommands hinzufügen.

Protected Overrides Sub OnLaunched(args As LaunchActivatedEventArgs)     
...
AddHandler SettingsPane.GetForCurrentView().CommandsRequested, AddressOf OnSettingsRequest

....
Protected Sub OnSettingsRequest(sender As SettingsPane, args As SettingsPaneCommandsRequestedEventArgs)
  Dim h As New SettingsCommand("HilfeID", "Hilfe", New UICommandInvokedHandler(AddressOf HilfeFunktion))
  args.Request.ApplicationCommands.Add(h)
End Sub

Private Async Function HilfeFunktion() As Task
   Dim msg As MessageDialog = New MessageDialog("Bing hilft immer")
   Await msg.ShowAsync()
End Function

 

Das ist natürlich recht unbefriedigend. Per XAML kann ein User Control erstellt werden, das dann als erweiterter Settingsdialog dient und erweiterte Einstellungen und auch Steuerelement erlaubt. Größe, Farbe, Symbole nichts ist vorgegeben. Der Dialog hat nicht die Windows Backgroundfarbe und ich habe auch keine Möglichkeit gefunden diese auszulesen. Immerhin habe ich die Headline Schriftart auf Segeo UI und 25 Punkte Größe festgelegt. Die Breite des Standard Dialogs ist ca 360 Pixel. Man sollte volle Höhe nehmen, muss es aber nicht.

Zum ein und ausblenden schiebt man diesen am besten per Code und Animation aus dem sichtbaren Bereich nach rechts.  Dies entspricht auch dem Windows 8 Standard Verhalten.

image

Mein eigener Settings Dialog XAML

<Grid Background="#FF878787" Margin="0">
        <Grid.RowDefinitions>
            <RowDefinition Height="81"/>
            <RowDefinition />
        </Grid.RowDefinitions>
        <TextBlock HorizontalAlignment="Left" Margin="73,32,0,0" TextWrapping="Wrap" Text="Einstellungen"
VerticalAlignment="Top" FontSize="25" Width="189" Grid.Row="0" Height="24"/> <Button Style="{StaticResource SettingsBackButtonStyle}" Grid.Row="0"
Click="Button_Click_1" Height="49" Width="49"
Margin="20,20,0,10" /> <ToggleSwitch Header="ToggleSwitch" HorizontalAlignment="Left" Margin="20,10,0,0"
Grid.Row="1" VerticalAlignment="Top"
Height="73" Width="154" d:LayoutOverrides="VerticalMargin" /> </Grid>

Das sieht dann im Visual Studio Designer so aus.

image

Nun stellt sich die Frage wie,binde ich den in den Code und Design ein. Die Antwort ist schwieriger als gedacht, In HTML gibt es ein Flyout Control, das dafür[r verwendet wird, da fehlt in XAML. Wenn ein Benutzer auf den Bereich des Screens clickt, der nicht in Settings liegt, muss dieses verschwinden, am besten auch noch animiert. Das muss man alles mit dem XAML Popup nachbilden und das Settings Usercontrol darin einbetten,

Der XAML Code der eigentlichen METRO Anwendung. Das Attribut isLightDismissedEnabled bewirkt, das das popUp geschlossen wird,wenn daneben getoucht oder geklickt wird.

<Popup Margin="0,0,-300,0" x:Name="setting1" Width="300" IsOpen="True" IsLightDismissEnabled="True"
     HorizontalAlignment="Right"  >
     <local:Settings29 Margin="0"  >
            <local:Settings29.Transitions>
                <TransitionCollection>
                    <RepositionThemeTransition/>
                </TransitionCollection>
            </local:Settings29.Transitions>

    </local:Settings29>
</Popup>

 

Das Event Settings geöffnet abfangen

Private Sub UserControl29_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
        AddHandler SettingsPane.GetForCurrentView().CommandsRequested, AddressOf OnSettings
End Sub

Und dann das neue Command in die Settings Kommand Liste einfügen

 Protected Sub OnSettings(sender As SettingsPane, args As SettingsPaneCommandsRequestedEventArgs)
        Dim h As New SettingsCommand("custome1ID", "Custom29", New UICommandInvokedHandler(AddressOf CFunktion))
        args.Request.ApplicationCommands.Add(h)
End Sub

Beim Click auf das Setting, schiebt sich dann von rechts außen das popup, samt Settings Dialog in den Sichtbaren Bereich. Um sicherzustellen,das das Popup auch auf isopen= true ist, setzen.

 Private Sub CFunktion()
        setting1.IsOpen = True
        setting1.Margin = ThicknessHelper.FromLengths(0, 0, 0, 0)
 End Sub

 

Den BackButton habe ich mir aus anderem SDK Beispiel Projekten mit der Datei Customstyles.xaml geklaut. Ganz glücklich bin ich nicht, aber die anderen BackButton Styles sind grösser. Mit Visual Studio 11 lassen sich diese auch im Eigenschaftsfenster zuweisen.

image



APP und Windows 8 Design Richtlinien

clock April 29, 2012 19:42 by author Hannes Preishuber

Oberflächen Gestaltung ist auch eine Frage der Rahmenbedingungen. In Windows 8 ist dieser Rahmen schon ein recht enges Korsett.  Mann kann die Entwurfsrichtlinien zwar in die Ecke Werfen, sollte man aber nicht Ich habe kurz zusammengeschrieben. Alles was  aus User Interface Sicht zu beachten ist, ohne Esoterisches ala “craftmanship” zu zitieren.

Chromeless

Windows 8 METRO Styled APPs haben nichts, keinen Rahmen, keinen Close Button- nichts. Optisch wie eine Internet Explorer Kioskanwendung. Das muss man nicht beachten, das ist einfach so. Interessant wird es wenn man Menüs einblenden möchte, dafür sind die Appbars gedacht. Dies wiederum, soll man nur innerhalb einer “Page” einsetzen.

Es gibt eine oben und eine unten. Die Bottom Appbar soll für Kommandos eingesetzt werden, wie”neu”. Die Top Appbar ist mehr ein Navigationselement wie im Internet Explorer.

Layoutrichtline besagt, die Buttons auf der Appbar sollen im Bereich des Daumens liegen, also links- Rechts Bildschirmrand.

 

Kontext Menü

Ist eine schwierige Sache. Ist zwar grundsätzlich möglich, nützt aber nichts wenn der Dicke Daumen drüber ist. Bei der Appbar ist es möglich mit dem JavaScript Flyout Control oder mit dem ähnlichen XAML popup, ein Submenue nachzubilden.

image

Suche

Wenn die eigene Anwendung die Suche nach einem Begriff unterstützen soll, z.B. eine CD Verwaltung, dann soll das per Contract  und Charme gelöst werden. Die Suchergebnisse können in dem Charme eingeblendet werden, oder auch in der Anwendung.

Screenshot (17)

die Technischen Details werden hier nicht behandelt,sondern rein Layout Aspekte.

Ganz wichtig ist, wenn die APP Suche als Hauptzweck hat, z.B. Immobilien und damit auch komplexere Suchdialoge benötigt, dann wird dies in der Anwendung direkt gehandhabt.

Splash  Screen

Eine seltsame Möglichkeit dem Benutzer die ersten paar Sekunden zu vertreiben.

Settings

Die Einstellungen einer APP sollten immer über den Setting Charme erfolgen. Leider kann man dort nicht direkt Steuerelement per Drag&Drop platzieren, sondern muss dies per Code tun. Ich mutmaße, das dies ein erbe von HTML5 ist,da dort im DOM auch immer neue Knoten eingebaut werden. Das XAML typische laden eines Usercontrols in eine Child Collection geht nicht direkt.

image

Der Detaildialog kann dann natürlich per deklarativen XAML erstellt werden. Die Frage die sich oft stellt,ist dies ein Setting oder ein Kommando.

Scrollen

Für Daten verwendet man häufig das Gridview. Der Benutzer scrollt dann von Links nach rechts.

In Kombination mit Gruppierung bietet sich dann das SemanticZoomControl an.

Auch für die Navigation im Sinner von verschiedenen Programmfunktionen kann das selbe des zoomings Konzept verwendet werden.

image

 

image

ViewStatus

Reichlich ungewohnt ist, das man vier Bildschirme designen muss

  • Fullscreen ganzer Bildschirm
  • Snapped seitliche Hochkant Ansicht
  • Fill (zwei Apps nebeneinander)
  • Portrait Bildschirm 90Grad gedreht

Geteilte Funktion

Das gesamte Contract  Konzept erlaubt über Share Source und Share Target Funktionen zu teilen. So muss man keine Kamera Funktion in die eigene Anwendung einbauen, sondern man kann den Benutzer die Bildquelle auswählen lassen. Typische Share Anwendungsfälle sind z.B. Adresse verwalten oder Mail versenden.

Tiles

Die Kacheln als Menuicon zu sehen, ist reichlich untertrieben. Kacheln sind kleine Anwendungen mit Bildern, Texten und Animationen. Desiged werden diese mit einer eigene XML Sprache, leider auch nicht mit XAML (winke winke Richtung Javascript)

Finger

Touch braucht Finger und zwar 1 bis n Finger. Finger können auch etwas dicker sein.

 

Die offizielle MSDN Doku

Fact Sheet zu Touch Bedienung von Microsoft



REST Service mit Login

clock April 26, 2012 21:42 by author Hannes Preishuber

Eine noch immer häufige Benutzer Authentifizierung ist Basic Clear Text. Dabei wird Benutzername und Passwort einfach Base64 endcodiert übergeben.

In meinem Windows 8 Beispiel rufe ich einfach eine Datei auf einem IIS an, die nur ein bestimmter Benutzer anfordern darf. Das könnte natürlich auch ein REST basierter Service sein.

image

Im ersten Versuch wird man vermutlich eine 401 Fehlermeldung erhalten, wenn man nur den HTTPClient verwendet. In den Metro Design Style Guide steht geschrieben, das Fehlermeldungen direkt im Userinterface (also ohne popup) angezeigt werden soll.

image

In den Request kann man sich per HTTPClientHandler einhaken. So ist auch der Zugriff auf Cookies möglich. In diesem Fall übergeben wir passende Credentials für die Authentifizierung am Webserver.

Dim url As New Uri("http://win8-pre9/lab1/security/geheim.txt")
Dim h As HttpClientHandler = New HttpClientHandler()
Dim c = New Net.NetworkCredential("test", "admin")

h.Credentials = c

Dim http As New HttpClient(h)

Try
  Dim txt = Await http.GetStringAsync(url)
  textbox1.Text = txt
Catch ex As Exception
            error1.Text = ex.Message
            error1.Visibility = Visibility.Visible
End Try

Dies ist VB.NET Code für WinRT.



11, 12, 13, 2011, 2012, 2013

clock April 25, 2012 10:09 by author Hannes Preishuber

Normalerweise ist dies ein Technologie Blog. Aus gegeben Anlass weiche ich dieses Mal davon ab. Microsoft verdient mit Firmenkunden. Obwohl man überall von “Consumerization of IT” liest, lässt Microsoft, den Consumer ziemlich kalt. Bing, Windows Phone, Zune  und selbst XBox alles draufzahl Geschäft. Ist ja hinlänglich bekannt.

Geld wird verdient mit Office, Windows oder auch SharePoint. Und da tut sich großes. Bis Ende des Jahres kommen eine Reihe neuer Produkte die vielleicht sogar 90% des Umsatz von Microsoft ausmachen und mit Gewissheit nahezu den gesamten Gewinn.

Wer Microsoft kennt, weis das deren Geschäftsjahr am 30.06 Endet. Entsprechend sind die Planungszyklen jährlich ab diesem Stichtag. Der Sommer fällt quasi aus, also müssen die Produkte im Herbst in den Regalen stehen um das Jahresendgeschäft mitnehmen zu können.

Produkt Codename vermutlicher Name
Visual Studio 11 Visual Studio 2012
Windows 8 Windows 8
Windows Server 8 Windows Server 2012
SharePoint 15 SharePoint 2013
Office 15 Office 2013
Windows Phone Apollo Windows Phone 8

Da Microsoft nun die unsäglich Geheimhaltungspolitik von Apple abgekupfert hat, gibt es keine wirklichen Informationen dazu. Schweigen aus Redmond. Nur sogenannte Rumors oder dort und da ein Häppchen (Skype, Skydrive). Von Visual Studio 11 ist die aktuell in grau gehaltene Oberfläche hinlänglich bekannt und kritisiert. Die Rumors meinen, das wird sich noch ändern.

Windows 8 ist mit der Consumer Preview am bekanntesten. Für Juni ist eine letzte Beta angekündigt. Vermutlich Zeitgleich werden wir auch Expression Blend 5 und Visual Studio mit seinem finalen Produktnamen sehen. Beim Windows Server 2012 sind keine Überraschungen zu erwarten.

SharePoint 13 wird überraschenderweise sehr verdeckt behandelt. Es gibt schon Betatester die über METRO Design, HTML5, Projekt und Visio Integration berichten. Eine Beta wird für den Juni oder Juli gehandelt. Da SharePoint Projekte nicht mal so durchgeführt werden, könnte es sein das Microsoft sich bis Anfang 2013 Zeit nimmt.

Office 15 scheint schon weiter zu sein. Im Netz kursieren Screenshots die auch METRO UI und Cloud Integration zeigen. Für das Jahresendgeschäft wäre es wichtig das die Box in den Regalen steht.

Total im Nebel sind die Informationen rund um die nächste Windows phone Version. Fest steht es wird Windows 8 drunter liegen und es sollen die bisherigen Silverlight basierenden Anwendungen aus dem Store weiter lauffähig sein. Allerdings haben Geräte Hersteller sehr lange Vorlauf Zeiten. Da aktuell außer Nokia keiner neue Geräte bringt, spricht einiges für ein neues WP8 noch im November. Rechtzeitig für den Christbaum. Um es mal anders auszudrücken. Wenn der Termin nicht gehalten wird, kann Microsoft das Thema eigentlich einstampfen.

Jetzt stellt sich nur noch die Frage, wird alles in einem Big Bang gelauncht oder stückweise? Für ersteres spricht, das in einem Zeitraum von vielleicht 3 Monaten dem Kunden es nicht zuzumuten ist, sechs oder mehr Produktlaunches wahrzunehmen. Andererseits gibt es Zwänge die ein paar der Produkte etwas früher am Markt platzieren müssen.

Noch ein Rumor handelt von der wichtigsten Konferenz //BUILD oder früher PDC .  Es soll im Oktober sein, Los Angeles. MIXX gibt es ja bekanntlich nicht mehr. Die nächste Windows Version oder WinRT braucht jedenfalls definitiv einen kürzeren Produktzyklus als drei Jahre.

In rund 6 Monaten werden wir schlauer sein. Ich glaube persönlich das bereits auf der Microsoft Partner Konferenz im Juli in Toronto der Vorhang fallen wird.

Es wird ein anstrengendes, spannendes Jahr mit vielen Chancen. Ich freu mich drauf.



WinRT und .NET native oder IL?

clock April 25, 2012 08:20 by author Hannes Preishuber

Immer wieder kommt es zu Diskussionen was denn nun? Ist eine Windows 8 METRO APP native oder .NET? Die berühmte Marketing Grafik von Microsoft zu dem Thema finde ich persönlich wenig erhellend.

Es gibt aber auch eine bessere.

image

Die Runtime bietet eine Reihe von Funktionen per API an, wie z.B. Datei lesen und schreiben. Wer Komponenten für die WinRT schreiben möchte, kann dies per C++ tun. Das Modell ist an COM angelehnt.

Auf der Runtime kann stand heute in mindestens drei verschiedenen Frameworks programmiert werden. Dabei handelt es sich bei der CRT (Common Runtime) um echtes .NET mit all seinen Eigenschaften wie automatische Garbage Collection, Intermediate Language und den Sprachen VB.NET und C#. Microsoft spricht von einem limitierten .NET Profil, da der Funktionsumfang erheblich geringer ist. Es ist auch nicht möglich .NET Assemblies außerhalb des Profils zu referenzieren. Die Beschreibung derselben erfolgt in einem neuen Format WinMD (Windows Metadata).

Für den Entwickler ist es oft nicht ganz leicht zu erkennen ob er gerade einen WinRT API Call durchführt oder eine .NET Funktion aufruft. Wichtigster Hinweis sind die Namensräume die mit System für .net und Windows für WinRT beginnen. Dies ist von erheblicher Bedeutung, da die Datentypen zwischen WinRT und .NET unterschiedlich sind und vom System per Projektion automatisch gemappt werden müssen. In der folgende Tabelle werden einige davon genannt und man sieht das die WinRT Typen gerne mit I beginnen.

Windows Runtime

.NET Framework

IIterable<T>

IEnumerable<T>

IIterator<T>

IEnumerator<T>

IVector<T>

IList<T>

IVectorView<T>

IReadOnlyList<T>

IMap<K, V>

IDictionary<TKey, TValue>

IMapView<K, V>

IReadOnlyDictionary<TKey, TValue>

IBindableIterable

IEnumerable

IBindableVector

IList

IObserableVector

ObservableCollection


Offene Frage ist, welche Performance Auswirkungen der zusätzliche .NET Framework Layer hat. Nicht verifizierte Aussagen behaupten, das HTML/JavaScript Anwendungen schneller sein könnten. Grundsätzlich ist ziemlich wahrscheinlich, das es unterschiede gibt. Wenig wahrscheinlich ist, das diese eine Rolle spielen.