.
Anmeldung | Registrieren | Hilfe

.NET-Blogs Archiv September 2009

Link constraints zwischen Workitems in VSTS 2010

30.09.2009 14:33:12 | Christian Binder

Ich habe eine sehr gute Frage bekommen, ob man sogenannte “Link constraints” zwischen Workitems in VSTS 2010 definieren kann. Oder anders, dass man nur einem Custom Link nur bestimmte Workitems verknüpfen kann. Die Antwort ist, dass wir erst mit dem VSTS 2010 Nachfolger “Link constraints” haben werden, es gibt aber eine gute Lösung, dem LinksControl mittzuteilen, dass nur bestimmte Workitems zur Auswahl stehen sollen. Somit bekommt der Anwender zu Beispiel nur Tasks angezeigt. Sicherlich ist dies kein harter „Link constraint“, gibt aber die Möglichkeit, den Anwender bei der Verwendung von Links zu unterstützen. Dies nutzen wir in unserem Agile Workitem Template, hier die XML definition für das LinkControl, wodurch in dem  Tree nur Workitems vom Typ User Story oder Task angezeigt werden:

<Control Type="LinksControl" Name="Hierarchy" Label="Parent and &amp;Child Stories and Tasks:" LabelPosition="Top">
 <LinksControlOptions>
 <WorkItemLinkFilters FilterType="include">
 <Filter LinkType="System.LinkTypes.Hierarchy" />
 </WorkItemLinkFilters>
 <WorkItemTypeFilters FilterType="include">
 <Filter WorkItemType="User Story" />
 <Filter WorkItemType="Task" />
 </WorkItemTypeFilters>
 <ExternalLinkFilters FilterType="excludeAll"/>
 <LinkColumns>
 <LinkColumn RefName="System.ID" />
 <LinkColumn RefName="System.WorkItemType" />
 <LinkColumn RefName="System.Title" />
 <LinkColumn RefName="System.AssignedTo" />
 <LinkColumn RefName="System.State" />
 <LinkColumn LinkAttribute="System.Links.Comment" />
 </LinkColumns>
 </LinksControlOptions>

Wer noch mehr zum Thema custom Workitem Links wissen möchte, kann sich diesen QuickHit zur Beta1 anschauen.

Viel Spass
Chris

Funktioniert der Virenscanner richtig?

30.09.2009 13:01:00 | Michael Schwarz

Ich habe gestern mal Microsoft Security Essentials ausprobiert, macht einen soliden Eindruck, ohne dass es den Endanwender mit Einstellungsmöglichkeiten überfordert, prima gemacht!

Jetzt wollte ich aber mal sehen, wie der Virenscanner eine Datei auf meinem System findet, aber wie programmiert man einen Virus woher mal schnell ein Virus zaubern?

Nun, dafür gibt es den sogenannten EICAR Test. Auf der Webseite könnt ihr euch die verschiedenen Viren (als ausführbare Datei (*.com), als ZIP Datei oder als einfache Textdatei); alle Virenscanner sollten diesen Testvirus erkennen.

Bitte lest euch auch die Warnung auf der EICAR Webseite durch!

Microsoft Security Essentials zeigt das dann so an:

Microsoft Security Essentials – Warnung

Gerade Downloads werden schon in den temporären Internetdateien erkannt und blockiert, funktioniert hier echt gut. Leider ist das Feedback für den Endbenutzer aber irgendwie enttäuschend, wenn er dann doch versucht, die Datei in ein Verzeichnis zu speichern oder zu starten:

Dateizugriff wurde verweigert

Das soll mal einer verstehen… hat Windows Vista und Windows 7 schon überwacht und erkannt, dass ich jetzt eine Antiviren Software installiert habe, da wäre es doch prima, wenn wir in diesem Dialog ein etwas benutzerfreundlicheres Feedback erhalten, so etwas wie:

Upps, das war wohl ein Virus, den wir vorsichtshalber blockiert haben!

Nebenbei bringt das Klicken auf Wiederholen natürlich nichts, egal wie oft ihr da drauf klickt.

Na, dann warten wir mal auf Windows 8, vielleicht gibt’s da was Neues.

Update: es sieht so aus, dass die Webseiten von Microsoft Security Essentials auf manchen PCs die Meldung In Ihrem Land oder Ihrer Region nicht verfügbar anzeigen, und demnach ein Download nicht möglich ist. Der Fehler scheint einfach zu umgehen sein. Weiter lesen…

T-22: Neue Dialoge

30.09.2009 03:00:00 | Oliver Scheer

DSCF0103T-22: Neue Dialoge

Mittwoch, 30. September 2009

Nur noch 22 Tage bis zum Windows 7 Launch.

Heute befassen wir uns mit einem nicht ganz so neuen, aber trotzdem recht spannenden Thema. Die folgenden Funktionalitäten gibt bereits in Windows Vista, wo sie allerdings nahezu unentdeckt geblieben sind: die anpassbaren Dialoge. Mit dem Windows SDK wird schon seit einer Weile eine kleine Beispielbibliothek vertrieben, die den Zugriff auf die neuen Dialog-Funktionen ermöglichte – die Windows Vista Bridge für Managed Code.

Mehr

Kostenloser Virenschutz von Microsoft

29.09.2009 23:50:33 | Oliver Scheer

Microsoft Security Essentials ist der Echtzeitschutz für Ihren Heim-PC, der Sie vor Viren, Spyware und anderer bösartiger Software schützt.

Microsoft Security Essentials steht als kostenloser* Download von Microsoft zur Verfügung. Er ist einfach zu installieren und zu verwenden sowie stets auf dem aktuellen Stand. So können Sie sich sicher sein, dass Ihr PC immer durch die neuesten Technologien geschützt wird. Ob Ihr PC gut geschützt ist, können Sie ganz einfach feststellen - bei der Farbe Grün ist alles in Ordnung. So einfach ist das.

Microsoft Security Essentials wird automatisch und effizient im Hintergrund ausgeführt. Auf diese Weise können Sie Ihren Windows-basierten PC so nutzen, wie Sie möchten – ganz ohne Unterbrechungen oder lange Wartezeiten.

Download und weitere Informationen: hier.

Kostenloses Anti-Viren-Programm: Microsoft Security Essentials (MSE) [Download]

29.09.2009 17:50:02 | Kay Giza

Die neue Sicherheitslösung Microsoft Security Essentials steht für Privatnutzer ab sofort zum Download bereit. Der kostenlose Anti-Malware-Service schützt PCs vor Viren, Spyware, Rootkits, Trojanern und anderen schädlichen Programmen. Nach dem Herunterladen erfordert der Service keine Registrierung, es gibt keine Testversionen oder Abonnement-Verpflichtungen. Sämtliche Details, Download-Links, Informationen, welche Sicherheitsfunktionen in Microsoft Security Essentials enthalten sind, Systemanforderungen und Hinweise für Windows Live OneCare-Kunden finden 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

Microsoft Security Essentials verfügbar – kostenloser Virenschutz von Microsoft

29.09.2009 17:43:00 | Michael Schwarz

logo_mseNun ist es endlich soweit, nach einer langen Beta Phase, in der nur wenige teilnehmen durften, ist Microsoft Security Essentials verfügbar.

Microsoft Security Essentials ist der Echtzeitschutz für Ihren Heim-PC, der Sie vor Viren, Spyware und anderer bösartiger Software schützt.

Microsoft Security Essentials steht als kostenloser* Download von Microsoft zur Verfügung. Er ist einfach zu installieren und zu verwenden sowie stets auf dem aktuellen Stand. So können Sie sich sicher sein, dass Ihr PC immer durch die neuesten Technologien geschützt wird. Ob Ihr PC gut geschützt ist, können Sie ganz einfach feststellen - bei der Farbe Grün ist alles in Ordnung. So einfach ist das.

Microsoft Security Essentials wird automatisch und effizient im Hintergrund ausgeführt. Auf diese Weise können Sie Ihren Windows-basierten PC so nutzen, wie Sie möchten – ganz ohne Unterbrechungen oder lange Wartezeiten.

Microsoft Security Essentials läuft auf Windows XP (Service Pack 2, Service Pack 3); Windows Vista (Gold, Service Pack 1, Service Pack 2) sowie Windows 7. Hier geht’s zum Download…

Update: es sieht so aus, dass die Webseiten von Microsoft Security Essentials auf manchen PCs die Meldung In Ihrem Land oder Ihrer Region nicht verfügbar anzeigen, und demnach ein Download nicht möglich ist. Der Fehler scheint einfach zu umgehen sein. Weiter lesen…

Novell Forge schließt zum 15. Dezember

29.09.2009 17:39:00 | Michael Schwarz

Bekomme gerade eine E-Mail von Novell, dass diese die Source Code Umgebung Novell Forge zum 15. Dezember 2009 schließt:

When Novell Forge was first launched Novell recognized the need for a site dedicated to providing hosting services to a growing number of software development projects, many supporting our open source initiatives. Novell Forge quickly grew and was soon providing these service to nearly 1000 such projects. Demand for new projects has all but disappeared during the past two years while a number of additional project hosting options have begun that can provide a similar set of services to those of Novell Forge.

Now that there are many other options, Novell can turn its focus to other areas and pass the project hosting responsibilities to these other dedicated hosting sites. Novell will be decommissioning the Novell Forge system on December 15, 2009. What follows is a time line for this process which will allow owners of Novell Forge projects to locate new homes and make the transition to their new hosting site of choice.

Weiter unten in der E-Mail schlägt Novell auch gleich ein paar Alternativen vor:

Für Visual Studio Anwender bietet sich noch CodePlex unter http:///www.codeplex.com/ an.

Leere Toolbox für TFS Process Template Editor

29.09.2009 16:12:01 | Thomas Schissler

Mit dem Work Item Type Designer (WIT Designer) können Work Item Type Definitionen einfach und bequem angepasst werden. Der WIT Designer ist Bestandteil der TFS Power Tools.

Mit dem WIT Designer kann man auch die Workflows auf den Work Item Types grafisch bearbeiten. Dazu kann man aus der Toolbox einfach neue States und Transistions auf das Workflow-Diagramm ziehen … zumindest wenn die Toolbox Elemente enthält. Sollte die Toolbox einmal leer sein, dann gibt es eine nicht ganz elegante aber wirksame Methode, man löscht einfach alle toolbox*.tdb Dateien und zwar au dem Ordner

C:\Users\<USERNAME>\AppData\Local\Microsoft\VisualStudio\8.0.

Danach erscheinen die Elemente ganz normal.

Google Docs und Schrifterkennung (OCR) – Bilder in Dokumente umwandeln

29.09.2009 10:59:00 | Michael Schwarz

Klar, dass Google das schon länger macht: Bilder nach irgendwelchen Texten zu durchsuchen. Doch jetzt hat Google diese Funktionalität in die Google Docs API eingebunden.

Bis jetzt ist es noch kein Bestandteil der Google Docs Anwendung selber, aber es gibt schon Beispiele im Netz, die diese API verwenden, und dann das fertige Dokument in den eigenen Google Docs ablegt.

Finde ich irgendwie echt praktisch… bin mal gespannt, wann der erste Scanner (Hardware) mit einem Logo Powered by Google oder Working together with your Google Docs auf dem Markt erscheint, der anstatt eigener Software die Google Docs API verwendet.

Quelle: digital inspiration

Steve Ballmer ist unzufrieden mit Windows Mobile, ich auch!

29.09.2009 10:52:00 | Michael Schwarz

Gerade auf heise online gelesen, Steve Ballmer ist unzufrieden mit Windows Mobile:

Eigentlich hätten nur die Teilnehmer des jährlichen Microsoft Venture Capital Summit davon erfahren sollen. Doch einer von ihnen plauderte bei Twitter über Steve Ballmers Schelte am hauseigenen Windows Mobile 6.5. Dieser Kurzfassung ist zu entnehmen, dass der Software-Riese es bei seinem mobilen Betriebssystem "vergeigt" habe ("screwed up").

Nun, ich nutze schon seit Jahren Windows Mobile und bin eigentlich sehr zufrieden. Gerade wenn ich mit Windows PCs synchronisiere, die wiederum alle Outlook installiert haben, bin ich mit Windows Mobile gut dran. Weiter verwende ich mein Handy hauptsächlich zum Telefonieren, ab und an mal noch um einen synchronisierten RSS Feed zu lesen, das war’s dann aber auch schon.

Doch schaut man mal zu den anderen Anbietern, dann sieht das eigene Windows Mobile Gerät doch schnell richtig alt aus; gerade die Oberfläche (UI) kann mit keinem Gerät mehr mithalten, erinnert mich stark an Windows 3.1. Auch qualmt mein Windows Mobile ziemlich, wenn ich einen Kontakt in einer Liste von über 1000 Kontakten suche.

Ich selber brauche nicht diese neumodischen Funktionen wie MP3, Kamera,…, die aus einem Handy Telefon einen kleinen Multimedia-PC machen. Selbst mein Nokia 6310 ist immer noch im Einsatz, so lange hält heute einfach kein Akku mehr, und das macht mein Not-Handy so wertvoll für mich. Ich brauche ein Handy, mit dem ich schnell (und ich meine damit wirklich schnell und nicht so schnell wie Hersteller X oder Y) jemanden Anrufen kann, oder Notizen in irgendeiner Form ablegen kann.

Auch ich bin schon seit Monaten dran, mir ein neues Handy zu kaufen. Beim iPhone schreckt mich der Preis / Grundgebühr ab; ich bin selten unterwegs online, und nur online zu gehen, weil man es eben für viel Geld kann, ist für mich kein Grund. Ich hatte auch auf Windows Mobile 7 gehofft, aber das verzögert sich immer und immer wieder. Warum auf Windows Mobile 6.5 umsteigen, wenn’s immer noch nicht rund genug läuft? Microsoft macht mit den Ankündigungen zu Windows Mobile 7 die heutigen Käufer noch unentschiedener, man kauft sich ja schließlich nicht jedes Jahr ein neues Handy.

Ich werde mal abwarten, und mich nächste Woche in einen T-Punkt mal umschauen. Ob und wann die Windows Mobile 6.5 Geräte nämlich im Laden zu finden sind, ist nämlich noch nicht bekannt.

Windows 7 Enterprise – 90-Tage-Testversion

29.09.2009 09:17:59 | Oliver Scheer

Willkommen bei der 90-Tage-Testversion von Windows 7. Diese Version wurde speziell für IT-Professionals entwickelt, damit Sie Ihre Software und Hardware mit der finalen Version des Produkts testen können. Darüber hinaus erhalten Sie Gelegenheit, sich mit den wichtigsten Verbesserungen im Vergleich zu vorherigen Versionen des Windows-Betriebssystems vertraut zu machen und selbst zu erleben, wie Windows 7 es Ihnen ermöglicht, die Produktivität, Sicherheit und Verwaltbarkeit Ihrer PC-Umgebung zu optimieren.

Ist diese Testversion wirklich die richtige für Sie?

Falls Sie für eines der unten aufgeführten Programme qualifiziert sind, haben Sie möglicherweise bereits Zugriff auf die finalen Bits und müssen die 90-Tage-Testversion daher nicht herunterladen.

Partnerprogramm
MSDN-Abonnent (Entwickler)
TechNet Plus-Abonnent
Volumenlizenz-/Software Assurance-Kunde

Was Sie wissen müssen:

Diese Testversion wurde für IT-Professionals konzipiert, die sich im Hinblick auf den Unternehmenseinsatz für Windows 7 Enterprise interessieren. Lesen Sie daher vor der Installation die folgenden Informationen, um sich über die Risiken und die wichtigsten Fakten zu informieren.

Falls Sie kein IT-Professional sind bzw. nicht beruflich Unternehmensnetzwerke verwalten, raten wir von der Installation ab.

Richtlinien zur Verwendung:

  • Schützen Sie Ihren PC und Ihre Daten. Sichern Sie Ihre Daten und testen Sie Windows 7 nicht auf dem primären PC, den Sie privat oder beruflich nutzen.
  • Sie haben 10 Tage Zeit, um das Produkt zu aktivieren. Nach Ablauf dieses Zeitraums wird das System jeweils nach einer Stunde heruntergefahren, bis Sie es aktivieren. Benötigen Sie Informationen zur Aktivierung? Nutzen Sie unsere FAQs.
  • Die 90-Tage-Testversion ist eine Vollversion von Windows 7 Enterprise, also die Version, mit der die meisten von Ihnen in ihrer Unternehmensumgebung arbeiten werden. Sie benötigen dafür keinen Product Key (dieser ist im Download integriert).
  • Die 90-Tage-Testversion wird nach Ablauf des 90-tägigen Evaluierungszeitraums jeweils nach einer Stunde heruntergefahren.
  • Die 90-Tage-Testversion steht für einen begrenzten Zeitraum und in begrenzter Menge zur Verfügung. Der Download ist bis 31. März 2010 verfügbar (bzw. solange der Vorrat reicht).
  • Nach Ablauf des 90-tägigen Testzeitraums können Sie Windows 7 Enterprise weiterhin verwenden, indem Sie Windows 7 erwerben und eine Neuinstallation durchführen, einschließlich Treiber und Anwendungen. Bitte beachten Sie, dass Windows 7 Enterprise nicht über Einzelhandelskanäle vertrieben wird.
  • Technische Details/Updates/Fragen: Bitte lesen Sie unsere FAQs oder besuchen Sie das Windows 7-Supportforum.
  • Halten Sie sich auf dem Laufenden. Allgemeine technische Informationen und Neuigkeiten finden Sie im Windows 7 Blog von Microsoft Deutschland oder im Blog der Springboard-Reihe (engl.). Sie suchen technische Leitfäden, Tipps und Tools? Besuchen Sie dasdeutschsprachige Windows 7 TechCenter (Springboard-Reihe) auf TechNet.
  • Halten Sie Ihren PC auf dem neuesten Stand: Stellen Sie sicher, dass Sie Automatische Updates in Windows Update aktiviert haben - für den Fall, dass wir Updates für die 90-Tage-Testversion veröffentlichen.
  • Microsoft-Partner: Mehr über Windows 7 erfahren Sie im Microsoft-Partnerportal.

Mindestsystemanforderungen*:

  • Computer mit 1 GHz-Prozessor oder schneller – 32-Bit (x86) oder 64-Bit (x64)
  • 1 GB RAM (32-Bit-Version)/2 GB RAM (64-Bit-Version)
  • 16 GB verfügbarer Speicherplatz (32-Bit)/20 GB (64-Bit)
  • DirectX 9-Grafikprozessor mit WDDM 1.0 oder höherem Treiber
  • DVD-kompatibles Laufwerk
  • Internetzugang (es fallen möglicherweise Gebühren an)

*Hinweis: Einige Produktfeatures von Windows 7, wie das Ansehen und Aufzeichnen von Fernsehsendungen, BitLocker oder die Bildschirmnavigation durch Berührung, können den Einsatz neuerer oder zusätzlicher Hardware erfordern. Der Windows XP-Modus erfordert zusätzlich 1 GB RAM und 15 GB verfügbaren Speicherplatz sowie einen für die Hardwarevirtualisierung geeigneten Prozessor mit aktiviertem Intel VT oder AMD-V.
Holen Sie sich den Download

Die 32-Bit- und 64-Bit-Versionen von Windows 7 sind in fünf Sprachen verfügbar: Deutsch, Englisch, Französisch, Japanisch und Spanisch. Wählen Sie die Version aus, die zu dem von Ihnen verwendeten System passt, und geben Sie die Sprache für die Registrierung an. Laden Sie anschließend die 90-Tage-Testversion herunter.

Das Herunterladen der 90-Tage-Testversion von Windows 7 kann einige Stunden dauern. Die genaue Zeit hängt von Ihrem Provider, der verfügbaren Bandbreite und dem Datenverkehr ab. Sobald der Download begonnen hat, sind aber Ihrerseits keine weiteren Eingaben erforderlich. Sie müssen also nicht am PC bleiben, bis der Vorgang abgeschlossen ist. Im Falle einer Unterbrechung wird der Download an der jeweiligen Stelle fortgesetzt. Einzelheiten finden Sie in diesen FAQ. Besuchen Sie bei technischen Fragen das Windows 7-Supportforum.

Download: hier

T-23: Suchen mit der Windows Shell

29.09.2009 00:00:00 | Oliver Scheer

23_2 Dienstag, 30. September 2009

Nur noch 23 Tage bis zum Launch von Windows 7.

Ein altes Sprichwort sagt: „Wer suchet, der findet.“. Warum lassen wir nicht unsere eigenen Anwendungen suchen? Windows 7 liefert die notwendige Search API dafür mit.

Um die Search API aus .NET-Code ansprechen zu können, ist wirklich nicht viel nötig. Man muss lediglich das Windows API Code Pack einbinden und schon kann in wenigen Zeilen der eigene Suchclient entwickelt werden.

Mehr

HowToCode: Ein Blick in die Applikation – Logging und Log4Net Dashboard

28.09.2009 22:33:13 | Robert Mühsig

Es ist sehr wichtig zu wissen, was nach dem Deployment einer Anwendung “im innern” passiert – besonders im Fehlerfall kommt man bei einer Black-Box nicht sehr weit. Dieser Blogpost soll als eine Art Toolsammlung sein, die sich bei uns bewährt haben. Die Basis: Die Basis bildet Log4Net. Es gibt viele Provider, sodass man das Log entweder in [...]SHARETHIS.addEntry({ title: "HowToCode: Ein Blick in die Applikation – Logging und Log4Net Dashboard", url: "http://code-inside.de/blog/2009/09/28/howtocode-ein-blick-in-die-applikation-logging-und-log4net-dashboard/" });

Web Services in Silverlight synchron aufrufen

28.09.2009 20:18:00 | Stefan Lange

Einen Web Service aus Silverlight heraus aufzurufen ist sehr einfach. Man importiert den Service über einen Wizard und Visual Studio generiert alle notwendigen Dateien und Funktionen. Im Gegensatz zum normalen .net Framework können die Service Funktionen aber nur asynchron aufgerufen werden. So wird verhindert, dass ein wirklich sehr unerfahrener Programmierer eine Service Funktion direkt aus dem UI Thread synchron aufruft und damit nicht nur seine Silverlight Anwendung, sondern den gesamten Browser für die Zeit des Funktionsaufrufes einfriert. An sich ja gut gemeint, aber bei ernsthaften Anwendungen ist das Fehlen von synchronen Service Aufrufen schon lästig.

Wenn man beispielsweise in einem Background Thread mehrere Web Service Aufrufe nacheinander oder in einer Schleife ausführen möchte, ist dies ebenfalls nur asynchron möglich. Man muss also in so einem Fall überflüssigerweise mit Completed Handlern arbeiten, obwohl ein synchroner Aufruf hier nicht nur ungefährlich,  sondern genau richtig wäre. Hier würde ein synchroner Aufruf zu sequenziellem und übersichtlicherem Code führen.

Wenn man sich mit Web Services gut auskennt, kann man natürlich über eine ChannelFactory seine synchronen Aufrufe selber bauen, wie es beispielsweise in dem hervorragenden Artikel von Daniel Vaughan beschrieben ist. Dies setzt aber ein tieferes Verständnis von der Architektur von Web Services voraus, das man sich genau jetzt nicht aneignen will, weil man ja gerade mit seiner ersten großen Silverlight Anwendung genug zu tun hat.

Der vom mir entwickelte einfache Lösungsweg zum synchronen Aufruf von Web Services besteht in der Klasse SyncCallHelper, die unmittelbar nachdem asynchronen Aufruf der Service Funktion den laufenden Thread so lange anhält, bis der asynchrone Aufruf beendet ist. Die Verwendung sieht beispielsweise so aus:

var syncHelper = new SyncCallHelper<SampleServiceReference.DoSomeWorkCompletedEventArgs>();
client.DoSomeWorkCompleted += syncHelper.OnCompleted;
client.DoSomeWorkAsync(syncHelper);

if (syncHelper.Wait() && syncHelper.Succeeded)
{
  // success
  var result = syncHelper.EventArgs.Result;
}

SyncCallHelper blockiert in der Funktion Wait über ein ManualResetEvent den laufenden Thread so lange, bis die Service Funktion fertig ist und OnCompleted aufgerufen hat. Natürlich darf man diesen Code nur in einem Background Thread verwenden. Falls man ihn versehentlich doch mal aus dem UI Thread heraus aufruft, wird eine Exception ausgelöst. Im UI Thread würde der Code auch gar nicht funktionieren. Weil in diesem Fall Wait den UI Thread blockiert, wird der OnCompleted Handler niemals aufgerufen, da dieser in einem Synchronization Context auf den UI Threads wartet. Es läge also ein klassischer Deadlock vor.

Hier der Quellcode von SyncCallHelper:

namespace System.ComponentModel
{
  /// <summary>
  /// Helper class for synchronized asynchron WCF service calls.
  /// </summary>
  public class SyncCallHelper<T> where T : AsyncCompletedEventArgs
  {
    /// <summary>
    /// Initializes a new instance of the <see cref="SyncCallHelper<T>"/> class
    /// and sets the event semaphore to non-signaled.
    /// </summary>
    public SyncCallHelper()
    {
      Event = new ManualResetEvent(false);
    }

    /// <summary>
    /// Blocks the current thread until the current System.Threading.WaitHandle receives a signal.
    /// </summary>
    public bool Wait()
    {
      if (Deployment.Current.CheckAccess())
        throw new InvalidOperationException("SyncCallHelper must not be used in UI thread.");

      return Event.WaitOne();
    }

    /// <summary>
    /// Blocks the current thread until the current System.Threading.WaitHandle receives a signal,
    /// using 32-bit signed integer to measure the time interval.
    /// </summary>
    public bool Wait(int millisecondsTimeout)
    {
      if (Deployment.Current.CheckAccess())
        throw new InvalidOperationException("SyncCallHelper must not be used in UI thread.");

      return Event.WaitOne(millisecondsTimeout);
    }

    /// <summary>
    /// Blocks the current thread until the current instance receives a signal,
    /// using a System.TimeSpan to measure the time interval.
    /// </summary>
    public bool Wait(TimeSpan timeout)
    {
      if (Deployment.Current.CheckAccess())
        throw new InvalidOperationException("SyncCallHelper must not be used in UI thread.");
      return Event.WaitOne(timeout);
    }

    /// <summary>
    /// Gets a value indicating whether the service call is succeeded.
    /// </summary>
    public bool Succeeded
    {
      get { return EventArgs != null && EventArgs.Error == null && !EventArgs.Cancelled; }
    }

    /// <summary>
    /// Gets the event semaphore used to wait for completion of asynchronous WCF service calls.
    /// </summary>
    public ManualResetEvent Event { get; private set; }

    /// <summary>
    /// Gets the event args that contains the result of the WCF service call.
    /// Is null until the WCF service call has completed.
    /// </summary>
    public T EventArgs { get; private set; }

    /// <summary>
    /// Called when the WCF service call has completed.
    /// </summary>
    public void OnCompleted(object sender, T e)
    {
      var res = (SyncCallHelper<T>)e.UserState;
      res.EventArgs = e;
      res.Event.Set();
    }
  }
}

Übrigens kann man mit der Funktion Deployment.Current.CheckAccess auf einfache Weise überall im eigenen Code testen, ob man sich gerade im UI Thread oder in einem Background Thread befindet.

Hier nun noch ein Beispielprogramm, dass in einem Background Thread zwei Service Funktionen hintereinander aufruft:

void worker_DoWork(object sender, DoWorkEventArgs e)
{
  // This code is executed in background thread
  string result;

  var client = new SampleServiceClient();

  // Do 1st service call with no parameters
  var syncHelper1 = new SyncCallHelper<DoSomeWork1CompletedEventArgs>();
  client.DoSomeWork1Completed += syncHelper1.OnCompleted;
  client.DoSomeWork1Async(syncHelper1);

  if (syncHelper1.Wait() && syncHelper1.Succeeded)
  {
    result = syncHelper1.EventArgs.Result;
  }
  else
  {
    e.Result = "Error";
    return;
  }

  // Do 2nd service call with one parameter
  var syncHelper2 = new SyncCallHelper<DoSomeWork2CompletedEventArgs>();
  client.DoSomeWork2Completed += syncHelper2.OnCompleted;
  client.DoSomeWork2Async(42, syncHelper2);

  if (syncHelper2.Wait() && syncHelper2.Succeeded)
  {
    result += syncHelper2.EventArgs.Result;
  }
  else
  {
    e.Result = "Error";
    return;
  }

  e.Result = result;
}

Der Code läuft wie man sieht sequentiell ab und wird nicht durch OnCompleted Handler zerstückelt.

Noch ein wichtiger Hinweis: Im Beispielcode wird ein Background Worker direkt im Event Handler eines Button Clicks in der Code Behind Datei angelegt. So darf man ausschließlich in Beispielcode programmieren, der einen bestimmten Aspekt herausstellen soll!

Fazit

Microsoft möchte verhindern, dass man mit synchronen Web Service Aufrufen den Browser vorübergehend einfriert. Das ist absolut richtig und einen gewissen Schutz vor unsauberen Programmierpraktiken vorzusehen ist auch nicht verkehrt. Eine wesentliche bessere Lösung wäre es allerdings gewesen, die synchronen Web Service Aufrufe zusätzlich anzubieten und einfach eine InvalidOperationException auszulösen, wenn man sie aus dem UI Thread heraus versucht aufzurufen.

Hier der gesamte Quellcode des Beispiels zum Downloaden:

SynchronousWcfCalls.zip (40,99 kb)

Zweiter Start mit NHibernate

28.09.2009 15:05:00 | Jürgen Gutsch

Es ist eine ganze Weile her seit ich mir das letzte Mal NHibernate angeschaut habe. Damals hielt ich NHibernate für zu unflexibel und zu kompliziert, bzw. aufwändig in der Konfiguration. Zumindest damals musste das Mapping der Datenbank auf die einzelnen Objekte in XML-Dateien geschrieben werden. Anschließend wurde per externes Programm, aus den Mapping Klassen generiert, die dann für den Zugriff auf die Datenbank genutzt werden konnten. Gerade die Nutzung eines externen Tools zur Generierung der nötigen Klassen erschien mir sehr umständlich.

Vor ein paar Wochen war es wieder so weit, dass ich mir NHibernate angeschaut habe.

Der Grund waren ein paar positive Äußerungen in der .NET Community. Dort war immer wieder zu lesen, wie gut NHibernate im Zusammenhang mit Fluent NHibernate und LINQ to NHibernate sei. Alleine schon die Aussicht auf LINQ und de Konfiguration über Fluent Interfaces machten mich wieder neugierig auf den am häufigsten erwähnten OR-Mapper.

Enttäuscht wurde ich nicht, ganz im Gegenteil. Mit dem Fluent NHibernate und LINQ to NHibernate ist es eine Freude mit NHibernate zu arbeiten. Nicht nur dass man ganz ohne XML-Konfigurationen auskommt, mit Hilfe des Fluent NHibernate lässt sich das Mapping und die Konfiguration per .NET Code schreiben. Also ob das nicht genug wäre, lässt sich mit Fluent NHibernate sogar die Datenbank dann aus dem erstellten Mapping und der Konfiguration generieren.

Hier mal das Ergebnis meiner ersten Spielerei.

Benötigt werden Fluent NHibernate (welches unter folgender URL heruntergeladen werden kann: http://fluentnhibernate.org/, die NHibernate.dll ist dort bereits enthalten) und LINQ to NHibernate (http://sourceforge.net/projects/nhibernate/files/

Vorbereitung

Angefangen hab ich mit der Erstellung meiner Daten-Objekte

Person.cs

public class Person: Entity<Person>
{
  protected override void Initialize()
  {
    Projects = new List<Project>();
    Tasks = new List<Task>();
  } 
  public virtual List<Project> Projects { get; set; }
  public virtual List<Task> Tasks { get; set; }
  public virtual string FirstName { get; set; }
  public virtual string LastName { get; set; }
  public virtual string Email { get; set; }
  public virtual string Telefone { get; set; }
}

Projekt.cs

public class Project: Entity<Project>
{
  protected override void Initialize()
  {
    Persons = new List<Person>();
    Tasks = new List<Task>();
  } 
  public virtual List<Person> Persons { get; set; }
  public virtual List<Task> Tasks { get; set; }
  public virtual string Name { get; set; }
  public virtual string Description { get; set; }
  public virtual DateTime StartDate { get; set; }
  public virtual DateTime EndDate { get; set; }
}

Task.cs

public class Task: Entity<Task>
{
  public virtual Person Person { get; set; }
  public virtual Project Project { get; set; }
  public virtual string Name { get; set; }
  public virtual string Description { get; set; }
  public virtual DateTime StartDate { get; set; }
  public virtual DateTime EndDate { get; set; }
}

Wie man jetzt evtl. erkennen kann ist eine kleine, einfache Aufgabenverwaltung geplant. Alle drei Objekte erben von einer generischen Basisklasse die weitere Funktionen und die Eigenschaft Id, vom Typ Guid – die in jeder Klasse enthalten ist – bereitstellt.

Mapping

Jetzt wird es dann eigentlich erst interessant: per Fluent NHibernate müssen die Mappings erzeugt werden. Als erste für die Person-Klasse:

public class PersonClassMap: ClassMap<Person>
{
  public PersonClassMap()
  {
    Table("Persons");
    Id(d => d.Id).GeneratedBy.Guid();
    Map(d => d.FirstName).Not.Nullable().Length(50);
    Map(d => d.LastName).Not.Nullable().Length(50);
    Map(d => d.Email).Not.Nullable().Length(50);
    Map(d => d.Telefone).Not.Nullable().Length(50);
    HasMany(d => d.Tasks)
      .Cascade.All()
      .KeyColumn("PersonId")
      .Inverse();
    HasManyToMany(d => d.Projects)
      .Cascade.All()
      .Table("Person2Project")
      .ParentKeyColumn("PersonId")
      .ChildKeyColumn("ProjectId");
  }
}

Als erste wird hier der Name der Datenbank-Tabelle definiert. Anschließend mit der Methode Id() der Primärschlüssel. GeneratedBy.Guid() gibt an dass es sich um einen Autogenerierten Guid-Wert handeln soll.

Die Methode Map ist die einfachste, sie mappt lediglich die Eigenschaften auf die Felder in der Datenbank. Not.Nullable()und Length(50) sind sprechend.

Interessant wird es mit HasMany(), hier wird definiert, dass einer Person mehrere Aufgaben zugewiesen sein können. KeyColumn("PersonId") zeigt auf den Fremdschlüssel in der Tabelle „Tasks“. Inverse zeig an dass es das Gegenstück zur Referenzierung in der Klasse Task ist. Dort sieht die Referenz wie folgt aus:

References(r => r.Person, "PersonId");

Die Angabe des Spaltennamens (2. Parameter) ist notwendig wenn man diesen nicht autogeneriert haben möchte, einem bestimmten Namensschema in der Datenbank folgen möchte oder bereits einen Namen in der Datenbank vergeben hat Kniffliger als HasMany() ist HasManyToMany() hier wird eine n:m Beziehung dargestellt und definiert, dass mehrere Personen mehreren Projekten zugeordnet werden können. Wenn der Tabellenname nicht autogeneriert werden soll muss dieser angegeben werden, genauso wie die Spalten. Erscheint zunächst einfach, allerdings muss man beachten, dass das Gegenstück (im Mapping für die Projekte) rückwärts verweist:

HasManyToMany(d => d.Persons)
  .Cascade.All()
  .Table("Person2Project")
  .ParentKeyColumn("ProjectId")
  .ChildKeyColumn("PersonId")
  .Inverse();

Man sieht, die Spaltennamen für ParentKeyColumn sind vertauscht und es muss wieder ein Inverse() angehängt sein.

Die anderen beiden Mappings sehen wie folgt aus:

public class ProjectClassMap: ClassMap<Project>
{
  public ProjectClassMap()
  {
    Table("Projects");
    Id(d => d.Id).GeneratedBy.Guid();
    Map(d => d.Name).Not.Nullable().Length(50);
    Map(d => d.Description).Not.Nullable().Length(4000);
    Map(d => d.EndDate).Not.Nullable();
    Map(d => d.StartDate).Not.Nullable();
    HasManyToMany(d => d.Persons)
      .Cascade.All()
      .Table("Person2Project")
      .ParentKeyColumn("ProjectId")
      .ChildKeyColumn("PersonId")
      .Inverse();
    HasMany(d => d.Tasks).Cascade.All().KeyColumn("ProjectId").Inverse();
  }
}

public class TaskClassMap: ClassMap<Task>
{
  public TaskClassMap()
  {
    Table("Tasks");
    Id(d => d.Id).GeneratedBy.Guid();
    Map(d => d.Name).Not.Nullable().Length(50);
    Map(d => d.Description).Not.Nullable().Length(4000);
    Map(d => d.EndDate).Not.Nullable();
    Map(d => d.StartDate).Not.Nullable();
    References(r => r.Project, "ProjectId");
    References(r => r.Person, "PersonId");
  }
}

Konfiguration

Im nächsten Schritt muss die Verbindung zur Datenbank konfiguriert werden und bei Bedarf eine SessionFactory erzeugt werden. Dazu habe ich mit eine statische Klasse angelegt die wiederum zwei Methode enthält: Die erste Methode erstellt die Konfiguration und die Zweite Methode erstellt die SessionFactory anhand dieser Konfiguration.

public static FluentConfiguration CreateConfiguration()
{
  return Fluently.Configure()
    .Database(MsSqlConfiguration.MsSql2005
      .ConnectionString(c => c.FromAppSetting("DbConnection"))
      .ShowSql())
    .Mappings(m => m.FluentMappings
      .AddFromAssemblyOf<IEntity>());
}

Im ersten Teil der Fluently Configuration wird die Verbindung zur Datenbank definiert. Hierfür gibt es verschiedenste Möglichkeiten. (Mehr Möglichkeiten lassen sich aus der Dokumentation entnehmen: http://wiki.fluentnhibernate.org/Main_Page) Ich habe MS SQL 2005 als Datenbankserver gewählt und lese den ConnectionString aus den App.Settings, bzw. der Web.Config aus. Außerdem möchte ich bei Fehlern den SQL-String sehen: ShowSql()

Anschließend wird das Mapping zugewiesen. Das geschieht ganz einfach indem man dem Fluent NHibernate sagt, wo die Assembly mit den Mappings liegen. Es werden automatisch alle Klassen als Mapping erkannt die von ClassMap<T> erben.

public static ISessionFactory CreateSessionFactory()
{
  return CreateConfiguration().BuildSessionFactory();
}

Die zweite Methode ruft die erste auf und erstellt eine neue SessionFactory. Ich habe die Configuration von der Erstellung der Session getrennt um für die Generierung der Datenbank einen Konfigurationspunkt – für die Generierung der Datenbank – dazwischen zuhängen, die ich für die einfache Erzeugung der SessionFactory nicht benötige.

public void SetupDatabase()
{
  FluentConfiguration conf = NHConfiguration.CreateConfiguration();
  conf.ExposeConfiguration(BuildSchema).BuildSessionFactory();
}
private static void BuildSchema(Configuration conf)
{
  new SchemaExport(conf).Drop(false, true);
  new SchemaExport(conf).Create(false, true);
}

Mit der Methode ExposeConfiguration() werden Anweisungen zum Exportieren des Datenbankschemas eingebunden. Das Schema wird in dem Fall in die Datenbank selber exportiert. Es wird also die Datenbank erstellt.

Es empfiehlt sich die SessionFactory global, anwendungsweit bereit  zu halten, da die Erzeugung der Factory sonst recht unperformant ist. Schließlich muss das Schema erst anhand des erstellten Mappings generiert werden

private static ISessionFactory sessionFactory;
public static ISessionFactory SessionFactory
{
  get
  {
    if (sessionFactory == null)
      sessionFactory = NHConfiguration.CreateSessionFactory();
    return sessionFactory;
  }
}

LINQ to NHibernate

Eine Session kann dann innerhalb eines Using-Blocks geöffnet werden:

using(var session = sessionFactory.OpenSession())
{
}

Innerhalb des Blocks kann dann endlich auch LINQ to NHibernate zum Einsatz kommen:

var q = from a in session.Linq<Person>()
        where a.FirstName != ""
        select a;

Die generische Methode Linq<T>() liefert ein Ergebnis vom Typ INHibernateQueryable<T> das wiederum von IQueryable<T> und IEnumerable<T> und somit wiederum bequem per LINQ abgefragt werden kann.

Fazit

NHibernate ist dadurch natürlich recht schnell einsetzbar, bequemer und auch etwas flexibler, denn das Mapping und auch die Konfiguration lassen sich theoretisch so natürlich auch dynamisch erzeugen. Die Benutzung von LINQ erleichtert die Abfragen ungemein. Fluent NHibernate macht die Konfiguration und das Mapping lesbarer.

Ich denke mit den beiden oben vorgestellten Erweiterungen ist NHibernate wirklich eines der genialsten OR-Mapper.

Update:
Das Beispielprojekt gibt es hier zum herunterladen: NHibernateTestApplication.zip (2.4MB)

DotNetKicks-DE Image

Expression Studio 3 Launch

28.09.2009 12:05:05 | Oliver Scheer

Es ist soweit: Ab dem 1.Oktober ist die deutsche Version von Expression Studio 3 im Handel erhältlich. Neue Features wie SketchFlow und SuperPreview sorgen für verbesserte Web-Entwicklung und Web-Design.

Expression Web 3, das Rund-um-Sorglos Paket für alle Webdesigner, beinhaltet nun auch Expression Design 3 und Expression Encoder 3, um Vektorgrafiken und hochauflösende Silverlight Videos in eine Webseite einzufügen. Expression Web 3 enthält viele neue Funktionen. So kann mit SuperPreview beispielsweise eine Webseite simultan für verschiedenste Browser getestet werden, um eine perfekte Darstellung sicherzustellen.

Mit Expression Blend 3, das in Expression Studio 3 enthalten ist, revolutioniert Microsoft die Erstellung von Prototypen in der Anwendungsentwicklung. Mit Hilfe des neuen Features SketchFlow können Nutzer frei wählen, wie realitätsnah ein Prototyp sein soll, können Feedback vom Kunden einholen und direkt basierend auf diesen ersten Entwürfen das Softwareprojekt weiterentwickeln.

Sowohl Expression Studio 3 als auch Expression Web 3 sind in einer Vollversion und in einer günstigeren Upgrade-Version erhältlich.

Weitere Informationen und natürlich alle kostenlosen Testversionen finden Sie online unter www.microsoft.de/expression. Aktuelle Informationen rund um Expression, Silverlight und RIAs finden Sie auch auf dem deutschen RIA-Blog http://blogs.msdn.com/riablog.

Windows 7, Internet Explorer 8 und das Session Problem

28.09.2009 08:51:00 | Michael Schwarz

Jeder kennt es inzwischen, das Problem, dass der Internet Explorer 8 standardmäßig immer nur eine Session kennt, d.h. wenn man z.B. seine E-Mails bei Gmail Google Mail liest, dann kann man das immer nur mit einem Konto gleichzeitig tun (Frame Process Merging)

Um das Problem zu umgehen bzw. einfach das Verhalten früherer Internet Explorer zu erhalten, gibt es das neue Argument –nomerge.

Doch wie muss man vorgehen, damit der IE das nun auch immer verwendet?

Am einfachsten ist es, wenn man unter Windows 7 die Windows Taste drückt, und dann erst einmal “Internet Explorer” (ohne Anführungszeichen) eingibt. Ganz oben in den Suchergebnissen erscheint ein Link zum Internet Explorer, dessen Eigenschaften bearbeiten wir jetzt, in dem wir auf ihn mit der rechten Maustaste, und dann auf Eigenschaften klicken. Dem Pfad (Ziel) hängen wir nun einfach ein –nomerge an, sieht dann etwa so aus:

"C:\Program Files\Internet Explorer\iexplore.exe" –nomerge

Nebenbemerkung: ja, der Pfad mit der englischen Bezeichnung für “Programme” stimmt, das ist unter Windows 7 so.

Nun können wir die alte Internet Explorer Verknüpfung aus der Taskleiste löschen, noch einmal nach “Internet Explorer” suchen, und diesen dann an die Taskleiste heften.

Ich persönlich habe mich daran gewöhnt…

DotNet Expansions Framework

28.09.2009 00:22:00 | Rainer Hilmer

For several years of my developer career I gathered useful code into my own framework. Formerly known as “Cyrons Framework” the new name is “.Net Expansions”.

The actual build 1.0.3554.36533 consists of the following:

  • DotNetExpansions Namespace
    • ExceptionEventArgs
    • Extension methods
      • Limit<T>
      • LimitRange<T>
      • TimeStamp
      • ExactTimeStamp
    • LimitEventArgs
    • StateManager // (Multiple Undo/Redo for everything!)
  • DotNetExpansion.Collections Namespace
    • CollectionContainer<T>
    • SharedCollectionContainer<T>
  • DotNetExpansions.CollectiveEvent Namespace
    • CollectiveEventContract // (many events, one or many listener(s))
    • CollectiveEventArgs
  • DotNetExpansions.Forms Namespace
    • ControlCommunicationsManager // (cross thread handling of Windows forms controls)
    • ControlExtensions (at the time being it consists of a cross thread control invoker developed by Marcell Spies)
    • Fading Message Box // (well known)
    • ProgressionStateInfo // (informs a listener about the progression of a function)
  • DotNetExpansions.IO Namespace
    • CompressedBinaryFileIO // (easy saving and loading of any data in compressed binary format)
    • XmlIo // (easy saving and loading of any business objects to/from XML files)
  • DotNetExpansions.Logger Namespace
    • Logger // (base class for specific logging classes)
    • TextLogger
    • SqlLogger (not fully finished yet but usable)
    • more loggers to come…
  • DotNetExpansions.MathLib Namespace // (growing)
    • Mathematical and physics constants
    • mathematical conversions
    • Statistics
  • DotNetExpansions.MathLib.Geometry Namespace
    • // Too many to list here!
  • DotNetExpansions.MathLib.Physics Namespace
    • Electronics
    • Kinetics
  • DotNetExpansions.ParallelSearch Namespace
    • ParallelFileSearch
  • DotNetExpansions.Picture Namespace
    • PictureHandler // (easy handling of image IO in Windows forms)
  • DotNetExpansions.Time
    • Time // (easy handling for many aspects of time).

The download package (Zip file or Visual Studio 2008 solution) contains the following items:

  • DotNetExpansions.dll
  • DotNetExpansions.xml (intellisense information)
  • A complete help file in chm format with samples for everything in the framework
  • A special guide in PDF format for the XMLIo class. This is a first issue of a new series I am working on. Once it’s ready it will be a complete book about the .Net Expansions Framework. Please give me feedback about the content and the design.

 

You can download the latest release of DotNet Expansions at
http://cyrons.svn.beanstalkapp.com/general/DotNetExpansions/tags/

or check out a copy of the project at
http://cyrons.svn.beanstalkapp.com/general/DotNetExpansions/trunk

 

This framework has grown over years and maybe I would do some of the code in a different way today but nonetheless everything works fine – does it?

Your feedback is appreciated.

LEGAL NOTICE

This software is GPL. Do with it whatever you want.

Documentation copyright by Rainer Hilmer. You may not change or redistribute it without my permission.

DotNetKicks-DE Image

WebsiteSpark ist da – Alles für umme für kleine Firmen!

28.09.2009 00:14:57 | Jan Schenk



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/09/27/websitespark-ist-da-alles-f-r-umme-f-r-kleine-firmen.aspx'; tweetmeme_source = 'jansche';

WebsiteSpark ist ein neues globales Programm, mit dem Microsoft kleinere, professionelle Dienstleister im Bereich Entwicklung und Gestaltung von Webseiten unterstützen möchte.

Das Angebot stellt Entwicklern umfangreiche Ressourcen für die unterschiedlichen Gestaltungsaufgaben im Webumfeld zur Verfügung: Software und Lösungen von Microsoft sowie damit verwandte Tools, Training und Support. Durch die Verbindung von Web-Profis und Hostern mit Kunden, Partnern und anderen IT-Experten sowie neuen Technologien wird die Verwirklichung neuer Geschäftsmöglichkeiten gefördert.

WebsiteSpark-Programm

· Unternehmen mit bis zu zehn Mitarbeitern können drei Jahre lang am WebsiteSpark-Programm teilnehmen. Die Teilnahme ist kostenlos, bei Abmeldung oder Auslaufen des Programms wird lediglich eine Schutzgebühr von 100 US-Dollar (etwa 70 Euro) erhoben. Das WebsiteSpark-Programm bietet Zugriff auf:

· Microsoft Webdesign- und Entwicklungslösungen, inklusive drei Lizenzen für Microsoft Visual Studio 2008 Professional Edition, zwei Lizenzen für Microsoft Expression Web 3 und eine Lizenz für Microsoft Expression Studio 3

· Zwei Produktionslizenzen für Microsoft Windows Web Server 2008 (oder R2 nach Verfügbarkeit) und zwei Produktionslizenzen für Microsoft SQL Server 2008 Web Edition

· Die Website-Bedienoberfläche des Drittanbieters DotNetPanel

· Zwei technische Supportanfragen pro Unternehmen

· Community-Support durch Netzwerkpartner, Hosting-Partner und andere Experten mit entsprechenden Services und Technologien

· Alle technischen Newsgroups auf MSDN

· Unbegrenzten Programm-Support für nicht-technische Fragen

www.microsoft.com/web/websitespark

T-24: Die Multifunktionsleiste

28.09.2009 00:00:00 | Oliver Scheer

24_0Montag, 28. September 2009

Nur noch 24 Tage bis zum Windows 7 Launch.

Heute befassen wir uns mit einem alten Bekannten: der Multifunktionsleiste. Die Multifunktionsleiste wurde neu in Windows 7 integriert und entspricht nahezu der Multifunktionsleiste von Office 2007. Nahezu bedeutet dabei, dass sie konsequent weiterentwickelt wurde.

Mehr

Federated Search: Direkt aus Windows - mit Bing - MSDN durchsuchen

27.09.2009 11:33:05 | Kay Giza

Um es mit den Worten meines Kollegen Oliver zu sagen, wow, das ist echt genial. Man braucht nun nicht mehr extra an den Ort gehen, an dem man suchen möchte, sondern kann die Suche direkt in den Windows Explorer einbauen. Das heißt, ich kann zentral von einer Stelle alles Suchen, was mein Entwickler-Herz begehrt. So ist es z.B. möglich die Bing-Suche direkt vom Explorer aus zu starten.

Die "Federated Search" in Windows ist wirklich eine sehr große Erleichterung, wenn man sich einmal daran gewöhnt hat. Sagen wir es so, Sie können nicht nur Dateien auf Ihrem PC suchen (im Windows Explorer), sondern gerne auch auf anderen Servern oder nutzen Suchmaschinen wie die Bing-Suche, um z.B. auf MSDN zu suchen.

Ich habe hier mal eine "Federated Search" für MSDN Online zusammengestellt:

Dies zu realisieren ist relativ einfach. Sie können die Dateien, den sogenannten OpenSearch-Connector (OSDX ist die Dateiendung) einfach mit Notepad oder jedem beliebigen Editor öffnen und relativ schnell das Schema und den Aufbau der Datei verstehen, die auf dem OpenSearch Protokoll beruhen.

Im Folgenden finden Sie hilfreiche Ressourcen um die "Federated Search" oder in deutscher Sprache "Föderierte Suche" zu verstehen, entwickeln und verteilen können:



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

WebsiteSpark

27.09.2009 04:12:31 | Oliver Scheer

WebsiteSpark ist ein neues globales Programm, mit dem Microsoft kleinere, professionelle Dienstleister im Bereich Entwicklung und Gestaltung von Webseiten unterstützen möchte. Das Angebot stellt Entwicklern umfangreiche Ressourcen für die unterschiedlichen Gestaltungsaufgaben im Webumfeld zur Verfügung: Software und Lösungen von Microsoft sowie damit verwandte Tools, Training und Support. Durch die Verbindung von Web-Profis und Hostern mit Kunden, Partnern und anderen IT-Experten sowie neuen Technologien wird die Verwirklichung neuer Geschäftsmöglichkeiten gefördert.

WebsiteSpark-Programm

  • Unternehmen mit bis zu zehn Mitarbeitern können drei Jahre lang am WebsiteSpark-Programm teilnehmen. Die Teilnahme ist kostenlos, bei Abmeldung oder Auslaufen des Programms wird lediglich eine Schutzgebühr von 100 US-Dollar (etwa 70 Euro) erhoben. Das WebsiteSpark-Programm bietet Zugriff auf:
  • Microsoft Webdesign- und Entwicklungslösungen, inklusive drei Lizenzen für Microsoft Visual Studio 2008 Professional Edition, zwei Lizenzen für Microsoft Expression Web 3 und eine Lizenz für Microsoft Expression Studio 3
  • Zwei Produktionslizenzen für Microsoft Windows Web Server 2008 (oder R2 nach Verfügbarkeit) und zwei Produktionslizenzen für Microsoft SQL Server 2008 Web Edition
  • Die Website-Bedienoberfläche des Drittanbieters DotNetPanel
  • Zwei technische Supportanfragen pro Unternehmen
  • Community-Support durch Netzwerkpartner, Hosting-Partner und andere Experten mit entsprechenden Services und Technologien
  • Alle technischen Newsgroups auf MSDN
  • Unbegrenzten Programm-Support für nicht-technische Fragen

www.microsoft.com/web/websitespark

msdn tv – Ausgabe 22.09.09 und die Wirkung eines Punktes

25.09.2009 18:25:01 | Kay Giza

Es hat mich sehr gefreut, als die Kollegen Oliver Scheffert, Jan Schenk und Markus Zeischke mich gefragt hatten, ob ich bei MSDN TV mitmachen würde. Na klar sagte ich, denn ich finde das Format wirklich gut. So gut sogar, dass ich mit "MSDN TV" T-Shirt bereits durch die Gegend laufe ;-) Wie dem auch sei, Fashion Victim Jan Schenk beweist in der neuesten Folge von „msdn tv“ einmal mehr, dass der Begriff „Moderator“ eindeutig vom Wort „Mode“ herrührt. Sein Interviewpartner war ich dieses Mal... [... mehr Infos 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

Microsoft bietet mit WebsiteSpark neue Moeglichkeiten fuer Web-Entwickler und -Designer

25.09.2009 17:58:15 | Kay Giza

Microsoft hat gestern die Initiative WebsiteSpark für Web-Entwickler und -Designer angekündigt. Durch ein Partnernetzwerk sowie Software und Support wird die Geschäftsentwicklung für Unternehmen mit bis zu zehn Mitarbeitern gefördert. Zudem sind ab sofort der Web Platform Installer 2.0 und die Windows Web Application Gallery 2.0 verfügbar. Durch diese Erweiterungen der Microsoft Web-Plattform können Designer funktionsreichere innovative Web-Angebote entwickeln. Alle Details, Hyperlinks und Informationen in diesem Blogeintrag auf Giza-Blog.de ... [... mehr]

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

WebsiteSpark ist da!

25.09.2009 13:55:36 | Peter Kirchner

WebsiteSpark ist ein neues globales Programm, mit dem Microsoft kleinere, professionelle Dienstleister im Bereich Entwicklung und Gestaltung von Webseiten unterstützen möchte. Das Angebot stellt Entwicklern umfangreiche Ressourcen für die unterschiedlichen Gestaltungsaufgaben im Webumfeld zur Verfügung: Software und Lösungen von Microsoft sowie damit verwandte Tools, Training und Support. Durch die Verbindung von Web-Profis und Hostern mit Kunden, Partnern und anderen IT-Experten sowie neuen Technologien wird die Verwirklichung neuer Geschäftsmöglichkeiten gefördert.

WebsiteSpark-Programm

  • Unternehmen mit bis zu zehn Mitarbeitern können drei Jahre lang am WebsiteSpark-Programm teilnehmen. Die Teilnahme ist kostenlos, bei Abmeldung oder Auslaufen des Programms wird lediglich eine Schutzgebühr von 100 US-Dollar (etwa 70 Euro) erhoben.

Das WebsiteSpark-Programm bietet Zugriff auf:

  • Microsoft Webdesign- und Entwicklungslösungen, inklusive drei Lizenzen für Microsoft Visual Studio 2008 Professional Edition, zwei Lizenzen für Microsoft Expression Web 3 und eine Lizenz für Microsoft Expression Studio 3
  • Zwei Produktionslizenzen für Microsoft Windows Web Server 2008 (oder R2 nach Verfügbarkeit) und zwei Produktionslizenzen für Microsoft SQL Server 2008 Web Edition
  • Die Website-Bedienoberfläche des Drittanbieters DotNetPanel
  • Zwei technische Supportanfragen pro Unternehmen
  • Community-Support durch Netzwerkpartner, Hosting-Partner und andere Experten mit entsprechenden Services und Technologien
  • Alle technischen Newsgroups auf MSDN
  • Unbegrenzten Programm-Support für nicht-technische Fragen

www.microsoft.com/web/websitespark

Web Platform Installer 2.0 bringt Cloud Computing Entwicklungsumgebung mit!

25.09.2009 13:29:00 | Jan Schenk



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/09/25/web-platform-installer-2-0-bringt-cloud-computing-entwicklungsumgebung-mit.aspx'; tweetmeme_source = 'jansche';

In der jetzt verfügbaren stabilen Version 2 des Web Platform Installers sind die Windows Azure Tools für Visual Studio enthalten. Entwickler, die die Funktionalität des WebPI nutzen, bekommen die Cloud Computing Entwicklungsumgebung sozusagen frei Haus!

Dafür muss man im WebPI nur die Developer Optionen aktivieren, die sich links unten auf dem Übersichtsscreen befinden.

image

Und im Anschluss im Developer Tools Tab Windows Azure aktivieren.

image

 

Et voila, schon wird die Windows Azure Entwicklungsumgebung in die IDE (entweder Visual Web Developer Express Edition SP1 oder Visual Sudio 2008) integriert.

Den Web Platform Installer gibts unter http://www.microsoft.com/web.

Falls es wieder erwarten doch Probleme gibt, hilft dieser Link weiter (englisch):
http://msdn.microsoft.com/en-us/library/dd794431.aspx

Viel Spass beim Entwickeln für die Wolken,
jan

Treffen der SharePoint UserGroup Dresden

25.09.2009 07:56:00 | Martin Hey

Nach einer etwas längeren Pause findet am 17.11.2009 das nächste Treffen der SharePoint Usergroup Dresden statt. Dieses Mal treffen wir uns bei der Communardo Software GmbH.

Thematisch haben wir einen besonderen Leckerbissen parat: Ende Oktober bei der SharePoint Conference in Las Vegas wird SharePoint 2010 ein Hauptthema sein – wenn nicht sogar das Thema überhaupt. Wir alle erwarten schon mit Spannung die neue Version und wir glauben, dass wir damit nicht allein sind.  Aus diesem Grund gibt es zunächst einen Überblick über die Keyfeatures von SharePoint 2010 und im Anschluss daran einen Deepdive in ein paar ausgewählte interessante Neuerungen. Ausklang bildet wie immer eine lockere Diskussionsrunde.

Da das Thema recht umfangreich ist, haben wir uns entschlossen, dieses Treffen etwas früher beginnen zu lassen, um so genug Raum für Diskussionen zu haben. Das Treffen beginnt daher schon um 18:00 und endet voraussichtlich gegen 21:30.

Weitere Informationen und die Möglichkeit zur Anmeldung gibt es in den Eventdetails.

Ansprechpartner für Rückfragen: Sascha Henning, Martin Hey

Silverlight: Wie erstellt man ein schickes Countdown Control?

25.09.2009 06:42:05 | Oliver Scheer

Für den Windows 7 Launch und unseren 7x7 Countdown habe ich ein kleinen Silverlight-Banner erstellt.

Get Microsoft Silverlight

Wer diesen Countdown in seine Seiten einbinden will, darf dies sehr gerne mit dem folgenden HTML-Code tun.

<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="550px" height="270px">
<param name="source" value="http://the-oliver.com/apps/7x7app/Oliver.Apps.Windows7Countdown.xap"/>
<param name="enablehtmlaccess" value="true" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="3.0.40624.0" />
<param name="autoUpgrade" value="true" />
<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0" style="text-decoration:none">
  <img src="http://the-oliver.com/apps/7x7app/installsilverlight.jpg" alt="Get Microsoft Silverlight" style="border-style:none"/>
</a>
</object>

Wer allerdings diesen Countdown, oder diese Art von Anzeigetafeln, in seiner eigenen Anwendung verwenden will, darf dies auch gerne tun.

Eine kleine Beschreibung der Controls habe ich diesem Video erstellt.

Get Microsoft Silverlight

Ich nenne diesen Countdown: ClipClapCountdown.

image

Ich habe aus diesen Countdown direkt mehrere Controls gemacht. Zu einem das Hauptelement ein ClipClapControl, das eigentlich nur ein einziges Zeichen darstellt. Das interessante dabei ist, es ist möglich jedes Zeichen darzustellen. Ich brauche auch keine vorbereiteten Bilder. Es können beliebige Schriftgrößen und –arten verwendet werden.

Dabei wird mit einem guten Trick gearbeitet, damit ich diese Freiheit habe, erzeuge ich das benötige Zeichen erst zu Laufzeit mit Hilfe der WriteableBitmap-Klasse aus einem Textblock der nur im Speicher existiert.

Weitere Controls sind das ClipClapDisplay, ClipClapCountdown und die ClipClapClock. Einfach mal reinschauen und bitte schön Feedback senden, würde mich sehr darüber freuen.

Download:

jQuery Visual Cheat Sheet

25.09.2009 01:33:03 | Jürgen Gutsch

Von Antonio Lupetti gibt es ein recht ausführliches jQuery Cheat Sheet zum kostenlosen Download. Das Cheaat Sheet enthält eine Übersicht über die wichtigsten jQuery Funktionen, sowie jQuery Selektoren und einige Beispiele zur Anwendung der Funktionen:

http://woork.blogspot.com/2009/09/jquery-visual-cheat-sheet.html

DotNetKicks-DE Image

T-27: Die neue Taskleiste Teil 2

25.09.2009 00:00:00 | Oliver Scheer

27_4 Freitag, 25. September 2009

Nur noch 27 Tage bis zum Windows 7 Launch.

Heute vertiefen wir uns Wissen rund um die neue Taskleiste von Windows 7.

Gestern haben wir uns mit den Grundlagen der Symbole auf der Taskleiste befasst. Heute geht es darum, die Funktionalitäten der Sprungliste und der Thumbnail-Toolbars zu erkunden.

Mehr

BASTA! 2009 – Unterlagen zu „WPF-Anwendungsarchitektur“

24.09.2009 22:30:00 | Stefan Lange

Heute durfte ich meinen Vortrag „WPF-Anwendungsarchitektur“ auf der BASTA! halten. Dabei ging es um die Schichtentrennung in WPF (View, ViewModel, ApplicationModel, DataModel), sowie um die Composite Application Guidance (Prism 2.0) von der Microsoft Patterns & Practices Group.

Das Interesse an Anwendungsarchitektur war viel höher, als ich erwartet hatte. Nach Ende des Vortrags habe ich noch 1½ Stunden mit einer Gruppe von Zuhören zusammengesessen und angeregt diskutiert.

XmlIo wins over XmlSerializer

24.09.2009 20:16:00 | Rainer Hilmer

I just did some tests on my XML IO class and it came out that XmlIo is more flexible in handling different types of objects.
Just a quick demo which shows that even dictionaries can be handled with ease.

using System.Collections.Generic;
using System.Drawing;
using System.Runtime.Serialization;
 
namespace ConfigListDemo
{
   [KnownType(typeof(Point))]
   [KnownType(typeof(Size))]
   [KnownType(typeof(Color))]
   public class ConfigDictionary
   {
      public ConfigDictionary()
      {
         if(Configuration == null)
            Configuration = new Dictionary<string, object>();
      }
 
      // In case someone uses this kind of configuration storage (which is not recommended).
      public Dictionary<string, object> Configuration { get; set; }
   }
}
using System;
using System.Drawing;
using System.IO;
using DotNetExpansions.IO;
 
namespace ConfigListDemo
{
   class Program
   {
      static void Main()
      {
         var yourConfig = CreateConfig();
         var xmlConfigManager = new XmlIo(Path.Combine(Environment.CurrentDirectory, "YourConfig.xml"));
         Console.WriteLine("Saving configuration");
         xmlConfigManager.Save(yourConfig);
         yourConfig = null;
         try
         {
            Console.WriteLine("Trying to load your config data...");
            yourConfig = xmlConfigManager.Load<ConfigDictionary>();
            Show(yourConfig);
         }
         catch(InvalidOperationException problem)
         {
            Console.WriteLine(problem.Message);
            Console.WriteLine(problem.Data);
         }
 
         // Verhindert das selbsttätige Schließen des Konsolenfensters.
         Console.WriteLine("\nPress any key to terminate the program.");
         Console.ReadKey();
      }
 
      private static ConfigDictionary CreateConfig()
      {
         var config = new ConfigDictionary();
         config.Configuration.Add("Integer", 1);
         config.Configuration.Add("Double", 3.141592654);
         config.Configuration.Add("String", "Hello world");
         config.Configuration.Add("Point", new Point(100, 200));
         config.Configuration.Add("Size", new Size(1024, 768));
         config.Configuration.Add("RGB-color", Color.FromArgb(128, 0, 255));
         config.Configuration.Add("named color", Color.Fuchsia);
         return config;
      }
 
      private static void Show(ConfigDictionary configDictionary)
      {
         foreach(var keyValuePair in configDictionary.Configuration)
         {
            Console.WriteLine("Your {0}: {1}", keyValuePair.Key, keyValuePair.Value);
         }
      }
   }
}
/* Output:
Saving configuration
Trying to load your config data...
Your Integer: 1
Your Double: 3,141592654
Your String: Hello world
Your Point: {X=100,Y=200}
Your Size: {Width=1024, Height=768}
Your RGB-color: Color [A=255, R=128, G=0, B=255]
Your named color: Color [Fuchsia]
Press any key to terminate the program.
*/

Now try that with XmlSerializer.

XmlIo is part of DotNetExpansions. You can download it here:

http://cyrons.svn.beanstalkapp.com/general/DotNetExpansions/tags/

This library comes with complete intellisense support and helpfile (.chm) with examples.

DotNetKicks-DE Image

Virtual WiFi macht Win7 zum Access Point

24.09.2009 18:20:00 | Michael Schwarz

Seit 2002 arbeitete Microsoft Research unter dem Codenamen MultiNet an einer Virtualisierung der WiFi-Architektur. Die Ergebnisse wurden als Projekt VirtualWiFi der Öffentlichkeit vorgestellt und in mehreren Projekten eingesetzt:

Entwickelt für Windows XP wurde es bisher über 100.000 mal heruntergeladen und an mehr als 400 Universitäten als Bestandteil des Mesh Academic Resource Toolkits weltweit verteilt.

 

VirtualWiFi abstrahiert eine WLAN-Karte, so dass sie als virtueller Netzwerkadapter mehrfach im System erscheint. Jede virtuelle Karte kann dann vom Anwender separat konfiguriert werden und erlaubt damit die Verbindung zu unterschiedlichen drahtlosen Netzwerken zur gleichen Zeit über nur einen physikalischen Netzwerkadapter.

Den kompletten Artikel zum Thema Virtual WiFi bei Daniel lesen…


Microsoft WebsiteSpark, Web Design und Development für fast nix

24.09.2009 15:54:08 | Oliver Scheer

Das jüngste Mitglied der Spark-Familie (BizSpark und DreamSpark) ist heute der Welt vorgestellt worden. Und ich muss sagen, wow.

Das WebsiteSpark-Programm bietet Web Professionals vollen Zugang zu Microsoft Software und Lösungen. Entwicklungs- und Design-Agenturen können mit bis zu 10 Angestellten und Besitzern an diesem drei Jahre langen Programm ohne Folgekosten teilnehmen. Es gibt lediglich eine Gebühr von 100 $, die erst beim Ende nach drei Jahren gezahlt werden muss.

Sobald die Bedingungen zur Teilnahme erfüllt sind hat man folgende Vorteile:

  • Zugriff auf alle Microsoft Web Design und Development Tools, einschließlich drei Lizenzen für Microsoft Visual Studio 2008 Professional Edition, Zwei Lizenzen für Microsoft Expression Web 3 und eine Lizenz von Microsoft Expression Studio 3.
  • Vier Prozessorlizenzen für den Produktiveinsatz von Microsoft Windows Web Server 2008 oder R2 (bei Verfügbarkeit) und  Vierprozessorlizenzen für den Produktiveinsatz von Microsoft SQL Server 2008 Web Edition.
  • Ein Third-Party Premium Website Control Panel (DotNetPanel).
  • Teilnehmende Unternehmen haben zusätzlich die Möglichkeit professionellen Support zu und Trainingsmaterial zu erhalten.

Mehr Informationen gibt es dazu hier: www.microsoft.com/web/websitespark .

AstronomyLib Part 2

24.09.2009 14:43:59 | Patrick Sperneder

Um die Bibliothek zielführend einsetzen zu können, benötigen wir des weiteren einen Webservice mithilfe dessen wir die Koordinaten ( Latitude und Longitude ) ermitteln. Diese Daten holen wir uns vom Webservice Yahoo GeoCode.

Bevor wir nun aber zur Tat schreiten können um Daten von dem Dienst Yahoo GeoCode zu erhalten, müssen wir einen Developer Account bei Yahoo einrichten. Dies ist relativ unkompliziert und kostet auch nichts, ist dieser Account nun erstellt, müssen wir einen APP ID Code für unsere Abfragen beantragen. Mit diesem Code ist es möglich 50.000 Abfragen pro Tag auf obgenannten Service zu machen.

Die Abfrage für einen bestimmten Ort des GeoCode Service ist ein Uri  in dem die Parameter der Abfrage integriert sind.

z.B.: für Graz : http://local.yahooapis.com/MapsService/V1/geocode?appid=XYZ…….&city=Graz .

 

Für diesen Zweck erstellen wir uns eine statische Klasse die die Abfragen mittels einem System.Net.WebClient löst. Der zurückgegeben Wert einer solchen Abfrage ist ein XML Fragment mit den entsprechenden Elementen und Attributen also Werten.

Auch für die Rückgabewerte erstellen wir uns eine Klasse die diese Eigenschaften kapselt um sie nachher komfortabel in der Anwendung nutzen zu können.

ACHTUNG !

Der Code enthält keinerlei Fehlerbehandlungsroutinen und blockiert die Oberfläche der Anwendung (wegen dem direkten Aufruf des WebClients aus dem UIThread !) , es soll lediglich die Vorgehensweise verdeutlicht werden. Diese Vorgehensweise entspricht keinesfalls irgendwelchen Design Richtlinien.

 

Die statische Klasse YahooGeoCodeAPIWrapper :

  1. public static class YahooGeoCodeAPIWrapper
  2.     {
  3.         /// <summary>
  4.         /// Gets the geo data for the given city name.
  5.         /// </summary>
  6.         /// <param name="API_CODE">The API  CODE.</param>
  7.         /// <param name="CityName">Name of the city.</param>
  8.         /// <returns></returns>
  9.         public static YahooGeoCodeResult GetGeoDataForCityName(string API_CODE, string CityName)
  10.         {
  11.             using (WebClient client = new WebClient())
  12.             {
  13.                 // Abfrage Uri erstellen ...
  14.                 string uri = "http://local.yahooapis.com/MapsService/V1/geocode?appid=" + API_CODE + "&city=" + CityName;
  15.                 byte[] bytes = client.DownloadData(uri);
  16.                 return new YahooGeoCodeResult(Encoding.ASCII.GetString(bytes));
  17.             }
  18.         }
  19.     }

 

Die Klasse die die Ergebnisse der Abfrage kapselt :

  1. /// <summary>
  2.     /// Stellt eine Antwort auf eine Abfrage des Yahoo GeoCode Webservices dar.
  3.     /// </summary>
  4.     public sealed class YahooGeoCodeResult
  5.     {
  6.         #region ctor
  7.         public YahooGeoCodeResult(string xmlfragment)
  8.         {
  9.             XmlDocument doc = new XmlDocument();
  10.             doc.LoadXml(xmlfragment);
  11.             Latitude = Double.Parse(doc.DocumentElement.ChildNodes[0].ChildNodes[0].InnerText );
  12.             Longitude = Double.Parse(doc.DocumentElement.ChildNodes[0].ChildNodes[1].InnerText );
  13.             City = doc.DocumentElement.ChildNodes[0].ChildNodes[3].InnerText;
  14.             State = doc.DocumentElement.ChildNodes[0].ChildNodes[4].InnerText ;
  15.         }
  16.         #endregion
  17.         #region props
  18.         public double Latitude { get; set; }
  19.         public double Longitude { get; set; }
  20.         public string State { get; set; }
  21.         public string City { get; set; }
  22.         #endregion
  23.     }

Neue msdn TV – Folge mit neuem MODErator

24.09.2009 14:39:44 | Oliver Scheer

Fashion Victim Jan Schenk beweist in der neuesten Folge von „msdn tv“ einmal mehr, dass der Begriff „Moderator“ eindeutig vom Wort „Mode“ herrührt. Sein Interviewpartner ist diesmal der deutsche MSDN Online-Chef Kay Giza, der einen Blick hinter die Kulissen der MSDN-Website wirft und um Feedback aus der Community bittet. In den Kurznachrichten außerdem Infos zur deutschen Version von Expression Studio 3, einem aktuellen Interview mit Pierre Joye, seines Zeichens Team Lead der „PHP on Windows Developer Division“, dem Windows 7 Training Kit für Entwickler, einem neuen MSDN-Blog für Partner und zu Fragen & Antworten aus der MSDN Hotline

WebsiteSpark: Software, Support und Unterstützung für Web-Dienstleister

24.09.2009 12:15:00 | Michael Schwarz

Microsoft hat heute ein neues Programm für professionelle Dienstleister im Bereich Entwicklung und Gestaltung von Webseiten vorgestellt:

Zu der Initiative für Unternehmens-Gründer BizSpark und dem Progamm DreamSpark, das Schülern und Studierenden kostenlos Software für Entwicklung und Design zur Verfügung stellt, gesellt sich ab heute das Programm WebsiteSpark.

WebsiteSpark ist ein neues globales Programm, mit dem Microsoft kleinere, professionelle Dienstleister im Bereich Entwicklung und Gestaltung von Webseiten unterstützen möchte. Durch Verbindungen mit globalen Partnern und Kunden, Support- und Schulungsangebote sowie Softwaretools – ohne anfängliche Investitionskosten – ermöglicht WebsiteSpark neue Geschäftschancen. WebsiteSpark bietet professionellen Unternehmen im Bereich Entwicklung und Gestaltung von Webseiten ein innovatives Vehikel für den Zugriff auf:

  • Geschäftsmöglichkeiten: Möglichkeiten zur Erweiterung des Kundenstamms und Schaffung neuer Geschäftschancen durch Präsentation der Angebote und des Leistungsvermögens und Vernetzung und Zusammenschluss mit Partnern auf dem WebsiteSpark Marketplace und anderen Marketing- und Kollaborationsplattformen von Microsoft.

  • Support und Schulung: Professioneller Support von Microsoft und Kontaktaufnahme zu und Zusammenarbeit mit WebsiteSpark-Netzwerkpartnern, Hostingpartnern und anderen Webseitenentwicklern und -designern mit ergänzenden Technologien oder Geschäftsmodellen – ein komplettes Ökosystem, das eine umfassende Spanne an technischen und geschäftlichen Ressourcen für alle Anforderungen in diesem Bereich bietet.

  • Software und Lösungen: Schneller, einfacher und unmittelbarer Zugriff auf aktuelle, umfangreiche Microsoft-Entwicklungstools und Webserver-Produktionslizenzen ohne anfängliche Investitionskosten zum Erstellen, Entwerfen und Bereitstellen von differenzierten, innovativen und aussagekräftigen Websites.

Für eine sehr geringe Programmangebotsgebühr in Höhe von 100 USD gibt es dafür folgende Software (für die Dauer von 3 Jahren):

  • Für den Entwurf, die Entwicklung, das Testen und die Präsentation neuer Websites – für bis zu drei Benutzer je Webentwicklungs- und Webdesignunternehmen:

  • Visual Studio Professional

  • Expression Studio 2 oder 3 (1 Benutzer) und Expression Web 2 oder 3 (bis zu 2 Benutzer)

  • Windows Web Server 2008 oder R2 (wenn verfügbar)

  • SQL Server 2008 Web Edition

Für die Produktion – d.h. für die Bereitstellung und das Hosten neuer, mithilfe der Programmsoftware entwickelter Websites – die Verwendung von bis zu vier Prozessoren je Webentwicklungs- und Webdesignunternehmen der folgenden (physischen oder virtuellen) dedizierten Server:

  • Windows Web Server 2008 R2 (wenn verfügbar)

  • SQL Server 2008 Web Edition

Lesen sie den ganzen Artikel. Scott Guthrie schreibt auch gerade darüber, aber in Englisch.


msdn TV – Nachrichten für Entwickler (Ausgabe vom 23.09.2009)

24.09.2009 00:06:52 | Jan Schenk



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

Get Microsoft Silverlight

Es ist wieder so weit, eine neue Ausgabe von msdn TV geht über den Äther. Hier der Originaltext von msdn-online.de:

Fashion Victim Jan Schenk beweist in der neuesten Folge von „msdn tv“ einmal mehr, dass der Begriff „Moderator“ eindeutig vom Wort „Mode“ herrührt. Sein Interviewpartner ist diesmal der deutsche MSDN Online-Chef Kay Giza, der einen Blick hinter die Kulissen der MSDN-Website wirft und um Feedback aus der Community bittet. In den Kurznachrichten außerdem Infos zur deutschen Version von Expression Studio 3, einem aktuellen Interview mit Pierre Joye, seines Zeichens Team Lead der „PHP on Windows Developer Division“, dem Windows 7 Training Kit für Entwickler, einem neuen MSDN-Blog für Partner und zu Fragen & Antworten aus der MSDN Hotline

 

Den Originalpost findet ihr auf Channel9 unter diesem Link: http://channel9.msdn.com/posts/kitano/msdn-TV-Nachrichten-fr-Entwickler-Ausgabe-vom-21092009/

T-28: Die Windows Taskleiste

24.09.2009 00:00:00 | Oliver Scheer

28_0_thumb1Donnerstag, 24. September 2009

Nur noch 28 Tage bis zum Windows 7 Launch.

Heute und morgen dreht sich alles um die neue Taskleiste von Windows 7. Die Taskleiste in Windows 7 hat eine lange Geschichte hinter sich.

Mehr

HowTo: AppSettings aus der .Config auslesen

23.09.2009 22:24:28 | Robert Mühsig

Heute ein weiteres, total einfaches HowTo. In die Web.Config/App.Config gibt es einen so genannten “appSettings” Bereich in dem man bequem bestimmte Einstellungen abspeichern kann. Damit ich mir vielleicht das nächste mal die 5 Minuten googlen sparen kann, schreib ich es einfach mal auf. In der web.config bzw. app.config: … gibt es Bereich namens “appSettings“: <appSettings/> Dort kann man [...]SHARETHIS.addEntry({ title: "HowTo: AppSettings aus der .Config auslesen", url: "http://code-inside.de/blog/2009/09/23/howto-appsettings-aus-der-config-auslesen/" });

BizTalk Server Scripting-Functoid wider Erwarten...

23.09.2009 20:00:00 | Wolfgang Kluge

Mit dem Scripting Functoid des BizTalk-Mappers kann man bekanntlich eigene Scripts in verschiedenen Sprachen (z.b. C#) während des Mappings ausführen lassen. Man definiert damit eine Funktion deren Parameter mit Hilfer der Eingangselemente gefüllt werden können. Der Rückgabewert der Funktion ist das, was das Functoid als Ausgangsparameter weitergibt. Bis hierhin ist alles noch selbsterklärend.

Falls nun mehrere Scripting Functoide existieren, die alle das Gleiche tun, so ist man gut beraten, auch immer den gleichen Methodennamen zu verwenden. Diese werden beim Kompilieren in XSLT zusammengeführt (aus dem *.btm-Dateien wird immer xslt generiert). Innerhalb dieser XSLT-Datei, wird dann auch immer nur eine Funktion aufgerufen.

Allerdings scheint den Entwicklern ein kleiner Fehler unterlaufen zu sein. Denn nicht der Methodenname und der dazugehörige Inhalt (MethodBody), sondern lediglich der Methodenname und die Anzahl der Parameter wird verwendet, um die "Gleichheit" zweier Funktionen festzustellen.

Aus den Scripting-Functoiden in den Bildern

 Mehrere BizTalk-Server Scripting Functoids mit unterschiedlichen Funktionen aber gleichen FunktionsnamenMehrere BizTalk-Server Scripting Functoids mit unterschiedlichen Funktionen aber gleichen Funktionsnamen

wird folgender XSLT-Code

<msxsl:script language="C#" implements-prefix="userCSharp"><![CDATA[
public string MyConcat(string param1)
{
    return param1;
}
]]></msxsl:script>

Zwei an sich komplett verschiedene Funktionen mit gleichem Namen und gleicher Anzahl an Parametern werden also als gleich angesehen und infolgedessen wird eine dieser Funktionen entfernt (in der Regel bleibt die erste erhalten). In C# ist es Möglich, mehrere gleich genannte Methoden zu definieren, so lange die Signatur (d.h. die Parameter und deren Typen) eine andere ist. Ist die Signatur gleich, wird ein entsprechender Fehler ausgegeben.

Da in jedem Scripting-Functoid eine neue Funktion definiert werden kann (und muss, wenn immer die gleiche Funktion aufgerufen werden soll), hofft man nun wenigstens auf eine Fehlermeldung bei einer Unterscheidung der Funktionen. Es wird aber lediglich eine Funktion übrig gelassen - und nein, es gibt beim kompilieren nicht einmal eine Warnung, geschweige denn einen Fehler.

Falls es also mal zu seltsam erscheinenden Fehlern innerhalb eines Mappings kommt und man sich ganz sicher ist, dass eine Funktion eigentlich korrekt zu funktionieren hat, dann muss man wohl oder übel auch alle anderen Scripting Functoide innerhalb der .btm-Datei in Betracht ziehen und die Methodennamen vergleichen.

Besser wäre eine Dateiweite Funktionsliste gewesen. Innerhalb des Scripting-Functoid hätte man dann eine dieser Funktionen ausgewählt, fertig... Man kann nur auf neue Versionen hoffen ;)

AVM Fritz!Box und neue Features

23.09.2009 15:32:00 | Michael Schwarz

Schon recht früh habe ich Produkte aus dem Hause AVM verwendet, darunter schon eine Fritz!Card ISDN PCI Karte, damals noch mühsam mit CAPI Treibern unter Windows 95 installiert. Seit es die Fritz!Box gibt, kann ich mir gar kein anderes Gerät für WLAN / Router / VoIP mehr vorstellen. Im Moment verwende ich insgesamt drei Fritz!Box Geräte, die 7270 macht dabei die meiste Arbeit (DECT, Internet,…); die anderen beiden laufen als WLAN Repeater.

Nun, es ist bald Weihnachten, und da darf man sich ja mal was wünschen.

Externe Einwahl

Konfigurieren / Ein-/Ausschalten von Rufumleitungen etc. über das Telefon: dafür könnte man generell eine Telefonnummer reservieren, und dann über spezielle Befehle die Einstellungen vornehmen.

Beispiele: Rufnummer 0911 12345678, dann z.B. # drücken, und eine der folgenden Optionen:

  1. 1 = Rufnummerumleitungen konfigurieren, man gibt danach die interne Telefonnummer an, dann die einzustellende Umleitung und Rufnummer
  2. 2 = Netzwerkrelevante Funktionen, z.B. PC XYZ starten; weitere Funktionen könnten sein IP Adresse mittels DynDNS oder Ereignis-Push verschicken
  3. 3 = Callthrough
  4. 4 = Fernabfrage Anrufbeantworter bzw. vorlesen von verpassten Rufnummern

Das schöne dabei wäre dann, dass ich in mein Handy die kompletten Rufnummern eintragen kann, um z.B. schnell eine Rufumleitung zu aktivieren.

Beispiel: 091112345678,#1**610,0000,017112345678.

Kindersicherung

Die Kindersicherung ist prima, wäre aber noch ein Schritt netter, wenn man auch eine Grenze des Datenvolumens einstellen könnte. Bei dem Push-Ereignis-Senden will ich dann natürlich auch das Datenvolumen pro IP Adresse sehen, versteht sich.

HTTP/HTTPS Proxy

Fritz!Box als HTTP Proxy (verpflichtend): die Fritz!Box funktioniert als HTTP/HTTPS Proxy, ansonsten werden HTTP Aufrufe blockiert. Weiter interessant sind dann eigene Filtermöglichkeiten, die möglichst anhand der URL eingetragen werden:

  • www.domainxyz.com aber auch z.B. "/scripts/ad.js"
  • Wildcards wie "*.exe"

Dabei ist dann auch interessant: HTTP Proxy Caching über
einen angeschlossenen USB Speicher, damit hätte man auch genügend Speicher verfügbar.

Sicherheitshinweise

Übersichtsseite zu Sicherheitseinstellungen mit Hinweisen: welche Ports habe ich offen? Gibt es "unsichere" Passwörter? Wenn man z.B. mit FTP auf den USB Stick zugreifen kann, dann ein Hinweis, dass es sich darum um ein "Sicherheitsproblem" handeln kann, da liegen ja die Faxe rum (aber nur bei eingeschaltetem Faxgerät).


T-29: Der Internet Explorer 8 für Entwickler

23.09.2009 00:00:00 | Oliver Scheer

29_0_thumb1Mittwoch, 23. September 2009

Noch 29 Tage bis zum Launch von Windows 7.

 

Der Internet Explorer bringt viele neue Innovationen mit sich, die dem Anwender das Surfen im Internet noch leichter machen. Diese Features können nahtlos in bestehende Websites integriert werden, ohne dass dafür die Website großartig verändert werden muss.

Mehr

Windows 7 Location “Aware” mit dem GPS Empfänger aus Streets and Trips 2009

22.09.2009 17:15:00 | Michael Schwarz

Brandon schreibt in seinem Blog, dass der GPS Empfänger (u-blox) aus dem Streets and Trips 2009 Paket mittels einem neuen Treiber die Windows 7 Location Aware Unterstützung bietet. Cool, muss ich mal nachschauen, ob es für mein GPS Gerät auch einen neuen Treiber gibt.

Weiter lesen auf Making Windows 7 Location “Aware” with u-blox Products - Windows Experience Blog - The Windows Blog.


Live Mesh: How to sync folders not on the desktop

22.09.2009 14:40:40 | Rainer Hilmer

Live Mesh beta acts clumsy when it comes to configuring sync folders. By default the sync folder is automatically created on the desktop of the target computer. Here is how to move a Live Mesh sync folder from the desktop to any location:

  1. Create a new folder in any location you want on Computer A. Better choose no location which is protected by the UAC (Windows Vista). I did not test this case so better be careful.
  2. In the sync options choose to sync with every device in the list (and so with the target computer B).
  3. A new folder will be created on the desktop of computer B, which has the same name as the folder you created for synchronizing on Computer A.
  4. Choose sync options from the context menu of the folder on Computer B and choose not to sync! Yes it sounds weird but this step is neccessary in order to make the next ones work.
  5. Move the folder on computer B to the desired location.
  6. After moving, right click on this folder and choose "Add folder to Live Mesh".
  7. Now you will see a message box popping up with the following message:
    There is an unsynchronized folder named "(your folder’s name)" already.
    Would you like to synchronize this folder to the location you selected?
  8. Click on "yes"
  9. Next you will see the sync options window. All connected devices should be synched.
  10. Done

DotNetKicks-DE Image

Windows Vista / Windows 7 – Wie funktioniert das eigentlich mit dem Netzwerksymbol (Internetverbindung)?

22.09.2009 13:13:00 | Michael Schwarz

Jeder, der sich mal gefragt hat, wie das mit dem Erkennen der Internetverbindung in Windows Vista / Windows 7 funktioniert, der findet hier die Lösung.

Eigentlich ganz einfach, es wird ein HTTP GET-Aufruf auf http://www.msftncsi.com/ncsi.txt durchgeführt, und die Zeichenkette Microsoft NCSI als Rückantwort erwartet. Das ganze kann man auch in der Registry deaktivieren, mehr dazu auf dem Blog von Aaron Tiensivo.


DateTime.ToString() und CurrentCulture – ein gern gemachter Fehler

22.09.2009 13:10:00 | Michael Schwarz

Ich habe einen NT Dienst, den ich über eine COM Schnittstelle ansprechen kann. Als Datenformat wird das vom System genommen, also das, was wir in Region und Sprach in der Systemsteuerung festlegen. Der NT Dienst als auch meine .NET Anwendung übertragen ein Datum dann beispielsweise wie folgt:

<root>
    <view>order</view>
    <filter type=”date”>20.04.2009</filter>
    <filter type=”time”>09:00</filter>
</root>

Im C# Source Code wird dafür die ToString-Methode einer DateTime Instanz aufgerufen, als Parameter steht dort auf einem Deutschen System HH:mm.

Nun habe ich mal die Sprache (CurrentCulture) auf Italienisch gesetzt, und prompt geht die Abfrage in die Hose. Warum eigentlich?

Thread.CurrentThread.CurrentCulture =
    new CultureInfo(“it”);
Thread.CurrentThread.CurrentUICulture =
    new CultureInfo(“it”);

DateTime dt = new DateTime(2009, 4, 20, 9, 0, 0);
Console.WriteLine(dt.ToString(“HH:mm”));   
// erwartet: 09:00

Hat man die CurrentCulture auf Italienisch gesetzt, erzeugt der obige Source Code eine auf den ersten Blick nicht nachvollziehbare Ausgabe:

09.00
anstatt 09:00

Der Haken ist, dass die ToString-Methode eben immer die Platzhalter durch die sprachabhängigen Zeichen ersetzt. Im Italienischen verwendet man eben den Punkt als Trennzeichen zwischen Stunde und Minute.

Um nun die Ausgabe richtig zu machen, verwendet man einfach noch das zweite Argument:

Console.WriteLine(
    dt.ToString(“HH:mm”, DateTimeFormatInfo.InvariantInfo)
);

Damit klappt’s dann auch mit der richtigen Ausgabe. Übrigens funktioniert das natürlich auch bei den anderen sprachabhängigen Formatierungen (z.B. Komma bei System.Double, dort verwendet man dann NumberFormatInfo.InvariantInfo).

Wieder etwas gelernt, an das ich mich beim nächsten Mal wieder nicht erinnere.


T-30: Windows Sysinternals

22.09.2009 00:00:00 | Oliver Scheer

30_1_thumb1Dienstag, 22. September 2009

Nur noch 30 bis zum Windows 7 Launch.

Heute dreht sich alles um die Sysinternals von Microsoft.

Die Sysinternals sind eine Sammlung von Werkzeugen für Entwickler und Systemadministratoren. Sie liefern schnelle und einfache Informationen für bestimmte Funktionen des Betriebssystems. Diese Tools sind in dieser Form von Mark Russinovich (Technical Fellow bei Microsoft) für die Firma „Sysinternals“ zusammengetragen worden. Das Unternehmen Sysinternals wurde vor einigen Jahren von Microsoft übernommen. Seitdem werden die Werkzeuge kostenfrei über die Microsoft-Homepage vertrieben.

Mehr

Testversionen von Windows 7 Enterprise

21.09.2009 20:29:01 | Peter Kirchner

Für Endkunden gibt es nun Testversionen von Windows 7 Enterprise zu Evaluierungszwecken vom TechNet-Evaluierungscenter herunterladen.

Auszug aus den Richtlinien zur Verwendung, die ebenfalls auf der angegebenen Seite aufgeführt werden:

  • Sie haben 10 Tage Zeit, um das Produkt zu aktivieren. Nach Ablauf dieses Zeitraums wird das System jeweils nach einer Stunde heruntergefahren, bis Sie es aktivieren.
  • Die 90-Tage-Testversion ist eine Vollversion von Windows 7 Enterprise, also die Version, mit der die meisten von Ihnen in ihrer Unternehmensumgebung arbeiten werden. Sie benötigen dafür keinen Product Key (dieser ist im Download integriert).
  • Die 90-Tage-Testversion wird nach Ablauf des 90-tägigen Evaluierungszeitraums jeweils nach einer Stunde heruntergefahren.
  • Die 90-Tage-Testversion steht für einen begrenzten Zeitraum und in begrenzter Menge zur Verfügung. Der Download ist bis 31. März 2010 verfügbar (bzw. solange der Vorrat reicht).
  • Nach Ablauf des 90-tägigen Testzeitraums können Sie Windows 7 Enterprise weiterhin verwenden, indem Sie Windows 7 erwerben und eine Neuinstallation durchführen, einschließlich Treiber und Anwendungen. Bitte beachten Sie, dass Windows 7 Enterprise nicht über Einzelhandelskanäle vertrieben wird.

Interessant? Dann hier entlang: TechNet-Evaluierungscenter

Best of Patterns & Practices 2008/2009

21.09.2009 11:05:48 | Kay Giza

Das Patterns & Practices Team (p&p) von Microsoft unterstützt Software-Architekten und -Entwicklern bei ihren alltäglichen Aufgaben und Problemstellungen mit Richtlinien, Vorgehensweisen und Best Practices. Ziel des Teams ist, den Umgang mit der Microsoft-Plattform und den -Technologien zu vereinfachen sowie Lösungen und Anleitungen für wiederkehrende Probleme zu Verfügung zu stellen, um so die Arbeit von Software-Architeken und -Entwicklern zu erleichern. Kollege Markus Zeischke hat eine kleine Übersicht der Veröffentlichungen des Patterns & Practices Team der lezten zwölf Monate veröffentlicht, lesenswert: Best of Patterns & Practices

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

Windows 7 RTM Sign-Off

21.09.2009 09:00:00 | Oliver Scheer

Wie läuft eigentlich der finale Sign-Off, also die ultimative, die letzte, die “es gibt es jetzt kein zurück mehr” Abnahme eines Betriebssystems, wie z.B. Windows 7 ab?

Microsofts MSDN stellt Entwicklern neue kostenfreie Tools bereit: Bin Scope Binary und MiniFuzz File Fuzzer

21.09.2009 06:56:07 | Kay Giza

Der Trend ist erkennbar: Attacken aus dem Internet auf Windows, Office und Co. sind aufgrund neuer Sicherheitsstandards bei Microsoft immer weniger erfolgreich. Nun konzentrieren sich die Angreifer zunehmend auf Anwendungen von Drittherstellern. Die Trustworthy Computing Group von Microsoft hat Hilfsprogramme vorgestellt, die den MSDN Security Development Lifecycle (SDL – eine Kombination von Technologie, Prozessen und Anwendungsbeispielen für mehr Sicherheit) zu erweitern. Mit dem BinScope Binary Analyzer und dem MiniFuzz File Fuzzer bekommen Entwickler und Software-Tester Werkzeuge, um Sicherheitsrisiken in ihren Programmen noch vor der Veröffentlichung zu beheben. Auch steht ab sofort das Whitepaper "Manual Integration of the SDL Process Template" zum Download bereit, eine Anleitung für die Einführung des SDL Prozesses. Detail-Informationen sowie Download-Links, weiterführende Links und Whitepapers zum SDL und erwähnten Programmen finden Sie in diesem Blogeintrag auf Giza-Blog.de... [...mehr]

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

T-32: Erleichterte Bedienung

20.09.2009 00:00:00 | Oliver Scheer

32_1 Sonntag, 20. September 2009

Nur noch 32 Tage bis zum Windows 7 Launch.

Microsoft hat in den letzten Jahren viel in die Verbesserung der Bedienbarkeit von Windows investiert. Neben den Verbesserungen an der Benutzeroberfläche, vielen UX-Details (User Experience = Benutzererlebnisse) und aufgeräumten Oberflächen.

Mehr

Zeilenweise Aktualisierung eines GridViews mit Timer

19.09.2009 20:15:33 | Daniel Schädler

Im Beitrag “Zeilenweise Aktualisierung eines GridViews” habe ich gezeigt wie das ganze funktioniert, wenn das umliegende System, oder die Webmethode nicht blockiert wird (auf eine Antwort wartend). Unschön ist natürlich wenn ich mit der WebMethod ein Drittsystem frage, z. Bsp. über eine erledigte Arbeit und dieses mir nicht sofort antwortet, dann nähmlich blockiert es die weiteren Abfragen. Schlimmer wird’s dann noch wenn man einen Timer einbauen will. Dazu habe ich folgendes überlegt (ja ich kann dass smile_embaressed) und zwar hat jede Row eines GridView’s wie wir ja wissen eine eindeutige ClientID. Wenn ich diese als Timername verwende dann habe ich pro Zeile einen Timer, der unabhängig der anderen eine Abfrage, hier in diesem Beispiel alle 5 Sekunden macht. Zuerst habe ich den Timer erstellt:

   1: // Starts the timer
   2: function StartTimer(rowId, counterHdf, ImageId) {
   3:     var img = $get(ImageId);
   4:     img.src = "../Images/loader.gif";
   5:     rowId = setInterval(function() {
   6:         //alert(rowId + 'Timer wurde gestartet');
   7:  
   8:         var counterHdf_value = document.getElementById(counterHdf).value;
   9:         var counter = parseInt(counterHdf_value);
  10:         counter++;
  11:  
  12:         document.getElementById(counterHdf).value = counter.toString();
  13:         CheckStatus(ImageId, counter);
  14:         if (counter === 3) {
  15:             clearInterval(rowId);
  16:         }
  17:  
  18:     }, 5000);
  19: }

Damit diese Methode bei jedem Button im GridView aufgerufen wird, habe ich im OnRowDataBound Ereignis des GridViews jeden Button mit einem “onclick”-Attribute versehen.

   1: protected void PersonGridView_OnRowDataBound(object sender, GridViewRowEventArgs e) {
   2:     Button Timer_Button = null;
   3:     HiddenField Timer_Counter_HiddenField = null;
   4:     System.Web.UI.WebControls.Image image = null;
   5:  
   6:     if(e.Row.RowType == DataControlRowType.DataRow) {
   7:         image = (System.Web.UI.WebControls.Image)e.Row.FindControl("Person_Status_Image");
   8:         Timer_Counter_HiddenField = (HiddenField)e.Row.FindControl("Timer_Counter_HiddenField");
   9:         Timer_Button = (Button)e.Row.FindControl("Timer_Button");
  10:         Timer_Button.Attributes.Add("onclick", string.Format("StartTimer('{0}','{1}','{2}'); return false;", e.Row.ClientID, Timer_Counter_HiddenField.ClientID, image.ClientID));
  11:     } else {
  12:         if(e.Row.RowType == DataControlRowType.Header) {
  13:             e.Row.BackColor = Color.Azure;
  14:         }
  15:     }
  16: }

Die Webmethode die durch folgendes JavaScript aufgerufen wird, gibt in diesem Beispiel nur den Count und die ImageId der entsprechenden Row zurück.

   1: // Calls the webmethod
   2: function CheckStatus(ImageId, count) {
   3:     PageMethods.GetStatus(ImageId, count, onSucceded, onError);
   4: }

WebMethod:

   1: [WebMethod]
   2: public static IList<string> GetStatus(string imageId, string count) {
   3:     IList<string> result = new List<string>();
   4:     result.Add(imageId);
   5:     result.Add(count);
   6:     return result;
   7: }

Am Schluss wir mit der onSucceded das Resultat ausgewertet und in diesem Fall wenn der Counter 3 mit dem Image “Done” od. “Ausgeführt” versehen (Kann natürlich eine Status-abfrage an ein Drittsystem sein, die dann verarbeitet wird.

   1: // In case the webmethod is ok.
   2: function onSucceded(result) {
   3:     var count = parseInt(result[1]);
   4:     if (count === 3) {
   5:         var img = $get(result[0]);
   6:         img.src = "../Images/AuftragBeendet.gif";
   7:     }
   8: }
Ich hoffe es war ein kleines, aber nützliches Beispiel und bin auf jegliche Kritik oder auch Lob offen.

Bericht: .NET Usergroup Karlsruhe: Umbraco – Das freundliche CMS

19.09.2009 19:24:00 | Alexander Zeitler

.NET Usergroup Karlsruhe Logo

Am vergangenen Donnerstag fand wie angekündigt das erste Treffen der .NET Usergroup Karlsruhe nach der Sommerpause statt.

Das Thema “Umbraco – Das freundliche CMS” wurde präsentiert von Ralf Schoch.

Unterstützung bekam Ralf durch Thomas Höhler, MVP für Umbraco.

Nach einem groben Überblick über die Features von Umbraco gingen Ralf und Thomas auf die Details von Umbraco ein.

Umbraco - the friendly cms 

Dabei zeigte sich, dass Umbraco sehr leistungsfähig und flexibel ist, z.B. durch Templates und die Verwendung von ASP.NET User Controls – allerdings sollte man sich für die Administration ein wenig mehr Zeit nehmen. Dies erleichtert den späteren Anwendern des Systems die Arbeit.

Bereits während der Demonstration fand eine rege Diskussion statt, die im Anschluss an den Vortrag noch vertieft und auf weitere Themen wie “Lernen durch Lehren” ausgedehnt wurde.

Dank Ralfs Vortrag habe ich mich dazu entschlossen, Umbraco noch einmal näher zu betrachten, da ich es vor einigen Jahren als relativ schwer bedienbar wieder zur Seite gelegt hatte ;-)

Hier einige Bilder vom Abend:

Ralf gibt einen Überblick…

Ralf gibt einen Überblick…

Ralf und Umbraco in Action

Ralf und Umbraco in Action

Thomas erklärt weitere Details zu Umbraco.

Thomas erklärt weitere Details zu Umbraco.

BinScope Binary Analyzer

19.09.2009 19:20:00 | Ozgur Aytekin

BinScope is a Microsoft verification tool that analyzes binaries on a project-wide level to ensure that they have been built in compliance with Microsoft’s Security Development Lifecycle (SDL) requirements and recommendations. BinScope checks that SDL-required compiler/linker flags are being set, strong-named assemblies are in use, up-to-date build tools are in place, and the latest good ATL headers are being used. BinScope also reports on dangerous constructs that are prohibited by SDL.

http://www.microsoft.com/downloads/details.aspx?FamilyID=90E6181C-5905-4799-826A-772EAFD4440A&displaylang=en

Commands aus ListView ausführen

19.09.2009 13:01:40 | Norbert Eder

Mit Hilfe einer ListView ist es einfach möglich, Daten aus einer Datenquelle darzustellen. Dazu ist lediglich die Eigenschaft View zu definieren. Durch die Angabe von GridViewColumn Elementen und dem dazugehörigen DisplayMemberBindings werden die Daten aus der zugewiesenen Datenquelle auch schon angezeigt. <ListView ItemsSource="{Binding...

Commands aus ListView ausführen

19.09.2009 13:01:40 | Norbert Eder

Mit Hilfe einer ListView ist es einfach möglich, Daten aus einer Datenquelle darzustellen. Dazu ist lediglich die Eigenschaft View zu definieren. Durch die Angabe von GridViewColumn Elementen und dem dazugehörigen DisplayMemberBindings werden die Daten aus der zugewiesenen Datenquelle auch schon angezeigt. <ListView ItemsSource="{Binding...

Neue .NET Usergroup in Augsburg

18.09.2009 18:22:53 | Thomas Schissler

image

Wir haben einen neuen Nachbarn bekommen :-)

In Augsburg gibt es nun auch eine .net Usergroup. Diese wird von Tobias Schmid geleitet. Damit ist nun also die Lücke zwischen München und Ulm geschlossen und ich freue mich auf eine gute Zusammenarbeit.

Apropos Zusammenarbeit, ganz besonders freut es mich, dass ich am 14.10.2009 beim Gründungstreffen einen Vortrag zum Thema “Durchgängige Entwicklungsprozesse mit Visual Studio Team System” halten darf.

Dann auf gute Nachbarschaft :-)

http://www.ug-augsburg.net/

CCD: Mein Senf zu Dariusz Blogeintrag

18.09.2009 13:47:12 | Rainer Hilmer

Es geht um folgenden Eintrag aus Dariusz Blog:

http://blogs.msdn.com/dparys/archive/2009/01/20/clean-code-mein-versuch-daran-zu-arbeiten.aspx


Leider kann man keine neuen Kommentare an seinen Artikel hängen, also schreibe ich meinen Senf in mein Blog.

Es gibt an deiner Lösung mehrere Dinge die ich noch für verbesserungswürdig halte.

1. Eine Methode die nichts weiteres macht als eine andere Methode aufzurufen, ergibt keinen Sinn.
Statt

      private bool IsProxyValid()
      {
         return IsProxyOpen();
      }

      private bool IsProxyOpen()
      {
         return IsProxyInstance()
            ? proxy.State == CommunicationState.Opened : false;
      }

      private bool IsProxyInstance()
      {
         return proxy != null;
      }

könntest du eine Methode einsparen und es gleich so machen:

      private bool IsProxyValid()
      {
         return IsProxyInstance()
            ? proxy.State == CommunicationState.Opened : false;
      }

      private bool IsProxyInstance()
      {
         return proxy != null;
      }

Aber Moment, ich bin noch nicht fertig.

