code it

Martins Tech Blog

Einladung zum Treffen der .NET Usergroup Dresden am 16.06.2011

Das Juni-Treffen der .NET Usergroup Dresden wird am 16.06.2011 stattfinden. Die Veranstaltung beginnt um 18:00 Uhr in den Räumen der Saxonia Systems AG.
 
Thematisch wird es dabei um zwei Themenblöcke gehen, die beide Mathias Raake bestreiten wird:
 
Zum einen werfen wir einen Blick auf PostSharp. Die Implementierung von INotifyPropertyChanged, Logging-Code, Exception-Handling oder auch Caching sind Funktionalitäten, die man in vielen Teilen der Anwendung immer wieder implementieren muss. Dabei haben diese Funktionen mit der eigentlichen Logik eurer Anwendung wenig zu tun. Die Aspektorientierte Programmierung (AOP) ermöglicht es euch, euren Code wieder auf das Wesentliche zu beschränken und "Infrastrukturfunktionen" in sogenannte Aspekte auszulagern. Euer Code wird kürzer, lesbarer und somit wartbarer, und die Aspekte können einfach wiederverwendet werden. Der Vortrag zeigt anhand von PostSharp und Microsoft Unity, wie ihr AOP in Ihren Anwendungen nutzen könnt.
 
Im Anschluss daran schauen wir uns gemeinsam NLocalize an.Wer bisher seine WPF-Anwendungen mit LocBaml lokalisiert hat, dem sei ein Blick auf dieses Tool empfohlen. Neovelop NLocalize unterstützt euch bei der Lokalisierung von WPF- und Silverlight Anwendungen. Als Visual Studio 2010 Plugin ermöglicht NLocalize die Lokalisierung direkt in Visual Studio. Für Übersetzer gibt es einen eigenen Client, der sich durch eine hohe Benutzerfreundlichkeit auszeichnet.
 
Wie immer, so wird es auch dieses Mal wieder im Anschluss die Möglichkeit geben, bei einem Bierchen zu netzwerken.

Falscher Redirect auf SharePoint-Formulare

SharePoint-Listen bringen auch immer ihre eigenen Formulare mit, mit denen Listenelemente angeschaut (DispForm.aspx), editiert (EditForm.aspx) oder erzeugt (NewForm.aspx) werden können. Im Standardfall beinhalten diese Formulare ein ListFormWebPart, mit dessen Eigenschaft FormType definiert wird, welche Funktion das WebPart bereitstellen soll. Diese Formulare können auch an eigene Bedürfnisse angepasst werden, um weitere Funktionalitäten an dieser Stelle bereitzustellen.

Editiert man diese Formulare zu intensiv, so kann es sein, dass SharePoint verweigert, auf die Formulare zu verweisen. Das merkt man daran, dass im Kontextmenü die Menüpunkte "Element anzeigen" oder "Element bearbeiten" auf die Hauptseite der SiteCollection verweisen und nicht mehr die Listenformulare aufgerufen werden. Gut ist beraten, wer dann noch die Originalversion der Listenformulare vorliegen hat (oder zumindest eine Version, die noch funktioniert hat). Hat man dies nicht, so hat man in der Regel extrem viel Spaß dabei, die Seite wiederherzustellen, denn SharePoint verwendet intern jede Menge Guids, die auch hier dann benötigt werden.

Eine kleine Hilfestellung, was man bei der Wiederherstellung der Standardformulare beachten muss, gibt Ben in seinem Blog. Am wichtigsten hierbei: Guid der Liste, Guid des WebParts und FormType des ListFormWebParts.

Id des Listenelements im EditForm.aspx anzeigen

Im Standard werden einige Felder nicht in EditForm.aspx oder DispForm.aspx angezeigt. Eines dieser Felder ist die ID des Listeneintrags. Auf eine SQL-Tabelle projiziert, handelt es sich dabei um den internen Identifier, der den Eintrag eindeutig identifiziert und automatisch inkrementiert wird.
 
Da diese Spalte von SharePoint automatisch verwaltet wird, ist es in vielen Anwendungsfällen auch durchaus gerechtfertigt, diese nicht anzuzeigen, um so auch nicht den Eindruck zu erwecken, dieses Feld könnte editiert werden. Nun gibt es aber auch Anwendungsfälle, da möchte man, dass ein solcher Identifier auch angezeigt wird, einfach weil man so schon eine laufende Nummer hat. Beispiel dafür ist ein Bugtracking oder auch ein Support-System, wie es das Help-Center-Template schon mitbringt.
 
Für das Problem, die ID des Listeneintrags anzuzeigen gibt es im Netz mehrere Lösungen. Meist läuft die Lösung darauf hinaus, mit JavaScript oder Codebehind den QueryString-Parameter ID aus der Url auszulesen. Eine weitere Möglichkeit, und wenn man die bestehenden Seiten mal etwas genauer betrachtet vermutlich die von den SharePoint-Entwicklern vorgesehene Lösung ist es, die Klasse ListItemProperty zu verwenden. Damit kann man, wie der Name schon vermuten lässt, auf die Eigenschaften des zugrundeliegenden ListItems zugreifen.
 
<SharePoint:ListItemProperty Property="ID" id="ID" runat="server"/>
 
Dieses Control findet man im SharePoint Designer in der Toolbox.
 
Noch ein kleiner Tipp am Rande: Ähnlich wie ListItemProperty gibt es auch noch ListProperty, mit dem man Eigenschaften der Liste anzeigen kann.

Rückblick auf das mobilecamp Dresden

Es ist zwar noch nicht vorbei, aber ich werde den Rest des Tages und auch morgen leider nicht mehr am mobilecamp Dresdenteilnehmen können. Trotzdem möchte ich über den heutigen Tag ein paar Worte verlieren.

Heute und morgen findet hier in Dresden in der Informatikfakultät das mobilecamp Dresden statt. Der Name ist Programm, handelt es sich hierbei doch um ein Barcamp mit der thematischen Ausrichtung auf die Entwicklung mobiler Anwendungen. Ich war nun schon auf verschiedenen Open Spaces, von daher ist mir das Konzept der Unkonferenz nicht ungeläufig; jedoch ist mir nach wie vor der Unterschied zwischen Barcamp und Open Space nicht klar, sind sie in der Praxis in meiner Erfahrung doch gleich. Aber das soll nicht Thema dieses Posts sein.

Inhaltlich geht es um mobile Entwicklung und damit ist auch schon gesetzt, wer sich hier hauptsächlich einfindet. Und im Grunde kann man anhand der Teilnehmer auch gut die Marktmacht der jeweiligen Marktteilnehmer beobachten. Hauptsächlich handelt es sich hierbei um Entwickler von Apps für iPhone und iPad, an zweiter Stelle kommt die Android-Fraktion und unter ferner liefen dann solche Leute wie ich, die auch den Microsoft Markt bedienen können.

So wundert es auch nicht, dass es inhaltlich mehrheitlich um Themen ging, die sich rund um iPhone oder Android-Entwicklung drehen. Aber auch für mich hat sich heute das ein oder andere Thema gefunden, bei dem ich gern mitdiskutiert habe: So habe ich mich bei folgenden Sessions eingebracht:

  • Chancen und Risiken von Kooperationsmarketing
  • Ausblicke auf die Zukunft mobiler Endgeräte
  • Möglichkeiten von CSS3 zur Optimierung von Webseiten auf mobile Endgeräte

Leider musste ich nach dem Mittagessen das Barcamp verlassen. Trotzdem waren die drei Sessions am Morgen eine Bereicherung und ich kann es jedem nur empfehlen, der mit der Entwicklung auf oder für mobile Endgeräte zu tun hat und diskutieren oder lernen möchte oder auch nur seinen Horizont etwas erweitern möchte.

Rückblick auf die Dotnet Cologne 2011

Inzwischen ist es gut eine Woche her, seit ich und viele andere aus der .NET-Community nach Köln gepilgert sind, um an der diesjährigen Dotnet Cologne teilzunehmen. Ich hatte im letzten Jahr das erste Mal das Vergnügen und fand diese Veranstaltung so gut, dass ich auch dieses Jahr unbedingt mit dabei sein wollte. Was mich besonders an dieser Konferenz begeistert ist einerseits, dass sie nicht so sehr kommerzialisiert ist, wie es andere Konferenzen sind und trotzdem den anderen Konferenzen inhaltlich in nichts nachstehen. Das liegt daran, dass der Grundgedanke dazu aus der .NET Community geboren wurde - namentlich von den .NET Usergroups Köln und Bonn. Ich hoffe, dass das auch noch eine Weile so bleiben wird.

