Thursday, March 28, 2013

Buchempfehlung: The connected company

Bin über den Veranstaltungshinweis: "Softwarekompetenz für die Zukunft" (heise developer) auf das Buch The connected company gestoßen. Aus der Kurzbeschreibung:
The future of work is already here. Customers are adopting disruptive technologies faster than your company can adapt. When your customers are delighted, they can amplify your message in ways that were never before possible. But when your company's performance runs short of what you've promised, customers can seize control of your brand message, spreading their disappointment and frustration faster than you can keep up.

Wednesday, March 27, 2013

Desktop / Browser Interoperability

Durch eine einfache Erweiterung des Thrift-HTTP-Servers um CORS können nun JavaScript-Callbacks zu lokalen Desktopanwendungen gelangen. Das entsprechende MetaThrift-Beispiel kann jetzt mithilfe der folgenden Links einfach nachvollzogen werden:

Friday, March 22, 2013

.vdproj in Rente

Während der Ausstattung eines Demo-Client mit diversen unserer Software-Anteile bin ich auf das Problem gestossen, dass das aktuelle Visual Studio (VS2012) keine Visual Studio Setup Projects (.vdproj) mehr unterstützt. Tatsächlich hat Microsoft den Support dafür eingestellt, VS2010 ist die letzte unterstützende Version.

Daher meine Bitte an alle Kollegen: Neue Installer auf Basis des WiX Toolset bauen und alte Installer auf WiX migrieren.

Thursday, March 21, 2013

Feature Toggling

Viele kennen das FeatureToggle-Pattern schon, vielleicht auch unter dem Namen Feature Flags. Worum geht es dabei?
  • Die Motivation: Schmerzen beim Zusammenführen von Branches zu vermeiden.
  • Der Ansatz: Unfertige Features einfach deaktiviert mitausliefern (Kein Branching).

Tuesday, March 19, 2013

Sticky! Jenkins und Git

Achtung für diejenigen die mit Jenkins und Git arbeiten: Mit der aktuellen Version (git-client.1.0.4) wurde vom Command Line Interface (CLI) auf JGit umgestellt. Eigentlich eine gute Idee, leider gibt es jedoch noch Probleme (Workarounds finden sich auch dort).

Tuesday, March 12, 2013

Eric Ries on Lean Startup

Die Lean Startup-Bewegung ist zurzeit in aller Munde. Ausgehend von Was kennzeichnet ein Lean Startup? bin ich auf das Video Evangelizing for the Lean Startup (Entire Talk, ~1h) gestoßen, indem Eric Ries in bestechender Weise seine eigenen Erfahrungen mit Lean Startup teilt. Sehr zu empfehlen.

Thursday, March 7, 2013

Coping with the the Flash: Das Circuit Breaker Pattern

In Backend-lastigen Projekten hat die Anwendung des von Michael Nygard geprägten Circuit Breaker Pattern (Blitzableiter) viel zur Stabilität beigetragen.

Dabei handelt es sich um ein relativ neues Pattern mit der folgenden Kernidee:
The essence of the pattern is that when one of your dependencies stops responding, you need to stop calling it for a little while. A file system that has exhausted its operation queue is not going to recover while you keep hammering it with new requests. A remote web service is not going to come back any faster if you keep opening new TCP connections and mindlessly waiting for the 30 second timeout. Worse yet, if your application normally expects that web service to respond in 100ms, suddenly starting to block for 30s is likely to deteriorate the performance of your own application and trigger a cascading failure.

Die Implementierung orientiert sich grob am Design eines Blitzableiters oder Fehlerstromschutzschalters (FI), daher der Name.

Für .NET habe ich das sehr leichtgewichtige NuGet-Package Reliability Patterns von Nygard selbst verwendet.

In Java gibt es mehrere Implementierungen, eine davon z.B. in der JRugged library. Diese waren jedoch für unseren Geschmack so schwergewichtig und überladen, dass wir das einfache Pattern gerade selbst implementiert haben.

Die typische Nutzung verwendet einen Decorator mit CircuitBreaker als Proxy für die Real-Implementierung.

Ich habe zum ersten Mal vom CircuitBreaker-Pattern aus dem Buch Dependency Injection with .NET von Mark Seemann gehört. Lesen bildet also nicht nur.

Erfahrungsbericht: Simple.Data

Im Rahmen eines Kundenprojekts habe ich Erfahrungen mit der Datenzugriffsbibliothek Simple.Data gesammelt. What's the deal? Tadaa: der Ansatz von Simple.Data setzt auf Konventionen sowie dynamic und kommt dadurch ohne boilerplate code oder vorgenerierte ORM-Modellen aus. Mein Eindruck: It just works! Genial einfach in der Benutzung und sauber programmiert.

Intern arbeitet es mit der TPL nach dem Task-based Asynchronous pattern (TAP) ist damit also bereit für C# 5.0 mit async und await. Es ist nach meinen Tests threadsafe und transaktionssicher. Einfach klasse!

Für Entwickler die hauptsächlich mit statisch typisierten Sprachen wie Java oder C# arbeiten, ist der Umgang mit einer voll dynamischen API allerdings ungewohnt, bricht dann doch die gewohnt komfortable Begleitung durch Intellisense, Resharper und den Compiler weg.

Die meisten (ich auch) tendieren dann dazu, ein Repository als Abstraktionsebene einzuschieben.
Mark Rendle, Autor von Simple.Data, hat sich dazu seine eigenen Gedanken gemacht und beschreibt in seinem Post HOWTO: Dial up the static on Simple.Data einen zu TypeScript ähnlichen Ansatz mithilfe der Duck Casting-Bibliothek ImpromptuInterface. Stark!