.
Anmeldung | Registrieren | Hilfe

.NET-Blogs Archiv September 2008

Auf Win2003 Server per WebDAV auf SharePoint zugreifen

30.09.2008 23:58:45 | Thomas Schissler

SharePoint veröffentlicht die Dokumentbibliotheken per WebDAV, d.h. man kann über \\<Servername>\sites\<ProjektName> beispielsweise auf die Dokumente eines TFS-Projektes zugreifen. Das funktioniert standardmäßig aber nicht von einem Windows 2003 Server aus. Hier muss der WebDAV Client zuerst aktiviert werden. Hierzu muss der Dienst "WebClient" gestartet werden.

image

Description of the SharePoint Server 2007 hotfix package: August 26, 2008

30.09.2008 20:03:00 | Ozgur Aytekin

Description of the SharePoint Server 2007 hotfix package: August 26, 2008

This article describes the Microsoft Office SharePoint Server 2007 issues that are fixed in the Office SharePoint Server 2007 hotfix package that is dated August 26, 2008.

This article describes the following items about the hotfix package:
- The issues that the hotfix package fixes.
- The prerequisites for installing the hotfix package.
- Whether you must restart the computer after you install the hotfix package.
- Whether the hotfix package is replaced by any other hotfix packages.
- Whether you must make any registry changes.
- The files that the hotfix package contains.

http://support.microsoft.com/kb/956056

Erste offizielle Infos zu: Visual Studio Team System 2010 [VSTS 2010]

30.09.2008 16:57:35 | Kay Giza

Microsoft hat jetzt erste Details der kommenden Version 2010 von Visual Studio Team System der Öffentlichkeit vorgestellt. Vor allem im Bereich der Modellierung und der Qualitätssicherung bietet die Entwicklungslösung für Teams zukünftig noch mehr Funktionen, darunter die Unterstützung der Unified Modeling Language (UML). Die Möglichkeiten zur Einbindung von beliebig vielen Beteiligten in das Application Lifecycle Management wurden zudem deutlich erweitert. Visual Studio Team System 2010 ist eine wichtige Komponente der Software-Entwicklungsumgebung Visual Studio 2010, die auf der Softwaretechnologie .NET Framework 4.0 basieren wird.   In vielen Unternehmen ist heute die Anwendungsentwicklung abgeschottet... [...mehr Informationen in diesem Blogeintrag auf Giza-Blog.de]

This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
Visit:  MSDN Online | Kostenfreie MSDN Service-Hotline für Entwickler
Daily News on MSDN:   MSDN Aktuell
© Copyright 2006-2008 Kay Giza. All rights reserved. Legal

Expression Media 2 und Office für Mac auf ProFoto-Tour mit Canon (Okt/Nov 08)

30.09.2008 16:57:00 | Steffen Ritter

Nicht nur das Xtopia-Logo geht gerne auf Reisen – auch Expression Media 2 (der Nachfolger der führenden Digital-Asset-Management-Lösung und Katalogsoftware iView MediaPro) und Microsoft Office für Mac 2008 Special Media Edition zeigen sich gerne in der Öffentlichkeit. Gemeinsam mit Canon geht das kreative Softwareduo von Mitte Oktober bis Mitte November auf Tour um Fotografen, Agenturen, Videokünstlern und Grafikern die Vorteile des neuen Office für Mac und der professionellen Fotoverwaltung Expression Media vorzustellen. Begleitet werden sie dabei von mir und meinem Kollegen Markus Maschik.

Der Besuch der Canon Professional Services (CPS) Roadshow ist natürlich kostenlos, weitere Infos zur Anmeldung finden Sie hier: http://www.microsoft.com/germany/expression/events/CanonProfessionalServiceRoadshow2008.aspx

Die Termine und Veranstaltungsorte:

  • Stuttgart: 14.10.2008 Alte Keller, Untertürkheimer Str. 33, 70734 Fellbach
  • München: 16.10.2008 Eisbach Studios, Studio D, Berduxstr. 30, 81245 München
  • Zürich: 21.10.2008 Mediacampus, Baslerstraße 30, CH-8048 Zürich
  • Frankfurt: 28.10.2008 Union Halle, Hanauer Landstr. 188, 60314 Frankfurt am Main
  • Düsseldorf: 30.10.2008 Kloppes & Friends, Königsberger Str. 7, 40231 Düsseldorf
  • Wien: 04.11.2008 Studio 44 der österreichischen Lotterien, Rennweg 44, 1038 Wien
  • Berlin: 11.11.2008 Delight Rental Studios DRS, Saarbrücker Str. 37, 10405 Berlin
  • Hamburg: 13.11.2008 Lichtwerk Altona Studios GmbH, Völckersstr. 14-20, 22765 Hamburg

Jeweils von 12 – 19 Uhr, der Eintritt ist frei. Alle Fotoprofis sind herzlich eingeladen!

Data Dude & VSTS Developer Edition wachsen zusammen

30.09.2008 09:13:00 | Lars Keller

Wie man im Data Dude Blog lesen kann, wird in der nächsten Version von Visual Studio Team System die Developer Edition und die Database Edition verschmelzen. (Yippie! :)

Als besonderes "Schmankerl" können alle Besitzer der VSTS Developer Edition mit Premium MSDN Abo, ab 01.10.08 die Database Edition kostenlos herunterladen und einsetzen. Dieses gilt auch für alle Team System 2005 Besitzer.

Link:



This weblog is sponsored by netcreate OHG.

Data Dude & VSTS Developer Edition wachsen zusammen

30.09.2008 08:13:00 | Lars Keller

Wie man im Data Dude Blog lesen kann, wird in der nächsten Version von Visual Studio Team System die Developer Edition und die Database Edition verschmelzen. (Yippie! :)

Als besonderes "Schmankerl" können alle Besitzer der VSTS Developer Edition mit Premium MSDN Abo, ab 01.10.08 die Database Edition kostenlos herunterladen und einsetzen. Dieses gilt auch für alle Team System 2005 Besitzer.

Link:

Neuigkeiten: jQuery + Open Source Support, .NET 4.0 und Visual Studio 2010

30.09.2008 01:13:50 | Robert Mühsig

Nachdem bereits viele über das Thema “jQuery Integration” in Visual Studio 2008 gebloggt haben (was eine sehr tolle Neuigkeit für alle Webentwickler ist) möchte ich mich ebenfalls den Gedanken von Ayende Rahien anschließen:

This is the first time in a long time that I have seen Microsoft incorporating an Open Source project into their product line.

I am both thrilled and shocked.

Ich bin sehr gespannt ob Microsoft vielleicht in Zukunft einen Schritt auf die OpenSource Community zugeht und nicht jedes Mal das Rad neu erfindet (MSTest und co. ahoi!)

.NET 4.0 und Visual Studio 2010

Heute sind auch die ersten Informationen zu Visual Studio 2010 und .NET 4.0 aufgetaucht. UML, Agile Entwicklung und Cloud Computing werden wohl Bestandteil davon sein. Ich bin sehr gespannt was auf der PDC zu sehen sein wird.

Mehr Informationen zu Visual Studio 2010 findet man auf Channel 9:


Visual Studio Team System 2010 Week on Channel 9!

 


Norman Guadagno: Announcing Visual Studio Team System 2010

ShareThis

Data Dude & VSTS Developer Edition wachsen zusammen

29.09.2008 23:13:00 | Lars Keller

Wie man im Data Dude Blog lesen kann, wird in der nächsten Version von Visual Studio Team System die Developer Edition und die Database Edition verschmelzen. (Yippie! :)

Als besonderes "Schmankerl" können alle Besitzer der VSTS Developer Edition mit Premium MSDN Abo, ab 01.10.08 die Database Edition kostenlos herunterladen und einsetzen. Dieses gilt auch für alle Team System 2005 Besitzer.

Link:

Stefan Lieser bei der .Net Developer-Group Ulm

29.09.2008 22:40:14 | Thomas Schissler

image

Am 08.10.2008 haben wir Stefan Lieser zu Gast bei der .Net Developer-Group Ulm. Er wird in seinem Vortrag einige "Software Design Principles" vorstellen und erläutern wie diese helfen, Software wartbarer wird.

Mitglieder und Gäste sind herzlich eingeladen. Weitere Infos unter http://www.dotnet-ulm.de/Treffen.aspx

Upgrading projects from VC2005 / VC2003 to VC2008 may not properly port /O2 switch

29.09.2008 20:13:00 | Ozgur Aytekin

The porting completes successfully and the Project Properties->Configuration Properties->C/C++->Optimization for release mode configuration will show Maximize Speed (/O2).

But when you build the application, the /O2 switch may not be not passed to the compiler. This could be observed in the build log or by checking Project Properties->Configuration Properties->C/C++-> Command Line.

As a result the VC2008-SP1-built application could perform more slowly.

http://support.microsoft.com/kb/958148

IE AddOn - Make URL as Tinyurl

29.09.2008 17:51:13 | Lars Keller

Inspiriert von dem Twitter Client "twhirl", habe ich mir ein kleines IE Addon geschrieben, welches eine URL in eine TinyUrl verwandelt.

Beispiel: Aus http://www.netcreate.de/de_home.net wird http://is.gd/3hc4

Das Addon wird per Rechtsklick (Kontextmenü) auf das Browserfenster ausgeführt.

Make URL as Tinyurl

Danach wird folgendes Skript ausgeführt:

<script type="text/javascript" defer>

	try

	{

		var win = window.external.menuArguments;

		var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

		

		xmlhttp.open('GET', 'http://is.gd/api.php?longurl=' + external.menuArguments.document.URL);

		xmlhttp.onreadystatechange = handleStateChange;

		xmlhttp.send(null);

			

		function handleStateChange()

		{

			win.clipboardData.clearData();		

			if (xmlhttp.readyState == 4)

			{

				alert('URL converted to: ' + xmlhttp.responseText);

				win.clipboardData.setData("Text",xmlhttp.responseText);

				xmlhttp.abort();

				xmlhttp = null;

			}

			

		}

	}

	catch(ex)

	{

		alert("tinyurl.js - An Exception occured: " + ex.message);

	}

</script>

Damit das Addon im Kontextmenü des Browsers angezeigt wird, muss folgendes RegFile ausgeführt werden:

Windows Registry Editor Version 5.00



[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt]



[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\&Make URL as Tinyurl]

@="C:\\Tools\\IE\\tinyurl.js"

Download der beiden Files: hier

Known Issues:

  • Ab und zu geht der Aufruf nur jedes zweite Mal. Das xmlhttp.readyState ist plötzlich null, warum das so ist kann ich nicht genau sagen.

Links:



This weblog is sponsored by netcreate OHG.

IE AddOn - Make URL as Tinyurl

29.09.2008 16:51:13 | Lars Keller

Inspiriert von dem Twitter Client "twhirl", habe ich mir ein kleines IE Addon geschrieben, welches eine URL in eine TinyUrl verwandelt.

Beispiel: Aus http://www.netcreate.de/de_home.net wird http://is.gd/3hc4

Das Addon wird per Rechtsklick (Kontextmenü) auf das Browserfenster ausgeführt.

Make URL as Tinyurl

Danach wird folgendes Skript ausgeführt:

<script type="text/javascript" defer>
	try
	{
		var win = window.external.menuArguments;
		var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		
		xmlhttp.open('GET', 'http://is.gd/api.php?longurl=' + external.menuArguments.document.URL);
		xmlhttp.onreadystatechange = handleStateChange;
		xmlhttp.send(null);
			
		function handleStateChange()
		{
			win.clipboardData.clearData();		
			if (xmlhttp.readyState == 4)
			{
				alert('URL converted to: ' + xmlhttp.responseText);
				win.clipboardData.setData("Text",xmlhttp.responseText);
				xmlhttp.abort();
				xmlhttp = null;
			}
			
		}
	}
	catch(ex)
	{
		alert("tinyurl.js - An Exception occured: " + ex.message);
	}
</script>

Damit das Addon im Kontextmenü des Browsers angezeigt wird, muss folgendes RegFile ausgeführt werden:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt]

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\&Make URL as Tinyurl]
@="C:\\Tools\\IE\\tinyurl.js"

Download der beiden Files: hier

Known Issues:

  • Ab und zu geht der Aufruf nur jedes zweite Mal. Das xmlhttp.readyState ist plötzlich null, warum das so ist kann ich nicht genau sagen.

Links:

Wie wars: Architect’s Master Class mit Juval Löwy

29.09.2008 14:28:15 | Christian Binder

Letzte Woche habe ich neben meinen Talks auf der Basta an der Architect's Master Class mit Juval Löwy teilgenommen. Kann ich die Architect's Master Class empfehlen?

Die kurze Antwort ist JA! Juval hat in den 5 Tagen aus der Perspektive des Solution Architect's den Service Oriented Development Process gelungen aufgezeigt. Anfangs definiert er die Rolle des Architekten und dessen Aufgaben im Development Process, immer wieder durch praxisnahe Beispiele aufgefrischt. Ein gutes Design ist abhängig von der Technologie, was bringt das beste Design, wenn es mit den vorhanden Technologien nicht zeitnah umgesetzt werden kann! Diese Auffassung teile ich uneingeschränkt, weil Sie aus der Praxis kommt. Dieser rote Faden zieht sich durch den ganzen Track, was mir sehr gut gefallen hat. Bei der technologischen Umsetzung fokussiert er natürlich auf WCF, wobei er immer den Fokus auf die für den Architekten relevanten Punkte setzt. Weiter zeigt er Advanced WCF mit den IDesign ServiceModelEx Extensions, immer die Architektur Patterns im Bezug.
Abschliessend fokussiert auf Requirement Decomposition und wie man eine Architektur hieraus ableitet. Am letzten Tag wird dieser Process im Lab geübt. Wer danach immer noch Funktionale Decomposition betreibt, hat's nicht verstanden. Besonders gut gefallen hat mir der Praxisbezug mit dem Fokus auf die Rolle des Architekten und dem direkten Bezug zur Technologie.
Nicht alle Ansichten teile ich zu 100%, muss man auch nicht, wichtig ist, dass man genug Ideen für seine Rolle mitnimmt und davon gibt's einige :-)

Sie ergänzt sich mit der WCF Master Class am 8-12 Dezember, die noch deutlich mehr WCF Details behandelt. Hier hab ich auch schon partizipiert :-)

Viel Spass

Chris

Warum muss ich hin? Keynote Technical Summit 2008

29.09.2008 13:02:54 | Christian Binder

Der Technical Summit 2008 wird dieses Jahr unsere grösste Microsoft Entwickler Veranstaltung in Deutschland sein, auf der wir unter anderem die neusten Microsoft Entwicklertrends zeigen werden. 

In der Keynote greifen wir unter anderem ein Thema auf, was in naher Zukunft fast jedem Entwickler Kopfschmerzen bereiten könnte:
clip_image001
Intel hat für 2011 Prozessoren mit 80 Cores angekündigt, was nichts anderes bedeutet, dass die einzelne CPU nicht mehr signifikant schneller werden wird, sondern es einfach mehr Cores geben wird. Stellt sich die Frage, welche Folgen dieser Trend für das Software Development hat? Die meisten Applikationen, die ich kenne, werden mit 80 Cores folgendes Bild abgeben. Einer der Cores wird mit 100% rot leuchten und der Rest 0-1% Auslastung zeigen, die Applikation wird mit der neuen Hardware nur unwesentlich schneller laufen...... Ups, was wird da wohl der Kunde sagen......

Die Applikationen, die schon jetzt multithreaded arbeiten und von den zusätzlichen Cores profitieren, haben in der Regel Probleme mit Deadlocks und Concurrency. Ausnahmen bestätigen zwar die Regel, Fakt ist aber das Multithreaded Programmieren noch kein Mainstream ist. Warum?

Die Antwort ist einfach, die Toolunterstützung in diesem Bereich ist nicht ausgreift oder schlicht einfach nicht vorhanden, was dazu führt, dass nur erfahrene Entwickler stabile Multithreaded Frameworks entwickeln können und das ist nicht zufriedenstellend!

Dieser Hardware Trend stellt also neue Anforderungen an das Software Development. In der Keynote und in einer zusätzlichen Session, werden wir deshalb dieses Thema aufgreifen und zeigen, was wir mit der nächsten Visual Studio Generation an Unterstützung liefern werden. Unser Ziel ist Entwicklern eine Toolunterstützung zu geben, die es ermöglicht,  diese neuen Hardware Ressourcen effizient nutzten zu können. Wer könnte das besser tun als Steve Teixeira, Product Unit Manager des Parallel Development Tools Team's in der Developer Division's Parallel Computing Platform Organzation?

Wer also wissen möchte was kommt, was man jetzt schon beachten sollte, darf diese Keynote auf keinen Fall verpassen :-)

Christian Binder

Ein neues Laptop muss her - und das ist mein Vorschlag

29.09.2008 10:15:36 | Norbert Eder

Ein neues Laptop muss her. Nicht nur, weil das Vorhandene schon etwas betagt ist, sondern auch, weil es praktischer sein soll. D.h. zusammengefasst: Kein Entwicklungsrechner, sondern ein kleines feines Ding mit guter Display-Qualität, langer Laufzeit und wenig Gewicht. Das Display sollte sich auch in Grenzen halten. Maximal 14" sollten es sein.

Hauptsächliche Anwendungsgebiete werden wohl die Benutzung von Office-Anwendungen, Browsern und Tools zum Verfassen von Blog-Beiträgen sein. Zudem müssen Präsentationen sauber und flüssig damit abgehalten werden können. Auch ein wenig Visual Studio und Eclipse muss drinnen sein.

Diese meine Anforderungen scheinen nach einer ersten Recherche vom Samsung Q310 erfüllt werden zu können. Zumal der Preis mit knapp 1.000 Euro auch recht moderat ausfällt. Mir fehlt jedoch noch der praktische Beweis dazu. Daher die Frage an meine Leserschaft: Hat damit jemand Erfahrung? Steht das bei jemandem zu Hause? Wie schnell sind die Plattenzugriffe? Wie laut der Lüfter?

Für zweckdienliche Hinweise und Meinungen bin ich natürlich dankbar.

Produktinformationen zu diesem Laptop gibt es auf den Seiten von Samsung.

IE AddOn - Make URL as Tinyurl

29.09.2008 07:51:01 | Lars Keller

Inspiriert von dem Twitter Client "twhirl", habe ich mir ein kleines IE Addon geschrieben, welches eine URL in eine TinyUrl verwandelt.

Beispiel: Aus http://www.netcreate.de/de_home.net wird http://is.gd/3hc4

Das Addon wird per Rechtsklick (Kontextmenü) auf das Browserfenster ausgeführt.

Make URL as Tinyurl

Danach wird folgendes Skript ausgeführt:

<script type="text/javascript" defer>
	try
	{
		var win = window.external.menuArguments;
		var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		
		xmlhttp.open('GET', 'http://is.gd/api.php?longurl=' + external.menuArguments.document.URL);
		xmlhttp.onreadystatechange = handleStateChange;
		xmlhttp.send(null);
			
		function handleStateChange()
		{
			win.clipboardData.clearData();		
			if (xmlhttp.readyState == 4)
			{
				alert('URL converted to: ' + xmlhttp.responseText);
				win.clipboardData.setData("Text",xmlhttp.responseText);
				xmlhttp.abort();
				xmlhttp = null;
			}
			
		}
	}
	catch(ex)
	{
		alert("tinyurl.js - An Exception occured: " + ex.message);
	}
</script>

Damit das Addon im Kontextmenü des Browsers angezeigt wird, muss folgendes RegFile ausgeführt werden:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt]

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\&Make URL as Tinyurl]
@="C:\\Tools\\IE\\tinyurl.js"

Download der beiden Files: hier

Known Issues:

  • Ab und zu geht der Aufruf nur jedes zweite Mal. Das xmlhttp.readyState ist plötzlich null, warum das so ist kann ich nicht genau sagen.

Links:

Sicherheit ja - aber vor was und vor wem genau?

29.09.2008 05:44:45 | Kay Giza

Eine vielerorts zu selten gestellte Frage ist die, welchem konkreten Zweck eine als notwendig erachtete Sicherheitsmaßnahme dienen soll, und welche Art von Schutz sie leisten kann. Eric Lippert erklärt in seinem Blog nach einiger sprachlicher Herleitung zur grundsätzlichen Vollständigkeit einer Fragestellung, warum er sein Cabriolet grundsätzlich nicht mehr abschließt, sein Haus aber dennoch, und begründet beide Entscheidungen in einer Abwägung von Aufwand, Risiken und Möglichkeiten. Diese sehr plastischen Beispiele zeigen auf, dass das Streben nach Sicherheit in allen Lebensbereichen nicht als isolierter Aspekt behandelt werden kann, und der gewollte und erreichbare Schutz einer Maßnahme ebenso klar definiert wie bewusst sein sollte. Greifbare Beispiele aus der Entwicklerwelt bleibt Eric ebenfalls nicht schuldig: Sicherheit ja - aber vor was und vor wem genau?

Wichtige Infos rund um das Thema Sicherheit liefert der monatlich erscheinende Sicherheits-Newsletter für IT-Professionals - mit Leitfäden, Hintergrund-Artikeln, Sicherheits-Hinweisen und Veranstaltungsterminen. Aktuelles rund um die Erstellung sicherer Anwendungen erhalten Entwickler und Architekten darüber hinaus im zweiwöchentlichen Newsletter MSDN Flash und werktäglich im MSDN Security Developer Center. Gleich kostenlos abonnieren, sicherheitshalber ;-).



This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
Visit:  MSDN Online | Kostenfreie MSDN Service-Hotline für Entwickler
Daily News on MSDN:   MSDN Aktuell
© Copyright 2006-2008 Kay Giza. All rights reserved. Legal

jQuery und Microsoft

29.09.2008 02:17:01 | Jürgen Gutsch

So wie es aussieht, ist Microsoft daran interessiert die Unterstützung für die JavaScript Library jQuery in das VisualStudio zu übernehmen.

Es wird bis jetzt in der englischsprachigen ASP.NET Gemeinde kräftig über Unterstützung per IntelliSense, Snippets, Beispielen und Dokumentationen geschrieben. Zudem sollen neue Controls geschrieben werden die auf jQuery basieren.

Scott Hanselman hat bereits ein Tutorial zu jQuery und ASP.NET geschrieben

Ich bin mal gespannt, was dabei heraus kommt.

Mehr dazu:
http://jquery.com/blog/2008/09/28/jquery-microsoft-nokia/
http://ajaxian.com/archives/jquery-finds-its-way-into-microsoft-and-nokia-stacks
http://www.hanselman.com/blog/jQueryToShipWithASPNETMVCAndVisualStudio.aspx
http://weblogs.asp.net/scottgu/archive/2008/09/28/jquery-and-microsoft.aspx
http://weblogs.asp.net/bleroy/archive/2008/09/28/jquery-now-officially-part-of-the-net-developer-s-toolbox.aspx

Expression Blend 2 SP1 bringt vollstaendigen Support fuer Silverlight 2

28.09.2008 22:07:10 | Kay Giza

Preview veröffentlicht, ersetzt die Microsoft Expression Blend 2.5 Previews - seit diesem Wochenende ist es offiziell: Die bisher den als „Blend 2.5 Preview“ bezeichneten Blend-Versionen vorbehaltene Unterstützung für Silverlight 2 – also die Unterstützung für die heiß ersehnte Browser- und Plattform übergreifende .NET-Runtime für Mac, Windows und Linux – wird in Kürze als kostenloses Servicepack für Expression Blend 2 veröffentlicht. Eine Vorabversion des SP1 (Service Pack 1) für Expression Blend ist bereits in Englisch verfügbar und ersetzt damit alle Blend 2.5-Versionen.

Die Zusammenfassung in Stichworten:

  • Kostenloses Servicepack SP1 für Expression Blend 2 bringt vollen Support für Silverlight 2
  • Blend 2 SP1 ersetzt damit die bisherigen Blend 2.5 Previews (2.5er gibt es ab sofort nicht mehr; Blend 2 SP 1 ist ab sofort die neueste Version mit den meisten Funktionen für Silverlight 2)
  • Eine englische Preview von Expression Blend 2 SP 1 ist bereit zum Download verfügbar (klappt mit Test- und Vollversionen): http://www.microsoft.com/expression/try-it/default.aspx?filter=prerelease
  • Die endgültige Version von Silverlight 2 erscheint in Kürze
  • Zum Erscheinen von Silverlight 2 oder kurz darauf wird auch eine deutsche SP1 für Blend 2 verfügbar sein.

Wichtig für alle Silverlight 2-Entwickler und -Designer ist auch diese Meldung: Kostenloses Service Pack für Expression Encoder 2



This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
Visit:  MSDN Online | Kostenfreie MSDN Service-Hotline für Entwickler
Daily News on MSDN:   MSDN Aktuell
© Copyright 2006-2008 Kay Giza. All rights reserved. Legal

Folien zu meinen Präsentationen auf der NRW08, dem Herbstcampus und der BASTA

28.09.2008 18:56:21 | Mathias Raacke

Hier sind die Folien zu meinen Vorträgen im September (das war ein anstrengender Monat…):

NRW08: Das Open XML Format SDK v2

Herbstcampus 2008: LINQ to * – 10 Provider für LINQ

Herbstcampus 2008: Daten zum mitnehmen – Sync Services für ADO .NET v2

BASTA 2008: Das Open XML Format SDK v2

BASTA 2008: Eine Einführung in LINQ to SQL

BASTA 2008: Fertige Webseiten in 5 Minuten? ASP .NET Dynamic Data

Die Folien zu meinem Vortrag “LINQ to SQL vs. ADO .NET Entity Framework” von der ICE habe ich anscheinend leider nicht mehr. Ich musste meinen Rechner direkt nach dem Vortrag an Microsoft zurück geben, und hatte die Folien *eigentlich* über Live Mesh synchronisiert, anscheinend war der Upload aber nicht abgeschlossen. Wenn ich sie nicht noch auf irgendeinem USB Stick finde sind sie dann wohl weg. Von allen Vorträgen hier hat mir dieser aber sowieso am wenigsten gefallen (auch vom Teilnehmerfeedback her).

Technorati-Tags: ,,

Expression Blend 2 Service Pack 1 bringt Silverlight 2 Unterstützung

28.09.2008 18:28:11 | Oliver Scheer

Expression Blend 2 SP1 bringt vollständigen Support für Silverlight 2 (Preview veröffentlicht, ersetzt die Blend 2.5 Previews)

Seit diesem Wochenende ist es offiziell: Die bisher den als „Blend 2.5 Preview“ bezeichneten Blend-Versionen vorbehaltene Unterstützung für Silverlight 2 – also die Unterstützung für die heiß ersehnte Browser- und Plattform übergreifende .NET-Runtime für Mac, Windows und Linux – wird in Kürze als kostenloses Servicepack für Expression Blend 2 veröffentlicht. Eine Vorabversion des SP1 (Service Pack 1) für Expression Blend ist bereits in Englisch verfügbar und ersetzt damit alle Blend 2.5-Versionen.

Die Zusammenfassung in Stichworten:

  • Kostenloses Servicepack SP1 für Expression Blend 2 bringt vollen Support für Silverlight 2
  • Blend 2 SP1 ersetzt damit die bisherigen Blend 2.5 Previews (2.5er gibt es ab sofort nicht mehr; Blend 2 SP 1 ist ab sofort die neueste Version mit den meisten Funktionen für Silverlight 2)
  • Eine englische Preview von Expression Blend 2 SP 1 ist bereit zum Download verfügbar (klappt mit Test- und Vollversionen): http://www.microsoft.com/expression/try-it/default.aspx?filter=prerelease
  • Die endgültige Version von Silverlight 2 erscheint in Kürze
  • Zum Erscheinen von Silverlight 2 oder kurz darauf wird auch eine deutsche SP1 für Blend 2 verfügbar sein

Wichtig für alle Silverlight 2-Entwickler und -Designer ist auch diese Meldung: Kostenloses Service Pack für Expression Encoder 2.

Expression Blend 2 SP1 bringt vollständigen Support für Silverlight 2 (Preview veröffentlicht, ersetzt die Blend 2.5 Previews)

28.09.2008 18:12:00 | Steffen Ritter

Seit diesem Wochenende ist es offiziell: Die bisher den als „Blend 2.5 Preview“ bezeichneten Blend-Versionen vorbehaltene Unterstützung für Silverlight 2 – also die Unterstützung für die heiß ersehnte Browser- und Plattform übergreifende .NET-Runtime für Mac, Windows und Linux – wird in Kürze als kostenloses Servicepack für Expression Blend 2 veröffentlicht. Eine Vorabversion des SP1 (Service Pack 1) für Expression Blend ist bereits in Englisch verfügbar und ersetzt damit alle Blend 2.5-Versionen. Und weil mir dieser Satz selbst ob seiner Konstruktion Kopfschmerzen beim Lesen bereitet (könnte natürlich auch daran liegen), hier die Zusammenfassung in Stichworten:

  • Kostenloses Servicepack SP1 für Expression Blend 2 bringt vollen Support für Silverlight 2
  • Blend 2 SP1 ersetzt damit die bisherigen Blend 2.5 Previews (2.5er gibt es ab sofort nicht mehr; Blend 2 SP 1 ist ab sofort die neueste Version mit den meisten Funktionen für Silverlight 2)
  • Eine englische Preview von Expression Blend 2 SP 1 ist bereit zum Download verfügbar (klappt mit Test- und Vollversionen): http://www.microsoft.com/expression/try-it/default.aspx?filter=prerelease
  • Die endgültige Version von Silverlight 2 erscheint in Kürze
  • Zum Erscheinen von Silverlight 2 oder kurz darauf wird auch eine deutsche SP1 für Blend 2 verfügbar sein

Wichtig für alle Silverlight 2-Entwickler und -Designer ist auch diese Meldung: Kostenloses Service Pack für Expression Encoder 2.

Silverlight 2 wird langsam erwachsen

28.09.2008 17:41:53 | Norbert Eder

Bereits am 25. September wurde Silverlight 2 Release Candidate 0 veröffentlicht. Damit wird Silverlight 2 langsam aber sicher erwachsen.

Da sich zu Silverlight 2 Beta 2 einige Funktionsnamen geändert haben, ist es ratsam, sich die Breaking Changes (Word Dokument) anzusehen. Eine gesamte Liste der Veränderungen inkl. hilfreicher Hinweise ist in den Release Notes einsehbar.

Sämtliche Downloads sind natürlich auf Silverlight.net gelistet. Es gilt jedoch zu bedenken, dass vorherige Versionen zu deinstallieren sind.

Extranet und Office SharePoint Server 2007 / MOSS 2007

28.09.2008 14:43:00 | Ozgur Aytekin

In diesem Beitrag findet Ihr sehr nützliche Links zum Thema "Extranet und SharePoint Server 2007".

Design extranet farm topology (Office SharePoint Server)

In this article:
- About extranet environments
- Planning for extranet environments
- Edge firewall topology
- Back-to-back perimeter topology
- Back-to-back perimeter topology with content publishing
- Back-to-back perimeter topology optimized for hosting static content
- Split back-to-back topology

http://technet.microsoft.com/en-us/library/cc263513.aspx

Extranet Topologies for SharePoint Products and Technologies

http://go.microsoft.com/fwlink/?LinkID=73153&clcid=0x409

 

ISA Server home page
http://go.microsoft.com/fwlink/?LinkId=86495&clcid=0x409 oder http://www.microsoft.com/isaserver/default.mspx

Network Concepts in ISA Server 2006
http://go.microsoft.com/fwlink/?LinkId=86497&clcid=0x409 oder http://technet.microsoft.com/en-us/library/bb794774.aspx

Intelligent Application Gateway 2007 technical library
http://technet.microsoft.com/en-us/library/cc303240.aspx

 

Plan for authentication (Office SharePoint Server)

In this chapter:
- Plan authentication methods (Office SharePoint Server)
- Plan authentication settings for Web applications in Office SharePoint Server
- Authentication samples

http://technet.microsoft.com/en-us/library/cc263434.aspx

 

Logical architecture model: Corporate deployment

In this article:
- About the model
- Overall design goals
- Server farms
- Users, zones, and authentication
- SSPs
- Administration sites
- Application pools
- Web applications
- Site collections
- Content databases
- Zones and URLs
- Zone policies

http://technet.microsoft.com/en-us/library/cc261995.aspx

 

Plan security hardening for server roles within a server farm (Office SharePoint Server)

In this article:
- About security hardening
- Application server recommendations
- Secure communication with the Microsoft SQL Server database
- File and Printer Sharing service requirements
- Single sign-on hardening requirements
- Office Server Web services
- Connections to external servers
- Service requirements for e-mail integration
- Service requirements for session state
- Office SharePoint Server services
- Accounts and groups
- Web.config file
- Secure snapshot additions

http://technet.microsoft.com/en-us/library/cc262849.aspx

 

Plan security hardening for extranet environments

In this article:
- Extranet hardening planning tool
- Network topology
- Domain trust relationships
- Communication with server-farm roles
- Communication with infrastructure server roles
- Requirements to support document conversions
- Communication between network domains
- Connections to external servers

http://technet.microsoft.com/en-us/library/cc262834.aspx

 

Downloadable book: Planning an Extranet Environment for Office SharePoint Server

This guide provides planning recommendations for deploying Microsoft Office SharePoint Server 2007 in an extranet environment. It discusses the extranet topologies that are supported, details the hardening requirements for servers within an extranet environment, and describes a logical architecture sample that is designed to work within an extranet environment. The audiences for this guide include information architects, IT generalists, and program managers who are planning to make Office SharePoint Server 2007 sites accessible from the Internet.

http://technet.microsoft.com/en-us/library/cc262400.aspx oder http://go.microsoft.com/fwlink/?LinkId=93372

OXBA und GEVER Office

28.09.2008 14:33:00 | Ozgur Aytekin

Die Begriffe GEVER Office und OXBA werden oftmals zusammen genannt oder gleichgestellt.
Folgende Auflistungen zeigt auf, in welchen Punkten sich die beiden Begriffe unterscheiden.

OXBA
- Framework als Basis für GEVER Lösungen
- Entwickelt durch BIT und Microsoft
- Rechte an OXBA gehören dem BIT, Microsoft hat ein Nutzungsrecht
- Wird durch BIT und mit Unterstützung von Microsoft weiterentwickelt
- Ist frei zugänglich (Code offen) für registrierte Partner und Kunden (Community)
- Aufbau einer OXBA-Community

GEVER Office
- GEVER Lösung vom BIT auf Basis von OXBA
- Betrieb durch das BIT (Competence Center GEVER)

http://www.oxba.admin.ch/

http://www.oxba.admin.ch/themen/index.html?lang=de

Microsoft SQL Server 2005 Reporting Services Add-in for Microsoft SharePoint Technologies

28.09.2008 11:23:00 | Ozgur Aytekin

The Microsoft SQL Server 2005 Reporting Services Add-in for Microsoft SharePoint Technologies is a Web download that provides features for running a report server within a larger deployment of Windows SharePoint Services 3.0 or Microsoft Office SharePoint Server 2007.

http://www.microsoft.com/downloads/details.aspx?familyid=1E53F882-0C16-4847-B331-132274AE8C84&displaylang=en

Das Microsoft SharePoint Team hat folgenden Eintrag über "Microsoft SQL Server 2005 SP2 Reporting Services integration with WSS 3.0 and MOSS 2007" publiziert. Diesen Eintrag findet ihr unter: http://blogs.msdn.com/sharepoint/archive/2007/02/19/microsoft-sql-server-2005-sp2-reporting-services-integration-with-wss-3-0-and-moss-2007.aspx

Free Krypton Suite Licenses

28.09.2008 10:35:00 | Ozgur Aytekin

Die Firma Component Factory bietet für die MVPs und .NET Bloggers Gratis Krypton Suite Lizenz.

Auszug aus dem Info E-Mail:

Free Krypton Suite Licenses If you are a Microsoft MVP or a .NET blogger then you could qualify for a free single developer license of Krypton Suite. As an MVP you get a three year license and all you have to do is email us! If you are a .NET blogger with 500 or more subscribers then you get a one year license also by just emailing us.

To check out the simple rules use this link... http://www.componentfactory.com/freecopy.php

Claim for free copy today, over 30 have already!

Ressourcen vom BASTA!-Chalk Talk

26.09.2008 17:00:27 | Jens Häupel

Hier gibt's nachträglich noch meine Mindmap vom VSTO Deployment, die ich auf der Basta! gezeigt hatte. Mit ein Klick auf das Bild gibts eines, wo Sie auch was lesen können. Desweiteren meine Notizen dazu im Stichwort-Word-Format.

VSTO Deployment (small)

Back from BASTA! 2008

26.09.2008 16:48:48 | Lars Keller

Es war meine erste BASTA! und auch gleich als Sprecher dabei. Es hat viel Spaß gemacht mit den Teilnehmern, Speakern und Freunden sich zu unterhalten und zu fachsimpeln.

Mich überraschten die vielen Teilnehmer bei meiner VSTO-Session "Office und .NET - zwei Welten wachsen zusammen mit VSTO 3.0". Ich hatte mit weniger Leuten gerechnet, darum freut es mich um so mehr, dass VSTO anscheinend ein sehr interessantes Thema für viele ist.

Office und .NET - zwei Welten wachsen zusammen mit VSTO 3.0   Office und .NET - zwei Welten wachsen zusammen mit VSTO 3.0 - Agenda

Abstract:

Die mit Visual Studio 2008 ausgelieferte VSTO-3.0-Komponente und die frisch erschienenen VSTO Power Tools bringen zahlreiche Neuerungen für die Office-2007-Entwicklung mit sich. Der Vortrag zeigt anhand verschiedener Beispiele, wie einfach der Einstieg in die VSTO-Entwicklung sein kann und klärt Fragen wie: Was kann der neue Ribbon-Designer in VS 2008? Kann Word mit Outlook interagieren? Kann WPF in Office angewendet werden und wie passt LINQ dazu?

Meine Präsentationsunterlagen und die Samplecodes können hier runtergeladen werden:

Basta!2008 Zip download



This weblog is sponsored by netcreate OHG.

Back from BASTA! 2008

26.09.2008 15:48:48 | Lars Keller

Es war meine erste BASTA! und auch gleich als Sprecher dabei. Es hat viel Spaß gemacht mit den Teilnehmern, Speakern und Freunden sich zu unterhalten und zu fachsimpeln.

Mich überraschten die vielen Teilnehmer bei meiner VSTO-Session "Office und .NET - zwei Welten wachsen zusammen mit VSTO 3.0". Ich hatte mit weniger Leuten gerechnet, darum freut es mich um so mehr, dass VSTO anscheinend ein sehr interessantes Thema für viele ist.

Office und .NET - zwei Welten wachsen zusammen mit VSTO 3.0  Office und .NET - zwei Welten wachsen zusammen mit VSTO 3.0 - Agenda

Abstract:

Die mit Visual Studio 2008 ausgelieferte VSTO-3.0-Komponente und die frisch erschienenen VSTO Power Tools bringen zahlreiche Neuerungen für die Office-2007-Entwicklung mit sich. Der Vortrag zeigt anhand verschiedener Beispiele, wie einfach der Einstieg in die VSTO-Entwicklung sein kann und klärt Fragen wie: Was kann der neue Ribbon-Designer in VS 2008? Kann Word mit Outlook interagieren? Kann WPF in Office angewendet werden und wie passt LINQ dazu?

Meine Präsentationsunterlagen und die Samplecodes können hier runtergeladen werden:

Basta!2008 Zip download

WPF Performance Suite, aktualisierte Version verfügbar

26.09.2008 15:48:41 | Klaus Bock

Die WPF Performance Suite liegt in der Version 3.0 vor. Die Änderungen seit der letzten Version sind sehr umfassend. Einen ersten Überblick kann man sich auf dem WPF Performance Blog verschaffen. Eine detaillierte Übersicht der Änderungen und Neuerungen, sowie die Möglichkeit zum herunterladen der WPF Performance Suite findet man in diesem Artikel auf WindowsClient.net.

 

Technorati-Tags: |

Technical Summit 2008 - wir sehen uns in Berlin

26.09.2008 12:22:00 | Jens Peter Kleinau

Der Technical Summit 2008 findet direkt nach der Xtopia 08 vom 20.-21.November 2008 im ICC (Berlin) statt und bietet mit vier parallelen Vortragsreihen, einer umfangreichen Partnerausstellung sowie vielen Technologieexperten und Ask-The-Expert-Sessions den Teilnehmern genau das richtige Umfeld, sich über die aktuellen und anstehenden Technologien zu informieren. Auf der Bühne der Summit...

[[ This is a content summary only. Visit my website for full links, other content, and more! ]]

XTOPIA 2008 - wir sehen uns in Berlin!

26.09.2008 12:19:00 | Jens Peter Kleinau

Vom 16. bis 18. November 2008 im ICC in Berlin diskutieren Businessentscheider, Web-Entwickler, UX Professionals und Web-/Interactive Designer über die Zukunft des Webs auf der xtopia 2008. Natürlich kann ich es mir nicht nehmen lassen dabei zu sein. Ob ich diesmal wieder auf der Bühne stehen werde, ist noch nicht so ganz raus. Aber auf jeden Fall werde ich als Ask The Expert (ATE) jedem fröhlich...

[[ This is a content summary only. Visit my website for full links, other content, and more! ]]

Back from BASTA! 2008

26.09.2008 06:48:04 | Lars Keller

Es war meine erste BASTA! und auch gleich als Sprecher dabei. Es hat viel Spaß gemacht mit den Teilnehmern, Speakern und Freunden sich zu unterhalten und zu fachsimpeln.

Mich überraschten die vielen Teilnehmer bei meiner VSTO-Session "Office und .NET - zwei Welten wachsen zusammen mit VSTO 3.0". Ich hatte mit weniger Leuten gerechnet, darum freut es mich um so mehr, dass VSTO anscheinend ein sehr interessantes Thema für viele ist.

Office und .NET - zwei Welten wachsen zusammen mit VSTO 3.0  Office und .NET - zwei Welten wachsen zusammen mit VSTO 3.0 - Agenda

Abstract:

Die mit Visual Studio 2008 ausgelieferte VSTO-3.0-Komponente und die frisch erschienenen VSTO Power Tools bringen zahlreiche Neuerungen für die Office-2007-Entwicklung mit sich. Der Vortrag zeigt anhand verschiedener Beispiele, wie einfach der Einstieg in die VSTO-Entwicklung sein kann und klärt Fragen wie: Was kann der neue Ribbon-Designer in VS 2008? Kann Word mit Outlook interagieren? Kann WPF in Office angewendet werden und wie passt LINQ dazu?

Meine Präsentationsunterlagen und die Samplecodes können hier runtergeladen werden:

Basta!2008 Zip download

ATE auf der Xtopia und dem Technical Summit 08

26.09.2008 00:06:49 | Robert Mühsig

Ich werde auf der Xtopia und dem Technical Summit 08 als ATE mit dabei sein dürfen - die Xtopia findet am 17. bis 18. November in Berlin statt und im Anschluss darin gibt es direkt das Technical Summit 08, ebenfalls in Berlin.

Offizieller ATE @ Microsoft Technical Summit 2008: Treffen Sie mich in den Ask the Experts-Sessions! Offizieller ATE @ Xtopia 08: Treffen Sie mich in den Ask the Experts-Sessions!

Ich hoffe es gibt viele Themen die auch auf der PDC auf der Agenda stehen - Windows 7, Live Mesh und co. wären sicherlich einen Blick wert :)

ShareThis

Formatierung der Daten bei einem Data Binding in WPF

25.09.2008 20:46:14 | Norbert Eder

Das Data Binding (siehe hier, hier und hier) wurde ja unter der Windows Presentation Foundation stark verbessert. Daten können nun wirklich vielseitig und einfach an Elemente gebunden werden. Was bisher jedoch fehlte war die Möglichkeit, die gebundenen Daten auch einfach zu formatieren. Dies konnte bisher über Converter erledigt werden.

Mit der Einführung von StringFormat mit .NET Framework 3.5 SP1 kann dies nun einfacher durchgeführt werden. Nehmen wir an, es soll ein Personen-Objekt mit den Eigenschaften FirstName, LastName und Birthday an Eingabefelder gebunden werden und der Fokus an der Formatierung des Geburtsdatums liegen, dann kann dies wie folgt aussehen:
<TextBlock>First Name</TextBlock>
<TextBox Text="{Binding FirstName}"/>
<TextBlock>Last Name</TextBlock>
<TextBox Text="{Binding LastName}"/>
<TextBlock>Birth Day - Long Format</TextBlock>
<TextBox Text="{Binding Path=BirthDay, StringFormat=D}"/>
<TextBlock>Birth Day - Short Format</TextBlock>
<TextBox Text="{Binding Path=BirthDay, StringFormat=d}"/>

Ein wenig angepasst, könnte das Ergebnis folgendermaßen aussehen:


Weitere Möglichkeiten und Beispiele sind im sehr guten Blog-Beitrag von Lester zu finden.

Developer, Developer, Developer

25.09.2008 20:19:14 | Thomas Schissler

Vom 19.11 bis zum 21.11.2008 findet in Berlin der Technical Summit statt. Neben einem Überblick über die aktuellen Microsoft Entwicklungstechnologien könenn sie sich hier auch über die wichtigsten Trends auf der DC informieren.

Ich bin auf dem Technical Summit als Sprecher und als ATE vertreten sein. Meine Vortragsthemen:

  • Durchgängige Entwicklungsprozesse mit Visual Studio Team System
  • Qualitätsmanagement mit VSTS und TFS

     

    Offizieller ATE @ Microsoft Technical Summit 2008: Treffen Sie mich in den Ask the Experts-Sessions!

  • Geplante Systemvoraussetzungen für Rosario

    25.09.2008 00:26:01 | Thomas Schissler

    Es ist wohl noch eine weile hin, bis wir Rosario wirklich nutzen dürfen. Brian Harry hat aber schon mal vorab veröffentlicht, welche Systemvoraussetzungen und Abhängigkeiten Rosario haben wird. So werden wohl unter anderem auch SQL 2005 und Office 2003 nicht mehr unterstützt. Dies gibt jetzt bereits die Möglichkeit, rechtzeitig zu planen und sich auf die Anforderungen ggf. entsprechend vorzubereiten.

    bharry's WebLog : Charting a course for TFS "Rosario"

    Anpassung von TFS ProcessTemplates im laufenden Betrieb

    24.09.2008 14:34:49 | Thomas Schissler

    Der Team Foundation Server bietet die flexible Möglichkeit ProcessTemplates individuell anzupassen. Diese ProcessTemplates enthalten die Definition der Workitemtypes (welche gibt es und welche Felder haben diese), die Workflows (was passiert wenn ich bei einem bestimmten Workitem eine bestimmte Aktion auslöse), und vieles mehr wie Standarddokumente etc.

    Dieses ProcessTemplate kann man nicht nur im Vorfeld definieren, sondern auch für laufende Projekte noch anpassen, was in der Praxis eine enorme Hilfe ist. Wie's genau geht beschreibt Christian Binder in einem zweiteiligen Blog-Beitrag.

    Teil 1
    Teil 2

    Microsoft und PHP? Sogar auf der PHP World Konferenz

    24.09.2008 10:01:27 | Oliver Scheer

    Microsoft hat mehr für PHP im Angebot als man auf Anhieb denken mag.

    Am 25.11. spreche ich auf der PHP World Konferenz in München über PHP und Silverlight.

    Mehr Informationen gibt es hier: www.phpworld-kongress.de/anmeldung.php

    Promotioncodes gibt es auch:

    • Code für den Workshop und Kongress:    KOPphp8wref
    • Code für den Kongress:                            KOPphp8ref

    NDepend update brings 64 bit compatibility

    23.09.2008 22:00:46 | Andre Loker

    Patrick Smacchia kept his word: the current version of NDepend added support for dependency graphs under 64 bit operating systems. If you remember, this was one of the few points of criticism I mentioned in my little review on NDepend. Visual NDepend can now visualize the dependencies between types, namespaces and members. If you're hovering over a cell in the Matrix view, NDepend will tell you how the types/namespaces/members on the two axes depend on each other in the small Info window in the lower left area of the screen:

    image

    When you click the cell a window appears with one or several graphs showing those dependencies visually:

    image

    While this dependency graph does not show you something completely new, it still a beneficial feature: visualizing the dependencies between types and members makes it much easier to understand them and to communicate them to other developers.

    The NDepend people have done their homework. The The dependency graph - like almost every other part of Visual NDepend - uses visual variables effectively to get the maximum information out of the visualization: box sizes, line thickness * and colour are used to not only tell provide the user with additional information on the role and importance of the involved members (lines of code, number of incoming and outgoing dependencies etc.).

    All in all, with the 64 bit support for dependency graphs there's one more reason to recommend NDepend.

    * There's a drop down that can be used to define what the thickness of edges should represent. As Patrick Smacchia explains in the comments, changing the value does not necessarily lead to a visible change depending on the code that is analysed.

    XTOPIA-Gewinnspiel Teil 2

    22.09.2008 09:00:10 | Oliver Scheer

    Nach dem Erfolg des ersten Suchspiels zur Xtopia, hier direkt das nächste. Diesmal auf einem etwas anderen Terrain. Meinem Lieblingszimmer bei mir zuhause: meiner Küche.

    In diesem PhotoSynth habe ich drei Logos von der Xtopia versteckt.

    Die ersten fünf Einsendungen, die alle drei Logos als 3D-Screenshot beinhalten erhalten einen kleinen Preis.

    Viel Erfolg

    image

    Neue Angebote vom Microsoft Security Development Lifecycle (SDL)

    21.09.2008 16:00:50 | Kay Giza

    Neu angekündigt im Rahmen der Initiative Security Development Lifecycle (SDL), Best Practices aus dem Tagesgeschäft bei Microsoft mit der Allgemeinheit zu teilen, sind für Anfang November, dem Termin der TechEd EMEA in Barcelona, drei Säulen: Mit dem „SDL Pro Network“ vermittelt Microsoft spezifisch geschulte, externe Security-Berater (derzeit zunächst weltweit 9 an der Zahl, auf dem zentraleuropäischen Festland etwa die Oberuseler n.runs AG). Das kostenlose „SDL Optimization Model“ soll auf Basis von Microsofts eigener IT-Landschaft auch anderen Unternehmen die Eingliederung von Microsofts selber genutztem Sicherheitsmodell in ihre Infrastruktur ermöglichen. Das ebenfalls kostenlose „SDL Threat Modeling Tool 3.0“ ergänzt die Offensive durch ein handliches Architektenwerkzeug für die proaktive, frühe und strukturierte Untersuchung auf Sicherheits- und Datenschutzprobleme hin.

    Link: Neue Angebote vom Microsoft Security Development Lifecycle (SDL)

    This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
    Visit:  MSDN Online | Kostenfreie MSDN Service-Hotline für Entwickler
    Daily News on MSDN:   MSDN Aktuell
    © Copyright 2006-2008 Kay Giza. All rights reserved. Legal

    Tipp: STRG+C auf Dialoge anwenden

    20.09.2008 23:22:47 | Lars Keller

    Für alle die es noch nicht wussten, um Fehlermeldungs Dialoge zu erfassen gibt es zwei Möglichkeiten:

    VSTO_Fehlermeldung

    1. Die Fehlermeldung abschreiben. :-)

    oder

    2. Einfach den Dialog anklicken und dann STRG+C drücken. Danach Notepad öffnen und STRG+V drücken. fertig

    Ergebnis im Notepad:

    ---------------------------
    Microsoft Visual Studio
    ---------------------------
    Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
    ---------------------------
    OK  
    ---------------------------



    This weblog is sponsored by netcreate OHG.

    Attempted to read or write protected memory. This is often an indication that other memory is corrupt. - VSTO Problem

    20.09.2008 23:22:00 | Lars Keller

    Diese Fehlermeldung bekam ich, als ich gerade ein VSTO 3.0 WordDocument (.docm) Add-In schreiben wollte. Die Fehlermeldung kam direkt beim Anlegen des Projektes. Nach ein wenig Recherche habe ich herausgefunden, dass das anscheinend ein Fehler in VSTO ist. Der Eintrag im MSDN Forum ist leider schon etwas älter und ich konnte nicht herausfinden ob der Fehler mittlerweile gefixt ist. Auf der Suche habe ich auch folgendes Statement gefunden, was in die gleiche Richtung geht:

    I think the cause might be that he has a managed COM Add-in registered for Word/Excel and this causes some weird asynchronous host shutdown issues for host application when we create new document during project creation. A workaround would be to create new project based on an existing document.

    Ich habe ein Word 2007 aufgemacht und parallel mit Visual Studio 2008 ein VSTO 3.0 WordDocument angelegt. Jetzt hat das Anlegen des Projektes geklappt und ich konnte auch weitere anlegen.

    Ich bin mir nicht sicher, ob es etwas mit dem SP1 von Visual Studio 2008 zu tun hat, jedenfalls tauchte der Fehler vorher nicht auf.



    This weblog is sponsored by netcreate OHG.

    Tipp: STRG+C auf Dialoge anwenden

    20.09.2008 22:22:47 | Lars Keller

    Für alle die es noch nicht wussten, um Fehlermeldungs Dialoge zu erfassen gibt es zwei Möglichkeiten:

    VSTO_Fehlermeldung

    1. Die Fehlermeldung abschreiben. :-)

    oder

    2. Einfach den Dialog anklicken und dann STRG+C drücken. Danach Notepad öffnen und STRG+V drücken. fertig

    Ergebnis im Notepad:

    ---------------------------
    Microsoft Visual Studio
    ---------------------------
    Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
    ---------------------------
    OK  
    ---------------------------

    Attempted to read or write protected memory. This is often an indication that other memory is corrupt. - VSTO Problem

    20.09.2008 22:22:00 | Lars Keller

    Diese Fehlermeldung bekam ich, als ich gerade ein VSTO 3.0 WordDocument (.docm) Add-In schreiben wollte. Die Fehlermeldung kam direkt beim Anlegen des Projektes. Nach ein wenig Recherche habe ich herausgefunden, dass das anscheinend ein Fehler in VSTO ist. Der Eintrag im MSDN Forum ist leider schon etwas älter und ich konnte nicht herausfinden ob der Fehler mittlerweile gefixt ist. Auf der Suche habe ich auch folgendes Statement gefunden, was in die gleiche Richtung geht:

    I think the cause might be that he has a managed COM Add-in registered for Word/Excel and this causes some weird asynchronous host shutdown issues for host application when we create new document during project creation. A workaround would be to create new project based on an existing document.

    Ich habe ein Word 2007 aufgemacht und parallel mit Visual Studio 2008 ein VSTO 3.0 WordDocument angelegt. Jetzt hat das Anlegen des Projektes geklappt und ich konnte auch weitere anlegen.

    Ich bin mir nicht sicher, ob es etwas mit dem SP1 von Visual Studio 2008 zu tun hat, jedenfalls tauchte der Fehler vorher nicht auf.

    Tipp: STRG+C auf Dialoge anwenden

    20.09.2008 13:22:04 | Lars Keller

    Für alle die es noch nicht wussten, um Fehlermeldungs Dialoge zu erfassen gibt es zwei Möglichkeiten:

    VSTO_Fehlermeldung

    1. Die Fehlermeldung abschreiben. :-)

    oder

    2. Einfach den Dialog anklicken und dann STRG+C drücken. Danach Notepad öffnen und STRG+V drücken. fertig

    Ergebnis im Notepad:

    ---------------------------
    Microsoft Visual Studio
    ---------------------------
    Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
    ---------------------------
    OK  
    ---------------------------

    Attempted to read or write protected memory. This is often an indication that other memory is corrupt. - VSTO Problem

    20.09.2008 13:22:00 | Lars Keller

    Diese Fehlermeldung bekam ich, als ich gerade ein VSTO 3.0 WordDocument (.docm) Add-In schreiben wollte. Die Fehlermeldung kam direkt beim Anlegen des Projektes. Nach ein wenig Recherche habe ich herausgefunden, dass das anscheinend ein Fehler in VSTO ist. Der Eintrag im MSDN Forum ist leider schon etwas älter und ich konnte nicht herausfinden ob der Fehler mittlerweile gefixt ist. Auf der Suche habe ich auch folgendes Statement gefunden, was in die gleiche Richtung geht:

    I think the cause might be that he has a managed COM Add-in registered for Word/Excel and this causes some weird asynchronous host shutdown issues for host application when we create new document during project creation. A workaround would be to create new project based on an existing document.

    Ich habe ein Word 2007 aufgemacht und parallel mit Visual Studio 2008 ein VSTO 3.0 WordDocument angelegt. Jetzt hat das Anlegen des Projektes geklappt und ich konnte auch weitere anlegen.

    Ich bin mir nicht sicher, ob es etwas mit dem SP1 von Visual Studio 2008 zu tun hat, jedenfalls tauchte der Fehler vorher nicht auf.

    Office SharePoint Server 2007 Architecture Design

    20.09.2008 12:21:00 | Ozgur Aytekin

    Die folgenden Informationen zum Thema Office SharePoint Server 2007 Architecture Design sind sehr empfehlenswert..

    Investing in logical architecture design samples
    http://blogs.msdn.com/sharepoint/archive/2007/04/09/investing-in-logical-architecture-design-samples.aspx#8955765

    Logical architecture model: Corporate deployment
    http://technet.microsoft.com/en-us/library/cc261995.aspx

    Translator Bot für den Windows Live Messenger

    20.09.2008 11:41:25 | Oliver Scheer

    Seit kurzem gibt es für den Windows Live Messenger den Windows Live Translator Bot . Das neue Tool wurde als Beta-Version veröffentlicht.

    Der Nutzer fügt den Bot einfach seiner Kontaktliste hinzu und kann dann loschatten. Schreibt ein User einen deutschen Text, stellt der Windows Live Translator Übersetzungsmöglichkeiten in elf unterschiedlichen Sprachen, darunter Arabisch, Chinesisch, Englisch, Französisch, Italienisch, Japanisch, Koreanisch, Niederländisch, Portugiesisch und Spanisch bereit. Mit der Ausgangssprache Englisch können Texte auch ins Russische übersetzt werden.

    Weitere Sprachen folgen.

    Das neue Tool ist schnell und einfach integriert: Einfach die Windows Live ID mtbot@hotmail.com zur Kontaktliste ergänzen und den Befehl "tbot set" eingeben, um die Ausgangs- und Zielsprache festzulegen. "tbot start" startet dann den Übersetzungsgenerator. Jeder eingegebene Text wird daraufhin in die entsprechende Zielsprache übersetzt.

    Die wichtigsten Befehle im Überblick:

    1. TBot lang - Zeigt das aktuelle Sprachenpaar 2. TBot change - Ändert das aktuelle Sprachenpaar 3. TBot stop - Stoppt die Übersetzung 4. TBot start - Startet die Übersetzung 5. TBot set - Legt die bevorzugte Ausgangssprache fest 6. TBot ? - Zeigt eine Liste der Kommandos

    Wenn man mal eben ein Sonderzeichen sucht...

    19.09.2008 19:42:37 | Lars Keller

    ...dann kann ich nur diese Webseite empfehlen: http://leftlogic.com/lounge/articles/entity-lookup/

    Einfach das zu suchende Sonderzeichen eingeben und schon spuckt die Suche die entsprechenden Schreibweisen aus.

    sonderzeichen



    This weblog is sponsored by netcreate OHG.

    Cassette from my ex

    19.09.2008 19:33:30 | Lars Keller

    ...so heißt der Titel der Webseite (http://www.cassettefrommyex.com/), wo man seine alten Kassetten von seiner(em) Ex hinschicken kann. Die Kassette wird digitalisiert und zum Anhören bereitgestellt. Zusätzlich wird dazu noch Ihre Geschichte veröffentlicht.

    Eine nette Idee, besonders weil die Musik auf den Tapes nicht Alltäglich ist. Eine gelungene Abwechslung zu den Radiosendern ;-)



    This weblog is sponsored by netcreate OHG.

    Wenn man mal eben ein Sonderzeichen sucht...

    19.09.2008 18:42:37 | Lars Keller

    ...dann kann ich nur diese Webseite empfehlen: http://leftlogic.com/lounge/articles/entity-lookup/

    Einfach das zu suchende Sonderzeichen eingeben und schon spuckt die Suche die entsprechenden Schreibweisen aus.

    sonderzeichen

    Cassette from my ex

    19.09.2008 18:33:30 | Lars Keller

    ...so heißt der Titel der Webseite (http://www.cassettefrommyex.com/), wo man seine alten Kassetten von seiner(em) Ex hinschicken kann. Die Kassette wird digitalisiert und zum Anhören bereitgestellt. Zusätzlich wird dazu noch Ihre Geschichte veröffentlicht.

    Eine nette Idee, besonders weil die Musik auf den Tapes nicht Alltäglich ist. Eine gelungene Abwechslung zu den Radiosendern ;-)

    Windows SharePoint Services 3.0 Tools: Visual Studio 2005 Extensions, Version 1.1

    19.09.2008 15:27:00 | Ozgur Aytekin

    (Visual Studio 2005 extensions for Windows SharePoint Services 3.0, version 1.1)
    Tools for developing custom SharePoint applications: Visual Studio project templates for Web Parts, site definitions, and list definitions; and a stand-alone utility program, the SharePoint Solution Generator. Please also download the User Guide and Samples listed in Related Resources.

    http://www.microsoft.com/downloads/details.aspx?familyid=3E1DCCCD-1CCA-433A-BB4D-97B96BF7AB63&displaylang=en

    SharePoint Server 2007 SDK: Software Development Kit

    19.09.2008 15:27:00 | Ozgur Aytekin

    The Microsoft Office SharePoint Server 2007 SDK contains conceptual overviews, “How Do I…?” programming tasks, developer tools, code samples, references, and an Enterprise Content Management (ECM) starter kit to guide you in developing solutions based on Microsoft Office SharePoint Server 2007.

    http://www.microsoft.com/downloads/details.aspx?familyid=6D94E307-67D9-41AC-B2D6-0074D6286FA9&displaylang=en

    Xtopia-Gewinnspiel Teil 1

    19.09.2008 13:28:26 | Oliver Scheer

    Das ging ja teilweise schneller als ich dachte ...

    Aber keiner der Teilnehmer hat gemerkt, das es drei Logos sind, die ich versteckt habe :-)

    Die Gewinner der ersten Runde lauten:

    1. Torsten Weber
    2. Arne Janning
    3. Stephan Walcher
    4. Florian Geisenhof
    5. Carsten Cerny

    Damit wäre das Quiz für die erste Runde beendet. Einen kleinen Sonderpreis gibt es allerdings noch für den ersten Einsender der mir als Erstes alle drei versteckten Logos in der 3D-Ansicht zusendet.

    Eine neue Runde gibt es am Montag.

    Auf zum artcamp Hamburg (20. - 21. September 08)

    19.09.2008 13:14:00 | Steffen Ritter

    …eindeutig ein Beitrag aus der Rubrik „Schnell noch vom Flughafen aus wichtige Nachrichten abschicken“ – ich bin dieses Wochenende auf dem artcamp in Hamburg (http://artcamp.mixxt.de). Das artcamp ist quasi ein barcamp rund ums Thema Kunst und Kultur, oder wie es Gastgeberin Vivian Pein formuliert: „Das artcamp ist die Fusion aus der Mentalität des offenen Austausches von BarCamps, den Möglichkeiten des Internets und dem Zauber von Kunst. Ob bildende Kunst, Musik, Theater, Magie, Literatur, Design oder eine der unzähligen freien Kunstformen - Ihr seid herzlich dazu eingeladen Euch und Euer Projekt vorzustellen - Kunst ist Definitionssache - zeigt uns was Kunst für Euch bedeutet!“.

    Das artcamp Hamburg findet vom 20.-21. September im Department für Wirtschaft und Politik, Von-Melle-Park 9 in Hamburg statt. Kostenlose Anmeldung über die Website des artcamp Hamburg: http://artcamp.mixxt.de

    Heute Abend – 19. September 08 – ist bereits die Vorabendparty, ab circa 19 Uhr im Sausalitos, Fischertwiete 2 (ebenfalls HH): http://www.sausalitos.de 

    Heute letzte Rabattchance fuer Technical Summit und fuer Xtopia

    19.09.2008 11:54:38 | Kay Giza

    Interessierte können 150,- € netto einfach dadurch sparen, dass sie sich noch am heutigen Freitag anmelden, am Technical Summit ebenso wie an der Xtopia 08 in Berlin. Wer nur an einer Vorkonferenz teilnehmen will, spart immer noch 50,- Euro netto. Ab Samstag ist Schluss mit dem "Early-Bird" und der volle Teilnahmebetrag in Höhe von 599,- statt 449,- Euro netto (oder brutto 712,81 statt 534,31 Euro) wird fällig – selbst für Spätzünder noch immer ein Schnäppchenpreis für die zweitägigen Konferenzen mit hochkarätigen Vorträgen in 4 Tracks und diversen hochwertigen Give-Aways.

    Link: Heute letzte Rabattchance für Technical Summit und für Xtopia

    This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
    Visit:  MSDN Online | Kostenfreie MSDN Service-Hotline für Entwickler
    Daily News on MSDN:   MSDN Aktuell
    © Copyright 2006-2008 Kay Giza. All rights reserved. Legal

    Wenn man mal eben ein Sonderzeichen sucht...

    19.09.2008 09:42:03 | Lars Keller

    ...dann kann ich nur diese Webseite empfehlen: http://leftlogic.com/lounge/articles/entity-lookup/

    Einfach das zu suchende Sonderzeichen eingeben und schon spuckt die Suche die entsprechenden Schreibweisen aus.

    sonderzeichen

    Cassette from my ex

    19.09.2008 09:33:03 | Lars Keller

    ...so heißt der Titel der Webseite (http://www.cassettefrommyex.com/), wo man seine alten Kassetten von seiner(em) Ex hinschicken kann. Die Kassette wird digitalisiert und zum Anhören bereitgestellt. Zusätzlich wird dazu noch Ihre Geschichte veröffentlicht.

    Eine nette Idee, besonders weil die Musik auf den Tapes nicht Alltäglich ist. Eine gelungene Abwechslung zu den Radiosendern ;-)

    Q189862: How To Do 64-bit Arithmetic in VBA

    18.09.2008 19:49:00 | Ozgur Aytekin

    A number of Windows APIs require a 64-bit value as either a single 8-byte integer, or as two 4-byte integers. This article contains sample code the you can use to convert data between an 8-byte integer and two 4-byte integers. It also contains sample code that you can use to perform simple mathematical operations on the integers, such as would be required when you increment the file pointer in the SetFilePointer API.

    http://support.microsoft.com/kb/189862

    Kontakt fuer Vorschlaege und Ideen zu Visual Studio 2008

    18.09.2008 19:47:03 | Kay Giza

    Wer sich schon immer gefragt... wohin mit Vorschlägen und Ideen?
    Eine Anlaufstelle ist sicherlich MSDN, eine andere ist sicherlich der 'Direkte Draht zu uns' aber ein anderer Weg ist auch Microsoft Connect, wo die zuständigen Teams bei Microsoft Corp. in den USA direkt mitlesen und antworten. Das Connect-Team hilft Ihnen dabei vor der Weitergabe an die zuständigen Produktteams als Concierge gegebenenfalls, etwaige Unklarheiten oder Missverständnisse zu beseitigen. Auf der Connect-Seite für Visual Studio, auf die Sie mein Link verweist, finden Sie außerdem einige Links für Hilfestellungen und Hilfe zur Selbsthilfe. Für Feedback und technischen Support stehen Ihnen in unserem Bereich Hilfe & Support gesonderte Sektionen zur Verfügung.

    Link: Kontakt für Ihre Vorschläge und Ideen zu Visual Studio 2008

    This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
    Visit:  MSDN Online | Kostenfreie MSDN Service-Hotline für Entwickler
    Daily News on MSDN:   MSDN Aktuell
    © Copyright 2006-2008 Kay Giza. All rights reserved. Legal

    Neue Live Software auf x64 und Server - wieso schon wieder?

    18.09.2008 19:44:00 | Peter Bucher

    Wie schon mehrmals berichtet, hier nochmals.

    Wieder sind es die Live Produkte die MS mit einer softwaremässigen Sperre nicht auf x64 und Windows Server installieren lässt.
    Eine technische Einschränkung ist es _nicht_!

    Hier die Anleitung wie sich diese Sperre - die ich bis Heute noch nicht begreife - umgehen lässt:

    Xtopia-Interna mit Achim von Microsoft :-)

    18.09.2008 16:40:00 | Steffen Ritter

    Achim (Dettweiler – nicht Berg, sorry) ist unser „Leading Man“ für die Xtopia 08 und den Microsoft Technical Summit 2008. Mein Kollege Oliver Scheer – den viele Leser meines Blogs zweifellos schon von unseren gemeinsamen Auftritten kennen (u.a. vergangenes Jahr auf der Xtopia 07) – hat ein kurzes aber recht unterhaltsames und informatives Interview mit Achim zur Xtopia 08 aufgezeichnet. Bevor ich jetzt wieder zu viel rede/schreibe:

    Ich freu mich bereits schon sehr auf die Xtopia – nicht nur weil ich vermutlich ebenfalls eine Session dort halten oder moderieren werde, sondern auch ganz besonders weil wir dort endlich über all die coolen neuen Dinge und Technologien sprechen dürfen, zu denen wir uns in den vergangenen 18 Monaten nur unter NDA oder meistens gar nicht äußern durften. Xtopia 08 wird ein Feuerwerk der Neuheiten, wie es von Microsoft bisher selten gesehen wurde. Und natürlich stellen wir sowohl auf der Xtopia als auch auf dem darauffolgenden Technical Summit alle Neuheiten von der PDC vor, der weltgrößten Microsoft Developer Conference. Live, in Farbe, und zum Anfassen.

    NBC Olympics mit Silverlight schlägt alle Rekorde!

    18.09.2008 11:32:00 | Steffen Ritter

    Wow – das nenne ich mal einen durchschlagenden Erfolg beim Medienereignis des Jahres: Die auf Silverlight 2 Beta 2 basierende Website NBCOlympics.com hat während der Olympiade 2008 in Peking über 70 Millionen Streams an mehr als 50 Millionen Besucher ausgestrahlt und "crushed every U.S. digital record for a major event. Nothing even comes close.", freut sich Perkins Miller, Senior VP, NBC Olympics.

    Dabei darf man nicht vergessen: Es handelte sich bei NBCOlympics.com um Silverlight 2 Beta 2, also noch um "unfertige" Technologie. Trotzdem hatte sich NBC entschieden auf Silverlight 2 und die Windows Media Services zu setzen, den "with Windows Media Services we need 40 servers to serve 100.000 concurrent users.  With Flash Streaming we should need 270 servers for the same amount.", so Roeland Stekelenburg, Head of New Media , NOS. – Das ist eine Ratio von 6,75:1; die außerdem noch besser in den Ohren jedes Controllers und Business-Entscheiders klingt, wenn man hinzufügt, dass die Media Services für die neuen Microsoft-Server kostenlos (!) sind

    Ganz spannend auch, dass Besucher auf der Silverlight-basierten Video-Website NBCOlympics.com durchschnittlich 27 Minuten verbracht haben – im Gegensatz zu den durchschnittlich nur drei Minuten (!) die Besucher auf Olympia-Video-Websites verbracht haben, die auf anderer Technologie basierten. Natürlich ist Silverlight nur das Mittel zum Zweck, nicht der Grund, warum die Besucher auf NBCOlympics.com mehr Zeit verbracht haben, aber meiner persönlichen Einschätzung nach ist das einerseits ein eindeutiger Beweis für die überlegene Videoqualität die Silverlight ermöglicht, und für die durchdachten Komfortfunktionen, die in den Silverlight-Player integriert waren und den Besuchern ein echtes Multimediaerlebnis gegeben haben, wie es vorher im Netz nicht üblich bzw. möglich war.

    Und da ich gerade im Begeisterungsrausch bin, hier die Zusammenfassung in Zahlen. Laut NBC hatte die Silverlight-basierte Website binnen den 17 Tagen:
    1,3 Milliarden Pageviews

    • Über 50 Millionen individuelle Besucher 
    • 70 Millionen Streams
    • 10 Millionen Stunden Video wurden von den Besuchern angeschaut
    • 35 Millionen mobile Pageviews
    • Über 5.000 Clips pro Tag

    Open XML SDK v2.0

    18.09.2008 11:00:58 | Jens Häupel

    Seit kurzem ist das erste CTP des Open XML SDK v2.0 verfügbar. Im Vergleich zu v1.0, welches sich nur auf der Container-Ebene bewegte, ist das ein großer Schritt voran. Es bringt uns u.a.

    • Ein stark typisiertes Document Object Model (DOM).

    • Ein Tool, mit dem 2 Open XML Dateien verglichen werden können.

    • Einen Class Explorer, der beim Verstehen des Markups hilft und Sie dabei unterstützt, die richtigen Klassen aus dem DOM zu verwenden.

    • Ein Document Reflector, der einen teil Ihres Codes generieren kann.

    Vor allem die strenge Typisierung war in Version 1.0 noch nicht gegeben, mußte doch mit vielen Namespace Strings gearbeitet werden, ganz zu schweigen davon, daß man nie genau wußte, welche denn zu verwenden waren und im Dokument selbst nachsehen mußte.

    Hier ein Beispiel, wie ein Zugriff auf ein Word-Dokument mit LINQ 2 XML und OPEN XML SDK v1.0 aussah:image

    Das Ganze nun mit v2.0:

    image

    Beachten Sie, daß hier nicht mehr mit Strings als Identifikatoren gearbeitet wird, sondern mit .NET Typen (Paragraph, Run, Text, etc.). Somit wird der Compiler schon Alarm schlagen, wenn einer der Typnamen falsch geschrieben ist. Das vermeidet Runtim Errors!

    Vor allem der Reflektor ist absolut cool. Einfach ein Dokument öffnen und einen bestimmten Knoten markieren. Der Reflectior erzeugt nun den Code, der nötig ist, um dieses Element zu generieren.

    image

    Damit wird Open XML Entwicklung wesentlich vereinfacht. Ich bin gespannt auf die nächste Version des CTP, vor allem, wenn dann auch Excel stark typisiert erreichbar wird.

    Erik White hat alle Infos zusammengefaßt.

    Kalter Kaffee? [Video]

    18.09.2008 10:14:46 | Kay Giza

    Nachdem Stephan folgerichtig festgestellt hat, 'Es gibt nichts schöneres als einen guten Kaffe am Morgen', hier vielleicht ein kleines erklärendes Video (habe ich fix gemacht), hoffe damit Deine Frage beantwortet zu haben, Detlev :)



    This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
    Visit:  MSDN Online | Kostenfreie MSDN Service-Hotline für Entwickler
    Daily News on MSDN:   MSDN Aktuell
    © Copyright 2006-2008 Kay Giza. All rights reserved. Legal

    Microsoft SDL (Security Development Lifecycle) Program

    18.09.2008 00:45:55 | Robert Mühsig

    Microsoft hat angekündigt sein SDL Programm auch für Partner und externe Entwickler zur Verfügung zu stellen.

    Was man darunter versteht ist in diesem Video ganz anschaulich umschrieben.
    Ich bin gespannt, ob man das auch praktisch im täglichen Entwicklerleben tatsächlich einsetzen kann und ob es was nützt :)

    Mehr zum Thema SDL gibt es auf der MSDN Seite.

    ShareThis

    HowTo: Die Wiimote mit dem PC verbinden

    18.09.2008 00:28:06 | Robert Mühsig

    Ich habe schon öfters über die Wii gesprochen und was man damit nicht alles tolles machen könnte - das letzte mal im Zusammenhang mit pptPlex.

    image

    Das hat mich als Besitzer einer Wii natürlich auch etwas neugierig gemacht. Auf der Setup Seite von dem pptPlex + Wii Eintrag steht geschrieben, wie man es zum Laufen bekommt.

    Hier gesammelt nochmal alles, was ich zum erfolgreichen Verbinden brauchte:

    Wie die Wiimote mit der Wii komuniziert
    Die Wiimote überträgt alle Signale über Bluetooth zur Wii Konsole. Die Wii-Sensorbar besteht aus 4 Infrarot-LEDs (zwischen 940nm und 850nm), welche zur Positionsbestimmung der Wiimote dienen.
    Mehr technische Details gibt es auf der Wiki-WiimoteProject.

    image

    Die Wiimote mit dem PC verbinden
    Hierfür braucht man einfach einen PC/Notebook mit Bluetooth - allerdings ist nicht alles mit der Wiimote kompatibel.
    Für das “synchronisieren” mit der Bluetooth-Einheit am PC/Notebook muss man während des Gerätesuchlaufes auf die Taste 1/2 drücken oder die Sync-Taste bei dem Batterien drücken - siehe hier.
    Die Wiimote gibt sich als Nintendo RVL-CNT-01 Gerät aus und braucht kein PIN oder ähnliches.
    Jetzt sollte die Verbindung erfolgreich verlaufen.

    Eine eigene Sensorbar
    Damit man nicht die Wii jedesmal mitschleppen muss und damit man eine Infrarot-Quelle hat hat man 2 Möglichkeiten:
    - Kerzen (senden auch Infrarot-Licht aus)
    - Selber bauen:

    Auf die Signale reagieren
    Jetzt brauchen wir noch entsprechende Software oder man schaut sich das .NET “SDK” dazu mal an.

    Eigentlich ganz einfach :)

    ShareThis

    WPF-Browseranwendungen und Daten-Dateien

    17.09.2008 19:45:21 | Norbert Eder

    Viele Entwickler, die WPF-Browseranwendungen (XBAP) entwickeln stehen oft vor dem Problem, dass auf Datendateien zugegriffen werden soll. Da es jedoch unter Visual Studio ein unterschiedliches Verhalten zur veröffentlichten Variante (ClickOnce) gibt, werden zu diesem Thema immer wieder Fragen nach dem WIE gestellt.

    Diese Frage habe ich nun aufgegriffen und einen entsprechenden Artikel inklusive einer Beispielanwendung verfasst. Beides wurde auf http://dotnet-gui.com veröffentlicht.

    Link zum Artikel: WPF-Browseranwendungen und Daten-Dateien
    Link zum Download: Zugriff auf Datendateien in einer XBAP-Anwendung (WPF-Browseranwendung)

    PDC - The Place to be, when you're not attend XTOPIA and Technical Summit

    17.09.2008 19:16:15 | Oliver Scheer

    Have you heard that PDC2008 is the place to see the coolest new technology? That's right, at PDC2008, you'll discover what is in store for the future of ASP.NET. Have some fun with XNA and game development, or go in-depth with IronRuby. Other topics include: Live Mesh, Office Communications Server, SQL Server 2008, FAST, Silverlight, Oslo, Visual Studio Team System, Virtualization, SharePoint, Dynamics, Windows 7 and more! You can also network with top developers hang out with your friends and colleagues, and have fun in the L.A. sun!

    This is the PDC you won't want to miss! Register now for PDC2008 at MicrosoftPDC.com.

    Here are just a few of the exciting sessions you can attend at PDC2008!

    ASP.NET: FUTURE ROADMAP
    Come see the roadmap for the next release of ASP.NET. Highlights include: managing control IDs, displaying images using the new Dynamic Image control, better ViewState management in GridView and ListView, and more control over the CSS markup of ASP.NET server controls.

    MICROSOFT SILVERLIGHT: BUILDING BUSINESS APPLICATIONS
    Learn about this exciting new technology that makes business applications for RIA (Rich Internet Applications) much easier to build. Discover how we've made n-tier application development as simple as traditional 2-tier, and more.

    A LAP AROUND "OSLO"
    "Oslo" is the family of new technologies that enable data-driven development and execution of services and applications. Come and learn how to use "Oslo" directly to drive the execution of deployed applications.

    For a complete list of sessions, visit
    https://sessions.microsoftpdc.com/public/sessions.aspx

    PDC2008 Dates and Location

    WHEN:
    October 27-30, 2008
    Pre-cons October 26, 2008

    WHERE:
    Los Angeles Convention Center

    REGISTER NOW http://www.microsoftpdc.com/Registration/

    XNA GameStudio 3.0 Beta freigegeben

    17.09.2008 19:15:00 | Peter Bucher

    Heute ist XNA GameStudio 3.0 Beta freigegeben worden.

    XNA beinhaltet ein Framework und eine IDE (bzw. jetzt IDE-Ergänzung) für die Spieleentwicklung auf dem Computer und der XBox.
    Das Framework nutzt unter der Haube DirectX, mehr dazu:

    Das nette dabei:

    • Es braucht keine seperate IDE mehr, GameStudio wird in Visual Studio 2008 (Oder Express) integriert
    • Alle C# 3.0 Sprachfeatures werden unterstützt

    Die Veröffentlichung und der Download, dazu benötigt es noch die letzten veröffentlichten DirectX Runtimes.

    Xtopia-Suchspiel

    17.09.2008 18:32:40 | Oliver Scheer

    Kleines Suchspiel am Rande :-) Mein erstes Photosynth.

    Wer innerhalb dieses PhotoSynths das Xtopia-Logo findet und davon einen Screenshot an meine Email-Adresse (oliver.scheer at microsoft.com) schickt, kann etwas gewinnen :-)

    Die ersten fünf richtigen Einsendung erhalten einen kleinen Gewinn.

    Viel Spaß

    image

    …click, click, synth, zoom: auf zur photokina!

    17.09.2008 14:35:00 | Steffen Ritter

    Oh wie ich mich freue: Nächste Woche findet in Köln wieder die photokina statt – die meines Wissens weltgrößte Messe rund um Fotografie und Imaging. Microsoft ist mit einem richtig großen Stand vor Ort und präsentiert eine Auswahl der coolsten und kreativsten Microsoft-Produkte und –Entwicklungen, darunter natürlich Photosynth, aber auch einige Entwicklungen von Microsoft Research, natürlich Silverlight und Expression Media für Mac und Windows und mehr.

    Ich bin ebenfalls am Stand, und zwar vermutlich Dienstag bis Freitag jeweils von mittags bis 17 Uhr. Der Microsoft-Stand auf der photokina 08 befindet sich in Halle 4.1, Gang G, Stand Nr. 031.

    Bei aller Vorfreude stimmt mich das auch ein wenig nostalgisch, denn die photokina 08 ist bereits meine zweite photokina –  ich war 2004 in meiner Zeit vor Microsoft als Produktmanager für iView MediaPro (der Vorgänger von Expression Media) schon einmal dort.

    Links zu diesem Beitrag:

    Xtopia / Technical Summit - Frühbucherrabatt läuft Freitag aus

    17.09.2008 13:13:18 | Oliver Scheer

    Bis 19. September haben Interessenten noch Zeit, sich für die beiden Microsoft-Fachveranstaltungen „Technical Summit 2008“ und „Xtopia 2008“ anzumelden und dabei mit dem günstigen Early-Bird-Preis jeweils bis zu 150 € zu sparen. Die Entwickler-Konferenz „Technical Summit“ findet vom 19. bis 21. November im Berliner ICC statt; drei Tage vorher – vom 16. bis 18. November – öffnet die Web-Konferenz „Xtopia 08“ ebenfalls im Berliner ICC ihre Tore.

    • Technical Summit
      • Die aktuellsten Informationen von der PDC, die neusten Trends und teilweise noch unter "NDA" stehende wegweisende Neuigkeiten - werfen Sie einen Blick in die Agenda!
      • Ask-The-Expert-Sessions mit vielen bekannten Experten aus der Community!
      • Attraktives Give-Away-Paket: WPF-Studio von ComponentOne und vieles mehr!
      • Die neusten Informationen, über 25 Referenten in parallelen Sessions!
      • Technical Summit Keynote:
        Keynote Speaker des Technical Summits 2008
        Patrick Baudisch: Research Scientist @ Microsoft Research, Seattle | Professor @ Hasso Plattner Institute, PotsdamSteve Teixeira: Product Unit Manager for the Parallel Development Tools Team, MicrosoftFrank Fischer - Manager der Technologieberater, Developer Platform & Strategy Group bei Microsoft Deutschland
        Durch die Keynote des Technical Summits 2008 führt Sie Frank Fischer, Manager der Technologieberater in der Developer Platform & Strategy Group bei Microsoft Deutschland. Das erste Produkt von Microsoft – wenn man so will – war die Programmiersprache BASIC, veröffentlicht 1975. Seit dem hat sich sehr viel verändert, allein Basic hat uns stets begleitet und erlebt gerade wieder ein Revival, siehe das dynamische BASIC VBX. Auch Microsoft hat sich gewandelt. Wir sind mittlerweile ein Software-Mischkonzern, der stark in den Bereich Services expandiert. Mit Patrick Baudisch haben wir jemanden, der das was heute Cutting-Edge ist – zum Beispiel Surface – wesentlich mit beeinflusst hat und der uns einen Blick in die Zukunft geben wird. Mit Steve Teixeira jemanden, der ganz wesentlich auf weltweiter Basis die nächste Version von Visual Studio – Codename Dev10 – mitgestaltet. Frank Fischer wird dies auf den deutschen Markt übersetzen und die Fragen beantworten, was bedeutet das für mich als Entwickler hier in Deutschland?
    • Xtopia 08

    Mehr Informationen: www.technical-summit.de sowie www.xtopia.de

    Nach Event an die GridViewRow kommen, von dem das auslösende Control stammt

    17.09.2008 11:55:00 | Peter Bucher

    Diese Frage kommt ab und zu in den Foren, die Lösung ist denkbar einfach.

    Bei einem Button der in einer GridViewRow steckt, kann im Handler bspw. so auf die korrespondierende GridViewRow zugegriffen werden:

    protected void Button_Click(object sender, EventArgs e) {
    GridViewRow = (GridViewRow)(sender as Control).NamingContainer;
    }

    Das selbe bei anderen Controls, die einen Event auslösen können:

    protected void List_SelectedIndexChanged(object sender, EventArgs e) {
        GridViewRow = (GridViewRow)(sender as Control).NamingContainer;
    }

    Erklärung:
    NamingContainer steht für .Parent.Parent.
    Da das eventauslösende Control in einer Hierarchie steht, kann mithilfe dieser Eigenschaften,die Hierarchie hinaufgeklettert werden.

    LINQ to XML - XML Daten erzeugen und in ein vorhandenes XML Dokument einfügen

    17.09.2008 09:25:00 | Jürgen Gutsch

    Ziel ist es einen vorgegebenen XML Knoten in ein vorhandenes XML Dokument einzufügen. Das XML soll folgendermaßen aussehen:

    <layout folder="MyFolder" startPage="Home" name="HomePage">
      <displaynames>
        <displayname language="de-DE" value="Startseite" />
        <displayname language="en-US" value="Home page" />
        <displayname language="fr-FR" value="page d'accueil" />
      </displaynames>
    </layout>

    Nach einem kurzen Blick in die MSDN war das Prinzip um so ein XML zu erstellen relativ klar. Anhand eines selbstdefinierten Layout-Objektes ("NewLayout"), kann ich das XML wie folgt zusammenbauen.

    XElement layout = new XElement("layout",
        new XAttribute("folder", NewLayout.Folder),
        new XAttribute("startPage", NewLayout.StartPage),
        new XAttribute("name", NewLayout.Name)
        );
    XElement displaynames = new XElement("displaynames");
    XElement displayname;
    foreach (string key in NewLayout.DisplayNames.Keys)
    {
        displayname = new XElement("displayname",
            new XAttribute("language", key),
            new XAttribute("value", NewLayout.DisplayNames[key])
            );
        displaynames.Add(displayname);
    }
    layout.Add(displaynames);

    Mit Hilfe der Methode "Add()" der XElement Klasse kann ich beliebige weitere XElemente einfügen. Wer hätte gedacht, dass es doch sooooooh einfach ist...

    Um das Element in ein vorhandenes Dokument einzufügen muss ich dieses nur öffnen und den Knoten selektieren in den ich mein erstelltes XElement einfügen möchte:

    XDocument xdoc = XDocument.Load(this.XmlFilePath);
    XElement xlayoutsNode = xdoc.Element("layouts");

    xdoc.Element(); liefert das erste Kind-Element mit dem angegebenen Name. In meinem Fall ist es das Root-Element.

    Anschließend muss ich nur noch mein Element einfügen und das XDocument speichern:

    xlayoutsNode.Add(layout);
    xdoc.Save(this.XmlFilePath);

    That's all :-)

    LINQ to XML - Einen XML Knoten aus einem vorhandenem XML Dokument löschen

    17.09.2008 03:23:00 | Jürgen Gutsch

    Der im vorigen Artikel hinzugefügte knoten soll auch wieder entfernt werden können. Folgende paar Zeilen erledigen diese Aufgabe.

    XDocument xdoc = XDocument.Load(this.XmlFilePath);
    var xlayouts = from c in xdoc.Elements("layouts").Elements("layout")
                   where c.Attribute("folder").Value == FolderName
                   select c;
    foreach (var xlayout in xlayouts.ToList())
        xlayout.Remove();
    xdoc.Save(this.XmlFilePath);

    Der LINQ Query selektiert alle <layout>-Knoten innerhalb des <layouts>-Knotens, bei denen der Wert des Attributes "folder" dem der übergebenen Variable "FolderName" entspricht.

    Anschließend gehe ich in der Schleife alle XElement Objekte durch und entferne sie. In der Schleife muss die XElement Auflistung in eine generische Liste konvertiert werden, damit der Löschvorgang hier funktionieren kann. Die Erklärung dazu ist in diesem MSDN Artikel zu finden: Mixed Declarative Code/Imperative Code Bugs (C#) (LINQ to XML)

    Visual Studio Team System 2008 Team Foundation Server Power Tools

    16.09.2008 22:05:00 | Ozgur Aytekin

    Visual Studio Team System 2008 Team Foundation Server Power Tools is a set of enhancements, tools and command-line utilities that improve the Team Foundation Server user experience. For an overview of what's new in this release, see New in this Release.

    Team Foundation Server Power Tools includes the following tools:

    * Command line tool (TFPT.EXE)
    * Build Notification tool
    * TFS Best Practices Analyzer
    * Process Template Editor
    * Work Item Templates
    * Custom check-in policies
    * TFS Server Manager
    * TFS Users tool
    * Alert Editor

    Visual Studio Team System 2008 Team Foundation Server Power Tools

    SQL Server 2005: "Attempt to access expired blob handle"

    16.09.2008 20:31:00 | Ozgur Aytekin

    FIX: Error message when you open a cursor for a very long cursor statement in SQL Server 2005: "Attempt to access expired blob handle"

    SYMPTOMS
    In Microsoft SQL Server 2005, you open a cursor for a very long cursor statement. For example, the cursor statement exceeds 65,536 bytes (64 kilobytes). When you perform an operation that clears the procedure cache, you may receive the following error message:
    Msg 3624, Level 20, State 1, Line 2
    A system assertion check has failed. Check the SQL Server error log for details. Typically, an assertion failure is caused by a software bug or data corruption. To check for database corruption, consider running DBCC CHECKDB. If you agreed to send dumps to Microsoft during setup, a mini dump will be sent to Microsoft. An update might be available from Microsoft in the latest Service Pack or in a QFE from Technical Support.
    Msg 0, Level 20, State 0, Line 0
    A severe error occurred on the current command. The results, if any, should be discarded.
    Additionally, the following error message is logged in the SQL Server 2005 error log:
    Date Time SPID * BEGIN STACK DUMP:
    Date Time SPID * Date Time SPID
    Date Time SPID *
    Date Time SPID * Location: tmpilb.cpp:2628
    Date Time SPID * Expression: fFalse
    Date Time SPID * SPID: SPID
    Date Time SPID * Process ID: ProcessID
    Date Time SPID * Description: Attempt to access expired blob handle (3)
    Date Time SPID *
    Date Time SPID * Input Buffer 78 bytes -
    Date Time SPID * dbcc freeproccache
    This issue may occur if one of the following conditions is true:• You run the DBCC FREEPROCCACHE statement after you close the cursor.
    • You run the DBCC FREEPROCCACHE statement, and then you close the cursor.
    • You disconnect the connection without closing the cursor.

    Microsoft SQL Server 2005 Standard Edition
    Microsoft SQL Server 2005 Developer Edition
    Microsoft SQL Server 2005 Enterprise Edition
    Microsoft SQL Server 2005 Standard X64 Edition
    Microsoft SQL Server 2005 Standard Edition for Itanium-based Systems
    Microsoft SQL Server 2005 Enterprise X64 Edition
    Microsoft SQL Server 2005 Enterprise Edition for Itanium-based Systems
    Microsoft SQL Server 2005 Workgroup Edition

    http://support.microsoft.com/kb/955686

    Event ID 7000 appears in the System log while starting SQL 2005 Server

    16.09.2008 20:28:00 | Ozgur Aytekin

    Event ID 7000 appears in the System log while starting SQL 2005 Server

    SYMPTOMS

    When you start a computer that is running Microsoft SQL 2005 Server, you may receive the following error message:

    "At least one service or driver failed during system startup. Use Event Viewer to examine the event log for details."

    Additionally, the following event appears in the System log in Event Viewer:

    Event Source: Service Control Manager
    Event Category: None
    Event ID: 7000
    Date: date
    Time: time
    Type: Error
    User: N/A
    Computer: computername
    Description The SQL Server Reporting Services (MSSQLSERVER) service failed to start due to the following error:
    The service did not respond to the start or control request in a timely fashion.


    Note: The description may contain information on another SQL service name.

    Microsoft SQL Server 2005 Standard Edition
    Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
    Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
    Microsoft SQL Server 2005 Enterprise Edition
    Microsoft Windows Server 2003, Standard Edition (32-bit x86)

    http://support.microsoft.com/kb/558119

    Photosynth ist fertig und frei verfügbar

    16.09.2008 20:24:55 | Oliver Scheer

    clip_image002[4]

    Photosynth ist ein kostenloser Service, um Fotos in einem 3D-Umfeld auszutauschen und zu erleben. Das Photosynth-Tool nimmt eine Kollektion von Fotos von einem Objekt oder Ort und analysiert jedes Foto auf Ähnlichkeiten mit den Anderen. Die Applikation ermittelt dann, wo das Bild aufgenommen wurde und baut eine 3D-Model daraus. Die Fotos werden am richtigen Platz auf einem 3D-Model platziert und man hat die Möglichkeit durch das 3D-Model zu bewegen.  Es ist ein echt cooles Erlebnis! 

    clip_image002

    Das spannendste an dieser neuen Version von Photosynth ist das man hat jetzt die Chance Synths selbst zu erstellen.  Für mehr Info über Photosynth oder zu lernen wie man ein gutes Synth baut, schau das How-To-Photosynth-Video an.  Ich habe es auf Deutsch synchronisiert und das findest

    Meine Kollegin Lori Grosland hat dazu eine ausführliche Beschreibung erstellt:

    http://www.on10.net/blogs/lorigros/Photosynth-Wie-erstellt-man-ein-Synth/

    Windows SharePoint Services 3.0: “This form was customized not working with attachment"

    16.09.2008 20:21:00 | Ozgur Aytekin

    Error message when you try to attach a file in a custom form on the Web site in Windows SharePoint Services 3.0: “This form was customized not working with attachment"

    SYMPTOMS
    You use Microsoft Office SharePoint Designer 2007 to add a Custom List Form Web Part on a Microsoft Windows SharePoint Services 3.0 site. Then, you try to attach a file by clicking Attach File in the custom form on the Web site. When you do this, you receive the following error message:

    Microsoft Windows SharePoint Services 3.0
    Microsoft Office SharePoint Server 2007


    http://support.microsoft.com/kb/953271/

    Silverlight 2 Retail Lösung zum Download

    16.09.2008 19:34:44 | Oliver Scheer

    Der Trend beim Onlineshopping geht mehr und mehr zur Integration von Bewegtbildern, um dem Verbraucher mehr Informationen zu geben, die Webseite attraktiver zu gestalten oder aber auch um die Emotionalität und das Image von Marken effizienter zu nutzen. Immerhin investieren viele Marken wie bspw. Adidas, Nike oder Pume viel Geld in Kampagnen, Testimonials oder Events um ihre Marke aufzubauen. Warum soll man dann zumindest die Bewegtbilder nicht nutzen, zumal viele Händler, egal welcher Größe, nur über sehr wenig Filmmaterial verfügen.

    Die Applikation bzw. die Ressourcen für die Silverlight 2 Lösung ist auf Codeplex, dem shared-source Portal von Microsoft, verfügbar. Andere würden open source sagen, wir sagen shared source ;-)

    retail1.pngretail2.png

    Source code:  http://www.codeplex.com/WLQuickApps/Wiki/View.aspx?title=Retail&referringTitle=Home

    Application:  http://retail.mslivelabs.com/

    Danke an http://blogs.msdn.com/christianklasen/

    Weitere Silverlight-Seminare (nicht nur von Microsoft) – und ein Aufruf an Trainingsanbieter

    16.09.2008 17:46:00 | Steffen Ritter

    Neben den erfolgreichen LiftOff-Seminaren zu Silverlight und anderen Webtechnologien von Microsoft  gibt es inzwischen ein wachsendes Trainings- und Seminarangebot zu Silverlight von unabhängigen Anbietern.

    Beispielsweise bietet ppedv mittlerweile zweitägige Intensivseminare zu Silverlight für Web-Entwickler und –Designer mit guten Vorkenntnissen in HTML, JavaScript und Visual Studio 2008 zum Preis von knapp 900,- Euro an: http://www.ppedv.de/schulung/kurse/silverlight.aspx. Basis der Seminare ist natürlich bereits Silverlight 2 (der offizielle Name enthält kein „.0“), Themen sind u.a. eine Einführung in XAML, Animationen & Keyframe-Animationen, Expression Design und Expression Blend im Detail, Layout-Controls wie Canvas, Grid und Stackpanel, das Event Model mit XAML, Custom Controls, Bilder mit Deep Zoom skalieren und zoomen, REST und JSON  und mehr. Ausführliche Infos gibt es auf der Website von ppedv.

    Dieses und andere Seminarangebote listen wir (d.h. Microsoft) auch auf der offiziellen Expression-Studio-Homepage unter http://www.microsoft.com/germany/expression/resources/Default.aspx -- und dort ist noch Platz! Will heißen: Anbieter von Seminaren/Workshops/Trainings usw. zu Silverlight und/oder Expression-Studio-Programmen sind herzlich eingeladen mir eine E-Mail zu schicken und mich auf ihr Angebot hinzuweisen. Bei allen ernsthaften und seriösen Angeboten werde ich umgehend veranlassen, dass sie ebenfalls (kostenlos) dort auf der offiziellen Homepage von Expression Studio gelistet werden.

    Panini-Sticker-Alben sind sooooo 20th Century. Vorhang auf für SnipClip!

    16.09.2008 13:14:00 | Steffen Ritter

    Auf der Xtopia 2008 wird SnipClip den Vorhang lüften und das erste Online-Sammelalbum einer breiten Öffentlichkeit präsentieren. Die Xtopia findet vom 17. bis 18. November in Berlin statt. Die von Microsoft veranstaltete Konferenz vereint Designer, Entwickler und Unternehmer rund um das Thema e-Commerce. In seinem Vortrag geht Martin Szugat, Geschäftsführer der SnipClip GbR, auf die Verbindung von Social Communities und virtuellen Gütern ein und zeigt deren Geschäftspotenzial auf. Weitere Infos online unter http://www.xtopia-konferenz.de/Business_Track_xt08.mspx?ActiveID=1218#SnipClip

    Maschinelle Übersetzungen bei MSDN Online – Ihre Meinung ist gefragt

    16.09.2008 03:40:42 | Oliver Scheer

    Sie sind gefragt: Was halten Sie von zukünftiger maschineller Übersetzung von MSDN-Inhalten ins Deutsche? Der Windows Live Translator als gegenwärtiger Stand der Technik wird bei MSDN und TechNet in Zukunft dabei helfen, Ihnen englischsprachige Inhalte maschinell übersetzt anzubieten und damit die aufwändige und zeitverzögerte Übersetzung durch professionelle Übersetzer ersetzen. John Martin beschreibt in seinem Blog ein Addin, das Sie auf Ihre Website einbauen können, und lädt zum Feedback ein. Testen Sie selber die Übersetzungsqualität, und hinterlassen Sie uns in Johns Blog sowie unter der angegebenen Feedbackadresse Ihre Meinung zur Ausgereiftheit der Technologie für die an Sie gerichtete Übersetzung technischer Artikel ins Deutsche. Als erste Feuerprobe können Sie auch heute schon einen aktuellen Artikel aus dem englischsprachigen MSDN Magazine maschinell übersetzen lassen und das Ergebnis mit dem der traditionellen Arbeit des Übersetzers im deutschsprachigen MSDN Magazine vergleichen.

    Noch vier Tage: Early-Bird fuer Technical Summit und Xtopia 08 sichern

    16.09.2008 00:33:30 | Kay Giza

    Bis 19. September haben Interessenten noch Zeit, sich für die beiden Microsoft-Fachveranstaltungen „Technical Summit 2008“ und „Xtopia 2008“ anzumelden und dabei mit dem günstigen Early-Bird-Preis jeweils bis zu 150 € zu sparen. Die Entwickler-Konferenz „Technical Summit“ findet vom 19. bis 21. November im Berliner ICC statt; drei Tage vorher – vom 16. bis 18. November – öffnet die Web-Konferenz „Xtopia 08“ ebenfalls im Berliner ICC ihre Tore.

    Wovon spricht der Kay bloß?

    Was ist wichtig zu wissen?

    • Technical Summit
      • Die aktuellsten Informationen von der PDC, die neusten Trends und teilweise noch unter "NDA" stehende wegweisende Neuigkeiten - werfen Sie einen Blick in die Agenda!
      • Ask-The-Expert-Sessions mit vielen bekannten Experten aus der Community!
      • Attraktives Give-Away-Paket: WPF-Studio von ComponentOne und vieles mehr!
      • Die neusten Informationen, über 25 Referenten in parallelen Sessions!
      • Technical Summit Keynote:
        Keynote Speaker des Technical Summits 2008
        Patrick Baudisch: Research Scientist @ Microsoft Research, Seattle | Professor @ Hasso Plattner Institute, PotsdamSteve Teixeira: Product Unit Manager for the Parallel Development Tools Team, MicrosoftFrank Fischer - Manager der Technologieberater, Developer Platform & Strategy Group bei Microsoft Deutschland
        Durch die Keynote des Technical Summits 2008 führt Sie Frank Fischer, Manager der Technologieberater in der Developer Platform & Strategy Group bei Microsoft Deutschland. Das erste Produkt von Microsoft – wenn man so will – war die Programmiersprache BASIC, veröffentlicht 1975. Seit dem hat sich sehr viel verändert, allein Basic hat uns stets begleitet und erlebt gerade wieder ein Revival, siehe das dynamische BASIC VBX. Auch Microsoft hat sich gewandelt. Wir sind mittlerweile ein Software-Mischkonzern, der stark in den Bereich Services expandiert. Mit Patrick Baudisch haben wir jemanden, der das was heute Cutting-Edge ist – zum Beispiel Surface – wesentlich mit beeinflusst hat und der uns einen Blick in die Zukunft geben wird. Mit Steve Teixeira jemanden, der ganz wesentlich auf weltweiter Basis die nächste Version von Visual Studio – Codename Dev10 – mitgestaltet. Frank Fischer wird dies auf den deutschen Markt übersetzen und die Fragen beantworten, was bedeutet das für mich als Entwickler hier in Deutschland?
    • Xtopia 08
      • Informieren Sie sich, wer Sponsoren & Partner der Xtopia 08 ist und wer somit auf Expo für Gespräche und den innovativen Gedankenaustausch zur Verfügung steht
      • Xtopia 08 Keynote:
        KeyNote Speaker der Xtopia 08:
        Patrick Baudisch: Research Scientist @ Microsoft Research, Seattle | Professor @ Hasso Plattner Institute, PotsdamDan'l Lewin: Corporate Vice President, Strategic and Emerging Business Development, MicrosoftDr. Said Zahedani (Direkter Developer Platform & Strategy Group, Microsoft Deutschland GmbH)

    Mehr Informationen: www.technical-summit.de sowie www.xtopia.de



    This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
    Visit:  MSDN Online | Kostenfreie MSDN Service-Hotline für Entwickler
    Daily News on MSDN:   MSDN Aktuell
    © Copyright 2006-2008 Kay Giza. All rights reserved. Legal

    DDD – Vortrag bei DNUG Köln, 07-10-2008

    15.09.2008 23:29:00 | Sebastian Jancke

    Wie Albert schon angekündigt hat, gebe ich am 07. Oktober 2008 einen Vortrag zum Thema Domain Driven Design in der DNUG Köln.

    Allgemein ist die Konstruktion von Modellen ein effektives Mittel, um die Komplexität eines Problems zu beherrschen. Domain Driven Design setzt als Basis unserer Entwicklungsprozesse die Fokussierung auf die Domäne und ihre Modelle, uneingeschränkt durch technische Komplexität, die heutige Projekte meist überlädt. Das wichtigste Werkzeug ist dabei die allgegenwärtige Sprache als Modell der Domäne und der Kontext, in dem sich das Modell einer Domäne befindet.

    Der Vortrag gibt eine Einführung in das Thema und einen Überblick über fortgeschrittenere Techniken:

    • Voraussetzungen
    • Allgegenwärtige Sprache
    • Grundlegende Bausteine als Basis der Sprache und Orientierungshilfe
    • Modelle reichhaltiger gestalten
    • Modelle durch ihren Kontext trennen und integrieren
    • DDD in der Praxis: gängige Probleme und häufige Fragen

    Technorati Tags: ,

    Entwickler zu Dumping-Preisen

    15.09.2008 19:12:15 | Norbert Eder

    Da sehe ich doch heute glatt bei einer Google-Anzeige folgenden Text:

    Finden Sie Top-Qualifizierte C#-Entwickler ab 6 Euro/Stunde

    Das muss man sich auf der Zunge zergehen lassen. Sechs Euro pro Stunde. Für viele sicher genau DAS Argument, einen Klick für das gesamte AdWords-System zu produzieren. So billig kommt man doch sonst nie zu einem C#-Entwickler. Aber bekommt man hier auch die entsprechende Qualität? Wohl eher nicht.

    Denn bei 25 Arbeitstagen zu je 8 Stunden bewegen wir uns hier bei genau 1.200 Euro. Da kommt noch die Steuer weg, Versicherung und natürlich auch sämtliche Aufwände (Equipment, Strom, Miete usw.). Wer also bitte arbeitet zu diesem Preis?

    Davon abgesehen: Wieviel Qualität kann man für diesen Preis wirklich erwarten? Im Vergleich zu üblichen Preisen sind 6 Euro sogar unter Hungerlohn, d.h. ein wirklicher Experte auf seinem Gebiet wird sich zu diesem Preis nie und nimmer verkaufen.

    Vermutlich lassen sich jedoch genügend darauf ein, da oft nur der Preis und nicht die tatsächliche Qualität zählt. Dass das Projekt damit drei Mal so lange dauert, von Fehlerfreiheit bei weitem keine Rede sein kann und auch sonst zur Genüge Probleme auftreten werden, ist eine andere Geschichte.

    Ich kann mich über solche Angebote nur wundern ... und auch über diejenigen, die darauf einsteigen.

    Noch fünf Tage: Frühbucher-Rabatt für Technical Summit und Xtopia sichern

    15.09.2008 16:01:52 | Oliver Scheer

    Bis 19. September haben Interessenten noch Zeit, sich für die beiden Microsoft-Fachveranstaltungen „Technical Summit 2008“ und „Xtopia 2008“ anzumelden und dabei mit dem günstigen Early-Bird-Preis jeweils bis zu 150 € zu sparen. Die Entwickler-Konferenz „Technical Summit“ findet vom 19. bis 21. November im Berliner ICC statt; drei Tage vorher – vom 16. bis 18. November – öffnet die Web-Konferenz „Xtopia“ ebenfalls im Berliner ICC ihre Tore.

    Noch fünf Tage: Frühbucher-Rabatt für Technical Summit und Xtopia sichern

    15.09.2008 14:36:00 | Steffen Ritter

    Bis 19. September haben Interessenten noch Zeit, sich für die beiden Microsoft-Fachveranstaltungen „Technical Summit 2008“ und „Xtopia 2008“ anzumelden und dabei mit dem günstigen Early-Bird-Preis jeweils bis zu 150 € zu sparen. Die Entwickler-Konferenz „Technical Summit“ findet vom 19. bis 21. November im Berliner ICC statt; drei Tage vorher – vom 16. bis 18. November – öffnet die Web-Konferenz „Xtopia“ ebenfalls im Berliner ICC ihre Tore.


     

    Wii + pptPlex: Eine etwas andere Steuerung in einer etwas anderen Präsentationsart

    15.09.2008 13:41:22 | Robert Mühsig

    Die Entwickler bei Office Labs haben 2 recht coole Technologien kombiniert: Die Rede ist von pptPlex und der Nintendo Wii Steuerung:

    Wie das ganze geht ist auf der Anleitungsseite beschrieben.

    ShareThis

    Entwickler und Designer: Nominieren Sie jetzt Ihre Anwendungen für den Silverlight Gadget Award, den Client Innovation Award und den Client Solution Award

    15.09.2008 12:44:00 | Steffen Ritter

    Silverlight Gadget Award - Sie entwickeln Windows Vista Sidebar Gadgets und möchten diese einem breiten Publikum vorstellen? Nehmen Sie am Silverlight Gadget Award teil! Prämierung der Gewinner auf der Xtopia 08 (www.xtopia.de). Nominieren Sie jetzt Ihr Silverlight Sidebar Gadget unter: www.innovation-awards.de. Teilnahmeschluss: 31. Oktober 2008.

    Client Innovation Award - Sie realisieren für ein Unternehmen eine geschäftsrelevante Applikation mit der "Windows Presentation Foundation" (WPF)? Microsoft Deutschland GmbH und Experton AG prämieren die besten Einreichungen mit dem Client Innovation Award auf der CeBIT 2009. Nominieren Sie jetzt Ihre WPF-Anwendung für den „Client Innovation Award“ unter www.innovation-awards.de. Teilnahmeschluss: 15. Januar 2009.

    Client Solution Catalog - Für Client-Lösungen auf Basis der Technologien WPF, Silverlight, Windows VISTA und Internet Explorer 8. Demonstrieren Sie Innovationskraft und Technologie-Kompetenz! Online-Präsenz und Vorstellung bei zahlreichen Microsoft-Veranstaltungen – Ihr Weg zu neuen Kunden. Darüber hinaus können insgesamt drei hochwertige „Microsoft Technology Center Pakete“ aller Unternehmen, deren Lösungen im Client Solution Catalog veröffentlicht werden, gewonnen werden! Nominieren Sie jetzt Ihre Microsoft Client-Anwendung für den Client Solution Catalog unter www.innovation-awards.de.

    MSDN Code Gallery

    15.09.2008 12:00:00 | Ozgur Aytekin

    Unter MSDN Code Gallery findet ihr Beispiel Codes für diverse Microsoft Produkte oder Entwickler-Themen.
    Die Beispiel Codes sind nach Themen Gruppiert und über eine Such-Funktionalität können die Beispiel Codes nach Stichwörtern gesucht werden.

    Ein paar von diesen Gruppen sind unten aufgelistet:

    .NET
    .NET 2.0
    .NET 3.5
    ADO.NET
    ASP.NET
    C#
    CRM
    Entity Framework
    Hotfix
    LINQ
    LINQ to SQL
    MCMS
    Placeholder Controls
    SharePoint
    Silverlight
    SQL Server
    TFS - Team Foundation Server
    Visual Basic
    Visual Studio
    Visual Studio 2005
    Visual Studio 2008
    VSX
    WCF
    WPF

    Client Solution Catalog

    15.09.2008 11:05:50 | Oliver Scheer

    Für Client-Lösungen auf Basis der Technologien WPF, Silverlight, Windows VISTA und Internet Explorer 8. Demonstrieren Sie Innovationskraft und Technologie-Kompetenz! Online-Präsenz und Vorstellung bei zahlreichen Microsoft-Veranstaltungen – Ihr Weg zu neuen Kunden. Darüber hinaus können insgesamt drei hochwertige „Microsoft Technology Center Pakete“ aller Unternehmen, deren Lösungen im Client Solution Catalog veröffentlicht werden, gewonnen werden! Nominieren Sie jetzt Ihre Microsoft Client-Anwendung für den Client Solution Catalog unter www.innovation-awards.de.

    Microsoft Developer Day

    15.09.2008 10:32:07 | Oliver Scheer

    Am 18. September lädt die Bechtle AG gemeinsam mit uns zum Microsoft Developer Day nach Neckarsulm ein. Der ganztägige, kostenlose Event bietet unseren Kunden einen umfangreichen Überblick über Visual Studio 2008, .NET als Microsoft-Entwicklerplattform, .NET 3.5 sowie Visual Studio Team System. Ein weiterer Schwerpunkt liegt auf dem Thema Oberflächen-programmierung. Die Vorträge werden von den Microsoft-Technologieberatern Oliver Scheer und Dariusz Parys gehalten. Anmelden können sich alle Interessierten per E-Mail. Weitere Informationen erhaltet Ihr hier.

    Mit Unit Tests zur einfacheren und intuitiveren Verwendung

    15.09.2008 10:15:26 | Norbert Eder

    Unit Tests sind ein Thema bei dem es Entwickler wie Ärzte halten: Gehe zu vier Ärzten und erhalte fünf Meinungen. Bei Unit Tests läuft es auf dieselbe Art. Also wie jetzt wirklich?

    Mit den in Visual Studio integrierten Test-Möglichkeiten sollte man meinen, dass der Entwickler nun wirklich keine Ausrede mehr parat hat, Unit Tests nicht zu schreiben. Weit gefehlt. In vielen Projekten werden derartige Tests noch immer vernachlässigt bzw. im schlimmsten Fall nicht angedacht. Einen der Hintergründe - das Thema Aufwand - hatte ich schon einmal versucht, aus dem Weg zu räumen. Oft erscheinen Tests jedoch auch zu kompliziert, oder es wird diese großartige Unterstützung schlicht einfach nicht bedacht.

    Für Unit Tests spricht aber nicht nur, dass damit die Fehlerfreiheit von Teilen der Software verbessert und laufend überprüft werden kann. Der Entwickler kann damit sich selbst, dem Team und neuen, zukünftigen Mitgliedern die Arbeit ebenfalls wesentlich erleichtern. Wie denn das?

    Der Eckpfeiler daran ist, sich vor der tatsächlichen Implementierung eines Arbeitspaketes Gedanken zu machen, wie die resultierenden Klassen getestet werden können. Idealerweise werden die Tests vor der Entwicklung dieser Teile geschrieben, muss aber nicht zwingend passieren. Da sich der Entwickler nun im Vorfeld schon Gedanken über die Verwendung macht, wird daran gefeilt, bis eine leichte, intuitive Verwendung möglich ist. Schließlich möchte niemand 10 Zeilen Sourcecode schreiben, nur um eine einfache Berechnung auszuführen. Das Ergebnis ist also ein klares, einfach verständliches Design, welches sowohl die gestellte Aufgabe erfüllt und zudem nach der Implementierung voll funktionsfähig ist. Fehlen Gedanken zur Anwendung, kann letzterer Punkt nicht immer sichergestellt werden. Änderungen am Design sind daher im Nachhinein nötig und führen mitunter sehr schnell zu einer Verwässerung des ursprünglichen Designs.

    Der Nachteil daran ist einfach erklärt: Neben der Notwendigkeit, sämtliche Dokumentationen zu ändern (Design Dokument etc.) hat sich durch die spätere Änderung das Design eventuell so stark verändert (meist durch Work-Arounds), dass die Code-Teile nicht mehr intuitiv zu verwenden sind. Team-Kollegen, neue Mitstreiter oder eventuelle Kunden, die programmiertechnisch damit in Berührung kommen, müssen sich lange durch die Dokumentation quälen anstatt durch einen ersten schnellen Tests die Funktionsweise zu verstehen. Eine einfache Sache kann also schnell zu einer Katastrophe ausarten.

    Der weitere Ablauf liegt ebenso auf der Hand: Irgendwann wird ein anderer findiger Entwickler diesen Sourcecode zur Überarbeitung markieren. Es entsteht ein Arbeitspaket mit der Prioritätsstufe niedrig - wenn sich einmal Zeit findet. Bis dieser Tag angebrochen ist (in der Regel nie) werden an diesen Stellen vermutlich zahlreiche Funktionserweiterungen implementiert. Ein einfaches Austauschen ist somit auch nicht mehr möglich. Treten zu einem späteren Zeitpunkt gerade hier vermehrt Fehler auf, wird ein alter Spruch missbraucht: Das ist im Laufe der Zeit so gewachsen..

    Als Tipp kann ich daher nur jedem Entwickler mitgeben: Bereits im Vorfeld sind Gedanken über die spätere Verwendung von Code-Teilen notwendig. Sinnvoll kann es natürlich sein, nach einem ersten Grob-Design mit einem Testfall zu beginnen. Anhand dessen kann abgeleitet werden, ob die angedachte Verwendungsweise tatsächlich gut ist, oder ob Nacharbeit notwendig ist. Nach zwei bis drei Iterationen über diese Punkte hat sich ein Verständnis für dieses Arbeitspaket entwickelt und auch die Verwendung sollte weitaus klarer und intuitiver sein, als dies vermutlich beim ersten Ansatz der Fall war.

    TechTalk im September: Oberflächen mit WPF planen, gestalten, umsetzen

    15.09.2008 09:36:25 | Oliver Scheer

    Mit einem spannenden Thema geht der MSDN TechTalk nach der Sommerpause im September wieder auf Tour. MSDN Evangelist Dirk Primbs zeigt dann am Beispiel der Windows Presentation Foundation (WPF), wie moderne Applikations-User Interfaces konzipiert und realisiert werden und welche Rolle WPF heute bei der Entwicklung von Benutzeroberflächen spielt. Wann und wo Sie die kostenlosen TechTalk-Vorträge erleben können, erfahren Sie in der Event-Rubrik von MSDN Online. Gleich anmelden!

    Microsoft Academic Days: Call for Papers

    15.09.2008 09:34:48 | Oliver Scheer

    In Berlin finden am 19. November im Rahmen der Microsoft-Entwicklerkonferenz „Technical Summit 2008“ die 4. „Microsoft Academic Days“ statt, für die derzeit ein „Call for Papers“ läuft. Referenten, die auf der Veranstaltung eigene Beiträge präsentieren möchten, können noch bis Mitte September ihre Abstracts einreichen. Die Academic Days treten mit dem Anspruch an, die Kommunikation zwischen Forschung, Industrie und Lehre anzuregen. Daher stehen sowohl aktuelle Forschungsthemen als auch Ideen zu deren Vermittlung an Studierende auf dem Programm.

    Xtopia 2008 & Technical Summit 2008: Informieren und anmelden

    15.09.2008 09:34:06 | Oliver Scheer

    Zwei wichtige Microsoft-Konferenzen gehen Mitte November im Berliner ICC über die Bühne: der Web-Event "Xtopia" und der Entwickler-Kongress "Technical Summit". Über Details der beiden Veranstaltungen - Agenda, Referenten und Termine - informieren jetzt eigene Websites. Frühanmelder, die sich bis 19. September für die Events registrieren, profitieren von einem "Early Bird"-Rabatt von bis zu 150 €.

    Holen Sie sich Internet Explorer 8 Beta 2!

    15.09.2008 09:21:41 | Oliver Scheer

    Kaum ist man 6 Wochen im Urlaub oder im Ausland unterwegs, schon gibt es eine neue Beta des Internet Explorers :-)

    Die nächste Runde im Kampf um den beliebtesten Webbrowser ist eingeläutet: Ab sofort können Sie die zweite Betaversion von Internet Explorer 8 auf Deutsch herunterladen. Zeitgleich mit der Verfügbarkeit der US-Version des hochproduktiven Werkzeugs richtet sich die neue Vorabversion nicht mehr vorrangig an Entwickler, sondern an jedermann. Die neue Version glänzt mit vollständiger CSS 2.1-Unterstützung, weiter verbesserter Performance und noch schnellerer Skriptverarbeitung, signifikant leistungsfähigeren Entwicklertools, erhöhter Zuverlässigkeit, Privatsphäre, Vertrauenswürdigkeit und Sicherheit, sowie vielen weiteren Detailverbesserungen und -korrekturen, etwa bei Activities und WebSlices. Profitieren Sie schon heute von den Vorteilen der neuen Version, unterstützen Sie die verbleibende Weiterentwicklung durch Ihr Feedback, oder schauen Sie einfach vorbereitend in die Welt von morgen herein! Informieren Sie sich im Internet Explorer Developer Center über aktuelle Informationen.

    Start frei für 'Social Bookmarking' auf MSDN- und TechNet-Online

    15.09.2008 03:38:43 | Oliver Scheer

    Auf dem MSDN-Webportal ist die 1. Version der MSDN Social-Plattform & TechNet Social-Plattform ans Netz gegangen. Die jetzt freigegebene finale Anwendung löst die Preview-Version ab, die bereits seit Mai 2008 getestet werden konnte. MSDN & TechNet-Social soll es ermöglichen, Bookmarks (Favoriten) online zu verwalten und mit anderen Nutzern auszutauschen. Wie’s funktionieren kann, erklären in ihren Blogs MSDN-Manager Kay Giza (dt.) und Chris Glemp von der 'Microsoft Server and Tools Online Group' (engl.).

    HowTo: Dynamisch ASP.NET Controls mit AJAX erzeugen

    15.09.2008 00:34:17 | Robert Mühsig

    Die Idee (und einige Codezeilen) für dieses HowTo kommt von diesem Blogeintrag der ein tolles Beispiel zeigt. Da ich mir meistens Sachen besser merken kann, wenn ich diese selber mal prototypisch umsetze, schreibe ich auf dieser Basis das HowTo.

    Worum geht es?
    Stellen wir uns vor, wir hätten viele UserControls geschrieben, welche Daten und Controls unterschiedlicher Art anzeigen können.
    Wenn man nun allerdings eine schöne “Web 2.0″ AJAX Anwendung bauen will, schickt man im einfachsten Fall JSON Daten hin und her und muss sich das Control über Javascript zusammenbauen. Das ganze ist natürlich nicht sehr wartbar (manches wird über ASP.NET gemacht, manches vielleicht über statisch eingebundene Controls und andere Sachen über Javascript) - schön wäre doch, wenn man die Controls dynamisch auf die Seite holen könnte. Und genau darum geht es heute…

    Aufbau:

    image

    Wir haben ein sehr simples “SampleUserControl”:

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SampleUserControl.ascx.cs" Inherits="DynamicASPControls.SampleUserControl" %>
    <div style="background-color: red; height: 200px; top: 200px">
        Fertig geladen \o/
    </div>

    Der ScriptService:

    Für die Kommunikation zwischen Client und Server (und die AJAX Funktionalität) nutzen wir ASP.NET AJAX. Wie das geht und was man damit machen kann, habe ich hier bereits beschrieben.

    Im ScriptService (der auch das Attribut ScriptService trägt) erstellen wir uns dynamisch den HTML Code von einem beliebigen Usercontrol:

    public class ScriptService : System.Web.Services.WebService
        {
            [WebMethod(EnableSession = true)]
            public string GetControlHtml(string controlLocation)
            {
                Page page = new Page();
                UserControl userControl = (UserControl)page.LoadControl(controlLocation);
                userControl.EnableViewState = false;
                HtmlForm form = new HtmlForm();
                form.Controls.Add(userControl);
                page.Controls.Add(form);
                StringWriter textWriter = new StringWriter();
                HttpContext.Current.Server.Execute(page, textWriter, false);
                return CleanHtml(textWriter.ToString());
            }
    
            /// <summary>
            /// Removes Form tags
            /// </summary>
            private string CleanHtml(string html)
            {
                return Regex.Replace(html, @"<[/]?(form)[^>]*?>", "", RegexOptions.IgnoreCase);
            }
        }

    Der “GetControlHtml” Methode wird die “Location” von dem Control mitgeiteilt und jetzt bauen wir uns dynamisch eine “Page” zusammen und fügen eine “HtmlForm” dazu und hängen dort das geladene Control dran.

    Über “HttpContext.Current.Server.Execute” können wir nun unseren fertigen HTML Code in ein String verwandeln.

    Die “CleanHtml” Methode entfernt die Form Tags am Anfang wieder - sodass wir möglichst nur noch das original Control-HTML übrig haben.

    Größenbeschränkung aufheben:

    Da man ja relativ viele Sachen in einem Control machen kann und das daraus resultierende HTML recht groß werden kann, müssen wir dies in der Web.Config erst freischalten:

      <system.web.extensions>
        <scripting>
          <webServices>
            <jsonSerialization maxJsonLength="5000000" />
          </webServices>
        </scripting>
      </system.web.extensions>

    Fertige ASPX:

    Die fertige ASPX Seite ist bewusst einfach gehalten:

    <%@ Page Language="C#" AutoEventWireup="true" EnableViewState="false" CodeBehind="Default.aspx.cs" Inherits="DynamicASPControls._Default" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Untitled Page</title>
    
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
            <Services>
                <asp:ServiceReference Path="~/ScriptService.asmx" />
            </Services>
        </asp:ScriptManager>
    
        <button type="button" onclick="generateUserControl()">Generate UserControl!</button>
        <div id="result">
    
        </div>
        </form>
    
            <script type="text/javascript">
            function generateUserControl()
            {
                document.getElementById("result").innerHTML = "Load...";
                DynamicASPControls.ScriptService.GetControlHtml("~/SampleUserControl.ascx", generateUserControlCompleted);
            }
    
            function ready(result)
            {
                alert(result);
            }
    
            function generateUserControlCompleted(result)
            {
                document.getElementById("result").innerHTML = result;
            }
    
            function failed(error)
            {
                alert(error);
            }
    
        </script>
    </body>
    </html>
    

    Über die JavaScript Methoden greifen wir auf den Service zu, welcher uns das HTML liefert. In der “generateUserControlCompleted” Methode schreiben wir das HTML nur noch in unser “result” div:

    image
    (Design made by me ;) )

    Ein komplexeres Beispiel:

    Ein wesentlich komplexeres Beispiel findet ihr in diesem Blogpost, sowie eine jQuery Variante in diesem Blogpost.

    Wo es Probleme geben könnte:

    Da wir das HTML dynamisch zur Seite hinzufügen, funktioniert sicherlich das Postback System von ASP.NET nicht (bzw. könnte ich es mir vorstellen, dass es da Probleme gibt) - für ein einfaches Control, welches ohne PostBacks entwickelt wurde, ist es aber sicherlich eine tolle Sache.

    [ Download Sourcecode ]

    ShareThis

    ASP.NET Grundlagen Teil 1: Ein Blick hinter die Kulisse

    14.09.2008 23:19:00 | Peter Bucher

    Dies ist der Beginn der Artikelserie "ASP.NET Grundlagen" mit folgenden Teilen:

    ASP.NET bietet viele Features / Eigenheiten an, die auch in anderen Webtechnologien zu finden sind.
    Darüber hinaus auch solche, die auf der Technologie selber oder dem Webserver (Meist IIS) aufgebaut sind.

    Ablauf und Funktionsweise von ASP.NET betrachtet

    Ein normaler Ablauf beim Aufruf einer Seite, dem Anklicken eines Links oder dem abschicken eines Formulars ist zwischen Client und Server bei allen Webtechnologien gleich.
    Er unterscheidet sich erst ab dem Zeitpunkt wo die Verarbeitung auf dem Server anfängt. Die Ausgabe ist bei allen Technologien schlussendlich auch gleich.

    1. Benutzer ruft per Webbrowser eine Webseite auf, klickt einen Link an oder sendet ein Formular ab
    2. Beim normalen Abruf - wie das auch bei einem Link der Fall ist - wird ein GET-Request an den Server gesendet, es werden also Daten angefordert und ggf. Parameter über die Url mit übergeben (GET-Parameter)
    3. Bei einem Abruf über ein Formular (Egal ob durch einen Button manuell oder indirekt über Javascript abgeschickt), wird ein POST-Request zum Server gesendet und ggf. Parameter über die Url mit übergeben (GET-Parameter) und zusätzlich Formulardaten zum Server geschickt (POST-Parameter), und bei einem Datei-Upload wird die Datei binär (multipart/form-data) innerhalb des POST-Requests mitgeschickt.

    Ungefähr so kann man sich die Anforderung vorstellen.
    Wenn ein statische Datei angefordert wird (Bspw. ein Bild, eine Zip-Datei, ....) übernimmt  im Normalfall der Webserver den Request und sendet als Response jeweils die Datei direkt zum Client - sowas nennt man dann "Download" :-).

    Wenn allerdings die Dateiendung oder der angeforderte Pfad (Im Fachchargon die Resource) auf dem Webserver mit ASP.NET verknüpft ist, übernimmt ASP.NET die Verarbeitung des Requests.
    Es werden die nötigen Objekte instanziiert (HttpContext, Page / HttpHandler, ...) die benötigt werden um mit ASP.NET arbeiten zu können.
    All diese Objekte (Ausgenommen Applikationsobjekte) leben _nur_ vom Anfang der Verarbeitung bis zum Senden der Response, danach werden sie zerstört.

    ASP.NET benutzt diese Objekte und mithilfe dem manuell geschrieben Code geschieht die Verarbeitung.
    Intern läuft eine Reihenfolge von Events / Methodenaufrufen ab, was wir unter dem ASP.NET Lifecycle verstehen.
    Innerhalb des selber geschrieben Codes (Page_Load, etc....) kann auf die - für den aktuellen Request - erstellten Objekte zugegriffen werden, so findet sich die GET-Parameter in "Request.QueryString[<Key>]" wieder und die POST-Parameter unter "Request.Form[<Key>]. (Siehe dazu aber auch Die alten Bekannten - Response.Write() und Request.Form[])

    Mithilfe des ASP.NET-Frameworks wird das abrufen und senden von Parametern auf einer höheren Ebene abstrahiert, bspw. funktioniert sowas:


    TextBox txtTest = new TextBox();
    txtTest.ID = "txtTest";
    placeHolder.Controls.Add(txtTest);
    string text;

    if(this.IsPostBack) {
        text = txtTest.Text;
    }

    Im Hintergrund läuft das automatisiert von ASP.NET ungefähr so ab:


    TextBox txtTest = new TextBox();
    txtTest.ID = "txtTest";
    placeHolder.Controls.Add(txtTest);
    string text;

    if(this.IsPostBack) {
        text = this.Request.Form[txtTest.UniqueID];
    }

    Natürlich wird nicht genau so ein Code im Hintergrund arbeiten, aber etwas ähnliches.
    Also unter der Haube von ASP.NET steckt ein wenig "Low Level" und ASP.NET abstrahiert das - vorallem durch Controls - sehr gut.

    Schlussendlich wird das Resultat (Response) von ASP.NET zum Client geschickt (Page rendert rekursiv Kind-Controls / HttpHandler schickt Datei, etc...) und die ganze Geschichte fängt wieder von vorne an.

    Nun, was fällt auf?

    Genau: Wir haben eine komplette Statuslosigkeit.

    Im nächsten Teil der Artikelserie geht es darum, was es für Möglichkeiten gibt mit der Statuslosigkeit umzugehen.

    ASP.NET Grundlagen Teil 2: Tschüss Statuslosigkeit

    14.09.2008 23:19:00 | Peter Bucher

    Dies ist die Fortsetzung der Artikelserie "ASP.NET Grundlagen" mit folgenden Teilen:

    In Teil 1 gab es einen Blick hinter die Kulissen und die Erkenntnis das es der Entwickler bei Webtechnologien mit Statuslosigkeit zu tun hat.

    Es gibt jedoch Möglichkeiten um die Statuslosigkeit mehr oder weniger loszuwerden bzw. mit der Statuslosigkeit umzugehen.
    Auf diese Möglichkeiten möchte ich jetzt eingehen, vorallem wann / wie / was genutzt werden kann oder sollte.

    SessionState

    Der SessionState bietet die Möglichkeit Benutzer über eine Sitzung weg zu identifizieren.
    Dies geschieht mit der Nutzung eines temporären Cookies auf dem Computer des Benutzers,
    in diesem Cookie ist eine SessionId - eine Id zur Identifikation des Benutzers am Server - gespeichert.

    Die Session bleibt solange bestehen, bis das Timeout nach dem letzten Kontakt mit dem Server abgelaufen ist, oder aber das Browserfenster geschlossen wird.
    Anmerkung:
    Wenn das Browserfenster geschlossen wird, ist die Session clientseitig verloren, serverseitig läuft sie aber noch solange bis der Timeout abgelaufen ist. Benutzt werden kann sie nicht mehr -> Ausser bei speziellen Spezialfällen natürlich....

    Anhand der SessionId können dann Daten im Arbeitsspeicher des Servers für einen Benutzer gespeichert und abgerufen werden.

    Benutzt wird / sollte der SessionState primär für alles was im Benutzerkontext abläuft.
    Allerdings reicht es auch hier in den meisten Fällen, bzw. ist es ratsam nur jeweils eine Identifizierung (Bentzer-Id in der Datenbank) in der Session zu speichern, da pro Benutzer gespeichert wird.

    Das bedeutet - bei einer Mehrbenutzeranwendung -was ASP.NET auch ist, dass pro Benutzer jeweils Objekte im Arbeitsspeicher des Servers gehalten werden.
    Diese bleiben solange im Arbeitsspeicher vorhanden, bis das Session-Timout abläuft oder aber die Daten manuell gelöscht werden.

    Darum sollte darauf darauf geachtet werden, dass nur wirklich die nötigsten Daten im SessionState gehalten werden.

    Nehmen wir bspw. mal eine Datenmenge von 500Kb die sich bei jedem Nutzer der Webanwendung angesammelt wird, dies bei 100 Benutzern.
    500 x 100 = 50'000Kb = 50Mb. (1000Kb oder 1024Kb mal aussen vor gelassen).

    Wenn während dem Timeout (Standardmässig 20 Minuten) nochmals 50 Benutzer hinzukommen, beläuft sich die Menge des benutzen Arbeitsspeicher schon auf 75Mb.

    Wenn die Session-Daten im Arbeitsspeicher des Servers gehalten werden, nennt sich der Modus "InProc" (In Process), es gibt auch die Möglichkeit einen StateServer, SqlServer oder eine eigene Implementation zu verwenden um die Session-Daten auch über die Lebenszeit der Applikation zu behalten.

    Cookie

    Im Gegensatz zum SessionState bleiben Cookies bis zu einem gesetzten Ablaufdatum bestehen und die Daten werden auf dem Client und nicht auf dem Server gespeichert.
    Das ist nütztlich um eine Funktion àla "Daten merken?" zu implementieren.

    Der SessionState (temporäre Cookies) und Cookies schliessen sich also nicht nicht gegenseitig aus, sondern ergänzen sich.
    So kann dieselbe Funktionalität mit dem SessionState gelöst werden und Cookies kommen dann zum Spiel, wenn die Einstellungen / Login dauerhaft, auch über eine Browsersitzung / Timout hinaus genutzt werden möchte.

    Datenbank

    Auch in Zusammenarbeit mit dem SessionState oder Cookies kann eine Datenbank benutzt werden, um einen Status abzuspeichern.
    Der SessionState / Cookies sorgen für die Identifizierung des Benutzers und die Datenbank fungiert als Speicher.

    Diese beiden Systeme (bspw. Cookie und Datenbank) assoziieren sich jeweils mit einer eindeutigen ID, sodass ein Status wiederhergestellt werden kann.

    Cache

    Mithilfe des Caches können Daten (Bspw. von aufwändigen Anforderungen wie die eines WebRequests oder einer langsamen Datenbankabfrage) zwischengespeichert werden, um die Anwendung zu beschleunigen.
    In ASP.NET ist ausserdem das Feature "Output Cache" eingebaut, dass die aktuelle Ausgabe einer Anforderung (Bsw. einer ASP.NET Seite) zwischengespeichert werden kann.
    Diese Zwischenspeicherung gilt dann (Wie auch beim normalen Cache) solange bis eine Abhängigkeit (CacheDependency) nicht mehr gültig ist.
    Das kann eine Zeitdauer sein, eine Änderung einer lokalen Datei - eines Verzeichnisses oder aber etwas völlig anders (VaryByCustom oder eine eigene Abhängigkeit).

    So kann bspw. für angemeldete Benutzer jeweils die Seite im Cache mit sensiblen Daten zurückgegeben werden, und bei Gästen diese ohne die sensiblen Daten, aber genauso aus dem Cache.

    Ich habe den Cache hier reingenommen, da ich ihn auch für ein sehr wichtiges Mittel halte, es geht hier nicht wirklich um den Status von Client / Server sondern um die Art, Daten zwischenzuspeichern.

    Application.Items oder statische Variabeln

    Applikationsweit _für alle Benutzer gleich_ (Siehe: Statische Variablen in ASP.NET) können Daten in der Applikations-Items-Auflistung oder - läuft im gleichen Kontext - als statische Variablen gehalten werden.

    Hier ist jedoch Vorsicht geboten und die Daten gehen nach einem Applikations-Neustart wieder verloren.
    Auch wird hier der Arbeitsspeicher des Servers als Medium benutzt, daher sollte auch mit der Menge der Daten sparsam umgegangen werden. (Wink an Jürgen ;-)

    Andere persistente Medien (Harddisk, Textdatei, ...)

    Genau so wie bei der Datenbank beschrieben, können auch andere persistente Medien als Status-Speicher benutzt weren.
    Seien das jetzt Textdateien, XML-Dateien, CSV-Dateien, ....

    ViewState

    Das ViewState-Feature das mit ASP.NET eingeführt wurde, ist sowohl alt als auch neu.
    ASP.NET benutzt die Tatsache, das viele Aufrufe in ASP.NET standardmässig per POST an den Server gesendet werden,
    um aktuelle Statusinformationen in einem Html-Hidden-Field zu speichern und bei der nächsten Anforderung wieder zu lesen.

    Dabei lassen sich zwei Kategorien unterscheiden: Der ControlState und der ViewState.
    Der Mechanismus ist der selbe, jedoch wird der ControlState nur von WebControls benutzt und kann von einem Seitenentwickler nicht deaktiviert werden.
    Der ViewState hingegen wird von ASP.NET selber auf Seitenebene genutzt und kann auch von einem Entwickler auf Seite- sowie Controlebene eingesetzt werden.

    Für den View- sowie den ControlState wird jeweils ein seperates HiddenField von ASP.NET generiert und verwendet.

    Das war in einer CTP so, Zitat von Jens (Danke für deinen durchaus konstruktiven Kommentar!):

    Es gab mal die Variante mit "__CONTROLSTATE" in einer CTP-Version wurd aber in der Finalen Version so nicht realisiert, da dadurch Performance-Einbußen zustande kamen.

    Beispielanwendung:
    ViewState["key"] = "value";

    Mit dieser Zuweisung erfolgt serverseitig eine Speicherung als Schlüssel / Wert-Paar (Key / Value-Pair).
    Alle Zuweisungen werden von ASP.NET zu einem String serialisiert und vor dem Zurücksenden des Outputs an den Client in einem versteckten Formularfeld gespeichert.
    Bei einer erneuten Anforderng per POST liest ASP.NET die Werte wieder in das Objektmodell und macht sie durch den Entwickler und die Objekte die selber agieren, abruf- und zuweisbar.

    Einfach gesagt: Mit Hilfe des ViewState-Mechanismus lassen sich Daten (Besser Stati) über einen PostBack am Leben erhalten.
    Jedoch funktioniert das nur solange bis die nächste Anforderung nicht mehr per POST kommt, sondern bspw. per GET.
    Bei einer GET-Anforderung: Also beispielsweise einen Klick auf ein Hyperlink, ein serverseitiger Response.Redirect oder einem einfachen Refresh der Seite im Browser (Ohne das mitsenden allfälliger Formulardaten) sind alle Daten im ViewState verloren und auf den Nullzustand zurückgesetzt.

    Folgendes zeig dies auf:
    POST -> POST -> POST -> POST (Status bleibt die ganze Zeit erhalten)
    POST -> POST -> POST -> GET -> POST (Status ist ab der ersten GET-Abfrage zurückgesetzt)

    Ich hoffe dass diese Artikel ein wenig Licht ins Dunkle bringen konnte und das Verständnis zu den vorhanden Möglichkeiten stärken.

    Bearbeitung / Korrekturen:
    15.09.08 - Absatz über den View- und ControlState hinzugefügt (Danke an Golo)
    17.09.08 - Hinweis über den ControlState korrigiert (Danke an Jens)

    Filesync-Service: Dropbox

    14.09.2008 18:49:11 | Lars Keller

    Heute bin ich auf den Filesync-Service Dropbox gestolpert und habe diesen gleich ausprobiert. Dropbox ist super schnell installiert und läuft sehr "smooth" ab. Einfach das zu synchronisierende File in den Dropbox-Ordner packen und schon wird es auf den Dropbox Server geladen. Natürlich alles verschlüsselt. Kostenlos steht jedem 2GB Speicherplatz zur Verfügung und es können 10 PCs synchronisiert werden. Weitere Informationen findet man bei diesem Golem Artikel.

    Eine andere Alternative (SYNCING.NET) zeigt Torsten in seinem Blogartikel auf.



    This weblog is sponsored by netcreate OHG.

    16.09.08 Treffen der .NET Developer Group Braunschweig: Software Design Principles

    14.09.2008 18:18:46 | Lars Keller

    dotnetbs_banner_150

    Die .NET Developer Group Braunschweig trifft sich zu ihrem 24 User Group Treffen am 16.09.08 um 19:00 im Restaurant Kilian's Raffinerie.

    Dieses Mal kommt uns Stefan Lieser mit seinem Vortrag über "Software Design Principles" besuchen:

    Software muss in der Regel über lange Zeiträume gepflegt werden. Die Wartbarkeit einer Software ist daher ein wichtiges Kriterium bei der Entwicklung. Stefan Lieser geht in seinem Vortrag der Frage nach welche Prinzipien bei der Softwareentwicklung hilfreich sind um wartbare Software zu erhalten.

    Weitere Informationen gibt es auf www.dotnet-braunschweig.de

    Wie immer ist jeder herzlich willkommen!



    This weblog is sponsored by netcreate OHG.

    Zurück von der NRW08

    14.09.2008 18:10:16 | Lars Keller

    Am Freitag, den 12.09.08 fand die NRW08 statt und ich war als Speaker dabei. Ich habe eine Session über VSTO 3.0 & Outlook 2007 Entwicklung gehalten. Die Session zeigte, wie einfach man ein Kontaktformular mit Form Regions, WPF & LINQ erweitern kann.

    olDemoNRW08

    Wer die Outlook Demo haben möchte, kann mir gern eine Email schreiben oder warten, bis diese hier im Blog veröffentlicht wird. Meine Folien gibt es jetzt schon mal ;-) (siehe unten).

    Das Event hat mir sehr viel Spaß gemacht, noch mal herzlichen Dank an das Orga-Team Daniel Fisher und Stephan Oetzel! Nach der NRW08 haben noch einige von uns  Wuppertal erkundet und dabei ein paar "phasige" (insider) Stunden erlebt. ;-)

    Eine Einladung zur nächsten NRW habe ich auch wieder erhalten. Der neue Termin für die NRW-CONF 09 (Achtung neuer Name) steht auch schon fest: 28.08.09. - Ich freue mich schon darauf!



    This weblog is sponsored by netcreate OHG.

    Filesync-Service: Dropbox

    14.09.2008 17:49:11 | Lars Keller

    Heute bin ich auf den Filesync-Service Dropbox gestolpert und habe diesen gleich ausprobiert. Dropbox ist super schnell installiert und läuft sehr "smooth" ab. Einfach das zu synchronisierende File in den Dropbox-Ordner packen und schon wird es auf den Dropbox Server geladen. Natürlich alles verschlüsselt. Kostenlos steht jedem 2GB Speicherplatz zur Verfügung und es können 10 PCs synchronisiert werden. Weitere Informationen findet man bei diesem Golem Artikel.

    Eine andere Alternative (SYNCING.NET) zeigt Torsten in seinem Blogartikel auf.

    16.09.08 Treffen der .NET Developer Group Braunschweig: Software Design Principles

    14.09.2008 17:18:46 | Lars Keller

    dotnetbs_banner_150

    Die .NET Developer Group Braunschweig trifft sich zu ihrem 24 User Group Treffen am 16.09.08 um 19:00 im Restaurant Kilian's Raffinerie.

    Dieses Mal kommt uns Stefan Lieser mit seinem Vortrag über "Software Design Principles" besuchen:

    Software muss in der Regel über lange Zeiträume gepflegt werden. Die Wartbarkeit einer Software ist daher ein wichtiges Kriterium bei der Entwicklung. Stefan Lieser geht in seinem Vortrag der Frage nach welche Prinzipien bei der Softwareentwicklung hilfreich sind um wartbare Software zu erhalten.

    Weitere Informationen gibt es auf www.dotnet-braunschweig.de

    Wie immer ist jeder herzlich willkommen!

    Zurück von der NRW08

    14.09.2008 17:10:16 | Lars Keller

    Am Freitag, den 12.09.08 fand die NRW08 statt und ich war als Speaker dabei. Ich habe eine Session über VSTO 3.0 & Outlook 2007 Entwicklung gehalten. Die Session zeigte, wie einfach man ein Kontaktformular mit Form Regions, WPF & LINQ erweitern kann.

    olDemoNRW08

    Wer die Outlook Demo haben möchte, kann mir gern eine Email schreiben oder warten, bis diese hier im Blog veröffentlicht wird. Meine Folien gibt es jetzt schon mal ;-) (siehe unten).

    Das Event hat mir sehr viel Spaß gemacht, noch mal herzlichen Dank an das Orga-Team Daniel Fisher und Stephan Oetzel! Nach der NRW08 haben noch einige von uns  Wuppertal erkundet und dabei ein paar "phasige" (insider) Stunden erlebt. ;-)

    Eine Einladung zur nächsten NRW habe ich auch wieder erhalten. Der neue Termin für die NRW-CONF 09 (Achtung neuer Name) steht auch schon fest: 28.08.09. - Ich freue mich schon darauf!

    Wie kann ich den Dateipfad eines Prozess ermitteln? - der verwaltete Weg

    14.09.2008 15:42:50 | Klaus Bock

    In einem vorherigen Artikel habe ich geschrieben, Zitat;

    Das .NET Framework bietet zwar einiges an Möglichkeiten mit Prozessen umzugehen, jedoch keine um den Pfad der Datei eines bestimmten Prozess zu ermitteln. Zumindest ist mir keine bekannt.

    Dann hätte ich wohl besser suchen sollen. Mittlerweile habe ich eine Möglichkeit mit Hilfe der ProcessModule-Klasse gefunden, genau dieses Problem auf verwaltetem Weg zu lösen.

    Da der Prozess ja bereits als eine Instanz der Process-Klasse vorliegt, kann die Eigenschaft Mainmodule der Process-Instanz an eine neue Instanz der ProcessModule-Klasse übergeben werden. Die Klasse ProcessModule gibt mit der Eigenschaft FileName den kompletten Pfad zur Datei des Prozess zurück. So einfach kann es sein.

    Zu bedenken ist allerdings noch, dass der Zugriff auf die Prozessmodule stark von den Rechten des ausführenden Benutzers abhängig ist. Zur Sicherheit sollte der Zugriff auf das Prozessmodul in einem try, catch Block verpackt werden, der eine Win32Exception verarbeitet. Diese tritt auf, wenn der Benutzer nicht die nötigen Rechte besitzt um auf das benötigte Prozessmodul zugreifen zu können. Meist ist dies der Fall, wenn auf einen Prozess zugegriffen wird der als Dienst gestartet wurde. Hier nun ein Listing der beschriebenen Vorgehensweise:

    public static string GetProcessPath(int processId)
    {
        string fileName = null;
        Process process = null;
        try
        {
            process = Process.GetProcessById(processId);
    
            ProcessModule processModule = process.MainModule;
            fileName = processModule.FileName;
        }
        catch (Win32Exception)
        {
            // TODO:Handling Zugriff nicht erlaubt.
        }
        finally
        {
            if (process != null)
            {
                process.Close();
            }
        }
    
        return fileName;
    }

    Wie man an der Länge dieses Listings unschwer erkennen kann, im Vergleich zur Länge der Lösung in diesem Beitrag, bietet der verwaltete Weg eine sehr komfortable und einfache Lösung an. Es lohnt sich also meistens etwas genauer in die Dokumentation des .NET-Framework zu sehen.

    Filesync-Service: Dropbox

    14.09.2008 08:49:01 | Lars Keller

    Heute bin ich auf den Filesync-Service Dropbox gestolpert und habe diesen gleich ausprobiert. Dropbox ist super schnell installiert und läuft sehr "smooth" ab. Einfach das zu synchronisierende File in den Dropbox-Ordner packen und schon wird es auf den Dropbox Server geladen. Natürlich alles verschlüsselt. Kostenlos steht jedem 2GB Speicherplatz zur Verfügung und es können 10 PCs synchronisiert werden. Weitere Informationen findet man bei diesem Golem Artikel.

    Eine andere Alternative (SYNCING.NET) zeigt Torsten in seinem Blogartikel auf.

    16.09.08 Treffen der .NET Developer Group Braunschweig: Software Design Principles

    14.09.2008 08:18:04 | Lars Keller

    dotnetbs_banner_150

    Die .NET Developer Group Braunschweig trifft sich zu ihrem 24 User Group Treffen am 16.09.08 um 19:00 im Restaurant Kilian's Raffinerie.

    Dieses Mal kommt uns Stefan Lieser mit seinem Vortrag über "Software Design Principles" besuchen:

    Software muss in der Regel über lange Zeiträume gepflegt werden. Die Wartbarkeit einer Software ist daher ein wichtiges Kriterium bei der Entwicklung. Stefan Lieser geht in seinem Vortrag der Frage nach welche Prinzipien bei der Softwareentwicklung hilfreich sind um wartbare Software zu erhalten.

    Weitere Informationen gibt es auf www.dotnet-braunschweig.de

    Wie immer ist jeder herzlich willkommen!

    Zurück von der NRW08

    14.09.2008 08:10:01 | Lars Keller

    Am Freitag, den 12.09.08 fand die NRW08 statt und ich war als Speaker dabei. Ich habe eine Session über VSTO 3.0 & Outlook 2007 Entwicklung gehalten. Die Session zeigte, wie einfach man ein Kontaktformular mit Form Regions, WPF & LINQ erweitern kann.

    olDemoNRW08

    Wer die Outlook Demo haben möchte, kann mir gern eine Email schreiben oder warten, bis diese hier im Blog veröffentlicht wird. Meine Folien gibt es jetzt schon mal ;-) (siehe unten).

    Das Event hat mir sehr viel Spaß gemacht, noch mal herzlichen Dank an das Orga-Team Daniel Fisher und Stephan Oetzel! Nach der NRW08 haben noch einige von uns  Wuppertal erkundet und dabei ein paar "phasige" (insider) Stunden erlebt. ;-)

    Eine Einladung zur nächsten NRW habe ich auch wieder erhalten. Der neue Termin für die NRW-CONF 09 (Achtung neuer Name) steht auch schon fest: 28.08.09. - Ich freue mich schon darauf!

    Trickkiste goes Silverlight

    13.09.2008 18:56:53 | Norbert Eder

    Die Trickkiste ist eine der beliebtesten Seiten hier auf meinem Blog und war bisher eine reine Linksammlung zu ausgesuchten Blogeinträgen. Das hat sich nun auch nicht wirklich geändert. Was aber neu ist:

    Die Einträge werden nicht mehr nur als simple Links angezeigt, sondern werden nun durch eine Silverlight-Anwendung präsentiert. So ist es nun möglich, durch die einzelnen Kategorien zu klicken, als auch nur über die enthaltenen Artikel zu suchen.

    Wie steht ihr zu dieser Veränderung?

    Teil 2: Wie kann ich Workitems live anpassen und diese Änderungen wieder in das Process Template importieren?

    13.09.2008 17:38:47 | Christian Binder

    image

    Wie bekommen wir die Änderungen wieder in das Process Template, um neue Team Projekte mit dem aktuellen Stand zu erzeugen? Im ersten Schritt exportiert man die Workitem Definition und speichert diese als File z.B. Bug.xml:

    A1

    Das Original Template via Process Template Manager vom Server laden und lokal speichern, wenn nicht schon passiert:

    A2

    Es befinden sich jetzt die geänderte Workitem Definition und das Original Template lokal im File System. Das Process Template nun offline öffnen und anpassen:

    A3

    ProcessTemplate.xml zum öffnen selektieren:

    image

    Die geänderte Workitem Definition in das Template importieren. Erst die alte Workitem Definition „Bug“ löschen! A4

    Zum Import das Bug.xml File selektieren und importieren. An diesem Punkt würde man alle notwendigen Ressourcen aktualisieren. Danach das Process Template unter anderer Version speichern:

    image

    Es folgt der Upload des Process Templates via Process Template Manager auf den Server:

    image

    Erstellen eines neuen Team Projektes mittels aktuellem Template:

    image

    Done :-)

    Viel Spass

    Chris

    Configuring Multiple Authentication Providers for SharePoint 2007

    13.09.2008 09:07:00 | Ozgur Aytekin

    Windows SharePoint Services (WSS) V3 contains several new features around authentication and authorization that make it easier to develop and deploy solutions in Internet facing environments, especially extranets. In the previous version of WSS, all security principals needed to resolve at some point to a Windows identity – either a user account or group. WSS V3 is built upon the ASP.NET 2.0 Framework, which allows the use of forms-based authentication (FBA) to authenticate users into the system. By riding on top of ASP.NET 2.0’s pluggable authentication provider model, you can now support users stored in Active Directory as well as SQL Server, an LDAP directory, or any other directory that has an ASP.NET 2.0 Membership provider. Although WSS V3 will not ship with any Membership providers, Microsoft Office SharePoint Server (MOSS) 2007 will include an LDAP V3 Membership provider, and ASP.NET 2.0 includes a SQL Server provider. But if you want to use a directory and can’t find a Membership provider for it, you can write your own! This is a key technology enabler for heterogeneous environments.

    Configuring Multiple Authentication Providers for SharePoint 2007

    Office SharePoint Server 2007 Business Data Catalog

    13.09.2008 09:01:00 | Ozgur Aytekin

    The BDC is essentially a catalog of business applications that are of interest to SharePoint Server 2007 users, and it bridges the gap between the portal and business applications by bringing in key data from various applications to SharePoint sites, lists, search, and user profiles. The BDC is the key infrastructural component around which most of the other business data features of SharePoint Server 2007 are built. Administrators can register business applications in the BDC, after which the data in the application is immediately available to SharePoint through the business data features described below. A key requirement for each registered business application is an XML-based metadata model that describes the application programming interfaces (API) of the application or the schema of the database that maps to business objects (e.g. customer) and properties (e.g. name) that a SharePoint user can understand. These metadata models can be easily created by DBAs or database developers.

    Business Data Catalog

    FIX: The Visual Studio 2005 IDE may stop responding or may respond very slowly

    13.09.2008 08:44:00 | Ozgur Aytekin

    FIX: The Visual Studio 2005 IDE may stop responding or may respond very slowly after you perform some operations to a form that has a complex DataSet control, a DataGridView control, and some DataAdapter controls in a windows-based application.

    In the Microsoft Visual Studio 2005 IDE, you create a windows-based application that contains a form. The form has a complex DataSet control, a DataGridView control, and some DataAdapter controls. The IDE may stop responding or may respond very slowly when you perform one or more of the following operations:
    • You edit the code windows and then open the form designer.
    • You drag a field from the DataSet control to the designer.
    • You right-click the component tray of the form design window and then select Line Up Icons.
    • You drag the DataGridView control from data sources to the form.

    FIX: The Visual Studio 2005 IDE may stop responding or may respond very slowly after you perform some operations to a form that has a complex DataSet control, a DataGridView control, and some DataAdapter controls in a windows-based application

    Open XML Format SDK 2.0

    13.09.2008 08:15:00 | Ozgur Aytekin

    Open XML is an open ECMA 376 standard and is also approved as the ISO/IEC 29500 standard that defines a set of XML schemas for representing spreadsheets, charts, presentations, and word processing documents. Microsoft Office Word® 2007, Microsoft Office Excel® 2007, and Microsoft Office PowerPoint® 2007 all use Open XML as the default file format.

    The Open XML file formats are useful for developers because they use an open standard and are based on well-known technologies: ZIP and XML.

    The Open XML Format SDK 2.0 is built on top of the System.IO.Packaging API and provides strongly typed part classes to manipulate Open XML documents. The SDK also uses the .NET Framework Language-Integrated Query (LINQ) technology to provide strongly typed object access to the XML content inside the parts of Open XML documents.

    Open XML Format SDK 2.0

    Maschinelle Uebersetzungen bei MSDN Online – Ihre Meinung ist gefragt

    12.09.2008 18:14:52 | Kay Giza

    Sie sind gefragt: Was halten Sie von zukünftiger maschineller Übersetzung von MSDN-Inhalten ins Deutsche? Der Windows Live Translator als gegenwärtiger Stand der Technik wird bei MSDN und TechNet in Zukunft dabei helfen, Ihnen englischsprachige Inhalte maschinell übersetzt anzubieten und damit die aufwändige und zeitverzögerte Übersetzung durch professionelle Übersetzer ersetzen. John Martin beschreibt in seinem Blog ein Addin, das Sie auf Ihre Website einbauen können, und lädt zum Feedback ein. Testen Sie selber die Übersetzungsqualität, und hinterlassen Sie uns in Johns Blog sowie unter der angegebenen Feedbackadresse Ihre Meinung zur Ausgereiftheit der Technologie für die an Sie gerichtete Übersetzung technischer Artikel ins Deutsche. Als erste Feuerprobe können Sie auch heute schon einen aktuellen Artikel aus dem englischsprachigen MSDN Magazine maschinell übersetzen lassen und das Ergebnis mit dem der traditionellen Arbeit des Übersetzers im deutschsprachigen MSDN Magazine vergleichen.

    Link: Maschinelle Übersetzungen bei MSDN Online – Ihre Meinung ist gefragt 

    This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
    Visit:  MSDN Online | Kostenfreie MSDN Service-Hotline für Entwickler
    Daily News on MSDN:   MSDN Aktuell
    © Copyright 2006-2008 Kay Giza. All rights reserved. Legal

    Hug a developer today [FUN oder doch nicht?]

    12.09.2008 18:06:07 | Kay Giza

    Ohne Worte! Schönes Wochenende!
    Ach - und irgendwie ist doch etwas Wahres dran ;-)

    >>

    Gut das wir eine Lösung dafür haben ;-)



    This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
    Visit:  MSDN Online | Kostenfreie MSDN Service-Hotline für Entwickler
    Daily News on MSDN:   MSDN Aktuell
    © Copyright 2006-2008 Kay Giza. All rights reserved. Legal

    Teil 1: Wie kann ich Workitems live anpassen und diese Änderungen wieder in das Process Template importieren?

    12.09.2008 16:09:10 | Christian Binder

    Mit den TFS Power Tools gibt's den Process Template Editor, der es ermöglicht den bestehenden Prozess anzupassen. Nun wurde ich des Öfteren gefragt, wie man die Anpassungen am Prozess in das Process Template wieder importiert, um somit neue Projekte mit dem aktuellen Prozess erstellen zu können. Leider gibt es die Funktion "Save active Team Project to template" nicht, sonst könnte ich hier aufhören :-)

    Also hier alle Schritte Step by Step, vom Ändern des aktuellen Prozesses (Teil1) bis zum Importieren der Änderungen in das Template (Teil2). 

    Im aktiven Projekt ein Workitem ändern:

    W1

    Das Workitem im gewünschten Team Projekt selektieren, in diesem Fall den Bug.

    Als Änderung füge ich eine neue Textbox hinzu, wozu erst eine neue Field Definition angelegt werden muss. Hierzu wird der Name, der Typ und der RefName definiert. Der RefName ist ein eindeutiger Identifier auf dem TFS: 

    W2 

    Im Layout Tab kann der aktuelle Bug im Preview angezeigt werden und die neue Textbox hinzugefügt werden:W3

    Die Properties des Controls setzen, Label definieren und den FieldName an den RefName von MyNewField binden:

    W4

    Speichern, die Änderungen werden live auf dem Server durchgeführt. Im Team Explorer einen Refresh durchführen und einen neuen Bug erzeugen. Siehe da wir haben eine neue Textbox:

    W5

    Im Teil2 importieren wir diese Änderung in das Process Template.

    Viel Spass

    Chris

    Ausgepackt: neue Schönheit aus dem Hause Expression entblättert...

    12.09.2008 12:58:00 | Steffen Ritter

    Woohoo! Eben kam meine erste (eigene) Expression Professional Subscription – das Wochenende ist gerettet! Ihr seid alle eingeladen diese unbändige Freude mit mir zu teilen; und was wäre angemessener, als alle Welt daran Teil zu haben, wie ich diese designbewusste Schönheit auspacke:

    EPS

    1. Hey Good Looking...

    EPS 

    2. Ohne das hübsche Schleifchen...

    EPS 

    3. Ohne Frontverkleidung, aber immer noch geheimsnivoll verhüllt...

    EPS 

    4. Ich freu mich auch Dich zu sehen...

    EPS

    5. Die letzte Hülle ist gefallen, jetzt wird es spannend!

    EPS 

    6. Ist das da Deine Handtasche?

    EPS

    7. Das geöffnete Handtäschchen...

    EPS 

    8. Immer wieder unglaublich was alles in so ein kleines Täschchen passt... Haben die keine Böden?

    EPS

    9. Weiter gehts... Spitze(n)?

    EPS

    10. Oha, die Schöne ist voller versteckter Überraschungen...

    EPS

    11. ...fast vorbei... 

    EPS 

    12. Letzter Einblick...

    EPS 

    13. Expression Professional Subscription ... auch von hinten schön!

    EPS

    14. Und nochmal alle gemeinsam...

    Das Software-Abonnement Expression Professional Subscription ist der günstigste Weg, immer die neuesten Microsoft-Tools für professionelle Interface Designer, Webdesigner und Entwickler von Rich Internet Applications (RIAs) zu nutzen. Abgebildet ist die englische Fassung, die Subscription ist auch in Deutsch erhältlich. Zusätzlich enthält jedes Abonnement zwei kostenfreie Supportanfragen. Angesichts der schnellen Entwicklungszyklen der Expression-Produkte ist ein Lizenzabonnement mit einer festen Kostenstruktur die ideale Lösung, um die Gesamtausgaben für Softwarelizenzen zu reduzieren. Darüber hinaus werden die Kosten für Software besser planbar und somit leichter zu budgetieren. Die Expression Professional Subscription erleichtert außerdem die korrekte Lizenzierung für Ihre Mitarbeiter.

    In Expression Professional Subscription ist die folgende Software enthalten:

    • Microsoft Expression Studio 2 (Web, Blend, Media, Design & Encoder)
    • Visual Studio 2008 Standard Edition
    • Microsoft Windows XP
    • Microsoft Windows Vista Business
    • Virtual PC
    • 2007 Microsoft Office
    • Office Visio 2007 Professional
    • Parallels Desktop für Apple Macintosh
    • Vorkonfigurierte virtuelle Serverumgebungen

    Weitere Infos unter:

    Architektur Roundtripp - Ein Wochen-Review

    12.09.2008 12:30:07 | Rainer Schuster

    Nachdem ich schon vor einigen Monaten immer mal wieder etwas über DDD gehört und gelesen hatte (meine Amazon Wunschliste ist voll mit Patterns- und DDD Büchern) habe ich nun mit dem Quickguide und den Videos von Eric Evans begonnen, wie im letzten Post berichtet.

    Was hat sich diese Woche noch so getan? Also ich bin meinem Schritt DDD zu reflektieren ein großes Stück näher gekommen. Wenn sich alles so weiter entwickelt, wie ich mir das Wünsche, werde ich auf der .NET Open Space am 19.10. fit genug sein um mit den dort Anwesenden zu diskutieren. Darauf freue ich mich schon sehr, da ich weiß, dass solche persönlichen Treffen einen weitaus höheren Gehalt besitzen, als über Blogs und Newsgroups zu kommunizieren.

    An dieser Stelle möchte ich mich schon mal sehr bei allen ALTNETDE Usern für ihre tatkräftige Unterstützung bedanken und gleichzeitig etwas Werbung für die ALT.NET Gemeinde in Deutschland machen. Neben den eher theoretischen Diskussionen zu DDD sind ja vor allem auch Technologiethemen sehr gefragt.

    Im Bereich Technologie konzentriere ich mich momentan vor allem auf ORM. Aus der ganze OR-Vielfalt kristallisieren sich für mich NHibernate (NH) und das EntityFramework (EF) heraus, wobei ich NH in der jetzigen Version als kompetenter ansehe. Das alles aus dem Gesichtspunkt, eine gute Architektur aufbauen zu können. Sollte an sich auch kein Wunder sein, da es doch auf die Erfahrungen und Entwicklungen aus der Java-Welt zurückgreifen kann. NH stellt meiner Meinung nach momentan einfach das bessere Framework dar, um DDD als Pattern erfolgreich anzuwenden.

    Das soll nicht heißen, dass ich andere ORM kategorisch ablehne und diese nicht geeignet sind. Ich bin gerade heute über David Haydens Blog auf einen Post gestoßen, indem ein Adapter für das EF gezeigt wird, um damit das Repository Pattern (siehe Fowler PoEAA) abbilden zu können. Sebastian Jancke hat mich gestern auf einen Artikel von Jeffry Palermo über seine so genannte Onion Architektur (und folgende) aufmerksam gemacht, den sich unbedingt alle durchlesen sollten, die mit Architektur etwas anfangen können und wollen.

    Mit der nächsten Version 2.1 von NH wird LinqToNHibernate einzug halten. Das wird dem Projekt sicher noch einmal einen Boost geben, liegt doch LINQ momentan so im Trend. Ich selbst verfolge das ganze mit Spannung, da ich auch ein großer Fan von Oren 'Ayende Rahien' Eini bin, der für die Implementierung verantwortlich ist.

    Und so schließt sich der Kreis. Von den ersten sinnvollen Gehversuchen mit NH und EF und dem Erforschen einer Architektur die auf Jahre gesehen wartbar und erweiterbar bleibt komme ich immer wieder auf DDD. Ein Allerheilmittel wird auch DDD nicht sein, denn gerade im Bereich Persistierung habe ich das Gefühlt gibt es noch so seine Schwierigkeiten im Model. Änderungen am Schema zum speichern der Daten (z.B. der Sql-Datenbank) sind schwer zu vermitteln und in die Architektur zu implementieren. Sie sind aber weder unmöglich, noch so extrem, dass sie hier ein negatives Licht auf DDD werfen würden.

    Es geht ja auch nicht darum, komplexe Vorgänge durch einfache zu ersetzen. Dafür sind sie eben komplex! Es geht darum diese Komplexität, die in allen Belangen und Schichten in der Architektur entsteht besser begreiflich zu machen und letztendlich in den Griff zu bekommen. Losgelößt von dem ganzen Technologie-Hype.

    Ja wann lohnt es sich denn, neue Technologien zu lernen und einzusetzen? Ralf Westphal hat sich erst kürzlich darüber in der Aschenputtel-Strategie schon seine Gedanken gemacht. DDD hilft uns diese Technologie-Barrieren zu überwinden und uns auf das zu konzentrieren, was wir schon seit Jahren, einige schon seit Jahrzehnten machen, nämlich Software. Und zwar wollen wir der Software sagen was wie zu funktionieren hat und nicht umgekehrt.

    Ich selbst bin jetzt seit genau 10 Jahren in diesem Business. Am 01.09.1998 habe ich meine Ausbildung als Fachinformatiker begonnen und sie drei Jahre später erfolgreich beendet. In den letzten 10 Monaten habe ich wohl das bisher meiste gelernt, was gutes Softwaredesign angeht. Ich denke das kommt auch immer darauf an, woran jeder selbst glaubt und ob die anderen an einen Glauben. Jeder der sich jetzt fragt "Bin ich dafür geeignet" dem kann ich diese Frage mit ja beantworten.

    Vor kurzem erst von einem Forums-Mitglied zum Profi "geadelt", würde ich mich selbst als eher bescheiden ansehen, da ich noch soviel zu lernen habe. Selten sehe ich noch was hinter mir liegt, zumindest den Aufwand nicht. Was ich geleistet habe wird mir schon immer wieder bewußt. Aber viel mehr konzentriere ich mich darauf, was vor mir liegt und wie ich das, was nicht optimal läuft, noch runder machen kann. Und im Moment scheine ich ein gute Kreisschablone in DDD gefunden zu haben.

    An alle da draußen, Danke für die sagenhaft gute Unterstützung innerhalb der ALT.NET Gemeinde. Ich finde es schön, nicht vom Kapitalismus und dem Geld getrieben zu sein, wie es ja in unserer Gesellschaft leider zu oft der Fall ist, sondern bei ALTNET-lern immer ein offenes Ohr zu finden. Hier steht die Hilfsbereitschaft und nicht das Kapital aus dem Mainstream im Vordergrund. So erlebe ich das zumindest in der deutschen ALT.NET. Ich erlebe ALT.NET und viele OpenSource Kontributoren als eine Art Soziale Gemeinde.

    "Keep on the good stuff!"

    Impressionen meiner Hochzeit

    12.09.2008 12:05:58 | Norbert Eder

    Eine Hochzeit ist ein wunderschönes Ereignis, an dem nur leider nicht alle teilnehmen können. Daher möchte ich einige Fotos bereit stellen - schließlich wurde ich bereits von zahlreichen Freunden, Bekannten und Lesern darauf angesprochen.







    Die Fotos wurden übrigens vom Fotostudio Furgler geschossen.

    75 nützliche JavaScript Techniken

    12.09.2008 10:03:25 | Jürgen Gutsch

    Wieder mal was neues von Smashing Magazine: Im neuesten Beitrag werden 75 nützliche JavaScript Techniken vorgestellt. Verschiedenste Menü und Gallery Scripts sind genauso dabei, wie Techniken für den neuen Parallax Effekt oder Autovervollständigung für Suchfelder und diverse Charting Libraries.

    http://www.smashingmagazine.com/2008/09/11/75-really-useful-javascript-techniques/

    Technical Summit 2008 Gewinnspiel: Das Ergebnis

    12.09.2008 09:11:17 | Norbert Eder

    Das Gewinnspiel zum Technical Summit 2008 ist vorbei und die glücklichen Gewinner wurden gezogen.

    Die richtigen Antworten waren:
    • Frage 1: Antwort A
    • Frage 2: Antwort A
    • Frage 3: Antwort A
    • Frage 4: Antwort C

    Die glücklichen Gewinner sind:

    Eine entsprechende Benachrichtigung wurde per Email ausgesendet.

    Den Gewinnern möchte ich meinen Glückwunsch aussprechen, als auch ein Dankeschön an die zahlreichen Teilnehmer.

    Matt Berseth's ASP.NET Demo Gallery

    12.09.2008 09:06:00 | Jürgen Gutsch

    Der .NET Entwickler Matt Berseth hat unter http://mattberseth2.com/demo/ eine umfangreiche Demo Gallery zum den Themen ASP.NET, AJAX, Silverlight und JavaScript angelegt. Hier zum Beispiel ein Datei Upload mit einer "Teal-Time" Progress Bar.

    Absolut lesenswert ist natürlich auch sein Blog.

    Ende des Gewinnspiel

    11.09.2008 21:45:04 | Robert Mühsig

    Gestern endete das Gewinnspiel wo es 2 Tickets zur Technical Summit und ein Visual Studio 2008 zu gewinnen gab.

    Die richtigen Antworten:

    • Frage 1: A
    • Frage 2: A
    • Frage 3: A
    • Frage 4: C

    Die glücklichen Gewinner:

    • Fabian H. - Visual Studio 2008
    • Mario P. - Eintrittskarte zum Technical Summit
    • Michael S. - Eintrittskarte zum Technical Summit

    Die Gewinner habe ich per Email benachrichtigt und gratuliere ihnen hier auch nochmal :)

    Vielleicht sieht man sich auf der Technical Summit Konferenz - ich bin als ATE dort vertreten, sowie auch als ATE auf der Xtopia.

    ShareThis

    MSDN Social Bookmarking

    11.09.2008 19:12:49 | Norbert Eder

    Wie Kai Giza berichtet, ist MSDN Social nun online.

    Damit erhält der Benutzer die Möglichkeit, eigene Bookmarks zu verwalten. Diese können öffentlich, als auch privat sein. Darüber ist es zusätzlich möglich, schnell interessante Inhalte zu finden. Ebenfalls können "fremde" Inhalte abonniert werden.

    Insgesamt eine nette Idee und auf jeden Fall förderlich für die MSDN. Vollständige Informationen zu diesem Thema finden sich hier.

    Einfache Verbesserungen für kleine Teams

    11.09.2008 18:55:54 | Norbert Eder

    Immer wieder, wenn ich mit kleinen Entwickler-Teams zu tun habe, sehe ich, dass dieselben Probleme vorhanden sind. Meist dreht es sich um die folgenden Punkte:
    • Das Projekt wurde nicht ausreichend spezifiziert. Der Auslöser für das Projekt kennt die genauen Anforderungen, brachte diese jedoch nie vollständig in ein Dokument. Sollte ein Dokument vorhanden sein, findet dieses oft nicht den Weg zum Entwickler. Daher erhält dieser oft unzureichende Informationen, um das Projekt erfolgreich durch zu führen.
    • Keine Arbeitspakete. Soll ein Projekt durchgeführt werden, muss eine Analysephase durchlaufen werden. Im Zuge dieser Phase sind Arbeitspakete zu definieren. Diese erleichtern zum Einen die Abgrenzung zu anderen ToDo's und ermöglichen eine Kontrolle. Zeitschätzungen dafür werden sehr oft ebenfalls nicht angegeben. Deswegen gestaltet sich eine Kontrolle schwierig.
    • "Drauf-los-Entwicklung". Die Vorgaben sind bekannt und es wird einfach einmal entwickelt. Zukünftige Anforderungen werden nicht in Betracht gezogen, auch wird erst bei der Integration der einzelnen Teile in Erfahrung gebracht, ob diese überhaupt miteinander harmonieren. In den meisten Fällen sind größere Änderungen notwendig.
    • Kontrolle. Zum Thema Kontrolle gibt es zwei Wege die hauptsächlich durchschritten werden: Entweder findet keine Kontrolle statt (oder erst ca. 2 Wochen vor Auslieferung) oder es wird versucht das ultimative Kontrollsystem einzuführen. Oft wird hierbei jedoch auf notwendige Vorarbeiten vergessen, wodurch eine Kontrolle gar nicht durchgeführt werden kann (Arbeitspakete in Kombination mit Zeitschätzungen als Beispiel).
    • Ressourcen-Planung. Ressourcen müssen geplant werden. Freie Kapazitäten sollten vor Annahme eines Projektes bekannt sein. Ebenso sollte bekannt sein, dass eventuell zwischenzeitlich Ressourcen für andere Projekte abgestellt werden müssen - und zu welchem Umfang. Viele Teams werden von plötzlicher Ressourcen-Knappheit überrascht, da plötzlich Entwickler zu anderen Projekten abgezogen werden müssen. Es gilt daher eine saubere Ressourcen-Planung durch zu führen und - wenn notwendig - frühzeitig für Ausgleich zu sorgen.
    • Der fehlende Architekt. Nicht jeder Softwareentwickler ist zum Architekten geboren. Großes Wissen und viel Erfahrung ist notwendig, um zukunftssichere Grundgerüste zu entwickeln. Gerade kleine Teams haben oft keinen "gelernten" Architekten zur Verfügung. In diesem Fall kommt es für die meisten Projekte billiger, sich zumindest für das Grundgerüst eine entsprechende Person zu zu kaufen.

    Dies sind einige Punkte, auf die ich immer wieder in der Praxis stoße. Die einen Teams leben dabei nach dem Motto "Es wird schon irgendwie gehen", wobei die anderen definitiv nach Verbesserung streben. Ich persönlich kann nur jedem Team bzw. jedem kleinen Softwareunternehmen raten, sich zumindest für ein paar Stunden einen Spezialisten zu zu kaufen. Sind bisherige Abläufe bekannt (grobe Abläufe lassen sich in kurzer Zeit ohne Weiteres feststellen), können selbst kleine Änderungen große positive Auswirkungen auslösen.

    Will ein Unternehmen dafür kein Geld an externe Personen vergeben, dann sollten zumindest meine aufgeführten Punkte mit der eigenen Vorgehensweise reflektiert werden. Alleine daraus lassen sich einige Verbesserungsmaßnahmen ableiten.

    Software-Architektur Wochen in Bonn und Köln

    11.09.2008 15:25:31 | Albert Weinert

    In den nächsten Wochen veranstalten die Usergroups Köln und Bonn eine wahres Fest für Interessierte in Software-Architektur.

    Den Anfang macht am 18.09.2008 der TechTalk@Bonn-To-Code.NET, Dirk Primbs entfesselt den Client und zeigt wie man moderne Oberflächen mit WPF plant, gestaltet und umsetzt. Dirk ist Developer Evangelist bei Microsoft Deutschland.

    Elf Tage später am 29.09.2008 wieder bei Bonn-To-Code.NET spricht Jean-Paul Boodhoo. Gemeinschaftlich haben die Kölner und Bonner Usergroups Jean-Paul als Sprecher für Behavior Driven Development (BDD) gewinnen können. Jean Paul ist Berater, Trainer, WebCaster und berüchtigt für seine .net boot camps.

    Kaum 8 Tage später trifft man sich am 07.10.2008 bei der .net user group Köln dort wird Sebastian Jancke die Geheimnisse des Domain Driven Design (DDD) lüften. Sebastian ist Software-Entwickler mit Leidenschaft für Agile Methoden und ALT.NET-Themen.

    Also, es viel los in der Köln/Bonner Region, kommt zahlreich, kommt interessiert, wir erwarten euch.

    Was sind die Grenzen der WPF Entwicklung?

    11.09.2008 10:03:00 | Jens Peter Kleinau

    Die oben stehende Frage versuchte ein Benutzer des Expertenportals "Experto.de" mehrfach bei mir als dort definierter Experte für .Net zu platzieren. Irgendwelche Richtilinien verhinderten jedoch dies und mein Versuch, diese nicht so unwichtige Frage zu beantworten, endeten in einem 404 Error "Seite nicht gefunden". Daher nun hier die Antwort, in der Hoffnung, dass der...

    [[ This is a content summary only. Visit my website for full links, other content, and more! ]]

    Launched: Social Bookmarking V1 auf MSDN Online

    11.09.2008 08:50:03 | Kay Giza

    Social BookmarksEs freut mich ankündigen zu dürfen, dass MSDN Deutschland und MSDN Weltweit die 1. Version der MSDN Social-Platform veröffentlich hat.
    Nachdem wir seit Mai 2008 eine PreView-Version davon im Internet hatten (ich berichtete), steht nun erstmals die finale Version bereit.

    Wie ich aber auch schon berichtet hatte, ist das Thema Bookmarking nur ein Teil einer großen Social Platform auf MSDN.
    In diesem Release enthalten sind z.B.:

    • MSDN Bookmarks
      Mit dem neuen Service ‚MSDN Social Bookmarks’ können Sie all' Ihre Favoriten online speichern. Sie sehen, was andere Entwickler für wichtig und interessant halten, Sie können Experten recherchieren, Ihre Bookmarks auch auf der MSDN Website veröffentlichen und so mit anderen teilen.
    • Schnell und einfach die wichtigen Themen finden?
      Ob Online auf dem Portal oder per RSS - zu jedem interessanten Thema kann man die beliebtesten Bookmarks, Forenbeiträge etc. pp sich anzeigen lassen, abonnieren und sich selbst sortieren.
      Dabei kann man z.B. den Zeitraum einschränken (z.B. die beliebtesten Bookmarks der letzten 7 Tage) oder immer auf die aktuellsten neusten Hinweise sich konzentrieren.
    • Finde andere Benutzer und abonniere Ihre Inhalte
      Interessiert es Sie z.B., welche Bookmarks ich erstelle, so gehen Sie doch einfach zu meinem Profil - Kay Gizas Bookmarks - und abonnieren Sie dort per RSS meine Bookmarks oder letzten Forums Posts. 
    • Bookmarks auf MSDN Online?
      Wie man John Martin's post von letzter Woche entnehmen kann, werden z.B. von Experten und sehr aktiven Usern die Bookmarks (je nach Zustimmung) auch auf MSDN Webseiten veröffentlicht. Sehr interessant wie ich finde!
    • Benutzerprofile?
      Ihr Online-Profil auf MSDN ist ein integraler Bestandteil der neuen User Experience auf MSDN Online, inkl. einem Avatar, Hyperlinks, einem aktuellen Status Ihrer letzten Beiträge, Ihrer Social Bookmarks oder gar Ihrer letzten Kommentare in der MSDN Library. Mein Profil z.B. finden Sie hier. Melden Sie sich an und machen Sie die MSDN-Website zu Ihrer eigenen.
    • Bookmarks importieren!
      Impoprtiere Deine Favorieten aus dem Internet Explorer oder Firefox oder gar von Delicious. Wo? Auf unserer Tools-Seite.
    • MSDN Bookmark Widget
      Sie können auch ganz einfach ein Widget auf Ihrer Webseite installieren?
      Sie sehen es auf der linken Seite in meinem Weblog bei "Interessante Links" - alles was dazu wissen muss finden Sie auf der Tools-Seite.
      Oder kopieren Sie sich den Code direkt hier raus: <script type="text/javascript" src="http://Services.social.microsoft.com/widgets/bookmark.jss?type=0&brand=Msdn&locale=1031"></script>
    • MSDN Bookmarklet
      Ein Bookmarklet ist eine Schaltfläche in Ihrem Browser, die eine einfache Möglichkeit zum Erstellen von Lesezeichen für Inhalte bietet. Um das Bookmarklet zu installieren, befolgen Sie die die Anweisungen auf dieser Seite.
    • Weitere Informationen
    Videos & Informationen

    Video: MSDN & TechNet Social Bookmarking V1 Interview
    >

    Video: MSDN & TechNet Social Bookmarking: How To, Part 1
    >

    Video: MSDN & TechNet Social Bookmarking: How To, Part 2
    >




    This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
    Visit:  MSDN Online | Kostenfreie MSDN Service-Hotline für Entwickler
    Daily News on MSDN:   MSDN Aktuell
    © Copyright 2006-2008 Kay Giza. All rights reserved. Legal

    Die Snippets twittern!

    11.09.2008 00:36:34 | Jan Welker

    twitter Seit einigen Wochen bin ich bei Twitter registriert und hab dort sofort die üblichen Verdächtigen wiedergefunden ;-) Inzwischen nutze ich den Dienst regelmäßig. Die Mischung von Messenger, Chat, Forum, SMS ... macht irgendwie Spaß.

    Seit heute ist auch die Seite dotnet-snippets.de bei Twitter angemeldet ;-) und wird allen Verfolgern die neuesten Snippets zu zwitschern :-)

    Die Snippets sind unter diesem Link zu erreichen: http://twitter.com/dotnet_snippets

    Wer die Twitter API mit VB oder C# ansprechen will, dem empfehle ich diesen Wrapper: http://devblog.yedda.com/index.php/2007/05/16/twitter-c-library/

    PS: Mein Twitter Profil ist: http://twitter.com/jan_welker

    Have Fun!

    HowTo: Dynamisch Webseiten-Screenshots erzeugen

    10.09.2008 23:49:48 | Robert Mühsig

    In diesem HowTo geht es darum, dynamisch ein Screenshot von einer beliebigen Seite zu erstellen.

    Der Sinn dahinter
    Bei vielen News-Aggregator (oder wie man diese nun nennen mag) Seiten gibt es kleine Vorschaubilder, wie z.B. bei dotnetkicks.com oder yigg.de:

    image
    image

    Da das ganz nett aussieht (und es sicherlich auch noch viele andere Anwendungsfälle gibt) wollen wir das mal mit .NET versuchen

    Klingt schwerer als es ist:

    Der gesamte Code um ein Screenshot zum Erzeugen ist folgender:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Drawing;
    
    namespace WebPageScreenshots
    {
        class Program
        {
            [STAThread]
            static void Main(string[] args)
            {
                WebBrowser wb = new WebBrowser();
                wb.ScrollBarsEnabled = false;
                wb.ScriptErrorsSuppressed = true;
                wb.Navigate("http://code-inside.de");
                while (wb.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); }
    
                wb.Width = wb.Document.Body.ScrollRectangle.Width;
                wb.Height = wb.Document.Body.ScrollRectangle.Height;
    
                Bitmap bitmap = new Bitmap(wb.Width, wb.Height);
                wb.DrawToBitmap(bitmap, new Rectangle(0, 0, wb.Width, wb.Height));
                wb.Dispose();
    
                bitmap.Save("C://screenshot.bmp");
    
            }
        }
    }
    

    Wir benutzen einfach den “WebBrowser” aus der “System.Windows.Forms” Assembly.
    Mit diesem Navigieren wir zu einer beliebigen Adresse und warten ab, bis die Seite geladen ist (die while Schleife).

    Jetzt laden wir die Seite über “DrawToBitmap” in ein Bitmap (Assembly “System.Drawing” benötigt) und speichern dies (… ganz schlampig auf C ;)).

    Verstecktes “Feature” im WebBrowser
    Auf der MSDN findet man nichts was auf “DrawToBitmap” hindeutet und auch über IntelliSense wird es nicht angezeigt:

    image

    Wenn man mit der Maus allerdings über die Methode drüber geht erscheint folgender Text:

    image 

    Warnung
    Es ist sehr leicht solch ein Bitmap zu erzeugne, ist allerdings für den Prozessor etwas rechenintensiv und auch allgemein für die Performance eher schlecht. Daher wird z.B. bei dotnetkicks immer erst dieses “Warte Bild” gezeigt.
    Da das ganze auch nicht wirklich supportet ist, sollte man etwas vorsichtig damit umgehen.

    Das ganze habe ich auf diesem Blog gefunden (und den Source Code ungefähr auch so übernommen - also nicht wundern).

    [ Download Sourcecode ]

    ShareThis

    Office Open XML Format SDK Vortrag auf der NRW08

    10.09.2008 21:44:28 | Mathias Raacke

    Gestern (oder war's schon vorgestern? Bin so im Stress das die Tage schon wieder viel zu kurz sind) hat mich Daniel angerufen und gefragt, ob ich kurzfristig noch einen Vortrag auf der NRW08 halten möchte, da wohl ein anderer Sprecher ausgefallen ist.

    Ich habe zwar eigentlich so gut wie gar keine Zeit, etwas vorzubereiten, und mein neues Notebook ist auch noch nicht da, aber ich habe trotzdem zugesagt. Ist ja schließlich nicht der erste Vortrag, für den ich so wenig Zeit habe ;-).

    Es wird ein Einführungsvortrag zum neuen Open XML Format SDK und dem Office Open XML Format. Ich werde ein paar einfache kleine Beispiele zu Word und Excel Dokumenten zeigen. Der Vortrag ist hauptsächlich für Entwickler gedacht, die sich noch gar nicht oder nur sehr wenig mit Open XML beschäftigt haben.

    Da es seit kurzem die erste CTP des Open XML Format SDK v2 gibt, und damit auch die Open XML Entwicklung so langsam komfortabel wird, ist jetzt sicher ein guter Zeitpunkt, in das Thema einzusteigen.

    Also ich freue mich auf hoffentlich viele Teilnehmer, vielleicht sieht man sich auf der NRW08!

     

    Technorati tags: , ,

    Mehrere CSS-Klassen im Selektor und IE6

    10.09.2008 20:07:00 | Peter Bucher

    Auf vielen Webauftritten sieht man des öfteren CSS-Navigationen die mehrfarbig sind, also jede Sparte ihre eigene Farbe hat.
    Solch eine Formatierung ist auch gut mit CSS zu erreichen, jedoch wartet der Internet Explorer 6 mit einer Falle auf, wenn mehrere CSS-Klassen in einem Element benutzt und per Selektor selektiert werden.

    Nützlich ist die mehrfache CSS-Klassen Zuweisung, wenn ein Element jeweils speziell formatiert werden möchte, die Standardformatierung jedoch als Grundlage verwendet werden möchte.

    Bei folgendem CSS-Selektor wirkt der Punkt und die zweite CSS-Klasse als AND-Verknüpfung:

    .nav1.active { /* Formatierung */ }

    In Deutsch: Wenn ein Element die Klasse "nav1" und "active" besitzt, greift die Regel.
    Mit dieser Art der Selektion hat allerdings der Internet Explorer 6 Probleme, er interpretiert diesen Selektor einfach als den folgenden:

    .active { /* Formatierung */ }

    Das erwünscht zu einem sehr unschönen Nebeneffekt, für die letzten Regel im CSS die zwei Klassen verknüpft greift im IE6 jeweils jedes Element das die Klasse "active" besitzt.
    Die Fehlersuche bei einem solchen Fall erweist sich als sehr mühsam.

    Um dieses Fehlverhalten des IE6 zu umgehen, bietet es sich an für die verschiedenen Navigationspunkte jeweils einen ID-Selektor zu benutzen - die Elemente sind ja auch eindeutig - das sieht dann bspw. so aus:

    #nav1.active { /* Formatierung */ }

    Damit hat der IE6 keine Probleme mehr, da der ID-Selektor ein Element darstellt und nicht eine Klasse irgend eines Elementes.
    Mehr Infos zu dem Fehler, einem möglichen zweiten Workaround bei einer spezifischen Lösung finden sich hier:

    Bild vom Resultat:

    Folgendes Beispiel in eine Html-Datei kopiert zeigt das Fehlverhalten (Getestet kann bspw. mit dem IETester):

    Update: Codetags rausgenommen, leider zerreisst es die Html-Tags.

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Mehrere CSS-Klassen im Selektor und IE6 - Test</title>
        <style type="text/css">
            /* Allgemein */
            h1 { font-size: 0.9em; }
           
            li { display: inline; }
           
            a {
                display: block;
                float: left;
                color: Black;
                text-decoration: none;
                border: 1px solid gray;
                padding: 2px;
            }
           
            a:hover { text-decoration: underline; }
           
            br { clear: left; margin: 10px 0px; }
           
            .active { font-weight: bold; }
           
            /* Mehrfarbig (Mit Klassen) */       
            .multiColor a {
                border-bottom: 4px solid black;
            }
           
            .nav1 { background-color: #4c6691; }
            .nav1:hover { background-color: #8FA1BF; }
            .nav1.active { border-bottom: 4px solid #4c6691; }
           
            .nav2 { background-color: #C99F2E; }
            .nav2:hover { background-color: #DBB859; }
            .nav2.active { border-bottom: 4px solid #C99F2E; }
           
            .nav3 { background-color: #689341; }
            .nav3:hover { background-color: #99C373; }
            .nav3.active { border-bottom: 4px solid red; }
           
            /* Mehrfarbig (Mit IDs) */
            #n1 { background-color: #4c6691; }
            #n1:hover { background-color: #8FA1BF; }
            #n1.active { border-bottom: 4px solid #4c6691; }
           
            #n2 { background-color: #C99F2E; }
            #n2:hover { background-color: #DBB859; }
            #n2.active { border-bottom: 4px solid #C99F2E; }
           
            #n3 { background-color: #689341; }
            #n3:hover { background-color: #99C373; }
            #n3.active { border-bottom: 4px solid red; }
        </style>
    </head>
    <body>
        <h1>Normale Navigation</h1>
        <ul>
            <li><a href="#">Home</a></li>
            <li><a href="#" class="active">Über uns</a></li>
            <li><a href="#">Kontakt</a></li>
        </ul>
        <br />
        <h1>Mehrfarbige Navigation (Mehrere CSS-Klassen)</h1>
        <ul class="multiColor">
            <li><a class="nav1" href="#">Home</a></li>
            <li><a class="nav2 active" href="#">Über uns</a></li>
            <li><a class="nav3" href="#">Kontakt</a></li>
        </ul>
        <br />
        <h1>Test-Liste (IE6-Fehler)</h1>
        <ul>
            <li><a class="active" href="#">Test</a></li>
        </ul>
        <br />
        <h1>Mehrfarbige Navigation (Mehrere IDs)</h1>
        <ul class="multiColor">
            <li><a id="n1" href="#">Home</a></li>
            <li><a id="n2" class="active" href="#">Über uns</a></li>
            <li><a id="n3" href="#">Kontakt</a></li>
        </ul>
    </body>
    </html>

    IPX unter Windows Vista & CNC Red Alert 2 Patch für TCP/IP

    10.09.2008 18:44:00 | Peter Bucher

    Ich oute mich jetzt mal als Echtzeit-Strategie Fan.
    Letztens wollte ich Command & Conquer Red Alert 2 auf Windows Vista spielen, jedoch benötigt RA2 IPX.

    IPX kann auch unter Windows Vista (Allerdings nur 32Bit) installiert werden, siehe:

    Für die 32Bit Versionen und überhaupt gibt es einen inoffiziellen Patch (Wie immer community driven :), der RA2 TCP/IP fähig macht.
    Damit läuft das Spiel wunderbar, auch hier unter Windows Server 2008.

    Siehe für Infos und den Patch:

    Und für alle Old-School Fans, das _Original_ Red Alert gibt es bei EA zum kostenlosen Download:

    Viel Spass!

    Reminder: Gewinnspiel Technical Summit 2008

    10.09.2008 14:55:58 | Norbert Eder

    Wer sich noch nicht für das Technical Summit 2008 angemeldet hat, gerne hin möchte und daher eine günstige Möglichkeit sucht, der sei auf das aktuell laufende Gewinnspiel hingewiesen.

    Das Gewinnspiel läuft heute aus, also ist eine rasche Teilnahme gefragt. Unter obigen Link stehen alle relevanten Informationen zur Verfügung. Los geht's!

    GC08 - Highlights & Giveaways

    10.09.2008 14:43:00 | Lori Grosland

    Wooohoooo!  Mein letztes Games Convention Video für 2008!  Dieses Video sollte das erste veröffentlichte Video sein aber leider gab es ein paar technische Probleme.  Aber besser spät als nie.

    In diesem Video spreche ich mit Frank Halgasch, Xbox Produkt Manager.  Er erzählt mir ein paar Leckerbissen über die Games Convention, das neue Musikspiel Lips, das Xbox Bühnenprogramm und die Xbox Community Highlights auf der GC.  Danach sind verschiedene Videoclip-Highlights von GC08.

    Und nicht zuletzt habe ich ein paar Giveaways von der Games Convention zurückgebracht und will sie jetzt  verschenken.  Ich habe ein Sidewinder Gaming-Maus, 2 Männer Xbox T-Shirts (Große L) , 2 Frauen Xbox T-Shirts (Große M und S), Xbox Halstuch, und Xbox Gürtel.  Schicke mir eine Email vorname.nachname@microsoft.com (natürlich mit meinen Name „Lori Grosland“) und schreibe wie viele Games Convention Videos, ich dieses Jahr veröffentlicht habe und was Ihr gern hättet.  Wer zu erst schreibt mit der richtigen Antwort, kriegt den gewünschten Preis.   :-)

    15. FoxPro Konferenz: Das Programm

    10.09.2008 13:10:05 | Kay Giza

    Auf ihrer Website informiert die deutschsprachige FoxPro User Group (dFPUG) ab sofort ausführlich über die „15. Microsoft Visual FoxPro Konferenz 2008“, die vom 13. bis 15. November dieses Jahres in Frankfurt-Hoechst stattfindet. Die von der Anwendervereinigung organisierte Fachveranstaltung bietet diesmal mehr als 50 verschiedene Vorträge zu Visual FoxPro 9.0 SP 2 / Sedna mit kleinen Ausflügen zu den Themen SQL-Server 2005/2008, Windows Vista und .NET. Parallel zur FoxPro-Konferenz findet ebenfalls in Frankfurt-Hoechst die 7. SQL-Server & .NET-Entwicklerkonferenz statt, die auch von der dFPUG ausgerichtet wird.

    This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
    Visit:  MSDN Online | Kostenfreie MSDN Service-Hotline für Entwickler
    Daily News on MSDN:   MSDN Aktuell
    © Copyright 2006-2008 Kay Giza. All rights reserved. Legal

    Microsoft Sicherheitsupdates September 2008

    10.09.2008 09:51:40 | Kay Giza

    Zu Ihrer Sicherheit bitte umgehend installieren!
    In diesem Monat hat Microsoft vier sicherheitsrelevante Updates veröffentlicht. Sie betreffen unter anderem den Windows Media Player, den Windows Media Encoder sowie Microsoft Office.

    Sicherheitsupdates:

    • MS08-052 – Beseitigung einer Sicherheitsanfälligkeit in Microsoft Windows, Microsoft Office, .NET Framework, Visual Studio, Visual FoxPro, Microsoft Works, Microsoft SQL, Microsoft Forefront und Microsoft Digital Image Suite (KB 954593)
    • MS08-053 – Beseitigung einer Sicherheitsanfälligkeit in Microsoft Windows (Windows Media Encoder) (KB 954156)
    • MS08-054 – Beseitigung einer Sicherheitsanfälligkeit in Microsoft Windows Media Player (KB 954154)
    • MS08-055 – Beseitigung einer Sicherheitsanfälligkeit in Microsoft Office (KB 955047)

    Informieren Sie sich über die verfügbaren Updates. Laden Sie jetzt die Updates für Ihren Computer oder Laptop von der Microsoft Update-Website herunter.  

    Wir möchten an dieser Stelle noch einmal ausdrücklich darauf hinweisen, dass Microsoft niemals Softwareupdates als Anhang von Sicherheitsbenachrichtigungen verschickt, sondern Sie auf diesem Weg lediglich auf ihre Verfügbarkeit hinweist. Sollten Sie also E-Mails erhalten, die vermeintlich von Microsoft stammen und als Anhang angebliche Sicherheitsupdates beinhalten, löschen Sie diese bitte ungelesen!



    This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
    Visit:  MSDN Online | Kostenfreie MSDN Service-Hotline für Entwickler
    Daily News on MSDN:   MSDN Aktuell
    © Copyright 2006-2008 Kay Giza. All rights reserved. Legal

    Unser letzter Tag…

    10.09.2008 08:29:54 | Robert Mühsig

    … ohne schwarze Löcher - und warum das ganze? ;)

    Das Ergebnis:

    image 
    (http://xkcd.com/)

    :)

    ShareThis

    Domain Driven Design - "Hello World!"

    09.09.2008 17:33:03 | Rainer Schuster

    Schön wäre es, wenn wir Domain-Driven Design, oder nur kurz DDD in einem einfachen Programmcode wie "Hallo Welt!" darstellen könnten. In der Tat ist es aber weitaus mehr als nur das. Eric Evans hat diese Art der Modellierung stark geprägt und 2003 einen Bestseller herausgebracht: Domain-Driven Design: Tackling Complexity in the Heart of Software. Das Buch steht bei mir auch ganz oben auf der Wunschliste. DDD lässt sich deshalb nicht einfach in zwei Wörtern beschreiben. Dem Bedarf es etwas mehr.

    Ich will Versuchen, denjenigen unter euch, die mit dem Thema noch gar nicht, oder noch wenig vertraut sind, das Ganze etwas schmackhaft zu machen. Ich selbst stehe erst am Anfang von DDD und werde nun noch ein Themengebiet mehr in meiner Architekturkiste haben. Neben meinen vielen anderen Themen, die mich täglich begleiten, und mit denen ich stetig wachse, soll DDD einen zentralen Punkt in meiner zukünftigen Softwareentwicklung einnehmen - auf dem Weg zum Architekten.

    Das schöne an DDD, und der Art wie Evans es beschreibt, ist die leichte Verständlichkeit und den meiner Meinung nach enormen Gewinn des Wissens, wie wir in unserer Problemdomäne die Software drum herum bauen müssen. Jedes Softwareprodukt bildet im Endeffekt eine Lösung zu einer Problemdomäne. Wichtig ist nun, wie wir das ganze betrachten. DDD dient auch dazu, die Komplexen Vorgänge, die mit zunehmender Größe eines Produktes auftreten besser verstehen zu können. Modellieren wir unsere Diagramm und darauf aufbauend unseren Code gleich richtig, fällt es später leicht, Anpassungen durchzuführen. Dabei beschreibt er schön und auf eine natürliche Art und Weise wie das geht. TDD/BDD und AOP stehen DDD dabei zur Seite und ergänzen die Arbeit damit sinnvoll. Wie und warum das so ist, werden wir späte noch sehen. Lassen wir das für den Anfang erst einmal so stehen.

    Was haben wir also davon? Wir bekommen ein Modell an die Hand, mit der uns die Modellierung, die Architektur unserer Software leichter fallen soll. Er betrachtet das aber nicht nur von der Seite der Softwareentwicklung. Vielmehr geht es ihm darum das anfallende Themengebiet einzugrenzen (um es genau zu spezifizieren) und einen einheitlichen Wortschatz zu bilden. Und es dann im Model für die Entwicklung, wie auch im Ganzen für die Entscheider/Managern/Vertriebler usw. als auch dem Benutzer darzustellen.

    Er analysiert die Probleme und stellt sie im vereinfachten Modell dar. Ein Vorgehen, das ich zur Erklärung von komplexen Vorgängen aus der Betriebs- und Volkswirtschaft bereits kenne, z.B. der Markt. Und die ersten Gehversuche meinerseits sehen vielversprechend aus. Das schöne daran ist, dass wir bei Evans auf eine mehr als zwei Jahrzehnte gewachsene Erfahrung in der Enterprise-Architektur zurückgreifen können. Im Endeffekt sollten es keine neuen Erkenntnisse sein. Denn Modellierung haben wir davor auch schon betrieben.

    In der deutschen Literatur habe ich hier bisher leider nichts Gleichwertiges gefunden. Daher geht es nach dieser kurzen Einführung gleich zum ersten Startpunkten über DDD für Einsteiger in Englisch. Lest selbst nach und entscheidet dann, was für euch sinnvoll ist. Für mich wird es auf jeden Fall ab sofort eine zentrale Rolle in der Softwareentwicklung einnehmen.

    An alle die hier ab und zu rein schauen, würde ich mich über weitere Literaturempfehlungen und Erfahrungen freuen.

    Project Rosetta: From Flash to Silverlight

    09.09.2008 16:22:00 | Steffen Ritter

    In Zusammenarbeit mit Richard Barraza von Cynergy haben zwei meiner Kollegen – Jaime Rodriguez und Karsten Januszewski, die bereits ein exzellentes Whitepaper zum XAML-Workflow mit WPF geschrieben haben – eine neue Website namens Project Rosetta online gestellt. Project Rosetta wendet sich an erfahrene Flash-Entwickler und zeigt anhand 10 Tutorials wie populäre Flash-Techniken in Silverlight angewandt werden und wie Flash-Entwickler am leichtesten den Einstieg in Silverlight finden.

    Link: Project Rosetta: From Flash to Silverlight

    Nur noch 1 freier Platz beim .NET Open Space!

    09.09.2008 09:21:52 | Lars Keller

    Wer nun schnell ist, bekommt noch einen gesicherten Platz beim .NET Open Space! 69 Teilnehmer haben sich schon angemeldet, wer wird der 70igste?

    Für alle die jetzt nicht schnell entschlossen sind, bleibt nur die Warteliste! ;-)

    Link:

    Wie Live Mesh Anwendungen aussehen könnten…

    09.09.2008 08:58:25 | Robert Mühsig

    Ein kleine “Preview” wie Live Mesh Anwendungen aussehen könnten habe ich auf ZDNet gefunden. Dort wird auf eine recht simple “ToDo” Applikation im Live Mesh Style verwiesen - ich bin gespannt, was man mit dem SDK alles treiben kann :)

    Auf der PDC dürfte man neueres erfahren.

    ShareThis

    Neue Artikel - Nachtrag

    09.09.2008 08:38:24 | Norbert Eder

    In der Liste meiner Zeitschriften-Artikel fehlten bis dato noch zwei Stück, beide noch gar nicht alt. Diese wurden nun der Vollständigkeit halber hinzugefügt und wollen auch hier genannt werden.

    XBAPperlapapp - WPF-Browseranwendungen genauer hinterfragt
    ASP.NET professional 02 2008

    Mit der Windows Presentation Foundation können nicht nur Client-Anwendungen entwickelt werden. Abgesehen von Silverlight besteht auch noch die Möglichkeit, so genannte WPFBrowseranwendungen zu implementieren. Dieser Artikel bietet eine kurze Einführung und ein ausführliches Beispiel.

    ASP.NET professional Ausgabe 02/2008


    MVC und das Model namens WF
    ASP.NET professional 01 2008

    Das Model View ControllerPattern ist unter vielen Entwicklern bekannt – vor allem durch das MVC-Framework von Microsoft für ASP.NETEntwickler. In diesem Artikel wird das herkömmliche MVC Pattern erklärt und gezeigt, wie das Model durch die Workflow-Foundation ausgetauscht werden kann.

    ASP.NET professional Ausgabe 01/2008

    Nur noch 1 freier Platz beim .NET Open Space!

    09.09.2008 00:21:05 | Lars Keller

    Wer nun schnell ist, bekommt noch einen gesicherten Platz beim .NET Open Space! 69 Teilnehmer haben sich schon angemeldet, wer wird der 70igste?

    Für alle die jetzt nicht schnell entschlossen sind, bleibt nur die Warteliste! ;-)

    Link:

    Das VistaShield auf einem Button darstellen

    08.09.2008 20:16:29 | Klaus Bock

    Wer hat es nicht schon oft gesehen wenn irgendeine administrative Aufgabe unter Vista erledigt werden soll: das VistaShield. Wenn die eigene Anwendung eine Bestätigung des Benutzer einholen soll, ist das Darstellen des VistaShield auf dem auslösenden Button Pflicht. Doch wie bekomme ich dieses ominöse Symbol auf meinen Button?

    Die meisten Ansätze, inklusive der Dokumentation zum Windows SDK, verwenden SendMessage der Win32-API. Da ich das VistaShield nicht nur auf Buttons verwenden möchte, sondern auch z.B. in einem Menü oder einfach in einem Dialog, habe ich nach einer anderen Möglichkeit gesucht.

    Um das Symbol überhaupt irgendwo darstellen zu können, muss man es erst einmal haben. Es ist in der user32.dll als Icon in verschiedenen Größen vorhanden. Um auf die Größen 16x16 und 32x32 zugreifen zu können, verwende ich die Funktion ExtraxtIconEx aus der user32.dll.

    [DllImport("shell32.dll", EntryPoint = "ExtractIconExW",
        CallingConvention = CallingConvention.StdCall)]
    public static extern int ExtractIconEx(
        [In]
        [MarshalAsAttribute(UnmanagedType.LPWStr)]
        string lpszFile, 
        int nIconIndex,
        ref IntPtr phiconLarge,
        ref IntPtr phiconSmall,
        int nIcons);

    Wie die Dokumentation schon sagt, werden Zeiger sowohl auf die kleine als auch auf die große Version eines Icons referenziert. Zurückgegeben wird die Anzahl der referenzierten Icons. Das ganze wird jetzt in eine Methode verpackt die wahlweise das große oder kleine Symbol zurückgibt. Man muss nur den Index des Symbols in der Datei kennen. Im falle des VistaShield in der user32.dll befindet sich dieses unter Index 6.

    private static Image GetVistaShield(bool smallIcon)
    {
        int icoIdx = 6;
        Image img = null;
        Icon icon = null;
    
        IntPtr iconLargePtr = IntPtr.Zero;
        IntPtr iconSmallPtr = IntPtr.Zero;
    
        string path = Environment.GetFolderPath(Environment.SpecialFolder.System) +
                      Path.DirectorySeparatorChar +
                      "user32.dll";
        try
        {
            int result = NativeMethods.ExtractIconEx(
                path,
                icoIdx,
                ref iconLargePtr,
                ref iconSmallPtr,
                1);
    
            if (result < 1)
            {
                return null;
            }
    
            if (smallIcon && iconSmallPtr != IntPtr.Zero)
            {
                icon = Icon.FromHandle(iconSmallPtr);
            }
            else if (iconLargePtr != IntPtr.Zero)
            {
                icon = Icon.FromHandle(iconLargePtr);
            }
            else
            {
                return null;
            }
    
            img = (Image)icon.ToBitmap();
        }
        catch (Win32Exception)
        {
            return null;
        }
        finally
        {
            iconLargePtr = IntPtr.Zero;
            iconSmallPtr = IntPtr.Zero;
        }
    
        return img;
    }

    Um das ganze schön in einer Klasse zu handeln, wird die Methode von zwei Eigenschaften maskiert.

    public static Image SmallVistaShield
    {
        get { return UacManager.GetVistaShield(true); }
    }
    
    public static Image LargeVistaShield
    {
        get { return UacManager.GetVistaShield(false); }
    }

    Jetzt muss nur noch einen Methode her, die das VistaShield direkt auf einem Button darstellt. Die halbe Arbeit ist vom .NET-Framework mit der Eigenschaft Image der Button-Klasse schon erledigt. Also warum soll dies Eigenschaft nicht verwendet werden?

    public static void SetShieldOnButton(Control ctrl, bool smallIcon)
    {
        Button btn = (Button)ctrl;
    
        if (smallIcon)
        {
            btn.Image = UacManager.SmallVistaShield;
        }
        else
        {
            btn.Image = UacManager.LargeVistaShield;
        }
    
        btn.TextImageRelation = TextImageRelation.ImageBeforeText;
    }

    Angenommen die beschriebenen Methoden sind in einer Klasse namens UacManager enthalten, kann auf jedem beliebigen Button aus einer Form das Vistashield dargestellt werden.

    if (this.onVista)
    {
        UacManager.SetShieldOnButton(this.buttonEndProcess, true);
    }

    Hier ein Screenshot der beschriebenen Methode.

    ShieldButton

    Technorati-Tags: | | | | |

    Das .NET-Framework und die UAC

    08.09.2008 19:15:33 | Klaus Bock

    Da nun Vista schon einige Zeit auf dem Markt ist und die Einhaltung der Richtlinien zur UAC so propagiert werden, warum zieht dann das .NET Framework nicht nach? Vor kurzem ist das SP1 zum Framework 3.5 erschienen und bezüglich UAC hat sich nichts getan. Es kann nicht sein, dass immer noch zum anzeigen des Vista Schild auf einem Button die win32-API bemüht werden muss. Auch das vorübergehende anheben der Benutzerrechte für einzelne administrative Aufgaben ist, für mein Verständnis, eigentlich nicht existent. Der oft gelesene Vorschlag eine Anwendung in einem neuen Prozess mit administrativen Rechten zu starten, ist aus meiner Sicht keine Lösung. Mit diesem Lösungsansatz hat man nur die Möglichkeit aus der Hauptanwendung heraus eine zweite Anwendung mit höheren Rechten zu starten, oder die laufende Anwendung zu beenden und mit höheren Rechten neu zu starten. Was aber wenn ich z.B. auf einen laufenden Prozess zugreifen will der administrative Rechte voraussetzt? Eine zweite Anwendung zu starten um die Aufgabe zu erledigen? Hilft mir nicht wirklich, da die Anwendung mit den höheren Rechten nur sehr eingeschränkt, oder aber nur mit einigen "Klimmzügen", mit der Hauptanwendung kommunizieren kann. Der Neustart der Anwendung mit erhöhten Rechten ist auch keine Option, da sie von nun an bis zum beenden mit administrativen Rechten läuft; was auch keine echte Lösung darstellt.

    In C++ gibt es die Möglichkeit mit CoCreateInstance einzelne Methoden mit höheren Rechten auszuführen. Dariusz zeigt das in diesem Clip sehr schon auf MSDN Solve. Dieser Lösungsansatz, in dem alle benötigten Methoden in ein eigenes COM-Objekt gepackt werden, ist aus meiner Sicht immer noch sehr umständlich, aber immer noch besser als die vorhandenen Möglichkeiten im .NET-Framework.

    Wenn schon die UAC als die richtungweisende Technologie zur Sicherheit propagiert wird und die Entwickler-Gemeinde angehalten ist die Richtlinien der UAC zu beachten, sollte doch auch Microsoft so nett sein und die nötigen Schnittstellen und Werkzeuge bereitstellen. Es ist ja nicht so, dass Vista erst seit einigen Wochen auf dem Markt ist.

    Technorati-Tags: |

    Visual Studio Team System Web Access 2008 SP1 Power Tool

    08.09.2008 18:29:16 | Christian Binder

    Es gibt nicht nur den VSTS SP1 und den TFS SP1, der Support für Windows Server 2008 und SQL Server 2008 mitbringt, wie Ihr sicherlich schon mitbekommen habt, sondern auch das neue Visual Studio Team System Web Access 2008 SP1 Power Tool hier zum Download.

    Das Visual Studio Team System Web Access 2008 SP1 Power Tool enthält nicht nur Bugfixes, sondern auch einige nützliche Features wie z.B. der Work Item Only View, der Anwendern ohne Lizenz limitierten Zugriff erlaubt. Find and View Shelvesets ermöglicht den Zugriff auf Shelves. Workitems können via URL mit initialen Werten erzeugt werden und Workitem queries können direkt in der via Url abgestzt werden und somit auch extrem einfach an das Team weitergegben werden.

    Viel Spass

    Chris

    Installation SQL Server 2005 & Vista x64

    08.09.2008 15:40:24 | Lars Keller

    Wenn man versucht den SQL Server 2005 auf Vista x64 zu installieren, bekommt man die Warnung "ASP.NET ist nicht für eine 32bit Anwendung registriert". Die SQL Reporting Services benötigen 32bit-ASP.NET.

    Für alle die dasselbe Problem haben, kann ich diesen Artikel empfehlen:

    Bei dem Aufruf der .vbs-Datei ist ein Fehler bei dem Artikel. Bei mir hat es so funktioniert:

    cscript c:\inetpub\AdminScripts\adsutil.vbs set w3svc/AppPools/Enable32bitAppOnWin64 1

    Nachdem man die Änderung ausgeführt hat, habe ich die Installation ausgeführt und folgende Fehlermeldung erhalten:

    ERROR 1706 Setup cannot find the required files. Check your connection to the network, or CD ROM! For other potential solutions to this problem, see c:\Program Files\Microsoft Office\Office11\1033\Setup.chm

    Lösung: Die OWC (Office 2003 web components) müssen ein Update erhalten, dieses findet man hier:

    Wenn man die Client Tools updaten möchte, dann muss man das Setup mit dem Parameter "Setup.exe SKUUPDATE=1" starten

    Danach lief die Installation durch! :) Aber nicht vergessen das Sql Server 2005 SP2 danach zu installieren!



    This weblog is sponsored by netcreate OHG.

    Installation SQL Server 2005 & Vista x64

    08.09.2008 14:40:24 | Lars Keller

    Wenn man versucht den SQL Server 2005 auf Vista x64 zu installieren, bekommt man die Warnung "ASP.NET ist nicht für eine 32bit Anwendung registriert". Die SQL Reporting Services benötigen 32bit-ASP.NET.

    Für alle die dasselbe Problem haben, kann ich diesen Artikel empfehlen:

    Bei dem Aufruf der .vbs-Datei ist ein Fehler bei dem Artikel. Bei mir hat es so funktioniert:

    cscript c:\inetpub\AdminScripts\adsutil.vbs set w3svc/AppPools/Enable32bitAppOnWin64 1

    Nachdem man die Änderung ausgeführt hat, habe ich die Installation ausgeführt und folgende Fehlermeldung erhalten:

    ERROR 1706 Setup cannot find the required files. Check your connection to the network, or CD ROM! For other potential solutions to this problem, see c:\Program Files\Microsoft Office\Office11\1033\Setup.chm

    Lösung: Die OWC (Office 2003 web components) müssen ein Update erhalten, dieses findet man hier:

    Wenn man die Client Tools updaten möchte, dann muss man das Setup mit dem Parameter "Setup.exe SKUUPDATE=1" starten

    Danach lief die Installation durch! :) Aber nicht vergessen das Sql Server 2005 SP2 danach zu installieren!

    GC08 - eSport & Electronic Sports League

    08.09.2008 14:08:00 | Lori Grosland

    Geld verdienen von Videospielen?  Beruf als Pro-Gamer?  Wenn man gut genug ist, dann ist alles möglich mit eSport. 

    eSport (elektronischer Sport) ist den Wettkampf im Spielen von Computer- oder Videospielen im Mehrspielermodus.  Professionelle Spieler sind in Teams (Clans) organisiert und werden von Firmen gesponsert.  Die Spieler nehmen an eSport-Turnieren weltweit teil, wo sie Preisgeld gewinnen können.  eSport ist in China, Süd Korea und Taiwan schon sehr beliebt und ist als Sportart offiziell anerkannt.  In Deutschland ist eSport noch nicht als Sportart anerkannt.

    Auf der Games Convention in Leipzig habe ich mit Ibrahim Mazari von Turtle Entertainment geredet.  Turtle Entertainment ist der Organisator von der Electronic Sports League (ESL) und ist aktiv in 21 europäischen Ländern.  Die ESL hat über 840000 registrierten Mitgliedern und hat einen professionell aufgestellten und organisierten Spiele- und Ligensystem.  Die ESL hat eine Liga für alle Spielertypen von Einsteiger bis zum Profi.  In diesem Video erzählt Ibrahim  mehr über eSport, ESL und was sie auf der GC veranstaltet haben.  Mehr  Info zu ESL findet Ihr unter:  http://www.esl.eu/

    1und1 - Mein Horrorerlebnis

    08.09.2008 14:07:20 | Rainer Schuster

    Ich möchte nun mal etwas Abseits von Bits und Bytes von meiner neuesten Erfahrung mit meinem Internet-Service-Provider 1und1 berichten.

    Gestern am späten Nachmittag kam ich auf die Idee meine Kontoauszüge online zu überprüfen. Ich hatte mich lange gewehrt online meine Transaktionen durchzuführen, aber Schlussendlich hatten doch die Umstände gesiegt, dass ich wegen kleineren Überweisungen in die Stadt musste. Nun hatte ich schon am Freitag von meinem Kontoticker eine Nachricht über eine Abbuchung von ca. 360€ bekommen, mich aber nicht weiter gewundert, da das ungefähr dem Betrag entsprach, den ich vergangen Monat über meine Kreditkarte ausgegeben hatte.

    Nun wollte ich es aber dann gestern doch genau wissen und ging in meinen Online-Account. Als ich dann eine 360€ schwere Rechnung von 1und1 sah musste ich erst einmal schlucken. Ich war wütend, verwirrt und entsetzt zugleich. Hatte ich doch als Vertragsart eine Flatrate für Telefon und Internet. Was war schief gegangen. Ein Blick in die Rechnung, die ich bereits am 02.09. erhalten hatte verriet mir den Grund. Ich hatte die Rechnung noch nicht eingesehen, da es für mich sowieso immer die gleichen Beträge sind.

    Nun stand da etwas von Mehrfachbuchung pro Minute mit 1,2 Cent. Ich rechnete mir das aus und es stimmte. Aber was konnte da schief gegangen sein? Meine Daten habe ich nie an dritte weiter gegeben. Mein WLAN ist WPA2 gesichert (gut ich weiß, es gibt Hacker). Aber ich bin mir keiner Schuld bewußt. Ich ging natürlich sofort online und änderte meine Zugangsdaten. Den WPA2 Schlüssel habe ich dann heute auch noch geändert. Aus meiner Fritz!Box wollte ich die Verbindungsprotokolle abrufen, fand da aber nichts. Mal beim AVM-Support nachfragen, oder ins Handbuch schauen.

    Ein Anruf beim Kundenservice musste mich auf heute morgen trösten, da der Anruf "ausserhalb der Geschäftszeiten" stattfand. Heute morgen dann das 25 Minuten-Telefonat zu je 24 Cent die Minute. Gesamtkosten ca 6€, wobei die Anfangszeit bis ich verbunden wurde kostenlos war.

    Der Telefonservice der Rechnungsstelle konnte mir nicht weiter helfen, da es sich offensichtlich um einen vermeintlichen "Missbrauch" meinerseits handele. Ich hatte eine Technische Störung in Verdacht, wusste ich doch, dass ich mir nichts zu Schulden hatte kommen lassen. Der Techniker ging daraufhin mit mir per Ferndiagnose meine Einstellungen in der Fritz!Box durch. Ergebnis: Alles bestens! Seine Anfrage, ob ich meinen Router mit den Zugangsdaten verkauft hatte und meine Daten dadurch weiter gegeben hatte konnte ich nur verneinen. Das wäre schließlich von mir grob fahrlässig gewesen und der Ärger wäre unberechtigt.

    Dem Techniker war ein Problem mit Mehrfachbuchung bekannt und sagte mir, er gäbe diese Informationen an den Carrier Telefonica weiter, über den das Signal von 1und1 an meinen Anschluss kommt. Nachdem dies geklärt war wollte ich von dem Telefonservice in der Rechnungsstelle meine Kosten erstattet haben. Die freundliche Dame erklärte mir das ginge nicht, da sie laut ihren Abbuchungsprotkollen einen Missbrauch festgestellt hatten und ich, solange keine technische Störung ihrerseits ersichtlich wäre, keine Anspruch darauf hätte. Ein entsprechendes Schreiben wäre an mich gegangen mit der Aufforderung diesen Umstand zu überprüfen.

    Leider habe ich keine Aufforderung per Brief bekommen. Nun kann das wirklich so ein dummer Zufall sein, da es das dreiviertel Jahr in dem ich nun in Nürnberg wohne vorgekommen ist, das Briefkorrespondenz zu mir und meiner Frau von der Post verloren ging. Das war bisher wenig tragisch, da sich derjenige immer wieder fragend an uns wandte. Nun ist es jedoch sehr tragisch, wie dieser Vorfall zeigt.

    Das brachte mich dann letztendlich vollkommen in Rage und ich reagierte nun mit etwas erboster Stimme da ich stink sauer sei und verlangte nach einem Entscheidungsträger. Diesem Aufruf kam sie natürlich nicht entgegen, ich kann sie ja verstehen, sie hat auch nur ihre Anweisungen. Ich solle mich schriftlich an 1und1 wenden, nur so ginge das seinen Lauf.

    Also tat ich das und habe gleich im Anschluss heute Mittag eine E-Mail an den Support mit der Bitte um Klärung geschickt. Die E-Mail war auch nicht sonderlich freundlich sonder sehr fordernd. Ich habe mir nichts zu Schulden kommen lassen. Dort habe ich mir rechtliche Schritte vorbehalten und darauf hingewiesen mit diesem Fall an die Presse zu gehen.

    Ein Ultimatum mit schriftlicher Bestätigung habe ich auch gestellt - bis Ende der Woche - danach werde ich die von mir genannten Schritte einleiten. Ich werde das schreiben zur Sicherheit auch noch einmal als Brief per Einschreiben-/Rückschein und Gegenzeichung aufsetzen, sodass dieser Vorgang Wasserdicht ist.

     

    Die frage an euch liebe Leser: War ich zu forsch?

    Deutsche Entwickler-Konferenz: Early Bird endet diese Woche!

    08.09.2008 12:30:49 | Jens Häupel

    Sie haben sich noch nicht angemeldet? Worauf warten Sie noch? Wollen Sie die Neuigkeiten verpassen?Neben hierzulande bekannten Sprechern wie Frank Fischer oder Dirk Primbs werden wir auch Unterstützung aus den Produktgruppen in Redmond erhalten. So wird bspw. John Durant - Program Manager und Sharepoint Dev Guru - über Neues auf dem Gebiet der SharePoint Integration sprechen. Paul Yuknewicz ist Senior Program Manager Lead und wird endlich wieder Visual Basic (v.9.0) in den Mittelpunkt stellen und auch über Upgrade-Szenarien sprechen. Steve Teixera wird eine Keynote halten und über Parallel Computing sprechen. Auch Microsoft Research ist immer gut für interessante Neuigkeiten. Patrick Baudisch wird aus den Nähkästchen von Microsoft's Forschungsabteilung plaudern.

           image

    Und zu guter Letzt werden wir die heißesten Neuigkeiten von der zu diesem Zeitpunkt gerade beendeten PDC (Professional Developer Conference) an Sie weiter geben. Technologien wie "Oslo", "Zurich", "Red Dog" und andere werden greifbar werden, Themen wie Cloudcomputing eine neue Bedeutung bekommen.

    Also, nix wie hin nach Berlin.

    clip_image001clip_image002

    Ich werde übrigens auch dabei sein (VSTO 3.0 Deployment Chalk Talk - bringen Sie Ihre Fragen zu Setup & Installation von VSTO-Lösungen mit).

    Kollege Oliver Scheer hat Video-Interviews mit Sprechern gemacht: hier und hier

    Außerdem gibt's ein cooles, kleines Photo-Synth Gewinnspiel

    Trainings zu Web-Entwicklung und Silverlight 2

    08.09.2008 12:30:29 | Jens Häupel

    Wo bekommt man für nur 199,- € 2 Tage technisches Training zu den neuesten Technologien? Bei uns. Also nix wie hin und anmelden.

    Liftoff

    GC08 - Gespräch mit Boris Schneider-Johne

    08.09.2008 11:06:00 | Lori Grosland

    Boris Schneider-Johne ist Produkt Manager für die Xbox Plattform bei Microsoft Deutschland.  Er ist verantwortlich für die Xbox Konsole selbst und auch für die Zusammenarbeitet  mit 3rd-Party Spiel-Publisher.  Boris ist sehr bekannt in Deutschland als Pionier auf dem Gebiet der Spiele-Übersetzungen und auch für sein Blog dreisechzig.net, wo er viel über Videospiele und Software schreibt.

    Ich habe mit Boris auf der Games Convention in Leipzig gesprochen.  Er erzählt mir ein bisschen über seine Arbeit, was er auf der Games Convention gemacht hat, seine Spiel-Gewohnheiten und natürlich auch über sein Blog:  http://www.dreisechzig.net/

    Installation SQL Server 2005 & Vista x64

    08.09.2008 05:40:02 | Lars Keller

    Wenn man versucht den SQL Server 2005 auf Vista x64 zu installieren, bekommt man die Warnung "ASP.NET ist nicht für eine 32bit Anwendung registriert". Die SQL Reporting Services benötigen 32bit-ASP.NET.

    Für alle die dasselbe Problem haben, kann ich diesen Artikel empfehlen:

    Bei dem Aufruf der .vbs-Datei ist ein Fehler bei dem Artikel. Bei mir hat es so funktioniert:

    cscript c:\inetpub\AdminScripts\adsutil.vbs set w3svc/AppPools/Enable32bitAppOnWin64 1

    Nachdem man die Änderung ausgeführt hat, habe ich die Installation ausgeführt und folgende Fehlermeldung erhalten:

    ERROR 1706 Setup cannot find the required files. Check your connection to the network, or CD ROM! For other potential solutions to this problem, see c:\Program Files\Microsoft Office\Office11\1033\Setup.chm

    Lösung: Die OWC (Office 2003 web components) müssen ein Update erhalten, dieses findet man hier:

    Wenn man die Client Tools updaten möchte, dann muss man das Setup mit dem Parameter "Setup.exe SKUUPDATE=1" starten

    Danach lief die Installation durch! :) Aber nicht vergessen das Sql Server 2005 SP2 danach zu installieren!

    SCSF - April 2008 Solutions laufen nach Installation des SP1 für VS 2008 nicht mehr

    07.09.2008 21:37:27 | Andre Kraemer

    Kürzlich installierte ich Visual Studio 2008 Service Pack 1. Nach der Installation konnte ich keine neuen Solutions basierend auf der SCSF - April 2008 mehr anlegen. Der Sourcecode wurde zwar generiert, beim Versuch das Projekt zu starten kam es jedoch zu einer ModuleLoadException. Außerdem wurde auch das "Add View (With Presenter)" Recipe nicht mehr angezeigt.

    image

    Glücklicherweise war das Problem bereits bekannt. Abhilfe in Form einer Anleitung zum Patchen des Sourcecodes gibt es hier.



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

    Customizing MOSS 2007 My Sites within the enterprise

    07.09.2008 10:03:00 | Ozgur Aytekin

    Modifying the private My Site is where things begin to work differently. In SPS 2003, a site administrator could go into his or her private site, edit the home page in Shared mode, and save their changes. This would update the layout and web parts for all My Site users, so everyone’s private site would have the same layout and web parts. In MOSS 2007, this is no longer possible – there are a number of more powerful customization tools than what SPS 2003 had, but some tasks such as customizing all private sites have unfortunately become a bit more difficult. So, how can you customize the private My Sites in MOSS 2007?

    http://blogs.msdn.com/sharepoint/archive/2007/03/22/customizing-moss-2007-my-sites-within-the-enterprise.aspx#8926088

    Microsoft Sharepoint portal interview Questions

    07.09.2008 09:56:00 | Ozgur Aytekin

    The Sharepoint portal interview question are the collection of most frequently asked question in Sharepoint interviews. These updated set of question extend your knowledge about the Sharepoint. The question and answers are collected over a period of time from different blogs and site . The Sharepoint questions are start from basics and moves towards the advance sharepoint question. These set of questions includes Sharepoint 2007 and 2003 FAQs.

    http://www.interviewmadeeasy.info/sharepoint/

    We'll miss you, Patrick...

    06.09.2008 23:46:00 | Ozgur Aytekin

    Patrick Tisseghem, long time SharePoint MVP and co-founder of U2U, a Microsoft Gold Certified Partner, suddenly passed away on September 3rd evening in Gothenburg, Sweden due to heart failure. He is survived by his wife, Linda, and daughters, Anahi and Laura.

    This hits me as a tragedy for the family and a great loss for the entire SharePoint community.

    Patrick's posts helped many of us to learn MOSS and capitalize on this knowledge. He definitely left a trace and will be long remembered for his remarkable contributions.

    My sincere condolences go to the family and friends.

    http://blogs.msdn.com/sharepoint/archive/2008/09/05/we-ll-miss-you-patrick.aspx#8928476

    SharePoint Server 2007 - Visual How Tos

    06.09.2008 13:06:00 | Ozgur Aytekin

    Microsoft bietet auf seiner MSDN Homepage diverse Visual How To Artikel zum Thema SharePoint Server 2007:
    Adding Code-Behind Files to Master Pages and Page Layouts in SharePoint Server 2007
    Adding Custom Quick Access Buttons to the Page Editing Toolbar in SharePoint Server 2007
    Adding Excel Web Parts to Pages Programmatically in SharePoint Server 2007
    Building an Expense Report Approval Workflow for SharePoint Server 2007 Using Visual Studio 2008
    Building Custom Activities for Use in SharePoint Designer 2007
    Building Simple Custom Approval Workflows with InfoPath 2007 Forms
    Building State Machine Document Approval Workflows for SharePoint Server 2007 Using Visual Studio 2008
    Configuring and Deploying Workflows to SharePoint Server 2007 Using Solution Packages
    Creating a Custom Approval Workflow for SharePoint Server 2007 Using SharePoint Designer 2007
    Creating a Custom Expiration Formula Based on Metadata in SharePoint Server 2007 (Part 1 of 2)
    Creating a Custom Expiration Formula Based on Metadata in SharePoint Server 2007 (Part 2 of 2)
    Creating a Custom Search Page and Tabs in the Search Center of SharePoint Server
    Creating and Editing Custom Document Information Panels from Office SharePoint Server 2007
    Creating and Exposing Managed Properties in the Advanced Search Page of SharePoint Server Enterprise Search
    Creating and Exposing Search Scopes in SharePoint Server 2007 Enterprise Search
    Creating Business Data Catalog Entities in SharePoint Server 2007
    Creating Content Sources to Crawl Business Data in SharePoint Server 2007 Enterprise Search
    Creating Custom Enterprise Search Web Parts in SharePoint Server 2007
    Creating Custom Routers in SharePoint Server 2007
    Creating Custom Workflow Activities for SharePoint Server 2007 Using Visual Studio 2008
    Creating Managed-Code UDFs for Excel Services
    Creating Search Queries Programmatically by Using the Search Object Model in SharePoint Server 2007
    Creating Search Queries Programmatically by Using the Search Web Service in SharePoint Server 2007
    Creating User Profiles in the User Profile Store in SharePoint Server 2007
    Creating Workflows to Transfer Records Upon Expiration in SharePoint Server 2007
    Customizing Content Query Web Parts by Using Custom Properties in Office SharePoint Server 2007
    Customizing Page Editing Toolbar Components in SharePoint Server 2007
    Customizing Search Results with Custom XSLTs in SharePoint Server 2007
    Designing InfoPath Forms for Workflows in SharePoint Server 2007
    Developing Custom Applications by Using Excel Web Services in SharePoint Server 2007
    Displaying Custom Fields in Content Query Web Parts in Office SharePoint Server 2007
    Displaying Search Results in a Grid View in SharePoint Server 2007
    Enabling Users to Act on LOB Data with Business Data Catalog Actions
    Exposing Enterprise Search in SharePoint Server 2007 by Using Internet Explorer 7 and the Office Research Pane
    Filtering One Business Data Catalog List from Another by Using Associations in SharePoint Server 2007
    Putting Multiple Items on Hold in SharePoint Server 2007
    Referencing and Linking: Using Custom Fields to Display Relationships in SharePoint Server 2007
    Referencing and Linking: Using Secondary Lists to Maintain Relationships in SharePoint Server 2007
    Referencing and Linking: Using the Asset URL Selector in SharePoint Server 2007
    Refining Business Data Catalog Search with Scopes
    Retrieving an Entire Workbook or a Snapshot of a Workbook in Excel Services
    Updating Document Information Panels for Content Type Changes in SharePoint Server 2007
    Using Business Data Catalog Actions to Pass Parameters to InfoPath 2007 Browser Forms
    Using Metadata Tags to Route Documents to Libraries in SharePoint Server 2007

    FIX: Performance data is not updated when you run a tool that uses SQL Server performance counters to collect performance data for an instance of SQL

    05.09.2008 23:19:00 | Ozgur Aytekin

    FIX: Performance data is not updated when you run a tool that uses SQL Server performance counters to collect performance data for an instance of SQL Server 2005

    Consider the following scenario. You run a tool that uses Microsoft SQL Server performance counters to collect performance data for an instance of Microsoft SQL Server 2005. For example, you run System Monitor together with SQL Server performance counters. You start the tool before you start the instance of SQL Server. In this scenario, the performance data is not updated after you start the instance of SQL Server. Additionally, the tool displays static performance data instead of displaying the actual real-time performance data from the instance of SQL Server. This problem occurs until you restart the tool.

    FIX: The Visual Studio 2005 IDE may stop responding or may respond very slowly after you perform some operations to a form that has a complex DataSet

    05.09.2008 23:03:00 | Ozgur Aytekin

    FIX: The Visual Studio 2005 IDE may stop responding or may respond very slowly after you perform some operations to a form that has a complex DataSet control, a DataGridView control, and some DataAdapter controls in a windows-based application

    In the Microsoft Visual Studio 2005 IDE, you create a windows-based application that contains a form. The form has a complex DataSet control, a DataGridView control, and some DataAdapter controls. The IDE may stop responding or may respond very slowly when you perform one or more of the following operations:
    • You edit the code windows and then open the form designer.
    • You drag a field from the DataSet control to the designer.
    • You right-click the component tray of the form design window and then select Line Up Icons.
    • You drag the DataGridView control from data sources to the form.

    http://support.microsoft.com/kb/956146

    Deeplol Photomosaic mit Silverlight und Deep Zoom

    05.09.2008 16:00:11 | Oliver Guhr

    Unter http://robburke.net/images/deeplol.html gibt es ein Photomosaik aus 2442 Bildern von icanhascheezburger.com, diese Demo zeigt auf eine sehr coole Art was mit Deep Zoom alles möglich ist.

    image image

    image

    image

    ShareThis

    SmartTags für alle

    05.09.2008 14:39:00 | Jens Häupel

    Visual Studio 2008 / .NET 3.5 Service Pack 1 brachte auch für VSTO ein paar Updates. Eines zählt zu meinen Lieblings-Features: SmartTags. Bisher waren diese nur für dokumentzentrische Anwendungen verfügbar, also an ein bestimmtes Dokument oder eine Vorlage gebunden. Klar, diese Einschränkung hatte auch seine Vorteile. So konnte man viel aggressiver an die Erkennung von Mustern oder Begriffen (sog. Terms) gehen, da der Gültigkeitsbereich des SmartTags sehr stark eingeschränkt (nämlich das eine Dokument) war.

    Nun sind diese Objekte und Klassen auch in einem zentralen Add-In verfügbar. Hier ein Beispiel, welches eine Liste von Begriffen und darüber einen SmartTag mit einer Action definiert. Als Action dient eine einfache Web-Suche auf Wikipedia.

     

    using Word = Microsoft.Office.Interop.Word; using Office = Microsoft.Office.Core; using VSTO = Microsoft.Office.Tools.Word; using System.Text.RegularExpressions; using System.Windows.Forms; namespace AppLevelSmartTag4AllDocs { public partial class ThisAddIn { private VSTO.SmartTag myTermsSmartTag = null; private string[] terms = { "Luke", "Leia", "Han", "Anakin", "Jacen", "Jaina", "Vader", "Wedge" }; private VSTO.Action acSearchWikipedia; private void ThisAddIn_Startup(object sender, System.EventArgs e) { myTermsSmartTag = new VSTO.SmartTag("SmartTags.jensha.net/StarWars#CharacterSample", "Star Wars Character Sample"); foreach (string t in terms) myTermsSmartTag.Terms.Add(t); acSearchWikipedia = new VSTO.Action("Star Wars///Get Info from Wikipedia"); acSearchWikipedia.Click += new Microsoft.Office.Tools.Word.ActionClickEventHandler(acSearchWikipedia_Click); myTermsSmartTag.Actions = new VSTO.Action[] { acSearchWikipedia }; VstoSmartTags.Add(myTermsSmartTag); } void acSearchWikipedia_Click(object sender, Microsoft.Office.Tools.Word.ActionEventArgs e) { string searchText = "%22Star Wars%22 %22" + e.Text + "%22"; System.Diagnostics.Process.Start("http://en.wikipedia.org/wiki/Special:Search?search=" + searchText); } } }

    Der so definierte SmartTag gilt nun für alle geöffneten und noch zu öffnenden bzw. neuen Dokumente. Aber es geht noch besser. Was ist, wenn ich den Gültikeitsbereich einschränken will? Wenn nur bestimmte Dokumente den SmartTag bekommen sollen? Auch das läßt sich bewältigen. Über neue Extensions (Microsoft.Office.Tools.xxxx.Extension) kann die benötigte Funktionalität - nämlich der Zugriff auf die lokalen Objekte des Dokuments - erreicht werden. Die Methode heißt GetVstoObject() und liefert hier den Zugriff auf die SmartTag Collection.

    Da der SmartTag nun nicht mehr automatisch alle Dokumente umfaßt, müssen wir uns selbst um das Hinzufügen neuer Dokumente kümmern. Also jedes Mal, wenn ein Dokument geöffnet oder neu angelegt wird (Office Events abfangen), prüfen wir, ob das Dokument in unser Muster paßt (hier nicht implementiert) und fügen bei positiver Überprüfung den SmartTag der SmartTag Collection des Dokuments hinzu.

     

    using Microsoft.Office.Tools.Word.Extensions; ... namespace AppLevelSmartTag4AllDocs { public partial class ThisAddIn { ... private void ThisAddIn_Startup(object sender, System.EventArgs e) { foreach (Word.Document doc in this.Application.Documents) AttachSmartTag(doc); this.Application.DocumentOpen += new Word.ApplicationEvents4_DocumentOpenEventHandler(WordApp_DocumentOpen); ((Word.ApplicationEvents4_Event)Application).NewDocument += new Word.ApplicationEvents4_NewDocumentEventHandler(WordApp_NewDocument); } void WordApp_NewDocument(Microsoft.Office.Interop.Word.Document doc) { AttachSmartTag(doc); } void WordApp_DocumentOpen(Microsoft.Office.Interop.Word.Document doc) { AttachSmartTag(doc); } private void AttachSmartTag(Word.Document doc) { if (myTermsSmartTag == null) { myTermsSmartTag = new VSTO.SmartTag("SmartTags.jensha.net/StarWars#CharacterSample", "Star Wars Character Sample"); foreach (string t in terms) { myTermsSmartTag.Terms.Add(t); } acSearchWikipedia = new VSTO.Action("Star Wars///Get Info from Wikipedia"); acSearchWikipedia.Click += new Microsoft.Office.Tools.Word.ActionClickEventHandler(acSearchWikipedia_Click); myTermsSmartTag.Actions = new VSTO.Action[] { acSearchWikipedia }; } doc.GetVstoObject().VstoSmartTags.Add(myTermsSmartTag); }

    Im Beispiel wurde mit der Terms Liste gearbeitet, die allerdings nur aus einem Wort bestehende Begriffe erkennt, da der in Word eingebaute Tokenizer den Text in entsprechende Tokens zerlegt. Werden Begriffe benötigt, die aus mehreren Worten bestehen oder einem bestimmten Muster unterliegen, so kann mit Regular Expressions gearbeitet werden.

    GetVstoObject() hat noch andere Vorteile: Man kann so auf die im Dokument eingebetteten Objekte (HostItems, wie z.B. ein ListObject in Excel) zugreifen.

    Getting rid of strings (3): take your app settings to the next level

    05.09.2008 14:23:20 | Andre Loker

    In the previous parts of this series (part 1, part 2) I talked about the problems with literal strings in source code and presented different strategies to avoid those problems. In this episode I'll explain how we can abstract from app settings and leverage the power of the Castle DictionaryAdapter to improve the way our applications access their app settings.

    Basics

    Probably the easiest way to make certain aspects of a .NET application configurable is by using app settings. You can define app settings by adding (or augmenting) an <appSettings> section to your web.config or app.config, depending on the project type. This could look something like this:

     <?xml version="1.0" encoding="utf-8" ?>
     <configuration>
       <appSettings>
         <add key="MaxUsers" value="20"/>
         <add key="FeedbackMail" value="foo@localhost"/>
       </appSettings>
     </configuration>

    [As a small side note: you don't have to physically keep the appSettings section in the web.config/app.config file - read Keep your .config clean with external config files to learn how to move settings outside of the config file.]

    To access the settings easily use the configuration API exposed by ConfigurationManager, specifically the AppSettings property. Here's a tiny app that accesses the values from the appSettings section:

     using System;
     using System.Configuration;
      
     public class Program {
       private static void Main() {
         string feedbackMail = ConfigurationManager.AppSettings["FeedbackMail"];
         int maxUsers = int.Parse(ConfigurationManager.AppSettings["MaxUsers"]);
         Console.WriteLine("Feedback e-mail address: {0}", feedbackMail);
         Console.WriteLine("Max users: {0}", maxUsers);
       }
     }

    As you see, that's fairly simple. Some points of interest:

    • ConfigurationManager lives in System.Configuration. You need to add the assembly System.Configuration.dll to your project to use this class
    • AppSettings has two indexers:
      • One indexer accepts a string: the string provided should be one of the keys as defined in the appSettings section. The value returned is the content of the value attribute of the respective appSettings entry or null if the key wasn't found. Keys are case insensitive by the way, so AppSettings["feedbackMAIL"] returns the same value as AppSettings["FeedbackMail"]. Note, however, that white space before or after the key does count, so AppSettings[" FeedbackMail"] will return null. Also be sure to check your config file for accidentally added white space within the key attribute if your app does not find certain keys.
      • The other indexer accepts an integer, which is the index of the app setting to return. Granted, I don't see much use for that indexer.
    • The values returned by the indexers are always strings. Therefore, if you want to have an app setting as an integer you'll need to parse it.

    Let's analyse this basic approach:

    • We use strings to index the AppSettings property which - as you should know by now - is very problematic.
      • If you misspell the key, the value returned is null, but you won't notice it before runtime.
      • If you change the key in the app settings, you'll have to update all references to that key in your code. Remember that strings are hard to refactor.
    • Values are always returned as strings so you need to parse them if you need data of a type other than string

    Improving the situation

    If you read the first article of this series you know that there are two basic steps that can improve the situation:

    1. Avoid spreading literals all over the code, define and use constants instead
    2. Hide any string dependent code behind an appropriate API

    Applying those rules might lead you to the idea to write a class that encapsulates the app settings. A good idea indeed! Here's a class that encapsulates the app settings of our tiny example:

     class MySettings {
       // constants that define the keys in the app settings
       private const string MaxUsersKey = "MaxUsers";
       private const string FeedbackMailKey = "FeedbackMail";
      
       public static string FeedbackMail {
         get { return ConfigurationManager.AppSettings[FeedbackMailKey]; }
       }
      
       public static int MaxUsers {
         get { return int.Parse(ConfigurationManager.AppSettings[MaxUsersKey]); }
       }
     }

    I made the properties static because the class is stateless. Now you can access the settings like this:

     public class Program {
       private static void Main() {
         string feedbackMail = MySettings.FeedbackMail;
         int maxUsers = MySettings.MaxUsers;
         Console.WriteLine("Feedback e-mail address: {0}", feedbackMail);
         Console.WriteLine("Max users: {0}", maxUsers);
       }
     }

    This is much better! The strings are neatly hidden, so is the parsing of the integer. You can refactor the names of the properties easily using the refactoring tool of your choice.

    Is this solution the final answer? Certainly not. This solution still suffers from some issues :

    • It's tedious to add and implement properties and possible parsing manually for each setting in the app settings section.
    • The settings are now strictly tied to ConfigurationManager. It's difficult to mock some app settings for unit testing using this approach.

    Let me elaborate on the second issue: assume you have a class that is responsible for sending an email to the system administrator in case of an error. Here's a possible excerpt of such a system:

     // an interface we use to abstract sending of emails.
     public interface IMailSender {
       void Send(string to, string subject, string text);
     }
      
     // Sends error reports by mail
     public class ErrorReporter {
       private readonly IMailSender mailSender;
      
       public ErrorReporter(IMailSender mailSender) {
         this.mailSender = mailSender;
       }
      
       public void SendErrorReport(string text) {
         var email = MySettings.FeedbackMail;
         mailSender.Send(email, "Application error", text);
       }
     }
      

    It's certainly nice that we did not hardcode the email address that the report is sent to. But if we were to unit test the method we'd have to provide a value for the FeedbackMail app setting. (I'm using Rhino Mocks by the way)

     [Test]
     public void SendErrorReport_UsesMailSender() {
       var mailSender = MockRepository.GenerateMock<IMailSender>();
      
       var text = "test message";
       var email = "foo@localhost";
      
       // need to inject the email into the app settings
       ConfigurationManager.AppSettings["FeedbackMail"] = email;
      
       var reporter = new ErrorReporter(mailSender);
       reporter.SendErrorReport(text);
      
       mailSender.AssertWasCalled(x=>x.Send(email, "Application error", text));
     }

    To make the test work we need to inject the expected email address into the app settings. I personally think that this situation is awkward and does certainly not isolate the unit test around one class under test. ErrorReporter uses MySettings which again uses ConfigurationManager. For my taste the number of classes involved in this unit test is unnecessarily high.

    A solution

    If you've never heard of Castle DictionaryAdapter, go and read my article on it, because this little tool will improve our solution a lot.

    Here's what we do:

    • Delete MySettings, we won't use it anymore
    • Create instead an interface that represents your app settings:
     public interface ISettings {
       int MaxUsers { get; }
       string FeedbackMail { get; }
     }
    • Create a dictionary adapter that handles all the plumbing between ISettings and AppSettings:
     var factory = new DictionaryAdapterFactory();
     var adapter = factory.GetAdapter<ISettings>(ConfigurationManager.AppSettings);
    • Use this object instead of MySettings:
     public class Program {
       private static void Main() {
         var factory = new DictionaryAdapterFactory();
         var settings = factory.GetAdapter<ISettings>(ConfigurationManager.AppSettings);
         var feedbackMail = settings.FeedbackMail;
         var maxUsers = settings.MaxUsers;
         Console.WriteLine("Feedback e-mail address: {0}", feedbackMail);
         Console.WriteLine("Max users: {0}", maxUsers);
       }
     }

    Again, we have a type safe interface for our app settings. But what did we gain?

    First we have to use much less code to define the interface for our app settings: ISettings is a no-brainer, just define properties with the desired type and the name matching the app settings key [see this article on DictionaryAdapter to learn how this can be configured in detail]. The DictionaryAdapter will handle all necessary lookup and conversion for you. Less code on our side is A Good Thing™.

    Secondly by using an interface we have created a better abstraction of the app settings. Combine this with the power of dependency injection and you've created a basis for well testable, highly configurable code. If you don't see what I mean, read on and let me elaborate.

    Why this solution rocks

    First of all change ErrorReporter to accept an ISettings instance and use it instead of MySettings:

     public class ErrorReporter {
       private readonly IMailSender mailSender;
       private readonly ISettings settings;
      
       // Inject ISettings as well
       public ErrorReporter(IMailSender mailSender, ISettings settings) {
         this.mailSender = mailSender;
         this.settings = settings;
       }
      
       public void SendErrorReport(string text) {
         var email = settings.FeedbackMail; // use ISettings instead of MySettings
         mailSender.Send(email, "Application error", text);
       }
     }

    Two changes have taken place: I inject the ISettings dependency through the constructor and I use this object to access the email address.

    ISettings in action - unit test

    Here's the updated version of the unit test from above:

     [Test]
     public void SendErrorReport_UsesMailSender() {
       var mailSender = MockRepository.GenerateMock<IMailSender>();
      
       var text = "test message";
       var email = "foo@localhost";
      
       // create a stub for ISettings
       var settings = MockRepository.GenerateStub<ISettings>();
       // let this stub's FeedbackMail property return a specific value
       settings.Stub(x => x.FeedbackMail).Return(email);
      
       // inject the settings
       var reporter = new ErrorReporter(mailSender, settings);
       reporter.SendErrorReport(text);
      
       mailSender.AssertWasCalled(x=>x.Send(email, "Application error", text));
     }

    This approach is far superior to the old approach because we only have to stub a direct dependency of ErrorReporter (ie. ISettings). There's no need to configure an indirect dependency like ConfigurationManager.AppSettings. Furthermore we could now make an ISettings mock to check whether ErrorReporter really uses the settings object. Short, we have the full control of the behaviour of the ISettings instance.

    ISettings in action - the real app

    To use ISettings and ErrorReporter in a real app, we'd preferably use an IoC container like Castle Windsor to configure the ErrorReporter instance.

    Here's how you could configure the container:

     var container = new WindsorContainer();
     // we'll need an implementation of IMailSender
     container.Register(Component.For<IMailSender>().ImplementedBy<SomeClassImplementingIMailSender>());
      
     // create the adapter
     var adapter = new DictionaryAdapterFactory().GetAdapter<ISettings>(ConfigurationManager.AppSettings);
     // register this adapter instance as the component for ISettings
     container.Register(Component.For<ISettings>().Instance(adapter));
      
     // and finally register the error reporter
     container.Register(Component.For<ErrorReporter>());

    Whenever we need an instance of ErrorReporter now we can ask the container for it (object locator approach):

     var reporter = container.Resolve<ErrorReporter>();
     reporter.SendErrorReport("Something went horribly wrong");

    Alternatively you could let the IoC container inject an ErrorReporter instance where you need it (dependency injection approach).

    Both ways we'll get an ErrorReporter instance that is readily configured to access the app settings in a transparent way.

    Conclusion

    By using the proposed combination of

    1. an interface defining the app settings
    2. a dictionary adapter that maps between the AppSettings and the interface and
    3. an IoC container that can inject the adapter wherever we need it

    we were able to completely get rid of any app settings related strings and created an architecture that is easily configurable and well testable.

    By abstracting from the appSettings in the app.config file it's also easy to use a different configuration source instead. DictionaryAdapter can wrap all kinds of dictionaries and NameValueCollections. And if you come to the conclusion that you'd rather want to store the app settings in a database, it's easy to do, as well. Instead of using the DictionaryAdapter you could implement ISettings in a way that loads app settings from a database.

    .NET GUI: Zeit des Neuen

    05.09.2008 14:13:00 | Norbert Eder

    Nach den letzten sehr anstrengenden Wochen und Monaten ist nun ein wenig Ruhe angebrochen. Somit findet sich endlich wieder Zeit an den aktuellen Projekten zu arbeiten. Eines davon ist - wie einige wissen - meine Community http://dotnet-gui.com.

    Nun hat es bereits eine Neuerung gegeben: Seit kurzem hat sich der erste begeisterte Blog-Schreiber gefunden, der unter dem Motto WPF Tools eben solche für WPF vorstellt und beschreibt. Weitere Interessenten können sich gerne bei mir melden.

    Um die Qualität zu verbessern und einen weiteren Schritt in Richtung Community zu machen, wurde von mir ein Forum für Umfragen eröffnet. Darin wurden bereits die ersten beiden Umfragen gestellt:

    Diese Umfragen dienen dazu, auf die Bedürfnisse der Benutzer einzugehen und somit die Community an Eure Bedürfnisse anzupassen.

    Daher bitte ich um eine rege Teilnahme und viele Kommentare.

    Für Fragen, Unterstützung etc. stehe ich jederzeit zur Verfügung.

    Gewinnspiel zum Buch: Fortgeschrittene CSS-Techniken

    05.09.2008 08:55:49 | Jürgen Gutsch

    Das Webstandard-Blog veranstaltet bis zum 19.09.2008 ein kleines Gewinnspiel. Zu gewinnen gibt es das Buch Fortgeschrittene CSS-Techniken von Ingo Chao und Corina Rudel.

    Mehr zum Gewinnspiel und den Teilnahmebedingungen erfahrt Ihr hier.

    IE8: Internet Explorer Filters and Transitions

    05.09.2008 00:48:55 | Kay Giza

    Der Internet Explorer unterstützt ab Version 4.0 zahlreiche sogenannte Filters and Transitions. Ein sehr gutes Dokument und Beispiele direkt abrufbar von der Seite findet man hier: Introduction to Filters and Transitions With Microsoft Internet Explorer 4.0 and above, you can apply various multimedia-style visual effects to your Web page. You can implement these effects in Web pages using Cascading Style Sheets (CSS) properties. By combining filters and transitions with basic scripting, you have a powerful tool for creating visually engaging and interactive documents. Internet Explorer 5.5 and above supports the richest variety of optimized filters. Most examples in this article require that you have Internet Explorer 5.5 installed. This article includes the following sections, which explain how to use filters and transitions to add visual effects to your Web page. In diesem MSDN Library-Artikel sind sogenannte Seitenübergänge beschrieben. Sie ermöglichen im Internet Explorer ein "Fading" z.B. beim Betreten und Verlassen einer Seite. Diese Dynamische Filter... [...mehr]

    This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
    Visit:  MSDN Online | Kostenfreie MSDN Service-Hotline für Entwickler
    Daily News on MSDN:   MSDN Aktuell
    © Copyright 2006-2008 Kay Giza. All rights reserved. Legal

    Internet Explorer Application Compatibility-Artikel

    04.09.2008 21:39:24 | Kay Giza

    Ein 76 -Seiten großen Internet Explorer Application Compatibility-Artikel hat Microsoft heute veröffentlicht. Das Dokument beschreibt im Detail die "Fehlercodes" bzw. die Event Log-Meldungen bezüglich des Internet Explorer 8 und Internet Explorer 7, die das Microsoft Application Compatibility Toolkit aufzeichnet (praktisch eine Schnittstelle für die Arbeit mit den Kompatibilitätsdaten).
    Download & Infos: Internet Explorer Application Compatibility Article  

    This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
    Visit:  MSDN Online | Kostenfreie MSDN Service-Hotline für Entwickler
    Daily News on MSDN:   MSDN Aktuell
    © Copyright 2006-2008 Kay Giza. All rights reserved. Legal

    IE8: Internet Explorer Administration Kit 8 Beta (IEAK)

    04.09.2008 21:26:03 | Kay Giza

    Internet Explorer Administration Kit (IEAK) ermöglicht äußerst kostengünstiges und effizientes Bereitstellen und Verwalten von webbasierten Lösungen. Testen Sie das IEAK, um festzustellen, wie einfach ein benutzerdefinierter Browser maßgeschneidert für die Anforderungen Ihrer Kunden erstellt werden kann.
    Download & Infos: Internet Explorer Administration Kit 8 Beta

    This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
    Visit:  MSDN Online | Kostenfreie MSDN Service-Hotline für Entwickler
    Daily News on MSDN:   MSDN Aktuell
    © Copyright 2006-2008 Kay Giza. All rights reserved. Legal

    Innovate On jetzt auch auf Deutsch und mit neuen Angeboten

    04.09.2008 21:07:52 | Kay Giza

    http://www.innovateon.com/Auf dem Innovate On Portal finden unabhängige Softwarehersteller (ISVs) schnell und einfach zu entwicklungstechnischen Ressourcen und Tools. Dieses Portal steht Ihnen ab sofort auch auf Deutsch bereit. Überzeugen Sie sich von reichhaltigen Angeboten der einzelnen Produktbereichen Windows Vista, Windows Server 2008, SQL Server 2008, Windows Mobile, Microsoft Office, Dynamics, HPC Server 2008 und InnovateOn-the-web mit Expression 2.0. Über die integrierte Suchfunktion finden Sie Portal-übergreifend zu den richtigen Ressourcen entsprechend Ihrer angegebenen Rolle. Registrieren Sie in wenigen Schritten Ihre Softwarelösung und profitieren Sie zusätzlich von kostenlosem E-Mail Support und von der Bereichswahl entsprechend weiteren Angeboten. So stehen für Sie Gutscheine für kostenlose Software-Zertifizierungen für Windows Vista, Windows Server 2008, SQL Server 2008 und Windows Mobile bereit. Bitte beachten Sie, dass Ihnen diese zusätzlichen Angebote entsprechend Ihrer Bereichswahl bei der Registrierung einer Softwarelösung angezeigt werden, eine Mehrfachauswahl mit Registrierung nur einer Lösung ist möglich.

    This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
    Visit:  MSDN Online | Kostenfreie MSDN Service-Hotline für Entwickler
    Daily News on MSDN:   MSDN Aktuell
    © Copyright 2006-2008 Kay Giza. All rights reserved. Legal

    Der steinige Weg zum MS Certified Partner

    04.09.2008 19:08:48 | Lars Keller

    Eigentlich war der Weg bis jetzt gar nicht soo steinig um Certified Partner zu werden. Unsere LATIKA Knowledgebase wurde zertifiziert, geeignete Kundenreferenzen hinzugefügt und schon sind wir quasi zertifiziert... Jetzt kommt noch das Thema Rechnung begleichen. Das dachte ich sollte eigentlich die leichteste Übung sein aber weit gefehlt!

    Im Microsoft Partner-Portal klickt man sich durch den Rechnungsprozess, die ersten Seiten sind auch ganz harmlos, aber dann wenn man angeben soll, wie man bezahlen möchte, wird es knifflig. Ich wollte eine ganz normale Banküberweisung tätigen. Ok, erst einmal kein Problem aber dann möchte Microsoft  verschiedene Angaben von mir haben:

    Kann mir bitte jemand sagen, was die Sortiercodenummer ist??? Wenn man Google danach fragt, bekommt ich keine Treffer! Selbst live ist ratlos... hmm... *kopf_kratz*

    Naja, dachte ich mir, wenn google/live die nicht kennt, dann lass ich diese weg und faxe das einfach nach Irland so wie dies gefordert wird... aber huch, an welche Faxnummer denn? Auf dem kompletten Schreiben ist keine Faxnummer angegeben. Laut Text soll ich das faxen oder meinen die schicken?

    Tja, als ratloser Kunde werde ich Morgen mal wieder die MS Hotline anrufen und brav Nachfragen, vielleicht wissen die auch was die Sortiercodenummer ist! Also leichter hätte man es seinen Kunden nicht machen können! ;-)



    This weblog is sponsored by netcreate OHG.

    Der steinige Weg zum MS Certified Partner

    04.09.2008 18:08:48 | Lars Keller

    Eigentlich war der Weg bis jetzt gar nicht soo steinig um Certified Partner zu werden. Unsere LATIKA Knowledgebase wurde zertifiziert, geeignete Kundenreferenzen hinzugefügt und schon sind wir quasi zertifiziert... Jetzt kommt noch das Thema Rechnung begleichen. Das dachte ich sollte eigentlich die leichteste Übung sein aber weit gefehlt!

    Im Microsoft Partner-Portal klickt man sich durch den Rechnungsprozess, die ersten Seiten sind auch ganz harmlos, aber dann wenn man angeben soll, wie man bezahlen möchte, wird es knifflig. Ich wollte eine ganz normale Banküberweisung tätigen. Ok, erst einmal kein Problem aber dann möchte Microsoft  verschiedene Angaben von mir haben:

    Kann mir bitte jemand sagen, was die Sortiercodenummer ist??? Wenn man Google danach fragt, bekommt ich keine Treffer! Selbst live ist ratlos... hmm... *kopf_kratz*

    Naja, dachte ich mir, wenn google/live die nicht kennt, dann lass ich diese weg und faxe das einfach nach Irland so wie dies gefordert wird... aber huch, an welche Faxnummer denn? Auf dem kompletten Schreiben ist keine Faxnummer angegeben. Laut Text soll ich das faxen oder meinen die schicken?

    Tja, als ratloser Kunde werde ich Morgen mal wieder die MS Hotline anrufen und brav Nachfragen, vielleicht wissen die auch was die Sortiercodenummer ist! Also leichter hätte man es seinen Kunden nicht machen können! ;-)

    Retrieving values from an IDataReader

    04.09.2008 16:57:00 | Andre Loker

    Despite the undoubted advantages of ORM you probably need to fetch data directly from an IDataReader from time to time. Getting values out of the data reader is easy at first glance. However, there are some issues that you should be aware of.

    Basic usage

    Assume we have a simple table that holds comments for a web log or something similar:

    image

    (The UI is German, but I guess you know what the columns mean. If not: it's "Column name", "Data type" and "Allow Nulls")

    Let's query all data in the table:

     using (var con = new SqlConnection(connectionString)) {
       con.Open();
       var cmd = new SqlCommand("SELECT * FROM Comment", con);
       using(var rdr = cmd.ExecuteReader()) {
         while(rdr.Read()) {
           var id = rdr.GetInt32(0);
           var post = rdr.GetInt32(1);
           var position = rdr.GetInt32(2);
           var text = rdr.GetString(3);
           Console.WriteLine("{0,-3} {1,-3} #{2,-3} {3}", id, post, position, text);
         }
       }
     }

    Nothing fancy here, we simply query all all rows and columns and print their values.

    The index problem

    Look at the way we retrieve data from he reader:

     var id = rdr.GetInt32(0);
     var post = rdr.GetInt32(1);
     var position = rdr.GetInt32(2);
     var text = rdr.GetString(3);

    Using indices this way is probably not the best solution, especially because we use SELECT * to retrieve all columns. If the order of the columns change in the database, your application either crashes or it will using the wrong columns (the latter can arguably be the worse situation). Errors regarding this problem what be visible until runtime, which makes the code quite hard to maintain.

    If we changed the query to something like

     SELECT ID, Post, Position, Text FROM Comment

    we could at least prevent the index related issues because we would fetch the columns in an order that is defined by our application, not by the database.

    As an alternative we could use IDataReader.GetOrdinal to determine the index of the columns at runtime:

     var cmd = new SqlCommand("SELECT * FROM Comment", con);
      
     using (var rdr = cmd.ExecuteReader()) {
      
       // determine the indices of the columns and cache them for efficiency
       var idIndex = rdr.GetOrdinal("ID");
       var postIndex = rdr.GetOrdinal("Post");
       var positionIndex = rdr.GetOrdinal("Position");
       var textIndex = rdr.GetOrdinal("Text");
      
       while (rdr.Read()) {
         var id = rdr.GetInt32(idIndex);
         var post = rdr.GetInt32(postIndex);
         var position = rdr.GetInt32(positionIndex);
         var text = rdr.GetString(textIndex);
         Console.WriteLine("{0,-3} {1,-3} #{2,-3} {3}", id, post, position, text);
       }
     }

    Here I again used SELECT *, but it would work exactly the same way with explicit column selection.

    There are more ways to achieve the same effect. You can use the indexer of the data reader to fetch the columns by name:

     using (var rdr = cmd.ExecuteReader()) {
      
       while (rdr.Read()) {
         var id = rdr["ID"];
         var post = rdr["Post"];
         var position = rdr["Position"];
         var text = rdr["Text"];
         Console.WriteLine("{0,-3} {1,-3} #{2,-3} {3}", id, post, position, text);
       }
     }

    Be aware though that the indexer unlike the explicit GetXYZ() methods only returns objects. If you need the values to have the correct type you have to cast:

     while (rdr.Read()) {
       int id = (int)rdr["ID"];
       int post = (int)rdr["Post"];
       int position = (int)rdr["Position"];
       string text = (string)rdr["Text"];
       Console.WriteLine("{0,-3} {1,-3} #{2,-3} {3}", id, post, position, text);
     }

    (I didn't use variable type inference (var) in this example to stress the fact that we are using ints and strings instead of objects)

    "OK", you say, "with this knowledge I can now master data readers easily". Maybe not yet. There are two more issues.

    The data type problem

    Assume that you decide that your app will never have more than a few hundred comments per post. To save space in the database you change the data type of the Position column (which describes the order of comments for a specific post) from int to smallint. If you run any of the code examples above you'll probably be surprised that they'll all (except the one that uses the string indexer without casting) fail with an InvalidCastException:

    Unhandled Exception: System.InvalidCastException: Specified cast is not valid.

    Why is that? In the case of GetInt32 let's look at the remarks in the documentation:

    No conversions are performed; therefore, the data retrieved must already be a 32-bit signed integer.

    If the data coming from the database is a 16-bit integer (aka smallint) this call will therefore fail. To make the code work again you'd need to use GetInt16 instead.

    And what about the cast in  (int)rdr["Position"]? After all, a 16-bit signed integer (short) should be castable to an int. While this is true, keep in mind the indexer of the data reader returns a boxed version of the short value as an object. Unboxing a value must always be done using the type of the boxed value (or one of its interfaces). The conversion from short to int can only take place after the value has been unboxed. That is, use either this (for implicit conversion to int):

     int position = (short)rdr["Position"];

    or this (for explicit conversion to int):

     var position = (int)(short)rdr["Position"];

    The data type problem can be really annoying because data type mismatches just like the index problem will be visible at runtime only. It's tedious to hunt down these bugs and it makes modification to the database excessively expensive.

    You can avoid this problem to great extent if you don't force a "hard" conversion of the column value with GetXYZ and casts. Instead use the "soft" conversion methods provided by the Convert class. Here's the example from above again, but this time it's more robust against data type changes.

     var cmd = new SqlCommand("SELECT * FROM Comment", con);
      
     using (var rdr = cmd.ExecuteReader()) {
       while (rdr.Read()) {
         var id = Convert.ToInt32(rdr["ID"]);
         var post = Convert.ToInt32(rdr["Post"]);
         var position = Convert.ToInt32(rdr["Position"]);
         var text = Convert.ToString(rdr["Text"]);
         Console.WriteLine("{0,-3} {1,-3} #{2,-3} {3}", id, post, position, text);
       }
     }

    (Again, feel free to improve the code by replacing SELECT * with an explicit column list and/or use the index based indexer of the data reader instead)

    The DBNull problem

    There's one final issue I want to write about. In the examples above all columns are explicitly NON NULL. What if the columns contain NULL?

    Let's assume for now that the columns Post, Position and Index could be NULL (ignoring the fact that it wouldn't make much sense in that context). How would our code look like? Maybe like this:

     int id = Convert.ToInt32(rdr["ID"]);
     int? post =     rdr["Post"]     == null ? (int?)null : Convert.ToInt32(rdr["Post"]);
     int? position = rdr["Position"] == null ? (int?)null : Convert.ToInt32(rdr["Position"]);
     string text =   rdr["Text"]     == null ? null       : Convert.ToString(rdr["Text"]);

    (I aligned the code a bit fore readability in this example)

    You'd maybe expect that rdr["Position"] returns null if the column contains NULL. Run the example and you'll see that it's not the case. This is important to now: columns that contain NULL in the database will be returned as an instance of DBNull by the data reader! Furthermore DBNull can't be converted to any other datatype (int, short etc.) with one exception: if Convert.ToString is called on a DBNull object, an empty string is returned (at least in the Sql Server implementation of IDataReader).

    To check whether a column in the database contains NULL it's therefore not valid to check whether a value returned by the data reader equals null (it won't ever). Instead, check whether the returned value is a DBNull. There are basically two ways for this. Either use IsDBNull:

     if(rdr.IsDBNull(1 /* column index */) {
       // value is NULL
     }

    or check the type of the value directly:

     if(rdr["TheColumn"] is DBNull){
       // value is NULL
     }

    The example from above should therefore look something like:

     int id = Convert.ToInt32(rdr["ID"]);
     int? post     = rdr["Post"]     is DBNull ? (int?)null : Convert.ToInt32(rdr["Post"]);
     int? position = rdr["Position"] is DBNull ? (int?)null : Convert.ToInt32(rdr["Position"]);
     string text   = rdr["Text"]     is DBNull ?       null : Convert.ToString(rdr["Text"]);

    (As always: using the string based indexer is just one option to retrieve values, the same is applicable in case you use indices)

    While the code above is not the most efficient piece of C# ever written it covers many of the problems I mentioned in this article:

    • the code does not depend on the order of the columns in the database.
    • the code can handle a fair amount of possible data type changes made to the table
    • the code can handle NULL values

    For convenience, you might want to write some helper methods that simplify the task of retrieving values from the data reader.

     public static int? GetInt32(IDataRecord dr, string columnName) {
       var value = dr[columnName];
       return value is DBNull ? (int?) null : Convert.ToInt32(value);
     }
      
     public static int? GetInt32(IDataRecord dr, int columnIndex) {
       return dr.IsDBNull(columnIndex) ? (int?) null : Convert.ToInt32(dr[columnIndex]);
     }
      
     public static string GetString(IDataRecord dr, string columnName) {
       var value = dr[columnName];
       return value is DBNull ? null : Convert.ToString(value);
     }
      
     public static string GetString(IDataRecord dr, int columnIndex) {
       return dr.IsDBNull(columnIndex) ? null : Convert.ToString(dr[columnIndex]);
     }

    You can then use those methods like this:

     int id = Convert.ToInt32(rdr["ID"]);
     int? post = GetInt32(rdr, "Post");
     int? position = GetInt32(rdr, "Position");
     string text = GetString(rdr, "Text");

    Of course, if you're using C# 3 you could make the methods above extensions to IDataRecord. In fact, I've written those extension methods for you (download ISC licensed source here). It basically does two things:

    • Provide equivalents to all those GetXYZ methods in IDataRecord that accept a column name instead of an index. Those methods are shortcuts for casting the values of reader["ColumnName"] to the proper type, but they suffer from the same data type and NULL value problem as their index based counterparts. Use them only for non null columns of which you know the data type exactly.
    • Provide "safe" versions of those methods that don't suffer from the data type problem and the NULL problem. I called those methods GetSafeXYZ (where XYZ is the data type of course). You won't find "safe" methods that accept a column index, but with the knowledge you - hopefully - gained from this article you should be able to write them yourself.

    Here's the example from above using the "safe" methods:

     var cmd = new SqlCommand("SELECT * FROM Comment", con);
      
     using (var rdr = cmd.ExecuteReader()) {
       while (rdr.Read()) {
         int id = rdr.GetInt32("ID");
         int? post = rdr.GetSafeInt32("Post");
         int? position = rdr.GetSafeInt32("Position");
         string text = rdr.GetSafeString("Text");
      
         Console.WriteLine("{0,-3} {1,-3} #{2,-3} {3}", id, post, position, text);
       }
     }

    Attachments:

    DataRecordExtensions.cs (20.37 kb)

    50 Freikarten zu gewinnen fuer den Herbstcampus

    04.09.2008 10:07:41 | Kay Giza

    Bookware, der Herausgeber vom KaffeeKlatsch veranstaltet vom 15. bis 18. September 2008 in Nürnberg eine Konferenz für Software-Entwickler, Architekten und Projektleiter. Microsoft ist Partner des Entwickler-Kongresses. Bookware verlost nun in einem Online-Gewinnspiel 50 Freikarten im Wert von jeweils 1.300,– EUR... [... mehr]

    This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
    Visit:  MSDN Online | Kostenfreie MSDN Service-Hotline für Entwickler
    Daily News on MSDN:   MSDN Aktuell
    © Copyright 2006-2008 Kay Giza. All rights reserved. Legal

    Der steinige Weg zum MS Certified Partner

    04.09.2008 09:08:04 | Lars Keller

    Eigentlich war der Weg bis jetzt gar nicht soo steinig um Certified Partner zu werden. Unsere LATIKA Knowledgebase wurde zertifiziert, geeignete Kundenreferenzen hinzugefügt und schon sind wir quasi zertifiziert... Jetzt kommt noch das Thema Rechnung begleichen. Das dachte ich sollte eigentlich die leichteste Übung sein aber weit gefehlt!

    Im Microsoft Partner-Portal klickt man sich durch den Rechnungsprozess, die ersten Seiten sind auch ganz harmlos, aber dann wenn man angeben soll, wie man bezahlen möchte, wird es knifflig. Ich wollte eine ganz normale Banküberweisung tätigen. Ok, erst einmal kein Problem aber dann möchte Microsoft  verschiedene Angaben von mir haben:

    Kann mir bitte jemand sagen, was die Sortiercodenummer ist??? Wenn man Google danach fragt, bekommt ich keine Treffer! Selbst live ist ratlos... hmm... *kopf_kratz*

    Naja, dachte ich mir, wenn google/live die nicht kennt, dann lass ich diese weg und faxe das einfach nach Irland so wie dies gefordert wird... aber huch, an welche Faxnummer denn? Auf dem kompletten Schreiben ist keine Faxnummer angegeben. Laut Text soll ich das faxen oder meinen die schicken?

    Tja, als ratloser Kunde werde ich Morgen mal wieder die MS Hotline anrufen und brav Nachfragen, vielleicht wissen die auch was die Sortiercodenummer ist! Also leichter hätte man es seinen Kunden nicht machen können! ;-)

    Was ist Architektur?

    04.09.2008 09:08:00 | Peter Bucher

    Genau diese Frage habe ich Golo gestellt.

    Die Kernaussage von Golo ist m.E.:

    Bei der Programmierung geht es um das was, bei der Architektur um das wie.
    Wird beides miteinander verbunden, kann von Entwicklung gesprochen werden.

    Meine Persönliche Erfahrung:
    Wenn jemand programmieren lernt, wird anfangs in den meisten Fällen auf das was fokusiert.

    Häufig endet das zwar mit der Erfüllung der "oberflächlichen" Anforderung des Klienten und damit sinnigerweise auch nach dem EVA-Prinzip (Eingabe / Verarbeitung / Ausgabe).

    Im Laufe der Zeit merkt der werte Programmierer dann, dass er die gewünschte Erweiterung / Änderung doch nicht so einfach und schnell umsetzen kann, wie gedacht / gewünscht.
    Und genau an diesem Punkt fängt er sicher an - auch wenn vielleicht unbewusst - sich mit der Architektur auseinanderzusetzen.
    Ich denke folgender Satz trifft es gut:

    Ein guter Architekt ist noch nie vom Himmel gefallen und war anfangs meistens auch "erst" ein Programmierer.

    Ein guter Anfang um den Zielen "Qualitativ gute Software" und "Entwickler" Rechnung zu tragen, ist sicher die vorgängige Auseinandersetzung mit den Anforderungen.
    Also auch mal den Block zur Hand nehmen. Etwas auf Papier bringen, aus verschiedenen Blickwinkeln betrachten und dann erst einen Prototyp zu bauen.

    So kann schon viel zur Qualität beigetragen werden und - was noch schöner ist - das Arbeiten macht mehr Spass (Vorallem das nachträgliche :-)).

    In dem Sinne: Gute Entwicklung!

    Mehrspaltiges Layout mit DIVs und CSS

    03.09.2008 23:06:00 | Jürgen Gutsch

    Immer wieder wird die Frage gestellt, wie man ein mehrspaltiges Layout standardkonform mit CSS für moderne Browser erstellen kann. Ja, es gibt schon diverse Beispiele im Netz, aber ich möchte hier mal eine Variante vorstellen, die ich selber des öfteren Nutze.

    Inspiriert wurde ich für diese Variante vom Dirk Jesses YAML Framework und seinem Buch "CSS Layouts - Praxislösungen mit YAML 3.0". Diese Varianten nutzt ein bestimmtes verhalten des CSS Floatings aus.

    <div id="main">
        </div id="col1">
        </div id="col2">
        </div id="col3">
    </div>

    Es soll zum Beispiel ein Layout mit drei Spalten erzeugt werden. Zwei schmale Spalten rechts und links und eine breite Content-Spalte in der Mitte. Alle Spalten sollen durch eine senkrechte Linie voneinander getrennt werden.

    #col1
    {
        width: 150px;
        float: left;
    }
    #col2
    {
        width: 150px;
        float: right;
    }
    #col3
    {
        margin-left: 150px;
        margin-right: 150px;
    }

    Dieser CSS Code richtet die erste Spalte nach links, die zweite Spalte nach rechts und die dritte Spalte mittig zwischen den beiden ersten aus.

    Das Problem das sich jetzt schnell stellen wird ist, dass es nicht ganz einfach ist, alle Spalten auf gleiche Länge zu bringen, bzw. die senkrechten Linien bis ganz nach unten laufen zu lassen, wenn eine der drei Spalten mehr Inhalt hat als die anderen.

    Schritt eins für die Senkrechten Trennlinien ist relativ einfach. Da die mittlere Spalte, unsere Inhaltsspalte, in der Regel den meisten Inhalt haben wird, bekommt diese rechts und Links einen Rand von 1px Breite:

    #col3
    {
        margin-left: 150px;
        margin-right: 150px;
        border-left: solid 1px #000000;
        border-right: solid 1px #000000;
    }

    Die Linien reichen also bis nach unten, wenn die dritte Spalte mehr Inhalt hat. Wenn jetzt allerdings eine der anderen beiden Spalten mehr Inhalt haben, hören die Senkrechten Linien mittendrin auf. Die mittlere Spalte wird nicht bis nach unten aufgedrückt. Eine oft verwendete Lösung ist es, die sogenannten Faux Columns (hier sehr schön von Peter beschrieben) zu verwenden. Die Linien mit einem Hintergrundbild zu erzeugen. In diesem Fall will ich aber die dritte Spalte dazu bringen, sich der Höhe eine der anderen Spalten anzupassen.

    Wenn man das Verhalten von floatenden HTML Elementen kennt, ist es ganz einfach, sich dieses Verhalten zu Nutze zu machen: Alle drei Spalten sind floatende Spalten. Die erste nach links, die zweite nach rechts und die dritte (obwohl nicht explizit gesetzt) ebenfalls nach rechts, da sich das floating (entgegen allen anderen CSS Vererbungsregeln) auf allen folgenden Elementen fortsetzt, bis man irgendwo in die andere Richtung floatet oder mit clear:both das floating ganz aufhebt.

    Ich könnte also am Ende der dritten Spalte ein Element einfügen, welches das floating aufhebt:

    <div id="main">
        </div id="col1">
        </div id="col2">
        <div id="col3">
            </div id="clearing">
        </div>
    </div>

    #clearing
    {
        clear: both;
    }

    Es passiert genau das erwartete: Das neue Element floatet nicht mehr und wird unterhalb des längsten floatenden Elements neu ausgerichtet. Da es sich innerhalb der dritten Spalte befindet, zieht es diese nach unten auf. Die dritte Spalte wird also so lang wie die längste der vorigen Spalten.

    Aus irgend einem Grund gibt es im IE noch Darstellungsprobleme, wenn in der dritten Spalte Text markiert wird. Die rahmen werden während dem Markieren einfach entfernt, sie lösen sich auf. Das wird behoben, wenn man in dieser Spalten explizit eine Hintergrundfarbe (hier weiß) setzt und das clearing-DIV explizit auf eine Breite von 100% setzt.

    #col3
    {
        margin-left: 150px;
        margin-right: 150px;
        border-left: solid 1px #000000;
        border-right: solid 1px #000000;
        background-color:#FFFFFF;
    }
    #clearing
    {
        clear: both;
        width: 100%;
    }

    Auf ein weiteres Problem stößt man, wenn man die beiden seitlichen Spalten anders einfärben möchte. Die erste und zweite Spalte können nicht direkt eingefärbt werden, da in Wirklichkeit nicht alle Spalten gleich lang sind, sondern nur die dritte sich der längsten Spalte anpasst. Ist die dritte Spalte die längste, hören die anderen Beiden vorher auf. Die eingefärbten Bereiche würden also nicht bis nach unten durchgehen.

    Auch hier helfen wieder die Faux Columns oder zwei weitere Tricks.

    1) Man setzt die Hintergrundfarbe des übergeordneten Elements. Der Vorteil ist die Einfachheit, man muss die Farbe nur einmal setzen. Der Nachteil ist, dass nicht jede Spalte eine eigene Farbe haben kann.

    2) Man nutzt wieder die dritte Spalte aus. Man entfernt einfach die margin-Angaben und setzt die Breite der rechten und Linken Rahmen auf die Breite der rechten und linken Spalte und gibt jedem Rahmen die gewünschte Farbe. Das ist alles:

    #col1
    {
        width: 150px;
        float: left;
    }
    #col2
    {
        width: 150px;
        float: right;
    }
    #col3
    {
        border-left: solid 150px red;
        border-right: solid 150px green;
        background-color:#FFFFFF;
    }

    Diese Variante wird von IE7, Opera 9.51, FireFox 3.0.1 und Chrome 0.2 (*g*) unterstützt. Wer ganz sicher gehen möchte und Exoten, sowie ältere Browser unterstützen möchte, sollte auf das YAML Framework zurückgreifen, das noch viele weitere Tricks und Hacks beinhaltet.

    Zwei Beispiele sind hier zu finden: floatingcolumsn.zip

    Chrome didn't survive long...

    03.09.2008 22:31:51 | Andre Loker

    ... on my computer. Less than 24 h after I downloaded Google's first own browser I already uninstalled it. Sure, it's slick and lightning fast. But I can't help it: I don't trust it.

    Excerpt from the "Google Chrome Privacy Notice":

    Your copy of Google Chrome includes one or more unique application numbers. These numbers and information about your installation of the browser (e.g., version number, language) will be sent to Google when you first install and use it and when Google Chrome automatically checks for updates.  If you choose to send usage statistics and crash reports to Google, the browser will send us this information along with a unique application number as well.  Crash reports can contain information from files, applications and services that were running at the time of a malfunction.

    It's not completely new that software has a unique ID which is frequently sent back "home". Firefox also has a unique ID used for the auto update feature (see Firefox Privacy Policy, search for "Automated Update Service"). It's the fact that everything you search for, everything you enter into the "Omnibox" is sent to Google (at least in the default configuration if Google is your search engine). It does not take much to come up with some really scary scenarios in which your ID is combined with your search profile. I'm not saying Google is doing it or planning it, I'm just pointing out that with Chrome there's a much higher potential for Google to profile individual usage behaviour.

    Still convinced of Chrome? Read on. Excerpt from the "Google Chrome Terms of Service" (Update: this has been changed in the meantime by Google and does not represent the current state of the EULA, see "Update 3" below)

    11. Content license from you

    11.1 You retain copyright and any other rights you already hold in Content which you submit, post or display on or through, the Services. By submitting, posting or displaying the content you give Google a perpetual, irrevocable, worldwide, royalty-free, and non-exclusive license to reproduce, adapt, modify, translate, publish, publicly perform, publicly display and distribute any Content which you submit, post or display on or through, the Services. This license is for the sole purpose of enabling Google to display, distribute and promote the Services and may be revoked for certain Services as defined in the Additional Terms of those Services.

    11.2 You agree that this license includes a right for Google to make such Content available to other companies, organizations or individuals with whom Google has relationships for the provision of syndicated services, and to use such Content in connection with the provision of those services.

    11.3 You understand that Google, in performing the required technical steps to provide the Services to our users, may (a) transmit or distribute your Content over various public networks and in various media; and (b) make such changes to your Content as are necessary to conform and adapt that Content to the technical requirements of connecting networks, devices, services or media. You agree that this license shall permit Google to take these actions.

    11.4 You confirm and warrant to Google that you have all the rights, power and authority necessary to grant the above license.

    I'm no lawyer, but this sounds very much like "Google has the right to do whatever they like with the data you send and receive using their services". This is unacceptable.

    Call me a follower, call be paranoid, call be simple-hearted. But I'm not willing to take part in this new chapter of informational transparency. I know that Google is by far not the only threat for privacy. But the more we combine different services of one specific provider the more traceable we become. I'm always open for a discussion, so if you feel like being able to convince me, have a shot at it!

    Thanks to Hennie for pointing me to the Chrome terms of service.

    Update: "This Post Not Made In Chrome; Google's EULA Sucks" - a nice post from someone who actually is a lawyer.

    Update 2: As far as I understand, Chromium (the open source project on which Google Chrome is based) does not fall under the same terms of service, so chances are that if you're using a Chromium build you don't grant any license for submitted content to Google.

    Update 3: In the meantime Google has replaced paragraph 11 of the Chrome Eula:

    11. Content license from you

    11.1 You retain copyright and any other rights you already hold in Content which you submit, post or display on or through, the Services.

    Upgrading BlogEngine.NET from 1.4 to 1.4.5.x

    03.09.2008 21:31:33 | Andre Loker

    About two month ago I wrote about small issues I faced when I upgraded from BlogEngine.NET 1.3.1 to version 1.4. Today I updated my blog software again, this time to the trunk version of BlogEngine.NET. Almost everything went smoothly there were a few glitches I had to fix before I was satisfied with the results.

    Here are the most important points: 

    • First of all, the issues with the strange author name in the RSS feed (mail.nospam@nospam.andreloker.de) has been taken care of in version 1.4.5.5. Nice! Note that the official 1.4.5 release from august 1st does not yet fix the issue. You'll need a revision 16044 or higher.
    • The strange e-mail fields (second point in my first post) are not really fixed - as far as "fixed" is the correct term - according to Mads Kristensen this was attentional. Mads has changed the behaviour a bit, however to the worse if you ask me. As mentioned in my first post if someone contacts you with the contact form you'd get an e-mail with your name and your email address as the "From" field. "Sender" and "Reply-To" headers are added which include the author's name and e-mail address. I mentioned some issues that are caused by this, for example that Thunderbird uses the "From" field when quoting a mail ("Andre Loker wrote:")
      Now it has changed slightly: the "From" field contains the name of the mail's author but the e-mail address of your blog. While this fixes the issue when quoting the mail it causes a worse issue: if you try to add the author to your address book, chances are that your mail application uses the author's name but your e-mail address. I created an issue for this bug - at least I think it should be considered a bug.
      To sanitize the situation I modified the code to create one reasonable "from" header and don't add any further headers to the mail:
       // Contact.aspx.cs - replace this:
       mail.From = new MailAddress(BlogSettings.Instance.Email, name);
       mail.ReplyTo = new MailAddress(email, name);
       mail.Sender = mail.ReplyTo;
        
       // with:
       mail.From = new MailAddress(email, name);
    • The current version of the contact form behaves a bit odd or doesn't work at all if attachments are disabled in the contact form, as it is in my blog. The issue is known, so we can expect a fix in the future. As a preliminary fix you can change contact.aspx like this:
       // line 48ff:
       // replace:
       if ($('<%=txtAttachment.ClientID%>').value.length > 0)
         return true;
        
       //with
       <% if(BlogSettings.Instance.EnableContactAttachments) {%>
       if ($('<%=txtAttachment.ClientID%>').value.length > 0)
         return true;
       <%}%>

    Aside from these issues the people behind BlogEngine.NET have done a great task to improve their product.  I wholeheartedly recommend it to anyone asking for .NET based blogging software.

    Vista x64 :-)

    03.09.2008 21:17:13 | Lars Keller

    Ich muss ja mal loswerden, dass ich Vista mag! :-)

    Endlich ist die Migration von Windows XP x64 auf Vista x64 bei mir vollzogen. Es hat lange gedauert bis ich mich endlich entschlossen habe Vista zu installieren. Hätte ich gewusst, wie "easy" die Installation ist, hätte ich das schon längst gemacht. Es mag sicherlich auch eine Rolle gespielt haben, dass ich erst jetzt migriert habe (SP1 ist draußen, die Hardwarehersteller haben Treiber am Start, etc.).

    Nachdem ich so schlechte Erfahrung mit dem x64 von Windows XP gemacht hatte, war mir schon, trotz gutem zureden von Alex und Torsten, ein bissel mulmig zumute wieder x64 zu installieren. Aber jedem der ähnliche Überlegungen hat, kann ich nur raten -> installieren ;-) Es sei denn man möchte etwas mit Soundverarbeitung machen, da würde ich auf jeden Fall sicher gehen, ob der Hersteller einen x64 Treiber anbietet.



    This weblog is sponsored by netcreate OHG.

    Vista x64 :-)

    03.09.2008 20:17:13 | Lars Keller

    Ich muss ja mal loswerden, dass ich Vista mag! :-)

    Endlich ist die Migration von Windows XP x64 auf Vista x64 bei mir vollzogen. Es hat lange gedauert bis ich mich endlich entschlossen habe Vista zu installieren. Hätte ich gewusst, wie "easy" die Installation ist, hätte ich das schon längst gemacht. Es mag sicherlich auch eine Rolle gespielt haben, dass ich erst jetzt migriert habe (SP1 ist draußen, die Hardwarehersteller haben Treiber am Start, etc.).

    Nachdem ich so schlechte Erfahrung mit dem x64 von Windows XP gemacht hatte, war mir schon, trotz gutem zureden von Alex und Torsten, ein bissel mulmig zumute wieder x64 zu installieren. Aber jedem der ähnliche Überlegungen hat, kann ich nur raten -> installieren ;-) Es sei denn man möchte etwas mit Soundverarbeitung machen, da würde ich auf jeden Fall sicher gehen, ob der Hersteller einen x64 Treiber anbietet.

    Faux Columns / Unechte Spalten oder: Wie werden zwei Divs gleich hoch?

    03.09.2008 20:17:00 | Peter Bucher

    Viele kennen sicherlich das Problem bei der Benutzung von CSS, dass zwei Spalten nicht gleich hoch werden,
    bzw. sich die Spalte mit weniger Inhalt nicht an der höheren anpasst.

    Rein mit XHtml / CSS Mitteln ist es nicht möglich (Für manche Fälle schon, wie Jürgen beschreibt) das zu erreichen, da muss getrickst werden.
    Ein bzw. _der_ Trick ist als "Faux Columns" oder auf Deutsch "Unechte Spalten" bekannt.

    Ausgangslage ist bspw. folgendes Markup:

    CSS:

    #left {
        float: left;
        width: 200px;
        background-color: gray;
    }
    #right {
        margin-left: 200px;
    }

    XHTML:


    <div id="left">
        &nbsp;
    </div>
    <div id="right">
        <!-- Viel Inhalt -->
    </div>
    </div style="clear: left;">

    Also simple zwei Spalten.
    Die graue Hintergrundfarbe geht jedoch nicht so weit nach unten, wie die linke Spalte.
    Mithilfe der "Faux Colums" Technik wird die Verlängerung nach unten der ersten Spalte mithilfe eines Bildes simuliert.
    Es braucht dazu ein Bild das 1 Pixel hoch und x Pixel breit ist und dazu noch einen Container der die zwei Spalten umschliesst.

    Der innere Container der höher ist, macht den umgebenden Container höher, d.h. er passt sich immer an der längsten Spalte an,
    genau das nutzen wir aus.
    Dabei wird auf den umschliessenden Container ein Hintergrundbild gesetzt, dieses in der y-Richtung (Nach unten) wiederholt und ggf. noch ausgerichtet (left / Prozent- oder Pixelangaben).

    So das die Lösung schlussendlich so aussieht:

    Zusätzliches CSS:

    #wrapper {
        background: url(Bild.jpg) repeat-y left;
    }

    Finales XHTML:


    <div id="wrapper">
        <div id="left">
            &nbsp;
        </div>
        <div id="right">
            <!-- Viel Inhalt -->
        </div>
        </div style="clear: left;">
    </div>

    Zusätzlich zu dieser kleinen Demonstration empfehle ich den Artikel auf alistapart, oder die deutsche Übersetzung davon.

    QuickContest beendet - die Gewinner stehen fest

    03.09.2008 19:23:18 | Jan Welker

    Das Konzept des QuickContest scheint aufgegangen zu sein, in zwei Wochen wurden 28 Snippets eingereicht. Vielen Dank an alle, die sich beteiligt haben!

    Gordon und ich, haben uns die Snippets genauer angesehen und haben 3 Gewinner ausgewählt.

    Je ein Amazon Gutschein im Wert von 20€ geht an Tim, Mr. Bart Simpson und an NB01.

    Herzlichen Glückwunsch an die Gewinner!

    Wie es sich für einen QuickContest gehört, werden die Gutscheine per Email an die Gewinner zugestellt, schneller geht es nicht ;-)

    GC08 - AntMe Wettbewerb

    03.09.2008 15:29:00 | Lori Grosland

    Am Anfang des Jahres haben AntMe zusammen mit dem Bayerischen Unternehmensverband Metall und Elektro e.V. einen Wettbewerb aufgerufen.  Das Finale von dem AntMe-BayME-Wettbewerb fand dieses Jahr auf der Games Convention statt.  Aufgabe des Wettbewerbes war es, ein eigenes Ameisenvolk zu programmieren.  Jedes Volk wird fünf Mal gespielt und die höchste Punktzahl gewinnt. 

    Das ganze Finale auf der GC-Bühne könnt Ihr in diesem Video anschauen.  Leider ist die Musik von nebenan ab und zu laut aber Ihr könnt bestimmt noch viel über AntMe und die Taktiken von den Teilnehmern erfahren.

    Zu erst auf der GC-Bühne haben Sebastian Loers und Tom Wendel AntMe vorgestellt.  Danach hat den Wettbewerb angefangen.  Mehrere Teilnehmer waren vor Ort und sind auf der Bühne gegangen, um zu erklären was sie gemacht haben.

    Final-Ergebnis…

    Platz 1: Thomas K.
    Platz 2: Nicole O., Andrea O., Tatjana W.
    Platz 3: Clemens W.
    Platz 4: Dominik K.
    Platz 5: Florian H.
    Kreativ-Preis: Marvin W., Thilo W., Raul W.

     Schaue mal dieses Video an, um die Interviews mit Tom Wendel und Gewinner Thomas K. zu sehen.

    Mehr Info über diesen AntMe Wettbewerb könnt Ihr hier lesen:
    http://antme.net/content/WettbewerbBayME.aspx

    GC08 - AntMe - Interviews mit Tom & Thomas

    03.09.2008 14:21:00 | Lori Grosland

    AntMe! war dieses Jahr schon wieder auf der Games Convention, um Besucher das Ameisensimulation-Spiel zu zeigen.  Mit AntMe kann man lernen, künstliche Intelligenz (KI) mit den Sprachen C# oder Visual Basic .NET zu programmieren.  AntMe macht jede Menge Spaß und man lernt natürlich auch etwas über die „eingebaute Intelligenz“ von Computerspielen. 

    Auf der GC habe ich mit Tom Wendel (AntMe Entwickler und Evangelist) über den AntMe Wettbewerb, der auf der GC stattgefunden ist und über die neue Version von AntMe gesprochen.  Ich habe ihn auch gefragt, wo das süße Ameise-Kostüm dieses Jahr ist.  Vielleicht erinnert Ihr sich von meinem AntMe-Video auf GC07, in dem Tom im Ameise-Kostüm zu sehen ist.  In diesem Video zeige ich auch ein paar Highlights von dem AntMe Wettbewerb und spreche auch mit dem Gewinner, Thomas K. aus Dingolfing.  Das komplette AntMe-Wettbewerb-Programm auf der GC-Bühne könnt Ihr bald auf meinem Blog auch anschauen.

    Vista x64 :-)

    03.09.2008 11:17:01 | Lars Keller

    Ich muss ja mal loswerden, dass ich Vista mag! :-)

    Endlich ist die Migration von Windows XP x64 auf Vista x64 bei mir vollzogen. Es hat lange gedauert bis ich mich endlich entschlossen habe Vista zu installieren. Hätte ich gewusst, wie "easy" die Installation ist, hätte ich das schon längst gemacht. Es mag sicherlich auch eine Rolle gespielt haben, dass ich erst jetzt migriert habe (SP1 ist draußen, die Hardwarehersteller haben Treiber am Start, etc.).

    Nachdem ich so schlechte Erfahrung mit dem x64 von Windows XP gemacht hatte, war mir schon, trotz gutem zureden von Alex und Torsten, ein bissel mulmig zumute wieder x64 zu installieren. Aber jedem der ähnliche Überlegungen hat, kann ich nur raten -> installieren ;-) Es sei denn man möchte etwas mit Soundverarbeitung machen, da würde ich auf jeden Fall sicher gehen, ob der Hersteller einen x64 Treiber anbietet.

    Google Chrome Beta available

    02.09.2008 22:34:18 | Andre Loker

    Google has released a beta version of it's browser Chrome. I've just downloaded it and only browsed over some sites I frequently use so I can't give an in-depth review. At least so far everything worked fine.

    I just wanted to let you know some thoughts of mine regarding Chrome:

    • Google is big, no doubt (in Germany Google has around 80% market share for search engines, at least that's what I heard). This combined with the fact that Google has proven to be capable of releasing powerful and useful applications in the past (Picasa, Google Earth) I think they have a good chance to gain a notable market share. But that's exactly the point that scares me. As of now Google defines what we can find on the Internet. In the future, will Google define how we consume it? Separation of power is an important concept of democracy, you know.
    • Chrome tries to redefine from scratch what a browser should do. Web has changed dramatically in the last years, so this intention comes right on time.
    • This comic strip regarding the Chrome technology is worth reading.
    • I've never optimised a site for WebKit, so I'm curious how this turns out
    • After several minutes of using Chrome I'm already missing my favourite Firefox plug ins: web developer toolbar, AdBlock plus, Firebug and YSlow

    All in all I'm excited as well as skeptical. I guess time will tell.

    Aspektorientierung – der natürliche nächste Schritt

    02.09.2008 18:58:00 | Sebastian Jancke

    Angefangen hat Aspektorientierug mit Gregor Kiczales und seinem damaligen Forschuntsteam bei Xerox PARC. Seine Arbeit an “Metaobject Protocols” führte zur Erkenntnis, dass vor allem die Modularisierung von sog. “cross-cutting concerns” die größte Verbesserung brachte. Bei Xerox entstand dann AspectJ (welches heute ein Projekt im Eclipse-Bereich ist). AspectJ ist derzeit wohl die am meisten verbreitete AO-Sprache und vielleicht die einzige die wirklich in Produktion eingesetzt wird. Daneben existieren eine vielzahl von AO-Ansätzen durch Container wie das Spring-Framework oder Enterprise Java Beans (EJB), die eine weite Verbreitung gefunden haben und einer großen Zahl von Entwicklern einen einfachen Zugang zu AO-Technologie bieten.  Um zu verstehen, warum der Schritt zu Aspektorientierung natürlich und logisch ist, müssen wir zunächst verstehen, was treibende Kraft in der Weiterentwicklung der verschiedenen Paradigmen ist.

    1974 war es Edsger W. Dijkstra, der in seinem Artikel “On the role of scientific thought” den Begriff “separation of concerns” prägte:

    Let me try to explain to you, what to my taste is characteristic for all intelligent thinking. It is, that one is willing to study in depth an aspect of one's subject matter in isolation for the sake of its own consistency, all the time knowing that one is occupying oneself only with one of the aspects.

    [..] But nothing is gained --on the contrary!-- by tackling these various aspects simultaneously. It is what I sometimes have called "the separation of concerns", which, even if not perfectly possible, is yet the only available technique for effective ordering of one's thoughts, that I know of. This is what I mean by "focussing one's attention upon some aspect": it does not mean ignoring the other aspects, it is just doing justice to the fact that from this aspect's point of view, the other is irrelevant.

    (30th August 1974, Prof. Edsger W. Dijkstra)

    Dijkstra argumentierte, das wissenschaftliches Denken in der Entwicklung von Programmen fehlte, jedoch nötig sei um gute, fehlerfreie Programme zu konstruieren. Spätestens seit der erneuten Definition durch Chris Reade in seinem Buch “Elements of Functional Programming” gilt die Trennung der Anliegen als nötig, um die Komplexität eines Systems in den Griff zu bekommen. Die “Separation of concerns” kann als Geisteshaltung hinter dem Ziel der Modularisierung betrachtet werden. Damit ist aber noch nicht geklärt, was genau ein “concern” denn genau ist. Man könnte einen concern als jede Anforderung und jedes Anliegen an eine Software definieren, und dies scheint die anerkannte Definition zu sein. Dabei kann ein concern so generell wie “Interaktion mit einer Datenbank” sein, aber eben auch eine spezielle Berechnung detailliert vorgeben.

    Vor dem Problemen der nötigen Modularisierung stehen wir aber nicht alleine. Andere Branchen haben es auf ihre eigene Art gelöst. Architekten scheinen separate Pläne für Wasserversorgung, Stromleitungen, Abflüsse, Lichtinstallationen und natürlich die Konstruktion an sich anzufertigen. Darüber hinaus ist die Innenarchitektur ein  ganz eigenständiger Beruf.

    Modularisierung ist auf der einen Seite zwingend notwendig, um die Komplexität heutiger Anforderungen in Teile zu zerlegen und so zu reduzieren, damit ist jedoch unklar, wie weit wir die Modularisierung treiben müssen. Die Professorin Carliss Y. Baldwin von der Universität Harvard hat die Modularisierung von einem ökonomischen Blickpunkt aus untersucht und kam zu dem Schluss, dass Modularisierung eine treibende ökonomische Kraft ist, die ganze Märkte (zB den PC-Markt seit Einführung des modularisierten IBM-kompatiblen PCs) umkrempeln kann. Darüber hinaus hat sie auch die Modularisierung mittels Aspekten und den Optionswert von Aspekten untersucht und war Keynote-Speakerin bei der Konferenz AOSD 06. Interessant finde ich an dieser Stelle, dass auch Kent Beck bei seinem Plädoyer für möglichst späte Entscheidungen im eXtreme Programming mit Optionswerten argumentiert hat.

    Alle Paradigmen, die bisher zu Felde geführt wurden, von der Strukturierten Programmierung über Prozedurale, Funktionale bis hin zur Objektorientierten Programmierung hatten ein Ziel: bessere Modularisierung. Dabei hat jedes Paradigma seine eigenen Konzepte, ein Modul abzubilden (…, Funktionen, Objekte) kreiert. Dabei wurde jedoch eine Gruppe von Anliegen stets ausgeschlossen, weil sie bei der Dekomposition in Module dieser Paradigmen über Module hinweg verstreut waren und und somit faktisch unsichtbar wurden.  Die genannten Paradigmen sind nicht im Stande, diese Gruppe von Anliegen selbst zu modularisieren. Der Grund dafür ist die einfache Tatsache, dass es immer zu einer Zahl von Anliegen einige Anliegen gibt, die andere kreuzen (darauf komme ich noch zurück).

    Ich denke es ist klar, dass ich auf cross-cutting concerns hinaus will. Zu oft ist aber versucht worden AO zu verkaufen und dabei die “Neuen” mit einer Reihe von Fachbegriffen zu überladen. Da es sich bei der Aspektorientierung um einen völligen Paradigma-Wechsel handelt (der dennoch rückwärts kompatibel ist), halte ich es für eine gute Idee, vorerst auf genau diese Fachwörter ("buzzwords” ?) zu verzichten. Ich denke dieser Ansatz wird auch durch die Aussage von Gregor Kiczales gestützt, dass die Geisteshaltung von Aspektorientierung weitaus wichtiger ist, als die derzeitigen technischen Umsetzungen und ihre spezielle Ausprägung der Fachbegriffe. Würde man diese nutzen wollen, so müsste zunächst ihre allgemeine Semantik erklärt werden. Dies wird fast nie getan und erscheint für eine Einführung auch zu fortgeschritten.

    Im Jahre 2004 stellte Ted Neward, bei einer Podiumsdiskussion zum Thema AOP auf der Konferenz “The Server Side Symposium”, eine Aufgabe: Aspektorientierung zu erklären, ohne die gängigen “buzzwords” zu verwenden. Der Projektleiter des AspectJ-Projektes, Adrian Colyer (heute auch für SpringSource tätig) antwortete mit seinem Artikel “The Ted Neward Challenge (AOP without the buzzwords)”. Seine Argumentation basiert auf der Annahme, dass eine echte Trennung der Anliegen nur erreicht werden kann, wenn das Verhältnis von Konzepten zu Implementierungen genau 1:1 ist, also ein Konzept an genau einer Stelle in der Software Implementiert ist.

    Nehmen wir uns ein einfaches Problem (welches auch von Gregor Kiczales untersucht wurde): Eine Zeichentafel (Canvas) und eine Vielzahl verschiedener geometrischer Objekte (Shapes). Die verschiedenen Shapes (Dreieck, Viereck, Kreis, Oktaeder, …) verwalten ihre Eigenschaften und ihr Zeichenverhalten selbst. Wir modellieren sie als Objekte. Ebenso den Canvas. Ein weiteres Anliegen ist auch die Benachrichtigung des Canvas, wenn ein Shape sich verändert. Im Allgemeinen würde man dieses Anliegen durch eine Subject-Observer Beziehung zwischen Canvas und den verschiedenen Shape-Objekten implementieren. Bei allen Änderungen benachrichtigen die verschiedenen Shape-Objekte den Canvas. Das Anliegen der Benachrichtigung ist damit aber nicht mehr eigenständig modularisiert, denn alle verschiedenen Objekte (oder Klassen von Objekten) implementieren die Benachrichtigung auf ihre eigene Art. Wir haben also ein Verhältnis Konzept : Implementierung von 1 : n. Umgekehrt haben wir in einem Objekt nun mehr als ein Konzept implementiert und haben hier ein Verhältnis Konzept : Implementierung von n : 1. Die Krux liegt darin, dass wir schon bei einem sehr einfachen Beispiel ein Anliegen nicht mehr richtig Modularisieren konnten, weil es ein übergreifendes Anliegen ist. Skaliert man das Beispiel auf ein durchschnittlich großes System, ist die ganze Problematik daran vorstellbar.

    Nun ließe sich erwidern, dass vielleicht eine andere Art der Dekomposition das Problem gelöst hätte. Dies ist in der Forschung untersucht worden und derzeitiger Stand ist anscheinend, dass es nicht möglich ist. Das Problem wird “Tyranny of the dominant decomposition” genannt. Dies möchte ich anhand eines Beispieles illustrieren: Es soll eine Zeit gegeben haben, in der wir statt MP3s jede Menge CDs im Regal stehen hatten. Wir wollen aus den CDs schnell einige zu einem speziellen Genre suchen. Dazu könnten wir sie nach Genre sortieren. Allerdings würden wir auch gerne schnell CDs nach einem Namen suchen. Vielleicht wäre es also besser, die CDs nach Namen zu sortieren. Dann könnten wir aber nicht mehr schnell nach Genre ähnliche CDs suchen. Die Lösung scheint greifbar: wir sortieren nach Genre und jedes Genre wiederum nach Namen. Damit gehen wir den Kompromiss ein, dass wir nicht sehr schnell nach Namen suchen können, aber wir können sehr gut nach Genre suchen, selbst wenn wir zunächst eine spezielle CD gesucht haben. Das Anliegen “Genre” ist also hier die dominante Dekomposition über dem Anliegen “Namen” (verkürzt gesagt). Kommt nun aber noch das Anliegen hinzu, CDs zu einem Jahr zu finden, haben wir ein Problem, egal welche Dekomposition wir als dominant wählen. Es gibt also nur einen Ausweg: wir müssten sowohl die Suche nach Genre, als auch die Suche nach Namen und auch die Suche nach Jahren eigenständig Modularisieren. Dies scheint mit den Mitteln Plazierung der CDs im Regal nicht möglich, wir brauchen also einen Paradigma-Wechsel.

    Das Beispiel der CD-Sortierung zeigt nicht nur die Existenz von übergreifenden Anliegen aus der Problemdomäne heraus. Das Beispiel zeigt vor allem im Gegensatz zum Zeichenbrett, dass übergreifende Anliegen “mehrdimensional” sind und die Zahl der Dimensionen “unbegrenzt” sein kann. Diesem Umstand hat auch IBM mit der Forschung im HyperJ-Projekt Rechnung getragen.

    Für Viele ist dennoch Aspektorientierung derzeit vor allem eines: Aspektorientierte Programmierung (AOP), mit einem starken Hang eine Sache Namens “Logging” besonders schön zu lösen. Dabei ist der eigentliche Witz am “Hello world”-Beispiel der AOP die Tatsache, dass dort Tracing modularisiert wird. Innerhalb von Experimenten beobachtet wurde, das in vielen Fällen richtiges Logging – die Präsentation von Debug und Context-Informationen – eigentlich kein cross-cutting concern ist, weil für jeden Context die Anforderungen völlig unterschiedlich sind. Eine Ausnahme bildet vielleicht die einheitliche Protokollierung von Fehlern im System. Darüber hinaus scheint für Viele die Formel cross-cutting = nicht-funktional zu gelten. Das auch diese Reduktion der Aspektorientierung zu kurz greift, zeigt die Tatsache, dass erfahrene AO-Experten in der Regel den wahren Wert von AO bei funktionalen, zur Domäne gehörigen cross-cutting concerns sehen. Nicht zuletzt, weil nicht-funktionale, Infrastruktur-Anliegen heute von Containern (EJB, Spring, …) hinreichend gut modularisiert wurden. Gleichzeitig scheint mir hierher die Popularität der (falschen) Formel cross-cutting = nicht-funtional zu kommen. Eben weil die obigen Beispiele mit dem Zeichenbrett oder der CD-Sortierung keinerlei nicht-funktionale Anliegen enthält, mag ich diese besonders. Sie zeigen zum einen, dass bereits sehr simple Domänen cross-cutting concerns enthalten. Zum anderen ist aber auch sichtbar, dass diese meist aus der Problemdomäne entstammen und (gefühlt) die “kleine” Zahl der nicht-funktionalen Infrastruktur Anliegen übersteigt.

    Heute, ca. 10 Jahre nach der “Erfindung” der AO ist die Aspektorientierte Programmierung weitgehend stabil und wird produktiv eingesetzt (zumindest im Falle von AspectJ). Forschung findet natürlich auch noch hier statt, scheint sich aber derzeit vor allem auf die Auswirkungen von AO im Bereich des Software Engineerings zu konzentrieren: Requirements Engineering, Refactoring, Patterns, Productlines, Tooling und nicht zuletzt “Aspect Mining”. Diese Bereich bieten trotz akuter Forschung trotzdem bereits nutzbare Ergebnisse, die auch Anwendung zu scheinen finden. So gibt es einige nützliche Ergebnisse, bei der Anwendung von AspectJ zur Implementierung von Objektorientierten Patterns in einer Pattern-Library. Die Erweiterung von Use-Cases hin zu sog. “Use-Case slices” und die damit einhergehende 1:1 Implementierung der Kern-Usecases durch Objekte und der Varianten/Extension Points und anderen Usecases durch Aspekte ist sogar als Buch verfügbar. Hier können auch einfache Angriffspunkte zur Feature-Konfiguration im Sinne von Productlines gesetzt werden.

    Für “Joe Developer” (Zitat aus dem se-radio.net) scheinen aber viele dieser Techniken/Prozesse/Tools und Ergebnisse im Zusammenhang mit AO bisher unsichtbar gewesen zu sein. Um so mehr ist es an der Zeit, diese Dinge genau zu Beleuchten und statt AspectJ-Tracing-Tutorials lieber “Best practices” und mögliche Einsatzgebiete zu benennen. Den Syntax einer Sprache oder die Details einer Technologie lassen sich schließlich gut aus Büchern und Dokumentation entnehmen. Die Einsatzmöglichkeiten und gute Vorgehensweisen einer Technologie entstammen aber der Erfahrung und dem Umgang damit. Sie können eigentlich nur von den bereits Erfahrenen vermittelt werden, oder aber durch viele Experimente (und Fehlschläge) selbst erlernt werden. Dabei bevorzuge ich eindeutig den ersten Weg und versuche von den Experten zu lernen.

    Im Interview von Gregor Kiczales durch Markus Völter (auf se-radio.net) spekulierten schließlich beide darüber, dass zur Annahme des OO-Paradigmas 20 Jahre nötig waren, die Annahme von AO aber bereits nach 10 Jahren sehr weit fortgeschritten ist und die Zukunft positiv aussieht. Nicht zuletzt kommen wohl die meisten heute schon damit in Kontakt, wenn sie Middleware-Plattformen wie EJB-Container oder das Spring-Framework einsetzten.

    Zum Schluss möchte ich noch darauf zu sprechen kommen, dass ich bisher nur für Aspektorientierung plädiert habe, nicht aber für den Einsatz einer speziellen AOP-Technologie. Auch habe ich weder nur für AO-Sprachen noch gegen Container-AOP (Spring.AOP, Method interception, …) plädiert. Solche Entscheidungen sind schließlich nicht allgemein entscheidbar, da sie immer von den speziellen Anforderungen, Budgets, etc.. abhängen. Auch die Frage, wie fein Aspekte granuliert werden sollen steht im Raum und beeinflusst insbesondere den Einsatz von “Method interception”, Spring.AOP, AspectJ oder auch eine Kombination dieser. Der Grad der technischen Umsetzung und Einsatz von AO-Technologie ist nicht zuletzt auch durch die “Adoption strategy” gesteuert. Hierzu gibt es wiederum allgemeine Empfehlungen, auf die ich aber ein anderes Mal eingehen möchte und werde.

    Nachtrag: Ich habe gestern gesehen, dass Stefan Lieser die Thematik “Tyranny of the dominant decomposition” an einem anderen, aber ebenso schönen Beispiel erläutert hat: Ein Dokument mit Elementen (Text, Absätze, …) und dazu orthogonal die Frage der Formatierung.

    Technorati Tags: ,

    Recording and cutting DVB recordings

    02.09.2008 16:40:46 | Andre Loker

    [This article has nothing to do with .NET and/or programming]

    Here's a brief guide that describes how I record and cut DVB (digital video broadcasting) recordings.

    Hardware and software

    • Terrate Cinergy 1400 DVB-T
      This PCI DVB-T tuner is rather old, but it runs fine on Vista x64
    • DVBViewer (15€)
      Multifunctional playback and recording suite which supports for the Cinergy 1400 through the BDA drivers
    • DVBViewer VideoRecorder Plugin (free, requires DVBViewer)
      Great extension to DVBViewer which allows overlapping recording (only if all programs come from the same transponder of course)
    • ProjectX (free)
      Excellent program to demultiplex and repair the recorded TS files. Some use PVAStrumento as an alternative.
    • Cuttermaran (free)
      Powerful cutting tool
    • Batch Cuttermaran (free)
      Cuttermaran does not come with batch processing capabilities. Batch Cuttermaran is a small utility that can process an arbitrary number of Cuttermaran projects in a batch.
    • For DVD authoring: Gui for dvdauthor, dvdauthorgui, DVD Flick or DVD Styler

    Steps

    1. Record TV program

    I use the DVBViewer VideoRecorder plugin for recording. While most settings can be left as they are, I change two settings: first, I always record to the TS format (transport stream) . Second, I enable "+ Additional Audio" under the Channels tab.

    imageimage

    2. Demux recordings

    After I've recorded a bunch of programs I demux them using ProjectX.

    image

    Before you demux for the first time you'd want to check some settings. For general preferences use the PreSettings menu. To configure the demux process for the first time select "prepare >>" in the main window. Be sure "demux" is selected and enable "Process all collections" in the "Edit" menu.

    image image

    To demux a single file, use the + button in the main window (blue rectangle in the image above) and browse for that file. After it has been added use "QuickStart" to start demuxing.

    To demux multiple files in a batch you need to put each file in a separate file collection. If you add multiple files into the same collection (using the + button in the blue rectangle) all files will be joined during demuxing. Instead, for each file to demux use the + button in the red rectangle to create a new collection, add a file using the "blue" + button.

    Demuxing a DVB-T recording of several GB size takes some time of course. This is why I prefer to demux several files at once. I can start the demuxing process and can leave the computer alone for an hour or so.

    3. Define cuts

    Now that we have our demuxed files we can cut them (trim start and end, cut commercials etc.). Using Cuttermaran this is fairly easy. For each part in the recording you want to keep use the In and Out buttons to define the start and end frame and use the + button to add this part to the cut list.

    image

    If you've defined all entries in the cut list, don't start physical yet! Just save the project to disk and continue with the next recording you need to cut.

    4. Process cuts

    After you've saved Cuttermaran project files for all recordings use Batch Cuttermaran to process the cutting physically. This again takes some time which is why we want to do it in an unattended batch process.

    Note: Cuttermaran uses elementary streams as input and ouput. If you want to multiplex the streams back to e.g. an mpeg file, you can define this in the Cuttermaran settings:

    image

    When Batch Cuttermaran executes the project files the settings made in Cuttermaran come into effect, which means that either all or none of the projects will be muxed during batch processing. Personally I prefer to mux the files to MPEG and delete the elementary streams as I watch the recordings on my Computer. If you want to create a real DVD you'll probably don't want to mux the streams but use tools like GUI for dvdauthor  or dvdauthorgui for further DVD authoring. Having the streams muxed to MPEG is no problem however as they can be easily demuxed if you need to.

    GC08 - Qantm Institute

    02.09.2008 13:17:00 | Lori Grosland

    Jemals überlegt eine Kariere in Game Design oder Development?  Klingt interessant aber Du weißt nicht wo man mit sowas anfängt.  Vielleicht habe ich eine Idee, um Euch zu inspirieren…

    Auf der Games Convention im Leipzig habe ich mit Chris Mösbauer von Qantm Institute geredet.  Qantm ist eines der erfolgreichsten und innovativsten Ausbildungsinstitute für Game Design und Development, Animation und kreative Medien.  Es ist seit Über 10 Jahren das führende Ausbildungsinstitut in Australien und seit 2005 auch in Deutschland.   In diesem Video erzählt Chris über das Qantm Institue und das Konzept dahinter und auch was er und die Studenten auf der Games Convention gemacht haben.  Für mehr Information über Qantm, schaue diese Webseiten an: 
    http://www.qantm.de/
    http://www.qantm.tv/

    Zwei Ansätze wie mit den ClientIDs von ASP.NET umgegangen werden kann

    02.09.2008 00:57:00 | Peter Bucher

    Wie den meisten schon bekannt sein wird, erzeugt ASP.NET ClientIDs die auf dem Client genutzt werden können um Namenskollisionen aus dem Weg zu gehen.
    Jedoch ist dieses Verhalten in manchen (Bei mir in den meisten Fällen) fehl am Platz und es ist mühselig die ClientIDs clientseitig zur Verfügung zu stellen.

    Es gibt zwar, diese oder jene Lösung - jedoch war für mich keine wirklich zufriedenstellend.
    Ich möchte euch Heute zwei Ansätze mit auf den Weg geben, damit die Arbeit mit Javascript und ASP.NET für euch nicht immer zur ID-Jagt wird.

    Der erste Ansatz basiert unter anderem auf einer Idee von Renè Drescher-Hackel, auch ein ASP.NET Zone Genosse :)
    Renè erstellt mithilfe von JSON ein Javascript Objekt, mit dem einfach auf die ClientIDs und ggf. noch weitere Eigenschaften zugegriffen werden kann.

    ClientIdProvider mit einem HttpModule und statischen Hilfsmethoden

    Ich wollte eine Lösung bei der ich möglichst wenig schreiben muss, nur das wichtigste bekomme und auch die Performance stimmt.
    Die Lösung ist relativ einfach gehalten. Es braucht ein Methodenaufruf um ein Control für den Provider zu registrieren, danach steht die ClientID in Javascript automatisch über ClientId.<ControlName> bereit.

    Dabei muss natürlich beachtet werden, dass nicht zwei gleichlautende Controls registriert werden.

    Die Anwendung sieht dann so aus:

    ASPX:



    <ul>
        <a href="#" onclick="addBorder('test');">Test1 (Div)</li>
        <a href="#" onclick="addBorder(ClientId.pnlTest);">Test2 (Panel)</li>
        <a href="#" onclick="addBorder(ClientId.pnlTest2);">Test3 (Panel)</li>
    </ul>
    <div id="test">
        test
    </div>
    <asp:Panel ID="pnlTest" runat="server">
        test2
        <asp:Panel ID="pnlTest2" runat="server">
            test3
        </asp:Panel>
    </asp:Panel>

    Codebehind:



    protected void Page_Load(object sender, EventArgs e) {
        Tools.ClientIdProvider.RegisterControlForClientId(pnlTest);
        Tools.ClientIdProvider.RegisterControlForClientId(pnlTest2);
    }

    Das wars auch schon für den Anwender... nur was läuft dahinter ab?

    Die Methode "RegisterControlForClientId(Control c)" speichert jeweils eine Referenz auf das Control
    in einer Liste, die in der aktuellen HttpContext.Items Collection gespeichert ist.

    Diese Liste ist vom Begin bis zum Ende des Requests unter dem Key (clientIdCollKey) verfügbar.
    Um das JSON auf die Seite zu rendern, muss nur noch die Methode "WriteClientIdCollection(Page page)" zum richtigen Zeitpunkt aufgerufen werden.

    Der richtige Zeitpunkt ist hier wichtig, genau ab Page_PreRender sind alle ClientIDs bestimmt vorhanden.
    Also könnte diese Methode einfach in der überschrieben OnPreRender-Methode einer Seite aufgerufen werden.

    Jedoch gibt das wieder Schreibarbeit und ist fehleranfällig.
    Um dies zu automatisieren, kann ein HttpModule als Hilfe benutzt werden.

    Die statischen Hilfsmethoden:



    namespace pb.Web
    {
        public static partial class Tools
        {
            public static class ClientIdProvider
            {
                private const string clientIdCollKey = "pbclientIdColl";

                /// <summary>
                /// Registriert ein Control für die ClientIdCollection,
                /// sodass diese auf der Seite verfügbar ist.
                /// </summary>
                /// <param name="c">Das zu registrierende Control</param>
                public static void RegisterControlForClientId(Control c) {
                    HttpContext context = HttpContext.Current;
                    object item = context.Items[clientIdCollKey];

                    if (item == null || !(item is IList))
                        item = new List<Control>();

                    (item as IList<Control>).Add(c);

                    context.Items[clientIdCollKey] = item;
                }

                /// <summary>
                /// Schreibt die aktuelle ClientIdCollection in die
                /// derzeitige Page Instanz
                /// </summary>
                public static void WriteClientIdCollection() {
                    WriteClientIdCollection(Tools.CurrentHandler<Page>());
                }

                /// <summary>
                /// Schreibt die aktuelle ClientIdCollection in die
                /// derzeitige Page Instanz
                /// </summary>
                public static void WriteClientIdCollection(Page page) {
                    HttpContext context = HttpContext.Current;
                    object item = context.Items[clientIdCollKey];

                    if (item == null)
                        return;

                    IList<Control> list = (item as List<Control>);
                    StringBuilder sb = new StringBuilder();

                    foreach (Control c in list) {
                        sb.Append("");
                        sb.AppendFormat("\"{0}\" : \"{1}\"", c.ID, c.ClientID);
                        sb.Append(",");
                    }

                    // TODO: Ab ASP.NET 3.5 kann hier stattdessen der
                    //TODO: System.Web.Script.Serialization.JavaScriptSerializer benutzt werden
                    page.ClientScript.RegisterStartupScript(page.GetType(),
                                                                        "ClientId",
                                                                        string.Format(
                                                                        "\r\n var ClientId = new Object(); \r\n eval('ClientId = {{{0}}}');\r\n",
                                                                        sb.ToString().Substring(0, sb.ToString().Length - 1)),
                                                                        true);
                }
            }
        }
    }

     

    Das HttpModule ist ziemlich einfach aufgebaut, es hängt sich in den PreRequestHandlerExecute-Event,
    ruft den aktuellen Handler ab und führt in dessen PreRender-Event die Methode der Tools-Klasse aus, um
    das JSON zu rendern.

    Somit geschieht alles vollautomatisch, es muss nur das HttpModule in der web.config registriert sein.

     

    Das ClientIdProviderModule:



    namespace pb.Web.HttpModules
    {
        /// <summary>
        /// Registriert alle ClientIds als Startupscript in der aktuellen Page,
        /// falls Controls registriert wurden.
        /// </summary>
        public class ClientIdProviderModule : XHttpModuleBase
        {
            protected override void _application_PreRequestHandlerExecute(object sender, EventArgs e) {
                base._application_PreRequestHandlerExecute(sender, e);

                IHttpHandler handler = Tools.CurrentHandler<IHttpHandler>();
                if (handler != null && handler is Page) {
                    Page page = handler as Page;
                    page.PreRender += delegate {
                                                       Tools.ClientIdProvider.WriteClientIdCollection(page);
                                                   };
                }
            }
        }
    }

     

    Beispiel web.config-Eintrag:



    <?xml version="1.0"?>
    <configuration>
        <system.web>
            <httpModules>
                <add name="ClientIdProviderModule" type="pb.Web.HttpModules.ClientIdProviderModule, ClientIdProviderTest"/>
            </httpModules>
        </system.web>
    </configuration>

    Wichtig ist hier aber die Einschränkung auf Controls die alleinestehen, oder aber in einem TemplateInstance.SingleInstance - Template stehen.
    Mit MultiInstance - Templates funktioniert diese Lösung nicht.

    Zu Single- vs MultiInstance, siehe hier:

    Überschreiben von IDs, damit diese gleich lauten wie die serverseitigen IDs

    Wilco Bauwer, der unter anderem auch noch viele andere asp.nette Dinge auf seiner Seite anbietet,
    hat ein Control entwickelt, dass die ClientIDs so überschreibt, dass sie gleich lauen wie die serverseitigen IDs.

    Für manch ein Anwendungsfall ist das ein Muss und für die anderen vielfach eine gute Lösung mit wenig Aufwand.
    Allerdings gilt auch hier, dass nur einzigartige IDs benutzt werden können, ansonsten kommt es zu einer Kollision.

    Was ist jetzt besser?

    Keine der beiden Lösungen ist besser.
    Bei dem ClientIdProvider bestehen die ClientIDs immer noch genau gleich, jedoch gibt es clientseitig einen einfachen Zugriff darauf.
    Beim ID-Overriding gibt es keine ClientIDs mehr bzw. die ClientID lautet gleich wie die ID auf dem Server. Das kann in vielen Szenarien Probleme verursachen (Bspw. Controls die IPostBackEventHandler implementieren funktionieren nicht mehr, etc...).

    Daher gibt es keine Patentlösung, sondern jeweils für die Anforderung eine Lösung die passt.

    Download des Beispielprojekts:

    Benutzte Links:

    GC08 - SideWinder - Gaming-Hardware

    01.09.2008 13:18:00 | Lori Grosland

    Auf der Games Convention im Leipzig habe ich mit Timo Sülzle von Microsoft Hardware über die zwei neue Produkte gesprochen, die sie da präsentiert haben.  In diesem Video zeigt Timo die neue Features und Innovationen in dem neuen SideWinder Keyboard X6 und in der neuen Gaming Maus SideWinder X5, die speziell für Gamer entwickelt worden sind. 

    Das SideWinder X6 Keyboard ist für PC Spielern gedacht und hat ein abnehmbare Ziffernblock, der an beiden Seiten wieder angedockt werden kann.  Die Tastatur ist robust und flexibel und hat eine regulierbare Hintergrundbeleuchtung, somit sind alle Tasten auch in der Dunkelheit zu erkennen.   Die SideWinder Maus X5 ist die neueste Version von der SideWinder Maus.  Um Gamer-Performance zu optimierten, hat die X5 neun Tasten, fünf davon sind frei belegbar.  Die Lasereinheit lässt sich auch per Tastendruck von 200 bis 2000 DPI einstellen.  

    Pressefeedback der vermutlich aktuell größten WPF Anwendung

    01.09.2008 11:40:00 | Jens Peter Kleinau

    Es ist für einen Entwickler schon immer spannend, eine neue Anwendung auf dem Markt zu bringen und das Feedback der Nutzer zu erhalten. Wenn man eine Software in der Rolle des Projektleiters und Experten auf den Weg gebracht hat, die auch noch vor der kritischen Presse bestehen muss, dann empfinde ich sowas wie Lampenfieber. Bei dem Projekt handelt es sich um "Meine Software", die für...

    [[ This is a content summary only. Visit my website for full links, other content, and more! ]]

    C# Entwickler bei der cobra GmbH in Konstanz gesucht

    01.09.2008 11:05:43 | Jürgen Gutsch

    Bei der cobra GmbH in Konstanz gibt es offene Stellen als Web Software Entwickler und Software Entwickler:

    Web Software Entwickler (w/m)

    An Ihrem Arbeitsplatz in Konstanz entwickeln Sie als Teil unseres Entwicklungsteams moderne CRM Standard-Software für das Web. Unsere Anforderungen an Sie sind:

      • Mehrjährige Erfahrung mit ASP.NET (vorzugsweise mit C#).
      • Umfangreiche Kenntnisse in HTML, CSS und JavaScript.
      • Gute Kenntnisse des Microsoft SQL Servers.
      • Gute Kenntnisse des IIS und Windows Server Betriebssysteme.
      • Erfahrungen mit Windows Forms Programmierung sind von Vorteil.
      • Selbständiges Arbeiten im Team.

      Ein abgeschlossenes Hochschulstudium oder eine Ausbildung zum Fachinformatiker setzten wir voraus.

      Software Entwickler (w/m)

      An Ihrem Arbeitsplatz in Konstanz entwickeln Sie als Teil unseres Entwicklungsteams moderne CRM Standard-Software für das Office-Umfeld. Sie haben Erfahrung in C# und C++, arbeiten gerne selbständig und eigenverantwortlich, können sich aber auch in ein Team integrieren.

      Ein abgeschlossenes Hochschulstudium oder eine Ausbildung zum Fachinformatiker setzten wir voraus.

      Ihre Bewerbung

      Wir freuen uns auf Ihre aussagefähige Bewerbung mit Lichtbild, Gehaltsvorstellung und Eintrittstermin.

      cobra GmbH
      Franziska Burkhardt
      Weberinnenstraße 7
      78467 Konstanz
      Franziska.Burkhardt@cobra.de
      www.cobra.de

      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