.
Anmeldung | Registrieren | Hilfe

.NET-Blogs Archiv Dezember 2009

DI / IoC mit LightCore

31.12.2009 17:00:00 | Jürgen Gutsch

Was für Peter Bucher vor Monaten als Einstieg in TDD begonnen hatte, ist inzwischen ein Framework für Dependency Injection und Inversion of Control geworden.

Entstanden ist das kleine, feine uns super schnelle LightCore :-)

Ich selber nutze LightCore schon seit dem ersten Beta-Status in einem eigenem Projekt und bin bereits dabei LightCore in die Website des .NET-Stammtisch Konstanz-Kreuzlingen (http://dotnetkk.codeplex.com/) einzubinden.

Die Features von LightCore können hier angeschaut werden:
http://lightcore.peterbucher.ch/features.aspx

Der Download der aktuellen Version per SVN ist hier beschrieben:
http://lightcore.peterbucher.ch/download.aspx

DotNetKicks-DE Image

LINQ und LINQ to SQL

30.12.2009 14:28:00 | Jürgen Gutsch

Neulich erhielt ich eine E-Mail mit einigen Fragen zur Verwendung von “LINQ to SQL” in n-Tier-Applikationen, die ich hier anonymisiert beantworten möchte:

Wie sieht Microsoft beim Einsatz von “LINQ to SQL” die Machbarkeit von n-Tier-Applikationen, die über eine separate Datenzugriffsschicht verfügen?

Da ich nicht Microsoft bin und auch kein offizielles Statement von Microsoft zu dieser Problematik kenne, kann ich diese Frage so nicht beantworten. Ich kann nur sagen, dass es Beispiel-Applikationen von Microsoft gibt, in denen durchaus “LINQ to SQL” innerhalb der Datenzugriffsschicht eingesetzt wird.

Wenn ich das richtig sehe, krankt “LINQ to SQL” bei seiner Nutzung mit .NET daran, dass ich bei der Nutzung aller automatisch generierten Objekte auf allen Ebenen der Anwendung einen Verweis auf “LINQ to SQL” benötige, oder?

Wenn man die automatisch generierten Objekte in der ganzen Applikation nutzen möchte, ist das sicher so. Aufgrund von der Austauschbarkeit der Datenzugriffsschicht würde ich allerdings empfehlen diese automatisch generierten Objekte nicht über alle Schichten hinweg zu verwenden, sondern “LINQ to SQL” komplett in der Datenzugriffsschicht zu kapseln.

Oder ich führe eine (aufwändig zu implementierende) Mapping-Schicht ein, in der ich die “LINQ to SQL”-generierten Datenklassen in anwendungsinterne Objekte übersetze.

Das wäre eine Möglichkeit, aber aus meiner Sicht nicht empfehlenswert. Ich würde bei einer klassischen 3-Schicht-Architektur eine vierte parallele vertikale Schicht einbinden, welche die Datenobjekte enthält die über alle Schichten hinweg zur Verfügung stehen sollen.

Die Datenzugriffsschicht ist dann verantwortlich für das bereitstellen der Daten und das Mappen der Daten in die Datenobjekte der vierten parallelen vertikalen Schicht.

Für den Fall, dass mal per “LINQ to XML” auf eine XML-Datenbasis zugegriffen werden soll, muss so nur die Datenzugriffsschicht ausgetauscht werden.

Auch wenn ich Benutzeroberfläche (Grids, etc.) an “LINQ to SQL”-Results binden möchte, habe ich das Problem, dass ich damit ja die Datenlogik in die GUI ziehe, und damit die eigentlich unterste mit der eigentlich obersten Schicht verbinde...?

Auch das ist ein Grund für die oben beschriebene parallele vertikale Anwendungsschicht. “LINQ to SQL” ist auf diese Art komplett von den anderen Schichten entkoppelt und die Datenzugriffsschicht liefert nur die gewünschten Objekte.

DotNetKicks-DE Image

List of active extensions in BlogEngine.NET

30.12.2009 02:48:31 | Gordon Breuer

Ab sofort kann man die in meinem Blog verwendeten Erweiterungen für die BlogEngine.NET welche zur Zeit aktiv genutzt werden einsehen. Hierfür habe ich eine Seite erstellt, die alle aktiven Erweiterungen ausliest und in einer Tabelle darstellt. Den meisten wird diese Anzeige aus dem Adminbereich bekannt vorkommen, jedoch ist natürlich hier die Anzeige des Quellcodes, die Priorität und das Ein- und Ausschalten der Erweiterungen deaktiviert.

Diese Liste wird im Footer des Blogs nach der Versionsnummer verlinkt. Für die Anzeige der Anzahl der aktiven Erweiterungen habe ich der Einfachheit halber auf die Erweiterungsmethode count() des .NET Frameworks 3.5 zurückgegriffen:

int extensionCount = ExtensionManager.Extensions.Count(
x => x.Name != "MetaExtension");

Wer noch die ursprüngliche Konfiguration der BlogEngine.NET unter .NET 2.0 betreibt muss an dieser Stelle auf eine foreach-Schleife zurückgreifen:

int extensionCount = 0;
foreach (ManagedExtension x in ExtensionManager.Extensions)  
if (x.Name != "MetaExtension")
   extensionCount++;

Wer sich noch meine Umsetzung der extensions.aspx ansehen möchte, kann die Datei hier herunterladen. Diese ist jedoch an mein aktuelles Blog-Layout angepasst und benötigt daher noch einige Änderungen für eine optimale Darstellung im eigenen Blog. Als Muster kann hier die Page.aspx herangezogen werden.

FileDefault

BEExtensions.zip (1.4KB)

kick it on .NET Kicks Germany

[addlang]

I have included a new page to my blog to show a list of all active BlogEngine.NET extensions. Most users will recognize this table from the admin panel but without priority, viewing sourcecode and (de-)activate buttons.

This list is linked in my footer after the version number of my installed BlogEngine.NET instance. To count the active extensions I used the extension method count() of the .NET framework 3.5:

int extensionCount = ExtensionManager.Extensions.Count(
x => x.Name != "MetaExtension");

Those of you who are running the original compile of BlogEngine.NET with the .NET framework 2.0 should use a foreach-loop to count the active extensions:

int extensionCount = 0;
foreach (ManagedExtension x in ExtensionManager.Extensions)  
if (x.Name != "MetaExtension")
   extensionCount++;

If you are interested on my implementation of the extension list you can download my extensions.aspx from the link below. Before using it in your productive environment you have to customize the layout to your own theme. You may take a look at the Page.aspx for references.

FileDefault

BEExtensions.zip (1.4KB)

kick it on DotNetKicks.com

List of active extensions in BlogEngine.NET

29.12.2009 16:48:31 | Gordon Breuer

This article is also available in English! This article is also available in English!

Ab sofort kann man die in meinem Blog verwendeten Erweiterungen für die BlogEngine.NET welche zur Zeit aktiv genutzt werden einsehen. Hierfür habe ich eine Seite erstellt, die alle aktiven Erweiterungen ausliest und in einer Tabelle darstellt. Den meisten wird diese Anzeige aus dem Adminbereich bekannt vorkommen, jedoch ist natürlich hier die Anzeige des Quellcodes, die Priorität und das Ein- und Ausschalten der Erweiterungen deaktiviert.

Diese Liste wird im Footer des Blogs nach der Versionsnummer verlinkt. Für die Anzeige der Anzahl der aktiven Erweiterungen habe ich der Einfachheit halber auf die Erweiterungsmethode count() des .NET Frameworks 3.5 zurückgegriffen:

int extensionCount = ExtensionManager.Extensions.Count(
x => x.Name != "MetaExtension");

Wer noch die ursprüngliche Konfiguration der BlogEngine.NET unter .NET 2.0 betreibt muss an dieser Stelle auf eine foreach-Schleife zurückgreifen:

int extensionCount = 0;
foreach (ManagedExtension x in ExtensionManager.Extensions)  
if (x.Name != "MetaExtension")
   extensionCount++;

Wer sich noch meine Umsetzung der extensions.aspx ansehen möchte, kann die Datei hier herunterladen. Diese ist jedoch an mein aktuelles Blog-Layout angepasst und benötigt daher noch einige Änderungen für eine optimale Darstellung im eigenen Blog. Als Muster kann hier die Page.aspx herangezogen werden.

FileDefault

BEExtensions.zip (1.4KB)

kick it on .NET Kicks Germany

TeamSpeak 3 Sidebar Gadget für Windows Vista und Windows 7

28.12.2009 21:51:00 | Andreas Mehl

I have programmed a Sidebar Gadget for TeamSpeak v.3 and v.2.

It can be changed in a small gadget block or a big one. real easy to do.

 

Screenshots can be found here: Screenshots


Configuration as follows:

under Settings insert the TeamSpeak Viewer ID or the server informations

Download Sidebar Gadget Teamspeak 3

Neue Blogs im dotnet-forum.de

28.12.2009 20:18:51 | Jan Welker

Wie ich hier schon einmal berichte habe, besteht innerhalb des dotnet-forum.de die Möglichkeit sich einen eigenen, kostenlosen Blog einrichten zu lassen.
Ich freue mich sehr, daß dieses Angebot seit einigen Wochen von zwei neuen Autoren genutzt wird.



Nico Franze ist freier Softwareentwickler sowie Autor für Fachzeitschriften. Er beschäftigt sich schon seit der Version 1.0 mit der .NET - Technologie. Seine Erfahrung, die er über die vielen Jahre gesammelt hat, gibt er in diesem Blog weiter.
Mit seinem Blogbeitrag Restriktiv vs. Robust hat er es geschafft, eine sehr rege Diskussion anzustoßen. Innerhalb weniger Tage wurde sein Blogposting über 40-mal kommentiert. Das findet man selten in der deutschen .NET – Bloglandschaft.



Auch Lars Schmitt bloggt nun im Forum. Er ist in vielen .NET Communities als BlackCoin bekannt.  Lars ist Microsoft Certified Professional, außerdem verstärkt Lars seit kurzem das Team des Forums. In seinem Blog geht es vorwiegend um das Thema WPF, zusätzlich informiert Lars über Neuigkeiten rund um das kommende Visual Studio 2010 und .NET 4.0.

Ebenfalls neu ist ein nicht öffentliches Unterforum in dem sich alle dotnet-forum.de - Blogger untereinander austauschen können.
Über diesen Weg konnten schon viele Wege gefunden werden die Blogs individuell anzupassen, wofür der Blog von Nico Franze das beste Beispiel ist.

Wer sich der wachsenden Bloggergemeinde anschließen möchte, kann gern Kontakt zu mir aufnehmen.

Lokalisierung von WPF Anwendungen: Die Lokalisierungs-API

27.12.2009 17:00:00 | Mathias Raacke

Dies ist der zweite Teil einer Artikelserie zu Lokalisierung von WPF Anwendungen. Nach einem allgemeinen Überblick über die Lokalisierung in Teil 1 erkläre ich in diesem Artikel, wie man WPF Anwendungen mit der WPF Lokalisierungsapi lokalisieren kann.

Satellitenassemblies

Soll eine Anwendung in mehrere Sprachen übersetzt werden, erzeugt man für jede Sprache eine Satellitenassembly, die alle zu übersetzenden Resourcen (Texte, Bilder usw.) in der jeweiligen Zielsprache enthält.

image

In WPF wird anders als in Windows Forms oder ASP.NET nicht mehr .resx als Resourcenformat für die Lokalisierung verwendet. Stattdessen werden komplette Formulare bzw. Steuerelemente in übersetzter Form in den Satellitenassemblies der jeweiligen Sprachen gespeichert.

Lokalisierung über .baml Dateien

WPF Formulare und Steuerelemente werden über .xaml Dateien beschrieben. Diese werden beim Übersetzen der Anwendung in ein binäres Format (.baml) übersetzt. Die .baml Dateien werden als Resourcen in den Assemblies der Anwendung gespeichert. So wird z.B. aus einer MainWindow.xaml eine MainWindow.baml, die dann z.B. in der Assembly Anwendung.exe als Resource gespeichert wird.

Wenn nun ein Formular bzw. Steuerelement in einer weiteren Sprache angeboten werden soll, muss die dazugehörige .baml Datei übersetzt als Resource in einer Satellitenassembly der Zielsprache vorliegen.

image

Um eine WPF Anwendung zu übersetzen müssen wir also die .baml Dateien der Anwendung übersetzen und in Satellitenassemblies speichern.

Außerdem benötigen alle Elemente in unseren .xaml Dateien, die übersetzt werden sollen, eine (pro Datei) eindeutige Bezeichnung in Form eines x:Uid-Attributs (mehr dazu in einem späteren Artikel).

Leider gibt es dafür keine Unterstützung in Visual Studio oder Blend. Auch in Visual Studio 2010 wird sich daran nichts ändern.

Die WPF Lokalisierungs-API

Stattdessen gibt es eine API, über die lokalisierte BAML Dateien erzeugt werden können. Diese API besteht im Kern aus einer Klasse, der Klasse BamlLocalizer.

BamlLocalizer

image

Die Klasse BamlLocalizer kann aus einer .baml Datei Resourcen extrahieren (ExtractResources-Methode) und später mit übersetzten Resourcen eine lokalisierte .baml Datei erzeugen (UpdateBaml-Methode).

Zunächst benötigen wir Zugriff auf die .baml Datei. Wir haben ja bisher nur die .xaml Dateien, für die BamlLocalizer-Klasse benötigen wir aber die binäre Form der .xaml Dateien im BAML Format.

Für den Zugriff auf die .baml Dateien bieten sich mindestens zwei Wege an: wir könnten die .baml Dateien aus dem fertig übersetzten Assemblies laden, oder die Dateien verwenden, die als “Zwischenprodukt” bei der Übersetzung unserer Anwendung anfallen.

Die erste Variante wird von Microsoft empfohlen und in Beispielen für die Lokalisierungs-API verwendet. Persönlich finde ich diesen Weg jedoch umständlicher, in meinen eigenen Lokalisierungstools verwende ich deshalb die .baml Dateien, die sowieso als “Abfallprodukt” bei der Übersetzung unseres Projekts erzeugt werden (diese Dateien befinden sich normalerweise “irgendwo” im Unterverzeichnis “obj” des WPF-Projekts).

Um eine .baml Datei übersetzen zu können, benötigen wir Zugriff auf die in der .baml Datei enthaltenen Resourcen (also Texte und sonstige Eigenschaften von Objekten, die wir übersetzen bzw. anpassen möchten). Diese Resourcen erhalten wir, indem wir die .baml Datei als Stream an den BamlLocalizer übergeben und die ExtractResources-Methode aufrufen.

image

BAML Resourcen – Das BamlLocalizationDictionary

Von der ExtractResources-Methode erhalten wir ein BamlLocalizationDictionary-Objekt, das alle Resourcen der .baml Datei enthält.

image

Jede Resource besteht aus einem Schlüssel und dazugehörigen Werten.

Der Schlüssel ist vom Typ BamlLocalizableResourceKey. Er besteht aus dem Namen der Eigenschaft, die in dem Eintrag gespeichert ist (PropertyName, z.B. “Text”), der Klasse, zu der diese Eigenschaft gehört (ClassName, z.B. “TextBlock”), dem Namen der Assembly, in der diese Klasse gespeichert ist (AssemblyName) und einer eindeutigen Bezeichnung (Uid). Die Eigenschaften des Schlüssels sind nicht veränderbar.

Zu jedem Schlüssel sind verschiedene Werte in Form eines BamlLocalizableResource-Objekts gespeichert. Die Wichtigste Eigenschaft dieses Objekts ist die Eigenschaft Content, über die der Wert der Eigenschaft gespeichert wird (z.B. “Hello World” als Wert für die Text-Eigenschaft des TextBlock-Objekts). Das ist der Wert, den wir übersetzen möchten. In den weiteren Eigenschaften können wir Informationen für den Übersetzer hinterlegen, der unsere Resourcen für uns übersetzen soll. In der Eigenschaft Comments können wir z.B. Kommentare und Hinweise für den Übersetzer speichern. Modifiable legt fest, ob der Übersetzer überhaupt diese Eigenschaft übersetzen darf. Mit Readable können wir festlegen, ob eine Eigenschaft für den Übersetzer sichtbar ist oder nicht. Über LocalizationCategory werden Resourcen in verschiedene Kategorien einteilen, z.B. “Text”, “Label”, “Button” usw..

Um die Einträge im BamlLocalizationDictionary übersetzen zu können, müssen wir die Inhalte des Dictionaries in irgendeiner Form speichern, z.B. in eine Datei oder in eine Datenbank. Dafür gibt es keine Klassen in der WPF Lokalisierungs-API, wir müssen also eigenen Code schreiben. Es gibt lediglich ein Beispiel dafür in der MSDN (locbaml), zu dem ich später noch etwas schreiben werde.

image

Diese Datei können wir nun selbst übersetzen oder an einen Übersetzer weitergeben, der die Datei für uns übersetzt. Problematisch ist dabei allerdings, dass so sehr leicht ungültige Dateien erstellt werden können (z.B. wenn bei einer Eigenschaft wie “Width” ein Text statt einer Zahl eingegeben wird, ein Teil des Schlüssels geändert wird, oder einfach nur ein Komma falsch gesetzt wrid).

image

Aus der übersetzten Datei müssen wir nun wieder ein BamlLocalizationDictionary erzeugen. Dafür ist wieder eigener Code erforderlich.

image

Wir haben nun ein BamlLocalizationDictionary mit den übersetzten Resourcen. Dieses können wir an die UpdateBaml-Methode der BamlLocalizer-Klasse übergeben, um eine lokalisierte .baml Datei zu erzeugen.

image

Lokalisierte Satellitenassemblies erzeugen

Als Ergebnis erhalten wir eine lokalisierte .baml Datei. Diese müssen wir nun noch in einer Satellitenassembly speichern. Dafür gibt es wieder mindestens zwei Alternativen.

Microsofts locbaml-Beispiel erzeugt die Satellitenassembly selbst komplett neu. Das Beispiel berücksichtigt allerdings keine Resourcen aus anderen Quellen (z.B. .resx), so dass eine so erzeugte Satellitenassembly die Satellitenassembly mit den .resx-Resourcen einfach überschreibt. Außerdem kann locbaml keine signierten Satellitenassemblies erzeugen.

In meinen eigenen Lokalisierungstools nutze ich stattdessen die MSBuild-Skripte aus, die Visual Studio zur Kompilierung von WPF-Projekten verwendet. Die lokaliiserten .baml Dateien werden so von MSBuild genauso behandelt wie evtl. vorahndene andere Resourcen im Projekt (.resx usw.), und von den WPF-MSBuild-Skripten selbst in die Satellitenassemblies geschrieben. Dadurch gibt es keine Probleme mit anderen Resourcen, und die Satellitenassemblies werden “ganz normal” signiert, falls das so in den Projekteigenschaften konfiguriert wurde. Eventuell schreibe ich später dazu einen eigenen Artikel, da ich diesen Ansatz bisher nirgendwo sonst gesehen habe.

Fazit

Lokalisierung über die WPF Lokalisierungs-API ist umständlich. Fertige Tools gibt es nicht, es gibt lediglich ein Beispielprogramm für die API (dazu später mehr in einem eigenen Artikel).

Vorteil dieses Ansatzes ist, dass am Xaml-Code selbst keine Änderungen erforderlich sind, mal abgesehen von zusätzlichen x:Uid Attributen. Somit gibt es keine Probleme bei der Darstellung mit anderen Tools (Blend oder Visual Studio).

In den nächsten Teilen dieser Serie werde ich eventuell noch Alternativen zur WPF Lokalisierungs-API vorstellen. Außerdem möchte ich die Verwendung des locbaml-Beispiels erklären und zeigen, wie sich das locbaml-Beispiel anpassen und erweitern lässt.

Technorati Tags: ,

Consuming .NET Webservice by Javascript

25.12.2009 13:56:00 | Andreas Mehl

I have a webService service.asmx and I would like to call and consum this webservice using XMLHttpRequest and SOAP. The thing why I would like to do this is that I have hosted a client gadget application which is accessing the webservice perfectly.

Calling the Service from javascript:

intvar req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) {
    req.onreadystatechange = function() {
        if (req.readyState == 4) // 4 = "loaded"
        {
            if (req.status == 200) // 200 = OK
            {
                // XML Struktur
                var xmldata = req.responseXML;
                // Erstes Tag holen
                var FirstTag = xmldata.getElementsByTagName('Donation');
                // Vom ersten Tag die Subtags ziehen
                var SubstringTags = FirstTag[0].getElementsByTagName('string');
                // Alle subtags durchgehen und dessen Inhalt in variablen speichern
                for (i = 0; i < SubstringTags.length; i++) {
                    // Hier wird der Text aus dem string Tag gelesen
                    Array.push(SubstringTags[i].text);
                }
               
                // Anderes Tag aus der XML Struktur holen
                // Wichtig ist hier, das der Knoten Wert ausgelesen wird
                header = xmldata.getElementsByTagName('Header')[0].firstChild.nodeValue;
            }
            else {
                showError("Problem retrieving XML data");
            }
        }
    }
    req.open("GET", "service.asmx", true);
    req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
    req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    req.send(null);

Frohe Weihnachten 2009 und ein erfolgreiches Jahr 2010!

24.12.2009 17:01:58 | Kay Giza

Jetzt kommt die Zeit, um das Jahr 2009 langsam ausklingen zu lassen. Die Weihnachtsfeiertage und das Jahr 2010 stehen vor der Tür. In diesem Jahr gab es sehr viel zu berichten und selbstverständlich viel zu bloggen und ich möchte mich bei Ihnen für Ihr beständiges Interesse bedanken. Natürlich findet man in dieser ruhigen Zeit auch einige Minuten, um auf das Jahr 2009 zurückzublicken. Nutzen Sie dafür z.B. das... [lesen Sie den vollständigen Artikel auf Giza-Blog.de inkl. Videos]

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

Kostenloses Kopierprogramm RoboCopy von Microsoft

24.12.2009 14:56:15 | Kay Giza

Dieses Posting soll das Programm "Robocopy" von Microsoft vorstellen, eine Übersicht über die Funktionen und Parameter geben und dient mir selber (und ich hoffe Ihnen dann auch :-)) als schnelle Nachschlagequelle. Robocopy ist ein sehr leistungsfähiges Kopierprogramm, das zum Umfang von Windows Vista, Windows 7, Windows Server 2008 R2 oder auch dem Microsoft Windows Server® 2003 Resource Kit Tools gehört. Robocopy kopiert standardmäßig Dateidaten für jede Datei, die älter bzw. neuer ist oder verändert wurde oder Sie können beispielsweise ganze Verzeichnisse spiegeln, auf Änderungen überwachen und synchronisieren lassen. Mit der Robocopy.exe sind sehr komplexe Kopieraufgaben und Dateireplizierungsaufgaben möglich. Unter Windows 7 / Windows Server 2008 kann die immer nützliche Robocopy.exe nun auch multithreaded ausgeführt werden um schnellere und mehrfach gleichzeitige Dateioperationen zu erhalten. In diesem ausführlichen Blog-Artikel finden Sie die komplette Befehlszeilen-Referenz, Tipps und Hinweise sowie Downloads mehrerer grafischen Benutzeroberflächen für Robocopy... [... mehr in diesem ausführlichen Blogeintrag von 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

MSDN Webcast: MSDN Hotline FAQ (2) - Windows Presentation Foundation (WPF)

24.12.2009 10:08:24 | Kay Giza

Ich freue mich hier den 2. Teil unseres neuen Service der MSDN Hotline ankündigen zu dürfen!
Auch im Rahmen von Webcasts beantworten künftig die Experten der MSDN Hotline häufig gestellte Fragen, die dort per Telefon oder Messenger auflaufen. Premiere hatte unserer neue Service mit einem ersten Online-Referat zum Thema "C++ Standard Template Library". Die Kolleginnen und Kollegen der MSDN Hotline verfassen auch täglich die Antworten der am häufigst gestellten Fragen und bereiten Sie im MSDN Forum 'Aus der MSDN Hotline- Häufig gestellte Fragen und deren Antworten' auf.

Es steht jetzt der 2. Webcast kostenlos zur Verfügung: MSDN Webcast: MSDN Hotline FAQ (2) - Windows Presentation Foundation
Dieser Webcast thematisiert drei Problemstellungen im Zusammenhang mit der Windows Presentation Foundation (WPF): Die Vererbung für Window-Elemente, Styles sowie das Element-to-Element DataBinding. Anhand vollständiger und ausführlicher Beispiele wird auch die praktische Anwendung in einem Programm gezeigt.



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

Türchen Nummer 24

24.12.2009 09:34:40 | Peter Nowak

Sollte man die Weihnachtsgeschenke für seine Lieben bereits gekauft haben, so kommt man meist zum eher unangenehmen Teil: Dem Verpacken.
Dies gilt jedoch auch für Anwendungen, die auf einem mobilen Gerät installiert werden sollen. Hierfür gibt es das CAB-Datei Format.
 
Um eine entsprechende Installationsdatei zu erstellen, nehmen wir einmal an, dass wir die zu verpackenden Dateien unter c:\HelloWorld abgelegt haben.
Die Dateien, welche dort vorliegen müssen, sind die HelloWorld.exe, welche installiert werden soll, sowie die HelloWorld.inf Datei, welche die Informationen für den CabWizard vorbehält, um eine CAB-Datei erzeugen zu können.


Hier nun der Inhalt der INF-Datei dazu. Hierbei hat die Programmiersprache diesmal keine Relevanz:

[SOURCE FILE]
Name=CHelloWorld.cab
Path=C:\HelloWorld\HelloWorld.cab
AllowUninstall=TRUE

[Version]
Signature="$Chicago$"
CESignature="$Windows CE$"
Provider="Company"

[CEStrings]
AppName="HelloWorld"
InstallDir="%CE1%\CHelloWorld"

[CEDevice]
ProcessorType=0
VersionMin=0.0
VersionMax=0.0
BuildMin=0
BuildMax=0

[SourceDisksNames]
1=,Source1,,

[SourceDisksFiles]
"HelloWorld.exe"=1

[CopyFiles1]
"HelloWorld.exe",,,0x00000001

[DestinationDirs]
CopyFiles1=0,"%CE1%\HelloWorld"

[DefaultInstall]
CopyFiles=CopyFiles1


Wird nun auf der Kommandozeile der Befehl "c:\Program Files\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools\cabwiz.exe" "Company HelloWorld2.inf" ausgeführt (Pfad ist natürlich hinsichtlich seinen Gegebenheiten anzupassen), so findet sich im entsprechenden Zielordner die CAB-Installationsdatei wieder.
Weitere Informationen zum CAB-Wizard erhalten Sie hier:http://msdn.microsoft.com/de-de/library/cc433670%28VS.71%29.aspx


Das war es mit dem Adventskalender für dieses Jahr und wünschen Ihnen ein frohes Fest.

Patrick & Peter



This posting is provided "AS IS" with no warranties, and confers no rights.

Imagine Cup 2010 - Microsoft spendet an 3 Hilfsprojekte - und jede/r kann mitmachen!

23.12.2009 04:08:58 | Kay Giza

Eine sehr schöne Sache habe ich heute mitbekommen :-) - die ich mit diesem Blogeintrag gerne unterstützen möchte.

Nicht nur mit der Teilnahme am Imagine Cup 2010 und den Ideen, wie man mit Software die großen Probleme dieser Welt lösen kann, sondern auch schon mit der persönlichen Registrierung kann man Gutes tun!
Microsoft spendet für jede Registrierung, die über offizielle Imagine Cup 2010 Spenden-Webseite eingeht 1,- € an eines der drei dort beschriebenen Hilfsprojekte. Unabhängig von der Anzahl Eurer Registrierung unterstützt Microsoft jedes der vorgestellten Projekt mit einer Spende von mindestens 250,- €.


Der Imagine Cup ist der weltweit größte Technologiewettbewerb für Schüler und Studierende, der in diesem Jahr in fünf verschiedenen Kategorien ausgetragen wird:
Von Softwareprogrammierung über Filme drehen ist für jeden eine Kategorie dabei. Der Wettbewerb steht unter dem Motto: „Technologie für eine bessere Welt“ und orientiert sich dabei an den UN Millenniumszielen. Mehr Informationen zum Imagine Cup: www.imaginecup.de  

Apropos Imagine Cup, das Finale in der Kategorie Embedded findet erstmalig in Deutschland statt!
Erstmalig in der Geschichte des Imagine Cups wird es ein lokales Finale in der Kategorie Embedded Development geben. Schüler und Studierende sind eingeladen, ihrer Kreativität und ihren Ideen freien Lauf zu lassen:
Wie kann ein Embedded Device dazu beitragen, die Probleme dieser Welt lösen? Bildung, Armut, Gesundheit und Umwelt sind nur 4 der insgesamt 8 UN Millenniumsziele, an denen sich die Projekte orientieren sollen.
Abgabefrist für die Projektmappe ist der 15.02.2010. Das nationale Finale findet dann im April gemeinsam mit der Vorausscheidung in der Kategorie Software Design statt. Das nationale Gewinnerteam fährt dann im Juli 2010 zum internationalen Finale nach Polen, wo es gegen Teams aus der ganzen Welt antritt!

Toi toi toi... sowie vielen Dank für die Unterstützung der Spenden durch jede Registrierung!



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

Türchen Nummer 23

23.12.2009 00:09:00 | Peter Nowak

So kurz vor weihnachten sollte der Weihnachtsbaum hell leuchten. Warum auch nicht dann die LED des Bluetoothmoduls des Gerätes zum Blinken bringen?
Nichts einfacher als das, in dem man das Bluetooth Modul aktiviert.

Dabei gilt zu beachten, dass dieses Beispiel nur auf Geräten funktioniert, die den Microsoft Bluetooth Stack verwenden.

C++

#include "bthutil.h"
#pragma comment(lib, "Bthutil.lib")

...

DWORD dwMode = 0;
BthGetMode(&dwMode);
if(dwMode==BTH_POWER_OFF || dwMode==BTH_CONNECTABLE)
{
    BthSetMode(BTH_DISCOVERABLE);
}



C#

In C# ist es auch an dieser Stelle nötig, mittels P/Invoke auf die nötige DLL zu zu greifen, um auf die entsprechenden Informationen zu erhalten.
Somit hier das Snippet:

...
public enum RadioMode
{
    Off = 0,
    Connectable = 1,
    Discoverable = 2
}

static class Program
{
    [DllImport("BthUtil.dll")]
    private static extern int BthGetMode(out RadioMode dwMode);

    [DllImport("BthUtil.dll")]
    private static extern int BthSetMode(RadioMode dwMode);

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [MTAThread]
    static void Main()
    {
        RadioMode rm = RadioMode.Off;
        BthGetMode(out rm);
        if (rm == RadioMode.Off || rm== RadioMode.Connectable)
        {
            BthSetMode(RadioMode.Discoverable);   
        }
    }
}
...


Patrick & Peter



This posting is provided "AS IS" with no warranties, and confers no rights.

How to Install Windows Service

22.12.2009 21:51:00 | Andreas Mehl

Creating the solution

To create the solution, use "File." "New." and select "Blank Solution. from the Visual Studio development environment. For this example, call the solution "ServiceSolution".

All related projects (especially those that will be part of a installation, should become a project within the root solution. This keeps all inter-project dependencies relative to one another an simplifies the process if another developer decides to use a working folder.

The next step is to create two new projects as part of this solution the service application and the installation package. Right click on the solution within the Solution Explorer and select "Add." and the "New Project." from the Visual C# projects folder, choose "Window Service". Name the project "TestService". The resulting project should now be in design mode and ready to add the installation components.

The C# source file "Service1" and the class name "Service1" are added to the project; replace all occurrences of "Service1" with "TestService", including the string used to name the service in the InitializeComponent() method.

In the design view, right click and select "Add Installer" from the context menu. A new source file "ProjectInstaller.cs" with the class named "ProjectInstaller" will be added to the project. Two component will also be added to your project with the default name "serviceInstaller1" and "serviceProcessInstaller1". These component use the .NET framework to handle the registry key setup and installation of the service. You can opt to change the names of these components, but for this example keep them the same.

Service properties

In the design view, you can select the "serviceProcessInstaller1 component and modify its properties. For the "account" property, you can choose the type of account this service will use. For a use account, a name and password can be supplied in the code, but this should not be done. For production services, the service type should typically be user and then the name and password set to 'null'. A installation time, the production support personnel will be prompted to enter the name and password for the account under which the service will run. Be sure to specify what resources will be required by the application so that the account's permissions may be set appropriately.

Next, select the "serviceInstaller1" component in the design view. In the properties window, the name property should be set to "TestService which is the name of the class we chose for our service. You only need to change this property if you want the Service Control Manager to recognize your service with a different name.

In the "ServicesDependedOn" property, add the service name (as shown in the Service Control Manager) of any other dependent services that you service requires. This can be other services such as Microsoft Message Queuing, IIS, etc.

For the "DisplayName" property, choose a short friendly name that is displayed when the services are listed in the control panel. For our service, we'll use "Test Service" (with a space).

Adding a description


You'll note that there is no description property available for the service through any of the components. In order to add a useful description to the service that can be read by anyone, some code will need to be added to the "ProjectInstaller" class that was created.

The service is now ready to be developed in accordance to the service specification; prior to development, however, we can create the installation package along with the custom steps required to install the product.

MSI Package setup

The final step of the exercise is to create the MSI installation package that will be used to install our test service. From the Solution Explorer, right click on the "ServiceSolution" and choose "Add." then "New Project." from the context menu. From the "Setup and Deployment Projects" folder, select "Setup Project" and then name it TestServiceInstall".

Instead of focusing on the various properties for the installation, instead we will just go through the steps required to install the service application and then execute the service installation components that will occur when the MSI is deployed.

With the "TestServiceInstall" project selected in the Solution Explorer, you should see icons appear over the project folders. Select the first icon which is the "File System" installation folders. Right click on the "Application Folder" in the project pane and select "Add." and "Project Output." from the context menus.

Make sure that the "TestService" project is selected in the project drop-down and then click on "Primary Output" in the list box. Keep the "Configuration" dropdown to "(Active)". This will allow the installation project to use the appropriate output for either a debug or release build depending upon which you choose to create for the installation. (Debug builds are useful for development/stage environment deployment in some testing situations.)

The fifth icon on the top is the "Custom Actions" editor. Custom actions can be callbacks in code (in this case, they are part of the "ProcessInstaller" class that was created for us). We need to associate the "primary" output of our application to each of the custom installation steps.

To do this in one fell swoop, click the "Custom Actions" icon to show the actions view. There are several folders with the names "Install", "Commit", "Rollback" and "Uninstall". Right click on the top level "Custom Actions" node and select "Custom Action."

In the next dialog, open the dropdown and select "Application Folder". You should now see the "Primary output from TestService (Active)" in the list view, as this is where we added our project's output. Select this item in the list and choose "OK". The primary output for the service will now be associated with all of the custom actions and the service installer classes that were added to the project will now be called to perform the various installation steps when the MSI package is deployed.

Testing

We are now ready to create the installation package and see the results of the service installation. Right click on the "TestServiceInstall" project and choose "Build" from the context menu.

When the "TestServiceInstall.msi" file is created, navigate to the output folder where it was placed and double click on it to perform the installation. The other installation properties (such as the splash screen display name, copyright information, other dependencies, etc.) can be added as needed as this is only a test project.

When installing, choose "Everyone" for the installation and continue to click next. You will eventually be prompted with the dialog to enter your login name and credentials. You can use your network logon for testing purposes. When installation is complete, use the Administrative Tools to view the installed service applications. You should see the "Test Service" along with its description and the credentials used by the service application.

After closing the services window, use the "Add/Remove Programs" functionality from the Control Panel to uninstall the service and it should no longer appear in list of available services.

Der leidenschaftliche Programmierer: Eine Rezension

22.12.2009 18:56:00 | Gordon Breuer

Ich glaube, dass jeder in seinem Inneren über einzigartige Fähigkeiten verfügt. Doch er muss etwas finden, das ihm wirklich am herzen liegt, um diese Fähigkeiten zu entfalten. Sie können nicht bemerkenswert sein, wenn Sie Ihre Umgebung, Ihre Werkzeuge und Ihren Arbeitsbereich nicht lieben.

Mit diesen einleitenden Worten fängt das Buch “Der leidenschaftliche Programmierer” an und legt damit den roten Faden zu Grunde, der sich durch das ganze Buch zieht.

Der leidenschaftliche ProgrammiererWer kennt in der .NET-Welt nicht Namen wie Scott Guthrie, Scott Hanselman, Phil Haack, Rob Conery und wie sie alle heißen? Sie alle sind Entwickler, die nicht nur ihr Handwerk ausserordentlich gut beherrschen, sondern auch “bemerkenswerte” Arbeit leisten – im eigentlichen Wortsinn. Chad Fowler zeigt dem Leser in seinem Werk, wie man sich selbst nicht nur das Ziel setzt, bemerkenswerte Arbeiten zu leisten, sondern wir man dieses Ziel auch Schritt für Schritt in die Tat umsetzt.

Sein Buch ist in 54 Kapitel unterteilt. Viele davon haben am Ende eine oder mehrere Aufgabenstellungen, um das behandelte Thema zu verinnerlichen und umzusetzen. Wer das Buch allerdings “am Stück” durchliest wird diese Aufgaben wohl nicht oder zumindest nicht unmittelbar durchführen. Hier ist meine Empfehlung, das Buch einmal komplett zu lesen und anschließend noch mal die einzelnen Kapitel zu überfliegen und jeweils im Anschluß die Umsetzung zu beginnen.

Die im Zaum gehaltenen Leidenschaften machen den Menschen alltäglich.

Denis Diderot, (1713 - 1784)

Für ein wenig Auflockerung und auch andere Meinungen liest man immer wieder auch kurze Beiträge von anderen Programmierern wie James Duncan, Tom Preston-Werner und Vik Chada. Auch die optisch abgetrennten Merksätze innerhalb der jeweiligen Kapitel lassen das Auge beim Lesen kurz “ruhen” und nennen dabei gleichzeitig die wichtigsten Kernthesen.

aboutpixel.de / it's a jazz thang . . . © eulenmann Chad Fowler zieht immer wieder Parallelen zu seiner Zeit als Jazz-Saxophonist. Für mich persönlich waren diese kleinen Exkursionen durchaus spannend da ich selbst viele Jahre aktiv selbst musiziert habe und auch heute noch gelegentlich ein wenig spiele. In der Tat gibt es einige interessante Parallelen zur Software-Entwicklung, die man so eher selten sieht. Alles in allem sind einige sehr gute Ideen und Tipps in Fowlers Buch zu finden, die einem auch mittel- und langfristig helfen können. Schlussendlich gehört viel mehr dazu, ein bemerkenswerter Programmierer zu sein als einfach nur besonders gut zu sein. Andere müssen es auch mitbekommen. Man selbst muss sich von der Masse abheben und so selbst zu einer der bekannten Leitfiguren werden. Dieses Ziel werden wohl nur wenige Entwickler wirklich schaffen, doch wer nicht nur die Fähigkeiten sondern auch den Ehrgeiz mitbringt und die wertvollen Tipps von Chad Fowler bewusst als Hilfestellung einsetzt kommt diesem Ziel mit Sicherheit näher.

Es gibt einen Unterschied zwischen Theoretikern und Menschen, die aus Ihrer Praxis erzählen. Chad Fowler und die Kollegen die ihrerseits Kurzbeiträge im Buch veröffentlicht haben, zählen mit Sicherheit zu der zweiten Gruppe. Aufgrund eines reichen Erfahrungsschatzes werden hier keine weltfremden Methoden oder Ideen aufgewärmt, sondern bereits erfolgreich erprobte Praktiken weitergegeben welche zum Teil aus seinem ersten Buch übernommen und weiter verbessert wurden. Anhand zahlreicher Anekdoten die er zumeist am Kapitelanfang erzählt kann man seine Vorschläge und Ideen auch leicht nachvollziehen, so dass man das Gefühl hat statt aus einem Lehrbuch zu lernen die Erfahrungen und seine Gedankenschlüsse selbst mitzuerleben, selbst von den Ideen inspiriert zu werden.

aboutpixel.de / Leidenschaft. © oli xxx So ist der Titel des Buches nicht misszuverstehen, dass es für leidenschaftliche Programmierer geschrieben wurde – vielmehr hilft es dem gewöhnlichen Coder dabei die Leidenschaft für seinen Beruf neu zu entdecken oder gar erst richtig zu entflammen. Das heißt im Umkehrschluss jedoch nicht, dass für Programmierer – oder Entwickler wie ich sie lieber nenne – die ihre Leidenschaft für das Metier bereits entdeckt haben dieses Buch langweilig oder uninteressant wäre. Trotz des etwas schwierigen Themas ist es Chad Fowler gelungen, das Ganze interessant zu gestalten und mit einem lockeren Erzählstil auch leichter bekömmlich zu machen. Auch bleibt man nicht nur passiver Leser sondern wird durch zahlreiche konkrete Anweisungen zum aktiven Handeln aufgefordert.

Zum Schluss noch ein paar Worte aus der Sicht des Mediengestalters: In seinem angenehmen Format und einem Umfang von rund 330 Seiten ist “Der leidenschaftliche Programmierer” auch als Lektüre zum Mitnehmen geeignet um beispielsweise die Bahnfahrt auf dem Weg zur Arbeit zu nutzen. Die Schrift ist in einer angenehmen Lesegröße und der Satz ist ebenfalls ordentlich gemacht. Etwas schwerer zu lesen sind die “Gast-Artikel”, die mit schwarzer Schrift in dunkelgrauen Kästen vom Rest eines Kapitels abgetrennt wurden. Auch habe ich einen kurzen Hinweis auf das Literaturverzeichnis bereits am Anfang des Buches vermisst. So blieb zunächst ein wenig Verwunderung zurück, was die Abkürzungen bei diversen Literaturangaben bedeuten bis ich dann das Komplettverzeichnis am Schluß fand. Grundsätzlich finde ich ein solches Verzeichnis besser als Fußnoten, jedoch hätte ein einmaliger Hinweis hierauf am Anfang sicherlich nicht geschadet. Die Papierqualität ist sehr gut, die Seiten haben ein angenehmes Gewicht und sind nicht wie bei ähnlichen Büchern halb durchsichtig. Die gute Verarbeitung und der sehr gute Inhalt rechtfertigen so auch den Preis von EUR 19,95.

Auf der Verlagsseite findet man neben dem Inhaltsverzeichnis und dem Vorwort auch eine Leseprobe, jeweils als PDF-Datei. Das Buch ist in der 1. Auflage im September 2009 als Softcover im Format 14,8cm x 21,0cm beim Mitp-Verlag mit der ISBN 978-3-8266-5885-3 erschienen.

Ähnliche Artikel:

kick it on dotnet-kicks.de

Türchen Nummer 22

22.12.2009 09:01:04 | Peter Nowak

In vielen Fenstern und Wohnungen findet man zur Weihnachtszeit eine ganze Menge an Lichterketten und sonstiger beleuchteter Weihnachtsdekoration.
Das manuelle Einschalten dieser vielen Lichterketten und Lämpchen kann eine zeitraubende Beschäftigung werden.
Gleiches gilt auch für Windows Mobile Applikationen die durchgehend laufen sollen. Wenn der Anwender diese Applikationen manuell starten muss dauert dies natürlich auch eine Weile.
Wäre es nicht angenehmer wenn dies automatisch geschehen würde?
Mit folgendem Codeschnipsel kann aus der eigenen Anwendung heraus, beispielsweise per Optionsdialog, eine Autostartverknüpfung angelegt werden.

C++

//Dies ist eigentlich das gleiche Schnipsel wie Türchen Nummer 8
//jedoch wird diesmal die CSIDL_STARTUP verwendet.
//Autostart Ordner auslesen
WCHAR szShortcutPath[MAX_PATH*2] = L"\0";
SHGetSpecialFolderPath(NULL,szShortcutPath,CSIDL_STARTUP,0);
wcscat(szShortcutPath,L"\\MeinShortcut.lnk");
//Modulnamen auslesen
WCHAR szModulePath[MAX_PATH*2] = L"\0";
GetModuleFileName(GetModuleHandle(NULL), szModulePath, MAX_PATH);
//Shortcut erstellen
SHCreateShortcut(szShortcutPath,szModulePath);



In C# ist es diesmal nicht notwendig P/Invoke zu nutzen, um an diese Informationen zu kommen. Die Klasse Environment hierfür reicht völlig.
Hier also das Snippet:

C#

...
[DllImport("coredll.dll")]
private static extern int SHCreateShortcut(StringBuilder szShortcut, StringBuilder szTarget);
...
[MTAThread]
static void Main()
{

   StringBuilder shortcut = new StringBuilder(System.Environment.GetFolderPath(Environment.SpecialFolder.Startup)+@"\MeinShortcut.lnk");
   StringBuilder target = new StringBuilder(@"\windows\calc.exe");
   SHCreateShortcut(shortcut, target);
}
...


Patrick & Peter



This posting is provided "AS IS" with no warranties, and confers no rights.

Web-Slice gewinnt Eysa-Wettbewerb

21.12.2009 17:01:00 | dotnet-kicks.de Blog

Unsere Community-Seite hatte ebenfalls beim Wettbewerb “Empower Your Site” mitgemacht, dem Internet Explorer Add-On Web-Bewerb von Microsoft. Dabei hat der Webslice von .NET-Kicks, der die jeweils aktuellen Artikel anzeigt, den dritten Platz gemacht.

Was ist ein Web-Slice?

Web-Slices erlauben es den Benutzern, bestimmte Bereiche einer Website zu abonieren und so über bestimmte Teil-Informationen immer auf dem neuesten Stand zu bleiben. Die Webslices werden ähnlich wie RSS-Feeds aboniert und tauchen anschließend in der Link-Leiste des Internet Explorers auf. Bei .NET-Kicks hat man so neu veröffentlichte Artikel sofort im Blick und bleibt so auf dem Laufenden.

Schön und gut, aber wo kriege ich den jetzt her?

Ganz einfach über das Tastenkürzel ALT +J oder direkt über den grün werdenden RSS-Button in der Button-Leiste des Internet Explorers, wenn man auf die Seite von .NET-Kicks geht. Hier könnt ihr sowohl die zur Verfügung stehenden RSS-Feeds auswählen (orangenes Icon) oder aber auch die Web-Slices (grünes Icon).

.NET-Kicks Web-Slice


kick it on dotnet-kicks.de

Interop? Kuckst du hier! interoperabilitybridges.com

21.12.2009 13:17:59 | Jan Schenk



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/12/21/interop-kuckst-du-hier-interoperabilitybridges-com.aspx'; tweetmeme_source = 'jansche';

Eine großartige Seite, die ich an dieser Stelle gerne featuren (neusprech: fiedschan) würde, ist http://www.interoperabilitybridges.com. Hier werden all die schönen Dinge vorgestellt, die für das Brückenbauen zwischen Microsoft- und Nicht-Microsoft-Technologien notwendig sind.

image

Ob Eclipse, PHP, oder  .NET Framework, Java, Ruby oder C, hier findet man alles, was es zum Thema Interop zu sagen gibt. PHP mit ADO.NET? Kein Problem, dafür steht ein Toolkit bereit. Oder doch lieber Windows Azure AppFabric mit Java? Null Problemo. Oh du wolltest es mit Ruby machen? Here you go.

Ich mach mich jetzt mal dran, ein bisschen zu schmökern und zu stöbern. Und wenn es bei euch um Interoperabilität geht, solltet ihr das wahrscheinlich auch mal ausprobieren:
http://www.interoperabilitybridges.com/

jan

TFS 2010 Power Tool verfügbar

21.12.2009 11:20:11 | Christian Binder

Brian Harry hat auf seinem Blog alles zusammengefasst, also für alle die schon gewartet haben, es aber noch nicht mitbekommen haben.

Infos zur Pre-Release gibt’s hier.

Und diesem Sinn wünsche ich Euch eine schöne Weihnachten und ein Guten Rutsch :-)

Chris

 

PS: Das mit dem Rutschen nicht so wörtlich nehmen, bin meinem Kleinwagen kurz mit der Felge an den Bordstein gekommen = 3000Euro
Da musste ich meiner Tochter kurz erklären, dass das Christkind sich den Fuss gebrochen hat und daher Weihnachten dieses Jahr ausfällt…. just kidding :-)

Türchen Nummer 21

21.12.2009 00:41:07 | Peter Nowak

Der große Vorteil eines digitalen Adventskalenders ist, dass man volle Kontrolle über alle Türchen
hat und niemand vorab schon mal die "24" öffnen kann.
Eine vollständige Kontrolle bspw. über sämtliche Tasten kann auch mal in einer Windows Mobile Applikation benötigt werden.
Das folgende Codeschnipsel zeigt wie man dies mit der AllKeys API bewerkstelligen kann.

C++

//Alle Tasten abfangen(bspw. in WM_CREATE)
AllKeys(TRUE);

...

//In WM_KEYDOWN und WM_KEYUP den WPARAM prüfen.
//Siehe http://msdn.microsoft.com/en-us/library/bb431750.aspx für Keycodes
case WM_KEYDOWN:
    OutputDebugString(L"WM_KEYDOWN\n");
    //Behandlung für den Tastencode ist hier nicht aufgeführt
    HandleKey(wParam);
    break;
case WM_KEYUP:
    OutputDebugString(L"WM_KEYUP\n");
    //Behandlung für den Tastencode ist hier nicht aufgeführt
    HandleKey(wParam);
    break;

...




Im verwaltetem Code ist es mehr Code nötig, um das gleiche Ziel zu erreichen. Das liegt daran, dass eine Windows Form generell die Verarbeitung von derlei Nachrichten intern bereits durchführt.
Um also auf die internen Window Messages zugreifen zu können, ist es nötig, eine Klasse zu erstellen, die von der Klasse MessageWindow ableitet. Zusätzlich ist auch das P/Invoke notwendig, um die AllKeys-Methode auf zu rufen.
Somit ist es diesmal für das Snippet nötig, eine Anwendung für intelligene Geräte anzulegen, welche eine Geräteanwendung darstellt.
Der Code is dann entsprechend ähnlich abzuändern:

C#

...
using Microsoft.WindowsCE.Forms;
...

public partial class MessageForm : Form
{
    [DllImport("coredll.dll", SetLastError = true)]
    static extern bool AllKeys(bool bAllKeys);
    
    MsgWindow msgWin;

    public MessageForm()
    {
        InitializeComponent();
        AllKeys(true);
        msgWin = new MsgWindow(this);
    }

...

}
...
public class MsgWindow : MessageWindow
{
    public const int WM_KEYDOWN = 0x0100;
    public const int WM_KEYUP = 0x0101;


    private MessageForm msgform;

    public MsgWindow(MessageForm msgform)
    {
        this.msgform = msgform;
    }

    protected override void WndProc(ref Message msg)
    {
        switch (msg.Msg)
        {
            case WM_KEYDOWN:
                MessageBox.Show("Key was down with WPARAM:" + ((int)msg.WParam).ToString() + "and LPARAM:" + ((int)msg.LParam).ToString());
                break;
            case WM_KEYUP:
                MessageBox.Show("Key was up with WPARAM:" + ((int)msg.WParam).ToString() + "and LPARAM:" + ((int)msg.LParam).ToString());
                break;
        }
        base.WndProc(ref msg);
    }
}


Mehr Informationen zur Klasse MessageWindow erhalten Sie hier:

http://msdn.microsoft.com/de-de/library/microsoft.windowsce.forms.messagewindow%28VS.80%29.aspx



Patrick & Peter



This posting is provided "AS IS" with no warranties, and confers no rights.

Türchen Nummer 20

20.12.2009 10:29:28 | Peter Nowak

Gerade in der Weihnachtszeit sind die Schaufenster derart mit Werbung oder Kunstschnee zugekleistert, das der Blick auf die schönen Dinge dahinter verwehrt ist.
Auch dies gilt für manche Windows Mobile Anwendung, die man im Vollbildmodus betreiben möchte.

C++

//Der folgende Code gilt für Win32 Anwendungen.
//Er ist im IDM_HELP_ABOUT Handler der WM_COMMAND Nachricht
//einer per Visual Studio 2008 Win32 Projekt für intelligente Geräte (Windowsanwendung)
//untergebracht. Der DialogBox Aufruf ist auskommentiert.
//Rückgängig gemacht werden sollte der Fullscrenn Code bspw. über ein Kontextmenu oder beim
//beenden der Applikation
//DialogBox(g_hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, About);
//Fenster muss für SHFullScreen im Vordergrund sein
SetForegroundWindow(hWnd);
//SIP und Taskbar in den Hintergrund legen
SHFullScreen(hWnd,SHFS_HIDESIPBUTTON|SHFS_HIDETASKBAR);
//Die Menübar soll auch weg
HWND hwndMenu = SHFindMenuBar(hWnd);
//Erst die Menübarhöhe holen. Gilt auch für das Starmenü
RECT rcMenue;
GetWindowRect(hwndMenu, &rcMenue);
//Menübar verschieben
SetWindowPos(hwndMenu, NULL,-1, -1,0, 0,SWP_NOZORDER | SWP_NOACTIVATE);
//Jetzt muss unser Fenster noch neu positioniert werden
RECT rect;
GetWindowRect(hWnd,&rect);
rect.top -= rcMenue.bottom - rcMenue.top;
rect.bottom += rcMenue.bottom - rcMenue.top;
MoveWindow(hWnd,rect.left,rect.top,rect.right,rect.bottom,TRUE);




C#

Eine Anwendung zu erstellen, welche eine Vollbilddarstellung liefert ist mit Bordmitteln des .NET Compact
Frameworks bereits einfach realisierbar.
Dies geht sogar so einfach, dass nicht einmal ein Snippet hierfür notwendig ist.
Setzen Sie für die Vollbilddarstellung Ihrer Form einfach die zugehörige Eigenschaft WindowsState auf den
Wert FormWindowState.Maximized. Hierdurch »verschwindet« die Titelzeile Ihrer Anwendung.
Damit sich jedoch kein vielleicht im Hintergrund startendes Programm in den Vordergrund setzt und Ihre
Anwendung überlagert, sollten Sie gleichfalls die Eigenschaft TopMost der Form auf den Wert true setzten.
Wollen Sie gleichfalls die Menüzeile, welche Ihr Anwendungsmenü darstellt und meist auch die virtuelle
Tastatur aktiviert, deaktivieren, ist auch dies ganz einfach. Leider gibt es für das MainMenu keine Eigenschaft
»Enabled«, um dies zu ermöglichen. Stattdessen reicht es, wenn die Eigenschaft Menu der zugehörigen Form auf
den Wert null gesetzt wird, was auch dynamisch aus der Anwendung möglich ist.
Hierdurch wird die Zuweisung eines MainMenu zur Form entfernt, wodurch Sie eine komplette
Vollbilddarstellung Ihrer Anwendung erhalten. Wenn Sie nun Menu wieder das Objekt vom Typ MainMenu
zuweisen, haben Sie wieder Ihren Ursprungszustand hergestellt.

Patrick & Peter



This posting is provided "AS IS" with no warranties, and confers no rights.

Türchen Nummer 19

19.12.2009 09:06:35 | Peter Nowak

Wer dem Weihnachtstress ein wenig aus dem Weg gehen möchte vermeidet es am besten die Geschenke auf althergebrachte Weise in der Stadt oder sonstigen Einkaufläden zu besorgen.
Nichts ist entspannter als ein Einkaufbummel im Internet. Und wenn man die Einkauftour rechtzeitig beginn bekommt auch keinen Stress mit den Lieferzeiten.
Um aber trotzdem an sein Paket zu kommen muss man natürlich seine eigene Adresse mitteilen.
Gleiches gilt auch für Anwendung die auf Netzwerkdienste zugreifen. Oftmals muss die Anwendung die eigene IP Adresse nicht kennen, da es durch die zugrunde liegenden Protokolle automatisch passiert. Ab und an kann es aber vorkommen dass diese Information benötigt wird.
Dazu kann das folgende Codeschnipsel verwendet werden:

C++

#include "iphlpapi.h"
#pragma comment(lib, "Iphlpapi.lib")

...

//Wir listen mal etwas mehr auf als nur die aktuellen IPs.
//Adapter Information anlegen
PIP_ADAPTER_INFO pAdapterInfo;
ULONG lRetLen = sizeof(PIP_ADAPTER_INFO);
//Benötigte Speichergrösse holen
DWORD dwRet = GetAdaptersInfo(NULL,&lRetLen);
//Informationen zu allen Adaptern holen
pAdapterInfo = (PIP_ADAPTER_INFO) malloc (lRetLen);
dwRet = GetAdaptersInfo(pAdapterInfo,&lRetLen);
if(dwRet == ERROR_SUCCESS)
{
    //Informationen nur für den aktuellen Adapter
    PIP_ADAPTER_INFO pCurrentAdapter = pAdapterInfo;
    while (pCurrentAdapter != NULL )
    {
        //Systemindex
        printf("Adapterindex: %i\n",pCurrentAdapter->Index);
        //Beschreibung
        printf("Beschreibung: %s\n",pCurrentAdapter->Description);
        //IP Addresse
        printf("IP: %s\n",pCurrentAdapter->IpAddressList.IpAddress.String);
        //Gateway
        printf("Gateway: %s\n",pCurrentAdapter->GatewayList.IpAddress.String);
        //Subnet
        printf("Subnet: %s\n",pCurrentAdapter->IpAddressList.IpMask.String);
        //Erweiterte IP Infos anlegen
        PIP_PER_ADAPTER_INFO pPerAdapterInfo;
        lRetLen = sizeof(PIP_PER_ADAPTER_INFO);
        //Benötigte Speichergrösse holen
        dwRet = GetPerAdapterInfo(pCurrentAdapter->Index,NULL,&lRetLen);
        //Erweiterte IP Infos abfragen    
        pPerAdapterInfo = (PIP_PER_ADAPTER_INFO) malloc (lRetLen);
        dwRet = GetPerAdapterInfo(pCurrentAdapter->Index,pPerAdapterInfo,&lRetLen);
        //DNS1
        printf("DNS: %s\n",pPerAdapterInfo->DnsServerList.IpAddress.String);
        //DNS2
        if(pPerAdapterInfo->DnsServerList.Next != NULL)
            printf("DNS2: %s\n",pPerAdapterInfo->DnsServerList.Next->IpAddress.String);
        //Interface anlegen
        MIB_IFROW IfRow;
        memset( &IfRow, NULL, sizeof( MIB_IFROW ) );
        //Index zum abfragen setzen
        IfRow.dwIndex = pCurrentAdapter->Index;
        //Interface abfragen
        GetIfEntry(&IfRow);
        //MAC Adresse
        printf("MAC: %02x-%02x-%02x-%02x-%02x-%02x\n",IfRow.bPhysAddr[0], IfRow.bPhysAddr[1], IfRow.bPhysAddr[2], IfRow.bPhysAddr[3], IfRow.bPhysAddr[4], IfRow.bPhysAddr[5]);
        //Den Namen(ClassID) brauchen wir auch...
        printf("ClassID: %s\n",pCurrentAdapter->AdapterName);
        //Nächster Adapter
        pCurrentAdapter = pCurrentAdapter->Next;
    }
}




C#

In C# geht dies ebenfalls ganz einfach, auch wenn es wild aussieht:

using System.Net;
...
IPHostEntry enty = Dns.GetHostEntry(Dns.GetHostName());
foreach (IPAddress ipadress in enty.AddressList)
{
    Console.WriteLine("IP: " + ipadress.ToString());   
}



Patrick & Peter



This posting is provided "AS IS" with no warranties, and confers no rights.

Giza-Blog.de Internet Explorer 8 Center [IE8]

18.12.2009 19:12:14 | Kay Giza

In meinem Blogposting 'Add-Ons und Tools für die Webentwicklung mit IE8' schrieb ich: "...Soweit so gut erst mal, mal schauen, wie ich die ganzen Notizen und Fragen sowie Hinweise aufarbeite..." Herausgekommen ist mein Giza-Blog.de Internet Explorer 8-Center. Auf dieser Übersichtsseite finden Sie neben dem Internet Explorer 8 an sich auch weitere Software mit der Sie den neuen Browser anpassen und gestalten können sowie zahlreiche Know-how Beiträge, Infofilme und Trainings rund um den Internet Explorer und das Thema Webentwicklung. Ich habe mir... [... vollständigen Blogeintrag inkl. Screenshots und Links in diesem 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

Windows 7: Frequently Asked Questions (FAQ) rund um die Entwicklung fuer Windows 7

18.12.2009 18:14:55 | Kay Giza

Im MSDN Forum 'Kompatibilität von Anwendungen', wo Sie Fragen zum Testen der Anwendungskompatibilität stellen können, allgemeine Fragen zur Anwendungskompatibilität diskutieren und Erfahrungen zur Programmierung Windows-basierter Anwendungen austauschen können, haben wir heute ganz frisch eine FAQ veröffentlicht.

In diesem heute veröffentlichten MSDN Forum-Thread hat das Team von MSDN Online für Sie Frequently Asked Questions (FAQ) rund um die Entwicklung für Windows 7 zusammengestellt. Diese sehr umfangreiche Sammlung von Fragen und Antworten erhebt keinen Anspruch auf Vollständigkeit, sondern versucht wichtige Fragen zur Anwendungskompatibilität bei Windows 7 zu erläutern und Ihnen die Suche nach Antworten und tiefergehenden Wissensquellen zu erleichtern. Schwerpunkte dieser FAQs sind folgenden Themen:

Zusätzlich finden Sie unter dem Punkt "Weitere Informationen" eine Reihe von Links zu den Windows 7-Angeboten auf MSDN Online. Sollten Ihnen Themen fehlen oder Sie noch offene Fragen zu diesen Teilbereichen der Entwicklung für Windows 7 haben, posten Sie diese einfach als Antwort auf diesen Thread. Wir bemühen uns daraufhin, die FAQs entsprechend zu ergänzen. Zusätzlich zu den deutschen FAQs können Sie auch einen Blick in die Windows 7 FAQs im englischsprachigen MSDN-Forum werfen.

Hier geht es zur FAQ: Windows 7 Anwendungskompatibilität: Freqently Asked Questions



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

Windows 7: Schnellstartleiste / Quick Launch wie unter Vista / XP wiederherstellen

18.12.2009 18:13:32 | Kay Giza

Vor einigen Tagen wurde ich gefragt, ob es unter Windows 7 auch die von früheren Versionen bekannte Schnellstartleiste in der Taskleiste gibt? Die Schnellstartleiste ist auch unter Windows 7 verfügbar, wobei ich jedoch deren Einsatz nicht empfehlen möchte. Nicht nur dass Sie mit der alten Schnellstartleiste auf erheblich kleiner Icons zurückgreifen müssen, nein auch die neue Bedienbarkeit der neuen Taskleiste geht Ihnen verloren (wie z.B.: Schnelle Vorschau mit Peek, Größere und eindeutigere Symbole, Schneller Zugriff auf Ihre Programme, Schneller Zugriff mit Sprunglisten, Popup-Zusammenfassung, etc.), sondern Sie können dann auch bei neueren Programmen nicht die volle Funktionsvielfalt ausnutzen, die Entwicklern Ihnen mit der "Taskleisten-API" bereitstellen können (Entwickler bitte hier klicken: Windows 7 Taskbar- Developer Resources). Kommen wir aber zurück zu der Frage, ob es die "alte" Schnellstartleiste unter Windows 7 dennoch gibt bzw. ob Sie vorhanden ist: Das ist sie! Sie aktivieren Sie die die Schnellstartleiste: Klicken Sie unter Windows 7... [... vollständige Anleitung in diesem 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

Microsoft Academic Relations mit neu gestalteter Website fuer Studenten

18.12.2009 18:10:17 | Kay Giza

Seine Website komplett überarbeitet diese Tage hat das deutsche Academic Relations Team von Microsoft zusammen mit dem MSDN Online-Team.
Herausgekommen ist „DreamSpark – das Portal für Technik begeisterte Studenten“. Unter „www.microsoft.de/dreamspark“ gibt’s zum Start Interviews mit Achim Berg, dem Geschäftsführer von Microsoft Deutschland, mit "Windows 7"-Chefentwickler Jon deVaan und Stephen Elop, dem Präsidenten der Microsoft Business Division.
Außerdem dabei: Infos zum nächsten Imagine Cup Wettbewerb und ein Screencast zur „Azure Services Plattform“. Künftig sollen auf dem neuen Portal jeden Monat neue Videos, Nachrichten und Termine zu Themen rund um Technologie, Studium, Downloads und Karriere veröffentlicht werden.

Im gleichem Atemzuge wurde auch ein Forum eingerichtet: DreamSpark-Forum
Hier finden Sie aktuelle Nachrichten, Informationen und Ankündigungen rund um DreamSpark, Microsoft Student Partners, Imagine Cup, IT Academy-Programm, MSDN Academic Alliance und alles Interessante für Studenten.



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

MSDN Online Telefon-Hotline macht Weihnachtspause

18.12.2009 18:09:01 | Kay Giza

Über den Jahreswechsel verabschiedet sich die kostenfrei nutzbare MSDN Hotline für MSDN Online für ein paar Tage in den verdienten Kurzurlaub. Wenn’s also Dinge rund um MSDN gibt, die Sie schon immer wissen wollten, aber nie zu fragen wagten: entweder gleich zum Hörer bzw. zur Tastatur greifen oder gut merken – ab 7. Januar 2010 sind die Kolleginnen und Kollegen telefonisch oder per Windows-Messenger wieder für Sie da. Bis zur Weihnachtspause steht Ihnen die Hotline noch bis einschließlich 23. Dezember 2009 in gewohntem Umfang kostenlos zur Verfügung: MSDN Hotline macht Pause

Im MSDN Forum 'Aus der MSDN Hotline: Häufig gestellte Fragen und deren Antworten' bereiten die Kolleginnen und Kollegen der Hotline seit geraumer Zeit immer wiederkehrende Frage oder aktuelle Geschehnisse auf. Aktuell sind dort bereits schon über 210 FAQs oder auch "Wiederkehrende Fragen und deren Antworten" gelistet. Werfen Sie doch mal über die ruhigen Weihnachtsfeiertage und dem Jahreswechsel einen Blick in die Frage & Antwort-Sammlung.

MSDN Hotline: Schnelle & kompetente Hilfe für Entwickler: kostenfrei!



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

Verlaengerte Betaphase fuer Visual Studio 2010 – Release Candidate (RC) im Februar 2010

18.12.2009 18:04:57 | Kay Giza

Seit Oktober ist Beta 2 von Visual Studio 2010 frei verfügbar und wurde bisher von einigen Hunderttausenden Entwicklern weltweit herunter geladen und getestet. Seitdem haben wir eine Unmenge an konstruktivem Feedback erhalten – vielen Dank dafür an alle Tester der Beta 2 von Visual Studio 2010! Im Rahmen dieses umfangreichen Feedbacks hat sich auch herauskristallisiert... [... detaillierte Informationen 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

200 – anheledir.NET mit frischem Design!

18.12.2009 14:18:12 | Gordon Breuer

aboutpixel.de / Prosit © Rainer Sturm Nach meinem “Füllposting” eben habe ich es also doch noch geschafft, die 200 Artikel in meinem Blog dieses Jahr voll zu bekommen – und so auch das neue Layout / Design gebührend einzuweihen!

Das neue Layout basiert auf dem “Hansi” Wordpress-Template von wpyag.com. Das war mir alles in allem jedoch zu dunkel und an dem vielen Blau kann man sich schnell satt sehen. Als neuer Hintergrund ziert deshalb ein grauer Farbverlauf mit einigen geschwungenen Linien mein Blog. Auch habe ich einige andere Farben angepasst und den Bereich mit der Werbung ganz gestrichen.

Es hatte sich allerdings als Herausforderung erwiesen, dass Template für die BlogEngine.NET anzupassen. Leider ist es nicht ganz Copy-and-Paste tauglich geworden, da einige Dateien außerhalb des Themes-Ordners angepasst werden mussten. Im einzelnen waren das:

  • archive.aspx
  • contact.aspx
  • error.aspx
  • error404.aspx
  • login.aspx
  • page.aspx
  • post.aspx
  • search.aspx

Eventuell hätte man das auch vermeiden können durch einige zusätzliche Abfragen innerhalb der Theme-Masterseite. Wer sich daran gerne mal versuchen möchte oder das Template auch so ausprobieren will darf sich gerne bei mir melden, ich schicke ihm dann die Dateien zu.

Ein weiteres Problem am Hansi-Template war der HTML 4.01 DOCTYPE. Ich verwende fast ausschließlich den XHTML 1.0 Transitional DOCTYPE und habe Erweiterungen, Beiträge, usw. auch darauf abgestimmt. Für die entsprechenden Anpassungen war einiges Ausprobieren notwendig, am Schluss habe ich es jedoch geschafft auch das neue Design wieder valide zu bekommen.

Web-Statistiken Zu guter letzt fiel mir nach einem ausführlichen Test auf, dass die Seite deutlich länger zum Laden brauchte als vorher. Einige Tests zeigten, dass über 600KB an Daten für die Startseite geladen wurden, zum Rendern rund 7 Sekunden benötigt wurden und das Caching zu allem überfluss praktisch nicht existierte. Nach weiterer, stundenlanger Optimierung liegt die Downloadgröße beim ersten Aufruf nun bei rund 280KB (3.5 Sekunden) und bei nachfolgenden Aufrufen bei nur noch rund 20KB (1.8 Sekunden). Warum die meisten Grafiken im Original-Template so ineffizient abgespeichert wurden ist mir ein Rätsel: Selbst unter Beibehaltung des Formates (24-Bit PNG) konnte ich die Dateigrößen teilweise um über 80% reduzieren! Einige Grafiken waren außerdem im “falschen” Format gespeichert und durch eine Optimierung konnte hier die größte Ersparnis erbracht werden. Das Caching und die komprimierte Übertragung haben dann ihr übriges getan, so dass die Seite nun sogar schneller als vorher angezeigt werden kann.

Mit meiner letzten Erweiterung, den Microsoft Tags in der Druckansicht, im Hinterkopf habe ich die Stylesheets auch für die Druckausgabe optimiert. Hier wird nun alles unnötige ausgeblendet und der Artikel über die komplette Breite gedruckt. Am Ende steht dann wie bereits beschrieben der Tag zum direkten Aufrufen des Blogartikels.

Zu guterletzt sind noch einige Kleinigkeiten dazu gekommen: Ein Retweet-Widget von Tweetmeme und beim Kopieren von Text in die Zwischenablage wird die Ursprungs-URL und ein Lizenzhinweis automatisch hinzugefügt mit Hilfe eines Scriptes von Tynt. Alle Texte stehen ab sofort – soweit nicht anders angegeben – unter der Commons Attribution 3.0 Lizenz, alle Codebeispiele weiterhin unter der Microsoft Public License. Die “Meistgelesenen Artikel” wurden auch zurück gesetzt, da hier in den letzten Wochen/Monaten Probleme beim Erfassen der Aufrufe auftraten die nun gelöst sind.

aboutpixel.de / Stehparty © Mosquita Im Augenblick noch Probleme macht der Internet Explorer 7, der einige Darstellungsprobleme mit der Sidebar hat. Hier werde ich mich in den nächsten Tagen noch mit beschäftigen. Wenn es auch in anderen Browsern Probleme gibt würde ich mich über eine kurze Benachrichtigung, am besten auch mit Screenshot, freuen und ich werde versuchen das zu beheben.

In den nächsten Tagen werden auch noch einige neue Inhalte dazu kommen in Form von “statischen” Seiten, doch der größte Teil ist jetzt online. Ich freue mich schon auf die nächsten 200 Artikel und hoffe noch einige neuen Leser dazu gewinnen zu können!

Euch allen derweilen eine schöne Weihnachtszeit und in ein paar Wochen einen guten Rutsch ins Jahr 2010!

Windows 7 Workshops – im neuen Jahr mit neuem Programm!

18.12.2009 14:02:15 | Peter Kirchner

Auch im kommenden Jahr werden wir wieder die beliebten Windows 7 Workshops für Softwarehersteller anbieten. Mit einer frischen Agenda ist der Schwerpunkt ein wenig mehr Richtung Entwickler verschoben worden.

Themen:

  • Windows 7 Anwendungskompatibilität
  • Windows 7 Logo
  • Benutzerkontensteuerung in der Praxis
  • Windows Error Reporting in der Praxis
  • High DPI in der Praxis
  • Neue Features in Windows 7
  • .NET 4.0 und Windows 7

Hinweise:

  • Zielgruppe sind Software-Entwickler und -Architekten
  • Laptops sind nicht zwingend notwendig, jedoch praktisch, wenn Sie bestimmte Themen gleich selbst nachvollziehen möchten. Dazu sollten Sie auf Ihrem Laptop Windows 7 und Visual Studio 2010 vorinstalliert haben. Notwendige SDKs oder Tools werden vor Ort bereitgestellt.

Termine:

Die Veranstaltungen werden um 10 Uhr beginnen und ca. gegen 17 Uhr enden. Ihre Anmeldungen schicken Sie bitte einfach an unsere E-Mail-Adresse fitmit7@microsoft.com.

Informationen zu weiteren Angeboten für Softwarehersteller können Sie auch beim Microsoft Partner Network finden.

Update 14.01.2010: Neuen Termin für Köln hinzugefügt.

Weiterführende Links:

Bing Hintergrund-Archiv

18.12.2009 13:14:01 | Gordon Breuer

bing Bis vor ein paar Tagen habe ich regelmäßig alle täglich wechselnden Hintergrundbilder der Bing-Startseite sowohl für Deutschland als auch International heruntergeladen und in meinem Skydrive-Account gespeichert. Diese Bilder bleiben auch weiterhin online, einschließlich dem Archiv der Bilder vom Vorgänger Live-Search.

Da es aber Alternativseiten gibt, die umfangreicher und auch besser designed sind, habe ich nun beschlossen meine eigene Archivierung einzustellen und ab sofort die Bilder nicht weiter zu aktualisieren. Der Quellcode meines verwendeten Programmes steht allerdings weiterhin für Interessierte zur Verfügung.

Wer ein Archiv der Bing-Hintergründe sucht wird am ehesten hier fündig.

Auswertung Restriktiv vs. Robuste Entwicklung

18.12.2009 10:53:00 | Nico Franze

Auf meinen Blogeintrag hin zu "Rebuste vs. Restriktive Programmierung", wo ich die Behauptung aufgestellt habe, dass es eine Frage des Charakters des Entwicklers sei, gab es mittlerweile mehr als 30 Fremdkommentare. Ein spannendes Thema, dass ich nun hier einmal zusammen fassen möchte.

Ausgangsthese war die Betrachtung des eigenen Programmierstils in Bezug auf Robustheit bzw. Restriktivheit von API-Methoden. Am Beispiel der Methode LoadCustomer(string alphaNumber), wobei die Kundennummer alphanumerisch sei, bedeutet Restriktiv (für mich wohlgemerkt), dass eine Methode nur dann einen Kunden findet, wenn die Kundennummer exakt übereinstimmt. Also keine Leerzeichen, kein null, Groß- und Kleinschreibung stimmt, alle Bindestriche und Sonderzeichen sind exakt eingegeben. In allen anderen Fällen wird eine Exception geworfen und der Kunde konnte nicht gefunden werden. Robust bedeutet, dass z.B. einfach mal Leerzeichen Links und rechts abgeschnitten werden, weil so die Chance, mehr Eingaben als gültig zu erkennen höher ist. Bei null gibts natürlich auch da ein Problem, aber Bindestriche könnte man z.B. auch ersetzen oder versuchen zu behandeln, wenn das Format der Nummer klar ist.

Es sei noch kurz erwähnt, dass ich oft mit Client-Entwicklung zu tun habe und deswegen oft von dem Szenario ausgehe, dass unter anderem Benutereingaben (bzw. ungeprüfte Eingaben woher auch immer) direkt an die API übergeben werden. Als Beispiele wurde zum Beispiel genannt, dass Controls.Add(null) oder label1.Text=null einfach nichts macht. Es stürzt nicht ab und wirft keine Exception, eine meiner Meinung nach sehr robuste und gute Entwicklungsweise.

Andere Beispiele für Restriktive Entwicklung wurden genannt, so zum Beispiel "simpler Datentyp".Parse oder auch alles was mit Sicherheit zu tun hat.

Zusammenfassend kann folgendes gesagt werden:

1. Alle beteiligten sind sich einige, dass, egal was auch immer eine Methode macht. Es muss irgendwo stehen und dokumentiert sein.

2. Eine Methode sollte im Namen schon soo viel wie möglich darüber aussagen, was sie auch tut. Als Beispiel hierfür gibt es die ganzen coolen ExtensionMethods, die da z.B. heissen First<>() oder FirstOrDefault<>(), wobei First eine Exception werfen kann (restriktiv) und FirstOrDefault einfach den Defaultwert zu dem Datentyp zurückgibt (robust). Namen wie "LoadCustomerByNumderOrDefaultAndTrimAndCaseSensitiveAndOtherSignsAreHandledToo" (ich übertreibe leicht), sind natürlich ungünstig.

3. Ein grober Nachteil meines Favoriten, nämlich der robusten Entwicklungsmethodik, ist der Fakt, dass unter Umständen Fehler "verloren" gehen könnten. Dabei sind sich auch alle einig, dass dies niemals der Fall sein sollte. Leere catch-Blöcke sind nur in Ausnahmesituationen ok und ansonsten sollte eine Exception, wenn sie schon nicht nach aussen weitergereicht wird, zumindest irgendwie irgendwo protokolliert werden. Andere Entwickler erkennen Fehler schneller und besser, wenn eine Exception geworfen und nach aussen gereicht wird.

4. Oft ist es eine Frage der Umgebung und der Anforderung, wie und wo eine API eingesetzt wird und ob sie sich an dieser Stelle restriktiv und robust verhalten soll. In Sachen Sicherheit sollte eine API immer restriktiv sein. Also hier kann nicht mal eben versucht werden, dem Benutzer unter die Arme zu greifen und seine Eingabe doch noch richtig zu interpretieren. Wenn ein Kennwort nicht exakt stimmt, dann ist es falsch. Das ist klar.

5. Es wurden einige Vorgehensweisen und Situationen genannt, die, wenn sie richtig durchgeführt und eingehalten werden, viele Fragen von vorn herein beantworten, damit nachher niemand da steht und nicht weiss, was er genau machen soll (und so vllt. eine Exception wirft oder auch nicht...). Ein Ansatz war immer vorher gut durchdachte Kontrakte zu erstellen, und wenn diese klipp und klar sind, dann stellen sich auch später keine Fragen wie :"Ja soll ich dem Benutzer nun unter die Arme greifen und Leerzeichen wegmachen bei der Eingabe einer Kundennummer???". Weiterhin wurde gesagt, dass, wenn alle Teammitglieder gut, oft, offen und ordentlich mit einander kommunizieren, es dann auch einfacher ist, Methoden die man geschrieben hat, für andere Entwickler bereitzustellen. Leider ist dieser Perfektionissmuss, der notwendig ist, damit wirklich immer alles glatt läuft, so wie es im Buche steht, oft nur Theorie. Die echte Praxis unterscheided sich aus vielerlei Gründen oft, was wohl jeder bestätigen kann, der schon in unterschiedlichen Projekten mit unterschiedlichen Kunden und unterschiedlichen Anforderungen gearbeitet hat...

6. Es kam heraus, dass die Mehrheit der Entwickler eher zur restriktiven Gruppe zählen würden, als zur robusten. Sie würden viel eher hier und da mal eine Exception mehr werfen, als eine zu wenig. Eine gute Alternative ist es aber, z.B. in seiner API einstellen zu können, ob man lieber ne Exception haben will oder nicht. So verhält sich die API entweder robust oder restriktiv.

7. So, im Endeffekt könnte man da bestimmt noch weiter diskutieren. Ich selbst habe mit meiner robusten Enwicklungsart mehr positive Erfahrungen gemacht als mit der restriktiven Variante und meine Kunden auch (Endbenutzer sowie auch andere Entwickler). Deswegen werde ich wohl dabei bleiben. Andere widerum haben genau andere Erfahrungen gemacht. Deswegen bleiben diese bei ihren Methoden. Wieder Andere sagen, wenn man sich überhaupt zwischen restriktiv und robust entscheiden muss (das macht man meiner Meinung nach aber auch oft im Unterbewusstsein), dann is schon von vorn herein irgendwas falsch.

Also die eine klare Endlösung gibt es nicht. Die Meinungen gehen auseinander aufgrund der Erfahrungen der Entwickler hier. Beide Versionen haben Vor- und Nachteile, wie Alles in der Welt. Wichtig ist nur, dass man sich überhaupt mal bewusst ist, dass es da einen Unterschied gibt und in welche Richtung der eigene Charakter aufgrund von Erfahrungen geprägt wurde...

Verlängerte Betaphase für Visual Studio 2010 – „Release Candidate“ im Februar 2010

18.12.2009 10:29:27 | Peter Kirchner

Seit Oktober ist Beta 2 von Visual Studio 2010 frei verfügbar und wurde bisher von einigen Hunderttausenden Entwicklern weltweit herunter geladen und getestet. Seitdem haben wir eine Unmenge an konstruktivem Feedback erhalten – vielen Dank dafür an alle Tester der Beta 2 von Visual Studio 2010!

Im Rahmen dieses umfangreichen Feedbacks hat sich auch herauskristallisiert, dass die Arbeitsgeschwindigkeit von Visual Studio 2010 Beta 2 in verschiedenen Schlüsselszenarien (wie beispielsweise bei der Nutzung virtuellen Speichers) noch unbefriedigend ist. Zwar wurde die Arbeitsgeschwindigkeit seit Beta 1 deutlich verbessert, aber es gibt eindeutig noch Verbesserungspotential für die endgültige Version von Visual Studio 2010.  Die Entwicklungsteams sind sich dessen bewusst und arbeiten mit Hochdruck daran, die Arbeitsgeschwindigkeit zu verbessern. Seit der Veröffentlichung von Beta 2 im Oktober wurden in diesem Bereich bereits signifikante Verbesserungen erzielt.

Um sicherzustellen, dass Visual Studio 2010 den hohen Erwartungen gerecht wird, haben wir uns entschieden mehr Zeit in die Optimierung zu investieren und die Betaphase um einen weiteren Meilenstein vor der Veröffentlichung zu verlängern. Voraussichtlich im Februar 2010 wird daher ein „Release Candidate“ von Visual Studio 2010 erscheinen (ebenfalls mit einer „Go Live License“ für den produktiven Einsatz. Was eine „Go Live  License“ ist wird hier erklärt). 

Das Ziel dieses „Release Candidate“ ist es, die neuen Geschwindigkeitsverbesserungen der Öffentlichkeit zum Testen freizugeben, um erneut möglichst breites Feedback für die Entwicklungsteams zu bekommen. Naturgemäß benötigt das Entwicklungsteam dadurch ein wenig mehr Zeit, um das Feedback zu sammeln und umzusetzen, bevor die endgültige Version von Visual Studio 2010 fertig gestellt werden kann. Daher wird der offizielle Veröffentlichungstermin von Visual Studio 2010 und .NET Framework 4 um ein paar Wochen verschoben. 

Ihr Feedback wird gehört

Unser Aufruf an die Entwicklergemeinde: Geben Sie uns weiterhin Feedback zur aktuellen Beta 2 von Visual Studio 2010 und im Februar zum „Release Candidate“ – Ihr Feedback kommt direkt dort an, wo es wichtig ist: In den Produktgruppen und Entwicklungsteams, die hart daran arbeiten, Visual Studio 2010 zur besten Entwicklungsumgebung zu machen. Der beste Weg, Feedback zu geben, sind die Connect-Websites zu Visual Studio 2010: https://connect.microsoft.com/VisualStudio

Was bedeutet das für die aktuellen Promotions und Aktionen?

Derzeit laufen drei wichtige Aktionen:

  • Die „MSDN Attach Promo“, mit der Besitzer eines Visual Studio Professional ohne MSDN dieses MSDN nachrüsten können und dabei bis zu 61 Prozent gegenüber einer Neulizenzierung sparen können. Diese Promotion endet trotzdem am 31.3.2010 (weitere Infos zu dieser Promo).
  • Das „Ultimative Angebot für Entwickler“, auch bekannt als „Doppelte Leistung zum halben Preis“ bei dem Entwickler jetzt ein Visual Studio mit MSDN erwerben können, um dann zur Veröffentlichung von Visual Studio 2010 ein circa zweieinhalbfaches Leistungspaket ohne zusätzliche Lizenzkosten zu erhalten wird verlängert – voraussichtlich bis zum tatsächlichen Veröffentlichungstermin (der noch nicht bekannt ist). (Weitere Infos zu dieser Aktion.)
  • Die Aktion „Letzte Chance auf das klassische Rundum-Sorglos-Paket für IT-Administratoren und IT-Profis“ wird ebenfalls bis zum tatsächlichen Veröffentlichungstermin verlängert. Speziell für IT-Profis und Administratoren ist das klassische MSDN Premium ein hervorragendes „Rundum-Sorglos-Paket.“ Diese Anwender benötigen zwar üblicherweise keine Microsoft-Entwicklerwerkzeuge (also kein Visual Studio), aber dafür flexiblen und unbürokratischen Zugriff auf Microsoft Server, Office und Betriebssysteme. In MSDN Premium ist alles drin – und Microsoft Office darf sogar produktiv genutzt werden! Allerdings wird dieses klassische MSDN Premium mit der Veröffentlichung von Visual Studio 2010 durch ein neues Produkt ersetzt, welches zwar mehr als den zweieinhalbfachen Leistungsumfang bietet, aber auch höhere Einstiegskosten mit sich bringt. Sichern Sie sich daher noch vor der Veröffentlichung von Visual Studio 2010 das günstige MSDN Premium als „Rundum-Sorglos-Paket“ für Ihre IT-Profis und Administratoren und profitieren Sie von der einfachen Lizenzierung und den geringeren Kosten gegenüber dem Einzelkauf. Sie erhalten wie beim „Ultimativen Angebot“ für Entwickler bei Erscheinen von Visual Studio 2010 außerdem die nächsthöhere Version der Subscription – für die komplette Restlaufzeit Ihres Vertrages natürlich ohne zusätzliche Lizenzkosten. Wenden Sie sich an Ihren Fachhändler oder direkt an Microsoft. Wir beraten Sie gerne, wie Sie mit MSDN Premium Ihre IT standardisieren und Geld sparen können.

Microsoft Silverlight Support Lifecycle-Richtlinie

18.12.2009 10:26:39 | Oliver Scheer

Weil es immer wieder nachgefragt wurde und etwas ist, was nicht jeder bietet. Text wurde original von hier übernommen.

“Microsoft veröffentlicht neue Support Lifecycle-Informationen für Microsoft Silverlight.

In der Vergangenheit wurde Microsoft Silverlight separat von Microsoft-Produkten veröffentlicht, daher hatte es auch keinen genau definierte Produktenlebenszyklus. Um dies nun klarer zu definieren, wird Silverlight von nun an als "Tool" bezeichnet.
Ein "Tool" ist ein Hilfsprogramm oder Feature, das eine bestimmte Aufgabe oder mehrere begrenzte Aufgaben ausführt. Das Ende des Lebenssykluses für größere Versionen des Tools wird mindestens 12 Monate davor bekanntgegben. Andernfalls endet der Support mit dem Ende des Supportzeitraums für das dazugehörige Produkt, z. B. Microsoft Windows.

Hinweis: Einige Tools erhalten u. U. Sicherheitsupdates oder neue Features. Kunden müssen evtl. diese Updates installieren, um auch weiterhin Support für die Hauptversion des Tools zu erhalten.
Die Microsoft Support Lifecycle-Richtlinien bieten Ihnen klare und planbare Supportbestimmungen bzgl. Ihrer Microsoft-Produkte. Weitere Informationen finden Sie unter:http://support.microsoft.com/lifecycle

Fragen und Antworten:

Supportlebenszyklus für Microsoft Silverlight

Microsoft wird auch weiterhin alle Versionen von Silverlight mithilfe von Updates zur neuesten Version für Silverlight-Runtime und Silverlight SDK unterstützen. Updates und neue Versionen von Silverlight-Runtime sind abwärtskompatibel in Webapplikationen, die mithilfe von früheren Silverlight-Versionen erstellt wurden und enthalten zudem die aktuellen Features in den Bereichen Sicherheit, Performance sowie Problembehebung. Vorangegange Versionen werden auch dann unterstützt wenn Sicherheitsanfälligkeiten durch das Microsoft Security Response Center (MSRC) festgestellt wurden.

Silverlight 1 – Microsoft wird allen Kunden mit Silverlight 1 bis zum 12.Oktober 2010 kostenlosen Support zur Verfügung stellen. Jeder Kunde kann mithilfe eines Upgrades auf die aktuellste Silverlight-Version kostenlosen Installationssupport erhalten. Microsoft wird MSRC-Sicherheitsanfälligkeiten für die Silverlight 1-Runtime veröffentlichen.

Silverlight 1-Entwickler mit den entsprechenden Developer-Tools erhalten kostenpflichtigen Support in Form von Workarounds. Nach Möglichkeit empfehlen wir allen Kunden, das Update der Developertools auf die aktuellste Version. Microsoft wird Updates für Silverlight 1-Runtime und Silverlight 1 SDK in Bezug auf MSRC-Sicherheitsanfälligkeiten veröffentlichen.

Silverlight 2 – Microsoft wird allen Kunden mit Silverlight 2 bis zum 12.Oktober 2010 kostenlosen Support zur Verfügung stellen. Jeder Kunde kann mithilfe eines Upgrades auf die aktuellste Silverlight-Version kostenlosen Installationssupport erhalten. Microsoft wird Updates für Silverlight 2-Runtime und Silverlight 2 SDK in Bezug auf MSRC-Sicherheitsanfälligkeiten veröffentlichen.

Silverlight 2-Entwickler mit den entsprechenden Developer-Tools erhalten kostenpflichtigen Support in Form von angemessenen Workarounds. Nach Möglichkeit empfehlen wir allen Kunden, das Update der Developertools auf die aktuellste Version. Microsoft wird Updates für Silverlight 2-Runtime und Silverlight 2 SDK in Bezug auf MSRC-Sicherheitsanfälligkeiten veröffentlichen.

Silverlight 3 – Microsoft wird allen Kunden mit Silverlight 3 kostenlosen Support zur Verfügung stellen. Kostenpflichtige Supportoptionen stehen allen Kunden zur Verfügung, die weitergehende Probleme haben. Microsoft wird Updates für Silverlight 3-Runtime und Silverlight 2 SDK in Bezug auf MSRC-Sicherheitsanfälligkeiten veröffentlichen.

Silverlight 3-Entwickler mit den entsprechenden Developer-Tools erhalten kostenpflichtigen Developer-Support. Microsoft unterstützt auch weiterhin Silverlight 3-Entwickler in Form von Updates zur Silverlight 3-Runtime und, falls nötig, auch für die Silverlight 3 SDK.

Das Ende des Supports für Silverlight 3 wird mindestens 12 Monate davor bekanntgegben. Weitere Ankündigungen zum Support Lifecycle von Silverlight finden Sie unter http://support.microsoft.com/lifecycle und http://support.microsoft.com/Silverlight.

Die Microsoft Support Lifecycle-Richtlinien bieten Ihnen klare und planbare Supportbestimmungen bzgl. Ihrer Microsoft-Produkte. Weitere Informationen finden Sie unter:http://support.microsoft.com/lifecycle

Die Originalformulierung kann hier nachgelesen werden.

Verlängerte Betaphase für Visual Studio 2010 – „Release Candidate“ im Februar 2010

18.12.2009 09:41:48 | Oliver Scheer

Seit Oktober ist Beta 2 von Visual Studio 2010 frei verfügbar und wurde bisher von einigen Hunderttausenden Entwicklern weltweit herunter geladen und getestet. Seitdem haben wir eine Unmenge an konstruktivem Feedback erhalten – vielen Dank dafür an alle Tester der Beta 2 von Visual Studio 2010!

Im Rahmen dieses umfangreichen Feedbacks hat sich auch herauskristallisiert, dass die Arbeitsgeschwindigkeit von Visual Studio 2010 Beta 2 in verschiedenen Schlüsselszenarien (wie beispielsweise bei der Nutzung virtuellen Speichers) noch unbefriedigend ist. Zwar wurde die Arbeitsgeschwindigkeit seit Beta 1 deutlich verbessert, aber es gibt eindeutig noch Verbesserungspotential für die endgültige Version von Visual Studio 2010.  Die Entwicklungsteams sind sich dessen bewusst und arbeiten mit Hochdruck daran, die Arbeitsgeschwindigkeit zu verbessern. Seit der Veröffentlichung von Beta 2 im Oktober wurden in diesem Bereich bereits signifikante Verbesserungen erzielt.

Um sicherzustellen, dass Visual Studio 2010 den hohen Erwartungen gerecht wird, haben wir uns entschieden mehr Zeit in die Optimierung zu investieren und die Betaphase um einen weiteren Meilenstein vor der Veröffentlichung zu verlängern. Voraussichtlich im Februar 2010 wird daher ein „Release Candidate“ von Visual Studio 2010 erscheinen (ebenfalls mit einer „Go Live License“ für den produktiven Einsatz. Was eine „Go Live  License“ ist wird hier erklärt). 

Das Ziel dieses „Release Candidate“ ist es, die neuen Geschwindigkeitsverbesserungen der Öffentlichkeit zum Testen freizugeben, um erneut möglichst breites Feedback für die Entwicklungsteams zu bekommen. Naturgemäß benötigt das Entwicklungsteam dadurch ein wenig mehr Zeit, um das Feedback zu sammeln und umzusetzen, bevor die endgültige Version von Visual Studio 2010 fertig gestellt werden kann. Daher wird der offizielle Veröffentlichungstermin von Visual Studio 2010 und .NET Framework 4 um ein paar Wochen verschoben. 

Ihr Feedback wird gehört

Unser Aufruf an die Entwicklergemeinde: Geben Sie uns weiterhin Feedback zur aktuellen Beta 2 von Visual Studio 2010 und im Februar zum „Release Candidate“ – Ihr Feedback kommt direkt dort an, wo es wichtig ist: In den Produktgruppen und Entwicklungsteams, die hart daran arbeiten, Visual Studio 2010 zur besten Entwicklungsumgebung zu machen. Der beste Weg, Feedback zu geben, sind die Connect-Websites zu Visual Studio 2010: https://connect.microsoft.com/VisualStudio

Was bedeutet das für die aktuellen Promotions und Aktionen?

Derzeit laufen drei wichtige Aktionen:

· Die „MSDN Attach Promo“, mit der Besitzer eines Visual Studio Professional ohne MSDN dieses MSDN nachrüsten können und dabei bis zu 61 Prozent gegenüber einer Neulizenzierung sparen können. Diese Promotion endet trotzdem am 31.3.2010 (weitere Infos zu dieser Promo).

· Das „Ultimative Angebot für Entwickler“, auch bekannt als „Doppelte Leistung zum halben Preis“ bei dem Entwickler jetzt ein Visual Studio mit MSDN erwerben können, um dann zur Veröffentlichung von Visual Studio 2010 ein circa zweieinhalbfaches Leistungspaket ohne zusätzliche Lizenzkosten zu erhalten wird verlängert – voraussichtlich bis zum tatsächlichen Veröffentlichungstermin (der noch nicht bekannt ist). (Weitere Infos zu dieser Aktion.)

· Die Aktion „Letzte Chance auf das klassische Rundum-Sorglos-Paket für IT-Administratoren und IT-Profis“ wird ebenfalls bis zum tatsächlichen Veröffentlichungstermin verlängert. Speziell für IT-Profis und Administratoren ist das klassische MSDN Premium ein hervorragendes „Rundum-Sorglos-Paket.“ Diese Anwender benötigen zwar üblicherweise keine Microsoft-Entwicklerwerkzeuge (also kein Visual Studio), aber dafür flexiblen und unbürokratischen Zugriff auf Microsoft Server, Office und Betriebssysteme. In MSDN Premium ist alles drin – und Microsoft Office darf sogar produktiv genutzt werden! Allerdings wird dieses klassische MSDN Premium mit der Veröffentlichung von Visual Studio 2010 durch ein neues Produkt ersetzt, welches zwar mehr als den zweieinhalbfachen Leistungsumfang bietet, aber auch höhere Einstiegskosten mit sich bringt. Sichern Sie sich daher noch vor der Veröffentlichung von Visual Studio 2010 das günstige MSDN Premium als „Rundum-Sorglos-Paket“ für Ihre IT-Profis und Administratoren und profitieren Sie von der einfachen Lizenzierung und den geringeren Kosten gegenüber dem Einzelkauf. Sie erhalten wie beim „Ultimativen Angebot“ für Entwickler bei Erscheinen von Visual Studio 2010 außerdem die nächsthöhere Version der Subscription – für die komplette Restlaufzeit Ihres Vertrages natürlich ohne zusätzliche Lizenzkosten. Wenden Sie sich an Ihren Fachhändler oder direkt an Microsoft. Wir beraten Sie gerne, wie Sie mit MSDN Premium Ihre IT standardisieren und Geld sparen können.

Was ist neu in Silverlight 4?

18.12.2009 09:00:00 | Oliver Scheer

Neue Version, neue Features. Und dann auch noch so viele? Ja geht das überhaupt? Ja.

Jetzt mal ein grober Überblick über die Bereiche in denen

es neue Funktionalitäten gibt.

  • Tooling
  • Printing API
  • Right-click event handling
  • Webcam/microphone access
  • Mouse wheel support
  • RichTextArea Control
  • ICommand support
  • Clipboard API
  • HTML Hosting with WebBrowser
  • Elevated trust applications
  • Local file access
  • COM interop
  • Notification (“toast”) API
  • Network authentication
  • Cross-domain Networking changes
  • Keyboard access in full screen mode
  • Text trimming
  • ViewBox
  • Right-to-left, BiDi and complex script
  • Offline DRM
  • H.264 protected content
  • Silverlight as a drop target
  • Data binding
    • IDataErrorInfo and Async Validation
    • DependencyObject Binding
    • StringFormat, TargetNullValue, FallbackValue
  • Managed Extensibility Framework (MEF)
  • DataGrid enhancements
  • Fluid UI support in items controls
  • Implicit theming
  • Google Chrome support

Eine umfassende Beschreibung aller Features, Trainingsvideos und Beispielen kann bei Tim Heuer eingesehen werden.

Türchen Nummer 18

18.12.2009 07:37:54 | Peter Nowak

Nach einem längeren Abend am Glühweinstand kann es in seltenen Fällen dazu kommen, dass man seinen eigenen Namen am nächsten Morgen vergessen hat.
Gut, wenn dieser im mobilen Gerät gespeichert ist.
Das folgende Beispiel funktioniert natürlich nur dann, wenn der Benutzername in den Besitzerinformationen hinterlegt wurde.

C++

//State & Notification Broker Header Datei
#include "snapi.h"
//Registry Hilfsfunktionen
#include "regext.h"

...

//Per Registry Helfer Funktion und den State&Notification Broker Konstanten
//die Besitzerinformationen auslesen. Setzt natürlich voraus das der Anwender diese Informationen auch eingegeben hat.
TCHAR szUserName[MAX_PATH] = L"\0";
if(RegistryGetString(SN_OWNERNAME_ROOT,SN_OWNERNAME_PATH,SN_OWNERNAME_VALUE,szUserName,MAX_PATH)==S_OK)
    _tprintf(L"Username: %s\n",szUserName);
else
    _tprintf(L"Fehler bei RegistryGetString\n");




C#

Mittels SnAPI ist das Auslesen mittels managed Code ganz einfach, wenn zuvor die Verweise zu den Bibliotheken Microsoft.WindowsMobile und Microsoft.WindowsMobile.Status hinzugefügt wurden.

Somit besteht das Snippet dann wieder aus einer Zeile ausführbarem Code:

using Microsoft.WindowsMobile.Status;
...
Console.WriteLine((string)SystemState.GetValue(SystemProperty.OwnerName));


Patrick & Peter



This posting is provided "AS IS" with no warranties, and confers no rights.

Windows Azure SDK Installationsprobleme

17.12.2009 17:09:46 | Jan Schenk



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/12/17/windows-azure-sdk-installationsprobleme.aspx'; tweetmeme_source = 'jansche';

Ich gehe mal davon aus, dass das nur 64bit Windows 7 User betrifft. Es könnte auch noch sein, dass es damit zusammen hängt, dass ich das .NET4.0 Framework installiert habe, da ich mit Visual Studio 2010 arbeite.

Aber falls ihr über diesen Fehler stolpert, könnte euch diese kurze Anleitung helfen.

Bei Ausführen des Windows Azure SDK Setup v1 bekam ich diese hübsche Fehlermeldung, obwohl .NET Framework 3.5 Service Pack 1 (.NET FX 3.5SP1) installiert und aktiviert war.

“To use this software, you must first install the .NET Framework 3.5 Service Pack 1. See the product release notes for details”.

image Bullshit, irgendwas hat meine Registry vereiert, denn die Lösung für das Problem fand mein Kollege Bernhard Frank in den Foren von msdn.

http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/939536eb-741d-4a18-81ee-3a9ff95724f9/

Die zwei Registry-Schlüssel
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v3.5\SP
und
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5\SP
müssen beide auf 1 gesetzt sein.

Bei mir war es der zweite, der auf 0 war, und damit diesen Fehler auslöste.

image

So wuppt es:

image

Und schon flutscht auch die Installation des Software Development Kit für Windows Azure.

Viel Spass,
jan

Silverlight 4 Beta veröffentlicht

17.12.2009 16:34:33 | Oliver Scheer

Auf der im November stattgefundenen Microsoft Professional Developer Conference (PDC) hat Scott Guthrie die Verfügbarkeit einer ersten Beta von Silverlight 4 bekannt gegeben.

Die Geschwindigkeit ist echt beachtlich, wenn man bedenkt das Silverlight 3 gerade mal vor knapp drei Monaten veröffentlicht wurde. Die neue Beta-Version ist definitiv nur als Vorabversion für Entwickler gedacht, um die neuen Features vorzustellen und Feedback aus der Entwicklercommunity zu erhalten. Das Plug-In ist keine Consumer-Version, das bedeutet, es geht nicht mit einer Go-Live-Lizenz einher. Diese Vorabversion ist nicht für den Produktiveinsatz gedacht.

Was benötigt der Entwickler um erste Eindrücke der neuen Version zu erhalten?

  • Visual Studio 2010 Beta 2 oder Visual Web Developer Express 2010 Beta 2
  • Silverlight Tools for Visual Studio 2010
  • Expression Blend for .NET 4 Preview
  • WCF RIA Services (früher bekannt unter dem Namen .NET Ria Services)
  • Die Silverlight 4 SDK Dokumentation im CHM-Format
  • Das Silverlight Toolkit wurde für Silverlight 4 angepasst und kann auch dort verwendet werden
  • Es gibt jeweils eine Entwickler-Laufzeitumgebung für Windows und Mac
  • Silverlight 4 SDK (Bestandteil der Silverlight Tools für Visual Studio 2010)

Die Links zu der Software sind hier zu finden.

25. Treffen der PASS Regionalgruppe Sachsen am 25.01.2010

17.12.2009 16:34:00 | Martin Hey

5 Jahre PASS Deutschland - in Dresden wird nachgefeiert! Nachdem das eigentliche Treffen zum Thema Microsoft SQL Server 2008 R2 im September leider aufgrund von Krankheit nicht ganz wie geplant stattfinden konnte, wird der Termin nun nachgeholt.
Die PASS Regionalgruppe Dresden trifft sich am Montag den 25.01.2010 an gewohnter Stelle im IT-Trainingshaus am Waldschlösschen. Nähere Informationen zum Termin und eine Anfahrtsbeschreibung findet man auf der PASS-Seite im Bereich Regionalgruppe Sachsen.

Exam 70-630: Configuring Office SharePoint Server 2007

17.12.2009 15:43:00 | Martin Hey

Da sich das Jahr nun so langsam dem Ende zuneigt, war das nun auch die letzte Prüfung für dieses Jahr. Dieses Mal war es die Zertifizierungsprüfung 70-630. Wie der Name schon sagt, ging es in den 51 Fragen um die Konfiguration und Einrichtung von MOSS 2007.

Thematisch ging es dabei um:
  • Configuring Microsoft Office SharePoint Server 2007
  • Managing Search
  • Configuring Content Management
  • Configuring Business Forms
  • Managing Business Intelligence
  • Managing Administration
  • Deploying or Upgrading

Zu den einfacheren Fragen gehörten sinngemäß: "Was sollte man tun, wenn die Suche nicht alle Ergebnisse findet?" oder "Wie bekomme ich einen Link zu einer Site in die Navigationsleiste?" Aber einige der Fragen betrachteten auch Themen, mit denen man sich nicht täglich konfrontiert sieht, wie den Search-for-broken-Links-Menüpunkt oder der Einrichtung von IRM.

Chrome Extension - Chrome Touch (Touchscreen use like IPhone)

17.12.2009 09:32:00 | Andreas Mehl

Because i have a netbook with Touchscreen functionality, i would like to use the Browser Scroll Feature from the new IPhone Handy.

So i found the Extension for the Chrome Browser.

Get chromeTouch

 

After Downloading, it doesn't work with my Ramdisk installed Chromium.

I tried many things to get it worked.

The Solution is as follows:

 

Create a Folder "c:\myextension"

Extract the content of the crx File into the folder

Find your chrome shortcut (for example, right-click the Chrome icon on your desktop and choose Properties) and add the --load-extension flag to it:

chrome.exe --load-extension="c:\myextension"

 

Thats it :)

 

more Extensions can be found here:

http://www.chromeextensions.org/

Netbook - Ultra Speed in Web-Browsing with Ramdisk, Sandboxie and Chrome

17.12.2009 09:24:00 | Andreas Mehl

How to create a RAM DISK with "Gavotte Ramdisk"

Click Download and you get the "Gavotte Ramdisk" (freeware)

Unzip the zip archive and start Ramdisk.exe

Now Click on "Install Ramdisk"

"Disk Size(Bytes)" if you have 1 GB of RAM then you should only 32 use for the ramdisk.
All which have more than 1 GB of RAM should set max. 1 / 4 of RAM
without using PC-losing performance, etc. ..
I have 2 GB so i setted up a 512 MB RamDrive.


"Driver Letter" here you can take a drive-letter
Select the best take your "R"

In the "Media Type" select "Fixed Media"

Now click on "Apply">>> OK>>> OK>>> "OK"

In the workplace you now see a new drive with the letter "R"
this is your RAM disk as you can now put everything you want
eg: "Windows Temp folder" Firefox browser "software", etc. ..


   
Change Location of Temp Files

Go to Control Panel, System Advanced and click on 'Environment Variables'.

Set both tmp and temp to R:\Temp and create a new Temp folder on R


Downloading and Installing Sandboxie

Click Download to get Sandboxie.

After installing Sandboxie, please review the Getting Started tutorial in the Help Topics page. 

Now set Sandboxie Container Location to Ramdisk Drive.

 

Browsing with Google Chrome

get it Here or take the chromium version which i prefer.

After extracting or installing, move the chrom/chromium folder to Ramdisk.

Create Desktop Shortcut.

 

Finally Start Browsing by clicking right on the Desktop Shortcut and choose Start with the Sandboxie.

 

 

HTML 5 und Web Standards im Internet Explorer 8 [IE8]

17.12.2009 08:09:34 | Kay Giza

HTML 5 ist noch nicht in trockenen Tüchern, sondern liegt noch als W3C HTML 5 Working Draft vor, dennoch sind einige der interessantesten Technologien daraus bereits in Internet Explorer 8 integriert. Weiter in diesem Blogposting, mehr als 7.200 einzelne Testszenarien zum CSS 2.1-Standard, samt und sonders zu finden im MSDN Internet Explorer Testing Center, hat Microsoft in diesem Jahr an das zuständige W3C übermittelt... [... vollständiger und ausführlicher Artikel 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

MSDN TV – Weihnachts-Ausgabe 14.12.09

17.12.2009 07:52:51 | Kay Giza

In der letzten Folge vor den Feiertagen widmet sich "MSDN TV" dem Themen-Schwerpunkt „Cloud Computing mit der Windows Azure Plattform“. Bei Jan Schenk zu Gast ist diesmal Holger Sirtl, „Architect Evangelist“ für Cloud Computing bei Microsoft Deutschland und Autor eines gerade erschienenen Standardwerks zum Thema.
Ausschließlich aktuelle Download-Tipps gibt’s bei den obligatorischen „MSDN TV“-Kurznachrichten – als da wären: die Visual Studio 2010 Beta 2, Videos von der PDC 09, ein kostenloses ’Microsoft Press’-Buch zu Visual Basic 2008, das Service Pack 1 für Microsoft Expression Web 3 und eine Vorschau auf die nächste SharePoint-Generation mit der Beta des Sharepoint Server 2010 [17:07]

Anfang November hat MSDN eine Gewinnaktion für Zuschauer gestartet, die bereit waren, über ihren Twitter-Account einen Tweet zum Thema „msdn tv“ zu versenden. Mit Ablauf des Monats ist das Preisausschreiben zu Ende gegangen und jetzt stehen auch die Gewinner fest: In einer Sondersendung präsentiert "msdn tv" die offizielle Ziehung von fünf Einsendern, die künftig jeweils ein Expression Studio 3 ihr Eigen nennen können. Durch die Sendung führt Jan Schenk, assistiert von der reizenden Glücksfee Anne Michels [2:33]

Mehr: MSDN TV – Ausgabe 14.12.09




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

Advent, Advent: Ich twittere Windows Azure Tokens

16.12.2009 17:04:44 | Jan Schenk



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/12/16/advent-advent-ich-twittere-windows-azure-tokens.aspx'; tweetmeme_source = 'jansche';

Die frohe Weihnachtszeit soll natürlich auch was für uns Entwickler bereit halten. Ich habe dafür keine Mühen gescheut und den Registrierungsprozess bei Windows Azure für euch übernommen. Jetzt twittere ich jeden Tag 3 Windows Azure Tokens. Morgens, mittags und abends. Was ihr davon habt? Ganz einfach, ihr könnt, wenn ihr schon bei Azure registriert seid, mehrere Projekte anlegen, indem ihr den Code einlöst (“Redeem Token”). Für die, die ihre Nase bisher noch nicht in Windows Azure gesteckt hatten, ist so ein Code auch “good to have”, denn es entfällt ein Registrierungsprozess auf Microsoft Connect.

Um jetzt an so einen Code zu kommen, müsst ihr mir nur auf Twitter folgen:

http://twitter.com/jansche

 

Viel Spass beim Cloud Computing mit Windows Azure!
jan

ASP.NET mehrere Buttons aktivieren

16.12.2009 08:36:34 | Daniel Schädler

Ich stand ziemlich lange vor dem Problem vgl. Grafik, indem ich mehrere Button’s in meiner Seite habe, dass diese jeweils unabhängig voneinander aktiviert werden sollten (Jedes Item im ListViewItem ist ein sogenannter Step, welcher einen Status aufweist und refernzierte Objekte hat, die abgearbeitet werden müssen) Sind nun die sogenannten StepTargets (Items die durch eine WorkflowEngine abgearbeitet werden muss) nicht alle auf dem Status done, so hat der Button (“Weiterleiten”) nicht aktiv zu sein, muss aber immer wieder prüfen ob nun alle Items erledigt worden sind. Vorher habe ich mühsam mit Timern etc. sowie StartupScripts gearbeitet. Nun habe ich mit JQuery eine simple, aber effiziente Lösung gefunden.

In dieser Ansicht sind zwei Schritte aktiv und beide können an die nächste Stelle weitergeleitet werden, da alle referenzierten Objekte abgearbeitet wurden.

CommercialOrderStepOverViewDamit die Buttons im jeweiligen Item (es ist ein ListViewItem Control) aktiv werden habe ich folgendes, simples JQuery erstellt, dass eine PageMethode auftruft, die dann die Zustände der refernzierten Objekte prüft und diese dann auch zurück gibt. Der Einfachheit halber habe ich die StepId im lang Attribute des Buttons versteckt damit ich darauf zugreifen kann.

Hier der Button XML-Code

   1: <asp:Button ID="Step_PassThrough_btn" runat="server" class="buttonsmall" lang='<% #((Step)Eval("Element")).Id %>'
   2:      OnClick="Step_PassThrough_btn_Click" UseSubmitBehavior="true" Enabled="false" OnLoad="Button_OnLoad" />

Ich liebe $(document).ready denn dann wird die Javascript-Anweisung nur ausgeführt wenn alle DOM-Element verfügbar sind. Damit ich mein Ziel erreichen konnte habe ich folgendes JS erstellt.

   1: $(document).ready(function() {
   2:     $(".buttonsmall").each(function() {
   3:         if ($(this)[0].id.search("PassThrough") != -1) {
   4:             var stepId = $(this).context.lang;
   5:             var Transfer_Button = $(this)[0].id;
   6:             if (stepId > 0) {
   7:                 PageMethods.GetStatusForStepTargets(Transfer_Button, stepId, onSuccedCheckStepTargets, onError);
   8:             }
   9:         }
  10:     });
  11: });

Hier schaue ich die ID des Buttons an und führe dann die entsprechende PageMethode aus. Die onSuccededCheckStepTargets sieht dann so aus:

   1: function onSuccedCheckStepTargets(result, userContext, methodName) {
   2:     if (result["Step_Targets_Done"] == "False") {
   3:         setTimeout(function() {
   4:             PageMethods.GetStatusForStepTargets(result["Transfer_Button_Id"], result["Step_T_Id"], onSuccedCheckStepTargets, onError);
   5:         }, 5000);        
   6:     } else {
   7:         if (result["Step_Targets_Done"] == "True" && (result["Transfer_Button_Id"] != null || result["Transfer_Button_Id"] != "")) {
   8:             var TransferButton = $get(result["Transfer_Button_Id"]);
   9:             if (TransferButton != null) {
  10:                 EnableDisableControl(TransferButton, false);
  11:             }
  12:         }
  13:     }
  14: }

Somit können alle Instanzen von Buttons unabhängig und einfach aktiviert werden. Für Kritik und Verbesserungsvorschläge bin ich natürlich immer zu haben.

Backup Email Accounts in Outlook 2007 in .reg file

15.12.2009 20:32:00 | Andreas Mehl

Old Machine

Outlook 2007 is nice enough to put all of its account info for each profile under one key.

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\

So, first off, close Outlook if it's running.

To export your Outlook account information, we just need to export that magic key.

  1. Open Registry Editor.
  2. Select the key that you want to save as a file.
  3. On the File menu, click Export.
  4. In the Export Registry File dialog box, in Save in, click the drive, folder, or network computer and folder where you want to save the hive.
  5. In File name, enter a name for the key. (outlook_profile.reg would work great.)
  6. In Save as type, make sure it's set as Registration Files (*.reg)
  7. Click Save.

To move your old mail, you'll need to copy your PST file to the new machine.

  1. Click Start, Run
  2. Type %userprofile%\local settings\application data\microsoft\outlook
  3. Click OK
  4. In that folder there will be some *.pst files.  Copy (don't move!) them to a removable drive or a network share.  The one you're most likely concerned with is outlook.pst


New Machine

First, we need to import the profile information.

  1. Double-click the file (outlook_profiles.reg) you exported on the old machine.  That will import the new information into the registry.  (Simple!)

Next, we need to get your data file back over.

  1. Click Start, Run
  2. Type %userprofile%\local settings\application data\microsoft\outlook
  3. Click OK
  4. Copy (don't move!) the *.pst files you found on the old machine.  The one you're most likely concerned with is outlook.pst

Lastly, we need to set Outlook to use the profile from the old machine.

  1. Open Control Panel.
  2. Open the Mail applet.
  3. Click on the Show Profiles button.
  4. Choose the profile name that matches the one you used to use from the "Always use this profile" dropdown.
  5. Click OK.

Now, when you open Outlook, you should have your old mail and the mail accounts all set up and ready to go.

IMPORTANT for Passwords:

Outlook on the new machine will ask you for passwords the first time it does a send/receive on all non-Exchange accounts.

Fit PC2 - Kleinster Nettop der Welt

15.12.2009 19:45:00 | Andreas Mehl

Seit kurzem gibt es den derzeit als kleinsten Nettop der Welt bezeichneten Rechner, den Fit-PC2, auch in Deutschland. Ab 379 Euro wird der Nettop angeboten und neben einer Linux-Variante kann man sich auch für Windows 7 als Betriebssystem entscheiden. Damit wird's allerdings etwas teurer. Für solch ein winziges Gerät sind die technischen Innereien und die Anschluss-Möglichkeiten recht gut und vielseitig.

Ich selber habe einen, und bin damit höchst zufrieden. Ich nutze Ihn als Home Server. Ohne irgendwelchen problemen.

nettop_fit-pc2Den Nettop gibt es entweder direkt beim Hersteller oder aber bei SH-EDV und bei Amazon. SH-EDV verlangt für den Fit-PC2 ohne HDD 379 Euro, mit Windows 7 Professional und Instant-On-Feature 545 Euro und bei Amazon gibt es den Fit-PC2 inklusive Linux und HDD für 429 Euro. Das bei SH-EDV erwähnte Instant-On-Feature sorgt dafür, dass der Nettop sofort hochfährt, wenn Spannung auf dem Gerät liegt.

Im Fit-PC2 tickt ein Intel Atom Z530 mit einer Taktrate von 1,6 GHz und als Chipsatz ist der Intel US15W Poulsbo verbaut, der mit der GMA500-Grafikeinheit ergänzt wird. Weiter mit an Bord sind: 1 GByte RAM, LAN, WLAN, 6 USB-Ports und eine 160-GByte-Festplatte (beim SH-Angebot).

Wer sich für Linux entscheidet, kann den Mini-Rechner mittels VLC oder Media Player Classic zum Anschauen von HD-Filmen nutzen: Der HD-Beschleuniger, den es im GMA500 gibt, lässt Filme mit einer Auflösung von 1080p zu. Um das gute Stück mal in der Hand zu sehen und die winzigen Dimensionen wirklich zu fassen, gibt es auf YouTube ein Video:

Windows Azure Infodays starten am 20.01.2009 – Jetzt anmelden!

15.12.2009 17:47:43 | Jan Schenk



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/12/15/windows-azure-infodays-starten-am-20-01-2009-jetzt-anmelden.aspx'; tweetmeme_source = 'jansche';

Ihr habt Interesse an Cloud Computing und Windows Azure im Speziellen? Dann sind das eure Infodays.

clip_image001

Die Termine der Windows Azure Infodays für unsere 4 Städte sehen so aus:

· 20.01.2010 - München

· 10.02.2010 -  Bad Homburg

· 17.02.2010 - Köln

· 16.03.2010 - München

Die Veranstaltung richtet sich primär an eine technisch interessierte Zielgruppe (Architekten, Entwickler, Projektleiter, technische Entscheider) und in der Agenda wurde bewusst etwas weiter gefasst. Alle weiteren Details findet Ihr auf der offiziellen Anmeldewebseite:
www.msdn-online.de/go/azuredays

Wer teilnehmen möchte kann sich entweder direkt anmelden, oder mich nochmal ansprechen (E-Mail, twitter etc.), um ein kleines Goodie obendrauf zu bekommen. Das solltet ihr aber unbedingt vor der Anmeldung tun!

Was erwartet euch?

Agenda für den Azure Information Day:

10.00-10.15 Uhr

Begrüßung und Vorstellungsrunde

10.15-11.30 Uhr

Die Windows Azure Platform (Überblick, Strategie)
Die Windows Azure Platform bietet Entwicklern und Unternehmen die Möglichkeit, auf einfache Weise von den Vorteilen des Cloud Computings zu profitieren. Windows Azure erlaubt es, Anwendungen in der Cloud zu betreiben, Daten zu speichern und Dienste über Unternehmensgrenzen hinweg zu integrieren.
Dieser Vortrag gibt einen Überblick über die Bestandteile der Windows Azure Platform (Windows Azure, SQL Azure, AppFabric) und zeigt Szenarien auf, in denen sich Anwendungen für Cloud Computing mit Azure eignen.

11.30-12.00 Uhr

Diskussionsrunde

12.00-12.45 Uhr

Mittagessen

12.45-14.00 Uhr

Dienste der Windows Azure Platform (technischer Überblick mit Demo)
In diesem Vortrag werden die einzelnen Dienste der Windows Azure Platform näher vorgestellt. Es wird gezeigt, wie einfache Anwendungen erstellt werden können, die auf Windows Azure ausgeführt werden sollen, wie Datenspeicherung mit SQL Azure funktioniert und wie Dienste über .NET Services miteinander kommunizieren können.

14.00-14.45 Uhr

Anwendungsentwicklung mit Azure

  • Was muss beachtet werden, wenn bestehende Anwendungen im Sinne eines Software-as-a-Service-Ansatzes (SaaS) nach Windows Azure migriert bzw. neue Anwendungen für Windows Azure entwickelt werden sollen?
  • Wie können die Dienste der Windows Azure Platform effektiv eingesetzt werden?
  • Wo kann Cloud Computing seine Stärken ausspielen, wo sind Grenzen?

Dieser Vortrag geht auf diese Fragen ein und diskutiert Architekturszenarien für verschiedene Azure-basierte Anwendungen.

14.45-15.00 Uhr

Kaffeepause

15.00-16.00 Uhr

Geschäftsmodelle mit Azure (Kosten, Abrechnung, Mehrwerte)
Im Zentrum dieses Vortrags steht die Frage, wie mit Hilfe von Azure Geschäftsmodelle umgesetzt werden können. Hierzu gehört eine Diskussion der verschiedenen Kosten- und Abrechnungsmodelle von Azure sowie weitere Aspekte der Plattform, die eine Nutzenbetrachtung in verschiedenen Szenarien ermöglichen.

16.00-17.00 Uhr

Diskussionsrunde

Jetzt anmelden und sich einen Platz sichern!
www.msdn-online.de/go/azuredays

Cloud Computing – The Future Is Now!
jan

Freie browser-basierte Entwicklungsumgebung

15.12.2009 13:12:33 | Oliver Scheer

Coderun bietet eine browser-basierte freie Entwicklungsumgebung für verschiedene Anwendungstypen zur Verfügung. Es lassen sich z.B. C-Sharp-, JavaScript- und PHP-Anwendungen entwickeln. Dabei wird das Visual Studio-Projektformat unterstützt. Das bedeutet, das man auch eigene Solutions hochladen kann.

image

Derzeit steht die IDE in der Version 1.01 Beta zur Verfügung.

Die IDE gibt es unter: http://www.coderun.com/ide/. Eine Beispielanwendung gibt es unter http://www.coderun.com/ide/?p=3d-tile-flip-wpf-xbap.

Microsoft SharePoint 2007 Video-Training

15.12.2009 00:21:00 | Jürgen Gutsch

Vor einiger Zeit hat Gregor Biswanger sein erstes Video für video2brain veröffentlicht. Da ich mich ebenfalls sehr für den SharePoint 2007 interessiere habe ich die Gelegenheit bekommen in das Video-Training rein schauen zu dürfen.

Bei dem Video-Training handelt es sich um 8 Stunden Training mit 78 Lektionen über die Installation, Administration und Einrichtung von Microsoft SharePoint 2007. Außerdem zeigt Gregor wie Sharepoint mit Office 2007 zusammenarbeitet und wie man selber für Sharepoint entwickelt.

Wer jetzt allerdings den Gregor gekämmt und in Anzug und Krawatte erwartet hat Pech gehabt. Gregor begrüßt einen hier im gewohnten lockeren Stil; Gregor wie er leibt und lebt:

Das tolle an diesem Video-Training ist der “Mach Mit!-Modus” bei dem sich das Video verkleinert in der linken oberen Ecke des Bildschirms, immer im Vordergrund, platziert. So kann man die einzelnen Schritte zusammen mit Gregor ausprobieren.

Wer möchte kann sich unter folgendem Link ein paar Probevideos anschauen: http://www.video2brain.com/de/products-419-2.htm

Das Video-Training ist für alle Einsteiger, Interessierte und Wiedereinsteiger (wie mich) absolut geeignet. Aber auch erfahrenere SharePoint Administratoren und Entwickler finden sicher deren einen oder anderen Tipp. Ich finde Gregor hat hier seinen Job absolut sauber gemacht *daumenhoch*, denn er präsentiert hier den Microsoft SharePoint 2007 in einfachen, kleinen und verständlichen schritten.

Mich hat es schon in den ersten Lektionen in den Fingern gekitzelt. Ich wurde praktisch gezwungen in den “Mach Mit!-Modus” zu wechseln und parallel alles auszuprobieren :-)

DotNetKicks-DE Image

msdn tv – Nachrichten für Entwickler

14.12.2009 19:29:49 | Oliver Scheer

clip_image002„msdn tv – Nachrichten für Entwickler“ kommt diesmal aus Berlin und präsentiert u.a. Impressionen und Statements von der „Tech·Ed Europe 2009“. Jan Schenk hatte dort Gelegenheit, als Gesprächspartner Orlando Escalante vor Mikrofon und Kamera zu bekommen, der als „Role Owner“ der Technical Platform Evangelists bei Microsoft mitverantwortlich für die Beratung von IT-Professionals zeichnet.
In den Kurznachrichten: Infos zur Beta des ASP.NET MVC Framework 2.0, eine Tutorial-Reihe rund um ‘Expression Studio‘, die Beta 2 Version von Visual Studio 2010 Ultimate und wo man sie kostenlos bekommt, das neue Facebook .NET SDK 3.0 und eine aktuelle MSDN Webcast-Serie zu ‘Powershell’. Sponsorhinweis: Unser Moderator Jan Schenk wird eingekleidet und ausgestattet von Jan Schenk

Get Microsoft Silverlight

Joe Rassic: Silverlight Game der Extra-Klasse

14.12.2009 19:01:37 | Oliver Scheer

image

Der kleine Joe Rassic kämpft sich durch gegnerische Dinos und direkt in die Herzen des Spielers ;) Und wer dann noch nerven hat, der kann sich die verknüpften YouTube-Videos auch noch anschauen.

Link: http://www.joerassic.ch/

Neue Folge von "msdn tv - Nachrichten für Entwickler"

14.12.2009 18:16:10 | Oliver Scheer

clip_image001In der letzten Folge vor den Feiertagen widmet sich "msdn tv" dem Themen-Schwerpunkt „Cloud Computing mit der Windows Azure Plattform“. Bei Jan Schenk zu Gast ist diesmal Holger Sirtl, „Architect Evangelist“ für Cloud Computing bei Microsoft Deutschland und Autor eines gerade erschienenen Standardwerks zum Thema.
Ausschließlich aktuelle Download-Tipps gibt’s bei den obligatorischen „msdn tv“-Kurznachrichten – als da wären: die Visual Studio 2010 Beta 2, Videos von der PDC 09, ein kostenloses ’Microsoft Press’-Buch zu Visual Basic 2008, das Service Pack 1 für Microsoft Expression Web 3 und eine Vorschau auf die nächste SharePoint-Generation mit der Beta des Sharepoint Server 2010.

Get Microsoft Silverlight

Interview Tech-Ed 2009 Berlin : Brian Keller talks about the new VS 2010 Testing Tools

14.12.2009 17:12:11 | Christian Binder

I have been in the role of the Program Manager for the Developer Track at Tech-Ed 2009 in Berlin this year and decided to run some interviews with some of the speakers in my track. I am talking with Brian Keller about the brand new VS2010 Testing Toolset, which is really a major area of invest for the VS 2010 release. Honestly with the VS 2008 we had not too much tooling  in this area, but this is changing now :-) If you want to know what is coming check this out.

Video

Enjoy

Chris

msdn tv – Nachrichten für Entwickler (Ausgabe vom 11.12.2009)

14.12.2009 11:11:54 | Jan Schenk



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/12/14/msdn-tv-nachrichten-f-r-entwickler-ausgabe-vom-11-12-2009.aspx'; tweetmeme_source = 'jansche';

In der letzten Folge vor den Feiertagen widmet sich "msdn tv" dem Themen-Schwerpunkt „Cloud Computing mit der Windows Azure Plattform“. Bei Jan Schenk zu Gast ist diesmal Holger Sirtl, „Architect Evangelist“ für Cloud Computing bei Microsoft Deutschland und Autor eines gerade erschienenen Standardwerks zum Thema.
Ausschließlich aktuelle Download-Tipps gibt’s bei den obligatorischen „msdn tv“-Kurznachrichten – als da wären: die Visual Studio 2010 Beta 2, Videos von der PDC 09, ein kostenloses ’Microsoft Press’-Buch zu Visual Basic 2008, das Service Pack 1 für Microsoft Expression Web 3 und eine Vorschau auf die nächste SharePoint-Generation mit der Beta des Sharepoint Server 2010.

Zum nahenden Weihnachtsfest gibt es in der MSDN-Mediathek auch noch ein besonderes Schmankerl: Die Weihnachtsgedichte! Freunde der leichten Unterhaltung finden hier einige erlesene leicht adaptierte Klassiker unter den Weihnachtsgedichten.

Eine frohe Staade Zeit,
euer jan

Kostenloser Buch-Download: Visual Basic 2008 – Das Entwicklerbuch

14.12.2009 09:32:00 | Oliver Scheer

Eltern verzweifeln, Einzelhändler werden panisch, das Bundesverfassungsgericht ist alarmiert und die Anzahl der Parkunfälle in den Innenstädten steigt dramatisch an: Es weihnachtet sehr, und nicht nur die ersten offenen Türchen der Adventskalender künden davon. Lehnen Sie sich doch einfach mal zurück und genießen Sie unsere vorzeitigen Weihnachtsgeschenke: MSDN Online und Microsoft Press schenkt Ihnen 1.388 Seiten geballtes Know-how für Entwickler, zusammengestellt von VB-Routinier Klaus Löffelmann. Download der Code-Beispiele inklusive. Ganz entspannt und unfallfrei. Packen Sie das einfach mal als Lektüre ein - vielleicht schneit´s ja doch erst im Februar? Hier geht’s zum Download: Visual Basic 2008 – Das Entwicklerbuch [PDF, E-Book]

.NET Usergroup Karlsruhe: NHibernate - Alles Gute für die Geschäftsanwendung

13.12.2009 19:57:00 | Alexander Zeitler

.NET Usergroup Karlsruhe Logo

Am 17.12.2009 um 18:00 Uhr findet das nächste Treffen der .NET Usergroup Karlsruhe (XING-Gruppe der .NET Usergroup Karlsruhe) statt.

Thema

NHibernate mit Gregor Biswanger.

Details zum Vortrag

Eines haben alle Geschäftsanwendungen ganz sicher gemeinsam: Sie arbeiten mit gespeicherten (persistenten) Daten. Dazu wurden in der Entwicklungsgeschichte zahlreiche Vorgehensweisen zur Abspeicherung der Daten in die Datenbank präsentiert. Eine bewährte Technologie davon ist das objektrelationale Mapping (kurz O/R-Mapping). O/R-Mapping ist eine Technik der Softwareentwicklung, mit der ein in einer objektorientierten Programmiersprache geschriebenes Anwendungsprogramm seine Objekte in einer relationalen Datenbank ablegen kann. Dem Programm erscheint die Datenbank dann als objektorientierte Datenbank, was die Programmierung erleichtert.


Doch mittlerweile platzt der Markt an kostenfreien und kommerziellen O/R-Mapping Tools. Die meisten Tools haben unterschiedlichste Probleme, wie zum Beispiel: Performance, Skalierbarkeit, Datenbank-Unabhängigkeit. Zudem sollten in der Softwarearchitektur Abhängigkeiten gering gehalten werden. Es wird also ein flexibles Framework benötigt, zudem muss es auch so konfigurierbar sein, um jederzeit auf andere Datenbanken zugreifen zu können, und es wird eine gute Performance benötigt. Zu guter Letzt soll das alles auch noch kostenlos für den Entwickler zur Verfügung stehen.

Die Ziele sind schon unverschämt hoch angesetzt. Aber genau für diese Anforderungen gibt es bereits eines der bewährtesten Open-Source Tools: NHibernate. Dieser Vortrag bei der .NET User Group Karlsruhe, bietet einen allgemeinen Überblick zu NHibernate und zeigt, wie man Schritt für Schritt den Einstieg findet.

Über den Sprecher

Gregor Biswanger ist Consultant bei der Firma TRIA IT-solutions in München. Seine Schwerpunkte liegen im Bereich der .NET-Architektur und agilen Prozessen.
Gregor ist auch freier Autor, Speaker und Microsoft CLIPler der INdotNET (Ingolstädter .NET Developers Group).

Teilnahme

Bitte meldet Euch wieder via XING an, die Location ist wieder DJK-Ost:

DJK-Ost
Friedrichstaler Allee 52
76131 Karlsruhe

Scott Hanselman’s Baby Smash!

13.12.2009 05:39:04 | Jürgen Gutsch

baby smash!

Vor einiger Zeit bin ich auf ein Webcast von Scott Hanselman gestoßen in dem er eine ClickOnce Anwendung vorstellte. Seine Beispielanwendung war ein kleines Programm namens Baby Smash!

Das Programm

Baby Smash! ist, wie der Name schon sagt, ein Computerspiel für kleine Kinder. Ich fand das Programm auf Anhieb interessant und installierte es Zuhause auf meinem Rechner.

Baby Smash! ist eine WPF-Anwendung die per Click Once installiert werden kann. Das Spiel sperrt den Bildschirm und erzeugt per Fullscreen eine weiße Fläche. Werden nun beliebige Tasten gedrückt erscheinen Buchstaben und Symbole auf dem Bildschirm. Die Buchstaben auf der Tastatur erzeugen bunte Buchstaben, Sonderzeichen und andere Tasten erzeugen zufällige Symbole (wie Sterne, Fünfecke, Herzen, etc.). Jedes Mal wenn ein Symbol oder Buchstabe erscheint wird auch ein kinderlachen ausgegeben. Buchstaben werden wahlweise Vogelesen oder es wird ebenfalls ein kinderlachen ausgegeben.

Selbst die Maus ist mit Funktionen belegt: Klickt man irgendwo auf dem Bildschirm, wird ein bunter Punkt erzeugt. Fährt man mit gedrückter Maustaste über den Schirm, wird eine Mausspur mit bunten Punkten erzeugt und eine passende Melodie ausgegeben. Beim drehen des Scroll-Rades, wird je nach Drehrichtung, ein Geräusch eines erstaunten oder eines wissenden Kindes ausgegeben. (“Hääääääää?” und “Ahhhhhhhhh”) Die Symbole und Punkte verschwinden nach einer gewählten Zeit oder wenn eine bestimmte Anzahl überschritten ist.

Außerdem werden fast alle Tastenkürzel gesperrt, so das die Kinder beim spielen nichts kaputt machen können. [Alt][F4] zum beenden des Spiels und [Strg][Shift][Alt]Time für die Spiele Optionen stehen noch zur Verfügung.

Die Zielgruppe

Mich interessierte natürlich hauptsächlich auch wie Hendrik auf das Spiel reagieren würde.

Sobald er also in der Lage war, an meinem Bauch gelehnt auf meinem Schoß zu sitzen. Setzte ich mich mit ihm vor den Rechner und startete das Spiel. Es dauerte nicht lang, bis er - “ganz wie der Papa” - wild auf der Tastatur herum hauen wollte.

Das Ergebnis war besser als erwartet. Hendrik verstand sehr schnell, dass sein wildes Gehaue eine Reaktion auf dem Bildschirm auslöste. Er haute auf die Tastatur und beobachtete anschließend fasziniert den Bildschirm und lauschte den Geräuschen. Sobald keine Töne und keine neuen bunten Symbole mehr zu sehen waren, fing er wieder an mit Begeisterung auf der Tastatur herum zuhauen.

Das Fazit

Scott Hanselmann hat ein Spiel geschaffen, dass sogar Babys faszinieren und begeistern kann.

Nein, mein Sohn wird nicht zu einem Zocker erzogen. Zumindest hoffe ich das. Er wird das Spiel nur einige Minuten pro Woche oder Monat zu Gesicht bekommen. Aber es ist faszinierend, wie er mit jeder Altersstufe die er erreicht immer wieder etwas anders auf das Spiel reagiert

Infos

Infos und Download: http://www.hanselman.com/babysmash/

DotNetKicks-DE Image

Nachlese zum Treffen der .NET Usergroup Chemnitz

12.12.2009 16:25:00 | Martin Hey

Am 10.12.2009 fand in Chemnitz ein Treffen der .NET Usergroup statt. Dieser Termin stand voll und ganz unter dem Thema SharePoint.

Da wir während unserer täglichen Arbeit sehr viel mit SharePoint zu tun haben und auch die SharePoint Usergroup hier in Dresden mit veranstalten, nutzten Anne Rüger, Torsten Hufsky und ich die Gelegenheit für einen Ausflug nach Chemnitz. Im TCC angekommen wurden wir sehr freundlich aufgenommen.

In einer ersten Präsentation gab ich einen kurzen Überblick über die Features von WSS 3.0 und MOSS 2007. An ein paar Beispielen zeigte ich, wie man Workspaces erstellt, Listen anlegt, mit Hilfe der Tools Central Administration und stsadm das Portal administrieren kann und im den SharePoint Designer einfache Workflows zu erzeugen. Mit dabei auch ein kleiner Ausblick auf SharePoint 2010.

Im weiteren Verlauf gaben Anne und Torsten einen kurzen Einblick, wie man serverseitig auf das Objektmodell zugreift und was man dabei beachten muss – als Stichworte hierfür: “Disposing von Objekten”, “Elevated Privileges” – und wie man von einem Client mit Hilfe der integrierten Webservices auf Listen und Webs zugreift.



Das Feedback der anderen Teilnehmer war durchweg positiv und auch wir hatten viel Spaß dabei, das Produkt vorzustellen, etwas aus dem Nähkästchen zu plaudern und spannende Themen mit denjenigen zu besprechen, die schon Erfahrungen hatten und über ähnliche Probleme gestolpert sind und Erfolgserlebnisse zu teilen.

Ich bin schon sehr gespannt und freue mich auf weitere Treffen und auf gemeinsame Themen.

MSDN - ein Gedicht! Weihnachtliche Stimmung in der MSDN Mediathek

12.12.2009 09:39:21 | Kay Giza

Gelegentlich treffen wir bei User Group Meetings oder im Rahmen der kostenlosen Telefon-Hotline Entwickler, die sich auf MSDN noch keinen Reim machen können. Insassen und Helfer der „Developer Plattform & Strategy Group“ von Microsoft Deutschland haben dies zum Anlass genommen und hier kurzfristig Abhilfe geschaffen: unter dem Motto „MSDN – ein Gedicht“ tragen sie in vorweihnachtlicher Besinnlichkeit kleine Verslein rund um MSDN und Entwicklerthemen vor – natürlich auf traditionelle Art und Weise selbstgemacht und ohne Zuhilfenahme irgendwelcher Bewusstsein erweiternder Substanzen hergestellt (z.B. Reimlexikon). Vier der Kunstwerke sind bereits in der MSDN Mediathek abrufbar; weitere stellen wir Ihnen in den verbleibenden Tagen bis zum Fest in loser Folge vor.

Viel Spaß beim Anschauen und beim Stöbern in der MSDN Mediathek mit mehreren tausenden Multimedia-Inhalten, frei auf Abruf!
Mehr: MSDN – ein Gedicht!



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

Bilder mit altChunk in Kopfzeilen von Dokumenten einfügen

12.12.2009 00:24:00 | Jan Christian Selke

Vor kurzem stand ich vor dem Problem, wie Bilder als Logos aus einem Textbaustein in ein Zieldokument übernommen werden können. Ein nicht unübliches Problem, dass ein Dokument aus verschiedenen Bausteinen zusammengesetzt werden soll. Grundsätzlich hatte ich zwei Lösungsansätze: Das Dokument Stück für Stück, Absatz für Absatz übernehmen oder das gesamte Dokument mittels altChunk einbinden. Aus verschiedenen Gründen habe ich mich letztlich für die erste Variante entschieden… Wie aber hätte eine Umsetzung mit altChunk aussehen können? Dieser Frage werde ich in diesem Post nachgehen.

Vorüberlegungen

Zuerst sollte man wissen, dass mit AltChunk ein vollständiges Dokument als binärer Part in das Zieldokument eingefügt wird. Die Dokumente können in OpenXml, html, plain text oder anderen Formate genutzt werden. Es werden nur vollständige Dokumente übernommen. Im Umkehrschluss bedeutet dies: Es ist nicht möglich Teile aus einem Dokument zu übernehmen. Alle unterstützten Formate lassen sich bei Microsoft in der Dokumentation  finden. Weiterhin sollte bekannt sein, dass es sich bei AltChunk um ein Feature handelt, dass nur zusammen mit Word 2007 genutzt werden kann.

Jetzt kann der Quellcode geschrieben werden. Der Ablauf ist relativ trivial. Erst wird das Dokument geöffnet, dann wird der Ziel-HeaderPart bestimmt. Existiert noch kein HeaderPart, wird dieser dem Dokument hinzugefügt. Als Ziel wird der Header für “Erste Seite anders” ausgewählt. Die Wahl fiel auf diesen Header Typen, da Logos in Kopfzeilen einbinden in aller Regel eine Anforderung an die erste Seite eines Schreibens ist. Die zugehörige headerReference ist über den Typ first identifizierbar. Ist der aktuelle Abschnitt nicht darauf ausgerichtet, die erste Seite anders darzustellen, wird ein neues TitlePage Objekt instanziiert und den SectionProperties hinzugefügt. Schließlich wird das Baustein Dokument als AlternativeFormatImportPart dem HeaderPart hinzugefügt. Beim nächsten Öffnen des Zieldokuments wird nun das Bild in der Kopfzeile angezeigt.

Der Quellcode sollte in etwa dem Folgenden entsprechen.

Der Quellcode

private void ImportAltChunk(string documentPath, string importDocumentPath)
{
    using (WordprocessingDocument wordDocument = WordprocessingDocument.Open(documentPath, true))
    {
        MainDocumentPart mainDocumentPart = wordDocument.MainDocumentPart;
        HeaderPart importHeaderPart = FindHeaderPart(mainDocumentPart);

        string altChunkId = "aCh1";
        AlternativeFormatImportPart chunkPart = importHeaderPart.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.WordprocessingML, altChunkId);
        using (FileStream stream = File.Open(importDocumentPath, FileMode.Open))
        {
            chunkPart.FeedData(stream);
        }

        AltChunk altChunk = new AltChunk() { Id = altChunkId };
        importHeaderPart.Header.AppendChild<AltChunk>(altChunk);

        importHeaderPart.Header.Save();
        mainDocumentPart.Document.Save();
    }
}

private void FindHeaderPart(MainDocumentPart mainDocumentPart)
{
    if (mainDocument.Document.Descendants<HeaderReference>().Any())
    {
        return this.GetExistingHeaderPart(mainDocumentPart);
    }
    else
    {
        return this.CreateNewHeaderPart(mainDocumentPart);
    }
}

private HeaderPart GetExistingHeaderPart(MainDocumentPart mainDocumentPart)
{
    HeaderReference reference = mainDocument
        .Document.Descendants<HeaderReference>().First(x => x.Type == HeaderFooterValues.First);
    return (HeaderPart)mainDocument.GetPartById(reference.Id.Value);
}

private HeaderPart CreateNewHeaderPart(MainDocumentPart mainDocumentPart)
{
    SectionProperties mainsection = mainDocument.Document.Body
        .Descendants<SectionProperties>().First();
    HeaderPart newHeaderPart = mainDocument.AddNewPart<HeaderPart>();
    HeaderReference headerReference = mainsection.PrependChild<HeaderReference>(new HeaderReference());
    headerReference.Id = new StringValue();
    headerReference.Id.Value = mainDocument.GetIdOfPart(newHeaderPart);
    headerReference.Type = HeaderFooterValues.First;
    newHeaderPart.Header = new Header();
    mainsection.PrependChild<TitlePage>(new TitlePage());

    return newHeaderPart;
}

Was genau passiert beim Ausführen?

Das Objekt vom Typ AltChunk wurde durch den Quellcode in den Header eingefügt, der für die Darstellung der ersten Seite Ausschlag gebend ist. Dazu wurde die headerReference mit dem Typ first ausgewählt und die MainSection um das Tag w:titlePg erweitert. Die Existenz eines Elements vom Typ TitlePage bewirkt, dass der durch diese SectionProperties (w:sectPr) beschriebene Abschnitt auf seiner ersten Seite die Kopfzeile anders als auf den Folgenden darstellt. Ein typisches Feature für eine Titel Seite eben…

mainDocument_fertig_aenderungen

Innerhalb des Headers wurde das w:altChunk Element mit der vorher festgelegten id=“aCh1” eingefügt. Das <w:altChunk> Tag kann als unmittelbares Unterelement des Headers w:hdr eingefügt werden.

header_fertig

Die Übersetzung der Id zu dem importierten Dokument befindet sich in der zu dem Header gehörenden Relation headerX.xml.rels. Die Angabe der Pfade ist immer relativ. In diesem Fall wird auf die Datei /word/afchunk2.docx verwiesen.

rels

Öffnet man zur Kontrolle das OpenXml Dokument als zip Datei, befindet sich die mit dem Methodenaufruf AddAlternativeFormatImportPart importierte Datei als afchunk2.docx auch in dem entsprechenden Order /word.

zip_structure

Mit dem ersten Öffnen des Dokuments, wird jetzt das Bild aus dem Textbaustein innerhalb der Kopfzeile des Zieldokuments angezeigt. Das Dokument sollte nun folgendermaßen aussehen:

Fertig

 

Ein kurzes Fazit

AltChunk ist eine sehr einfache, leicht umzusetzende und performante Alternative, um komplette Dokumente zusammenzuführen. Aber auch genau hierin liegt die große Limitierung. Es können nur vollständige Dokumente zusammen geführt werden. Besteht die Anforderung etwa nur Diagramme oder Tabellen aus einem Dokument einzubinden, ist dies bereits ein K.O. Kriterium für diesen Ansatz.

Ein kleiner Tipp zum Schluß: Wer selbst definieren möchte, an welcher Stelle der Import stattfinden soll, kann alternativ beispielsweise ein Inhaltssteuerelement als Zielcontainer für altChunk verwenden.

Ich wünsche viel Spaß beim selbst ausprobieren.

Angetestet: SYNCING.NET

11.12.2009 18:01:30 | Klaus Bock

syncing.netWer Microsoft Outlook® verwendet und mehrere Rechner besitzt, kennt das Dilemma der unterschiedlichen Datenstände bestimmt ebenfalls sehr gut. Man ist mit dem Notebook unterwegs und hat den dringend benötigten Kontakt natürlich auf dem Desktop-PC. Oder kürzlich hat man eine interessante Person kennengelernt und will ihr eine Email schreiben, vom Desktop-PC aus. Die Kontaktdaten wurden natürlich schön sauber in Outlook eingetragen, aber auf dem Notebook.
Genau hier setzt das Produkt SYNCING.NET, der gleichnamigen Firma, an. Es verspricht die unterschiedlichen Outlook Datenbeständen auf verschiedenen Rechnern synchron zu halten; auch über das Internet.
Außer Outlook-Daten können auch beliebige andere Dateien auf verschiedenen Rechnern synchron gehalten werden. Einen ersten Überblick, was SYNCING.NET macht, kann man sich auf der Produktseite verschaffen.

Viel mehr als die Arbeitsweiße von SYNCING.NET, interessierte mich die Technik in der Software. Der Name SYNCING.NET suggeriert die Verwendung des .NET-Framework. Also interessierte mich brennend die Frage: ist auch .NET drin, wo .NET draufsteht?
Bevor ich irgendwelche Reverse Engineering Experimente veranstaltete, ging ich den einfacheren Weg: Ich fragte die Entwickler der Anwendung. Sie erteilten mir auch bereitwillig Auskunft.

Q: Wurde die Anwendung tatsächlich auf Basis des .NET-Framework entwickelt, wie der Name suggeriert?
A: SYNCING.NET basiert ursprünglich auf .NET Framework 1.1, wenn auch mit einer externen COM-Komponente. Der erste Prototyp von SYNCING.NET bestand lediglich aus zwei Einzelmodulen:
· GUI in C#.NET (managed Code)
· MAPI-Zugriffsmodul in Visual C++ (unmanaged Code; notwendig wegen MAPI-Zugriff)

In der heutigen Fassung besteht SYNCING.NET aus drei Modulgruppen:
· Applikationskern in C#.NET (managed Code)
· Outlook-Module in Visual C++ (unmanaged Code; notwendig wegen MAPI-Zugriff)
· Infrastruktur-Module in Visual C++ (unmanaged Code; historisch gewachsen, da ursprünglich eigenständige Software)

In der ursprünglichen Fassung musste die Infrastruktur noch durch ein externes Zusatzprogramm bereitgestellt werden; seit SYNCING.NET 2.0 verwenden wir jedoch eine eigene Modulgruppe für diesen Zweck.

Q: Wenn ja, auf Basis von Windows Forms oder schon WPF?
A: Der Applikationskern von SYNCING.NET (mitsamt GUI) verwendet das Windows Forms Widget Set.

Q: Wenn .NET in welcher Sprache, also C#, VB.NET oder managed C++?
A: Der Applikationskern von SYNCING.NET (mitsamt GUI) wurde und wird in reinem C# entwickelt; diese Sprache wird von uns als ideale Sprache für die Entwicklung in .NET angesehen. C++ musste als Sprache beispielsweise extra angepasst (bzw. in seinen Möglichkeiten beschnitten) werden um als „managed C++“ .NET-kompatibel zu sein; VB.NET hingegen ist wie seinerzeit schon VB einfach nicht mächtig genug für die professionelle Entwicklung.

Q: Wenn die Anwendung nicht auf .NET basiert, ist auch eine 64bit Variante erhältlich? Diese ist ein Punkt, der heute immer mehr Anwender interessiert.
A: Eine echte 64-Bit-Umsetzung ist bei unseren Outlook- und Infrastrukturmodulen bereits umgesetzt worden wodurch auf 64-Bit-Windows-Systemen auch die Verarbeitung spürbar schneller ist als auf 32-Bit basierten; lediglich unser Applikationskern inklusive GUI wird weiterhin im 32-Bit-Modus ausgeführt, da hier eine messbare Beschleunigung der Verarbeitungsgeschwindigkeit in keiner Relation zum Aufwand eines 64-Bit-basierenden Redesign stehen würde.

Mir persönlich gefallen an den Antworten der Entwickler besonders drei Dinge:
· Die Anwendung basiert tatsächlich auf dem .NET-Framework.
· C# scheint die bevorzugte .NET Sprache zu sein.
· Auch Entwickler kommerziellere Software verwenden gerne Module aus unmanaged Code.

Zusätzlich zu einer Software die nun endlich Ordnung in mein Outlook Chaos bringt, wurde ich auch in meiner Entscheidung bekräftigt, weiterhin auf das .NET-Framework als Entwicklungsplattform zu setzen.

Technorati-Tags: | | |

Der MSDN-Weihnachtswebcast

11.12.2009 16:12:20 | Oliver Scheer

Alle Jahre wieder treibt der Weihnachtsmann auch bei MSDN sein Unwesen und lädt Entwickler zu einem besinnlichen Online-Live-Meeting ein. Seine Vertreter auf Erden, Bernd Marquardt und Neno Loje, werfen dabei wie immer einen Blick zurück auf einige Technologie-Highlights des abgelaufenen Jahres und auf solche, derer wir noch gemeinsam harren. Und nebenher veranstalten die beiden Experten der „XMAS Presentation Foundation“ natürlich auch diesmal wieder das schon legendäre Weihnachts-Gewinnspiel, bei dem Sie als Teilnehmer live Fragen beantworten und gleich etwas gewinnen können. Verlost werden professionelle Software, viele Bücher und allerlei andere nützliche Pretiosen, die den Entwickleralltag leichter machen. Was genau, wird noch nicht verraten, aber wie spricht schon der Volksmund: „Der Weihnachtsmann sagt ‚Ho, Ho, Ho‘, ich bring‘ Euch Visual …“ (Basic?, C#?)

Termin: Mittwoch, 16.12.2009 16:00

Kostenfreie Anmeldung unter: http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032437099&Culture=de-DE

Azure Information Day

11.12.2009 13:51:44 | Oliver Scheer

Windows Azure ist das neue Cloud Computing-Angebot von Microsoft, mit dem Unternehmen, IT-Dienstleister, Softwarehersteller und Entwickler Websites, Webanwendungen und Webdienste sowie Speicherplatz sehr einfach, hoch verfügbar und skalierbar in Microsoft Rechenzentren bereitstellen können. Windows Azure entlastet Sie dabei von jeglichen Administrationsarbeiten.

Windows Azure zeichnet sich durch Kosteneffizienz, eine sehr hohe Verfügbarkeit und Skalierbarkeit über mehrere Server sowie über eine extrem einfache Bereitstellung und ein automatisches Management von IT-Lösungen aus.

Aktuelle Termine

Melden Sie sich gleich HIER an.

Ankündigung: xtopia[kompakt] Roadshow 2010

11.12.2009 13:47:27 | Oliver Scheer

Weihnachten steht vor der Tür und passend dazu gibt es frohe Kunde: Die xtopia[kompakt] Roadshow geht in die nächste Runde!

Nach dem sensationellen Erfolg in diesem Jahr touren wir auch im kommenden Frühjahr durch Deutschland und geben Euch die Gelegenheit ein Feuerwerk an Innovationen im Bereich Web, User Experience und RIA zu erleben. Und das Alles kostenlos!

Wann und Wo? - Termine und Locations

Die Roadshow macht in sechs Städten in Deutschland halt. Beginn ist 17 Uhr, Ende der Veranstaltung ist gegen 22 Uhr.

  • Montag, 19.04.2010: Hilton München Park, München
  • Dienstag, 20.04.2010: Best Western, Karlsruhe
  • Mittwoch, 21.04.2010: Maritim, Bad Homburg
  • Montag, 26.04.2010: Leonardo Hotel, Köln
  • Dienstag, 27.04.2010: Baseler Hof, Hamburg
  • Mittwoch, 28.04.2010: Mövenpick, Berlin

Was erwartet Euch?

Neben interessanten Vorträgen von Microsoft Sprechern zu neuen Technologien und Innovationen werden wieder verschiedene namhafte Agenturen das Thema Web-und Interface Design und User Experience aus der Praxis vorstellen. Außerdem werden bekannte Unternehmen über die Verwendung von Interface-Design Werkzeugen sprechen.

In den Pausen und im Anschluss an die Veranstaltung gibt es natürlich Gelegenheit sich untereinander auszutauschen und in entspannter Atmosphäre neue Kontakte zu schließen.

Anmeldung

Ab Mitte Januar könnt ihr euch für dieses kostenlose Event-Highlight registrieren. Alle Infos sowie Neuigkeiten zu Sprechern und Agenda findet Ihr wie immer hier im Blog!

Ein Rückblick

Damit alle, die letztes Jahr nicht dabei waren, einen Eindruck von der xtopia [kompakt] Roadshow bekommen hier ein Themenüberblick der diesjährigen Veranstaltung:

clip_image002

  • UX@Microsoft: Was kommt denn da um die Ecke?
    User Experience Evangelist Clemens Lutsch nimmt Sie auf eine Reise in die neuen User Experience-Welten von Windows 7 mit, natürlich mit einem Abstecher in die faszinierende Welt von Surface Computing und Multitouch. Und er beantwortet die Frage ob und wie man seinen Computer anbrüllen kann (und sollte!), damit dieser zukünftig vernünftig darauf reagiert.
    Referent: Clemens Lutsch, Microsoft Deutschland GmbH, http://blogs.msdn.com/clemenslutsch
  • Das deutsche RIA Forum
    Im deutschen RIA Forum diskutieren über 2.500 Mitglieder das Thema Rich Internet Applications in allen Anwendungsbereichen und über alle Plattformen hinweg. Kompetent und neutral bietet das Forum einen hervorragenden Anlaufpunkt zur Diskussion der Vorteile der Technologien, der Business Values, zur Firmenvorstellung sowie auch als Jobbörse rund um Rich Internet Applications, Webdesign und Webentwicklung.
    Referent: Raju Bitter, Deutsches RIA Forum
    http://www.xing.com/net/ria
  • Barrierefreies Webdesign mit Expression Web 2 und kostenlosen Profivorlagen
    Expression Web 2 verfügt über umfangreiche Methoden zur Gestaltung von barrierefreien Websites – CSS-Profi Vladimir Simovic hat in Zusammenarbeit mit Microsoft Deutschland eigens für Expression Web 2 eine Sammlung kostenloser Vorlagen für Expression Web 2 entwickelt, mit denen auch Nicht-Profis Websites gestalten können, die sich durch gute Unterstützung wichtiger Funktionen für den barrierefreien Zugriff auszeichnen, damit Ihre Website wirklich für jedermann zugänglich ist.
    Referent: Vladimir Simovic, perun.net webwork GmbH
    http://www.perun.net
  • Internet Explorer 8 – Die neuen Features und was sie für Webentwickler bedeuten
    Referent: Oliver Scheer Microsoft Deutschland GmbH,
    http://blogs.msdn.com/olivers
  • Mit Microsoft Silverlight Next Generation Rich Internet Applications entwickeln
    Silverlight ist ein schlankes Browser-Plug-In für Rich Internet Applications (RIAs) für alle gängigen Betriebssysteme, alle gängigen Browser, und für Devices/mobile Geräte.
    Referent: Oliver Scheer Microsoft Deutschland GmbH
    http://www.microsoft.de/silverlight
  • Medienübergreifendes Design – Layouts direkt aus QuarkXPress ins Web mit Silverlight
    Referent: Matthias Günther, Quark
    http://8.quark.com/de
  • Silverlight als plattformübergreifendes Frontend für Unternehmensanwendungen – ein unabhängiger Praxisbericht
    Referent: Ludwig Neer CAS Software AG
    http://www.cas.de
  • Holen Sie mehr aus Ihrer Webseite heraus mit der Windows Live API für Webdesigner- und entwickler
    Referent: Frank Maenz Microsoft Deutschland GmbH
    http://messenger.live.de/webservices
  • So sieht die Wirklichkeit aus: Silverlight und WPF in der Praxis
    Silverlight und WPF sind die neuen Technologien von Microsoft um faszinierende Online- und Offlineerlebnisse zu gestalten. Von der platformübergreifenden Webanwendung über HD-Videowelten bis hin zu intuitiven Benutzeroberflächen für Desktop-Anwendungen. In dieser Session berichten führende Agenturen aus der deutschen Designszene frei und unzensiert über ihre Erfahrungen mit Silverlight und WPF. Zugesagt haben bereits Ergosign (Karlsruhe), maximago (Hamburg) und Pixelpark AG (Köln), UID (München) und Syzygy (Frankfurt).
    Moderation: Clemens Lutsch, Microsoft Deutschland GmbH
    http://www.ergosign.de, http://www.pixelpark.de, http://www.syzygy.de, http://www.uid.com, http://www.maximago.de
  • Sehen heißt verstehen!
    Wie Webdesigner und Webentwickler mit Microsoft Visio die Planung, Entwicklung und Pflege von Websites und Webanwendungen vereinfachen und das Reporting und die Überwachung der Server und Zugriffe nahezu in Echtzeit visualisieren können.
    Referent: Florian Müller Microsoft Deutschland GmbH
    http://www.sehen-heisst-verstehen.de

Whitepaper: Effiziente Qualitätssicherung und Testen mit Microsoft® Visual Studio® 2010

11.12.2009 13:38:31 | Oliver Scheer

Mit den neuen Funktionen von Visual Studio 2010 können Unternehmen ihre Anwendungen effizient und komfortabel testen; das schließt Windows-Anwendungen inklusive Windows® 7 ein, sowie Webanwendungen und .NET Framework-basierte Anwendungen inklusive .NET Framework 4 – sowohl in virtuellen, wie in echten 32- und 64-Bit-Umgebungen. Die neuen Werkzeuge und Workflows in Visual Studio 2010 bringen Tester und Entwickler enger zusammen. Sie optimieren den Informationsfluss und enthalten innovative neue Funktionen, beispielsweise zum Vermeiden von “Fehler-Ping-Pong” durch nicht reproduzierbare Bugs. Zielgruppe für dieses Whitepaper sind Tester, Testmanager und Verantwortliche für Qualitätssicherung in Softwareprojekten.
Zum Download als PDF-Datei oder XPS-Datei.

Neu : VS 2010 Webcast Serie mit Dariusz und Mir :-)

11.12.2009 13:18:00 | Christian Binder

Nachdem TechTalk letzte Woche haben wir uns entschieden auf dieser Basis (Beta2) eine kurze Webcast Serie aufzunehmen, falls es jemanden über die Feiertage langweilig werden sollte :-) Die ersten Teile sollten ab dem 14.12 hier verfügbar sein. Für VS 2010 RTM planen eine deutlich Umfangreichere Serie zu produzieren,
wollen damit aber erst mit den RC Bits beginnen.

Application Development mit Visual Studio 2010

Auf Basis der Visual Studio 2010 Beta 2 zeigt Dariusz Parys und Christian Binder am Beispiel einer Windows Forms Anwendung einige Aspekte der Anwendungs Entwicklung. Focus der Serie sind vor allem Entwickler und Tester. Angefangen mit einigen Grundlagen zu Agiler Software Entwicklung mit VS 2010 über die Erweiterung der Windows Forms Anwendung bis hin zum Testing der Anwendung wird alles in einem EndtoEnd Demo gezeigt. Nach Erweiterung und Test der Windows Forms Anwendung zeigt, Dariusz wie man mit Hilfe neuer .NET Framework Technologien , wie Workflow Foundation 4, Entitiy Framework 4 und ASP.Net MVC, das Anwednungs Szenario effizient erweitern kann

Teil 1 : Agile Software Development mit VS 2010

Der erste Teil beleuchtet kurz die Application Lifecyle Managment Platform VS 2010 und fokussiert hierbei Agile Software Development auf Basis von SCRUM mit dem MSF Agile Process Template. Es werden Grundsätzliche Mechanismen des Agilen Prozesses erläutert, wie Product Backlog und Sprints. Danach Starten wir in die Windows Forms Demo und es gibt’s keine weiteren Slides mehr für die ganze Webcast Serie. 

Teil 2 : Entwicklung einer Windows Forms Anwendung mit VS 2010

Im Zweiten Teil wird die Windows Forms Anwendung erst mal mit den neuen Architecture Tools analysiert und dann im Context einer UserStory erweitert. Hierbei arbeiten wir auch mit entsprechenden Version Control Branch Strukturen , führen Checkins durch und nutzen Team Builds.

Teil 3 : Testing der Windows Forms Anwendung  mit VS 2010

Im dritten Teil Testen wir die implementierten Windows Forms Erweiterungen. Debuggen Fehler, beheben Fehler und automatisieren UI Tests. Hiebei stehen die neuen Tools zu Test Planung und Test Ausführung , sowie Debugging Features, wie IntelliTrace im Fokus.

Teil 4 : Erweiterung der Anwendung mit dem ASP.NET MVC 2, WF 4 und EF 4  (Teil1)
Teil 5 : Erweiterung der Anwendung mit dem ASP.NET MVC 2, WF 4 und EF 4  (Teil2)

Im vierten und fünften Teil geht es um die Integration eines Backend Systems welches die Zentrale unserer Demo Lösung darstellt. Die Zentrale beliefert die Filialen mit Waren und die Filialen melden Ihre Abverkäufe Ihrer Kassen an die Zentrale zurück. Die Software auf der Zentralseite ist eine Web Anwendung die wir mit ASP.NET MVC 2 schreiben werden, der Datenzugriff wird über das Entity Framework 4 erfolgen und die Abwicklung aller Prozesse übernimmt die Workflow Foundation 4.

Viel Spass
Chris

msdn tv spezial - Ziehung der Expression Studio 3 Gewinner

11.12.2009 10:16:51 | Jan Schenk



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/12/11/msdn-tv-spezial-ziehung-der-expression-studio-3-gewinner.aspx'; tweetmeme_source = 'jansche';

Es ist soweit! Wir ziehen die Gewinner des msdn tv Gewinnspiels, in dem es 5 Expression Studio 3 Boxen zu gewinnen gab. Dafür habe ich extra meine Academia-Kollegin Anne Michels gebeten, meine Glücksfee zu sein. Sie zieht aus allen Einsendungen - natürlich haben wir auch Postkarten und Briefe berücksichtigt - 5 Gewinner. Deren Namen sind teils recht kryptisch, wie Twitter-Accounts halt mal so sind. Trotzdem macht sie einen Superjob und verhilft 5 glücklichen Gewinnern zu einer erstklassigen Designtool-Sammlung für Silverlight, .NET und das Web.

Den Hut/Helm hat diesmal auch Anne auf. Als Gentleman bin ich ihrer Bitte nur zu gerne nachgekommen und die Hut- bzw. Helmfrage hatte sich erledigt. Ausserdem ist es immer besser sich vor Unvorhersehbarkeiten zu schützen ;-) !

Wer diesmal kein Glück hatte, der kommt vielleicht beim nächsten Mal zum Zug, wenn es wieder ein Gewinnspiel bei msdn tv gibt. Immer ein Gewinn ist "msdn tv - Nachrichten für Entwickler" ohnehin. Mit spannenden Interviews und interessanten News für alle Technikbegeisterte.

Herzlichen Glückwunsch an alle Gewinner!
jan

Kostenlose Veranstaltung: Microsoft Business Process & Integration Community Tag

11.12.2009 08:16:00 | Kay Giza

Unter dem Motto „Connected with Competence” lädt Microsoft am 24. Februar 2010 IT Professionals, technisch orientierte Entscheider und Entwickler in Köln zu einem kostenlosen Infotag rund ums Thema „BizTalk Server“. Microsoft-Experten und ausgewählten Partner zeigen dabei im Rahmen von Sessions und an Ausstellungsständen, wie Mehrwert mit und für den BizTalk Server geschaffen wird. Teilnehmer erhalten Einblicke in innovative Problemlösungen, z.B. bei SAP-, Dynamics- und SharePoint-Integration. Ferner erfahren sie alles über BizTalk Server 2009 R2, der in 2010 auf den Markt kommt, sowie die Microsoft BPM & SOA Roadmap.

Von 15.30-16.15 Uhr werde ich die Closing-Session halten und zum Thema "MSDN, TechNet und Services Angebote von Microsoft für Kunden und Partner" das Angebot des Microsoft Developer Network (MSDN) vorstellen. Ich werde auf interessante, bekannte und unbekannte Services aufmerksam machen, in Demos zeigen wie man als Entwickler (insbesondere zum Thema BizTalk Server) sich am schnellsten und besten orientieren kann, mit dem Ziel: Ihre tägliche Arbeit zu beschleunigen und Ihnen somit helfen.

Anmeldung und Details unter www.connected-with-competence.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

Einladung: Fokusgruppe fuer Corporate Developer am 15. Dezember 2009 in Muenchen

11.12.2009 08:05:46 | Kay Giza

Eine etwas vielleicht außergewöhnliche Anfrage, aber ich denke vielleicht ist es für den einen oder anderen Blogleser hier für Interesse? Am kommenden Dienstag, den 15. Dezember 2009, möchten wir gerne eine (weihnachtliches) spontane Feedback-Veranstaltung für sogenannte "Corporate Developer" durchführen. Falls jemand von Ihnen Lust sowie Zeit und Interesse hätte, an der Veranstaltung teilzunehmen und uns Ihr Feedback zu unseren Angeboten für Entwickler geben können, würden wir uns sehr freuen! Details und Anmeldung zu diesem Termin entnehmen Sie bitte diesem Blogeintrag auf Giza-Blog.de... [...mehr]

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

dotnet-forum.de gewinnt Grillfete beim EYSA Wettbewerb

10.12.2009 21:40:33 | Jan Welker

ie8 Kurz nach der Einführung des Internet Explorer 8 im März diesen Jahres startete Microsoft Deutschland den Empower Your Site Wettbewerb. In diesem Wettbewerb ging es um die Entwicklung von innovativen Schnellinfos und Webslices für den IE8.
Die Gewinner wurden monatlich gekürt. Zu gewinnen gab es unter anderem Gutscheine für Windows 7.

Im Mai erweiterte Microsoft den Wettbewerb durch ein so genanntes Community Special. Bei diesem Special konnten sich sowohl Online- als auch Offlinecommunitys registrieren.
Jeder, der einen Beitrag eingereicht hatte, konnte diesen Beitrag im Namen einer registrierten Community einreichen. Die Community, in deren Namen die meisten Webslices und Schnellinfos eingereicht wurden, sollte eine Grillfete im Wert von bis zu 3000€ gewinnen.
Als ich von dieser Aktion hörte, hab ich sofort das dotnet-forum.de als teilnehmende Community angemeldet.

aboutpixel.de / RGWeiß © Christian Daum Dank der vielen engagierten und kreativen Forenmitglieder hat das dotnet-forum.de diesen Preis gewonnen!


Da das Wetter im Moment noch nicht zum Grillen einlädt, werden wir die Fete nicht im Freien feiern und auf eine Kneipe o.ä. ausweichen.
Wann und wo die Feier stattfindet wird, im Moment noch geklärt. Hierzu kann man diesen Thread verfolgen.

Vielen herzlichen Dank an alle, die ihre Beiträge im Namen des Forums eingereicht haben!

Ankündigung: xtopia[kompakt] Roadshow 2010

09.12.2009 10:20:18 | Jan Schenk



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/12/09/ank-ndigung-xtopia-kompakt-roadshow-2010.aspx'; tweetmeme_source = 'jansche';

clip_image001

Weihnachten steht vor der Tür und passend dazu gibt es frohe Kunde: Die xtopia[kompakt] Roadshow geht in die nächste Runde!

Nach dem sensationellen Erfolg in diesem Jahr touren wir auch im kommenden Frühjahr durch Deutschland und geben Euch die Gelegenheit ein Feuerwerk an Innovationen im Bereich Web, User Experience und RIA zu erleben. Und das Alles kostenlos!

Wann und Wo? - Termine und Locations

Die Roadshow macht in sechs Städten in Deutschland halt. Beginn ist 17 Uhr, Ende der Veranstaltung ist gegen 22 Uhr.

Montag, 19.04.2010: Hilton München Park, München

Dienstag, 20.04.2010: Best Western, Karlsruhe

Mittwoch, 21.04.2010: Maritim, Bad Homburg

Montag, 26.04.2010: Leonardo Hotel, Köln

Dienstag, 27.04.2010: Baseler Hof, Hamburg

Mittwoch, 28.04.2010: Mövenpick, Berlin

Was erwartet Euch?

Neben interessanten Vorträgen von Microsoft Sprechern zu neuen Technologien und Innovationen werden wieder verschiedene namhafte Agenturen das Thema Web-und Interface Design und User Experience aus der Praxis vorstellen. Außerdem werden bekannte Unternehmen über die Verwendung von Interface-Design Werkzeugen sprechen.

In den Pausen und im Anschluss an die Veranstaltung gibt es natürlich Gelegenheit sich untereinander auszutauschen und in entspannter Atmosphäre neue Kontakte zu schließen.

Anmeldung

Ab Mitte Januar könnt ihr euch für dieses kostenlose Event-Highlight registrieren. Alle Infos sowie Neuigkeiten zu Sprechern und Agenda findet Ihr wie immer hier im Blog!

Ein Rückblick

Damit alle, die letztes Jahr nicht dabei waren, einen Eindruck von der xtopia [kompakt] Roadshow bekommen hier ein Themenüberblick der diesjährigen Veranstaltung:

2009 Rückblick

  • UX@Microsoft: Was kommt denn da um die Ecke?
    User Experience Evangelist Clemens Lutsch nimmt Sie auf eine Reise in die neuen User Experience-Welten von Windows 7 mit, natürlich mit einem Abstecher in die faszinierende Welt von Surface Computing und Multitouch. Und er beantwortet die Frage ob und wie man seinen Computer anbrüllen kann (und sollte!), damit dieser zukünftig vernünftig darauf reagiert.
    Referent: Clemens Lutsch, Microsoft Deutschland GmbH, http://blogs.msdn.com/clemenslutsch
  • Das deutsche RIA Forum
    Im deutschen RIA Forum diskutieren über 2.500 Mitglieder das Thema Rich Internet Applications in allen Anwendungsbereichen und über alle Plattformen hinweg. Kompetent und neutral bietet das Forum einen hervorragenden Anlaufpunkt zur Diskussion der Vorteile der Technologien, der Business Values, zur Firmenvorstellung sowie auch als Jobbörse rund um Rich Internet Applications, Webdesign und Webentwicklung.
    Referent: Raju Bitter, Deutsches RIA Forum
    http://www.xing.com/net/ria
  • Barrierefreies Webdesign mit Expression Web 2 und kostenlosen Profivorlagen
    Expression Web 2 verfügt über umfangreiche Methoden zur Gestaltung von barrierefreien Websites – CSS-Profi Vladimir Simovic hat in Zusammenarbeit mit Microsoft Deutschland eigens für Expression Web 2 eine Sammlung kostenloser Vorlagen für Expression Web 2 entwickelt, mit denen auch Nicht-Profis Websites gestalten können, die sich durch gute Unterstützung wichtiger Funktionen für den barrierefreien Zugriff auszeichnen, damit Ihre Website wirklich für jedermann zugänglich ist.
    Referent: Vladimir Simovic, perun.net webwork GmbH
    http://www.perun.net
  • Internet Explorer 8 – Die neuen Features und was sie für Webentwickler bedeuten
    Referent: Oliver Scheer Microsoft Deutschland GmbH,
    http://blogs.msdn.com/olivers
  • Mit Microsoft Silverlight Next Generation Rich Internet Applications entwickeln
    Silverlight ist ein schlankes Browser-Plug-In für Rich Internet Applications (RIAs) für alle gängigen Betriebssysteme, alle gängigen Browser, und für Devices/mobile Geräte.
    Referent: Oliver Scheer Microsoft Deutschland GmbH
    http://www.microsoft.de/silverlight
  • Medienübergreifendes Design – Layouts direkt aus QuarkXPress ins Web mit Silverlight
    Referent: Matthias Günther, Quark
    http://8.quark.com/de
  • Silverlight als plattformübergreifendes Frontend für Unternehmensanwendungen – ein unabhängiger Praxisbericht
    Referent: Ludwig Neer CAS Software AG
    http://www.cas.de
  • Holen Sie mehr aus Ihrer Webseite heraus mit der Windows Live API für Webdesigner- und entwickler
    Referent: Frank Maenz und Jan Schenk Microsoft Deutschland GmbH
    http://messenger.live.de/webservices
  • So sieht die Wirklichkeit aus: Silverlight und WPF in der Praxis
    Silverlight und WPF sind die neuen Technologien von Microsoft um faszinierende Online- und Offlineerlebnisse zu gestalten. Von der platformübergreifenden Webanwendung über HD-Videowelten bis hin zu intuitiven Benutzeroberflächen für Desktop-Anwendungen. In dieser Session berichten führende Agenturen aus der deutschen Designszene frei und unzensiert über ihre Erfahrungen mit Silverlight und WPF. Zugesagt haben bereits Ergosign (Karlsruhe), maximago (Hamburg) und Pixelpark AG (Köln), UID (München) und Syzygy (Frankfurt).
    Moderation: Clemens Lutsch, Microsoft Deutschland GmbH
    http://www.ergosign.de, http://www.pixelpark.de, http://www.syzygy.de, http://www.uid.com, http://www.maximago.de
  • Sehen heißt verstehen!
    Wie Webdesigner und Webentwickler mit Microsoft Visio die Planung, Entwicklung und Pflege von Websites und Webanwendungen vereinfachen und das Reporting und die Überwachung der Server und Zugriffe nahezu in Echtzeit visualisieren können.
    Referent: Florian Müller Microsoft Deutschland GmbH
    http://www.sehen-heisst-verstehen.de

Merkt Euch die Termine im Kalender vor, meldet Euch im Januar an und freut Euch auf ein Feuerwerk der Innovationen!

HowTo: Globalization/Localization mit ASP.NET MVC – streng typisiert

09.12.2009 02:11:54 | Robert Mühsig

In einen meiner letzten HowTos ging es um die Mehrsprachigkeit in ASP.NET MVC Anwendungen. Dort hatte ich ein System empfohlen, welche über bestimmte Expressions die Resourcendatein auslesen. Es geht natürlich viel einfacher und eleganter: Einfach über Resources zugreifen.   Die erste Variante: In der ersten Variante konnte ich so die Resourcendatein auslesen: Global resource : <%=Html.Resource("Strings, GlobalResourceKey") %><br [...]SHARETHIS.addEntry({ title: "HowTo: Globalization/Localization mit ASP.NET MVC – streng typisiert", url: "http://code-inside.de/blog/2009/12/09/howto-globalizationlocalization-mit-asp-net-mvc-streng-typisiert/" });

MVP für VSTO Projekte. Auch hier gilt: Spaghetti auf den Tisch

09.12.2009 00:02:00 | Jan Christian Selke

Monolithische Anwendungen sind im Bereich der VSTO Entwicklung keine Seltenheit. Die Callback Methoden der Ribbon Klasse laden, ähnlich des button1_Click, förmlich dazu  ein. Es geht aber auch anders, denn auch hier lässt sich beispielsweise das Model-View-Presenter Pattern (MVP) anwenden.

Bisher wird in aller Regelmäßigkeit, dem Ribbon Support sei Dank, eine Ribbon Klasse dem Projekt hinzugefügt und die CallBack Methode direkt aufgefüllt. Der Quellcode zum Überschreiben von Word Dokumenttext könnte diesem dann ähneln.

private void button1_Click(object sender, RibbonControlEventArgs e)
{
    using (SqlConnection sqlConnection = new SqlConnection(connectionString))
    {
        using (SqlCommand sqlCommand = new SqlCommand("Select name, vorname from user", sqlConnection))
        {
            SqlDataReader dataReader = null;
            try
            {
                string newText = string.Empty;
                dataReader = sqlCommand.ExecuteReader();
                while (dataReader != null && dataReader.Read())
                {
                    newText += string.Format("{0}, {1}" + Environment.NewLine, dataReader[0], dataReader[1]);
                }

                Globals.ThisAddIn.Application.ActiveDocument.Content.Text = newText;
            }
            finally
            {
                if (dataReader != null)
                {
                    dataReader.Close();
                }
            }
        }
    }
}

Die Limitierungen dieses Vorgehens in Hinblick auf Wartbarkeit und Testfähigkeit, konnte ich in einem meiner letzten Projekte am eigenen Leibe erfahren. Unabhängig davon verstößt es zudem gegen fast alle gängigen Softwareentwicklungsprinzipien (SRP, OCP etc.). Datenzugriffe, Ablauflogik und UI Steuerung in einer Klasse/Methode ist kein sauberes Vorgehen... Die daraufhin im Projekt entwickelte und eingesetzte Struktur möchte ich im Folgenden vorstellen.

Also…

Wie kann am besten vorgegangen werden?

Da das Ribbon letztlich das UI repräsentiert kann auch hier anhand des MVP vorgegangen werden, um Verantwortlichkeiten und Funktionalitäten zu separieren und damit die Komponenten unabhängig voneinander erweiterbar und testfähig zu machen. Was ist aber das Model, was der View und welches der Presenter? Der initiale View ist die Ribbon Klasse die bereits existiert. Es wird noch ein Presenter und das Model benötigt.

Im weiteren Vorgehen werden als erstes Kontrakte erstellt, um durch eine saubere Trennung der Komponenten vor allem Wart-  und Testbarkeit zu gewährleisten. Hierzu werden die Basis Schnittstellen IView, IPresenter und IModel angelegt.

Meine persönliche Vorliebe geht in Richtung passiver View. Ich bin der Auffassung ein View sollte anzeigen und damit hat er genug zu tun. Zudem wird wesentlich stärker zwischen Anzeige und Logik entkoppelt. Daher ist dem View selbst der Presenter und das Model unbekannt. Die Kommunikation zwischen Presenter und View erfolgt ausschließlich auf Basis von Events und Methoden, die aus dem View Kontrakt hervorgehen. Da der Presenter den View nur über seinen Kontrakt kennt, ist der erreichte Grad an Entkopplung aus meiner Sicht optimal.

Der Kontrakt

Die grundlegende IView Schnittstelle ist sehr schlank gehalten. Sie definiert nur Events und Methoden für das Öffnen und Schließen des Views.

public interface IView
{
    event LoadEventHandler LoadEvent;
    event CloseEventHandler CloseEvent;
    void ShowView();
    void CloseView();
}

Die Presenter Basisschnittstelle IPresenter deklariert typisierte Instanzen des Views und des Models. Eine Methode Initialize wird vorgegeben, in deren später vorgenommener Implementierung sich auf die Events des Views registriert wird. Durch diese Eventsteuerung wird der Inhalt des Views anhand der durch den Kontrakt bereitgestellten Methoden manipuliert. Die IPresenter Schnittstelle hat folgende Struktur.

public interface IPresenter<TView, TModel> where TView : IView where TModel : IModel
{
    TView View { get; }
    TModel Model { get; }
    void Initialize();

}

Das Model beinhaltet die Ablauflogik und Zugriffe auf externe Datenquellen. Der Basiskontrakt IModel ist sehr übersichtlich:

public interface IModel
{
    void Initialize();
}

Die grundlegende Funktionalität eines Presenters wird in einer abstrakten Basisklasse BasePresenter implementiert. Dazu gehört die Implementierung von IPresenter, sowie das Registrieren auf die IView Events in der Methode Initialize. Diese Methode RegisterEvents kann von jedem konkreten Presenter um die View spezifischen Registrierungen erweitert werden.

public abstract class BasePresenter<TView, TModel> : IPresenter<TView, TModel> where TView : IView where TModel : IModel
{
    private TView view;
    private TModel model;

    public BasePresenter(TView view, TModel model)
    {
        this.view = view;
        this.model = model;
    }

    public TView View
    {
        get { return this.view; }
    }

    public TModel Model
    {
        get { return this.model; }
    }

    public void Initialize()
    {
        this.RegisterEvents();
    }

    protected virtual void RegisterEvents()
    {
        view.LoadEvent += OnLoadEvent;

                               view.CloseEvent += OnCloseEvent;
    }

    private void OnLoadEvent(object sender, LoadEventHandlerArgs args)
    {
    }

    private void OnCloseEvent(object sender, CloseEventHandlerArgs args)
    {
    }

}

Die Abhängigkeiten zum View und dem Model, die über den Konstruktor hereingereicht werden, werden durch den Einsatz von StructureMap aufgelöst. Wie das im Detail funktioniert, zeige ich zum Schluss.

Nachdem das Fundament gelegt ist, folgt jetzt die Konkretisierung für den Ribbon. Die IRibbonView Schnittstelle implementiert die Basis IView und erweitert diese um die Events, die bei Aufruf der Callback Methode(n) ausgelöst werden sollen. Implementiert wird die Schnittstelle später direkt in der Ribbon Klasse.

public interface IRibbonView : IView 
{
   
event ReplaceContentTextHandler ReplaceContentText;  
    void SetContentText(string newContentText); 
}

Der Presenter Kontrakt IRibbonPresenter implementiert IPresenter und definiert die Methode ReplaceViewContentText zum Setzen des Textes im Dokument.

public interface IRibbonPresenter : IPresenter<IRibbonView, IRibbonModel>,
{
    void ReplaceViewContentText();
}

Als letztes folgt die Schnittstelle IRibbonModel für das Model. Die Datenbankzugriffe, die hinter dem Model mit einem Repository realisiert werden, sollen im Rahmen dieses Beispiels keine weitere Beachtung finden. Das Model implementiert den Basiskontrakt IModel und beschreibt die Methode GetPersons, die eine Aufzählung aller Objekte des Typs Person liefert.

public interface IRibbonModel : IModel
{
    IEnumerable<Person> GetPersons();
}

Die Implementierung der konkreten Klassen

Als erstes wird in die Klasse Ribbon, wie oben bereits angemerkt, die Schnittstellt IRibbonView implementiert. Dies hat die folgenden Erweiterungen zur Folge:

public event ReplaceContentTextHandler ReplaceContentTextEvent;
public event LoadEventHandler LoadEvent;

public void SetContentText(string newContentText)
{
    throw new NotImplementedException();
}

Zusätzlich werden der OnLoad und der button1_Click Callback erweitert und die Methode SetContentText mit Leben gefüllt.

public void SetContentText(string newContentText)
{
    Globals.ThisAddIn.Application.ActiveDocument.Content.Text = newContentText;
}

private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
{
    if(this.LoadEvent != null)
    {
        this.LoadEvent(this, new LoadEventHandlerArgs());
    }
}

private void button1_Click(object sender, RibbonControlEventArgs e)
{
    if(this.ReplaceContentText != null)
    {
        this.ReplaceContentText(this, new ReplaceContentTextEventHandlerArgs());
    }
}

Die vollständige Ribbon Klasse sollte nun folgenden Quellcode aufweisen.

public partial class Ribbon : OfficeRibbon, IRibbonView
{
    public Ribbon()
    {
        InitializeComponent(); 
    }

    public event ReplaceContentTextEventHandler ReplaceContentTextEvent;
   public event LoadEventHandler LoadEvent;

    public void SetContentText(string newContentText)
    {
        Globals.ThisAddIn.Application.ActiveDocument.Content.Text = newContentText;
    }

    private void Ribbon_Load(object sender, RibbonUIEventArgs e)
    {
        if (this.LoadEvent != null)
        {
            this.LoadEvent(this, new LoadEventHandlerArgs());
        }
    }

    private void button1_Click(object sender, RibbonControlEventArgs e)
    {
        if (this.ReplaceContentTextEvent != null)
        {
            this.ReplaceContentTextEvent(this, new ReplaceContentTextEventHandlerArgs());
        }
    }
}

Der View, also der Ribbon, sind an dieser Stelle soweit fertig. Als nächstes folgt die Implementierung des RibbonModel, dass die Daten der Personen aus der Datenbank ausliest und dem Presenter liefert. Der Aufruf ist in ein Repository weggekapselt.

public class RibbonModel : IRibbonModel
{
    public RibbonModel()
    {
    }

    public IEnumerable<Person> GetPersons()
    {
        return DbRepository.GetPersons();
    }
}

Der RibbonPresenter schließlich implementiert die IRibbonPresenter Schnittstelle und den BasePresenter. Die im BasePresenter implementierte Methode Initialize ruft die Ableitung von RegisterEvents auf, die wiederum die Basis im BasePresenter aufruft. Damit werden alle vorhandenen Events registriert. Auf das Event ReplaceContentTextEvent wird direkt die Methode ReplaceViewContentText zum Setzen des Inhalts registriert. Der implementierte BasPresenter wird mit den konkreten View und Model Kontrakten typisiert. So kann der RibbonPresenter auf die für ihn spezifischen Typen zugreifen.

public class RibbonPresenter : BasePresenter<IRibbonView, IRibbonModel>, IRibbonPresenter
{
    public RibbonPresenter(IRibbonView view, IRibbonModel model)
        : base(view, model)
    {
    }

    public void ReplaceViewContentText()
    {
        string newContent = string.Empty;
        foreach (Person person in DbRepository.GetPersons())
        {
            newContent += string.Format(
                "{0}, {1}",
                person.Name,
                person.Vorname);
            newContent += Environment.NewLine;
        }

        this.View.SetContentText(newContent);
    }

    protected override void RegisterEvents()
    {
        base.RegisterEvents();

        this.View.ReplaceContentTextEvent += new ReplaceContentTextEventHandler(ReplaceContentTextEvent);
    }
}

Die Initialisierung

Die Initialisierung und Auflösung der Abhängigkeiten des Presenters erfolgt mit StructureMap. Dazu wird eine Klasse  RibbonRegistry erstellt, die von Registry aus dem Namensraum StructureMap.Configuration.Dsl ableitet. Registriert werden die Kontrakte des Ribbons mit der zugehörigen konkreten Implementierung.

public class RibbonRegistry : Registry
{
    public RibbonRegistry()
    {
        ForRequestedType<IRibbonView>()
            .TheDefaultIsConcreteType<Ribbon>();
        ForRequestedType<IRibbonModel>()
            .TheDefaultIsConcreteType<RibbonModel>();
        ForRequestedType<IRibbonPresenter>()
            .TheDefaultIsConcreteType<RibbonPresenter>();
    }
}

Die Initialisierung des Presenters erfolgt schließlich im Konstruktor der Ribbon Klasse. Dazu wird dieser um die folgenden Zeilen erweitert.

public Ribbon()
{
    InitializeComponent();
    ObjectFactory.Initialize(x =>
        {
            x.AddRegistry(new RibbonRegistry());
        });

    ObjectFactory.Inject<IRibbonView>(this);
    IRibbonModel model = ObjectFactory.GetInstance<IRibbonModel>();
    ObjectFactory.With(this).With(model).GetInstance<IRibbonPresenter>().Initialize();
}

Der Aufruf ObjectFactory.Inject<IRibbonView>(this) ist notwendig, um einen StackOverflow zu unterbinden. Würde nicht das konkrete Objekt bereits an die ObjectFactory übergeben, versuchte StructureMap ständig eine neue Instanz der Klasse Ribbon zu erzeugen, obwohl this übergeben wird. Da sich dieser Aufruf im Konstruktor befindet, würde mit jeder Typinitialisierung des Ribbons eine neue Instanziierung stattfinden…

Ich hoffe, dass ich einen Anreiz geben konnte und würde mich über jede Art von Feedback, Kommentare, Anmerkungen oder Verbesserungsvorschläge herzlich freuen. Ein kleines Beispielprojekt werde ich bald zum Download bereitstellen.

Nur noch wenige Tage: Multi-Touch Netbook und andere coole Preise gewinnen mit Windows Azure

08.12.2009 23:18:07 | Jan Welker

Aufgabe beim Azure Now Gewinnspiel ist es, eine eigene Windows Azure Demo-Domäne einzurichten und dort eine Cloud Computing-Anwendung online zu stellen – nicht mehr. Das kann eine eigene Web-Anwendung sein oder ein Test-Projekt, das man bei Microsoft herunterladen kann. Dafür braucht man nicht länger als 15 Minuten und sichert sich hoffentlich noch ein schönes Weihnachtsgeschenk.J

Alle Details, weiterführende Tutorials und Informationen zum Gewinnspiel findet Ihr hier: AzureNow Gewinnspiel – Jetzt teilnehmen!

MSDN Weihnachts-Webcast 2009: Alle Jahre wieder...

08.12.2009 19:35:57 | Kay Giza

Ich freue mich wirklich sehr, in guter alter Tradition, folgendes wieder ankündigen zu dürfen!
Alle Jahre wieder treibt der Weihnachtsmann auch bei MSDN Online sein Unwesen und lädt Entwickler zu einem besinnlichen Online-Live-Meeting ein:

Diesmal am Mittwoch, den 16. Dezember, von 16:00 bis 17:30 Uhr. Seine Vertreter auf Erden, Bernd Marquardt und Neno Loje, werfen dabei gemeinsam einen Blick zurück auf einige Technologie-Highlights des abgelaufenen Jahres und auf solche, derer wir in 2010 gemeinsam harren. Und nebenher veranstalten die beiden Experten der „XMAS Presentation Foundation“ natürlich wieder das schon legendäre Weihnachts-Gewinnspiel, bei dem Sie als Teilnehmer live Fragen beantworten und gleich gewinnen können.

Verlost werden professionelle Software, viele Bücher und allerlei andere nützliche Pretiosen, die den Entwickleralltag leichter machen.

Wie jedes Jahr freuen wir uns (und natürlich auch der Weihnachtsmann ;-), viele dutzende Live-Webcast-Besucher begrüßen zu dürfen. Alte Traditionen soll man also nicht aufgeben, daher: Ich hoffe wir sehen und hören uns am 16.12.2009 auf MSDN Online! Und nicht vergessen: Weitersagen! Denn den Spezial-Webcast gibt es wirklich nur einmal im Jahr ;-)

Link: Süßer, die Glocken - Der MSDN Weihnachts-Webcast
(Achtung, Anmeldung vorweg nicht vergessen!)



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

Alle Jahre wieder, kommt… der Weihnachstwebcast!

08.12.2009 18:47:43 | Peter Kirchner

Alle Jahre wieder treibt der Weihnachtsmann auch bei MSDN sein Unwesen und lädt Entwickler zu einem besinnlichen Online-Live-Meeting ein. Seine Vertreter auf Erden, Bernd Marquardt und Neno Loje, werfen dabei wie immer einen Blick zurück auf einige Technologie-Highlights des abgelaufenen Jahres und auf solche, derer wir noch gemeinsam harren. Und nebenher veranstalten die beiden Experten der „XMAS Presentation Foundation“ natürlich auch diesmal wieder das schon legendäre Weihnachts-Gewinnspiel, bei dem Sie als Teilnehmer live Fragen beantworten und gleich etwas gewinnen können. Verlost werden professionelle Software, viele Bücher und allerlei andere nützliche Pretiosen, die den Entwickleralltag leichter machen. Was genau, wird noch nicht verraten, aber wie spricht schon der Volksmund: „Der Weihnachtsmann sagt ‚Ho, Ho, Ho‘, ich bring‘ Euch Visual …“ (Basic?, C#?)

Wann? Nächste Woche schon! Am Mittwoch, dem 16.12.2009 ab 16 Uhr

Anmeldung hier: http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032437099&Culture=de-DE

15.12.09 Treffen der .NET Developer Group Braunschweig - Cloud Computing, VS 2010 & MS Office 2010 - Was gibt es Neues?

08.12.2009 06:59:00 | Lars Keller

Unser 40 User Group Treffen der .NET Developer Group Braunschweig findet am 15.12.09, ab 19 Uhr in der Kilian’s Raffinerie statt.

Bei unserem Weihnachtsevent dreht sich alles um die im nächsten Jahr auf uns zu kommenden Themen:
Alles redet von Cloud Computing bzw. Microsoft Azure, aber nur wenige wissen, was das überhaupt ist, was man damit machen kann und ob es für einen persönlich überhaupt interessant ist. Der Vortrag soll Entscheidern und Entwicklern einen Überblick geben, in welchen Anwendungsszenarien die Verwendung von Azure sinnvoll sein kann.
Visual Studio 2010 soll im zweiten Quartal erscheinen. In einem kleinen Rundflug durch die aktuelle Beta-Version wird gezeigt, welche neuen Features (z.B. Historical Debugging) bald zum Entwickleralltag gehören werden.
Auch die kommende MS Office 2010 Version wird ein Thema des Abends sein. Was gibt es für neue Features und welche neuen Möglichkeiten gibt es für .NET Entwickler mit VSTO 4.0.

Referenten sind Karim El Jed und Lars Keller.

Weitere Informationen unter www.dotnet-braunschweig.de.

Wie immer ist jeder herzlich willkommen!

Endspurt beim Codesnippet Wettbewerb

08.12.2009 00:37:40 | Jan Welker

Der Codesnippet Wettbewerb auf http://dotnet-snippets.de läuft nur noch wenige Tage!

Dritter-Snippet-Wettbewerb

Um beim Snippet-Wettbewerb mitzumachen reicht es aus, einen oder mehrere Snippets  bis Sonntag den 13. Dezember zu veröffentlichen.

Es winken tolle Preise, unter anderen sind dabei:

  • 1 x Windows 7 Ultimate
  • 1 x Office 2007 Standard
  • Lizenzen für den tangible T4 Editor

Alle Informationen zum Wettbewerb gibt es unter: http://dotnet-snippets.de/dns/dritter-snippet-wettbewerb.aspx

Viel Erfolg beim Mitmachen!

Die Montagsmeinung – Das Wertvollste sind meine Daten

07.12.2009 17:04:18 | Jan Schenk



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/12/07/die-montagsmeinung-das-wertvollste-sind-meine-daten.aspx'; tweetmeme_source = 'jansche';

 

500_kV_Switch1 Es ist mal wieder Zeit für eine Montagsmeinung. Höchste Zeit! Dank der Ankündigung des DNS-Dienstes eines global agierenden Suchanbieters frage ich mich immer wieder, welche Motivation hinter solchen Bestrebungen stecken kann. Und ich sehe ein Muster, das sich gar nicht mal so langsam abzeichnet, und an dem schon so viele Unternehmen […]

Weiterlesen auf http://www.der-evangelist.de.

Sorry für die Weiterleitung, aber manche Themen sind so subjektiv, dass ich sie nur auf meinem privaten Blog veröffentliche.

Restriktiv vs. Robust

07.12.2009 10:15:37 | Nico Franze

Hat sich schon mal jemand von euch Gedanken über Restriktive Programmierung vs. Robuste Programmierung gemacht? Dahinter stecken keine Pattern oder sowas, sondern Charaktere von Entwicklern.

Hinter restriktiver Programmierung steht ein Charakter der aussagt: "Ich will diese schlechte Welt verbessern".

Hinter robuster Programmierung steht ein Charakter der aussagt: "Ich lebe mit dieser schlechten Welt und mache trotz Fehlern weiter".

Wenn ihr also eine Methode entwickelt, die einige Parameter bekommst, zu welcher Art von Entwicklern zählt ihr euch? Seit ihr Entwickler, die bei jeder noch so kleinen Ungereimtheit sofort eine Exception werfen (das wäre die restriktive Variante) oder nehmt ihr die Parameterwerte, analysiert sie und versucht trotzdem, egal was da kommt, das beste draus zu machen (das ist die robuste Variante)?

Natürlich kann dies nie pauschalisiert werden, und natürlich spielen auch die Anforderungen eine Rolle, aber dennoch kann man, so denke ich, seinen Charakter einer dieser beiden Varianten zuordnen. Ich persönlich bevorzuge die Robuste Variante, denn so kann meine Methode von mehreren Entwicklern genutzt werden, und in den meisten Fällen kommt trotzdem das erwartete Ergebnis heraus. Und nur selten ertönt ein Stöhnen und die Worte "Oh man, was is denn nun schon wieder mit der Scheiß Methode? Kann die nich einfach mal funktionieren??” hehe

Ein Paradebeispiel is übrigens ein Parameterwert vom Typ string. Alle meine Methoden, die einen string erhalten, stürzen niemals ab, wenn z.B. ein null kommt (Es sei denn es ist so gewollt oder sowas). Ein null interpretiere ich eigentlich immer einfach als Leerstring. Aber es gibt auch viele Entwickler, die dann ne ArgumentNullException werfen (oder es erst gar nicht prüfen und in eine NullReferenceException laufen)... Das ist in meinen Augen eine falsche Einstellung. So nach dem Motto: "Och nö, ich mag jetzt nicht nachdenken, ich werf einfach mal ne Exception, sollen die anderen mal drüber nachdenken, und wenn ich nich exakt genau das bekomme, was ich haben will, ja dann bin ich halt bockig..." hehe

 

Was meint ihr dazu? Schreibt mal eure Meinung dazu. Ich denke, in dieser Sache einige andere Sichtweisen könnte meine eigene Sichtweise stark erweitern…

.NET Tipps (Teil 1/n)

07.12.2009 09:28:07 | Nico Franze

Nun wo ich endlich meinen neuen Blog habe, möchte ich meine .NET-Tipps-Sammlung erneut aufleben lassen. Selbst wenn man jahrelang mit dem .NET-Framework gearbeitet hat, gibt es immer wieder Ecken, wo man vorher noch nie drin war. Tipps und Tricks, die man im Laufe eines Entwicklerlebens mal so nebenbei herausfindet, sind oft mit die wertvollsten Informationen, weil sie entweder die tägliche Arbeit erleichtern, oder Antworten geben auf Dinge, "die man schon immer mal wissen wollte"...

Ich hab mir mal ein paar Kleinigkeiten herausgesucht, die vllt. noch nicht jeder weiß, und die man einfach wissen sollte. Leider merkt man, wenn man jahrelang als Entwickler arbeitet, manchmal schon gar nicht mehr, was man vllt. so noch nicht wissen könnte.

Zusammenfassung am Anfang

Falls jemand meine ganzen Aus- und Abschweifungen oder Sonstiges nicht lesen mag, für den hier kurz und knackig die Tipps zusammengefasst. Für Erklärungen musste dann aber doch unten lesen :-)

 

System.Reflection.MethodBase.GetCurrentMethod();
newItem = oldItem ?? new ItemClass();
using WCF = System.ServiceModel.Channels;
string.IsNullOrEmpty()
System.Threading.Interlocked
System.Security.SecureString
GC
employee.Work += employee_Work;
System.Math.Max(myIntValue, 1);

 

So, nun mal noch zu den einzelnen Punkten:

Infos zur Klasse MethodBase

Habt ihr gewusst, dass es in der Klasse MethodBase eine statische Methode gibt, die da heißt "GetCurrentMethod()"??? So kann man nicht nur die aktuelle Methode und das Objekt herausfinden, in der oder in dem man sich gerade befindet, das coole an dieser Methode ist, dass sie auch für statische Klassen funktioniert.

Der ??-Operator

Kennt ihr schon den ??-Operator? Dieser Operator prüft den linksstehenden Term auf null. Ist der null, so wird der rechte Term zurückgegeben. Ist in dem kleinen Beispiel hier oldItem = null, dann wird new ITemClass() zurückgegeben, ansonsten, wenn oldItem ein gültiger Wert ist, wird oldItem zurückgegeben...

newItem = oldItem ?? new ItemClass();

DateTime.Now

Das wissen wahrscheinlich die meisten, aber ich sags trotzdem. Wenn nur ein einziger dabei ist, ders noch nicht weiß, hat es sich gelohnt. In DateTime.Now findet man die aktuelle Uhrzeit mit dem aktuellen Datum.. :-)

Using-Alias

Manche Entwickler binden mit Absicht die usings nicht ein, weil “man so ja sofort sieht, woher die Klasse kommt”. Diese Argumentation kann ich teilweise nachvollziehen, deswegen könnte man anstatt immer den gesamten WCF-Namespace auszuschreiben, einfach das hier nutzen: “using WCF = System.ServiceModel.Channels;”

IsNullOrEmpty in System.string

Die Klasse string beinhaltet eine statische Methode namens "IsNullOrEmpty". Viele wissen nicht, dass strings auch null sein können. Wenn man z.B.

string name;

name.Lenght

macht, so schmiert einem sein Progrämmchen ab. Und einfach nur auf "" prüfen is auch nich so dolle. Viel sicherer ist if(string.IsNullOrEmpty(name)), dann... erst weitermachen. Im übrigen gibt es auch string.Empty. Das ist ein Leerstring, vergleichbar mit "", aber sauberer ist es, string.Empty zu nutzen.

Atomare Methoden der Interlocked-Klasse

Wer viel mit Threads programmiert, sollte die Interlocked-Klasse kennen. Sie beinhaltet atomare Methoden, also Methoden, die nicht unterbrochen werden können. Es ist ja so, dass so ein simples "i++" keine atomare Methode ist. Es sind mehrere Registerumräumungen nötig (sichern, inkrementieren, zurückschreiben). Wenn dabei ein anderer Thread dazwischenhaut, arbeitet der vllt. auf einem falschen Wert. Deswegen lieber das Inkrement der Interlocked-Klasse nutzen, damit passiert das nicht.

SecureString für sichere Strings im Speicher

Ihr wollt eine Anwendung schreiben, wo man auch mal ein Passwort im Speicher halten möchte? Um es möglichen Angreifern wenigstens ein wenig schwerer zu machen, gibt es die Klasse "SecureString" im Security-Namespace. Damit wird der String verschlüsselt im Speicher abgelegt... Kann manchmal bestimmt nicht schaden.

Ein wenig Garbage Collection 

Mit "GC" kann man einfach mal eben so auf den GarbageCollector zugreifen. Der sammelt die alten toten Objekte ein. Hier kann man das Einsammeln manuell starten, oder auch festlegen, dass Objekte nicht eingesammelt werden sollen.

1.0 == 0.9Periode9 = true... ???.   <-- Hää?

Zu guter letzt. Habt ihr gewusst, dass die beiden folgenden Ausdrücke genau das Gleiche sind?
"eployee.Work += new EventHandler( employee_Work );"
und
"employee.Work += employee_Work;"
Ja, doll. 1 ist ja auch exakt das gleiche wie 0,9Periode9... aber wir wollen ja nicht mit Mathematik anfangen...

Na wenn wa eh gerade bei Mathe sind

Schaut euch mal um in der Klasse “System.Math”. Die beinhaltet sehr viele statische Methoden, die auch nützlich sein können, wenn man keine mathematische Anwendung schreiben will. Zum Beispiel habe ich eine int-Property, die aufgrund von Konventionen immer mindestens 1 zurückgeben muss. Also return System.Math.Max(myIntValue, 1);

Neuer Artikel auf dotnet.de: “…Und Silverlight 4 war auch meine Idee”

07.12.2009 08:46:43 | Gregor Biswanger

dotnet.de-logo

 

Auf dem Webportal dotnet.de gibt es einen neuen Artikel meinerseits.

Zu lesen ist der freie Online-Artikel unter folgendem Link:

…Und Silverlight 4 war auch meine Idee

 

dotnet.de

BlogEngine.NET and Microsoft Tags

07.12.2009 06:54:00 | Gordon Breuer

This article is also available in English! This article is also available in English!

Microsoft Tag

Vor ein paar Tagen kam mir die spontane Idee, in die Printversion meiner Blog-Artikel einen Microsoft Tag einzubinden, damit man nach dem Ausdrucken durch einfaches Scannen jederzeit den Original-Artikel wieder aufrufen kann; wer hat schon Lust ewig lange, für Suchmaschinen aufgeblasene, URLs abzutippen? Eben!

Kurz darauf habe ich mich für einen API-Zugang für die Tags beworben und dafür ein Formular ausgefüllt. Nur 1½ Stunden später bekam ich bereits meinen Zugang per E-Mail zugesendet. Und am Wochenende habe ich mir dann mal die Zeit genommen, und mir die API-Dokumentation angesehen. Ein wenig vermisse ich hier die Funktionen alle bestehenden Tags aufzulisten und eine Abfrage, ob ein Tag mit einem bestimmten Namen bereits existiert. Das Gleiche gilt auch für die Kategorien.

Um möglichst wenige Zugriffe über die API machen zu müssen habe ich mich dazu entschlossen, die generierten Tags für jeden Artikel unter seiner ID in einem Verzeichnis des Blogs zu speichern. Beim Aufruf eines Artikels wird geprüft, ob in dem Verzeichnis bereits eine Grafik mit der jeweiligen ID vorhanden ist. Wenn ja, wird diese mit entsprechenden CSS-Anweisungen eingebunden; ansonsten wird zunächst der Tag mit einem Permalink auf den Artikel in der Kategorie “Blog” erzeugt und anschließend im besagten Verzeichnis abgespeichert.

Das ganze ist im Moment lediglich ein Proof-of-Concept, es fehlt eine saubere Fehlerbehandlung beispielsweise wenn die Grafik nicht mehr vorhanden ist aber der Tag online noch existiert. Auch müsste ich für eine schöne Druckansicht einzelner Artikel noch ein sauberes CSS-Layout schreiben. Der eigentliche Zweck, das anzeigen des Tags zum Artikel unterhalb des selbigen beim Drucken, funktioniert jedoch bereits einwandfrei.

Leider gibt es (noch) keine Copy-and-Run Installation der Erweiterung für die BlogEngine.NET, da zusätzliche Anpassungen in der web.config für die Einbindung des Webservices notwendig sind. Auch benötigt man einen API-Key damit das ganze funktioniert. Für Interessierte und Bastelfreunde jedoch anbei der Quellcode zur Erweiterung.

Zip

 

MSTag4BEdotNET.zip
(15.0 KB)

DotNetKicks-DE Image

Tabellen und Abfragen einer Access-OleDbConnection ermitteln

06.12.2009 10:32:00 | Martin Hey

Möchte man dem Endanwender selbst die Entscheidung überlassen, welche Datenbankobjekte für eine bestimmte Operation relevant sind, so bietet es sich an, diese als Auswahl bereitzustellen und so Fehleingaben und Frust bei manueller Eingabe zu vermeiden. Das Beispiel soll zeigen, wie alle Tabellen und Abfragen einer Access 2003 Datenbank ermittelt werden können. Schnell ist herausgefunden, dass die Methode GetOleDbSchemaTable diese Aufgabe unterstützen kann - aber wie geht man damit genau um?

Tabellen ermitteln
Zunächst gilt es, alle Tabellen zu ermitteln. Im einfachsten Fall ruft man dafür
DataTable schemaTable = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
auf, wobei "connection" eine bestehende OleDbConnection auf die fragliche Access-Datenbank ist.

Das Ergebnis ist ein DataTable. Die Spalte "TABLE_TYPE" ermöglicht eine Filterung auf die verschiedenen Objekttypen. Dabei haben Benutzertabellen den Typ "TABLE", verknüpfte Tabellen den Typ "LINK". Diese Filterung kann auch gleich beim Aufruf der Funktion durchgeführt werden, indem der zweite Parameter der Funktion GetOleDbSchemaTable mit befüllt wird. Der folgende Aufruf gibt die DataTable gefiltert nach dem Typ "TABLE" zurück.
DataTable schemaTable = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[] { null, null, null, "TABLE" });


Abfragen ermitteln
Für die Ermittlung der Views gibt es mehrere Möglichkeiten. Die erste sticht direkt ins Auge - ein Aufruf von
DataTable schemaTable = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[] { null, null, null, "VIEW" });

Eine weitere Möglichkeit ist, "GetOleDbSchemaTable" mit dem Parameter "OleDbSchemaGuid.Views" aufzurufen. Dabei hat der zweitgenannte Aufruf den Vorteil, dass hier die Definition der Abfrage - also der SQL-Text mit abgerufen wird.
DataTable schemaTable = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Views, null);


Bei näherer Betrachtung fällt aber auf, dass hier nicht alle Abfragen enthalten sind. Es fehlen Abfragen, die einen Parameter erwarten sowie Union- und Kreuztabellen-Abfragen.
Die Lösung dieses Problems ist ein weiterer Aufruf von "GetOleDbSchemaTable" mit dem Parameter "OleDbSchemaGuid.Procedures". Darin enthalten sind alle Abfragen, die solche Besonderheiten haben.

Dabei erscheinen auch interne Abfragen mit. Das sind SQL-Statements, die direkt in das Feld Datenquelle eingegeben wurden ohne vorher eine Abfrage zu definieren - diese beginnen mit "~sq_" und sollten für externe Belange irrelevant sein. Bei den anderen Einträgen kann anhand selbst gewählter Kriterien entschieden werden, ob diese für externen Zugriff relevant sind oder nicht.

Das Ergebnis
Alle diese Erkenntnisse zusammengenommen, könnte der resultierende Quellcode ungefähr wie folgt aussehen:
private List GetDbObjectNames(string dbPath)
{
List dbObjectsList = new List();

string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbPath;

using (OleDbConnection connection = new OleDbConnection(connectionString))
{
connection.Open();
DataTable schemaTable = null;

// tables
schemaTable = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[] { null, null, null, "TABLE" });
foreach (DataRow row in schemaTable.Rows)
{
dbObjectsList.Add(row["Table_Name"] as string);
}

// linked tables
schemaTable = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "LINK" });
foreach (DataRow row in schemaTable.Rows)
{
dbObjectsList.Add(row["Table_Name"] as string);
}

// views
schemaTable = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Views, null);
foreach (DataRow row in schemaTable.Rows)
{
dbObjectsList.Add(row["Table_Name"] as string);
}

// special views
schemaTable = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Procedures, null);
foreach (DataRow row in schemaTable.Rows)
{
if (!2.Equals(row["Procedure_Type"]))
continue;
if (((string)row["Procedure_Name"]).StartsWith("~sq_"))
continue;
dbObjectsList.Add(row["Procedure_Name"] as string);
}


connection.Close();
}


return dbObjectsList;
}


private void loadObjectsButton_Click(object sender, EventArgs e)
{
dbObjectsList.Items.Clear();
List items = GetDbObjectNames("C:\\Program Files\\Microsoft Office\\OFFICE11\\SAMPLES\\nordwind.mdb");
dbObjectsList.Items.AddRange(items.ToArray());
}

Anti-Spam Filter in Blogengine.NET

05.12.2009 13:11:34 | Klaus Bock

Mit dem Check Out der  Version 1.5.1.30, fiel mir das erste mal der eigene Bereich für Kommentare im Admin-Bereich von Blogengine.NET auf. Was ich da sah, gefiel mir auf Anhieb. Es ist die Möglichkeit geschaffen worden, die Kommentare automatisch über verschiedene Filter moderieren zu lassen.

Blogengine.NET bringt Stop Forum Spam und Askimet als Filter mit. Da Askimet sehr viele Daten auf seine Server in den USA überträgt, habe ich auf Grund der unsicheren Rechtslage diesen Filter deaktiviert. Über Stop Forum Spam habe ich noch nichts gefunden. Sollte es auch damit Beanstandungen geben, fliegt er ebenfalls raus.

Die, aus meiner Sicht, beste Neuerung ist das Erstellen eigener Filter. Es können Allow-, Block- und Delete-Filter erstellt werden. Als Filterkriterium kann die IP-Adresse, der Autor, die Website-Adresse, die Email oder der Kommentarinhalt gewählt werden. Die einzelnen Felder können mit “enthält angegebenen Wert”, also contains oder nach “ist gleich angegebenen Wert”, also equals verglichen werden.

Was wollen die Kommentar-Spammer eigentlich erreichen? Ganz einfach; sie wollen Backlinks zu ihren Webseiten oder Blogs generieren. Also werden sie bei den Namen und Email-Adressen lügen. Jedoch sicher nicht bei der Angabe ihrer Website. Also wird nach der Website-Adresse gefiltert.

Spamfilter 

Wenn jetzt ein Kommentar mit der im Filter enthaltenen Adresse geschrieben wird, erhält der Benutzer lediglich die Meldung, sein Kommentar müsse bestätigt werden und der Kommentar wird nicht im Blog angezeigt.

Spamkommentar

Statt dessen wird der abgegebene Kommentar im Reiter Spam im Kommentarbereich der Blog-Verwaltung angezeigt. Hier kann er nun wiederhergestellt werden, falls es ein Irrtum sein sollte, oder man löscht den Kommentar einfach.

moderierte Kommentare

Über einen Delete-Filter könnte man die Kommentare auch direkt vom Filter löschen lassen. Diese Option werde ich nutzen, wenn eine bestimmte Website über längere Zeit auffallen sollte. Fürs erste werde ich mich auf das sammeln solcher Webseiten beschränken und die Kommentare von Hand löschen.

Technorati-Tags: | |

WPF/Silverlight Community Day Graz 2010

05.12.2009 04:47:04 | Lars Keller

Meine beiden Freunde Norbert Eder und Mario Meir-Huber veranstalten am 29.01.2009 den ersten WPF/Silverlight Community Day in Graz. So ein Community Day ist eine gute Möglichkeit sich mit anderen Teilnehmern zu den Themen auszutauschen und auch mögliche Probleme zu diskutieren. Die Teilnahme ist kostenlos, jeder Teilnehmer bestimmt selber, ob er etwas für das Catering, die Raummiete, etc. spenden möchte oder nicht.

Aus eigener Erfahrung kann ich so ein Event nur empfehlen!

Btw: Nächstes Jahr wird es auch wieder einen Office Community Day geben, Mario und ich stecken gerade in den Vorbereitungen, darum kann ich noch nicht viel verraten. Stay tuned! ;-)

Monitor.Enter, lock Anweisung und Co.

04.12.2009 23:48:00 | Jan Christian Selke

Was ist denn nun der Unterschied und wozu brauche ich es überhaupt?

So oder zumindest sehr ähnlich waren meine Fragen, bevor ich das erste Mal beim Erstellen von Dokumenten mit dem Open Xml SDK in ein Deadlock gelaufen bin (siehe mein voriger Post zu Multithreading und Open Xml).
Andre Krämer hat mit seinem Kommentar zu meinem letzten Post sehr recht. All zu schnell ist man geneigt zu übersehen, dass Anwendungen basierend auf Web Services sich bereits in einer multithreading Umgebung befinden. Daher empfehle ich, in ähnlichen Szenarien grundsätzlich alle Zugriffe auf Open Xml Parts in einen kritischen Abschnitt aufzunehmen, auf die mindestens eine der folgenden Aussagen zutrifft:
  • die maximale Größe des Parts ist nicht absehbar,
  • die maximale Größe des Parts ist absehbar und wird voraussichtlich jenseits der 8 MB liegen.
Mit maximaler Größe ist die tatsächliche Größe in entpackter Form und nicht die in der docx komprimierte Größe gemeint.
Aber zurück zum Thema: Es gibt zwei Möglichkeiten einen kritischen Abschnitt zu definieren. Zum einen die lock Anweisung und zum anderen die Monitor.Enter() Methode.
Die Klasse Monitor stellt einen Mechanismus zur Verfügung, der den Zugriff auf Objekte steuert. Hierzu wird einem einzelnen Thread ein exklusives Zugriffsrecht auf ein Objekt gewährt. Die Zugriffssperre wird mit dem Aufruf der Methode Enter vergeben. Kein anderer Thread kann dann eine weitere Sperre auf das Objekt erhalten. Die lock Anweisung bewirkt nichts anderes, als dass der Compiler selbst einen try-finally-Block um die Anweisung erzeugt.
Grundsätzlich ist es also egal, welcher Weg der Umsetzung gewählt wird. Es ist lediglich von den eigenen Anforderungen an den Kontext abhängig.

Ist es wirklich egal?

Ja, ist es, denn der Compiler macht aus der lock Anweisung nichts anderes als ein Monitor.Enter und Monitor.Exit in einem try-finally-Block. Dass diese Aussage auch korrekt ist, veranschaulicht ein kleines Beispiel. Zur Einfachheit habe ich nur einen leeren Rumpf für beide Varianten erstellt.
lock_code
Nun vergleichen wir die durch den Compiler generierte IL. Dazu benutze ich den Redgate Reflector. Man sieht, dass es wirklich nahezu identisch ist. Das lock Statement bewirkt in der Tat nichts anderes, als dass der Compiler für einen try- finally –Block sorgt – it’s magic…

lock_monitor

Weiter oben schrieb ich, dass die Auswahl kontextabhängig sei. In meinem konkreten Beispiel sollte die Synchronisation der Aufrufe in Abhängigkeit der Stream Größe stattfinden. Ich habe daher den direkten Aufruf des Monitor.Enter() gewählt, damit ich nicht den Quellcode einmal mit lock Anweisung und einmal ohne vorhalten muss. Es wird anhand eines HighWaterMark entschieden, ob das Aufbauen eines kritischen Blocks notwendig ist. Mit dem try-finally-Block um die Methodenaufrufe wird sichergestellt, dass der Monitor auch wieder freigegeben wird.

try_finally_block  
Eine wesentliche Schwäche existiert nach wie vor. In dem Falle eines Deadlocks, wäre die Anwendung zur Zeit nicht mehr reaktionsfähig. Es ist keine Art von Timeout vorgesehen. Am Beispiel meines letzten Posts, ist deutlich, dass diese Situation schnell unverschuldet entstehen kann, wenn das CLR lock sich nicht lösen lässt, da nativer Code einen Mutex hält.

Was tun, wenn der CLR lock nicht aufgehoben wird?

Aus diesem Grund existiert die Methode TryEnter. Es kann über eine bestimmte Zeitspanne versucht werden, eine exklusive Sperre zu erhalten. Etwas ungewöhnlich finde ich nur, dass im Falle eines Timeout eine ArgumentOutOfRangeException geworfen wird.
Es gibt bereits verschiedene Implementierungen eines TimeOut Ansatzes. Einen sehr interessanten, der dem von Ian Griffith sehr ähnlich ist, habe ich bei Eric de Carufel gefunden:
using System;
using System.Linq;
using System.Threading;

namespace MultithreadHelper
{
    public class Safe : IDisposable
    {
        private readonly object[] _padlocks;
        private readonly bool[] _securedFlags;

        private Safe(object padlock, int milliSecondTimeout)
        {
            _padlocks = new[] {padlock};
            _securedFlags = new[] {Monitor.TryEnter(padlock, milliSecondTimeout)};
        }

        private Safe(object[] padlocks, int milliSecondTimeout)
        {
            _padlocks = padlocks;
            _securedFlags = new bool[_padlocks.Length];
            for (int i = 0; i < _padlocks.Length; i++)
            _securedFlags[i] = Monitor.TryEnter(padlocks[i], milliSecondTimeout);
        }

        public bool Secured
        {
            get { return _securedFlags.All(s => s); }
        } 
 
        public static void Lock(object[] padlocks, int millisecondTimeout, Action codeToRun)
        {
            using (var bolt = new Safe(padlocks, millisecondTimeout))
            if (bolt.Secured)
                codeToRun();
            else
                throw new TimeoutException(string.Format("Safe.Lock wasn't able to acquire a lock in {0}ms",
            millisecondTimeout));
        }

        public static void Lock(object padlock, int millisecondTimeout, Action codeToRun)
        { 
            using (var bolt = new Safe(padlock, millisecondTimeout))
            if (bolt.Secured)
                codeToRun();
            else
                throw new TimeoutException(string.Format("Safe.Lock wasn't able to acquire a lock in {0}ms",
            millisecondTimeout));
        }

        #region Implementation of IDisposable

        public void Dispose()
        {
             for (int i = 0; i < _securedFlags.Length; i++)
                 if (_securedFlags[i])
                 {
                     Monitor.Exit(_padlocks[i]);
                     _securedFlags[i] = false;
                 }
        } 

        #endregion
    }
}

InternalsVisibleToAttribute und signierte Assemblies: So funktionierts garantiert.

04.12.2009 16:46:00 | Peter Bucher

Stellt euch vor, ihr habt zwei Assemblies:

  • MyProject.Core
  • MyProject.Core.Tests

Im Core-Projekt gibt es Typen, die nicht öffentlich gemacht werden sollten, allerdings für die UnitTests zugänglich sein sollen.
Nun, das ist ein kleines Problem, wenn man das Attribut “InternalsVisibleTo” kennt, mithilfe folgender Dekleration in der AssemblyInfo.cs des MyProject.Core-Projekts kann dies einfach erledigt werden:

[assembly: InternalsVisibleTo("MyProject.Core.Tests”)]


Das macht sogar sehr viel Sinn, denn sonst können Kollisionen und Verwechslungen der Extensionmethods beim Endbenutzer vorkommen.

Soweit, so gut. Die Typen der MyProject.Core-Assembly sind jetzt in der MyProject.Core.Tests-Assembly sichtbar.
Müssen die Projekte jedoch signiert sein, kommt es zu einem grösseren Problem.

In mehreren Blogs sind die nötigen Schritte beschrieben, jedoch werden da wichtige Punkte nicht genannt, die einem zur Verzweiflung treiben können.
Die sind wie folgt:

  • Alle involvierten Assemblies müssen signiert werden.
  • Der PublicKey muss vom Projekt bezogen werden, bei dem die Internals sichtbar werden sollen, in unserem Fall also das MyProject.Core.Tests-Projekt.

Nach einer weiteren Suche bin ich schlussendlich auf einem (selbsternannten) Newbie-Blog fündig geworden.
Noch später sties ich dann auf die folgende Anleitung, die eigentlich alles beinhaltet, sodass ich nicht alles im Detail niederschreiben muss, trotzdem die wichtigen Punkte nennen kann und vorallem die Lösung wieder einmal finde:

Also, beachtet die oben stehenden zwei Punkte und haltet euch an folgende Anleitung:

MS Office 2010 & Sharepoint 2010 kommt im Juni(?)

04.12.2009 00:57:03 | Lars Keller

Wenn die Pläne so bleiben wie gedacht, wird MS Office 2010 und Sharepoint 2010 im Juni 2010 erscheinen.

Quelle: hier

MSDN VSTO Developer Center gestartet

04.12.2009 00:54:00 | Lars Keller

Diese Woche ist das neue VSTO Developer Center im neuen Design online gegangen. Hier findet man viele Tipps & Tricks über VSTO und die MS Office Entwicklung. Das neue Design sieht schick aus! :)

Besonders gut gefällt mir die “How DO I Videos” Sektion, ideal für den Einstieg! Man bekommt auf jeden Fall einen guten Überblick was mit VSTO alles geht.

Wenn Du brav warst, Schenk!

03.12.2009 16:50:52 | Jan Schenk



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/12/03/wenn-du-brav-warst-schenk.aspx'; tweetmeme_source = 'jansche';

Da hab ich mich doch gestern am Hauptbahnhof gleich angesprochen gefühlt. Ich war auf einem Seminar über Digital Signage als Gastredner zum Thema Silverlight eingeladen und an der Bayerstraße hat mich doch glatt diese Werbung direkt angesprochen. Die Advertisement-Technologie der letzten Generation ist wirklich erschreckend. Mit welch fiesen Tricks man trotz Datenschutzgesetzen zum gläsernen Bürger wird ist erschreckend ;-)

20091202_WennDuBravWarstSchenk_re 20091202_WennDuBravWarstSchenk_re

Ich hab das natürlich weitestgehend ignoriert, nur das Foto, das musste ich machen…

Wenn euch das auch passiert, sagt bitte Bescheid!
jan

ASP.NET GriView und AutoGeneratedColumns

03.12.2009 13:45:11 | Daniel Schädler

Normalerweise macht man in einem angepassten GridView die Eigenschaft AutoGenerateColumns=”false”. Wenn es schnell gehen soll und man es zum Beispiel nur ein GridView zum Anzeigen von Daten benötigt wird, dann kann man wie folgt vorgehen, ohne wirklich viel Code.

Das GridView sieht dann so aus, also nicht’s spektakuläres.

   1: <asp:GridView ID="AfterStatePersonPhoneNumbersGridView" runat="server" AutoGenerateColumns="true">
   2: </asp:GridView>

Im Databinding, kann dann in der entsprechenden DataSource, sofern diese eine DataTable ist, die entsprechende Spalte entfernt werden.

   1: UserPhoneNew.Columns.Remove("OrderItemObjectState");
   2: UserPhoneNew.Columns.Remove("PhoneTypeUntranslated");

In meinem Fall hat die DataSource zwei Eigenschaften die ich nicht darstellen will, entferne ich sie wie oben dargestellt, bevor ich sie an das GridView binde.

   1: afterStatePersonPhoneNumberGridView.DataSource = UserPhoneNew;
   2: afterStatePersonPhoneNumberGridView.DataBind();

Checkboxen erkennt das GridView, wenn eine Eigenschaft in der DataSource in “true” hat und setzt dann das entsprechende Control. Also mit wenig Aufwand hat man dann eine einfache Darstellung, ohne grosse Anpassungen in “OnRowDataBound” etc.

8-bit pwny club – Der Unterhaltungsteufel schlägt wieder zu

03.12.2009 10:56:29 | Jan Schenk



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/12/03/8-bit-pwny-club-der-unterhaltungsteufel-schl-gt-wieder-zu.aspx'; tweetmeme_source = 'jansche';

Sehr nettes Retro-Video zu alten Computerspielen. Wer die Referenzen nicht kapiert ist wohl zu jung ;-)

Neue Folge MSDN TV - Ausgabe 25.11.09

03.12.2009 07:29:49 | Kay Giza

Und wieder haben die Kollegen eine neue Folge Nachrichtensendung für Entwickler fertiggestellt!
msdn tv – Nachrichten für Entwickler“ kommt diesmal aus Berlin und präsentiert u.a. Impressionen und Statements von der „Tech·Ed Europe 2009“. Jan Schenk hatte dort Gelegenheit, als Gesprächspartner Orlando Escalante vor Mikrofon und Kamera zu bekommen, der als „Role Owner“ der Technical Platform Evangelists bei Microsoft mitverantwortlich für die Beratung von IT-Professionals zeichnet.

In den Kurznachrichten: Infos zur Beta des ASP.NET MVC Framework 2.0, eine Tutorial-Reihe rund um ‘Expression Studio‘, die Beta 2 Version von Visual Studio 2010 Ultimate und wo man sie kostenlos bekommt, das neue Facebook .NET SDK 3.0 und eine aktuelle MSDN Webcast-Serie zu ‘Powershell’. Sponsorhinweis: Unser Moderator wird eingekleidet und ausgestattet von Jan Schenk [13:46]

Jetzt angucken: MSDN TV - Ausgabe 25.11.09



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

Code Snippet Adventskalender fuer Windows Mobile Entwickler

03.12.2009 07:23:27 | Kay Giza

Die beiden MSDN-Webcast-Referenten und Mobile-Spezialisten Patrick Getzmann und Peter Nowak (MVP) präsentieren in diesem Jahr ein vorweihnachtliches Überraschungspaket für Entwickler: in ihrem „Windows Mobile Adventskalender“ gibt’s vom 1. Dezember bis zum Fest täglich eine nette “Leckerei” in Form von Code Snippets, also kleinen, häufig nachgefragten Codebeispielen. Damit auch jeder etwas für sich findet, werden die Snippets in zwei Fassungen angeboten: einmal als verwaltete Version in C# (von Peter Nowak), sowie nativ in C++ (von Patrick Getzmann).
MSDN Online stellt die 24 Schnipsel auf seiner Website vor.


Ein großes Dankeschön seitens Microsofts geht an Patrick und Peter für Ihr (Community-) Engagement!
Hier geht's zum Code Snippet Adventskalender für Windows Mobile Entwickler und wir wünschen viel Spaß beim Entdecken und genießen der ganzen "Leckereien".

Apropos Adventskalender, wer gerne einmal selber einen erstellen möchte, dem empfehle ich (wie eigentlich jedes Jahr seit dem wir es haben) folgenden CodeClip von MSDN Solve: MSDN Solve - Adventskalender



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

Kostenloser Buch-Download: Visual Basic 2008 – Das Entwicklerbuch

02.12.2009 11:38:56 | Jan Schenk



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/12/02/kostenloser-buch-download-visual-basic-2008-das-entwicklerbuch.aspx'; tweetmeme_source = 'jansche';

Eltern verzweifeln, Einzelhändler werden panisch, das Bundesverfassungsgericht ist alarmiert und die Anzahl der Parkunfälle in den Innenstädten steigt dramatisch an: Es weihnachtet sehr, und nicht nur die ersten offenen Türchen der Adventskalender künden davon. Lehnen Sie sich doch einfach mal zurück und genießen Sie unsere vorzeitigen Weihnachtsgeschenke: MSDN Online und Microsoft Press schenkt Ihnen 1.388 Seiten geballtes Know-how für Entwickler, zusammengestellt von VB-Routinier Klaus Löffelmann. Download der Code-Beispiele inklusive. Ganz entspannt und unfallfrei. Packen Sie das einfach mal als Lektüre ein - vielleicht schneit´s ja doch erst im Februar?

Hier geht’s zum Download: Visual Basic 2008 – Das Entwicklerbuch [PDF, E-Book]

Neuer Artikel beim dot.net magazin: "Mehr Speed für Silverlight-3-Anwendungen”

02.12.2009 11:28:26 | Gregor Biswanger

dotnet-magazin

In der neuen Ausgabe vom dot.net magazin gibt es einen neuen Artikel meinerseits:

Next Generation Silverlight – Mehr Speed für Silverlight-3-Anwendungen

Jeden Tag wächst das Angebot von Silverlight-Anwendungen. Gerade im Geschäftsumfeld hat der RIA-Gigant einen enormen Stellenwert. Auch hier gilt die Devise: „Zeit ist Geld“. Umso wichtiger wird, dass die Arbeit durch ganz bestimmte Performanceaspekte angenehmer ausfällt. Wenn dazu noch ein paar Punkte beachtet werden, wird einiges an Zeit beim Entwicklungsprozess dazugewonnen.

dotnet-magazin012010

Zu lesen ist der Artikel beim dot.net magazin, Ausgabe 01/2010.

Kostenloser Download: Visual Basic 2008 – Das Entwicklerbuch

02.12.2009 11:18:54 | Peter Kirchner

MSDN Online und Microsoft Press schenken Ihnen passend zum Beginn der Adventszeit 1.388 Seiten geballtes Entwickler-Know-how. Ab sofort steht „Visual Basic 2008 – Das Entwicklerbuch“ zum kostenlosen Download in zwei Teilen bereit.

Das Buch von Klaus Löffelmann (MVP) bietet Ihnen einen Einstieg in Visual Basic 2008, das .NET Framework 3.5 inklusive der wichtigen Neuerungen in Visual Studio Service Pack 1 und den Grundlagen der objektorientierten Programmierung. Aber auch fortgeschrittene Techniken, wie die Datenbankprogrammierung mit LINQ oder das Erstellen moderner Benutzeroberflächen, werden ausführlich erläutert. Am 30.11.2009 wurde die Bereitstellung des 59,- EURO wertvollen Buches im MSDN Flash Newsletter angekündigt.

Für Rückfragen und Diskussionen kann man gerne das MSDN Forum zum Thema Visual Basic nutzen.

Kostenloser Download des Buches sowie der Code-Beispiele: Visual Basic 2008 – Das Entwicklerbuch als PDF

Kostenloser Download: Visual Basic 2008 – Das Entwicklerbuch [als PDF, E-Book]

02.12.2009 07:56:19 | Kay Giza

Ich denke das ist eine schöne Sache, die wir den Entwicklern hier anbieten derzeit!

MSDN Online und Microsoft Press schenken Ihnen passend zum Beginn der Adventszeit 1.388 Seiten geballtes Entwickler-Know-how. Ab sofort steht „Visual Basic 2008 – Das Entwicklerbuch“ zum kostenlosen Download in 2 Teilen bereit. Das Buch von Klaus Löffelmann (MVP) bietet Ihnen einen Einstieg in Visual Basic 2008, das .NET Framework 3.5 inklusive der wichtigen Neuerungen in Visual Studio Service Pack 1 und den Grundlagen der objektorientierten Programmierung. Aber auch fortgeschrittene Techniken, wie die Datenbankprogrammierung mit LINQ oder das Erstellen moderner Benutzeroberflächen, werden ausführlich erläutert.

Am 30.11.2009 wurde die Bereitstellung des 59,- EUR wertvollen Buches im MSDN Flash Newsletter angekündigt. Ich möchte mich hier an dieser Stelle recht herzlich bei Klaus Löffelmann sowie Microsoft Press bedanken, die zusammen mit dem MSDN Online-Team diesen kostenlosen Download ermöglicht haben! Vielen Dank!

Für Rückfragen und Diskussionen kann man gerne das MSDN Forum zum Thema Visual Basic nutzen.


Kostenloser Download: Visual Basic 2008 – Das Entwicklerbuch als PDF


Siehe auch:

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

Dokumentschutz für Word 2007 mit Open Xml

01.12.2009 22:02:00 | Jan Christian Selke

Um es vorweg zu nehmen: Ich halte nichts von Passwortschutz mittels DocumentProtection unter Word2007. Dennoch, es gibt vier verschiedene Möglichkeiten ein Dokument zu “schützen”, davon aber nur eine, die mit dem OpenXml SDK umgesetzt werden kann:
Document Protection
Das einzige Open Xml Feature. Die Document Protection war aber nie als Sicherheitsfeature vorgesehen und kann leicht umgangen werden. Es handelt sich mehr um eine Art Schutz vor versehentlichen Änderungen durch den Benutzer. Dies wird auch so in der Spezifikation kommuniziert:
Document protection is a set of restrictions used to prevent unintentional changes to all or part of a WordprocessingML document  -since this protection does not encrypt the document, malicious applications may circumventits use. This protection is not intended as a security feature and may be ignored.
Document Encryption
Office Button >> Prepare >> Document Encryption
Die Datei endet ab sofort weiterhin auf .docx. Versucht man jedoch es als Zip zu öffnen, stellt man fest, dass keine Package Struktur mehr vorhanden ist und es sich im Prinzip um nichts weiter als ein getarntes .doc im 97-2003 Format handelt.
Restrict Permission
Office Button >> Prepare >> Restrict Permission
Ein serverseitiger Dokumentschutz basierend auf der Windows Live ID. Notwendig ist der Download der Information Rights Management Software von Microsoft.
Digital signature
Office Button >> Prepare >> Add A Digital Signature
Das Dokument erhält eine Signatur, um die Herkunft des Dokuments und Unversehrtheit des Inhalts sicherzustellen.

Was dann?!

Wie schon eingangs erwähnt, ich halte nichts von Passwortschutz. Das soll aber nicht heißen, dass ich grundsätzlich nichts vom Dokumentschutz halte. Nur eben nicht vom Passwortschutz mit DocumentProtection. Ich begründe das vor allem damit, dass der Passwortschutz ganz einfach ausgehebelt werden kann.
Das Dokument wird durch einen Eintrag in der settings.xml geschützt. Besteht Dokumentschutz ist eine der folgenden Zeile ähnliche vorhanden:
DocumentProtextion
So einfach wie die Zeile in der settings.xml ausgelesen werden kann, genau so einfach kann sie auch gelöscht werden. Wer sich nicht an die Dokumentstruktur herantraut, kann den Schutz fast noch einfacher aufheben, indem das Dokument einmal unter Word2000/2003 gespeichert wird. Wer sich für den genauen Vorgang interessiert, kann hier bei Vladimir Averkin nachlesen.

Daher bin ich der Meinung, wer ein Dokument mit Mitteln des Open Xml SDK schützen möchte, kann dies ohnehin nur gegen versehentliche Änderungen tun. Wird der Schutz manuell aufgehoben, steckt soviel negatives Potential in dem Umgehen des Schutzes, dass das Dokument selbst mit Passwortschutz aufgrund der genannten Möglichkeiten nicht wirklich sicher ist… Ergo, kann man auch gleich vollständig auf ein Passwort verzichten.

Eine einfache Implementation des Dokumentschutzes, ohne Passwort, könnte etwa diesem entsprechen:
using (var inputDocumentPackage = WordprocessingDocument.Open(inputFile, true))
{
    DocumentSettingsPart settingsPart = inputDocumentPackage.MainDocumentPart.DocumentSettingsPart;
    Settings settings = settingsPart.Settings;
    DocumentProtection prot = settings.ChildElements.First<DocumentProtection>();
    if (prot != null)
    {
        prot.Remove();
    }

    DocumentProtection docProtect = new DocumentProtection
    {
        Edit = DocumentProtectionValues.ReadOnly,
        Enforcement = OnOffValue.FromBoolean(true)
    };

    settings.PrependChild(docProtect);
    settings.Save();
}

Reflection – Fluch oder Segen?

01.12.2009 09:37:00 | Peter Bucher

Am 13. Oktober 2008 haben Golo Roden und ich unter dem Titel Noch Fragen, Roden? Ja, Bucher! angekündigt, jeweils zum ersten eines jeden Monats einen Kommentar zu einem vorab gemeinsam gewählten Thema verfassen zu wollen.

Bisher sind in dieser Reihe folgende Kommentare erschienen:

Heute, am 1. Dezember 2009, ist es nun wieder so weit, und unser Thema für diesen Monat lautet:

Reflection – Fluch oder Segen?

So wohl Golo wie auch ich haben uns unabhängig voneinander im Vorfeld unsere Gedanken gemacht, wie wir diesem Thema gegenüberstehen. Golos Kommentar findet sich zeitgleich in seinem Blog, folgend nun mein Kommentar zu diesem Thema:

 

Reflection?

Reflection, Reflexion bzw. Introspektion macht es möglich, Programme wie Daten zu behandeln und so Informationen über Typen / Member abzurufen und auch zu setzen.

Eine Einführung zu Reflection findet sich bspw. hier, und auf myCSharp.de findet sich ein super ausführlicher und tiefgehender Artikel, der auf jeden Fall lesenswert ist.
Darüber hinaus ist es per Reflection möglich, eine späte Bindung in jeglicher Hinsicht zu erreichen. Sei dies das dynamische Laden einer Assembly oder auch das dynamische Aufrufen einer Methode zur Laufzeit.
Damit lassen sich Service Locator und Dependency Injection Container - also Systeme zur Entkoppelung - umsetzen, die je nach Konfiguration eine andere Assembly mitsamt ihren Typen lädt.

Ein praktischer Anwendungsfall wäre ein Serialisierungsmechanismus, der Objekthierarchien bspw. in XML-Form abspeichern kann.
Mithilfe von Reflection können die zu speichernden Typen in Form einer Instanz von System.Reflection.Type abgefragt werden.

Ein Type Objekt macht alles verfügbar, was zu einem Typen gehört, seien dies Methoden, Attribute, Eigenschaften oder gar Felder.

Kleines Beispiel:

int count = 2012;
Type typeOfCount = count.GetType(); // Oder: typeof(int)
Console.WriteLine(typeOfCount);

Ausgabe ist die Stringrepräsentation des Types der mit dem Alias int verknüpft ist, also: “System.Int32”.

Schluss ist damit noch lange nicht, es ist genau so möglich Code zur Kompile- oder Laufzeit dynamisch zu erstellen.
Das .NET Framework bietet die hierzu nötigen Klassen im Namensraum System.Reflection.Emit bereit.

Die Anwendung dieser API ist jedoch relativ umständlich und komplex, dafür extrem mächtig.

 

Segen?

Reflection und Bibliotheken die darauf aufbauen birgen ein riesen Potential und ungeahnte Möglichkeiten.
Die Anwendung ist extrem einfach und viele Features im .NET Framework selber bauen auch auf Reflection auf.

Also auf jeden Fall ein Segen… auf der einen Seite.

 

Fluch?

Auf der anderen Seite kann es auch zu einem Fluch werden, denn mit Reflection kann viel Humbug getrieben werden.
Zum einen ist die Ausführung von Code der Reflection nutzt, um einiges langsamer, was zu Performanceproblemen führen kann, zum anderen kann so auch die Mauer der Zugriffsmodifizierer umgangen werden, da es ohne viel Aufwand möglich ist, auch private Members einer Klasse auszulesen.

Zudem können Probleme auftreten, wenn die Umgebung in der eine Anwendung läuft, zuwenig Rechte hat. Das kann dazu führen, das eine Anwendung überhaupt nicht, oder nur eingeschränkt lauffähig ist, in restriktiven Umgebungen.

Über das dynamische Laden von Assemblies kann es zu Sicherheitsproblemen kommen, falls die geladenen Assemblies schädlichen Code enthalten.

Allerdings lassen sich viele der geschilderten Probleme umgehen bzw. beheben.
Caching – dafür gibt es auch schon diverse, fertige APIs, die auch neben Caching noch weitere Verbesserungen für Reflection bringen.

Alle anderen Probleme brauchen eine vorsichtige und sparsame Verwendung von Reflection.
Mein Credo dabei ist: So viel wie nötig, so wenig wie möglich. Denn sehr vieles geht auch ohne Reflection, kann aber mit Reflection nachgebaut werden.

 

System.Linq.Expressions

Mit der Einführung von LINQ und in dessen Zuge auch dem neuen Namensraum System.Linq.Expressions gibt es eine weitere und einfachere Möglichkeit, Code dynamisch zu generieren und vorallem auch zu analysieren.

Zum einen ist es mit LINQ und den Expression Trees möglich, Lambda Ausdrücke, die in eine Methode eingespiesen werden, auseinander zu nehmen und zu analysieren.
In .NET selber wird das bspw. verwendet, um LINQ abfragen zu parsen und diese anschliessend in ein SQL-Statement zu überführen.

Zumindest laut meinem Wissen, ist es mit dem Expressions-API nur möglich, Methoden dynamisch zu generieren und zu kompilieren. Das ist eine Einschränkung, die allerdings für viele Anwendungsfälle nicht weiter tragisch ist, damit lässt einfach schon relativ viel realisieren.

Das Expressions-API nutzt intern auch Reflection und schlussendlich auch die Klassen aus dem Namensraum System.Reflection.Emit.

Beispiele mit dem Expressions-API:

Addieren von zwei Zahlen per statischem Code.
private void AddPlain()
{
  int one = 1;
  int two = 2;

  int result = one + two;
}

Addieren von zwei Zahlen, die Methode wird dynamisch zusammengebaut.
private static void AddWithExpressions()
{
  ConstantExpression numberOneExpression = Expression.Constant(2);
  ConstantExpression numberTwoExpression = Expression.Constant(3);

  BinaryExpression addExpression = Expression.Add(numberOneExpression, numberTwoExpression);

  var lambdaExpression = Expression.Lambda<Func<int>>(addExpression);
  Func<int> methodDelegate = lambdaExpression.Compile();

  int result = methodDelegate();
}


Funktion zum Addieren von zwei Zahlen per statischm Code.
private static int AddFunctionPlain(int left, int right)
{
  return left + right;
}

Funktion zum Addieren von zwei Zahlen dynamische generiert.
private static Func<int, int, int> GenerateAddFunction()
{
  ParameterExpression leftParameter = Expression.Parameter(typeof(int), "left");
  ParameterExpression rightParameter = Expression.Parameter(typeof(int), "right");

  BinaryExpression addExpression = Expression.Add(leftParameter, rightParameter);

  var lambdaExpression = Expression.Lambda<Func<int, int, int>>(addExpression, leftParameter, rightParameter);
  Func<int, int, int> methodDelegate = lambdaExpression.Compile();

  return methodDelegate;
}

Wie man sehen kann, ist die Nutzung von Expressions zum dynamische Generieren von Methoden für Ihre Mächtigkeit immer noch relativ einfach zu nutzen.

 

Fazit

Das war ein kurzer Rundflug durch Reflection und verwandte Gebiete, in dem ich versucht habe, die Vorteile, Möglichkeiten sowie auch Gefahren aufzuzeigen.
Reflection ist genial, aber nur wenn es sinngemäss und mit Vorsicht eingesetzt wird.

Also: Fluch und Segen :)

WPF Forum | ASP.NET Forum | ASP.NET MVC Forum | Silverlight Forum | Windows Phone 7 Forum | SharePoint Forum | Dotnet Jobs | Dotnet Termine | Developer Blogs | Dotnet News

Das Team | Regeln | Impressum