Home  |  Über den Autor  |  Impressum  |  .NET Developer Group Braunschweig  |  Hönigsberg & Düvel

RSS 2.0 | Atom 1.0 | CDF | Send mail to the author(s)  
 Tuesday, January 24, 2012

Am Mittwoch, den 25.01.2012 findet das nächste Treffen der .NET Developer Group Braunschweig statt. Lars und ich halten einen Vortrag über Windows 8 und was es Wichtiges aus Entwicklersicht gibt.

Seit September 2011 gibt es die erste Preview Version von Windows 8 und die Beta steht bereits vor der Tür. So langsam wird es Zeit sich mit den Neuerungen und Änderungen des neuen Betriebsystems zu beschäftigen. Mit der neuen Metro-Welt für Tablet-PCs führt Microsoft auch einen neuen App Store ein. Wie auch schon beim Window Phone 7 ergibt sich hier für Entwickler ein neuer Markt für die Vertreibung der eigenen Software. Lars Keller und Karim El Jed machen einen kleinen Rundflug durch die neue Windows 8 Welt und zeigen wie man eine Metro-Applikation mit der Windows Runtime entwickeln kann.

Weitere Infos unter: http://www.dotnet-braunschweig.de

posted on 1/24/2012 4:30:02 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]

 Wednesday, January 11, 2012

Im September 2011 waren Lars Keller und ich auf der Microsoft BUILD Konferenz in Anaheim/Kalifornien. Auf der Konferenz wurde die erste Preview von Windows 8 gezeigt und jeder Teilnehmer erhielt ein Tablet (ebenfalls reine Preview-Hardware) von Samsung mit installiertem Windows 8.

Was es Neues und Wissenswertes zu Windows 8 gibt haben wir in einer sechsteiligen Videoserie aufgezeichnet, die sich nicht nur an Tekkies richtet.

Die Videos findet man unter http://www.windows-8-preview.de/.

Viel Spaß beim Anschauen!

posted on 1/11/2012 10:01:11 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]

 Thursday, December 01, 2011

Am Donnerstag, den 08.12.2011, findet das nächste Treffen der .NET Developer Group Braunschweig statt. Zu Gast ist Thomas Schissler mit einem Vortrag über das automatisierte Testen von WPF Oberflächen.

Advanced UI-Testing für WPF

Haben sie schon eine der schönen Demos für Coded UI Tests in Visual Studio 2010 gesehen? Haben sie vielleicht sogar schon mal an ihrer eigenen Applikation versucht, diese Testmethode anzuwenden und sind damit gescheitert? Dann sollten sie unbedingt diese Session besuchen. Der von Microsoft vorgesehene Record & Play Ansatz sieht in Demos zwar schön aus, in der Praxis gibt es jedoch eine Reihe von Problemen. In dieser Session werden diese Probleme erläutert und es werden Lösungen und Alternativen speziell für WPF-Applikationen aufgezeigt. UI-Testing kann funktionieren!

Thomas entwickelt seit 1996 Software, seit dem Jahr 2001 ausschließlich mit .NET. Er arbeitet als Coach und Berater in der Nähe von Ulm. Er ist MVP für Visual Studio ALM und Professional Scrum Trainer. Seine Schwerpunkte sind Team Foundation Server, Entwicklungsprozesse, insbesondere SCRUM und Softwarearchitektur. Als Sprecher ist er auf verschiedenen Konferenzen und bei Usergroups unterwegs. Selbst leitet er die .Net Developer Group Ulm (www.dotnet-ulm.de) und die EMEA-Sektion der Visual Studio ALM User Group (www.vsalmug.com).

Weitere Infos unter

http://www.dotnet-braunschweig.de

posted on 12/1/2011 5:22:53 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]

 Thursday, October 20, 2011
