
Es ist mal wieder eine der einmaligen Gelegenheiten jemanden direkt aus der Productgroup aus Redmond live in Deutschland sprechen zu sehen und zu hören.
Harry Pierson, Program Manager bei Microsoft im IronPython Team in Redmond, wird einen Vortrag über dynamische Sprachen in .NET (IronPython und IronRuby) halten:
As you may know, Microsoft is developing IronPython and IronRuby, .NET implementations of the popular open-source programming languages Python and Ruby. While it's clear that Microsoft wants to attract existing Python and Ruby developers to .NET, the role of IronPython and IronRuby for existing .NET developers is less clear. What value is there for a .NET developer in learning IronPython? What are the tradeoffs between IronRuby and a more traditional .NET language like Microsoft Visual C# or Visual Basic? Harry Pierson, new PM for IronPython, discusses where dynamic languages fit in the.NET developer's toolbox.
Also nicht wie hin, kostest nichts.
Bitte melde Euch kurz mit einer E-Mail an mail@bonn-to-code.net an. So dass der andrang abgeschätzt werden kann.
17.11.2009 ab 19 Uhr bei Comma Soft in Bonn: http://www.bonn-to-code.net/1736.aspx

Tuesday, November 10, 2009 7:05 PM |
Verteilte Versionskontrolle ist der “neueste” Schrei, am lautesten wird derzeit wohl bei Git geschrieben.
Ein Problem was wohl viele davon abhält Git zu verwenden ist die fehlende Integration in Visual Studio. Mich am Anfang auch, ich konnte es mir halt nicht vorstellen das sowas wie das umbennen von Datein oder das hinzufügen von neuen Dateien einfach so funktioniert ohne dass man ständig drüber nachdenken muss.
Bei Subversion z.B. muss man alle Änderungen an Dateinamen oder neue Dateien mit Subversion selbst machen. Macht man dies nicht kommt man in Teufels Küche. Damit man auch da nicht immer drüber nachdenken gibt es für Subversion AddIns für Visual Studio die einem die Arbeit im Hintergrund einfach abnehmen so dass man unbeschwert damit arbeiten kann.
Bei Git ist dies nicht so nötig. Mit einer ordentlichen .gitignore Datei findet Git zuverlässig hinzugefügten und gelöschten Dateien, und schafft es auch Unbenennungen selbständig aufzulösen. Warum nicht gleich so. Deshalb lieben es die Git Puristen auf der Shell zu arbeiten und alles über die Kommandozeile zu machen. Dazu gehöre ich nicht und wollte auch lange eine Visual Studio integration.
Seit ein paar Tagen beschäftige ich mich intensiver mit Git und stelle fest; man braucht keine Integration wie man sie von VisualSVN oder AnkhSVN gewohnt ist. Aber Kommandozeile war mir doch zu nervig auf dauer.
Jedoch kann man Visual Studio mit ein paar Handgriffen so anpassen dass man Git mit ein paar Mausklicks und Tastatur bedienen kann sowie auf die Git GUI zugreifen kann.
Die Magie liegt in der Verwendung von Git als External Tool in Visual Studio. Darin kann man sich die gewünschten Git Kommandos eintragen und in Toolbars sowie mit Tastatur verwenden.
Die Ausgaben der einzelnen Befehle können dann im Output-Window angezeigt werden.
Exemplarisch zeige ich die Schritte mit Visual Studio 2010, dies funktioniert jedoch auch mit Visual Studio 2008 und den Vorversionen.
Über das Menü Tools->External Tools gelangt man in die Konfiguration der External Tools.
Dies sind die aktuell bei mir eingestellten Befehle, keine Ahnung ob die representativ sind. Sie spiegeln dass wieder was ich gerade brauche und werden sich wohl in Zukunft ändern. Screenshots von den Parametern der einzelnen Befehle folgen weiter unten.
Wenn man sich die externen Tools so eingestellt hat wie man sie braucht muss man sich nur noch eine neue Toolbar erstellen und die Tools einbinden. Dazu einfach über das Menü Tools->Customize in die Toolbar-Anpassung wechseln.

