.
Anmeldung | Registrieren | Hilfe

.NET-Blogs Archiv Juli 2010

Silverlight Tipp der Woche: XML Namespace Definition

31.07.2010 19:06:00 | Stefan Lange

In diesem Tipp geht es um die Verwendung des XmlnsDefinition Attributs.

Zusammenfassung

Um eigene Controls in XAML Dateien verwenden zu können, kann man eine Namespace-Definition der Form xmlns:xyz="clr-namespace:MyNamespace;assembly=MyAssembly" verwenden. Es ist jedoch einfacher eigene Controls mit Hilfe des XmlnsDefinition Attributs zu verwalten.

Beschreibung

Controls, die nicht aus dem Default Namespace http://schemas.microsoft.com/winfx/2006/xaml/presentation stammen, benötigen eine XML Namespace-Definition, um in XAML Code verwendet werden zu können. Eine solche Definition bildet einen .NET CLR Namespace auf einen XML Namespace Präfix ab. In Silverlight 2 musste man dafür im Root-Element der XAML Datei ein Attribut mit folgendem Aufbau angeben:

<UserControl xmlns:xyz="clr-namespace:MyNamespace" ...>
- oder -
<UserControl xmlns:xyz="clr-namespace:MyNamespace;assembly=MyAssembly" ...>

Über den Präfix xyz kann man dann Controls aus dem angegebenen CLR Namespace und der entsprechenden Assembly verwenden. Wächst nun ein Projekt im Laufe der Entwicklung immer weiter an, verteilen sich die selbst geschriebenen Custom- und insbesondere User-Controls meist auf mehrere Namespaces und Assemblies. Dies führt zum einen zu vielen verschiedenen Namespace-Definitionen pro XAML Datei in der sie verwendet werden und zum anderen wird auch das Refactoring immer mühsamer.

Seit Silverlight 3 gibt es nun das aus WPF bekannte Attribut XmlnsDefinition, welches auf Assembly-Ebene das Mapping von XML Namespaces auf CLR Namespaces regelt.

[assembly: XmlnsDefinition("http://mycompany.com/xaml", "MyNamespace.Controls")]
[assembly: XmlnsDefinition("http://mycompany.com/xaml", "MyNamespace.Controls.Xyz")]

Dieses Attribut kann mehrfach vorkommen und steht typischerweise in der Datei AssemblyInfo.cs. Es stellt sicher, dass alle Controls aus allen aufgeführten Namespaces in einer XAML Datei über ein und dieselbe Url angesprochen werden können. Auch wenn die Controls aus verschiedenen Assemblies stammen, die jeweils ihre eigenen XmlnsDefinition Attribute haben, reicht jetzt eine einzige Namespace-Definition:

<UserControl xmlns:abc="http://mycompany.com/xaml" ...>
<abc:MyControl ...>

Die Url selbst kann beliebig gewählt werden und hat keine weitere Bedeutung, außer dass sie eindeutig sein muss.

Über das Attribut XmlnsPrefix kann man optional noch festlegen, welches der Default Namespace-Prefix sein soll, den ein XAML Designer-Tool automatisch vergibt, wenn das erste Control per Drag & Drop zu einem User Control hinzugefügt wird.

[assembly: XmlnsPrefix("http://mycompany.com/xaml", "abc")]

Microsoft verwendet beispielsweise in Silverlight 4 den Präfix toolkit für Controls aus dem Silverilght Toolkit.

Ausnahmen

Theoretisch könnte man so vollständig auf die Schreibweise mit clr-namespace verzichten, gäbe es nicht eine Ausnahme. Wenn man in einer XAML Datei ein Control verwenden möchte, welches aus der selben Assembly stammt wie die XAML Datei, muss für dieses Control eine clr-namespace basierte Definition verwendet werden. Oder anders ausgedrückt: Die Url basierte Namespace Definition funktioniert nur für Controls, die aus referenzierten Assemblies stammen. Controls aus der eigenen Assembly werden leider nicht gefunden und ein Fehler angezeigt. Meiner Ansicht nach ist das ein Bug im XAML Parser, da ich keinen Grund sehe, warum dies "by Design" so sein sollte.

Hier geht's zum nächsten Tipp.

Silverlight Tipp der Woche

31.07.2010 19:05:00 | Stefan Lange

In mehr als zwei Jahren Einsatz von Silverlight in ganz unterschiedlichen Projekten habe ich jede Menge Erfahrungen gesammelt und hatte viele große und kleine Probleme zu lösen. Wenn ich davon erzähle, höre ich oft, dass auch andere einen nicht unerheblichen Teil ihrer Zeit mit dem "Herausfinden von Dingen" verbringen. Daraus ist nun die Idee entstanden, die interessantesten Erfahrungen aufzuschreiben und hier regelmäßig als Silverlight Tipp der Woche zu veröffentlichen.

Der Aufbau der Tipps wird so gestaltet, dass es für den Leser möglichst einfach ist zu entscheiden, ob die jeweilige Information für ihn von Interesse ist oder nicht. Daher gibt es jeweils am Anfang eine nur wenige Sätze lange Zusammenfassung, in der die wesentliche Aussage des Tipps beschrieben wird. Danach kommen dann weitere Erläuterungen, sowie ggf. Hintergrundinformationen und Links.

Hier geht's zum ersten Tipp.

WICHTIGE Vorankuendigung: Ausserplanmaessiges Microsoft Sicherheitsupdate am 02.08.2010

31.07.2010 13:22:36 | Kay Giza

Die Sicherheit seiner Kunden und Partner ist für Microsoft ein vordringliches Anliegen. Um diese beim sicheren Betreiben Ihrer IT-Infrastruktur bzw. ihres Computers optimal zu unterstützen, wird Microsoft voraussichtlich am nächsten Montag, den 2. August 2010, gegen 19:00 Uhr Mitteleuropäische Zeit eine außerplanmäßige Sicherheitsaktualisierung (Out of Band Release to address Microsoft Security Advisory 2286198 welches diese Microsoft-Sicherheitsempfehlung (2286198) betrifft) veröffentlichen. Diese wird, soweit mein Kenntnisstand, alle unterstützten Versionen von Microsoft Windows betreffen. Solche außerplanmäßigen Sicherheitsupdates werden von Microsoft nur aus wichtigen Gründen veröffentlicht und sollten daher umgehend installiert werden. Diese Vorabinformation soll Ihnen helfen, die außerplanmäßigen Sicherheitsaktualisierungen auch in Ihrem Unternehmen bzw. auf Ihrem Privat Computer möglichst rasch zum Einsatz zu bringen... [... mehr Details in diesem ausführlichen Blogeintrag auf Giza-Blog.de]

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

Internal Adaption: TFS 2010 Team Build baut EndtoEnd Visual Studio

30.07.2010 15:13:18 | Christian Binder

Brian Harry hat auf seinem Blog alle Details zu diesem Meilenstein beschrieben, da wir ja auch mit TFS 2010 den Workflow auf WF4 umgestellt haben :-)

Der wichtigste Punkt dabei ist, dass wir das GatedCheck-In Feature in TFS 2010 entsprechend weiterentwickelt haben, so dass nun auch mehrere Checkins gleichzeitig via Gated Checkin eingecheckt werden können. Dies war notwendig, da der Visual Studio EndtoEnd Build halt nicht in 10min erledigt ist und somit das ganze nicht skaliert. Smart ist, dass im Fehlerfall alle Checkins automatisch einzeln behandelt werden und nur der Checkin, der den Fehler erzeugt zurückgewiesen wird. Zudem hat Brian angekündigt, dass diese Features in der nächsten TFS Version enthalten sein werden :-)

Chris

msdn tv–Nachrichten für Entwickler (Ausgabe 12/2010)

29.07.2010 16:57:17 | Jan Schenk

Get Microsoft Silverlight


Hier spricht der Chef: Frank Fischer, langjähriger Manager der deutschen „Technical Developer Evangelists“, kümmert sich künftig bei Microsoft Deutschland ums Thema „Mobile Communications“. Im Gespräch mit msdn tv-Moderator Jan Schenk berichtet er über sein neues Aufgabenfeld und die Herausforderungen, die ihn dort erwarten.
In den Kurznachrichten: Infos zu den Siegern des diesjährigen Imagine Cup-Wettbewerbs und zu einer neuen Anleitung des Patterns & Practices Teams von Microsoft mit dem Titel „Developing Applications for SharePoint 2010“, die in der MSDN Library abrufbar ist. Außerdem: News zur Beta-Version der Windows Phone Developer Tools, zu „Web Matrix“, einem Tool zur Erstellung, Anpassung und Veröffentlichung von Websites, das ebenfalls als Beta bereitsteht, und zu einem neuen Fachbuch von Microsoft Press mit dem Titel „PHP programmieren unter Windows - Webanwendungen mit IIS, SQL Server, Active Directory, Exchange“, in das Sie in der „PressPreview“ hier bei MSDN Online bereits hineinschnuppern können: als PDF- und XPS-Dokument ist dort das Kapitel „Einrichten von Active Directory“ abrufbar.


msdn tv ist ein neues Video-Nachrichtenformat, und hat seinen Ursprung auf MSDN Online (http://www.msdn-online.de/msdntv/). Alle zwei Wochen präsentiert Ihnen Jan Schenk, Developer Evangelist mit Hut, die wichtigsten Neuigkeiten für Entwickler, Hintergrundberichte und Interviews zu aktuellen Technologien sowie Highlights von Messen und Konferenzen. Das ganze kompakt, in ca. 15 Minuten erfrischend jung verpackt , und sowohl als Download für Ihren Rechner oder im Online-Player per Streaming verfügbar.

msdn tv is a German-speaking new and innovative video news series, and has originally been featured exclusively on the German MSDN Online Platform (http://www.msdn-online.de/msdntv/). Hatted Developer Evangelist Jan Schenk biweekly presents latest news for developers, background-stories and interviews concerning current and upcoming technologies, as well as video-highlights from fairs and conferences. Packed into 15 minutes, these news videos feature a fresh informative style, and are downloadable as well as available as online streaming video.

Erstellung einer StartRemoteProcess-Build-Activity

28.07.2010 16:10:00 | Martin Hey

Die neuen Build-Workflows für den Team Foundation Server sind ein cooles Feature. Und wenn man Standard-Projekttypen verwendet funktioniert das auch alles super, da in den meisten Fällen Copy&Paste-Deployment ausreichend ist.
In meinem Anwendungsfall war es notwendig, am Ende des Builds eine Activity auszuführen, die auf einem Remote-Server (z.B. Integrationssystem) einen Prozess startet. Eine solche Activity habe ich im Standard nicht gefunden. Daher hab ich selbst eine geschrieben.
Eine eigene Activity zu erstellen ist gar nicht so schwer. Einen guten Einstieg geben die Posts von Jim Lamb und Ewald Hofman. Bei der Entwicklung der Activity hat sich die Projektaufteilung von Ewald als sehr praktisch erwiesen. Nur so war es mir möglich, die selbst erstellte Activity dem Workflow dann auch hinzuzufügen.
Um einen Prozess zu starten, sind folgende Informationen notwendig:
  • Name oder IP-Adresse des Remote-Servers
  • auszuführendes Command
  • Credentials (abweichend vom TFS-Service-Account)
Daher erhält die Activity in Summe fünf Input-Argumente: Command, RemoteMachine, Domain, UserName und Password. Damit sieht der Rumpf der Actitvity wie folgt aus:
[BuildActivity(HostEnvironmentOption.All)]
public sealed class StartProcessOnRemoteMachine : CodeActivity
{
[RequiredArgument]
public InArgument<string> Command
{
get;
set;
}

[RequiredArgument]
public InArgument<string> RemoteMachine
{
get;
set;
}

[RequiredArgument]
public InArgument<string> Username
{
get;
set;
}

[RequiredArgument]
public InArgument<string> Password
{
get;
set;
}

[RequiredArgument]
public InArgument<string> Domain
{
get;
set;
}
}
Bei der Implementierung sollte man sich überlegen, so sensible Daten wie Credentials ggf. anders abzubilden als per Input-Parameter - für dieses Beispiel soll diese Lösung aber ausreichend sein, damit es nicht zu komplex wird. Die eigentliche Arbeit übernimmt dann die im folgenden dargestellte Methode ExecuteProcessOnRemoteMachine, die per WMI einen Prozess auf einem anderen Rechner startet. Dazu ist es notwendig, die Assembly System.Management zu referenzieren.
private static void ExecuteProcessOnRemoteMachine(string remoteMachine, string username, string password, string domain, string commandLine)
{
ConnectionOptions connectionOptions = new ConnectionOptions();
connectionOptions.Authority = "ntlmdomain:" + domain;
connectionOptions.Username = username;
connectionOptions.Password = password;
connectionOptions.Authentication = AuthenticationLevel.Default;
connectionOptions.Impersonation = ImpersonationLevel.Impersonate;
connectionOptions.EnablePrivileges = true;

ManagementScope managementScope = new ManagementScope(string.Format(@"\\{0}\ROOT\CIMV2", remoteMachine), connectionOptions);
managementScope.Connect();

ManagementPath managementPath = new ManagementPath("Win32_Process");
ManagementClass processClass = new ManagementClass(managementScope, new ManagementPath("Win32_Process"), new ObjectGetOptions());
ManagementBaseObject inParams = processClass.GetMethodParameters("Create");
inParams["CommandLine"] = commandLine;

ManagementBaseObject outParams = processClass.InvokeMethod("Create", inParams, null);
}
Der Rest ist trivial: In der Methode Execute werden die Input-Parameter entgegengenommen und an die Methode ExecuteProcessOnRemoteMachine übergeben.
protected override void Execute(CodeActivityContext context)
{
string startProcessCommand = context.GetValue(this.Command);
string remoteMachine = context.GetValue(this.RemoteMachine);
string username = context.GetValue(this.Username);
string password = context.GetValue(this.Password);
string domain = context.GetValue(this.Domain);


ExecuteProcessOnRemoteMachine(remoteMachine, username, password, domain, startProcessCommand);
}
Die Activity wird nun in den Workflow eingebunden und die notwendigen Daten bereitgestellt.
Am Ende des Builds werden nun die Dateien aus dem DropFolder genommen und mittels der Standard-Activity CopyDirectory auf den Integrationsserver kopiert. Die neu erstellte Activity führt dann die Installation durch.

Global Assembly Cache reloaded

28.07.2010 07:07:00 | Martin Hey

Das .NET Framework 4 ist nun schon ein paar Tage alt und abgesehen von tollen neuen Features bringt es auch einige gewöhnungsbedüftige Sachverhalte mit sich. Einer davon ist die Änderung im Global Assembly Cache.
Wer bisher die Fusion-Ansicht des Global Assembly Cache verwendet hat und per Drag & Drop Assemblies installiert hat, wird bemerken, dass alle neuen Assemblies sich nicht mehr installieren lassen, obwohl keine Fehlermeldung erscheint. Installiert man die Assemblies hingegen per gacutil, so wird man feststellen, dass zwar eine Erfolgsmeldung kommt, aber unter C:\Windows\assembly keine Veränderung geschieht.
Woran liegt das? Mit dem .NET Framework 4 gab es einige Änderungen im Konzept des GAC. Hier ein kurzer Auszug aus der MSDN:
In .NET Framework 4.0, the GAC went through a few changes. The concept of placing assemblies into a global directory began in CLR v1.1. In case of .NET Framework 1.1 (which had CLR v1.1) and .NET Framework 2.0 (which had CLR 2.0), the GAC was split into two, one for each CLR. This avoided the leaking of assemblies across CLR versions. For example, if both .NET 1.1 and .NET 2.0 shared the same GAC, then a .NET 1.1 application, loading an assembly from this shared GAC, could get .NET 2.0 assemblies, thereby breaking the .NET 1.1 application.
The CLR version used for both .NET Framework 2.0 and .NET Framework 3.5 is CLR 2.0. As a result of this, there was no need in the previous two framework releases to split the GAC. The problem of breaking older (in this case, .NET 2.0) applications resurfaces in Net Framework 4.0 at which point CLR 4.0 released. Hence, to avoid interference issues between CLR 2.0 and CLR 4.0, the GAC is now split into private GACs for each runtime.
Zusammengefasst bedeutet das, dass der GAC nicht mehr für alle Assemblies C:\Windows\assembly ist, sondern dass dort alle Pre-Framework-4-Assemblies liegen. Alle neuen Assemblies liegen im Assembly-Ordner des .NET-Frameworks (also z.B. C:\Windows\Microsoft.NET\assembly).


Für mich erklärt der MSDN-Auszug nun nicht ganz, warum hier ein anderer Ordner notwendig war, der sich auch noch anders verhält als der bisherige (s. Bild) - irgendwie hatte man sich ja schon an die Fusion-Ansicht gewöhnt. Für mich bleiben bei der aktuellen Implementierung viele Fragen offen:
  • Hätte man nicht unter C:\Windows\assembly noch eine Ordnerebene einführen können, die die Frameworkversion widerspiegelt?
  • Weshalb hat der neue GAC keine Fusion-Ansicht, in der so wichtige Informationen wie der Public-Key-Token und die Culture auf einen Blick sichtbar sind?
  • Weshalb kann die Fusion-Ansicht im alten GAC per Drag & Drop nicht selbstständig in die richtigen Ordner installieren?
  • ....
Glücklich bin ich mit der jetzigen Lösung nicht, aber ich werde mich - wie viele andere - damit auch arrangieren. Und vielleicht kommt ja noch ein Update oder ServicePack, das alles wieder schön macht.

Globale Namespaces für die Razor-Syntax und den ASP.NET WebPages

28.07.2010 01:33:29 | Albert Weinert

Wenn man bei WebForms nicht auf jeder Page oder jedem UserControl die notwendigen Namespace importieren möchte. So hat man diese in der Web.config hinterlegt.

Dies funktioniert wunderbar bei WebForms und der WebForm-ViewEngine unter ASP.NET MVC.

Mit den neuen WebPages (.cshtml) und der Razor-Syntax kann man mit

@using Regularly.Models
@using Regulary.Areas.Administration.Models

auch entsprechende Namespaces der Template bekannt machen, Jedoch funktioniert der Weg über die web.config nicht (ob sich dies ändert steht wohl nicht nicht fest).

Aber man einen anderen Weg gehen, dazu muss man beim Application-Start über die Klasse CodeGeneratorSettings die Namespaces hinzufügen.

CodeGeneratorSettings.AddGlobalImport("Regularly.Models");
CodeGeneratorSettings.AddGlobalImport("Regularly.Extensions");

Diese Klasse befindet sich im Namespace Microsoft.WebPages.Compilation

03.08.10 Treffen der .NET Developer Group Braunschweig - Better "Results" with ASP.NET MVC

27.07.2010 13:35:00 | Lars Keller

Die DNUG Braunschweig trifft sich am 03.08.2010 um 19:00 im Restaurant Zucker (Tagungsraum). Uns kommt Daniel Fisher mit einem Vortag über ASP.NET MVC besuchen.

Abstract:

Mit ASP.NET MVC ist ein völlig neues Konzept am Markt, mit dem Ergebnisse nicht nur im HTML-Format an den Browser ausgeliefert werden können. In dieser Session wird unter Anderem gezeigt, wie eine WebAnwendung Informationen für JavaScript nutzbar macht, Termine und Kontaktdaten für Outlook und Co. bereitstellt. Ein Muss für jede WebAnwendung die die interagiert oder selbst als Mash-up fungiert.

Bio:

Daniel Fisher ist Mitbegründer der Firma devcoach® (www.devcoach.biz), die Unternehmen beim Einsatz der Microsoft® .NET Plattform in konkreten Projekten von der Architektur bis zum Deployment ganzheitlich unterstützt und begleitet.

Im Mittelpunkt seiner Arbeit stehen Service-Orientierung (SOA), agile Methoden und Prozesse, das Web und Datenzugriff. Er ist ein ausgewiesener Experte im SOA-Umfeld und plant und realisiert seit mehreren Jahren verteilte Systeme auf der Microsoft Plattform.

Daniel ist einer der Windows Communication Foundation (WCF) -Experten der ersten Stunde und war Mitglied im Technical Adoption Program der Microsoft Corporation. Für das Bundesamt für Sicherheit in der Informationstechnik (BSI) hat er zusammen mit Michael Willers (Projectlead) eine umfangreiche Sicherheits-Analyse durchgeführt und praxiserprobte Leitfäden für den Umgang mit WCF im Projektalltag entwickelt. Als Experten zum Thema „SOA mit .Net“ bereisten sie im Auftrag von Microsoft den europäischen Kontinent, um bei Workshops mit Architekten aus aller Welt deren Anforderungen zu diskutieren und bei der Implementierung von konkreten Lösungen zu beraten.

Daniel entwickelt seit 1995 Software (seit 1999 auf der .NET Plattform) und verfügt über Projekterfahrung als Entwickler, Architekt, Projektleiter und Berater aus den Branchen Versicherung, Großhandel, Mobilfunk und Bankwesen.

Er ist Leiter der .NET-Entwickler-User-Group Niederrhein (www.netug-niederrhein.de) und Vorstand der JustCommunity e.V. (www.justcommunity.de), dem Veranstalter des größten regionalen Community-Events für Software-Entwickler und IT-Professionals (www.nrwconf.de). Sie finden sein Blog unter lennybacon.com.

 

Wie immer ist dieses Event kostenlos und jeder .NET Interessierte ist herzlich willkommen!

Weitere Informationen zur DNUG Braunschweig findest du hier.

Silverlight: Paging für DataGrid oder andere Steuerelemente

27.07.2010 11:01:24 | Gregor Biswanger

Die Übersichtlichkeit geht verloren wenn zu viele Daten bei einem DataGrid, ListBox oder anderen Controls dargestellt wird. Nicht nur das, es kann zu Performance Problemen kommen. Silverlight rendert wie bei einem Daumenkino (oder auch Film) mehrere Bilder die Sekunde (Frames) um die Oberfläche darstellen zu lassen. Wenn der Inhalt kürzer gehalten wird, kann die Oberfläche selbstverständlich schneller reagieren. Dazu gibt es das altbekannte Paging um Dateninhalte auf mehrere Seiten zu unterteilen.

Ab Silverlight 3 gibt es das DataPager-Steuerelement. Dieses muss explizit an einer PagedCollectionView gebunden werden. Alle anderen Steuerlemente die den späteren Inhalt darstellen sollen, werden auch an die PagedCollectionView gebunden. Der DataPager gibt dann alle weiteren Commands an die PagedCollectionView. Die anderen Steuerelemente erhalten dann automatisch den jeweiligen Inhalt.

Beispiel:

In diesem Beispiel wird gezeigt wie Daten von einem Model ins ViewModel geladen werden. Im ViewModel wird direkt eine Instanz einer PagedCollectionView erzeugt und die Daten vom Model überreicht.

Listing 1.4. – Source-Code der Implementierung von SelectionChangedMethod.

Beim Ausführen der Anwendung, erscheint nun bei der Auswahl eines Items die jeweilige MessageBox.

Abb-1-5–Die-Auswahl-eines-Items-wird-in-einer-MessageBox-dargestellt

Abb.1.5. – Die Auswahl eines Items wird in einer MessageBox dargestellt.

Fazit

Behaviors sind immer wichtiger geworden. Ich selbst sehe Sie auch als eine Art Aspektorientierte Programmierung für das Frontend. Es muss kein Code geschrieben werden, es kann zudem immer wieder verwendet werden und die Übersichtlichkeit des eigenen Codes bleibt gegeben. Die neuen Behaviors in Expression Blend 4 bringen eine große Abhilfe bei den Stolpersteinen der heutigen Entwicklung mit sich. Zum Beispiel bei der Entwicklung mit dem MVVM.

Eigene Routed Events unter Silverlight

27.07.2010 11:01:24 | Gregor Biswanger

Routed Events sind gerade bei verschachtelten Steuerelementen enorm wichtig. Jedoch bringen Sie unter Silverlight einige Probleme mit sich. Zum einem sind Sie unter Silverlight auf folgende Events beschränkt:

KeyDown
KeyUp
GotFocus
LostFocus
MouseLeftButtonDown
MouseLeftButtonUp
MouseMove
MouseWheel
BindingValidationError
DragEnter
DragLeave
DragOver
Drop

Das wäre normal nicht wirklich schlimm, wenn man wie unter WPF seine eigenen Routed Events schreiben könnte. Leider kann man aktuell ab Silverlight 4 immer noch keine eigenen Routed Events schreiben. Das schränkt die Freiheiten bei bestimmten Anforderungen stark ein. Das nächste Problem wäre zudem die Abhängichkeit in der Code-Behind durch ein Event. Für die so eben genannten Probleme habe ich folgende Lösung parat: CallMethodAction-Behavior + UserControl-Facade.

Ein einfaches Beispiel: Die ListBox

Das folgende Beispiel verbildlicht ein gängiges Szenario unter Silverlight. Es soll auf ein Klick innerhalb der ListBox mit eigener Logik reagiert werden können. Dazu wurde bereits eine ListBox mit Beispieldaten und einem CallMethodAction-Behavior in Expression Blend 4 angelegt. Das CallMethodAction-Behavior soll auf das MouseLeftButtonDown-Event reagieren und die Methode ListBoxMouseLeftButtonDown im ViewModel aufrufen.

 

Das ist der folgende XAML-Code dazu:

   1:  ....
   2:          <ViewModel:ViewModelExample x:Key="ViewModel" />
   3:      </UserControl.Resources>
   4:   
   5:      <Grid x:Name="LayoutRoot" Background="White" DataContext="{StaticResource ViewModel}">
   6:          <ListBox x:Name="LbItems" Margin="36,43,39,58" ItemTemplate="{StaticResource ItemTemplate}" 
                        ItemsSource="{Binding Source={StaticResource SampleDataSource}, Path=Collection}">
   7:              <i:Interaction.Triggers>
   8:                  <i:EventTrigger EventName="MouseLeftButtonDown">
   9:                      <ei:CallMethodAction TargetObject="{Binding Mode=OneWay}" MethodName="ListBoxMouseLeftButtonDown" />
  10:                  </i:EventTrigger>
  11:              </i:Interaction.Triggers>
  12:          </ListBox>
  13:      </Grid>
  14:  ....

Listing 1.4. – Source-Code der Implementierung von SelectionChangedMethod.

Beim Ausführen der Anwendung, erscheint nun bei der Auswahl eines Items die jeweilige MessageBox.

Abb-1-5–Die-Auswahl-eines-Items-wird-in-einer-MessageBox-dargestellt

Abb.1.5. – Die Auswahl eines Items wird in einer MessageBox dargestellt.

Fazit

Behaviors sind immer wichtiger geworden. Ich selbst sehe Sie auch als eine Art Aspektorientierte Programmierung für das Frontend. Es muss kein Code geschrieben werden, es kann zudem immer wieder verwendet werden und die Übersichtlichkeit des eigenen Codes bleibt gegeben. Die neuen Behaviors in Expression Blend 4 bringen eine große Abhilfe bei den Stolpersteinen der heutigen Entwicklung mit sich. Zum Beispiel bei der Entwicklung mit dem MVVM.

Microsoft Expression 4 auf Deutsch verfuegbar

27.07.2010 08:11:05 | Kay Giza

Anfang Juni wurde die neue Version der Expression-Produktfamilie offiziell vorgestellt, seit letzter Woche ist Expression Studio nun auch auf Deutsch erhältlich: Auf der deutschen Expression-Webseite sind ab sofort deutschsprachige 60-Tage-Testversionen zum Download verfügbar. Microsoft Expression ist eine Sammlung professioneller Designwerkzeuge zur Entwicklung und Gestaltung von Webanwendungen, Benutzeroberflächen für Windows-Anwendungen und multimediale Rich-Media-Anwendungen. Ab Mitte August wird Expression 4 dann auch im Handel verfügbar sein. Expression-User, die Expression 3 im Einzelhandel erworben haben, können sich die Testversionen von Expression Studio 4 Ultimate oder Expression Studio 4 Web Professional herunterladen. Sofern Expression 3... [... mehr in diesem Blogposting auf Giza-Blog.de]

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

Kostenlose "Works with Windows Server 2008 R2" Software Zertifizierung jetzt verfügbar!

26.07.2010 10:05:00 | Peter Kirchner

Sie möchten Ihre Software-Anwendung auf die Kompatibilität mit Windows Server 2008 R2 prüfen? Im Microsoft Platform Ready Portal – die zentrale Anlaufstelle für Softwareentwickler rund um neue Microsoft Technologien finden Sie das "Works with Windows Server 2008 R2" Software Certification Toolkit.

Dieses Toolkit unterstützt Sie dabei, Ihre Anwendung auf die Zertifizierung vorzubereiten und enthält technische Beschreibungen, Tools, Dokumentationen, Code-Beispiele sowie weitere Hilfestellungen rund um die Anwendungskompatibilität.

Mit dem Toolkit prüfen Sie Ihre Anwendungskompatibilität indem Sie einen Selbsttest durchführen, das heißt, Sie testen Ihre Software-Anwendung in Ihrem Haus und teilen uns das Ergebnis per XML-Datei mit. Sie laden Ihre Testergebnisse einfach über das Microsoft Platform Ready Portal hoch, und erhalten dann eine Bestätigung Ihrer Anwendungskompatibilität.

Mit dem erfolgreichen Bestehen dieses Selbsttests haben Sie die "Works with Windows Server 2008 R2" Software Zertifizierung erlangt und somit auch eines der Voraussetzung für die Microsoft Partner Network Silver ISV Kompetenz erfolgreich absolviert.

www.microsoftplatformready.com/de

Neues rund um Expression 4

26.07.2010 09:51:31 | Jan Schenk

Expression 4 auf Deutsch verfügbar

Anfang Juni wurde die neue Version der Expression-Produktfamilie offiziell vorgestellt, seit letzter Woche ist Expression Studio nun auch auf Deutsch erhältlich: Auf der deutschen Expression-Webseite sind ab sofort deutschsprachige 60-Tage-Testversionen zum Download verfügbar. Microsoft Expression ist eine Sammlung professioneller Designwerkzeuge zur Entwicklung und Gestaltung von Webanwendungen, Benutzeroberflächen für Windows-Anwendungen und multimediale Rich-Media-Anwendungen.  Ab Mitte August wird Expression 4 dann auch im Handel verfügbar sein.

Expression-User, die Expression 3 im Einzelhandel erworben haben, können sich die Testversionen von Expression Studio 4 Ultimate oder Expression Studio 4 Web Professional herunterladen. Sofern Expression 3 auf dem PC installiert ist, wird die Vollversion von Expression 4 automatisch frei geschaltet. Besitzer von Expression Web 3 können kostenfrei auf Expression Studio 4 Web Professional upgraden, Besitzer von Expression Studio 3 auf Expression Studio 4 Ultimate. Weitere Informationen zum Expression Studio 4 Upgrade finden Interessierte im deutschen Silverlight und Expression Studio Blog.

Was ist neu?

Expression Studio 4 weist viele Neuerungen und Verbesserungen auf: So bietet Expression Blend 4 zum Beispiel Support für Visual Studio 2010 und Windows Phone. Außerdem sind neue Eigenschaften, Pixel Shader-Effekte, verbesserter Adobe Photoshop-Import oder Unterstützung für Model View View-Model hinzugekommen. Bei Expression Web 4 sind unter anderem SEO Reporting, ein neues Erweiterungsmodell für HTML, JavaScript und CSS sowie eine überarbeite SuperPreview zu erwähnen. Bei Expression Encoder 4 Pro schließlich stechen neue Features wie Live Smooth Streaming (VC-1 und H.264), verbessertes Screen Capturing und ein neuer H.264 Encoder ins Auge. Mehr Informationen zu den einzelnen Programmen finden Sie auf der Expression-Produktseite.

Ultimate, Web Professional und MSDN Subscription

Die neue Version von Expression Studio ist in zwei verschiedenen Editionen verfügbar: Expression Studio 4 Ultimate ist das Komplettpaket und enthält alle vier Expression-Produkte Blend, Web, Design und Encoder. Die Ultimate-Edition richtet sich an Webdesigner, Interface-Designer sowie Entwickler von Rich Internet Applications (RIA) basierend auf Silverlight. Außerdem verfügbar ist Expression Studio 4 Web Professional – diese Edition beinhaltet Web, Design und Encoder und ist als Werkzeug für professionelle und semi-professionelle Webdesigner gedacht.

Inhaber einer MSDN Subscription haben ebenfalls Zugriff auf die neuen Versionen der Expression-Produktfamilie: Expression Studio Ultimate ist Teil von Visual Studio Ultimate mit MSDN und Expression Studio Premium ist Teil von Visual Studio Premium mit MSDN. Der Unterschied liegt vor allem darin, dass nur bei der Ultimate-Version SketchFlow verfügbar ist, außerdem enthält die Premium-Version eine kleinere Ausgabe des Expression Encoder.

Neue Downloads für Entwickler

Neben den Expression-Versionen an sich stehen auch zwei neue deutschsprachige Downloads für Entwickler zur Verfügung: das Expression Blend 4 SDK für Silverlight sowie das Expression Blend 4 SDK für .NET 4.0 Beide Pakete enthalten weitervertreibbare Komponenten, die bei der Erstellung von Expression Blend 4-Anwendungen hilfreich sind.

Expression 4 auf Deutsch verfügbar

26.07.2010 09:15:29 | Oliver Scheer

Anfang Juni wurde die neue Version der Expression-Produktfamilie offiziell vorgestellt, seit letzter Woche ist Expression Studio nun auch auf Deutsch erhältlich: Auf der deutschen Expression-Webseite sind ab sofort deutschsprachige 60-Tage-Testversionen zum Download verfügbar. Microsoft Expression ist eine Sammlung professioneller Designwerkzeuge zur Entwicklung und Gestaltung von Webanwendungen, Benutzeroberflächen für Windows-Anwendungen und multimediale Rich-Media-Anwendungen.  Ab Mitte August wird Expression 4 dann auch im Handel verfügbar sein.

Expression-User, die Expression 3 im Einzelhandel erworben haben, können sich die Testversionen von Expression Studio 4 Ultimate oder Expression Studio 4 Web Professional herunterladen. Sofern Expression 3 auf dem PC installiert ist, wird die Vollversion von Expression 4 automatisch frei geschaltet. Besitzer von Expression Web 3 können kostenfrei auf Expression Studio 4 Web Professional upgraden, Besitzer von Expression Studio 3 auf Expression Studio 4 Ultimate. Weitere Informationen zum Expression Studio 4 Upgrade finden Interessierte im deutschen Silverlight und Expression Studio Blog.

Was ist neu?

Expression Studio 4 weist viele Neuerungen und Verbesserungen auf: So bietet Expression Blend 4 zum Beispiel Support für Visual Studio 2010 und Windows Phone. Außerdem sind neue Eigenschaften, Pixel Shader-Effekte, verbesserter Adobe Photoshop-Import oder Unterstützung für Model View View-Model hinzugekommen. Bei Expression Web 4 sind unter anderem SEO Reporting, ein neues Erweiterungsmodell für HTML, JavaScript und CSS sowie eine überarbeite SuperPreview zu erwähnen. Bei Expression Encoder 4 Pro schließlich stechen neue Features wie Live Smooth Streaming (VC-1 und H.264), verbessertes Screen Capturing und ein neuer H.264 Encoder ins Auge. Mehr Informationen zu den einzelnen Programmen finden Sie auf der Expression-Produktseite.

Ultimate, Web Professional und MSDN Subscription

Die neue Version von Expression Studio ist in zwei verschiedenen Editionen verfügbar: Expression Studio 4 Ultimate ist das Komplettpaket und enthält alle vier Expression-Produkte Blend, Web, Design und Encoder. Die Ultimate-Edition richtet sich an Webdesigner, Interface-Designer sowie Entwickler von Rich Internet Applications (RIA) basierend auf Silverlight. Außerdem verfügbar ist Expression Studio 4 Web Professional – diese Edition beinhaltet Web, Design und Encoder und ist als Werkzeug für professionelle und semi-professionelle Webdesigner gedacht.

Inhaber einer MSDN Subscription haben ebenfalls Zugriff auf die neuen Versionen der Expression-Produktfamilie: Expression Studio Ultimate ist Teil von Visual Studio Ultimate mit MSDN und Expression Studio Premium ist Teil von Visual Studio Premium mit MSDN. Der Unterschied liegt vor allem darin, dass nur bei der Ultimate-Version SketchFlow verfügbar ist, außerdem enthält die Premium-Version eine kleinere Ausgabe des Expression Encoder.

Neue Downloads für Entwickler

Neben den Expression-Versionen an sich stehen auch zwei neue deutschsprachige Downloads für Entwickler zur Verfügung: das Expression Blend 4 SDK für Silverlight sowie das Expression Blend 4 SDK für .NET 4.0 Beide Pakete enthalten weitervertreibbare Komponenten, die bei der Erstellung von Expression Blend 4-Anwendungen hilfreich sind.

Einladung zum Treffen der .NET Usergroup Dresden am 25.08.2010

25.07.2010 16:49:00 | Martin Hey

Das nächste Treffen der .NET Usergroup Dresden findet am 25.08.2010 statt. Austragungsort ist dieses Mal die Communardo Software GmbH.

Wie bereits im Juli-Treffen angekündigt werden dabei folgende Themen eine Rolle spielen:

Branching/Merging Strategien mit dem TFS (Robert Mühsig)
Nachdem wir bei der letzten Usergroup den Themenkomplex Buildmanagement vertieft haben, setzt Robert seinen Vortrag zum Thema TFS fort. Dieses Mal geht es um Branching- und Merging-Strategien.

Einführung in die Entwicklung für Windows Phone 7 (Martin Hey)
Windows Phone 7 wird dieses Jahr gelauncht. Der Vortrag soll eine Einführung in die Möglichkeiten und Besonderheiten der Entwicklung für Windows Phone 7 geben.

Das Treffen beginnt wie immer um 18:00 Uhr. Wer daran interessiert ist zu kommen, den bitten wir sich in einer der Teilnehmerlisten (Xing oder Doodle) einzutragen. Nach dem Treffen ist jeder gern eingeladen, beim Stammtisch an einem Plausch in lockerer Atmosphäre über .NET oder alles andere teilzunehmen.

LightCore 1.4 Release

25.07.2010 07:44:00 | Peter Bucher

*Update: Die Quellcode Lizenz von LightCore wurde auf MS-PL umgestellt und die aktuelle Version ist inzwischen 1.4.1.

Es hat eine Weile gedauert, doch nun ist es soweit: LightCore ist in der Version 1.4 verfügbar und die Website glänzt mit neuem Design und Inhalt.

Mit diesem Release wurden bekannte Fehler aus der Version 1.0 behoben, intern viel verändert und bietet natürlich auch neue Features.

Silverlight 3.0 und Compact Framework 3.5 Unterstützung wurden gefordert, diese Forderung wurde umgesetzt und zusätzlich findet sich jetzt auch eine .NET 4.0 Variante, die den neuen Lazy<T>-Typ integriert.

Unter anderem wurde folgendes geändert:

  • Interne Änderungen, mehr UnitTests, Optimierungen, Fehlerbehebungen.
  • Open Generic Unterstützung per XML-Registrierung.
  • Unterstützung von mehreren, typisierten Argumenten pro Registration mit XML oder per Code.
  • Bessere Fehlermeldungen und Fehlerbehandlung.
  • Viel mehr Features durch die RegistrationSources, bspw. Factory- oder Array-RegistrationSource.
  • Unterstützung von ASP.NET MVC 2.0.
  • Property Injection Performance verbessert.
  • Benannte Registrierungen sind ab dieser Version nicht mehr unterstützt.
  • Compile- und Laufzeit-Argumente in verschiedener Form (XML, anonymer Typ, IDictionary<string, object>,Argument beim Resolve Aufruf).

LightCore ist unter http://lightcore.ch/ erreichbar.

An dieser Stelle möchte ich Jürgen Gutsch, Gregor Biswanger, Dennis Bischof, Golo Roden und Roberto Bez danken, die mir während der Entwicklung und für die Dokumentation von LightCore stets mit Rat und Tat zur Seite stehen.

Was kostet LightCore?

Die Binaries von LightCore dürfen in jeglicher Art von Projekten (privat, kommerziell, ...) kostenlos genutzt werden.
Der Quellcode von LightCore steht unter der MS-PL-Lizenz.

WinDbg Commands

24.07.2010 22:45:03 | Alexander Groß

I just finished watching Ingo Rammer’s sessions on debugging from NDC 2010:

While I consider myself experienced in debugging with Visual Studio I still didn’t know the Ctrl+B trick Ingo shows in the first session to create breakpoint groups, for example to break on all methods named WriteLine.

Ingo’s second session goes into detail how to start with WinDbg. During his talk Ingo wrote down quite a lot of WinDbg commands that I copied and extended a bit for my own reference.

# Use debugger according to architecture that is being debugged.

# Drag exe onto WinDbg to start debugging.

# Debugging services:
# 1. Using Global Flags
#  - On "Image File" tab, enter service exe
#  - Set debugger to cdb.exe -server tcp:port=1234
# 2. Start service
# 3. Start WinDbg
#  - connect to remote session: tcp:server=localhost,port=1234
# Also works (unsecured) over networks

!help

.loadby sos mscorwks # CLR 2
.loadby sos clr      # CLR 4, both after the debuggee has loaded the CLR
.chain               # Shows loaded extensions

sxe <event code> # Stop
sxn <event code> # Notify
sxi <event code> # Ignore
# ... on <event code> exceptions (for example, <event code> = clr)

g            # Go
.cls         # Clear screen

!pe          # Print exception
!clrstack    # Display stack trace
!clrstack -a # Stack trace with additional information (parameters and locals)
# If there is no stack information the JIT optimized the code away (i.e. inlining).
!dumpstack   # Another way to get the stack trace

!u <address> # Unassemble code at <address>
# Look for calls into managed code (to the right) to find the line/call that caused the exception.
# <assembly>_ni = Native image

!do <address> # Dump object
!da <address> # Dump array
# To copy addresses: Left double-click a numeric value, double right-click to copy it to the command line.

~            # Show all (managed and unmanaged) threads
!threads     # Show managed threads
~2s          # Switch to thread 2 (#2 in the unnamed column)
!runaway     # Show thread execution times (user-mode) - to find hanging threads

!dumpheap    # Show heap information, 1 line per instance
!dumpheap -stat # Heap statistics, most memory-consuming at the bottom. MT = class "pointer"
!dumpheap -stat -type TextBox # Show instances of classes containing "TextBox"
!dumpheap -type TextBox
!dumpheap -mt <type> # Dumps all instances of "TextBox" or <type>
!gcroot <address> # Why is the instance at <address> in memory?
# Domain = new GC root that reference <address> (~ static instance)
# Ignore WeakReferences, look for (pinned) references

# Create dumps from code:
[DllImport("DbgHelp.dll", SetLastError = true]
static extern bool MiniDumpWriteDump(
    IntPtr hProcess,
    int processId,
    IntPtr fileHandle,
    int dumpType, // 0x0 or 0x6 for managed code
    IntPtr exceptionInfo,
    IntPtr userInfo,
    IntPtr extInfo);

Benutzerbild in dotnet-kicks.de einbinden

24.07.2010 10:05:00 | dotnet-kicks.de Blog

Inzwischen verwenden die meisten aktiven dotnet-kicks.de Nutzer ein eigenes Benutzerbild. Für alle, die nicht wissen wie ein solches Bild bei dotnet-kicks.de eingebunden werden kann, beschreibt die folgende Kurzanleitung die Vorgehensweise.

image

Bei dotnet-kicks.de werden die Bilder nicht direkt hochgeladen, es wird auf das Bild zurückgegriffen, das bei dem kostenlosen Dienst Gravatar veröffentlicht wurde. Gravatar bietet den Vorteil, dass das eigene Bild an einer zentralen Stelle verwaltet werden kann. Alle anderen Webseiten, die den Gravatar-Dienst nutzen, holen sich das Bild von Gravatar und zeigen es an. Die Bilder werden anhand ihrer Email Adresse identifiziert.

image

1.    öffnen der Webseite http://gravatar.com/
2.    auf den Button >Get your Gravatar today< klicken
3.    auf der nachfolgen Seite die Emailadresse eingeben, mit der man  auch bei dotnet-kicks.de registriert ist
4.    Bestätigungsmail abrufen und den Aktivierungslink in der Mail anklicken
5.    auf der nun geöffneten Seite einen Benutzernamen und ein Passwort festlegen
6.    im nächsten Schritt kann ein Bild hochgeladen oder direkt über  eine Webcam aufgenommen werden
7.    Fertig, ab jetzt wird das Benutzerbild bei dotnet-kicks.de und allen anderen Seiten angezeigt die Gravatare unterstützen

Windows 7–Beispielanwendung Fishbowl

22.07.2010 10:50:00 | Oliver Scheer

Auf http://developforwindows.com/ wird eine sehr tolle Facebook-Client mit dem Titel Fishbowl vorgestellt. Vollständig auf Windows 7 Technologien basierend und mit einer wirklich tollen Oberfläche kann man sein Facebook-Leben auch auf dem Desktop geniessen.

image

Link: http://www.fishbowlclient.com/

Nachlese zum Treffen der .NET Usergroup am 21.07.2010

22.07.2010 08:23:00 | Martin Hey

Gestern Abend trafen sich wieder begeisterte .NET Anhänger zur .NET Usergroup. Erfreulich war, dass wir ganz viele neue Gesichter dabei hatten, was mir zeigt, dass wir auf dem richtigen Weg sind und was uns dazu veranlasst hat, zu Beginn noch eine kurze Vorstellungsrunde zu setzen.

Direkt danach ging es schon tief ins Fachliche und ich habe anhand eines Beispiels gezeigt, wie man dynamische LINQ-Queries mit Hilfe einer geschickten Kombination der Klassen aus dem Namespace System.Linq.Expressions generieren kann. Hier hat sich auch gut gezeigt, wie die Community funktioniert, denn eines meiner Beispiele funktionierte nicht auf Anhieb (das Risiko des Live-Codings) und die hilfreichen Tipps von den Zuschauern haben mich auf die richtige Spur gebracht. Dass hier Interesse besteht, hat auch die anschließende kurze Diskussion "Typsicherheit vs. Dynamik", welche sich aus dem Thema entwickelt hat, gezeigt. Für das Beispielprojekt gibt es auch einen Downloadlink.

Nach einer kurzen Pause ging es mit Robert dann in die Tiefen automatischer Builds mit Hilfe von Team Foundation Server 2008 und 2010 und MSBuild-Skripten. Zwar hatte jeder der Anwesenden sich schon einmal mit dem Thema beschäftigt, aber in den Tiefen von MSBuild waren nur sehr wenige bisher unterwegs. Allen Teilnehmern, die sich etwas eingehender mit dem Thema MSBuild beschäftigen wollen, sei die MSBuild Serie von Thorsten Hans ans Herz gelegt, die Robert ja kurz erwähnt hat.

Im Anschluss an die Usergroup konnte man dann bei einem kühlen Bier in der Terrasse am Bischofsplatz noch fachsimpeln und den Abend ausklingen lassen.

Die BASTA! geht wieder auf Tour

22.07.2010 07:52:00 | Jörg Neumann

Zu meiner Freude macht die BASTA! ON TOUR diesmal in Hamburg halt. Vom 15. bis 16. November geht es unter dem Motto "Webanwendungen mit .NET" zwei Tage lang um die Entwicklung von Browser-basierten Anwendungen mit ASP.NET und Silverlight.
Hierbei werde ich die folgenden zwei Workshops bestreiten:

  • Silverlight Architecture Patterns
  • Silverlight Tipps & Tricks

Mehr Infos gibt’s auf www.basta-on-tour.de.

Vielleicht sieht man sich ja!

Basta_on_Tour_Banner325x125v2neu rot

Ein kleiner Test

22.07.2010 01:19:36 | Albert Weinert

using System;
using System.Text;
using System.Windows.Forms;

namespace SyntaxHighlight
{
    public class HtmlGenerator
    {
        private WebBrowser browser;

        private WebBrowser Browser
        {
            get
            {
                if (browser == null)
                    browser = new WebBrowser();
                browser.ScriptErrorsSuppressed = false;
                return browser;
            }
        }

        public string GenerateEditorHtml(string code, SyntaxHighlighter30Provider provider)
        {
            var publishHtml = GeneratePublishHtml(code, provider);
            var resourceReader = new ResourceReader();
            var html = new StringBuilder();
            html.AppendLine("");
            html.AppendLine("");
            html.AppendLine("");
            html.AppendLine("");
            html.AppendLine(publishHtml);
            html.AppendLine("");
            html.AppendLine("");
            html.AppendLine("");


            string result = string.Empty;
            try
            {
                EnsureBrowserDocument();

                if (Browser.Document != null)
                {
                    Browser.Document.OpenNew(true);
                    Browser.Document.Write(html.ToString());
                    result = GetConvertedHtml(Browser.Document.Body);
                }
            }
            catch (Exception ex)
            {
#if DEBUG
                MessageBox.Show(ex.ToString());
#endif
                result = publishHtml;
            }
            return result;
        }

        private string GetConvertedHtml(HtmlElement htmlElement)
        {
            return htmlElement.InnerHtml;
        }

        private void EnsureBrowserDocument()
        {
            if (Browser.Document == null)
            {
                Browser.DocumentText = "";
            }
        }

        public string GeneratePublishHtml(string code, SyntaxHighlighter30Provider provider)
        {
            string preClass = "brush: c#";
            return string.Format("
{1}
", preClass, code); } } }

Silverlight 3D Engine von PostVision

21.07.2010 13:58:00 | Oliver Scheer

Bin gerade zufällig drüber gestolpert (danke an Rene Schulte).

Auf http://postvision.net/SilverMotion/DemoTech.aspx finden sich unglaublich beeindruckende Demos mit der von PostVision entwickelten 3D Engine in Silverlight.

image

Wow.

Window 7–Beispielanwendung Book.Show

21.07.2010 12:42:44 | Oliver Scheer

Auf der Website: http://developforwindows.com/ gibt es einige sehr coole Beispielanwendung für die Anwendungsenwicklung unter Windows 7.

image

Die Anwendung sieht nicht aus wie eine typische "alte” Windows-Anwendung, sondern kommt mit einer sehr ansprechenden, individuellen Oberfläche daher. In der Anwendung sind diverse Bücher enthalten, die man einfach aus einem Bücherregal herauspicken und lesen kann.

Macht wirklich Spaß und das coolste ist, der Sourcecode ist frei mit dabei.

Link: http://developforwindows.com/

Neue Informationen hier im Blog

21.07.2010 00:36:07 | Albert Weinert

Da ich hier und da Anfragen nach Vorträgen bekomme habe ich hier im Blog nun angefangen die Vorträge die ich halte zu hinterlegen. Diese Liste wird mit der Zeit erweitert.

Firmen und User Groups können bei mir für einen Vortrag vor Ort anfragen.

 

Technorati Tags: ,,,

Termine

21.07.2010 00:11:42 | Albert Weinert

Zukünftige Termine

Folgende Termine mit Voträgen sind geplant

Vergangende Termine

Termine an denen ich Vorträge gehalten heben.

2010

List of SharePoint 2010 related documents and software

20.07.2010 20:25:00 | Ozgur Aytekin

Below is a list of SharePoint 2010 related documents and software available from Microsoft.

Developing Applications for SharePoint 2010
Developing Applications for SharePoint 2010 contains guidance documentation, detailed examples, and a reusable class library.

SharePoint 2010 Walkthrough Guide
This guide was written as a companion to the SharePoint Server 2010 Evaluation Guide for Technical and Business Decision Makers.

Planning guide for Microsoft SharePoint Server 2010
This document provides information and guidelines to lead a team through the steps of planning the deployment of a solution based on Microsoft SharePoint Server 2010.

Technical reference for Microsoft SharePoint Server 2010
This document includes technical information about the Microsoft SharePoint Server 2010 provider for Windows PowerShell and other helpful reference information about general settings, security, and tools.
 
Operations guide for SharePoint Foundation 2010
This document describes how to operate and maintain your servers, server farms, sites, and solutions in Microsoft SharePoint Foundation 2010.

 Planning guide for Microsoft SharePoint Server 2010
This document provides information and guidelines to lead a team through the steps of planning the deployment of a solution based on Microsoft SharePoint Server 2010.

Upgrading to Microsoft SharePoint Foundation 2010
This document is designed to guide administrators and IT professionals through the process of upgrading to Microsoft SharePoint Foundation 2010 from Windows SharePoint Services 3.0.


Operations guide for SharePoint Foundation 2010
This document describes how to operate and maintain your servers, server farms, sites, and solutions in Microsoft SharePoint Foundation 2010.

Microsoft SharePoint Designer 2010 (32-bit)
SharePoint Designer 2010 is the tool of choice for the rapid development of SharePoint applications. Using SharePoint Designer, advanced users and developers alike can rapidly create SharePoint solutions in response to business needs.

Microsoft SharePoint Foundation 2010
SharePoint Foundation 2010 is the new version of Microsoft Windows SharePoint Services. It is the essential solution for organizations that need a secure, manageable, web-based collaboration platform.

 Sharepoint 2010 Developer Training Kit
The SharePoint 2010 Developer Training Kit provides developers with deep guidance on how to develop for SharePoint 2010.

...

http://www.mssharepointtips.com/tip.asp?id=1000

Microsoft® Visual Studio® Scrum 1.0 Release

20.07.2010 07:52:52 | Christian Binder

 

Das SCRUM Template 1.0 ist nun als finale Version verfügbar. Es ergänzt die schon vorhandenen MSF Templates und soll SCRUM Teams besser unterstützen.
Folgende Work Items und Reports sind Teil des Templates:

Work Item Types

  • Sprint
  • Product Backlog Item
  • Bug
  • Task
  • Impediment
  • Test Case

Reports

  • Release Burndown
  • Velocity
  • Sprint Burndown
  • Build Success Over Time
  • Build Summary
  • Test Case Readiness
  • Test Plan Progress
  • SharePoint Project Portal

Download des Templates in der Visual Studio Gallery

Eine erste grundliegende Dokumentation für das Template findet sich hier auf MSDN.
Andere Tools, Templates und Informationen  rund um Prozesse im TFS gibt’s auf der Process Templates and Tools Website.

Feedback ist willkommen :-)

Neue Version des WorldWide Telescope

19.07.2010 09:30:00 | Oliver Scheer

Letzte Woche wurde auf dem jährlich stattfindenden Microsoft Research Faculty Summit die neueste Verson von WorldWide Telescope vorgestellt.

Durch eine permanente Zusammenarbeit mit der NASA hat Microsoft nun die vollständigste Visualisierung des Mars in 3D von einem Pol zum Anderen geschaffen, die es so auf dieser Welt (!!!) gibt. Aber auch andere Planeten und deren Trabanten lassen sich nun in 3D näher besichtigen.

Sehr interessant sind die Panoramaansichten, die auf den diversen Missionen der NASA erstellt wurden.

image

Panaromaansicht auf die Landungsstelle von Apollo 12

image

Apollo 17: Shorty Crater

 

image

Pathfinder auf dem Mars

Das WordWide Telescope gibt es in zwei Varianten, der Online-Silverlight-Variante und der Offline-Client-Variante.

Mehr Informationen gibt es hier.

Upgrade eines des MSF Agile 4.2 Templates nach Upgrade auf TFS 2010

15.07.2010 15:05:09 | Christian Binder

Nach Upgrade eines TFS 2008 auf TFS 2010 wird das Prozess Template nicht automatisch angepasst, so dass die neuen TFS 2010 Features nicht direkt zur Verfügung stehen. Hier sind also Manuelle Schritte notwendig, um die Neuen Features nutzen zu können. Hakan hat auf seinen Blog einen Script bereit gestellt, welches das Upgrade eines nicht angepassten MSF Agile 4.2 Templates teilautomatisiert. Download Hier.  Das Script kann als guter Startpunkt für eine Migration herangezogen werden und wenn notwendig angepasst werden.

Die ASP.NET ObjectDataSource und abhängige Business Objekte

14.07.2010 09:08:57 | Andre Kraemer

Ja, ich gebe es offen und ehrlich zu! Ich habe sie noch nie wirklich genutzt, die ASP.NET WebForms ObjectDataSource. Irgendwie hatte ich ein Unbehagen bei der Vorstellung mir das alles bloß zusammen zu klicken und habe daher bisher einen Bogen um die ObjectDataSource gemacht. Außerdem habe ich bisher auch noch niemanden getroffen, der ernsthaft in Erwägung gezogen hätte die ObjectDataSource zu nutzen - oder sich zumindest getraut hätte, dies zuzugeben ;-)

Kürzlich war es dann aber soweit. meine Für eine kleine Demo startete ich damit, die serverseitige ASP.NET MVC Implementierung meiner Beispielanwendung für meinen jQuery Vortrag auf der dotnet Colgone nach Webforms zu konvertieren. Mein Ziel war es dabei, wo immer es nur geht, den WebForms "Baukasten" zu nehmen. Da ich bereits einen bestehenden Business Service hatte, der mir meine Objekte laden und persistieren konnte, kreuzte sie nun also meinen Weg, die ObjectDataSource.

Nach ein paar Klicks durch den Wizzard und einem beherztem F5 bestätigte sich vorerst mein initiales Vorurteil: "Totaler Mist!".

Mein Business Service hatte nämlich eine Abhängigkeit auf eine weitere Klasse, die für die  Datenhaltung zuständig war. Diese Abhängigkeit fand sich in meinem Quellcode in Form eines Konstruktor Parameters wieder. In meiner ASP.NET MVC Implementierung war der DI Container StructureMap für das Auflöösen dieser Abhängigkeit zuständig.

Die WebForms Variante brach die Ausführung des Codes nun allerdings mit einer Exception ab und wies mich in freundlichem Gelb darauf hin, dass mein Business Objekt keinen parameterlosen Konstruktor hätte.

In der Hoffnung, eine Factory für mein Business Objekt angeben zu können durchsuchte ich also die Eigenschaften der ObjectDataSource. Leider wurde ich nicht fündig, fluchte ein wenig darüber, dass meine Anforderung doch gar nicht so ungewöhnlich wäre und beendete Visual Studio frustriert.

Glücklicherweise guckte ich ein wenig später doch noch mal nach einer Lösung. So kann zwar keine Eigenschaft für eine Factory angegeben werden, stattdessen wird jedoch ein Ereignis zur Verfügung gestellt, in dem ich das entsprechende Business Objekt erstellen und meiner ObjectDataSource zuweisen kann.

Konkret sieht dies wie folgt aus:

protected void AufgabenDataSource_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
{
   AufgabenService service = ObjectFactory.GetInstance<AufgabenService>
   e.ObjectInstance = service;
}

Nun habe ich über die ObjectFactory zwar einen direkten Verweis innerhalb meiner CodeBehind Datei auf den genutzten DI Container (in meinem Fall StructureMap), dies ist mir aber immer noch lieber, als die Abhängigkeit zur Persistenzschicht in meinem Business Service hart zu verdrahten.

Und die Moral von der Geschicht ...

... lautet: Erst ausprobieren und dann (gegebenenfalls) meckern ;-)

Die ASP.NET ObjectDataSource und abhängige Business Objekte

14.07.2010 07:08:57 | Andre Kraemer

Ja, ich gebe es offen und ehrlich zu! Ich habe sie noch nie wirklich genutzt, die ASP.NET WebForms ObjectDataSource. Irgendwie hatte ich ein Unbehagen bei der Vorstellung mir das alles bloß zusammen zu klicken und habe daher bisher einen Bogen um die ObjectDataSource gemacht. Außerdem habe ich bisher auch noch niemanden getroffen, der ernsthaft in Erwägung gezogen hätte die ObjectDataSource zu nutzen - oder sich zumindest getraut hätte, dies zuzugeben ;-)

Kürzlich war es dann aber soweit. meine Für eine kleine Demo startete ich damit, die serverseitige ASP.NET MVC Implementierung meiner Beispielanwendung für meinen jQuery Vortrag auf der dotnet Colgone nach Webforms zu konvertieren. Mein Ziel war es dabei, wo immer es nur geht, den WebForms "Baukasten" zu nehmen. Da ich bereits einen bestehenden Business Service hatte, der mir meine Objekte laden und persistieren konnte, kreuzte sie nun also meinen Weg, die ObjectDataSource.

Nach ein paar Klicks durch den Wizzard und einem beherztem F5 bestätigte sich vorerst mein initiales Vorurteil: "Totaler Mist!".

Mein Business Service hatte nämlich eine Abhängigkeit auf eine weitere Klasse, die für die  Datenhaltung zuständig war. Diese Abhängigkeit fand sich in meinem Quellcode in Form eines Konstruktor Parameters wieder. In meiner ASP.NET MVC Implementierung war der DI Container StructureMap für das Auflösen dieser Abhängigkeit zuständig.

Die WebForms Variante brach die Ausführung des Codes nun allerdings mit einer Exception ab und wies mich in freundlichem Gelb darauf hin, dass mein Business Objekt keinen parameterlosen Konstruktor hätte.

In der Hoffnung, eine Factory für mein Business Objekt angeben zu können durchsuchte ich also die Eigenschaften der ObjectDataSource. Leider wurde ich nicht fündig, fluchte ein wenig darüber, dass meine Anforderung doch gar nicht so ungewöhnlich wäre und beendete Visual Studio frustriert.

Glücklicherweise guckte ich ein wenig später doch noch mal nach einer Lösung. So kann zwar keine Eigenschaft für eine Factory angegeben werden, stattdessen wird jedoch ein Ereignis zur Verfügung gestellt, in dem ich das entsprechende Business Objekt erstellen und meiner ObjectDataSource zuweisen kann.

Konkret sieht dies wie folgt aus:

protected void AufgabenDataSource_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
{
    AufgabenService service = ObjectFactory.GetInstance<AufgabenService>();
    e.ObjectInstance = service;
}

Nun habe ich über die ObjectFactory zwar einen direkten Verweis innerhalb meiner CodeBehind Datei auf den genutzten DI Container (in meinem Fall StructureMap), dies ist mir aber immer noch lieber, als die Abhängigkeit zur Persistenzschicht in meinem Business Service hart zu verdrahten.

Und die Moral von der Geschicht ...

... lautet: Erst ausprobieren und dann (gegebenenfalls) meckern ;-)



blog.codemurai.de © André Krämer |Impressum | Abonieren

Einfach laufen lassen! Mit Tools und Applikationen, die alles veraendern!

13.07.2010 23:09:46 | Kay Giza

Und was werden Sie mit Visual Studio 2010 alles tun? Ich sage nur: Mops, Krokodil oder Hai - Hauptsache, es läuft. ;-)
 


Mehr Informationen zu Visual Studio finden Sie auf der Microsoft Produkt-Webseite zu Visual Studio

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

Exam 71-573: Microsoft SharePoint 2010 Application Development

13.07.2010 07:41:00 | Martin Hey

Mitte Mai bekam ich eine Mail von Microsoft, in der ich gefragt wurde ob ich nicht an den Beta-Prüfungen zu SharePoint 2010 teilnehmen möchte. Zu jeder der vier neuen Prüfungen gab es einen Promo-Code. Da es zeitlich gerade nicht ganz so rosig aussah, entschied ich mich zumindest eine der Prüfungen anzugehen und die MCTS in WSS 3.0 Application Development und MOSS 2007 Application Development auf SharePoint 2010 anzuheben.
Das spannende an Beta-Prüfungen ist: Man erfährt nicht sofort, ob man bestanden hat. Man ist ja gemeinsam mit vielen anderen das "Versuchskaninchen" für die neuen Fragen. Oft dauert die Auswertung mehrere Wochen oder bis zum Release der eigentlichen Prüfung. Heute morgen nun war es soweit: Eine neue Mail von Microsoft berichtet mir davon, dass ich das Exam bestanden habe und nun MCTS für SharePoint 2010 Application Development bin.
Ich freue mich darüber und wenn ich wieder eine Einladung zu einer Beta-Prüfung bekomm, werd ich das Angebot sicher wieder in Anspruch nehmen.

Game - Mount & Blade - Warband

10.07.2010 16:45:00 | Ozgur Aytekin

In a land torn asunder by incessant warfare, it is time to assemble your own band of hardened warriors and enter the fray. Lead your men into battle, expand your realm, and claim the ultimate prize: the throne of Calradia.

In a genre all its own, come experience The one and only Medieval combat /kingdom building sandbox game.
Mount and Blade Warband is a unique blend of intense strategic fighting, real time army command, and deep kingdom management.


http://www.taleworlds.com/main.aspx

Neuer Artikel bei dotnetpro: TDD Anti-Patterns - Am schlechten Beispiel lernen

09.07.2010 10:45:17 | Gregor Biswanger

In der aktuellen Ausgabe der dotnetpro gibt es einen neuen Artikel meinerseits:

dotnetpro-logo

Am schlechten Beispiel lernen

Das „Test-Driven Development“ hat sich durch seine vielen positiven Aspekte einen hohen Rang in der Softwarearchitektur erarbeitet. Dennoch fällt es immer wieder schwer, den Einstieg dazu zu finden. Dieser kann unter Umständen besser gelingen, wenn er sich nicht an den guten Vorbildern, sondern vielmehr an schlechten Beispielen und ihren Konsequenzen entlanghangelt.

A1008TDDAnti-Cover

Zu lesen ist der Artikel bei dotnetpro, Ausgabe 08/2010.
Oder http://www.dotnetpro.de/articles/onlinearticle3397.aspx

Eine neue Folge von msdn tv ist online: Ausgabe 11/2010

08.07.2010 17:52:09 | Oliver Scheer

„msdn tv – Nachrichten für Entwickler“ meldet sich diesmal vom Microsoft „Web Camp“, das im Juni in der Nähe von München stattgefunden hat. Interviewpartner dort war Jon Galloway, ASP.NET Community Program Manager und einer der Referenten der Veranstaltung. Er verrät u.a., was er vom ASP.NET MVC 2 hält.
Vorab zum Einstieg aber wie immer zunächst ein paar Kurznachrichten: Los geht’s mit Neuigkeiten zur Internet Explorer 9 Platform Preview 3, der aktuellen Entwicklervorschau auf die nächste Generation des Internet Explorer. Außerdem gibt’s Infos zu einer Videoaufzeichnung der letzten TechTalk-Roadshow, die sich mit der Entwicklung von Windows Phone Apps beschäftigt hat, zu einer neuen MSDN-Orientierungshilfe rund um Visual Studio 2010, einer Webcast-Serie über ‘C++0x‘ und dem Service Pack 3 für Exchange Server 2007.

http://msdn-online.de/msdntv

Get Microsoft Silverlight

msdn tv–Nachrichten für Entwickler (Ausgabe 11/2010)

07.07.2010 16:30:34 | Jan Schenk

Get Microsoft Silverlight


„msdn tv – Nachrichten für Entwickler“ meldet sich diesmal vom Microsoft „Web Camp“, das im Juni in der Nähe von München stattgefunden hat. Interviewpartner dort war Jon Galloway, ASP.NET Community Program Manager und einer der Referenten der Veranstaltung. Er verrät u.a., was er vom ASP.NET MVC 2 hält.
Vorab zum Einstieg aber wie immer zunächst ein paar Kurznachrichten: Los geht’s mit Neuigkeiten zur Internet Explorer 9 Platform Preview 3, der aktuellen Entwicklervorschau auf die nächste Generation des Internet Explorer. Außerdem gibt’s Infos zu einer Videoaufzeichnung der letzten TechTalk-Roadshow, die sich mit der Entwicklung von Windows Phone Apps beschäftigt hat, zu einer neuen MSDN-Orientierungshilfe rund um Visual Studio 2010, einer Webcast-Serie über ‘C++0x‘ und dem Service Pack 3 für Exchange Server 2007.


msdn tv ist ein neues Video-Nachrichtenformat, und hat seinen Ursprung auf MSDN Online (http://www.msdn-online.de/msdntv/). Alle zwei Wochen präsentiert Ihnen Jan Schenk, Developer Evangelist mit Hut, die wichtigsten Neuigkeiten für Entwickler, Hintergrundberichte und Interviews zu aktuellen Technologien sowie Highlights von Messen und Konferenzen. Das ganze kompakt, in ca. 15 Minuten erfrischend jung verpackt , und sowohl als Download für Ihren Rechner oder im Online-Player per Streaming verfügbar.

msdn tv is a German-speaking new and innovative video news series, and has originally been featured exclusively on the German MSDN Online Platform (http://www.msdn-online.de/msdntv/). Hatted Developer Evangelist Jan Schenk biweekly presents latest news for developers, background-stories and interviews concerning current and upcoming technologies, as well as video-highlights from fairs and conferences. Packed into 15 minutes, these news videos feature a fresh informative style, and are downloadable as well as available as online streaming video.

Eigene Namensregeln in ReSharper für xUnit.NET basierte Tests

06.07.2010 14:27:15 | Albert Weinert

Ich habe heute ein PlugIn für ReSharper veröffentlicht, mit dem möglich ist spezielle Naming-Styles in ReSharper für xUnit.NET und xUnitBDDExtensions basierte Unit Test festzulegen.

Im readme.txt ist erklärt wie man es installiert. Hier ein paar Screenshots zur Verwendung im ReSharper.

ReSharper-Options-NamingStyle

Dort nun Advanced Settings anklicken.

ReSharper-Options-Advande-Naming-Settings

Nun eine eigene Naming Rule hinzufügen. z.B. BDD Style und folgendes

auswählen.

ReSharper-Options-NamingStyle-BDD


Das war’s dann schon. Viel Spaß.

Hier geht’s zur Projekt Seite auf GitHub

 

Wie verhindere ich einen doppelten Submit?

05.07.2010 13:38:00 | Martin Hey

Die Verarbeitung von Postbacks in einem ASP.NET Formular benötigt gelegentlich etwas mehr Zeit. Beispiele dafür sind der Upload von Dateien oder die zeitintensive Verarbeitung der Anfrage in Backend-Systemen. Im Frontend bekommt der Benutzer davon meist nicht viel mit - abgesehen von einem Ladebalken im Browser. Da hier nur wenig Rückmeldung ist, bietet es sich an, dem Benutzer irgendeine Art von Feedback zu geben - sei es mit dem Einblenden einer Nachricht à la "Gedulden Sie sich, Ihre Anfrage wird verarbeitet.", oder dem simplen Deaktivieren des Buttons, der den Postback auslöst, damit mehrfache Submits verhindert werden, die den Server lahmlegen könnten. Den zweiten Ansatz verfolgt dieser Blogpost.
Problem daran: sämtliche Aktionen, die im Codebehind der Seite passieren könnten werden erst aktiv, wenn der Client eine Response bekommt - heißt: ein C# SubmitButton.Enabled = false käme in diesem Fall zu spät. Einzig sinnvolle Lösung ist daher, sich an das JavaScript anzuhängen, dass den Postback ausführt. Ein kurzer Blick in die MSDN bringt die passende Methode zum Vorschein - RegisterOnSubmitStatement in der Klasse ClientScriptManager.
// register JS to disable submitbutton
if (!Page.ClientScript.IsOnSubmitStatementRegistered("disableSubmitScript"))
{
Page.ClientScript.RegisterOnSubmitStatement(Page.GetType(), "disableSubmitScript", "DisableSubmitButtonOnSubmit('" + saveTicketButton.ClientID + "');");
}
Als Parameter wird der Funktionsaufruf übergeben, der den Submit-Button deaktiviert. Handelt es sich um einen Button, so kann man ihn auf disabled setzen, in meinem Fall liegt ein LinkButton vor. Um diesen zu deaktivieren muss das href-Attribut entfernt werden. Meine Methode DisableButtonOnSubmit, die ich der Methode als OnSubmitStatement genannt habe, sieht also wie folgt aus:
// JS function to disable a linkbutton
function DisableSubmitButtonOnSubmit(controlId) {
var control = document.getElementById(controlId)
if (control != null) {
// disable linkbutton
control.attributes.removeNamedItem("href");
// disable button
//control.disabled = true;
}
}
Um das Aktivieren muss man sich nun nicht mehr kümmern, da das Attribut ja automatisch wieder gesetzt ist, wenn der Postback durchgelaufen ist und die Response vom Server verarbeitet wurde. Stimmt soweit, wenn da nicht andere Skripte wären, die auch noch ausgeführt werden. Liegen im Formular nämlich Validatoren (wie RequiredFieldValidator oder RegExValidator), die die Anfrage clientseitig validieren. Dann wird der Klick durchgeführt, das eben erstellte Skript deaktiviert den Button und im Anschluss daran setzen die Validatoren das Formular auf ungültig und der Anwender kann nicht mehr auf den Button klicken. Schön wäre jetzt, wenn das Skript nun noch erkennen würde, ob Validatoren greifen und dann den Button nicht deaktivieren würde. Dazu muss das JavaScript nun noch etwas angepasst werden.
// JS functions to disable submit linkbutton
function DisableSubmitButtonOnSubmit(submitButtonControlId) {
if (typeof (ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) {
return false;
}
else {
DisableControl(submitButtonControlId);
return true;
}
}

function DisableControl(controlId) {
var control = document.getElementById(controlId)
if (control != null) {
// disable linkbutton
control.attributes.removeNamedItem("href");
}
}

13.07.10 Treffen der .NET Developer Group Braunschweig - Zurück in die Zukunft mit Silverlight 4

05.07.2010 12:32:00 | Lars Keller

Die DNUG Braunschweig trifft sich am 13.07.2010 um 19:00 im Restaurant Zucker (Tagungsraum). Gregor Biswanger, frischgebackener MVP Client App Dev, kommt uns mit einem Vortrag über Silverlight 4 besuchen.

Abstract:

Mit Silverlight 4 geht Microsoft den in Version 3 eingeschlagenen Weg weiter und erweitert es mit Verbesserungen die direkt von den Entwicklern gewünscht wurden. Mit Silverlight 3 zeigte sich der RIA-Sprössling mehr als erwachsen und mit Silverlight 4 kommt noch einiges an Reife dazu. Der Vortrag demonstriert die Highlights von Silverlight 4 und geht zudem bereits auf Erwartungen bezüglich Silverlight 5 ein.

Kurz zusammengefasst: Wir können heute schon sehen, was uns mit Silverlight 4 erwarten wird.

Bio:

Gregor Biswanger ist Solution Architect und Silverlight-Fachexperte der Firma impuls Informationsmanagement GmbH aus Nürnberg. Seine Schwerpunkte liegen im Bereich der .NET-Architektur, Silverlight und agilen Prozessen. Biswanger ist auch freier Autor, Speaker und Microsoft CLIPler der INdotNET (Ingolstädter .NET Developers Group). Sie erreichen ihn über sein Blog unter: www.dotnet-blog.net.

 

Wie immer ist dieses Event kostenlos und jeder .NET Interessierte ist herzlich willkommen!

Weitere Informationen zur DNUG Braunschweig findest du hier.

Web of Trust, oder welchen Seiten vertraust du?

03.07.2010 16:20:09 | Klaus Bock

Free Internet Security - WOT Web of Trust

Die Idee hinter WOT ist denkbar einfach:
Nutze die Power der Community und bilde die Erkenntnisse in einem Browser Add-on ab.
Das Konzept scheint zumindest zu funktionieren, wenn man sich die Zahlen auf der Statistikseite von WOT ansieht. Bis jetzt wurden über 28,5 Millionen Seiten von der Community bewertet.

Besagtes Add-on ist im Moment für den Internet Explorer sowie für den Firefox erhältlich. Für Googles Chrome der Version 4 ist ebenfalls eine frühe Version als Add-on verfügbar. Auch für Apples Safari ist eine Version in Arbeit.

Für jene welche sich das WOT-Add-on installieren, ändert sich die Wahrnehmung des Internet nachhaltig. Bereits in den SERPs der meisten Suchmaschinen, wird die jeweilige Reputation einer Webseite angezeigt und so bereits frühzeitig vor evtl. gefährlichen Seiten gewarnt.

Google Sucher

Sollte man doch einmal eine als gefährlich eingestufte Seite im Browser aufrufen, erschient ein Warnhinweis mit verschiedenen Möglichkeiten:

  • Die Warnung zu ignorieren und die Seite trotzdem aufzurufen
  • Die Bewertungen der Seite anzuzeigen um zu sehen, warum diese Seite schlecht bewertet wurde.
  • Der Seite eine eigene Bewertung hinzufügen.

WOT Warnhinweis

Natürlich kann der Warnhinweis auch in den Einstellungen des Add-on deaktiviert werden.

Was ist nun eigentlich der große Unterschied zwischen WOT und anderen Web Sicherheitsdiensten wie etwa McAfee’s SiteAdvisor?
In erster Linie die Reaktionszeit der Community bei Änderungen des Status einer Webseite. Wird z.B. eine bisher sichere Webseite gehackt und verbreitet dadurch Schädlinge, reagiert die WOT-Community im allgemeinen sehr schnell darauf. Irgend jemand aus der WOT-Community bemerkt den Schädling auf der Seite und hinterlässt einen Beitrag im WOT-Forum. Jetzt wird die Seite analysiert, neu kategorisiert und bewertet. Binnen kurzer Zeit wird bei einem Besuch der Seite vom Add-on eine Warnung ausgegeben. Dem SiteAdvisor währe diese Veränderung erst beim nächsten Besuch des Bot aufgefallen.
Genau so verhält es sich auch anders herum. Der Seitenbetreiber wird entweder durch die jetzt schlechte Reputation seiner Seite darauf aufmerksam, oder er wird direkt kontaktiert. Nachdem der Seitenbetreiber den Schädling entfernt hat und seine Seite neu “abgedichtet” wurde, kann binnen kurzer Zeit eine Neubewertung der Seite vorgenommen werden. Meist ist dann die Reputation der Seite recht schnell wieder hergestellt. Beim SiteAdvisor und anderen bot-gesteuerten Diensten währe hier wieder viel Zeit vergangen.

Wenn man diese Zeile so liest, könnte der ein oder andere dem Gedanken verfallen:

“Da schwärz ich jetzt einen Mitbewerber an und verpass ihm dadurch eine schlechte Reputation.”

Weit gefehlt. Das Bewertungssystem hinter WOT ist, laut Aussage des Betreibers, ziemlich resistent gegen solche Betrugsversuche. Genaueres kann man in der FAQ der WOT Wicki unter dem Punkt Reputations are easy to manipulate nachlesen.

Obwohl die Basis der Webseitenbewertung die WOT-Community darstellt, vertraut WOT nicht ausschließlich seinen Benutzern. Es werden eine ganze Reihe sogenannter Trusted Sources verwendet. Erst vor relativ kurzer Zeit wurde LegitScript, ein Dienst zur Verifizierung von Onlineshops für pharmazeutische Produkte, als weitere vertrauenswürdige Quelle aufgenommen. Auch bekanntere Dienste wie etwa SpamCop oder PhishTank werden genutzt.

Abgesehen vom eigenen Dienst, bietet die WOT Wicki noch einiges mehr. Für Interessierte in Fragen Sicherheit, Reputation und Informationen über Phishing und Co ist eine ganze Litanei von nützlichen Online Tools vorhanden.
Entwicklern wird mit der WOT API eine einfache Möglichkeit geboten, mit eigenen Anwendung die Reputation von Webseiten anzuzeigen.
Die allgemeinen Geschäftsbedingungen der API-Nutzung sind sehr moderat gehalten. Es wird kein API-Key oder ähnliches verlangt. Lediglich mit den Ressourcen sollte sparsam umgegangen werden. So sind die API-Aufrufe auf 50.000 pro 24 Stunden begrenzt. Auch sollten nicht mehr als 10 Aufrufe pro Sekunde erfolgen. Die empfohlene Verwendung eines Cache, um nicht immer wieder die selben Informationen abzurufen, ist selbstredend.

Fazit:

Mit WOT wird dem gemeinen Internetbenutzer ein wirkungsvolles Werkzeug an die Hand gegeben, dass ihnen auch Gehör verschaffen kann. Viele Webseitenbetreiber sind der Meinung, keinerlei Auskünfte über Datenschutz und die Verwendung der erhobenen Daten erteilen zu müssen. Viele Betreiber sammeln hemmungslos Daten, gerade Google Analytics rückt hier immer wieder in den Fokus, und erwähnen diesen Umstand mit keinem Wort in ihrer Datenschutzerklärung. Auch denken viele Betreiber immer noch, eine Datenschutzerklärung währe nur Nonsens. Mit WOT kann sich hier der Benutzer Gehör verschaffen. Spätestens wenn die Reputation einer Seite im Keller ist und eine Warnung beim Aufruf der Seite erfolgt, zeigen sich besagte Seitenbetreiber diskussionsbereit.

Technorati-Tags: | | |

.NET Day Franken 2010

03.07.2010 16:07:22 | Damir Tomicic

Wie bereits angekündigt [1] fand der erste ".NET Day Franken" in Nürnberg statt. Und es war Klasse!

Mehr als 100 Teilnehmer fanden den Weg in das Konferenzzentrum des brandneuen NH Hotels in Nürnberg. Ein interessiertes und wirklich kompetentes Publikum. Es hat mir sehr viel Spaß bereitet die Keynote des Events zu halten, obwohl ich gesundheitlich angeschlagen war. Es freute mich auch sehr zu sehen, dass die Keynote gut angekommen ist. Ganz lieben Dank für die hervorragenden Bewertungen. :-)

 

Neben mir standen viele bekannte Gesichter der .NET-Szene in Deutschland auf dem Podium und lieferten tolle Vorträge: Christian Weyer, Golo Roden, Constantin Klein, Thomas Haug, Martin Vollmer, Thomas Hemmer, Jürgen Laude, Thorsten Hans, Hannes Mühlenberg und Daniel Meixner. Hohe Qualität in der Metropolregion.

Nicht zuletzt geht ein dickes Lob an Bernd, Tom und Moni für eine fantastische Organisation und die Durchführung des Events. Besten Dank dafür!

  

[1] http://tomicic.de/2010/05/17/KeynoteBeimNETDayFranken.aspx
[2] http://www.dotnet-day-franken.de/

Whitepaper 2010 Winter Olympics in Vancouver

03.07.2010 15:36:48 | Damir Tomicic

Als Folgebeitrag zur "Media Transformation Story" [1] empfehle ich den gerade veröffentlichten Whitepaper zu den Hintergründen der IT-Infrastruktur bei den Olympischen Winterspielen in Vancouver.

[1] http://tomicic.de/2010/05/14/TellingTheMediaTransformationStoryTheOlympicGames.aspx
[2] http://learn.iis.net/page.aspx/900/nbc-online-video-monetization-and-highlights-creation-for-the-2010-winter-olympics/

Eine der interessanten neuen Entwicklungen ist der Silverlight Rough Cut Editor, eine Lösung zur Bearbeitung von IIS Smooth Streaming Video-Dateien, die inzwischen kostenfrei zur Verfügung gestellt wurde.

Abhängige Komponenten mit TFS 2010 Version Control verwalten

02.07.2010 18:18:10 | Christian Binder


Hinweis: Dieser Beitrag ist ein Working Draft, also noch weit entfernt von Fertig. Dennoch möchte ich die Informationen in diesem Status bereitstellen und das Feedback der Community einfließen lassen. Schon jetzt möchte ich vor allem für das Inhaltliche Feedback der AIT und Artiso bedanken. Wir planen, aus diesem Beitrag, wenn der entsprechende Reifegrad erreicht ist, ein Whitepaper zu erstellen.

Download als Dokument

Working Draft 0.1

Viele Teams haben die Notwendigkeit Frameworks oder andere Komponenten, welche von anderen Entwicklungsprojekten verwendet werden, unter Versionsverwaltung zu stellen. Hierbei stellt sich die Frage, wie Updates einer solchen Komponente dann diesen Projekten bereitgestellt werden? Je nach Projekt gibt es die unterschiedlichsten Anforderungen an diesen Prozess. Zum Beispiel: Werden die Komponenten nur als Binaries oder in Form von Source Code referenziert? Soll das Projekt direkt alle Änderungen an der Komponente oder nur stabilisierte Updates erhalten? Kann die Branch- Struktur des Zielprojektes eine Version der Komponente referenzieren oder muss jeder Branch die Möglichkeit haben eine spezifische Version zu referenzieren? Und da sind wir schon mitten im Thema, Branches. Team Foundation Server verwendet Branches, um Code-Versionen zu isolieren, was leider voraussetzt, dass man erst das Konzept der Branches etabliert haben muss, um mit deren Mechanismen Komponenten, die der Versionierung unterliegen, einem Projekt bereitzustellen. Es empfiehlt sich, aufbauend auf dem Visual Studio TFS Branching Guide 2010, das Thema Branches und Merges mit Team Foundation Server 2010 anzugehen.

clip_image002[8]

Bevor es dann losgeht, sei erwähnt, das dieses Dokument nicht den Anspruch auf Vollständigkeit der möglichen Szenarien hat, sondern vielmehr den schrittweisen Einstieg, der verschiedene Ansätze zeigt, um Einsteigern den ersten Schritt zu erleichtern. So fokussiere ich in den Szenarien den Ansatz mit Shared Code, wobei die Mechanismen natürlich für Shared Binaries ähnlich anwendbar und kombinierbar sind. Shared Binaries sind vor allem dann notwendig, wenn Komponenten anderer Hersteller Verwendung finden, für die kein Code vorliegt.

Szenario A) Shared Code mit First Class Branches:

Hierbei handelt es sich um ein sehr einfachen Ansatz, der in der Praxis allerdings nur begrenzt anwendbar ist. Warum wird er dennoch betrachtet? Weil er, wie ich finde, gut in die Thematik Einleitet und Limitationen aufzeigt, die Ihnen helfen sollen Ihr eigenen Anforderungen an das Shared Szenario zu definieren.

Im Team Project CommonLib wird die CommonDataAccessHelper Solution entwickelt, welche später dann von einem oder mehren anderen Projekten konsumiert werden soll, aber separat weiter entwickelt wird.
clip_image004[8]

Im nächsten Schritt konvertiere ich das Verzeichnis Main in einen Branch. Der Einfachheit halber soll Main auch der Branch sein, von der wir später in die entsprechen Consumer branchen. In komplexeren Projekten würde für diesen Zweck ein Release Branch von der Main erstellt werden, der eine stabilisierte Version des Shared Codes enthält.

clip_image006[8]

Jetzt erstelle ich ein Neues Team Project für den Consumer. In Main habe ich die PaymentSystem Solution hinzugefügt, welche den CommonDataAccessHelper verwenden soll:

clip_image008[7]

Ich füge nun ein Verzeichnis Common zu der ConsumerApp hinzu, das alle Branches von Shared Code enthalten soll. Optional könnte hier auch ein zusätzliches Verzeichnis für Shared Binaries angelegt werden.

clip_image010[7]

Im nächsten Schritt wird $CommonLib\Main nach $/ConsumerApp/Common/SharedDataAccessHelper „ge-branched“:

clip_image012[7]

Nun steht mir der Helper in der SharedDataAccessHelper Branch zur Verfügung und ich kann Ihn in der Payment Solution konsumieren. Unter $/ConsumerApp/Common/ würde nun für jeden Shared Code, wenn erforderlich, eine Branch erstellt werden, was letztendlich von den Anforderungen an die Granularität der Updates abhängt.

clip_image014[6]

Nachdem ich das CommonDataAccessHelper Projekt in die PaymentSystem Solution hinzugefügt und referenziert habe:

clip_image016[6]

kann ich die TXLogging Class verwenden:

clip_image018[6]

Das Team führt ein Update des Shared Codes in $CommonLib\Main durch:

clip_image020[6]

In der Historie kann man die Änderung im Chg99 sehen:

clip_image022[6]

Wenn man den Chg99 über die Branches verfolgt , sieht man, dass die $/ConsumerApp/Common/SharedDataAccessHelper Branch die Änderung noch nicht enhält und somit noch mit der vorhergehenden Version arbeitet:

clip_image024[6]

Durch einen Merge des Chg99 und Checkin wird das Update durchgeführt:

clip_image026[6]

Die Änderung ist jetzt in $/ConsumerApp/Common/SharedDataAccessHelper verfügbar und das Update wird von der PaymentSystem Solution verwendet:

clip_image028[6]

Für das häufige geforderte Szenario, dass unterschiedliche Helper Versionen in verschienden Branches z.B. DEV, MAIN, Release usw. referenziert werden sollen, ist dieser Ansatz NICHT geeignet, da unter Common eine Vielzahl von Branches für Shared Code entstehen würden, einzig um verschiede Versionen der Helper bereitzustellen. Daher das Szenario B, welches den Shared Code via Baseless Merge, also nicht als FirstClass Branch dem Konsumenten bereitstellt.

Szenario B) Shared Code mit Baseless Merge

Dieses Szenario greift den Ansatz von Szenario A auf, ohne $CommonLib\Main als eigene FirstClass Branch in die $ConsumerApp zu branchen. Daher kann das Verzeichnis $ConsumerApp\Common in den folgenden Screenshots einfach ignoriert werden. Vielmehr habe ich unter $ConsumerApp\Main das Verzeichnis CommonBin und CommonSrc angelegt. CommonBin würde alle Shared Binaries enhalten. CommonSrc den Shared Code, also die Solutions deren Projekte referenziert werden. Der Unterschied zu Szenario A ist, dass der Shared Code Teil jedes einzelnen Branches des Konsumers ist.

clip_image030[6]

Da eine FirstClass Branch, keine andere FristClass Branch enthalten kann, muss man hier einen anderen Mechanisums nutzen, der es erlaubt $CommonLib\Main nach $ConsumerApp\Main\CommonSrc zu Mergen. Hierzu wird einmalig eine Verknüpfung zwischen Quelle und Ziel mit einem Baseless Merge erstellt. Im Visual Studio Prompt und mit TF.exe kann diese Verknüpfung erstellt werden:

clip_image032[7]

Im Source Control Explorer wird der Baseless Merge wie folgt angezeigt:

clip_image034[6]

Jetzt noch den Check-In durchführen:

clip_image036[6]

Nun ist Grundlage für den Merge von $CommonLib\Main nach $ConsumerApp\Main\CommonSrc gegeben. $ConsumerApp\Main\CommonSrc steht als Target Branch zur Verfügung:

clip_image038[6]

clip_image040[6]

Check-in des Merges:

clip_image042[6]

Fertig. Im letzten Schritt noch analog zu Szenario A das CommonDataAccessHelper Projekt in die PaymentSystem Solution hinzufügen und referenzieren.

clip_image044[6]

Ein Update in $CommonLib\Main kann dann nach Bedarf nach $ConsumerApp\Main\CommonSrc ge-merged werden und steht dann zur Verfügung.

clip_image046[6]

In diesem Beispiel liegen die abhängigen Komponenten direkt im Branch des Konsumenten. Normalerweise gibt es aber mehrere Branches z.B. MAIN, DEV, Release:

clip_image048[6]

Updates würden, wenn möglich, immer über $ConsumerApp\Main laufen. Ein Update, welches von $CommonLib\Main nach $ConsumerApp\Main\CommonSrc durchgeführt wurde, würde dann innerhalb der FirstClass Branches via Forward Integration an die anderen Branches weiter gegeben werden. Dies ist das einfachste Szenario.

In der Praxis möchte man aber vielleicht nicht von $CommonLib\Main direkt nach $ConsumerApp\Main branchen, sondern erst in einer Development Branch den neuen Helper testen, zum Beispiel in $ConsumerApp\DEV . Hierzu müsste man wiederum einen Basless Merge erstellen und im Anschluss eine Reverse Integration nach $ConsumerApp\Main durchführen. Andere Branches unter $ConsumerApp erhalten das Update via Forward Integration.

clip_image050[6]

Das gleiche gilt, wenn man nicht von $CommonLib\Main branched, sondern von einem Release Branch im Helper zum Beispiel $CommonLib\Releases\R1, was durchaus üblich ist.

Hinweis: An dieser Stelle sein noch erwähnt, dass mit dem Tool tf.exe ein Merge und Branch auf Basis eines Labels möglich ist. Da Team Build einen Label bei jedem Build erzeugt, könnte man zum Beispiel von einen Build der $CommonLib\Main einen Branch erzeugen.

Wenn Änderungen am CommonDataAccessHelper innerhalb der ConsumerApp erlaubt sind, könnte man diese dann z.B. von $ConsumerApp\DEV > $ConsumerApp\Main > $CommonLib\Main mittels Reverse Integration überführen. Ich würde diesen Ansatz aber vermeiden, da er die Komplexität erhöht.

Ein Wort zur Visualisierung. Im Falle der Baseless-Merges werden Integrationen aus dem CommonLib-Projekt nicht mehr in der Branch-Hierarchie visualisiert. Hier sollte ein Konzept, z.B. auf Basis von Builds und der Historie helfen, nachvollziehen zu können, welche Bug-Fixes integriert wurden.

Letztendlich muss man sich ein klares Bild über den Fluss der Updates zwischen Helper und Konsumenten auf Basis des gewählten Branch Modells machen und die Mechanismen entsprechend anwenden. Weniger ist hier meistens mehr. Bei entsprechend komplexen Applikationen mit vielen Komponenten, gilt es einige dieser Mechanismen zu automatisieren.

Szenario C) Shared Code mit Workspace Mappings

