Mister Goodcat

Peter's home of all things life

Wednesday, 7/23/2014 8:00 PM
by Peter Kuhn
0 Comments

A Semantic Version Provider

Wednesday, 7/23/2014 8:00 PM by Peter Kuhn | 0 Comments

I did some thinking recently on how team collaboration with different versioning strategies of components should look like, ideally, to cause as little friction as possible. Particularly, the use of technologies like NuGet to distribute components, and ways to integrate this with continuous builds, made it necessary to re-consider some details I had taken as a given before.

During a proof-of-concept phase for some workflow ideas I came to the conclusion that it would be necessary to have some sort of service that can provide version numbers on a "global" level (e.g. accessible to everyone, not only to your build system, but also individual developers). Naturally, I wanted it to follow a semantic versioning approach, something I've grown a fan of during the last years.

What started as a quick implementation of a sample service has now turned into a complete library for semantic version generation that can be used in arbitrary .NET projects. It's fully backed by unit and integration tests and should be production-ready (your mileage may vary). You can find it on GitHub. The repository also contains a Web API wrapper that exposes its features as a web service, with support for arbitrary numbers of projects, components and the like to version, through configuration.

Monday, 7/14/2014 11:00 AM
by Peter Kuhn
0 Comments

Dependency Injection: das große Bild

Monday, 7/14/2014 11:00 AM by Peter Kuhn | 0 Comments

Beim Thema Dependency Injection kann man leicht mal den Überblick verlieren, wenn man sich in größeren Projekten bewegt. Dabei meine ich diesmal nicht unbedingt die Abhängigkeiten selbst, sondern die Zuständigkeiten dafür, wer diese eigentlich verwaltet. In größeren Solutions existieren verschiedenste Projekte oft nebeneinander, von Webanwendungen über REST-APIs bis hin zu Clients, und alle scheinen unterschiedliche Mechanismen zu verwenden. Aber es gibt auch Lichtblicke. More...

Tuesday, 7/1/2014 6:00 AM
by Peter Kuhn
0 Comments

My focus going forward has shifted

Tuesday, 7/1/2014 6:00 AM by Peter Kuhn | 0 Comments

As of today, I am no longer a Microsoft MVP for Windows Phone Development. This was expected. As you have probably noticed, most of my Windows Phone related activities came to a complete halt in early 2014, and some other coincidentally accompanying events, like the shutdown of Microsoft Press Germany, additionally led to some of my other last year's activities never being recognized publicly.

I want to take the chance and assure everyone that my inactivity has nothing to do with the Windows Phone platform per se. While I disagreed with some details of its recent evolvement, and even frowned upon decisions that have been made, as a developer I generally still see Windows Phone as the superior platform compared to any other competitor on the market today.

Then why the change? First of all, some personal circumstances required me to set priorities, and cutting back on my community activities was the most logical thing to do at the time. But furthermore, as the title of this post (rings a bell?) implies, my personal interest and focus has changed since I started working with Windows Phone in 2010. Again this was something I had expected at some point. My developer life in the last two decades or so always revolved around pushing technologies that I enjoy for some time, until I sense it is time to move on and find something new. Microsoft's technologies, although not exclusively, always were a huge part of that cycle. When I learned C# in 2001, I started evangelizing it immediately. Once I realized the power of WPF, I spent hours after hours teaching other devs about it whenever possible. At some point, Silverlight was the most powerful technology at hand to build business apps, and I put an enormous amount of energy into pushing it in the community. And, finally, I jumped onto Windows Phone very early and, deeply convinced of its superiority, turned into the strongest advocate for it quickly.

Today, almost four years later, I feel the urge to move on. I have no idea where I'm headed for. The above list may give the impression I've only worked with client-side technologies in the last years, which is far from the truth. And because Windows 8 still has not "clicked" for me, and HTML5 still simply seems not ready for me yet, my future focus might as well be some completely unrelated, purely server-side story. I honestly don't know yet. All I know is that it's going to be awesome – it always has been :).

Thanks everybody, both in the community and at Microsoft for the past years, and all the best to Windows Phone and every Windows Phone developer out there.

Monday, 6/23/2014 7:00 AM
by Peter Kuhn
0 Comments

JavaScript: Kapselung und Vererbung (Teil 3)

Monday, 6/23/2014 7:00 AM by Peter Kuhn | 0 Comments

Die Art, wie ich in Teil 2 die Vererbungshierarchie über die Prototypenkette hergestellt habe, hat eine interessante Diskussion ausgelöst, da es dazu durchaus unterschiedliche Meinungen gibt. Es lohnt sich also, einen genaueren Blick auf die verschiedenen Möglichkeiten zu werfen. More...

Friday, 6/20/2014 5:00 AM
by Peter Kuhn
0 Comments

JavaScript: Kapselung und Vererbung (Teil 2)

Friday, 6/20/2014 5:00 AM by Peter Kuhn | 0 Comments

Mit den Grundlagen aus dem ersten Teil des Artikels können wir nun einen Blick auf die Möglichkeiten der Vererbung mittels des Prototypen-Mechanismus in JavaScript werfen. Lange Zeit habe ich diesen "irgendwie" genutzt, ohne aber die Funktionsweise vollständig zu verstehen. Es hat sich gelohnt, das nachzuholen. More...

Thursday, 6/19/2014 5:00 PM
by Peter Kuhn
0 Comments

JavaScript: Kapselung und Vererbung (Teil 1)

Thursday, 6/19/2014 5:00 PM by Peter Kuhn | 0 Comments

Eines der bisher weitgehend unverstandenen Details an JavaScript für mich war das Thema Kapselung und Vererbung. Um den gravierendsten Problemen zu entgehen, vermied ich schon lange Zeit globale Variablen und Funktionen, verstand aber die dazu genutzten Techniken nie wirklich: mal definierte ich innere Funktionen in Konstruktoren, mal gab ich anonyme Objekte mit Funktionen per Closures zurück, mal schraubte ich an der ominösen Prototype-Property herum, bis das Ergebnis meinen Vorstellungen entsprach. Es musste dringend Klärung her, was ich da eigentlich jahrelang wirklich getan hatte. More...

Thursday, 6/19/2014 3:00 PM
by Peter Kuhn
0 Comments

Ein (schmerzhaftes) Eingeständnis

Thursday, 6/19/2014 3:00 PM by Peter Kuhn | 0 Comments

Ganz im Gegenteil zu C# und ein paar anderen Sprachen, die mir ans Herz gewachsen sind, hege ich insgeheim eine tiefe Abneigung gegen JavaScript. Als ich darüber etwas genauer nachdachte, erstaunte mich diese Erkenntnis umso mehr; schließlich machte ich meine ersten Erfahrungen damit Mitte/Ende der Neunziger im Netscape Navigator, um hässliche Rollover-Effekte auf noch hässlicheren Webseiten einzubauen. Damit sollte ich mehr als genug Zeit gehabt haben, um mich im Lauf der Jahre irgendwie mit der Sprache anzufreunden. Warum also hat es nie geklappt, mit JavaScript warm zu werden? More...

Friday, 6/6/2014 6:00 AM
by Peter Kuhn
0 Comments

Binär oder Text - das ist hier die Frage

Friday, 6/6/2014 6:00 AM by Peter Kuhn | 0 Comments

Wenn man wissen möchte, ob eine Datei Text oder Binärdaten enthält, sieht man sich die Dateiendung an. Was aber, wenn es keine Dateiendung gibt oder man diese nicht kennt? Als Mensch hat man es einfach, weil unser Gehirn Erstaunliches leistet. Eine Entscheidung kostet nur einen kurzen Blick auf den Inhalt einer Datei, um erkennen zu können, ob er als Text Sinn ergibt oder aussieht wie ein Teller Spaghetti. Ein Computer hat es da schon deutlich schwerer, und mit ihm der Programmierer. Was tun? More...

Wednesday, 5/7/2014 5:00 AM
by Peter Kuhn
4 Comments

How Ninject inadvertently made the case for SOLID

Wednesday, 5/7/2014 5:00 AM by Peter Kuhn | 4 Comments

It's wonderful to use a robust, great, field-tested tool that simply works. Except when it doesn't.

A recent design change in some component I worked on involved switching the Ninject bindings for some type to request scope. The idea is to keep the same instance of a certain type around in a web application until the request is completed, thus creating a pseudo-singleton for as long as a request is processed. Ninject has a strategy to dispose instances when they are deactivated, meaning that when the request ends, the scoped binding would result in calls to IDispose.Dispose() when your bound type implements that interface. In my case, disposal of these instances was crucial, as they occupy valuable resources (connections to external systems). After the scope change however, I realized that my instances never were disposed and started investigation. More...

Tuesday, 4/29/2014 7:00 AM
by Peter Kuhn
0 Comments

Gedanken zum Thema Dependency Injection

Tuesday, 4/29/2014 7:00 AM by Peter Kuhn | 0 Comments

In den letzten Jahren hat sich auf breiter Fläche die Erkenntnis durchgesetzt, dass Entwurfsmuster wie Dependency Injection bzw. das allgemeine Prinzip Inversion of Control deutliche Vorteile in der Softwareentwicklung mit sich bringen. Verantwortlichkeiten von Typen werden klarer separiert, die Testbarkeit deutlich erhöht oder vereinfacht, und gleichzeitig sind die Abhängigkeiten zwischen Typen und Objekten durch dedizierte Komponenten an zentraler Stelle klar geregelt. Gleichzeitig sind sich viele Entwickler aber unsicher, ob ihre Verwendung dieser Prinzipien wirklich ideal ist, und nicht selten hat man irgendwie "ein mulmiges Gefühl" bei der Sache. In diesem Artikel möchte ich nicht die Vorteile oder Grundlagen von Dependency Injection erläutern - das ist an diversen anderen Stellen schon mehr als ausführlich geschehen. Stattdessen möchte ich ein paar der Bedenken und häufig wiederkehrende Fragen aufgreifen, die mir in den letzten Jahren immer wieder in Diskussionen begegnet sind. More...