Einfach eine neue Toolbar erstellen und benennt sie nach Wahl, Git bietet sich an.
Danach findet sich in Visual Studio eine leere Toolbar. Nun muss man diese nur noch mit Leben füllen, dazu wechselt man auf den Commands-Tab auf dem Customize-Dialog und wählt die erstellte Toolbar aus. Der kurze Wege dahin ist über den kleine Menü-Dropdown am Ende der Toolbar. Dort einfach Customize auswählen und schon ist man an der richtigen Stelle im Dialog.
Über Add Command… wählt man nun ein Kommando nach dem anderen aus und fügt es der Toolbar hinzu.
Leider wird nicht der eingetragene Befehle angezeigt, sondern nur External Command 1-24. Wobei bei mir Visual Studio 2010 Beta 2 die Kommandos 4 und 5 in der Liste unterschlägt, Visual Studio 2008 macht dies nicht.
Das Git am Anfang fügte ich über Add New Menü hinzu, diese ist als Toolbar Git | Git auch verfügbar und könnte mit den selten genutzteren Befehlen bestückt werden.
Bei den einzelnen Einträgen wird als Vorsteinstellung der eingetragene Titel des Kommandos verwendet, diesen kann man über Modify Selection anpassen.
Über die Git Gui kann auf einfache Weise die funktionalitäten wie Branchen, Mergen oder Commits mit ausführlichen Kommentar ausführen. Geht natürlich auch alles über die Kommandozeile, aber nett ist es schon.
Das war es auch schon was man zum arbeiten mit Git in Visual Studio braucht, der Vorteil ist das man nicht auf irgendwelche AddIns für neuen Visual Studio Versionen warten muss.
Hier nun die Einstellungen für die Externals Tools für Git bei mir.
Alle neuen Dateien zum Git Repository hinzufügen
Vorschau der Dateien die zum Git Repository hinzugefügt werden
Status über die anstehenden Änderungen
Zum lokalen Git Repository hinzufügen und alle neuen Dateien hinzufügen
Die Git Gui
Update der Änderungen aus dem zentralem Subversion Repository
Wenn man Git als lokales Repository verwendet besteht die Möglichkeit gegen ein zentrales Subversion Repository zu arbeiten. So ist ein Umstieg sehr einfach und man lokal die Vorteile von Git nutzen.
Commit ins zentrale Subversion Repository
Macht für alle Änderungen die zwischenzeitlich ins lokale Git Repository committed worden sind entsprechende Commits nach Subversion ins Zentrale Repository.
Für Verbesserungsvorschläge und Hinweise schreibt einfach was in die Kommentare, ich stehe ja noch am Anfang meiner Erfahrungen mit Git.

Sunday, November 01, 2009 12:44 PM |
Ende Oktober bin anlässlich eines Vortrags auf der prio.conference, sowie eines Vortrags bei der .net Developers Group München, in München.
München ist eine große Stadt mit vielen .net Entwicklern. Deshalb nehme ich mir ein Beispiel an Stefan Lieser und Ralf Westphal und “klaue” mir die Idee der Kaffeehauskonsultation. Kurze Beratungen oder Problemlösungsansätze können da besprochen oder gefunden werden, sowie einfach mal nur eine “zweite” Meinung.
Am 27.10.2009 ab 16 Uhr sitze ich in der lounge 93 des Hotel Marriot. Diese Konsultation ist natürlich kostenfrei. Wer also Interesse hat schickt mir bitte eine EMail.
Dies ganze mache ich Just for Fun, buchen muss und kann man mich danach nicht.

Tuesday, October 13, 2009 1:32 PM |
Innerhalb eines ASPX-Views ist das erstellen eines Links bzw. einer Url einfach. Es gibt ja HtmlHelper.ActionLink() und MvcViewPage.Url um diese zu erzeugen.
Nun gibt es Situation wo man keinen direkten Zugriff darauf hat an jedoch die Url zu bestimmten Action inklusive der richtigen Parameter braucht.
So ist es in einer meiner Anwendungen notwendig E-Mails mit Links auf die Anwendung zu haben (Neues Kennwort zuteilen, Benutzer aktiveren etc.)
Dies wird weder beim Controller noch im View veranlasst (und wenn man es doch macht sollte man dringend darüber nachdenken warum man dies macht und es seinlassen). Natürlich möchte man auch das beim Erstellen der Urls auch die verwendeten Routen berücksichtigt werden.
Wenn ich also eine Url brauche, deklariere ich mir erst ein entsprechendes Interfaces.
public interface IPasswordMailUrlBuilder
{
string GetResetPasswordUrl(string userHash, Guid guid);
}
Die Anwendung ist sehr einfach. Die Abhängigkeiten werden mittels eines IoC-Containers aufgelöst und bei der Instanziierung über den Construcor übergeben.
private readonly ITemplateEMailSending sending;
private readonly IPasswordMailUrlBuilder urlBuilder;
public void SendWebUserThePasswordResetLink(WebUser webUser)
{
webUser.EnsureConfirmationKey();
string url = urlBuilder.GetResetPasswordUrl(webUser.GetWebUserHash(hashing), webUser.ConfirmationKey.Value);
TemplateItems items = CreateTemplateItems();
items.Add("url.resetpassword", url);
sending.Send(MailTemplates.SendWebUserPasswordReset, webUser, items);
}
ITemplateEMailSending ist ein Service der aus einer Template eine E-Mail erstellt. In den TemplateItems stehen die Elemente drin die auf der Template ausgetauscht werden. Aber dies ist nicht das Thema hier.
Die Implementierung von IPasswordMailUrlBuilder sieht nun folgendermaßen aus.
public class PasswordMailUrlBuilder : IPasswordMailUrlBuilder
{
private readonly IActionUrlBuilder urlBuilder;
public PasswordMailUrlBuilder(IActionUrlBuilder urlBuilder)
{
this.urlBuilder = urlBuilder;
}
public string GetResetPasswordUrl(string userHash, Guid guid)
{
return urlBuilder.BuildActionUrl<PasswordController>(c => c.CreateNew(userHash, guid.CleanGuid()));
}
}
Der PasswordMailUrlBuilder nutzt nun IActionUrlBuilder, in dessen Implementierung findet dann die eigentliche Arbeit statt.
Damit das ganze funktioniert ist es erforderlich auch die ASP.NET MVC v1.0 Futures zu verwenden. In den Futures ist eine einfache Möglichkeit enthalten um Typisiert auf Controller-Actions zu verweisen. ASP.NET MVC v2 wird diese Möglichkeit direkt enthalten haben.
public interface IActionUrlBuilder
{
string BuildActionUrl<TController>(Expression<Action<TController>> expression)
where TController : Controller;
}
Wie man sieht ist IActionUrlBuilder wieder sehr kompakt, bietet jedoch alles was man dazu so braucht. Die Implementierung ist ein wenig mehr Aufwand, jedoch alles keine Magie.
Der Trick besteht darin erstmal die Action-Expression in die RouteDataValues zerlegen zu lassen, dazu bieten die MVC Futures die ExpressionHelper-Klasse.
Nun verwendet man die MVC eigene UrlHelper-Klasse um sich daraus eine Url erstellen zu lassen. Da die Angabe http://servername.tld in diese Url fehlt setzt man diese einfach noch davor.
Die UrlHelper-Klasse braucht einen RequestContext, diesen erstellt man einfach. Man solltet nur darauf achten das man die schon vorhandenen RouteDataValues ermittelt und übergibt. Sonst kann es passieren das Teile der Url die weder Controller oder Action sind einfach unter der Tisch fallen gelassen werden (z.B. Angabe einer Culture in der Url). Möchte man die vorhandenen Werte nicht berücksichtige. So ist beim erstellen des RequestContext einfach eine leere Instanz von der RouteData-Klasse zu übergeben.
Und hier der Code.
public class ActionUrlBuilder : IActionUrlBuilder
{
public string BuildActionUrl<TController>(Expression<Action<TController>> expression)
where TController : Controller
{
var routeValues = GetRouteValues(expression);
return CreateUrl(routeValues);
}
private static RouteValueDictionary GetRouteValues<TController>(Expression<Action<TController>> expression)
where TController : Controller
{
return ExpressionHelper.GetRouteValuesFromExpression(expression);
}
private static string CreateUrl(RouteValueDictionary routeValues)
{
var urlHelper = new UrlHelper(CreateRequestContext());
return GetBaseUrl(urlHelper.RequestContext) + urlHelper.RouteUrl(routeValues);
}
private static string GetBaseUrl(RequestContext context)
{
return string.Format("{0}://{1}", context.HttpContext.Request.Url.Scheme, context.HttpContext.Request.Url.Authority);
}
private static RequestContext CreateRequestContext()
{
HttpContextBase httpContext = new HttpContextWrapper(HttpContext.Current);
return new RequestContext(httpContext, RouteTable.Routes.GetRouteData(httpContext));
}
}