Nun aber zum eigentlichen Tag: Der diesjährige Veranstaltungsort im Media Park war leicht mit der S-Bahn zu erreichen und nach einer Registrierung konnte das Netzwerken bei einem kleinen Frühstück auch schon beginnen. Ich habe mich sehr gefreut, das ein oder andere bekannte Gesicht wiederzusehen und auch Leute mal persönlich kennenzuloernen, die ich bisher nur virtuell kannte. Ein Blick auf die Agenda zeigte, dass für den Tag nur 5 Sessions geplant waren mit großen Pausen von 30 Minuten und aufwärts. Was für mich auf den ersten Blick etwas schade war, weil da in Summe locker noch eine weitere Session Platz gehabt hätte, zeigte sich doch als sehr sinnvoll, denn so blieb gut Zeit für Sessions, die etwas überzogen bzw. auch für Gespräche untereinander.

Wie sah nun mein persönlicher Sessionplan aus? Den Beginn machte Ilker, der in 60 Minuten in Agile Architekturen eintauchte. Er zeigte anhand von zwei Architekturkonzepten, die für sich selbst in Anspruch nehmen, agil zu sein, ob diese die Kriterien von Agilität unterstützen. Ich denke, über das Thema hätte man gut und gerne noch eine Stunde länger philosophieren können, auch weil ein 10-Minuten-Überflug über eine Architektur nicht erlaubt, diese in Gänze zu erfassen und einzuschätzen. In diesem Zusammenhang fand ich auch schade, dass es dieses Mal keine Abendveranstaltung gab, ich hätte mich hier gern mit ihm noch länger drüber unterhalten.

Nach einer kurzen Pause ging es für mich dann weiter mit Daniel, der eine Session zum Thema REST gab. Ich habe mir erhofft, etwas genaueres über die Microsoft Web API zu erfahren - und meine Hoffnung wurde letzenendes auch erfüllt. Mit einer sehr unterhaltsamen Präsentation (so habe ich etwas über Forrest Gump und auch über Dory aus Finding Nemo gelernt), gab Daniel einen Überblick über den State of the art. Ich persönlich hätte diese Session nicht ganz auf Level 400 eingeordnet, aber dieses Empfinden kann sowohl an meinen bisherigen Erfahrungen als auch an der Art von Daniels Didaktik liegen - vielleicht eine Kombination aus beidem.

Nach einem gefährlichen Mittagessen, und der Lunch-Session ging es für mich dann zur LINQ-Session mit Bart de Smet. Thematisch ging es hier zunächst darum, LINQ beizubringen, schon zur Designzeit nur die möglichen Operatoren anzuzeigen. Dann ging es weiter mit Serialisierung von Expression Trees, einem Ausflug in die Reactive Extensions und einen Solver für Sudokus auf LINQ-Basis. Auch wenn es inhaltlich an der LINQ-Front nicht allzu viel Neues gibt, so hat es mich sehr gefreut, ihn mal live zu sehen und wer ihn coden sieht, der möchte gern im Anschluss alles mit LINQ machen.

Zum Schluss habe ich mir dann noch die Einführung in MEF von Rainer angeschaut. Auch wenn MEF letztenendes in der Anwendung recht simpel ist und ich mich im vorab gefragt habe, wie man da eine Stunde drüber reden kann, so hat er den Inhalt doch sehr unterhaltsam, enthusiastisch und mit vielen Beispielen rübergebracht. Falls jemand die Samples sucht, auf die er bei seiner Session verwiesen hat: diese sind in seinem englischsprachigen Blog verfügbar.

Zusammengefasst: Ich bin nach wie vor von dem Konzept der Community-Konferenzen überzeugt und ich hoffe, dass auch im kommenden Jahr die Dotnet Cologne eine Fortsetzung findet. Macht weiter so, ich wär gern wieder mit dabei.