Dieses Szenario führt den Shared Code nicht auf dem Server zusammen, sondern auf dem Client im Workspace.
ToDo :-)

Ist dieses Dokument fertig? Noch lange nicht. Backlog:

1) Einfaches Beispiel mit Shared Binaries?

2) Dependency Replication aus Build?

3) Workspace Mapping Konzepte

4) Multiple Solutions

5) Branch by Label

6) Rekursiver Build

Gewinner der 2. Blog-Parade

02.07.2010 13:31:40 | Peter Kirchner

Vielen Dank an alle Teilnehmer der 2. Blog-Parade und für die vielen Ideen zum Einsatz von Windows Azure! Man hat gemerkt, dass wirklich viele Ideen existieren, wie man Windows Azure sinnvoll einsetzen kann. Auch wenn es uns schwer gefallen ist, konnten wir nur drei Glückliche aus allen Teilnehmern ziehen. Die drei Gewinner wurden auch bereits benachrichtigt und sollten demnächst Post von uns bekommen. :-)

Für alle, die sich mit dem Thema Cloud Computing weniger beschäftigt haben, kann ich nur empfehlen, sich einmal die Ideen der Teilnehmer anzusehen. Vielleicht ist ja für den einen oder anderen eine Inspiration zu einer neuen Geschäftsidee dabei! :-)

Die drei Gewinner der Blog-Parade sind:

1. Mandy L. aus Erbach

2. Mario B. aus Potsdam

3. Markus K. aus Ludwigsburg

 

Für alle, die dieses Mal leider nicht gewonnen haben, wünsche ich jetzt schon einfach mal viel Glück für das nächste Mal!

Juli 2010: Microsoft MSDN Forum, TechNet Forum und Answers Forum Update und aktuelle Forenstruktur

02.07.2010 11:41:54 | Kay Giza

Ab Juni 2010 haben wir damit begonnen, Newsgroups zu schließen und Benutzer auf Microsoft-Foren wie Microsoft Answers, TechNet und MSDN zu migrieren. Durch diese Maßnahme werden Inhalte zentralisiert, Redundanzen werden verringert und Inhalte werden leichter auffindbar gemacht. Alles in allem bieten die Microsoft-Foren bessere Möglichkeiten zur Spambekämpfung, wodurch es möglich wird, den Diskussionsort angenehmer zu gestalten und damit die Zufriedenheit zu steigern. Für mich persönlich gesehen ist dies ein Generationswechsel. Wie es bei einem Generationswechsel meistens ist, gibt es viele Fürsprecher aber natürlich auch Kritik. Ich meine, das ist auch vollkommen gut so und ich glaube, dass wir hier in Deutschland sehr offen, sehr ehrlich und sehr transparent mit der "Community" im Dialog sind und auch gemeinsam Entscheidungen treffen sowie auf konstruktive Kritik sehr genau eingehen. Der für mich sicherlich am größten erscheinende Vorteil (von vielen) ist, das Benutzer nun die ganze Vielfalt webbasierter Online-Foren nutzen können, beispielsweise kann man direkt anklickbare Text-Hyperlinks einfügen, Bilder und Screenshots können direkt eingebunden werden und unterstützen die Problemlösung oder -Erklärung. Weiterhin können so genannte CodeSnippets (einfügen von diversem Code) über einen Rich-Text-Editor einfügt und übersichtlich und koloriert dargestellt werden. Mit diesem Posting möchte ich gerne die aktuelle Foren-Struktur hier posten und auf die wichtigsten Themen aufmerksam machen… […mehr in diesem ausführlichen Blogposting auf Giza-Blog.de]

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

Glückwunsch zum Microsoft MVP 2010!

02.07.2010 10:41:00 | Gregor Biswanger

MVPLogo

Hallo Community,

ganz nach meinem Motto: “Es gibt sicher viele Wege, anderen Menschen zu helfen. Aber es gibt nur einen Weg zu leben: anderen Menschen zu helfen.”.. Überraschte mich gestern eine E-Mail von Microsoft die meine Einstellung zum Leben belohnte:

Sehr geehrte(r) Gregor Biswanger,
herzlichen Glückwunsch! Wir freuen uns, Ihnen den Microsoft® MVP Award 2010 verleihen zu können! Diese Auszeichnung wird an herausragende, führende Mitglieder der technischen Communities verliehen, die ihre wertvollen praktischen Erfahrungen mit anderen Menschen teilen. Wir schätzen Ihren außerordentlich bedeutenden Beitrag in den technischen Communities zum Thema Client App Dev im vergangenen Jahr hoch ein.

 

Deutschlandweit angefangen von Konstanz bis hin zu Hamburg wurde ich immer wieder unter den Communties mit fragenden Blicken angesprochen, weshalb ich kein MVP sei. Nun kann ich mit ganzen stolz berichten: “Ich bin MVP!”.

Erst mal ein großes Danke an Microsoft und an folgende Personen die mir den Einstieg in die Community-Welt brachten:

Danke an Markus Winhard für die Gründung von INdotNET - Ingolstädter .NET Developers Group, das mir dadurch die “Sucht” zur Community gegeben hat…

Danke an Robert Walter, der mir stets beiseite stand mit zahlreichen Community- oder Konferenzbesuchen und mich durch Feedback immer besser machte…

Danke an Peter Nowak (MVP für Device Application Development) - ohne Dich hätte ich nie das Schreiben begonnen...

Danke an meine Firma impuls, die meine Aktivitäten so stark unterstützt und meine Arbeit so hoch schätzt…

Danke an Euch, der Community! Die sich für meine Vorträge, Artikel und Videos interessieren und mich durch Ihr Interesse immer noch mehr pushen… wie MJ auch sagen würde: “Ich Liebe Euch!”

Automatisierung des Windows 7 Phone Emulators

01.07.2010 20:11:00 | Martin Hey

Eine Windows Phone 7 Anwendung erstellen ist so einfach: Man öffnet Visual Studio und erzeugt ein neues Projekt auf Basis des Windows Phone Templates; entwickelt die Anwendung und deployt sie auf den integrierten Phone-Emulator. Alles gut und schön, bis .... ja bis der Kunde sagt, er möchte sich das Look & Feel auch mal ansehen und die Anwendung ausprobieren.
Nun kann man dem Kunden ja schlecht sagen: "Hier sind die Sourcen. Installieren Sie das Windows Phone SDK. Öffnen Sie die Sourcen dann in Visual Studio (Express). Drücken Sie Compile. Und wenn Sie alles richtig gemacht haben, tut Visual Studio und der Emulator öffnet sich mit der Anwendung." Spätestens bei Schritt 4 dieser Anleitung steigt er aus und wird uns was flüstern.
Also muss eine für ihn einfachere Lösung her. Einen sehr guten Post zu diesem Thema hat Justin Angel vor kurzem verfasst, den ich hier aufgreifen möchte. Dabei wird eine Konsolenapplikation erstellt, die beim Kunden Windows Phone 7 emulieren und die Anwendung installieren und starten kann.
Zunächst erstellt man eine Konsolen-Applikation und referenziert die Datei Microsoft.SmartDevice.Connectivity.dll, welche sich im Ordner "C:\Program Files\Common Files\microsoft shared\Phone Tools\CoreCon\10.0\Bin" befindet und schon kann die Implementierung beginnen. Die durchzuführenden Schritte sind:
  • Windows Phone 7 CoreCon SDK Instanz holen
  • Emulator instanziieren
  • zum Emulator verbinden
  • vorherige Versionen deinstallieren
  • XAP-Datei installieren
  • Anwendung starten
In Quellcodezeilen ausgedrückt sieht das in etwa wie folgt aus:

string appGuid = "{8bf5502f-8d01-4b06-abd8-d3195e838cfd}";
string appXAP = "MyApplication.xap";

// Get CoreCon WP7 SDK
DatastoreManager dsmgrObj = new DatastoreManager(1033);
Platform WP7SDK = dsmgrObj.GetPlatforms().Single(p => p.Name == "Windows Phone 7");

// Get Emulator / Device
bool useEmulator = true;
Device WP7Device = null;
if (useEmulator)
WP7Device = WP7SDK.GetDevices().Single(d => d.Name == "Windows Phone 7 Emulator");
else
WP7Device = WP7SDK.GetDevices().Single(d => d.Name == "Windows Phone 7 Device");

// Connect to WP7 Emulator / Device
Console.WriteLine("Connecting to Windows Phone 7 Emulator/Device...");
WP7Device.Connect();
Console.WriteLine("Windows Phone 7 Emulator/Device Connected...");
Guid appID = new Guid(appGuid);
RemoteApplication app;
if (WP7Device.IsApplicationInstalled(appID))
{
Console.WriteLine("Uninstalling sample XAP to Windows Phone 7 Emulator/Device...");

app = WP7Device.GetApplication(appID);
app.Uninstall();

Console.WriteLine("Sample XAP Uninstalled from Windows Phone 7 Emulator/Device...");
}

// Install XAP
Console.WriteLine("Installing sample XAP to Windows Phone 7 Emulator/Device...");

string curdir = ApplicationPath();

app = WP7Device.InstallApplication(
appID,
appID,
"NormalApp",
curdir + @"\ApplicationIcon.png",
curdir + "\\" + appXAP);
Console.WriteLine("Sample XAP installed to Windows Phone 7 Emulator...");

// Launch Application
Console.WriteLine("Launching sample app on Windows Phone 7 Emulator...");
app.Launch();
Console.WriteLine("Launched sample app on Windows Phone 7 Emulator...");

Wichtig ist der Name der XAP-Datei, damit die Anwendung installiert sowie die Guid der Anwendung (zu ermitteln aus der WMApplication.xaml), damit die Anwendung vom Gerät auch wieder deinstalliert werden kann.

Überblick zum IE9 Platform Preview 3

01.07.2010 16:04:00 | Oliver Scheer

Eine deutschsprachige Übersicht zum Internet Explorer 9 Platform Preview 3, dem an Entwickler gerichteten Ausblick auf die kommende Browser-Generation von Microsoft, steht jetzt auf 5 kompakten Seiten zum Abruf bereit. Erfahren Sie, welche Leistungssteigerungen bereits erreicht wurden, wie verstärkte Interoperabilität und konsequente Standardkonformität in diesem frühen Entwicklungsstand implementiert werden, und wie IE9 mit HTML5, CSS3 sowie SVG eine neue Generation von Weberfahrungen ermöglichen wird, auf die Sie sich dank der regelmäßigen Previews als Entwickler schon heute vorbereiten können, bevor der breiten Öffentlichkeit eine Betaversion des Browsers zur Verfügung stehen wird. Das Fact Sheet zur Internet Explorer 9 (IE9) Platform Preview 3 steht als als PDF- oder als XPS-Dokument bereit.

Dritte Internet Explorer 9 Platform Preview verfügbar

01.07.2010 14:03:41 | Oliver Scheer

Gerichtet an Web-Entwickler, stellt Microsoft auf den IE Test Drive-Seiten die nunmehr 3. Vorschauversion zum kommenden Internet Explorer 9 (IE9) vor – die Sie parallel zu einer bestehenden Internet Explorer Version installieren können. Mit den Preview-Versionen, die bis zum Erscheinen einer öffentlichen Beta-Version etwa im 8-Wochen-Rhythmus erscheinen, verschafft Microsoft Entwicklern den Einblick in den Fortschritt der Browsertechnologie, von Verbesserungen an Markup über Leistungsverbesserungen und Nutzung von Hardwarebeschleunigung bis zu neuen Beispielen für Entwickler.
Die Neuerungen der aktuellen Preview umfassen neben der Abarbeitung Ihres Feedbacks über die Connect-Seiten konkret die Verfügbarkeit der HTML5-Tags audio, video und canvas, schnelleres JavaScript, Standardverbesserungen (inkl. ES5 und WOFF) und verbessertes Acid 3-Ergebnis, neue W3C-Tests sowie 15 neue Beispiele für Entwickler zu den Themen Performance, Grafik und HTML5. Weitere Informationen finden Sie auch im MSDN Internet Explorer Developer Center oder im Internet Explorer 9 Testing Center.
Zum herunterladen steht außerdem ein deutschsprachiges Fact Sheet zur Internet Explorer 9 (IE9) Platform Preview 3 als als PDF- oder als XPS-Dokument bereit.

Stern Gallerie mit Deep Zoom

01.07.2010 09:29:51 | Oliver Scheer

Unter http://www.stern.de/gallery/ setzt mit Stern.de eine der größten deutschen und innovativsten Websites auf Silverlight. Die Bilder werden automatisiert aus RSS-Feed gelesen und täglich aktualisiert. Die Lösung basiert auf SilverHD.net, welches sich am neuartigen METRO-Design, dem Lock-and-Feel der Windows Phone 7 Geräte, orientiert. Hochauflösende Bilder werden in HD Qualität darstellt, Möglichkeiten zur Integration von Videos, Blogs und Social Media sind über ein einfaches Webinterface ermöglicht. Die SilverHD Gallery generiert bis zu 50% mehr Page-Impression als klassische Gallerien und erhöht dank der neuartigen User Experience für eine Steigerung der Verweildauer der Nutzer.

Deutsche Texte in Infragistics NetAdvantage 10.2

01.07.2010 01:53:59 | Andre Kraemer

Wie Craig Shoemaker bereits in seinem Blog geschrieben hat, werden die Infragistics NetAdvantage Controls für Silverlight und WPF ab der Version 10.2 auch mit Deutschen Oberflächentexten ausgeliefert. In diesem Beitrag möchte ich die Notwendigen Schritte noch einmal im Schnelldurchlauf in deutscher Sprache am Beispiel von Silverlight erläutern.

Initiales Setup

Mein Silverlightprojekt besteht aus einer einzigen Seite, in der ein XamGrid definiert wurde:

<UserControl x:Class="NAGermanLocalization1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400" xmlns:ig="http://schemas.infragistics.com/xaml">

    <Grid x:Name="LayoutRoot" Background="White">
        <ig:XamGrid HorizontalAlignment="Left" Name="xamGrid1" VerticalAlignment="Top"  AutoGenerateColumns="false"  >
            <ig:XamGrid.FilteringSettings>
                <ig:FilteringSettings AllowFiltering="FilterMenu" />
            </ig:XamGrid.FilteringSettings>
            <ig:XamGrid.GroupBySettings>
                <ig:GroupBySettings AllowGroupByArea="Top" />
            </ig:XamGrid.GroupBySettings>
            <ig:XamGrid.Columns>
                <ig:TextColumn Key="Id" />
                <ig:TextColumn Key="Name"/>
                <ig:TextColumn Key="Vorname"/>
                <ig:TextColumn Key="Land" />
            </ig:XamGrid.Columns>
        </ig:XamGrid>
    </Grid>
</UserControl>

Für das Grid habe ich wie der vorherige Codeausschnitt zeigt Filtern und Gruppieren aktiviert.

Meine Codebehind Datei sieht ähnlich schmal aus:

using System.Collections.Generic;
using System.Windows.Controls;

namespace NAGermanLocalization1
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
            InitGrid();
        }

        private void InitGrid()
        {
 	        List<Kunde> kunden = new List<Kunde>();
            for (int i = 0; i<10; i++)
            {
                Kunde kunde = new Kunde{Id = i, Name = string.Format("Name {0}", i), Vorname = string.Format("Vorname {0}", i), Land = "DE"};
                kunden.Add(kunde);
            }
            xamGrid1.ItemsSource = kunden;
        }
    }

    public class Kunde
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Vorname { get; set; }
        public string Land { get; set; }
    }
}

An der Oberfläche schaut das ganze nun wie folgt aus:

GridVorher

DialogVorher

Und einmal auf Deutsch bitte ...

Um das ganze nun zu lokalisieren, sind lediglich zwei Schritte erforderlich.

Zunächst muss das Silverlight Projekt entladen und anschließend im Textmodus editiert werden:

unloadproject editproject

Der vorhandene leere Tag SupportedCultures muss mit dem Wert de versehen werden.

supportedcultures

Anschließend muss die Projektdatei gespeichert und erneut geladen werden. Als letzter Schritt muss dann innerhalb der Webseite, die das Silverlight Control hostet noch die Zeile <param name="uiculture" value="de" /> innerhalb des Object Tags eingefügt werden:

uiculture

Wenn nun nichts schief gegangen ist, sollten die Oberflächentexte nun auf Deutsch erscheinen:

GridNachher

DialogNachher

Fazit

Lokalisierte Oberflächen werden mit Infragistics NetAdvantage 10.2 zum Kinderspiel, da das umständliche Setzen der Oberflächentexte über die runtime resource-string customization in Zukunft entfällt.

Regeln | Impressum