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!)
Werbung

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.

Windows 8 Hackathon–Teil 2

Soeben durfte ich dem Deep Dive zu Windows 8 Apps beiwohnen, was mich nun deutlich weitergebracht hat. Besonders interessant fand ich folgende Punkte:

  • Asynchronität ist allgegenwärtig: Nutzt man Funktionen, die länger als 50ms dauern können, müssen diese asynchron ausgeführt werden. So wie ich das sehe, sollten für solche Funktionalitäten gar keine synchrone Methoden zur Verfügung gestellt werden. Das ist natürlich vor allem relevant für Framework Hersteller, aber natürlich auch für die eigenen Methoden, die irgendwelche langlaufenden Operationen ausführen.
  • Das Versetzen einer Anwendung in den Suspend-Mode darf max. 5 Sekunden dauern, das Starten einer Anwendung 15 Sekunden.
  • IoC Container existieren soweit dem Referenten bekannt ist, noch keine für WinRT.
  • Als MVVM Framework, welches auch in Verbindung mit WinRT läuft, wurde MVVM Light Toolkit empfohlen.
  • Sämtliche Frameworks, die selbst auf .NET basieren oder .NET nutzen, fallen aus, da WinRT kein .NET Framework ist.
  • Bei asynchronen Abläufen wird in WinRT die Task Klasse im Namensraum System.Threading.Tasks verwendet. Hier merkt man dann doch die Parallelen zum .NET Framework.
  • Anwendungsdaten sollten im entsprechenden Roaming-Verzeichnis der App gespeichert werden, damit die Cloud-Synchronisierung greift.
  • Expression Blend wird – allerdings konnten das selbst die Microsoftler nicht bestätigen, vermutlich in allen Visual Studio Versionen verfügbar sein.

 

17.42 Uhr: Aktualisierung

Gregor Biswanger hat mir bzgl. IoC Container für WinRT soeben diesen Link zukommen lassen.

Windows 8 Hackathon–Teil 1

Es ist jetzt kurz nach 13.30 Uhr und die Herde hat die Futtertröge geleert. Das Essen war sehr gut und CIMG1611 reichlich! Auf Grund der Tatsache, dass der Autor der erste Konsument war, kann dieser nicht mit Fotos der gefüllten Schüsseln dienen.

An dieser Stelle sei angemerkt, dass das Finden des Fotos mit der entsprechenden Windows 8 App (ursprünglich Metro App…) ein schlichtweg unmögliches Unterfangen war. Der Autor war nach dem Öffnen eines Fotos nicht in der Lage zum nächsten Bild zu navigieren. Eine kurze Krisenkonferenz (hier ist wirklich von einer Krise zu sprechen, da langjährige Entwickler doch in der Lage sein sollten eine Fotoanwendung zu bedienen) mit ortsansässigen Entwicklern ergab, dass niemand eine Lösung wusste. Da bei Windows 8 Apps doch die User im Fokus stehen, sollte das besser laufen.

 

CIMG1608Die Evaluierung der Getränkekammer ergab, dass auch für den flüssigen Abendkonsum in Form von Rothaus (!) Zäpfle gesorgt ist. Der Vorrat an Red Bull lässt Hoffnung aufkeimen, dass auch diverse Mischgetränke auftauchen werden. Allerdings werden die Marketingdamen vermutlich nicht in den Genuss des Trendgetränks 2012 – Hugo – kommen. Erschwert das Unterfangen die Damen besser kennen zu lernen natürlich ungemein. Es wird wohl darauf hinaus laufen, dass wir in den sauren Apfel beißen und eine Windows 8 App entwickeln müssen. Damit war ursprünglich nicht zu rechnen, aber als IT-ler muss man flexibel sein.

 

 

Ich kam relativ unbelastet zu diesem Hackathon, d.h. Kenntnisse in Windows 8, App-Entwicklung und XAML 20120811_111201sind optimistisch ausgedrückt rudimentär vorhanden. Umso mehr erfreut mich die Tatsache, dass es vielen Entwicklern so geht. Deshalb war auch ein Einführungsvortrag, der mir persönlich vieles klarer machte und mir einen guten Einblick gab, recht gut besetzt. Als Entwickler bin ich besonders gespannt, wie es sich im Kontext dieser allgegenwärtigen Asynchronität zu programmieren ist. Allerdings scheint auf den ersten Blick die Plattform hier viel Arbeit abzunehmen.

MVVM & WPF auf dem Prüfstand

Wer mit dem Gedanken spielt die WPF in Verbindung mit dem MVVM Pattern einzusetzen, sollte zunächst kurz stehen bleiben und überlegen, was er erreichen will:

  • Will ich die Oberfläche automatisiert testen
  • Will ich die UI austauschen und z.B. eine zusätzliche Webschnittstelle mit HTML zur Verfügung stellen
  • Will ich gleichzeitig an der UI designen und am Code entwickeln können, z.B. durch ein Marketing und ein Entwickler Team

Das sind die 3 wesentlichen Akzeptanztests, die den Ausschlag für oder gegen WPF und MVVM geben.

Wer keine Tests schreiben will, der verliert bereits einen wesentlichen Punkt, denn der Grundgedanke hinter MVVM war besagtes Testen. Persönlich würde mich interessieren wie viele MVVM einsetzen und dementsprechend die Tests schreiben. Diejenigen, die lediglich mit Wechselgedanken spielen, denen könnte man empfehlen sich die Testabdeckung für die Geschäftslogik anzuschauen. Ist diese sehr moderat bis hin zu gänzlich fehlend, so ist nicht davon auszugehen, dass der Punkt umgesetzt werden würde.

Bleibt die lose UI Kopplung als weiterer Punkt. Sicherlich nicht unwichtig, bedenkt man, dass webbasierter und mobiler Zugang zu Applikationen ganz sicher die Zukunft gehört. Bestes Zeichen hierfür: Neue Windows 8 Apps können nur noch mit XAML oder HTML5 entwickelt werden. Allerdings könnte in diesem Fall, um zwei Alternativen zu nennen, vielleicht auch auf ASP.NET mit MVC oder auf WPF mit Code Behind gesetzt werden.

Der letzte und für mich persönlich mindestens genauso wichtige Akzeptanztest ist die Möglichkeit Designer an die Oberfläche zu setzen, während man als Entwickler seinem Hauptgeschäft nachgehen kann: Geschäftsprozesse implementieren und optimieren. Was hier bereits mit Expression Blend oder ähnlichen Tools bereits möglich ist, kann ich nicht sagen, allerdings finde ich den Gedanken charmant! Nero hatte hierzu einmal einen Praxisbericht gegeben – damals noch mit Version 2 von Expression. Falls dies ein Entwickler aus Karlsbad liest: Wie ist der aktuelle Stand? Wie ich allerdings bei mir im Betrieb feststellen musste, sind die Hemmnisse – sowohl auf Seiten der Designer in der Marketingabteilung, als auch auf Seiten der Entwicklerkollegen – hier noch recht hoch. Primär wird daran gezweifelt, ob dies technisch überhaupt ohne größere Schwierigkeiten funktioniert (Stichwort Mock-Daten) und ob man als Entwickler dieses Mittel der Steuerung aus der Hand geben sollte. Inwieweit weniger IT-affine Designer überhaupt dazu in der Lage wäre, steht auch einer anderen Seite.

Sind alle 3 Punkte zu verneinen, so rechtfertigt der Mehraufwand und der Einkauf von Komplexität sicherlich nicht den Einsatz. In diesem Fall kann man – ohne sich schämen zu müssen Smiley – durchaus auch über WPF mit Code Behind nachdenken.

IT Asset Management mit SharePoint 2010 – Teil 1

Den Webcast dazu gibt es hier.

Der Aufbau der erwähnten Inhaltstypen habe ich als Screenshots eingefügt. Seht es eher als Beispielimplementierung, an der ihr euch orientieren könnt. Denkbar wäre z.B. eine Erweiterung dahingehend, dass ihr eine weitere Liste erstellt, in welcher ihr Systemausfälle samt Ursache, Lösung und Ausfalldauer notiert.

 

Überblick Inhaltstypen:

image

 

Inhaltstyp Server, welcher von Element ableitet:

image

Inhaltstyp Physical, welcher von Server ableitet:

image

Inhaltstyp Virtual, welcher von Server ableitet:

image

Inhaltstyp Serverlizenzen, welcher von Element ableitet:

image

Inhaltstyp Systeme/Dienste, welcher von Element ableitet:

image

 

Zusätzlich haben wir noch eine Liste mit den IT-lern und deren Verantwortungsbereich. Hier könnte aber durchaus auch auf eine bestehende Mitarbeiterliste, in welcher die mobile Geschäftsnummer hinterlegt ist, verwendet werden:

image

%d Bloggern gefällt das: