Mehr von Jürgen Gutsch

Mehr von Jürgen Gutsch

Empfehlungen von Jürgen Gutsch

Blog-Empfehlungen von Jürgen Gutsch

Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe

Jürgen Gutsch

ASP.NET und mehr...

News

See# Party - .NET-Community Konferenz am Bodensee

Kurz vor dem 20. Treffen veranstaltet der .NET-Stammtisch Konstanz-Kreuzlingen eine .NET-Community Konferenz in Kreuzlingen am Bodensee mit dem Ziel auch hier in der Region eine günstige und nahe alternative zu den großen, herkömmlichen Konferenzen zu bieten.

Bei der Planung ist eine Konferenz am Bodensee mit dem passenden Namen “See# Party” entstanden.

Die See# Party findet am 28. August 2010 im DREISPITZ Sport- und Kulturzentrum in Kreuzlingen (CH) statt.

Die Anmeldung für bis zu 250 Teilnehmer startet am 01. Juli 2010

Wer einen eigenen Vortrag einreichen möchte, kann gerne mit uns Kontakt aufnehmen und uns die Vorschläge per E-Mail zusenden. Mehr Informationen zu den einzureichenden Vorträgen sind hier zu finden: Call for Papers

Um die Teilnahme für alle so günstig wie möglich zu machen, sind wir auf die Unterstützung durch Sponsoren angewiesen. Wer die See# Party in irgendeiner Art unterstützen möchte findet auf der Seite “Sponsor werden” die nötigen Hinweise.

Bis jetzt bin ich sehr zufrieden mit dem gestrigen Start:

  • Golo Roden hat sich bereit erklärt die Keynote zum Thema ALT.NET zu halten
  • Die ersten Sprecher haben Ihre Vorschläge eingereicht
  • Die ersten möglichen Sponsoren und Medienpartner haben bereits zusagen gemacht
  • Die Resonanz per Facebook, Twitter und auch XING übersteigt meine Erwartungen
  • Das CMS add.min arbeitet hervorragend (und ist schneller als ich es in Erinnerung hatte)

Natürlich haben wir uns ein sehr, sehr engen Zeitplan gesetzt. Allerdings läuft es bis jetzt hervorragend mit der Planung. Dabei halfen die nötigen Verbindungen und natürlich auch ein kleines bisschen Glück.

Dank großes Dankeschön geht vorab schon mal an die vielen motivierten Helfer und auch an die Firma K&K Internet GmbH die uns als Hosting-Sponsor zur Seite steht und uns das CMS add.min zur Verfügung gestellt hat.

DotNetKicks-DE Image
dotnet Cologne 2010

Um das nächtliche Fahren mit der Deutschen Bahn zu testen fuhr ich am Donnerstag Abend mit genau dieser nach Köln. Meine erste und einzige Autofahrt vor einigen Jahren in Köln war eher ein negatives Erlebnis, also entschloss ich mich zu dieser sehr drastischen Entscheidung. (start fishing for compassion) Aber auch das stellte sich als eher negatives Erlebnis dar. Auf der Hinfahrt gab es weder den reservierten Platz im angegebenen Wagen, noch war es ein Ruhesessel. Der ICE auf der Rückfahrt hatte zwar eine Steckdose für meinen Laptop, allerdings war ich zu Müde zum arbeiten. Leider war der Platz im ICE auch zu unbequem zum Schlafen. (finish fishing for compassion)

Die Community-Konferenz zum Launch von Visual Studio 2010 und .NET Framework 4

Nur gut, dass “rein zufällig” in Köln auch dieses mal wieder die dotnet Cologne stattfand. Das entschädigte die An- und Abreise erheblich.

Ich war natürlich zu früh am Veranstaltungsort was allerdings durch eine Elster (die sich entweder verflogen hatte oder auch etwas vom reichhaltigen Frühstücksbuffet haben wollte) in der Lobby-Bar und Thorsten Kansy Buch Datenbankprogrammierung mit .NET 4.0. Mit Visual Studio 2010 und SQL Server 2008 R2 doch noch sehr Kurzweilig wurde.

Veranstaltet wurde die Konferenz auch dieses mal wieder von Albert Weinert, Stefan Lange und Roland Weigelt. Nach einigen kleinen technischen Schwierigkeiten bei der Begrüßung hielt Roland Weigelt die Keynote zum Thema Community, Konferenz und .NET 4.0 und VS 2010

Anschließend gab es ein volle Programm. Eine tolle Session nach der anderen. Interessant fand ich die sogenannte Lunch-Session die man während dem Essen mit verfolgen konnte. So gab es für mich Canneloni mit einem Becher griechischem Salat garniert mit Brownfield und Typemock Isolator welches von Stefan Lieser serviert wurde. Zum Nachtisch verteilte Britt King 25% Rabatt auf den Typemock Isolator

Ebenfalls ein Erlebnis war die Session von Dariusz Parys der Windows Workflow vorstellte.

Für mich war die Session die Thorsten Hans zum Thema MSBuild auch eine Vorschau auf das 21. Treffen des .NET-Stammtisch Konstanz-Kreuzlingen. Ich freu mich drauf :-)

Wer ein paar Eindrücke von der dotnet Cologne haben möchte kann sich diese Gallery auf .NET Forum anschauen: http://dotnet-forum.de/photos/grillparty2010/slideshowpro.aspx