Wednesday, July 29, 2009 6:49 PM |
Ein möglicher Angriff auf Web-Anwendungen ist Cross-Site Request Forgery (CSRF). Mit dem ASP.NET MVC Framework gibt es eine Möglichkeit solche Angriffe zu verhindern.
Siehe dazu auch diesen Blog-Eintrag: Prevent Cross-Site Request Forgery (CSRF) using ASP.NET MVC’s AntiForgeryToken() helper.
Jedoch passiert es mir des Öfteren dass ich vergesse daran zu denken die Actions entsprechend zu attributieren.
Deshalb habe ich mir einen Unit-Test geschrieben der alle Controller-Action die auf POST reagieren überprüft ob sie dass ValidateAntiForgeryTokenAttribute haben.
Damit er nicht bei mir versauert, hier der Test zur allgemeinen Verwendung.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Web.Mvc;
using DerAlbert.Community.Web.Controllers;
using MbUnit.Framework;
namespace DerAlbert.Community.Web.Tests.Controllers
{
[TestFixture]
public class ControllerTests
{
[Test]
public void Controller_AllePostActions_NutzenValidateAntiForgeryTokenAttribute()
{
foreach (var controllerType in AllControllerTypes())
{
foreach (var methodInfo in GetActionMethods(controllerType))
{
if (MethodAcceptsPost(methodInfo))
{
Assert.IsTrue(HasValidateAntiForgeryTokenAttribute(methodInfo),
string.Format("{0}.{1} nutzt nicht das ValidateAntiForgeryTokenAttribute",
controllerType.FullName, methodInfo.Name));
}
}
}
}
private bool HasValidateAntiForgeryTokenAttribute(MethodInfo methodInfo)
{
return null != (from a in methodInfo.GetCustomAttributes(false)
where a is ValidateAntiForgeryTokenAttribute
select a).SingleOrDefault();
}
private bool MethodAcceptsPost(MethodInfo methodInfo)
{
var attribute = (AcceptVerbsAttribute) (from a in methodInfo.GetCustomAttributes(false)
where a is AcceptVerbsAttribute
select a).SingleOrDefault();
return attribute != null && attribute.Verbs.Contains("POST");
}
private IEnumerable<Type> AllControllerTypes()
{
return from t in typeof (HomeController).Assembly.GetExportedTypes()
where typeof (Controller).IsAssignableFrom(t)
select t;
}
private IEnumerable<MethodInfo> GetActionMethods(Type controllerType)
{
return from mi in controllerType.GetMethods()
where typeof (ActionResult).IsAssignableFrom(mi.ReturnType)
select mi;
}
}
}

Thursday, July 16, 2009 4:31 PM |
Nur noch sieben Tage und der er geht los, der erste .NET Open Space für 2009 in Blaustein bei Ulm.
Bis jetzt haben sich 65 Personen angemeldet. Somit ist viel Know-How in den unterschiedlichsten Bereichen vor Ort. Wenn ich mir die Teilnehmerliste ansehe verspricht es ein sehr interessantes Wochenende werden bei der Menge an Wissen und Interessen.
Ich selbst werde wohl mindestens eine Session zu ASP.NET MVC vorschlagen, auf der User Group Tour wurde reges Interesse daran bekundet.
Wer sich also nur Ansatzweise für Software-Entwicklung mit .NET Interessiert der sollte es nicht versäumen auch vom 11. bis zum 12. Juli in Blaustein zu sein! Es sind noch wenige freie Plätze vorhanden.
Da so ein Open Space am besten funktioniert wenn man vorher wenigstens schon mal das eine oder andere Wort gewechselt hat, gibt es nun auch ein spontanes Treffen zum kennenlernen am Freitag den 10. Juli 2009. Dies sollte man sich auch nicht entgehen lassen.
Also, wir sehen uns in einer Woche in Blaustein!

Saturday, July 04, 2009 8:34 AM |
Den ersten Teil der ASP.NET MVC User Group Tour habe ich nun hinter mich gebracht.
Ich war in
- Karlsruhe
- Ulm
- Konstanz
- Ingolstadt
- Nürnberg
Hier nun wie versprochen der erweiterte Quelltext des Beispiels welches ich Live entwickelt habe. Der Quelltext wurde erweitert, umgebaut, verbessert usw. usf.
Zum Download: MvcUserGroupTourJuni2009.zip
Die nächsten geplanten Orte sind
Sobald die Termine genau feststehen könnt Ihr diese auf den Websites der UserGroups nachlesen.