Am 04.11.11 findet zum dritten Mal die Community Veranstaltung Office Business Applikation (OBA) Day in Unterschleißheim bei Microsoft Deutschland statt. Dieser Tag widmet sich der Entwicklung rund um MS Office. Themen sind VSTO, SharePoint und Office 365. Des Weiteren bleibt auch viel Zeit für das Netzwerken und den Erfahrungsaustausch. Als Sprecher sind dabei: Thorsten Hans, Tom Wendel, Helmut Obertanner, Andreas Aschauer, Mario Meir-Huber und Lars Keller.

Weitere Informationen & die Anmeldung findet man unter http://www.oba-day.de

posted on 10/20/2011 7:58:21 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]

 Monday, October 17, 2011

Mein Gott, wie die Zeit rast. Vor 5 Jahren haben Lars Keller und ich die .NET Developer Group Braunschweig gegründet. Bei unserem ersten Treffen waren wir 7 Leute und trafen uns in einer kleinen Szenekneipe in Uni-Nähe. Auf unserer Homepage habe ich bereits einen kurzen Text zu unserer Gründung geschrieben. Wen es interessiert kann ihn hier lesen.

 

Unsere Geburtstagsfeier findet am 24.10.2011 ab 19:00 Uhr im Restaurant Zucker im Tagungsraum statt. Zu Gast haben wir Neno Loje, Team Foundation Server MVP. Wie sein Abstract erahnen lässt, wird es ein sehr interaktiver Vortrag:

“Neno war früher mal Softwareentwickler und besucht mittlerweile viel zu selten User Groups. Umso mehr freut er sich, dass es mit der Terminfindung geklappt hat (i!) und er nun bei der UG Braunschweig über sein Steckenpferd, den Team Foundation Server (TFS) reden kann. Denn er war schon immer ein Freund pragmatischer Lösungen und hat sich schon früh in den TFS "verguckt". Aber alles weitere dann am Abend selbst. Ach ja, und er hat keine genaue Agenda dabei, das heißt Fragen und Wünsche dürfen gerne mitgebracht werden.”

 

Im Anschluss an den Vortrag veranstalten wir noch eine Verlosung mit tollen Preisen. Dafür möchte ich mich an dieser Stelle noch einmal recht herzlich bei unseren Sponsoren  (Microsoft CLIP, Grape City, redgate, telerik, JetBRAINS, Infragistics, Typemock und DevExpress) bedanken.

 

Die Teilnahme ist ist wie immer kostenlos. Für dieses Event bitte ich aber um eine kurze formlose Anmeldung an mich (karim at eljed dot de), damit wir das Event besser planen können.

posted on 10/17/2011 9:38:29 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]

 Monday, September 26, 2011

Am 29.09.2011 findet ab 19 Uhr das nächste Treffen der .NET Developer Group Braunschweig statt.

Ich freue mich sehr Oliver Sturm, bei uns in Braunschweig begrüßen zu dürfen. Jeder der ihn schon einmal sprechen gehört hat, weiß warum…

 

Pragmatische Architektur

Anwendungsarchitekturen zu planen ist eine komplexe Aufgabe, die große Anforderungen an das Verständnis für die Technologie stellt. Oliver zeigt und erklärt die wichtigsten Punkte des Vorgangs, ein Architekturkonzept für eine mittelgroße verteilte .NET-Anwendung zu erstellen. Vom Datenzugriff über die Schichtentrennung bis zur UI muss jeder Teilbereich berücksichtigt werden, und dieser Talk fasst die Essenz der technischen Überlegungen und einer gesunden pragmatischen Philosophie zusammen. Oliver lässt Sie an seinen reichhaltigen Erfahrungen aus Beratung und Projektgeschäft teilhaben - Architekten, Programmierer und Inhaber anderer Berufsbezeichnungen sind gleichermaßen willkommen!

 

Weitere Infos unter

http://www.dotnet-braunschweig.de

http://www.sturmnet.org/blog/


posted on 9/26/2011 9:54:03 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]

 Monday, July 18, 2011

Auf meiner Rückfahrt vom .NET Open Space Süd hat Alexander Groß in einer ad-hoc Session Lars Keller und mir Ruby etwas näher gebracht. Am Ende der Session sagte Alex, dass es in Ruby ein Gem (eine Art Package oder Modul) gibt, mit dem man dynamisch auf XML zugreifen kann.

