Archiv für den Monat August 2012

NServiceBus – Auf Tuchfühlung

Heute hatte ich meinen ersten Kontakt mit NServiceBus, nachdem ich mir in einigen Stunden das Konzept zu Gemüte geführt hatte. Primär dienten mir dazu die zwei Udi Dahan Videos. Da ich sehr begeistert davon war, habe ich sogleich einen Webcast erstellt. Persönlich denke ich, dass NServiceBus im .NET Umfeld durchaus in der Technologie-Evaluierung einbezogen werden sollte, wenn es um asynchrone und langlaufende Prozesse (sogenannte Sagas) geht. NServiceBus ist in gewissem Rahmen kostenfrei und steht als NuGet Package zur Verfügung. Die eigentliche Installation läuft sehr leicht von der Hand, da (wie man es selbst auch mit TopShelf bewerkstelligen kann) die erzeugte EXE für den Host bereits sämtliche Logik zur Installation enthält.

Für die Erstinstallation einfach den Parameter /installInfrastructure anhängen. Hier die Auflistung sämtlicher Parameter, die besagter Host enthält:

image

 

Besonders hervorzuheben ist die Tatsache, dass es NServiceBus absichtlich erschwert eine schlechte Architektur zu implementieren. So erhält der Client beim Verschicken eines Commands über Bus.Send lediglich als Rückgabewert ein ICallback Object, das es lediglich ermöglicht auf Fehler zu prüfen. Damit ist man gezwungen separat eine entsprechende Logikeinheit zu implementieren, die zur Verarbeitung des Events dient.

Gleichfalls wird quasi dazu eingeladen Code mit transaktionalem Verhalten in einer UnitOfWork unterzubringen und IoC zu verwenden.

Weitere nette Features:

  • Fluent API
  • Fördern des Convention over Configuration Principles
  • Trennung von Admin und Developer Verantwortungsbereichen
  • Eingebauter IoC Container (AutoFac)
  • Schnelle DB in Form von RavenDB mitgeliefert
  • Sinnvoll Benamsung wie IWantCustomInitialization

Das sind nur einige Punkte, die mir gefallen!

 

Für mich wären jetzt 2 weitere wesentliche Schritte:

  • Eigenen IoC Container einhängen, wie hier gezeigt (sehr elegant!)
  • Konfiguration der Clients im Code, um die Config beispielsweise aus der DB beim Bootstrapping zu lesen. Dies ist wohl nicht ganz trivial bzw. nicht angedacht (falls doch, bitte Info an mich!)
Advertisements

WinRT–Zeit für das Starten von Apps

WinRT Apps müssen innerhalb von 15 Sekunden starten. Genauer gesagt: Das Rendern des ersten Bildschirms darf nicht länger dauern. Wer also beispielsweise eine längere Bootstrapping Phase in seiner Anwendung durchführen muss, z.B. durch die Registrierung vieler Komponenten in einem IoC Container, der sollte sich hierüber Gedanken machen. Es ist auch daran zu denken, dass diese Initialisierungsphase je nach Device länger dauern könnte. Wie aber der anfänglichen Aussage zu entnehmen ist, wäre es durchaus adäquat einen Loading Bildschirm vorzuschalten und danach das Bootstrapping durchzuführen.

Die Frage, was passiert, wenn besagte 15 Sekunden überschritten werden, ist einfach: Die Anwendung wird beendet, d.h. sie verschwindet einfach. Dies lässt sich einfach testen:

public static class MyThreadingHelpers
{
    public static void Sleep(int ms)
    {
        new System.Threading.ManualResetEvent(false).WaitOne(ms);
    }
}

Wer dieses Code Sample verwendet und in der Startphase aufruft, kann dies einfach testen.

WinRT–Das erste Rätsel

Selbst das denkbar einfachste Szenario läuft nicht auf Anhieb. Nachdem ich das Template für eine leere Metro App (ich bin gespannt wie der Name in der finalen Visual Studio Version lauten wird) erstellt habe und direkt laufen lassen wollte, kam folgende Fehlermeldung: “…because the firewall service is not running. Ensure that the firewall service is enabled and started.”

image