2. Deine Proxy-Klasse ist doch sowieso instanziiert, oder? Das klein geschriebene Wort proxy ist jedenfalls ein Indiz dafür. Ein weiteres ist der Zugriff auf das State-Property. Das ist doch wohl nicht statisch, oder? IsProxyInstance dürfte demnach also immer true zurück liefern. Die Methode kannst du dir also sparen.

3. Ich stolpere immer wieder über diese Zeile:

return IsProxyInstance()
            ? proxy.State == CommunicationState.Opened : false;

Ich muss gut überlegen was hier passiert - und das bedeutet schon daß hier etwas gegen das CCD-Prinzip verstößt.
Mal sehen, Da wird gefragt, IsProxyInstance. Dann wird eine weitere Prüfung ausgeführt, die ermittelt ob der Kommunikationskanal offen ist. Was passiert, wenn er nicht offen ist? Dann ergibt diese zweite Prüfung false.
In diesem Falle würde sich dieses Bild ergeben:
return true ? false : false
Es wird zwar korrekt zurück gegeben daß der Proxy in einem invaliden Zustand ist, aber trotzdem sieht das Konstrukt doch reichlich seltsam und verwirrend aus.
Wenn du jetzt meinen Punkt 2 hier einfließen lässt, ergibt sich als neue (zwischenzeitliche) Lösung das:

      private bool IsProxyOpen()
      {
         return proxy.State == CommunicationState.Opened;
      }

4. Robert C. Martin hat in seinem Buch auch empfohlen daß Code lesbar sein sollte wie ein Buch. Darauf bist du ja auch eingegangen - nur nicht konsequent. Dein Code liest sich so:
if is proxy valid
Nach der Revision aus Punkt 2 und 3 so:
if is proxy open
Du musst zugeben, das ist kein korrektes Englisch. Müsste es nicht so aussehen?
if proxy is open
Daraus mache ich eine Anforderung. Der Code sollte demnach so aussehen:

if(proxy.IsOpen)

Dieses Ergebnis erreichen wir, indem wir die Prüfung in die Proxy-Klasse auslagern. Das ist nicht nur legitim, sondern sogar besser. Auf diese Weise erreichen wir eine höhere Flexibilität und weniger Redundanz. Die Prüfung muss nur einmal geschrieben werden, egal wie viele Komponenten und Applikationen du hast!
Ein weiterer Pluspunkt: Damit ist das Separation of Concerns Prinzip erfüllt. Es obliegt dem Proxy, seinen Status anzugeben.
Ich schreibe in die Proxy-Klasse ein öffentliches, nicht statisches readonly boolean Property "IsOpen" und verlagere den gesamten Prüfcode in den Getter.

      public bool IsOpen
      {
         get { return this.State == CommunicationState.Opened; }
      }

An dieses Property gelangt man nur über eine Instanz (Prüfung darauf entfällt also) und der Code liest sich wie korrektes Englisch.
Übrigens könnte this. entfallen. Ich habe es eingebaut um darauf hinzuweisen daß das State-Property aus der selben Klasse stammt.

if(proxy.IsOpen)
DotNetKicks-DE Image

Nachlese zum RIA Summer Jam

18.09.2009 09:36:58 | Oliver Scheer

Letztes Wochenende waren mein Kollege Sebastian Grassl und meiner einer auf dem RIA Summer Jam. Dieses ziemlich coole Event wurde von der Adobe Flex Usergroup München (http://www.fugmuc.de/) organisiert.

Wir hatten dort zwei Vorträge über das neue Expression Studio 3 und Silverlight 3. Die Slides zum Vortrag gibt es hier:

 

Mehr Informationen zum RIA Summer Jam gibt es unter: http://www.riasummerjam.de/

T-34: Das Windows SDK

18.09.2009 00:00:00 | Oliver Scheer

34_0_thumb1Freitag, 18. September 2009

Nur noch 34 Tage bis zum Windows 7 Launch.

Heute dreht sich alles um das Windows Software Development Kit

Microsoft bringt für jede Version von Windows ein besonderes Kit für die Entwicklung von Anwendungen heraus. Dieses steht Interessierten kostenfrei zur Verfügung: Das Windows Software Development Kit.

Mehr

New Code to HTML Addin for Visual Studio 2008 and Windows Live Writer

17.09.2009 20:47:27 | Rainer Hilmer

There’s a new Code to HTML Addin for Visual Studio 2008 and a Plugin for Windows live writer from the same author.
I saw it mentioned by MSDN News on Twitter today and I had to download and install it out of curiosity.
The result looks great. What do you think?

 

Code Snippet
  1. using System;
  2. using System.Xml.Schema;
  3. using DotNetExpansions.IO;
  4.  
  5. namespace WithValidation
  6. {
  7.    internal class Program
  8.    {
  9.       private static void Main()
  10.       {
  11.          // Variation for use with Validation.
  12.          var config = new Configuration4Validation
  13.                           {
  14.                              BackGroundColorSettings = new Configuration4Validation.BackGroundColor
  15.                                                           {
  16.                                                              R = 255,
  17.                                                              G = 255,
  18.                                                              B = 255
  19.                                                           },
  20.                              FontColorSettings = new Configuration4Validation.FontColor
  21.                                                     {
  22.                                                        R = 0,
  23.                                                        G = 0,
  24.                                                        B = 0
  25.                                                     },
  26.                              UserFont = new Configuration4Validation.FontParams
  27.                                            {
  28.                                               Name = "Calibri",
  29.                                               Size = 12
  30.                                            },
  31.                              WindowSettings = new Configuration4Validation.WindowParams
  32.                                                  {
  33.                                                     Height = 600,
  34.                                                     Width = 800,
  35.                                                     X = 300,
  36.                                                     Y = 200
  37.                                                  }
  38.                           };
  39.  
  40.          var configManager = new XmlIo(Environment.CurrentDirectory, "config.xml");
  41.          // Saving your configuration to the XML file.
  42.          configManager.Save(config);
  43.  
  44.          // Loading a configuration with validation
  45.          configManager.ValidationEvent += OnValidationEvent;
  46.          Configuration4Validation newConfig;
  47.          try
  48.          {
  49.             if(configManager.FileIsValidWith("configSchema.xsd"))
  50.                newConfig = configManager.Load<Configuration4Validation>();
  51.             else
  52.                DoSomethingAppropriate();
  53.          }
  54.          catch(XmlSchemaValidationException problem)
  55.          {
  56.             Console.WriteLine(problem.ToString());
  57.          }
  58.  
  59.          // Verhindert das selbsttätige Schließen des Konsolenfensters.
  60.          Console.WriteLine("\nPress any key to terminate the program.");
  61.          Console.ReadKey();
  62.       }
  63.  
  64.       // Only needed when validation is involved.
  65.       private static void OnValidationEvent(object sender, System.Xml.Schema.ValidationEventArgs e)
  66.       {
  67.          // Just a demo. Do something appropriate with the event.
  68.          Console.WriteLine(e.Exception);
  69.          Console.WriteLine(e.Message);
  70.          Console.WriteLine(e.Severity);
  71.       }
  72.  
  73.       // Only needed when validation is involved.
  74.       private static void DoSomethingAppropriate()
  75.       {
  76.          // Do something appropriate.
  77.       }
  78.    }
  79. }

Code Snippet
  1. using System;
  2. using System.Drawing;
  3. using DotNetExpansions.IO;
  4.  
  5. namespace WithoutValidation
  6. {
  7.    internal class Program
  8.    {
  9.       private static void Main()
  10.       {
  11.          // Variation for use without validation.
  12.          var config = new Configuration
  13.                          {
  14.                             BackgroundColor = .FromArgb(255, 255, 255),
  15.                             FontColor = .FromArgb(0, 0, 0),
  16.                             UserFont = new Font("Calibri", 12),
  17.                             WindowLocation = new (300, 200),
  18.                             WindowSize = new (800, 600)
  19.                          };
  20.         
  21.  
  22.          var configManager = new XmlIo(Environment.CurrentDirectory, "config.xml");
  23.          // Saving your configuration to the XML file.
  24.          configManager.Save(config);
  25.  
  26.          // Loading your configuration from the xml file.
  27.          Configuration newConfig = configManager.Load<Configuration>();
  28.  
  29.          // Verhindert das selbsttätige Schließen des Konsolenfensters.
  30.          Console.WriteLine("\nPress any key to terminate the program.");
  31.          Console.ReadKey();
  32.       }
  33.    }
  34. }

By the way, the code in these boxes are quick reference demos for the XmlIO class, which is part of my .Net Expansions Framework. You can download the latest release at http://cyrons.svn.beanstalkapp.com/general/DotNetExpansions/tags. The framework comes along with complete intellisense support and a compiled help file (.chm).

DotNetKicks-DE Image

Webcast Serie - Silverlight in Deep – Das MVVM in Silverlight

17.09.2009 16:07:00 | Gregor Biswanger

  Ab heute gibt es einen weiteren Teil zu meiner Webcast-Serie – Silverlight in Deep. Die Serie besteht aus 5 Teilen und ist für fortgeschrittene Silverlight Entwickler.

Überblick der Serien „Silverlight in Deep“:

Teil 1 – AOP in Silverlight
Teil 2 – Das MVVM in Silverlight
Teil 3 – Das Testen von Silverlight Anwendungen
Teil 4 – Microkernel Unity in Silverlight
Teil 5 – Silverlight als CMS verwenden

http://www.microsoft.com/germany/msdn/webcasts/serien/MSDNWCS-0907-04.mspx

Das Model-View-ViewModel in Silverlight

Mit Silverlight und WPF bietet Microsoft erstmals die Möglichkeit, Entwickler und Designer getrennt voneinander arbeiten zu lassen - was nicht ganz einfach ist. Die Oberfläche benötigt einen Source-Code zur Kommunikation mit der Geschäftslogik. Schnell sammelt sich viel Source-Code in der Code-Behind-Datei an, und je größer das Projekt wird, desto komplexer wird es. Um diesem Problem elegant aus dem Weg gehen zu können, steht für Silverlight und WPF das Entwurfsmuster 'Model-View-ViewModel' zur Verfügung. Damit erst wird ein getrenntes Arbeiten von Designer und Entwickler möglich. Und das ohne wechselseitige Abhängigkeiten von Oberflächenlogik und Geschäftslogik.

http://www.microsoft.com/germany/MSDN/webcasts/library.aspx?id=1032426801

Über weiteres Feedback zum Webcast freue ich mich jetzt schon.

 

Prüfen, ob sich ein Webpart im Design Modus befindet

17.09.2009 09:29:23 | Andre Kraemer

Während der Webpart Entwicklung kann es nützlich sein, zu wissen ob man sich gerade im Webpart Design Modus befindet. Folgender Codeausschnitt zeigt, wie man an diese Information kommt:
protectedbool IsDesignMode()
{ bool designMode =true; if (this.Page
!=null)
{ WebPartManager wp = WebPartManager.GetCurrentWebPartManager(this.Page); if (wp
!=null)
{ designMode = (wp.DisplayMode
!= WebPartManager.BrowseDisplayMode);
} } return designMode;
}
Hilfreich ist dies zum Beispiel, um Validatoren während des Design Modus abzuschalten.



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

T-35: Meine Entwicklungsumgebung

17.09.2009 00:00:00 | Oliver Scheer

35_0

Donnerstag, 15. September 2009

Nur noch 35 Tage bis zum Windows 7 Launch.

Heute beginnen wir mit den echten Entwicklerthemen rund um Windows 7. Das soll nicht heißen, dass es jetzt für alle Nicht-Entwickler langweilig wird. Ich möchte die Artikel so halten, dass sie mit einer Übersicht für alle beginnen und anschließend etwas (aber auch nur etwas) tiefer gehen. Vielleicht bekommt ja der eine oder andere Nicht-Entwickler Spaß am Entwickeln ;)

Mehr

Build Automation in TFS 2010 – Vortrag bei TSUG-VE

16.09.2009 08:55:59 | Thomas Schissler

Team System User Group - Virtual Edition

Mit Martin Woodward haben wir einen der weltweit bekanntesten Team System MVPs zu Gast der in seinem Vortrag über die neuen Möglichkeiten des Build Systems im TFS 2010 informieren wird. Dass sich beim Build in TFS2010 einiges getan hat, wird bereits aus der Auflistung der Hauptpunkte von Martins Vortrag ersichtlich. Es wird um Private Builds, Gated Checkins und um die neuen workflow-basierten Builddefinitionen gehen.

Über TSUG-VE
Die Team System User Group – Virtual Edition ist eine weltweite Usergroup zum Thema Team System. Die Treffen finden virtuell in Live Meeting statt. Weitere Informationen gibt’s unter http://www.tsug-ve.com.

Kostenloser Info-Tag zu Visual Studio Team System 2010 bei .net Developer-Group Ulm

16.09.2009 08:13:46 | Thomas Schissler

headerImage

Am 27.10.09 veranstaltet die .net Developer Group eine kostenlose Informationsveranstaltung rund um Visual Studio Team System 2010. Ein Tag voll gepackt mit wertvollen Informationen rund um die neue Version der Microsoft ALM-Plattform.

Mit Visual Studio Team System 2010 führt Microsoft voraussichtlich Anfang nächsten Jahres eine neue Version seiner Entwicklungsplattform ein, die mit zahlreichen Neuerungen aufwartet. Diese neue Version wartet mit einer großen Zahl umfangreicher Neuerungen auf wie z.B.:

  • Architektur-Diagramme und UML-Support
  • Erweiterte Funktionen für Test-Planung und Test-Durchführung
  • Unterstützung von UI-Tests
  • Verbesserte Verwaltung von Builds
  • Verbesserte Verwaltung von Work Items
  • Neue Reporting-Funktionen speziell für kleinere Teams
  • Und vieles mehr

Um diese Umfangreichen Neuerungen alle vorstellen zu können, veranstaltet die .Net Developer-Group Ulm erstmalig einen ganztägigen Event um damit der Fülle von Funktionen auch gerecht zu werden. Dabei werden die beiden Referenten Christian Binder (http://blogs.msdn.com/cbinder) und Thomas Schissler (http://www.artiso.com/problog) nicht nur die neuen Funktionen vorstellen, sondern auch aufzeigen, welche Probleme aus dem Entwickler-Alltag damit gelöst werden können. Der Vortrag richtet sich dabei nicht nur an Entwickler und Projektleiter die bereits mit Team System arbeiten, sondern erläutert auch grundsätzliche Konzepte und bereits bestehenden Funktionen der Tools Visual Studio Team System und Team Foundation Server und bietet damit auch denjenigen einen guten Einstieg, die sich noch nicht intensiv mit Microsofts ALM-Plattform auseinandergesetzt haben.

Für die Veranstaltung ist eine Registrierung erforderlich. Interessenten können sich unter http://www.dotnet-ulm.de/vsts2010 kostenlos registrieren.

T-36: Systemsteuerung

16.09.2009 00:00:00 | Oliver Scheer

36_0_thumb1 Mittwoch, 16. September 2009

Nur noch 36 Tage bis zum Windows 7 Launch.

Heute befassen wir uns mit dem zentralen Konfigurationsmanagement von Windows 7 – der Systemsteuerung.

Mehr

Spatial Results View

15.09.2009 16:19:00 | Martin Hey

Für die Verwendung der sogenannten "spatial datatypes" geometry und geography gibt es im SQL-Server 2008 eine weitere Ergebnisanzeige. Diese ist in meinen Augen sehr sinnvoll, da man sich hiermit die Ergebnisse visualisieren kann und damit eine bessere Vorstellung von den Werten bekommt.

Probiert man das Ganze mit dem geography-Datentyp aus, wird man feststellen, dass die Anzeige analog zum geometry-Datentyp vor einem weißen Hintergrund ohne Referenzwert ist. Das macht die Vorstellung hier etwas komplizierter. Auf Beginning Spatial hab ich einen interessanten Eintrag gefunden. Hier gibt es eine Dataset mit den Ländergrenzen, das man hinter sein Ergebnis legen kann.

T-37: Probleme lösen mit dem Problem Step Recorder

15.09.2009 00:00:00 | Oliver Scheer

37_0 Dienstag, 15. September 2009

Nur noch 37 Tage bis zum Windows 7 Launch.

Was macht man eigentlich, wenn man ein Problem mit irgendeiner Anwendung (also nicht unbedingt nur Microsoft-Programmen) hat? Vor allem wenn man einfach keine Lösung des Problems finden kann? Vielleicht hat man ja sogar ein Bug gefunden und möchte diesen dem Entwickler besser beschreiben.

Für solche Szenarien steht jetzt das Programm psr.exe zur Verfügung oder wie der deutsche Benutzer sagen würde „Schritte zum Reproduzieren von Problemen aufzeichnen“. Im Englischen heißt das Programm kurz und knapp „Problem Step Recorder“.

Mehr

dotnet-forum.de - dabei sein und mehrfach profitieren

14.09.2009 23:30:42 | Jan Welker

Viele hundert Mitglieder des .NET-Forum.de haben inzwischen erkannt, dass im Forum freundlich und kompetent Fragen zu allen erdenklichen Bereichen .NET Entwicklung beantwortet werden. Doch das Forum bietet viel mehr, zum Beispiel informiert es über News, Termine und aktuelle Blogbeiträge aus dem Microsoft .NET Umfeld.

Jetzt ist eine neue Rubrik dazu gekommen. Die Member Offers.
In diesem Bereich erhalten Mitglieder des Forums Rabatte und Gratisangebote (!) von ausgewählten Partnern.

Im Moment findet man dort:

- ein gratis Hörbuch zum Thema Software-Engineering
- 15 % Rabatt auf das dotnet-Magazin
- Rabatt auf die Visual Studio One
- 15% auf Logos, Icons und Boxshots
- 5% auf Clean Code Developer Camps
- 15% Rabatt auf ein Professional Developer Training

In Kürze wird sicher das ein oder andere interessante Angebot hinzu kommen. Ich nehme gern neue Angebote entgegen ;-)

PHP Unconference 2009 in Hamburg – Das Leben ist ein Wunschkonzert

14.09.2009 16:16:00 | Jan Schenk



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/09/14/php-unconference-2009-in-hamburg-das-leben-ist-ein-wunschkonzert.aspx'; tweetmeme_source = 'jansche';

Die dritte PHP Unconference fand am Wochenende in Hamburg statt. Ulf Wendel hat die Nicht-Konferenz sehr schön zusammengefasst, was ich mir nun aus dem einfachen Grund, dass ich es selber nicht besser könnte, spare.

Ich gehe an dieser Stelle etwas näher darauf ein, was die PHP Unconference mit Microsoft und meinem Job zu tun hat, und warum ich mich über eine Session mit 11 Teilnehmern gefreut habe wie ein Schneekönig.

phpunconference_CIMG0669_stitch_thumb

Die PHP Unconference, betreut von der PHP Usergroup Hamburg, ist das gesellschaftliche PHP-Event des Jahres in Deutschland. Dort trifft man sich, dort kennt man sich. Es geht zu wie unter Freunden, von Misgunst, Neid oder gegenseitigem Misstrauen ist hier nicht der Hauch einer Spur zu finden. Um so schwieriger, vermutet man, muss der Einstieg in so einen Kreis sein.
Zu unrecht. Natürlich hatte ich mit Pierre Joye als “Pate” einen guten Turbolader an meiner Seite. Als Core Developer und PHPler der ersten Stunde kennen ihn die meisten der alten Hasen.

Auch dass die Veranstaltung mitunter von Microsoft gesponsort wurde, hat ein klares Zeichen gesetzt: “Wir nehmen euch ernst. Wir respektieren euch. Und wir können gerne mal was zusammen machen.”

Und genau darum geht es mir auch. Interop heisst das Stichwort. “Lasst uns doch mal was zusammen machen” bedeutet beispielsweise PHP-Unterstützung in Microsofts Cloud Computing, Windows Azure. Es ist ein ernst gemeintes Angebot, das unterstrichen wird durch ernst gemeintes Engagement in der PHP Community.

Was mich immer wieder wundert ist die tatsächliche Offenheit der Open Source Gemeinde gegenüber mir als Microsoftie. Ich habe bisher noch nie schlechte Erfahrung gemacht, wenn es um eine offene Diskussion, einen Vortrag oder auch nur einen Erfahrungsaustausch ging. Und ebenso würde ich hier wieder nicht enttäuscht und habe bei den PHPlern die Offenheit gefunden, an der es Microsoft selbst so lange gemangelt hat.

Mein eingereichter Sessionvorschlag “Cloud Computing und PHP – PHP in Windows Azure” hat durch Teilnehmervoting – wie auf einer Unconference üblich – am zweiten Tag einen Slot bekommen. Aus der Session wurde eine sehr schöne offene Diskussion über Cloud Computing. Auch wenn es nur 11 oder 12 Teilnehmer waren. Mein Dank geht an dieser Stelle auch nochmal an Johannes Schlüter und Pierre Joye für ihre aktive Teilnahme.

Was bleibt zu sagen? Ich hoffe, dass ich ein paar Leuten im Gedächtnis geblieben bin, und sei es nur wegen des Hutes, der natürlich auch diesmal nicht gefehlt hat. Wahrnehmung in der Community braucht Zeit, dessen bin ich mir bewusst. Mit einer Teilnahme an einer (Nicht-)Konferenz habe ich noch nichts bewegt. Daher freue ich mich schon auf bekannte Gesichter auf der IPC und dem PHP World Kongress und weiss, dass der nächsten PHP Unconference meine Teilnahme wieder sicher ist!

Alle Berichte zur PHP Unconference findet ihr im offiziellen Wiki unter http://www.php-unconference.de/wiki/index.php?title=PhpUnconf2009Trackbacks

Danke an die Organisatoren und alle Teilnehmer!

Der Windows.old Ordner und wie ich ihn los werde

14.09.2009 15:16:33 | Jan Schenk



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/09/14/der-windows-old-ordner-und-wie-ich-ihn-los-werde.aspx'; tweetmeme_source = 'jansche';

Windows 7 legt bei Installation auf einem System, auf dem bereits eine Windows-Installation vorhanden ist, einen Backup-Ordner an, den man irgendwann nicht mehr braucht. Den Zeitpunkt dafür muss man selber wählen, normalerweise, wenn man mit seinem neuen System glücklich ist und nichts vermisst.

Der Ordner lässt sich nicht ohne weiteres löschen, da spezielle Berechtigungen gesetzt sind, und ein manueller Löschvorgang den Anwender mit tausenden von Dialogen überschüttet.

Im Prinzip funktioniert das Entfernen wie früher für Vista, beschrieben wird das Ganze für Vista hier:
http://support.microsoft.com/kb/933212

Bei Windows 7 versteckt sich die Auswahlmöglichkeit hinter einer weiteren Option im “Disk Cleanup” zu deutsch “Datenträger-Bereinigung”.

Laufwerk auswählen, dann “Clean up system files” auswählen:

image

Womit nochmal eine Laufwerksauswahl und dann folgendes Fenster erscheint, in dem dann auch wieder die Option  “Previous Windows Installation(s)” auftaucht:

image

Und weg damit. So einfach kann es sein. Bei mir waren es knapp 10GB, die der Vorgang frei gegeben hat.

Der erste Windows 7-Werbespot

14.09.2009 10:43:44 | Oliver Scheer

Großartig

T-38: Windows 7-Tools Teil 2

14.09.2009 00:00:00 | Oliver Scheer

38_0

Montag, 14. September 2009

Nur noch 38 Tage bis zum Windows 7 Launch.

Heute dreht sich alles um die kleinen netten Systemtools, die für die Administration und Ressourcenverwaltung zuständig sind.

Mehr

Neuer Microsoft Partner Blog und Neuigkeiten zu den netwwwork-Abenden

13.09.2009 16:25:59 | Kay Giza

Meine Kolleginnen und Kollegen aus dem DPE Partner-Team haben einen neuen Weblog ins Leben gerufen. Er ist so neu, dass er noch nicht mal auf unserer offiziellen Weblogliste steht (... noch nicht :)). In dem neuen Partner-Blog erhalten Sie Informationen und zugleich eine Präsentationsplatform für Ihre Erfolgstorys. Die Idee ist sehr simpel, neben den typischen Blogbeiträgen... [... mehr Informationen 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

Phugoid

12.09.2009 22:58:00 | Ozgur Aytekin

The phugoid is a constant angle of attack (AoA) but varying pitch angle exchange of airspeed and altitude. It can be excited by an elevator singlet (a short, sharp deflection followed by a return to the centered position) resulting in a pitch increase with no change in trim from the cruise condition. As speed decays, the nose will drop below the horizon. Speed will increase, and the nose will climb above the horizon. Periods can vary from under 30 seconds for light aircraft to minutes for larger aircraft. Microlight aircraft typically show a phugoid period of 15–25 seconds, and it has been suggested that birds and model airplanes show convergence between the phugoid and short period modes. A classical model for the phugoid period can be simplified to about (0.85 × speed in knots) seconds, but this only really works for larger aircraft.

Phugoids are often demonstrated to student pilots as an example of the speed stability of the aircraft and the importance of proper trimming. When it occurs, it is considered a nuisance, and in lighter airplanes (typically showing a shorter period) it can be a cause of pilot-induced oscillation.

The phugoid, for moderate amplitude[1], occurs at an effectively constant angle of attack, although in practice AoA actually varies by a few tenths of a degree. This means that the stalling AoA is never exceeded, and it is possible (in the

An unstable or divergent phugoid is caused, mainly, by a large difference between the incidence angles of the wing and tail. A stable, decreasing phugoid can be attained by building a smaller stabilizer on a longer tail, or, at the expense of pitch and yaw "static" stability, by shifting the center of gravity to the rear.

The name apparently is an example of poor Greek translation by Lanchester, a British aerodynamicist who first predicted it. The English word was mistakenly derived from the Greek word for "fleeing, flight" (phuge) instead of the Greek word for "flying, flight".

http://en.wikipedia.org/wiki/Phugoid

Stroop-Effekt

12.09.2009 21:17:00 | Ozgur Aytekin

Der Stroop-Effekt bezeichnet ein experimentalpsychologisches Phänomen, das bei mentalen Verarbeitungskonflikten auftritt. Er zeigt, dass trainierte Handlungen nahezu automatisch ablaufen, während ungewohnte Handlungen eine größere Aufmerksamkeit benötigen. Im klassischen Experiment sollen die Probanden die Farben der dargebotenen Wörter benennen. Handelt es sich dabei um Farbwörter, die nicht ihrer Druckfarbe entsprechen, steigen Reaktionszeit und Fehlerzahl.

http://de.wikipedia.org/wiki/Stroop-Effekt

Wie wir entscheiden - Das erfolgreiche Zusammenspiel von Kopf und Bauch

12.09.2009 10:08:00 | Ozgur Aytekin

Spiegelneuronen lassen uns Mitleid empfinden, und Dopamin bestimmt, welche Eissorte wir wählen: Der neue Blick auf die Gefühle ermöglicht das optimale Zusammenspiel von Bauch und Kopf. Nur wer Vernunft und Intuition zusammenbringt, trifft die richtige Entscheidung.

Wir entscheiden entweder rational oder emo­tional. Das meinen Denker schon seit Platon. Aber wie meistert dann ein Pilot trotz Todesangst eine Notlandung, und warum macht Shoppen trotz überzogenen Kontos glücklich? Inzwischen weiß die Forschung: Entscheidungen entstehen im Zusammenspiel von Gefühl und Verstand, die Ratio ist längst nicht mehr der Chef im Gehirn. Im Labor des Nobelpreisträgers Eric Kandel hat Jonah Lehrer die feinen Mechanismen unserer Sinne und unseres Nervensystems studiert. Von der amerikanischen Presse als »the wunderkind« gefeiert, zeigt der 28-Jährige, wie wir alle uns bei privaten wie beruflichen Entscheidungen dieses neuen Wissens bedienen können.



http://www.piper-verlag.de/sachbuch/buch.php?id=13462&page=buchaz

Lobotomie

12.09.2009 10:07:00 | Ozgur Aytekin

Die Lobotomie (oft synonym mit Leukotomie verwendet) ist eine neurochirurgische Operation, bei der die Nervenbahnen zwischen Thalamus und Stirnhirn sowie Teile der grauen Substanz durchtrennt werden. Sie wurde ursprünglich zur Schmerzausschaltung in extrem schweren Fällen angewendet, dann bei agitierten psychischen Erkrankungen wie Psychosen und Depressionen. Als Folge der Lobotomie tritt eine Persönlichkeitsänderung mit Störung des Antriebs und der Emotionalität auf.

Der Begriff Lobotomie stammt vom lateinischen lobus (Lappen) und bezeichnet einen entsprechenden Neocortex-Abschnitt. Strenggenommen dürfte der Begriff deshalb nur für die Schädigung der grauen Substanz des Kortexlappens verwendet werden. Der Begriff Leukotomie leitet sich ab von leukos (gr. weiß), der Bezeichnung für die Faserverbindungen, welche die weiße Substanz des Zentralnervensystems bilden, und tome (Schnitt). Darum dürfte diese Bezeichnung strenggenommen nur bei der Schädigung der weißen Substanz verwendet werden. Da bei der Operation jedoch sowohl graue als auch weiße Substanz zerstört wird, verwendet man die Begriffe Lobotomie und Leukotomie praktisch synonym.

Nach zunehmender Kritik wurde die Lobotomie weitgehend durch die Behandlung mit Psychopharmaka und stereotaktische Operationen ersetzt, z. B. die Thalamotomie und die Zingulotomie.

http://de.wikipedia.org/wiki/Lobotomie

Präfrontaler Cortex

12.09.2009 09:42:00 | Ozgur Aytekin

Der präfrontale Cortex ist ein Teil des Frontallappens der Großhirnrinde (Cortex). Er befindet sich an der Stirnseite des Gehirns und ist eng mit den sensorischen Assoziationsgebieten des Cortex, mit subcorticalen Modulen des limbischen Systems und mit den Basalganglien verbunden.

Der präfrontale Cortex empfängt die verarbeiteten sensorischen Signale, integriert sie mit Gedächtnisinhalten und aus dem limbischen System stammenden emotionalen Bewertungen und initiiert auf dieser Basis Handlungen. Er wird als oberstes Kontrollzentrum für eine situationsangemessene Handlungssteuerung angesehen und ist gleichzeitig intensiv an der Regulation emotionaler Prozesse beteiligt. Deshalb wird er auch als "Supervisory Attentional System" (SAS) bezeichnet.

http://de.wikipedia.org/wiki/Pr%C3%A4frontaler_Cortex

T-40: Spiel und Spaß

12.09.2009 00:00:00 | Oliver Scheer

40_1Samstag, 12. September 2009

Nur noch 40 Tage bis zum Windows 7 Launch.

Windows 7 bietet jede Menge Spiele – je nach Installation müssen diese allerdings noch nachinstalliert werden. So hat unsere IT-Abteilung doch tatsächlich vergessen, die Spiele auf unseren Business-PCs mit zu installieren. Na ja, solche Fehler

Mehr

T-39: Der Internet Explorer 8 für Endanwender

12.09.2009 00:00:00 | Oliver Scheer

39_0 Sonntag, 13. September 2009

Nur noch 39 Tage bis zum Windows 7 Launch.

Heute befassen wir uns mit dem neuen Internet Explorer 8, der nach langen Diskussionen zum Glück doch noch Bestandteil von Windows 7 geworden ist.

Es ist gar nicht so einfach, alle neuen Features des Internet Explorers aufzuzählen, daher habe ich mir Hilfe vom deutschen Internet Explorer Team geholt.

Mehr

Danger from the Deep

11.09.2009 22:29:00 | Ozgur Aytekin

Danger from the Deep (known as dangerdeep or DftD) is a free (as in free speech), Open Source World War II german submarine simulator. The program and source code is available under the GPL license and most of the artwork/data is released under a Creative Commons license (Attribution/NonCommercial/Non-Derivative works).

DftD is currently being developed on Linux (i386 and AMD64) and Windows. There are binarys available for Linux (i386 and amd64), Windows (32bit) and there are some old packages for MacOSX. Danger from the Deep makes use of SDL/OpenGL and thus should be portable to other operating systems or platforms.

http://dangerdeep.sourceforge.net/

[Poll] Commercial spread of Microsoft Silverlight

11.09.2009 12:45:22 | Gordon Breuer

Is your company using Microsoft Silverlight instead of Adobe Flash, yet? I'm planning to write a blog posting about this topic and want to get a quick overview about the (commercial) usage of Silverlight at the marketplace right now.

Thanks in advance for your help! :-)

DotNetKicks-DE Image

Best Practice - Increasing the Number of SQL Server Error Logs

11.09.2009 10:21:00 | Ozgur Aytekin

The SQL Server error log is a great place to find information about what is happening on your database server. Each SQL Server Error log will have all the information related to failures / errors that has occurred since SQL Server was last restarted or since the last time you have recycled the error logs. By default, there are six achieved SQL Server Error Logs along with the ERRORLOG which is currently used. However, it is a Best Practice to increase the number of SQL Server Error Logs from the default value of six. In this tip, you will see the steps which you need to follow to increase the number of SQL Server Error Logs.

http://www.mssqltips.com/tip.asp?tip=1835

T-41: Windows 7 Tools (Teil 1)

11.09.2009 00:00:00 | Oliver Scheer

41_0_thumb1Freitag, 11. September 2009

Nur noch 41 Tage bis zum Windows 7 Launch.

Heute dreht sich in unserem Countdown alles um die Standard-Windows-Tools, die für jeden nützlich sein könnten.

Mehr

DotNet Expansions under construction

10.09.2009 23:59:57 | Rainer Hilmer

I’m currently working on the framework. That’s why the repository is unavailable to the public for the time being.
Yadda yadda, nobody cares anyway. :-P

DotNetKicks-DE Image

Developing Interfaces in Outlook 2007

10.09.2009 20:30:00 | Ozgur Aytekin

Learn how to customize the Microsoft Office Outlook 2007 user interface using Microsoft Visual Studio Tools for Office 3.0.

From a development perspective, Microsoft Office Outlook 2007 is unique compared to Microsoft Office Word 2007 or Microsoft Office Excel 2007. Whereas Word 2007 and Excel 2007 are document-centric applications, Office Outlook 2007 does not have a single standard document type. Instead, Outlook 2007 is designed to work with multiple types of items that allow people to organize the details of their day-to-day routine and communicate with others. As a result, the Outlook 2007 user interface presents distinct challenges for programmers seeking to customize the Outlook 2007 user experience.

http://msdn.microsoft.com/de-ch/library/dd229324(en-us).aspx

.NET Usergroup Karlsruhe: Umbraco – Das freundliche CMS

10.09.2009 15:28:00 | Alexander Zeitler

.NET Usergroup Karlsruhe Logo

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

Thema

Das Umbraco – Das freundliche CMS mit Ralf Schoch.

Details zum Vortrag

Mit Umbraco etabliert sich zurzeit ein weiteres auf ASP.NET basierendes Content Management System (CMS).
Ralf Schoch stellt in seinem Vortrag bei der .NET User Group Karlsruhe das seit 2004 als Open Source verfügbare System vor.


Mit Umbraco werden drei unterschiedliche Zielgruppen adressiert: Benutzer, Designer und Entwickler.
Nach einem Überblick über die Funktionen des System wird basierend auf einer „nackten“ Installation die Einrichtung einer neuen ggf. auch die Migration einer bestehenden Webseite gezeigt.

Die Features für Entwickler sind:

  • Volle .NET Integration - Nutzung von .NET User Controls
  • Ajax – Kompatibel mit ASP.NET Ajax
  • Erweiterbares XSLT – Nutzung von .NET Methoden
  • Freie Wahl der .NET Sprache
  • Dokumentierte API
  • Event Modell
  • Vollständiger Source Code verfügbar
  • Offen und Erweiterbar

Teilnahme

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

DJK-Ost
Friedrichstaler Allee 52
76131 Karlsruhe

Vorabanmeldungen können auch per E-Mail an Frank Pfattheicher gesendet werden.

Poken, die moderne Visitenkarte

10.09.2009 12:32:00 | Thorsten Hans

NinjaPoken Durch den Blogpost von Dariusz wurde ich gerade auf Poken’s aufmerksam. Pokens sind eine digitale Form der Visitenkarte, die direkten Austausch erlaubt. Wirklich mal eine gute Idee die da aus dem Nachbarland kommt. Prompt habe ich mir natürlich eine Ninja-Poken bestellt.

Ob und wie sich Poken durchsetzt bleibt fragwürdig, allerdings finde ich die Idee gut und der Ninja-Poken sieht darüber hinaus auch noch extrem :-) gefährlich aus…

Übrigens kann man hier in Deutschland Pokens zum Preis von 14,90 Euro ohne Versandkosten bei Poken-bestellen kaufen.

 

Viel Spass mit euren Pokens, ich werde meinen auf der BASTA! dabei haben ;-)

 

Technorati-Tags: ,
DotNetKicks-DE Image

Richtig testen, oder: Was ist schneller… Foreach, LAMBDA Expressions, oder LINQ?

09.09.2009 23:43:00 | Peter Bucher

Einleitung

Der schweizer Kollege Daniel Schädler hat einen Blogpost mit dem Titel “Was ist schneller… Foreach, LAMBDA Expressions, oder LINQ?” veröffentlicht.

Nur schnell eine Korrektur zum Titel, die LINQ-Syntax wird – wie hier schon gezeigt – schlussendlich in die Erweiterungsmethoden-Syntax kompiliert.
Ich habe den Titel so übernommen, damit klar ist, dass das eine Antwort auf seinen Post darstellt.

Daniel hat sich die Frage gestellt, was wohl schneller ist: Listen per foreach, über LINQ oder die Erweiterungsmethoden Syntax für LINQ filtern.

Nun, ich wusste natürlich schon vorher, dass die Resultate nur ganz wenig auseinander liegen dürfen, weil:

  1. Wird die LINQ-Syntax in den Erweiterungsmethoden-Syntax übersetzt (Nahezu gleich).
  2. Arbeitet LINQ intern auch mit den Iteratoren, wie sie in foreach genutzt werden. Siehe Enumerable-Klasse im Reflector.

Abgesehen davon nutze ich diese Antwort in Form eines Blogposts einfach mal dazu, wie ich Geschwindigkeiten teste, auch wenn es in diesem Fall für mich theoretisch klar war, das alle in etwa gleich schnell sind.
Es braucht für einen Geschwindigkeitstest nicht unbedingt eine grafische Anwendung, auch wenn das natürlich nicht schlecht ist. Ich habe mir den Aufwand nicht gemacht und mich auf das Wesentliche konzentriert: Das Testen.

Verfälschte Tests und wie sie verhindert werden können

Der Test von Daniel liefert leider das falsche Resultat, sogar ein sehr verfälschtes.
Das liegt daran, das die Ergebnisse von LINQ bzw. den Erweiterungsmethoden als IEnumerable<T> zurückgegeben werden und diese zeitverzögert ausgeführt werden (deferred Execution).

Das heisst der ganze Code der die IEnumerable<T> Instanz liefert, wird erst ausgeführt, wenn das Ergebnis tatsächlich durchlaufen wird.
Dies kann bspw. mit <Menge>.Count(), <Menge>.ToList(), … angestossen werden.

Erst dann, und wirklich erst dann wird der Code überhaupt ausgeführt und braucht dann eben auch länger.

Auch wenn dies geschehen ist, bleibt das Ergebnis von Daniel noch verfälscht, denn eine Testiteration kann durch mehrere Faktoren verfälscht werden.
Sei das eine einmalige Kompilation einer Abfrage zur Laufzeit oder durch diversen Hintergrundprozessen die genau in dem Moment mehr Leistung benötigen als beim vorherigen Testkandidaten.

Es heisst also: Mehrere Iterationen einer Operation die getestet werden will, ausführen.

Darüber hinaus ist es noch so, dass das Gesamtergebnis auch noch bei mehreren Iterationen der zu testenden Operation verfälscht sein kann, weil eben die erste ausgeführte Operation verfälscht ist.

Um da einen Mittelwert zu bekommen, macht man über die ganzen Testläufe nochmals mehrere Testläufe.
Das hört sich jetzt womöglich ein bisschen verwirrend an, jedoch meine ich einfach gesagt nur folgendes:

  • Eine Operation: Einträge aus einer Menge filtern
  • Mehrere Iterationen einer Operation: Die Operationen mehrmals ausführen
  • Das ganze für alle Testkandidaten mehrmals ausführen

Somit kann man sehr sicher sein, dass die Ergebnisse der verschiedenen Kandidaten realistisch miteinander vergleichbar sind, nicht aber dass die Werte 1:1 dem entsprechen, wie sie dann auch in der Produktivumgebung auftreten, denn dort kommen wieder andere Faktoren dazu.

Nur das keine Missverständisse auftreten: Natürlich ist dann ein solcher Test auch für die Praxis aussagekräftig, nur wird er nicht 100% gleich ausfallen, wenn man die Zeit stoppt.

Als Testhilfe würde ich nicht DateTime.Now, etc.. benutzen, da dies zu ungenau ist. Das meines Wissens genauste Instrument das ohne P/Invoke-Aufrufe in unmanaged Code verfügbar ist, heisst Stopwatch und ist im System.Diagnostics-Namespace zu finden.

Mittels P/Invoke Aufrufen lässt sich eine noch genauere Messung vornehmen, jedoch ist das dann vorallem für Echtzeitanwendungen sinnvoll. Den Einsatz sieht man in einem myCSharp-Post für einen Framecounters unter XNA.

Mittels der Eigenschaft <Stopwatch>.ElapsedMilliseconds lassen sich die Millisekunden auslesen, die seit dem Start- und Stopaufruf vergangen sind, das reicht uns für den Test und ist auch aussagekräftig und vorstellbar, was bei den von Daniel genutzten Ticks m.E. nicht der Fall ist.

Für die Tests nutze ich eine Methode namens SpeedTest die einen Action-Delegate entgegennimmt den sie n-Mal ausführt.
So kann das Testen zentralisiert werden und ist mit sehr kleinem Aufwand möglich den Test selber zu erweitern, sowie neue Kandidaten hinzuzufügen.

Wenn der Test ausgeführt wird, habe ich Abweichungen von 1 bis 4 Millisekunden und das bei sehr vielen Durchläufen. Diese Abweichungen sind für mich also – wie am Anfang vermutet – irrelevant.

Folgend den Code der ich für meinen Test verwendet habe:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;

namespace SpeedTest
{
    public class Program
    {
        static void Main(string[] args)
        {
            int randomDataCount = 1000;
            var persons = GetPersons(randomDataCount);

            int iterations = 1000;
            int runs = 10;

            for (int runNumber = 1; runNumber <= runs; runNumber++)
            {
                Console.WriteLine("Run {0} ---------------", runNumber);

                SpeedTest("LINQ", iterations,
                          () =>
                          {
                              var result = (from person in persons
                                            where person.FirstName.Equals("Peter") && person.Age <= 25
                                            select person).ToList();
                          });

                SpeedTest("LINQ Extension Syntax", iterations,
                          () =>
                          {
                              var result = persons.Where(p => p.FirstName.Equals("Peter") && p.Age <= 25).ToList();
                          });

                SpeedTest("Manual ForEach", iterations,
                          () =>
                          {
                              List<Person> result = new List<Person>();

                              foreach (Person person in persons)
                              {
                                  if (person.FirstName.Equals("Peter") && person.Age <= 25)
                                  {
                                      result.Add(person);
                                  }
                              }
                          });

                Console.WriteLine("End run --------");
                Console.WriteLine(String.Empty);
            }

            Console.Read();
        }

        private static void SpeedTest(string description, int iterations, Action speedTestAction)
        {
            Stopwatch watch = new Stopwatch();
            watch.Start();

            for (int i = 0; i < iterations; i++)
            {
                speedTestAction();
            }

            watch.Stop();

            Console.WriteLine("{0}: {1}ms",
                              description,
                              watch.ElapsedMilliseconds);

            Console.WriteLine(String.Empty);
        }

        private static IEnumerable<Person> GetPersons(int randomDataCount)
        {
            Random random = new Random();
            string[] surnames = new[] { "Peter", "Daniel", "Johannes", "Stefanie", "Hans", "Klaus", "Benjamin" };
            string[] lastnames = new[] { "Bucher", "Hurzeler", "Kübel", "Honegger", "Bock", "Wurst", "Grube" };

            int dataLength = surnames.Length;

            for (int i = 0; i < randomDataCount; i++)
            {
                yield return new Person
                                 {
                                     FirstName = surnames[random.Next(0, dataLength)],
                                     LastName = lastnames[random.Next(0, dataLength)],
                                     Age = random.Next(0, 100)
                                 };
            }
        }
    }

    public class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int Age { get; set; }
    }
}

Zwei neue Blogs im dotnet-forum.de

09.09.2009 22:41:22 | Jan Welker

Ich freue mich sehr, zwei neue engagierte Blogger im dotnet-forum.de begrüßen zu dürfen.
Rainer Hilmer und Patrick Sperneder haben sich entschieden, einen kostenlosen Blog im dotnet-forum.de einrichten zu lassen.



Rainer ist quasi seit der ersten Stunde mit dabei im .NET-Forum. Er hat bis jetzt auf live.com gebloggt und ist nun umgezogen ins Forum.
Patrick kennt sicher der ein oder andere von dotnet-snippets.de, dort ist er schon seit April 2008 registriert und hat den ein oder anderen interessanten Snippet veröffentlicht.

Thorsten Hans und Rainer Schuster bloggen schon etwas länger im dotnet-forum.de:



Thorstens Schwerpunkt liegt im Moment bei der Entwicklung von ASP.NET und Sharepointanwendungen.
Rainers Blog beschäftigt sich vorwiegend mit Architektur, Clean Code und dynamischen Sprachen.

Wie oben schon erwähnt, Blogs im dotnet-forum.de sind kostenlos und unverbindlich. Wer das dotnet-forum.de als Sprachrohr zur Community nutzen möchte, kann mich gern kontaktieren.

SharePoint Sonderheft vom S&S Verlag

09.09.2009 22:12:49 | Thorsten Hans

SharePoint Sonderheft

Seit gestern ist das, vom S&S Verlag erstellte, neue SharePoint Sonderheft am Kiosk erhältlich. Das SharePoint Sonderheft soll allen Interessierten die Möglichkeit bieten schnell einen Einblick in die SharePoint Technologie zu bekommen und als Lektüre für den Weg zur ShareConnect 2009 dienen. Prall gefüllt mit vielen Information

Auch die Data One GmbH ist mit zwei Artikeln - Nintex Workflow 2007: Workflows für jedermann (von Markus Alt und Christian Glessner) und Möge die Macht mit dir sein!  Mit PowerShell zum SharePoint-Jedi werden (von Christian Glessner)  - im SharePoint Sonderheft vertreten.

Auch die weiteren Artikel im Sonderheft klingen recht interessant und deuten auf ein gutes und interessantes Heft hin.

Also nichts wie ab zum Kiosk und schnell noch ein SharePoint Sonderheft sichern. :D

 

 

 

 

DotNetKicks-DE Image

Was ist schneller… Foreach, LAMBDA Expressions, oder LINQ?

09.09.2009 20:43:47 | Daniel Schädler

Ich habe mich schon lange gefragt, was wohl schneller ist. Bei uns in der Firma werden immer Werte als IList<T> zurück gegeben. Ziemlich mühsam, wenn man diese immer mit while, foreach oder for durch gehen muss bis man das Gesucht gefunden hat. Deshalb habe ich mich dafür interessiert was denn schneller ist.

Zuerst habe ich mir zwei Klassen erstell (Person und PersonList beides Dummy Klassen)

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5:  
   6: namespace PerformanceComparing.Data.DataHelpers {
   7:     /// <summary>
   8:     /// Class for Dummy object person.
   9:     /// </summary>
  10:     public class Person {
  11:  
  12:         /// <summary>
  13:         /// Gets or sets the first name.
  14:         /// </summary>
  15:         /// <value>The first name.</value>
  16:         public string FirstName { get; set; }
  17:  
  18:         /// <summary>
  19:         /// Gets or sets the last name.
  20:         /// </summary>
  21:         /// <value>The last name.</value>
  22:         public string LastName { get; set; }
  23:  
  24:         /// <summary>
  25:         /// Gets or sets the age.
  26:         /// </summary>
  27:         /// <value>The age.</value>
  28:         public int Age { get; set; }
  29:     }
  30: }

Hier noch die PersonList Klasse

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5:  
   6: namespace PerformanceComparing.Data.DataHelpers {
   7:     /// <summary>
   8:     /// List class that holds a defined count
   9:     /// of objects (indicated outside).
  10:     /// </summary>
  11:     public class PersonList : List<Person> {
  12:  
  13:         /// <summary>
  14:         /// Firstname array.
  15:         /// </summary>
  16:         string[] _firstnames = new string[] { "Hans", "Ueli", "Reto", "Peter", "Hansruedi", "Roland" };
  17:         /// <summary>
  18:         /// LastName array
  19:         /// </summary>
  20:         string[] _lastnames = new string[] { "Müller", "Meier", "Hugentobler", "Rechner", "Landolt" };
  21:  
  22:  
  23:         /// <summary>
  24:         /// Initializes a new instance of the <see cref="PersonList"/> class.
  25:         /// </summary>
  26:         /// <param name="count">The count.</param>
  27:         public PersonList(int count) {
  28:             Random randomFirstNames = new Random();
  29:             Random randomLastNames = new Random();
  30:             Random randomAges = new Random();
  31:  
  32:             for(int i = 0; i < count; i++) {
  33:                 Person person = new Person();
  34:                 person.FirstName = _firstnames[randomFirstNames.Next(0, _firstnames.Length)];
  35:                 person.LastName = _lastnames[randomLastNames.Next(0, _lastnames.Length)];
  36:                 person.Age = randomAges.Next(0, 130);
  37:                 this.Add(person);
  38:             }
  39:         }
  40:     }
  41: }

Danach habe ich mir eine PerformanceComparer Klasse erstellt, welche eine Stopwatch (System.Diagnostics Namespace) verwendet und die Resultate an die Properties weiter gibt.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using PerformanceComparing.Data.DataHelpers;

namespace PerformanceComparing.Data.Utils {

    /// <summary>
    /// Enum for indicating for which
    /// performance count the instance will
    /// be used.
    /// </summary>
    public enum ComparerEnum {
        /// <summary>
        /// Case LINQ
        /// </summary>
        LINQ,
        /// <summary>
        /// Case LAMBDA
        /// </summary>
        LAMBDA,
        /// <summary>
        /// Case foreach
        /// </summary>
        FOREACH        
    }

    /// <summary>
    /// Class for initialising a PerformanceComparer
    /// </summary>
    public class PerformanceComparer {

        /// <summary>
        /// Filled once at inititialisation of the class.
        /// </summary>
        private PersonList _personList = null;

        /// <summary>
        /// Gets or sets the start.
        /// </summary>
        /// <value>The start.</value>
        public DateTime Start { get; private set;}
        /// <summary>
        /// Gets or sets the end.
        /// </summary>
        /// <value>The end.</value>
        public DateTime End {get; private set;}
        /// <summary>
        /// Gets or sets the stop watch.
        /// </summary>
        /// <value>The stop watch.</value>
        public Stopwatch StopWatch { get; private set; }


        /// <summary>
        /// Initializes a new instance of the <see cref="PerformanceComparer"/> class.
        /// With the a comparer Enum and a generated personlist (outside generated).
        /// </summary>
        /// <param name="comparer">The comparer.</param>
        /// <param name="personenList">The personen list.</param>
        public PerformanceComparer(ComparerEnum comparer, PersonList personenList) {
            _personList = personenList;
            ExecuteQuery(comparer);
        }

        /// <summary>
        /// Executes the query.
        /// </summary>
        /// <param name="comparerenum">The comparerenum.</param>
        private void ExecuteQuery(ComparerEnum comparerenum){
            Stopwatch stopwatch = new Stopwatch();

            switch(comparerenum) {
                case ComparerEnum.LINQ:
                    Start = DateTime.Now;
                    stopwatch.Start();
                    var Linq_Result = (from entry in _personList where entry.FirstName.Equals("Hans") select entry);
                    stopwatch.Stop();
                    StopWatch = stopwatch;
                    End = DateTime.Now;
                    break;
                case ComparerEnum.LAMBDA:
                    Start = DateTime.Now;
                    stopwatch.Start();
                    var Lambda_result = _personList.Where(p => p.FirstName.Equals("Hans")).Select(p => p);
                    stopwatch.Stop();
                    StopWatch = stopwatch;
                    End = DateTime.Now;
                    break;
                case ComparerEnum.FOREACH:
                    Start = DateTime.Now;
                    stopwatch.Start();
                    IList<Person> Foreach_Result = new List<Person>();

                    foreach(var item in _personList) {
                        if(item.FirstName.Equals("Hans")) {
                            Foreach_Result.Add(item);
                        }
                    }
                    stopwatch.Stop();
                    StopWatch = stopwatch;
                    End = DateTime.Now;
                    break;
            }
        }
    }
}

Das ganze habe ich in einem WPF-GUI (noch nicht mit MVVM-Pattern umgesetzt, da ich dieses noch ein wenig zu abstrakt finde) gebastelt, der sehr simpel aussieht. Hier nur der Ausschnitt des Click Events für einen Button:

   1: private void Button_Click(object sender, RoutedEventArgs e) {
   2:             Button button = null;
   3:             PersonList personList = new PersonList(2000000);
   4:             PerformanceComparer comparerLinq = new PerformanceComparer(ComparerEnum.LINQ, personList);
   5:             PerformanceComparer comparerLambda = new PerformanceComparer(ComparerEnum.LAMBDA, personList);
   6:             PerformanceComparer comparerForeach = new PerformanceComparer(ComparerEnum.FOREACH, personList);
   7:  
   8:             if(sender != null) {
   9:                 button = (Button)sender;
  10:             }
  11:  
  12:             switch(button.Name) {
  13:                 case "LINQ_Button":
  14:                     LINQ_StartTime_TextBlock.Text = comparerLinq.Start.ToLongTimeString();
  15:                     LINQ_EndTime_TextBlock.Text = comparerLinq.End.ToLongTimeString();
  16:                     LINQ_ElapsedTime_TextBlock.Text = comparerLinq.StopWatch.Elapsed.Ticks.ToString();
  17:                     break;
  18:                 case "LAMBDA_Button":
  19:                     LAMBDA_StartTime_TextBlock.Text = comparerLambda.Start.ToLongTimeString();
  20:                     LAMBDA_EndTime_TextBlock.Text = comparerLambda.End.ToLongTimeString();
  21:                     LAMBDA_ElapsedTime_TextBlock.Text = comparerLambda.StopWatch.Elapsed.Ticks.ToString();
  22:                     break;
  23:                 case "Foreach_Button":
  24:                     Foreach_StartTime_TextBlock.Text = comparerForeach.Start.ToLongTimeString();
  25:                     Foreach_EndTime_TextBlock.Text = comparerForeach.End.ToLongTimeString();
  26:                     Foreach_ElapsedTime_TextBlock.Text = comparerForeach.StopWatch.Elapsed.Ticks.ToString();
  27:                     break;
  28:             }
  29:  
  30:         }

Das Biespielprojekt kann hier heruntergeladen werden. Für Fragen, Kritik und natürlich Verbesserungsvorschlägen bin ich sehr dankbar.

AstronomyLib Part 1

09.09.2009 15:47:24 | Patrick Sperneder

Nun denke ich ist es an der Zeit den ersten Beitrag zum Thema C# und WPF zu erstellen.

Kürzlich habe ich auf dotnetsnippets.de eine Bibliothek mit dem eigentlich alles sagendem Namen AstronomyLib erstellt. Die Bibliothek ist derzeit nur mit rudimentären Funktionen ausgestattet, es sollte jedoch ( mit Eurer Hilfe vielleicht ) eine vollwertige Klassenbibliothek die den Umgang mit astronomischen Funktionen und Methoden beherrscht erstellt werden.

Die Notwendigkeit von z.B. der Ermittlung der Uhrzeit des Sonnenaufganges eines Tages hat sich bei meinem Projekt 'InfoPoint' ( welches eine WPF Touchscreen Anwendung ist ) ergeben. Als erstes kam mir natürlich die Idee einen ( ziemlich sicher vorhandenen ) Webserverice dafür zu gebrauchen, jedoch schied dies aus rechtlichen sowie aus Bandbreitenproblemen aus.

Da ich auch ein Benutzer des derzeit neuesten Betriebsystems Windows7 bin, schaute ich mir mal hier die Sidebar Gadget etwas genauer an. Ich nehme an das auch das gleiche gadget in Windows Vista vorhanden ist, kann dies jedoch nicht mit Sicherheit sagen da ich Vista nie im Einsatz hatte.

weather_gadget

 

Wenn man nun das Widget genauer unter die Lupe nimmt, so kann man erkennen das ein Widget im Prinzip eine HTML Seite mit diversen JavaScript Funktionen und Methoden ist.

Dadurch ist es eigentlich relativ einfach die Funktione eines Widgets zu ermitteln bzw. in dessen Sourcecodes nach bestimmten Funktionen zu suchen. Bei meinem System befinden sich sämtliche Widgets im Ordern C:\Program Files\Windows Sidebar\Gadgets … Die Struktur eines Gadgets habe ich mal hier abgebildet

sidebar_widget_structure

 

Nun wurde ich zum Glück in den JavaScript Dateien fündig, und es war eigentlich ein Leichtes die JavaScript Funktionen auf C# zu portieren. Ich packte diese ganzen Schnippsel zu einer Klassenbibliothek  zusammen und hinterlegte alle Klassen im Namespace System.Astronomy.

Hier die schematische Darstellung der Bibliothek. Wie gesagt, derzeit noch sehr jung und klein …

ProjectDiagram

 

Den C# Code der Klassen könnt Ihr als Visual Studio Snippet von dotnetsnippets.de hier herunterladen.

Macht euch doch mal mit den doch recht einfachen Funktionen vertraut, im nächsten Teil dieser Serie erstellen wir eine WPF Anwendung die die ermittelten Daten schön und brauchbar darstellt.

Wie immer sind Feedback und Anregungen sehr erwünscht !

Cheers Noodles

Neuer Artikel bei contentmanager.de - Webanwendungen mit Microsoft Silverlight

09.09.2009 15:19:50 | Gregor Biswanger

image

In der kommenden Ausgabe von contentmanager.de gibt es einen neuen Artikel meinerseits.

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

Webanwendungen mit Microsoft Silverlight

Microsoft Sicherheitsupdates September 2009

09.09.2009 12:40:52 | Kay Giza

Zu Ihrer Sicherheit bitte umgehend installieren!

Microsoft hat am 8. September 2009 fünf Sicherheitsupdates veröffentlicht, die Sie möglichst umgehend installieren sollten:

Die neuesten Sicherheitsupdates:

  • MS09-045 – Beseitigung einer Sicherheitsanfälligkeit in JScript (KB 971961)
  • MS09-046 – Beseitigung einer Sicherheitsanfälligkeit in Microsoft Windows (KB 956844)
  • MS09-047 – Beseitigung einer Sicherheitsanfälligkeit in Microsoft Windows (KB 973812)
  • MS09-048 – Beseitigung einer Sicherheitsanfälligkeit in Microsoft Windows (KB 967723)
  • MS09-049 – Beseitigung einer Sicherheitsanfälligkeit in Microsoft Windows (KB 970710)
Informieren Sie sich über die verfügbaren Updates. Laden Sie jetzt die Updates für Ihren Computer oder Laptop von der Microsoft Update-Website herunter.

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

This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
Visit:  MSDN Online | 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

T-43: Die technischen Neuerungen unter der Haube

09.09.2009 00:00:00 | Oliver Scheer

43_0Mittwoch, 9. September 2009

Nur noch 43 Tage bis zum Windows 7 Launch.

Vor einigen Tagen habe ich ja bereits über einige Neuerungen an der Oberfläche von Windows 7 geschrieben. Heute befassen wir uns mit den Änderungen und Neuerungen unter der Oberfläche.

Mehr

SharePoint 2010 Developer Environment

08.09.2009 22:56:06 | Thorsten Hans

Die Sneak Peek von SharePoint 2010 brachte erste Informationen für SharePoint Interessierte an die Öffentlichkeit. Neben den neuen Features wurden unter anderem auch grob die Systemanforderungen veröffentlicht.

Für SharePoint Entwickler, die üblicherweise auf einer virtuellen Umgebung arbeiten, bedeutet dies, dass es von Microsoft selbst keine Lösung für den Clientbereich gibt. So zumindest bis jetzt.

Zur Zeit gibt es lediglich einen Weg eine virtuelle Entwicklungsumgebung mit einem reinen Microsoft Stack zu betreiben

 SP2010

Wie das Schaubild verdeutlicht, muss auf dem physikalischen System ein Windows Server 2008 in der 64 Bit Variante betrieben werden, der durch Hyper-V beliebig viele Virtuelle SharePoint Entwicklungssysteme hosted.

Jedes virtuelle System selbst muss wiederum auf einem Windows Server 2008 mit 64 Bit betrieben werden und eine 64 Bit Instanz vom SQL Server 2008 bereitstellen, damit die Grundlagen für den SharePoint Server 2010 vorhanden sind.

Da Server Betriebssysteme grundsätzlich mehr Leistung verlangen als Client Betriebssysteme müssen die eigentlichen Maschinen natürlich auch dementsprechend gesized werden. Kritisch wird dieser Pfad vor allem auf Laptops da hierbei die maximale Speichergrenze um einiges tiefer liegt als bei einer richtigen Workstation.

Natürlich besteht als Alternative der Weg über VMWare, allerdings kommen dann wieder Lizenzkosten auf den Entwickler zu, die er durch den Einsatz von vorhandenen Microsoft Produkten nicht hätte. Außerdem möchte nicht jeder Entwickler auf Produkte wie VMWare zurückgreifen sonder bevorzugt die Komplettlösung aus dem Hause Microsoft.

 

Fazit

Momentan ist für SharePoint Entwickler noch nicht greifbar, bzw. noch nicht kalkulierbar was genau für ein virtuelles SharePoint Entwicklungssystem veranschlagt werden muss. Für sachdienliche Hinweise bzw. neue Erkenntnisse, wie man eine virtuelle SharePoint 2010 Development Environment betreiben kann, bin ich sehr dankbar.

 

Developing SharePoint Applications

08.09.2009 19:19:00 | Ozgur Aytekin

Guidance for building collaborative applications that extend your LOB systems

The Developing SharePoint Applications guidance helps architects and developers design and build applications that are both flexible and scaleable. It shows developers how to provide IT professionals with the information they need to maintain those applications and diagnose problems when they arise. The two reference implementations illustrate how to solve many of the common challenges developers encounter. One reference implementation addresses basic issues such as creating lists and content types. The other addresses more advanced problems such as how to integrate line of business services, how to create collaboration sites programmatically, and how to customize aspects of publishing and navigation. A library of reusable components helps you adopt techniques used in the reference implementations. The guidance discusses approaches for testing SharePoint applications, such as how to create unit tests, and documents experiences with stress and scale testing one of the reference implementations.

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

Tipps und Tricks: Anwendungen wieder in den Benachrichtigungsbereich schicken

08.09.2009 17:31:00 | Oliver Scheer

Was mir direkt nach der ersten Installation von Windows 7 aufgefallen ist, ist das neue Verhalten des Windows Live Messenger. Er befindet sich sofort nach dem Starten, obwohl nicht sichtbar, in der Startleiste.

image

Das mag ja ganz nett sein, aber stört mich persönlich etwas. Ich will ihn eigentlich wieder so haben wie “damals” unter Windows Vista, und zwar im Benachrichtigungsbereich rechts unten, schön klein und unauffällig.

Was kann man da tun? Ganz einfach. Unter Windows 7 gibt es die Möglichkeit Anwendungen im Kompatibilitätsmodus auszuführen. Die Einstellung dafür kann man über die Eigenschaften des entsprechenden Programms setzen.

image

Einfach die Eigenschaft “Programm im Kompatibilitätsmodus ausführen für” auswählen, und in der Auswahlliste darunter “Windows Vista (Service Pack 2)” wählen. Dann verhält sich der Windows Live Messenger wieder wie “damals” :-)

Unter diesen Eigenschaften lassen sich auch Anwendungen so konfigurieren, das sie immer mit Administratorrechten ausgeführt werden. Das mache ich z.B. beim SQL Server und dem IIS (Internet Information Services) so.

Hello (Blog)World …

08.09.2009 13:34:04 | Patrick Sperneder

Zuerst vielen Dank an Jan Welker der mir diesen Blog Space eingerichtet hat und wirklich sehr hilfreich und engagiert war .

Nun ist es auch bei mir so weit, nachdem ich mich immer wieder zu gewissen Themen im .NET Umfeld weiterbilden oder informieren wollte, kam ich meistens zu MSDN was auch nicht wirklich verwundert. Für mich als Entwickler ist die Online Version der MSDN Library unverzichtbar, jedoch fehlen mir gelegentlich die Beispiele für gewisse Fragestellungen.

Wenn ich dann nun ein Thema aufgegriffen habe und weitere Informationen zu beschaffen versuche, komme ich meistens auf Blogs von Programmierern die oft eigentlich das gleiche Problem hatten und noch öfter ist auch die Lösung für mein gesuchtes Thema bereits vorhanden.

Manchmal ( eher selten ) komme auch ich auf so manche Lösung die noch nirgends anderswo zu finden ist und ich wollte natürlich auch anderen die vielleicht auch mir schon mal geholfen haben helfen.

Mein erstes Sprachrohr zur community war die Entwicklerseite codeproject.com und dotnet-snippets.de .

Mit der Zeit wurden es immer mehr Gemeinschaften denen ich mich anschloss um immer über alle Neuigkeiten informiert zu sein und die Übersichtlichkeit ging natürlich verloren  meine mailbox ging über  und nun dachte ich mir, ist es vielleicht sinnvoll Neuigkeiten die für meine Bedürfnisse passen an einem zentralen Punkt zusammenzufassen und desweiteren ein probates Mittel zur Kommunikation mit der Community zu haben.

Was ist eigentlich euer Antrieb euren Blog zu füttern oder überlegt auch ihr euch einen Blog zu erstellen ?

Verwenden wir mal meinen Blog zum Austausch ! Ich freue mich auf spannende Diskussionen und Feedback.

Grüße Doc.NET.Noodles

NoodlesAVATAR

Best of MSDN Hotline - ab sofort FAQ verfuegbar

08.09.2009 07:46:38 | Kay Giza

Bereits im dritten Jahr steht die kostenfreie MSDN Hotline deutschen Entwicklern mit Rat und Tat beiseite. Ziel ist es, Ihnen bei der Orientierung im breiten Entwicklerangebot von Microsoft behilflich zu sein und Sie beim Auffinden nützlicher Ressourcen zu unterstützen. Seitdem ich vor knapp drei Jahren die Kooperation mit dem ESC abgeschlossen hatte, erfeut sich das Angebot großer Beliebtheit, so dass seit Bestehen der Hotline viele interessante und vor allem sehr wichtige Fragen zusammengekommen sind.

Kostenfrei: Die deutschsprachige MSDN Service HotlineDie häufigsten, schwierigsten und interessantesten dieser Fragen stellen wir ab sofort in unseren MSDN Foren unter der Kategorie "Aus der MSDN Hotline: Häufig gestellte Fragen und deren Antworten" zur Verfügung - natürlich inklusive der professionellen und unabhängigen Antworten, die das Team der MSDN Hotline erarbeitet hat. Außerdem finden sich dort eine Reihe kleiner Helferlein, die man in die Kategorie "Aha-Effekt" einordnen würde.

Ich wünsche Ihnen viel Spaß beim Durchforsten unseres Hotline-Forums! Vielleicht finden Sie dort ja die ein oder andere Antwort zu einer Ihrer aktuellen Fragen.


PS: Eine völlig ernst gemeinte Bitte - die Hotline ist dafür da Ihnen weiterzuhelfen. Sagen Sie gerne weiter, wenn Sie zufrieden sind mit dem kostenfreien Service. Sind Sie es nicht, dann sagen Sie es mir, ich werde mich persönlich - gerne auch zusammen mit Ihnen - darum kümmern.

 



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

Countdown

08.09.2009 07:34:21 | Oliver Scheer

7x7 - Der Countdown zu Windows 7

7 Wochen à 7 Tage – und jeden Tag ein Blogeintrag zu Windows 7. MSDN-Experte Oliver Scheer wird über die kommenden 49 Tage hinweg alle relevanten Dinge zu Windows 7 zusammentragen und uns mit seinem Countdown ein wenig die Zeit bis zur allgemeinen Verfügbarkeit (ab 22.10.) vertreiben. Der Fokus liegt unter der Woche auf Themen für Entwickler und IT-Professionals, am Wochenende kommen dann auch die Konsumer-Themen zum tragen.

Der Silverlight-Countdownzähler zum Windows 7x7-Countdown (Will ich haben)

Get Microsoft Silverlight

Jede Woche wird es ein Hauptthema geben:

  • Woche 7 –> Die “Hallo Windows 7”-Woche
  • Woche 6 –> Die Windows 7 Onboard-Tools
  • Woche 5 –> Windows 7 als Entwicklungsplattform
  • Woche 4 –> Die neuen Features von Windows 7 im Detail
  • Woche 3 –> Noch mehr neue Features im Detail
  • Woche 2 –> Alte Anwendungen fit für Windows 7 machen
  • Woche 1 –> Zielgerade
  • Woche 0 –> Man darf gespannt sein.
    Werktags wird es technisch. An den Wochenenden steht der Spaß im Vordergrund.

Woche 7 - Die “Hallo Windows 7”-Woche

T-49 – Donnerstag - Herzlich Willkommen

T-48 – Freitag - Windows 7 Installation

T-47 – Samstag - Must-have Tools für jeden Anwender: Windows Live Essentials

T-46 – Sonntag - Media Center

T-45 – Montag - Windows 7 - Die oberflächlichen Neuerungen

T-44 – Dienstag - Windows 7 auf Knopfdruck

Interesse geweckt?

Entweder hier oder auf http://msdn-online.de/7x7

Weitere Agents in Teamcity einrichten

08.09.2009 03:14:54 | Gordon Breuer

TeamCity Ein häufig eingesetzt Programm für die “Kontinuierliche Integration” in der Softwareentwicklung ist sicherlich TeamCity der Firma Jetbrains. Grundvoraussetzung ist dabei eine Versionsverwaltung. Auch habe ich vor einiger Zeit mal einen Weg beschrieben, wie man beispielsweise nach jedem Hochladen von Änderungen das Projekt automatisch neu erstellen kann. Die dort beschriebene Methode hat allerdings einige Nachteile, beispielsweise muss man bei jedem Check-In warten bis der Build abgeschlossen wurde bevor man weiter arbeiten kann. Um diesen Prozess auszulagern setzt man normalerweise stattdessen unabhängige Programme ein. TeamCity ist ein solches Werkzeug und für Privatpersonen und kleine Teams kostenlos erhältlich. Vor allem die einfache Erstinstallation und Konfiguration des Servers machen es so beliebt (wenn ein kleines Tutorial hierzu gewünscht ist hinterlasst einfach einen Kommentar hier unter dem Beitrag und ich schaue das ich eins vorbereite).

Ein weiterer großer Vorteil von TeamCity als “Distributed Build Management and Continuous Integration Server” sind neben vielen anderen Dingen die Möglichkeit mehr als einen so genannten Build-Agent einzusetzen. Denn der eigentliche Server ist für das Kompilieren von Projekten überhaupt nicht zuständig. Er stellt lediglich alle notwendigen Daten bereit und übergibt die Aufgabe dann an einen so genannten Agenten. Diese Agenten sind kleine Systemdienste auf Entwicklungs- oder Testrechnern und können somit ganz unterschiedliche Szenarien und Konfigurationen abdecken, beispielsweise das automatische Ausführen von Tests unter verschiedenen Betriebssystemen, Sprachversionen, älterer Hardware, …

Aboutpixel.de - Serverschrank - (c) snygo Standartmäßig wird bei der Installation von TeamCity bereits ein Agent auf dem selben Server mit installiert und eingerichtet, man kann jedoch auch weitere hinzufügen. In der kostenlosen Version von Teamcity sind bis zu 3 autorisierte Agenten gleichzeitig möglich. Ich habe beispielsweise einen Agenten auf dem Server installiert, auf dem aber Visual Studio fehlt. Ohne weiteres ist dort also das Ausführen von Unit-Tests bspw. mit MS-Test nicht möglich. Ein zweiter Agent ist auf meiner Arbeitsstation im Büro installiert; hier habe ich nicht nur eine vollständige Entwicklungsumgebung sondern auch Zugriff auf das interne Netzwerk um beispielsweise Kundenwebs automatisch vom Agenten per Script zu veröffentlichen. Der letzte Agent ist auf meinem Rechner zu Hause unter Windows 7 64bit installiert, um auch Builds und Tests in einer 64-Bit Umgebung durchführen zu können.

Um einen Agenten mit dem TeamCity -Server zu verbinden muss dieser über eine IP und einen Port erreichbar sein. Doch zumindestens bei mir schlug die automatische Erkennung eben dieser IP-Adresse immer fehl, so dass der Agent sich nicht beim Server anmelden konnte. Das Problem tritt innerhalb des selben Netzwerkers vermutlich seltener auf, im aufgezeigten Szenario haben wir jedoch drei geographisch vollständig getrennte Netze, die über eine VPN-Verbindung miteinander vernetzt sind. Man muss also die automatische IP-Detektion des Agenten umgehen und ihm eine feste IP-Adresse zuweisen mit der er sich beim Server meldet und unter der er dann auch erreichbar ist.

aboutpixel.de - IP - Christoph Ruhland Am einfachsten kann man das direkt bei der Installation des Agenten machen. Nach dem Kopieren aller notwendigen Dateien (Bild 3) erscheint eine Abfrage der Konfiguration (Bild 4). Hier klickt man auf den Button “Add” und erstellt eine neue Eigenschaft “ownAddress” mit der zu verwendenden IP-Adresse als Wert. Ansonsten findet man die Konfigurationsdatei auch unter “<BuildAgent Installation-Path>\conf\buildAgent.properties” und fügt dort entsprechend eine weitere Zeile hinzu, beispielsweise “ownAddress=5.100.178.174”. Der Agent erkennt automatisch, dass die Konfiguration geändert wurde und startet sich selbständig neu.

Für die Vernetzung der drei unterschiedlichen Netzwerke habe ich übrigens das kostenlose ProgrammHamachi” eingesetzt, welches über das Internet ein geschütztes VPN bereitstellt. In Unternehmen ist jedoch vor dem Einsatz eines solchen Programmes unbedingt zunächst Rücksprache mit dem Netzwerk- bzw. Systemadministrator zu halten ob die Installation gestattet wird. Immerhin öffnet man mit dem Programm bei unsachgemäßer Konfiguration ein unter Umständen ungeschütztes Tor in das Unternehmensnetzwerk! Auch wenn zu diesem Tool ein kleines Tutorial erwünscht ist könnt ihr euch mit einem Kommentar hier melden und ich werde sehen was sich machen lässt.

Bebilderte Installationsanleitung

Herunterladen der Installationsdatei vom Teamcity-Server Auswählen der zu installierenden Komponenten, inklusive dem Windows-Service Erforderliche Dateien werden kopiert Dialog mit den Einstellungen für den Agenten Einstellen des zu verwendenden Benutzerkontos beim Starten des Services Abschluss der Installation und erster Start des Agenten Wurde die IP-Adresse des Agenten korrekt eingegeben erscheint dieser ab sofort auch in der Liste aller Agenten im Server und kann dort authorisiert werden

DotNetKicks-DE Image

T-44 – Windows auf Knopfdruck

08.09.2009 00:00:00 | Oliver Scheer

44_1_thumb

Dienstag, 8. September 2009

Nur noch 44 Tage bis zur Veröffentlichung von Windows 7.

Zwar läßt sich dank der grafischen Benutzeroberfläche von Windows 7 eigentlich alles prima mit der Maus oder den Fingern via Multitouch steuern. Aber echte Tastaturvirtuosen steuern ihre „Maschine“ mit Tastenkürzeln (Shortcuts) und gönnen der Maus während der Entwicklung oft eine Auszeit.

Bei der Recherche hatte ich richtig Spaß, weil ich viele Tastenkürzel (wieder) entdeckt habe.

Mehr

DotNet Expansions framework

07.09.2009 21:02:00 | Rainer Hilmer

For several years of my developer career I gathered useful code into my own framework. Formerly known as “Cyrons Framework” the new name is “.Net Expansions”.

The actual version 1.0.3540.27148 consists of the following:

  • DotNetExpansions Namespace
    • Collectible<T> // (observable)
    • ExceptionEventArgs
    • Extension methods
      • Limit<T>
      • LimitRange<T>
      • TimeStamp
      • ExactTimeStamp
    • LimitEventArgs
    • SharedCollectible<T> // (observable)
    • StateManager (Undo/Redo for everything!)
  • DotNetExpansions.CollectiveEvent Namespace
    • CollectiveEventContract // (many events, one or many listener(s))
    • CollectiveEventArgs
  • DotNetExpansions.Forms Namespace
    • ControlCommunicationsManager // (cross thread handling of Windows forms controls)
    • ControlExtensions (at the time being it consists of a cross thread control invoker developed by Marcell Spies)
    • Fading Message Box // (well known)
    • ProgressionStateInfo // (informs a listener about the progression of a function)
  • DotNetExpansions.IO Namespace
    • CompressedBinaryFileIO // (easy saving and loading of any data in compressed binary format)
    • XmlConfigurationManager // (easy saving and loading of any configuration data to/from XML files)
  • DotNetExpansions.Logger Namespace
    • Logger // (base class for specific logging classes)
    • TextLogger
    • SqlLogger
  • DotNetExpansions.MathLib Namespace
    • Mathematical and physics constants
    • mathematical conversions
    • Statistics
  • DotNetExpansions.MathLib.Geometry Namespace
    • // Too many to list here!
  • DotNetExpansions.MathLib.Physics Namespace
    • Electronics
    • Kinetics
  • DotNetExpansions.ParallelSearch Namespace
    • ParallelFileSearch
  • DotNetExpansions.Picture Namespace
    • PictureHandler // (easy handling of image IO in Windows forms)
  • DotNetExpansions.Time
    • Time // (easy handling for many aspects of time).

The download package (rar file or Visual Studio 2008 solution) contains the following items:

  • DotNetExpansions.dll
  • DotNetExpansions.xml (intellisense information)
  • A complete help file in chm format with samples for everything in the framework
  • A special guide in PDF format for the XML Configuration Manager. This is a first issue of a new series I am working on. Once it’s ready it will be a complete book about the .Net Expansions Framework. Please give me feedback about the content and the design.

 

You can download DotNet Expansions at
http://cid-0edc7be32144334a.skydrive.live.com/self.aspx/%c3%96ffentlich/SoftwareEigenkreationen/DotNetExpansions%5E51.0.3540.27148%5E6.zip

or check out a copy of the project at
http://cyrons.svn.beanstalkapp.com/general/DotNetExpansions/trunk

 

This framework has grown over years and maybe I would do some of the code in a different way today but nonetheless everything works fine.

Your feedback is appreciated.

LEGAL NOTICE

This software is GPL. Do with it whatever you want.

Documentation copyright by Rainer Hilmer. You may not change or redistribute it without my permission.

DotNetKicks-DE Image

Git unter Windows – Die Toolchain will konfiguriert werden

07.09.2009 19:58:00 | Rainer Schuster

Nachdem ich anfänglich Probleme mit der Einrichtung von GIT in Verbindung mit der Nutzung von Github hatte will ich kurz darüber berichten, was ich so alles im Netz gefunden habe. Ich erzähle also nichts neues, sonder trage lediglich Erfahrungen von mir und anderen hier zusammen.

Da ich schon seit längerem ein Auge auf GIT habe, aber immer irgendwelche kleinen Probleme damit hatte, wollte ich es wieder wissen. GIT findet immer mehr Anhänger in der Open Source Community. Und ich kann auch gut verstehen warum. Meiner Meinung nach verstehen es nicht viel Source Code Management Systeme (SCM)  sich auf verteile Verwaltung so gut einzuschiessen wie GIT das tut. TortoiseGIT gibt es mittlerweile als Version 1.0.2.0. “Pretty Stable” wie es mir erschien, hat sich doch der Client auf Basis von TortoiseSVN seit Anfang des Jahres mit Version 0.1 ganz schön gemausert. Also dachte ich es wäre an der Zeit das nochmal zu versuchen. Einfach? Naja, das kommt drauf an von welchem Standpunkt man es sieht. Es gibt den ein oder anderen Fallstrick, auf den zu achten ist, aber mit ein wenig genauerem lesen bin ich dann doch ans Ziel gekommen.

First things first

TortoiseGIT bringt zwar die benötigten Dateien mit, ich will aber zuerst msysGIT konfigurieren. Da msysGIT putty nicht mit an board hat und es unter Windows Probleme mit OpenSSH gibt müssen wir diesen Weg gehen. GIT kann auch gut über die eigene BASH benutzt werden. Viele bevorzugen wahrscheinlich diesen Weg auch. Der Vorteil liegt für mich klar auf der Hand. Wer sich einmal mit den Kommandozeilenbefehlen der GIT-Bash beschäftigt hat, kann diese leicht automatisieren und in seine Continous Integration Umgebung, oder einfach nur das Build Skript einbinden. Zudem gehe ich auch immer mehr dazu über die Konsole zu benutzen. Damit also für mich auf jeden Fall ein lohnenswerter Einsatz.

Einen Schlüssel erstellen

  1. Putty herunterladen …
  2. … und in ein Verzeichniss seiner Wahl entpacken. Ich gehe von C:\Program Files\Putty aus
  3. puttygen.exe starten
  4. Im Putty-Dialog die Aktion Generate ausführen (Defaults können beibehalten werden, siehe Abbildung 1). Zum Generieren muss die Maus im Eingabefeld bewegt werden. Und nein, an alle die jetzt entsetzt oder freudig aufschreien. Das ist nicht mein Schlüssel. Den habe ich extra für den Blogeintrag generiert.
    putty_generate_key
      Abbildung 1
  5. Einen passenden Kommentar wählen (Key comment). Dieser Kommentar wird bei Authetifizierungen als Erinnerung welche Schlüsseldatei vorliegt angezeigt.
  6. Passwort entsprechend wählen (key passphrase und cofirm passphrase)
  7. Die generierten Schlüssel (public und private) speichern. Dazu die Aktionen bei Save generated key ausführen. Die msysGIT Umgebung erwartet im home Verzeichnis (bei Vista oder Win 7 C:\Users\rainer\, bei XP C:\Dokumente und Einstellungen\Rainer\) ein Verzeichniss .ssh. Für den privaten Key benötigen wir daher als Dateiname id_rsa.ppk und für public den Namen id_rsa
  8. Den angezeigten Key aus der Textbox aus der oberen hälfte des Bildschirms in die Zwischenablage kopieren

Schlüssel auf Github hinterlegen

Variante a: Neuer Account

  1. Github Account anlegen, falls noch nicht geschehen.
  2. Beim Anlegen des Accounts kann der generierte Public Key aus der Zwischenablage eingefügt werden (siehe Abbildung 2)
    github_create_account
    Abbildung 2

Variante b: Schlüssel hinzufügen

  1. Auf Github anmelden und auf account klicken (oben rechts in der Navigation)
  2. Im Bereich SSH Public Keys eine E-Mail Adresse hinterlegen. Diese braucht ihr später zur Konfiguration von Git noch
  3. Bei Title gebt ihr eure E-Mail Adresse ein
  4. Bei Key kopiert ihr den Public Key aus der Zwischenablage ein
  5. Die Änderungen speichern.

msysGIT installieren

  1. Git-1.6.4-preview20090730.exe oder aktueller von hier herunterladen.
  2. Installation starten und dem Assistenten folgen.
  3. Bei Adjust your PATH environment die zweite Option auswählen (siehe Abbildung 3)
    adjust_your_path_environment
      Abbildung 3
  4. Bei Choosing the SSH executable den Pfad zur Plink.exe hinterlegen. Das ist das Verzeichnis, indem wir Putty abgespeichert haben - C:\Program Files\Putty\ (siehe Abbildung 4)
    choose_ssh_exe
      Abbildung 4

TortoiseGIT installieren

  1. TortoiseGIT oder aktueller von hier herunterladen
  2. Installation starten und dem Assistenten folgen.
  3. Bei Choose SSH Client den ersten Eintrag auswählen. (siehe Abbildung 5)
    install_tortoisegit
      Abbildung 5

GIT Umgebung konfigurieren

Was ihr noch machen solltet: Die Globale Konfiguration. Das könnt ihr entweder über die Umgebungsvariablen machen, oder über die GIT-Bash Konsole. Diese Einstellungen lassen sich später auch einfach pro Projekt individuell anpassen. Ich erkläre euch hier den Weg, wie ihr das über die Konfigurationsdatei von GIT macht.

  1. Im Explorer auf einem Ordner oder einer Datei das Kontextmenü aufrufen
  2. Den Menübefehl TortoiseGIT->Settings ausführen
  3. Bei der Einstellung GIT->Config eure Daten eintragen (siehe Abbildung 6). Ich habe dazu meinen Username von Github und die dort hinterlegte E-Mail Adresse eingetragen und übernommen
     configure_tortoisegit
       Abbildung 6
  4. Um Probleme zu vermeiden sollten die Optionen AutoCrLf und SaveCrLf deaktiviert bleiben. Ich persönlich bin immer sehr skeptisch, wenn etwas automatisch von Zauberhand entschieden wird. Gerade was Zeilenumbrüche angeht. Ob das aktuell noch ein Problem ist weiß ich nicht, aber Problemfälle in der Vergangenheit gab es genug. z.B. http://www.mail-archive.com/msysgit@googlegroups.com/msg00088.html.
    Meine Empfehlung: beides auf false stellen

Das Gleiche nun für msysGIT, indem wir die GIT-Bash aufrufen (Originaleintrag siehe Hilfe auf github)

  1. GIT-Bash über Kontextmenü von einem Ordner (rechte Maustaste auf Ordner) mit GIT-BASH Here oder direkt über das Startmenü aufrufen.
  2. Folgende Befehle ausführen (um eine ausführliche Hilfe für den config Befehl zu kommen git config --help ausführen).
    • $ git config --global user.name "dein_github_user_name"
    • $ git config --global user.email “deine_github_account_email
    • $ git config --global core.autocrlf false
    • $ git config --global core.savecrlf false
      Bildet euch selbst eine Meinung über die Hilfe zum Thema core.autocrlf und core.savecrlf über: git config –help. Die Befehle könnt ihr für jedes Projekt nochmal einzeln setzen, indem ihr den Parameter –global weg lasst.
  3. Last but not least solltet ihr das github token konfigurieren. Mache Tools (so auch TortoiseGIT) fragen die Authentizität des Servers ab. Diese könnt ihr dann konfigurieren wenn es soweit ist. TortoiseGIT bemägelt z.B. das der Server nicht bekannt ist und fordert euch auf die Quelle zu erlauben, oder das ganze abzubrechen, dem könnt ihr aber vorbeugen:
    • $ git config --global github.user dein_github_user_name
    • $ git config --global github.token dein_github_api_token
      Das API Token findet ihr auf github unter account im Bereich Your User Information

Zum Schluss bleibt mir nur noch zu sagen: Lest euch die Hilfe und das hier integrierte GIT Community Book durch. Die Hilfe findet ihr einfach im Explorer über das Kontextmenü->TortoiseGIT->Help

DotNetKicks-DE Image

Noch freie Plätze: Windows 7 Workshops für Anwendungskompatibilität

07.09.2009 19:41:59 | Peter Kirchner

Nach vier Monaten in Folge finden in diesem Monat nun vorerst die letzten Workshops zu Windows 7 Anwendungskompatibilität statt.

Noch sind einige Plätze frei. Nutzen Sie daher diese Gelegenheit, aus erster Hand Informationen zum neuen Betriebsystem von Microsoft zu erfahren.

Folgende Termine und Orte finden noch statt:

  • Hamburg, 10.09.
  • Berlin, 11.09.
  • Bad Homburg (bei Frankfurt), 16.09.
  • Böblingen (bei Stuttgart), 17.09.
  • Unterschleißheim (bei München), 25.09.

Die Trainings werden direkt in den Microsoft Niederlassungen durchgeführt. Fürs leibliche Wohl wird selbstverständlich gesorgt. Die Teilnahme ist kostenfrei.

Ihre Anmeldung können Sie direkt an unsere E-Mail-Adresse fitmit7@microsoft.com senden.

Ausführliche Informationen finden Sie hier.

7x7 Der Countdown zu Windows 7

07.09.2009 17:15:00 | Christian Binder

7 Wochen à 7 Tage – und jeden Tag ein Blogeintrag zu Windows 7.  Mein Kollege Oliver Scheer (Sitzt 7,8 m entfernt von mir) wird über die kommenden 49 Tage hinweg alle relevanten Dinge zu Windows 7 zusammentragen und uns mit seinem Countdown ein wenig die Zeit bis zur allgemeinen Verfügbarkeit (ab 22.10.) vertreiben. Der Fokus liegt unter der Woche auf Themen für Entwickler und IT-Professionals, am Wochenende kommen dann auch die Konsumer-Themen zum tragen. Interesse geweckt?  http://msdn-online.de/7x7

 

Machen Sie jetzt Ihre Anwendungen fit fuer Windows 7 (Anwendungskompatibilitaet)

07.09.2009 16:29:43 | Kay Giza

Mehr Sicherheit, Zuverlässigkeit und Performance sowie viele neue und innovative Funktionen warten mit Windows 7 auf Ihre Anwendungen.
Der Hauptfokus bei Windows 7 wurde auf die weitere Verbesserung der Sicherheit, Zuverlässigkeit und Performance des Betriebssystems gesetzt - und auf die größtmögliche Kompatibilität zu Windows Vista , damit bereits bestehende Anwendungen auch in Zukunft laufen werden. Windows 7 bietet selbstverständlich auch ein umfassendes Portfolio an neuen innovativen Funktionen an, welche eine verbesserte Produktivität erlauben bei einer gleichzeitigen hohen Energieeffizienz. Für Softwarehersteller und Anbieter von Anwendungen bedeutet dies, dass auch im Sinne der Kunden die Kompatibilität der Software mit Windows 7 frühestmöglich sichergestellt werden sollte. Dafür bietet Microsoft eine Fülle von Informationsmöglichkeiten mit technischen Details und Hintergrundwissen, die bei der Adaptierung der Software auf Windows 7 helfen werden.

Mit Softwarelösungen auf Basis der neuen Windows-Version können Sie Ihren Kunden eine einfache und zuverlässige Umgebung für ihre Anwendungen, Services, PCs und Geräte sowie eine vertraute und intuitive Umgebung für ihre Benutzer bieten. Es ist an der Zeit, Ihre Softwarelösung auf Windows 7 vorzubereiten, um die Kompatibilität frühestmöglich sicherzustellen!


Von Kompatibilität über Zertifizierung und Entwicklerfragen bis hin zu den Vorteilen für Endkunden bleibt keine Frage offen. Wir geben Ihnen die Informationen, sodass aus vielen einzelnen Fragen ein fertiges Puzzle ohne jegliche Lücken wird.

Machen Sie jetzt Ihre Anwendungen fit für Windows 7:

  • "Welchen Aufwand bedeutet eine Umstellung auf Windows 7?"
  • "Welche Umstellung von Windows XP / Windows Vista auf Windows 7 sind notwendig?"
  • "Welche Vorteile hat eine Zertifizierung für Windows 7?"
  • "Welche Vorteile hat Windows 7 für Endkunden?"
  • "Was ist meinen Visuab Basic 6.0 (VB6)-Anwendungen unter Windows 7?"
  • "Was erwartet mich mit dem Windows Internet Explorer auf Windows 7?"
  • ...
  • Ihre Frage ist nicht dabei? Dann wenden Sie sich bitte an uns: FitMit7@microsoft.com
  • ...

Die Antworten auf diese und weitere Fragen finden Sie auf www.msdn-online.de/FitMit7


Weiterführende Informationen:



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

MSDN TV meldet sich aus der Sommerpause zurueck!

07.09.2009 16:20:44 | Kay Giza

Mit neuem Anchorman (Jan Schenk a.k.a "Der mit dem Hut tanzt", "jansche" oder "Jan Schenk" Developer Evangelist Web/Live), professionellem Moderations-Accessoire (Strohhut) und in symbolträchtiger Location (Fahrstuhl) meldet sich MSDN TV aus der Sommerpause zurück!

Im Mittelpunkt dieser Ausgabe steht ein ausführliches Interview mit Sebastian Grassl, Produktmanager für Expression Studio, der über Funktionen, Einsatzbereiche und Zielgruppen von „Expression 3“ berichtet. Die deutsche Version von Expression 3 kommt Anfang Oktober auf den Markt. In den Kurznachrichten außerdem Infos zum neuen Windows Server Developer Center auf MSDN Online, zu aktuellen MSDN-Webcasts rund ums Thema „PHP“ und die Windows 7 Kompatibilität, zur deutschen Version von Small Basic und zu „7x7 – dem Windows 7 Countdown“, der die Zeit bis zur Einführung des neuen Betriebssystems mit nützlichem Know-How begleitet:

MSDN TV - Nachrichten für Entwickler: msdn tv – Ausgabe 7.9.09

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

Alles NEU: msdn tv – Nachrichten für Entwickler (Ausgabe 07.09.09)

07.09.2009 15:32:38 | Jan Schenk



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/09/07/alles-neu-msdn-tv-nachrichten-f-r-entwickler-ausgabe-07-09-09.aspx'; tweetmeme_source = 'jansche';

Get Microsoft Silverlight

Mit neuem Anchorman (Jan Schenk, das bin ich), professionellem Moderations-Accessoire (Strohhut) und in symbolträchtiger Location (Fahrstuhl) meldet sich msdn tv aus der Sommerpause zurück. Im Mittelpunkt dieser Ausgabe steht ein ausführliches Interview mit Sebastian Grassl, Produktmanager für Expression Studio, der über Features, Einsatzbereiche und Zielgruppen von „Expression 3“ berichtet. Die deutsche Version von Expression 3 kommt Anfang Oktober auf den Markt. In den Kurznachrichten außerdem Infos zum neuen Windows Server Developer Center auf MSDN Online, zu aktuellen MSDN-Webcasts rund ums Thema „PHP“ und die ‚Windows 7‘-Kompatibilität, zur deutschen Version von Small Basic und zu „7x7 – dem Windows 7 Countdown“, der die Zeit bis zur Einführung des neuen Betriebssystems mit nützlichem Know-How begleitet.

Ich bin natürlich sehr stolz und voller Respekt, dieses schöne Format übernehmen zu dürfen. Umso schwerer fand ich es gleichzeitig, so viele Änderungen mitzubringen. Und dass das alles gut ist, was wir jetzt anders machen als bei Lori, ist keineswegs in Stein gemeisselt. Daher bin ich, wie so oft, auf eure Hinweise, Kommentare und Kritik angewiesen, um das aus msdn tv zu machen, was es sein soll: Unterhaltsam, hilfreich und leicht und zwischendurch an zu schauen.

Wenn ihr Vorschläge habt, was man alles noch besser machen könnte, immer her damit!

Viele Grüße und viel Spass bei “msdn tv – Nachrichten für Entwickler”!

7x7 - Der Countdown zu Windows 7

07.09.2009 15:14:48 | Peter Kirchner

image

7 Wochen à 7 Tage – und jeden Tag ein Blogeintrag zu Windows 7. MSDN-Experte Oliver Scheer wird über die kommenden 49 Tage hinweg alle relevanten Dinge zu Windows 7 zusammentragen und uns mit seinem Countdown ein wenig die Zeit bis zur allgemeinen Verfügbarkeit (ab 22.10.) vertreiben. Der Fokus liegt unter der Woche auf Themen für Entwickler und IT-Professionals, am Wochenende kommen dann auch die Konsumer-Themen zum tragen. Interesse geweckt?

http://msdn-online.de/7x7

7x7 – Der Countdown zu Windows 7

07.09.2009 13:33:56 | Kay Giza

7 Wochen à 7 Tage – und jeden Tag ein Blogeintrag zu Windows 7. MSDN-Technologieberater Oliver Scheer wird (bereits seit dem 03.09.2009) über die kommenden rund 49 Tage hinweg alle relevanten Dinge zu Windows 7 zusammentragen und uns mit seinem Countdown ein wenig die Zeit bis zur allgemeinen Verfügbarkeit von Windows 7 (ab 22.10.2009) vertreiben.

Hier der Wochenplan:

  • Woche 7 –> Die “Hallo Windows 7”-Woche
  • Woche 6 –> Die Windows 7 Onboard-Tools
  • Woche 5 –> Windows 7 als Entwicklungsplattform
  • Woche 4 –> Die neuen Funktionen von Windows 7 im Detail
  • Woche 3 –> Noch mehr neue Funktionen im Detail
  • Woche 2 –> Alte Anwendungen fit für Windows 7 machen
  • Woche 1 –> Zielgerade
  • Woche 0 –> Man darf gespannt sein...
Haben wir Ihr Interesse geweckt? Dann besuchen Sie doch das Windows 7 Tagebuch unter http://msdn-online.de/7x7
 
Get Microsoft Silverlight

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

T-45 - Windows 7 - Die oberflächlichen Neuerungen

07.09.2009 00:00:00 | Oliver Scheer

Montag, 07. September 2009 – T-4545_0

Nur noch 45 Tage bis zum Launch von Windows 7.

Im heutigen Beitrag möchte ich einige der „oberflächlichen“ Veränderungen von Windows 7 beleuchten und einen Vorgeschmack auf weitere Artikel in dieser Serie geben.

Als erstes wird einem die neue Startleiste von Windows 7 ins Auge fallen: Die Startleiste wurde sehr stark aufgeräumt und vereinfacht. Laufende und angeheftete Anwendungen werden nun gemeinsam in einer Leiste angezeigt. Die Symbole an sich sind größer geworden (können aber auch wieder kleiner geschaltet werden). Einer der Gründe dafür ist übrigens die Größe des menschlichen Fingers. Die früheren Symbole wären schlichtweg zu klein, um präzise mit dem Finger angesteuert zu werden, und somit nur mittelprächtig für Multitouch geeignet gewesen. Zusätzlich können die Symbole und Schaltflächen nun verschiedene Zustände darstellen. Eine Anwendung, die ausgeführt wird, wird mit einem Symbol in einem Button dargestellt. Anwendungen die dort nur „angeheftet“ sind, werden nur als Symbol dargestellt.

image 

Hat man mehrere Instanzen einer Anwendung gestartet, werden mehrere Schaltflächen gruppiert. Geht man allerdings mit der Maus oder dem Finger auf die Schaltflächen, sieht man eine Vorschau der verschiedenen Instanzen und kann so direkt sehen, welche Instanz welchen Inhalt enthält.

image

Sehr hilfreich finde ich persönlich die Möglichkeit einzelne Zustände der laufenden Anwendungen durch die Symbole anzuzeigen. Die Symbole sind vollständig anpassbar und erlauben so die komprimierte Darstellung des Zustandes der aktuell laufenden Anwendung. Das folgende Bild zeigt z.B. die Fortschrittsanzeige der Anwendung und ein Symbol, das auf eine Meldung oder einen Fehler hinweist.

image

Anwendungen, die die Standardfortschrittsanzeige von Windows verwenden, nutzen dieses Feature automatisch. So sieht man diese Anzeige, z.B. beim Kopieren von Dateien oder Downloads im Browser. Dadurch hat man sofort den Überblick über den Fortschritt und muss nicht immer explizit das Fenster in den Vordergrund holen.

Für Entwickler und Fans von Schnellstartleisten bietet die Startleiste nun sogenannte Sprunglisten (engl. Jumplists) an. Mit diesen Sprunglisten kann man die „üblichen“ Aufgaben für eine Anwendung ausführen. Klickt man mit rechten Maustaste auf eine Schaltfläche, öffnet sich die Sprungliste für dieses Programm. Darin enthalten sind zum Beispiel Funktionen zum Öffnen, Schließen, Anheften oder Abtrennen von der Startleiste der entsprechenden Anwendung. Zusätzlich werden dort die zuletzt geöffneten Dateien angezeigt, die eine Dateiendung haben, die mit der entsprechenden Anwendung assoziert sind.

Das folgende Beispiel zeigt Word und dort die zuletzt bearbeiteten Dokumente (Recent Documents/Zuletzt verwendete Dokumente). Aus dieser Liste kann ich beliebige Dateien „pinnen“ und sie somit solange in der Sprungliste halten, bis ich sie wieder von dort entferne.

image 

Diese Funktionalität steht jeder Anwendung sofort „Out-of-the-Box“ zur Verfügung. Zusätzlich kann man dort aber auch noch eigene „Aufgaben“ integrieren, die auf die eigene Anwendung maßgeschneidert ist. Der Windows Live Messenger bietet folgende Ansicht der Sprungliste:

image

Die Multifunktionsleiste

Das Konzept der Multifunktionsleiste (Ribbon) aus Office 2007 wurde in Windows 7 integriert und bietet bei den Klassikern WordPad und Paint nun auch die kontextorientierte Steurung an. Damit ergeben sich für Entwickler natürlich viele neue Möglichkeiten: Die Multifunktionsleite kann relativ einfach in eigene Anwendungen integriert werden. Sie bringt darüber hinaus sehr viele Steuerelemente mit, z.B. drei verschiedene ColorPicker, Mini-Kontextmenüs, DropDownGaleries und einige mehr.

image

Multitouch

Mit dem Surface-Tisch haben wir es vorgemacht, mit Windows 7 legen wir nach. Die Steuerung von Anwendungen mit Fingern wird immer populärer und erlaubt eine neue intuitive Steuerung des PCs. Windows 7 ist in der Lage (entsprechende Hardware vorrausgesetzt) mehrere (und nicht nur zwei ;) ) gleichzeitige Eingaben durch Finger zu erkennen und zu verarbeiten.

Wenn eine Anwendung gewisse Standard-Funktionen verwendet, die vom Betriebssystem angeboten werden, wie z.B. vergrößern, verkleinern, Scrollen, etc., dann ist diese Anwendung bereits perfekt für Multitouch aufgestellt. Man muss keine eigenen Erweiterungen für Mutlitouch schreiben, um seine Anwendung entsprechend zu beflügeln. Natürlich lässt sich dies auch mit einer speziellen API optimieren, wenn man mag.

Sensor und Lokation

Typische PC Hardware verfügt inzwischen über immer mehr technische „Spielereien“, wie z.B. Lichtsensoren, um das Display an das Umgebungslicht anpassen zu können, oder sogar GPS-Empfänger, um lokationsbasierte Dienste bereitstellen zu können. Ein interessantes reales Beispiel ist die Integration dieser Dienste in ein Wetter-Gadget, das immer die Wetterbedingungen am aktuellen Ort darstellt. Wie dies funktioniert, wird in diesem Countdown auch in Kürze verraten.

Bibliotheken

Bibliotheken sind Ziele, die der Benutzer für eigene Dateien und Ordner definieren kann. Diese können sich an beliebigen dezentralen Orten befinden.

image

Ich benutze die Bibliotheken, um meine verschiedenen Job- und Privat-Ordner zusammenzufassen. Wenn ich im Büro bin, habe unter dem Job-Ordner auch die Netzwerklaufwerke unseres internen Netzwerkes zusammen gefasst. Bin ich unterwegs, werden mir in der Job-Bibliothek nur meine lokalen Daten angezeigt, da die Netzlaufwerke dann gerade nicht zur Verfügung stehen.

Förderierte Suche

Über die förderierte Suche, die sich jetzt neben den Bibliotheken in den Explorer und den Standard-Datei-Dialog integriert hat, kann man eigene Suchen über diverse Quellen integrieren. Diese Arten von Suchen können weit aus mehr als nur über Ordner und Dateien suchen. Man kann beliebige Datenquellen integrieren, wie z.B. eine Suche über Twitter, dem Intranet oder Internet oder eigene Datenbanken. Dazu ist kein extra Suchdienst auf dem Client notwendig, sondern das ganze wird von dezentralen Servern geliefert.

 

Und was sich unter der Oberfläche von Windows 7 geändert hat wird übermorgen verraten.

 

Hier geht es zur 7x7 Countdown Übersicht

ASP.NET ListView à la JQuery

06.09.2009 18:53:32 | Daniel Schädler

Ich habe diese Woche den einen oder anderen Beitrag im Web über JQuery und ASP.NET gelesen. Das ListView-Control von ASP.NET wäre eine gute Sache, dachte ich zuerst. Das eine muss man sagen: Wenn man nur Darstellung von Daten will, dann kann man dies mit JQuery ganz komfortabel erledigen, wenn man aber Update/ Insert und Delete Funktionalitäten will, dann denke ich dass das ListView geeigneter ist (da man sich nicht um die eindeutigen ID’s der Controls kümmern muss. Wenn man JTemplate verwendet, dann muss man selber besorgt sein, dass diese ID’s eindeutig sind.) Ein kleines Beispiel habe ich hier.

Als Grundlage habe ich die Datenbank AdventureWorks genommen die auf Codeplex heruntergeladen werden kann. (AdventureWorks). Als erstes habe ich eine Entity Framework Verbindung zur DB erstellt und gebe dann einen anonymen Type zurück (Referenzen hat die Javascript-Serialisierung nicht so gerne).

   1: [WebMethod()]
   2: public static IEnumerable GetProducts() {
   3:     AdventureWorksEntities entities = new AdventureWorksEntities();
   4:     IList<Product> products = entities.Product.Take<Product>(10).ToList<Product>();
   5:     var product = (from p in products select new { p.ProductID, p.Name, p.ListPrice });
   6:     
   7:     return product;
   8: }

Danach hab ich ein simples jTemplates erstellt:

   1: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   2: <html xmlns="http://www.w3.org/1999/xhtml">
   3: <head>
   4:     <title></title>
   5:     <script type="text/javascript" src="../JQuery/JQueryCore/jquery-1.3.2.js"></script>
   1:  
   2:     <script type="text/javascript" src="../JQuery/JQueryUI/jquery-ui.js">
</script>
   6: </head>
   7: <body>
   8:     {#foreach $T.d as Product}
   9:     <div id="Accordion" style="height: 25px; width: 100px; background:silver;">
  10:         <div id="Accordion_Header" style="height: 20px; width: 100px;">
  11:             Produkt</div>
  12:         <div id="Accordion_Content" style="width: 100px; height: 40px; display: block;">
  13:             <label for="Product_Name" title="Produktname">
  14:             </label>
  15:             <input id="Product_Name" type="text" disabled="disabled" value="{$T.Product.Name}" />
  16:             <hr />
  17:         </div>
  18:     </div>
  19:     <br />
  20:     <br />
  21:     <br />
  22:     {#/for}
  23: </body>
  24: </html>

Und ein wenig JQuery hat dann den Accordion-Effekt hervorgerufen. Klar man kann noch was am Style verbessern, aber ich denke so als kleines Beispiel ist es nicht schlecht.

   1: <script type="text/javascript" src="JQuery/JQueryCore/jquery-1.3.2-vsdoc2.js"></script>
   2: <script type="text/javascript" src="JQuery/JTemplates/jquery-jtemplates_uncompressed.js"></script>
   3: <script type="text/javascript" src="JQuery/JQueryUI/jquery-ui.js"></script>
   4: <script type="text/javascript">
   5:     $(document).ready(function() {
   6:         $.ajax({
   7:             type: "POST",
   8:             dataType: "json",
   9:             url: "Default.aspx/GetProducts",
  10:             contentType: "application/json; charset=utf-8",
  11:             data: "{}",
  12:             success: function(msg) {
  13:                 var result = msg.d;
  14:                 $("#Container").setTemplateURL("Templates/ProductTemplate.htm");
  15:                 $("#Container").processTemplate(msg);
  16:                 $("#Container").children("#Accordion").each(function() {
  17:                     var Accordion = $(this).accordion();
  18:                     var AccordionHeader = $("#Accordion_Header", Accordion);
  19:                     var AccordionContent = $("#Accordion_Content", Accordion);
  20:  
  21:                     AccordionHeader.click(function() {
  22:                         if (AccordionContent[0].style.display == "block") {
  23:                             AccordionContent.css("display", "none");
  24:                         } else {
  25:                             if (AccordionContent[0].style.display == "none") {
  26:                                 AccordionContent.css("display", "block");
  27:                             }
  28:                         }
  29:                     });
  30:                 });
  31:  
  32:             },
  33:             error: function(msg) {
  34:                 alert(msg);
  35:             }
  36:         });
  37:     });
  38: </script>

Grundlage für den Beitrag waren folgende Artikel: Use jQuery and ASP.NET AJAX to build a client side Repeater und HowTo: ASP.Net WebServices mit jQuery und jTemplates. Verbesserungsvorschläge und Kritik erwünscht.

Erste Versuche mit Rapid Prototyping

06.09.2009 01:01:00 | Daniel Springwald

Endlich konnte ich mein erstes 3D-Modell per Rapid Prototyping "drucken". Als Material ist ABS Kunststoff in weiss verwendet worden.

Das 3D-Modell ist eine Jack Skellington Büste aus "nightmare before christmas".

Von Nahem sieht man noch, dass die Einstellungen für den Prototyper nicht 100% perfekt sind.

Aber es ist ja auch erst mein erster 3D-Druck und noch viel Zeit für Optimierungen ;o)

Mehr Details und Fotos hier.

 

 

Routing in ASP.Net 4.0

05.09.2009 22:14:59 | Thorsten Hans

Routing

 

Mit dem Release von Version 3.5 ServicePack 1 wird neben ASP.Net MVC nun auch “Standard” ASP.Net endlich Routing unterstützen. Was Routing ist, brauche ich an dieser Stelle wohl nicht mehr zu erklären :D. In der kommenden Version 4.0 wurden noch einige Neuerungen eingebaut und einige vorhandene Methoden refactord oder ersetzt. Hier eine kurze Übersicht zu Routing in ASP.Net 4.0 Webforms.

Routing Konfigurieren

Konfiguriert wird Routing in ASP.Net 4.0 analog zu ASP.Net MVC in der Applikationsklasse sprich Global.asax. Im Application_Start Event können beliebige Routen definiert werden, die dann zur Laufzeit angewendet werden.

Ein einfaches Beispiel ist das Routing für Blogeinträge. In der fiktiven Webanwendung sollen Blogeinträge über die Url

http://www.thorsten-hans.de/Entry/4711

verfügbar sein. Praktisch sieht die Url allerdings wie folgt aus

http://www.thorsten-hans.de/Entry.aspx?Id=4711

Der ASP.Net Engine bringt man dieses Routing ganze einfach so bei

   1:  System.Web.Routing.RouteTable.Routes.Add("BlogEntryRoute",
   2:    new System.Web.Routing.Route("Entry/{id}",
   3:      new System.Web.Routing.PageRouteHandler("~/Entry.aspx")));

So einfach kann auch in ASP.Net 4.0 Routing konfiguriert werden. Parameter in Routen werden wie in diesem Beispiel der ID Parameter in geschweiften Klammern {} angegeben.

 

Verwenden von Routingparametern in Webseiten

Die im Routing definierte ID ist ein Routingparameter, Routingparameter sind dynamische Bestandteile einer Route die variabel vom Anwender angegeben werden können. Die Definition des Parameters war sehr einfach, genau so straight ist der Zugriff auf den Parameter.

Es gibt in ASP.Net 4.0 drei Wege Routingparameter auszulesen

  • Im Codebehind ( C# oder VB)
  • Im Markup der Zielresource
  • In einer Datenquelle
Abrufen von Routingparametern im Codebehind

Im Codebehind der Page Entry.aspx kann der ID Parameter dann so abgefragt werden

   1:  if(Page.RouteData.Values["id"]!=null)
   2:     this.labelBlogEntryId.Text =  Page.RouteData.Values["id"].ToString();

Wichtig ist hierbei, den gewünschten Parameter aus der RouteData Collection zunächst auf null zu prüfen, dadurch kann eine ASP.Net Exception vermieden werden, wenn der Anwender nur die URL

http://www.thorsten-hans.de/Entry/   aufruft.

 

Abrufen von Routingparametern im Markup der Zielresource

Ganz nützlich ist auch die Möglichkeit die Routingparameter direkt im Markup verwenden zu können. So kann man zum Beispiel den Routingparameter ID an eine TextBox oder als SelectedValue einer DropDownList binden

   1:  <asp:DropDownList ID="DropDownListWhatEver"
   2:     runat="server" SelectedValue='<%$RouteValue:Id%>' />

Leider ist in der aktuellen Version von VisualStudio 2010 für die RouteValue Collection noch kein IntelliSense eingebunden, was die Verwendung im Markup noch angenehmer und schneller machen würde!

 

Abrufen von Routingparametern in Datenquellen

Die dritte Möglichkeit wie man Routingparameter in ASP.Net konsumieren kann, sind die *-DataSoruce Objekte. Hierbei wurde die ParameterCollection um den Parametertyp RouteParameter erweitert. Eine einfache SQL-DataSource sieht mit RouteParameter so aus

   1:  <asp:SqlDataSource ID="blogDataSource" runat="server"
   2:      SelectCommand="select * from blogentries where id=@id">
   3:     <SelectParameters>
   4:        <asp:RouteParameter Name="id"
   5:            DefaultValue="1" RouteKey="id" DbType="Int64" />
   6:     </SelectParameters>
   7:  </asp:SqlDataSource>

Wichtig ist beim RouteParameter die korrekte Angabe des RouteKey’s, der hier wieder auf den zuvor definierten Routingparameter ID verweist.

 

Fazit

Endlich! Endlich! Endlich! Mehr kann ich bis jetzt nicht dazu sagen, es wurde auch Zeit, dass man in ASP.Net Webforms auch ein schönes Routing OOB definieren kann. Auch die Verwendung der Routingparameter ist schön und durchgängig gelöst. Allerdings macht dieses Feature die Entscheidung zwischen ASP.Net Webforms und ASP.Net MVC nicht gerade einfacher :)

 

Microsoft SharePoint Administration Toolkit v4.0

05.09.2009 08:18:00 | Ozgur Aytekin

The Microsoft® SharePoint® Administration Toolkit contains functionality to help administrate and manage Microsoft® Office SharePoint® Server 2007 and Windows® SharePoint® Services version 3.0.

The Microsoft SharePoint Administration Toolkit contains functionality to help manage Office SharePoint Server 2007 and Windows SharePoint Services version 3.0. This toolkit contains the ability to diagnose performance issues and perform bulk operations on site collections.

New Features:
SharePoint Diagnostics tool (updated)
Permissions Reporting tool, which includes the UnlockFGPReport Stsadm operation
UpdateQuota Stsadm operation
SharePoint-related Security Configration Wizard manifests


Existing Features:
User Profile Replication Engine
Batch Site Manager
UpdateAlert Stsadm operation

x86: http://www.microsoft.com/downloads/details.aspx?FamilyID=CD2D09A7-1159-4D40-BE1C-8EFAB1345381&displaylang=en

x64: http://www.microsoft.com/downloads/details.aspx?FamilyID=665E98EA-5318-486D-ABA2-2BFE46254357&displaylang=en

T-47 – 7x7 – Windows 7 Countdown

05.09.2009 00:00:00 | Oliver Scheer

Samstag, 05. September 2009 – T-4747_0

Nur noch 47 Tage bis zum Windows 7 Launch.

In Windows 7 sind im Gegensatz zu Windows Vista einige Programme nicht mehr mit dabei. Es fehlen z.B. Mail und Fotogalerie, diese Programme sind ausgelagert worden und finden sich nun in einem kostenfreien Paket zum Download, den Windows Live Essentials.

Mehr

WinDbg Tutorial: Fehlerursachen finden (Teil 1 einer Serie???)

04.09.2009 16:43:28 | Andre Kraemer

In meinem Beitrag zur MSDN Blogparade zum Thema Entwicklungstools zählte ich WinDbg als einen meiner Favoriten auf. In einem Nebensatz erwähnte ich, dass ich bei Interesse gerne ein kleines Tutorial zu diesem Werkzeug schreiben könnte. Die Anzahl der Rückmeldungen auf diesen Beitrag führten zu zwei Schlussfolgerungen:

  1. Mein Blog lesen mehr Leute als ich dachte, und nicht wie vorher vermutet nur meine Frau und meine Mutter.
  2. Das Interesse an einem Tutorial ist definitiv vorhanden. Also werde ich mein Versprechen einhalten und ein kleines Tutorial schreiben.

Sicherlich stellt sich nun die Frage, warum überhaupt so lange gedauert hat, das Tutorial zu verfassen!

Nun, das liegt zum einen daran, dass ich zur Zeit nicht in Köln, sondern in Bonn arbeite. Somit verbringe ich viel weniger Zeit im Zug und habe somit auch viel weniger Zeit zum bloggen. Zum anderen liegt es daran, dass ich die knappe Zeit im Zug nicht zum schreiben, sondern zum Ansehen von Rob Conneries StoreFront Webcasts genutzt habe. An dieser Stelle möchte ich mich als absoluter Fan der Serie bekennen. Wer sich die Webcasts noch nicht angesehen hat, sollte dies unbedingt nachholen! Dann kam auch noch der Urlaub hinzu, so dass dieser Eintrag einfach ein wenig warten musste.

Jetzt aber zurück zum eigentlichen Thema!

WinDbg - Was ist das überhaupt?

Wie in meinem vorherigen Blog Post geschrieben, ist WinDbg ein unmanaged (native) Debugger mit grafischer Benutzeroberfläche. Dank der SOS Erweiterung kann man ihn jedoch wunderbar dazu verwenden, auch managed Code zu debuggen. WinDbg benötigt eigentlich keinerlei Installation auf dem zu debuggenden System und kann somit wunderbar als Geheimwaffe auf einem Schweizer Taschenmesser USB Stick mitgeführt werden.

Wo bekommt man ihn her und was muss bei der Installation beachtet werden?

Herunterladen kann man WinDbg in Form eines MSI Paketes auf der Download Seite der Microsoft Debugging Tools for Windows. Die Installation an sich verläuft recht geradlinig (Next -> Next -> I Agree -> Next -> Finish ;-)). Sind die Debugging Tools installiert, kann der komplette Inhalt des Verzeichnisses wie bereits erwähnt auf einen Stick kopiert werden und wäre auch von dort aus lauffähig.

Bevor WinDbg nun wirklich genutzt werden kann, ist jedoch noch eine kleine Vorarbeit - nämlich die Definition des Symbol-Pfads - notwendig. Andernfalls meldet WinDbg während der Debugging Aktivitäten stets, dass er keine Symbole (PDB-Dateien) findet, was die Übersichtlichkeit ein wenig leiden lässt.

Zur Angabe des Symbol Pfads legt man nun zunächst ein Verzeichnis auf seiner Festplatte/Stick an, zum Beispiel c:\symbols. Anschließend startet man WinDbg und wählt im Menü File den Eintrag Symbol File Path ... aus. Im sich anschließend öffnenden Dialog gibt man über folgenden Befehl an, dass man die Symbole gerne von Microsoft herunter laden und auf der Festplatte im Verzeichnis c:\symbols  speichern würde:

SRV*c:\symbols* http://msdl.microsoft.com/download/symbols

 

Genug der Vorarbeit. Los gehts!

Jetzt, nachdem WinDbg korrekt installiert und konfiguriert ist, möchte ich anhand eines kleinen Beispiels die Funktionsweise zeigen. Source Code sowie die kompilierte Version gibt es übrigens bald auf meiner Hompage zum Download.

Die Applikation um die es sich handelt ist eine kleine Windows Anwendung, die nur aus einem Login Dialog besteht. Gibt der Anwender die korrekten Zugangsdaten ein, erhält er Bestätigungsmeldung:

windbg1   

Sind die Benutzerdaten falsch, kommt eine Fehlermeldung:

windbg2

Das ganze läuft seit einer ganzen Weile recht gut beim Kunden im produktiven Einsatz. Seit kurzem ist jedoch kein Login mehr möglich. Der Kunde meldet, dass trotz 100%ig richtiger Zugangsdaten stets die Meldung "Ungültige Benutzername / Passwort Kombination" Meldung kommt. Eine Log Datei wird leider nicht erstellt, so dass die Ursache des Fehlers derzeit vollkommen offen ist. Ein Blick auf den Quellocde zeigt folgende Zeilen innerhalb des Login-Formulars

private void LoginButton_Click(object sender, EventArgs e)
{
    UserService service = new UserService();
    try
    {
        service.ValidateUser(UserNameTextBox.Text, PasswordTextBox.Text);
        MessageBox.Show("Login erfolgreich");
    }
    catch
    {
        MessageBox.Show("Ungültige Benutzername / Passwort Kombination");
    }
}

Wie man sieht, wird hier Logik über Exceptions gesteuert. Nicht schön, aber vorerst leider nicht zu ändern. Da der Code im Falle irgendeiner Exception die Meldung "Ungültige Benutzername / Passwort Kombination" bringt, liegt die Vermutung nahe, dass irgendein Fehler innerhalb der Methode ValidateUser auftritt, der zu einer Exception führt. Die Frage ist nur: Welche Exception und warum tritt diese überhaupt auf?

Die Ursache des Problems wäre mit einer kleinen Quellcodeänderung schnell gefunden. Eine schnelle Lösung ist zwar genau das, was unser Kunde braucht, jedoch möchte er uns weder zum Debuggen in sein Netzwerk, noch auf Gut Glück neue Versionsstände mit erweiterten Log Nachrichten einspielen lassen. Allerdings willigt er ein, dass wir mit einem USB Stick bewaffnet an einen der betroffenen PCs dürfen. Voraussetzung jedoch ist, dass wir keine Software installieren.

Showtime

Die beschriebene Situation ist ein typisches Einsatzszenario für WinDbg.

Wir starten also WinDbg von unserem USB Stick und wählen das Menü File->Attach to a process. Anschließend wählen wir unsere fehlerhafte Applikation aus der Prozessliste aus und drücken OK. WinDbg sollte nun ungefähr so aussehen:

windbg3

Als nächstes geben wir folgende Kommandos in die Eingabezeile ein:

sxe clr

.loadby sos mscorwks

Falls nun keine Fehlermeldung kommt, haben wir alles richtig gemacht ;-)

sxe clr sagt dem Debugger, dass er bei jeder CLR Exception anhalten soll. Der Befehl ".loadby sos mscorwks" dient dazu, die SOS Extension zu laden. Diese DLL ermöglicht die Untersuchung von Managed Code innerhalb von WinDbg, der ja eigentlich ein Debugger für unmanaged Code ist. Für jede Version der CLR gibt es eine eigene SOS.DLL. Um nun die zum Framework der fehlerhaften Anwendung passende SOS.DLL zu laden, kann man entweder den vollständigen Pfad angeben, oder man lädt die Extension einfach aus dem Pfad, aus dem auch die mscorwks geladen wurden. Die Datei mscorwks gehört zum .NET Framework.

Derzeit befindet sich das Programm immer noch im Haltemodus. Über die Eingabe von g (für Go) bzw. drücken von F5 können wir die Ausführung fortführen.

Als nächstes Klicken wir in unserer fehlerhaften Applikation erneut auf den Button Login, um den Fehler zu provozieren. Ein Wechsel zu WinDbg zeigt, dass die Ausführung aufgrund der Exception angehalten wurde. Außerdem werden folgende Zeilen ausgegeben:

(1144.1380): CLR exception - code e0434f4d (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=0012ecf0 ebx=e0434f4d ecx=00000000 edx=00000028 esi=0012ed7c edi=0015b718
eip=7c812a6b esp=0012ecec ebp=0012ed40 iopl=0         nv up ei pl nz na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000202
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\WINDOWS\system32\KERNEL32.dll -
KERNEL32!RaiseException+0x52:
7c812a6b 5e              pop     esi

Wir sehen also, dass eine CLR Exception aufgetreten ist. Leider sagt die aktuelle Ausgabe noch relativ wenig über die Ursache aus. Wie kommen wir also an die Details?

Dazu gibt es prinzipiell zwei Möglichkeiten.

Variante 1 ist, über den Befehl

!DumpStackObjects (oder kurz !dso) eine Liste aller Objekte, die aktuell auf dem Stack verwiesen werden, abzurufen.

Das Ergebnis sieht in meinem Beispiel wie folgt aus:

0:000> !dso
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll -
PDB symbol for mscorwks.dll not loaded
OS Thread Id: 0x1380 (0)
ESP/REG  Object   Name
0012ed5c 014c8974 System.Data.SqlServerCe.SqlCeException
0012eda8 014c8974 System.Data.SqlServerCe.SqlCeException
0012edec 014c8974 System.Data.SqlServerCe.SqlCeException
0012edf8 014c8974 System.Data.SqlServerCe.SqlCeException
0012ee20 014c04d8 System.Data.SqlServerCe.SqlCeConnection
0012ee24 014c04d8 System.Data.SqlServerCe.SqlCeConnection
0012ee50 014c8974 System.Data.SqlServerCe.SqlCeException
0012ee7c 014c04d8 System.Data.SqlServerCe.SqlCeConnection
0012ef00 014bf388 System.Windows.Forms.MouseEventArgs
0012ef04 014c0430 Codemurai.Tutorial.WinDbg.ExceptionHunting.UserService
0012ef08 014c04d8 System.Data.SqlServerCe.SqlCeConnection
0012ef14 014c04d8 System.Data.SqlServerCe.SqlCeConnection
0012ef18 014c04d8 System.Data.SqlServerCe.SqlCeConnection
0012ef2c 014b075c System.Object[]    (System.Object[])
0012ef30 014bf388 System.Windows.Forms.MouseEventArgs
0012ef34 014c0430 Codemurai.Tutorial.WinDbg.ExceptionHunting.UserService
0012ef50 014c048c System.Text.StringBuilder
0012ef5c 014c04a0 System.String    test
0012ef60 014a6e80 System.String    Data Source=CodemuraiDb2.sdf
0012ef64 014c04d8 System.Data.SqlServerCe.SqlCeConnection
0012ef68 014c04d8 System.Data.SqlServerCe.SqlCeConnection
0012ef6c 014a6b78 System.Configuration.ConnectionStringSettings
0012ef70 014a5f8c System.Configuration.ConnectionStringSettingsCollection
0012ef80 014c04d8 System.Data.SqlServerCe.SqlCeConnection
0012ef84 014a6b78 System.Configuration.ConnectionStringSettings
0012ef88 014a5f8c System.Configuration.ConnectionStringSettingsCollection
0012ef8c 014c045c System.String    wilhelm
0012ef98 014c0430 Codemurai.Tutorial.WinDbg.ExceptionHunting.UserService
0012efb0 014bf388 System.Windows.Forms.MouseEventArgs
0012efb4 013c8b28 System.EventHandler
0012efb8 013c6a04 System.Windows.Forms.Button
0012efc4 014c04a0 System.String    test
0012efc8 014c04a0 System.String    test
0012efcc 014c045c System.String    wilhelm
0012efd0 014c0430 Codemurai.Tutorial.WinDbg.ExceptionHunting.UserService
0012efd4 014c0430 Codemurai.Tutorial.WinDbg.ExceptionHunting.UserService
0012efd8 014c0430 Codemurai.Tutorial.WinDbg.ExceptionHunting.UserService

...

Wir sehen, dass ganz oben auf dem Stack eine SqlCeException liegt. Diese ist unter der Adresse 014c8974 auf dem Heap abgelegt. Details eines Objekts kann man sich über !DumpObj bzw. !do ansehen.

0:000> !do 014c8974
Name: System.Data.SqlServerCe.SqlCeException
MethodTable: 07d8255c
EEClass: 07d04f14
Size: 76(0x4c) bytes
(C:\WINDOWS\assembly\GAC_MSIL\System.Data.SqlServerCe\3.5.1.0__89845dcd8080cc91\System.Data.SqlServerCe.dll)
Fields:
      MT    Field   Offset                 Type VT     Attr    Value Name
79330a00  40000b5        4        System.String  0 instance 00000000 _className
7932fe74  40000b6        8 ...ection.MethodBase  0 instance 00000000 _exceptionMethod
79330a00  40000b7        c        System.String  0 instance 00000000 _exceptionMethodString
79330a00  40000b8       10        System.String  0 instance 014c8e0c _message
7932a35c  40000b9       14 ...tions.IDictionary  0 instance 00000000 _data
79330b94  40000ba       18     System.Exception  0 instance 00000000 _innerException
79330a00  40000bb       1c        System.String  0 instance 00000000 _helpURL
7933061c  40000bc       20        System.Object  0 instance 00000000 _stackTrace
79330a00  40000bd       24        System.String  0 instance 00000000 _stackTraceString
79330a00  40000be       28        System.String  0 instance 00000000 _remoteStackTraceString
79332c4c  40000bf       34         System.Int32  1 instance        0 _remoteStackIndex
7933061c  40000c0       2c        System.Object  0 instance 00000000 _dynamicMethods
79332c4c  40000c1       38         System.Int32  1 instance -2146233087 _HResult
79330a00  40000c2       30        System.String  0 instance 00000000 _source
793332c8  40000c3       3c        System.IntPtr  1 instance        0 _xptrs
79332c4c  40000c4       40         System.Int32  1 instance -532459699 _xcode
07d82660  400032a       44 ...CeErrorCollection  0 instance 014c8784 errors

In den Informationen über unser Exception Objekt sehen wir nun, dass es ein Feld _message gibt, dessen Inhalt sich an der Adresse 014c8e0c befindet. An die Details des Felds _message kommen wir wieder über den Befehl !do.

0:000> !do 014c8e0c
Name: System.String
MethodTable: 79330a00
EEClass: 790ed64c
Size: 282(0x11a) bytes
(C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll)
String: The database file cannot be found. Check the path to the database. [ Data Source = CodemuraiDb2.sdf ]
Fields:
      MT    Field   Offset                 Type VT     Attr    Value Name
79332c4c  4000096        4         System.Int32  1 instance      133 m_arrayLength
79332c4c  4000097        8         System.Int32  1 instance      101 m_stringLength
793316e0  4000098        c          System.Char  1 instance       54 m_firstChar
79330a00  4000099       10        System.String  0   shared   static Empty
    >> Domain:Value  00163700:013a1198 <<
79331630  400009a       14        System.Char[]  0   shared   static WhitespaceChars
    >> Domain:Value  00163700:013a18ec <<

Prima, diese Aussage hat doch gleich eine ganz andere Qualität. Benutzername/Passwort waren wirklich nicht falsch. Einzig die geschluckte Exception sorgte für den Eindruck. Statt dessen konnte die DB nicht gefunden werden. Ein kurzer Blick die App.Config zeigt folgenden Eintrag:

<connectionStrings>
    <add name="CodemuraiDb" connectionString="Data Source=CodemuraiDb2.sdf"
        providerName="Microsoft.SqlServerCe.Client.3.5" />

 

Die DB selbst heißt im Dateisystem jedoch: CodemuraiDb.sdf.

Einen kurzen Eintrag in der Datei Codemurai.Tutorial.WinDbg.ExceptionHunting.exe.config später läuft das Programm wieder wie gewünscht.

Geht das auch schneller?

Selbstverständlich. Sobald unser Code wegen einer Exception steht hätten wir statt !dso und mindestens Zwei mal !do auch einfach !PrintException, oder kurz !pe eingeben können.

0:000> !pe
Exception object: 014c8974
Exception type: System.Data.SqlServerCe.SqlCeException
Message: The database file cannot be found. Check the path to the database. [ Data Source = CodemuraiDb2.sdf ]
InnerException: <none>
StackTrace (generated):
<none>
StackTraceString: <none>
HResult: 80131501

Aber das kann ja jeder ;-) Außerdem haben wir über den anderen Weg direkt noch ein paar Debugging Tipps gelernt.

Zusammenfassung

In diesem Eintrag wurden folgende Befehle besprochen.

Befehl Bedeutung
sxe clr Bei jeder CLR Exception anhalten
.loadby sos mscorwks SOS Extension passend zur .NET Framework Version laden
g Ausführung fortführen
!DumpStackObjects / !dso Auflistung aller Objekte, die auf dem Stack verwiesen werden
!DumpObj /!do <Adresse>  Details zu einem Objekt ansehen
!PrintException / !pe  Details zur aktuellen Exception ansehen

Wie gehts weiter?

Ziel dieses kleinen Beispiels war es, den Einstieg in WinDbg zu erleichtern. Natürlich gibt es noch weitaus mehr, was mit WinDbg angestellt werden kann. So ist der Debugger sehr hilfreich, um Speicherlecks, oder (vermeintliche) Deadlocks zu finden. Auch die Option, einen zuvor durch den Kunden generierten MemoryDump zu analysieren ist sehr interessant.

Sollte also Interesse an einer Fortsetzung bestehen, reicht es einen kurzen Kommentar zu diesem Beitrag zu hinterlassen. Kommen genug Kommentare zusammen, schreibe ich gerne weitere Teile - dieses Mal auch mit weniger Wartezeit ;-)



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

PHP Core Entwickler Pierre Joye im Interview - Teil 3 von 3

04.09.2009 12:49:51 | Jan Schenk



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/09/04/php-core-entwickler-pierre-joye-im-interview-teil-3-von-3.aspx'; tweetmeme_source = 'jansche';

Bits to Bite: Wir wollen doch nur spielen!

Get Microsoft Silverlight


Pierre Joye, PHP Core Developer, im dritten und letzten Teil meiner Interviewserie. Jetzt reden wir mal Klartext. Oder besser gesagt, wir lassen Pierre spontan antworten, auf Stichwörter wie Windows7, Standards, Barcamps oder Yoga. Klingt komisch? Dann seht euch das Video an. Eine Art Rohrschach-Test für den Interviewpartner - das Beste, was die Spontaneität zu bieten hat, für euch.

Die vorangegangenen Interviews mit Pierre findet ihr hier:
http://blogs.msdn.com/jansche/archive/2009/09/01/php-core-entwickler-pierre-joye-im-interview-teil-1-von-3.aspx
und hier:
http://blogs.msdn.com/jansche/archive/2009/09/02/php-core-entwickler-pierre-joye-im-interview-teil-2-von-3.aspx

T-48 – 7x7 – Windows 7 Countdown

04.09.2009 09:24:00 | Oliver Scheer

Freitag, 04. September 2009 – T-4848_0

Nur noch 48 Tage bis zum Launch von Windows 7. 

Eine Installation durchzuführen, ist für technikverliebte Menschen wie mich gang und gäbe. Allerdings war es noch nie so langweilig wie bei Windows 7. Verzeihen sie mir den Ausdruck “langweilig”, aber beim Windows 7 Setup wird vom Anwender nicht wirklich viel erwartet.

Mehr

Windows 7 als Testversion ab sofort verfügbar

04.09.2009 00:35:05 | Oliver Scheer

Die finale Version von Windows 7 steht ab sofort als 90-tägige Testversion zum Download zur Verfügung.

Ganz wichtig: Es handelt sich dabei um die Windows 7 Enterprise Variante. Diese enthält fast alle Funktionen der Ultimate-Variante. Ebenfalls sehr wichtig ist die Tatsache, das es sich dabei definitiv um eine Testversion handelt die nach 90 Tagen abläuft. Ab diesem Zeitpunkt fährt Windows 7 stündlich herunter. Danach wird eine vollständige Neuinstallation von Windows 7 notwendig.

Downloadlink

Generierung der designer.cs / vb Datei forcieren oder “Der Name ControlXYZ ist im aktuellen Kontext nicht vorhanden

03.09.2009 19:34:00 | Peter Bucher

Wenn eine ASPX- / ASCX-Datei ausserhalb vom Visual Studio Editor geändert wird, bekommt das der Designer nicht mit.
Das Updaten der <Dateiname>.<Erweiterung>.designer.cs geschieht nicht sehr häufig und nur bei bestimmten Fällen.

So kann es gut sehr gut sein, dass folgende Fehlermeldung beim Kompilieren erscheint:

The name ‘ControlXYZ’ does not exists in the current context

bzw.

Der Name ControlXYZ ist im aktuellen Kontext nicht vorhanden

Um die Neugenerierung der Designer-Datei zu erzwingen, kann die ASPX- / ASCX- Datei im Designer geöffnet werden, oder eine Eigenschaft hinzugefügt / geändert werden.

Wenn das nichts nützt (Danke an Stefan):

Leider funktioniert das aber lange nicht immer. Ich hab das gerade bei größeren Projekten (meist dann, wenn man in VS ein Control kopiert und umbenennt (inkl. Klassenname natürlich) öfter mal. Schon ein paar mal half schlußendlich nur das Löschen der Datei in VS und das erneute Erstellen. Reines Drag&Drop in das VS Projekt hinein half da auch nciht.

Mehr Details zu diesem Verhalten gibt es in folgendem Posting:

PHP Interop: PHP 5.3 auf Windows im PHP-Journal veröffentlicht und kostenlos als PDF verfügbar

03.09.2009 18:05:22 | Jan Schenk



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/09/03/php-interop-php-5-3-auf-windows-im-php-journal-ver-ffentlicht-und-kostenlos-als-pdf-verf-gbar.aspx'; tweetmeme_source = 'jansche';

Die am 9. September erscheinende Ausgabe des PHP-Journals enthält einen Artikel von mir über PHP 5.3 auf Windows. Multi-Versions-Setup, Performance-Tuning, aber auch Haken und Ösen sind dort beschrieben.

Unter http://www.phpjournal.eu/pages/aktuelles-heft.php lässt sich die “Anleitung zum Glücklichsein” als PDF herunter laden, und zwar völlig kostenfrei!

image

Über Fragen oder Kritik freue ich mich, entweder hier als Kommentar posten, Kontakt mit mir über die Email-Funktion dieses Blogs aufnehmen oder einfach per einfach an jan_DOT_schenk_AT_microsoft_DOT_com!

Viele Grüße,
jan

Die 3 beliebtesten Fachbücher aus dem .NET-Umfeld

03.09.2009 16:17:43 | Gordon Breuer

viele verschiedene bücher © glori Wolfgang Kluge hat in seinem Blog eine neue Blog-Parade gestartet um herauszufinden, welches die beliebtesten, bzw. verbreitetesten, Fachbücher im Umfeld der Programmierung mit dem .NET-Framework sind. Ich selber lese noch immer gerne Bücher trotz der mangelnden Fähigkeit des Instant-Updates. Vielleicht liegt es einfach daran, dass ich mich zum lesen gerne in eine ruhige Ecke oder auf die Couch zurück ziehe und das ist mit einem PC gar nicht so einfach. Selbst bei einem Note- oder Netbook wird man ständig abgelenkt durch so viele andere Sachen die man da noch laufen hat. Vielleicht wäre ein eBook-Reader genau das Richtige für mich, aber die zur Zeit erhältlichen Geräte sind mir da einfach noch zu teuer. Doch ich schweife ab…

In den vergangenen Jahren habe ich mehrere Bücher gelesen, die sich mit dem .NET-Framework in irgendeiner Form auseinander gesetzt haben. Viele sind aber inzwischen nicht mehr auf dem aktuellen Stand. Hier aber eine Auswahl der Bücher, die sich bei mir aktuell auf dem Schreibtisch in Griffnähe befinden:

ASP.NET MVC 1.0

ASP.NET MVC 1.0Das Buch von den in der Community bekannten Autoren Rob Conery, Scott Hanselman, Phil Haack und Scott Guthrie ist ein sehr guter Einstieg in die Entwicklung mit der MVC-Erweiterung für ASP.NET. In dem ersten Kapitel, dass im übrigen auch kostenlos verfügbar ist, wird das Grundkonzept anhand einer Beispielanwendung näher gebracht. In den folgenden Kapiteln wird dann auf die einzelnen Konzepte näher eingegangen.

Das Buch ist in englischer Sprache, aber durchaus gut verständlich und auch unterhaltsam geschrieben. Gelegentlich erfährt man unter der Überschrift “Product Team Aside” Hintergrundinformationen, was die Autoren sich beispielsweise bei der Benennung einzelner Klassen gedacht haben oder ähnliches. Zahlreiche Abbildungen und Codebeispiele, die man auch auf der Verlagswebsite herunterladen kann, runden das Paket sinnvoll ab. Vielleicht nicht unbedingt für absolute Neulinge auf dem Gebiet der Programmierung mit C# und ASP.NET geeignet, für alle anderen jedoch gut portioniertes und verdauliches Material.

Visual C# 2008

Visual CSharp 2008Ein Kompendium rund um die Programmierung mit C# 2008 inklusive Datenbanken, WPF, O/R-Mapping mit LINQ2SQL, Multithreading, Reflection und zahlreichen anderen Themen. Mit seinem Umfang von rund 1.287 Seiten deckt es beinahe alle relevanten Themen ab. Jedoch ist es explizit kein Buch für Einsteiger sondern für Programmierer die bereits mit anderen Sprachen gearbeitet haben oder ihre Kenntnisse in C# vertiefen wollen. So werden neben den Grundlagen der Sprache sowohl die Windows-Programmierung mit den klassischen Windows-Forms als auch der “modernen” WPF beschrieben, Auch die Grundprinzipien der Objektorientierung, die jeder .NET-Entwickler eigentlich aus dem “FF” beherrschen sollte, werden nochmals detailliert behandelt. Dem Buch liegt eine DVD mit einer 90-Tage-Testversion von Visual Studio 2008 Professional bei sowie eine CD mit allen Beispielen aus dem Buch für sowohl .NET 2.0 als auch .NET 3.5. Zusätzlich ist auf der CD ein Bonuskapitel “Grafikprogrammierung” enthalten.

Das Buch verwendet grundsätzlich den Syntax und Sprachwortschatz von .NET 3.5 aber weist ggf. auf Unterschiede zu .NET 2.0 hin und wie eine entsprechende Funktionalität damit ebenfalls zu erreichen wäre – sofern möglich. Leider sind einige Abschnitte oder Kapitel etwas umständlich geschrieben so dass man den einen oder anderen Absatz ein weiteres mal lesen muss um ihn zu verstehen. Als Nachschlagewerk mit guten Beispielen hat es bei mir dennoch einen festen Platz.

jQuery in Action

jQuery in ActionDas Buch gehört nicht im eigentlichen Sinne zu den .NET-Büchern, aber da jQuery inzwischen zumindest bei Microsoft ASP.NET MVC mitgeliefert und aktiv von Microsoft auch unterstützt wird, hat es denke ich seinen berechtigten Platz in dieser Blog-Parade. Nicht zuletzt auch deshalb, weil jQuery zu den am häufigsten eingesetzten Javascript-Frameworks zählt.

Jedoch muss ich zugeben, dass das Buch zur Zeit noch auf meinem Wunschzettel steht und es noch nicht komplett selbst gelesen habe. Allerdings wurde es mir von mehreren Community-Mitgliedern empfohlen und ich habe auch bereits zwei Kapitel überflogen. Es macht einen guten Eindruck und scheint sowohl die Grundlagen mit jQuery als auch erweiterte Funktionalitäten zu erklären. Wer also durch die Lektüre eines englischen Buches nicht abgeschreckt wird und sich mit dem beliebten Javascript-Framework auseinandersetzen will sollte dieses Buch auf jeden Fall mit in Betracht ziehen.


Es gibt sicherlich noch viele weitere interessante Bücher zu dem Thema. Leider habe ich im Moment einfach nicht soviel Zeit um mehr zu lesen und auch gibt es eine endlose Auswahl von Büchern bei denen man nicht weiß ob sie ihr Geld auch wert sind. Von daher hoffe ich anhand der Blog-Parade noch einige neue Schätze kennen zu lernen und vielleicht werde ich dann schon bald meine Privatbibliothek etwas aufstocken können.

DotNetKicks-DE Image

video2brain - Microsoft SharePoint 2007 Video-Training

03.09.2009 13:09:00 | Gregor Biswanger

Seit dem 20. August 2009 ist meine DVD zu SharePoint 2007 erhältlich. Die Schwerpunkte liegen bei der Entwicklung und Administration.

sharepoint_2007

 

Beschreibung

Mit SharePoint stellt Microsoft eine mächtige Informationsplattform für Unternehmen zur Verfügung. Dieses Video-Training hilft Ihnen dabei, SharePoint individuell auf Ihre Wünsche anzupassen und ist damit die ideale Arbeitsgrundlage für Administratoren und Entwickler. Gregor Biswanger zeigt Ihnen alle Schritte, die notwendig sind, um SharePoint erfolgreich in Ihrem Unternehmen einzurichten. Dazu gehört das Einrichten und Verwalten von Web-Anwendungen, Microsoft Office-Integrationen und die dazugehörige Dokumenten-Verwaltung. Sollten Ihre Wünsche einmal die Grenzen von SharePoint sprengen erklärt er, wie Sie eigene Web-Parts oder Web-Dienste programmieren und scheinbar Unmögliches möglich machen!

 

Kostenfreie Probevideos

Nach einer kurzen Registrierung, kann man einige Videos kostenfrei auf video2brain ansehen: http://www.video2brain.com/de/products-419-2.htm

 

Hier sofort erhältlich

  

Verlosung

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 02.11.2009. 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 der richtigen Lösung durch 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.

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

v2b_logo      aw-logo

Wissenswertes für Developer & IT-Profis: Der Countdown zu Windows 7 mit Oliver Scheer #theoliver

03.09.2009 11:55:00 | Steffen Ritter

Ab dem 3. September 2009 – also ab „T-49“ = 7x7 Tage vor der offiziellen Veröffentlichung – schreibt MSDN-Experte Oliver Scheer einen Countdown zu Windows 7 und berichtet täglich über die neuen Funktionen und Vorteile von Windows 7 speziell aus der Sicht eines Softwareentwicklers und IT-Profis. Consumer-Themen kommen ebenfalls nicht zu kurz, diese werden an den Wochenenden behandelt.

Klicken Sie hier, um zum Countdown zu Windows 7 zu gelangen.

Für Besitzer einer MSDN Subscription ist Windows 7 bereits seit 6. August 09 in der endgültigen Fassung als Subscriber Download verfügbar: http://msdn.microsoft.com/de-de/subscriptions. Microsoft betont damit erneut die Wichtigkeit von Entwicklern für Microsoft und bestätigt erneut die Strategie, Softwareentwicklern und IT-Profis frühzeitig mittels MSDN Subscriptions immer kostengünstig und komfortabel alle Werkzeuge und Plattformen zur Verfügung zu stellen, um optimal für die Entwicklung von Anwendungen für Windows und das Web ausgestattet zu sein.

T-49 - 7x7 – Windows 7 Countdown

03.09.2009 00:00:00 | Oliver Scheer

49_0

Sehr geehrte Damen und Herren, liebe Entwickler, liebe Anwender, liebe Windows-Fans,

am 22.10.2009 wird Windows 7 offiziell verfügbar sein. Dies ist für Microsoft ein ganz besonderes Ereignis, das wir Mitarbeiter der DPE (Developer Platform & Strategy Group der Microsoft Deutschland GmbH) auch gebührend zelebrieren wollen.

Bis zur Veröffentlichung von Windows 7 sind es ab heute exakt 7×7 Tage.

Der Countdown hat begonnen: T-49 bis Windows 7.

In den nächsten 49 Tagen (7 Wochen x 7 Tage bis Windows 7) werden wir hier, viel Nützliches rund um Windows 7 für Anwender und Entwickler präsentieren. Spaß soll es natürlich auch machen, daher werden wir die Artikel nicht nur mit viel technischer Expertise, sondern auch einer guten Portion Humor versehen.

Mehr

Machs gut, Auto - Goodbye my friend it’s hard to die[…]

02.09.2009 16:14:00 | Jan Schenk



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/09/02/machs-gut-auto-goodbye-my-friend-it-s-hard-to-die.aspx'; tweetmeme_source = 'jansche';

CIMG0628

 

Mein Auto hat mich am Montag im Stich gelassen. Einfach so. Getriebeschaden. Naja, ganz fair ist das auch nicht, schliesslich hatte sich das Getriebe schon eine Weile angekündigt, geklungen wie eine alte Straßenbahn. Und als dann auch noch ein Klappern wie Schrauben in einer alten Raviolidose dazu kam, war klar, dass es nicht ewig nur beim Klappern bleiben würde. Nur hatte ich mir gewünscht, dass er wenigstens noch ein halbes Jahr durchhält.

Als ich dann am Montag feststellen musste, dass sich “Gurki” doch schon früher von mir trennen wollte, war ich mehr als schnell in meiner Entscheidung, noch die Umweltprämie einstreichen zu wollen. Wäre mehr als dämlich von mir, die für ein kaputtes, wertloses Auto nicht zu beantragen. Nur musste dafür möglichst zeitnah ein Neuer her. Also Autohäuser am Montag abgeklappert, wer ein akzeptables Angebot für mich hätte. Bei dem Japaner meiner Wahl bin ich dann auch fündig geworden. Ein Auris, klein bisschen gebraucht, aber prämienfähig. Das wichtigste an der ganzen Sache.

Dann ging es Schlag auf Schlag, Leasingvertrag unterschrieben, Umweltprämie beantragt, altes Auto ausgeräumt, altes Auto abgeholt, und nun warte ich auf Freitag, da kommt dann der Neue. Ich freu mich schon.

Windows Cache Extension 1.0 für PHP - Beta

02.09.2009 15:48:27 | Jan Schenk



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/09/02/windows-cache-extension-1-0-f-r-php-beta.aspx'; tweetmeme_source = 'jansche';

Gestern hat das IIS-Team eine Betaversion ihrer Windows Cache Extension 1.0 für PHP der Öffentlichkeit zugänglich gemacht. Die Windows Cache Extension ist eine Erweiterung für PHP, die die Ausführgeschwindigkeit für PHP Anwendungen auf dem Windows Betriebssystem-Stack beschleunigt. Jede PHP Anwendung kann von der Funktionalität der Windows Cache Extension profitieren, ohne dass dafür Code umgeschrieben werden muss. Einzig die Aktivierung der Extension und das Laden durch die PHP Engine muss sichergestellt sein. Das funktioniert auf diese Art:

Installation über den Web Platform Installer.

Manuell:

Windows Cache Extension 1.0 for PHP 5.2 - Beta

Windows Cache Extension 1.0 for PHP 5.3 – Beta

Eine englischesprachige Anleitung zur manuellen Installation findet sich hier.

Vorteile:

  • PHP opcode cache - PHP is a script processing engine, which reads an input stream of data that contains text and/or PHP instructions and produces another stream of data, most commonly in the HTML format. This means that on a web server the PHP engine reads, parses, compiles and executes a PHP script each time that it is requested by a Web client. The reading, parsing and compilation operations put additional load on the web server's CPU and file system and thus affect the overall performance of a PHP web application. The PHP bytecode (opcode) cache is used to store the compiled script bytecode in shared memory so that it can be re-used by PHP engine for subsequent executions of the same script.
  • File cache - Even with the PHP bytecode cache enabled, the PHP engine has to accesses the script files on a file system. When PHP scripts are stored on a remote UNC file share, the file operations introduce a significant performance overhead. The Windows Cache Extension for PHP includes a file cache that is used to store the content of the PHP script files in shared memory, which reduces the amount of file system operations performed by PHP engine.
  • Relative file path cache - PHP scripts very often include or operate with files by using relative file paths. Every relative file path has to be converted to an absolute file path by the PHP engine. When a PHP application uses many PHP files and accesses them by relative paths, the operation of resolving relative paths to absolute paths may negatively impact the application's performance. The Windows Cache Extension for PHP provides a relative file path cache, which is used to store the mappings between relative and absolute file paths, thereby reducing the number of relative path resolutions that the PHP engine has to perform.
  • Voraussetzungen:

    - Verwendung mit der Non-thread-safe-Variante (die sowieso empfohlen wird) von PHP.

    - PHP via FastCGI.

    - VC9-Build in der 32-bit Variante.

    Weitere Informationen gibt es auf der IIS-Seite unter http://www.iis.net/extensions/WinCacheForPHP und http://learn.iis.net/page.aspx/678/using-windows-cache-extension-for-php/

    PHP Core Entwickler Pierre Joye im Interview - Teil 2 von 3

    02.09.2009 12:45:17 | Jan Schenk



    tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/09/02/php-core-entwickler-pierre-joye-im-interview-teil-2-von-3.aspx'; tweetmeme_source = 'jansche';

    Get Microsoft Silverlight

    Pierre Joye, PHP Core Developer und Team Leader der PHP on Windows Developer Division, ist heute mein Interviewpartner. Er erzählt uns in diesem Video, was es mit dem Windows-Build von PHP 5.3 auf sich hat, und wie dieser so extrem stabil und schnell geworden ist. Außerdem plaudert Pierre ein wenig aus den Nähkästchen der PHP Core Developer und erlaubt uns einen Blick in die Communitystruktur der PHP Gemeinde.
    Reinschauen lohnt sich, nicht nur für PHP Entwickler!
    Einen dritten Teil gibt es auch noch, der kommt am Freitag in eure Heimkinos, natürlich auf Channel 9.

    DataGrid mit Mausrad scrollen

    02.09.2009 11:55:00 | Stefan Lange

    Mit Silverlight 3 wird nun endlich das Mausrad unterstützt. Über das MouseWheel Event bzw. durch Überschreiben von OnMouseWheel kann eine Silverlight Anwendung auf das Drehen des Mausrads reagieren. Dies ist sehr viel einfacher als noch in Silverlight 2, wo die einzige Möglichkeit zur Nutzung des Mausrads in der Weiterleitung von Browserevents über Javascript in die Silverlight Anwendung bestand.

    Die Silverlight Standard Controls von Microsoft unterstützen jedoch weiterhin das Scrolling per Mausrad nicht. Dafür gibt es meines Erachtens keinen sinnvollen Grund, zumal Microsoft das Mausrad erfunden hat! Vermutlich ist diese Funktionalität dem engen Zeitplan von Silverlight 3 zum Opfer gefallen – man hatte wahrscheinlich keine Zeit mehr die schon in Silverlight 2 enthaltenen Controls zu überarbeiten. Es gibt zwar eine neue Klasse ScrollViewerExtensions, mit deren Hilfe man einen ScrollViewer elegant um MouseWheel Funktionalitäten erweitern kann, dass hilft einem aber nicht, wenn man einfach nur sein DataGrid mit dem Mausrad scrollen möchte.

    Da es schwierig ist, einen Kunden einerseits mit den Vorzügen von Silverlight zu begeistern und ihm andererseits zu erklären, das die DataGrids in seiner schönen neuen Silverlight Anwendung leider nicht mit dem Mausrad durchgeblättert werden können, hier ein einfacher Workaround.

    Der Trick besteht darin, das DataGrid über seine Automation Schnittstelle zum Scrollen zu bringen. Mit der Funktion OnCreateAutomationPeer holt man sich einen IScrollProvider und scrollt damit das DataGrid im MouseWheel Event. Da OnCreateAutomationPeer protected ist, muss eine eigene Klasse MouseWheelDataGrid von DataGrid abgeleitet werden, um die Funktion überhaupt aufzurufen zu können. Übrigens lässt sich in Silverlight auch über Reflection eine protected Funktion nicht aufrufen (was auch korrekt ist). Man muss daher von der Klasse DataGrid ableiten.

    Hier der Quellcode von MouseWheelDataGrid:

    namespace System.Windows.Controls
    {
      public enum ScrollMode
      {
        None, Small, Large
      }
    
      public class MouseWheelDataGrid : DataGrid
      {
        public ScrollMode ScrollMode { get; set; }
    
        protected override void OnMouseWheel(MouseWheelEventArgs e)
        {
          if (ScrollMode == ScrollMode.None)
            base.OnMouseWheel(e);
          else
          {
            e.Handled = true;
            bool scrollUp = e.Delta < 0;
            ((IScrollProvider)OnCreateAutomationPeer()).Scroll(ScrollAmount.NoAmount, ScrollMode == ScrollMode.Small ?
              (scrollUp ? ScrollAmount.SmallIncrement : ScrollAmount.SmallDecrement) :
              (scrollUp ? ScrollAmount.LargeIncrement : ScrollAmount.LargeDecrement));
          }
        }
      }
    }

    How-To - LINQ-to-NHibernate

    02.09.2009 11:09:00 | Gregor Biswanger

    Normal 0 21 false false false DE X-NONE X-NONE Die beiden O/R-Mapper von Microsoft hatten gemeinsam etwas sehr attraktives an sich und das war die Unterstützung von LINQ. NHibernate selbst verfügt über eigene Abfragesprachen. Dennoch zeigen sich diese Sprachen etwas komplexer, überdies kann mittels LINQ eine SQL ähnliche Abfrage und das auch noch Typsicher, durchgeführt werden. Doch gibt es derzeit endlich die erste fertige Version von LINQ-to-NHibernate. Somit wird NHibernate wieder ein großes Stück mächtiger.

    Der LINQ Provider dafür kann hier Heruntergeladen werden: http://sourceforge.net/projects/nhibernate/files/NHibernate/2.1.0.GA/NHibernate.Linq-1.0.0.GA-bin.zip/download

    Beispiel

    Der Provider selbst ist sehr schlank und besteht nur aus einer Library „NHibernate.Linq.dll“. Die Library wird dann der Datenschicht unter den Referenzen hinzugefügt. Anschließend muss in der Repository-Klasse die beiden Usings „System.Linq“ und „NHibernate.Linq“ deklariert werden.

    Anschließend kann eine normale LINQ Anfrage begonnen werden. Dem session-Objekt steht jetzt eine neue Methode mit „LINQ“ zur Verfügung (Extended Method). Der LINQ-Methode muss man nun den Typen des Entitys mitgeben.

    Abb.1.1. – LINQ bei NHibernate verwenden.

    Fazit

    Die LINQ Funktionalität war schon ein lang vermisstes Feature für NHibernate Liebhaber. Die erste Version zeigt sich sehr Stabil. Leider müssen mache Konvertierungen wie zum Beispiel „AsQueryable“ mit Umwegen durch andere Methoden wie „ToList“ durchgeführt werden. Das sollte normal direkt konvertierbar sein. Hoffentlich wird das bei den kommenden Versionen des Providers verbessert.

    Blog-Parade: Die 3 beliebtesten Fachbücher aus dem .NET-Umfeld

    01.09.2009 20:32:00 | Wolfgang Kluge

    Hallo zusammen,

    mir hat die Idee der Blog-Parade sehr gut gefallen. Und nach kurzer Überlegung ist mir sogar eine sinnvolle Verwendung eingefallen... Ich suche die beliebtesten Fachbücher, die irgendwas mit Programmierung im .NET-Umfeld zu tun haben.

    Wer teilnehmen möchte, schreibt einen Beitrag mit seinen 3 beliebtesten Büchern (inklusiver kurzer Begründung) und mit Trackback auf diesen Artikel in seinem Blog. Sollte die Trackback-Funktion mal nicht funktionieren, so schreibt bitte einen kleinen Kommentar mit entsprechender URL zu eurem Artikel. Am Ende der Blog-Parade werden die Teilnehmer aus den Kommentaren ermittelt. Bitte prüft also, ob der Trackback funktioniert hat. Es dürfen gerne auch mehr als 3 Bücher beschrieben werden.

    Alle Artikelautoren nehmen einmal (ungeachtet der Anzahl der Beiträge oder der genannten Bücher) an der Verlosung folgender Preise teil:

    1. Ein Amazon, buecher.de oder BOL - Gutschein in Höhe von € 40
    2. Ein Amazon, buecher.de, oder BOL - Gutschein in Höhe von € 20
    3. Das Buch Microsoft ASP.NET AJAX Programmierung von Dino Esposito aus dem Microsoft Press Verlag (wie unten beschrieben)

    Und bevor es zu irgendwelchen Fragen kommt (Teilnahmebedingungen)

    • Teilnahmeberechtigt ist jeder, der einen Artikel in einem Blog veröffentlichen kann.
      Es dürfen gerne mehrere Artikel eingereicht werden, dies erhöht die Gewinnchancen für den Teilnehmer jedoch nicht.
    • Die 3 Gewinner werden nach Abschluß der Blog-Parade per Los ermittelt und daraufhin per Email benachrichtig.
      Im jeweiligen Blog muss daher ein Kontaktformular oder eine Email-Adresse zu finden sein!
    • Die Gewinner werden nach Rücksprache in diesem Blog bekannt gegeben (mit Vor- und Nachname sowie Link auf das jeweilige Blog)
    • Die Zustellung des Gewinns erfolgt per Email oder im Falle des Buches per Post ohne Versandversicherung. Eine Ausbezahlung in Bar ist nicht möglich.
    • Der Rechtsweg ist ausgeschlossen.
    • Stichtag ist der 30.09.2009 (Teilnahmeschluss). Autoren der Beiträge, die später (also genau um oder nach dem 01.10.2009 00:00 Uhr) in der Liste der Kommentare bekannt gegeben wurden, nehmen nicht an der Verlosung teil.

    Am Ende der Blog-Parade wird die Liste aller Bücher mit (exemplarischen) Links zu den jeweiligen Beiträgen veröffentlicht. Bin gespannt, welche Buch-Perlen diese Blog-Parade zum Vorschein bringt...

    Was ist das für ein Buch auf dem 3. Platz

    Dino Esposito: Microsoft ASP.NET AJAX-Programmierung - Eine Einführung in die Programmierung interaktiver Webanwendungen

    Verlost wird neben den Gutscheinen das für Grundlagen durchaus immer noch sehr gut geeignete Buch "Microsoft ASP.NET AJAX Programmierung - Eine Einführung in die Programmierung schneller und interaktiver Webanwendungen" von Dino Esposito aus dem Microsoft Press Verlag. Ich hab heute beim entstauben entdeckt, dass ich dieses Buch gleich 2x besitze.

    Es weißt leichte Gebrauchsspuren auf (wobei dieses Exemplar nicht gelesen wurde) und hat mir sehr gute Dienste geleistet.

     

    LINQ: Any, anyone? Range oder Repeat?

    01.09.2009 17:10:00 | Peter Bucher

    Mit LINQ sind unzählige Erweiterungsmethoden für IEnumerable<T> hinzugekommen, die auch ausserhalb von LINQ Abfragen sehr nützlich sein können.

    Damit ich mir das merke und ihr evt. noch was neues kennenlernt, möchte ich zwei kurz vorstellen:

    Enumerable.Any()

    Kommt euch Code wie der folgende bekannt vor?

    if(addresses.Count > 0)
    {
        // …
    }

    oder

    if(addresses.Count == 0)
    {
        // …
    }

    Das kann jetzt folgendermassen umgeschrieben werden:

    if(addresses.Any())
    {
        // …
    }

    und

    if(!addresses.Any())
    {
        // …
    }

    Die Implementation der Any()-Methode holt sich den Enumerator der Auflistung und versucht den ersten Eintrag zu holen, wenn das klappt gibt sie true zurück, ansonsten false.

    Wenn Any() true zurückliefert, heisst das also, es ist mindestens ein Element vorhanden.

    PS: Darüber hinaus gibt es auch noch eine zweite Überladung, der man Funktion einspeisen kann (Anonyme Methode, Lambda Ausdruck, …). Diese bestimmt dann, ob es mindestens ein Element hat, bei dem die Funktion true zurückliefert.
    Die Funktion nimmt ein Element vom Typ TSource entgegen und gibt einen bool zurück.

    Enumerable.Range() und Enumerable.Repeat()

    Schon mal Testdaten benötigt, oder eine Liste von Zahlen die dann durcheinandergewürfelt werden?
    Das schreibt man im einfachsten Fall dann in etwa so:

    List<int> numbers = new List<int>();
    for(int i=1; i <= 100; i++)
    {
        numbers.Add(i);
    }
    // …

    Mit Enumerable.Range() geht das viel einfacher:



    var numbers = Enumerable.Range(1, 100);

    // …

    Mit LINQ lässt sich ganz einfach eine gemischte Liste von Zahlen erstellen, zwei Zeilen braucht es dazu:

    Random random = new Random();
    var numbers = Enumerable.Range(1, 100).OrderBy<int, int>(random.Next);

    Hier noch ein kleiner Hinweis: Um eine gleichmässige Verteilung einer solchen Liste zu erhalten, sollte ein Algorithmus wie bspw. hier benutzt werden.

    An Enumerable.Repeat() hingegen kann im ersten Parameter eine Instanz übergeben werden, oder auch ein einfacher Wertetyp wie bspw. eine Zahl und eine Anzahl, wie häufig dieser Wert wiederholt werden soll.
    Schlussendlich bekommt man eine Auflistung zurück, das wars.

    PHP Core Entwickler Pierre Joye im Interview - Teil 1 von 3

    01.09.2009 15:31:17 | Jan Schenk



    tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/09/01/php-core-entwickler-pierre-joye-im-interview-teil-1-von-3.aspx'; tweetmeme_source = 'jansche';
    Get Microsoft Silverlight

    Letzte Woche hatte ich die Ehre, mich mit Pierre Joye zu treffen, seines Zeichens Team Leader unter den PHP Core Developern der Windows Division. Pierre ist für die Stabilität und Performance der Windows-Builds verantwortlich, und hat mit PHP 5.3 die beste Windows-Unterstützung geschaffen, die es jemals gab. Nicht zuletzt dank der Verwendung eines neueren Compilers, der den 10 Jahre alten VC6-Compiler abgelöst hat. In diesem Video interviewe ich Pierre zu seiner Person, seinem Privatleben und seinen Hobbies. Wer hätte gedacht, dass ein  PHP Core Developer so offen gegenüber Microsoft sein kann? Nach der Devise "Make Web, Not War!" ist Interoperabilität und Zusammenarbeit der Schlüssel für bessere Technologien. Aber seht euch das Video einfach an und freut euch auf den zweiten Teil, in dem es um PHP 5.3 gehen wird!

    Alles var – oder nicht?

    01.09.2009 08:37:00 | Peter Bucher

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

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

    Alles var – oder nicht?

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

    Nein, werter Leser, das ist kein Rechtschreibefehler, das ist eine wirklich vwa(h)re Geschichte.
    Scherz beiseite, los gehts… ;-)

    Einleitung

    Mit C# 3.0 kam ein neues Schlüsselwort names var hinzu, nur was hat es damit auf sich?

    Es handelt sich dabei weder um ein spät gebundenen noch um einen Variant Typ, wie man ihn bspw. von Scriptsprachen her kennt, sondern um ein Feature das erst die Nutzung von anonymen Typen möglich macht.

    Einfach gesagt heisst das, dass der Compiler den Typ auf der linken Seite vom Ausdruck auf der rechten Seite ableitet.
    Also sind die Variablen immer stark typisiert und zwar zur Kompilezeit, nicht erst zur Laufzeit.

    Was ist der Sinn des ganzen, bzw. wieso wurde dieses Feature integriert?

    Im Zuge der Entwicklung von LINQ wurden die anonymen Typen eingefügt um eine Projektion der Daten auf irgendeine Objektstruktur zu ermöglichen, ohne dazu immer wieder neue Datenhaltungsklassen erstellen zu müssen.

    Damit ist dann bspw. sowas möglich:

    List<string> data = new List<string>
    {
      "Patrick:24",
      "Stefan:16",
      "Jörg:22"
    };

    var persons = from dataEntry in data
                  let splitted = dataEntry.Split(new[] { ':' })
                  select new
                  {
                    Name = splitted[0],
                    Age = int.Parse(splitted[1])
                  };

    foreach (var person in persons)
    {
      Console.WriteLine("Name: {0}, Age: {1}", person.Name, person.Age);
    }

    Dabei ist der Typ von persons IEnumerable<T> wobei T in Visual Studio als "a” für Anonymous gekennzeichnet wird.
    Und dementsprechend ist jeder Eintrag in dieser durchlaufbaren Menge ein anonymer Typ, der im Hintergrund vom Kompiler generiert und bereitgestellt wird.

    Die Eigenschaft “Name” ist – wer hätte es gedacht – vom Typ string und “Age” vom Datentyp int.

    Wo kann var überall eingesetzt werden?

    Das Schlüsselwort kann nur für lokale Variablen genutzt werden, so sind automatisch auch anonyme Typen nur in diesem Bereich nutzbar. D.h. es können auch keine anonymen Typen über Methodengrenzen hinaus übergeben werden.

    Wo macht es Sinn var einzusetzen und wann ist ein var mehr zuviel?

    Das ist eine spannende Frage und eigentlich der Kernpunkt dieses Streitgespräches.
    Hier einfach mal ein paar Beispiele:

    private void SetProperties()
    {
      var collectionMapping = this.CollectionMapping;

      if(collectionMapping.Count() > 0)
      {
        collectionMapping.Clear();
      }
    }

    private void SetProperties()
    {
      ICollectionMapping collectionMapping = this.CollectionMapping;

      if(collectionMapping.Count() > 0)
      {
        collectionMapping.Clear();
      }
    }

    public static void RegisterType()
    {
        var objectToXElement = BuildObjectToXElementFunc<TEntity>();
        var xElementToObject = BuildXElementToObjectFunc<TEntity>();

        RegisterType(objectToXElement, xElementToObject);
    }

    public static void RegisterType()
    {
        Func<TEntity, XElement> objectToXElement = BuildObjectToXElementFunc<TEntity>();
        Func<XElement, TEntity> xElementToObject = BuildXElementToObjectFunc<TEntity>();

        RegisterType(objectToXElement, xElementToObject);
    }

    oder sowas:

    var wtf = GetPattern();

    vs

    Pattern pattern = GetPattern();

    In der ersten Methode wird var benutzt und in der folgenden dann nicht mehr.
    Ich habe die Beispiele extra so gewählt, denn wenn in diesen Methoden var benutzt wird, sieht man auf den ersten Blick (ohne die Maus zu benutzen, oder einen verrenkten Shortcut) nicht, um was für einen Typen es sich hier handelt.

    Und das ist natürlich ein sehr wichtiger Aspekt.
    Denn was nützt mir das weniger schreiben und weniger Code, wenn ich beim lesen – was übrigens vom Zeitaufwand deutlich mehr ist als das Schreiben – nicht mehr auf den ersten Blick erkennen kann, was für Typen das sind.

    Man sollte das Schlüsselwort im Regelfall wirklich nur einsetzen um die anonymen Typen benutzen zu können.

    Ausnahme wenn es sich um eine lange Typdefinition handelt _und_ initialisiert wird

    Ich für meinen Teil halte es so, das ich es eben dann benutze und zusätzlich auch noch in Fällen bei denen die Initialisierung (nicht Zuweisung) rechts daneben steht.

    Und das auch nur wenn es sich um eine lange und komplexere Typbezeichnung handelt, das sind dann meistens solche mit generischem Typparameter, Beispiel:

    public void Foo()
    {
        Dictionary<string, Person> persons = new Dictionary<string, Person> {…}
    }

    public void Foo()
    {
        var persons = new Dictionary<string, Person> {…}
    }

    Durch den sprechenden Namen und dadurch das die Initialisierung der Variable und so auch die implizite Zuweisung des Types auf der rechten ist, kann das auch gut gelesen werden und ist praktikabel finde ich.

    Diese Anwendung hilft auch Redundanzen zu vermeiden. Wenn man bspw. die Initialisierung änderet ist der Typ auch automatisch angepasst.
    Das ist ein netter Nebeneffekt, kann aber auch böse enden, wenn man sich dessen nicht bewusst ist, das Interface gleich ist, aber sich die Methoden / Eigenschaften die später aufgerufen werden, anders verhalten.

    Ausnahme wenn es um LINQ Abfragen handelt

    Bei LINQ Abfragen benötigt es kein var, wenn keine anonymen Typen genutzt werden.
    Allerdings halte ich es auch bei LINQ-Abfragen so, dass ich meistens var benutze.
    Denn mit guten Namen und im kleinen Kontext gehalten ist klar und verständlich was rüber kommt. Grösster Vorteil hierbei ist auch die automatische Anpassung des Types.

    Dies kommt in diesem Fall sehr zum Vorschein, denn durch Projektion kann sich der Rückgabetyp schnell ändern, obwohl die Eigenschaften bspw. gleich bleiben.

    public void Foo()
    {
        IEnumerable<Person> persons = from person in list.Persons where person.Age > 20 select person;
    }

    public void Foo()
    {
        var persons = from person in list.Persons where person.Age > 20 select person;
    }

    Das wars auch schon mit den Ausnahmen. Alles andere ist in meinen Augen nicht mehr lesbar und auch nicht gerechtfertigt.
    Ich finde es schon ein wenig beängstigend, wenn ich im Web (Auch von Microsoft) Beispiele sehen, die Zahlen und Zeichenfolgen in 20, 30 Zeilen nur mit var arbeiten.
    Wenn die Variablennamen dann noch schlecht gewählt, gute Nacht.

    Was denkt ihr über die Sache und vorallem über meine genannten Ausnahmen?

    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