Da es seit C# 4.0 Unterstützung für Dynamische Sprachen gibt, habe ich mich gefragt, ob das dann nicht auch mit C# geht. Um es kurz zu machen: Es geht! Wie das Ganze funktioniert zeige ich Schritt für Schritt.

Ziel
Erst mal möchte ich noch ein bisschen genauer spezifizieren was ich eigentlich umsetzen wollte. Stellen wir uns folgende XML-Datei vor:

<Books>
  <Book>
    <Title>Ruby ist dynamisch</Title>
  </Book>
  <Book>
    <Title>C# auch</Title>
  </Book>
</Books>


Wäre es nicht cool, wenn wir im Code (unter Voraussetzung, dass wir besagte XML-Struktur kennen) einfach schreiben könnten:

dynamic bookstore = new DynamicXDocument(@"c:\bookstore.xml");  

foreach
(var book in bookstore.books) { Console.WriteLine("Titel: " + book.Title); }


“books” und “book” sollen dabei ebenfalls dynamisch sein. Es gibt also nirgendwo eine Klasse „Book“ mit der Eigenschaft „Title“.

Wie bekommen wir das hin? Fest steht schon einmal, dass bookstore durch das Keyword dynamic definiert werden muss, da wir sonst nicht auf Eigenschaften zugreifen können, die zur Compile-Zeit noch nicht vorhanden sind. Aber wie ist die noch nicht existierende Klasse DynamicXDocument zu implementieren?

Bei meinen Recherchen bin ich auf den Artikel [1] von Mario Meir-Huber und das dynamische Objekt „ExpandoObject“ gestoßen. Einem ExpandoObject kann man dynamisch Properties hinzufügen, die  intern in einem Dictionary gespeichert werden. Das geht schon in die richtige Richtung, allerdings sollen unsere Eigenschaften nicht aus einem Dictionary kommen, sondern aus einer XML-Datei.

Um selber eine dynamische Klasse zu erstellen, muss man das Interface IDynamicMetaObjectProvider implementieren. Dieses Interface hat allerdings nur eine Methode, die genau einen Parameter hat:


DynamicMetaObject GetMetaObject(Expression parameter)

Wer sich nicht mit ExpressionTrees rumschlagen möchte, kann glücklicherweise auf die Klasse DynamicObject zurückgreifen, die die Auswertung des ExpressionTrees für einen übernimmt und komfortablere/spezialisierte Methoden zur Überschreibung zu Verfügung stellt.


Die Erkenntnis, die wir bis jetzt haben ist, wenn wir ein dynamisches Objekt erzeugen wollen, können wir eine Klasse von DynamicObject ableiten und müssen nur die entsprechenden Methoden zur Erkennung der Aufrufe auf das Objekt überschreiben.


Okay, schauen wir mal was sich daraus machen lässt. Schauen wir uns noch mal den gewünschten Code an:

dynamic bookstore = new DynamicXDocument(@"c:\bookstore.xml");

foreach(var book in bookstore.books)
{
    Console.WriteLine("Titel: " + book.Title);
}

Wir benötigen also als erstes eine Klasse DynamicXDocument, die von DataObject ableitet und einen Konstruktor hat, der einen Dateipfad übergeben bekommt. Da wir als erstes auf bookstore.books in einer foreach-Schleife zugreifen, muss unsere Klasse auch noch das Interface IEnumerable implementieren.

public class DynamicXDocument : DynamicObject, IEnumerable
{
    private XElement _node;
    
    public DynamicXDocument(string filePath)
    {
        _node = (XElement)XDocument.Load(File.OpenRead(filePath)).FirstNode;
    }

  private DynamicXDocument(XElement node)   
{    
_node = node;  
}

    public IEnumerator GetEnumerator()
    {
        if (_node == null)
        {
            yield break;
        }
 

        foreach (var element in _node.Elements())
        {
            dynamic dynElement = new DynamicXDocument(element);
            yield return dynElement;
        }
    }
}

Was ich im Enumerator mache, ist nix weiter, als alle Unterelemente von “Books” als neue Instanzen  meiner dynamischen Klasse zurückzugeben, die als Hauptknoten das XElement “Book” haben. Bleibt nur noch der Zugriff auf “book.Title”. Um auf diese “virtuelle” Eigenschaft zuzugreifen können wir folgende Methode von DynamicObject überschreiben:

TryGetMember(GetMemberBinder binder, out object result)

 

Im Parameter “binder” werden Informationen übergeben, was genau aufgerufen wurde. Mit binder.Name kann man z.B. auf den Namen des aufgerufenen Properties (in unserem Fall “Title”) zugreifen. Eine simple Implementierung sieht wie folgt aus:

public override bool TryGetMember(GetMemberBinder binder, out object result)
{
var node = from n in _node.Elements(binder.Name) select n;    
    
    if (node.Count() == 0)     
    {      
        result = null;         
        return false;     
    }     
 
    XElement element = node.First();     
    result = element.Value;     
    return true;

}


So einfach ist das. Im angehängten Beispielprojekt habe ich noch Rekursion und Attribute eingebaut. Später werde ich vielleicht noch das Hinzufügen, Ändern, Löschen und Speichern der Daten implementieren. Etwas Fehlerbehandlung könnte auch nicht schaden ;-)

DOWNLOAD


Fazit
Bisher hatte ich gedacht, dass das neue Schlüsselwort „dynamic“ nur dazu zu gebrauchen ist einfacher auf COM-Objekte zuzugreifen. Da habe ich mich gewaltig geirrt. Im Namespace System.Dynamics steckt noch wesentlich mehr, was es lohnt zu erkunden. Wie man an dem XML-Beispiel sehen kann, kann man mit nur ein paar Zeilen Code schon nützliche Sachen bauen.

Es lohnt sich also immer mal wieder links und rechts zu schauen, auch wenn man meint, dass bestimmte Technologien, Tools, usw. für die momentane Arbeit uninteressant sind.

Schönen Dank an dieser Stelle noch einmal an die Veranstalter des .NET Open Space und an Alexander Groß für die spontane Bahn-Session.

 

Referenzen
[1] Dynamic in C# 4.0, Teil I: Einführung
http://www.codefest.at/post/2009/11/04/Dynamic-in-C-40-Teil-I-Einfuhrung.aspx


[2] Dynamic in C# 4.0: Introducing the ExpandoObject
http://blogs.msdn.com/b/csharpfaq/archive/2009/10/01/dynamic-in-c-4-0-introducing-the-expandoobject.aspx

[3] Creating and using Dynamic Objects
http://msdn.microsoft.com/en-us/library/ee461504.aspx

 

UPDATE: Ich bin gerade auf einen Artikel gestoßen, der so ziemlich genau das Gleiche macht und das Ganze noch um den Zugriff auf CSV-Dateien erweitert.
http://blogs.msdn.com/b/mcsuksoldev/archive/2010/02/04/dynamic-xml-reader-with-c-and-net-4-0.aspx

posted on 7/18/2011 8:54:35 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]

 Tuesday, June 28, 2011

Am 07.07.2011 findet das nächste User Group Treffen im Restaurant Zucker (ARTMax) statt. Zu Gast ist Daniel Fisher mit einem Vortrag über die Lokalisierung von ASP.NET MVC Anwendungen.

 

Die neue Plattform zum Entwickeln von Web-Anwendungen auf der .NET Plattform bringt viele neue und produktivitätssteigernde Features mit sich. Dabei bleibt es nicht aus, dass einige alte Konzepte über Bord geworfen werden. Die Lokalisierung von Web-Anwendungen wie sie zu *klassischen ASP.NET* Zeiten ablief ist eines davon. Daniel Fisher zeigt Ansätze und Lösungen aus der MVC-Praxis für den Alltag.

Weitere Infos gibt es unter http://www.dotnet-braunschweig.de/

posted on 6/28/2011 8:48:50 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]