Nach Reaktivierung des Dienstes läuft die App. Warum der Firewall Service unbedingt laufen muss, ist mir zunächst einmal nicht ersichtlich. Die Recherche habe ich auf später verschoben, da ich schließlich noch keine Code-Zeile entwickelt habe. Falls jemand die Antwort aus dem Stand weiß, wäre ich für die Lösung dankbar.

Sealed Klassen in WinRT

Auf dem Win8 Developer Day kam die Frage auf, warum Klassen mit dem Sealed-Keyword deklariert werden müssen. Die Vermutung, dass es sicherheitstechnische Hintergründe hat, konnte ich nach einer kurzen Recherche nicht erhärten. In jedem Fall ist es aber nicht korrekt, dass Klassen sealed sein müssen. Dies trifft nur zu, wenn man die Klasse nicht mit dem Attribut [EnableComposition] markiert. Grundsätzlich kann man es sich so merken: Soll die Funktionalität aus allen Sprachen (wie JavaScript) nutzbar sein, so muss die Klasse mit sealed vor Ableitungen geschützt werden. Mehr dazu gibt es hier.

Windows 8 Developer Day

Nach dem entsprechenden Hackathon am Wochenende habe ich heute nochmal an einer entsprechenden Microsoft Veranstaltung dazu teilgenommen. Referenten waren Dariusz Parys und Oliver Scheer.

CIMG1626Zunächst einmal ist zu sagen, dass das Best Western Hotel gut ausgewählt war, wenngleich die aktuelle Verkehrssituation in Karlsruhe einfach nur – entschuldigt die Wortwahl – beschissen ist. Rundum um das Hotel überall Baustellen. Die Anmeldung und Registrierung liefen wie immer reibungslos. Die Ex-Freundin von unserem Admin war als Event Managerin wieder vor Ort und so lief alles wieder gewohnt flüssig und flott ab. Die Parkmöglichkeiten waren in der Email leider nicht beschrieben, sodass Neulinge hier vermutlich suchen mussten. Ich würde mir wünschen, dass eine entspreche Randnotiz in Zukunft wieder in den Emails steht. Auf Grund der recht überschaubaren Größe gab es keinerlei Probleme bzgl. der Akustik. Obwohl ich meine Brille vergessen hatte, war die Sicht problemlos möglich, zumal die Folienschriften sehr groß gewählt waren und der Code von den Referenten von Hand hochgeschraubt wurde.

 

Wie immer waren Oli und Dariusz gut zu verstehen. Der gewohnt locker, lässige Ton mit den CIMG1627von mir favorisierten Apfel-Seitenhiebe rundete das Ganze ab. Fachlich taten sich dann aber vereinzelt Lücken auf, von denen ich mir persönlich gewünscht hätte, dass hier mehr Klarheit kommuniziert wird. Beispielsweise waren die Zeitangaben für WinRT Anwendungen nicht korrekt. Für mich als Entwickler ist es ein wesentlicher Unterschied, ob eine App in 15 oder in 5 Sekunden gestartet sein muss, wenn ich an Dinge wie Bootstrapping in Verbindung mit IoC Containern denke. Weitere unklare Punkte waren die Rückgabewerte asynchroner Methoden, das vermeintlich obligatorische Sealed-Keyword für Klassen oder die Abgrenzung von Asynchronität und Multithreading. Wenngleich ich mutmaße, dass die zwei sich hier sich selbst nicht immer ganz sicher waren, möchte ich das keinesfalls unterstellen. Auf alle drei Fragen gehe ich in späteren Blogeinträgen noch ein und gebe die Antworten dazu.

 

Persönlich möchte ich die Gelegenheit noch nutzen, um konstruktive Kritik zu äußern:

  • Wieso sind die Control-Rahmen und der Hintergrund des XAML Designer von WPF beide weiß. Weiß auf weißem Hintergrund ist gleich null Sicht…Höchst fragwürdig, v.a. wenn gepredigt wird wie wichtig das Design ist. Vermutlich haben deswegen viele Visual Studio auf Schwarz gestellt.
  • Versionierung: Wir erinnern uns, dass MS beim Entity Framework direkt von Version 1.0 auf 4.0 gesprungen ist, um die Version mit der des .NET Frameworks anzugleichen. Mit der Veröffentlichung von .NET 4.5 erscheinen aber C# 5.0 und Entity Framework 5.0. Entschuldigung, aber das ist fast schon lächerlich, v.a. wenn man bedenkt, dass in jedem entsprechenden Fachbuch dieser Umstand wieder erläutert werden muss.
  • Wie häufig und schnell die Namen gewechselt werden, ist eigentlich ein marketingtechnisches Fiasko. So korrigierte mich Oli, nachdem ich einen veralteten Begriff verwendet habe, nutze ab im anschließenden Satz dann ebenfalls die obsolete Bezeichnung Metro App.
  • Nachdem solche Veranstaltungen nun immer mehr dahingehend aufweichen, als dass Marketing, Design, Verkauf und Developing vermischt werden, wäre ich sehr glücklich darüber, wenn es wieder “reine Entwickler” Veranstaltungen gäbe. Die Hälfte der Vorträge sitze ich immer aus oder ich komme später und gehe früher, da für mich nur noch 50% der Themen relevant sind. Das mag für eine kleine Schnittmenge oder CTOs interessant sein, aber der Mehrheit – wie ich in Gesprächen festgestellt habe – geht es wie mir. Deshalb äußere ich hier die Bitte ein Coding Deep Dive anzubieten.
  • Sehr lobenswert fand ich wieder herum, dass Blend for Visual Studio und TFS in der Cloud in Zukunft kostenfrei selbst in den Express Versionen zu Verfügung gestellt werden. Weiter so!
  • Auch positiv zu erwähnen: Oli und Dariusz nehmen den Wunsch in Karlsruhe einen Hackathon zu veranstalten  mit auf die nächste Planungstagung. Eine Petition dafür organisieren wir hier.

 

Alles in allem war der Tag für mich in Ordnung, wenngleich die großen Ah’s und Oh’s ausblieben.

Windows 8 Hackathon–Teil 3

Im letzten Teil will ich ein kurzes Fazit ziehen und ein paar Verbesserungsvorschläge einbringen. Persönlich konnte ich einiges mitnehmen, was vielleicht auch daran lag, dass ich mit wenigen Vorkenntnissen gekommen. Wie sich herausstellte, ging es vielen anderen ähnlich.

 

CIMG1605CIMG1604CIMG1569

 

So waren die zwei Sessions des Geschäftsführers der medialesson GmbH Philipp Bauknecht bereits sehr hilfreich. Das zugehörige Code Sample konnte ich gleich mitnehmen. Kai Ehret, ein Entwickler von CIMG1620medialesson und aktives Community Mitglied der .NET User Group Karlsruhe, schickte mir später noch einen Lösungsansatz für ein spezifisches Problemszenario durch, sodass ich aktuell alle nötigen Infos für mein eigenes Projekt habe. Zu guter Letzt konnte ich mir noch innerhalb der Gruppen die ein oder andere Lösung abschauen, darunter die von Frank Pfaffheicher zur Eigenimplementierung eines MVVM Frameworks. Komplettiert wurde das Ganze durch Insider News Tom Wendel, seines Zeichens Microsoft Evangelist. Auch abseits der Hauptthemen Windows 8 und WinRT Development konnte man sich bei einem Bierchen über Prozessoptimierung und Projektmanagement austauschen, z.B. mit dem User Group Leiter Ralf Schoch.

 

20120811_104145Im Verlauf des Tages wurde ich dann auch auf die Medien-/IT-Initiative Pforzheim aufmerksam. welche die Veranstaltung ebenfalls unterstützte und sponserte. Sehr interessant fand ich die Ankündigung Pforzheim zur ersten deutschen Stadt zu machen, die ein freies W-LAN anbieten wird. Mit dem Besuch des Oberbürgermeisters sollte dann wohl das ernsthafte Engagement nochmals unterstrichen werden. Traurig, dass dies nicht bereits Standard in Deutschland ist! (Anmerkung: Wie man einer jüngst veröffentlichten Erklärung der Telekom entnehmen kann, werden wahrscheinlich die die Breitband-Ziele der Bundesregierung nicht erreicht)

Zu erwähnen ist auch die Kooperation mit der Fachhochschule. Persönlich denke ich aber, dass bereits in den Schulen die Förderung beginnen muss. Deshalb wollen wir von der IT der Firma heco ebenfalls unseren Teil beitragen. Gerne würden wir uns hier mit den Verantwortlichen der Stadt bzw. besagter Initiative unterhalten.

 

Am Abend stellten die Teams ihre Lösungen vor. Hierfür gab es neben den von Microsoft gesponserten Preisen in Form von Office 2010 und Windows 7 (wieso es an einer Windows 8 Veranstaltung Windows 7 Lizenzen gab, entzieht sich meinem Verständnis!) auch Windows Phones zu gewinnen. Nachdem nur ein Gerät für die Siegergruppe aus 4 Entwicklern zur Verfügung stand, erweiterte die Medien-/IT-Initiative Pforzheim kurzerhand den Preisumfang. Allerdings sei angemerkt, dass – und mit der Meinung stehe ich wie sich am nächsten Tag bei einem gemeinsamen Grillen herausstellte nicht alleine dar – die Siegerernennung nicht ganz unvoreingenommen wirkte.

Nachdem ich von morgens um 10 Uhr bis abends ca. 23 Uhr vor Ort war, folgende Verbesserungsvorschläge:

  • Ein Hackathon sollte mindestens 2 Tage gehen, vielleicht sogar inkl. Freitagabend zur Ideenfindung
  • Ein Beispiel mit den vermeintlich häufigsten Fallstricken wäre hilfreich
  • Ein gemeinsames Twitter Hashtag zur einfacheren Kommunikation und Vernetzung
  • Ein separater Raum für die Einführungskurse, da es doch recht laut war
  • Nice-to-have: Mehr Designer zur Unterstützung
  • In Karlsruhe sollte in jedem Fall auch ein Hackathon stattfinden. Eine Initiative dazu habe ich auf Facebook gestartet

 

CIMG1612CIMG1623CIMG1614

MVVM & WPF auf dem Prüfstand–Teil 2

In meinem ersten Beitrag habe ich bereits einige wesentliche Punkte genannt, die es zu evaluieren gilt. Beim Hackathon konnte ich langjährige und erfahrene Entwickler im WPF-MVVM-Bereich darauf ansprechen. Zunächst einmal ist der Grundgedanke weiterhin der, dass zu prüfen ist, ob man die Vorteile von MVVM überhaupt nutzt. Falls dem nicht der Fall ist, bedeutet das nicht notwendigerweise, dass deshalb MVVM ausscheiden muss. Dem liegt die Prämisse zu Grunde, dass die Komplexität und konsequenterweise die damit einhergehende Development Velocity nicht weniger produktiv (d.h. betriebswirtschaftlich rentabel) ist, als wenn ich beispielsweise mit Code Behind arbeiten würde. Hier sind 3 wesentliche Punkte zu nennen:

  • Data Binding: Dies ist sicherlich deutlich schwieriger mit Code Behind zu implementieren
  • Designer Workflow: Expression Blend fällt bei Code Behind in jedem Fall aus. Da Expression Blend deutlich schneller als der VS Designer ist und darüber hinaus Unterstützung für Modellierung mit Live Daten bietet, ist hier mit Sicherheit mit Zeiteinsparungen zu rechnen.
  • Team Arbeit: Durch den Einsatz eines verbreiteten, standardisierten Patterns gestaltet sich die Zusammenarbeit einfacher und vermutlich auch effektiver. Ein neuer Developer, der das Pattern kennt, dürfte auch schneller einzuführen sein.

Trotzdem gilt zu bedenken, dass ohne entsprechende Dritthersteller-Frameworks wie Caliburn.Micro, die einem das Groß an Infrastruktur Programmierung abnehmen, nur selten effektiver und somit rentabel gearbeitet werden kann. Wer auf Grund der Rahmenbedingungen hierauf verzichten muss, sollte sich also überlegen, ob MVVM für ihn sinnvoll ist. Es sei aber auch angemerkt, dass mit relativ einfachen Mitteln entsprechende Funktionalität selbst implementiert werden kann.

%d Bloggern gefällt das: