.
Anmeldung | Registrieren | Hilfe

.NET-Blogs Archiv Oktober 2010

03.11.10 Treffen der DNUG Braunschweig - SCRUM Best Practices für TFS 2010

30.10.2010 03:09:00 | Lars Keller

Die DNUG Braunschweig trifft sich am 28.09.2010 um 19:00 im Restaurant Zucker (Tagungsraum). Uns kommt der Microsoft MVP Thomas Schissler mit einem Vortag über SCRUM Best Practices für TFS 2010 besuchen.

Scrum erfreut sich für das Management von agilen Projekten immer größerer Beliebtheit. Doch von der Theorie zur Praxis ist trotz der oft beschworenen Einfachheit von SCRUM ein weiter Weg. Der Vortrag erläutert zunächst die Grundlagen von SCRUM. Anschließend werden Best Practices aus allen Projektphasen auf Basis des Team Foundation Servers 2010 erläutert. Dabei werden konkrete und praktische Ratschläge zu Bereichen wie Anforderungsmanagement, Priorisierung, Teamorganisation und mehr gegeben. Der Vortrag beantwortet auch Fragen wie "Lohnt sich der Aufwand für ein Sprintplanungs-Meeting mit dem gesamten Team?", "Wie organisiere ich mein Team und welche Herausforderungen entstehen dabei?" oder "Welche Eigenschaften muss ein Product Owner mitbringen um diese Rolle erfolgreich auszufüllen?". Insgesamt also ein Vortrag der vor allem Vorgehensweisen und Methoden erläutert, aber auch deren praktische Umsetzung aufzeigt.

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

Weitere Informationen zur DNUG Braunschweig findest du hier.

Internet Explorer 6 aussperren

29.10.2010 21:59:35 | Jan Welker

Das aktuelle Design dieses Blogs kann nicht sauber vom Internet Explorer 6 angezeigt werden. Als ich dieses Design erstellte, hatte ich nur begrenzt Lust, irgendwelche Hacks oder Ausnahmen für den IE6 einzubauen. Ich habe mich dann für eine kurze und (für mich) schmerzlose Variante entschieden und leite einfach alle IE6 Nutzer per JavaScript auf eine spezielle Webseite um. Diese Besucher bekommen meinen Blog also nicht zu sehen.
Dies stieß schon das ein oder andere Mal auf Kritik. Wer sich trotzdem für diese Holzhammer-Methode interessiert, kann diese hier finden.

Kay Giza hat vor kurzem eine etwas schonendere Variante vorgestellt um den User auf seinen veralteten Browser hinzuweisen.

image

Das Script blendet bei den Browsern IE6, IE7 und IE8 Warnungen bzw. dezente Hinweise ein und weist auf neuere Versionen des Internet Explorers hin. Beim Firefox, Chrome, Opera oder Safari  werden keine Meldungen ausgegeben.
Alle Informationen zum Browser Detection Script und zur Einbindung gibt es bei Kay Giza im Blog:

IE6 und IE7 Detection Script zur Einbindung auf der eigenen Webseite

Ich habe dieses Script schon seit ein paar Wochen auf dotnet-snippets.de eingebunden, bisher kamen keine Beschwerden :-)

Selber Apps erstellen und das kinderleicht: App-Entwickler-Konferenz 2010

29.10.2010 20:00:30 | Oliver Scheer

Die Deutsche Telekom veranstaltet im November 2010 eine sehr interessante Entwickler-Konferenz. Es geht um Apps für Mobile Devices. Auf der plattformübergreifend App-Softwareentwickler-Konferenz treffen Sie unabhängige Entwickler und Branchengrößen wie Apple, HTC, LG, Microsoft, Nokia, Research in Motion, Samsung oder Sony Ericsson.
Von Microsoft sind mit dabei Frank Prengel mit dem Vortrag bzw. Workshop "Apps für Windows Phone 7 – Plattform, Tools & Dienste" sowie Oliver Scheer mit dem Vortrag "Design & Code für Windows Phone 7 – Silverlight UI & Phone APIs".
Weiterhin gibt es neben zahlreichen Vorträgen bzw. Workshop auch einen App-Wettbewerb, bei dem Sie die Möglichkeit nutzen können, eine Ihrer Apps auf Konferenz einem hochkarätigen Publikum vorzustellen zu können. Zu gewinnen gibt es übrigens ein Samsung Galaxy Tab, ein BlackBerry Torch oder ein Windows Phone HTC 7 Mozart.
Rund um die Software-Entwicklung für Windows Phone stellt das Microsoft Developer Network (MSDN) das deutschsprachige Windows Phone Developer Center sowie das Windows Phone-Forum bereit. Für einen Schnelleinstieg sind die "Ersten Schritte" zu empfehlen. Dann einfach noch die finalen, kostenlosen Entwicklerwerkzeuge für Windows Phone herunterladen. Das Rundumsorglospaket beinhaltet alle notwendigen Tools, damit sofort losgelegt werden kann.

Wir haben von der Telekom dankenswerter Weise noch ein paar Rabattcodes für die Teilnahme bekommen (50% Rabatt und einige wenige mit 100%).

Wer Interesse hat, bitte schnell auf msdnwin@microsoft.com melden.  First come, first serve.

Mehr Informationen: App-Entwickler-Konferenz am 17. November 2010 in Bonn



tweetmeme_source = 'TheOliver';

Liebes Golem-Redaktionsteam…

29.10.2010 19:04:12 | Peter Nowak

Liebes Golem-Redaktionsteam,

lassen Sie mich Ihnen einmal kurz vorstellen: Ich bin ein MVP für Windows Phone Development. Dabei handelt es sich um ausgewiesene Experten, welche unabhängig sind getreu dem Motto: “Independent experts, real world answers”.
Dabei handelt es sich um ein Programm bei der Firma Microsoft, welches jährlich Experten mit diesem Award auszeichnet.
Ich erwähne dies deshalb, damit nicht direkt der Eindruck entsteht, dass ich dadurch automatisch ein “Fan-Boy” bin, wie es in Ihren Foren durch Ihre Leser dargestellt wird. Ich bin eher genau das Gegenteil: Ich bin sehr kritisch.
Mit Freude habe ich vorgestern vernommen, dass einer Ihrer Redakteure / Journalisten einen Artikel zum Windows Phone 7 bei Ihnen veröffentlicht hat. Erstaunt war ich, dass dieser Artikel über 10 “Seiten” geht und nicht die üblichen 3 füllt. Dies überraschte mich nun ebenfalls positiv. Der Titel alleine jedoch erstaunte mich, da dieser sehr niederschmetternd das WP7 darstellte, wohingegen das Handelsblatt und der Spiegel in ihren Artikeln ein ganz anderes Bild aufzeigten.
Ich möchte auf den Artikel nicht näher eingehen, da dies schon zu Genüge in anderen Blogs getan wurde. Daher gehe ich davon aus, dass Sie über die Themen bestens informiert sind.
Auch möchte ich nicht darauf eingehen, was ich an diesem Artikel gut oder schlecht fand – es ist Pressefreiheit, von der wir hier sprechen.
Eine Bitte habe ich jedoch: Wenn Sie in Zukunft vielleicht derlei Artikel möglicherweise nach einem 4-Augen-Prinzip einmal unabhängig kontrollieren lassen – vielleicht von einem externen unabhängigen Experten, zu welchen ich mich jetzt einmal nicht direkt zähle, würde die Qualität des Artikel vielleicht in mehrfacher Hinsicht verbessert. Davon würden alle profitieren und es bleibt Ihnen und auch anderen Ärger in Form von persönlichen Angriffen in Ihren Foren erspart.

MfG

Peter Nowak



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

Ode an mein Mozart (WP7)

29.10.2010 18:42:56 | Peter Nowak

Oh Mozart du, 3 Wochen mein,
warst bei mir sogar daheim.
Zeigtest mir auch deine Macken,
logisch – warst nicht bis zu End’ gebacken.                            ( < Preproduction Device)
Nun geht es heim und das geschwind,
selbst wenn ich das nun traurig find’.
Ein schönes Leben wünsche ich dir noch,
verfalle deswegen doch in kein Loch.
Waren nie füreinander gedacht,
hast doch hier mein Herz nicht entfacht.
Trophy oder HD7 wird hier sein mein,
werd’ nicht mehr sein, hier so allein.
Auf innere Werte kommt es an,
mit WP7 du ein tolles Gespann.

Peter Nowak (2010)

P.S.: Für die, die es nicht fassen können – ja, es ist ein “Nowak”. Damit die anderen Leser nicht enttäuscht werden, die hier den Ruhrpott-Charme erwarten, hier eine konzentrierte Dosis, damit auch die Erwartung befriedigt wird: “Boah, ey, geilo Alter”! ;-)



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

Hochaufloesende Bilder in Webseiten und Blogs mit Zoom.it und Deep Zoom integrieren

29.10.2010 15:11:44 | Kay Giza

Wie kann ich große Bilder, Bilder-Collagen, hunderte von Bildern oder eben auch einzelne aber eben extrem große Bilder in meine Webseite oder Blog einbinden? Heute möchte ich gerne zwei Varianten davon vorstellen, auch wenn ich diese sekundär bereits ein paar Mal hier im Blog erwähnt hatte. Die Technologien bzw. Produkte sind Zoom.it und Deep Zoom... [... mehr in diesem Blogeintrag auf Giza-Blog.de]

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

Windows Phone 7 – Mein Fazit

29.10.2010 06:58:00 | Jürgen Gutsch

Seit einigen Tagen habe ich nun das Windows Phone 7 (Hardware ist das HTC HD7), nutze es für E-Mails, Twitter, Facebook, meine Notizen und hin und wieder als Kamera.

Vorab: Ich kann kein Vergleich mit anderen Smartphones machen, da ich – ja, ich gestehe – bisher kein Smartphone besessen habe.

Das HTC HD7

Hier ist der erste Eindruck wirklich super. Etwas irritierend ist die ungewohnt dünne Abdeckung auf der Rückseite (HTC Feature?) Da sie aber recht einfach zu lösen ist und wieder gut schließt, kann ich das nicht als Nachteil sehen.

Einen Nachteil gibt es dennoch: Der Auslöser-Knopf für die Kamera ist nicht nah genug am Rand. Vom Gefühl her ist der Auslöser zu weit vom Finger weg und da der Auslöser wirklich fest gedrückt werden muss, braucht es einiges an Kraft.

Ansonsten bin ich beeindruckt von der Schnelligkeit des Geräts. Wenn ich bedenke, dass ich vor 10 Jahren einen Desktoprechner mit der gleichen Leistung hatte…

Ganz wichtig: Trotz der Größe passt das HD7 perfekt in die Hosentasche :-)

Bluetooth

Bluetooth ist für mich ein recht wichtiges Feature, da ich mein Plantronic Headset zwingend einsetzen möchte. Die Verbindung der beiden Geräte funktionierte aber auf Anhieb. Auch wurden mein Laptop und mein altes Handy sofort erkannt.

Windows Phone 7

Das System selber habe ich relativ schnell erfasst. Die Kacheln finde ich sehr übersichtlich, die angezeigten Informationen innerhalb der Kacheln sind schlüssig. Die bei Golem vermisste Statusleiste ist übrigens vorhanden und zeigt natürlich nur Netz- und Gerätespezifische Informationen an. Andere Statusmeldungen werden ja in den Kacheln selber angezeigt. Das Scrolling geht flott. Die Hubs sind absolut intuitiv. Fazit hier: Echt klasse gemacht.

Eine negative Erfahrung gibt es aber auch hier: Nachdem ich das Gerät gestern in der Usergroup, zum Spielen, aus der Hand gegeben hatte, hatte ich den Eindruck, dass alles etwas langsamer läuft. Zusätzlich hat eine Anwendung eine Exception geworfen. Erst nach einem Reboot lief dann alles wieder.

Copy&Paste hätte ich in zwei Situationen bereits benötigt, allerdings lasse ich mich hier gerne auf 2011 vertrösten.

E-Mailkonten

Das Anlegen von E-Mailkonten funktionierte ebenfalls einfach und sauber, genauso die Anbindung an Exchange. Verwirrend ist, dass bei der Neuanlage erst mal nur nach E-Mail und Passwort gefragt wird und die eigentlichen wichtigen Daten erst eingegeben werden müssen, wenn mit E-Mail und Passwort alleine keine Verbindung aufgebaut werden kann. Eventuell habe ich aber auch nur einen Punkt übersehen.

Kontakte

Etwas schwieriger war es mit dem Import meiner Kontakte von meinem Privaten Handy und dem Geschäftshandy. Solange man noch nicht mit dem Windows Live-Konto verbunden ist, wird gleich eine Option angezeigt, mit der die Kontakte von der SIM-Karte übernommen werden können. Sind die Windows Live-Kontakte bereits importiert, wie es bei mir der Fall war, wird die Option nicht mehr sofort angezeigt, sondern erst, wenn man mit dem Finger länger auf der Überschrift des Kontakt-Hubs bleibt. Wenn man nicht weiß, wo sich die Einstellungen verstecken verzweifelt man irgendwann. Ein Blick in die Doku hilft aber – wie immer – weiter.

Apps

Einige Drittanbieter Apps starten teilweise leider etwas langsam. Störend ist das bei Twitter und Facebook, die ja eigentlich aus dem Hause Microsoft kommen. Sobald die allerdings gestartet sind, laufen sie performant und sauber.

Marketplace

Der Marketplace ist noch recht übersichtlich, allerdings tummeln sich jetzt schon Anwendungen die eigentlich keine Sau braucht. Ich möchte nicht wissen wie es in ein paar Monaten aussieht. Aber es finden sich inzwischen auch ein paar kostenlose und brauchbare Anwendungen.

Zune

Etwas Enttäuscht von der Zune Software war ich eigentlich schon bevor ich das HD7 überhaupt in der Hand hatte. Der Grund war, dass ich mich mit meiner LiveID nicht an der Software anmelden konnte.

Nach etwas Recherche war der Grund klar:
Ich lasse mir meine Passwörter vom Passwortmanager generieren und in der Regel sind die dann recht lang. 20 – 25 Zeichen können das dann schon mal sein. Nur ist der Login an der Zune Software leider scheinbar nicht möglich, wenn das Passwort mehr als 15 Zeichen hat. Ich musste also mein Passwort kürzen um die Software im vollem Umfang nutzen zu können. Generell halte ich eine Passwortbegrenzung für ein Unding.

Der Browser

Auch mit den vielfach kritisierten Browser bin ich eigentlich sehr zufrieden. Standardkonforme Webseiten werden ganz normal angezeigt. Fehlerhafte Darstellungen habe ich bisher noch keine festgestellt, allerdings habe ich es auch noch nicht darauf angelegt.

Und am Ende?

Bis auf die paar kleinen Punkte, funktioniert alles so wie ich es erwartet habe und bin ehrlich begeistert vom Windows Phone 7 und dem HD7. Das fehlende Multitasking ist kein Nachteil, da man dennoch mehrere Apps gestartet haben kann und nutzen kann. Ein eingehender Telefonanruf hindert nicht am durch browsen der Bilder. Eine eingeblendete Terminerinnerung legt auch nicht den Browser lahm, genauso wenig wie ein versehendlicher Druck auf den “Home”-Button. Und wieso soll eine Anwendung die im Hintergrund ist nicht pausieren, wenn sie eh nicht verwendet wird?

(Wie gesagt, fehlt mir allerdings als direkter Vergleich die längere Nutzung eines anderen Smartphones)

DotNetKicks-DE Image

HTC 7 Trophy mit Windows Phone 7 im Test

28.10.2010 19:09:32 | Jan Welker

Seit einer knappen Woche bin ich stolzer Besitzer eines HTC 7 Trophy mit dem brandneuen Windows Phone 7 Betriebssystem. In den vergangen Tagen hatte ich genügend Zeit, um das Gerät ausführlich zu testen und kann jetzt ein erstes Fazit ziehen.

Hardwareausstattung und Verarbeitung des HTC Trophy

Meine letzten beiden Mobiltelefone waren von Sony Ericsson, dort waren die verwendeten Materialien und die Verarbeitung einzigartig. Beide Geräte habe ich jeweils 2 Jahre genutzt und ich habe es nicht geschafft, auch nur einen Kratzer ins Display zu bekommen. Demzufolge sind meine Ansprüche an die Qualität sehr hoch. Die Oberschale des Gerätes ist aus schwarz beschichtetem Aluminium. Um das Display herum wurde sie schwarze Beschichtung wegpoliert so das ein dünner silberner Rahmen entsteht, der etwas an das alte iPhone erinnert.

HTC_7_Trophy_front

Auf der Frontseite gibt es keine mechanischen Tasten. Unter dem Display gibt es, wie bei jedem Windows Phone 7, drei Tasten: Zurück, Start, und Suche. Diese drei Tasten liegen, meiner Meinung nach, zu nahe am Display. Mir ist es schon einige Male passiert, dass ich bei der Bedienung versehentlich auf Start gedrückt habe, denn üblicherweise liegt das Menü bei dem App’s direkt über den drei Tasten. Was mich wirklich nervt, ist das kurze vibrieren beim Druck auf die Start- und Zurücktaste. Ich habe noch keine Möglichkeit gefunden dies abzustellen. Gerade wenn das Gerät auf dem Tisch liegt stört das kurze laute brummen. (Foto: HTC)

An der Oberseite des Gerätes gibt es einen ein/aus Taster, mit dem man das Gerät in den Standby schaltet und wieder aufweckt. Ansonsten gibt es nur noch einen Auslöser für die eingebaute 5 Megapixel Kamera. Es gibt nur zwei Anschlüsse, eine 3,5 mm Klinkenbuchse und eine Micro USB Schnittstelle. Mit der USB Schnittstelle kann das Gerät an den PC angeschlossen und auch aufgeladen werden. An der Unterseite gibt es keinen Connector, also wird es auch keine Dockingstation geben. Ich bin, etwas skeptisch ob die Micro-USB Schnittstelle zwei Jahre tägliches ein und ausstecken überleben wird, denn das HTC 7 Trophy muss bei mir täglich geladen werden. Von der Akkuleistung bin ich etwas enttäuscht, diese ist aber bei anderen Smartphons auch nicht besser.

Das Gerät besitzt einen altmodischen Simkartenslot, so muss man sich keine Micro SD Karte besorgen oder gar seine alte Karte auf abenteuerliche Weise mit einer Nagelschere verkleinern, wie es der ein oder andere iPhone 4 Besitzer getan hat. Nimmt man den Akkudeckel ab, ist das komplette Innenleben des Gerätes knallgelb. Sogar der Akku ist gelb. Warum man sich beim Design des Innenlebens so viel Mühe gegeben hat, ist mir ein Rätsel. Es sieht aber nett aus. Hält man den Akkudeckel in der Hand, wirkt er sehr zerbrechlich. Sobald der Deckel im Gerät eingerastet ist, ist er ordentlich fest. Das gesamte Gerät ist sehr verwindungssteif.

HTC_7_Trophy_back

Auf der Rückseite ist ein Element, in dem ein LED-„Blitzlicht“, eine Kamera und ein Lautsprecher untergebracht sind. Dieses Element steht etwa einen Millimeter hervor, so dass das Gerät etwas kippeln kann, wenn es auf dem Tisch liegt und bedient wird.

Die Windows Phone 7 Software

Beim ersten Einschalten bootet das OS schneller als ich es von herkömmlichen Handys gewohnt war, die erste positive Überraschung. Das HTC Trophy habe ich bei Vodafone gekauft, demzufolge hatte ich ein nerviges rotes Branding befürchtet. Die Kacheln im Hauptmenü waren rot eingefärbt. Die Farbe kann man zum Glück in wenigen Sekunden umstellen. Des Weiteren war ein Vodafone Hub auf dem Startbildschirm installiert, den man auch sehr einfach deinstallieren oder auf die zweite Seite verschieben kann. Die Bedienung der UI ist sehr intuitiv und geht sehr schnell. Die animierte Warteanimation sieht man eigentlich nur, wenn das Gerät etwas über Wlan oder UMTS nachlädt. Dank Silverlight gibt es viele, aber sinnvoll eingesetzte, Animationen.

Auf der Startseite des Windows Phone 7 liegt per Default eine Outlook Kachel. Da ich davon ausgegangen bin, dass Outlook zum abrufen und senden von Emails geeignet ist, habe ich versucht dort mein Pop3 Konto einzurichten. Fehlanzeige! Outlook verlangt neben Benutzername, Passwort und Mailserver auch eine Domäne, die es bei Pop3 nicht gibt.

Gibt man keine Domäne ein, bekommt man eine unschöne Fehlermeldung:

HTC_7_Trophy_error

Outlook auf dem Windows Phone 7 ist für Pop3 Konten unbrauchbar.

Lösung: In den Einstellungen gibt es einen Punkt „E-Mail-Konten & adere“, dort kann man ein Pop3 Konto erstellen und dann über einen normalen E-Mailclient nutzen, der auch auf dem Gerät vorhanden ist.

Was mir gut gefällt, ist die Kontaktverwaltung. Diese importiert auf Wunsch Kontakte von der Simkarte, von Windows Live und von Facebook. Sollten dabei doppelte Kontakte entstehen, können diese zusammen geführt werden. Beim Browsen durch die Kontakte kann man ganz nebenbei sehen, was der Gesprächspartner zuletzt bei Facebook gepostet hat.

Was meiner Meinung nach noch nicht marktreif ist, ist die Synchronisation von Live und dem Windows Phone 7. Auf windowsphone.live.com gibt es die Möglichkeit sein Phone zu orten, was bei mir jedes Mal mit nichtssagenden Fehlermeldungen gescheitert ist. Auch das Synchronisieren des Kalenders von live.com funktioniert bei mir nur, wenn ich einen Termin manuell eintrage. Termine, die ich in den Live.com – Kalender über Outlook importiert habe, werden nicht synchronisiert.

Das letzte, auf das ich im Test eingehen möchte, ist der Browser. Der installierte IE soll ein Internet Explorer 7 mit einigen Features des Internet Explorer 8 sein. Der Browser rendert jedoch anders als Internet Explorer 7 und 8 unter Windows 7. Webseiten, die im IE auf dem Desktop funktionieren, werden nicht immer auf dem Windows Phone 7 gut aussehen.

Fazit: Das Gerät überrascht durch Schnelligkeit sowie eine sehr gut durchdachte UI und macht im Alltag viel Spaß. Es gibt einige Dinge die nerven, die aber sicher noch durch Updates behoben werden, wie zum Beispiel Copy & Paste. Dies soll im Januar nachgeliefert werden.

Fehlermeldung beim Öffnen von Word- und Excel-Dokumenten aus Outlook

28.10.2010 15:29:00 | Martin Hey

Gelegentlich bekommt man ja auch mal Office-Dokumente per Mail geschickt. Und früher funktionierte es mal, dass man diese Dokumente auch direkt aus der Mail in Outlook per Doppelklick öffnen konnte - wie gesagt früher. Aktuell ist es bei mir so, dass ich dann von den Zielanwendungen - also Word 2010 oder Excel 2010 mit diversen Fehlermeldungen beglückt werde.

Excel meldet: "Die Datei ist beschädigt und kann nicht geöffnet werden.".

Word meint: "Fehler beim Öffnen der Datei in Word."

Und PowerPoint meldet gleich: "Die Anwendung konnte nicht korrekt gestartet werden (0x000022)." und bietet mir an, die Präsentation zu reparieren.



Ursache dafür ist das Sicherheitscenter (englisch Trust Center). Dieses findet man unter Datei -> Sicherheitscenter im jeweiligen Programm. Unter dem Menüpunkt "Geschützte Ansicht" gibt es die Option "Geschützte Ansicht für Outlook Anlagen aktivieren".


Deaktiviert man diese Option, so kann man die Dateien auch wieder aus Outlook heraus öffnen.

Autocomplete Textboxen mit ASP.NET MVC und jQuery UI

28.10.2010 14:40:00 | Alexander Zeitler

Jeder kennt den Autocomplete-Effekt, der Benutzereingaben in Textboxen vervollständigt bzw. Vorschläge für passende Suchbegriffe liefert:

Ein Beispiel für autocomplete

Dieser Effekt lässt sich mit ASP.NET MVC und jQuery.UI.Autocomplete leicht selbst entwickeln.

Zunächst benötigt man eine aktuelle Version von jQuery.UI, die man hier herunterladen kann.

Aus dem ZIP-File werden die Files “jquery-ui-1.8.5.custom.min.js” (aus dem Unterordner JS) und “jquery-ui-1.8.5.custom.css” (aus dem Unterordner CSS) benötigt und in die jeweiligen Ordner in der ASP.NET MVC-Solution kopiert:

Die benötigten jQuery.UI Files

Im Masterpage-File werden diese sowie die jquery-1.4.1.min.js referenziert:

<head runat="server">
	<title>
		<asp:ContentPlaceHolder ID="TitleContent" runat="server" />
	</title>
	<link href="../../Content/Site.css" rel="stylesheet" type="text/css" />
	<link href="../../Content/jquery-ui-1.8.5.custom.css" type="text/css" />
	<script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
	<script src="../../Scripts/jquery-ui-1.8.5.custom.min.js" type="text/javascript"></script>
</head>

In der Index-View des HomeControllers platzieren wir eine Textbox mit der Id “customers”:

<input type="text" id="customers" />

Direkt im Anschluß folgt der eigentliche jQuery.UI.Script-Block:

<script type="text/javascript">
	$(function () {
		$('#customers').autocomplete({
			source: '<%= Url.Action("Search") %>',
			minLength: 1
		});
	});
</script>

Schließlich müssen wir unserem HomeController noch ein JsonResult mit dem Namen "Search" (dieser wird in der Url.Action im eben eingefügten jQuery-Script referenziert) hinzufügen:

public JsonResult Search(string term) {
	List<string> result =
		_customers.Where(s => s.ToLower().StartsWith(term.ToLower())).ToList();
	
	return Json(result, JsonRequestBehavior.AllowGet);
}

Die Liste "_customers" wird im Konstruktor des Controllers erzeugt:

public HomeController() {
	_customers = new List<string>()
			        {
					"Alfreds Futterkiste",
					"Ana Trujillo Emparedados y helados",
					"Antonio Moreno Taquería",
					"Around the Horn",
					"Frankenversand",
					"France restauration",
					"Königlich Essen",
					"Toms Spezialitäten"
			        };

}

Das Resultat sieht im Browser wie folgt aus:

ErgebnisseA

Die Beispiel-Solution kann hier heruntergeladen werden:

MvcJQueryAutocompleteSimple.zip (345,58 kb)

DotNetKicks-DE Image

Einstieg zur Workflow Foundation 4 : Hallo Workflow

28.10.2010 14:11:23 | Gregor Biswanger

Die Workflow Foundation gibt es bereits ab den .NET-Framework 3. Die Idee dahinter ist, das Arbeitsabläufe oder auch Geschäftslogik Grafisch definiert werden kann. Somit werden komplexe Abläufe leicht gehandhabt. Jedoch war die Technische Umsetzung der Workflow Foundation 3 und 3.5 sehr Fehleranfällig und für heutige Entwicklungsansprüche (TDD etc.) nicht geeignet. Auch der Designer war leider sehr Fehleranfällig. Somit wurde von Microsoft die Workflow Foundation komplett neu geschrieben und mit dem .NET-Framework 4 veröffentlicht.

Aus persönlichen Erfahrungen kann ich eine Vorsicht zur Workflow Foundation 4 entschärfen. Ganz zum Gegenteil sogar, ich kann jedem nur empfehlen die Projekte auf Basis der WF 4 aufzubauen. Hier wird gewehrleistet das man sich an die Komponentenorientierte Entwicklung hält und es behilft die Entwicklung mittels TDD enorm. Aber Details folgen mit weiteren Blog-Einträgen zur WF 4. Dieser Blog-Eintrag soll vorerst ein einfaches “Hallo Workflow” demonstrieren.

Die benötigten Tools:

  • Microsoft Visual Studio 2010 Professional, Premium oder Ultimate
  • Das .NET-Framework 4 (Wird bei Visual Studio 2010 mit installiert)

 

Der Workflow zur Worklfow

Die Vorgehensweise mit der Verwendung der Workflow Foundation ist folgendermaßen aufgebaut:

 

  1. Komponenten werden entwickelt. (In TDD empfohlen!)
  2. Komponente als Activity zur Verfügung stellen.
  3. Einen Workflow aus Aktivitäten (activities) deklarieren.
  4. WF Host mit Workflows in eigene App zur Verfügung stellen.

 

Der erste Schritt beinhaltet das einfache Entwickeln der Komponenten die die eigentlichen Anforderungen (Tasks) abdecken. Das kann ein Update der Datenbank, Senden von WCF-Nachrichten zu einem anderen System, einer Rechnung/Validierung usw. sein.

Die Komponenten werden dann mit activities als Adapter erweitert. Es gibt zudem bereits vorhandene Activities die von der WF zur Verfügung stehen. Hierbei spielt wie bei jeden Programmfluss ein IN und OUT eine wichtige Rolle. Das handhaben der Informationen wird durch diese Activitiy-Facade geregelt.

Die Activities werden dann bei einem Workflow durch Regeln und Validierungen miteinander Definiert.

Das ansteuern und abspielen der Workflows geschieht über einen Hoster. Ein Hoster kann bei unterschiedlichen .NET-Projekten (Ab .NET 4) eingesetzt werden.

Hallo Workflow

Um ein besseres Bild zu erhalten fängt der erste Teil dieser Serie mit einem “Hallo Workflow” an. Dafür werden folgende Schritte umgesetzt:

 

  1. Das erstellen eines neuen Workflow Consolen-Projekts.
  2. Eine Sequence Activity wird dem Workflow definiert.
  3. Eine WriteLine Activity wird der Sequence Activity hinzugefügt.
  4. Dem WriteLine Activity wird dem Text-Property eine Nachricht definiert.

 

Das erstellen eines neuen Workflow Consolen-Projekts

Dazu wird Visual Studio 2010 geöffnet und ein neues Projekt angelegt. Als Template wird unter “Workflow” – “Workflow Console Application” gewählt. Als Name wird “HalloWorkflow” verwendet.

 

SNAGHTML102af95

Abb.1 – Neues “Workflow Console Application” Projekt erzeugen

Die Projektvorlage erzeugt nun ein neues Projekt das anschließend die erste Workflow.xaml-Datei ausgewählt im Designer anzeigen lässt.

SNAGHTML1076eaf

Abb. 2 – Der Aufbau eines Workflow-Projekts in Visual Studio.

Links in der Toolbox befinden sich vorhandene oder selbst geschriebene Activities. In der Mitte des Bildschirms befindet sich der Workflow-Designer womit die Abläufe grafisch definiert werden. Ganz rechts im Solution Explorer befindet sich auch schon die Projektstruktur.

Hierbei spielen die beiden Dateien Program.cs und Workflow1.xaml eine wichtige Rolle. In der Program.cs-Datei ist die statische Main-Methode die beim Ausführen des Projektes gestartet wird. Hier befindet sich ein fertiger Workflow Hosting-Code.

 

   1:  class Program
   2:  {
   3:      static void Main(string[] args)
   4:      {
   5:          WorkflowInvoker.Invoke(new Workflow1());
   6:      }
   7:  }

Listing 2 – View (XAML) mit einem DataGrid und DataPager mit einem DataBinding auf PhonePageList

 

Das Ergebnis sieht dann wie folgend aus:

 

image

Abb. 1 – Ein DataGrid mit DataPager-Erweiterung.

 

Die Integration ist sehr einfach und leicht aufgebaut. Dem DataPager stehen zahlreiche anzeige Möglichkeiten, die unter folgendem Link  zu finden sind: DataPager: Stile und Vorlagen

Einstieg zur Workflow Foundation 4 : Parameter übergeben

28.10.2010 14:11:23 | Gregor Biswanger

Wie bereits beim Blog-Post “Hallo Workflow” berichtet wurde, spielt bei jedem Programmfluss ein IN und OUT eine wichtige Rolle. Das handhaben dieser Informationen wird durch die Activities geregelt. Allerdings müssen auch Activities auf eine allgemeine Informationen  des Workflows zugreifen. Dazu können einem Workflow allgemeine Argumente übergeben werden.

Beispiel: Hallo …

Auch dieser Blog-Eintrag demonstriert mir einer Begrüßung die funktionsweise der WF. Folgende Schritte sind dafür nötig:

  1. Das Erstellen eines neuen Workflow Consolen-Projekts.
  2. Ein Workflow Input Argument setzen.
  3. Eine Sequence Activity wird dem Workflow definiert.
  4. Eine WriteLine Activity wird der Sequence Activity hinzugefügt.
  5. Dem WriteLine Activity wird dem Text-Property das Argument zugewiesen.

 

Das Erstellen eines neuen Workflow Consolen-Projekts

Dazu wird in Visual Studio 2010 eine neues “Workflow Consolen Application”-Projekt mit dem Namen ParameterUebergeben erstellt.

 

SNAGHTML221b22a

Abb. 1 – Neues “Workflow Console Application” Projekt erzeugen.

 

Ein Workflow Input Argument setzen

Nach dem erzeugen des Projekts wird der Workflow automatisch im Designer geöffnet. Für die Verwaltung von Variablen, Argumenten und Assemblies muss am unteren Ende des Designers der jeweilige Bereich ausgewählt werden. Unter diesem Beispiel wird ein klick auf “Arguments” getätigt (Siehe Abb.2).

Nun stehen vier Spalten bereit. Die erste steht für den Namen des Arguments von dem aus im Source-Code zugegriffen wird. Hierbei empfiehlt sich vor dem jeweiligen Namen eine Abkürzung von “Arg” hinzuzufügen. Das dient zur besseren Übersichtlichkeit umso größer das Projekt wird. In diesem Projekt bitte den Namen “ArgBenutzername” eingeben.

Die Direction definiert in welche Richtung der Parameter mitgegeben werden darf. In diesem Beispiel wird “In” gewählt. Das bedeutet, das beim starten des Workflows eine Information “In” den Prozess geladen wird. Out steht dafür das beim beenden des Prozesses auch eine Information zurückgegeben wird.

Der Argument type steht für den Typen der hierbei Übertragen wird.

Unter Default value kommt kein Wert rein. Hier wird nur die Möglichkeit gegeben, das ein Standardwert dem Parameter geben wird, falls entsprechend nichts enthalten ist. Es wird allerdings die gesamte “Visual Basic”-Expression Sprache zur Verfügung gestellt.

image

Abb. 2 – Die Arguments im Workflow-Designer.

 

Eine Sequence Activity wird dem Workflow definiert

Unter dem Bereich "Control Flow” der Toolbox wird eine Sequence Activity ausgewählt und mittels Drag & Drop auf den Designer geschoben. Eine Sequence Activity koordiniert die Ausführung eines Satzes untergeordneter Aktivitäten gemäß einer bestimmten Reihenfolge. Dabei wird jeweils ein Satz ausgeführt. SequenceActivity wird abgeschlossen, wenn die abschließende untergeordnete Aktivität beendet wird.

SNAGHTML23cfbc7

Abb. 3 – Workflow mit Sequence Activity.

 

Eine WriteLine Activity wird der Sequence Activity hinzugefügt

Eine bei der Workflow Foundation 4 vorhandene Activity bietet das ausgeben von Informationen über der Console an. Dieses befindet sich im Bereich “Primitives”. Dieses muss auch mittels Drag & Drop zur Sequence Activity hinzugefügt werden.

SNAGHTML23e5829

Abb. 4 – Workflow mit WriteLine Activity.

 

Dem WriteLine Activity wird dem Text-Property das Argument zugewiesen

Nun wird dem WrtieLine Activity dem Text-Property eine “Visual Basic” Expression zugewiesen. Das kann direkt in der TextBox geschehen oder bei einem kleineren Editor worin etwas mehr Platz ist. Der VB Code ruft die statische Methode Format von der Klasse String auf. Dieses erzeugt ein String aus unterschiedlichen Objekten.

image

Abb. 5 – Der Expression Editor.

 

Als nächstes muss beim Workflow Host ein Wert für das Argument als Parameter übergeben werden. Dazu wird der Anwender vorher nach seinem Namen gefragt und anschließend der Workflow mit der Information gestartet. Parameter kann man mittels Dictionary durchreichen. Wobei der Schlüsselwert genau nach dem Namen des Arguments entsprechen muss.

 

   1:  class Program
   2:  {
   3:      static void Main(string[] args)
   4:      {
   5:          Console.Write("Bitte Namen eingeben: ");
   6:          string username = Console.ReadLine();
   7:   
   8:          WorkflowInvoker.Invoke(new Workflow1(), new Dictionary<string, object>
   9:                                                      {
  10:                                                          {"ArgBenutzername", username}
  11:                                                      });
  12:   
  13:          Console.WriteLine("Zum Beenden drücken Sie eine beliebige Taste...");
  14:          Console.ReadKey();
  15:      }
  16:  }

Listing 2 – View (XAML) mit einem DataGrid und DataPager mit einem DataBinding auf PhonePageList

 

Das Ergebnis sieht dann wie folgend aus:

 

image

Abb. 1 – Ein DataGrid mit DataPager-Erweiterung.

 

Die Integration ist sehr einfach und leicht aufgebaut. Dem DataPager stehen zahlreiche anzeige Möglichkeiten, die unter folgendem Link  zu finden sind: DataPager: Stile und Vorlagen

Einstieg zur Workflow Foundation 4 : Activity selbst schreiben

28.10.2010 14:11:23 | Gregor Biswanger

Das nächste Beispiel zeigt eine Anzahl an neuen Workflow Foundation Konzepten. Diesmal wird ein eigenes Activity erstellt, das auf Variablen zugreift und Rückgabewerte anhand von Entscheidungen erzeugt.

Beispiel: Workflow Rechner

Das Beispiel demonstriert einen Consolen-Rechner. Dazu werden die folgenden Schritte umgesetzt:

  1. Das Erstellen eines neuen Workflow Consolen-Projekts.
  2. Benutzerdefiniertes Activity erstellen.
  3. Dem Workflow ein Input und Output Argument setzen.
  4. Dem Workflow variablen setzen.
  5. Das selbst geschriebene Activity dem Workflow hinzufügen.
  6. Hinzufügen von Switch<T> und Assign Activities zum Anpassen der Rechnung.
  7. Eingabe des Anwenders aufnehmen und Workflow Host mit Parameter starten.

 

Das Erstellen eines neuen Workflow Consolen-Projekts

Dazu wird Visual Studio 2010 geöffnet und ein neues Projekt angelegt. Als Template wird unter “Workflow” – “Workflow Console Application” gewählt. Als Name wird “WorkflowRechner” verwendet.

SNAGHTML5925a4c

Abb.1 – Neues “Workflow Console Application” Projekt erzeugen.

 

Benutzerdefiniertes Activity erstellen

Für eigene Activities wird die Klasse CodeActivity von der WF (System.Activities) bereitgestellt. Dem Projekt wird eine neue Klasse mit den Namen ParseCalculatorArgs hinzugefügt. Die Klasse benötigt nur noch die CodeActivity-Klasse als Basisklasse. Somit wird von der WF erkannt das es sich um ein Activity handelt und wird nach dem Builden des Projekts auch in der Toolbox aufgelistet.

Das ParseCalculatorArgs-Activity soll die Eingabe des Anwenders auswerten und diese dementsprechend an den Workflow weitergeben. Der Workflow kann mit diesen Werten dann weiter agieren.

Für den Input (IN) von Daten zum Activity, wird ein InArgument-Type bereitgestellt. Dieses wird als Property dem Activity hinzugefügt. Die spätere Eingabe des Anwenders erfolgt in der Console als String-Wert. Das für dieses Property ein Wert existiert, ist für die Funktion des Activies ausschlaggebend. Dafür behilft das RequiredArgument-Attribute. Den mit diesen Attribute schlägt der Designer eine Validierungsnachricht das noch eine Eingabe zu diesem Feld benötigt wird. Für die komplette Dateneingabe des Anwenders wird dem Activity das Property Expression hinzugefügt.

Für die Ausgabe (OUT) der verarbeiteten Daten, wird der OutArgument-Type bereitgestellt. Auch dieser wird als Property dem selbstgeschriebenen Activity hinzugefügt. Nach der Datenverarbeitung werden die Werte als Double-Typ zurückgegeben. Daher werden zwei Properties mit FirstNumber und SecondNumber hinzugefügt.

Auch für die spätere Operation wird ein Property vom Typ String benötigt.

Die hauptsächliche Verarbeitung der Daten findet in der Execute-Methode statt. Diese wird von der Basisklasse CodeActivity bereitgestellt. Zu beginn in der Execute-Methode sollten die Out-Properties zurückgesetzt werden. Da sie für dieses Beispiel eine längere Instanz haben. Der Wert wird nicht wie gewohnt mittels “ = “-Operator zugewiesen sondern mittels Set-Methode. Der context dient zur aktuellen WF-Instanz.

Die Abfrage der Properties erfolgt mit der Get-Methode. Wobei gleich die Eingabe des Anwenders in eine String-Variable line geladen wird. Anschließend erfolgt eine Überprüfung ob vom Anwender überhaupt ein Wert existiert und dann wird die Eingabe zu einem String-Array auf gesplittet. Das String-Array wird dann den Out-Properties passend zu deren Typen zugewiesen.

 

   1:  public class ParseCalculatorArgs : CodeActivity
   2:  {
   3:      [RequiredArgument]
   4:      public InArgument<string> Expression { get; set; }
   5:      public OutArgument<double> FirstNumber { get; set; }
   6:      public OutArgument<double> SecondNumber { get; set; }
   7:      public OutArgument<string> Operation { get; set; }
   8:   
   9:      protected override void Execute(CodeActivityContext context)
  10:      {
  11:          FirstNumber.Set(context, 0);
  12:          SecondNumber.Set(context, 0);
  13:          Operation.Set(context, "error");
  14:   
  15:          string line = Expression.Get(context);
  16:              
  17:          if (!String.IsNullOrEmpty(line))
  18:          {
  19:              string[] arguments = line.Split(' ');
  20:              if (arguments.Length == 3)
  21:              {
  22:                  double number;
  23:                  if (Double.TryParse(arguments[0], out  number))
  24:                  {
  25:                      FirstNumber.Set(context, number);
  26:                  }
  27:   
  28:                  Operation.Set(context, arguments[1]);
  29:                  if (Double.TryParse(arguments[2], out number))
  30:                  {
  31:                      SecondNumber.Set(context, number);
  32:                  }
  33:              }
  34:          }
  35:       }
  36:   }

Listing 2 – View (XAML) mit einem DataGrid und DataPager mit einem DataBinding auf PhonePageList

 

Das Ergebnis sieht dann wie folgend aus:

 

image

Abb. 1 – Ein DataGrid mit DataPager-Erweiterung.

 

Die Integration ist sehr einfach und leicht aufgebaut. Dem DataPager stehen zahlreiche anzeige Möglichkeiten, die unter folgendem Link  zu finden sind: DataPager: Stile und Vorlagen

WindowsPhone 7: NavigationService.Back raises Exception

28.10.2010 13:48:00 | Patric Schouler

Sometime a NavigationService.Back call could raise an exception, if the user tombstoned your Windows phone 7 app and you try to call a Navigations.Back after this.

Possible szenario: You ask the user “Do you really want to delete this item?”. After returning a OK from your MessageBox you delete the item and in all cases you want to return from your detail page to your list page with NavigationService.Back.  To avoid a exception you have to put your NavigationService.Back call in a try..catch statement, because the user could press the windows button at your Messagebox and after this the CLR will raises a Cancel for your messagebox and executes the rest of your code with the NavigationService.Back call. Guess from me: Because this situation is not handled by the Silverlight for Windows Phone framework a exception will occur.

Trauriges SmileyTrauriges SmileyTrauriges Smiley

Windows Phone 7: Tombstoning and Messagebox

28.10.2010 12:28:00 | Patric Schouler

For a good usabilty for your Windows Phone 7 app you should consider to save your Messagebox text as transient data for example with help of the PhoneApplicationService.Current.State Dictionary. Why is this necessary? For example if the user gets a call or wants to switch to a other ap by pressing the windows button and have not read the Messagbox the user should shown it again after he return to your app.

We use in our project the following class which do all the work for us.

The Show-methods wrapps the orginal MessageBox-Show methods (one override is missing, because a show method with return value for questions make no sense. After tombstoning you loose your functional context, so this Messagebox type should be handled). The ShowFromTransientValues-Method is the key for the suggested behaviour and can be called after you bring your application in a proper state – for example in the first PageLayoutUpdated-Event after reactivation.

HINT: The MessageBox.Show method will return in case of tombstoning always a cancel value. That is a fact that you should keep in mind for Windows Phone 7 programming.

   1: public static class TransientMessageBox
   2:     {
   3:         const string MessageTextKey = "TransientMessageBoxText";
   4:         const string MessageCaptionKey = "TransientMessageBoxCaption";
   5:  
   6:         public static void ShowVirtual(string messageBoxText)
   7:         {
   8:             TransientStorageHelper.AddOrUpdate(MessageTextKey, messageBoxText);
   9:         }
  10:  
  11:         public static void ShowVirtual(string messageBoxText, string caption)
  12:         {
  13:             TransientStorageHelper.AddOrUpdate(MessageTextKey, messageBoxText);
  14:             TransientStorageHelper.AddOrUpdate(MessageCaptionKey, caption);
  15:         }
  16:  
  17:         public static void Show(string messageBoxText)
  18:         {
  19:             ShowVirtual(messageBoxText);
  20:  
  21:             var result = MessageBox.Show(messageBoxText);
  22:  
  23:             Debug.WriteLine("Transient MessageBox result:" + result);
  24:  
  25:             if (result == MessageBoxResult.OK)
  26:             {
  27:                 RemoveTextKey();
  28:             }
  29:         }
  30:  
  31:         public static void Show(string messageBoxText, string caption)
  32:         {
  33:             ShowVirtual(messageBoxText, caption);
  34:  
  35:             var result = MessageBox.Show(messageBoxText, caption, MessageBoxButton.OK);
  36:  
  37:             Debug.WriteLine("Transient MessageBox result:" + result);
  38:  
  39:             if (result == MessageBoxResult.OK)
  40:             {
  41:                 RemoveAllKeys();
  42:             }
  43:         }
  44:  
  45:         private static void RemoveAllKeys()
  46:         {
  47:             TransientStorageHelper.Remove(MessageTextKey);
  48:             TransientStorageHelper.Remove(MessageCaptionKey);
  49:         }
  50:  
  51:         private static void RemoveTextKey()
  52:         {
  53:             TransientStorageHelper.Remove(MessageTextKey);
  54:         }
  55:  
  56:         public static void ShowFromTransientValues()
  57:         {
  58:             if (!PhoneApplicationService.Current.State.ContainsKey(MessageTextKey)) return;
  59:  
  60:             if (PhoneApplicationService.Current.State.ContainsKey(MessageCaptionKey))
  61:             {
  62:                 if (MessageBox.Show(TransientStorageHelper.GetValue<string>(MessageTextKey),
  63:                                 TransientStorageHelper.GetValue<string>(MessageCaptionKey),
  64:                                 MessageBoxButton.OK) == MessageBoxResult.OK)
  65:                 {
  66:                     RemoveAllKeys();
  67:                 }
  68:             }
  69:             else
  70:             {
  71:                 if (MessageBox.Show(TransientStorageHelper.GetValue<string>(MessageTextKey)) == MessageBoxResult.OK)
  72:                 {
  73:                     RemoveTextKey();
  74:                 }
  75:             }
  76:         }
  77:     }

Team Foundation Server im Überblick für Einsteiger

28.10.2010 10:48:27 | Christian Binder

Wer einen Kurzen Überblick zum Thema Team Foundation Server 2010 speziell für Einsteiger und kleinste Teams sucht, könnte mit folgendem Artikel ein leichtgewichtigen Einstieg finden. Vor allem Warum TFS 2010 für kleine Teams oder auch “Solo Developer“  interessant  sein kann wird aufgezeigt.

Team Foundation Server im Überblick für Einsteiger

PS: Wer Visual Studio 2010 Professional mit MSDN besitzt, hat übrigens schon einen TFS 2010 mit dabei. Dies war mit VS 2008 nicht so.

Wer jetzt noch weitere Informationen zum Thema sucht, sollte mal einen Blick in das Visual Studio 2010 ALM Pivot werfen, hier gibt’s Links zu einigen Webcasts und anderem Content, die auch tiefer gehen.

Viel Spass

Selber Apps erstellen und das kinderleicht: App-Entwickler-Konferenz 2010

27.10.2010 20:07:37 | Kay Giza

Welchen Apps gehört die Zukunft? Was macht den Erfolg von Business-Anwendungen für Mobile Devices aus? Die Deutsche Telekom veranstaltet im November 2010 eine sehr interessante plattformübergreifende Entwickler-Konferenz. Es geht um Apps für Mobile Devices. Auf der App-Softwareentwickler-Konferenz treffen Sie unabhängige Entwickler und Branchengrößen wie Apple, HTC, LG, Microsoft, Nokia, Research in Motion, Samsung oder Sony Ericsson... [... alle Details finden Sie in diesem Blogeintrag auf Giza-Blog.de]

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

Expression Blend: Benutzerdefinierte Behaviors jederzeit anbieten

27.10.2010 12:32:30 | Gregor Biswanger

Ab Expression Blend 3 gibt es ein weiteres neues Feature: „Behaviors“. Mit Behaviors können grundlegende UI-Logiken als Snippet verwendet werden. Die Behaviors selbst liegen in eigenen Klassen oder Assemblies und werden von dort aus auf UI-Controls im XAML referenziert, das gibt den Vorteil, das für viele komplexe Anforderungen keine Zeile Code mehr geschrieben werden muss. Weitere Informationen zu Behaviors unter: “Expression Blend 3 – Mehr Überblick behalten mit Behaviors”.

image

Abb. 1 – Behaviors stehen unter Assets zur Verfügung

Behaviors werden immer im Assets-Bereich angeboten. Selbstgeschriebene Behaviors werden nur dann angezeigt, wenn diese Behavior-Assemblies im jeweiligen Projekt referenziert werden. Jedoch ist es effektiver wenn bei jedem Projekt die selbstgeschrieben Behaviors zur Verfügung stehen.

SNAGHTML3e2aef8

Abb. 2 – Ein TextBoxWatermarkBehavior für jedes Silverlight 4 Projekt zur Verfügung gestellt.

Dazu müssen die Behaviors einfach in ein Unterverzeichnis Libraries beim Expression Blend Installationsverzeichnis kopiert werden. Dort befinden sich von den unterschiedlichen Projekttypen (WPF oder Silverlight) weitere Unterverzeichnisse. Es muss nur noch darauf geachtet werden, das die Assemblies im richtigen Bereich abgelegt werden. Nur dann stehen sie automatisch zur Verfügung.

ASP.NET MVC (Areas): Multiple types were found that match the controller named… - Mehrere Controller mit gleichem Namen verwenden

26.10.2010 22:05:00 | Alexander Zeitler

Wenn man in ASP.NET MVC (auch über Areas hinweg) mehrere Controller mit dem gleichen Namen verwendet, erhält man zunächst folgende Fehlermeldung:

Multiple types were found that match the controller named 'Home'. This can happen if the route that services this request ('{controller}/{action}/{id}') does not specify namespaces to search for a controller that matches the request. If this is the case, register this route by calling an overload of the 'MapRoute' method that takes a 'namespaces' parameter.

Der letzte Satz beinhaltet hierbei bereits die Lösung des Problems, welche allerdings gerne übersehen wird:

Anstelle der klassischen Registrierung des Default-Controllers wie hier:

routes.MapRoute(
	"Default", // Route name
	"{controller}/{action}/{id}", // URL with parameters
	new {
		controller = "Home",
		action = "Index",
		id = UrlParameter.Optional
	}
);

verwendet man einfach die entsprechende Überladung von MapRoute, sodass explizit der Namespace angegeben wird, in dem sich der Default-Controller befindet, z.B. "MyMvcApplication.Controllers":

routes.MapRoute(
	"Default", // Route name
	"{controller}/{action}/{id}", // URL with parameters
	new {
		controller = "Home",
		action = "Index",
		id = UrlParameter.Optional
	},
	new string[] { "MyMvcApplication.Controllers"}
);

Verwendet man AreaReigstrations, müssen auch dort die Default-Controller-Definition angepasst werden.

DotNetKicks-DE Image

Kreative Filmemacher gesucht!

26.10.2010 12:23:58 | Oliver Scheer

brand eins und Microsoft suchen beim diesjährigen Imagine Cup erstmalig zusammen das Video, das die Welt bewegt! Schüler und Studenten sind dazu aufgefordert, – alleine oder zu zweit – ein 30-60 Sekunden Video zu erstellen, in dem sie zeigen, wie Technologie die Welt verändern kann.

Als Lohn winken Preise wie eine Reise nach New York oder als Sonderpreis ein Jahresabo der brand eins!

Imagine Cup

Der Imagine Cup ist einer der weltweit größten Wettbewerbe für Studenten und Schüler. Zu dem Motto „Technologie für eine bessere Welt“, können die Schüler und Studenten beim Imagine Cup insgesamt in fünf Kategorien teilnehmen: Software Design, Embedded Development, Digital Media, Game Design und IT Challenge.

Weitere Informationen zu dem Sonderpreis von brand eins und Microsoft sowie zum Imagine Cup allgemein finden Sie auf www.imaginecup.de.

clip_image002[5]



tweetmeme_source = 'TheOliver';

31 Days of Windows Phone 7 By Jeff Blankenburg

26.10.2010 07:19:00 | Ozgur Aytekin

It's that time of year again...the time when I make an insane blogging announcement, and then you, my loyal reader, wait anxiously for me to fail. Well, I hate to disappoint you, but failure is not an option this time. This series has already been written, and it's just up to my trusty blogging platform to get these posts out on a timely basis.

Day #1: Project Template
Day #2: Page Navigation
Day #3: The Back Button Paradigm
Day #4: Device Orientation
Day #5: System Theming
Day #6: Application Bar
Day #7: Launchers
Day #8: Choosers
Day #9: Debugger Tips
Day #10: Input Scope

Day #11: Accelerometer
Day #12: Vibration Controller
Day #13: Location Services
Day #14: Tombstoning
Day #15: Isolated Storage
Day #16: Panorama Control
Day #17: Pivot Control
Day #18: WebBrowser Control
Day #19: Push Notification API
Day #20: Map Control

Day #21: Silverlight Toolkit
Day #22: Apps vs. Games
Day #23: Trial Versions of Your App
Day #24: Embedding Fonts, Video, and Images
Day #25: Talking to Existing APIs (like Twitter)

...

http://www.jeffblankenburg.com/post/31-Days-of-Windows-Phone-7.aspx

Free ebook: Moving to Microsoft Visual Studio 2010

26.10.2010 06:24:00 | Ozgur Aytekin

Here’s a little bit about the authors: Ken Haines is a software development engineer at Microsoft, working in the Consumer and Online Division. He has a passion for distributed applications in the cloud and strives to help customers and partners find the right solution for their needs. Pascal Paré has worked at Microsoft since 2006, where he has held positions as a software engineer on both development and testing teams. Patrice Pelland is a principal development manager at Microsoft, working in the Consumer and Online Division. He leads a development team that is focused on innovation and incubation across all Microsoft consumer products.

Moving to Microsoft Visual Studio 2010 was written with three audiences in mind:

Part I is for developers moving from Visual Studio 2003 to Visual Studio 2010.

Part II is for developers moving from Visual Studio 2005.

And Part III is for developers moving from Visual Studio 2008.

http://blogs.msdn.com/b/microsoft_press/archive/2010/09/13/free-ebook-moving-to-microsoft-visual-studio-2010.aspx

Windows Phone 7 App in 5 Minuten

26.10.2010 05:17:02 | Oliver Scheer

Windows Phone 7 ist in aller Munde, und beweist das Programmieren und Designen nicht kompliziert und aufwendig sein muss. Dieses kleine Video zeigt wie man in 5 Minuten einen Soundgenerator bauen kann ohne dabei auch nur eine einzige Zeile Code schreiben zu müssen.

Das Video ist im Zeitraffer aufgenommen.

Get Microsoft Silverlight

 

Viel Spaß,
Der Oliver



tweetmeme_source = 'TheOliver';

Die Ribbon für WPF in eigene Anwendungen einbauen

26.10.2010 04:41:36 | Oliver Scheer

Die Ribbon ist eine sehr beliebte neue Möglichkeit für die Steuerung von Anwendungen. Jeder Entwickler kann diese nun in seine bestehenden Anwendungen integrieren. Und das ganze ohne viel Aufwand. Microsoft stellt die Ressourcen dafür kostenfrei zur Verfügung.

Schritt 1 : Herunterladen & Installieren

Alle Ressourcen für das Ribbon können über das Microsoft Download Center heruntergeladen werden. Dort sucht man einfach nach „Ribbon for WPF“. Der Download beinhaltet einen Installer, der automatisch Projektvorlagen in Visual Studio 2010 für Visual Basic .NET und Visual C# einbindet.

Schritt 2: Visual Studio öffnen und einbauen

Um eine neue Anwendung basierend auf der WPF Ribbon bauen zu erstellen, wählt man bei der Anlage eines neuen Projektes einfach die Vorlage „WPF Ribbon Application“ aus.

clip_image002

Anschließend hat man folgende Ansicht in Visual Studio.

clip_image004

Visual Studio 2010 baut automatisch eine lauffähige Ribbon-Anwendung.

Schritt 3: Erweitern

Mit diesen paar Zeilen in XAML (Extensible Application Markup Language) lässt sich die Ribbon an eigene Bedürfnisse anpassen.

<ribbon:Ribbon x:Name="Ribbon">

<ribbon:Ribbon.ApplicationMenu>

<ribbon:RibbonApplicationMenu SmallImageSource="Images\SmallIcon.png">

<ribbon:RibbonApplicationMenuItem Header="Hello Ribbon" x:Name="MenuItem1"

ImageSource="Images\LargeIcon.png" />

</ribbon:RibbonApplicationMenu>

</ribbon:Ribbon.ApplicationMenu>

<ribbon:RibbonTab x:Name="HomeTab" Header="Home">

<ribbon:RibbonGroup Header="Hinzufügen">

<ribbon:RibbonButton LargeImageSource="Images\PlusBlue.png" Label="Benutzer" />

<ribbon:RibbonButton SmallImageSource="Images\PlusGrey.png" Label="Gruppe" />

<ribbon:RibbonButton SmallImageSource="Images\PlusGreen.png" Label="Ordner" />

<ribbon:RibbonButton SmallImageSource="Images\PlusOrange.png" Label="Akte" />

</ribbon:RibbonGroup>

<ribbon:RibbonGroup Header="Auswahl">

<ribbon:RibbonButton LargeImageSource="Images\Sort.png" Label="Sortieren" />

<ribbon:RibbonButton LargeImageSource="Images\RefreshBlue.png" Label="Aktualisieren" />

</ribbon:RibbonGroup>

</ribbon:RibbonTab>

….

</ribbon:Ribbon>

Visual Studio 2010 bietet allerdings auch die Möglichkeit, das ganze über die Toolbox via Drag & Drop duchzuführen.

clip_image006

 

Der Beweis als Video:

Get Microsoft Silverlight

 

Weitere Links zum Thema:

Mehr Beispiele für schnelles, produktives Entwickeln mit Windows 7 gibt es hier
http://msdn.microsoft.com/de-de/windows/ff944344.aspx

Microsoft Download Center
http://www.microsoft.com/downloads/de-de/

Microsoft Ribbon for WPF
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=2BFC3187-74AA-4154-A670-76EF8BC2A0B4&displaylang=en

Visual Studio 2010 Express Edition
http://www.microsoft.com/germany/express/



tweetmeme_source = 'TheOliver';

Review prio.conference 2010

25.10.2010 23:36:00 | Thorsten Hans

 

Vom 19.10 – 20.10.2010 fand in Nürnberg die Prio Conference statt. Viele sehr bekannte, nationale und internationale SpeakerPRIO-con haben im Oktober den Weg nach Nürnberg gefunden um Ihr Wissen, Ihre Ideen oder Ihre Erfahrung mit den Zuhörern zu teilen. Bereits im Vorfeld der Veranstaltung wurde wegen dem prio.walk von Ralf und Stefan viel über die prio.conference geschrieben, wodurch auch meine Erwartungen an die Konferenz sehr hoch waren.

Leider hat mein Kalender nur einen eintägigen Besuch der Prio zugelassen. :( Aber selbst wenn ich nur einen Tag vor Ort war, so konnte ich mir doch ein sehr gutes Bild von der Konferenz machen.

Ich selbst habe eine Session mit dem Titel “JSON – Eine Alternative zu XML” gehalten, da parallel ebenfalls interessante Themen vorgetragen wurde, hatte ich im Vergleich zur Mainstage wohl eher ein kleines Publikum, aber dennoch haben sich ca. 20 Interessierte zu meiner Session gefunden.

In 60 Minuten habe ich gezeigt was JSON ist und wie man JSON im .NET Context einsetzen bzw. verwenden kann.

Nach meiner Session habe ich mir die Session von Ayende zum Thema Scalability angesehen. Ayende zeigte eindrucksvoll, wie man sich auf extreme Anforderungen im Kontext der Skalierbarkeit einstellt und die vorhandenen Probleme aus dem Weg räumt um alle Anforderungen zu erfüllen. Wirklich eine coole Session, die wieder einmal gezeigt hat, dass KISS oftmals helfen kann :)

Im späteren Verlauf des Tages habe ich mir Golo Rodens Session zum Thema WIF (Windows Identity Foundation) angesehen. Das Thema war mir zwar bekannt, dennoch war der Vortrag von Golo sehr gut und veranschaulichte anhand von praktischen Beispielen die Verwendung und die Theorie hinter der WIF.

Zum Abschluss meines Besuches habe ich mir noch die Session von Udi Dahan angeschaut, in knapp 90 Minuten erläuterte Udi Command Query Responsibility Segregation (CQRS). CQRS stellt eine wirklich sehr sehr nette Art der Herangehensweise an BusinessAnforderungen dar. Weg von der microsoftschen 3-Tier-Anwendung, hin zu wartbaren, effektiven, skalierbaren Systemen. – So würde ich die Session für mich zusammenfassen.

Die restliche Zeit um die einzelnen Tracks herum habe ich mit Networking verbracht, so dass ich leider nicht zu jedem Time Slot etwas sagen kann, es sei mir verziehen, aber Networking ist auch untern Entwickler essentiell ;)

Kurzum war die prio.conference eine der besten Konferenzen die ich besucht habe, das Contentboard rund um Ralf hat die Agenda mit interessanten und anspruchsvollen Themen gespickt, so dass für jeden etwas dabei war. Auch das Rahmenprogramm war sehr gut. Daher kann ich jedem empfehlen sich den Termin für die prio.conference 2011 freizuhalten und an dieser Veranstaltung teilzunehmen.

 

Technorati-Tags: ,,

Gewinnspiel auf dotnet-kicks.de

25.10.2010 20:54:50 | Jan Welker

heute startet das erste Gewinnspiel auf dotnet-kicks.de.

Unter allen Teilnehmern gibt es drei Freikarten für die GUI&Design Konferenz sowie drei Amazon Gutscheine im Wert von je 33€ zu gewinnen.

GuiDesignAmazonGutschein

Um am Gewinnspiel teilzunehmen, musst du lediglich den dotnet-kicks.de Button in deinen Blog bzw. CMS einbinden und einen Kommentar im Blog von dotnet-kicks.de hinterlassen.
Es kann natürlich auch jeder teilnehmen, der den Button schon länger eingebunden hat, in dem Fall braucht man nur noch einen Kommentar hinterlassen.

Hilfestellung für das Einbinden des Buttons befindet sich hier auf dotnet-kicks.de.

Wir konnten eine nette Glücksfee gewinnen, die nach Ende des Gewinnspiels am 10.11.2010 unter allen Teilnehmern sechs Gewinner auslosen wird.

Solltest du noch keinen eigenen Blog haben, solltest du dir dieses kostenlose Angebot im dotnet-forum.de ansehen.

Zum Gewinnspiel im dotnet-kicks.de Blog

IronRuby 1.1.1 released – Including IronRuby Tools for VisualStudio 2010

25.10.2010 16:43:53 | Thorsten Hans

Am 21.Oktober.2010 ist die Version 1.1.1 von IronRuby released worden. Derzeit befindet sich das Release zwar noch im Alpha-Status, dennoch empfiehlt sich die Installation des Releases vor allem für Neueinsteiger, weil einiges im Release enthalten ist. Neben der Frameworkabdeckung für

  • Standard .NET Framework
  • Silverlight
  • Windows Phone 7

Sind nun auch die IronRuby Tools for Visual Studio 2010, in der ersten Version, enthalten. Das Addin fuer VisualStudio 2010 erlaubt es nun auch in VisualStudio IronRuby Projekte mit Syntaxhighlighting, Debuggin-Support und Projekt- bzw. Elementvorlagen zu erstellen. Auch ein IronRuby Interactive Command Window ist in den VS-Tools enthalten.

Syntaxhighlighting

Das Syntaxhighlighting von Visual Studio 2010 fuer IronRuby erlaubt es schnell und einfach Schlüsselwörter, Zeichenketten und Kontrollzeichen zu erkennen. Somit ist das Schreiben von IronRuby Code etwas angenehmer und die Lesbarkeit des Codes wird besser.

SyntaxHighlighting

 

Debugging Support

Zwar war es auch vor Release von IronRuby 1.1.1. bereits möglich IronRuby Skripte zu Debuggen, allerdings musste hierzu ein kleiner Workaround gemacht werden… Diese Zeiten sind nun vorbei. Man kann wie gewohnt in VisualStudio 2010 einen Breakpoint im Code setzen und ab dieser Stelle dann zur Laufzeit debuggen. Endlich! :)

Debugging

Wie gut die Debugging Unterstützung im Detail ist, kann ich aktuell noch nicht sagen, dass wird sich aber in naher Zukunft zeigen :)

 

Projekt- und Elementvorlagen

Ein wichtiger Faktor in Sachen Zeitersparnis, sind die Vorlagen ueber die VisualStudio verfuegt. Dank den IronRuby Tools, sind nun auch (zumindest mal die ersten) Templates für IronRuby verfügbar. Auf Projektebene ist es noch etwas schwach auf der Brust, aber ich denke hier werden schnell Templates für IronRuby-WPF Anwendungen usw folgen.

ProjectTemplates

 

Bei den ItemTemplates hat man entsprechend dem Projekttemplate logischerweise andere Vorlagen zur Verfügung, nett ist vor allem das OOB eine Vorlage für RSpec UnitTests vorhanden ist. In diesem Beispiel habe ich eine Console Anwendung erstellt, daher ergeben sich folgende Elementvorlagen

ElementTemplates

 

 

IronRuby Interactive Window

Das IronRuby Interactive Window erlaubt es analog zur IronRuby Console, nach REPL, just in time IronRuby zu entwickeln und dies innerhalb von Visual Studio :)

InteractiveIronRubyWindow

 

Identifizierte Probleme der Alpha Version

Bei dem ersten Rumspielen mit der neuen Version ist mir bereits ein Bug aufgefallen, es lassen sich auf einem frischen Windows 7 x64 keine RubyGems via igem installieren! In der IronRuby Mailinglist sind auch schon entsprechende Threads aufgemacht worden, allerdings bist dato noch ohne helfende Antwort!

Dennoch lohnt es sich auf jeden Fall die aktuelle Version 1.1.1 mal runterzuladen und auszuprobieren, demnach viel Spass beim IronRuby skripten.

 

Technorati-Tags: ,,

Wer baut Windows 7 Apps und möchte darüber reden?

25.10.2010 15:06:24 | Oliver Scheer

Servus, wir (die Entwickler-Abteilung bei Microsoft Deutschland) möchte von Ihnen hören. Wir suchen nach spannenden Windows 7 Apps (=Anwendungen).

Wir würden diese gerne hier und an anderen Stellen vorstellen.

Windows7Logo

Einfach eine Email an mich schreiben …



tweetmeme_source = 'TheOliver';

Visual Studio 2010 … Anwendungen entwickeln mit schicken Icons

25.10.2010 14:28:18 | Oliver Scheer

Ich bin gerade auf etwas gestossen, das mein Entwicklerherz doch sehr erfreut hat.

Für ansprechende Anwendungen benötigt man auch ansprechende Symbole. Und da habe ich erst an den all möglichen Orten gesucht, bis ich darauf gestossen bin, daß Visual Studio 2010 Icons direkt mitliefert. Nur so richtig draufgestossen wird man nicht.

Im Ordner C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\VS2010ImageLibrary\1033 befindet sich eine Datei namens ”VS2010ImageLibrary.zip”. Diese Datei hat es im wahrsten Sinne in sich. Nämlich ein Haufen an schicken Symbolen für die unterschiedlichsten Zwecke und Auflösungen.

image

Also … ich muss als Entwickler keine Icons designen Zwinkerndes Smiley

Viel Spaß,
Der Oliver



tweetmeme_source = 'TheOliver';

Deep Zoom und Deep Zoom Composer

25.10.2010 10:58:41 | Oliver Scheer

Deep Zoom ist eine Technik zur schnellen Darstellung von hochauflösenden Bildern in einer sehr spannenden und vor allem schnellen Art und Weise über das Internet. Dieses Video zeigt was Deep Zoom ist und wie man mit dem Deep Zoom Composer eben solche Deep Zooms erstellen kann.

Das Video dauert nur 6 Minuten und zeigt u.a. das sehr spannende Hard Rock Café Deep Zoom, die Installation des Deep Zoom Composer und wie man ein eigenes Deep Zoom erstellen kann.

Der Download und die Verwendung des Deep Zoom Composer ist kostenfrei.

Get Microsoft Silverlight

Download: http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=457b17b7-52bf-4bda-87a3-fa8a4673f8bf



tweetmeme_source = 'TheOliver';

Mit dotnet-kicks.de zur GUI&Design Konferenz in Nürnberg!

24.10.2010 21:04:28 | dotnet-kicks.de Blog

fullsize_468x60_2-4


In Zusammenarbeit mit PPEDV veranstalten wir ein Gewinnspiel, bei dem es drei Freikarten für die GUI&Design Konferenz zu gewinnen gibt. Zusätzlich werden drei Amazon Gutscheine im Wert von je 33€ verlost.

Auf der GUI&Design präsentieren Branchenexperten DIE Trends rund um die Software der Zukunft auf Basis von Microsoft-Technologien. Sie erfahren unter anderem, wie mehr Umsatz generiert werden kann mit Anwendungen, die cool aussehen und leichter bedienbar sind. Die Konferenz findet am 8. und 9. Dezember 2010 in Nürnberg statt.

Am Gewinnspiel kann jeder teilnehmen, der einen Blog betreibt, in dem der dotnet-kicks.de Button eingebunden ist. Der Blog sollte sich hauptsächlich mit Technologien rund um das .NET Framework beschäftigen, sowie mindestens drei sinnvolle Einträge enthalten. Hilfe zur Einbindung des Buttons gibt es hier: http://dotnet-kicks.de/docs/button

Du hast noch keinen eigenen Blog?  Im dotnet-forum.de hast du kostenlos einen Blog eröffnen.
Hier findest du mehr Informationen.

Die drei Freikarten werden unter allen ausgelost, die einen Kommentar in diesem Blogpost hinterlassen. Bitte gebt in dem Kommentar neben eurer Emailadresse auch die URL zu der Webseite an, in der der Button eingebunden wurde.  Die Emailadresse ist nur für Administratoren von dotnet-kicks.de sichtbar und wird nicht an Dritte weitergegeben.

GeliAngelika von Ammon ist bei diesem Gewinnspiel die Glücksfee und wird die Lose ziehen.
Sie bewegt sich fernab der Blogging- und IT-Branche. Sie ist 26 und schloss im September 2009 ihr Studium (BA) als Medien-, Sport- und Eventmanagerin ab.
Nach ihrem Berufseinstieg in der Gastronomie und TV-Branche befindet sie sich derzeit in beruflicher Orientierungsphase. In ihrer Freizeit organisiert sie kulturelle Low-Budget-Produktionen und übt sich im DJing mit Vinyl.

 


Das Gewinnspiel startet am 25.Oktober 2010 und endet am 10 November 2010. Der Rechtsweg ist ausgeschlossen.
Die Gewinner werden hier im Blog veröffentlicht und per Email benachrichtigt.

Ein Ticket für die GUI&Design hat einen Wert 899,00 €. Wer sich bis zum 31. Oktober 2010 anmeldet, sichert sich die Teilnahme zum Frühbucherpreis von nur 699,00 €!

Das Team von dotnet-kicks.de wünscht allen Teilnehmern viel Glück!

Nachtrag zu: Lenovo ThinkPad Advanced Dock mit ordentlichem Lüfter

24.10.2010 20:57:00 | Daniel Springwald

Hier kommt ein kleiner Nachtrag zum vorherigen Eintrag.

Zunächst als Vergleich ein Foto des nervig pfeifenden Mini-Lüfters, welcher vorher dafür zuständig war, die Wärme der Grafikkarte aus der Docking Station zu pusten:

 

Nach dem gestrigen Lüfterumbau für die Grafikkarte habe ich mir heute dann auch noch einmal an den zweiten Lüfter der Docking Station angeschaut. Diesen hatte ich zwar schon vor drei Jahren durch einen gleich großen, etwas leiseren ersetzt, er war aber immer noch sehr hörbar.

Nach dem dem selben Prinzip wie gestern und mit deutlich größerem Lüfter sieht das ganze dann jetzt so aus:

 

Hat alles perfekt geklappt - die Docking Station ist nun komplett flüsterleise :-)

video2brain - WPF 4 und Silverlight 4

24.10.2010 20:40:12 | Gregor Biswanger

Vor einem Jahr veröffentlichte ich bereits ein Video-Training zum Thema “SharePoint 2007 – Für Administratoren und Entwickler” und seit dem 20. Oktober 2010 kann ich mit Stolz meine zweite DVD ankündigen. Diesmal handelt es sich zum Thema “WPF 4 und Silverlight 4”. Die Schwerpunkte liegen für Entwickler und Designer. Es beginnt mit einem Einstieg von XAML mittels WPF und endet mit Silverlight bezogenen Eigenheiten, wie zum Beispiel verteilte Datenkommunikation.

9783827363404

Beschreibung

Mit der Windows Presentation Foundation (WPF) und Silverlight bietet Microsoft eine neue Technologie als Grundlage für benutzerfreundliche Anwendungsoberflächen an. Effektivität lautet hierbei das Zauberwort, das für eigene Anwendungen erreicht werden soll. Dieses Video-Training versetzt Sie in die Lage, diesen Vorsprung bei Ihrer täglichen Arbeit zu nutzen! Gregor Biswanger gibt Ihnen hier einen Überblick über Grundlagen, zum Beispiel von XAML und technischen Funktionalitäten, erklärt aber auch fortgeschrittene Patterns und Arbeitstechniken der Profis. Zudem geht er auf die Usability-orientierte Oberflächengestaltung ein, wovon Entwickler und Designer gleichermaßen profitieren.

 

Weitere Informationen

- Produktübersicht

- Inhaltsverzeichnis

 

Kostenfreie Probevideos

Nach einer kurzen Registrierung, kann man einige Videos kostenfrei auf video2brain ansehen:

http://www.video2brain.com/de/products-635.htm

oder auch unter der Deutschen Microsoft Expression Website:

http://www.microsoft.com/germany/expression/resources/silverlightTraining/videos/Default.aspx

Bonus zur DVD: „Expression Blend 4 – Eine Einführung“

Als besonderen Bonus erhalten registrierte Kunden dieses Video-Trainings auch noch kostenlosen Zugriff auf das Video-Training „Expression Blend 4 – Eine Einführung“.

525_expression_blend4

 

Beschreibung

In diesem etwa achtzigminütigen Video-Training gibt Ihnen Gregor Biswanger eine Einführung in Expression Blend 4. Expression Blend ist das Designwerkzeug für die Entwicklung von Desktop-Anwendungen auf Basis von WPF (Windows Presentation Foundation) und für Web-Anwendungen auf Basis von Silverlight. Sie lernen zunächst die grundlegende Bedienung von Expression Blend kennen, beschäftigen sich dann mit dem Prototyping und der Bereitstellung von Daten für Designer und kreieren abschließend mithilfe von Expression Blend Animationen und 3-D-Effekte für Silverlight- bzw. WPF-Anwendungen. Übrigens: Dieses Video-Training steht registrierten Kunden des Trainings "WPF 4 und Silverlight 4" als kostenloses Bonus-Training zur Verfügung.

Kostenfreie Probevideos

Nach einer kurzen Registrierung, kann man einige Videos kostenfrei auf video2brain ansehen:

http://www.video2brain.com/de/products-620.htm

oder auch unter der Deutschen Microsoft Expression Website:

http://www.microsoft.com/germany/expression/resources/Blend4Training/videos/Default.aspx

 

Hier ab sofort erhältlich

Amazon: "Video-Training: WPF 4 und Silverlight 4"

Verlosung bis zum 29. November 2010

Mit ein bisschen Glück kann man hier auch eine DVD kostenlos abstauben. Einfach ein formloses Kommentar schreiben, obwohl mich Feedback zum Blog allgemein immer Interessiert. Teilnahmeschluss ist Montag der 29.11.2010. Bitte die E-Mail-Adresse nicht vergessen (wird aber nicht öffentlich angezeigt), mehr nicht - den Rest klären wir dann per E-Mail im Fall dessen. Der Rechtsweg ist ausgeschlossen. Je Gewinnspiel-Teilnehmer ist eine Einsendung zulässig. Mehrfach-Einsendungen eines Teilnehmers werden nicht berücksichtigt. Die Gewinner werden unter allen Einsendern durch eine Ziehung ermittelt. Eine Ausbezahlung der Preise in bar ist nicht möglich. Ich übernehme keine Haftung für verloren gegangene, beschädigte, fehlgeleitete oder verspätete Teilnahmen sowie für irgendwelche technische Schwierigkeiten.
 

Besten Dank

Besten Dank an das ganze video2brain-Team und an Addison-Wesley!

video2brain-logoaddison-wesley

Mein Blog ist umgezogen

24.10.2010 17:39:00 | Martin Hey

UmzugIhr werdet es sicher schon gemerkt haben. Seit Freitag Abend ist mein Blog unter einer anderen Url zu erreichen. Meine neue Blog-Adresse ist http://blog.uniquesoftware.de.

Warum war das notwendig? Die bisherige Url war etwas schwer zu merken und nun sind sowohl Webseite als auch Blog unter einer einheitlichen Domain erreichbar, was es für alle etwas einfacher macht.

Bis auf wenige Ausnahmen hat auch alles reibungslos geklappt. Für Besucher, die über die "alte" Url hierher gefunden haben, ist eine Weiterleitung eingerichtet. Der RSS-Feed zeigt ebenfalls auf die neue Domain. Einzig die Social-Media-Einbindung hat etwas gelitten: Bei .NET-Kicks werden die bisherigen Blog-Einträge noch unter ihrer alten Url geführt. Deshalb wird hier im Blog bei diesen Einträgen 0 Kicks angezeigt.

Dieses Blog, das ursprünglich nur als privater Datenspeicher mit gedacht war, ist inzwischen schon bei einigen Lesern zur Hilfequelle geworden - sei es weil sie über die gleichen Probleme gestolpert sind wie ich auch oder sei es weil zumindest mein Post einen Anstoß in die richtige Richtung bieten konnte.

Deshalb möchte ich die Gelegenheit nutzen und mich an dieser Stelle auch noch bei allen meinen treuen Lesern bedanken. Weiterhin viel Spaß beim Stöbern durch meine Gedanken und Ideen. Auch wenn man manchmal in die Tischkante beißen mag, weil ein Problem unlösbar scheint, so gibt es doch in vielen Fällen irgendeinen Workaround, der nur gefunden werden will. In diesem Sinne: happy coding auch weiterhin.

Langlaufende Transaktionen (Sagas) in NServiceBus anhand eines Beispiels

24.10.2010 01:56:40 | Manfred Steyer

NserviceBus unterstützt mit dem Konzept der Saga langlaufende Transaktionen. Dieses Konzept soll hier anhand des Beispiels Ansuchen und Bearbeiten von Anforderungen, welches hier zum Download bereit steht, beschrieben werden. Im ersten Schritt sucht ein Mitarbeiter um ein Produkt an. Der jeweilige Vorgesetzte erhält eine Nachricht und hat nun die Aufgabe, das Ansuchen zu bearbeiten, also zu genehmigen oder abzulehnen.

Dabei ergeben sich zwei technische Aufgaben: Zum einen muss die Nachricht mit der Entscheidung des Vorgesetzten zu einer der aktiven Sagas zugeordnet werden, damit das System den richtigen Bedarfsträger über diese Entscheidung informiert bzw. die richtigen Produkte bestellt. Zum anderen müssen Zustandsinformationen über die Saga bei jedem mit ihr assoziierten Methodenaufruf geladen bzw. danach wieder gesichert werden. Diese Zustandsinformationen könnten im betrachteten Beispiel die Id, den Namen sowie die Email-Adresse des Mitarbeiters sowie Informationen über die im Falle einer Genehmigung zu bestellenden Produkte beinhalten. Glücklicherweise kümmert sich NServiceBus um diese beiden Aufgaben.

Um mit NServiceBus eine Saga zu implementieren, sind zunächst Klassen für die Nachrichten sowie eine Klasse, welche den Zustand einer Saga repräsentiert, zu erstellen. Die Nachrichtenklassen implementieren per Definition IMessage; die Klasse mit den Zustandsinformationen ISageEntity (siehe Listing 1). Bei IMessage handelt es sich um ein Marker-Interface; ISageEntity gibt hingegen die Eigenschaften Id, OriginalMessageId und Originator vor, welche NServiceBus-intern Verwendung finden.

Listing 1: Nachrichtenklassen und Saga-Entität
http://manoli.net/csharpformat/ -->
   1:  public class Request : IMessage
   2:  {
   3:      public Request()
   4:      {
   5:          Id = Guid.NewGuid().ToString();
   6:      }
   7:   
   8:      public String Id { get; set; }
   9:      public String ProductName { get; set; }
  10:      public double Price { get; set; }
  11:  }
  12:   
  13:  public class Decision : IMessage
  14:  {
  15:      public String RequestId { get; set; }
  16:      public bool Approved { get; set; }
  17:  }
  18:   
  19:  public class RequestSagaData : ISagaEntity   
  20:  {
  21:      public virtual String RequestId { get; set; }
  22:      public virtual DateTime? RequestDate { get; set; }
  23:      public virtual bool? Approved { get; set; }
  24:      public virtual DateTime? DecisionDate { get; set; }
  25:   
  26:      public virtual String ProductName { get; set; }
  27:      public virtual double Price { get; set; }
  28:   
  29:   
  30:      public virtual Guid Id
  31:      {
  32:          get;
  33:          set;
  34:      }
  35:   
  36:      public virtual string OriginalMessageId
  37:      {
  38:          get;
  39:          set;
  40:      }
  41:   
  42:      public virtual string Originator
  43:      {
  44:          get;
  45:          set;
  46:      }
  47:  }


Zur Behandlung der einzelnen innerhalb der Saga erwarteten Nachrichten, wird eine Subklasse von Saga bereitgestellt (Listing 2). Dabei ist Saga mit der zu verwendeten SagaEntity-Implementierung zu typisieren. Über die von dieser Klasse geerbte Methode ConfigureHowToFindSaga wird festgelegt, wie Folgenachrichten zu bereits laufenden Sagas zugewiesen werden sollen. Im betrachteten Beispiel wird festgelegt, dass zu diesem Zwecke die RequestId von Decision mit der in den Zustandsinformationen der Saga gespeicherten RequestId zu vergleichen ist. Bei Gleichheit wird die Nachricht mit der jeweiligen Saga assoziiert.

Für jede zu behandelnde Nachrichten ist darüber hinaus ISagaStartedBy<T> oder IHandleMessage<T> zu implementieren, wobei diese mit der jeweiligen Nachrichtenklasse zu typisieren sind. Mit ISagaStartedBy wird angezeigt, dass eine neue Saga bei Empfang einer durch den Typparameter repräsentierten Nachricht gestartet wird. Im Gegensatz dazu muss bei Verwendung von IHandleMessage die jeweilige Saga bereits aktiv sein. Beide Interfaces geben die Methode Handle(T) vor, deren Aufgabe das Behandeln der jeweiligen Nachrichten ist. Über die Eigenschaft Data, welche den Typ der festgelegten SagaEntity aufweist, kann auf die Zustandsinformationen der Saga zugegriffen werden. Zum Laden und Speichern dieser Informationen verwendet NServiceBus den O/R-Mapper NHibernate. Ein Zutun des Entwicklers ist hierbei nicht von Nöten. Beendet eine Handle-Implementierung die Saga, ruft diese per Definition die Methode MarkAsComplete auf. Dies führt dazu, dass die Zustandsinformationen aus der mit NHibernate eingebundenen Datenbank gelöscht werden.


Listing 2: Message-Handler
http://manoli.net/csharpformat/ -->
   1:  class RequestSaga:  
   2:      Saga<RequestSagaData>,
   3:      ISagaStartedBy<Request>,
   4:      IHandleMessages<Decision>
   5:  {
   6:      public override void ConfigureHowToFindSaga()
   7:      {
   8:          this.ConfigureMapping<Decision>(
   9:              saga => saga.RequestId, 
  10:              decision => decision.RequestId);
  11:   
  12:      }
  13:   
  14:      public void Handle(Request message)
  15:      {
  16:          Console.WriteLine("GOT REQUEST:");
  17:          Console.WriteLine("Message Id: " + message.Id);
  18:          Console.WriteLine("Product Name:" + message.ProductName);
  19:          Console.WriteLine("Price: " + message.Price);
  20:          Console.WriteLine();
  21:   
  22:          this.Data.ProductName = message.ProductName;
  23:          this.Data.Price = message.Price;
  24:   
  25:          Data.RequestDate = DateTime.Now;
  26:          Data.RequestId = message.Id;
  27:   
  28:              
  29:      }
  30:   
  31:      private static void SaveHotel()
  32:      {
  33:          using (var s = HibernateHelper.OpenSession())
  34:          {
  35:              using (var t = new TransactionScope())
  36:              {
  37:                  Hotel h;
  38:                  h = new Hotel
  39:                  {
  40:                      Bezeichnung = "Hotel zum großen Test",
  41:                      Sterne = 4
  42:                  };
  43:                  s.Save(h);
  44:                  t.Complete();
  45:              }
  46:          }
  47:      }
  48:   
  49:      public void Handle(Decision message)
  50:      {
  51:          Console.WriteLine("GOT DECISION:");
  52:          Console.WriteLine("Message Id: " + message.RequestId);
  53:          Console.WriteLine("Product Name:" + Data.ProductName );
  54:          Console.WriteLine("Price: " + Data.Price);
  55:          Console.WriteLine("Approved: " + message.Approved);
  56:          Console.WriteLine();
  57:   
  58:          Data.Approved = message.Approved;
  59:          Data.DecisionDate = DateTime.Now;
  60:   
  61:          SaveHotel();
  62:   
  63:  
  64:   
  65:          this.MarkAsComplete();
  66:              
  67:      }
  68:  }


Damit die gezeigten Sagas zur Ausführung gebracht werden können, wurde NServiceBus mit den Methoden Sagas und NHibernateSagaPersister konfiguriert (Listing 3). Erstere Aktiviert die Unterstützung für Sagas; letztere aktiviert den SagaPersister, welche die Zustände mit Hilfe von NHibernate in einer Datenbank speichert.

Listing 3: Konfigurieren von NServiceBus
http://manoli.net/csharpformat/ -->
   1:  static void Main(string[] args)
   2:  {
   3:      Configure   
   4:          .With()   
   5:          .Log4Net()
   6:          .DefaultBuilder()
   7:          .XmlSerializer()   
   8:          .MsmqTransport()   
   9:          .IsTransactional(true)   
  10:          .PurgeOnStartup(false)   
  11:          .UnicastBus()   
  12:          .LoadMessageHandlers()   
  13:          .ImpersonateSender(false)   
  14:          .Sagas()  
  15:          .NHibernateSagaPersister()
  16:          .CreateBus()   
  17:          .Start();
  18:              
  19:      Console.ReadLine();
  20:  }
  21:   
  22:  [...] 
  23:   


Darüber hinaus wurden Konfigurationsdaten für den SagaPersister in der Konfiguration abgelegt (Listing 4).

Listing 4: Konfiguration des SagaPersisters
http://manoli.net/csharpformat/ -->
   1:    <NHibernateSagaPersisterConfig>
   2:      <NHibernateProperties>
   3:        
   4:        <add Key="connection.provider"
   5:             Value="NHibernate.Connection.DriverConnectionProvider"/>
   6:        <add Key="connection.driver_class"
   7:             Value="NHibernate.Driver.SqlClientDriver"/>
   8:        <add Key="connection.connection_string"
   9:             Value="Server=[…];initial catalog=[…];Integrated Security=SSPI"/>
  10:        <add Key="dialect"
  11:             Value="NHibernate.Dialect.MsSql2005Dialect"/>
  12:      </NHibernateProperties>
  13:    </NHibernateSagaPersisterConfig>

Silverlight Tipp der Woche: DataBinding mit der Code-Behind Klasse

23.10.2010 17:05:00 | Stefan Lange

In diesem Tipp geht es um das Binden an Properties aus der Code-Behind Klasse eines UserControls.

Zusammenfassung

Wenn der DataContext eines UserControls auf das ViewModel zeigt, kann man mit Hilfe von ElementBinding dennoch einfach auf Properties aus der Code-Behind Klasse zugreifen, indem man das UserControl mit einem Namen versieht.

Beschreibung

Üblicherweise wird der DataContext eines UserConrols auf dessen ViewModel gesetzt. Das ViewModel enthält alle für die Anzeige benötigten Daten und das DataBinding der Unter-Controls bindet ausschließlich gegen das ViewModel.

Es kann aber auch vorkommen, dass ein UserControl selbst Properties implementiert, an die einzelne seiner Unter-Controls binden sollen. Wenn die Property DataContext jedoch auf ein ViewModel gesetzt ist, ist es nicht so ganz offensichtlich, wie denn ein Unter-Control innerhalb von XAML an eine Property aus der Code-Behind Klasse binden könnte. Ein einfacher Trick besteht darin, dem UserControl einen Namen zu geben und dann mit Element-Binding den Bezug zur Code-Bedhind Property herzustellen.

In folgendem Beispiel soll die Property SomeItems aus der Code-Behind Klasse als Datenquelle für eine Listbox dienen. Das UserControl erhält hier den Namen „codeBehind“ und bietet darüber der Listbox Property ItemsSource den Zugriff auf SomeItems.

<UserControl x:Name="codeBehind" x:Class="MyProject.MainPage" … />
  <Grid Background="White">
    <ListBox ItemsSource="{Binding SomeItems, ElementName=codeBehind}" … />
  </Grid>
</UserControl>

Obwohl dieser Weg auch bei WPF und Windows Phone funktioniert, klappt die Tool Unterstützung mit „Apply Data Binding…“ im Property Explorer von Visual Studio 2010 nicht. Es werden nur die Properties der Basisklassen aufgelistet. Bei Blend funktioniert der Property Explorer dagegen korrekt.

Anwendungsbeispiel

Es stellt sich natürlich die Frage, wann man überhaupt an Properties aus einem UserControl binden sollte. Dies ist dann sinnvoll und richtig, wenn das UserControl ein wiederverwendbares Control repräsentiert und unabhängig von der Datenmodellierung einer konkreten Anwendung ist. Ein Beispiel wäre ein UserControl „RichTextEditor“ zum Formatieren von Text. Neben einer RichTextBox enthielt so ein UserControl auch eine Toolbar mit Buttons und ComboBoxes zum Einstellen von Schriftart, Größe etc. Ein solcher RichTextEditor benötigt beispielsweise eine Property EditorFontFamily zum Setzen und Abfragen des Default-Fonts. Damit der RichTextEditor wie ein Control als Teil von anderen UserControls verwendet werden kann, sollten seine Properties DataBinding unterstützen. Dazu müssen sie als Dependency Properties implementiert werden, denn nur Dependency Properties können Target Objekte einer Datenbindung sein. Die Implementierung von EditorFontFamily als Dependency Property sieht wie folgt aus.

public partial class RichTextBox : UserControl
{
  public FontFamily EditorFontFamily
  {
    get { return (FontFamily)GetValue(EditorFontFamilyProperty); }
    set { SetValue(EditorFontFamilyProperty, value); }
  }
  public readonly DependencyProperty EditorFontFamilyProperty =
    DependencyProperty.Register("EditorFontFamily", typeof(FontFamily), typeof(RichTextEditor),
    new PropertyMetadata("Verdana"));
 }

Nun kann RichTextEditor in einem anderen UserControl wie jedes andere Control auch verwendet werden. In
diesem Kontext kann dann EditorFontFamily an eine Property MyFontFamily aus einem ViewModel
gebunden werden.

<UserControl x:Class="MyProject.MyPage" … />

  <Grid Background="White">
    <my:RichTextEditor EditorFontFamily="{Binding MyFontFamily}" … />
  </Grid>
</UserControl>

Damit dies funktioniert muss der DataContext auf das ViewModel des umschließenden Controls MyPage zeigen. Daher kann man nicht einfach im Constructor von RichTextEditor den DataContext auf this setzen.

Innerhalb von RichTextEditor holt sich dessen RichTextBox seine FontFamily aus der Code-Behind Klasse.

<UserControl x:Name="codeBehind" x:Class="MyProject.RichTextEditor"
  <Grid>

    <!-- … -->
    <RichTextBox FontFamily="{Binding EditorFontFamily, ElementName=codeBehind}"… />
    <!-- … -->
  </Grid>

</UserControl>

Dieses Binden über zwei Stufen ist der einfachste Weg, UserContols als eigenständige Controls wiederzuverwenden, und funktioniert in der beschriebenen Art und Weise ohne zusätzlichen Code in der Code-Behind Datei.

Hier geht's zum nächsten Tipp.

Lenovo ThinkPad Advanced Dock mit ordentlichem Lüfter

23.10.2010 01:23:00 | Daniel Springwald

Die Advanced Dock von Lenovo ist an sich ein tolles Ding, aber bei den Lüftern mieserabel umgesetzt: Sobald man den PCI-Express Slot für eine Grafikkarte verwendet, wird jede Bewegung auf dem Bildschirm direkt in ein lautes Lüftergeräusch umgesetzt.

Als ich das Gerät vor 3 Jahren kaufte, sah mich mich daher direkt gezwungen, den Hauptlüfter gegen einen etwas größeren und leiseren auszutauschen. Da das nur mit einem Dremel ging, waren Gewährleistung und Garantie natürlich direkt weg ;o)

Der Grafikkarten-Slot hat selbst auch noch einen Mini-Lüfter - etwa so groß wie eine Streichholzschachtel. Dieser ist noch schlimmer und hört sich wie eine kleine Pfeife an. Auch er springt ständig an und aus, wenn man z.B. in Windows ein Fenster verschiebt :-/

Hier hat es vor drei Jahren genügt, einen Widerstand vor den kleinen Lüfter zu schalten, da die PCI-E Grafikkarte eine eher kleine war und nicht so viel Hitze produzierte.

Nun war es aber gestern soweit: Eine Gforce 430 GT sollte her. Auf gut Glück probiert stellte sich leider heraus, dass die Docking Station über den kleinen Lüfter (selbst ohne Verlangsamung durch den Widerstand) bei Beanspruchung der Grafikkarte nicht annhähernd genug Luft auf die Grafikkarte pusten kann. Außerdem war der Lüfter dann wieder unglaubtlich laut und nervig.

Also musste mehr Luft her - gern schön leise ;o)

Hier meine Lösung, welche sehr gut klappt, wenn man auf das zusätzliche Laufwerks-Bay der Docking Station verzichten kann oder dort zumindest nicht ständig Datenträger einlegen muss. Alles natürlich auf eigene Gefahr!

1. Die PCI-Express-Abdeckung abnehmen und einen großen Lüftungsschlitz ´reindremeln

 

 

2. Mit dem Lasercutter passende Gehäuseteile schneiden und zusammen mit einem passenden Lüfter verkleben.

Die Bodenplatte und der Lüfter:

Das erste Seitenteil:

Fertig zusammen gebaut:

Und im Einsatz vor Ort:

 

Klappt super, ist leise und sieht gar nicht mal so aus als würde es dort nicht hingehörten ;-)

 

Verwirrendes NotFound

22.10.2010 07:18:00 | Martin Hey

Das Szenario ist recht schnell umrissen: Abstrakt gesehen gibt es einen Webservice: Unter einer Url ist ein Endpunkt registriert, über den per Get-Parameter gesteuert die Daten gefiltert abgerufen werden können. Auf der Client-Seite gibt es eine Windows Phone 7 Anwendung, die mit Hilfe eines asynchronen WebRequest diese Url abfragt und die in der Response enthaltenen Daten deserialisiert und der Anwendung bereitstellt - also alles recht trivial.

Etwas überrascht war ich, als ich bei der Ausführung im Callback beim Aufruf von EndGetResponse dann eine WebException mit der Meldung "NotFound" bekam. Auch die Details der WebException waren nicht aussagekräftiger.
The remote server returned an error: NotFound.

Beim Zugriff auf entfernte Inhalte bedeutet NotFound ja eigentlich, dass die angeforderte Ressource nicht da ist - eine Datei, ein Endpunkt oder was auch immer. Meist lässt sich dann auch mit einer Überwachung der http(s)-Anforderungen überprüfen, ob der Server irgendwo einen Statuscode 404 geliefert hat.

Genau das war aber bei mir nicht der Fall. Im Browser war die Url problemlos aufrufbar und lieferte Daten und die von mir an den WebRequest übergebenen Credentials waren auch die gleichen wie die, die ich im Browser eingegeben hatte. Auch die Überwachung des Traffics (wenn ich die Seite im Browser aufrief) zeigte nie einen Http-Statuscode im 400er oder 500er Bereich an.

Was war nun eigentlich das Problem? Ganz einfach: Ein selbst ausgestelltes Zertifikat. Was man im Browser bei bekannten Seiten recht schnell wegklickt, machte hier nun ein so großes Problem, dass der Zugriff ganz unterbunden wurde.


Da das Windows Phone 7 auch über keinen Certificate Store verfügt, im man mal eben Zertifikate ablegen kann und so Vertrauensstellungen definiert, war in diesem Fall der einfachere Weg, wieder auf http umzustellen.

Gewünscht hätte ich mir von der API eine aussagekräftigere Fehlermeldung, damit man gleich in der richtigen Richtung suchen kann. Jetzt weiß ich, dass NotFound bedeutet, dass irgend etwas schief gegangen ist.

- artists in residence - artists in residence -

21.10.2010 15:57:43 | Oliver Scheer

Hallo,

Windows Phone 7 landet… und das User Interface Design erzeugt großes Interesse.

Speziell für User Experience / User Interface Spezialisten bieten wir 2 Tage deep dive zu Windows Phone 7 User Interface Design an.

Was es ist: 100% UI Design

Was es nicht ist: Technisches Training!

Agenda

Tag 1:

· Einleitung

· Briefing: Human-centred Design

· Metro User Interface Styleguide

o Allgemein

o Hands-on styleguide experience

o Q&A

· App Konzept review

o Stärken

o Schwächen

o Möglichkeiten

o Gefahren

Tag 2:

· Projektarbeit und Coaching

· App Experience Review

· Deployment J

Wer kann mitmachen?

· Mitarbeiter von Agenturen oder Software-Hersteller

· Leute mit Marketplace Registrierung (als Developer bei Marketplace angemeldet)

Was ist mitzubringen?

· Expertise in Expression und Visual Studio

· Notebook

· Darauf installiert die aktuellen Windows Phone 7 Developer Tools

· Windows Phone 7 Gerät (mit USB Kabel)

· Mindestens eine App (Idee oder bereits entwickelt) die zum Ende des Events in den Marketplace kommen kann

Teilnahmegebühr?

· Keine!

Wann?

· 22.11. und 23.11.  Berlin

· 13.12. und 14.12. Hamburg

· 17.1. und 18.1. Unterschleißheim

· 7.2. und 8.2. Bad Homburg

· 14.02.-15.02. Köln

Ø Jeweils von 9:30 bis 17:30 Uhr, Details folgen per Mail

Bitte meldet euch (max. 2 Personen pro Firma/Agentur) per Mail (clemensl@microsoft.com) bei mir an.

ACHTUNG: First come, first serve J,  Teilnehmende werden per Mail informiert.



tweetmeme_source = 'TheOliver';

Der offizielle Werbespot für das Windows Phone 7

21.10.2010 15:01:15 | Oliver Scheer

Diesem Spot wird man in den nächsten Wochen nicht entgehen können … und wollen. Ich find ihn großartig.



tweetmeme_source = 'TheOliver';

Windows Phone 7

21.10.2010 13:08:08 | Kay Giza

Windows Phone 7 (WP7): Neues Design, coole Funktionen, sinnvolle Bündelung in Hubs. Windows Phone 7 überzeugt durch ein neues Design, eine einfache Benutzerführung sowie eine Reihe neuer nützlicher Funktionen und Apps, wodurch Anwender produktiver arbeiten, direkter kommunizieren oder einfach nur Spaß haben können. Darüber hinaus führt die Integration von Services wie Zune, Xbox Live, Windows Live, Bing oder Facebook zu einem neuen Benutzererlebnis. Seit Donnerstag 21. Oktober 2010, gibt es die ersten Geräte mit dem mobilen Betriebssystem von Microsoft. In Deutschland werden dies Modelle von... [... mehr in diesem Blogeintrag auf Giza-Blog.de]

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

Deployment von SQL Datenbanken mit TeamBuild

21.10.2010 00:27:32 | Thomas Schissler

Sehr viele Software-Projekte nutzen Datenbanken und damit stellt sich die Frage, wie kann die Datenbank im Build so aufbereiten, dass sie für Tests deployed werden kann. Hierzu gibt es auf MSDN eine sehr gute Artiekelserie die Beschreibt wie mit den Datenbankfunktionen im Visual Studio 2010 Datenbanken verwaltet und im Build für Tests deployed werden kann.

http://msdn.microsoft.com/en-us/library/dd193413.aspx

Speziell die Schritt für Schritt Anleitung zur Anpassung des Build Workflows möchte ich empfehlen.

http://msdn.microsoft.com/en-us/library/ff805001.aspx

prio.conference 2010 – mein Braindump

20.10.2010 21:20:54 | Jan Welker

Vom 19. bis 20. Oktober 2010 fand die prio.conference zum ersten Mal in Nürnberg statt. Der Veranstaltungsort kam mir sehr gelegen, da ich bis zur Meistersingerhalle nur 15 Minuten mit dem Auto fahren musste.

In den zwei Tagen gab es ziemlich viel neues. Einiges davon hatte ich schon über Twitter vom .NET Open Space mitbekommen, welcher einige Tage vorher in Leipzig statt fand.

Da ich während der Sessions auf der prio.conference nichts mitgeschrieben habe, nutze ich einfach mal diesen Blogpost um zu notieren, was ich für wichtig halte. Sicher interessiert es auch den ein oder anderen.

Die Konferenz startete erst einmal ziemlich ungewöhnlich mit einer Märchenerzählerin und einem Vortrag von einem Filmregisseur. Die Märchenerzählerin gab während des ersten Tages einige Grimm-Märchen zum besten und mappte die Lehren aus den Märchen auf die heutige Welt der Softwareentwicklung. Nette Idee, aber für mich war es ein bisschen zu langatmig.

Ivan Engler ist ein Schweizer Regisseur, der vor seiner Karriere beim Film auch mal 5 Jahre Software entwickelt hat. Er zog viele Parallelen zwischen der Filmproduktion und der Softwareentwicklung. Die wesentliche Aussage war: Erst denken, dann programmieren.

Danach gab es erst mal etwas handfestes von Thorsten Hans und Jürgen Gutsch. Thorsten zeigte den Einsatz von JSON in .NET und jQuery. Jürgen beschäftigte sich in der Vergangenheit oft mit WebDAV und berichtete in 60 Minuten sehr anschaulich über seine Erfahrungen mit diesem offenen Standard.

In einer so genannten General Session erklärte Martin Huber die Unterschiede zwischen verschiedenen Mechanismen für die verteilte Kommunikation, schließlich war ja verteilte Architektur das Thema der prio. Sein Schwerpunkt war das Für und Wider von RESTful HTTP.

Golo Roden hielt auf der Prio zwei Vorträge, einer war zum Thema Windows Identity Foundation. Ein Framework was kaum einer kennt und schlecht dokumentiert ist. WIF ist aber sicher nicht uninteressant, wenn man auf der Suche nach einer zentralen Lösung für Authentifizierung und Rechtevergabe ist.

Auf der prio wurde in mindestens zwei Vorträgen deutlich, dass wir uns immer öfter fragen müssen, ob wir nicht alt eingeschliffene Vorgehensweisen hinterfragen sollten. Am deutlichsten wurde dies am Beispiel vom klassischen 3 (bzw. n) Tier Schichtenmodell und von zentralen relationalen Datenbanken.
Am Abend des ersten Tages stellte Udi Dahan die CQRS Architektur (Command Query Responsibility Segregation) vor und erklärte die Vorteile gegenüber einer klassischen Schichtenarchitektur. CQRS sollte zum Beispiel eingesetzt werden, wenn hochperformante Anwendungen gefordert werden bei denen sich extrem viele User gleichzeitig anmelden.

Nach einem guten Essen und zwei, drei Bier mit Jürgen ging es zum Coding Dojo. Dies war mein erstes Dojo. In der letzten Zeit konnte man über Blogs und in Twitter scheinbar endlose Diskussionen über die verschiedenen Dojo-Styles und über die Frage wer es erfunden hat, mitverfolgen. Diese Diskussionen haben aus meiner Sicht ein schlechtes Bild auf die Idee des Dojos und auf deren Veranstalter geworfen. Jetzt konnte ich mir selbst ein Bild davon machen. Stefan Lieser und Ralf Westphal haben das Dojo moderiert und haben sich dabei vielleicht ein wenig zu viel zurückgehalten. Die Aufgabe war ein einfacher Formelparser der kurz vor knapp fertig wurde. Wie im richtigen Leben. Ich fand es besonders cool, dass die Aufgabe nach viel hin und her von zwei “alten Hasen” ganz souverän mit TDD Unterstützung gemeistert wurde. Ich finde die Idee, zusammen zu coden, gut weil man dabei viel von einander lernt. Wie man das ganze nennt und in welchem Rahmen man das macht, sind für mich “nur Implementierungsdetails”.

Der zweite Tag der Konferenz begann mit einem Vortrag von Stefan Lieser zum Thema Bounded Contexts. Der Vortrag kritisierte das von Microsoft empfohlene Modell einer zentralen relationalen Datenbank weil je nach Kontext andere Daten wichtig sind. Er zeigte, wie man in einer großen Anwendung durchaus mehrere Datenbanken einsetzen kann. Je nach Aufgabe kann dabei ein anderes Datenbanksystem (NoSQL,  RDMS …) eingesetzt werden. Für den Abgleich der Datenbanken untereinander empfahl er einen Service Bus.
Zum Thema Service Bus hielt Björn Rochel einen sehr guten Vortrag. Er gab eine Einführung in den Rhino Service Bus. Der Bus basiert auf verschiedenen vorhandenen Technologien wie zum Beispiel MSMQ 4.0 und und hat als Ziel den Einstieg in das Thema Service Bus sehr einfach zu gestalten. Dies konnte Björn gut demonstrieren.

Weiter ging es für mich mit der Session von Bernd Marquardt zum Thema MPI. Ein mächtiges Werkzeug um Rechenoperationen über ein Netzwerk zu verteilen, also zu parallelisieren. Das braucht man immer wieder, wenn man zum Beispiel die Elektronendichte in einem Gasnebel berechnen will Zwinkerndes Smiley

Der Top Speaker der Konferenz war sicher Ayende Rahien. Er hielt eine Session, in der er NoSQL-Datenbanken, Dokument-Datenbanken, Graph-Datenbanken und so genannte Column Family Databases miteinander verglich. Der Vortrag war ganz ok. Anschaulicher wurde es jedoch im nächsten Vortrag von Sergey Shishkin der verschiedene NoSQL- und Clouddatenbanken an praktischen Beispielen, inklusive Quellcode, vorstellte.

Das letzte große Highlight der Konferenz war Ralf Westphal mit seinem Vortrag zu EBC (Event-Based Components). Ich hatte seine Artikel zu EBC in der Vergangenheit nur kurz überflogen und hab das Thema nicht besonders ernst genommen. Der Vortrag hat aber definitiv Lust auf mehr gemacht, vor allem wenn Stefan und Ralf das Tooling noch zu Ende entwickeln, sind EBC’s ganz bestimmt eine feine Sache.

Mein Fazit der Konferenz:

  • Der Einsatz von relationalen Datenbanken sollte genau geprüft werden, können andere Datenbanken die Anforderungen besser erfüllen (siehe CAP-Theorem)?
  • Die Cloud kommt und macht auch Sinn.
  • Nur Code ist die Wahrheit.
  • Den Rhino Service Bus und die Couch DB in Verbindung mit JQuery sollte man sich ansehen.
  • Exceptions heißen ab sofort Bumsti.
  • Schichtenarchitektur in Frage stellen und mit EBC bzw. CQRS  vergleichen.


Wo nehme ich bloß die Zeit her, um mich mit den ganzen Sachen zu beschäftigen?

Event-Nachlese: Microsoft Software Strategy Summit 2010: Alle Videos und Praesentationen zum Download

20.10.2010 15:07:09 | Kay Giza

Microsoft Software Strategy Summit 2010: Microsoft, Steve Ballmer, alle Vorträge als Video-on-Demand + Downloads, Windows Azure, Kinect und Three Screens and a Cloud: Am 6. Oktober 2010 fand in Köln der aus Microsoft Sicht wichtigste Strategie-Event im deutschsprachigen Raum für alle Systemintegratoren und Softwarehersteller statt. Die Teilnehmer erhielten einen Ausblick auf die kommenden Softwaretrends und Entwicklungen von Morgen, wie Windows Azure, Windows Phone 7 oder Microsoft Kinect. Alle Präsentationen stehen jetzt als kostenfreier Download (PDF, XPS) sowie als Video-on-Demand auf MSDN, dem Microsoft Developer Network zur Verfügung. Referenten wie Dr. Said Zahedani, Kai Göttmann, Andreas Schauer, Finn Boysen, Sebastian Weber, Sven Zuschlag, Clemens Lutsch, Frank Fischer, Dr. Frank Prengel, Steffen Weh, Christian Binder und natürlich sicherlich das Highlight des Tages: Steve Ballmer, der Microsoft CEO, referierten über die neuesten Softwaretrends und Entwicklungen... [... mehr]

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

Microsoft Community Open Day 2010

20.10.2010 14:29:00 | Lars Keller

Am kommenden Freitag und Samstag findet der Microsoft Community Open Day 2010 in München statt. Die Agenda ist prall gefühlt mit vielen aktuellen Themen, z.B. Windows Phone 7 :-)

Dieses Jahr findet zum ersten Mal der Community Open Day zusammen mit den MVPs und den CLIP’lern statt. Ich freue mich schon sehr auf viele altbekannte und neue Gesichter! Ein weiteres Highlight ist für mich, dass es Kinect zum Anfassen gibt! Seit der deutschen Microsoft Partner Konferenz (mein Bericht dazu gibt es hier) bin ich mit dem Kinect Virus infiziert! :-)

Review MSBuild Vorträge in Karlsruhe und Konstanz

20.10.2010 10:18:55 | Thorsten Hans

In den vergangenen drei Wochen bin ich mit dem Thema MSBuild sowohl bei der .NET UserGroup Karlsruhe als auch beim .NET Stammtisch Konstanz-Kreuzlingen zu Gast gewesen. Bei den beiden UserGroups war es wirklich schön gewesen und das Vortragen von MSBuild hat wie immer Spaß gemacht.

Ich hoffe dass es allen Teilnehmern gut gefallen hat und sie in Zukunft etwas genauer auf Ihre Projectfiles schauen ;)

Anbei findet ihr die jeweiligen SlideDecks zu den Vorträgen.

 

 

 

Technorati-Markierungen: ,,
DotNetKicks-DE Image

Zugriff auf den TFS Cube aus Excel

20.10.2010 09:47:36 | Thomas Schissler

Der einfachste Weg, um Daten aus dem OLAP Cube im TFS Warehause auszuwerten ist über Excel. Wie dies funktioniert, soll im Folgenden kurz beschrieben werden:

Zunächst müssen dem entsprechenden Benutzer Berechtigungen für den OLAP-Cube eingerichtet werden. Dazu verbindet man sich im Management Studio zu den Analysis Services.

image

Unter dem Cube im Ordner Roles findet sich dann die Rolle TfsWarehouseDataReader

image

Hier kann man nun unter Memberschip die entsprechenden Benutzer eintragen

image

In Excel kann man nun eine Verbindung zum Cube herstellen. Dazu ruft man im Data-Tab die Verbindung zu den Analysis Services auf.

image

Im folgenden Dialog gibt man nun die Verbindungsdaten ein. Soll der Zugriff auf eine bennante Instanz erfolgen, muss diese angegeben werden, z.B. mySQLServer\MyInstance.

image

Dann wählt man entweder den Cube oder eine Perspektive aus

image

Die Verbindung kann man nun speichern. Sie steht dann unter Existing Connections für weitere Anwendungen zur Verfügung.

image

Im nächsten Schritt kann man eine Pivot Table in das bestehende Excel Workbook einfügen.

image

Im rechten Bereich kann man nun Felder in die Bereiche für Filter, Spalten, Zeilen oder Werte ziehen. Die Felder lassen sich dabei nach verschiedenen Kategorien über die oberste Dropdownlist filtern.

image

In einem späteren Post werde ich beschreiben, wie man mit Hilfe der Pivot Tables entsprechende Auswertungen auf dem Cube erstellt.

Daily Demo: Glass Effect in Windows 7

20.10.2010 09:00:00 | Oliver Scheer

Ein schon etwas älteres Feature von Windows ist die Aero-Oberfläche. Ein Hingucker bei Aero sind die Fenster die vollständig durchsichtig sind. Standardmäßig sind die Titelleiste und die Ränder bei allen Anwendungen durchscheinend. Der eigentliche Inhalt jedoch nicht. Um dies in seine eigenen Anwendungen zu aktivieren ist sehr wenig Code notwendig.

using System;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Interop;
using System.Windows.Media;

namespace Windows7Features
{
    public class Helper
    {
        [DllImport("dwmapi.dll", PreserveSig = false)]
        static extern void DwmExtendFrameIntoClientArea(IntPtr hwnd, ref MARGINS margins);

        [DllImport("dwmapi.dll", PreserveSig = false)]
        static extern bool DwmIsCompositionEnabled();

        public static bool ExtendGlassFrame(Window window, Thickness margin)
        {
            if (!DwmIsCompositionEnabled())
                return false;

            IntPtr hwnd = new WindowInteropHelper(window).Handle;
            if (hwnd == IntPtr.Zero)
                throw new InvalidOperationException("The Window must be shown before extending glass.");

            // Set the background to transparent from both the WPF and Win32 perspectives
            window.Background = Brushes.Transparent;
            HwndSource.FromHwnd(hwnd).CompositionTarget.BackgroundColor = Colors.Transparent;

            MARGINS margins = new MARGINS(margin);
            DwmExtendFrameIntoClientArea(hwnd, ref margins);
            return true;
        }
    }

    struct MARGINS
    {
        public MARGINS(Thickness t)
        {
            Left = (int)t.Left;
            Right = (int)t.Right;
            Top = (int)t.Top;
            Bottom = (int)t.Bottom;
        }
        public int Left;
        public int Right;
        public int Top;
        public int Bottom;
    }
}
Klasse Helper

Die Initialisierung des Fensters muss nach dem Laden des Fensters geschehen. Ein gutes Ereignis dafür ist das “Loaded”-Ereignis:

using System.Windows;

namespace ASimpleGlassUi
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            this.Loaded += (s, e) =>
                {
                    Helper.ExtendGlassFrame(this, new Thickness(-1));
                };
        }

    }
}

Das Ergebnis sieht wie folgt aus:

image

Das bisschen Code ist hier zu finden:

Advancing Boo – Metaboolisch gut

20.10.2010 00:40:06 | Rainer Schuster

Nicht nur die japanischen Metabolisten versuchten sich am urbanen Kontext eines großen Systems. Die Massengesellschafft .NET programmiert in C# fromm nach OOP, TDD, DDD, CCD und wie die Paradigmen alle heißen. Da kommt ein kleiner Zwerg Names Boo, will mit uns Großes leisten und Assemblies bauen – als lebendiger Prozess ausschließlich durch flexible und erweiterbare Strukturen. Gemäß dem Vorbild reichen hier die altehrwürdigen Gesetze von Form und Funktion nicht mehr aus. Es müssen neue geschaffen werden! Welche Gesetze des Raumes und des Funktionswandels als Anforderung an die neue .NET Kultur sind damit eigentlich gemeint?

Revolution schreien die Einen, Blasphemie die Anderen. Entscheidet euch selbst. Ich werde versuchen den Syntax-Besteckkasten des Assemblyarchitekten zu erweitern und zu zeigen wie ihr ihn einsetzen könnt.

Angefangen hatte in Boo alles mit ein paar kleinen Interfaces. Im ersten Artikel der Reihe Advancing Boo habe ich versucht euch die Grundlagen über das Compilerhosting, die Parametrisierung sowie die CompilerPipeline näher zu bringen. Die erste ICompilerComponent haben wir damit also beleuchtet. Nun schauen wir uns doch mal das 1 mal 1 der Baumschule genauer an:

IAstMacro 
IAstAttribute
IAstGeneratorMacro

IAstMacro und IAstGeneratorMacro sind sich sehr ähnlich. Sie bekommen ein MacroStatement und müssen dieses in ein neuen Knoten vom Syntaxbaum umwandeln. Wer sich schon einmal den Syntaxbaum von Boo angesehen hat, wird festgestellt haben, dass die Mutter aller Anweisungen ein Knoten, nämlich der Typ Node ist – ziehmlich logisch, wie ich finde, handelt es sich doch bei Compilern in der Abstrakten Darstellung immer um einen Baum. Der Unterschied zwischen den Macros liegt darin, das der Generator – denken wir mal an Generatoren in C# – per yield Schlüsselwort eine Liste von Knoten zurück liefert. Das IAstAttribute wird auf einen Knoten gesetzt (AOP style a la PostSharp).

public interface IAstMacro : ICompilerComponent
{
  Statement Expand(MacroStatement statement);
}

public interface IAstGeneratorMacro : ICompilerComponent
{
  IEnumerable<Node> ExpandGenerator(MacroStatement statement);
}

public interface IAstAttribute : ICompilerComponent
{
  void Apply(Node targetNode);
  Attribute Attribute { set}
}

Was müssen wir tun? Von einem der Interfaces ableiten und Methoden implementieren. Hört sich sehr nach einfach an? Ist es auch, zumindest in der Theorie. In der Praxis muss der Umgang mit dem Baumbesteck erst einmal geübt werden. In unserer urbanen Welt werden wir aber dann doch eine abstrakte Implementierung als Basisklasse nutzen um das Rad nicht immer wieder neu zu erfinden. Wie funktioniert das aber? Der Compiler durchsucht den Text nach Tokens. Trifft er dabei auf einen ihn unbekannten Ausdruck, so wird in der Liste der von den Macro-Interfaces abgeleiteten Klassen nachgesehen ob sich dieser Ausdruck dort finden lässt. Per Konvention setzt sich dabei z.B. ein, neues Schlüsselwort lock aus LockMacro zusammen. Sprich, das Schlüsselwort + “Macro” als CamelCase.

image

Das Macro wird per Expand Methode von der CompilerPipeline aufgerufen um die Transformation des Codes durchzuführen. Der auf den unbekannten Ausdruck folgende Syntaxknoten wird als Argument an die Expand Methode gegeben. Daraus lässt sich ableiten, dass der Inhalt der dem Schlüsslewort folgt immer gültige Boo-Syntax ergeben muss. Das ist nach diesem Konzept verständlich, aber auch schade, da z.B. eine Erweiterung wie XML-Literale in VB.NET so ohne weiteres nicht machbar sind.

public ExpressionCollection Arguments { getset}
[Obsolete("Use Body property instead of Block."), XmlIgnore]
public Block Block { getset}
public Block Body { getset}
public string Name { getset}
public override NodeType NodeType { get}

Arguments ist dann nützlich, wenn dem Schlüsselword eine Argumentliste, ähnlich wie bei Funktionen folgt. Wer diesen Weg ein gutes dutzend mal gemacht hat wird ein immer wiederkehrendes Muster erkennen und sich nicht nur auf Grund der Namenskonvention fragen: “Geht das auch einfacher?”. Vermutlich schon und deshalb gibt es das MacroMacro. Die Benutzung des Macros wird abstrakt so beschrieben:

"Usage: `macro [<parent.>+]<name>[(arg0,...)]`";

soll heißen, macro gefolgt von einem optionalen Parent MacroName gefolgt von dem eigentlichen Macronamen gefolgt von einer Optionalen Parameterliste.

z.B.:

macro parent:
    #hier passiert was 
macro parent.child:
    #hier passiert noch mehr

#wohingegen früher geschrieben werden musste:
macro parent:
    macro child:
        #...

bzw. mit Parametern:

macro test (first as string, second as int, third as double*):
    # double* heißt soviel wie IEnumerable[of double], in C# IEnumerable<double>
    # gefolgt von der transformation

 

Für die Transformationen in den Macros müssen wird dann umständlich die Klassen aus dem Syntaxbaum nutzen um das zu tun, was uns sonst der Compiler abnimmt, erstellen einer abstrakten Baumstruktur. Aber zum Glück gibt es da doch Abhilfe die ich schon in meinem Einleitenden Artikel erwähnt hatte: Der Oxford operator [| |] aka QuasiQuotation und der so genannte Splicing Operator $. Mit QuasiQuotation nimmt uns der Compiler wieder genau das ab was wir gerade mühevoll in Handarbeit machen sollen: Das erzeugen eines AST. Der Operator ist zur Compilezeit aktiv! Bitte nicht vergessen, weil das für das Verständnis im Code wichtig ist. Das Macro bekommt z.B. eine Liste von Namen und soll somit Klassen erzeugen. Das ganze gleicht dann Template Systemen wie T4, nur eben auf Codeebene, daher auch der Name Code Templates. Hier nun ein Beispiel:

Um mit dem Typsystem etwas besser vertraut zu werden habe ich mir eine Hilfsfunktion gebaut:

def show( node as Node):
    print "CodeString:\n ${node.ToCodeString()}\n"
    print "NodeType:\t ${node.NodeType}" 
    print "Expression:\t ${node}\n"

Danach können wir nun uns die Macros etwas genauer betrachten:

macro generate_klasses(names as string*):
    count = 1
    for name in names:
        postfix as string
        match count:
            case 1:
                postfix = "st"
            case 2:
                postfix = "nd"
            case 3:
                postfix = "rd"
        yield [|
            class $name(object):
                def constructor(a as int):
                    print "from ${ToString()}, created ${$(count++ + postfix)} with ${a}"
                def $(name + "Me")():
                    pass
        |]

generate_klasses "click""clack""clock"

show [| generate_klasses "click""clack""clock" |]

print "creating generated class instances:"
clock_inst = clock(10)
clack_inst = clack(5)
click_inst = click(0)
print Environment.NewLine

click_inst.clickMe()
clack_inst.clackMe()
clock_inst.clockMe()

Was macht das Macro hier? Für eine Liste von String erzeuge pro Eintrag eine Klasse mit dem Namen des Eintrages das von object ableitet. Zusätzlich wird eine Funktion erzeugt die den Namen + Me enthält. Splicing und Quasiquotation verhalten sich erwartungsgemäß auch nicht anders als in anderen Programmiersprachen (siehe z.B. F#).

 

Das ganze kann Schlussendlich auch noch mit PatternMatching kombiniert werden, was uns noch mehr Gestalltungsmöglichkeiten verschafft. Mehr davon im nächsten Artikel.

DotNetKicks-DE Image

Speaker auf CloudConf 2010 in Stuttgart

20.10.2010 00:22:26 | Manfred Steyer

Im November habe ich die Ehre, auf der CloudConf in Stuttgard zu sprechen. Im Talk NoSQL und BASE in der Cloud: Die Table-, Blob- und Queue Services von Windows Azure werde ich aufzeigen, warum wir uns vor dem Hintergrund hochgradig skalierbarer Cloud-Lösungen von liebgewonnenen Konzepten, wie ACID-Transaktionen und relationalen Datenbanken, trennen müssen sowie welche Alternativen dazu, u. a. von Unternehmen wie Amazon oder Google, entwickelt wurden und wie damit umzugehen ist. Diese Ausführungen werde ich mit Beispielen aus Windows Azure verdeutlichen, wobei sie jedoch allgemein gültig sind.

Im Talk Service Bus in der Cloud: Unternehmensübergreifende Geschäftsprozesse und Cloud Computing geht es um Windows Azure AppFabric und die damit zur Verfügung gestellten Möglichkeiten für unternehmensübergreifende Geschäftsapplikationen.

Advancing Boo – Wer rastet der rostet, drum wird der Compiler gehostet

19.10.2010 21:39:00 | Rainer Schuster

Genau wie seine großen Brüder und Schwestern bietet auch Boo die Möglichkeit den Compiler entsprechend den im Projekt vorgenommenen Einstellungen wie Ausgabeformat (Konsole, Bibliothek, Windows-Anwendung) Optimierungen und diversen anderen Bereichen anzupassen. Was uns C# allerdings verwährt ist sich selbst als Service bereitzustellen. Was vermutlich in C# 5.0 Einzug in den Mainstream hält, ist bereits jetzt Realität mit Mono oder schon seit Anbeginn in Boo. Boo bietet neben statischem Kompilat auch die Möglichkeit einer Skriptsprache wie IronPython und IronRuby, die es über die DLR zum Hosting geschafft haben. Alles was wir brauchen ist eine Texteingabe und eine Konfiguration.

Um den Transformationsprozess vom Text zum IL Code anzustoßen, benötigen wir … den BooCompiler. Damit können wir Boo in jeder anderen .NET Sprache hosten und nach unseren unbegrenzten Vorstellungen anpassen. Alles kann dem Compiler zum transformieren vorgelegt werden was vom Interface ICompilerInput bedient wird. Diesen Input finden wir im Namespace Boo.Lang.Compiler.IO:

public class FileInput : ICompilerInput
public class ReaderInput : ICompilerInput
public class StringInput : ReaderInput

Alles was wir tun müssen, ist den Compiler richtig zu parametrisieren. D.h. Eigenschaften die sonst in den Projekteinstellungen vorgenommen werden, entsprechend in unserem Code setzen, wie z.B. das Ausgabeformat, Referenzen auf andere Assemblies usw. usf. Hier ein kurzes Beispiel, dass uns den ganzen Prozess veranschaulicht.

BooCompiler compiler = new BooCompiler();
compiler.Parameters.OutputType = CompilerOutputType.ConsoleApplication;
compiler.Parameters.Ducky = false;
compiler.Parameters.GenerateInMemory = false;
compiler.Parameters.Pipeline = new CompileToMemory();
compiler.Parameters.OutputAssembly = "hello_boo_hosting.exe";
compiler.Parameters.Input.Add(new StringInput("hello.boo""a = 'Boo Compiler as a Service World!'\n print a"));

CompilerContext context = compiler.Run();

Damit haben wir es geschafft, ein einfaches Hallo Welt auf die Beine zu stellen.

Schauen wir uns das vorherige Snippet etwas genauer an, was für Neulinge unter umständen nicht gleich klar wird. Ducky bezieht sich auf das Verhalten des Compilers und bestimmt, ob Boo alle Objekte als IQuakFu implizit setzt und damit als Interpreter läuft. Hier sind wir im “dynamic” Modus und können alle Schweinerein nutzen, die uns dieses Konzept zur Verfügung stellt. Damit sparen wir uns die Typangabe as IQuakFu. In C# 4.0 wäre das Äquivalent, gäbe es so etwas:

myVar = "Hallo Welt!"
//anstatt
dynamic myVar = "Hallo Welt!"

Die Parameter kann man sich interaktiv über Code Completion, oder auch gut über den Reflector zu Gemüte ziehen. Deshalb lasse ich sie jetzt ersteinmal so stehen. Ich persöhnlich nutze für solche API Entdeckungsreisen gerne das LINQPad.

Kommen wir zur Compilerpipeline; ein 

IEnumerable<ICompilerStep>
.

Boo liefert schon von Haus aus vordefinierte Pipelines mit, die verschiedene Zwecke bedienen. Zu finden sind diese Pipelines sinngemäß und logischer Weise unter dem Namespace Boo.Lang.Compiler.Pipelines die wir durch Hinzufügen, Einfügen, Entfernen und Ersetzen nach unserem Gusto bearbeiten.

public CompilerPipeline Add(ICompilerStep step);
public CompilerPipeline Insert(int index, ICompilerStep step);
public CompilerPipeline InsertAfter(Type stepExactType, ICompilerStep step);
public CompilerPipeline InsertBefore(Type stepExactType, ICompilerStep step);
public CompilerPipeline Remove(Type stepExactType);
public CompilerPipeline RemoveAt(int index);
public CompilerPipeline Replace(Type stepExactType, ICompilerStep step);

Die Abarbeitung der Pipeline wird durch zweite Events signalisiert. Diese können wir nutzen um in einer IDE (sollten wir zufällig eine selbst bauen wollen) den Fortschritt anzuzeigen.

public event EventHandler<CompilerPipelineEventArgs> After;
public event CompilerStepEventHandler AfterStep;
public event EventHandler<CompilerPipelineEventArgs> Before;
public event CompilerStepEventHandler BeforeStep;

image

Wer mit der Pipeline etwas herumspielen will um zu sehen was passiert kann folgendes Snippet ausprobieren:

var events = new List<string>();
compiler.Parameters.Pipeline.BeforeStep += (s,e) => events.Add( "Before Step " + e.Step.ToString());
compiler.Parameters.Pipeline.AfterStep += (s,e) => events.Add( "After Step " + e.Step.ToString());

Dabei fällt mir gerade ein, dass man hier auch gut mit Event Streams ala #Rx herumspielen könnte.

Damit sollten wir erst einmal genug Informationen um die Instrumentierung und die CompilerComponent gelernt haben um Boo wo auch immer hosten zu können.

class CompilerComponent : ICompilerComponent, ICompilerStep

Im nächsten Beitrag werden ich dann die anderen von ICompilerComponent abgeleiteten Interfaces beleuchten.

DotNetKicks-DE Image

Die Windows Entwicklerlinks der Woche Kw 42/2010

19.10.2010 16:55:14 | Oliver Scheer

Entwickler Links

Die Microsoft Ribbon als .NET Komponente für eigene Anwendungen

Das Ribbon-Steuerelemt, das man mit Office 2007 eingeführt wurde, ist nun auch als Steuerelement in .NET und damit für jeden verfügbar. Man muss einfach nur den Link unten folgen und den Ribbon-Installer ausführen.

Das Ribbon-Steuerelement besteht aus einer Reihe von weiteren Elementen, wie z.B. Application Menu, Quick Access Toolbar, Tabs, Groups und und und … Alles was man von der Ribbon aus Paint, WordPad oder Office her kennt.

clip_image001

Link: http://msdn.microsoft.com/de-de/library/ff799534.aspx

Project Hilo: C++

“Hilo” ist eine Serie von Artikeln und Codebeispielen, die demonstriert wie man das Beste aus Windows 7, Visual Studio 2010 und C++ herausholt um schnelle und ansprechenden Client-Anwendungen zu erstellen. Hilo bietet sowohl Sourcecode wie auch Anleitungen für Design und Entwicklung.

clip_image002

Link: http://code.msdn.microsoft.com/Hilo

Taskbar Timer

Dieses Tool hat das Potential mein Lieblingssprecher-Tool zu werden. Diese Anwendung verwendet die neue Taskleiste von Windows 7 um die noch verbleibende Zeit zu visualisieren.

Das schöne dabei, er kommt zusammen mit Sourcecode und kostet nix.

clip_image003

clip_image004

clip_image005

Link: http://www.codeproject.com/KB/winsdk/TaskbarTimer.aspx

Fun Link der Woche

Wie Steve Ballmer früher Windows verkaufte …

Link: http://www.youtube.com/watch?v=tGvHNNOLnCk

Allgemeine Microsoft Links

Kostenloses Channel 9 Windows 7 Trainings Kit

Link: http://channel9.msdn.com/Learn/Courses/Windows7

MSDN Windows 7 Developer Center

Link: http://msdn.microsoft.com/de-de/windows/default.aspx

Microsoft Windows 7 Forum

Link: http://social.msdn.microsoft.com/Forums/de-DE/windows7de/threads

Microsoft Windows Vista Forum

Link: http://social.msdn.microsoft.com/Forums/de-DE/windows_vistade/threads

Microsoft Visual Studio 2010 Express Edition - Kostenlose Entwickler Tools

Link: http://www.microsoft.com/germany/express/

Boo – Nicht erschrecken, Potential entdecken!

18.10.2010 21:56:20 | Rainer Schuster

Was macht Boo so liebenswert? Neben seiner “Handgelenk schonenden” Attitüde ist es vor allem die Möglichkeit den Compiler zu instrumentieren und zu beeinflussen. Hinzu kommt das wesentliche Merkmal von dynamischen Sprachen - das Ducktyping (das unter der Haube Reflection benutzt). Das Interface IQuackFu stellt das Pendant zu dem C# 4.0 Schlüsselwort dynamic dar, und zwar seit langem! Was Rodrigo B. de Oliveira so im Laufe der Jahre (mit ein paar wenigen Commitern) auf die Beine gestellt hat, macht schon richtig Spaß. Am bekanntesten sind vermutlich die Projekte von Oren Eini aka Ayende sein (Rhino.DSL, die Brail ViewEngine und Binsor zur Konfiguration des DI-Containers Castle.Windsor)

Wer also kurz die Dokumentation von Boo (Boo Primer, Getting Started, Tutorials, Language Guide, Language Features)  überflogen hat, wird sich fragen:

Was bietet Boo, was C# nicht kann (und vermutlich nicht können wird)?

  1. Code Templates – Wer kennt die Operatoren aus Template Haskell. Das Erweiterungsprojekt boo-extensions, das auch von Rogrigo de Oliviera gepflegt wird, bietet das DataMacro ähnlich dem data (namespace Boo.Adt) Schlüsselwort aus Template Haskel (siehe 1.) oder den Unions aus F#
  2. Macros – Boo kann mit Interfaces, dem MacroMacro oder MetaMethoden syntaktischen Zucker zur Compiletime und Runtime generieren, kombiniert man es mit Ducktyping und den Template Operatoren.
  3. Compilerpipeline – Von der Textdatei zum fertig IL-Code gibt es einiges zu tun. Boo macht das elegant über die  CompilerPipeline. So kann der Buildprozess auf Compilerebene parametrisiert, durch weg- oder hinzunehmen  von Steps verändert und dadurch erweitert oder eingeschränkt werden.
  4. Grammar and Rules – boo-extensions besitzt auch zwei Parser, die beide auf einem ähnlichen Prinzip beruhen: Parser Expression Grammars. Der erste Parser ist Boo.Pegs, der zweite Boo.OMeta. Beide als Macros definiert. Das extensions Projekt ist stets aktuell zum master von Boo und wird binnen kürzester Zeit aktualisiert (meistens ein bis zwei Wochen danach).

Somit habe ich hoffentlich klar gemacht, worin die Stärken von Boo liegen. Die Boo-Extensions besitzen mit einer in Boo.OMeta geschriebenen Grammatik nicht nur die Möglichkeit Boo in sich selbst zu hosten, sondern durch den deklarativen Ansatz einer Grammatik den Umfang des Parsers durch Komposition und Mehrfachvererbung zu erweitern oder zu verändern. Somit passen wir Boo unseren Bedürfnissen nicht nur nach Oben, sondern auch nach Unten an. Boo dürfte bald einen Status erreicht haben, der Möglichkeiten von Perl6 nahe kommt. Erweiterungsmöglichkeiten und Skalierung als Sprachfeatures. Wie das geht? Im Falle von Macros, einfach die Assembly, in der sie definiert sind referenzieren und import (using in C#) und schon kann es los gehen.

Fangen wir von vorne an. Der Compilerkern ist die Schnittstelle ICompilerComponent. Davon leiten sich ab:

IAstMacro 
IAstAttribute
IAstGeneratorMacro 
ICompilerStep

Implementieren wir IAstMacro, IAstAttribute oder leiten von einer ihrer abstrakten Basisklassen ab, können wir eigene Syntax in Boo verwenden. Die Basis für eine eigene DSL, oder ganz kleinen, einfachen Spracherweiterungen. Dabei hilft uns der Splicing Operator $ der nicht nur in Strings Instanzen in den Kontext holt sonder auch beim Erstellen von Syntaxbäumen über den zweiten Template Operator Quasi Quotation, auch bekannt als “oxford brackets” [| … |]. Wer schon vorab etwas darüber lesen will, kann hier im Blog von Rodrigo B. Oliveira vorbei schauen.

Wer sich erst einmal grundlegend mit dem Typsystem von Boo, also seinem Abstrakten Syntax Baum und den verschiedenen, von mir oben erwähnten Techniken, auseinander gesetzt hat, dem wird Tür und Tor offen stehen um die Programmiersprache Boo nach seinen Bedürfnissen anzupassen. Wem das zu viel ist kann damit einfach wie in Python programmieren, alle Featues von .NET nutzen, sich leicht Parser bauen oder die Sprache lediglich um einfach Konstrukte erweitern, die einem den Alltag erleichtern. Wer will benutzt die Type-Inference Engine von Boo, oder auch das Duck-Typing. Wem das nicht gefällt kann auch immer noch selbst Typisieren. Das sollte ein kleiner Einblick in die Möglichkeiten von Boo sein, ich werde in den kommenden Posts Schritt für Schritt mit euch in die einzelnen Bereiche abtauchen und versuchen die Mannigfaltigkeit und ihre Wirkungsweise zu entdecken

DotNetKicks-DE Image

Unittest: Testing non-public methods

18.10.2010 20:35:00 | Patric Schouler

Sometimes you want to write unit tests against methods that aren't publicly exposed. Rather than make these private methods public, which is a bad idea, you can specify friendly assemblies to which your methods will be exposed.

All you have to do is edit the AssemblyInfo.cs of the assembly you want to expose to your tests and add the following line ("SampleTestProject" is the name of the test assembly):

[assembly: InternalsVisibleTo("SampleTestProject")]
After this change in the assembly.cs and a rebuild, your “internal” signed methods will be exposed.

Echte Radioknöpfe für Silverlight und Windows Phone

18.10.2010 19:02:37 | Oliver Scheer

Auf meiner täglischen Surf-Safari bin ich heute auf dieses Steuerelement/Control gestossen. Endlich mal ein Control, das wirklich wie ein Radio-Knopf aussieht.

image

Mehr Infos

28.10.10 Public Viewing der PDC 2010 bei der DNUG Braunschweig

18.10.2010 10:51:00 | Lars Keller

Die DNUG Braunschweig trifft sich dieses Mal am 28.10.2010 um 17:30 bei der AX Solutions GmbH in Braunschweig.

Die Professional Developers Conference (PDC) ist die Konferenz, auf der Microsoft gewöhnlich die neuesten Pläne und Veröffentlichungen für Entwickler bekannt gibt. Sie findet dieses Jahr am 28. und 29. Oktober in Redmond statt und ist schon seit geraumer Zeit ausverkauft. Am Donnerstag, 28. 10. 2010 ab 18:00 Uhr unserer Zeit wird die Keynote (u.a. mit Steve Ballmer) live übers Internet übertragen.
Des Weiteren gibt es folgende Dinge zu gewinnen, bzw. als Give-Away:

  • 1x Visual Studio 2010 Professional NFR (Not for Resale, kein Weiterverkauf)
  • 1x Windows 7 Ultimate NFR
  • 1x Competition Pro C64 USB-Joystick inkl. umfangreicher Spielesammlung für Nostalgiker
  • für jeden Teilnehmer ein USB Lanyard mit Content passend zur PDC

Es sind alle herzlich eingeladen beim Event mitzumachen!
Vielen Dank an dieser Stelle an die Firma AX Solutions, die das Sponsoring für diese Veranstaltung übernimmt.

ACHTUNG: Um Anmeldung bei Lars (keller [@] dotnet-braunschweig [dot] de) oder Karim El Jed (el_jed [@] dotnet-braunschweig [dot] de) wird gebeten, da der Besprechungsraum nur begrenzt Platz bietet.

.NET Open Space - ein Rückblick

17.10.2010 17:47:00 | Martin Hey

#netos - wer an diesem Wochenende die Tweets in der Leipziger Twitterszene verfolgt hat, der wird häufiger über diesen Hashtag gestolpert sein. Grund dafür war ein Event, der mittlerweile seinen festen Platz in der deutschen .NET-Community gefunden hat: der .NET Open Space. Jedes Jahr pilgern knapp 150 .NET-Entwickler und -Interessierte nach Leipzig, um sich hier mit Gleichgesinnten auszutauschen. Auch ich war dabei und möchte meine Eindrücke zum Besten geben. Ich war schon im letzten Jahr mit dabei und natürlich ist man dann versucht, auch immer einen Vergleich zu ziehen.

Im letzen Jahr fand der .NET Open Space in der Villa Ida statt. Und da der frühe Vogel ja bekanntlich den Wurm fängt, buchte ich mir auch ein Hotelzimmer in der Nähe. Etwas überrascht wurde ich dann, als bekannt wurde, dass es in diesem Jahr einen anderen Veranstaltungsort geben würde. Da wir ja alle agil sind, ist auch das natürlich kein Problem - schnell umgebucht und alles in Butter - einzig der Hotelbetreiber wird sich etwas gewundert haben, denn wie ich erfahren habe, war ich mit meiner Stornierung nicht allein.

Beginn der Veranstaltung war dann Samstag um 10:00 Uhr. Einige der Teilnehmer reisten schon am Freitag an, um an der Kennenlern-Party teilzunehmen oder erholt am Samstag starten zu können. Bei der Party war ich leider nicht dabei, da ich einer derjenigen war, die erst am Samstag dazustießen.

Nach und nach trafen alle ein und schnell sah man auch bekannte Gesichter und der Smalltak begann, den nur ein Pfiff unterbrechen konnte: Es war an der Zeit, die Agenda zu füllen. Jeder, der wollte konnte ein Thema vorschlagen und viele haben auch diese Gelegenheit genutzt, das zu tun. Gefühlt war die Themenfindung in diesem Jahr etwas träger und unorganisierter als im letzten Jahr, aber es ist halt schließlich eine Unkonferenz und warum nicht auch das kreative Chaos nutzen.

Was für Themen kamen da zusammen? Natürlich durften aktuelle Buzzwords wie Agilität, *DD und Windows Phone 7 nicht fehlen und so kam es zu einer bunten Themen-Mischung über Methodik, Architektur und Softskills. Auch wenn letzteres auf den ersten Blick für einige nicht zu einer Entwicklerkonferenz gehören mag, so ist es eben auch wichtig Fragen zu klären wie "Wie bringe ich eigentlich meinen Kollegen bei, die Werte die ich habe auch zu vertreten." - und das ist eben nicht nur Methodik sondern auch der menschliche Faktor. Zusammengefasst waren die eher technisch geprägten Themen aber in der Überzahl: Was sind eigentlich Monaden? Wozu sind EBCs gut? Wann lohnt es sich, eine funktionale Programmiersprache wie F# zu verwenden? Wie mach ich sinnvollerweise Logging? Welche AddIns sind empfehlenswert? ... und so weiter und so fort. Auch ein Coding Dojo war wieder dabei, das aber nach meinem Empfinden in diesem Jahr besser lief, da gleich mehrere Gruppen gebildet wurden und so in einem kleineren Kreis intensiver gearbeitet werden konnte. Aber genug vom Fachlichen: Wer es selbst erleben möchte, der möge selbst an einem .NET Open Space teilnehmen und seine eigenen Erfahrungen sammeln - es lohnt sich.

Abseits der Diskussionen gab es aber auch noch das Abendessen am Samstag in der Schaubühne Lindenfels und dem Joseph Pub - mit klarer Präferenz für zweiteres meinerseits und ich glaube der ein oder andere sieht das ähnlich. Und auch die Mittagessen, die dieses Mal im Vergleich zum Vorjahr eher mit bekannte Gerichte aufwarteten, boten genug Raum dafür, sich auszutauschen und neue Leute kennenzulernen oder über andere Ansichten und Erfahrungen zu diskutieren.

Alles in allem ist mein Resümee ein postives. Ich habe es in keinem Fall bereut, dieses Wochenende in Leipzig verbracht zu haben. Egal ob Freak oder Quatschaffe - es hat Spaß gemacht mit euch zu diskutieren und dabei gewesen zu sein und man sieht sich beim nächsten Mal.

HowTo: HTML Input Validation mit ASP.NET MVC & ASP.NET 4 (oder warum geht ValidateInput(false) nicht?)

17.10.2010 17:39:04 | Robert Mühsig

Das ASP.NET Framework validiert einkommende Requests ob diese <html> Elemente enthalten oder nicht. Dies soll Script-Injection vorbeugen. Ab und an braucht will man aber dieses verhalten nicht. Bis zu .NET 3.5 Zeiten brauchte man über ASP.NET MVC Actions einfach nur das Attribut “ValidateInput(false)” setzen. Unter ASP.NET 4 muss man noch eine Kleinigkeit beachten Szenario: Simples [...]SHARETHIS.addEntry({ title: "HowTo: HTML Input Validation mit ASP.NET MVC & ASP.NET 4 (oder warum geht ValidateInput(false) nicht?)", url: "http://code-inside.de/blog/2010/10/17/howto-html-input-validation-mit-asp-net-mvc-asp-net-4-oder-warum-geht-validateinputfalse-nicht/" });

HTC Home for Windows [Kostenloser Download]

17.10.2010 10:20:09 | Kay Giza

HTC Home for Windows (oder gerne auch HTC Home für Windows), so heißt eine Open Source Freeware, die den HTC Homescreen bzw. Startbildschirm, direkt auf dem Windows Desktop (Windows Vista und Windows 7) zur Verfügung stellt. Wer genauso wie ich, Fan von HTC-Handys ist, wer die animierte Uhr mit Wetter auf seinem Handy cool findet, dem kann ich nur Empfehlen sich diesen kostenlosen Download einmal genauer anzuschauen. HTC Home für Windows wurde in C# und WPF in Visual Studio 2010 geschrieben und steht als Open Source Anwendung kostenlos auf Codeplex, Microsoft Open Source Community Plattform, zur Verfügung... [... alle Details, Videos, Screenshots und Download-Links finden Sie in diesem Blogposting auf Giza-Blog.de]

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

Egg-Bot ist da

16.10.2010 20:04:00 | Daniel Springwald

Egg-Bot ist ein OpenSource-Projekt, für einen Grafik-Plotter, welcher auf Kugeln oder eiförmigen Körpern zeichnen kann.

Gestern war dann endlich der Egg-Bot Bausatz in der Post und heute habe ich schon Zeit gefunden, ihn zusammen zu bauen:

Das sind alle Teile, aus denen Egg-Bot besteht:

Halbzeit! Egg-Bots zwei Schrittmotoren und das Gehäuse sind fest montiert.

Der erste Versuch mit einem hart gekochten Ei und einem simlpen Muster:

Fertig: Mein erstes, mit Egg-Bot bemalte Ei:

Jetzt kann das nächste Ostern kommen! Bis dahin sollte ich hoffentlich ausreichend mehrfarbige Motive für Egg-Bot zusammen gestellt haben.

.NET Framework validieren und reparieren

16.10.2010 17:48:39 | Jan Welker

Ich stand vor kurzen vor einem Problem, welches bei der Installation eines Servicepacks für den SQL Server 2008 aufgetreten ist. Mitten im Installationsvorgang des Servicepacks bekam ich folgende Fehlermeldung:

The program can't start because MSVCR100_CLR0400.dll is missing from your computer. Try reinstalling the program to fix this problem.


Die fehlende DLL MSVCR100_CLR0400.dll ist Bestandteil des Visual Studio 2010. Das Visual Studio 2010 arbeitete aber trotzdem einwandfrei. Der Teil des Dateinamens “CLR 040” lässt auf die Common Language Runtime 4.0 schließen. Der Verdacht lag also nahe, dass das .NET Framework 4.0 nicht sauber installiert bzw. beschädigt war. Um die ordnungsgemäße Installation verschiedener Frameworkversionen zu prüfen, kann das kleine Programm .NET Framework Setup Verification Tool verwendet werden.

DotnetFrameworkVerificationTool

Beim Start des Programms werden alle installierten .NET Frameworkversionen ausgelesen, danach ist es möglich, jede einzelne Frameworkversion zu validieren. In meinem Fall waren alle Versionen des Frameworks in sauber bis auf die Version 4.0. Das kleine Tool erzeugt bei der Validierung eine Logdatei, in der eingesehen werden kann, was genau defekt ist. Um die Installation des .NET Frameworks zu reparieren, kann das Setup des Microsoft .NET Framework 4 (Standalone Installer) verwendet werden.

DotnetFrameworkRepair

Nach dem die Reparatur beendet war, meldete auch das .NET Framework Setup Verification Tool keine Fehler mehr und das Setup des SQL Server Servicepacks lief problemlos durch.

Windows Phone 7: Track your memory usage

16.10.2010 16:21:00 | Patric Schouler

One of the restrictions of a Windows Phone 7 app is the maximum memory consumption of 90 MB (peak value). To check this you need to write your own memory usage monitor. You can use the follwing memory usage control, which can be started in the constructor of the app (optional with or without garbage collection).

   1: // <summary>
   2:     /// Helper class for showing current memory usage
   3:     /// </summary>
   4:     public static class MemoryDiagnosticsControl
   5:     {
   6:         static Popup _popup;
   7:         static TextBlock _currentMemoryBlock;
   8:         static DispatcherTimer _timer;
   9:         static bool _forceGc;
  10:  
  11:         /// <summary>
  12:         /// Show the memory counter
  13:         /// </summary>
  14:         /// <param name="forceGc">Whether or not to do automatic garbage collection each tick</param>
  15:         public static void Start(bool forceGc)
  16:         {
  17:             _forceGc = forceGc;
  18:  
  19:             CreatePopup();
  20:             CreateTimer();
  21:             ShowPopup();
  22:             StartTimer();
  23:         }
  24:  
  25:         /// <summary>
  26:         /// Stop the memory counter
  27:         /// </summary>
  28:         public static void Stop()
  29:         {
  30:             HidePopup();
  31:             StopTimer();
  32:         }
  33:         /// <summary>
  34:         /// Show the popup
  35:         /// </summary>
  36:         static void ShowPopup()
  37:         {
  38:             _popup.IsOpen = true;
  39:         }
  40:  
  41:         static void StartTimer()
  42:         {
  43:             _timer.Start();
  44:         }
  45:  
  46:         static void CreateTimer()
  47:         {
  48:             if (_timer != null)
  49:                 return;
  50:  
  51:             _timer = new DispatcherTimer {Interval = TimeSpan.FromMilliseconds(300)};
  52:             _timer.Tick += TimerTick;
  53:         }
  54:  
  55:         static void TimerTick(object sender, EventArgs e)
  56:         {
  57:             // call Garbage collector before getting memory usage
  58:             if (_forceGc)
  59:                 GC.Collect();
  60:  
  61:             var mem = (long)DeviceExtendedProperties.GetValue("ApplicationCurrentMemoryUsage");
  62:             _currentMemoryBlock.Text = string.Format("{0:N}", mem / 1024);
  63:         }
  64:  
  65:         static void CreatePopup()
  66:         {
  67:             if (_popup != null)
  68:                 return;
  69:  
  70:             _popup = new Popup();
  71:             var fontSize = (double)Application.Current.Resources["PhoneFontSizeSmall"] - 2;
  72:             var foreground = (Brush)Application.Current.Resources["PhoneForegroundBrush"];
  73:             var sp = new StackPanel { Orientation = Orientation.Horizontal, Background = (Brush)Application.Current.Resources["PhoneSemitransparentBrush"] };
  74:             _currentMemoryBlock = new TextBlock { Text = "---", FontSize = fontSize, Foreground = foreground };
  75:             sp.Children.Add(new TextBlock { Text = "Mem(kB): ", FontSize = fontSize, Foreground = foreground });
  76:             sp.Children.Add(_currentMemoryBlock);
  77:             sp.RenderTransform = new CompositeTransform { Rotation = 90, TranslateX = 480, TranslateY = 420, CenterX = 0, CenterY = 0 };
  78:             _popup.Child = sp;
  79:         }
  80:  
  81:         static void StopTimer()
  82:         {
  83:             _timer.Stop();
  84:         }
  85:  
  86:         static void HidePopup()
  87:         {
  88:             _popup.IsOpen = false;
  89:         }
  90:     }

Windows Phone 7: Disable Screensaver (lock) during action

16.10.2010 16:01:00 | Patric Schouler

In our Windows Phone 7 project we need to disable the screensave (lock) of Windows Phone 7 for example during playing a media file in Mediaelement or during a picture slideshow. To reach this goal you can use the PhoneApplicationService.Current.UserIdleDetectionMode and set it to IdleDetectionMode.Enabled or IdleDetectionMode.Disabled.

 

Sample of a property

   1: public bool SlideshowIsActive
   2:        {
   3:            get { return _slideshowIsActive; }
   4:            set
   5:            {
   6:                if (_slideshowIsActive == value) return;
   7:  
   8:                _slideshowIsActive = value;
   9:  
  10:                PhoneApplicationService.Current.UserIdleDetectionMode = _slideshowIsActive ? IdleDetectionMode.Disabled : IdleDetectionMode.Enabled;
  11:  
  12:                NotifyPropertyChanged(() => SlideshowIsActive);
  13:            }
  14:        }

NuPack – eigene Packages erstellen

15.10.2010 00:39:00 | Jürgen Gutsch

Eigene Packages für NuPack zu erstellen ist eigentlich recht simpel. Man benötigt lediglich Mercurial um die Sourcen von http://nupackpackages.codeplex.com/ herunter zu laden. Möchte man seine Packages nicht der Allgemeinheit zur Verfügung stellen, sondern Packages für den internen Gebrauch erstellen ist das ebenfalls möglich. Die Packages müssen nicht über das öffentliche RSS Feed publiziert werden, sondern können von einem Lokalen oder einem Netzwerkpfad geladen werden.

In den Options (“Tools => Options…”) gibt es einen Konfigurationspunkt für die Bezugsquellen der Packages. Neben dem bereits vorhandenen Feed können hier weitere Feeds oder Verzeichnisse eingetragen werden welche die Packages enthalten.

Am Beispiel der LightCore Packages, die ich den NuPack Packages zur Verfügung gestellt habe, möchte ich hier kurz demonstrieren wie man eigene Packages erstellt und auf Codeplex zur Verfügung stellt.

Eine Dokumentation gibt es selber schon auf Codeplex unter http://nupackpackages.codeplex.com/. Desweiteren sollte man sich bereits vorhandene Packages anschauen, um zu sehen wie es dort umgesetzt worden ist.

Mercurial

Die NuPack Packages werden mit dem Source Code Managemant System Mercurial über Codeplex bereitgestellt. Dafür sollte am besten der Client TortoiseHG installiert werden der hier zur Verfügung gestellt wird: http://mercurial.selenic.com/downloads/

Grundkenntnisse zu Mercurial setze ich hier voraus. Wer Mercurial nicht kennt sollte sich also entweder die Doku anschauen oder schon mal zuvor mit TortoiseHG herumgespielt haben.

Um die Struktur der Packages kennen zu lernen ist es sinnvoll sich zuvor die Sourcen zu laden. Hierfür sollte das Repository von Codeplex “geklont” werden. Die URL lautet wie folgt: https://hg01.codeplex.com/nupackpackages

Die Strukturn

Es sollte folgende Ordnerstruktur aufgebaut werden:
(hier verwende ich zu Demozwecken die Struktur von LightCore )

LightCore
|-- 1.4.1
       |—Content
       |—Lib
       |-- Tools

Der erste Ordner hat den Namen des Packages, der zweite ist die Version und in der dritten Ebene enthält folgende Ordner:

  • Content: Enthält Files die in das Projektverzeichnis kopiert werden, wie Beispiele, Configs, etc.
  • Lib: enthält die eigentlichen Assemblies die als Referenz eingefügt werden sollen
  • Tools: enthält Tools für die Libraries (das können Test-Runner, LogParser, etc. sein) dafür wird ein Ordner “Tools” im Projektverzeichnis angelegt

Um Assemblies für verschiedene Frameworks und Plattformen bereitzustellen, kann der Ordner “Lib” weiter unterteilt werden. Es müssen Unterordner erstellt werden mit denen die Plattformen und Frameworks unterschieden werden können. Eine Detaillierte Beschreibung der Ordnernamen ist hier zu finden: Creating a Package

Lizenzdateien und ähnliches können in den Ordner mit der Versionsnummer abgelegt werden. Dort muss zudem noch eine XML Datei mit dem Namen “LightCore.nuspec” liegen (wobei hier wieder der Package-Name genutzt wird) Diese Datei enthält Metadaten zu dem Package, wie Autor, Beschreibung, etc. Im Falle von LightCore sieht das XML wie folgt aus:

<?xml version="1.0" encoding="utf-8"?>
<package>
  <metadata>
    <id>LightCore</id>
    <version>1.4.1</version>
    <description>LightCore is a lightweight dependency injection container which can be used as a service locator, too. Despite its simplicity and its lightness there are lots of features to explore.</description>
    <authors>
      <author>Peter Bucher</author>
    </authors>
    <language>en-US</language>
  </metadata>
</package>

Die Assembly “LightCore.Integration.Web.dll” habe ich in einem separaten Package untergebracht, welches das LightCore Package benötigt. Hierfür wird eine Abhängigkeit zum LightCore Package in der *.nuspec-Datei eingelegt:

<?xml version="1.0" encoding="utf-8"?>
<package>
  <metadata>
    <id>LightCore.WebIntegration</id>
    <version>1.4.1</version>
    <description>LightCore is a lightweight dependency injection container which can be used as a service locator, too. Despite its simplicity and its lightness there are lots of features to explore. This package integrates implementations to use in ASP.NET WebForms and ASP.NET MVC</description>
    <authors>
      <author>Peter Bucher</author>
    </authors>
    <language>en-US</language>
  </metadata>
  <dependencies>
    <dependency id="LightCore" version="1.4.1" />
  </dependencies>
</package>

Wichtig ist zu beachten, dass die anderen LightCore Assemblies nicht im zweiten Package enthalten sein dürfen, damit es nicht zu doppelten Referenzierungen kommt. Damit die benötigten Assemblies dennoch referenziert werden, wird die Abhängigkeit zu einem anderen Package definiert.

Das Package testen

Ist das Package also nun angelegt, sind alle Files enthalten und ist die entsprechende *.nuspec-Datei erstellt, kann das Package getestet werden. Hierfür muss das Package  nur in das mit Mercurial geklonte Repository gelegt werden. Im Root des Repositories befindet sich eine Datei namens “RebuildPackages.cmd” die nun aufgerufen werden muss. Diese Command-Datei erstellt nun ein Verzeichnis mit dem Namen “NuPackPackages” und legt dort alle Packages aufbereitet und verzippt ab. Die Packages haben die Endung “*.nupkg”

Nun kann wie oben beschrieben der Pfad zu diesem Verzeichnis als Source im Package Manager (unter “Tools => Options… => Package Manager”) angegeben werden. Die Packages können jetzt wie unter NuPack - externen Libraries einfach einbinden beschrieben genutzt werden.

Das Package publizieren

Um das eigene Package zu publizieren und der Öffentlichkeit zugänglich zu machen, muss es in das Repository aufgenommen werden. Das passiert mit einem festgelegtem Workflow:

  1. Es muss unter http://nupackpackages.codeplex.com/ ein eigener Fork erstellt werden. Dafür wird ein Account auf Codeplex benötigt.
  2. Ist dieser Fork erstellt, muss dieser mit Mercurial auf den lokalen Rechner geklont werden. Nun kann man dort das Package (entsprechend den bereits vorhandenen) einfügen, mit TortoiseHG in den Clone einfügen und in den erstellte Fork auf Codeplex publizieren.
  3. Auf Codeplex muss nun ein sogenannter “Pull Request” gestartet werden (Den Link dazu findet man auf Codeplex rechts vom eigenen Fork). Hier sollte eine Aussagekräftige Beschreibung (auf English) und falls vorhanden der Twittername eingefügt werden.
  4. Die Koordinatoren des Projektes prüfen nun den Pull Request und entscheiden ob das neue Package in das Projekt eingebunden wird oder nicht. Das kann mehrere Stunden in Anspruch dauern.
  5. Wird das Package im ersten Anlauf nicht akzeptiert, erhält man eine E-Mail mit einer aussagekräftigen Begründung. So ging es mir beim Einfügen von LightCore. Ich hatte doppelte Assemblies und Abhängigkeiten vergessen.
  6. Nach der Behebung des Fehlers kann der Pull Request einfach noch einmal gestartet werden, sobald die Änderungen in Fork sind.
  7. Läuft alles glatt, so wird das Package akzeptiert und wird nun im offiziellen Feed veröffentlicht und kann wie unter NuPack - externen Libraries einfach einbinden beschrieben genutzt werden.

Fazit

Man sieht, dass es im Grunde recht einfach ist ein eigenes Package zu erstellen und zu veröffentlichen. Um LightCore noch ein bisschen mehr zu puschen, habe ich mich entschlossen, zwei Packages für LightCore zu erstellen und zu veröffentlichen.

Ich bin allerdings nicht sicher, in wie weit die Projektverantwortlichen darauf achten werden, dass nicht jede blöde Assembly als Package angeboten wird, sondern nur Tools die wirklich relevant sind. Von daher war ich eigentlich überrascht das LightCore so einfach und schnell akzeptiert worden ist. Entweder werden gerade zu Anfang noch relativ viele Assemblies einfach so akzeptiert oder LightCore ist tatsächlich schon in den USA zu einer gewissen Bekanntheit gelangt. Vielleicht hat aber auch nur die Überprüfung der Assembly und der Projektseite http://lightcore.ch/ ergeben, dass es sich hier um eine relevante und nützliche Assembiel handelt.

Wie auch immer, hoffe ich, dass nicht jede beliebige Assembly als Package angeboten wird und das Angebot zumüllen wird.

Was bei NuPack noch fehlt, gerade das es im Moment immer mehr wächst, sind Kategorien die das Browsen und suchen nach Tools vereinfachen. Natürlich nutzt man in erster Linie nur bekannte Assemblies und sucht speziell nach denen. Allerdings ist NuPack auch Ideal um neue und unbekannte Tools kennen zu lernen. Ich würde mir also wünschen, wenn ich speziell nach Test-Frameworks, DI-Containern oder OR-Mappern schauen könnte.

DotNetKicks-DE Image

NuPack - externen Libraries einfach einbinden

14.10.2010 14:46:00 | Jürgen Gutsch

Anfang der Woche bin ich auf NuPack gestoßen und habe mich näher damit beschäftigt.

Scott Hanselman:
NuPack is a package management system for .NET. The goal of NuPack is to make the process of incorporating third party libraries into your solutions as simple as possible.

Genauer: NuPack ist eine konsolenanwendung mit einer PowerShell Integration und eine Integration in das Visual Studio 2010 die es ermöglicht externe Libraries als Pakete herunterzuladen und direkt in das eigene Projekt einzubinden. Es muss also nicht mehr manuell heruntergeladen, entpackt und im eigenen Projekt referenziert werden. Updates von Libraries gestaltet sich ebenso einfach. Diese Aufgaben übernimmt NuPack.

Das Prinzip ist nicht neu, sonder ist Abgeschaut von Ruby Gems.

Nicht nur ich, habe mir NuPack genauer angeschaut, sondern auch de üblichen Verdächtigen, wie Scott Hanselman und Phil Haak:
Introducing NuPack Package Management for .NET - Another piece of the Web Stack
Introducing NuPack Package Manager

NuPack im Visual Studio

NuPack wird als Extension im Visual Studio 2010 installiert und ist im Extension Manager sichtbar:

Um eine neue Referenz auf eine externe Library einzufügen kann man wie gewohnt mit einem Rechtsklick auf den Referenzenordner machen. Nur dass man jetzt zusätzlich noch den Punkt “Add Package Reference…” zur Verfügung hat:

Es öffnet sich nun der Package Manager aus dem die gewünschte Komponente ausgewählt werden kann:

Ich habe Peter Buchers LightCore als NuPack Package veröffentlicht, das nun im Package Manager angezeigt wird und zur Auswahl bereit steht. Wie man ein eigenes Package erzeugt und bereit stellt, habe ich in Beitrag NuPack – eigene Packages erstellen beschrieben.

Nach dem Klick auf “Install” werden nun die Referenzen auf LightCore in das Projekt eingefügt. Zusätzlich befindet sich im Projekt eine Datei mit dem Namen “packages.config”, welche eine Liste mit installierten Packages und deren Versionen enthält:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="LightCore" version="1.4.1" />
</packages>

Das ist alles um eine externe Library zu referenzieren und zu nutzen. Neben LightCore gibt es eine ganze Menge weiterer Libraries, die in NuPack enthalten sind: NUnit, NHibernate, Castle, Elmah, log4net, NLog und viele andere.

Im Moment wächst die Anzahl der Libraries stündlich weiter an :-)

Im Visual Studio ist neben dem Package Manager auch eine auf Power Shell basierende Konsole enthalten. Unter “View => Other Windows => Package Manager Console” kann die Konsole aufgerufen werden. Der Befehl “List-Package” listet beispielsweise alle vorhandenen Packages auf:

Das Hinzufügen einer Referenz lässt sich natürlich auch über diese Konsole erledigen..

Die vorhandenen Packages werden übrigens auf eine wirklich simple Art bekannt gemacht. Sie werden ganz einfach als RSS Newsfeed veröffentlicht NuPack ließt nur das Feed ein, das alle nötigen Informationen über die einzelnen Packages enthält. Die Adresse des Feeds lautet: http://go.microsoft.com/fwlink/?LinkID=199193

DotNetKicks-DE Image

Build Messages in CodeActivities in Teambuild 2010

14.10.2010 11:59:00 | Martin Hey

Wer in TFS 2008 eigene Build-Tasks geschrieben hat und dabei von der abstrakten Basisklasse Task abgeleitet hat, wird wissen,dass es recht einfach war, Meldungen ins Log zu schreiben. Die Klasse stellte ein Objekt Log zur Verfügung, das über die passenden Methoden verfügte.
In TFS 2010 ist die Workflow-Engine Grundlage des Teambuilds. Dieser ist auch weiterhin erweiterbar - nur wird nun nicht mehr von der Klasse Task, sondern von der Klasse CodeActivity geerbt. Nur leider bietet diese Klasse eben kein solches Log-Objekt mehr.
Abhilfe schafft hier der Microsoft.TeamFoundation.Build.Workflow.Activities-Namespace. Ist dieser über eine using-Direktive eingebunden, so stehen auf dem context-Objekt drei Extension-Methods zur Verfügung, die das Logging übernehmen können.
using System.Activities;
using Microsoft.TeamFoundation.Build.Workflow.Activities;

namespace CustomActivityLibrary
{
public sealed class CodeActivity1 : CodeActivity
{
protected override void Execute(CodeActivityContext context)
{
context.TrackBuildMessage("this is a message");
context.TrackBuildWarning("this is a warning");
context.TrackBuildError("this is an error");
}
}
}

Windows Phone 7: LazyListBox for better performance and user experience

13.10.2010 09:03:00 | Patric Schouler

A good article about a smart ListBox of Peter Torr that uses the new scrolling states and data virtualization features on Windows Phone 7 to improive performance and user experience.

Procrastination FTW - LazyListBox Should Improve your Scrolling Performance and Responsiveness - Peter Torr's Blog - Site Home - MSDN Blogs

Starten einer Lab Environment beschleunigen

12.10.2010 21:45:40 | Thomas Schissler

Beim starten einer Environment im Microsoft Lab Management dauert es meist geraume Zeit, bis die Workflow capabilities bereit zur Ausführung sind.

image

Will man diese Zeit reduzieren, ist ein einfaches Mittel in den VMs das IPv6 Protokoll auf den Netzwerkkarten zu reduzieren. Bei mir hat das die Wartezeit für die Workflow capabilities von 2:44 Min auf 0:40 Min reduziert.

Neues Web Camp im Dezember

12.10.2010 14:54:20 | Oliver Scheer

Am 16.Dezember gibt es eine zweite Chance in diesem Eintages-Workshop die Programmierung beeindruckender Web-Anwendungen auf Basis von ASP.NET MVC 2 zu erlernen!

clip_image001

Hier geht’s zur Anmeldung!

In einem ersten Block werden die Grundlagen von ASP.NET MVC erläutert. Dabei lernen Sie den Umgang mit ASP.NET MVC und Visual Studio Web Developer 2010 Express anhand eines einfachen Beispiels.

Darüber hinaus wird auch darauf eingegangen, wie Sie mit Hilfe SQL Server Express eine Datenanbindung implementieren. Alle verwendeten Tools für diesen Workshop sind kostenlos als Download verfügbar.

Agenda

Start Time

Dauer

Inhalt

9:00

10’

Begrüßung und Agenda

9:10

50’

MVC Fundamentals

10:00

50’

Data Access und Modeling

10:50

10’

Pause

11:00

50’

Forms und Validation

11:50

10’

Q&A

12:00

60’

Mittagspause

13:00

3 h

Labs und App Building

16:00

10’

Zusammenfassung

Bitte bringen Sie folgendes mit:

  • Notebook
  • Notizblock

Für Verpflegung während des Tages ist natürlich gesorgt clip_image003

Wir freuen uns auf Ihre Anmeldung!

Mails versenden mit Outlook und Dynamics

12.10.2010 12:27:00 | Martin Hey

Ein altbekanntes Problem, aber eines, das auch in Foren immer wieder gestellt wird ist "Wie kann ich Mails mit Outlook versenden?" - nach Möglichkeit unabhängig von der Outlook-Version des Anwenders.
Ein Weg unter vielen ist die Verwendung der Dynamic Language Runtime. Diese gibt es seit dem .NET Framework 4.0 und sie erlaubt einen Zugriff auf Typen, die in ihrer wirklichen Ausprägung erst zur Laufzeit fest stehen. Einen Überblick über die Grundzüge und die Möglichkeiten der DLR gibt es in der MSDN.
In der Praxis sieht das Ganze dann in etwa so aus:
private void ComposeEmail(string receipient, string subject, string body)
{
const int olMailItem = 0;

dynamic outlookApp = GetOutlookApplication();
if (outlookApp == null)
{
MessageBox.Show("Outlook konnte nicht initialisiert werden.");
return;
}

dynamic mailItem = outlookApp.CreateItem(olMailItem);
mailItem.To = receipient;
mailItem.Body = body;
mailItem.Subject = subject;
mailItem.Display();
//mailItem.Send();
}

private dynamic GetOutlookApplication()
{
// try to get an existing outlook instance
try
{
dynamic outlookApp = System.Runtime.InteropServices.Marshal.GetActiveObject("Outlook.Application");
return outlookApp;
}
catch (System.Runtime.InteropServices.COMException)
{
}

// try to get an existing outlook instance
try
{
dynamic outlookApp = System.Activator.CreateInstance(System.Type.GetTypeFromProgID("Outlook.Application"));
return outlookApp;
}
catch
{
return null;
}
}

Die Funktion GetOutlookApplication versucht zunächst eine laufende Outlook-Instanz zu ermitteln. Schlägt das fehl wird eine neue Instanz geöffnet. Dabei wird das Objekt über den Registry-Eintrag "Outlook.Application" referenziert. Dies ist ein Verweis auf die jeweils aktuelle Outlook-Installation.

Die ermittelte Outlook-Instanz wird dann verwendet, um ein neues MailItem zu erzeugen. Im Beispiel wird das Item nur angezeigt, damit der Kunde es noch bearbeiten kann. Durch die Verwendung von Late Binding mit dem dynamic Schlüsselwort ist zur Entwicklungszeit irrelevant, welche Version der Kunde installiert hat. Die Überprüfung erfolgt erst zur Laufzeit. Wird dann auf eine Eigenschaft oder Methode zugegriffen, die es bei dem real vorliegenden Objekt nicht gibt, so wird ein RuntimeException geworfen, die es zu behandeln gilt.

Promocode für die Microsoft Information Days & Roadshows

12.10.2010 01:52:00 | Lars Keller

Wie in meinem Blogpost zur deutschen Microsoft Partnerkonferenz 2010 angekündigt, habe ich bei meinem Gespräch mit Steffen Ritter über verschiedene Microsoft Entwickler Veranstaltungen gesprochen. Bei diesem Gespräch hatte mir Steffen versprochen einen Promocode für die Veranstaltungen zukommen zu lassen. Gesagt getan und hier ist er! :-)

Mit dem Promocode “VSlkr” können sich beliebig viele Unternehmen, pro Unternehmen bis zu jeweils zwei Personen, für jede dieser Veranstaltungen kostenlos anmelden.

Visual Studio Information Day

Nehmen Sie an der ganztägigen Veranstaltung zu Visual Studio teil, die sich anhand zahlreicher Live Demos, unter anderem mit Qualitätssteigerung durch reproduzierbare Fehler, Fehlerminimierung in den Aufgaben sowie verbesserte Planbarkeit durch Transparenzerhöhung in Ihren Projekten beschäftigt. Erleben Sie Visual Studio 2010 live und praxisbezogen!

Test Information Day: Integrierte Qualitätssicherung – nie mehr „No Repro Bugs“

Microsoft liefert Ihnen mit Visual Studio 2010 integrierte Lösungen für Ihre gesamte Qualitätssicherung, die alle Qualitätsaspekte in der Anwendungsentwicklung und im fachlichen Testen abdecken. Unsere neue Lösung verbessert die Zusammenarbeit zwischen allen Mitgliedern eines Softwareteams, insbesondere werden Fachseite, Entwicklung und Testabteilung besser miteinander in Einklang gebracht.

Das Ergebnis: Kundenanforderungen werden besser verstanden und in höherer Qualität umgesetzt, nicht-reproduzierbare Fehler werden massiv verringert und gefundene Fehler schneller als bisher behoben.

SharePoint Development Information Day

Während der ganztägigen Veranstaltung erleben Sie zahlreiche Live Demos, die sich unter anderem den Themen Qualitätssteigerung durch tägliche Builds, Fehlerminimierung in den Aufgaben sowie verbesserte Planbarkeit durch Transparenzerhöhung in Ihren SharePoint Projekten widmen.

Azure Information Day

Während der ganztägigen Veranstaltung werden alle Komponenten und Dienste, die Windows Azure mitbringt, ausführlich betrachtet. Neben einem technischen Überblick erhalten Sie auch alle Informationen zu dem günstigen verbrauchsorientierten Bezahlmodell, das nur die tatsächlich genutzte Serverzeit berechnet. Ebenso stellen wir Ihnen verschiedene Einsatzszenarien wie auch Architekturszenarien für Windows Azure basierte Anwendungen vor.

Lasttest Roadshow

Erleben Sie in zahlreichen Demos die Möglichkeiten, Ihre Software noch leistungsfähiger zu machen. Mit den richtigen Tests im Laufe des gesamten Entwicklungszyklus lassen sich die Kosten senken und gleichzeitig die Qualität erhöhen. Wie Sie das schaffen, zeigen wir Ihnen in der halbtägigen Veranstaltung, in der Sie alles rund um die Testtools von Visual Studio 2010 erfahren.

Anmeldungen und Gesamtübersicht inkl. Agenden usw. sind hier: http://www.event-team.com/events/InfoDays/

Interessante Veranstaltungen wie ich finde, gerade die Themen “Lasttest” und “Integrierte Qualitätsicherung” finde ich sehr spannend!

Viel Spaß beim Besuchen der Veranstaltungen! :-)

S3 : Microsoft Software Strategy Summit 2010 ALM Demos als Video

11.10.2010 17:57:41 | Christian Binder

www.microsoft-s3.com

In der Session Application Lifecycle Management Produktivität trotz Qualität?  hatten wir einige kurze Demos gezeigt. Jetzt habe ich einige Anfragen erhalten, ob die Demos einzeln zum Download verfügbar sind, da Sie so kompakt waren.

S3 Zusammenarbeit Test und Development

S3 Abhängigkeiten zwischen Codeartefakten visualisieren

Konnte ich ja leider nicht mehr zeigen. Also auch für alle Anwesenden eine kleine Zugabe :-)

S3 Architektur Validierung

Viel Spass

PDC Public Viewing bei der .NET Usergroup Dresden am 28.10.2010

08.10.2010 19:54:00 | Martin Hey

Am 28. und 29. Oktober veranstaltet Microsoft in Redmond die Professional Developers Converence. Zur Eröffnung gibt es deutschlandweit in vielen Usergroups ein Public Viewing der Keynote. Auch wir sind mit dabei und möchten gemeinsam mit euch die Gelegenheit nutzen und diesen Event in das Oktober-Treffen der Usergroup einbetten. In lockerer Runde können wir so fachsimpeln, ein paar interessante Anregungen mitnehmen, Ankündigungen diskutieren und neue Kontakte knüpfen.

Nach der Keynote gibt es auch noch eine Verlosung. Zu gewinnen gibt es die folgenden Produkte:
  • 1x Visual Studio 2010 Professional (NFR)
  • 1x Windows 7 Ultimate (NFR)
  • 1x Competition Pro C64 USB-Joystick und eine umfangreiche Spielesammlung
Alle angemeldeten Teilnehmer, erhalten noch einen USB-Lanyard.

Die Keynote beginnt um 18:00 Uhr. Deshalb treffen wir uns dieses Mal schon um 17:45 Uhr bei der T-Systems MMS. Die Teilnehmerliste befindet sich wie gewohnt im Xing.

Ich freue mich schon auf euer Erscheinen und vielleicht können wir ja auch das ein oder andere neue Gesicht in unserer Runde begrüßen.

GUI&Design

07.10.2010 11:42:11 | Peter Kirchner

1. Fachkonferenz rund um Grafische Benutzeroberfläche und Design

am 8. und 9. Dezember 2010
im Karl-Bröger-Zentrum, Karl-Bröger-Str. 9, 90459 Nürnberg

Die Software der Zukunft wird über ihr Aussehen verkauft. Und ob das gefällt, entscheidet einzig und allein der Käufer. Um erfolgreiche Software zu entwickeln, müssen also zwingend die Bedürfnisse und Ansprüche des Users im Vordergrund stehen.

Auf der GUI&Design präsentieren Ihnen Branchenexperten DIE Trends rund um die Software der Zukunft auf Basis von Microsoft-Technologien. Lernen Sie neue Design-Ideen kennen. Erfahren Sie, wie mehr Umsatz generiert werden kann mit Anwendungen, die cool aussehen und leichter bedienbar sind. Informieren Sie sich über Designs für mehrere Plattformen, Barrierefreiheit, Internationalisierung u.v.m.

Sichern Sie sich bis 31. Oktober 2010 Ihre Teilnahme zum Frühbucherpreis von 699,00 EUR statt 899,00 EUR und Sie erhalten mit dem Promocode GUI-HG4u zusätzlich zum Frühbucherrabatt eine Hotelübernachtung in Nürnberg gratis zu Ihrer Konferenz-Anmeldung dazu! Melden Sie sich hier online zur GUI&Design an http://www.gui-design.ppedv.de/anmeldung.aspx, oder senden Sie eine E-Mail an Events@ppedv.de.

Neue Folge von Silverlight-Expertise: “Umlaute und Sonderzeichen in XAML” und “TextBox mit Wasserzeichen”

07.10.2010 11:24:57 | Gregor Biswanger

dotnet-magazin-logo

In der aktuellen Ausgabe vom dot.net magazin gibt es eine neue Folge von meiner Silverlight-Kolumne “Silverlight-Expertise”:  

Silverlight-Expertise - Die Crème de la Crème des Monats
Die Serie „Silverlight Expertise“ des dot.NET Magazins präsentiert monatlich zwei leckere Top-How-Tos zum Thema Silverlight von Gregor Biswanger (www.dotnet-blog.net), sodass Einsteiger und fortgeschrittene Silverlight-Experten durch geballtes Wissen gesättigt werden. Heute stehen auf der Menükarte „Umlaute und Sonderzeichen in XAML“ und „TextBox mit Wasserzeichen“. Viel Spaß und einen guten Appetit.

dotnet-magazin_112010

Zu lesen sind die How-To´s beim dot.net magazin, Ausgabe 11/2010

Video vom Bloggertreffen mit Steve Ballmer

06.10.2010 22:45:08 | Jan Welker

Während des Bloggertreffens mit Steve Ballmer in Köln hat uns ein Kamerateam begleitet, welches uns zwischen den Terminen interviewt, sowie Stimmungen eingefangen hat:

> > >

Weitere Videos über Cloud Computing, Windows 7 und den Besuch von Steve Ballmer in Köln gibt es im YouTube Channel der Microsoft Presseabteilung.

Blogger-Interview mit Steve Ballmer

06.10.2010 22:28:25 | Jan Welker

Um 13:30 war es soweit. Thomas Kuberek, Marco Wyrsch und ich hatten die Möglichkeit, ein Interview mit Steve Ballmer zu führen. Das Interview fand im Microsoft Region Office in Köln statt. Steve Ballmer ist unglaublich locker, vermittelt seine Aussagen trotzdem sehr überzeugend und glaubwürdig.

IMG_6499Beim Interview waren neben Steve Ballmer u.a. auch Dorothea Henke (CLIP Program Manager) und Ralph Haupter (Vorsitzender der Geschäftsführung Microsoft Deutschland) anwesend.
Marc, Thomas und ich stellten Fragen aus dem Bereich Cloud Computig und Windows Phone 7.

IMG_6497Meine erste Frage bezog sich auf Windows Azure und die Einhaltung der Datenschutzbestimmungen des jeweiligen Herkunftslandes. Er erklärte, dass man den Serverstandort für seine Application selbst bestimmen kann. Zum Beispiel könne man für eine Anwendung aus Europa den Standort Irland wählen. Ihm ist bewusst, dass in Deutschland ganz besonders auf Datenschutz geachtet wird. Dies wird bei Microsoft berücksichtigt. Er teilte die Kunden in drei Gruppen ein (Consumer, Business und Government), für die spezielle Datenschutzbedingungen gelten.

IMG_6503Meine zweite Frage war, ob es zukünftig eine kostenlose Version von Windows Azure geben wird, die, analog zu den Visual Studio Express Versionen, für Einsteiger und Hobbyprogrammierer interessant sein könnte. Er meinte: „Das ist keine Frage, sondern ein Vorschlag!“. Er notierte sich diese Idee. Vielleicht gibt es ja bald eine Express Version von Windows Azure :-)

Meine dritte Frage bezog sich wieder auf Windows Phone 7. Ich wollte wissen, ob Microsoft eine eigene Hardware für das neue mobile Betriebssystem plant. Diese wird es nicht geben. Es gibt ausgewählte Hardwarepartner, die strenge Hardwarevoraussetzungen erfüllen müssen. Die Rechenleistung des Windows Phone 7 wird mit der Rechenleistung der ersten Xbox vergleichbar sein.

IMG_6505

Mein Fazit: Steve Ballmer hat den Interviewtermin sehr ernst genommen, ist auf unsere Fragen eingegangen und hat sich von uns Ideen mitgenommen. Man hat gespürt, dass Microsoft die Community ernst nimmt und sie gern unterstützt.

Ed Blankenship über Anpassung des Build Prozess mit TFS 2010 Build und Workflow Foundation

06.10.2010 22:09:11 | Thomas Schissler

Beim nächste Treffen der VS ALM User Group hält Ed Blankenship einen Vortrag über die Anpassungen des Builds im TFS2010.

Weitere Infos unter http://www.vsalmug.com

Date: October 7th, 2010
Time: 19:00 CEST (17:00 UTC without summertime)
Add to Calendar: http://tinyurl.com/2wmsfgu
Join meeting:
http://tinyurl.com/2v3u8at

In TFS 2010, the automated build infrastructure has been revamped to use Windows Workflow Foundation (WF) instead of MSBuild. In this session, we will explore how to customize the default build process template and how to leverage multiple aspects of the workflow implementation for TFS 2010 Build.

We will cover:
• Explore the basics of Windows Workflow Foundation as it is used in TFS 2010 Build
• Review the high-level parts of the default build process template in TFS 2010 Build
• Adding new functionality to the build process using out of the box workflow activities
• Creating variables and process parameters that can be exposed to the end user
• Thoughts about designing & architecting your build process for reuse
• Building a custom activity for use in the build process template
• Deploying the custom activity to all of the build servers in the build farm

Presenter: Ed Blankenship
Ed is an Application Lifecycle Management (ALM) Consultant with Notion Solutions and a Microsoft Most Valuable Professional (MVP) in Visual Studio ALM & Team Foundation Server.
Ed was voted as the Microsoft MVP of the Year (Visual Studio ALM, TFS) for 2010 by his peers.
His expertise is in Microsoft Visual Studio Team System and Team Foundation Server in which he has been actively using, managing, and implementing for nearly five years since the beginning of those products in 2005. He has been awarded since 2008 as a Microsoft MVP in Visual Studio ALM, Team Foundation Server and Visual Studio Team System.
As an ALM Consultant, he assists organizations with improving their development lifecycle by suggesting improvements to their processes and implementing Application Lifecycle Management tools to assist with that improvement. By using Visual Studio ALM and Team Foundation Server, customers can immediately see value from their improvements.
Ed was previously the Release Engineering Manager at Infragistics where he led a multi-year TFS & Visual Studio Team System implementation to improve the development process lifecycle.
Ed is the lead author of the Wrox Professional Team Foundation Server 2010 book, has been a technical editor for the Wrox Silverlight 1.0, Silverlight 2 Developer's Guide, Silverlight 3 Programmer's Reference, and Silverlight 2 Bible books, author of numerous articles, and has spoken at various user groups, events, radio shows, and conferences.
You can find Ed blogging at
http://www.edsquared.com , tweeting at @EdBlankenship ( http://www.twitter.com/edblankenship ), and more information on his LinkedIn profile page: http://www.linkedin.com/in/edblankenship . His MVP profile is also available at https://mvp.support.microsoft.com/profile/ed.blankenship .

Neues CMS für den .NET-Stammtisch Konstanz-Kreuzlingen

06.10.2010 15:57:04 | Jürgen Gutsch

Es ist wieder mal so weit und die Website des .NET-Stammtisch Konstanz-Kreuzlingen wird zum zweiten Mal auf ein neues System migriert und geht in wenigen Tagen mit diesem neuen System online.

Warum das ganze?

Die erste Website basierte auf dem – mit ASP.NET MVC – selbstgestrickten Community CMS .NETKK. Da mir aber immer mehr die Zeit fehlte das .NETKK – trotz Peters Hilfe – weiterzuentwickeln und fertig zu stellen, war es Zeit eine fertige Lösung zu suchen.

Die schnellste Lösung war damals das DotNetNuke. Allerdings ist dieses System nur eine temporäre Notlösung.

Das DotNetNuke ist schnell installiert und aufgesetzt, aber die Administration ist unübersichtlich und die Content-Pflege ist viel zu aufwendig. Customizing ist nur mit Entwicklungsaufwand möglich, von dem ich eigentlich wegkommen wollte.

Wir waren also auf der Suche nach einem System, dass einfach, schnell und intuitiv zu bedienen ist.

Und das sharpcms?

Das sharpcms ist ein kleines und hochflexibles CMS, hat aber aus gutem Grund kaum Features integriert. Es wäre zwar möglich mit dem sharpcms eine kleine Website aufzusetzen, aber die von mir gewünschten Features wären nicht drin. Das sharpcms ist rein für kleinere Internet-Präsenzen ausgerichtet die nicht viele Funktionen benötigen, außer das darstellen und ändern von Content.

Folgendes sollte ein CMS aber bieten um eine Community Website aufzusetzen:

  • Benutzerbereich
  • Veranstaltungskalender
  • News / Blogsystem
  • Bildergalerien
  • Dateienverwaltung
  • Newsletter
  • Online-/Offlineschaltung von Einzelseiten

Meine persönlichen Anforderungen war, dass es sich um ein Seiten-orientiertes CMS handeln sollte, da es intuitiver zu bedienen ist, als ein Content-orientiertes CMS. Schließlich möchte ich bei einer Website in erster Linie Seiten bearbeiten. (Vor nicht allzu langer Zeit kämpfte ich mit einem Content-orientiertem CMS: Der Content war schnell angelegt, allerdings brauchte ich eine ganze Weile um zu verstehen, wie ich diesen Content auf einer bestimmten Seite ausgebe.)

Die Suche nach dem richtigen CMS

Ein CMS zu finden, das meinen Ansprüchen gerecht wird, ist schwierig. Entweder sind die Systeme nicht intuitiv bedienbar und nur mit enormen Schulungsaufwand zu beherrschen oder die annähernd intuitiv bedienbaren Systeme bieten nicht ausreichende Features, bzw. der Entwicklungsaufwand für eine Website ist zu hoch.

Welches CMS denn nun?

Ich bin natürlich auch verwöhnt: Bei der K&K Internet GmbH arbeitete ich mehrere Jahre unter anderem an der Weiterentwicklung des CMS add.min und orientiere mich bei der Suche nach einem passendem CMS natürlich immer an diesem CMS. Wodurch meine Erwartungen sicherlich viel zu hoch gesteckt waren.

add.min CMS

Nun war die See# Party nicht nur eine großartige Veranstaltung, sondern auch der Auslöser für einen glücklichen Zufall, denn die K&K Internet GmbH bot uns an, die Website der See# Party mit dem add.min zu hosten. Die K&K Internet GmbH war damit nun Hosting-Sponsor der See# Party. Ich durfte also nach fast dreieinhalb Jahren mal wieder ein Web mit dem add.min umsetzen :-)

Gestern nun wurde bestätigt, was bei den Vorbereitungen zu See# Party nur beiläufig erwähnt wurde: Der .NET-Stammtisch Konstanz-Kreuzlingen kann nun seine Website ebenfalls mit dem add.min hosten.

Die K&K Internet GmbH ist somit auch Hosting-Sponsor des .NET-Stammtisch Konstanz-Kreuzlingen.


Im Namen des .NET-Stammtisch Konstanz-Kreuzlingen bedanke ich mich hierfür ganz herzlich bei der K&K Internet GmbH :-)

DotNetKicks-DE Image

Silverlight params aus dem object - Tag

06.10.2010 15:38:33 | Paul Mizel

Es gibt in Silverlight einen initParameter für alles, ich würde aber gerne eigene Schlüsselwörter verwenden.<object type="application/x-silverlight"          width="100%" height="100%">   <param name="source"          value="ClientBin/SLInitParams.xap"/> <!-- startPage key can have values Page1 or Page2 -->   <param name="initParams"          value="uid=0,token=asdg" /> </object>  Standard ist in den Parameter initParams, parameterliste zu übergeben ich finde es wäre schöner die paremter zu trennen, und die Idee ist sowas zu verwenden, <param name="uid" value="0" /> <param name="token" value="ABFGX00121" /> zu nutzen und hier [...]

IE6 und IE7 Detection Script zur Einbindung auf der eigenen Webseite

06.10.2010 15:27:14 | Kay Giza

In diesem Beitrag erfahren Sie, wie sie auf einfache Art und Weise Ihren Webseitenbesuchern zeigen können, das sie einen veralteten Browser (IE6 / IE7) einsetzen. Dafür haben wir vom Microsoft Developer Network (MSDN) ein Script entwickelt, welches Webseitenbetreibern eine einfache, schnell umsetzbare und gezielte Möglichkeit gibt, ihre Besucher auf die Nutzung veralteter Internet Explorer-Versionen hinzuweisen. Das Script erkennt und unterscheidet die unterschiedlichen Internet Explorer-Versionen nicht wie eine klassische Browserweiche anhand des User Agent Strings, sondern ermittelt die Versionsnummer aufgrund der Funktionsunterschiede der jeweiligen JavaScript-Engines. Nutzer von Browsern anderer Hersteller werden von dem Script nicht berührt. Wie die sekundenschnelle Implementierung funktioniert und was genau dahinter steckt, erfahren Sie in diesem ausführlichen Blogeintrag auf Giza-Blog.de... [... mehr]

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

Bing Maps: Kostenfreies Info-Event zum Thema Geomarketing

06.10.2010 14:50:00 | Kay Giza

Heute habe ich entdeckt, dass es am 08. November 2010 und 14. Dezember 2010 ein Info-Event Geomarketing von Bing Maps und der Deutschen Post gibt. Die Anmeldung ist kostenlos! Eine ganz neue Perspektive auf Karten und Daten? Innovative Konzepte rund um die Standortpotenzialanalyse zur besseren Planung von Vertrieb und Niederlassungen? Marketing-Optimierung und intelligente Kartenanwendungen? Auf jeden Fall - alle die sich mit Bing Maps beschäftigen bzw. beschäftigen möchten und die Chance... [... mehr in diesem Blogeintrag auf Giza-Blog.de]

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

Kostenloser ASP.NET Webcamp im Dezember 2010 in Bad Homburg

06.10.2010 13:56:07 | Kay Giza

Am 16.Dezember 2010 gibt es eine zweite Chance in diesem Eintages-Workshop mit MSDN-Berater Dariusz Parys die Programmierung beeindruckender Web-Anwendungen auf Basis von ASP.NET MVC 2 zu erlernen. In einem ersten Block werden die Grundlagen von ASP.NET MVC erläutert. Dabei lernen Sie den Umgang... [... mehr in diesem Blogeintrag auf Giza-Blog.de]

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

Deutsche Microsoft Partnerkonferenz 2010 – Schön war es!

06.10.2010 13:07:00 | Lars Keller

Ich wurde zusammen mit Frank Solinske auf die deutsche Microsoft Partnerkonferenz 2010 eingeladen. Deutsche Microsoft Partnerkonferenz 2010Für mich war es die erste Partnerkonferenz, die ich miterleben durfte. Auf der Agenda standen verschiedene  Vorträge zu allen möglichen Themen, trotzdem hat man sehr stark gemerkt, dass Microsoft seine Partner auf die Cloud einnordet. Ich glaube, ich habe noch nie so oft Cloud gehört wie an diesen zwei Tagen. ;-)

Ein besonderes Highlight für mich war, dass ich den Geschäftsführer von Microsoft Deutschland Ralph Haupter persönlich kennen lernen durfte. Frank und ich hatten einen der begehrten Interviewslots bekommen und konnten in gemütlicher Runde ein paar Fragen an Ralph Haupter stellen. Natürlich hatte ich auch ein paar „Cloud-Fragen“, z.B. “Warum sollen überhaupt alle in die Cloud?” und “Was tut Microsoft für die Sicherheit meiner Daten?”. Ralph Haupter hat mir ausführlich erklärt, dass die Infrastruktur mittlerweile (jedenfalls in  den meisten Ländern) soweit wäre, dass die Cloud eine hochgradig standardisierte Technologie sei und dass die Industrie die Cloud für Ihr schnelles Wachstum benötigt. Zum Thema Sicherheit hat Ralph Haupter ein interessantes Beispiel gebracht, welches mich zum Nachdenken anregte. Bevor es die Cloud gab, gab es schon verschiedene E-Mailprovider, z.B. Microsoft Hotmail. In dieser Zeit, so Ralph Haupter, besaß das Thema Sicherheit & Datenschutz längst nicht so eine “Brisanz” wie momentan. Des Weiteren halte sich Microsoft an Standards und biete eine hohe Sicherheit durch zertifizierte Rechenzentren etc. Ich muss wirklich zugeben, dass ich mir damals tatsächlich nie die Frage gestellt habe, wie der Provider mit meinen persönlichen Daten umgeht. Sind diese geschützt vor Zugriffen von Dritten. Nichtsdestotrotz bin ich momentan sehr skeptisch, was die Cloud und das Thema Sicherheit angeht!
Lars Keller, Ralph Haupter & Frank SolinskeIch hatte auch ein wenig Zeit mit Ralph Haupter über das Thema Windows Phone 7 (WP7) zu plaudern. Dabei habe ich mir erklären lassen, welches Marktsegment das WP7 einnehmen soll. WP7 ist klar an die Konsumenten gerichtet, obwohl das WP7 die beste Office Integration hat und ein Smartphone ist. Ralph Haupter hatte natürlich ein WP7 Testgerät dabei und hat mir auch sein Lieblingsfeature verraten. Für ihn ist der neue “Hup” das beste Feature. Mit “Hup” ist die neue Oberfläche von WP7 gemeint, man bekommt alle Anrufe, E-Mails, SMS in Abwesenheit sofort angezeigt bekommt. Im Nebensatz fiel, dass die Klicks, um zu bestimmten Informationen zu kommen, sehr gering seien und dies ein großer Unterschied zu den anderen Handyherstellern darstelle. Ich persönlich konnte mir noch kein eigenes Bild dazu machen, aber WP7 kommt ja bald heraus und somit auch endlich ein paar Geräte zum Kaufen und Testen! Ich freue mich jedenfalls schon sehr drauf! Allein, dass ich mehrere Exchangekonten verwalten kann, ist für mich eines der coolsten Features. Frank Solinske

Nach dem Gespräch mit Ralph Haupter gab es noch die letzte Session zum Thema “Verhandeln im Grenzbereich”! Diese Session war auch eine meiner Highlights auf der Konferenz. Der Sprecher Matthias Schranner ist ein ehemaliger Polizeibeamter, der früher Geiselnahmen verhandelt hat. In den 60 Minuten, habe ich einiges zum Thema Verhandeln gelernt, es gibt z.B. Flucht- und Angriffstypen. Wer die Chance hat, Herrn Matthias Schranner einmal live zu erleben, sollte dies unbedingt wahrnehmen! Die Aufzeichnung der Session kann hier ansehen. 

Nach der Session startete bald die Konferenzparty. Die Party stand unter dem Motto “Space Ship”. Überall waren kleine Lars Keller - Deutsche Microsoft Partnerkonfernz 2010Gimmicks und Nerd-Spielzeug. Als Frank und ich auf der Party ankamen, wurden wir sofort von einer Gruppe Storm Troppers aus Starwars begrüßt (leider habe ich davon kein Foto).  Am späten Abend gab es auch eine Laserschwert-Show. Alles schön und gut, aber das Beste war, dass wir Kinect ausprobieren konnten! Ich hatte hohe Erwartungen an die neue controllerlose Steuerung für die Xbox 360. Diese wurden voll erfühlt! Kinect ist einfach genial! Ich habe das Autorennspiel anspielen dürfen, mega fun! Ich durfte mit dem Tiger aus Kinectimals spielen. Das ist echt sehr süß gemacht und meine Performance sorgte um mich herum für einige Lacher! Es ist bemerkenswert mit welche Leidenschaft man sich z.B. auf den Boden fallen lässt, nur um zu sehen, wie es der Tiger einem nach macht und wie tollpatschig sich dieser dabei anstellt! Kinect ist wirklich eine interessante Erfahrung und ich bin mir sicher, dass dies das Spielen revolutionieren wird. Man sitzt beim Spielen nicht mehr nur auf dem Sofa, sondern muss sich ab jetzt auch aktiv bewegen, z.B. wenn man Fußball (Kinect Sports) gegeneinander spielt. Da soll noch einmal einer sagen, Spielen mache dick! ;-) Kinect KinectimalsKinect Autorennen 

Am zweiten Tag von der Partnerkonferenz habe ich mir weitere Sessions angehört. Ich habe u.a. gelernt, wie Kinect im Hintergrund funktioniert (auch sehr beeindruckend), was der neue Lync  Server (ehemals Office Communication Server) bietet und welche neuen Features der gerade erschienene BizTalk 2010 hat. Am Nachmittag hatte ich ein Gespräch mit Steffen Ritter (Marketing Produkt Manager für Visual ALM). Lars Keller & Steffen Ritter Wir haben ein wenig über die Zukunft des TFS Servers gesprochen. Dabei habe ich erfahren, dass es einen TFS in der Cloud gibt. Momentan ist der aber noch Beta. Weiterhin hat mir Steffen erzählt, dass es eine Eclipse Integration (TFS Everywhere) gibt. Steffen gab mir auch den Tipp, dass sich MSDN Kunden, die überlegen etwas für die Cloud zu entwickeln, bis zum 31.10.2010 das aktuelle Angebot von 750 Azures-Stunden pro Monate (insgesamt 16 Monate) sichern können. Nach dem 31.10.2010 wird es ein neues Angebot geben, welches allerdings nicht mehr so üppig ausfallen wird. Hier kann ich aber auch einen Tipp an alle weitergeben, den wir gerade bei diesem Angebot bemerkt haben. Die Azures-Stunden beziehen sich auf eine Azures-Instanz. Beim Entwickeln von Cloud-Anwendungen kann man aber eine Staging- und Produktinstanz benutzen. Hierbei sollte man darauf achten, dass man die nicht benötigte Instanz ausstellt, sonst kann es passieren, dass die 750 Stunden schnell verbraucht sind.
Steffen hat mir über verschiedene Veranstaltungen berichtet, die gerade von Microsoft angeboten werden, u.a. Visual Studio Information Day, Test Information Day, SharePoint Development Information Day, Azures Information Day und Lasttest Roadshow. Darüber werde ich allerdings die Tage noch einmal ausführlicher bloggen, da mir der Steffen noch eine kleine Überraschung dazu versprochen hat. :-)

Die Partnerkonferenz war, im Vergleich zu den reinen Entwicklerkonferenzen, die ich bis jetzt besucht habe, eine etwas andere Konferenz. Mir hat die Konferenz großen Spaß gemacht und ich hoffe, dass es nicht meine letzte Partnerkonferenz bleiben wird! Noch einmal vielen Dank an Annabelle, Katrin und Hannah für die nette Betreuung rund um das Event!

Internationale Cloud Computing Konferenz der BITKOM

06.10.2010 11:11:08 | Jan Welker

P1020974Die Cloud Computing Konferenz wurde eröffnet durch Ranga Yogeshwar, der aus dem WDR bekannt ist. Nach der Begrüßung hielt Rene Obermann (Vorstandsvorsitzende der Deutschen Telekom AG und Vizepräsident BITKOM e.V.) die Keynote.
Er warb für die „Cloud made in Germany“ die von T-Systems angeboten wird. Er erklärte, dass diese Cloud besondere Sicherheit nach deutschen Richtlinien bietet. Entscheidend für den Erfolg der Cloud sind der rechtliche Rahmen und strenge Datenschutzrichtlinien, diese müssten weltweit auf ein einheitliches Niveau gebracht werden. Außerdem müssten standardisierte API’s geschaffen werden.

Er erinnerte daran, dass wir im Kölner E-Werk sitzen und das die Einführung der Elektrizität damals eine ähnliche bahnbrechende technologische Wende war. „Services müssen künftig wie Strom aus der Steckdose kommen“

Multiplatform Builds mit MSBuild

04.10.2010 23:11:00 | Thorsten Hans

100_1979Wenn man Komponenten für verschiedene Platformen erstellt, hat man entweder die Möglichkeit die diversen Platformen mit unterschiedlicher Codebase zu verwalten, oder man entscheidet sich dazu das MSBuild File etwas zu erweitern. Welche Alternative die bessere ist, liegt wohl klar auf der Hand ;)

In diesem Beispiel möchte ich eine einfache Komponente für die Platformen

  • .NET Framework 4.0
  • Silverlight 4.0
  • Silverlight 4.0 for Windows Phone

erstellen. Mit dem fertigen MSBuild-Script kann man dann einfach über eine Property (welche als Parameter an den MSBuild.exe – Aufruf übergeben werden kann) zwischen den einzelnen Platformen umschalten.

Die Ausgangsposition für dieses Beispiel dient eine einfache C# ClassLibrary, das Ausgangsprojekt könnt ihr hier downloaden. Da die Änderungen lediglich im ProjectFile der ClassLibrary geschehen, bietet es sich an das ProjectFile entweder mit Notepad++ zu öffnen oder in Visual Studio den folgenden Workaround durchzuführen um das ProjectFile zu editieren.

Workaround – Bearbeiten eines ProjectFiles in Visual Studio

Zunächst muss man im SolutionExplorer im KontextMenü des gewünschten Projektes den Eintrag Unload Project auswählen

Multitargeting1

Danach muss auf den ausgegrauten Eintrag im SolutionExplorer erneut ein Rechtsklick gemacht werden, diesmal präsentiert sich ein etwas kleineres KontextMenü aus dem der Eintrag “Edit $$ProjectFileName$$” ausgewählt wird.

Multitargeting2

 

Zurück zum Thema – Das ProjectFile

Das gerade geöffnete “Standard” ProjectFile sollte wie folgt aussehen

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" 
         DefaultTargets="Build" 
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>8.0.30703</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{66A02AE2-91B4-4A70-AC92-1B41B73A09B2}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>DotNetRocks.MSBuildMultitargeting</RootNamespace>
    <AssemblyName>DotNetRocks.MSBuildMultitargeting</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Log.cs" />
    <Compile Include="ILogMessage.cs" />
    <Compile Include="ILogTarget.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target>
  -->
</Project>

Als ersten Schritt sollten die unnötigen Assembly Verweise entfernt werden, also die Zeilen

<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />

 

Ok, nun aber zurück zum eigentlichen Ziel des Scripts. Zunächst wird eine neue Property benötigt, welche definiert welches Zielframework verwendet werden soll. Hierzu kann entweder die Standard-PropertyGroup verwendet werden, oder eine neue PropertyGroup erstellt werden. Aus Gründen der Übersichtlichkeit gehe ich an dieser Stelle den Weg mit einer eigenen PropertyGroup.

Das folgende XML Fragment sollte demnach vor der ersten PropertyGroup eingefügt werden.

<PropertyGroup>
    <TargetFX></TargetFX>
</PropertyGroup>

Im nächste Schritt müssen entsprechend des Zielframeworks einige Standardwerte von MSBuild überschrieben werden. Sowohl für Silverlight als auch für Silverlight for Windows Phone Assemblies müssen die Werte der Eigenschaften

  • TargetFrameworkIdentifier
  • SilverlightVerion
  • SilverlightApplication
  • TargetFrameworkProfile

angepasst werden. In MSBuild ist dies dank Conditions relativ einfach. Dieses XML Fragment sollte unterhalb der Standard-MSBuild PropertyGroups eingebunden werden.

<PropertyGroup 
    Condition="$(TargetFX) == 'Silverlight' OR $(TargetFX) == 'WP7'">
    <SilverlightApplication>false</SilverlightApplication>
    <TargetFrameworkIdentifier>Silverlight</TargetFrameworkIdentifier>
    <SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>
    <TargetFrameworkProfile 
       Condition="$(TargetFX) == 'WP7'">WindowsPhone</TargetFrameworkProfile>   
</PropertyGroup>

Wichtig in dieser PropertyGroup ist, dass die Properties nur evaluiert werden, wenn explizit ein TargetFX angegeben wird.

 

Als letzten Schritt müssen noch die Importanweisungen für die abweichenden Frameworks ausgetauscht werden. Auch an dieser Stelle bietet MSBuild, dank Conditions, alles was benötigt wird.

<!-- vorhandene Import Anweisung anpassen -->
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" 
  Condition="$(TargetFX) ==''" />
<!-- HINWEIS!! -->
<!-- Die Zeilenumbrüche innerhalb der Attribute dienen lediglich der Übersichtlichkeit!! -->
<Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight for Phone\
  $(TargetFrameworkVersion)\Microsoft.Silverlight.$(TargetFrameworkProfile).Overrides.targets" 
  Condition="$(TargetFX) == 'WP7'" />
<!-- HINWEIS!! -->
<!-- Die Zeilenumbrüche innerhalb der Attribute dienen lediglich der Übersichtlichkeit!! -->
<Import  Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight for Phone\
  $(TargetFrameworkVersion)\Microsoft.Silverlight.CSharp.targets" 
  Condition="$(TargetFX) == 'WP7'" />
<!-- HINWEIS!! -->
<!-- Die Zeilenumbrüche innerhalb der Attribute dienen lediglich der Übersichtlichkeit!! -->
<Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight\
   v4.0\Microsoft.Silverlight.CSharp.targets" 
   Condition="$(TargetFX) == 'Silverlight'" />

 

Die vorhandene Standard-C#-Import-Anweisung muss durch diese vier “gefilterten” Importanweisungen ausgetauscht werden. Mehr Anpassungen sind nicht notwendig. Das neue Buildscript sollte nun so aussehen

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" 
         DefaultTargets="Build" 
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <TargetFX></TargetFX>
  </PropertyGroup>
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>8.0.30703</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{66A02AE2-91B4-4A70-AC92-1B41B73A09B2}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>DotNetRocks.MSBuildMultitargeting</RootNamespace>
    <AssemblyName>DotNetRocks.MSBuildMultitargeting</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup 
    Condition="$(TargetFX) == 'Silverlight' OR $(TargetFX) == 'WP7'">
    <SilverlightApplication>false</SilverlightApplication>
    <TargetFrameworkIdentifier>Silverlight</TargetFrameworkIdentifier>
    <SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>
    <TargetFrameworkProfile 
      Condition="$(TargetFX) == 'WP7'">WindowsPhone</TargetFrameworkProfile>   
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Core" />    
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Log.cs" />
    <Compile Include="ILogMessage.cs" />
    <Compile Include="ILogTarget.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <!-- vorhandene Import Anweisung anpassen -->
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets"
    Condition="$(TargetFX) ==''" />
  <!-- HINWEIS!! -->
  <!-- Die Zeilenumbrüche innerhalb der Attribute dienen lediglich der Übersichtlichkeit!! -->
  <Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight for Phone\
  $(TargetFrameworkVersion)\Microsoft.Silverlight.$(TargetFrameworkProfile).Overrides.targets"
    Condition="$(TargetFX) == 'WP7'" />
  <!-- HINWEIS!! -->
  <!-- Die Zeilenumbrüche innerhalb der Attribute dienen lediglich der Übersichtlichkeit!! -->
  <Import  Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight for Phone\
  $(TargetFrameworkVersion)\Microsoft.Silverlight.CSharp.targets"
    Condition="$(TargetFX) == 'WP7'" />
  <!-- HINWEIS!! -->
  <!-- Die Zeilenumbrüche innerhalb der Attribute dienen lediglich der Übersichtlichkeit!! -->
  <Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight\
   v4.0\Microsoft.Silverlight.CSharp.targets"
     Condition="$(TargetFX) == 'Silverlight'" />
 
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target>
  -->
</Project>

 

Last but not least - Verwenden des Buildscripts

Wenn man das Projekt in Visual Studio baut, so wird immer die Standard-Variante für das volle .NET Framework erstellt. Alle weiteren Frameworktypen werden über die MSBuild.exe adressiert.

msbuild DotNetRocks.MSBuildMultitargeting.csproj /p:TargetFX=Silverlight

msbuild DotNetRocks.MSBuildMultitargeting.csproj /p:TargetFX=WP7

Natürlich kann man an dieser Stelle noch mehrere Parameter setzen, wie zum Beispiel abweichende Output-Pfade usw… Aus Gründen der Lesbarkeit spare ich dies hier ein. :)

Abschließend könnt ihr hier noch das Projekt mit der angepassten Buildscriptvariante downloaden.

 

Happy building

 

Technorati-Markierungen: ,,
DotNetKicks-DE Image

IIS automatisieren mit MSBuild

04.10.2010 13:07:40 | Thorsten Hans

Im letzten Post habe ich darüber geschrieben, wie man ASP.NET Anwendungen vorkompiliert und an eine bestimmte Stelle deployt, um das Beispiel zu vervollständigen, muss logischerweise im IIS noch eine Website für die ASP.NET Anwendung erstellt werden.

Um dieses Ziel zu erreichen gibt es mehrere Wege, die ich hier gerne etwas erläutern möchte

  • Variante 1: MSBuild Extension Pack verwenden
  • Variante 2: Eigenen MSBuild Task für die IIS Automatisierung schreiben
  • Variante 3: Realisierung durch einen InlineTask (ab MSBuild 4.0)
  • Variante 4: IIS Automatisierung mit IronRuby (IronMSBuild)

 

Variante 1 – MSBuild Extension Pack

Der MSBuild Extension Pack bringt Tasks zur Automatisierung von IIS 6 und IIS 7 mit sich, die einfach in vorhandene Buildscripte integriert werden können.

Den MSBuild Extension Pack kann man auf der CodePlex Seite downloaden und auf der gewünschten Maschine installieren. Hier findet man noch eine gute Dokumentation, die einem den Einstieg erleichtert.

Den Extension Pack kann man durch Angabe der entsprechenden Properties im MSBuild Script bekannt machen

 <PropertyGroup>
   <TPath>$(MSBuildProjectDirectory)\..\MSBuild.ExtensionPack.tasks</TPath>
   <TPath Condition="Exists('$(MSBuildProjectDirectory)\..\..\Common\MSBuild.ExtensionPack.tasks')">
             $(MSBuildProjectDirectory)\..\..\Common\MSBuild.ExtensionPack.tasks</TPath>
    </PropertyGroup>

 

Nach der Integration der Property kann man auf den MSBuild Extension Pack zugreifen und dessen IIS Automatisierung nutzen.

<MSBuild.ExtensionPack.Web.Iis7Website 
    TaskAction="Create" 
    Name="DotNetRocksSampleSite" 
    Path="c:\inetpub\wwwroot\dnr-samplesite\" 
    Port="80" 
    Force="true">
   <Output TaskParameter="SiteId" PropertyName="DnrSiteId"/>
</MSBuild.ExtensionPack.Web.Iis7Website>
<Message Text="Custom SiteId: $(DnrSiteId)"/>
<!-- Check if site is exists -->        
<MSBuild.ExtensionPack.Web.Iis7Website 
    TaskAction="CheckExists" 
    Name="DotNetRocksSampleSite">
    <Output TaskParameter="Exists" PropertyName="SiteExists"/>
</MSBuild.ExtensionPack.Web.Iis7Website>
<Message Text="DotNetRocksSampleSite exists: $(SiteExists)"/>

 

Die gängigen Aufgaben wie Starten, Stoppen eine Website bietet die MSBuild ExtensionPack API natürlich auch

<!-- Start a website -->
<MSBuild.ExtensionPack.Web.Iis7Website TaskAction="Start" Name="DotNetRocksSampleSite"/>
 
<!-- Stop a website -->
<MSBuild.ExtensionPack.Web.Iis7Website TaskAction="Stop" Name="DotNetRocksSampleSite"/>

 

Variante 2 – Eigenen MSBuild Task schreiben

Im Rahmen des MSBuild Universums habe ich bereits beschrieben, wie man eigene Tasks für MSBuild entwickelt. Daher beschränke ich mich hier auf die Key Elemente aus diesem Kontext. Um die IIS 7 Automatisierung entwickeln zu können muss lediglich ein Assemblyverweis auf Microsoft.Web.Administration hinzugefügt werden. Ansonsten handelt es sich um Standard-MSBuild-Task-Entwicklung :)

IISAutomate1

Abbildung 1 – Custom MSBuild Task

 

Die wichtigsten Punkte in Abbildung 1 sind:

  1. Die using Statements für die Task Basisklasse von MSBuild und das using für die IIS7 API
  2. Die Properties für den eigenen Task
    1. Daraus resultieren die Attribute die im Buildscript angegeben werden können / müssen
  3. Die Execute Methode welche die Logik beinhaltet

 

Damit der CreateSite Task innerhalb eines Buildscriptes verwendet werden kann, muss dieser zunächst eingebunden werden, dies geschieht über das UsingTask Statement von MSBuild

<UsingTask AssemblyFile="PathToMyAssembly" 
             TaskName="CustomMSBuildTasks.CreateSite"></UsingTask>
<!-- oder via FQAN -->
<UsingTask AssemblyName="AssemblyName, Version, Culture, Key" 
             TaskName="CustomMSBuildTasks.CreateSite"></UsingTask>

 

Nachdem der Task eingebunden wurde, kann dieser wie jeder andere Task verwendet werden

<CreateSite
      WebSiteName="DotNetRocksSampleSite"
      Port="80"
      PhysicalPath="c:\\inetpub\\wwwroot\\dnr-samplesite\\" >
</CreateSite>

 

Variante 3 – Realisierung durch einen InlineTask (ab MSBuild 4.0)

Als Alternative zu Variante 2 kann man auch einen InlineTask (ab MSBuild 4.0) entwickeln, dies hat den Vorteil dass keine eigene Assembly verteilt werden muss. Anstatt dessen wird die Logik direkt innerhalb des MSBuild Files gescriptet.

IISAutomate2

Abbildung 2- Realisierung als Inline C# Task

Bei der Realisierung als Inline C# Task gibt es fünf wichtige Punkte, die beachtet werden müssen:

  1. Die Properties für den Task müssen definiert werden
  2. Die Assembly Microsoft.Web.Administration muss referenziert werden
  3. Der Namespace Microsoft.Web.Administration muss hinzugefügt werden
  4. Das C#-Snippet muss in einem CData Node implementiert werden
  5. Der entwickelte Task muss im Build Script aufgerufen werden

Zur Laufzeit kompiliert MSBuild das Script, die generierte Klasse wird im Fehlerfall in den TempOrdner des angemeldeten Users geschrieben. Somit kann man innerhalb kurzer Zeit rausfinden was nicht korrekt implementiert wurde.

Variante 4: IIS Automatisierung mit IronRuby (IronMSBuild)

Als letzte Alternativlösung möchte ich noch die Automatisierung mit IronRuby (genauer gesagt durch Verwendung von IronMSBuild zeigen). Hierbei wird die Logik in Form eines IronRuby Scripts in das MSBuild-File geschrieben, also ähnlich der Variante 3.

IISAutomate3

Auch bei der Realisierung mit IronRuby (IronMSBuild) müssen einige Punkte beachtet werden:

  1. Der IronMSBuild Task muss bekannt gemacht werden
  2. Assembly-Verweis und Namespace bekannt machen
  3. Verwenden des IronMSBuild Tasks wie gewohnt im BuildScript

 

Fazit

Viele Wege führen nach Rom, welcher hierbei der beste, oder eleganteste ist, liegt wohl im Auge des Betrachters. MSBuild bietet, wie man sehen kann, genügend Flexibilität, damit man als Entwickler immer zwischen diversen Möglichkeiten wählen kann.

 

Technorati-Markierungen: ,,,
DotNetKicks-DE Image

TFS Prozess Dokumentation Anpassen und lokal oder im Intranet bereitstellen

04.10.2010 11:40:33 | Christian Binder

Für die von Microsoft bereitgestellten Prozess Vorlagen für MSF Agile, MSF CMMI und Visual Studio Scrum ist die Prozess Dokumentation online im Team Projekt referenziert, also nur verfügbar, wenn Zugriff zum Internet besteht.

Wer die Dokumentation aber gerne lokal oder im Intranet ablegen möchte, oder den Prozess anpasst und die Dokumentation entsprechend auch anpassen möchte, kann unter folgendem Link die Dokumentation herunterladen und anpassen:

http://code.msdn.microsoft.com/VSScrumGuidance
http://code.msdn.microsoft.com/MSFAgileGuidance
http://code.msdn.microsoft.com/MSFCMMIGuidance

Im Team Explorer befindet sich unter Documents\Process Guidance, des jeweiligen Team Projektes, die Datei Process Guidance.html, welche die Referenz zur Dokumentation enthält.

clip_image002[8]

Für schon bestehende Teamprojekte muss die Referenz entsprechend angepasst werden:

 <meta http-equiv="refresh" content = "0;URL=http://[Neue Location]/html/VisualStudioScrum1.0.html" >

Hinweis: In der Dokumentation befinden sich für verwandte Themen immer noch online Referenzen, da diese Referenzen nicht zur Dokumentation selbst gehören. Wenn gewünscht, können diese aber sehr einfach im HTML entfernt werden.

Um sicherzustellen, dass eine neue Dokumentation automatisch richtig in einem Neu angelegten Team Projekt referenziert wird, muss die Datei Process Guidance.html auch in der Prozess Vorlage angepasst werden. Bei den Vorlagen befindet sich die Datei immer [Pfad zur Vorlage]\Process Template\Windows SharePoint Services\Process Guidance. Nach der Anpassung muss die neue Vorlage dann noch im TFS mit dem Template Manager publiziert werden.

Hier als Beispiel die lokal referenziert Dokumentation in einem meiner Demo Images:

clip_image002[10]

Windows Phone 7 – WebRequest Caching Nightmare

03.10.2010 19:40:00 | Patric Schouler

After a three day long search which instance will cache our REST calls, I found out at this weekend that the Windows Phone 7 client caches our REST calls which we make with the WebRequest class. Because I found no documentation about this fact, I decided to wrote this short hint. Hope I could help anybody with the same inexplicably caching behaviour of the Windows Phone 7 WebRequest calls.

To solve this, I have now added a additional Guid parameter for each call to make them unambiguously.

 

NEW Version 3.7 TeamSpeak Sidebar Gadget für Windows Vista und Windows 7

03.10.2010 19:30:00 | Andreas Mehl

I recommend you update to the latest version 3.7. Because there was a change in direct query mode!!!

 

Screenshots can be found here: Screenshots

New Video can be found here: Video

Documentation can be found here: Documentation

Have fun Laughing

Download Sidebar Gadget Teamspeak 3.7

BlogEngine.NET Update auf Version 1.6.2.11

03.10.2010 16:12:52 | Klaus Bock

logoIn diesem Update von Blogengine.NET wurden die im letzten Beitrag beschriebenen breacking changes in der Benennung der Datenbank-Spalten wieder rückgängig gemacht.
Der Schwerpunkt dieses Updates lag in der Überarbeitung des Admin-Bereichs. Vor allem die Kommentarverwaltung wurde grundlegend überarbeitet. Laut Kommentar des Change Set zu 1.6.2.9 wurde die Funktionalität auf jQuery umgestellt und sollte mittels AJAX das Laden der Daten deutlich effektiver gestalten.
Das Update zu 1.6.2.9 hatte allerdings so seine Tücken. Es wurde eine entscheidende JavaScript-Datei gar nicht geladen. Die jQuery-Dateien wurde mit dem defer-Attribut versehen und noch so ein oder zwei weitere Kleinigkeiten.

Mit der Aktualisierung auf Version 1.6.2.11 wurden die genannten Probleme gefixt und BlogEngine.NET läuft wieder rund.
Vor allem der Bereich zur Kommentarverwaltung wurde massiv umgestaltet. Angenehm fällt hier die Auswahl der Bereiche über einen Navigation im rechten Seitenbereich auf. Auch werden ab jetzt die Track- und Pingbacks nicht mehr in der Gesamtanzahl der Kommentare mitgezählt.

Die gravierendste Veränderung stellt für mich der Wegfall der Option Automatische Moderation dar. Diese Option war sehr angenehm, da die Kommentare anhand der Spam- und IP-Filter automatisch freigegeben wurden. Dazu musste die Option Moderiere Kommentare aktiviert werden, dann konnte auch die Option Automatische Moderation gewählt werden.
Wer sein Blog aktualisiert und die Einstellungen belässt wie bisher, muss nun jeden neuen Kommentar erlauben.
Wer das alte Verhalten wieder nutzen will, muss lediglich die Option Moderiere Kommentare deaktivieren. Klingt erst mal unlogisch, ist aber durchaus plausibel.

Moderiere Kommentare

Die Beschreibung ist hier ein wenig unglücklich gewählt und der Zusammenhang mit den Filtern wird leider nicht erwähnt.
Tatsächlich ist es nun so, dass nach der Deaktivierung der Option Moderiere Kommentare alle Kommentare mit dem Attribut Approved versehen werden und anschließend durch die Filter gehen. Sollte ein Kommentar von einem Filter als Spam markiert werden, erscheint er nicht als Kommentar unter einem Artikel, sondern kann im Bereich Spam der Kommentarverwaltung entweder jetzt freigegeben oder gelöscht werden.
An dieser Stelle sollte vielleicht ein benötigtes Update für die Datenbanktabelle be_PostComment erwähnt werden. Hierzu ist das SQL-Script MSSQLUpgradeFrom1.6To2.0.sql vorgesehen. Damit werden die zwei benötigten Spalten IsSpam und IsDeleted zur Tabelle hinzugefügt.

Fazit:

Nach den letzten unglücklichen Change Sets ist mit der Version 1.6.2.11 wieder einmal ein Zwischenstand veröffentlicht worden, der auch unbedarften Benutzern empfohlen werden kann.
Dieses Update kann beinahe bedenkenlos genutzt werden. Wer schon gerne jetzt einen Eindruck von künftigen Versionen erhalten will, sollte sich nicht scheuen zu aktualisieren.
An dieser Stelle noch einmal der Hinweis auf den geänderten Namensraum für Erweiterungen aus dem vorherigen Artikel. Wichtig für Entwickler die eigene Erweiterungen verwenden. Diese Änderung bleibt auch in Zukunft bestehen und sollte schon jetzt beachtet werden.

Technorati-Tags: |

BITKOM-Leitfaden: Industrielle Softwareentwicklung mit Visual Studio 2010: Best of Suite-Entwicklungsumgebung [PDF]

03.10.2010 13:18:47 | Kay Giza

Leitfaden Industrielle Softwareentwicklung. Die Bedeutung von Software als Basistechnologie für Innovation und Wertschöpfung im 21. Jahrhundert nimmt stetig zu. Innovative Produkte und Dienstleistungen mit Wertschöpfung in Hochlohnländern sind ohne Software kaum mehr möglich. Während zu Beginn des IT-Zeitalters die Entwicklung von IT-Systemen noch als ausschließlich kreativer Akt den Fokus auf der grundsätzlichen Machbarkeit hatte, gewinnt aktuell ein industrialisiertes Vorgehen (Software Engineering) immer mehr an Bedeutung, um die IT in das Spannungsfeld von Effektivität und Effizienz zu integrieren. Die damit erwartete Garantie von Qualität und Produktivität ist die Voraussetzung für Wertschöpfung und für Arbeitsplätze in der IT-Industrie in Hochlohnländern wie Deutschland. In diesem Leitfaden wird dargelegt, wie eine derartige Industrialisierung der IT konkret aussehen kann, welche unterschiedlichen Aspekte bereits erfolgreich umgesetzt werden und welche kurzfristigen Ergebnisse noch zu erwarten sind... [... mehr in diesem Blogeintrag auf Giza-Blog.de]

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

Windows Live Essentials 2011 ist final fertig: Gratis-Download des Programmpaket von Microsoft

03.10.2010 12:54:16 | Kay Giza

Die neue Generation der Windows Live Essentials steht ab sofort final zum kostenlosen Download zur Verfügung. Mit diesem kostenlosen Softwarepaket bietet Microsoft eine komplett überarbeitete Versionen der Anwendungen Windows Live Messenger, Windows Live Mail, Windows Live Writer, Windows Live Mesh, Windows Live Family Safety, Windows Live Fotogalerie und Windows Live Movie Maker an. Neben vielen neuen Funktionen ermöglichen die Windows Live Essentials 2011 nun eine noch stärkere Integration von Online-Netzwerken, Social Media Plattformen und verschiedenen E-Mail-Konten. Auch seinen Synchronisationsdienst Mesh hat Microsoft weiterentwickelt und erlaubt nun den direkten Remote-Zugriff auf entfernte Endgeräte wie zum Beispiel vom Smartphone auf den PC. Über 500 Millionen Windows Live User dürfen sich nun auf die schnellste und direkteste Verbindung zwischen dem eigenen PC und der Online-Welt freuen... [... mehr in diesem Blogeintrag auf Giza-Blog.de]

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

Internationale Cloud Computing Konferenz und Microsoft 3S in Köln mit Steve Ballmer

02.10.2010 18:45:14 | Jan Welker

Der Bundesverband Informationswirtschaft, Telekommunikation und neue Medien e.V. - kurz BITKOM veranstaltet am 6. Oktober 2010 die Internationale Cloud Konferenz in Köln. Auf dieser Konferenz wird Steve Ballmer (CEO Microsoft) die Keynote mit dem Titel „The future of cloud services“ halten.

Gleichzeitig findet das Microsoft Software Strategy Summit (kurz Microsoft 3S) statt. Zielgruppe des 3S sind Softwarehersteller und Systemintegratoren . Sie erhalten einen Ausblick auf die neuesten Softwaretrends und Entwicklungen von morgen, wie zum Beispiel Windows Azure oder Microsoft Kinect.
Auf dieser Konferenz sprechen unter anderem Steve Ballmer, Frank Fischer (Leiter des  Geschäftsbereichs Mobility, Microsoft Deutschland GmbH) und Dr. Said Zahedani (Senior Director Developer Platform and Strategy Group Microsoft Deutschland GmbH).

Steve_Ballmer

Steve A. Ballmer trat 1980 in den Microsoft Konzern ein und war der 24. Mitarbeiter und erste Manager.
Im Laufe der Zeit leitete er verschiedene Bereiche bei Microsoft, darunter Betriebssystem-Entwicklung, Absatz und Kundenservice. Seit Januar 2000 ist er der Nachfolger von Bill Gates als Vorstandsvorsitzender von Microsoft.



Zusammen mit Thomas Kuberek (Leiter des MSCEBoard.de und CLIP Mitglied) und Marco Wyrsch (MVP, CLIP Mitglied und Leiter des Forums PocketPC.ch) werde ich an diesem Tag Steve Ballmer begleiten und auch Zeit für ein kurzes Interview mit ihm haben.
Hier im Blog und über meinen Twitter Account werde ich live aus Köln berichten.

Ich freue mich auf einen aufregenden und wolkigen Tag :-)

Windows Phone 7: Tombstoning tips

02.10.2010 11:46:00 | Patric Schouler

After a hard week of optimzing the memory consuption and tombstoning in my current Windows Phone 7 project, here are some of the major points, especially if you working with a multmedia application for Windows Phone 7:

  • Do our own serialization/deseralization (using DataContractSerializer) (because of the 2 MB limitation for transient data)
  • Use virtualization in all lists with a big amount of data (see Shawn Oster | Improving ListBox Performance in Silverlight for Windows Phone 7: Data Virtualization)
  • Work with <WeakReference> for bitmap objects
  • Cleanup references after NavigateFrom
  • If you are using Listboxes with a great amount of data:
    • In NavigateFrom: Set the Listbox items source to null
      • After this the tombstoning is much quicker and memory consumption is lower
      • otherwise the applications crashes here during tombstoning again, because the framework reachs the limit (2MB) with all the bitmaps on the page

Windows 7 - Desktop anzeigen

02.10.2010 00:35:41 | Jan Welker

Desktop anzeigen Über viele Windows Versionen hinweg hatte ich mich an das kleine blaue „Desktop Anzeigen“ – Icon rechts neben dem Windows-Startknopf gewöhnt. Seit Windows 7 gibt es diese Funktion zwar immer noch, allerdings ist diese jetzt rechts neben der Uhr in der Taskleiste.
Als ich damals den ersten Release Candidate von Windows 7 getestet habe, habe ich mich über diese Umstellung so geärgert, dass ich mir einen Ersatz geschaffen habe. Heute ist dies mein meist genutztes Programm, welches ich hiermit zum kostenlosen Download anbieten möchte.

Installation:

  • 1. Zip-Archiv entpacken
  • 2. DesktopAnzeigen.exe mit gedrückter linker Maustaste an die Taskbar anheften

Download Windows 7 Desktop anzeigen

Code Coverage Analyse in Visual Studio 2010 aktivieren

01.10.2010 23:42:43 | Thomas Schissler

Um mit dem MS Test Framework eine Code Coverage Analyse auszuführen, muss diese zunächst aktiviert werden. Da es hierbei immer wieder zu Fragen / Problemen kommt, möchte ich den Weg hier einmal ausführlich beschreiben:

Zunächst öffnet man eine vorhandene Test Settings Datei

image

Hier aktiviert man zunächst unter “Data and Diagnostics”´die Code Coverage und öffnet dann die Konfiguration für diesen Data Collector.

image

Hier wählt man nun die Assemblies für die die Coverage Analyse erstellt werden soll

image

Anschließend speichert man die Test Settings unter einem eigenen Namen wie beispielsweise “CodeCoverage” ab. Dies kann man als aktive Test Settings selektieren.

image

Nun kann man Unit-Tests ausführen und anschließend im Test Results Fenster die Code Coverage Results aufrufen.

image

Die Ergebnisse werden nun tabellarisch angezeigt.

image

Zusätzlich kann man dann noch die Coverage im Code anzeigen lassen. Hierzu einfach in der Toolbar den gekennzeichneten Butten klicken.

image

Hier sieht man nun, welche Codebereiche noch nicht durch die Tests abgedeckt sind. Hier sollten also noch ein paar weiter Tests geschrieben werden um die Testabdeckung zu erhöhen. Welche Input-Parameter diese abdecken sollten, zeigt die Coverage Analyse.

Tipp: Sollte die Coverage Anlayse auf dem oben beschriebenen Weg nicht gleich angezeeigt werden, hilft manchmal ein neustart von Visual Studio. Ich hatte schon verschiedendlich Situationen, als die Einstellung nicht sofort übernommen wurde.

Meine Windows Phone 7 Demo

01.10.2010 13:37:21 | Oliver Scheer

Auf diversen Veranstaltungen erkläre ich derzeit Designern und Entwicklern, die Entwicklung von Windows Phone 7 Anwendungen. Dabei demonstriere ich technische Funktionen des Telefons mit Hilfe einer ständig wachsenden App.

image

Der Sourcecode dazu kann hier heruntergeladen werden:

Wünsche bzgl. neuer Demos bitte einfach an mich senden.

Schritt für Schritt zur eigenen App: Windows Phone 7 Coding Camps!

01.10.2010 13:32:13 | Peter Kirchner

Als einer der ersten Apps für Windows Phone 7 schreiben – Microsoft zeigt Studenten und Start-Ups, wie es geht!

Bei den Windows Phone 7 Coding Camps zeigen Experten zwei Tage lang alles rund um das neue Phone und machen die Teilnehmer in Einführungsvorträgen fit zu den Technologien Windows Phone 7, Silverlight und XNA.

Das Ziel der Veranstaltungen ist es, am Ende eine eigene App für Windows Phone 7 in den Marketplace zu laden!

Die Veranstaltung richtet sich an Studierende aller Fachrichtungen, die Lust haben, eigene Apps für Windows Phone 7 zu schreiben, sowie an Start-Ups.

Die Teilnahme am Event ist kostenlos. Zusätzlich besteht für die Teilnehmer, die einen längeren Anreiseweg haben, auch eine Übernachtungsmöglichkeit.

Termine

  • 09.– 10.10 Unterschleißheim/München (Sa/So)
  • 14.– 15.10 Berlin (Do/Fr)
  • 23.– 24.10 Hamburg (Sa/So)
  • 30.– 31.10 Köln (Sa/So)

Weitere Informationen und Details zur Agenda finden Sie hier und hier geht’s direkt zur Anmeldung.

TechTalk im Oktober: Windows Phone 7 – Noch wenige Plätze frei

01.10.2010 12:51:41 | Peter Kirchner

Das portable Tor zur Welt: MSDN-Berater Tom Wendel informiert auf dieser Ausgabe der kostenlosen TechTalk-Reihe über Windows Phone 7 und die vielfältigen Möglichkeiten, die sich auf Basis der neuen Anwendungsplattform aus .NET, Silverlight und XNA für Entwickler bieten.

Für die fünf Termine in Berlin (11.10.), Hamburg (12.10.), Köln (18.10.), Karlsruhe (19.10.) und München (25.10.) stehen jeweils noch wenige Restplätze zur Verfügung. Für alle, die den TechTalk im Juni verpasst haben, ist dies eine gute Gelegenheit, Windows Phone einmal in Live-Demos ganz aus der Nähe zu erleben und dabei vor allem die aktuellste Version der Developer Tools kennenzulernen. Schnelle Anmeldung ist daher empfehlenswert.

http://www.microsoft.com/germany/msdn/techtalk/WindowsPhone7_DasPortabelTorZurWelt.mspx

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