Von mir gibt es auf jeden Fall ein fettes Dankeschön an die Veranstalter für das tolle abwechslungsreiche Programm und für die Sponsoren, die das mit möglich gemacht haben. Und hoffe das nächste Mal wieder dabei sein zu können. :-)

DotNetKicks-DE Image
The Bandt way of TDD

Seit einiger Zeit baue ich nebenher an einem kleinen multi-mandantenfähigen Lizenzserver. Ziel ist es diese Anwendung komplett mit TDD zu schreiben.

Wie ich sicher bisweilen schon erwähnt hatte, war es bisher für mich sehr schwer, TDD wirklich konsequent einzusetzen. Wenn man Jahrelang auf die herkömmliche Art und Weise programmiert, ist es in einem kleinen privaten Projekt ein enormer Kraftakt, sein Denken so umzustellen, dass man

  1. Erst penibel die Anforderungen definiert
  2. Die Tests definiert
  3. Die Tests schreibt
  4. und dann implementiert, ohne zu viel Code zu schreiben

Allerdings hat mir ausgerechnet folgender Blogbeitrag von Thomas Bandt den Anstoß gegeben es noch einmal ernsthaft zu versuchen: TDD, BDD - Status Quo

The Bandt way of TDD

Das interessante an diesem Weg ist, dass ich einen Schritt spare: Die Anforderungen sind schon die Definitionen der Tests und das sogar Wort wörtlich. Die Anforderungen werden im Klartext, auf deutsch mit allen Umlauten als Test geschrieben. Das vereinfacht das schreiben der Tests ungemein.

Der zweite interessante Punkt ist die Kapselung wiederkehrender Aufgaben (erzeugen des SuT und der abhängigen Stubs) in eine Basisklasse.

Es flutscht

Also hatte ich beschlossen den Lizenzserver (den ich schon länger schreiben wollte) mit dem Bandt way of TDD zu entwickeln. Interessanterweise habe ich mich bei diesem Projekt bisher noch nicht dabei erwischt, an den Tests vorbei zu implementieren. Und noch schlimmer: Es fängt an Spaß zu machen, wenn man alle Tests die sich inzwischen angesammelt haben, laufen lässt und alles grün ist.

Word to Code

Nach dem die Zahl der Tests nun ständig ansteigt, habe ich mir so langsam Gedanken gemacht, wie ich diese dokumentiere. Bisher hatte ich (da es sich um ein rein privates Projekt handelt) die Anforderungen direkt in Tests umgesetzt, und dann nach einer Weile alle Definitionen der Tests in einer HTML-Datei gespeichert.

Aber die bessere Lösung stammt wieder einmal von Thomas: mit "Word to Code" hat Thomas ein kleines Helferlein geschrieben, mit dem sich in Word formulierte Anforderungen, nach den Konventionen des Bandt way of TDD, in fertige Unit Tests konvertieren lassen.

Fazit

Wer also, wie ich, selber noch Schwierigkeiten hat, TDD wirklich einzusetzen, sollte mal diesen Weg probieren. Sobald man richtig mit den Mocking und Testing Frameworks seiner Wahl vertraut ist, flutscht es wirklich. Den Aufwand den man auf die Herkömmliche Art noch ins Debugging und ins testen von Hand gesteckt hat, steckt man nun mit TDD in die Tests. Die Tests geben einem zusätzlich noch die Sicherheit, dass der eigene Code den Anforderungen entspricht :-)

Einfach mal ausprobieren :-)

DotNetKicks-DE Image
Dependency Inection mit LightCore im dot.NET Magazin

Ganz stolz kann ich heute mal folgendes schreiben:

Mit dem Artikel “Keine Sorge, es piekst nur ganz kurz – Dependency Injection mit LightCore” ist mein erster Artikel in einer deutschsprachigen Fachzeitschrift erschienen.

Zu finden ist der Artikel in der Ausgabe 6.2010 des dot.NET Magazins, welche die meisten Abonnenten bereits in der Hand halten sollten.

In diesem Artikel beschreibe ich kurz das Dependency Injection Pattern und vor allem die einfache Umsetzung des Patterns mit Peter Buchers Dependency Injection Container LightCore.

 

 

 

 


Übrigens gibt es LightCore auch auf FaceBook und Twitter:
FaceBook Seite: http://www.facebook.com/pages/LightCore/
Twitter: http://twitter.com/lightcore

DotNetKicks-DE Image
Katastrophenfall ‘NULL’?

Mit seinem Beitrag Kleiner Helper für Linq to Sql: ToListOrDefault() hat Thomas Bandt am Wochenende eine Diskussion zum Thema “Null als Rückgabewert” angestoßen (man beachte die Kommentare). Wie nicht anders zu erwarten (:-P), wurde die Diskussion natürlich auch von Ralf Westphal aufgenommen: Null oder nicht Null, das ist hier die Frage (auch hier die Kommentare beachten).

Weiter ging es wieder Bei Thomas Bandt mit dem Beitrag Null Verständnis der es tatsächlich auf 40 Kommentare gebracht hat. Auch Ilker Cetinkaya konnte es sich diesmal nicht verkneifen ebenfalls etwas zu dem Thema zu schreiben: Null Toleranz, vorauf hin Ralf schlagfertig reagierte: Es hilft nichts, dass es darauf ankommt – nicht nur beim Null-Problemo [OOP 2010] und Ilkers Haltung kritisierte. [Update] Ilkers Antwort folgte gestern relativ schnell: Kein Yin ohne Yang, kein Null ohne Pointer (Auch hier bitte unbedingt die Kommentare lesen)

Ein scheinbar vorläufiges Fazit zur Diskussion schreibt Thomas in seinem letzten Beitrag zum Thema Null: Null Erkenntnis? Ganz im Gegenteil. 

[UPDATE]
Eben hat sich auch der Karsten zum Thema geäußert: #Handwerk: Clean vs. pragmatisch?

Was hier fast wie ein Sportbericht aussieht, ist ein Diskussion über ‘Null’ als Rückgabewert und über eine fehlende Regel zu dem Thema ob und wann ‘Null’ als Rückgabe erlaubt ist, oder nicht.

Verschiedenste Lösungen kommen in allen Beiträgen und deren Kommentaren vor. So unter anderem:

  1. Exception statt ‘Null’
  2. Leere Objekte statt ‘Null’
  3. ‘Null’ nur passend zur Kategorie
  4. ‘Null’ nur mit Vorsicht
  5. it depends
  6. ‘Null’ im Katastrophenfall

Katastrophenfall ‘NULL’

Und dieser letzte Punkt ist eigentlich der einzige, an dem ich mich wirklich anstoße:

Ilker Cetinkaya [http://www.gmbsg.com/null-toleranz/]
Ich gebe in einigen Methoden NULL zurück. Meistens genau dann, wenn ich wirklich damit ausdrücken möchte, dass etwas katastrophales passiert ist.

Wenn etwas eine Katastrophe ist, sollte diese Katastrophe nur in wirklich unvermeidbaren Ausnahmen auftreten. In diesem Fall kann auch eine Ausnahme erzeugt werden. Ich bin in so einem Fall tatsächlich für eine Exception, statt einer ‘Null’ (Punkt 1).

Als Webentwickler dagegen bin ich der Ansicht das man die Erzeugung von Exceptions unbedingt mit Vorsicht genießen sollte und nur dann einsetzen sollte, wenn es wirklich unvermeidbar ist. Den Exception Handling kostet Performance. Exceptions sollten also auch Exceptions bleiben und “exceptionally used” werden. Im Web ist es IMHO wichtiger Fehler zu vermeiden, als für jeden möglichen Fall eine neue Exception zu erzeugen. Zum Thema “Fehler vermeiden” gehört IMHO auch, das Auslösen von Exceptions vermeiden, wenn es sich irgendwie vermeiden lässt. Aus diesem Grund sollte der erste Punkt “Exceptions statt ‘Null’” ebenfalls mit Vorsicht genossen werden.

Und was ‘Null’ als Rückgabewert angeht, enthalte ich mich fürs erste (was spezielle Regeln angeht) und bleibe Beobachter dieser Grundlagendiskussion. Ich bin mir einfach selber noch nicht schlüssig, was hier richtig und was falsch ist. Die Rückgabe von ’Null’ ist bequem, harmlos und tastbar, kann also nicht grundlegend falsch sein.

Im Moment tendiere ich noch zu dem Punkt “it depends” ;-)

DotNetKicks-DE Image
Nützliches in .NET 4.0

Eben bin ich auf interessante Neuerungen der System.IO.Directory Klasse im .NET 4.0 gestoßen. Wenn man bisher alle Dateien und/oder alle Ordner eines übergeordneten Ordners erhalten wollte, konnte man das mit den statischen Methoden:

Man kann das auch in .NET 4.0 immer noch tun und erhält ein String-Array mit den gewünschten Einträgen.

Neu sind unter anderem folgende drei statischen Methoden:

Alle drei Methoden und deren Überladungen geben ein generisches IEnumerable vom Typ String zurück.

MSDN (Directory.EnumerateFiles-Methode (String))
Die EnumerateFiles-Methode und die GetFiles-Methode unterscheiden sich wie folgt: Wenn Sie EnumerateFiles verwenden, können Sie anfangen, die Auflistung von Namen aufzulisten, bevor die ganze Auflistung zurückgegeben wird; wenn Sie GetFiles verwenden, müssen Sie warten, bis das ganze Array von Namen zurückgegeben wird, bevor Sie auf das Array zugreifen können.Wenn Sie daher mit vielen Dateien und Verzeichnissen arbeiten, kann EnumerateFiles effizienter sein.

Das heißt konkret, die Verarbeitung der Daten kann gestartet werden, bevor alle Daten geladen sind. Die ideale Voraussetzung für LINQ:

IEnumerable<string> files =
  from file in Directory.EnumerateFiles("C:\\documents\\folder1\\")
  where file.EndsWith("*.docx", StringComparison.OrdinalIgnoreCase)
  select file;
foreach (string file in files)
{
  Console.WriteLine(file);
}

Einziger Kritikpunkt ist, dass kein FileInfo-, bzw. kein DirectoryInfo-Objekt zurückgegeben wird. Aber das kann man auch schnell selber erledigen:

IEnumerable<FileInfo> files =
  from file in Directory.EnumerateFiles("C:\\documents\\folder1\\")
  where file.EndsWith("*.docx", StringComparison.OrdinalIgnoreCase)
  select new FileInfo(file);
foreach (FileInfo file in files)
{
  Console.WriteLine(file.Name);
}

DotNetKicks-DE Image
ASP.NET 4 – Breaking Changes

Scott Hanselman hat auf seinem Blog drei Breaking Changes veröffentlicht die beim Update von ASP.NET 2.0 (bzw. 3.5) auf ASP.NET 4.0 Probleme bereiten könnten. Er beschreibt auch gleichzeitig die möglichen Lösungen:
ASP.NET 4 - Breaking Changes and Stuff to be Aware of

Weitere Breaking Changes sind auf folgender Seite zu finden:
ASP.NET 4 Breaking Changes

DotNetKicks-DE Image
Päckchen vom UGSS für den .NET-Stammtisch

Letztes Jahr habe ich für den .NET-Stammtisch Konstanz-Kreuzlingen ein User Group Kit bei den User Group Support Services (kurz UGSS) bestellt und vor ein paar Wochen erhalten.

Dieses User Group Kit enthält einige tolle Dinge die ich für den .NET-Stammtisch benutzen kann und darf. Unter anderem waren zwei hochinteressante Bücher dabei (eines allgemein über die Leitung technischer User Groups und ein weiteres über Virales Marketing), einige Gutscheine und sowie Softwarelizenzen.

Aufgrund dieses Paketes können wir in den nächsten Sessions unter anderem auch drei Lizenzen von Windows 7 Ultimate verlosen.

Aber nicht nur von Microsoft werden wir unterstützt, sondern auch von JetBrains und Red Gate. Jedes Treffen dürfen wir eine Lizenz des ReSharpers von JetBrains verlosen und in den nächsten drei Sessions dürfen wir jeweils eine Lizenz des ANTS Memory Profilers von Red Gate verlosen.

Selbsverständlich gibt es auch wieder 15 Ausgaben der dotnetpro für den .NET-Stammtisch.

DotNetKicks-DE Image
ASP.NET MVC und “Klicki-Bunti” *)

Wer auf “Klicki-Bunti” *) nicht verzichten kann oder will und dennoch ASP.NET MVC machen will, dem sei hiermit geholfen:

Imran Baloch beschreibt in seinem aktuellen Beitrag (ASP.NET MVC and Toolbox) wie man die Visual Studio Toolbox mit ASP.MVC nutzen kann um HtmlHelper per Drag and Drop in den HTML-Code zu ziehen.

*) “Klicki-Bunti” bezeichnet eine Technik (die von einigen fälschlicherweise auch Programmieren genannt wird) mit der Controls, per Drag and Drop, aus der Visual Studio Toolbox auf das WebForm gezogen werden und anschließend mit dem Eigenschaftsfenster und ggf. weiteren Assistenten konfiguriert werden. Drittanbieter-Controls sind z. B: speziell für diese Technik entworfen. ;-)

DotNetKicks-DE Image
Windows 7 und Outlook

Kein (ASP).NET Thema, aber eventuell doch für den einen oder anderen interessant:

Wer Outlook 2007 unter Windows 7 verwendet, an die Taskbar pinnt und gleichzeitig die Option “Ausblenden, wenn minimiert” eingeschalten hat, hat sicher das gleiche Problem das ich bisher hatte: Jedes Mal wenn ich Outlook über die Taskbar öffne, öffnet sich eine neue Instanz von Outlook. Ein relativ nerviges Feature, da man vor allem beim Schließen von Outlook erst alle Instanzen schließen muss.

Ich habe folgende Lösung gefunden:

  1. Man muss eine neue Verknüpfung erstellen die auf die outlook.exe verweist.
  2. folgenden Parameter anhängen: “/recycle”.
    (“…\Microsoft Office\Office12\outlook.exe /recycle”)
  3. Die vorhandene Verknüpfung kann man von der Taskbar entfernen.
  4. Die neue Verknüpfung an die Taskbar pinnen.
  5. Anschließend kann die erstellte Verknüpfung entfernt werden.
  6. Fertig

Nun wird bei jedem Klick auf die gepinnte Verknüpfung die vorhandene Instanz geöffnet, statt einer neuen Instanz.

(Via: Windows 7 and Outlook 2007 problem (more instances))

DotNetKicks-DE Image
Diskussionsgrundlage: Deutschsprachiger .NET-Community MVP

Seit längerem habe ich mir schon Gedanken über eine alternative, bzw. ergänzende Auszeichnung für lobenswerte Community-Aktivitäten im deutschsprachigen Raum gemacht.

Der Grund dafür ist zum einen, dass es einige Personen gibt, die sich für die .NET-Community enorm ins zeug legen, präsent sind aber bisher keine entsprechende Auszeichnung bekommen konnten.

Ein weiterer Grund ist, die Attraktivität der .NET-Community weiter zu steigern und vor allem neue Leute zu animieren, aktiv teilzunehmen. Die Beiträge aus der .NET-Community werden verständlicherweise hauptsächlich konsumiert. Allerdings gibt es sehr viele, sehr gute Entwickler, die nicht in der .NET-Community aktiv beteiligt sind, aber enormes Wissen und könnten.

Ich dachte also an einen “deutschsprachigen .NET-Community MVP” der diejenigen Personen auszeichnet, die ihr wissen in Online- und Offline-Communities bewiesen haben. Die deutschsprachigen .NET-Community sollte also diejenigen ermutigen, welche die deutschsprachigen .NET-Community auf diese Art unterstützen und vorantreiben.

Es sollten weder einzelne Online- und Offline-Communities bewertet werden, noch sollten diese Bewertungen von einzelnen Online- und Offline-Communities übernommen oder beeinflusst werden (letzteres ist wohl kaum zu verhindern), sondern es zählt die deutschsprachigen .NET-Community als ganzes.

Dieser deutschsprachige .NET-Community MVP kann also als übergeordnete Plattform angesehen werden.

Das Ziel ist keine Konkurrenz zu Microsoft MVP, sondern lediglich eine Ergänzung oder eine Alternative die nicht an Microsoft gebunden ist. Die Microsoft MVPs sind unabhängige Experten, das ist klar, der MVP Award selber ist allerdings ein Teil von Microsoft. Dieser deutschsprachige .NET-Community MVP sollte ein Award von der Community an die Community sein.

Wie wird der MVP ausgezeichnet?

Ähnlich dem Microsoft MVP könnte eine Art Urkunde überreicht werden und ein Logo für die Nutzung auf der eigenen Website, etc. zur Verfügung gestellt werden. Unterstützung von Softwareherstellern, technischen Verlagen, Veranstaltern technischer Konferenzen, etc. für die “Awardees” sollte nicht ausgeschlossen sein. Ebenfalls analog zum Microsoft MVP sollte die Auszeichnung auf ein Jahr begrenzt sein.

Wie wird bewertet?

Das ist ein Punkt über den ich mir am wenigsten klar bin.

Wer hat das recht einzelne Personen zu Bewerten und “in den Kreis der Privilegierten” aufzunehmen? Wer ist unabhängig genug um eine faire Auswahl zu treffen? Nach welchen Kriterien soll bewertet und ausgewählt werden?

Klar ist: Es sollte keinen “Kreis der Privilegierten” geben. Es ist eine Auszeichnung auf Zeit.

Klar ist auch, dass die Auswahl nur von der deutschsprachigen .NET-Community vorgenommen werden darf. Sowohl Vorschläge zu potentiellen MVPs als auch zu möglichen Themenbereichen sollten aus der .NET-Community kommen.

Aber wer prüft die Vorschläge? Ist eine Einzelperson fair genug? Sollte es mehrere “Juroren” geben?

Ich denke, das kann nicht von eine Masse (der .NET-Community) übernommen werden. Statt dessen sollten sich mehrere Leute aus der Community verpflichten nach besten Wissen und Gewissen die Vorschläge zu prüfen und zu bewerten. Vielleicht sollte es eine ungerade Anzahl von Personen aus der deutschsprachigen .NET-Community geben (etwa neun oder elf Personen) welche die Vorschläge auswerden. Eventuell sollten diese Juroren aus der deutschsprachigen .NET-Community (oder bereits vorhandenen MVPs) für ein Jahr (oder zwei) gewählt werden.

Darf der Betreiber, Leiter, Manager dieser Plattform auch Juror sein? Ich denke nicht, da es zu einem Interessenkonflikt kommen kann.

Darf der Betreiber, Leiter, Manager ein MVP sein? Ich denke ja, wenn er gewählt wird. Da er hiermit die .NET-Community unterstützt.

Wenn MVPs Juror werden können, dürfen Juroren welche MVPs sind neu vorgeschlagen werden? Dürfen Juroren die MVPs sind und vorgeschlagen werden, die Vorschläge prüfen? Ich denke die Antwort ist “Ja”, da es zum einen mehrere Kollegen gibt, die sich gegenseitig prüfen, zum anderen haben sich die Juroren verpflichtet nach besten Wissen und Gewissen vorzugehen.

Man könnte sich vorstellen, dass alle (außer “Juroren”) Vorschläge machen dürfen. Alle Vorschläge werden einfach gewichtet (=jeder Vorschlag ein Punkt). Vorschläge von MVPs können auch zweifach gewichtet sein (=jeder Vorschlag zwei Punkte). Bereits gewählte MVPs könnten schon (mit vielleicht 200 Punkten) standardmäßig gewichtet sein. Die Juroren gehen am Ende die Vorschläge der Gewichtung nach durch und prüfen die Richtigkeit.

Sollte man die Anzahl der MVPs begrenzen oder nur eine Mindestgewichtung (etwa 500 Punkte) für MVPs vorgeben? Im letzten Fall würden alle Personen zu MVPs die mindestens 500 Punkte bekommen. Ich tendiere eher zu letzterer Variante.

(Wichtig: diese Zahlen sind nur Gedankenspiele)

Wie sähe das jetzt anhand dieser Überlegungen aus?

Angenommen man würde obige Überlegung mal zusammenfassen, so hätten wir eine Plattform, die aus etwa folgende Personen bestehen könnte:

  • Betreiber (Leitung)
    • Manager
    • Technik
    • Sponsoring
    • Finanzen
    • Presse
    • Kommunikation
  • Juroren
    1. Vorsitzender Juror
    2. Juror (Stellvertretender Vorsitzender)
    3. Juror
    4. Juror
    5. Juror
    6. Juror
    7. Juror
    8. Juror
    9. Juror
    10. Juror
    11. Juror
  • Community
    • Community Member
    • MVPs

Bewertung: (Beispiel)

  • Start Gewichtung
    • Neuer Vorschlag: 0 Punkte
    • Vorschlag eines MVP: 200 Punkte
  • Gewichtung der Vorschläge
    • durch Community Member: 1 Punkt
    • durch MVP: 2 Punkte
  • Ziel
    • Vorschlag mit 500 oder mehr Punkten ist MVP
    • Vorschlag mit weniger als 500 Punkten ist später wieder ein Neuvorschlag

Und nun?

Ist diese Idee umsetzbar? Finden sich Leute, die diese Idee umsetzen wollen? Oder gibt es möglicherweise ganz andere Ideen und Vorschläge? Wer hat Lust zu Kontern und an der Diskussion teilzunehmen?

Ich bin gespannt. Vielleicht entwickelt sich ja tatsächlich was draus :-)

Ich gebe den “Stock” hiermit offiziell an Klaus Bock und Gordon Breuer weiter, die per Twitter Interesse signalisiert haben :-)

[Update]

Da es in den letzten Stunden enormes Interesse an dem "deutschsprachigen .NET-Community MVP" gegeben hat, habe ich ein kleines Wiki aufgesetzt, welches Helfen soll, die oben beschriebene Idee zu verfeinern und ggf. weiter auszubauen: http://communityaward.dotnetkk.de/

Ich bin ehrlich positiv erstaunt und erfreut über das Interesse an dieser Idee. :-) Damit habe ich absolut nicht gerechnet.
Ich würde deshalb gerne noch weitere Meinungen und Ideen zu diesem Thema von anderen Interessierten erfahren :-)

Natürlich bin ich auch an Kritik und anderen Meinungen interessiert. Also her damit :-)

DotNetKicks-DE Image
Gedanken zu Test Driven Developement (TDD)

Wer es noch nicht mitbekommen hat: René Drescher-Hackel hat – nachdem er einen Vortrag zum Thema bei der NUG Franken besucht hatte – eine interessante sehr interessante Diskussion zu Test Driven Developement (TDD) angestoßen, welche von Ralf Westphal in einem eigenen Beitrag aufgenommen wurde: Gedanken zu Gedanken zum TDD

Wer sich also über den Sinn und Nutzen von TDD Informieren möchte, sollte die Diskussion verfolgen. In diesem Fall handelt es sich nicht nur um eine einfache Diskussion, wie sie anderorts oft entstehen.

Aber lest selbst: Gedanken zum Test Driven Development (TDD)

Links während in der Diskussion:
(Ich versuche die Liste aktuell zu halten)

Gregor Biswanger:

Thomas Bandt:

Bernd Hengelein:

Christina Hirth:

Ralf Westphal:

DotNetKicks-DE Image
Buchempfehlung: Why Software Sucks…

Das Buch ist zwar schon etwas älter (von 2006) aber erst nachdem ich auf der BASTA! Spring David S. Platt in der Keynote gesehen habe bin ich darauf aufmerksam geworden.

Why Software Sucks…and what you can do about it” ist nicht nur ein Buch für Softwareentwickler und UI-Designer, sondern auch für jeden andern, der immer wieder Probleme mit Software hat und wissen möchte, warum Softwareentwickler keine User Interfaces gestalten können.

“A riotous book for all us downtrodden computer users, written in language that we understand” -  Stacy Baratelli, the author’s barber
(Zitat abgeschrieben vom Buchdeckel *fg*)

Das Buch beschreibt auf radikale und humorvolle Art und Weise anhand von reellen Beispielen was schlechte und was gute User Interfaces sind. Er erklärt in einfacher Sprache warum Softwareentwickler nicht in der Lage sind gute User Interfaces zu designen, bzw. was der Softwareentwickler beachten und tun muss um eben bessere User Interfaces zu gestalten.

Wer also von David S. Platt mit der Nase in die eigene Sch***e gedrückt werden möchte oder einfach nur schmunzeln möchte und Interesse an guten (und schlechten) User Interfaces hat, sollte sich das Buch auf jeden Fall zulegen. Das Buch ist zudem eine perfekte Ergänzung zu Clean Code, da Softwareentwicklung von einer anderen Seite betrachtet wird, die ebenfalls clean und simple gehalten werden sollte und bei allen Clean Codes und CCD dennoch übersehen wird.

Für 15,20 € bei Amazon: Why Software Sucks...and What You Can Do about It
(Verlag: Addison Wesley; Sprache: Englisch; ISBN: 0-321-466756)

DotNetKicks-DE Image
codezone.de und Content-Partnerschaft

Nachdem es per E-Mail nicht funktioniert, versuche ich es mal auf diesem Weg.

Seit mehreren Monaten versuche ich, für den .NET-Stammtisch Konstanz-Kreuzlingen, eine Content-Partnerschaft mit codezone.de einzugehen, um UG-Termine automatisch auf codezone.de zu veröffentlichen. Dafür gibt es auf der codezone.de ein spezielles Formular, das ausgefüllt und abgeschickt werden kann.

So habe ich das nun innerhalb der letzten 12 Monate drei mal gemacht und jedes Mal per E-Mail die Hinweise erhalten, dass die E-Mailadressen der Formular-Empfänger nicht (mehr) verfügbar sind. Der eine Empfänger ist Kay Giza der zweite ein Mitarbeiter bei Axinom, auf deren Servern codezone.de gehostet wird.

Nach dem ersten und zweiten Versuch hatte ich Kay kontaktiert. Allerdings nur beim ersten Kontakt eine Antwort, aber keine Lösung erhalten. Der Kontakt nach dem zweiten Versuch blieb leider unbeantwortet.