Thursday, June 25, 2009 7:24 PM |
Gestern twitterte Thomas über ein Problem beim Mocken, nach der Lösung blogte er darüber.
Das Problem ist dass Rhino Mocks bei object.AssertWasCalled() bei der Parameter-Überprüfung auf die Gleichheit eines Objektes geprüft wird und somit wenn man nur auf eine bestimmte Property prüfen will dies nicht geht.
Somit schlug dieser Test fehl.
[TestMethod]
public void ChangeEmail_POST_sendet_eine_Aktivierungs_Email_an_den_Benutzer()
{
// Snipp (Nicht vorhandene Logik des Tests nicht beachten :))
notificationService.AssertWasCalled(
n => n.Send(configurationService.GetValue("Email.Sender"),
new EmailRecipient { To = "abc@efg.hij" });
}
Für die Lösung musste er .Equals() überschreiben, nur für den Test. Desweiteren gibt es auch Probleme wenn man nur einzelne Properties eines Objektes überprüfen will. Gerade bei komplexeren Klassen kommt dies öfters vor.
Hier eine Lösung wo man .Equals() nicht überschreiben muss, und auch auf einzelne Properties überprüfen kann.
Das Beispiel von Thomas würde damit so aussehen.
[TestMethod]
public void ChangeEmail_POST_sendet_eine_Aktivierungs_Email_an_den_Benutzer()
{
// Snipp (Nicht vorhandene Logik des Tests nicht beachten :))
notificationService.AssertWasCalled(
n => n.Send(configurationService.GetValue("Email.Sender"),
Args<EmailRecipient>.MatchProperties( new { To = "abc@efg.hij" });
}
Hiermit wird nur das To-Property des Objekte welches als Parameter übergeben wird überprüft und alle anderen Properties werden ignoriert (sofern man ein anonymes Objekt übergibt). Natürlich kann man auch ein Objekte eines bekannten Typs übergeben, dann müssen jedoch auch alle Properties angegeben werden.
Hier nun der Code dazu.
using System;
using Rhino.Mocks;
using Rhino.Mocks.Constraints;
namespace DerAlbert.UnitTest.Constraints
{
public static class Anonymous
{
public static AbstractConstraint MatchProperties(object expected)
{
return new AnonymousPropertyConstraint(expected);
}
}
public static class Args<T> where T : class
{
public static T MatchProperties(object expected)
{
return Arg<T>.Matches(Anonymous.MatchProperties(expected));
}
}
}
und
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text;
using Rhino.Mocks.Constraints;
namespace DerAlbert.UnitTest.Constraints
{
public sealed class AnonymousPropertyConstraint : AbstractConstraint
{
private readonly object expected;
private readonly IList<string> messages = new List<string>();
public AnonymousPropertyConstraint(object expected)
{
if (expected == null)
{
throw new ArgumentNullException("expected");
}
this.expected = expected;
}
public override bool Eval(object current)
{
return EvalExpectations(current);
}
private bool EvalExpectations(object current)
{
var expectedPropertyInfos = expected.GetType().GetProperties();
foreach (var expectedInfo in expectedPropertyInfos)
{
object currentValue;
object expectedValue = GetExpectedValue(expectedInfo);
if (TryGetCurrentValue(expectedInfo, current, out currentValue))
{
if (!Equals(expectedValue, currentValue))
{
messages.Add(string.Format(@"'expected value on [{0}.{1}] should be [{2}] but was [{3}]'",
current.GetType().Name,
expectedInfo.Name,
expectedValue,
currentValue));
}
}
}
return messages.Count == 0;
}
private object GetExpectedValue(PropertyInfo expectedInfo)
{
return expectedInfo.GetValue(expected, new object[0]);
}
private bool TryGetCurrentValue(PropertyInfo expectedInfo, object current, out object value)
{
value = null;
var currentInfo = current.GetType().GetProperty(expectedInfo.Name);
if (currentInfo == null)
{
messages.Add(string.Format(@"'expected property [{0}.{1}] does not exists'", current.GetType().Name, expectedInfo.Name));
return false;
}
value = currentInfo.GetValue(current, new object[0]);
return true;
}
public override string Message
{
get
{
var sb = new StringBuilder();
foreach (var message in messages)
{
sb.AppendLine(message);
}
return sb.ToString();
}
}
}
}
Viel Spaß bei der Anwendung.
Technorati-Tags:
TDD,
Rhino Mocks,
C#,
.NET

Wednesday, May 27, 2009 8:50 AM |
Die Vorträge und Sprecher der dotnet Cologne 2009 stehen nun fast komplett fest.
Von Silveright Mobile, über Datenbindung und Datenaustausch über Multitouch ist so einiges vertreten. Natürlich bleibt Silverlight 3 nicht auf der Strecke.
Warum die Konferenz?
Die Idee zur Konferenz entstand auch aus einer gewissen Frustration heraus über die Art und Weise, wie WPF und Silverlight in der Vergangenheit der Öffentlichkeit präsentiert wurden. Wir sind der Meinung, dass WPF und Silverlight eine weitere Verbreitung als bisher verdient haben.
So konnte man u.a. mehrfach in Vorträgen erleben, dass die Frage von Zuschauern "was denn das Ganze für normale Anwendungen bringt" entweder nicht oder eher unbefriedigend beantwortet wurde.
Dies wollen wir mit der dotnet Cologne 2009 ändern, so dass am Ende des Tages vieles klarer wird, dass man weiss wo die Vorteile von XAML basierter Anwendungsentwicklung liegen und dass man Idealerweise motiviert Projekte damit stemmt.
Vortragsübersicht
http://www.dotnet-cologne.de/Vortraege.ashx
Wer sich jetzt noch nicht angemeldet hat, der kann dies jetzt noch machen. Für 15€ geballtes Silverlight & WPF Wissen. Zusätzlich zu den zwölf Vorträgen erwarten Dich mindestens 150 gleichgesinnte mit denen Du Dich den Tag über austauschen.
Nur allzulange sollte man mit der Anmeldnung doch nicht mehr warten. Es wird zwar eine Warteliste geben, aber wer will schon da drauf sein.
Teilnahmehinweise
Wer sich schon angemeldet hat der kann sein Blog oder Website mit folgende Grafiken verschönern.
sowie 
Twitter
Auch das eigene Twitter Profilbild kann dank @kcu einfachst gekennzeichnet werden http://barcampomat.zeitgeisty.net/event/dnc09.
Und teile Deinen Followern mit dass Du Dich zur dotnet Cologne 2009 angemeldet hast. Einfach mit einem Statusupdate (vorausgefüllt),
Hashtag
Das offizielle Tag zur dotnet Cologne ist dnc09 und kann in Flickr, Ipernity, Blogs, Twitter etc. verwendet werden.

Sunday, March 22, 2009 10:37 PM |
Da kam ich gestern spät Abend aus Hannover nach Hause und fand auch einen Brief im Briefkasten.
Adressiert an mich und mit dem .NET-Logo versehen, Inhalt noch eine dünne Pappe mit Microsoft-Tag und vielen Nullen und Einsen. Ich erinnerte mich an einen Twitter-Eintrag vom Thomas Freudenberg der auch sowas erhalten hatte, und schriebe dass Tag auf einen Twitter-Account verweist. Na, Super. Mal wieder virales Marketing, mistige Impressums-Pflicht. Und legte es in die Ecke.
Wollte es schon ignorieren, hatte aber langweile und der Müll wird erst morgen mit runter genommen. Mir geht es da eher wie Kay Giza.
Auch habe ich gerade keinen Scanner, Nullen und Einsen abtippen ist nichts für mich.
Der Twitter Account verweist auf eine Webseite: http://fec4a7a6-9bdc-4bfb-8217-cf6a118fde67.de/ eine Website die eine GUID ist. Die Aktion hat also definitiv was mit .NET, Microsoft zu tun und ist an Software-Entwickler gerichtet.
Jedoch gibt es ein paar andere die schon etwas geforscht haben.
Jan fand raus das die Nullen und Eines ein Ausspruch von Jonathan Swift ist der Gullivers Reisen geschrieben hat. Auch gibt es jemanden bei Microsoft der so heißt.
Michael schaute sich den Domain Inhaber an, “Herr Stockend Marketing”. Google Maps zeigt an “dessen” Adresse eher ein Privathaus als dass einer Firma.
Mit diesen Infos schaute ich als ein wenig rum.
Der Microsoft Jonathan Swift schreibt auch Bücher über Silverlight.
Auf der Website ist ein kleiner Counter der in Silverlight (ClientBin/neledhia.xap) geschrieben ist. Dieser zählt Binär runter. Der Counter endet am 01. April 2009 um 00:00 Uhr (Uhrzeit im Client). Mehr macht das Teil irgendwie nicht. Auch ist keine Aktion für den 01.04.2009 im Silverlight Code vorhanden.
“Follow the white Rabbit” ist der Text der als Standardtext in der Counter Box drin steht bevor zum ersten mal die Zeit anzeigt. Grüße ins Wunderland.
Gibt man “Jonathan Swift” in die TextBox auf der Seite an und klickt auf den DNKDE-Button. So erscheint der Text “stockendmarketing” in Silverlight, dieser wird durcheinander gewürfelt.
Die Website läuft im Debug Modus und verwendet Microsoft Analytics für die Statistiken. Die Site läuft auf einem Windows 2003 Server und wird bei Hetzner gehostet.
Tja, noch nicht viel mehr an Informationen. Also mal auf anderen Wege geforscht.
Die Website läuft auf der IP 213.239.211.109. Der Reverse DNS gibt anheledir.net zurück, was im übrigen eine fehlerhafte Konfiguration ist, den anheldedir.net verweist mittlerweile auf einen anderen Server. Anheledir ist der Name den Gordon Breuer in dem RunUO basierten Rollenspiel Land of Dreams verwendet. Auch bei Twitter verwendet er ihn und sein Blog ist entsprechend betitelt. Auch er verwendet Microsoft Analytics.
Gordon arbeitet bei http://www.dmde.net/ einer sogenannten Cross-Media Agentur, diese ist auch auch Microsoft Partner. Leider schafft sie es keine vernünftige Flash-Weiche zu entwickeln/verwenden. So dass bis auf den Hinweis dass die Seite Flash braucht nichts zu sehen bekommen. Weder bei IE oder beim FF bekomme ich mehr angezeigt und Flash ist installiert. Also keine weiteren Infos dazu.
Es werden noch paar andere Sites auf dem Server gehostet. Neben den Sites für Land of Dreams, Hunde-Sites, der eine oder andere Blog auch die http://kegelparty-bocholt.de. Eher alles privater Natur oder Firmen-Websites die mit Hilfe von Nachbarskindern erstellt worden sind.
Es findet sich ein Test-Blog für DNK dnkblog.anheledir.net dort. Was wohl dafür spricht dass es früher oder später zu DNK(DE) noch ein Blog geben wird.
Was ist also am 1. 4 2009?
- Steckt Microsoft dahinter?
- Ist das ein privat Projekt von Gordon der sich gerade einen Ast lacht?
- Ärgert er sich sich dass er schon aufgeflogen ist?
- Ist das ein Projekt der Firma wo er arbeitet.
- Wem gehört die Profile ID D706 bei Microsoft Analytics?
Tja, mal schauen was passiert, und ob da noch was passiert. Keine Ahnung ob ich mich noch weiter damit beschäftigen werden.

Sunday, March 08, 2009 3:41 PM |
Die .NET User Groups Bonn (Bonn-to-Code.Net, http://www.bonn-to-code.net) und Köln (.net user group Köln, http://www.dnug-koeln.de) veranstalten am 15. Mai 2009 in Köln in den Räumen der neuen Microsoft-Niederlassung die dotnet Cologne 2009, ein gemeinsames Community Event zu den Themen Windows Presentation Foundation (WPF) und Silverlight.
Nur wenn Ihr euch noch noch bis zum 15. März 2009 anmeldet habt Ihr die Chance die komplette Veranstaltung für gerade mal 10 € zu buchen. Danach wird es viel prozentual viel mehr Kosten. B
Den ganzen Tag mit zwei parallelen Tracks rund um WPF und Silverlight sollte sich niemand entgehen lassen, der auch nur einen hauch Interesse dafür hat.
Wie schon beim sehr erfolgreichen AfterLaunch in Köln im April letzten Jahres wird besonderen Wert auf praxisrelevante Informationen gelegt. Ziel ist es, bei aller Begeisterung über die technischen Möglichkeiten von WPF und Silverlight stets den konkreten Einsatz in echten Projekten im Blick zu haben
Anmeldung und weitere Informationen auf http://www.dotnet-cologne.de

Friday, March 06, 2009 12:48 PM |
Deutsch
Ich habe die Version Beta 10 des MbUnit-2.x-Test-Runner für ReSharper veröffentlicht. Neben ein paar Fehlerkorrekturen funktioniert diese Version nun auch mit dem R# 4.5 (getestet mit EAP Version 1183).
Download Beta 10
English
I have released the version Beta 10 of the MbUnit-2.x-Test-Runner for ReSharper. Some Bug fixes and the possiblity to use it on R# 4.5 (testet with EAP Build 1183) are the main features.
Download Beta 10

Monday, March 02, 2009 9:34 PM |
Nachdem ich nun auch meinen Arbeitslaptop auf Windows 7 umgestellt habe (es gab Probleme mit einer speziellen VPN-Software). Wurde natürlich einiges neu installiert, so auch der Live Writer.
Ich war also auf der Suche nach dem PlugIn für LiveWriter mit dem man Quelltexte mit für SyntaxHighlighter den ich hier zur Formatierung dieser verwenden einfach einfügen kann.
Der Name war natürlich entfallen und den Blogpost von Scott Hanselmann war auch nicht so schnell griffbereit.
Also zum Glück mal Tante Google gefragt und dabei ist folgendes zum vorschein gekommen.
http://www.codeplex.com/wlwSyntaxHighlighter
Es ist nicht das von Scott Hanselmann empfohlene, sondern ein besseres.
Die Vorteile gegenüber dem anderen, dessen Namen ich immer noch nicht weiß.
- Vorschau in LiveWriter
- Quelltexte wieder bearbeitbar
- Optionen einfach änderbar ohne neu einzufügen
Großartig bekannt scheint es nicht zu sein, wie die Download zahlen zeigen, dies jedoch zu unrecht.
Also hiermit sowohl Download- und Installations-Befehl!
Eine Anmerkung noch, es kann noch nicht die neue Syntax vom Syntaxhighlighter 2.0. Somit muss für die Version 2.0 das Kompatibilitätsskript eingebunden werden.

Tuesday, February 24, 2009 12:46 PM |
So kann es gehen, aus einem kleine Tweet wurde eine kleine User Group Tour.
Ich bin somit dieses Jahr Unterwegs in Deutschland und werde ausführlich über das ASP.NET MVC Framework berichten und zeigen wie man damit Web-Anwendungen entwickelt.
Folgende Termine sind bis jetzt geplant.
3. März 2009
In meiner Heimat-User Group geht es los http://www.dnug-koeln.de und warte bis zum
10. Juni 2009
wo ich Karlsruhe gastiere, bei der http://www.dotnet-ka.de/ von dort aus geht’s am
11. Juni 2009
nach Ulm http://www.dotnet-ulm.de/ zur dortigen Usertreffen.
18. Juni 2009
Da verschlägt es mich an den Bodensee zur frisch gegründeten http://www.dotnet-kk.de/
21. Juli 2009
Nach etwas Pause begebe ich mich nach http://www.dotnet-braunschweig.de/ zum derzeitigem Abschluss der Tour.
Ich freue mich total drauf unterwegs zu sein und andere User Groups und deren Leute kennenzulernen.

Friday, February 20, 2009 11:28 AM |
Am Montag den 23.02.2009 findet im Rahmen von VAN DE ein Vortrag über Test Driven Development/Behavior Driven Development statt.
Gabrial Schenker hat sich bereit erklärt in seiner unnachahmlichen Art uns TDD/BDD näher zu bringen.
Wie können wir Code schreiben, der möglichst fehlerfrei, robust, und leicht änderbar ist und es auch bleibt? Wie implementieren wir nur wirklich benötigte Funktionalität und sind von allem Anfang an auf zu erwartende Änderungswünsche des Kunden vorbereitet? Die Antwort auf diese Fragen lautet Test-getriebene Entwicklung (TDD).
Wie erreichen wir, dass Entwickler und Fachexperten oder allgemein Stakeholder dieselbe Sprache sprechen? Behavior driven development (BDD) liefert uns eine mögliche Antwort darauf.
Start ist 20 Uhr, seid pünktlich.
Anmeldung und Teilnahmeinformationen:.
http://www.altdotnet.de/OnlineMeeting_090223.ashx
Ein Headset hilft wenn man Fragen stellen möchte, jedoch besteht auch die Möglichkeit nur mitzuhören und Fragen per Tastatur einzureichen.
Wir freuen uns euch dort zu begrüßen.

Monday, February 16, 2009 12:14 PM |