Gestern Abend war ich bei der .Net User Group Rhein/Ruhr und es hat sehr viel Spaß gemacht, mit den Teilnehmern fast drei Stunden über das Windows Phone 7 zu diskutieren. Ich hoffe, es ist gelungen, nicht nur die wesentlichen Ideen und Konzepte zu vermitteln, sondern auch typische Stolperfallen aufzuzeigen. In den Folien zu “Windows Phone 7 Fundamentals” (als PDF mit rund 8MB) finden sich neben einem umfassenden Überblick auch einige Anregungen zu Navigation, der Navigations-Historie, dem sogenannten Tombstoning und Performancetipps. Und unter http://www.vimeo.com/album/213387 findet Ihr noch eine Screencast-Serie mit praktischen Beispielen zum Thema.
Archive for the 'Tips' Category
Page 4 of 23
Microsoft propagiert die Windows Presentation Foundation (kurz WPF) als Standard für Anwendungsoberflächen. Außerdem ist WPF nicht nur ein zentraler Bestandteil des .NET-Kontinuums sondern gilt auch noch als Mutter allen Silverlights: Der Codename von Silverlight war nicht umsonst WPF/E (E für Embedded). Und ich kann mich noch gut daran erinnern, dass ich zum Lernen von Silverlight mangels entsprechender Quellen noch auf WPF-Literatur zurückgreifen musste (was mittlerweile aber glücklicherweise nicht mehr notwendig ist).
Doch erst kürzlich musste ich mal wieder WPF machen und dafür mein Wissen wieder auf den aktuellen Stand bringen. Da kam mir „Das umfassende Handbuch“ zu WPF von Thomas Claudius Huber sehr gelegen: Auch weil ich den Autor ohnehin schätze und bereits einen hervorragenden Vortrag von ihm gesehen habe. Als das Buch dann eintraf, war der Schock groß: Rund 2500 Gramm Papier wurden geliefert. Doch ich hatte nur wenige Tage Zeit, diese fast 1500 Seiten zur Vorbereitung auf meinen WPF-Einsatz aufzuarbeiten. Bereits nach den ersten Seiten entspannte ich mich aber wieder. Das Buch liest sich einfach hervorragend (mal abgesehen von den physischen Problemen mit einem 2,5kg Buch – ganz besonders im Zug oder Flugzeug eine eher leidvolle Erfahrung). Es hat eindeutig Vorteile, ein gutes Original in der Sprache des Autors und keine Sinn entstellende Übersetzung zu lesen.
Der Inhalt ist rund und in der Tat sehr umfassend: Von allgemeinen Erklärungen der WPF über XAML, Layout, Dependency Properties, Commands und Datenbindung geht es bis hin zu 3D-Grafik, Medienintegration, Text und Drucken. Auch XAML Browser Applications (XBAP) und Interoperabilität mit Windows Forms werden behandelt. Dabei ist der Inhalt nie zu grundlegend und somit sowohl für ambitionierte Ein- und Umsteiger als auch für Fortgeschrittene geeignet, die ihr Wissen sortieren und Lücken schließen wollen.
Dem Autor gelingt es gut, einfach Themen auch einfach und auf den Punkt zu erklären. Einzig bei komplizierten Sachverhalten würde ich mir ein wenig einfachere Erläuterungen untermalt von grafischen Darstellungen (Diagramme und Abbildungen) wünschen: Ein Bild sagt einfache mehr als tausend Worte. Außerdem hätte sich dadurch die beängstigende Textmenge vielleicht ein wenig reduzieren lassen. Der WPF-Klassiker von Adam Nathan (ich kenne jedoch nur die Ausgabe zu WPF 3.0) macht das unterstützt durch mehrfarbigen Druck besser, beschränkt sich mit rund 800 Seiten aber auch nur auf das Wesentliche.
Ich kann Thomas Buch jedem WPF-Interessierten und -Entwickler empfehlen. Ganz nebenbei habe ich Nützliches über die Konzepte von Silverlight erfahren und die Unterschiede zwischen WPF und Silverlight kennen gelernt. Jetzt bin ich sehr auf Thomas neues Buchprojekt zu Silverlight gespannt.
„Windows Presentation Foundation: Das umfassende Handbuch“
Autor: Thomas Claudius Huber
Preis: ca. Euro 50,-
ISBN: 3836215381
Erscheinungsdatum: Galileo Computing, 28. Juni 2010
Link: http://www.amazon.de/exec/obidos/ASIN/3836215381/wolter-21
Die Ein- und Ausgabemöglichkeiten Web-basierter Technologien sind beinahe unerschöpflich, dennoch gibt es Grenzen – spätestens wenn man den Rechner verlassen und die Außenwelt kontaktieren möchte. Glücklicherweise ist hier Abhilfe in Form von Arduino (http://www.arduino.cc/) und Co. verfügbar. Das Arduino-Board erlaubt die analoge und digatale Ein- und Ausgabe per serieller Schnittstelle, um beispielsweise Sensoren auszulesen oder Motoren zu steuern. Browser-basierten Anwendungen ist es aber normalerweise nicht erlaubt, aus ihrer Sandbox heraus auf diese Schnittstelle zugreifen. Hier kommt dann ein spezieller Server zum Einsatz, der die Daten mit der seriellen Schnittstelle austauscht und dann wie ein Webserver per http oder noch etwas direkter per Socket-Verbindung zur Verfügung stellt. Für Arduion und Flash gibt es beispielsweise as3glue (http://code.google.com/p/as3glue/).
Es gibt viele Elektronik- oder Robotorbaukästen mit denen ähnliches erreicht werden kann, etwa Lego Mindstorms (http://mindstorms.lego.com/). Die einfache Steuerung eines Lego Roboters gelingt dank der Nxt#-Bibliothek des Niederländers Bram Fokke, die er unter http://nxtsharp.fokke.net inklusive Quellcode zum Download anbietet. Diese Bibliothek kommuniziert direkt per Bluetooth mit dem Roboter. Per WCF (Windows Communication Foundation) kann dann mit Hilfe dieser Bibliothek ein Dienst zum Senden von Nachrichten an den Roboter angeboten werden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | using System; using System.ServiceModel; using System.ServiceModel.Activation; using Bram.NxtSharp; namespace SilverNXT.Web { [ServiceContract(Namespace = "")] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class MindstormsService { // Statisch, da es nur einen Robotor für alle gibt static private NxtBrick brick; static private NxtTankDrive tankDrive; public MindstormsService() { if (brick == null) { // Erzeuge Stellvertreter des NXT-Steins, der im Roboter verbaut ist brick = new NxtBrick(); // Wichtig: Setze den Namen der Kommunikationsschnittstelle brick.COMPortName = "Com11"; // Konfiguriere NXT-Stein mit Motoren und ggf. Sensoren NxtMotor motorB = new NxtMotor(); NxtMotor motorC = new NxtMotor(); motorB.Brick = brick; brick.AttachMotor(NxtMotorPort.PortB, motorB); motorC.Brick = brick; brick.AttachMotor(NxtMotorPort.PortC, motorC); // Erzeuge Hilfsobjekt zur Steuerung des Robotors ähnlich einem Panzer tankDrive = new NxtTankDrive(); tankDrive.Brick = brick; tankDrive.Motor1 = motorB; tankDrive.Motor2 = motorC; // Stelle Verbindung mit dem NXT-Stein des Robotors her brick.Connect(); } } [OperationContract] public void Run(SByte power, ushort distance, SByte turnRation) { tankDrive.Move(power, distance); } [OperationContract] public void Coast() { tankDrive.Coast(); } } } |
Für die Nutzung in Silverlight sollte dieser Dienst im Silverlight Projekt als Service Reference hinzugefügt werden. Visual Studio erzeugt den notwendigen Code automatisch, so dass der Dienst mit den folgenden Zeilen konsumiert werden kann.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | using System; using System.Windows; using System.Windows.Controls; using SilverNXT.MindstormsServiceReference; namespace SilverNXT { public partial class MainPage : UserControl { MindstormsServiceClient client = new MindstormsServiceClient(); public MainPage() { InitializeComponent(); } private void runButton_Click(object sender, RoutedEventArgs e) { client.RunCompleted += new EventHandler<system.componentmodel.asynccompletedeventargs>(client_AsyncCompleted); client.RunAsync(50, 0, 100); } private void coastButton_Click(object sender, RoutedEventArgs e) { client.CoastCompleted += new EventHandler<system.componentmodel.asynccompletedeventargs>(client_AsyncCompleted); client.CoastAsync(); } void client_AsyncCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e) { // nothing } } } |
Bierzapfen am Computer“Wii Draught Masters” für Stella Artois.
Verschiedene Quellen datieren den Joystick auf ca. 1940. Dort wird dieser erstmalig im Zusammenhang mit der Raketensteuerung erwähnt. Der Joystick sowie dessen Nachfolger wie Gamepad und die Wii Remote lassen sich ebenfalls für Benutzerinteraktionen verwenden. Dabei erfreuen sich gerade die Eingabegeräte der seit 2006 vertriebenen Wii großer Beliebtheit: Darunter seit ca. 2008 das Balance Board und seit ca. 2009 das Guitar Hero Schlagzeug. Und da diese per Bluetooth arbeiten, ist die Kombination mit anderen Technologien durchaus möglich. Die größte Herausforderung ist, dass nicht jede Bluetooth-Umgebung harmoniert; Gute Erfahrungen haben wir übrigens mit den Bluetooth-Treiber von BlueSoleil (http://www.bluesoleil.com/) gemacht.
Ähnlich wie schon bei dem Lego Mindstorms Robotor gibt es auch hier eine Bibliothek zur Nutzung in eigenen Projekten namens WiiMoteLib (http://wiimotelib.codeplex.com/) in .NET basierten Projekten, etwa mit WPF.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | using System; using System.Windows; using WiimoteLib; namespace WiiWPF { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Loaded += new RoutedEventHandler(MainWindow_Loaded); } void MainWindow_Loaded(object sender, RoutedEventArgs e) { WiimoteCollection mWC = new WiimoteCollection(); try { // Finde alle angeschlossenen Wii Remotes mWC.FindAllWiimotes(); // Verbinde mit der ersten gefundenen Wii Remote Wiimote wm = mWC[0]; wm.Connect(); // Schalte die Vibration an der Wii Remote ein wm.SetRumble(false); } catch (Exception ex) { MessageBox.Show(ex.Message, "Wiimote error", MessageBoxButton.OK); } } } } |
Kombiniert mit einem Socket-Server können so die Eingabegeräte der Wii Technologien wie Flash und Silverlight angeboten werden – genau das übernimmt im Falle von Flash das Projekt WiiFlash von Joa Ebert und Thibault Imbert (http://code.google.com/p/wiiflash/).

Recent Comments