Folgende Fragen stellen sich mir nun nach den drei erfolglosen Versuchen das Formular abzuschicken:

  1. 1. Warum wundert sich keiner, dass keine Content-Partner-Anfragen mehr hereinkommen?
  2. 2. Warum werden E-Mailkontakte im System nicht aktualisiert, wenn sich die Zuständigkeiten ändern?
  3. 3. Warum vergisst das “4-köpfiges Gremium, dass aktiv für den Betrieb und die weitere Ausgestaltung des Web-Service verantwortlich ist” ein zwar kleines, aber nicht unbedeutendes Feature zu aktualisieren? ;-)

Man wird verstehen, dass ich hierüber etwas enttäuscht bin.

DotNetKicks-DE Image
Wie böse ist RAD?

Jeder der mich kennt, weiß, dass ich keine Freund von RAD-Controls (Rapid Application Developement) – besonders von Controls und Tools diverser Drittanbietern – bin.

Aber halte ich RAD deshalb generell böse?

Ralf Westphal schreib im aktuellen Beitrag seiner Kolumne “Sandbox” (in der dotnetpro 4/2010) sinngemäß und zusammengefasst: RAD-Tools für sich gesehen sind nicht böse, sondern die naive Herangehensweise, also zu glauben, dass RAD alle Probleme erledigt, ist böse, bzw. schlecht und die daraus resultierenden Probleme werfen ein schlechtes Licht auf RAD.

Ist das wirklich so?

Generell kann ich die Frage leider nicht komplett beantworten. Sondern nur aus meiner Sicht als Webentwickler, auf RAD-Tools und RAD-Controls für ASP.NET. Ich kann mich also nur auf ASP.NET beziehen und weis nicht wie es sich bei WinForms, WPF und SilverLight verhält.

So wie Ralf es beschreibt, würde ich generell erst mal “Ja” sagen, aber aus meiner Sicht kommen einige Fragen hinzu. Warum gibt es denn überhaupt die Möglichkeit, dass man sich bei naiver Herangehensweise seine komplette Anwendung mit RAD-Tools und RAD-Controls versauen kann? Warum schaffen es die Anbieter nicht, einfache, kleine und flexible Tools zu schaffen mit denen man nicht viel falsch machen kann? Warum müssen alle möglichen, erdenkbaren Funktionen von Anfang an in einem RAD-Tool, bzw. RAD-Control enthalten sein?

Schöne und positive Beispiele kommen von Microsoft selber: LINQ to SQL; die ASP.NET Controls GridView und Calendar sind absolut flexibel beliebig erweiterbar. Es ist also generell machbar.

Zu großer Umfang

Müssen RAD-Tools und drittanbieter-Controls so viele Funktionen anbieten, das der naive Nutzer alle Möglichkeiten ausnutzen will? Anbieter von RAD-Tools wollen die breite Masse zufrieden stellen und stellen deshalb die eierlegende Wollmilchsau zur Verfügung. Das muss aber nicht sein, ganz im Gegenteil. Ich persönlich nutze lieber die kleine Schlanke Komponente die ich selber erweitern kann und nicht das Universal-Tool von dem ich 80% nicht benötige, aber mit schleifen muss.

Unförmiger HTML Code

Wer meinen UG-Vortrag im Herbst (beim .NET-Stammtisch Konstanz-Kreuzlingen) gesehen hat, konnte miterleben wie sich die verschiedenen Hersteller bei der Menge an HTML-Code, JavaScripts und HTML-Verschachtelungen überboten haben. (Ich bin gerne bereit diesen Vortrag auch in einer anderen UGs zu halten. Machen Sie sich dabei auf was gefasst *fg*)

Ein namhafter Hersteller von RAD-Controls zwingt die Browser in die Knie, wenn man mehr als 10 abhängige Comboboxen nutzt, die unter anderem Grids beinhalten. Eine Combobox dieses Anbieters benötigt für 10 Listeneinträge übrigens mehrere ineinander verschachtelte HTML-Tabellen und mehr als 30 Zeilen HTML-Code. Nutzt man zusätzlich noch die Möglichkeit, beim Aufklappen der Combobox ein Grid anzuzeigen, erhöht sich die Menge des benötigten HTML-Codes um die benötigte Menge des Grids, welches auch nicht gerade sparsam mit verschachtelten HTML-Tabellen umgeht. Hinzu kommen Unmengen von JavaScripts, die direkt auf der Seite ausgegeben werden. Die kleine Combobox entpuppt sich bei genauerer Betrachtung als ein riesiges, unperformates und überladenes Control.

Ein weiterer Hersteller hatte es übrigens nicht geschafft, trotz enormer Mengen an unsauberen Code und JavaScripts, die Combobox in allen Browsern zu funktionieren: Im Opera war lediglich eine leere Standard-Combobox zu sehen.

Zu unflexibel und schlecht erweiterbar

Warum schaffen es die meisten Hersteller von RAD-Tools und drittanbieter-Controls nicht, flexible und erweiterbare Tools und Controls zu erstellen?

In einer Kalender-Komponente eines weiteren namhaften Herstellers, benötigte ich zwei Wochen, um ein Doppelklick-Event auf einen Kalendertag abzufangen und einen eigenen Termindialog anzubinden.

  • Warum ich nicht den vorhandenen Dialog genutzt habe?
    Dieser Passte nicht zu der Art von Terminen war nur schwer erweiterbar und passte nicht in das Layout.
  • Warum ich nicht die Komponente eines anderen Herstellers genommen habe?
    Alle anderen waren aufgrund von unsauberen HTML-Code einfach zu unperformant beim Aufbau der Seite, zudem schaffte es das herstellereigene JavaScript nicht mal mehr die per Callback geholten Termine in diesen unmöglichen Code zu setzen.

