.
Anmeldung | Registrieren | Hilfe

.NET-Blogs Archiv Mai 2011

dotnet Cologne 2011 – Auswertung der Feedbackbögen

31.05.2011 10:01:00 | Stefan Lange

Mehr als 2/3 der Teilnehmer haben Feedbackbögen abgegeben und diese sind nun ausgewertet. Hierzu ein kleiner Überblick.

Das Feedback der Teilnehmer ist überwiegend positiv und übertrifft unsere Erwartungen. Sowohl für die Location, die Auswahl der Sessions als auch die Organisation insgesamt gab es viel Lob. Darüber haben wir uns sehr gefreut.

Sehr positiv wurde das schnelle WLAN aufgenommen, das jederzeit ausreichend Bandbreite zur Verfügung stellte.

Nachdem wir diesmal die Pausen auf Basis des Feedbacks vom letzten Mal verlängert haben, kam nun mehrfach der Wunsch nach etwas kürzeren Pausen auf. Das wird wohl ein schwieriges Thema bleiben.

Verbesserungspotenzial wird bei der Website und der Organisation des Mittagessens gesehen.

Hier nun die Bewertung der Veranstaltung durch die Teilnehmer im Einzelnen. Die Zahl ist der Mittelwert von Schulnoten (1 bis 5) und die Zahl in Klammern die Varianz.

Räumlichkeiten: 1,7 (0,6)
Verpflegung: 1,9 (0,6)
Website: 2,1 (0,5)
Anmeldevorgang: 1,7 (0,3)
Sonstige Organisation: 1,6 (0,3)
Gesamteindruck: 1,6 (0,3)

Im Vergleich zum Vorjahr ist dies wieder eine leichte Steigerung von ca. 0,1 je Punkt.

Von denjenigen, die auf die Frage „Würden Sie an einer dotnet Cologne 2012 teilnehmen“ geantwortet haben (92% der abgegebenen Fragebögen), haben mehr als 99% mit „Ja“ gestimmt. Das ist ein super Ergebnis, mit dem wir mehr als zufrieden sind.

Auch bei der Bewertung der Vorträge gab es eine Steigerung im Vergleich zum Vorjahr. Hier das Ergebnis im Mittel über alle abgegebenen Bewertungen:

Kompetenz über alle Sprecher: 1,5 (0,5)
Qualität über alle Vorträge: 1,8 (0,8)

Die Sprecher bekommen ihre individuellen Auswertungen inkl. Kommentaren zugemailt als Gegenleistung für das zur Verfügung stellen ihrer Vortragsunterlagen.

Nochmals vielen Dank an alle, die zum Erfolg der diesjährigen dotnet Cologne beigetragen haben.

Danke Community! Bitte Deutsche Krebshilfe e. V.!

30.05.2011 09:22:39 | Gregor Biswanger

Vor fast zwei Monaten startete ich die Aktion “WPF 4 und Silverlight 4 gegen Krebs!”, bei der ich meine signierte DVD “WPF 4 und Silverlight 4” vom WPF-, Silverlight und Expression Blend-Team, für einen guten Zweck versteigerte. Völlig überrascht hat mich, dass zahlreiche E-Mails mit einer freiwilligen Spende bei mir persönlich eintrafen. Nicht nur das, sondern auch die Medien unterstützten diese Aktion sehr stark. Mit dem managen für die Spendenweitergabe war ich bis vor einigen Tagen noch beschäftigt.

image

Community News
(Thorsten Hans – SharePoint MVP bei der .NET User Group Frankfurt)

 

DKH_Logo

 

Für diesen starken Einsatz möchte ich mich nochmals bei der ganzen Community bedanken! Dank euch sind insgesamt 2.000 € an die Deutsche Krebshilfe e.V. eingegangen. Die DVD selbst wurde für 123 € von Peggy Reuter ersteigert.

image

Danke für die festen Spenden an:

Dr. Holger Schwichtenberg (.NET-Dozent und -Berater bei www.IT-Visions.de) 250 €
Microsoft Press Team (http://www.microsoft-press.de) 200 €
Michael Ferschl (Geschäftsführer von impuls Informationsmanagement GmbH) 200 €
Microsoft Deutschland GmbH (Developer Platform & Strategy Group ) 100 €
Microsoft Deutschland GmbH (Community Leader/Insider Program (CLIP)) 100 €
Microsoft Deutschland GmbH (MVP Awards Program) 100 €
.NET Day Franken (http://www.dotnet-day-franken.de) 100 €
Ruben Bonzanin (http://www.techniker-support.de) 100 €
Ralf Schoch (CoDeSo) 77,77 €
Andreas Weizel (http://www.awzhome.de) 70 €
Roland Schumacher (http://www.EdelsteinKreationen.ch) 66,66 €
Nico Franze (http://www.nfranze.de) 60 €
Florian Seffert (Flory IM | Your Windows Phone 7 Messenger) 50 €
Robert Walter (Softwareentwickler bei conplement AG) 50 €
Mathias Schiffer 50 €
Enrico Gebauer (http://silverlight-essentials.com/blog/) 50 €
Peggy Reuter (http://peggy-reuter.net) 50 €
Gregor Biswanger (Solution Architect bei impuls Informationsmanagement GmbH) 102,57 €
Sebastian Geertsen (Graf GmbH & Co. KG Ingolstadt) 50 €
(Anonym) 50 €

 

Interview mit Peggy Reuter

 

image
(Peggy Reuter – Interaction Designerin für WPF und Silverlight bei XAMLfab)

 

Gregor: „Hallo Peggy, du bist die glückliche Gewinnerin der Auktion mit der DVD „WPF 4 und Silverlight 4-Spezial Edition“. Dass du gewonnen hast, hatte mich sehr überrascht. Denn du warst bereits eine der ersten aus der Community die sich von selbst zu einer freien festen Spende zur Aktion gemeldet hatte. Gegen Ende hast du auch noch einen draufgelegt und die DVD abgestaubt. Wie ist es zu so einer starken Beteiligung deinerseits gekommen? Was hatte dich motiviert?“

Peggy: „Grundsätzlich finde ich die Aktion, nämlich Dein Engagement gegen Krebs gepaart mit einer Auktion bei Ebay, Deiner bestimmt sehr guten DVD und den sehr besonderen Autogrammen eine sehr gute Idee. Das .Net-Community-Engagement besteht oft aus reiner Fachsimpelei. Ich finde den Blick über den Tellerrand, eben dass das Leben aus mehr besteht als aus Bits and Bytes, auch im Rahmen seines Umfeldes hervorragend. Daher habe ich sofort reagiert mit einer Spende. Außerdem kann ich mir ja auch mal was sinnvolleres gönnen als nur Stöckelschuhe ;-)“

Gregor: „Und wieso dann noch zusätzlich die DVD?“

Peggy: „Warum ich mich gerade bemüht habe diese DVD zu bekommen? Hmm. Ich finde, ich habe der Technologie WPF und Silverlight viel zu verdanken. Der Switch vor einige Jahren und der Schritt in die darauf fokussierte Selbständigkeit später, war das Beste, was ich machen konnte. Mein Erfolg, mein Glück und meine Zufriedenheit hat viel damit zu tun. Zudem habe ich in der damit verbunden Community positivste Erfahrungen gemacht. Nun kann ich aber schlecht sagen „Danke, WPF“ oder „Spende an Silverlight“ oder sowas … Daher war es für mich ein Stück weit auch, etwas zurück zu geben.“

Gregor: „Vielen lieben Dank für deine Worte und deiner Hilfe zur Deutschen Krebshilfe e.V.! Respekt!“

Wenn einem nicht viel einfällt, muss man fragen

28.05.2011 18:29:51 | Albert Weinert

Wie der eine oder andere mitbekommen hat plane ich eine Veranstaltung rund um ASP.NET MVC. Nun suche ich einen Namen, jedoch nicht nur für die ASP.NET MVC Veranstaltung sondern für eine Reihe Veranstaltungen die unter diesem Konzept fahren.

.NET Open Space ist “belegt” für Wochenend-Veranstaltungen rund um .NET mit einem vielfältigen Themenspektrum. DevHouse ist primär Entwicklerbezogen und würde nicht so meine Vision passen, natürlich auch vergeben.

Meine Vision sind mehr oder weniger Regelmäßige Veranstaltungen zu einem Thema, mit einem kleinerem Teilnehmerkreis von 20-30 Personen, mit einer Dauer von 1-2 Tagen. Die Veranstaltungen an sich soll auch nicht viel Administrativen Aufwand für die Organisatoren machen, so dass sie gerne auch öfters stattfinden kann.

Was dort gemacht wird und wie es gemacht wird ist ziemlich offen, nur eins soll es nicht geben. Viele Vorträge und passive Teilnehmer. Jeder Teilnehmer soll sich einbringen und somit zum Wissens- und Erfahrungsaustausch beitragen.

Die Möglichen Themen sind vielfältig, es soll sich nicht nur um .NET drehen, sondern über alle aktuellen Themen die so um die Software anfallen.

Von Entwicklung, Architektur, Technologiebezogen, über Design bis zur User Experience. Alles soll dort einen Platz haben, jedoch mit dem zentralen Ziel bessere Software zu entwickeln.

Für dies alles such ich nun einen Namen, im Idealfall nicht vorbelastet sowie Verfügbarkeit entsprechender Domänen, Twitter-Adressen etc. Er soll sich gut mit Untertiteln kombinieren lassen um den Kern der jeweiligen Veranstaltung auszudrücken.

Bitte postet hier eure Vorschläge, ich habe auch ein paar Ideen, diese werde ich jedoch erst später einbringen um euch unbelastet in die Aufgabe gehen zu lassen.

Danach lasse ich abstimmen und es wird wohl auch was zu gewinnen geben, weiß nur noch nicht was.

Für die Veranstaltungen wird es dann eine Plattform geben die von den Veranstaltungen genutzt werden kann, aber nicht muss. Diese beinhaltet dann Anmeldung, Wartelisten, Wiki, Newsletter etc. Auch wird jeder eine entsprechende Veranstaltungen unter der Flagge durchführen können, das Konzept der Veranstaltung wird sich im laufe der “Jahre” dann auch sicher verbessern.

So, ich bitte um Ideen und Vorschläge.

Webcast : Preview Visual Studio vNext ALM

28.05.2011 14:16:00 | Christian Binder

Auf der TechEd wurden ja die nächste Visual Studio ALM Generation vorgestellt  und im Blog von Brian Keller gibt’s auch verschiedene Informationen zu dem Preview. Zusätzlich habe ich die wichtigsten Neuerungen in einem 30min Webcast zusammen gefasst. Der Cast wird in Kürze auch auf Ch9 und auf dem Webcastportal verfügbar sein.

image

Hier im Blog schon zum Download. Über Feedback freue ich mich natürlich.

Eindrücke: Die Advanced Developers Conference C++

27.05.2011 15:06:08 | Christian Binder

Seit langem wieder eine Konferenz für C++ Entwickler, die ADC C++. Ich war echt gespannt, ob man nach so langer Zeit die Community wieder auf eine Konferenz kommen wird und wurde nicht enttäuscht. Die Stimmung und der Ort (Chiemsee) waren echt super, da es auch ideale Bedingungen für das Networking neben den Vorträgen gab.  Abends gab es  dann eine kleine Bootfahrt, die in einer Q&A Session mit allen Sprechern endete. Dabei hatte ich den Eindruck, dass so eine Q/A Session absolut überfällig war. Nach der Bootfahrt ging die Diskussionen  weiter  bis  ca. 2:00 Nachts. Boris Jabes (Microsoft C++ Team) hatte mir am nächsten Morgen gesagt, dass er seit langem keine so gute Diskussion  mit der Community gehabt hätte. Michael Wong vom C++ Committee war auch dabei und hat über den Standard C++0x  gesprochen, der in seiner finalen Phase ist, und sehr wahrscheinlich den Namen C++ 11 haben wird.  Ich habe die Chance genutzt und mit Ihm ein kurzes Interview zu C++ 11 aufgenommen. Michael’s Passion für C++ muss man mal Live erlebt haben, er hat auch  auf seinem Blog einen Report geschrieben. Hier ein paar Bilder von der ADC C++:

clip_image001

clip_image002

clip_image003

clip_image004

Martin Richter (C++ MVP) war auch dabei, hier sind seine Eindrücke.

Ein großes Dankeschön möchte ich Bernd Marquardt aussprechen, der maßgeblich die Inhalte der Konferenz zusammengestellt hat und natürlich dem Sponsor Intel und dem ppedv Team, ohne die es die ADC C++ 11 nie gegeben hätte. Ich freue mich schon auf die ADC C++ 2012, da wird es dann einige neue spannende Themen rund um C++ geben.

Visual Studio ALM Days 2011: vNext der Visual Studio ALM Platform live erleben

26.05.2011 11:32:00 | Christian Binder

Schon mal vormerken : Vom 23. bis 25. November finden in München die Microsoft Visual Studio ALM Days 2011 (ehemals TeamConf) statt. 

ALM Days 23-25 November 2011

Mit Top Keynotes von Sam Guckenheimer, Product Planner für Visual Studio,  Brian Harry, Microsoft Technical Fellow und „Vater“ von Team Foundation Server und Prof. Dr. Lambert Grosskopf Fachanwalt für Informationstechnologie (IT-Recht) sowie Urheber- und Medienrecht. Selbstverständlich werden auch lokale Top Sprecher wieder dabei sein.

imageimageimage

Klar im Fokus  ist natürlich die nächste  Generation der Visual Studio ALM Plattform und wie immer interessante Beiträge von TFS Anwendern für Anwender. Die Visual Studio ALM Days sind die ideale Gelegenheit sich zum Thema ALM auszutauschen. Aus meiner Sicht mehr als nur eine normale Konferenz.

Call-For-Papers und Frühbuchertickets bis 12. August

Ab sofort können Vorschläge für Vorträge bis zum 12. August eingereicht werden. Frühbucher erhalten bis zum 12. August bis zu 50 Prozent Rabatt auf den Ticketpreis.

Direkt zur Website der Visual Studio ALM Days 2011: www.teamconf.de

Chris

UI Automation : Hilfreiche Ressourcen zu CodedUI Tests

26.05.2011 09:17:30 | Christian Binder

Hier einige hilfreiche Links, die einige Fragen rund um CodedUI Test klären und den Einstieg erleichtern.

Coded UI – Diagnose von MSAA oder UIA Problemen in Anwendungen (Teil 1)

Coded UI – WPF Anwendungen für CodedUI vorbereiten (Teil 2)

Coded UI – WinForms Anwendungen für UITest vorbereiten (Teil 3)

Auch einen Blog, den man in diesem Kontext kennen sollte, ist Mathew Aniyan's Blog. Mathew ist Program Manager für Coded UI Test.

Content Index for Coded UI Test

Windows Phone: News zu Mango, neue Developer Tools und Video zu den Neuigkeiten

25.05.2011 16:01:52 | Kay Giza

Microsoft hat gestern in New York offiziell Mango vorgestellt, die nächste Version der Windows Phone-Plattform, die im Herbst auf den Markt kommen soll. Eine Aufzeichnung der Präsentation von Mango die Andy Lees und Kollegen gehalten haben, ist... [... mehr Informationen in diesem Blogeintrag auf Giza-Blog.de]

This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
Visit:  Giza-Blog.de Facebook-Page | Follow Kay Giza on Twitter
Daily News on MSDN:  MSDN Aktuell
© Copyright 2006-2011 Kay Giza. All rights reserved. Legal
Subscribe

TT.UIA: Command Behavior

25.05.2011 07:28:00 | Jörg Neumann

Wie hier bereits beschrieben, eignen sich Behaviors sehr gut um Problemstellungen rund um MVVM zu lösen. Ein häufiges Problem in diesem Zusammenhang ist der Umgang mit Commands. Sie können lediglich Buttons (und bei WPF auch Menu Items) zugewiesen werden – alle anderen UI-Elemente verfügen nicht über eine Command-Eigenschaft. Zudem wird der Command immer nur über das Click-Event ausgelöst. Auch bezieht sich der Status eines Command stets auf die IsEnabled-Eigenschaft des jeweiligen Controls. All diese Limitationen versucht TT.UIA mit dem Command Behavior zu lösen.

Das Command Behavior

Die Klasse CommandBehavior leitet von TriggerAction<T> ab und kann somit auf beliebige Elemente und deren Events angewendet werden. Beispiel:
<Button>
  <i:Interaction.Triggers>
    <i:EventTrigger EventName="Click">
      <behaviors:CommandBehavior
        Command="{Binding OkCommand}"
        PropertyName="Visiblity"
        CanExecutePropertyValue="Visible"
        CanNotExecutePropertyValue="Collapsed" />
    </i:EventTrigger>
  </i:Interaction.Triggers>
</Button>

Hier wurde einem Button der CommandBehavior zugewiesen. Bei welchem Event das Command ausgeführt werden soll wurde hierbei über die EventName-Eigenschaft der Klasse EventTrigger angegeben.
Die Bindung zum Command kann daraufhin wie gewohnt über die Eigenschaften Command bzw. CommandParameter zugewiesen werden. Zusätzlich kann über die Eigenschaften PropertyName, CanExecutePropertyValue und ExecutePropertyValue angegeben werden, welche Eigenschaft des zugehörigen Elements auf welchen Wert gesetzt werden soll, wenn der Command aktiv bzw. inaktiv ist. Sollte für das Setzen des Eigenschaftenwertes eine Konvertierung erforderlich sein, kann über die Converter-Eigenschaft ein entsprechender Value Converter angegeben werden.
Darüber hinaus bietet CommandBehavior die Eigenschaft CommandAction. Dies ist ein shortcut für den Fall, dass sich der Status des Commands lediglich auf die Eigenschaft IsEnabled oder Visibility auswirken sollen. Hierbei muss CommandAction lediglich auf den Wert Hide oder Disable gesetzt werden. Hierbei kann die explizite Angabe über PropertyName, CanExecutePropertyValue und ExecutePropertyValue entfallen. Beispiel:
<Button>
  <i:Interaction.Triggers>
    <i:EventTrigger EventName="Click">
      <behaviors:CommandBehavior
        Command="{Binding OkCommand}"
        CommandAction="Hide" />
    </i:EventTrigger>
  </i:Interaction.Triggers>
</Button>

So, das war es erstmal mit meiner Blog-Serie zu TT.UIA. Als nächstes steht die Silverlight-Portierung an. Stay tuned!

Ein ASP.NET MVC Camp (Arbeitstitel) in Köln

24.05.2011 12:14:49 | Albert Weinert

Ich habe da die Idee eines ASP.NET MVC Camps (Arbeitstitel). Ein Tag Rund um ASP.NET MVC und das ganze drum herum. Es soll eine recht kompakte Veranstaltung sein, vielleicht so 20-30 Teilnehmer. Auch keine Konferenz, sonden in einem OpenSpace Rahmen.

Freitag Abends bis Samstag Abend wird das ganze stattfinden. Am Freitag Abend wird gegessen, getrunken, geredet und der Samstag geplant. Samstags geht’s nun ans lernen, austauschen und verbessern .

Im Kern ist dies ein WebCamp. Es geht also nicht nur im ASP.NET MVC sondern um die komplette WebEntwicklung.

Folgende Themen kann ich mir vorstellen.

  • ASP.NET MVC
  • jQuery
  • JavaScripts
  • JavaScripts Frameworks
  • REST mal richtig
  • Was passiert auf anderen Plattform (Ruby, Python etc.)
  • Workshops
  • etc.

Was dran kommt ist OpenSpace typisch eine Sache der Teilnehmer.

Die Veranstaltung soll zum Selbstkostenpreis stattfinden, vielleicht findet sich ja auch noch ein Sponsor. Also möglichen Veranstaltungsort habe ich das Betahaus Köln im Auge

Nun gilt es generelles Interesse abzuklopfen und einen Termin zu finden. Das ganze soll im Augst stattfinden. Bitte stimmt ab wenn Ihr Interesse habt und an einem der möglichen Termine mitmachen wollt.

Wann soll das ASP.NET MVC Camp (Arbeitstitel) in Köln stattfinden?online survey

TT.UIA: Adorner Factory Behaviors

24.05.2011 07:57:00 | Jörg Neumann

Wie hier und hier bereits beschrieben, haben Expression Blend Behaviors ein paar Limitationen. Hierzu zählt zum Beispiel die Tatsache, dass sie nicht so flexibel wie Adorner sind. So können sie zum Beispiel nur das zugewiesene Element selbst manipulieren und keine zusätzlichen Elemente einfügen. Um diese Limitationen zu umgehen, bietet TT.UIA die Klasse AdornerFactoryBehavior.
Mit ihr kann ein beliebiger Adorner in Form eines Behaviors zugewiesen werden. Beispiel:
<TextBox>
  <i:Interaction.Behaviors>
    <behaviors:AdornerFactoryBehavior
AdornerTypeName="Thinktecture.UIAnnotations.ElementTrackerAdorner" />
  </i:Interaction.Behaviors>
</TextBox>

Dies hat den Vorteil, dass der Adorner sehr einfach mit Expression Blend zugewiesen werden kann.
AdornerFactoryBehaviorInBlend
Darüber hinaus ist es auch möglich, einen Adorner mehrfach dem gleichen Element zuzuweisen, was mit der Attached Property-Syntax nicht möglich ist.
Die meisten Adorner von TT.UIA verfügen jedoch über zusätzliche Eigenschaften, die nicht generisch über AdornerFactoryBehavior zugewiesen werden können. Daher bietet es sich an, eine entsprechende Ableitung zu erstellen. Ein Beispiel hierfür ist die Klasse CueBannerBehavior. Sie kapselt den CueBannerAdorner in dem sie von AdornerFactoryBehavior ableitet und die Eigenschaft CueBannerText bereitstellt.
public class CueBannerAdornerFactoryBehavior
: AdornerFactoryBehavior
{
  protected override Adorner CreateAdorner()
  {
    var adorner = new CueBannerAdorner(this.AssociatedObject);
    adorner.CueBanner = this.CueBannerText;
    return adorner;
  }
  public static readonly DependencyProperty
    CueBannerTextProperty = DependencyProperty.Register(
      "CueBannerText", typeof(string),
      typeof(CueBannerAdornerFactoryBehavior),
      new PropertyMetadata("", 
        OnCueBannerTextPropertyChanged));
  public string CueBannerText
  {
    get { return (string)GetValue(CueBannerTextProperty); }
    set { SetValue(CueBannerTextProperty, value); }
  }
  private static void OnCueBannerTextPropertyChanged(
    DependencyObject sender,
    DependencyPropertyChangedEventArgs e)
  {
    ((CueBannerAdornerFactoryBehavior)sender)
    .OnCueBannerTextChanged(sender, e);
  }
  private void OnCueBannerTextChanged(
    DependencyObject sender,
    DependencyPropertyChangedEventArgs e)
  {
    if (this.Adorner != null && e.NewValue != null)
      ((CueBannerAdorner)this.Adorner)
      .CueBanner = e.NewValue.ToString();
  }
}

Hier wurde zunächst die Methode CreateAdorner() der Basisklasse überschieben und hierin der CueBannerAdorner erstellt. Die Property CueBannerText muss nun lediglich an den Adorner durchgereicht werden.
Im nächsten Post geht es mal nicht um grafische Effekte, sondern den sinnvollen Einsatz von Behaviors in MVVM-Szenarien.

Einladung zum Treffen der .NET Usergroup Dresden am 16.06.2011

23.05.2011 18:23:00 | Martin Hey

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.

Einladung zum Treffen der .NET Usergroup Dresden am 16.06.2011

23.05.2011 18:23:00 | Martin Hey

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

23.05.2011 17:17:00 | Martin Hey

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.

Falscher Redirect auf SharePoint-Formulare

23.05.2011 17:17:00 | Martin Hey

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.

Windows Phone 7 Quickstart für Entwickler im Juni

23.05.2011 16:05:05 | Peter Kirchner

Auch im Juni bieten wir Ihnen wieder Trainings zum Windows Phone 7 an. Sollten Sie im Februar keine Gelegenheit gehabt haben, dann können Sie dies nun nachholen.

In diesem Tagesworkshop erfahren Sie alles Notwendige zur neuen Softwareplattform und den Werkzeugen von Windows Phone 7, um sofort mit der Entwicklung eigener Anwendungen beginnen zu können. Sie lernen, wie auf Basis bewährter Technologien wie .NET und Silverlight mit der populären Sprache C# und dem hochproduktiven Werkzeug Visual Studio 2010 Apps für den privaten und Businesseinsatz entstehen. Sie erfahren, wie Sie Ihre Software im Emulator oder auf Geräten testen und schließlich im Windows Phone Marketplace vertreiben können. Und Sie haben die Möglichkeit, von unserem erfahrenen Trainer Antworten auf Ihre Fragen zu erhalten. Diese Veranstaltung vermittelt die Inhalte durch Vorträge und Demos.

Folgende Themen werden wir Ihnen vorstellen:

  • Windows Phone 7 – Plattformüberblick
  • Grundlagen der WP7-Entwicklung mit Silverlight
  • Fortgeschrittene Silverlight-Themen
  • Datenspeicherung und -zugriff
  • Lebenszyklus einer Anwendung
  • Zugriff auf Sensoren & Nutzerdaten
  • Web Services & the Cloud
  • Softwarevertrieb

Preis: kostenlos
Referent: Karsten Samaschke

Datum, Veranstaltungsort und Anmeldung

Id des Listenelements im EditForm.aspx anzeigen

23.05.2011 15:50:00 | Martin Hey

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.

Id des Listenelements im EditForm.aspx anzeigen

23.05.2011 15:50:00 | Martin Hey

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.

TT.UIA: Behavior Factories

23.05.2011 08:17:00 | Jörg Neumann

Wie hier bereits beschrieben, haben Expression Blend Behaviors ein paar Limitationen. Hierzu zählt zum Beispiel die Tatsache, dass sie nicht per Style zugewiesen werden können. Um diese Limitation zu umgehen, bietet TT.UIA die Behavior Factories.

Die Klasse BehaviorFactory

Behaviors werden zwar auch über Attached Properties zugewiesen, können aber nicht über einen Style zugewiesen werden. Dies ist per Design so und führt bei jedem Versuch zu einer Exception. Behaviors lassen sich jedoch per Code zuweisen. Diese Möglichkeit nutzt die Klasse BehaviorFactory. Sie stellt die Attached Property BehaviorTypeName zu Verfügung, über die die Typbezeichnung des Behaviors angegeben werden kann. Der so angegebene Behavior-Typ wird daraufhin instanziiert und per Code an das entsprechende Element gebunden.
In folgendem Beispiel wird das Focus Behavior mit Hilfe von BehaviorFactory innerhalb eines Styles zugewiesen:
<Window>
<Window.Resources>
<Style TargetType="TextBox">
<Setter Property="behaviors:BehaviorFactory.BehaviorTypeName" Value="Thinktecture.UIAnnotations.Behaviors.FocusBehavior" />
</Style>
</Window.Resources>
...
</Window>

Da der Style implizit definiert wurde, werden daraufhin alle Textboxen des Fensters mit dem Behavior ausgestattet, ohne das diese explizit zugewiesen werden müssen.
In diesem Fall kann es jedoch vorkommen, das eine bestimmte Textbox des Fensters nicht mit dem Behavior ausgestattet werden soll. Hierfür bietet BehaviorFactory die Attached Property DetachBehaviorTypeName. Sie unterbindet für das zugehörige Element ist Zuweisung des über einen Style definierten Behaviors.
<TextBox
behaviors:BehaviorFactory.DetachBehaviorTypeName=
"Thinktecture.UIAnnotations.Behaviors.FocusBehavior" />

TriggerActionFactory und TargetedTriggerActionFactory

Wenn das betreffende Behavior nicht von Behavior<T>, sondern von TriggerAction<T> oder TargetedTriggerAction<T> ableitet, muss zusätzlich noch der Name des auslösenden Events, bzw. das Zielelement angegeben werden. Hierfür bietet TT.UIA die spezialisierten Klassen TriggerActionFactory und TargetedTriggerActionFactory.
Im nächsten Post geht es ebenfalls um Behaviors. Hier werde ich die Klasse AdornerFactoryBehavior vorstellen, die verwendet werden kann, um beliebige Adorner per Behavior zuzuweisen.

TT.UIA: Behaviors

20.05.2011 08:25:00 | Jörg Neumann

Wie hier bereits beschrieben, haben Expression Blend Behaviors gegenüber Attached Properties einige Vorteile. Hierzu zählt vor allem die Designer-Unterstützung in Blend. Ein weiterer Vorteil ist jedoch auch die Tatsache, dass Behaviors mit mehreren Elementen verbunden werden können.
Ein einfaches Beispiel:Ein Dialog enthält eine Textbox/Button-Kombination zur Auswahl einer Datei.
OpenFileBehavior
Klassischerweise würde man hier im Code-Behind den Dateidialog öffnen und die Auswahl in die daneben stehende Textbox übertragen. Da dies eine Funktionalität ist, die häufiger benötigt wird, bietet es sich an sie zu kapseln. Der Code-Behind-Ansatz ist jedoch auch in MVVM-Szenarien ein Problem. Das Öffnen des Dialogs möchte man jedoch auch nicht im ViewModel hinterlegen, da es sich um UI-Code handelt.

Das Open File Behavior

Mit einem Behavior lässt sich solch eine Funktionalität sehr komfortabel abbilden. TT.UIA bietet hierfür die Klasse OpenFileBehavior. Sie leitet von TargettetTriggerAction<T> ab und kann somit nicht nur ein Element (der Button im oberen Beispiel), sondern auch an ein Zielelement (die Textbox) gebunden werden.
...
<Button
  xmlns:i=
    "clr-namespace:System.Windows.Interactivity;
    assembly=System.Windows.Interactivity"
  xmlns:behaviors=
    "clr-namespace:Thinktecture.UIAnnotations.Behaviors;
     assembly=Thinktecture.UIAnnotations">

  <i:Interaction.Triggers>
    <i:EventTrigger EventName="Click">
      <behaviors:OpenFileBehavior
        TargetName="imageTextBox"
        DialogTitle="Select an image..."
        Filter="PNG Files|*.png" />
    </i:EventTrigger>
  </i:Interaction.Triggers>

</Button>

<TextBox x:Name="imageTextBox" />
...

Die Deklaration erfolgt hierbei über die Klasse System.Windows.Interactivity.Interaction, die Teil des Expression Blend SDKs ist.

Das Busy Behavior

Ein weiteres Problem in MVVM-Anwendungen ist der Umgang mit Cursorn und anderen Fortschrittsanzeigen. Denn das ViewModel sollte weder explizit einen Cursors setzen, noch ein entsprechendes UI-Element direkt steuern. In Silverlight löst man dies meist mit dem beliebten (wenn auch hässlichen) BusyIndicator, die per Data Binding an das ViewModel gebunden wird. Hierfür muss die Komponente jedoch zur Entwurfszeit in das Layout des jeweiligen Fensters so eingefügt werden, dass sie im Vordergrund steht. Dies verursacht bei nachträglichen Layout-Änderungen häufig Probleme. Zudem sollte die Bedienung des Fensters verhindert werden, sobald der BusyIndicator aktiv wird.
All diese Herausforderungen versucht die Klasse *BusyBehavior* zu lösen. Sie zeigt eine überdimensionale Eieruhr und legt dabei einen Overlay über das zugehörige Fenster um die Bedienung der Oberfläche durch den Benutzer zu verhindern. Das Busy Behavior kann mit einem beliebigen Element verknüpft werden. Es ermittelt zur Laufzeit das übergeordnete Fenster und fügt sich auf oberster Ebene in den visuellen Baum ein.
<i:Interaction.Behaviors>
  <behaviors:BusyBehavior
    IsBusy="{Binding IsBusy}" />
</i:Interaction.Behaviors>

Die Steuerung erfolgt über die Eigenschaft *IsBusy*, die zum Beispiel an eine entsprechende Eigenschaft des zugehörigen ViewModels gebunden werden kann. Das Ganze sieht dann zur Laufzeit in etwas so aus:
BusyBehavior

Das Dialog Button Behavior

Die Klasse DialogButtonBehavior steuert das Verhalten von Dialogschaltflächen. Klassischerweise hat ein Dialog einen Accept- und einen Cancel-Button, womit der Benutzer das Fenster mit Enter bestätigen, bzw. mit ESC abbrechen kann. Hierbei wird das Fenster geschlossen und die DialogResult-Eigenschaft entsprechend gesetzt. All dies fasst DialogButtonBehavior zusammen, wie das folgende Beispiel zeigt:
<Button>
  <i:Interaction.Behaviors>
    <behaviors:DialogButtonBehavior ButtonType="Ok" />
  </i:Interaction.Behaviors>
</Button>

Über die Eigenschaft ButtonType kann das entsprechende Verhalten definiert werden.

Das Focus Behavior

Die Klasse FocusBehavior markiert das fokussierte Eingabeelement mit einer beliebigen Hintergrundfarbe.
<TextBox>
  <i:Interaction.Behaviors>
    <behaviors:FocusBehavior HighlightBrush="Yellow" />
  </i:Interaction.Behaviors>
</TextBox>

FocusBehavior
So, das war’s erstmal mit den Behaviors von TT.UIA. Im nächsten Post gehe ich auf die Behavior Factories ein, mit denen einige Limitationen der Behaviors behoben werden können.

TT.UIA: Generic Adorner

19.05.2011 17:58:00 | Jörg Neumann

Wie hier bereits beschrieben, bringt TT.UIA eine Reihe fertiger Adorner mit. Unter ihnen ist auch der Generic Adorner, mit dem beliebige Elemente als Adorner definiert und mit anderen Elementen verknüpft werden können.
Die Klasse GenericAdorner dient als Platzhalter für beliebigen Content, der frei positioniert werden kann. Die Zuweisung erfolgt hingegen über die Klasse GenericAdorners, welche entsprechende Attached Properties für die Konfiguration bereitstellt.
Das folgende Beispiel demonstriert die Verwendung:
<Window ...>
  <Window.Resources>
    <ToolBar x:Key="adornerToolbar">
      <Button ToolTip="Cut" Command="Cut">
        <Image Source="/Images/Cut.png" Stretch="None" />
      </Button>
      <Button ToolTip="Copy" Command="Copy">
        <Image Source="/Images/Copy.png" Stretch="None" />
      </Button>
      <Button ToolTip="Paste" Command="Paste">
        <Image Source="/Images/Paste.png" Stretch="None" />
      </Button>
    </ToolBar>
  </Window.Resources>

  <TextBox
    am:GenericAdorners.AdornerElement="{StaticResource adornerToolbar}"
    am:GenericAdorners.VerticalAlignment="Top"
    am:GenericAdorners.HorizontalAlignment="Right"
    am:GenericAdorners.Placement="VerticalOuterHorizontalInner"
    am:GenericAdorners.Margin="0,0,0,0"
    am:GenericAdorners.Visible="True"
    am:GenericAdorners.VisibleOnFocus="True" />

</Window>

Hier wurde zunächst eine Toolbar im Resource Dictionary des Fensters definiert, welche als Adorner einer Textbox zugewiesen werden soll. Die Zuweisung erfolgt über die Attached Property GenericAdorners.AdornerElement. Für die Positionierung stehen die Properties HorizontalAlignment, VerticalAlignment und Placement zu Verfügung. Placement gibt hierbei an, ob sich die Position auf den inneren oder äußeren Rahmen des jeweiligen Controls beziehen soll. Die folgende Abbildung zeigt die möglichen Kombinationen:
GenericAdornerPlacement
Über die Eigenschaft VisibleOnFocus kann zusätzlich festgelegt werden, ob der Adorner dynamisch eingeblendet werden soll, wenn das zugehörige Element den Fokus erhält.
In den Beispielen zu TT.UIA ist eine kleine Demo enthalten, die den Einsatz von GenericAdorner zeigt.
GenericAdornerDemo
Das war’s erstmal mit den Adornern. Im nächsten Post geht es um die Behaviors in TT.UIA.

SEO-Konferenz: SEMSEO + PubCon 2011: 25 Prozent Rabatt fuer alle MSDN Online-Nutzer

19.05.2011 09:26:08 | Kay Giza

Am 27. Mai 2011 findet bereits zum fünften Mal die Fachkonferenz für Suchmaschinenoptimierung und Suchmaschinenmarketing in Hannover statt. Informieren Sie sich über aktuelle Trends, Strategien und Optimierungsmaßnahmen im Umgang mit den Suchmaschinen. Bing ermöglicht allen MSDN Online-Nutzern eine exklusive Ermäßigung von 25% auf den Eintritt… [... mehr Informationen in diesem Blogeintrag auf Giza-Blog.de]

This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
Visit:  Giza-Blog.de Facebook-Page | Follow Kay Giza on Twitter
Daily News on MSDN:  MSDN Aktuell
© Copyright 2006-2011 Kay Giza. All rights reserved. Legal
Subscribe

TT.UIA: Data Annotation Support

18.05.2011 13:14:00 | Jörg Neumann

Wie ich hier bereits beschrieben habe, können die Adorner von TT.UIA sehr leicht per Style zugewiesen werden. Doch neben dieser existiert noch eine weitere Möglichkeit die Zuweisung zu automatisieren.
TT.UIA bietet mit Annotations.AttachDataAnnotations eine Attached Property, die auf Root-Ebene zugewiesen wird. Wird sie auf true gesetzt, werden alle Elemente des Fensters oder des User Controls durchlaufen und dessen Datenbindungen analysiert. TT.UIA prüft hierbei, ob die Datenquelle der jeweiligen Bindung über Data Annotations verfügt. Ist dem so, werden für bestimmte Annotations entsprechenden Adorner gesetzt. Hier ein einfaches Beispiel für eine annotierte Datenquelle:
using System.ComponentModel.DataAnnotations;
public class Person
{
  [Required]
  [Display(Prompt = "Enter the full name!")]
  public string Name { get; set; }
}

Hier wurde die Eigenschaft Name als Pflichtfeld markiert und ein entsprechender Prompt-Text hinterlegt.
Das Markup des Fensters könnte nun zum Beispiel wie folgt aussehen:
<Window uia:ApplyDataAnnotations="True">
  <TextBox Text="{Binding Person.Name}" />
</Window>

Das Ergebnis sähe hierbei wie folgt aus:
ApplyDataAnnotations
Für das Required-Attribut wurde der Required-Adorner und für den Prompt-Text der CueBanner-Adorner zugewiesen.
Darüber hinaus werden die folgenden Data Annotations von TT.UIA unterstützt:
  • EditableAttribute.AllowEdit
    Setzt die IsEnabled-Eigenschaft des zugehörigen Elements.
  • RequiredAttribute
    Verknüpft das zugehörige Element mit dem Required Adorner.
  • StringLengthAttribute.MaximumLength
    Setzt die MaxLength-Eigenschaft des zugehörigen Eingabesteuerelements (TextBox, ComboBox oder DatePicker).
  • DisplayFormatAttribute.DataFormatString
    Das Format wird dem Binding-Objekt des zugehörigen Elements zugewiesen.
  • DisplayFormatAttribute.NullDisplayText
    Verknüpft das zugehörige Element mit dem CueBanner Adorner.
Darüber hinaus bietet die Annotations-Klasse mit der Attached Property DescriptionDisplayControl die Möglichkeit, Beschreibungstexte die über DisplayAttribute.Description zugewiesen wurden, in einem beliebigen Control anzuzeigen. Beispiel:
Datenquelle:
using System.ComponentModel.DataAnnotations;
public class Person
{
  [Display(Description="The name of the person.")]
  [Required]
  [Display(Prompt = "Enter the full name!")]
  public string Name { get; set; }
}

Markup:
<Window uia:ApplyDataAnnotations="True"
  uia:Annotations.DescriptionDisplayControl="{Binding ElementName=descriptionLabel}"
  uia:Annotations.DescriptionDefaultText="Ready.">
  …
</Window>

Ergebnis:
DescriptionDisplayControl
Die Anzeige erfolgt hierbei beim Erhalt des Fokus. Welchen Text das Statuselement anzeigen soll, wenn kein gebundenes Element den Fokus hat, kann über die Eigenschaft Annotations.DescriptionDefaultText festgelegt werden.
Im nächsten Post geht es um den Generic Adorner, mit dem beliebige UI-Elemente als Adorner an andere Element “angehängt“ werden können.

TT.UIA: Adorner

17.05.2011 09:01:00 | Jörg Neumann

Nachdem ich im letzten Post die Funktionsweise von TT.UIA vorgestellt habe, soll es nun um die einzelnen Adorner und ihre Anwendung gehen. Doch bevor es losgeht, erkläre ich - zum besseren Verständig - das Prinzip der WPF Adorner noch einmal in ein paar Worten.

WPF Adorner

Bei Adornern handelt es sich um grafische Erweiterungen, die zur Laufzeit mit beliebigen Elementen des visuellen Baums verbunden werden können. Hierbei zeichnet der Adorner über die Oberfläche des zugehörigen Controls, bzw. erweitert dieses um zusätzliche Elemente. Adorner sind Teil von WPF und wurden ursprünglich für die Abbildung von Drag & Drop-Funktionalität entwickelt. Sie eignen sich jedoch auch gut für punktuelle Erweiterungen. So werden sie beispielsweise auch bei der Validierungsfunktionalität von WPF verwendet.

TT.UIA-Adorner

Für die Zuweisung von Adornern bietet TT.UIA die zentrale Klasse Annotations. Sie bietet eine Reihe von Attached Properties, die zur Erstellung von Konfiguration dienen. Beispiel:
<TextBox 
  uia:Annotations.ShowElementTracker="True"
  uia:Annotations.TrackerImageAlignment="Left" />

ElementTracker
Hier wurde der ElementTracker-Adorner zugewiesen und über die Eigenschaft TrackerImageAlignment positioniert.

Adorner per Style zuweisen

Die Zuweisung per Attached Property hat den Vorteil, dass kein zusätzlicher Code erforderlich ist und sich die Adorner auch per Style zuweisen lassen. Beispiel:
<Style TargetType="{x:Type TextBox}">
  <Setter Property="uia:Annotations.ShowElementTracker"
          Value="True" />
  <Setter Property="uia:Annotations.TrackerImageAlignment"
          Value="Left" />
</Style>

Hier wurde ein impliziter Style definiert, der automatisch allen Textboxen den ElementTracker-Adorner zuweist.

Die Adorner-Sammlung von TT.UIA

TT.UIA bietet eine Reihe vorgefertigter Adorner. Hier eine kurze Auflistung der entsprechenden Attached Properties mit Beschreibung:
  • HighlightOnFocus markiert das fokussierte Element mit einem weichen Rahmen.
    HighlightOnFocus
  • IsRequired markiert ein Pflichtfeld, welches über RequiredImageAlignment positioniert werden kann.
    Required
  • ShowEditTracker markiert Felder, dessen Wert vom Benutzer geändert wurden. Die Position kann über TrackerImageAlignment festgelegt werden.
    EditTracker
  • ShowElementTracker zeigt ein Symbol vor oder hinter dem aktuell fokussierten Element an. Die Position kann über TrackerImageAlignment festgelegt werden.
    ElementTracker
  • AttachErrorTemplate verknüpft das Control mit einem Error Template, das im Fehlerfall angezeigt wird.
    ErrorTemplate
  • AttachEditContextMenu verknüpft ein Eingabesteuerelement mit einem erweiterten Editor-Context-Menü.
    EditContextMenu
  • AttachEditorToolbar verknüpft ein Eingabesteuerelement mit einer Editor-Toolbar.
    EditorToolbar
  • CueBanner weist dem zugewiesenen Control ein Wasserzeichentext zu.
    CueBanner
  • AttachSmartTag weist dem zugewiesenen Control einen Smart Tag zu. Dessen Menü muss hierbei über die Eigenschaft SmartTagMenu zugewiesen werden.
    SmartTag
Eine detaillierte Beschreibung aller Adorner findet ihr in der Dokumentation von TT.UIA, die Implementierungsdetails werde ich in Kürze in der dotnetpro veröffentlichen.
Im nächsten Post geht es um die Möglichkeit Adorner automatisch per Data Annotations zuzuweisen.

Visual Studio vNext : Application Lifecycle Management

16.05.2011 22:54:00 | Christian Binder

Endlich ist es soweit. Das erste Preview für die nächste Visual Studio Generation wurde heute auf der TechEd US von Jason Zanders  vorgestellt :-) Wer die Keynote verpasst hat, kann hier die ersten Neuerungen nachlesen.

image

Meine persönlichen Tops:

  • PowerPoint StoryBoard Assistant
  • C++ Unit Testing (endllich)  auch NUnit, Xunit Support
  • Team Navigator: Context Switching with My Work (sehr cool)
  • Intellitrace für Produktionssysteme
  • CodeReview Support
  • Code Clone (findet gleiche Codeblöcke, top um Copy Paste Coding zu finden und mal Aufzuräumen :-))
  • Agile Tools, wie Stakeholder Feedback und die neuen Dashboards

Brian Keller hat hierzu einen Speakflow aufgenommen, der einige Videos zu den verschiedenen Bereichen enhält:

image

Viel Spass

Jetzt anmelden: MSDN Live-Webcasts zum Anfassen - Die Windows Azure-Plattform

16.05.2011 17:39:48 | Peter Kirchner

Im Rahmen dieser neuen MSDN Live Webcast Serie bekommen Sie einen Testzugang zur Windows Azure-Plattform und können einzelne Anwendungen in Ihre eigene Windows Azure Test-Instanz bringen. Unsere Experten stellen dafür Cloud-Anwendungen bereit, diskutieren deren Architektur und stehen Ihnen natürlich auch für Fragen zur Verfügung. Abgerundet wird das Programm durch die Vorstellung der Neuigkeiten und der besten Web-Ressourcen zum Thema Windows Azure.

  • 19.05.2011 16:00 Uhr  - Cloud-Datenbanken und Storage in eigenen Anwendungen nutzen
  • 26.05.2011 16:00 Uhr  - .NET, PHP und Java Web-Anwendungen in die Cloud bringen
  • 09.06.2011 15:30 Uhr  - Mobile-Web Apps auf Windows Azure betreiben
  • 28.06.2011 15:30 Uhr  - In-house und Cloud-Systeme integrieren

Melden Sie sich jetzt an

TT.UIA: Einführung

16.05.2011 14:36:00 | Jörg Neumann

Die Idee hinter thinktecture UIAnnotations (TT.UIA) ist es, UI-Interaktionslogik zu kapseln und diese deklarativ an vorhandene Steuerelemente “anzuhängen”. Der Vorteil liegt hierbei in der flexiblen Anwendbarkeit. Wenn man zum Beispiel eine Textbox mit einem Wasserzeichentext (CueBanner) ausstatten will, gibt es mehrere Möglichkeiten.
  • Templating: Man erstellt ein Custom Template für die Textbox. Dies ist kein leichtes Unterfangen und ohne Code nur sehr schwer zu realisieren. Zudem muss das Template explizit oder implizit zugewiesen werden.
  • Vererbung: Hierbei wird eine Ableitung von Textbox erstellt und mit einem Custom Template verknüpft. Bei diesem Ansatz ist alles zwar schön gekapselt, jedoch funktioniert dies nur für Textboxen – Comboboxen, DatePicker und co. sind hiervon natürlich nicht betroffen. Daher müsste man den Vorgang für diese Controls wiederholen. Und wenn dann noch weitere Features implementiert werden sollen, ist man schnell dabei für die komplette Toolbox Ableitungen zu erstellen.
Noch schwieriger wird es, wenn die Erweiterungen nicht nur das Control selbst betreffen. Wenn zum Beispiel neben allen Input Controls, die an Pflichtfelder gebunden sind, ein entsprechendes Symbol erscheinen soll, müssten für alle Control-Typen Custom- oder User Controls erstellt werden.
Aus diesen (und vielen weiteren) Gründe liegt es nahe, die entsprechende Funktionalität mehr oder weniger Control-neutral abzubilden und diese dann im jeweiligen Fall an das gewünschte Control “anzuhängen”. Beispiel:
<TextBox uia:CueBanner="Enter your name!" />
CueBanner
In diesem Beispiel wird von TT.UIA ein WPF Adorner erzeugt, der direkt auf die Oberfläche des entsprechenden Controls zeichnet. Dies hat den Vorteil, dass keine Ableitung des Controls erforderlich ist. Zudem kann der Adorner auch außerhalb des Controls zeichnen, was eine leichte Kennzeichnung von Felder (Pflichtfeld, …) ermöglicht.
Für das “Anhängen” von UI-Funktionalität bietet TT.UIA zwei verschiedene Ansätze: Attached Properties und Expression Blend Behaviors. Beide Varianten haben Ihre Vor- und Nachteile.
  • Attached Properties bestechen durch ihre Einfachheit. Wie im oberen Beispiel dargestellt, können Sie sehr leicht an ein beliebiges Control angehängt werden. Doch der eigentliche Vorteil – gegenüber Behaviors – ist, dass sie auch per Style zugewiesen werden können.
  • Expression Blend Behaviors sind vor allem für Designer bzw. alle die vornehmlich in Expression Blend entwickeln interessant. Denn Blend bietet eine sehr gute Designer-Unterstützung für Behaviors. XAML-lastige Entwickler mögen sie wegen ihrer ausladenden Syntax hingegen eher weniger. Der wirkliche Vorteil gegenüber Attached Properties ist jedoch, dass man sie mit Events verknüpfen kann.
Hier ein Beispiel für die Deklaration eines TT.UIA-Behavior.
<TextBox>
  <i:Interaction.Behaviors>
    <behaviors:FocusBehavior HighlightBrush="Yellow" />
  </i:Interaction.Behaviors>
</TextBox>

FocusBehavior
Hier wird das FocusBehavior verwendet, welches das fokussierte Control in einer beliebigen Farbe einfärbt.
Im nächsten Post stelle ich die einzelnen Adorner und Behaviors von TT.UIA im Detail vor.

Rückblick auf das mobilecamp Dresden

14.05.2011 17:06:00 | Martin Hey

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 das mobilecamp Dresden

14.05.2011 17:06:00 | Martin Hey

Es ist zwar noch nicht vorbei, aber ich werde den Rest des Tages und auch morgen leider nicht mehr am mobilecamp Dresden teilnehmen 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

14.05.2011 16:13:00 | Martin Hey

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.

Rückblick auf die Dotnet Cologne 2011

14.05.2011 16:13:00 | Martin Hey

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.

MSDN Solve: CodeClips ab sofort zum Download

10.05.2011 15:02:03 | Kay Giza

MSDN Solve - ab sofort haben wir die Möglichkeit geschaffen, mit einem einfachen Klick sich die über 500 Videos bzw. CodeClips herunterzuladen. Der Download ist natürlich kostenfrei und ohne Registrierung oder Ähnlichem möglich. Wie es genau funktioniert verrät dieser Blog-Post auf Giza-Blog.de... [... mehr]

This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
Visit:  Giza-Blog.de Facebook-Page | Follow Kay Giza on Twitter
Daily News on MSDN:  MSDN Aktuell
© Copyright 2006-2011 Kay Giza. All rights reserved. Legal
Subscribe

Stimmen zur dotnet Cologne 2011

10.05.2011 11:07:00 | Stefan Lange

Am 06.05.2011 fand im KOMED im MediaPark in Köln die dritte dotnet Cologne statt.

An dieser Stelle möchte ich zunächst noch einmal allen Sponsoren und Sprechern ganz herzlich danken – ohne Euch wäre die Veranstaltung nicht möglich gewesen!

Wie im letzten Jahr hier eine Liste mit Links und Zitaten im Überblick:

Roland Weigelt: Das war die dotnet Cologne 2011

Thomas Mentzel: dotnet Cologne 2011 Tagebuch

Kay Giza: dotnet Cologne 2011: Rueckblick und Folien meiner Session: MSDN unplugged

Ilker Cetinkaya: DotNet Cologne 2011

Oliver Ibelsäuser: Live-Berichterstattung von der Dotnet Cologne 2011 – Teil 1, Teil 2 und Teil 3

Björn Meyer: dotnet Cologne 2011 - Some impressions und dotnet Cologne 2011 wrap-up video - TX Text Control

Thomas Schissler: Vortragsfolien zu meinen Vorträgen auf der dotnet Cologne 2011

Peter Nowak: Dotnet Cologne 2011

Christina Hirth: dotnet-cologne: veni-vidi-vici!

Martin Hey: Rückblick auf die Dotnet Cologne 2011

Gordon Breuer: Respecto Colonius!

Monika Lischke: dotnet Cologne

 

Rainer Stropek schreibt in einer Mail:

… Sowohl als Speaker als auch als Sponsor war die Veranstaltung ein voller Erfolg. Ich konnte außergewöhnlich gute Gespräche unser Produkt betreffend führen, die sich bereits heute (einen Arbeitstag nach der Veranstaltung) in konkreten Anmeldezahlen zu time cockpit niederschlagen. Als Sprecher muss ich sagen, dass die Teilnehmer der dotnet Cologne sich durch überdurchschnittliches Wissen und Engagement auszeichnen – es macht einfach sehr großen Spaß, dabei zu sein!

 

Einfacher Einstieg in Visual Studio Test Professional 2010 mit Videos und virtuellen Labs ganz ohne Download

10.05.2011 10:17:05 | Christian Binder

Um sich mit Visual Studio Test Professional 2010 vertraut zu machen, gibt es nun neue “How Do I” Videos und eine VM mit Labs. Auf diese Weise kann man sehr schnell und einfach seine spezifischen Szenarien validieren. Wirklich gut ist, dass man die Hands-On-Labs live in einer online VM machen kann. Es ist also kein Download einer VM notwendig. Und so geht es:

http://www.microsoft.com/visualstudio/en-us/try/test-professional-2010-tour/dive-deeper

image

Lab wählen:

image

Lab starten:

image

kurz warten:

image

Und los geht’s, alles Remote und im Browser:

image

Chris

Just Released: thinktecture UIAnnotations

09.05.2011 20:32:00 | Jörg Neumann

Nach mehr als einem Jahr bin ich nun endlich mit meinem UIAnnotations-Projekt fertig!
thinktecture UIAnnotations
With thinktecture UIAnnotations you can extend your UI with additional functionality via Adorners and Behaviors. All parts are assignable via markup, which is helpful in MVVM scenarios and promotes the developer/designer interaction.
With thinktecture UIAnnotations you can declarative attach visual Adorners and Expression Blend Behaviors to your user interfaces, including smart tags, editor toolbars and visual state markers for required fields, edit states and more. It also can automatically attach adorners to elements while reflecting the Data Annotations of the associated data sources. For a better MVVM support it offers a generic command behavior that is assignable to every event of a given element. thinktecture UIAnnotations is available for WPF and Silverlight (comming soon).
thinktecture UIAnnotations in brief:
  • 10+ useful adorners and 5+ Expression Blend Behaviors.
  • automatic assignment of adorners via Data Annotations.
  • a custom adorner model for silverlight (comming soon).
  • GenericAdorner allows to attach every element as an adorner.
  • AdornerBehaviorFactory that can be used to wrap every adorner as an Expression Blend Behavior.
  • BehaviorFactory allows the assignment of Expression Blend Behaviors via styles.
  • with Command Behavior you can map every control event to a command.
Und da ein Bild mehr sagt als tausend Worte:
Showcase
Die Details folgen in späteren Posts. Stay tuned!

Team Foundation Server – Microsoft is Hiring

09.05.2011 16:02:14 | Christian Binder

Microsoft Deutschland sucht aktuell für das Themengebiet Testing/TFS Leute mit Erfahrung, die Lust darauf haben in unserem Premier Services Delivery Team mitzuarbeiten.

Premier Services for Developers bei Microsoft berät und unterstützt Kunden professionell rund um alle Development Fragestellungen. Ziel ist es dabei  die Kunden-Softwarenentwicklung dabei zu unterstützen effizient, und mit hoher Qualität auf der Microsoft Plattform zu entwickeln. Das Thema Testing spielt dabei eine zentrale Rolle und der TFS als zughörige Plattform nimmt einen immer wichtigeren Stellenwert bei unseren Kunden ein, daher suchen wir  Unterstützung in diesem Umfeld.

Hier findet ihr die konkrete Stellenausschreibung: https://careers.microsoft.com/JobDetails.aspx?ss=&pg=1&so=&rw=6&jid=30956&jlang=EN

dotnet Cologne 2011: Rueckblick und Folien meiner Session: MSDN unplugged

09.05.2011 11:11:05 | Kay Giza

Ich hatte am Freitag vergangener Woche die Gelegenheit, auf der Community-Konferenz dotnet Cologne 2011 zu sprechen – herzlichen Dank für die Möglichkeit an die Organisatoren. Das große Interesse und der tollen Dialog während meines Vortrags hat mich sehr positiv überrascht. Vielen Dank an die Besucher meiner Session. Ich möchte gerne zwei Fragen aufgreifen, die während des Vortrages aufkamen, eventuell haben Sie sich diese auch schon einmal gestellt... [...mehr Informationen und Download der Vortragsfolien auf Giza-Blog.de]

This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
Visit:  Giza-Blog.de Facebook-Page | Follow Kay Giza on Twitter
Daily News on MSDN:  MSDN Aktuell
© Copyright 2006-2011 Kay Giza. All rights reserved. Legal
Subscribe

Premiere des TechTalk Online - vielen Dank!

06.05.2011 11:24:43 | Peter Kirchner

205x160_TechTalkOnline_DEIn den letzten drei Wochen lief zum ersten Mal der TechTalk als Online-Ausgabe. Das Format wurde glücklicherweise gut angenommen und wir hatten interessante Gespräche im Live Chat – zumindest an den ersten beiden Terminen. ;-)

Der TechTalk Online fand am 19. April, am 28. April und am 5. Mai statt.
Wir danken allen Teilnehmern für das Interesse und die Diskussionen im Live Chat!

Die Vorträge werden in der zweiten Maihälfte zum freien Download veröffentlicht. Informationen dazu werden Sie auf der TechTalk Online-Seite finden. Registrierte Teilnehmer werden zusätzlich per E-Mail benachrichtigt.

Sie können weiterhin über die Agenda-Seite die Präsentationen und die Aufzeichnungen der Live-Chats herunterladen. Registrierte Teilnehmer können noch bis zum 15. Mai auf ihre virtuelle Konferenztasche zugreifen.

Was Sie in der virtuellen Konferenztasche finden:

  • Ein Azure Pass für satte 90 Tage! Normalerweise ist der Azure Pass auf 30 Tage begrenzt.
  • Buchdownload für "Windows 7 für Entwickler – Crashkurs"
  • Buchdownload für "Microsoft SQL Server 2008 - Überblick über Konfiguration, Administration, Programmierung"

iPhone-Cover mit selbst gedruckten Motiven

02.05.2011 01:03:00 | Daniel Springwald

iPhone-Cover mit Motiv sind teuer - und wer will sich schon auf nur ein Motiv festlegen? ;o)

Eine Lösung kann ein selbst gemachtes Wechselmotiv sein:

Zunächst braucht man ein transparentes iPhone-Cover:

Jetzt die gewünschten Motive in passender Größe ausdrucken:

...und für das Cover in Form schneiden:

Schon ist das Wechselcover fertig - für wenige Cent pro Motivwechsel.

Mein erster Kontakt mit NDepend

01.05.2011 18:03:57 | Klaus Bock

NDepend

Kurz vor Ostern erhielt ich von Patrick Smacchia, dem verantwortlichen Entwickler hinter NDepend, eine Anfrage, ob ich Interesse hätte mir NDepend einmal anzusehen. Die eingeholten Vorabinformationen aus der deutschen .NET-Gemeinde waren durchweg positiv und erzeugten eine gewisse Neugier. Warum also nicht eine eigene Meinung bilden?

Ich bekundete mein Interesse beim NDepend-Team und erhielt kurz darauf eine Lizenz. Der Download fällt mit 9,4 MB eher klein aus. Eine echte Installation wird nicht benötigt. Es müssen lediglich die Daten aus dem ZIP-Archiv in ein privates Verzeichnis entpackt werden. Das entpacken der Daten in den Programmeordner sollte wegen möglicher Probleme mit der Benutzerkontensteuerung (UAC) unterbleiben. Nach dem Entpacken muss, für die Integration von NDepend in Visual Studio, einmal die Anwendung NDepend.Install.VisualStudioAddin.exe ausgeführt werden. In einem Auswahldialog wird nach der verwendeten Visual Studio Version gefragt. Es kann zwischen voller Integration und einer, Light Integration genannten, teilweisen Integration gewählt werden. Die von NDepend verwendeten Shortcuts können auf Wunsch deaktiviert werden, falls Kollisionen mit bereits verwendeten Tastenkürzeln zu befürchten sind. Ab jetzt steht NDepend zur Codeanalyse in Visual Studio zur Verfügung.

Um NDepend mit einem Visual Studio Projekt zu verwenden, kann entweder eine neues NDepend-Projekt erzeugt und mit dem aktuellen Visual Studio-Projekt verknüpft, oder das aktuelle Visual Studio-Projekt mit einem bestehenden NDepend-Projekt verknüpft werden.
Auf der Seite der Einstellungen des NDepend-Projekts, ist der wichtigste Punkt die richtige Auswahl der zu verwendenden Framework-Version.

NDepend Einstellungen

Mit dieser Einstellung wir festgelegt, aus welchen Ordnern NDepend die referenzierten Assemblies des Framework lädt. Die weiteren Einstellungen, etwa zur Analyse und zum Aussehen des erzeugten Reports, sind selbsterklärend.

NDepend Kontextmenü

Nach der ersten Analyse des aktuellen Projekts, steht in der linken unteren Ecke in Visual Studio ein kleiner farbiger Kreis zur Verfügung, der den aktuellen Status der Analyse des Projekts anzeigt. Es werden die Ampelfarben Rot, Gelb und Grün, sowie Grau und Blau mit folgender Bedeutung verwendet:

Rot
- Eine oder mehrere der als kritisch eingestuften Regeln wurde verletzt
- Eine oder mehrere der aktivierten Regeln kompiliert nicht
- Eine oder mehrere der aktuellen Abfragen ist fehlerhaft.

Gelb
Eine oder mehrere der aktivierten Regeln wurde verletzt.

Grün
Es wurde keine der aktivierten Regeln verletzt.

Grau besagt, dass kein NDepend-Projekt zur Verfügung steht.

Blau wird angezeigt, während eine Analyse ausgeführt wird.

Beim Überfahren des Symbols mit der Maus wird ein Menü sichtbar. In diesem Menü können, unter anderem, die Einstellungen zur Ausführung der Analyse sowie zur Aktualisierung der Analyse in Visual Studio fein eingestellt werden.
Es kann auch eine Analyse des aktuellen Projekts direkt angestoßen werden.
Im oberen Bereich wird der aktuelle Status des Projekts in einer Zusammenfassung gezeigt.

Den Kern der Analyse bildet die in NDepend integrierte Code Query Language (CQL). Dies Abfragesprache erinnert stark an SQL und ist auch sehr ähnlich zu verwenden. Zum Bearbeiten bestehender Abfragen oder um neue Regeln zum aktuellen Projekt hinzuzufügen, steht ein integrierter Editor zur Verfügung. Mit diesem Konzept und dem integrierten Editor ist es sehr einfach, bestehende Regeln den aktuellen Anforderungen anzupassen oder neue Regeln zu erstellen.

Eine der Regeln besagt:
Felder welche auf die Bezeichnung Uri enden, sollten vom Typ System.Uri sein.
Es kann aber wie in folgendem Beispiel vorkommen, dass der Namensteil Uri verwendet wird aber dennoch der Typ Uri nicht verwendet werden kann. Zum Beispiel ein Feld vom Typ ConfigurationProperty mit dem Namen serviceUri würde diese Regel verletzen. Mit dem integrierten CQL-Editor wird einfach als optionales Kriterium
nicht vom Typ ConfigurationProperty
zur Abfrage hinzugefügt.

System.Uri-Regel

Die jeweiligen Änderungen oder Anpassungen des Regelwerks sind allerdings nur für das aktuelle Projekt gültig. Ich habe noch keinen Weg gefunden, um allgemeingültige Änderungen des Regelwerks vorzunehmen.

NDepend analysiert nicht den Quellcode, sondern den erzeugten IL-Code in den kompilierten Assemblies. Um die jeweiligen Stellen im Quellcode zeigen zu können, werden Debug-Assemblies mit der zugehörigen PDB-Datei benötigt. Eine Analyse von Assemblies mit Release-Status ist nicht vorgesehen.

Soweit zur Arbeits- und Funktionsweiße.
Als erstes Projekt zur Analyse mit NDepend habe ich mir eine kleine Anwendung ausgesucht, die als Modul in ASP.NET Anwendungen zum Einsatz kommt. Die Anwendung hat kein UI, wird ausschließlich über die web.config konfiguriert und von einem Http-Modul gestartet.
Der erste Report brachte eine Fülle von Informationen und jede Menge Warnungen zu Tage. Die für mich interessanteste Warnung betraf die Sichtbarkeit des verwendeten Http-Moduls, der enthaltenen Http-Handler und der Klasse der Einstellungen die von ConfigurationSection  abgeleitet ist. NDepend empfahl diese Klassen als internal zu deklarieren.
Und wie soll dann bitte die Webanwendung auf diese Typen zugreifen? Egal; das wollte ich wissen. Ich deklarierte also die betreffenden Klassen als internal, kompilierte das Projekt im Release-Status neu und startete eine Webanwendung in der ich das Modul verwendete. Zu meiner großen Überraschung funktionierte alles wie gewohnt. Mit dem positiven Nebeneffekt, dass ich keine öffentliche API mehr zur Verfügung stellte die auch so nie vorgesehen war. OK. Wieder etwas dazugelernt.

NDepend ist auch das erste, mir bekannte, Analyse-Tool welches auf die Unveränderbarkeit von Strukturen (immutable struct) achtet. Hier wird geprüft, ob auch wirklich alle Felder der Struktur als readonly deklariert sind. Dadurch wurde ich angehalten, mich mit der Implementierung von entsprechenden Replace-Methoden in solche unveränderliche Strukturen zu befassen.
Aber das ist ein anderes Thema.

Im Allgemeinen sind die Standard-Regeln bereits sehr restriktiv ausgelegt. Wenn sie befolgt und nicht umgangen werden, resultiert aus der konsequenten Anwendung ein deutlich wartbarerer Code.

NDepend kann natürlich noch deutlich mehr als ich hier in ein paar wenigen Zeilen schreiben kann. Ich werde nach und nach, wenn ich NDepend etwas besser kenne, auf die einzelnen Feature eingehen.

Fazit:

NDepend erscheint mir als ein hilfreiches Werkzeug, sehr gut geeignet zur täglichen Verwendung. Die Entwickler hinter NDepend leisten sehr gute Unterstützung bei eventuellen Problemen und helfen schnell und unkompliziert.
Bei meinen Recherchen vor der Verwendung von NDepend, sagte mit einer der Gefragten eine steile Lernkurve mit NDepend voraus. Dem kann ich mich nur anschließen.

Technorati-Tags: | | |

Regeln | Impressum