Grund hier war eine nicht dokumentierte, clientseitige JavaScript API und das tagelange JavaScript-Debugging in unschönem Code.

Fazit

Es ist nicht nur alleine die Naivität der, Nutzer sondern auch die Art wie die Hersteller die Controls produzieren und vermarkten. Auf den Demoseiten der Hersteller sieht alles toll und bunt aus, alles funktioniert einwandfrei, aber dort habe ich auch nie mehr als zehn abhängige Grid-Comboboxen gesehen ;-)

Man RAD-Controls ist man unheimlich schnell bei der Entwicklung von schönen, bunten und benutzerfreundlichen Oberflächen.

Mit RAD-Controls stößt man aber auch unheimlich schnell auf Probleme, wenn man spezielle Anforderungen hat und wenn man Anpassungen und Erweiterungen an den Controls vornehmen möchte. RAD-Controls werden als schnell einsetzbare Tools präsenteiert, aber unter den schönen bunten Oberfläche erweisen sich die meisten als unflexibel, schlecht dokumentiert und unperformant.

Klingt jetzt wahnsinnig abwertend, gell?

Aber ich möchte RAD-Controls nicht generell schlecht machen. Wenn man keine sehr speziellen Anforderungen an z. B: Grid und Kalender-Controls hat, kann und sollte man diese auch nutzen. Der Entwicklungsaufwand um selber eine entsprechendes Control zu schreiben ist einfach zu hoch.

Nur warum sollte man eine TextBox, eine ComboBox, eine CheckBox, etc. von einem Drittanbieter verwenden? Wegen dem schönen Design? Wohl kaum, denn dafür gibt es CSS.

Wegen einer speziellen Funktion mehr? Eine Funktion ist schnell selber geschrieben. Oder man benutzt vorhandene JavaScript-Frameworks, wie z. B. jQuery, um Controls zu erweitern ohne den HTML-Code aufzublähen und die Browser in die Knie zu zwingen.

Im Gegenteil halte ich RAD für absolut Sinnvoll und sollte auf alle Fälle in Betracht gezogen werden, wenn es darum geht den Aufwand klein zu halten. Allerdings hat Ralf absolut recht, wenn man die meisten, heute auf dem Markt befindlichen RAD-Tools anschaut, sollte, bzw. darf man nicht naiv daherkommen und einfach so alle möglichen Tools einsetzen und nutzen, sondern sollte sich penibel mit den Tools auseinandersetzen, abwägen und schauen wie erweiterbar und flexibel die Controls und Tools wirklich sind.

Zu guter Letzt:

Ich kann es einfach nicht lassen und muss hier mal ein anonymisiertes Beispiel posten.

Es soll ein schöner, bunter, formatierter Button angezeigt werden:

<table cellpadding="0" cellspacing="0" style="height: 57px;">
  <tr>
    <td>
      <table cellspacing="0" cellpadding="0" id="ctl00_phContent_BackgroundImageTextGroupBox_Button1" border="0" style="height:30px;width:90px;border-collapse:collapse;border-collapse:separate;">
        <tr>
          <td id="ctl00_phContent_BackgroundImageTextGroupBox_Button1_B" align="center" style="color:White;background-image:url(Images/Wine/normal.jpg);cursor:pointer;padding-bottom:2px;">
            <div id="ctl00_phContent_BackgroundImageTextGroupBox_Button1_CD" class="dxb">
              <span>Submit</span>
            </div>
          </td>
          <td style="width:0%;">
            <input value="" onfocus="ButtonGotFocus('ctl00_phContent_BackgroundImageTextGroupBox_Button1')" name="ctl00$phContent$BackgroundImageTextGroupBox$Button1" type="submit" style="background-color:Transparent;border-width:0px;height:0px;width:0px;padding:0px;" />
          </td>
        </tr>
      </table>
<script id="dxss_202605327" type="text/javascript">
<!--
addHoverItems('ctl00_phContent_BackgroundImageTextGroupBox_Button1',[[[''],['padding-bottom:2px;color:#FAD9E0;background-image:url(Images/Wine/hover.jpg);'],['B'],['','TC'],[['']],['Img']]]);
addPressedItems('ctl00_phContent_BackgroundImageTextGroupBox_Button1',[[[''],['padding-bottom:2px;color:#DCB7C8;background-image:url(Images/Wine/pressed.jpg);'],['B'],['','TC'],[['']],['Img']]]);
var o = new ClientButton('ctl00_phContent_BackgroundImageTextGroupBox_Button1');
window['ctl00_phContent_BackgroundImageTextGroupBox_Button1'] = o;
o.uniqueID = 'ctl00$phContent$BackgroundImageTextGroupBox$Button1';
addSelectedItems('ctl00_phContent_BackgroundImageTextGroupBox_Button1',[[['bf'],[''],['CD']]]);
o.InlineInitialize();
//-->
</script>
    </td>
  </tr>
</table>

Die “alternative” mit normalem HTML würde so aussehen:

<input type="submit" value="Submit" class="beautifulButton" id="submitButton" runat="server" />

Formatiert mit CSS und ggf. erweitert per jQuery und man hat ein besseres Ergebnis, da der HTML-Code schlanker ist und die Browser weniger zeit für die Verarbeitung benötigen.

DotNetKicks-DE Image
Mehr Beiträge Nächste Seite »