.
Anmeldung | Registrieren | Hilfe

.NET-Blogs Archiv Juni 2009

Windows 7 für Developer – Feedback Wanted

30.06.2009 18:34:17 | Oliver Scheer

Mein Kollege Achim braucht Feedback –> Antworten bitte hier hin.

“Hallo liebe Entwickler,

wir (Developer-Marketing-Team bei Microsoft) überlegen derzeit, möglicherweise einen Service zum aktuellen Windows 7 RC speziell für Software-Entwickler in Deutschland anzubieten. Wir würden Euch hiermit gern um Eure Meinung bitten, um zu sehen, wie wertvoll ein solcher Service für Euch wäre. Ob es implementiert wird hängt auch (aber nicht nur) vom Feedback ab. :)

Wäre super, wenn Ihr Euch kurz die folgende Beschreibung durchlesen und uns unkompliziert/kurz/unverblümt/direkt Euer Feedback zu dieser Idee geben würdet. Vielen Dank im voraus!!

Beschreibung: 

Du ärgerst Dich auch immer, dass bei einer OS-Neuinstallation alle Deine Lieblingstools erneut installiert werden müssen? Was war noch mal die URL??

Die Grundidee wäre also, Euch als Entwicklern zu helfen, Windows 7 (RC) auf Eurer eigenen Maschine zu testen und den Setup zu erleichtern, so wie ihn eben ein Software-Entwickler benötigt. Dazu könnte man sich den W7-RC installieren und dann über ein Interface (online oder via CD/DVD) die wichtigsten Developer-Tools aussuchen, die auch direkt installiert werden sollen. Dafür würde Microsoft eine Auswahlliste von Tools präsentieren, die im Anschluss je nach Selektion installiert werden würden. Jeder Software-Entwickler benötigt z.B. eine ZIP-Applikation, einen Editor oder ein einfaches Grafikprogramm. Source könnten beispielsweise die „Hanseltools“ sein, die Ergebnisse der MSDN Blogparade oder auch andere Listen. Das Prinzip des Installers wäre dann ähnlich zum Microsoft Web Platform Installer. Eventuell wäre eine Community gepflegte Liste (Wiki o.ä.) angedacht.

Was meint Ihr dazu? – Gute Idee? Schlechte Idee?  Würdest Du so einen Service nutzen? Würdest Du Deinen Freunden und Kollegen davon erzählen? Was würdest Du anders machen? Worauf sollten wir achten, wenn wir es denn implementieren sollten?
Danke!   Achim”

Replace von CHAR(0) in SQL Server varchar-Spalte

30.06.2009 17:46:00 | Wolfgang Kluge

Heute kam es in einem meiner Projekt zu folgendem Fehler

Msg 6841, Level 16, State 1, Line 1
FOR XML konnte die Daten für den 'Tabelle'-Knoten nicht serialisieren, weil ein in XML unzulässiges Zeichen (0x0000) enthalten ist. Um diese Daten mithilfe von FOR XML abzurufen, konvertieren Sie sie in den Datentyp 'binary', 'varbinary' oder 'image', und verwenden Sie die BINARY BASE64-Direktive.

Nach kurzem Suchen bemerkte ich dann, dass nicht die Ausgabe mittels FOR XML fehlerhaft war, sondern in einzelnen Feldern einer Tabelle CHAR(0)-Zeichen enthalten waren, die da nicht hingehörten. Die Tabelle wird von anderer Stelle gefüllt und eigentlich wird dabei der entsprechende Text abgeschnitten, dieses Sonderzeichens in dem Fall wohl aber nicht mehr. Nachdem die Befüllung geändert wurde, mussten die bereits geschriebenen CHAR(0)-Einträge noch geändert werden, doch dass stellte sich als schwerer heraus als zuerst angenommen. Sicher war, dass die Zeichen nur am Ende eines Textes vorkamen. Zum Testen gab es folgende temporäre Tabelle

DECLARE @test table(
    Name varchar(30) NULL COLLATE Latin1_General_CI_AS
)
INSERT INTO @test (Name)
           SELECT 'Hallo Welt 1' + CHAR(0) + CHAR(0) + CHAR(0) + CHAR(0)
 UNION ALL SELECT 'Hallo Welt 2' + CHAR(0)
 UNION ALL SELECT 'Hallo Welt 3'
 UNION ALL SELECT ''
 UNION ALL SELECT CHAR(0)
 UNION ALL SELECT CHAR(0) + CHAR(0)
 UNION ALL SELECT NULL

Das Problem sollte schnell gelöst werden können.

UPDATE  @test
SET     Name = SUBSTRING(Name, 1, CHARINDEX(CHAR(0), Name) - 1)
WHERE   Name LIKE '%' + CHAR(0) + '%'

Sieht einfach aus, macht - zumindest theoretisch - genau dass, was ich will, funktioniert aber nicht :(

Führt man die Abfrage aus, werden nur 2 Datensätze angepasst - und das kann ja gar nicht sein, es werden ja definitiv 4 mit CHAR(0) gefüllt. Die WHERE-Klausel muss also fehlerhaft sein. Ich dachte mir, dass LIKE eventuell so seine Probleme mit CHAR(0) hat und stellte die Abfrage um.

UPDATE  @test
SET     Name = SUBSTRING(Name, 1, CHARINDEX(CHAR(0), Name) - 1)
WHERE   CHARINDEX(CHAR(0), Name) > 0

Doch auch diese Abfrage führte zur Änderung von lediglich zwei Datensätze - um genau zu sein, sind es die Datensätze, bei denen CHAR(0) an erster Stelle steht. Folglich muss es aber so sein, dass auch SUBSTRING nicht funktionieren kann, selbst wenn die WHERE-Klausel korrekt wäre. Nun - so dachte ich - dann ersetze ich eben alle CHAR(0) durch Leerzeichen und schneide in einem zweiten Schritt diese dann mit TRIMLEFT ab.

Doch auch das funktioniert einfach nicht. REPLACE findet nur CHAR(0) in den beiden Zeilen, die auch mit CHAR(0) anfangen. Beim Ersetzen wird aber nur das erste davon ersetzt, der Rest wird abgeschnitten. Nach

UPDATE  @test
SET     Name = REPLACE(Name, CHAR(0), "X")

wird aus CHAR(0) ebenso 'X' wie auch aus CHAR(0) + CHAR(0)... Hier wird ein CHAR(0) offensichtlich dazu verwendet, den Text als beendet zu kennzeichnen.

Warum es so ist wie es ist kann ich leider immer noch nicht sagen. Wenn man aber als COLLATION statt Latin1_General_CI_AS eine SQL-Server interne Sortierung wie z.B. SQL_Latin1_General_CP1_CI_AS verwendet (grob gilt, dass alle Sortiernamen mit dem Prefix "SQL_" SQL-Sortierungen und alle anderen Windows-Sortierungen sind), dann funktioniert alle bisher beschriebenen Abfragen. Wenn man diese aber nicht unbedingt in der Tabelle direkt Umstellen kann oder will, geht es auch "inline". So liefert z.B.

UPDATE  @test
SET     Name = REPLACE(Name COLLATE SQL_Latin1_General_CP1_CI_AS, CHAR(0), "X")

ebenso das zuvor gewünschte Zwischenergebnis wie

UPDATE  @test
SET     Name = SUBSTRING(Name, 1, CHARINDEX(CHAR(0), Name COLLATE SQL_Latin1_General_CP1_CI_AS) - 1)
WHERE   Name COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%' + CHAR(0) + '%'

das eigentlich gewünschte Endergebnis... Man darf es nur an keiner Stelle vergessen, bei der nach Sonderzeichen gesucht wird. Im ersten Parameter von SUBSTRING ist es dagegen einfach nicht notwendig.

Discuss & Discover

30.06.2009 12:41:00 | Lori Grosland

image Microsoft wird sich mit einer eigenen Konferenz am Systems-Nachfolger "discuss & discover" beteiligen. Auf der am 20. bis 22. Oktober in München stattfindenden Veranstaltung wird Microsoft dabei erstmals Produkte wie Windows 7 und Microsoft Office 2010 der breiten Öffentlichkeit in Deutschland präsentieren. Im Ausstellungsbereich wird Microsoft zudem gemeinsam mit 20 Partnern neue Server-Produkte sowie Lösungen zu Security, Green-IT, Cloud Computing und der neuen Welt des Arbeitens vorstellen.

http://discuss-discover.com/2009/05/29/microsoft-nutzt-discuss-discover-fur-eigene-konferenz/

The History of Microsoft auf Channel 9

30.06.2009 11:46:00 | Lori Grosland

image Es gibt eine sehr interessante Video-Serie auf Channel 9, dass die Geschichte von dem Software-Gigant Microsoft zeigt. Die Serie heißt The History of Microsoft und sie benutzen selten gezeigtes Filmmaterial und nie vorher gesehene Fotos, um die Microsoft-Gesichte jährlich zu detaillieren. Sie beginnen mit dem Jahr 1975, als The History of Microsoft angefangen hat, wenn das ALTAIR 8800 auf der Titelseite von Popular Electronics erscheinen hat und hat zwei junge Männer – Bill Gates und Paul Allen – inspiriert, um BASIC-Sprache-Software dafür zu entwickeln. Jede Woche gibt es eine neue Episode.

Check it out auf Channel 9!    http://channel9.msdn.com/shows/History/

Discuss & Discover

30.06.2009 11:41:00 | Lori Grosland

image Microsoft wird sich mit einer eigenen Konferenz am Systems-Nachfolger "discuss & discover" beteiligen. Auf der am 20. bis 22. Oktober in München stattfindenden Veranstaltung wird Microsoft dabei erstmals Produkte wie Windows 7 und Microsoft Office 2010 der breiten Öffentlichkeit in Deutschland präsentieren. Im Ausstellungsbereich wird Microsoft zudem gemeinsam mit 20 Partnern neue Server-Produkte sowie Lösungen zu Security, Green-IT, Cloud Computing und der neuen Welt des Arbeitens vorstellen.

http://discuss-discover.com/2009/05/29/microsoft-nutzt-discuss-discover-fur-eigene-konferenz/

Wenig Zeit wegen dem MCPD

30.06.2009 11:35:58 | Thorsten Hans

Leider komme ich auch wohl in der nächsten Woche nicht wirklich zum bloggen, was damit zusammenhängt, dass ich jede freie Minute damit verbringe, die zweite MCPD Zertifizierung vorzubereiten.

 

Da ich die Prüfungsgebühr von 180 Euro selbst bezahlen muss, will ich diese natürlich nicht verhauen…

 

Also Kopf runter und lesen, lernen, coden….

 

Technorati-Tags: ,,
DotNetKicks-DE Image

The History of Microsoft auf Channel 9

30.06.2009 10:46:00 | Lori Grosland

image Es gibt eine sehr interessante Video-Serie auf Channel 9, dass die Geschichte von dem Software-Gigant Microsoft zeigt. Die Serie heißt The History of Microsoft und sie benutzen selten gezeigtes Filmmaterial und nie vorher gesehene Fotos, um die Microsoft-Gesichte jährlich zu detaillieren. Sie beginnen mit dem Jahr 1975, als The History of Microsoft angefangen hat, wenn das ALTAIR 8800 auf der Titelseite von Popular Electronics erscheinen hat und hat zwei junge Männer – Bill Gates und Paul Allen – inspiriert, um BASIC-Sprache-Software dafür zu entwickeln. Jede Woche gibt es eine neue Episode.

Check it out auf Channel 9!    http://channel9.msdn.com/shows/History/

Klassen die IComparable(T) implementieren und null, die Lösung

29.06.2009 20:12:13 | Klaus Bock

Dank des Feedbacks in den beiden vorherigen Artikeln, und im speziellen die Kommentare von winSharp93 im vorangegangenen Beitrag, habe ich nun endlich eine saubere Lösung gefunden. Manchmal muss man halt mit der Nase darauf gestoßen werden. Object.ReferenceEquals ist der perfekte Weg um die Instanzen zweier Objekte zu vergleichen; sagt ja auch der Name der Methode.

Der Fehler den ich von Anfang an beging, war schlicht und einfach das Vergessen der Instanz Prüfung, nach dem ich die Equals-Methoden sowie die Operatoren == und != überschrieben hatte. Man kann nun mal nicht den Inhalt zweier Klassen vergleichen, wenn eine oder beide einen null-Verweis besitzen. Also muss in der Methode Equals(T other) als erstes eine Prüfung gegen null des other-Parameters her. Sollte hier true zurückgegeben werden, wird die aktuelle Instanz, also this, ebenfalls gegen null geprüft. Es könnten ja zwei null-Instanzen des Typs miteinander verglichen werden, was durchaus legitim ist. In diesem Fall muss die Methode Equals true zurück geben, da null == null nun mal true ergibt. Als nächstes wird noch einmal die aktuelle Instanz separat gegen null geprüft, denn sie könnte null sein und der other-Parameter eine erzeugte Instanz enthalten. Als letzten werden dann noch die Inhalte der Eigenschaften im einzelnen verglichen.

namespace ClassTests
{
    using System;

    public sealed class Test : IComparable<Test>
    {
        public int Number
        { get; set; }

        public string Text
        { get; set; }

        public Test()
        {
        }

        public int CompareTo(Test other)
        {
            return this.Number.CompareTo(other.Number);
        }

        public static bool operator ==(Test t1, Test t2)
        {
            return object.Equals(t1, t2);
        }

        public static bool operator !=(Test t1, Test t2)
        {
            return !object.Equals(t1, t2);
        }

        public static bool operator >(Test t1, Test t2)
        {
            return (t1.CompareTo(t2) > 0);
        }

        public static bool operator <(Test t1, Test t2)
        {
            return (t1.CompareTo(t2) < 0);
        }

        public override bool Equals(object obj)
        {
            return this.Equals(obj as Test);
        }

        public bool Equals(Test other)
        {
            if (object.ReferenceEquals(other, null))
            {
                if (object.ReferenceEquals(this, null))
                {
                    return true;
                }

                return false;
            }

            if (object.ReferenceEquals(this, null))
            {
                return false;
            }

            if (this.Number.CompareTo(other.Number) != 0)
            {
                return false;
            }

            if (string.Compare(this.Text, other.Text, StringComparison.Ordinal) != 0)
            {
                return false;
            }

            return true;
        }
    }
}

Mit dieser Implementierung ist das Verhalten nun endlich so, wie es von Anfang an sein sollte; Instanz Prüfung, Inhaltsprüfung und Größenvergleich.

Ich möchte mich hier auch noch einmal bei allen Kommentierenden, besonders bei winSharp93, bedanken. Ohne euch würde ich wahrscheinlich noch immer grübeln.

Technorati-Tags: | | |

Blog-Parade: Ergebnisse und Gewinner!

29.06.2009 18:49:17 | Peter Kirchner

455x97_BlogParade_anim

Die erste MSDN-Blog-Parade war dank der Entwickler-Community ein voller Erfolg! Vielen Dank an alle Teilnehmer!

Wie versprochen, hier eine Auflistung der meist genannten Tools, die für die Community nicht wegdenkbar wären.

Für jedes Tool habe ich beispielhaft immer einen Teilnehmer-Beitrag, den es dazu gab, verlinkt. Eine vollständige Liste aller Beiträge finden Sie hier im Kommentarabschnitt.

Top 10 der Nennungen

In Klammern dahinter, wie oft das Tool genannt wurde. Hierbei ist zu anzumerken, dass Visual Studio häufig schon als Grundausstattung bezeichnet wurde und gar nicht erst mit aufgezählt wurde.

Plätze 11 – 75

Gewinner!

Die glücklichen drei Gewinner einer Xbox 360 Elite inkl. zwei Spielen wurde von uns bereits informiert. Nochmals herzliche Glückwünsche an:

1. Rene M.

2. Jendrik I.

3. Werner M.

Geht’s weiter?

Die Beteiligung war wirklich toll. Daher wird es dieses Jahr auch noch eine zweite Blog-Parade geben. Wer also dieses Mal kein Glück hatte, kann und sollte es beim nächsten Mal noch einmal versuchen. Wo erfahren Sie davon? Natürlich auch in diesem Blog!

Fehler 401.1 mit Windows Authentifizierung auf IIS7 unter Windows 7

29.06.2009 17:12:00 | Alexander Zeitler

Ich wollte unter Windows 7 eine Website mit Windows Authentifizierung testen.

Im Normalfall genügt es, Windows Authentication in “Programs and Features” / “Windows Features” zu aktivieren

WindowsAuth in Windows Features aktivieren

und dann im IIS Manager zu aktivieren:

Windows Auth in IIS Manager Enabled

Beim Aufruf der Seite erhielt ich allerdings zu meiner Verwunderung ein Popup zur Eingabe der Userdaten:

Windows Security

Nachdem ich die Anmeldedaten dreimal eingegeben hatte, erhielt ich folgenden Fehler:

Error401.1

Der Grund hierfür ist, dass ich der Website einen eigenen Hostheader vergeben habe.

Das führt dazu, dass der Loopback Check, der mit Windows XP SP2 eingeführt wurde (und offenbar auch in Windows 7 verwendet wird), fehlschlägt und die o.g. Fehlermeldung mit dem Error Code 0xc000006d produziert.

Das Verhalten und die Abhilfe sind in KB896861 beschrieben.

Das IIS 7 SEO Toolkit und Live-Seiten

29.06.2009 15:50:00 | Wolfgang Kluge

Die "Site Analysis" des IIS Search Engine Optimization Toolkits kann gut verwendet werden, um allgemein Fehler auf der eigenen Seite zu finden. Wenn man denn will kann man damit die Seite recht einfach "sauber" (z.B. von ungültigen Links) halten oder Fehler im HTML-Code entdecken. Die Sache hat nur einen Haken - das Toolkit läuft nur auf dem IIS 7. Wenn man nunmal Live aber wesentlich mehr Daten vorhält als lokal, dann (so mein erster Eindruck) muss auch das Toolkit Live installiert werden um die Seite vollständig testen zu können. Mal abgesehen davon, dass es nicht stimmt *g*, könnte auf dem Server aber auch IIS 6 oder Apache laufen oder man hat einfach überhaupt keinen administrativen Zugriff auf den Rechner.

Nun gibt es die Möglichkeit, die live-Seite lokal nachzubilden. Doch hat das wiederum einen weiteren Haken - lokal könnten komplett andere Einstellungen vorzufinden sein, eventuell fehlen weitere Server im Verbund, auf die man lokal aber auch gar nicht mehr zugreifen kann/darf. Und zudem müssten/sollten alle Einstellungen exakt gleich sein. Mal ehrlich. ich hab noch nie überprüft, ob Liste der Content-Types auch exakt gleich ist (und ich hatte es eigentlich auch nicht vor *g*).

Die Lösung ist recht simpel - wenn man sie denn kennt: das Toolkit braucht immer noch einen IIS 7, aber dieser kann sich befinden, wo es auch immer beliebt. Die zu analysierende Website muss nicht zwingend auf dem gleichen Rechner vorhanden sein. Nachdem man eine neue Seite mit beliebigem physikalischem Verzeichnis eingerichtet hat, muss man nur noch den richtigen Hostnamen wählen. In meinem Beispiel ist das KlugeSoftware.de.

 Hostname im IIS7 eintragen

Dass die Seite nicht im lokalen IIS aufgerufen wird (solange kein entsprechender Eintrag in der hosts-Datei alles verbiegt), ist dabei vollkommen egal bzw. überhaupt der Sinn der Übung ;)

Nachdem dieser Hostname eingetragen wurde, kann auch schon mit der Analyse begonnen werden.

 Site Analysis des SEO Toolkits im IIS 7

Nach "New Analysis..." erscheint auch schon die richtige URL im Dialog.

 Dialog: New Analysis zeigt richtige URL

Wie das danach genau weitergeht und was die Ergebnisse der Analyse bedeuten, kann z.B. hier nachgelesen werden.

 

Ressourcen aus externen Libraries im Markup ausgeben

29.06.2009 03:43:00 | Jürgen Gutsch

Bei großen Projekten kann es unter Umständen Sinn machen, alle String-Ressourcen in eine separate Library auszulagern. Das Problem ist dann nur, dass diese Ressourcen nicht mehr so einfach über die ASP.NET Markup angesprochen werden können.

Die Lösung gibt es mit einem eigenen ExpressionBuilder, mit dem es möglich ist einen eigenen ASP.NET Ausdruck zu schreiben um auf die externen Ressourcen zu zu greifen.

<%$ ExternalResources: General, LoginPageTitle %>

Um den Ausdruck von eventuellen internen Ressourcen auseinander zu halten habe ich den ExpressionPrefix “ExternalResources” genannt.

Die Struktur des xpressionBuilder sieht bei mir wie folgt aus:

[ExpressionPrefix("ExternalResources")]
public class ExternalResourcesExpressionBuilder:
  ExpressionBuilder
{
  public override object ParseExpression(
  string expression,
  Type propertyType,
  ExpressionBuilderContext context)
  {
  } 
  public override CodeExpression GetCodeExpression(
  BoundPropertyEntry entry,
  object parsedData,
  ExpressionBuilderContext context)
  {
  }
}

die Methode ParseExpression nimmt den Ausdruck auseinander und gibt diesen in einem gewünschten Format als Object zurück. In meinem Fall habe ich mir eine kleine Hilfsklasse namens “ResourceExpression” gebaut:

classKey = null;
string resourceKey = null;

if(expression.Length != 0)
{
  string[] strArray = expression.Split(new[] { ',' });
  int length = strArray.Length;
  if(length > 2)
  {
    return null;
  }
  if(length == 1)
  {
    resourceKey = strArray[0].Trim();
  }
  else
  {
    classKey = strArray[0].Trim();
    resourceKey = strArray[1].Trim();
  }
}
return new ResourceExpression
{
  ClassKey = classKey,
  ResourceKey = resourceKey
};

Die Hilfsklasse:

public class ResourceExpression
{
  public string ClassKey { get; set; }
  public string ResourceKey { get; set; }
}

In der Methode “GetCodeExpression” findet die eigentliche Arbeit statt. Hier wird der Ressource-String ermittelt und zurückgegeben. Theoretisch kann hier auch per WebService auf einen Übersetzungsdienst zu gegriffen werden.

Ich hole mir allerdings nur per Reflection den entsprechenden ResoourceManager über den ich den zurück zu gebenden Ressource-String ermittle:

ResourceExpression expression = (ResourceExpression)parsedData;
ResourceManager resourceManager = new ResourceManager("Cobra.Web.Resources." + expression.ClassKey, Assembly.GetAssembly(typeof(Resources.General)))
{
  IgnoreCase = true
};
string outString = String.Empty;
if(!string.IsNullOrEmpty(expression.ResourceKey))
{
  outString = resourceManager.GetString(expression.ResourceKey);
}
return new CodePrimitiveExpression(outString);

Zu guter Letzt, muss der ExpressionBuilder noch in Web.Config registriert werden:

<configuration>
    <system.web>
        <compilation>
            <expressionBuilders>
                <add expressionPrefix="ExternalResources"
                 type="GO.Web.Library.ExternalResourcesExpressionBuilder"/>
            </expressionBuilders>
        </compilation>
    </system.web>
</configuration>

DotNetKicks-DE Image

Web Slices für den IE8 ganz einfach selber machen

29.06.2009 02:02:00 | Jürgen Gutsch

Am Wochenende hatte ich tatsächlich etwas Zeit, um mir mal die Web Slices für den IE8 genauer anzuschauen.

Interessant ist, wie einfach es ist ein Web Slice zu erstellen. Allerdings gibt es eine Stolperfalle über die man nicht unbedingt stolpern muss.

Ein Web Slice wird als HTML im HTML der Website definiert und erstellt. Definiert wird ein Web Slice über speziell vorgegebene CSS-Klassen. Diese Klassen können zur Formatierung genutzt werden, müssen aber nicht. Ich habe es einfach gemacht und gleich diese Klassen für die Formatierung genutzt.

Definiert wird ein Slice mit einem <div> mit der Klasse “hslice” und einer eindeutigen ID (die ID hält mehrere Slices auseinander)

<div class="hslice" id="baseslice">
    <h2 class="entry-title">Mehr von Jürgen Gutsch</h2>
    <div class="entry-content">
       
    </div>
</div>

Innerhalb des Slices wird ein Titel definiert. Üblicherweise ein <h2> Element. Der Titel wird über die Klasse “entry-titel” definiert. Dieser Titel erscheint dann in der Favoritenleiste des IE8.

Der eigentliche Inhalt des Slices wird in einem <div> mit der Klasse “entry-content” erstellt und kann im Prinzip alles beinhalten, sogar dynamischen Inhalt von einer anderen Seite. Dazu wird im <div>-Element für den Inhalt einfach ein “href” mit dem Link zur Externen Ressource eingefügt.

Die eine Stolperfalle gibt es bei der Formatierung: Das CSS greift nur, wenn es auf die Klasse “entry-content” angewendet wird, also auf das <div> für den Inhalt. Nicht aber auf das übergeordnete Element. Zudem werden die Formatierungen vom Dokument übernommen. Diese müssen also ggf. überschrieben werden.

Ein Web Slice könnte dann z. B. so aussehen:

ein sehr guter Artikel zum Thema ist im MSDN-Magazine zu finden: http://msdn.microsoft.com/de-de/magazine/dd458804.aspx

Und auch im Blog von Klaus Bock:
http://blog.klaus-b.net/

DotNetKicks-DE Image

Download: Thema: IT-Compliance [PDF Deutsch / English]

28.06.2009 15:57:39 | Kay Giza

Wie soll ich es sagen, vielleicht einfach direkt heraus. Ich tue mich schwer, wenn es um Themen wie die Einhaltung der gesetzlichen, unternehmensinternen und vertraglichen Regelungen im Bereich der IT-Landschaft geht. Nicht weil ich diese Prozesse nicht gut finde, nicht weil ich diesen nicht folgen kann und will (um Gottes Willen, das mache ich!) sondern eher, wenn ich der verantwortliche IT-Manager wäre der sie verantworten und ausrollen müssten. Warum? Weil das Thema für mich einen so komplexen Eindruck macht. Es ist für mich persönlich irgendwie zäh wie Leder und manchmal hart wie Kruppstahl. Sicherheits-Entscheidern fragen oder fragen sich selbst häufig, wie mit dem Thema „Compliance“ umgegangen werden soll. Diese Frage wirft jedoch bereits einige andere Fragen auf; Warum ist das Thema für einen Sicherheitsexperten relevant? Von welcher „Compliance“ ist hier die Rede? Wie relevant ist das Thema überhaupt? Wie viel wird es kosten (cost of compliance)? Und die Frage, die zu Beginn über all diesen Fragen steht: Wie fange ich an, mich mit dem Thema "IT-Compliance" auseinanderzusetzen? Dabei existiert dazu sehr viel Literatur, doch meistens bietet sie keine Lösungswege, sondern bildet die bekannten Anforderungen nur unterschiedlich strukturiert ab. Als führender Anbieter von Softwarelösungen sieht sich Microsoft über die Bereitstellung von Produkten hinaus jedoch auch verantwortlich, Sie bei der Umsetzung von IT-Compliance-Anforderungen zu unterstützen. Gemeinsam mit der Experton Group hat Microsoft Deutschland einen Leitfaden für die effiziente Einhaltung von Richtlinien durch automatisierte IT-Prozesse erstellt. In diesem Blogposting auf Giza-Blog.de finden Sie ausführliche Informationen, Download-Links zum kostenfrei erhältlichen PDF-Dokument, in deutscher sowie englischer Sprache... [... 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-2009 Kay Giza. All rights reserved. Legal

Klassen die IComparable(T) implementieren und null, die Zweite

28.06.2009 14:42:00 | Klaus Bock

Im vorherigen Post habe ich, wie man an den Kommentaren sehen kann, das Problem nicht richtig dargelegt. Es geht mir nicht um das Exception-Handling sondern um die Tatsache, dass eine Klasse, die ja per Design mit null Instanziiert werden kann, nicht mehr mit null Instanziiert werden kann wenn die Schnittstelle IComparable<T> implementiert wird. Konkreter Weise geht es eigentlich um das Überschrieben bzw. Implementieren der Methoden und Operatoren:

  • public override bool Equals(object obj)
  • public bool Equals(T other)
  • ==
  • !=
  • <
  • >

Die Operatoren == und != verwenden beide die Methode public bool Equals(T other) zum vergleichen der Instanzen. Um die Instanzen tatsächlich nach ihrem Inhalt zu vergleichen, ist es nötig jede einzelne Eigenschaft der beiden Instanzen miteinander zu vergleichen. Um zu verdeutlichen was mein Problem ist, habe ich hier eine Testklasse mit dem Konzept von dem ich spreche.

namespace ClassTests
{
    using System;

    public class Test :IComparable<Test>
    {
        public int Number
        { get; set; }

        public Test()
        {
        }

        public int CompareTo(Test other)
        {
            return this.Number.CompareTo(other.Number);   
        }

        public static bool operator ==(Test t1, Test t2)
        {
            return t1.Equals(t2);
        }

        public static bool operator !=(Test t1, Test t2)
        {
            return !t1.Equals(t2);
        }

        public override bool Equals(object obj)
        {
            Test test = obj as Test;

            if (test != null)
            {
                return this.Equals(test);
            }

            return false;

        }

        public bool Equals(Test other)
        {
           if (this.Number.CompareTo(other.Number) != 0)
            {
                return false;
            }

            return true;
        }

    }
}

Mein Problem beginnt ab dann, wenn die Operatoren == und != überschrieben werden.
Vieleicht kennt ja jemand einen anderen Weg als im vorherigen Post.

Technorati-Tags: | | | |

Ein Erfahrungsbericht zum ersten Bootcamp bei der DNUG Braunschweig

28.06.2009 08:02:26 | Lars Keller

Letzte Woche fand unser erstes Bootcamp von der DNUG Braunschweig statt. Wie bereits berichtet, wurde das Bootcamp nach dem LdL-Prinzip ausgerichtet. Was LdL ist, habe ich in meinem letzten Post erklärt. Heute möchte ich von meiner ersten praktischen Erfahrung darüber berichten.Erstes Bootcamp der DNUG Braunschweig

Das erste Bootcamp wurde zum Thema Unit Testing veranstaltet. Als Referent hat uns Alexander Groß besucht, welcher uns im Vorfeld Fragen zu dem Thema als “Hausaufgabe” (LdL) aufgegeben hatte. Der Skill-Level der Teilnehmer war durchwachsen, einige hatten mit dem Thema noch keine Berührung, andere haben schon TDD/BDD in ihren aktuellen Entwicklungen eingesetzt.

Nach einer kleinen Einführung von Alex legten wir auch sofort los, die Antworten zu unseren Fragen vorzutragen. Diese wurden dann zusammen mit Alex diskutiert. Hierbei konnte man den in meinen Augen großen Unterschied zu einem normalen Vortrag erkennen. Da alle Teilnehmer sich mit dem Thema im Vorfeld auseinander gesetzt hatten, wurden viele Fragen zu etwaigen Problemen oder Erfahrungen zur Vorgehensweisen bei TDD/BDD gestellt. Wir haben auch verschiedene Unit Testing Frameworks besprochen und die Vor- und Nachteile diskutiert. –> Praxis, Praxis, Praxis!!!

In den folgenden 7 Stunden (wir wollten Alex eigentlich noch gar nicht gehen lassen) haben wir nur 2 Pausen gemacht. In den Pausen wurde aber auch fleißig über das Thema in der Sonne diskutiert. Ich erwähne dies deshalb, weil das Bootcamp selbstorganisierend ist. Es gibt keine wirkliche Agenda und die Teilnehmer legen selber fest, was wie passiert.

Abschließend möchte ich das durchweg positive Feedback erwähnen, das ich bis jetzt zu dem Bootcamp bekommen habe. Ich habe von vielen gehört, dass das Bootcamp mit  LdL effektiver war als normale Vorträge oder Schulungen. Dies kann ich nur unterstreichen! Ich fand die Veranstaltung sehr informativ und ich habe daraus viele Ansätze für meine tägliche Arbeit mitgenommen.

Ich möchte auch noch mal recht herzlich unserem Sponsor, der Firma Barthauer Software GmbH, für das zur Verfügung stellen der Räumlichkeiten und des Caterings bedanken!

Momentan bin ich auf der Suche nach weiteren Sponsoren für weitere Bootcamps. Mögliche interessierte Sponsoren können sich gern bei mir melden!

Es wird nicht das letzte Bootcamp in Braunschweig gewesen sein! :)



This weblog is sponsored by netcreate OHG.

Ein Erfahrungsbericht zum ersten Bootcamp bei der DNUG Braunschweig

28.06.2009 07:02:26 | Lars Keller

Letzte Woche fand unser erstes Bootcamp von der DNUG Braunschweig statt. Wie bereits berichtet, wurde das Bootcamp nach dem LdL-Prinzip ausgerichtet. Was LdL ist, habe ich in meinem letzten Post erklärt. Heute möchte ich von meiner ersten praktischen Erfahrung darüber berichten.Erstes Bootcamp der DNUG Braunschweig

Das erste Bootcamp wurde zum Thema Unit Testing veranstaltet. Als Referent hat uns Alexander Groß besucht, welcher uns im Vorfeld Fragen zu dem Thema als “Hausaufgabe” (LdL) aufgegeben hatte. Der Skill-Level der Teilnehmer war durchwachsen, einige hatten mit dem Thema noch keine Berührung, andere haben schon TDD/BDD in ihren aktuellen Entwicklungen eingesetzt.

Nach einer kleinen Einführung von Alex legten wir auch sofort los, die Antworten zu unseren Fragen vorzutragen. Diese wurden dann zusammen mit Alex diskutiert. Hierbei konnte man den in meinen Augen großen Unterschied zu einem normalen Vortrag erkennen. Da alle Teilnehmer sich mit dem Thema im Vorfeld auseinander gesetzt hatten, wurden viele Fragen zu etwaigen Problemen oder Erfahrungen zur Vorgehensweisen bei TDD/BDD gestellt. Wir haben auch verschiedene Unit Testing Frameworks besprochen und die Vor- und Nachteile diskutiert. –> Praxis, Praxis, Praxis!!!

In den folgenden 7 Stunden (wir wollten Alex eigentlich noch gar nicht gehen lassen) haben wir nur 2 Pausen gemacht. In den Pausen wurde aber auch fleißig über das Thema in der Sonne diskutiert. Ich erwähne dies deshalb, weil das Bootcamp selbstorganisierend ist. Es gibt keine wirkliche Agenda und die Teilnehmer legen selber fest, was wie passiert.

Abschließend möchte ich das durchweg positive Feedback erwähnen, das ich bis jetzt zu dem Bootcamp bekommen habe. Ich habe von vielen gehört, dass das Bootcamp mit  LdL effektiver war als normale Vorträge oder Schulungen. Dies kann ich nur unterstreichen! Ich fand die Veranstaltung sehr informativ und ich habe daraus viele Ansätze für meine tägliche Arbeit mitgenommen.

Ich möchte auch noch mal recht herzlich unserem Sponsor, der Firma Barthauer Software GmbH, für das zur Verfügung stellen der Räumlichkeiten und des Caterings bedanken!

Momentan bin ich auf der Suche nach weiteren Sponsoren für weitere Bootcamps. Mögliche interessierte Sponsoren können sich gern bei mir melden!

Es wird nicht das letzte Bootcamp in Braunschweig gewesen sein! :)

Klassen die IComparable(T) implementieren und null

28.06.2009 03:30:00 | Klaus Bock

Gerade heute, oder eigentlich gestern, ärgerte mich wieder einmal eine einfache null-Prüfung einer Klasse welche die Schnittstelle IComparable<T> implementiert. Die besagte Klasse ist nichts anderes als ein Container für verschiedene Typen und ein paar Vergleichsmethoden sowie überschriebene Operatoren. Sämtliche Vergleiche und Sortierungen funktionieren einwandfrei, solange die Klasse nicht mit null initialisiert und anschließend auf null geprüft wird. Sobald dies geschieht, wird im ersten expliziten Vergleich der Methode

public bool Equals(T other)

eine NullReferenceException geworfen.

NullReferenceException

Warum gerade in dieser Methode?
Weil der überschriebene Operator != genau diese Methode zum vergleich verwenden muss, um einen expliziten Vergleich aller Eigenschaften der Klasse zu vergleichen.

public static bool operator !=(DownloadFile file1, DownloadFile file2)
{
    return !file1.Equals(file2);
}

Trotz stundenlanger Suche und lesen unzähliger Artikel, bin ich auf keinen vernünftigen Ansatz gestoßen um das Problem zu lösen. Also habe ich mich für eine brachiale Methode entschieden und gegen den Grundsatz der da heißt:

“Ausnahmen sollen nicht für den regulären Ablauf im Code verwendet werden.”

Vieleicht fällt mir ja noch eine andere Lösung ein, oder jemand stößt mich mit der Nase darauf. Doch bis dahin bleiben die Überprüfungen der einzelnen Eigenschaften in einem try-Block verpackt und die NullReferenceException wird abgefangen.

public bool Equals(DownloadFile other)
{
    try
    {
        if (string.Compare(this.Description, other.Description, StringComparison.Ordinal) != 0)
        {
            return false;
        }

        if (!this.FileId.Equals(other.FileId))
        {
            return false;
        }

		// hier noch weitere Vergleiche
    }
    catch (NullReferenceException)
    {
		// zweite Instanz ist null
        return false;
    }

    return true;
}

Es ist mit Sicherheit kein schönes Design; doch bis ich eine bessere Methode gefunden habe, muss ich wohl damit leben.

Technorati-Tags: | | | |

TFS Workshop von artiso

27.06.2009 23:00:26 | Lars Keller

Die artiso GmbH bietet Interessenten einen kostenlosen Workshop zum Thema Team Foundation System an. Letzte Woche habe ich an dem Workshop teilgenommen. Thomas Schissler (Geschäftsführer von artiso und MVP Team Foundation System) hat den Workshop geleitet. Thomas hat in den knapp 3 Stunden den Entwicklungsprozess von artiso mit dem TFS vorgestellt und dabei nützliche Praxistipps zur Strukturierung von Entwicklungsprozessen gegeben.

Hierbei wurden verschiedene teils kostenlose Tools von artiso vorgestellt, welche die Arbeit mit dem TFS erheblich vereinfachen können. Meine Begeisterung über den artiso WorkItem Manager (WIM) habe ich hier schon geäußert und kann es nur wiederholen, das Tool macht die Arbeit definitiv produktiver. Am Ende des Workshops war noch Platz für einige Fragen rund um das Thema TFS.

Ich kann den Workshop allen empfehlen, die mit dem Gedanken spielen, einen TFS einzusetzen oder diesen schon einsetzen und gern damit über ihre Entwicklungsprozesse diskutieren möchten.



This weblog is sponsored by netcreate OHG.

Ein Erfahrungsbericht zum ersten Bootcamp bei der DNUG Braunschweig

27.06.2009 22:02:02 | Lars Keller

Letzte Woche fand unser erstes Bootcamp von der DNUG Braunschweig statt. Wie bereits berichtet, wurde das Bootcamp nach dem LdL-Prinzip ausgerichtet. Was LdL ist, habe ich in meinem letzten Post erklärt. Heute möchte ich von meiner ersten praktischen Erfahrung darüber berichten.Erstes Bootcamp der DNUG Braunschweig

Das erste Bootcamp wurde zum Thema Unit Testing veranstaltet. Als Referent hat uns Alexander Groß besucht, welcher uns im Vorfeld Fragen zu dem Thema als “Hausaufgabe” (LdL) aufgegeben hatte. Der Skill-Level der Teilnehmer war durchwachsen, einige hatten mit dem Thema noch keine Berührung, andere haben schon TDD/BDD in ihren aktuellen Entwicklungen eingesetzt.

Nach einer kleinen Einführung von Alex legten wir auch sofort los, die Antworten zu unseren Fragen vorzutragen. Diese wurden dann zusammen mit Alex diskutiert. Hierbei konnte man den in meinen Augen großen Unterschied zu einem normalen Vortrag erkennen. Da alle Teilnehmer sich mit dem Thema im Vorfeld auseinander gesetzt hatten, wurden viele Fragen zu etwaigen Problemen oder Erfahrungen zur Vorgehensweisen bei TDD/BDD gestellt. Wir haben auch verschiedene Unit Testing Frameworks besprochen und die Vor- und Nachteile diskutiert. –> Praxis, Praxis, Praxis!!!

In den folgenden 7 Stunden (wir wollten Alex eigentlich noch gar nicht gehen lassen) haben wir nur 2 Pausen gemacht. In den Pausen wurde aber auch fleißig über das Thema in der Sonne diskutiert. Ich erwähne dies deshalb, weil das Bootcamp selbstorganisierend ist. Es gibt keine wirkliche Agenda und die Teilnehmer legen selber fest, was wie passiert.

Abschließend möchte ich das durchweg positive Feedback erwähnen, das ich bis jetzt zu dem Bootcamp bekommen habe. Ich habe von vielen gehört, dass das Bootcamp mit  LdL effektiver war als normale Vorträge oder Schulungen. Dies kann ich nur unterstreichen! Ich fand die Veranstaltung sehr informativ und ich habe daraus viele Ansätze für meine tägliche Arbeit mitgenommen.

Ich möchte auch noch mal recht herzlich unserem Sponsor, der Firma Barthauer Software GmbH, für das zur Verfügung stellen der Räumlichkeiten und des Caterings bedanken!

Momentan bin ich auf der Suche nach weiteren Sponsoren für weitere Bootcamps. Mögliche interessierte Sponsoren können sich gern bei mir melden!

Es wird nicht das letzte Bootcamp in Braunschweig gewesen sein! :)

TFS Workshop von artiso

27.06.2009 22:00:26 | Lars Keller

Die artiso GmbH bietet Interessenten einen kostenlosen Workshop zum Thema Team Foundation System an. Letzte Woche habe ich an dem Workshop teilgenommen. Thomas Schissler (Geschäftsführer von artiso und MVP Team Foundation System) hat den Workshop geleitet. Thomas hat in den knapp 3 Stunden den Entwicklungsprozess von artiso mit dem TFS vorgestellt und dabei nützliche Praxistipps zur Strukturierung von Entwicklungsprozessen gegeben.

Hierbei wurden verschiedene teils kostenlose Tools von artiso vorgestellt, welche die Arbeit mit dem TFS erheblich vereinfachen können. Meine Begeisterung über den artiso WorkItem Manager (WIM) habe ich hier schon geäußert und kann es nur wiederholen, das Tool macht die Arbeit definitiv produktiver. Am Ende des Workshops war noch Platz für einige Fragen rund um das Thema TFS.

Ich kann den Workshop allen empfehlen, die mit dem Gedanken spielen, einen TFS einzusetzen oder diesen schon einsetzen und gern damit über ihre Entwicklungsprozesse diskutieren möchten.

TFS Workshop von artiso

27.06.2009 13:00:02 | Lars Keller

Die artiso GmbH bietet Interessenten einen kostenlosen Workshop zum Thema Team Foundation System an. Letzte Woche habe ich an dem Workshop teilgenommen. Thomas Schissler (Geschäftsführer von artiso und MVP Team Foundation System) hat den Workshop geleitet. Thomas hat in den knapp 3 Stunden den Entwicklungsprozess von artiso mit dem TFS vorgestellt und dabei nützliche Praxistipps zur Strukturierung von Entwicklungsprozessen gegeben.

Hierbei wurden verschiedene teils kostenlose Tools von artiso vorgestellt, welche die Arbeit mit dem TFS erheblich vereinfachen können. Meine Begeisterung über den artiso WorkItem Manager (WIM) habe ich hier schon geäußert und kann es nur wiederholen, das Tool macht die Arbeit definitiv produktiver. Am Ende des Workshops war noch Platz für einige Fragen rund um das Thema TFS.

Ich kann den Workshop allen empfehlen, die mit dem Gedanken spielen, einen TFS einzusetzen oder diesen schon einsetzen und gern damit über ihre Entwicklungsprozesse diskutieren möchten.

22. Treffen der PASS Regionalgruppe Sachsen

26.06.2009 18:44:00 | Martin Hey

Am 14.08.2009 findet das nächste Treffen der Regionalgruppe Sachsen der Professional Association for SQL Server in Dresden statt. Beginn ist 17:00 wie gewohnt im IT Trainingshaus am Waldschlösschen.
Dieses Mal werde ich etwas zum Thema Einsatz und Nutzen des in SQL Server 2008 neu eingeführten HierarchyId-Datentyps erzählen. Im Anschluss daran wird es wieder eine offene Diskussion geben und ich bin gespannt, welche Ideen, Meinungen und Vorschläge dort zur Sprache kommen.

Alle Tabelleninhalte einer Datenbank löschen

26.06.2009 12:46:00 | Martin Hey

Während der Entwicklung von Anwendungen kommt es gelegentlich vor, dass man die eingegebenen Test- oder Demodaten wieder löschen möchte. Hier stellt sich häufig das Problem, dass referentielle Integrität ein stupides "DELETE FROM ..." für jede Tabelle verhindert. Das Skript sollte also die referentielle Integrität beibehalten, alle Daten aus den Tabellen löschen und Identity-Spalten wieder zurücksetzen.

Schlüssel für die Lösung ist die Systemprozedur sp_MSForEachTable, mit der man ein SQL-Statement für jede Tabelle einer Datenbank ausführen kann:
  1. Zunächst wird für alle Tabellen die Prüfung der referentiellen Integrität deaktiviert.
  2. Danach wird ein DELETE-Statement ausgeführt. Dabei ist es wichtig die Option "Quoted Identifiers" zu deaktivieren, sonst würde es bei der Ausführung zu folgender Meldung kommen:
    DELETE failed because the following SET options have incorrect settings: 'QUOTED_IDENTIFIER'. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or filtered indexes and/or query notifications and/or XML data type methods and/or spatial index operations.
  3. Das dritte Statement aktiviert die Prüfung der referentiellen Integrität wieder.
  4. Im Anschluss daran werden die Indentity-Spalten noch zurückgesetzt.

EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'  
GO

EXEC sp_MSForEachTable '
SET QUOTED_IDENTIFIER ON
DELETE FROM ?
'
GO

EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
GO

EXEC sp_MSForEachTable '
IF OBJECTPROPERTY(object_id(''?''), ''TableHasIdentity'') = 1
DBCC CHECKIDENT (''?'', RESEED, 0)
'
GO


Mehrere Datensätze mit nur einem INSERT-Statement einfügen

26.06.2009 09:54:00 | Martin Hey

Hier noch ein kleines Feature von SQL Server 2008, das ich unter dem Punkt syntaktischer Zucker ablegen möchte: Mit nur einem INSERT-Statement können mehrere Datensätze eingefügt werden. Dazu werden einfach mehrere Sätze im VALUES-Teil angegeben.

-- create demo table
CREATE TABLE Mitarbeiter(
Id INT IDENTITY(1,1),
Vorname NVARCHAR(35),
Nachname NVARCHAR(35),
Abteilung NVARCHAR(50)
)
-- insert statement with multiple value clauses
INSERT INTO Mitarbeiter(Vorname, Nachname, Abteilung) VALUES
('Meier','Klaus','HR'),
('Schmidt','Dirk','R&D'),
('Schneider','Tobias','R&D')

multiple inserts

Von Musikwissenschaft zum Program Management

26.06.2009 06:37:00 | Lori Grosland

Vor ein paar Monate habe ich mit Christian Schormann gesprochen. Christian ist Deutscher und arbeitet bei Microsoft Corp in Redmond als Director of Program Management für Expression.  In diesem Interview erzählt Christian über seine Karriere und wie er nach Redmond gekommen ist.

Christians Blog http://electricbeach.org/

Expression Website http://www.microsoft.com/germany/expression/

Von Musikwissenschaft zum Program Management

26.06.2009 05:37:00 | Lori Grosland

Vor ein paar Monate habe ich mit Christian Schormann gesprochen. Christian ist Deutscher und arbeitet bei Microsoft Corp in Redmond als Director of Program Management für Expression.  In diesem Interview erzählt Christian über seine Karriere und wie er nach Redmond gekommen ist.

Christians Blog http://electricbeach.org/

Expression Website http://www.microsoft.com/germany/expression/

Rewriting Git History: Relocating Subversion URLs

25.06.2009 19:59:52 | Alexander Groß

Git LogoToday we changed the URL of our Subversion server at work to a new domain. Subversion and TortoiseSVN offer a separate relocate command for that, which basically updates the local working copy metadata.

Not so for Git. Git keeps SVN metadata in two places: the commit log messages themselves which hold a git-svn-id entry for all commits that have been pushed to SVN, and in the .git/config file.

commit e82751b4872142679ba61e26fc0c57e97c698e8f
Author: agross 
Date:   Thu Jun 25 16:44:55 2009 +0000

    Adding FxCop to the code quality task

    git-svn-id: https://your.svn-server/svn/Crimson/trunk@67 8ed4a44c-bfb4-4748-a28a-fad9255c4788
[core]
	repositoryformatversion = 0
	filemode = false
	bare = false
	logallrefupdates = true
	ignorecase = true
[svn-remote "svn"]
	url = https://your.svn-server/svn/Crimson/trunk
	fetch = :refs/remotes/git-svn

To update the SVN URL it’s required to update the Git configuration file (an easy edit) and also to rewrite the commit log messages, updating the values of git-svn-id to reflect the new SVN server URL. The latter can be achieved with the git-filter-branch command which allows you to dissect the project history in interesting ways.

Having several local Git repositories to update, I went for the scripted solution. I found this article on how to change the SVN repository URL and added some scripting goodness to it (aside from fixing the syntactic errors). It worked pretty good for my ~10 repositories.

  • You pass two arguments:
    • The old SVN URL, i.e. http://old.server
    • The new SVN URL, i.e. https://new.server
    • The old URL will be matched against git-svn-id entries with a regular expression, and the matched parts get replaced with the new URL.
  • Rewrite the commit log messages, thus updating git-svn-id
  • Create a backup copy of .git/config
  • Replace the old SVN URL in .git/config
  • Delete all metadata Git has aquired about SVN
  • Rebase against SVN, recreating the SVN metadata
#!/bin/sh

# Must be called with two command-line args.
# Example: git-svn-relocate.sh http://old.server https://new.server
if [ $# -ne 2 ]  
then
  echo "Please invoke this script with two command-line arguments (old and new SVN URLs)."
  exit $E_NO_ARGS
fi  

# Prepare URLs for regex search and replace.
oldUrl=`echo $1 | awk '{gsub("[\\\.]", "\\\\\\\&");print}'`
newUrl=`echo $2 | awk '{gsub("[\\\&]", "\\\\\\\&");print}'`

filter="sed \"s|^git-svn-id: $oldUrl|git-svn-id: $newUrl|g\""
git filter-branch --msg-filter "$filter" -- --all

sed -i.backup -e "s|$oldUrl|$newUrl|g" .git/config

rm -rf .git/svn
git svn rebase

Quelltext zur ASP.NET MVC User Group Tour im Juni 2009

25.06.2009 18:24:56 | Albert Weinert

Den ersten Teil der ASP.NET MVC User Group Tour habe ich nun hinter mich gebracht.

Ich war in

  1. Karlsruhe
  2. Ulm
  3. Konstanz
  4. Ingolstadt
  5. Nürnberg

Hier nun wie versprochen der erweiterte Quelltext des Beispiels welches ich Live entwickelt habe. Der Quelltext wurde erweitert, umgebaut, verbessert usw. usf.

Zum Download: MvcUserGroupTourJuni2009.zip

Die nächsten geplanten Orte sind

Sobald die Termine genau feststehen könnt Ihr diese auf den Websites der UserGroups nachlesen.

Windows Live Foto Gallery und Windows Live Mail

25.06.2009 13:26:00 | Lori Grosland

In Teil 3 von dem Video mit Frank Mänz, Produkt Manager für Windows Live in Deutschland, erzählt Frank über Windows Live Foto Gallery und Windows Live Mail.  Er erklärt, was der Unterschied zwischen Windows Live Mail und Hotmail ist und gibt eine Zusammenfassung von den neuen Features in den Windows Live Produkte.

http://home.live.com/

http://download.live.com

Refactoring Code mit LINQ

25.06.2009 13:05:59 | Daniel Schädler

Wenn man .NET 3.5 einsetzt und viel mit Collections, die man dann an diverse Controls bindet, arbeitet, bietet sich ein sehr komfortabler Weg an das Ganze in ein bis zwei Zeilen LINQ zu erledigen anstelle einer Source Liste und einer Target Liste. Nachfolgend kurz der Vergleich (heraus kommt aber das Gleiche smile_wink)

Vorher:

   1: IList<WorkflowNode> nodes = WorkflowNodeHelper.GetManualNodes(commercialOrder);
   2: IList<WorkflowNode> nodesPermitted = new List<WorkflowNode>();
   3:  
   4: foreach(WorkflowNode node in nodes) {
   5:     if(PermissionHelper.GetBusinessAccess(Number, (Step)node.Element).ReadObject) {
   6:         nodesPermitted.Add(node);
   7:     }
   8: }
   9:  
  10: return nodesPermitted;

Nacher mit LINQ:

   1: return (from node in WorkflowNodeHelper.GetManualNodes(commercialOrder) 
   2:         where node.Element.GetType().Equals(typeof(Step)) && 
   3:         PermissionHelper.GetBusinessAccess(Number, (Step)node.Element).ReadObject 
   4:         select node).ToList<WorkflowNode>();
Ist zwar hier nicht ganz so kurz wie auf dem Bildschirm, aber es ist schon ein bisschen weniger.

Auf Systemereignisse reagieren

25.06.2009 11:49:00 | Martin Hey

Was in der Erstellung von Webanwendungen eher uninteressant ist, spielt in der Entwicklung von Windows-Anwendungen schon gelegentlich eine Rolle: Wie bekomme ich mit, ob mein Rechner gesperrt oder heruntergefahren wird?
In einem sehr interessanten Post erklärt Bernd Hengelein, wie man mit Hilfe der SystemEvents-Klasse genau auf diese Ereignisse reagieren kann.


Nicht meckern, sondern mitmachen (und gewinnen): Die Microsoft Besserweb-Initiative für Webstandards

25.06.2009 11:45:28 | Steffen Ritter

Mit einer Aktion, bei der alle nur gewinnen können sorgen meine Kollegen in den kommenden Monaten dafür, dass Webseiten künftig möglichst umfassend den geltenden Webstandards folgen. Im Rahmen der „Besserweb“-Initiative sollen dabei Web-Angebote identifiziert werden, die mit dem Internet Explorer 8 bislang nicht korrekt angezeigt werden oder gar nicht funktionieren. Betreiber solcher Webseiten will Microsoft bei der standardkonformen Anpassung ihres Webservice unterstützen.

banner_125x125_besserwebInternet-Nutzer, die bei der Aktion mitmachen möchten und entsprechende Webseiten melden, können dabei sogar gewinnen: jeden Monat eines von 160 T-Shirts und bei der Schlussverlosung weitere wertvolle Preise wie Xbox 360, Netbook mit Windows 7 oder eine Visual Studio 2010 Professional Edition. Die Besserweb-Initiative läuft noch bis zum Jahresende und jede Einreichung zählt doppelt – sowohl für die monatliche Verlosung, als auch für die Jahresendverlosung mit wertvollen Hauptgewinnen.

Also, wer eine Website findet die aus welchem Gründen auch immer im IE8 nicht standardkonform dargestellt wird – bitte melden! Das Web gewinnt an Wert: http://www.msdn-online.de/BesserWeb

Windows Live Überblick

25.06.2009 10:52:00 | Lori Grosland

Vor ein paar Monate habe ich mit Frank Mänz, Produkt Manager für Windows Live in Deutschland gesprochen.  Ende letzten Jahres hat Windows Live eine neue Version von den Windows-Live-Produkten veröffentlicht.  Frank hat mir viel über die neue Windows Live Features und Funktionalität erzählt.  Weil es so viele Neuigkeiten zu zeigen gibt, hat Frank über 25 Minuten darüber geredet.  Ich dachte, dass das ein bisschen zu lang ist und habe das Video in 3 Teile geteilt.  In Video Teil 1 gibt Frank mir einen Überblick über Windows Live und zeigt auch die Neuigkeiten zu der Windows Live Startseite, Hotmail, und Windows Live Fotos.

http://windows.live.com/

http://home.live.com/

Windows Live Überblick

25.06.2009 09:52:00 | Lori Grosland

Vor ein paar Monate habe ich mit Frank Mänz, Produkt Manager für Windows Live in Deutschland gesprochen.  Ende letzten Jahres hat Windows Live eine neue Version von den Windows-Live-Produkten veröffentlicht.  Frank hat mir viel über die neue Windows Live Features und Funktionalität erzählt.  Weil es so viele Neuigkeiten zu zeigen gibt, hat Frank über 25 Minuten darüber geredet.  Ich dachte, dass das ein bisschen zu lang ist und habe das Video in 3 Teile geteilt.  In Video Teil 1 gibt Frank mir einen Überblick über Windows Live und zeigt auch die Neuigkeiten zu der Windows Live Startseite, Hotmail, und Windows Live Fotos.

http://windows.live.com/

http://home.live.com/

test

25.06.2009 08:42:01 | Jürgen Gutsch

DotNetKicks-DE Image

Wie kann ich am schnellsten einen VSTS 2010 Beta1 mit TFS 2010 installieren?

24.06.2009 17:25:53 | Christian Binder

Es gibt wie immer mehrere Möglichkeiten :-) Die einfachste ist das Channel9 Video von Brian Keller sich anzuschauen.
Der Eintrag enthält alle notwendigen Schritte und Links. Wer eine MSDN Subscription hat, kann dort die iso Images runter laden und nach dem Installguide sein eigenes Image aufsetzen. Auf diese Weise habe ich auch mein Image installiert, was ich leider nicht einfach zum Download stellen kann, da ich keine Test Versionen für das OS verwende.

Viel Spass
Chris 

RIAWorld und Internet World - Slidedecks der Vorträge jetzt online

24.06.2009 16:25:57 | Jan Schenk

Die Konferenzen laufen noch, meine Vorträge gibt es jetzt schon wie versprochen zum Herunterladen.

Den RIAWorld Vortrag “Silverlight und WPF - Das gemischte Doppel” gibt es hier.

Den Internet World Vortrag “Internet Explorer 8 - konform, sicher, schnell” könnt ihr euch von hier herunterladen.

Vielen Dank an alle Teilnehmer, mir hat es sehr viel Spaß gemacht, ich hoffe euch ebenso.

Viele Grüße,
jan



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/06/24/riaworld-und-internet-world-slidedecks-der-vortr-ge-jetzt-online.aspx';

Internationale IT/Dev-Konferenz TechEd dieses Jahr in Berlin

24.06.2009 14:53:06 | Steffen Ritter

Woohoo, Deutschland ist wieder auf der IT-Landkarte: Die europäische Riesenkonferenz TechEd rund um aktuelle IT-Themen und Developer-Themen findet nach fast 15 Jahren Abstinenz vom 9.-13. November 2009 endlich wieder in Deutschland statt: http://www.microsoft.com/europe/teched/. Die Website ist ab sofort online und wer sich jetzt anmeldet kann sich die günstigen Frühbucherrabatte sichern. 

TechEd - Jetzt anmelden und sparen!

Auch die TechEd twittert, unter http://twitter.com/teched_europe gibts immer alle aktuellen Infos zur größten deutschen IT-Konferenz 2009.

Websites melden & gewinnen: Microsoft Besserweb-Initiative für Webstandards

24.06.2009 13:07:00 | Lori Grosland

banner_125x125_besserweb Mit einer Aktion, bei der alle nur gewinnen können, will die Developer Platform and Strategy Group von Microsoft Deutschland in den kommenden Monaten dafür sorgen, dass Webseiten künftig möglichst umfassend den geltenden Webstandards folgen. Im Rahmen der „Besserweb“-Initiative sollen dabei Web-Angebote identifiziert werden, die mit dem Internet Explorer 8 bislang nicht korrekt angezeigt werden oder gar nicht funktionieren. Betreiber solcher Webseiten will Microsoft bei der standardkonformen Anpassung ihres Webservice unterstützen.

Internet-Nutzer, die bei der Aktion mitmachen möchten und entsprechende Webseiten melden, können dabei sogar gewinnen: jeden Monat eines von 160 T-Shirts und bei der Schlussverlosung weitere wertvolle Preise wie Xbox 360, Netbook mit Windows 7 oder eine Visual Studio 2010 Professional Edition. Die Besserweb-Initiative läuft noch bis zum Jahresende und jede Einreichung zählt doppelt – sowohl für die monatliche Verlosung, als auch für die Jahresendverlosung mit wertvollen Hauptgewinnen.

Sie gewinnen Preise. Das Web gewinnt an Wert: http://www.msdn-online.de/BesserWeb

TechEd Europe 2009 in Berlin

24.06.2009 12:50:00 | Lori Grosland

TechEd_Europe_Blog_SM_STD Der Jahres-Event für IT-Professionals und Entwickler – jetzt frühzeitig anmelden und sparen!

Der Name „TechEd“ steht stellvertretend für spannende Produkt- und Technologievorstellungen von Microsoft – aber auch für die Plattform, um hochkarätige internationale Microsoft- und Industrieexperten sowie zahlreiche Branchenkollegen aus ganz Europa zu treffen.

Die TechEd Europe 2009 findet vom 9. – 13. November zum ersten Mal in Berlin statt. Damit unterstreicht Microsoft die Verbundenheit zum bedeutenden Wirtschafts- und Technologiestandort Deutschland. Und dadurch verringert sich auch der finanzielle Aufwand Ihrer Teilnahme. In diesem Jahr wird die TechEd für IT-Pros und Entwickler gemeinsam ausgerichtet – und nicht wie bisher getrennt an aufeinander folgenden Terminen. Eine Anregung vieler Teilnehmer, die Microsoft gern aufgenommen hat und in Berlin nun verwirklicht.

Lernen Sie die neuesten Entwicklungen und Trends aus erster Hand kennen.  Erfahren Sie, wie Sie Ihre tägliche Arbeit erleichtern und um zusätzliche Facetten bereichern können.

Freuen Sie sich darauf, aus über 600 Lernmöglichkeiten Ihr persönliches Programm zusammenzustellen und erschließen Sie sich neues Wissen, um zukünftigen Herausforderungen souverän zu begegnen. Denn dies ist eine Ressource, die gerade in der heutigen Zeit einen entscheidenden Wettbewerbsvorteil bedeutet.

Nutzen Sie darüber hinaus die Gelegenheit, Ihr persönliches Netzwerk zu erweitern. Denn auch in diesem Jahr erwarten wir einige tausend Teilnehmer, die Ihre Interessen teilen und mit denen Sie Kontakt knüpfen und Erfahrungen austauschen können.

Und das Beste: Sie erhalten die Möglichkeit, durch Ihre frühe Anmeldung von erheblichen Preisnachlässen zu profitieren. Denn je schneller Sie sich Ihr Ticket für die TechEd sichern, desto mehr sparen Sie. Nutzen Sie diesen exklusiven Vorteil!

 clip_image001

Mehr Information über TechEd Europe finden Sie hier:  http://www.microsoft.com/europe/teched/

Bleiben Sie immer auf dem Laufenden über den Twitter-Kanal @ http://twitter.com/teched_europe

Wozu dient Reflection

24.06.2009 12:13:06 | Thomas Christian

Über Reflection kann man zur Laufzeit relativ einfach an alle Informationen eines Assembly herankommen. So ist es möglich, dass man von einem Assembly den Namen, Klassen, Methoden mit ihren Parametern, Eigenschaften und Rückgabewerte, usw. auslesen kann. Aber nicht nur das Auslesen ist möglich, sondern auch das Setzen. Jetzt stellt sich für den einen oder anderen vielleicht die Frage, warum man zur Laufzeit auf diese Daten zugreifen kann. Jede Assembly verfügt über Module in denen sich die einzelnen Typen(Klassen) befinden. Für jedes Modul gibt es Metadaten, in denen die einzelnen Typen beschrieben werden. Die Assembly selbst verfügt noch über ein Manifest, in dem sich alle Informationen zum Assembly (z.B. Name, Version) befinden. Wenn man über Reflection auf Assemblies zugreift, dann werden diese Metadaten und das Manifest dafür herangezogen. Die Metadaten verfügen zwar noch über die Informationen, welche Modifizierer für Methoden, Properties, usw. verwendet wurden, aber der MSIL-Code (die Zwischensprache, die vom Endcompiler in die plattformspezifische Sprache übersetzt wird) nicht mehr. Die Modifizierer sind nur für den Compiler relevant und werden nach dem Kompilieren nicht mehr berücksichtigt. Somit ist es auch möglich über Reflection Properties, Methoden, usw. zu verwenden, die nicht öffentlich sind. Für dieses Beispiel habe ich eine kleine Konsolen-Anwendung geschrieben (TestApplication), welche eine Referenz auf das Assembly TestProject.dll hat. Dieses Assembly hat zwei von mir erstellte Typen (Klassen) TestClass und SecondTestClass. In den beiden Klassen steckt keine Logik. Sie sind ausschließlich für dieses Beispiel erstellt worden, um ein paar Daten zu modifizieren und um zu zeigen wie die Informationen aus dem Assembly ausgelesen und verändert werden können und dass es möglich ist an nicht-öffentliche Methoden heranzukommen. weiter lesen...

Websites melden & gewinnen: Microsoft Besserweb-Initiative für Webstandards

24.06.2009 12:07:00 | Lori Grosland

banner_125x125_besserweb Mit einer Aktion, bei der alle nur gewinnen können, will die Developer Platform and Strategy Group von Microsoft Deutschland in den kommenden Monaten dafür sorgen, dass Webseiten künftig möglichst umfassend den geltenden Webstandards folgen. Im Rahmen der „Besserweb“-Initiative sollen dabei Web-Angebote identifiziert werden, die mit dem Internet Explorer 8 bislang nicht korrekt angezeigt werden oder gar nicht funktionieren. Betreiber solcher Webseiten will Microsoft bei der standardkonformen Anpassung ihres Webservice unterstützen.

Internet-Nutzer, die bei der Aktion mitmachen möchten und entsprechende Webseiten melden, können dabei sogar gewinnen: jeden Monat eines von 160 T-Shirts und bei der Schlussverlosung weitere wertvolle Preise wie Xbox 360, Netbook mit Windows 7 oder eine Visual Studio 2010 Professional Edition. Die Besserweb-Initiative läuft noch bis zum Jahresende und jede Einreichung zählt doppelt – sowohl für die monatliche Verlosung, als auch für die Jahresendverlosung mit wertvollen Hauptgewinnen.

Sie gewinnen Preise. Das Web gewinnt an Wert: http://www.msdn-online.de/BesserWeb

TechEd Europe 2009 in Berlin

24.06.2009 11:50:00 | Lori Grosland

TechEd_Europe_Blog_SM_STD Der Jahres-Event für IT-Professionals und Entwickler – jetzt frühzeitig anmelden und sparen!

Der Name „TechEd“ steht stellvertretend für spannende Produkt- und Technologievorstellungen von Microsoft – aber auch für die Plattform, um hochkarätige internationale Microsoft- und Industrieexperten sowie zahlreiche Branchenkollegen aus ganz Europa zu treffen.

Die TechEd Europe 2009 findet vom 9. – 13. November zum ersten Mal in Berlin statt. Damit unterstreicht Microsoft die Verbundenheit zum bedeutenden Wirtschafts- und Technologiestandort Deutschland. Und dadurch verringert sich auch der finanzielle Aufwand Ihrer Teilnahme. In diesem Jahr wird die TechEd für IT-Pros und Entwickler gemeinsam ausgerichtet – und nicht wie bisher getrennt an aufeinander folgenden Terminen. Eine Anregung vieler Teilnehmer, die Microsoft gern aufgenommen hat und in Berlin nun verwirklicht.

Lernen Sie die neuesten Entwicklungen und Trends aus erster Hand kennen.  Erfahren Sie, wie Sie Ihre tägliche Arbeit erleichtern und um zusätzliche Facetten bereichern können.

Freuen Sie sich darauf, aus über 600 Lernmöglichkeiten Ihr persönliches Programm zusammenzustellen und erschließen Sie sich neues Wissen, um zukünftigen Herausforderungen souverän zu begegnen. Denn dies ist eine Ressource, die gerade in der heutigen Zeit einen entscheidenden Wettbewerbsvorteil bedeutet.

Nutzen Sie darüber hinaus die Gelegenheit, Ihr persönliches Netzwerk zu erweitern. Denn auch in diesem Jahr erwarten wir einige tausend Teilnehmer, die Ihre Interessen teilen und mit denen Sie Kontakt knüpfen und Erfahrungen austauschen können.

Und das Beste: Sie erhalten die Möglichkeit, durch Ihre frühe Anmeldung von erheblichen Preisnachlässen zu profitieren. Denn je schneller Sie sich Ihr Ticket für die TechEd sichern, desto mehr sparen Sie. Nutzen Sie diesen exklusiven Vorteil!

 clip_image001

Mehr Information über TechEd Europe finden Sie hier:  http://www.microsoft.com/europe/teched/

Bleiben Sie immer auf dem Laufenden über den Twitter-Kanal @ http://twitter.com/teched_europe

Be more efficient. Today: Windows Explorer

24.06.2009 11:10:42 | Andre Loker

Just a reminder for myself or for anyone who’s interested, here are some useful tips and tricks to use in and with Windows Explorer that not probably everybody knows about.

Keyboard shortcuts

  • Move back in history: ALT-LEFT
  • Move forward in history: ALT-RIGHT
  • Move one folder up: ALT-UP (seems to work on Vista only)
  • Expand current folder: NUMPAD + or RIGHT
  • Collapse current folder: NUMPAD – or LEFT
  • Recursively expand all subfolders of the current folder (yeah, don’t try that on C:\): NUMPAD *
  • Recursively collapse all subfolders of the current folder (a bit tricky): first NUMPAD – or LEFT, then F5
  • Goto address bar: ALT-D (US systems), ALT-E (German systems – Windows Help says it’s ALT-S, but it won’t work on Vista, at least for me)
  • Toggle fullscreen: F11
  • Auto-completion in address bar: TAB (you can navigate fairly quickly by using ALT-D, TAB and BACKSLASH)

 

Other stuff

  • Fire up Explorer rooted at a specific path: explorer /root,directory where directory is the desired root directory, e.g. on my system explorer /root,e:\Tools yields
    image 
  • By the way, this makes for a useful external tool in VisualStudio:
    image
  • Open Explorer with a specific directory or file selected: explorer /select,Item – e.g. explorer /select,e:\Tools
  • Starting Explorer in a specific directory: explorer directory
  • Not directly related to the Explorer but a pretty cool tool nonetheless is VisualSubst. It lets you mount any directory as a new drive, just like the good old subst.exe but with a nice UI:
    image

 

 

If you have more tips and tricks related to the Windows Explorer, feel free to share them, I’ll add them here.

References:

User Group Meeting bei der .NET UG Stuttgart am 24.06.2009 faellt aus!

23.06.2009 17:42:28 | Kay Giza

Nach zwei Monaten kreativer Schöpfungspause* hier im Weblog, muss ich leider gleich mit einer schlechten Nachricht starten:

Eigentlich wäre ich morgen, 24.06.2009 bei der .NET User Group Stuttgart zu Besuch. Ich habe mich sehr auf den Vortrag gefreut! Der Titel lautete: "Das neue MSDN Online & Microsoft unplugged"

Vor wenigen Minuten informierte mich die UG-Leiterin Catrin Busley, das Sie leider krankheitsbedingt morgen nicht dabei sein kann (gute Besserung Catrin!!).
Da das Treffen bei der Firma Tieto stattfindet, müsste also jemand von der Firma direkt am Abend dabei sein. Leider  hat sich so kurzfristig niemand gefunden, so Catrin, der morgen Abend dabei sein könnte.

Aus diesem Grund musste Catrin leider das UG-Meeting absagen: es fällt aus!
Wir bemühen uns gemeinsam um einen Ersatztermin in naher Zukunft.

An alle die sich bereits angemeldet hatten möchten wir uns für die Umstände entschuldigen.
Wir melden uns mit einem Ersatztermin wieder bei Euch!

Screenshot der Seite zu besseren Visualisierung, welcher Termin gemeint war:
Das neue MSDN Online & Microsoft unplugged
(Bitte klicken Sie für eine vergrößerte Darstellung auf das Bild)

Viele Grüße von Catrin & Kay

* = ok - ist natürlich nur halb wahr - es fehlt schlichtweg die kreative Muße und es hab extrem viele Termine & Projekte, die mich ein wenig davon abgehalten haben. Ich konnte so nur ein wenig Twittern, leider.
Es geht aber jetzt wieder los :) - versprochen!



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-2009 Kay Giza. All rights reserved. Legal

AjaxControlToolkit TabContainer: Sys.ArgumentOutOfRangeException

23.06.2009 15:41:51 | Daniel Schädler

Error: Sys.ArgumentOutOfRangeException: Das angegebene Argument liegt außerhalb des gültigen Wertebereichs.
Parametername: value.

So oder ähnlich wird einem gemeldet wenn das AjaxControlToolkit (die generierten Scripts) einen aktiven Tab setzen will der nicht sichtbar ist (Sichtbarkeit ist im Codebehind geregelt.) Nachdem mir eine Kollege zu Hilfe geeilt ist haben wir auch den Übeltäter gefunden und zwar in einem generierten Script:

Der Fehler passiert hier, weil er aufgrund keiner Tabs den ActiveTabIndex nicht setzen kann:

   1: throw Error.argumentOutOfRange("value");}

Beim näheren hinsehen bei der vordergründigen Prüfung sieht man folgendes:

   1: if (value < -1 || value >= this.get_tabs().length) {

Hier wird geprüft ob der value kleiner als –1 (als Bsp. –2 ist) und grösser gleich dem übergebenen wert (NULL). Natürlich knallt’s hier, was auch nicht sonderlich verwunderlich ist. Die Lösung ist einfach. Im Codebehind-Abschnitt in welchem man die Sichtbarkeit der Tabs steuer kann durch folgenden Codeausschnitt der Aktive TabIndex auf –1 gesetzt werden.

   1: if(!container.Tabs[0].Visible) {
   2:     container.ActiveTabIndex = -1;
   3: }

Somit verschwindet dann auch der Fehler und weitere Javascripte die nachdem TabContainer ausgeführt werden sollen, werden dann auch wieder ordnungsgemäss ihren Dienst verrichten. Ich muss mir in Zukunft wohl angewöhnen, dass das Toolkit wohl oder Übel doch noch ein paar Fehler hat.

Technischer Support für ISVs

23.06.2009 15:40:14 | Peter Kirchner

Hersteller von Standardsoftware (ISVs, independent software vendors) können kostenlosen Support zu Fragen der Anwendungskompatibitlität mit Windows 7 erhalten.

Dazu schreiben Sie Ihr Problem in das Englisch-sprachige MSDN Forum “Application Compatibility for Windows Development”. CSS (Customer Service and Support) Engineers von Microsoft beobachten dieses Forum und antworten innerhalb von 24 Stunden.

Zum Forum hier lang: http://social.msdn.microsoft.com/Forums/en-US/windowscompatibility/threads/

Ajax.NET Professional noch immer unter den Top 5

23.06.2009 09:17:00 | Michael Schwarz

Simone Chiaretta hat wieder einmal eine Umfrage gestartet zum Thema AJAX und Microsoft ASP.NET. Als er Ende 2007 schon einmal eine Umfrage gestartet hatte, war ASP.NET AJAX und das AJAX Control Toolkit gerade auf dem Siegeszug, und belegten die beiden oberen Plätze. Danach kam schon Ajax.NET Professional, gleichauf mit jQuery.

Dieses Jahr habe ich mal keinen Link auf die Umfrage veröffentlicht, umso erstaunlicher ist dann doch das Ergebnis:

The most used Ajax/JS library among .NET developers is jQuery, which is used by the 71,4% of the users. Second comes the Ajax Control Toolkit with 58,8%, followed by the core ASP.NET Ajax library, which is used by 44,8%.

The 3 most used libraries are still the same of 2007, just with the opposite order (it was ASP.NET Ajax, the Control Toolkit and then jQuery).

Und weiter unten schreibt Simone dann:

And, despite becoming a dormant project, AJAX.NET Professional lost only 3% of the users.

Ajax.NET Professional ist immer noch unter den oberen Plätzen, jeder 10. verwendet Ajax.NET Professional z.B. auch in Verbindung mit jQuery. Dazu muss man sagen, dass jQuery alleine erst einmal keine AJAX Funktionalität auf dem Web Server selber anbietet.

Irgendwie macht es mich stolz, dass ein schon seit fast 2 Jahren gestorbenes (bzw. öffentlich nicht weiterentwickeltes) Projekt immer noch aktiv verwendet wird.

Hier noch die Ergebnisse der Umfrage in Zahlen:

2007 2009 diff
jQuery 13,3% 71,4% 58,1%
AJAX Control Toolkit 49,6% 58,8% 9,2%
ASP.NET Ajax 73,7% 44,8% -28,9%
Telerik radControls 11,7% 15,6% 3,9%
Ajax.NET Professional 13,3% 10,3% -3,0%
JSON.NET 3,3% 9,7% 6,4%
Raw Ajax 11,3% 8,6% -2,7%
Prototype 11,5% 8,3% -3,2%
Yahoo! UI 5,5% 7,0% 1,5%
Ext JS 6,1% 6,1% 0,0%
Script.aculo.us 9,7% 5,3% -4,4%

Weiter ist auch sehr interessant, was die CodePlex Statistik zeigt.

CodePlex Statistik - Ajax.NET Professional Downloads

Auch hier sieht man immer noch, dass Ajax.NET Professional verwendet wird. Totgesagte leben halt länger.

Wen es interessiert: ja, ich habe Ajax.NET Professional immer weiter entwickelt bis zum heutigen Tag, nur leider eben nicht mehr in einer öffentlichen Version. Viele Neuigkeiten sind hinzugekommen, die mir das Arbeiten mit JavaScript, AJAX und C# wesentlich vereinfacht haben.

Hinzugekommen ist z.B. ein AjaxHashCode Attribute, welches eine zusätzliche Eigenschaft __hash an die JavaScript Objekte hängt, um Veränderungen von Live-Daten besser und vor allem schneller feststellen zu können.


OT: (Meine) Zukunft der Politik in Deutschland?

23.06.2009 02:50:02 | Jürgen Gutsch

Aus aktuellem Anlass wird es leider mal wieder Zeit etwas vom Thema abzuweichen. Ich denke aber dass auch ich mal ein paar Worte schreiben sollte, die hoffentlich nicht allen gefallen werden. Aus Rücksicht auf die Volltextsuche von ASP.NET Zone habe ich den Senf mal hier veröffentlicht: juergen.gutsch-online.de

DotNetKicks-DE Image

Zu Besuch bei der DNUG Frankfurt

22.06.2009 22:12:54 | Lars Keller

Am 18.06.2009 war ich bei der DNUG Frankfurt und habe zwei Vorträge zum Thema VSTO/OBA gehalten.

Erst habe ich ein wenig über die Grundlagen der VSTO Programmierung berichtet und im zweiten Vortrag die Interaktion zwischen den verschiedenen MS Office Applikationen anhand eines kleinen WorkFlows aufgezeigt. Der WorkFlow ging über eine ankommende Bestell-E-Mail in Outlook über Excel bis hin zur Generierung einer Rechnung in Word. In jeder Applikation habe ich zusätzliche Daten aus einer Datenbank verarbeitet. Weiterhin habe ich den leichten Umgang mit Data Island gezeigt und wie man diese sinnvoll einsetzt. Die rege Diskussion ging auch nach den Vorträgen in einem ansässigen Brauhaus weiter, wo der Abend gemütlich ausklang!

Hier meine Folien und Beispielcodes zu den Vorträgen:

Vortrag 1: Office und .NET – zwei Welten wachsen zusammen


Vortrag 2: Interaktionen in der “Office-Welt” mit .NET


Der Abend hat mir sehr viel Spaß gemacht und nebenbei konnte ich mir auch noch die Microsoftzentrale in Bad Homburg anschauen!



This weblog is sponsored by netcreate OHG.

Zu Besuch bei der DNUG Frankfurt

22.06.2009 21:12:54 | Lars Keller

Am 18.06.2009 war ich bei der DNUG Frankfurt und habe zwei Vorträge zum Thema VSTO/OBA gehalten.

Erst habe ich ein wenig über die Grundlagen der VSTO Programmierung berichtet und im zweiten Vortrag die Interaktion zwischen den verschiedenen MS Office Applikationen anhand eines kleinen WorkFlows aufgezeigt. Der WorkFlow ging über eine ankommende Bestell-E-Mail in Outlook über Excel bis hin zur Generierung einer Rechnung in Word. In jeder Applikation habe ich zusätzliche Daten aus einer Datenbank verarbeitet. Weiterhin habe ich den leichten Umgang mit Data Island gezeigt und wie man diese sinnvoll einsetzt. Die rege Diskussion ging auch nach den Vorträgen in einem ansässigen Brauhaus weiter, wo der Abend gemütlich ausklang!

Hier meine Folien und Beispielcodes zu den Vorträgen:

Vortrag 1: Office und .NET – zwei Welten wachsen zusammen


Vortrag 2: Interaktionen in der “Office-Welt” mit .NET


Der Abend hat mir sehr viel Spaß gemacht und nebenbei konnte ich mir auch noch die Microsoftzentrale in Bad Homburg anschauen!

Die Montagsmeinung - Hauptsache gesund!

22.06.2009 17:51:23 | Jan Schenk

redcrossbutton Seit Wochen schlage ich mich mit den Nachwirkungen einer simplen Erkältung herum. Ich höre auf dem linken Ohr total schlecht, weil die Verbindung zwischen Innenohr und Rachenraum, die sogenannte Eustachische Röhre, zu ist. Deswegen war ich schon bei drei Ärzten. Das hört sich jetzt nach mehr an, als es ist. Zweimal war ich in der Gemeinschaftspraxis bei unterschiedlichen Ärzten, und dann letzten Donnerstag beim Hals- Nasen- und Ohren-Spezialisten. Heute auch wieder. Irgendwie pfriemeln die alle nur rum, so richtig geholfen hat bisher nichts. Zum Glück tut es aber auch nicht weh, sondern ist nur unangenehm. Jetzt habe ich was interessantes bekommen, einen Nasenballon. Die Details erspare ich euch, ich muss es eh erst mal ausprobieren, bevor ich dazu was sage.

Darüber wollte ich aber eigentlich gar nicht bloggen, viel mehr fand ich das allgemeine Thema Gesundheit interessant.

Dass es uns gut geht, ist in den meisten Fällen selbstverständlich, und irgendwie auch unwichtig. Wie viele Rädchen funktionieren müssen, damit wir uns drehen, wir arbeiten, fühlen, Ideen haben und all das tun, was wir halt tun, ist keinem von uns bewusst. Zum Glück, sonst wären wir den lieben langen Tag nur damit beschäftigt, zu hoffen, dass wir nicht vergessen zu atmen.

Und das funktioniert solange, bis es uns nicht mehr gut geht. Und plötzlich sind wir nicht mehr am Funktionieren, irgendwas läuft schief. Das kann eine Erkältung sein, oder ein gebrochener Arm. Aber auch das ist noch kein Problem, solange wir eine Aussicht darauf haben, dass nach einem Zeitraum X wieder Normalität einkehrt. Und alles wieder so tickt wie vor dem Malheur.

Was aber, wenn wir keine Ahnung haben, was schief läuft, welches Rädchen hakt? Und sonst auch keiner? Kein Arzt einem sagen kann “Herr Schenk, in drei Wochen sind Sie wieder auf dem Dampfer.”? Dann ist Holland in Not. Denn plötzlich merken wir, wie sehr uns das Nichtfunktionieren einschränkt. Und wie Groß die psychische Belastung ist, keinen Ausblick auf Genesung, oder wenigstens Besserung zu haben.Es gibt dann Momente, da kann man an nichts anderes mehr denken. Und darunter leidet natürlich die eigene Leistung. Am Arbeitsplatz und zu Hause.

Und da kommt die Unterstützung ins Spiel, auf die wir so angewiesen sind, wenn es um mentale Dinge geht. Zum einen natürlich jemand, der einem sagt, dass das schon wieder wird. Zum anderen aber auch das Verständnis des Arbeitgebers, der nicht nur auf Leistung pocht. Sondern sich auch der Tatsache bewusst ist, dass ein Angestellter mit seine wichtigste Investition ist, und der möglichst effektiv wieder gesund werden sollte.

Mit meinem Kinkerlitzchen von Ohrenproblem ist das natürlich recht einfach. Richtig schlimm wird es, wenn es sich tatsächlich um etwas Unbekanntes oder Unheilbares handelt.

Hauptsache gesund ist mir also tatsächlich ein Anliegen, und wenn wir anderen Gesundheit wünschen, dann meinen wir das hoffentlich auch so. Immer im Hinterkopf, dass man wissen sollte, wie wenig man selbst die Abwesenheit von Gesundheit gebrauchen könnte.

In diesem Sinne: Glück, Reichtum und vor allem Gesundheit für euch alle,
jan



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/06/22/die-montagsmeinung-hauptsache-gesund.aspx';

Speaker @ RIAWorld am 23.6.09

22.06.2009 16:09:52 | Jan Schenk

Morgen startet die RIAWorld in München im ICM.

Um 16:15 gibt es dann den Vortrag “Silverlight und WPF - Das gemischte RIA-Doppel” mit meiner Wenigkeit. Am Tag drauf könnt ihr euch dann auch noch in der Infoarena II der Internet World das Showcase zum Internet Explorer 8 anschauen. Schon wieder mit mir auf der Bühne. Wo soll das nur hinführen?

Mich würde es freuen, euch zu einer dieser Veranstaltungen zu sehen. Oder zu beiden?

RIAWorld-Speaker



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/06/22/speaker-riaworld-am-23-6-09.aspx';

Software für Windows Mobile 6.x entwickeln

22.06.2009 14:11:18 | Peter Kirchner

Wenn Sie sich fragen, wie Sie Anwendungen für Windows Mobile 6.x entwickeln können und wie Sie dort einsteigen können, dann empfehle ich Ihnen die Lektüre des Übersichtsartikels von meinem Kollegen Frank Prengel.

Frank beschäftigt sich in diesem Artikel mit folgenden Themen:

  1. Plattformen, Gerätetypen, Formfaktoren
  2. Anwendungsarten
  3. Programmierwerkzeuge
  4. Datenbanken
  5. Architektur, Guidelines
  6. 3rd Party Libraries
  7. Partnerprogramm
  8. Vermarktung
  9. Trainingsmaterial & Ressourcen
  10. Support & Services
  11. Kontakt

Software für Windows Mobile 6.x entwickeln – wie fange ich an?

Updates zum Einsteigerdokument

Zu Besuch bei der DNUG Frankfurt

22.06.2009 12:12:05 | Lars Keller

Am 18.06.2009 war ich bei der DNUG Frankfurt und habe zwei Vorträge zum Thema VSTO/OBA gehalten.

Erst habe ich ein wenig über die Grundlagen der VSTO Programmierung berichtet und im zweiten Vortrag die Interaktion zwischen den verschiedenen MS Office Applikationen anhand eines kleinen WorkFlows aufgezeigt. Der WorkFlow ging über eine ankommende Bestell-E-Mail in Outlook über Excel bis hin zur Generierung einer Rechnung in Word. In jeder Applikation habe ich zusätzliche Daten aus einer Datenbank verarbeitet. Weiterhin habe ich den leichten Umgang mit Data Island gezeigt und wie man diese sinnvoll einsetzt. Die rege Diskussion ging auch nach den Vorträgen in einem ansässigen Brauhaus weiter, wo der Abend gemütlich ausklang!

Hier meine Folien und Beispielcodes zu den Vorträgen:

Vortrag 1: Office und .NET – zwei Welten wachsen zusammen


Vortrag 2: Interaktionen in der “Office-Welt” mit .NET


Der Abend hat mir sehr viel Spaß gemacht und nebenbei konnte ich mir auch noch die Microsoftzentrale in Bad Homburg anschauen!

tech.ed im November in Berlin!

22.06.2009 11:00:52 | Peter Kirchner

DER Jahres-Event für IT-Professionals und Entwickler –
jetzt frühzeitig anmelden und sparen!

Der Name „tech.ed“ steht stellvertretend für spannende Produkt- und Technologievorstellungen von Microsoft – aber auch für DIE Plattform, um hochkarätige internationale Microsoft- und Industrieexperten sowie zahlreiche Branchenkollegen aus ganz Europa zu treffen.

Die tech.ed Europe 2009 ist gerade für Sie ein Muss! Warum? Sie findet zum ersten Mal in Berlin statt. Damit unterstreicht Microsoft die Verbundenheit zum bedeutenden Wirtschafts- und Technologiestandort Deutschland. Und dadurch verringert sich auch der finanzielle Aufwand Ihrer Teilnahme. Ebenfalls eine Premiere: In diesem Jahr wird die tech.ed für IT-Pros und Entwickler gemeinsam ausgerichtet – und nicht wie bisher getrennt an aufeinander folgenden Terminen. Eine Anregung vieler Teilnehmer, die Microsoft gern aufgenommen hat und in Berlin nun verwirklicht.

Kommen auch Sie zur wichtigsten Microsoft Technologieveranstaltung für IT-Pros und Entwickler aus ganz Europa!

Lernen Sie vom 9. – 13. November die neuesten Entwicklungen und Trends aus erster Hand kennen.
Erfahren Sie, wie Sie Ihre tägliche Arbeit erleichtern und um zusätzliche Facetten bereichern können.

Freuen Sie sich darauf, aus über 600 Lernmöglichkeiten Ihr persönliches Programm zusammenzustellen und erschließen Sie sich neues Wissen, um zukünftigen Herausforderungen souverän zu begegnen. Denn dies ist eine Ressource, die gerade in der heutigen Zeit einen entscheidenden Wettbewerbsvorteil bedeutet.

clip_image001

Nutzen Sie darüber hinaus die Gelegenheit, Ihr persönliches Netzwerk zu erweitern. Denn auch in diesem Jahr erwarten wir einige tausend Teilnehmer, die Ihre Interessen teilen und mit denen Sie Kontakt knüpfen und Erfahrungen austauschen können.

Und das Beste: Sie erhalten die Möglichkeit, durch Ihre frühe Anmeldung von erheblichen Preisnachlässen zu profitieren. Denn je schneller Sie sich Ihr Ticket für die tech.ed sichern, desto mehr sparen Sie. Nutzen Sie diesen exklusiven Vorteil!

Bis bald in Berlin – wir freuen uns auf Sie!

P.S.: Bleiben Sie immer auf dem Laufenden über unseren Twitter-Kanal @ http://twitter.com/teched_europe

Silverlight Webpart für SharePoint

20.06.2009 21:43:05 | Thorsten Hans

SharePoint  Silverlight

Wie man den SharePoint Silverlight sprechen lernt, habe ich in diesem Post beschrieben. Im heutigen Post geht es darum ein erstes Beispiel zu entwickeln, hierbei wird ein einfaches Silverlight UserControl in einem SharePoint Webpart bereitgestellt.

 

Das Silverlight Control

 

Zunächst muss ein Silverlight UserControl erstellt werden, ich habe zur Demonstration ein einfaches Control gewählt welches eine kleine Message anzeigt wenn der Anwender später mit der Maus über das Control hovert.

Hier kurz das XAML des Controls

 

   1:  <UserControl x:Class="SilverlightWebPart.Page"
   2:      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   3:      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
   4:      Width="400" Height="100">
   5:      <Canvas Width="400" Height="100" >
   6:          <Canvas.Resources>
   7:              <Storyboard x:Name="FadeIn">
   8:                  <DoubleAnimation  Storyboard.TargetName="tbSilverlight"
   9:   Storyboard.TargetProperty="Opacity" From="0.1" To="1.0" Duration="0:0:2"/>                
  10:              </Storyboard>
  11:              <Storyboard x:Name="FadeOut">
  12:                  <DoubleAnimation Storyboard.TargetName="tbSilverlight" 
  13:  Storyboard.TargetProperty="Opacity" From="1.0" To="0.1" Duration="0:0:2"/>
  14:              </Storyboard>
  15:          </Canvas.Resources>
  16:          <Canvas.Background>
  17:              <LinearGradientBrush>
  18:                  <GradientStop Color="White" Offset="0"/>
  19:                  <GradientStop Color="LightSteelBlue" Offset="1"/>
  20:                  <GradientStop Color="White" Offset="2"/>
  21:              </LinearGradientBrush>
  22:          </Canvas.Background>
  23:          <TextBlock x:Name="tbSilverlight" Canvas.Top="36" Opacity="0.1"  
  24:  Width="400" Height="100" Text="Hello SharePoint, I am Silverlight"
  25:                     TextAlignment="Center" FontSize="22" MouseEnter="tbSilverlight_MouseEnter"
  26:   MouseLeave="tbSilverlight_MouseLeave"/>
  27:      </Canvas>
  28:  </UserControl>

 

Wie man sieht ein ganz einfaches XAML, die Animationen werden im MouseEnter und im MouseLeave gestartet, hier die entsprechende Realisierung im CodeBehind.

 

   1:       private void tbSilverlight_MouseEnter(object sender, MouseEventArgs e)
   2:          {
   3:              Storyboard sb = (Storyboard)FindName("FadeIn");
   4:              if (sb != null)
   5:                  sb.Begin();
   6:          }
   7:   
   8:          private void tbSilverlight_MouseLeave(object sender, MouseEventArgs e)
   9:          {
  10:              Storyboard sb = (Storyboard)FindName("FadeOut");
  11:              if (sb != null)
  12:                  sb.Begin();
  13:          }

 

Die Rahmenbedingungen

 

Damit das Silverlight Control beim Seitenaufruf auch an den Browser übertragen werden kann, muss ein spezielles Verzeichnis im Rootfolder der SharePoint WebApplicatioin angelegt werden. Hierzu kann man entweder den weg über den Windows Explorer oder über das IIS-Admin-Interface gehen.

Wenn die SharePoint Instanz auf dem Standard Port 80 läuft wäre dass demnach C:\Inetpub\wwwroot\wss\VirtualDirectories\80\. Hier muss das Verzeichnis ClientBin angelegt werden. Grundsätzlich ist es empfehlenswert sich eine gut verständliche Ordnerstruktur unterhalb des Ordners ClientBin anzulegen um den Überblick zu behalten.

Für dieses Beispiel habe ich noch einen Unterordner SharePointSpeeksSilverlight angelegt.

Mein kompiliertes Silverlight Control HelloSharePoint.xap kopiere ich nun in dieses Verzeichnis, also C:\Inetpub\wwwroot\wss\VirtualDirectories\80\ClientBin\SharePointSpeeksSilverlight\HelloSharePoint.xap

 

Das SharePoint WebPart

 

Nachdem in Silverlight nun alles erledigt wurde, geht es an das SharePoint WebPart, hierzu wird ein einfaches SharePoint WebPart mit der Hilfe der SharePoint Extensions für Visual Studio erstellt.

Dem neuen WebPart Projekt müssen noch 2 DLL’s bekannt gemacht werden

  1. System.Web.Silverlight.Dll
  2. System.Web.Extensions.Dll

Im Codefile des Webparts muss nun lediglich ein ScriptManager hinzugefügt und das Silverlight UserControl geladen werden. Hierzu erstellt man einfach, wie bei allen anderen Controls, eine Klassenvariable.

   1:  Silverlight mySilverlightUserControl = null;

 

Das Laden des ScriptManagers erfolgt im OnLoad Event des WebParts

 

   1:protected override void OnLoad(EventArgs e)
   2:{
   3:  base.OnLoad(e);
   4:  ScriptManager sm = ScriptManager.GetCurrent(this.Page); 
   5:  if (sm == null)
   6:  {
   7:     sm = new ScriptManager();
   8:     this.Controls.AddAt(0, sm);
   9:  }
  10:}

 

In der Methode CreateChildControls wird nun das Silverlight Control geladen und in die Controls Collection des Webparts hinzugefügt

   1:protected override void CreateChildControls()
   2:{
   3:  base.CreateChildControls();
   4:  mySilverlightUserControl = new Silverlight();
   5:  mySilverlightUserControl.ID = "HelloSilverlightControl";
   6:  mySilverlightUserControl.Source = "/ClientBin/SharePointSpeeksSilverlight/HelloSharePoint.xap";
   7:  mySilverlightUserControl.Width = new Unit(400, UnitType.Pixel);
   8:  mySilverlightUserControl.Height = new Unit(100, UnitType.Pixel);
   9:  this.Controls.Add(mySilverlightUserControl);
  10:}

 

Was wird hier gemacht? Nun es wird eine neue Instanz der Silverlight Klasse erstellt und diesem Control eine eindeutige ID zugewiesen. Der wichtigste Teil in diesem Snippet ist das Angeben der Quelle des Silverlight Controls, was in Zeile 6 geschieht. Anschließend wird noch die Größe angegeben und das Silverlight Control in die ControlCollection des WebParts gesteckt.

 

Das Ergebnis

 

Nach dem Deployment der Solution kann das WebPart wie gewohnt im SharePoint aktiviert werden. Hier das Ergebnis

 

SharePoint speeks Silverlight

 

Wie man sehen kann, ist es sehr einfach Silverlight in SharePoint zu verwenden. Zudem macht es wirklich Spass zu sehen wie zwei große Technologien zusammenkommen. Leider hatte ich bis heute noch nicht die Gelegenheit viel mit Silverlight zu machen, klar einige kleine Tests und mal grob ausprobieren was so geht.. aber darüber hinaus war ich noch nicht viel in Berührung mit SL.

 

Doch ich denke durch die Verwendung in SahrePoint werde ich in nächster Zukunft wohl etwas mehr Silverlight machen können und dürfen.. :D

 

Was meint Ihr zu diesem Thema? Bereits Erfahrungen im Zusammenspiel von SharePoint und Silverlight?

 

DotNetKicks-DE Image

Xtopia [kompakt] 09: Videos und Vorträge jetzt als Download verfügbar…

20.06.2009 14:38:50 | Peter Kirchner

Die erste Xtopia [kompakt]-Roadshow rund um die Themen Web/UX und Rich Internet Applications war ein voller Erfolg. Von April bis Mai 2009 war Microsoft mit hochkarätigen Partnern auf der Xtopia im Kleinformat unterwegs: In München, Karlsruhe, Hamburg, Köln, Berlin und Frankfurt erlebten jeweils bis zu 100 Teilnehmer Vorträge und Demos zu den Themen Web, User Experience und Silverlight/Rich Internet Applications.

clip_image002

Wenn Sie in diesem Jahr keine Zeit hatten, bei Xtopia [kompakt] dabei zu sein, finden Sie auf der Website der Xtopia [kompakt] ab sofort (fast) alle Vorträge als PDF, viele Videos und umfangreiche Informationen rund um die Inhalte der vergangenen Roadshow. Im Mittelpunkt stehen Microsoft Surface, Windows 7, Silverlight 3 und Internet Explorer 8. Partner wie PC-Ware und das deutsche RIA-Forum begleiteten uns auf der Roadshow. Agenturen aus der Design- und Webbranche ergänzten die Vorträge mit Erfahrungsberichten zu Design, User Experience, Rich Internet Applications und Webentwickung. Beispielsweise zeigte CRM-Spezialist CAS in einem Vortrag die Vorteile von Silverlight gegenüber AJAX und Flash bei der Entwicklung professioneller Unternehmensanwendungen auf. Weitere Erfahrungsberichte kamen von Quark, Ergosign, maximago, Pixelpark AG, T-Systems MMS, UID, Perun.net und Sensory Minds.

Hier entlang zu den gesammelten Präsentationen der XTOPIA [kompakt] 09  und den Session-Videos: http://blogs.msdn.com/riablog/archive/2009/06/09/xtopia-kompakt-09-videos-und-vortr-ge-jetzt-als-download-verf-gbar.aspx bzw.  http://snipurl.com/jtiex

Patch Producing Pal

19.06.2009 23:47:34 | Andre Loker

My contribution to the OSS community for today:

fnh-patches

http://code.google.com/p/fluent-nhibernate/issues/list

Warum PermanentRedirect statt Redirect?

19.06.2009 16:11:55 | Klaus Bock

In der heutigen Zeit, in der SEO eines der Buzzwörter ist die man andauernd um die Ohren gehauen bekommt, ist die Sichtweise einer Suchmaschine auf eine Website oder ein Blog sehr wichtig geworden. Abgesehen von den Schlüsselwörtern einer Website oder eines Blog, ist der sogenannte “double content” ein Kriterium, das in den diversen Webmaster Tools immer wieder angemahnt wird. Unter “double content” versteht man die Situation, in der der selbe Inhalt unter verschiedenen Links verfügbar ist. Das beginnt schon in der Startseite eines Blog oder einer Website. Naturgemäß wird mit dem Aufruf der Domäne und der Startseite ein und der selbe Inhalt wieder gegeben; und das ist bereits “double content”. So geben z.B.: der Aufruf von http://blog.klaus-b.net/ und http://blog.klaus-b.net/Default.aspx den selben Inhalt zurück. Kein Kunststück, denn sie verweisen beide auf die Startseite Default.aspx. Für eine Suchmachine sind dies jedoch zwei verschiedene Ressource. Was also tun?

Na ganz einfach; eine permanente Weiterleitung einrichten und das Problem hat sich erledigt.

public partial class Default : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // verhindert eine Google Meldung über "double content" der
        // Webroot und der Default.aspx
        if (this.Request.Url.AbsolutePath.Equals(Utils.AbsoluteWebRoot.AbsolutePath))
        {
            this.Response.PermanentRedirect("~/Default.aspx");
        }
    }
}
Im obigen Beispiel wird in der Default.aspx der Webroot verglichen, ob die angeforderte URL gleich der URL der Domäne ist. Wenn dem so ist, wird eine Permanente Weiterleitung (301) an den Client gemeldet und zur Default.aspx der Webroot, die ja bereits geladen wird, weitergeleitet.
Bei der Methode PermanentRedirect in Zeile 9 des Listings, handelt es sich um eine einfache Erweiterungsmethode.

public static void PermanentRedirect(this HttpResponse response, string url)
{
    string location = null;

    // TODO: prüfen ob die meisten URL-Variatonen abgedeckt sind
    if (url.StartsWith("http:", StringComparison.OrdinalIgnoreCase)
        || url.StartsWith("https:", StringComparison.OrdinalIgnoreCase))
    {
        url = HttpUtility.HtmlAttributeEncode(url);
    }

    if (VirtualPathUtility.IsAbsolute(url))
    {
        location = url;
    }
    else if (VirtualPathUtility.IsAppRelative(url))
    {
        location = VirtualPathUtility.ToAbsolute(url);
    }
    else
    {
        location = url;
    }

    response.Status = "301 Moved Permanently";
    response.StatusCode = 301;
    response.AddHeader("Location", location);
    response.End();
}

Hier wird lediglich der Status der Antwort auf 301 gesetzt, der Header Location mit der neuen Adresse versehen und das ganze an den Client gesendet. Bei der nächsten Indizierung der Seite durch eine Suchmaschine wird bei Aufruf der Webroot der Status 301 mit der Default.aspx als neue Adresse gesendet und somit liegt kein “double content” mehr vor.

Die selbe Vorgehensweise bietet sich immer dann an, wenn in der selben Situation auf immer die selbe Ressource weitergeleitet wird. Es ist z.B.: in einer Website kein direkter Download von extern erlaubt. So wird der Referrer geprüft ob die Anforderung von extern kommt. Wenn ja, PermanentRedirect auf die dafür vorgesehene Seite. Eine Suchmaschine die den externen Link indiziert, ist nichts anderes als eine Anforderung mit ungültigem Referrer.
Es gibt mit Sicherheit noch unzählige weiter Anwendungsmöglichkeiten.

Seit ich die beschriebene Methode verwende, habe ich in den Webmaster Tools keine Meldungen mehr über “double content”, doppelte Titel oder Beschreibungen.

Silverlight Webparts für WSS oder MOSS

19.06.2009 15:52:19 | Thorsten Hans

 share-point-logo[1]silverlightlogo[1]

Silverlight bietet die Möglichkeit SharePoint (egal ob WSS oder MOSS) um RichUI Elemente zu erweitern, mit wenigen Handgriffen kann SharePoint die Silverlight-Unterstützung beigebracht werden. In diesem kurzen Post möchte ich zunächst die Rahmenbedingungen etwas erläutern was genau benötigt wird um Silverlight Lösungen für SharePoint bereitzustellen.

Allgemeines SharePoint Developer System

  • Windows Server >= 2k3
  • Microsoft Visual Studio 2008
  • Windows SharePoint Services 3.0 oder Microsoft Office SharePoint Server 2007
  • .Net Framework 3.5
  • SharePoint Extensions for Visual Studio

Um Silverlight Lösungen erstellen zu können, müssen noch folgende Komponenten auf dem System installiert werden

  • Visual Studio 2008 ServicePack 1
  • Silverlight Tools for Visual Studio 2008
  • Silverlight SDK

Microsofts Designer Tools aus der Expression Serie werden nicht zwingend benötgt, bieten sich aber für größere Projekte an.

 

Die Installation der Komponenten brauche ich nicht zu beschreiben, da es sich hierbei um Setuppakete handelt, die durch einfaches Doppelklicken installiert werden können. Nachdem nun alle Komponenten auf dem System verfügbar sind, müssen noch wenige Schritte durchgeführt werden um  SharePoint und Silverlight zu verheiraten.

  • Die Silverlight Library (System.Web.Silverlight.dll) muss im GAC installiert werden
    • Die Lib ist unter C:\Programme\Microsoft SDKs\Silverlight\v2.0\Libraries\Server\ zu finden
  • Der Silverlight MIME Type “.xap” muss im IIS installiert werden
    • Hierbei kann dies entweder auf root-Ebene im IIS geschehen, oder explizit auf einer SharePoint Instanz realisiert werden
Property Value
Extension .xap
MIME type application/x-silverlight-app
  • Die web.config der gewünschten SharePoint Instanzen muss angepasst werden

 

Anpassungen einer SharePoint web.config

Sollte das XML nicht vollständig lesbar sein, könnt ihr alle relevanten Snippets auch hier downloaden.

In der web.config müssen neue Config-Sections eigetragen werden.Dafür wird das Node <configuration><configSections> um folgendes erweitert

   1:  <sectionGroup name="system.web.extensions" 
   2:      type="System.Web.Configuration.SystemWebExtensionsSectionGroup, 
System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
   3:              
   4:     <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
   5:             <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
   6:                  <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
   7:                      <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
   8:                      <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> 
   9:                      <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
  10:                      <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
  11:                  </sectionGroup>
  12:              </sectionGroup>
  13:          </sectionGroup>

 

Um SharePoint die Silverlight Library bekannt zu machen, erweitert man den Knoten <configuration><system.web><compilation><assemblies>

   1:  <add assembly="System.Web.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

 

Nun muss SharePoint noch ein paar Controls kennenlernen, diese sollten den ASP.Net Entwicklern bekannt sein und müssen unter <configuration><system.web><pages><controls> eingefügt werden

   1:  <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
   2:  <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

 

Jetzt kommen noch die Ajax Http-Handler unter <configuration><system.web><httpHandlers>  hinzu

   1:  <remove verb="*" path="*.asmx"/>
   2:  <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
   3:  <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
   4:  <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>

 

Dann noch ein Http-Modul unter <configuration><system.web><httpModules>

   1:  <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
 
Eine Custom Configuration Section für den IIS wird am Ende der <configuration> Node eingefügt
   1:  <system.webServer>
   2:        <validation validateIntegratedModeConfiguration="false"/>
   3:          <modules>
   4:               <remove name="ScriptModule"/>
   5:             <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
   6:          </modules>
   7:          <handlers>
   8:             <remove name="WebServiceHandlerFactory-Integrated"/>
   9:             <remove name="ScriptHandlerFactory"/>
  10:             <remove name="ScriptHandlerFactoryAppServices"/>
  11:             <remove name="ScriptResource"/>
  12:             <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  13:              <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  14:              <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  15:          </handlers>
  16:      </system.webServer>

 

Zum guten Schluss kommen noch Assembly-Abhängigkeiten unter <configuration><runtime>< assemblyBinding>  dazu

 

   1:      <dependentAssembly>
   2:          <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
   3:          <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
   4:      </dependentAssembly>
   5:      <dependentAssembly>
   6:          <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
   7:          <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
   8:      </dependentAssembly>

 

 

Nach diesem XML-Fight ;-) spricht die SharePoint Instanz Silverlight und die neue Art der SharePoint Anpassung kann begonnen werden…

 

Ein kleines Beispiel SilverLight WebPart for SharePoint folgt bald…

 

DotNetKicks-DE Image

Tabellenlose Dateneingabeformulare im Web

19.06.2009 14:19:36 | Andre Kraemer

Wer in den letzten Jahren auch nur am Rande etwas mit der Entwicklung von Webapplikationen zu tun hatte, sollte wissen, dass der Einsatz von Tabellen zur Gestaltung des Layouts nicht mehr wirklich State-Of-The-Art sind. Schön und gut, aber wie sieht es mit Dateneingabefomularen aus? Diese sind häufig zweispaltig und mehrzeilig aufgebaut, so dass der Einsatz von Tabellen nicht komplett abwegig wäre und zumindest noch halbwegs sinnvoll erscheint.

Doch leider weit gefehlt. Jeder, der sich ein solches Eingabeformular von einem Screenreader vorlesen lässt, merkt schnell, dass auch hier Tabellen nicht das Mittel der Wahl sein sollten. Wie sieht nun aber die Alternative aus? In der Praxis stolpert man häufig über wüst zusammen geschusterte DIV Tags mit fixen Positionierungen, deren einziger Zweck in der Emulation von Tabellenzellen besteht. Dies mag zwar bereits ein Schritt in die richtige Richtung sein, aber wenn man ehrlich ist, wurde das Problem nur verlagert.

Weitaus interessanter finde ich Cameron AdamsAnsatz, den ich seit einiger Zeit auch erfolgreich in einigen Projekten zum Einsatz gebracht habe. Wer also Eingabeformulare fürs Web erstellen muss, und keine Lust auf Tabellen hat, sollte sich auf jeden Fall diesen Link inklusive der verschiedenen Beispiele und der Quellcodes ansehen.



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

.NET User Group Koblenz zu Gast an der Uni Koblenz

19.06.2009 13:45:16 | Andre Kraemer

Von heute an veranstaltet die Universität Koblenz sieben Tage lang eine „Sommer-Uni“ mit Themen, die etwas außerhalb des normalen Lehrplans angesiedelt sind. Mit dabei ist die .NET User Group Koblenz, die am 24. Juni zwei Vorträge aus dem .NET-Umfeld beisteuert: „Moderne Anwendungsarchitekturen mit .NET “ und „User Interface Design mit der WPF“.

Was ich mich dabei nur frage: Wieso liegt .NET außerhalb des normalen Lehrplans ;-)



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

PHP auf Windows Azure - php.ini wird nicht geladen? Gelöst!

19.06.2009 10:48:31 | Jan Schenk

Wer meinen Blogeintrag PHP auf Windows Azure per fastCGI gelesen hat, und das Ganze ausprobiert hat, dem mag es ähnlich gegangen sein wie mir: die php.ini wurde nicht eingelesen, stattdessen versuchte die php-cgi.exe aus dem Verzeichnis C:\Windows zu lesen, das in der Wolke natürlich nicht existiert, geschweige denn man dort Schreibrechte für eine ini-Datei hat.

imageJetzt kommt die Lösung: Im Solution Explorer von Visual Studio muss die php.ini (die man ja auch erst anlegen muss, oder einfach die php.ini-recommended umbenennt) als Content deklariert werden.

Und schon klappt es auch mit der php.ini, wie man in der Ausgabe der phpinfo() sehen kann.

image 

Nachdem nun erfolgreich die php.ini interpretiert wird, ergibt sich noch ein weiteres Problem. Die Library für die PHP SQL Server Kommunikation wird nicht erfolgreich geladen, was zu dieser Fehlermeldung führt:

image

Nur nicht zaudern, für jetzt einfach diese Zeilen in der php.ini auskommentieren

;[PHP_MSSQL]
;extension=php_mssql.dll

und die Fehlermeldung löst sich in Wohlgefallen auf. Der elegantere und zukunftssicherere Weg ist natürlich die dll verfügbar zu machen. Dafür installieren wir den SQL Server Driver for PHP. In diesem Installer sind zwei dll Dateien: php_sqlsrv.dll und php_sqlsrv_ts.dll. Wahrscheinlich seid ihr schlauer als ich und habt schon gemerkt, dass es sich um die Non-Thread-Safe (ohne was hinter sqlsrv) respektive die Thread-Safe-Variante mit _ts im Dateinamen handelt.

Das entsprechende File je nach verwendeter PHP-Installation wird in das Verzeichnis ext im php-Verzeichnis kopiert, und in Visual Studio per “Show all Files” und Rechtsklick dem Projekt hinzugefügt.

Nun können wir noch die entsprechende Zeile in der php.ini korrigieren:

[PHP_MSSQL]
extension=php_sqlsrv.dll

Das wars. Nun steht uns die PHP-Welt in der Wolke voll zur Verfügung.



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/06/19/php-auf-windows-azure-php-ini-wird-nicht-geladen-gel-st.aspx';

Webseiten melden & gewinnen: Microsoft Besserweb-Initiative für Webstandards

18.06.2009 11:02:21 | Jan Schenk

Mit einer Aktion, bei der alle nur gewinnen können, will Microsoft Deutschland in den kommenden Monaten dafür sorgen, dass Webseiten künftig möglichst umfassend den geltenden Webstandards folgen. Im Rahmen der „Besserweb“-Initiative sollen dabei Web-Angebote identifiziert werden, die mit dem Internet Explorer 8 bislang nicht korrekt angezeigt werden oder gar nicht funktionieren. Betreiber solcher Webseiten will Microsoft bei der standardkonformen Anpassung ihres Webservice unterstützen.
Als Betreiber einer Webseite kann man auch selber schnell und einfach für eine kurzfristige Lösung sorgen, wenn die eigene Seite im Internet Explorer 8 in dessen Standardansicht offensichtlich nicht korrekt dargestellt wird oder funktioniert: Kurzfristig die eigene Seite kompatibel machen
image User, die bei der Aktion mitmachen möchten und entsprechende Webseiten melden, können dabei sogar gewinnen: jeden Monat eines von 160 T-Shirts und bei der Schlussverlosung weitere wertvolle Preise wie Xbox 360, Netbook mit Windows 7 oder eine Visual Studio 2010 Professional Edition. Die Besserweb-Initiative läuft noch bis zum Jahresende und jede Einreichung zählt sogar doppelt – sowohl für die monatliche Verlosung, als auch für die Jahresendverlosung mit wertvollen Hauptgewinnen.

Ihr gewinnt Preise. Das Web gewinnt an Wert: http://www.msdn-online.de/BesserWeb



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/06/18/webseiten-melden-gewinnen-microsoft-besserweb-initiative-f-r-webstandards.aspx';

MSDN bietet nun erstmals Webcasts exklusiv für Heise-Leser an

18.06.2009 09:05:00 | Oliver Scheer

Eine Auswahl von MSDN-Webcasts wird nun für einen gewissen Zeitraum exklusiv über den Developer-Channel auf Heise.de zur Verfügung gestellt. Im Klartext bedeutet dies, dass Heise-Leser auf die ausgewählten Webcasts bereits 2 Wochen vor dem Release auf dem MSDN Portal zugreifen können. Damit wird die gute Zusammenarbeit zwischen Heise und MSDN ein weiteres Mal unterstrichen. Den Anfang dieses Projektes bildet die 5tlg. Webcast-Serie von Patrick A. Lorenz zur Pragmatischen Webarchitektur mit ASP.Net 3.5. Zu den ersten beiden Teilen sind auf Heise auch bereits die News veröffentlicht worden:

http://www.heise.de/developer/MSDN-Webcast-zur-pragmatischen-Web-Architektur-mit-ASP-NET-3-5--/news/meldung/140148

http://www.heise.de/developer/MSDN-Webcast-zur-Web-Architektur-mit-ASP-NET-3-5-Teil-2--/news/meldung/140387

Webseiten melden & gewinnen: Microsoft Besserweb-Initiative für Webstandards

18.06.2009 07:35:54 | Oliver Scheer

Mit einer Aktion, bei der alle nur gewinnen können, will Microsoft Deutschland in den kommenden Monaten dafür sorgen, dass Webseiten künftig möglichst umfassend den geltenden Webstandards folgen. Im Rahmen der „Besserweb“-Initiative sollen dabei Web-Angebote identifiziert werden, die mit dem Internet Explorer 8 bislang nicht korrekt angezeigt werden oder gar nicht funktionieren. Betreiber solcher Webseiten will Microsoft bei der standardkonformen Anpassung ihres Webservice unterstützen.
Als Betreiber einer Webseite kann man auch selber schnell und einfach für eine kurzfristige Lösung sorgen, wenn die eigene Seite im Internet Explorer 8 in dessen Standardansicht offensichtlich nicht korrekt dargestellt wird oder funktioniert: Kurzfristig die eigene Seite kompatibel machen
User[KG1] , die bei der Aktion mitmachen möchten und entsprechende Webseiten melden, können dabei sogar gewinnen: jeden Monat eines von 160 T-Shirts und bei der Schlussverlosung weitere wertvolle Preise wie Xbox 360, Netbook mit Windows 7 oder eine Visual Studio 2010 Professional Edition. Die Besserweb-Initiative läuft noch bis zum Jahresende und jede Einreichung zählt sogar doppelt – sowohl für die monatliche Verlosung, als auch für die Jahresendverlosung mit wertvollen Hauptgewinnen.

Ihr gewinnt Preise. Das Web gewinnt an Wert:
http://www.msdn-online.de/BesserWeb


image

Community News

18.06.2009 02:25:00 | Jürgen Gutsch

Heute Abend um 19:00 Uhr wird Albert Weinert im Rahmen seiner User Group Tour beim .NET-Stammtisch Konstanz-Kreuzlingen einen Vortrag über ASP.NET MVC Framework halten.

Das ASP.NET MVC Framework ist ein zusätzlicher Weg Web-Anwendungen mit .NET zu entwickeln.

Albert Weinert zeigt in diesem Vortrag wie man Anwendungen mit dem Framework entwickelt, wie man diese automatisiert testen kann und gibt praxisrelevante Tipps & Tricks zur Entwicklung. Mit Beispielen aus einer "echten" Anwendung.

Unter anderem erfahren Sie etwas über

  • Routing
  • ActionFilter
  • Schreiben von HtmlExtensions
  • Testen von Controllern
  • Integrationstest mit WatIn
  • jQuery und das Framework
  • Datenbindung
  • Die Zukunft vom WebForms
  • und vieles mehr..

Die Veranstaltung findet wie immer in der FH-Konstanz, Raum F023 im Gebäude F statt. (Anfahrt)

Aktuelle News gibt es vom .NET-Stammtisch Konstanz-Kreuzlingen gibt es übrigens auch per Twitter: http://twitter.com/dotnetkk

.NET Open Space vom 11.07. bis 12.07.2009 in Ulm

Über den Twitter Account des .NET Open Space Süd kam eben noch die Meldung rein, dass die Anzahl der Plätze auf 70 aufgestockt worden ist. Das bedeutet (nachdem die Warteliste nachgerückt ist) dass jetzt wieder 8 Plätze frei sind. Wer also noch unbedingt teilnehmen möchte sollte sich schnell registrieren, denn beim .NET-Stammtisch Konstanz-Kreuzlingen werden heute nochmal kräftig die Werbetrommeln gerührt.

DotNetKicks-DE Image

Installationsprobleme beim SQL Server 2008 und Windows 7 oder Windows Server 2008

17.06.2009 18:39:46 | Lars Keller

Beim installieren des SQL Server 2008 Express auf einem Windows 7 Rechner brach die Installation immer wieder an der selben Stelle ab.

Bei mir Stand als letzter Installationsschritt: “sqlenginedbstartconfigaction_install_configrc_cpu32

Nach längerem googeln bin ich dann auf einen Forumspost von Prashant Thakwani gestoßen, welcher die Lösung beschreibt:

This failure often is caused by a system or domain policy removing the SeDebugPrivelege security privilege from the administrator account running setup. Verify that the account running has this privilege.

The AccessChk tool will print all privleges for an account (http://technet.microsoft.com/en-us/sysinternals/bb664922.aspx) by running:
accesschk.exe -a <Domain>\<Account> *

Alternatively, we can check this through your group policy editor as mentioned below:

Open Group Policy...
Start | Run | Type: gpedit.msc | OK |
Navigate to
Computer Configuration\Windows Settings\Security Settings\Local Policies\User Rights Assignment\Debug programs

The account through which we are trying to run the setup should be here ( besides the local admin on that machine). I included that here, restarted the server ( this is mandatory, gpupdate /force will not work) and ran the setup and it was successful this time.

SQL Server 2008 setup needs this privilege to start up the SQL Server process and listen to an event that signals back to setup that SQL Server successfully started.



This weblog is sponsored by netcreate OHG.

Installationsprobleme beim SQL Server 2008 und Windows 7 oder Windows Server 2008

17.06.2009 17:39:46 | Lars Keller

Beim installieren des SQL Server 2008 Express auf einem Windows 7 Rechner brach die Installation immer wieder an der selben Stelle ab.

Bei mir Stand als letzter Installationsschritt: “sqlenginedbstartconfigaction_install_configrc_cpu32

Nach längerem googeln bin ich dann auf einen Forumspost von Prashant Thakwani gestoßen, welcher die Lösung beschreibt:

This failure often is caused by a system or domain policy removing the SeDebugPrivelege security privilege from the administrator account running setup. Verify that the account running has this privilege.

The AccessChk tool will print all privleges for an account (http://technet.microsoft.com/en-us/sysinternals/bb664922.aspx) by running:
accesschk.exe -a <Domain>\<Account> *

Alternatively, we can check this through your group policy editor as mentioned below:

Open Group Policy...
Start | Run | Type: gpedit.msc | OK |
Navigate to
Computer Configuration\Windows Settings\Security Settings\Local Policies\User Rights Assignment\Debug programs

The account through which we are trying to run the setup should be here ( besides the local admin on that machine). I included that here, restarted the server ( this is mandatory, gpupdate /force will not work) and ran the setup and it was successful this time.

SQL Server 2008 setup needs this privilege to start up the SQL Server process and listen to an event that signals back to setup that SQL Server successfully started.

Installationsprobleme beim SQL Server 2008 und Windows 7 oder Windows Server 2008

17.06.2009 08:39:04 | Lars Keller

Beim installieren des SQL Server 2008 Express auf einem Windows 7 Rechner brach die Installation immer wieder an der selben Stelle ab.

Bei mir Stand als letzter Installationsschritt: “sqlenginedbstartconfigaction_install_configrc_cpu32

Nach längerem googeln bin ich dann auf einen Forumspost von Prashant Thakwani gestoßen, welcher die Lösung beschreibt:

This failure often is caused by a system or domain policy removing the SeDebugPrivelege security privilege from the administrator account running setup. Verify that the account running has this privilege.

The AccessChk tool will print all privleges for an account (http://technet.microsoft.com/en-us/sysinternals/bb664922.aspx) by running:
accesschk.exe -a <Domain>\<Account> *

Alternatively, we can check this through your group policy editor as mentioned below:

Open Group Policy...
Start | Run | Type: gpedit.msc | OK |
Navigate to
Computer Configuration\Windows Settings\Security Settings\Local Policies\User Rights Assignment\Debug programs

The account through which we are trying to run the setup should be here ( besides the local admin on that machine). I included that here, restarted the server ( this is mandatory, gpupdate /force will not work) and ran the setup and it was successful this time.

SQL Server 2008 setup needs this privilege to start up the SQL Server process and listen to an event that signals back to setup that SQL Server successfully started.

Media-Dateien, Fonts einbetten in WPF Anwendungen - Mini Tutorial

16.06.2009 18:52:00 | Jens Peter Kleinau

Der New Yorker Nick Thuesen schrieb in seinem Blog über das Einlagern von Fonts in einer Windows Presentation Foundation (WPF) Anwendung ("Embedding and Referencing Fonts in your application and/or library"). Der Artikel beschreibt in Kürze die einfache Funktionalität, doch dass es im Endeffekt funktioniert - ist irgendwo auch ein Stück Zufall. In dem folgenden kleinen Artikel habe ich...

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

PHP auf Windows Azure per fastCGI

16.06.2009 17:56:53 | Jan Schenk

So simpel wie nie zuvor kann man jetzt seine PHP-Anwendung in der Wolke entwickeln. Was man dafür benötigt ist auch recht überschaubar:

- Visual Studio 2010 (mit VS08 geht es auch, in meinem Beispiel zeige ich heute aber nur 2010)
- Windows Azure Tools für Visual Studio 2010 (resp. VS08)
- Windows Azure SDK
- lokaler IIS7 mit aktivierter FastCGI-Erweiterung
- PHP > v5 von php.net (die gezippte Version, den Installer brauchen wir nicht)
- Einen Windows Azure Account, mit dem dazugehörigen Token um Windows Azure Anwendungen zu hosten

Ok, ein bisschen Installationsaufwand, aber lasst euch davon nicht abschrecken. Danach läuft alles wie geschnitten Brot. Ich starte Visual Studio mit Administrator-Rechten, damit die Windows Azure Development Fabric (die Simulation der Wolke) ausgeführt werden kann.

image

image

 

Nun erstelle ich ein neues Windows Azure Web Cloud Service Projekt.

 

 

 

 

 

image 

Danach aktiviere ich in der Datei ServiceDefinition.csdef die native Codeausführung. Der Parameter dafür ist vorhanden, ich muss nur den Wert von enableNativeCodeExecution auf true setzen.

 

 

 

 

Dann brauche ich im WebRole-Projekt eine neue Datei namens web.roleConfig. Diese wird über Add -> New… -> Text File hinzugefügt.
Als Inhalt geben wir der Datei die Konfiguration des Fabric-Webservers, damit das fastCGI-Modul weiß, was es tun muss:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.webServer>
        <fastCgi>
            <application fullPath="%RoleRoot%\php\php-cgi.exe"/>
        </fastCgi>
    </system.webServer>
</configuration>

Der application fullPath definiert, wo meine PHP-Installation zu finden ist. %RoleRoot% bezieht sich auf das Hauptverzeichnis der WebRole, dort wo auch die Default.aspx, web.config und unsere neu erstellte web.roleConfig liegen. Innerhalb des WebRole-Verzeichnisses lege ich nun noch das Verzeichnis “php” an, und entpacke dorthin meine PHP-Installation, die ich von http://php.net herunter geladen habe. Für die, die sich fragen, ob wir die gesamte Installation mit in die Wolke wuchten werden: Ja! Das hat den unschlagbaren Vorteil, dass wir volle Kontrolle über die eingesetzte Version von PHP haben.

Um das Verzeichnis php aber in unserem Projekt zur Verfügung zu haben, muss ich es aber in Visual Studio explizit zum Projekt hinzufügen:
imageimage

Ein kleiner Teil fehlt noch, um unsere PHP-App zum Wolkenflug zu überreden, und zwar die Definition, auf welche Dateien PHP zum Einsatz kommen soll. Ausserdem definiere ich, welche Dateien als Verzeichnis-Index verwendet werden sollen, in IIS-Sprech heißt der Parameter defaultDocument. Dafür müssen wir der web.config folgende Zeilen hinzufügen, und zwar zwischen
<system.webServer>
<handlers>

        <add name="PHP via FastCGI"   
             path="*.php"   
             verb="*"   
             modules="FastCgiModule"   
             scriptProcessor="%RoleRoot%\php\php-cgi.exe"   
             resourceType="Unspecified" />

</handlers>

      <defaultDocument>
        <files>
          <add value="index.php"/>
        </files>
      </defaultDocument>

Mit F5 kann ich das ganze jetzt schon mal lokal ausprobieren.

image

Viel spannender ist allerdings, wie diese Ausgabe in der Wolke aussieht:

image

Sehr einfach. Fast zu einfach. Skalierbarkeit, sie lebe hoch. Mit einer Änderung in der ServiceConfiguration.cscfg kann man die Zahl der bereitstehenden Instanzen anpassen. Das geht aber auch bei einer bereits deployten Applikation über das Web-Interface des Projektes:

image

Probiert es aus, falls irgendetwas unerwarteter Weise nicht funktioniert freue ich mich über Feedback!

jan



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/06/16/php-auf-windows-azure-mit-visual-studio-2010.aspx';

Vom Designer-Glamour zum Corporate Development: Zeit für neue Aufgaben.

16.06.2009 17:00:12 | Steffen Ritter

Ach, ein wenig wehmütig wird mir schon wenn ich zurückdenke wie ich vor knapp drei Jahren im Herbst 2006 zu Microsoft kam um in Deutschland das Designertools-Business rund um Expression Studio und Silverlight (damals noch WPF/E) aufzubauen. Nach gut 14 Jahren als MacUser und mehr als fünf Jahren in der Mac-Software-Branche – und ohne nennenswerte Windows-Erfahrung (die bei Microsoft intern bereits recht früh verfügbaren Betas von Vista waren sozusagen „mein erstes Windows“).

Es hat sich viel getan seit meinem ersten Arbeitstag bei Microsoft (12. September 2006): Expression Studio erscheint im Herbst in der dritten Generation, das Browserplugin Silverlight für Mac, Windows (und Linux) wurde mittlerweile um die 400 Millionen mal installiert und hat damit binnen nur anderthalb Jahren mehr Anhänger gewonnen als Firefox, Safari, Chrome, iPhone, Opera und Netscape gemeinsam in ihrer gesamten Lebenszeit (Quelle: http://marketshare.hitslink.com/browser-market-share.aspx?qprid=0). Ich besitze derzeit nicht mal mehr einen Mac, dafür läuft seit einem halben Jahr Windows 7 in verschiedenen Vorabversionen auf allen meinen privaten und beruflichen Notebooks (und ich vermisse den Spinning Beachball of Death keineswegs...)

Aber ich schweife ab… Worum geht es heute in diesem Beitrag? In Kurzform: Ich gebe das Designertools-Business nach knapp drei Jahren ab und werde mich ab 1. Juli 2009 um Visual Studio Team System und das deutsche MSDN Subscription Business kümmern.

Tim und Sebastian

Aber natürlich heißt das nicht dass Expression Studio und Silverlight eingestellt würden. Ganz im Gegenteil: Meine bisherige Rolle wird in die verantwortungsbewussten Hände zweier von mir sehr geschätzten Kollegen gelegt: Tim Fischer wird sich zukünftig um das Thema Silverlight kümmern, Expression Studio übernimmt Sebastian Grassl. Sprachrohr wird auch weiterhin das offizielle deutsche Silverlight- und Expression-Blog sein, zu finden unter dieser URL: http://blogs.msdn.com/riablog

Ein herzliches Dankeschön an alle die mich die letzten drei Jahre bei Microsoft oder allgemein in der deutschen RIA-Szene begleitet und unterstützt haben – wir sehen uns wieder!

Wie es mit diesem Blog hier weitergeht kann ich noch nicht sagen; vermutlich werde ich mittelfristig auch weiterschreiben, dann eben zum Thema Application Lifecycle Management, das überraschenderweise ebenfalls sehr spannend ist… Bis dahin noch ein paar klärende Informationen für alle die keine Ahnung haben wovon ich weiter oben gesprochen habe:

Visual Studio Team Was?

Microsoft Visual Studio Team System ist ein umfassendes System für professionelles Application Lifecycle Management (ALM) für Teams jeder Größe. Es umfasst Werkzeuge, Prozesse und Richtlinien mit deren Hilfe alle Beteiligten des gesamten Entwicklungsprozesses ihre individuellen Fähigkeiten besser nutzen und effektiver in Teams zusammenarbeiten können – von der ursprünglichen Idee zu Architektur und Design Ihrer Anwendung, über das Projektmanagement hin zur eigentlichen Programmierung, bis zur Qualitätssicherung und Deployment, sowie der Wartung und zukünftigen Erweiterung. Was Visual Studio Team System (VSTS) kann und bringt wird hier in sechs kurzen Videos sehr schön erklärt: http://www.sigs-datacom.de/sd/publications/media/

Was sind diese MSDN Subscriptions?

Die MSDN Subscription ist ein „Rundum-sorglos-Softwareabo“ für Softwareentwickler, Qualitätssicherung, IT-Profis und Support und ist der beste Weg, Visual Studio zu lizenzieren – ganz gleich welche Entwicklungswerkzeuge sie verwenden. Eine MSDN Subscription bedeutet geringere Kosten und bessere Planbarkeit, zukunftssichere Lizenzierung durch Software Assurance und umfassenden Zugriff auf viele Microsoft-Produkte für Test- und Entwicklungszwecke. Nicht zu verwechseln mit dem MSDN Flash. MSDN Flash ist der Name des Newsletters des Microsoft Developer Networks. Das Microsoft Developer Network (ebenfalls als MSDN abgekürzt) ist die umfangreiche kostenlose Ressourcen- und Informationsbibliothek für Softwareentwickler von Microsoft. Eine MSDN Subscription ist dagegen vereinfacht gesagt ein Lizenzmodell mit dem Firmen Unmengen Geld sparen können…

Silverlight Photo Explorer 1.0 mit PHP

16.06.2009 14:39:30 | Oliver Scheer

Eine der interessantesten Silverlight-Blogs der letzten Zeit ist diese: www.shinedraw.com .

Dort werden sehr interessante und typische Flash-Elemente in direkten Vergleich zu Silverlight entwickelt und gegenübergestellt. Inklusive Sourcecode.

Neuestes Schmankerl ist ein Explorer-like-Control zur Darstellung von einem Bilderverzeichnis inkl. Unterverzeichnisses auf einem Server mit Hilfe von Silverlight und PHP.

image

Mehr Infos: http://www.shinedraw.com/data-handling/silverlight-photo-explorer-10/

1. Blog-Parade vorbei

16.06.2009 12:36:06 | Peter Kirchner

455x97_BlogParade_anim

Wow, eine tolle Resonanz auf unsere erste MSDN-Blog-Parade. Vielen Dank an alle, die mitgemacht haben!

Gestern war der letzte Tag, um noch an der Verlosung teilnehmen zu können. Ich werde mir alle Top3-Empfehlungen ansehen und nächste Woche eine Übersicht präsentieren, welche Tools der Entwicklergemeinschaft am wichtigsten sind. Natürlich können Sie gerne noch weiterhin Ihre Top-Tools der Community mitteilen, wenn Sie dazu noch nicht gekommen sind. Nur die Verlosung wird es dann verständlicherweise nicht mehr geben. ;-)

Und natürlich, nicht zu vergessen, werden wir nächste Woche auch die glücklichen Gewinner ziehen!

Bis dahin, stay tuned!

Silverlight Anwendungen ausspionieren mit SilverlightSpy

16.06.2009 11:36:50 | Oliver Scheer

Ich bin vor einigen Tagen über dieses (sehr geniale) Tool gestolpert.

Silverlight Spy

image

Mit diesem “Spion” kann man Silverlight Anwendungen komplett analysieren und auskundschaften.

Sehr leicht via ClickOnce installierbar von hier: http://silverlightspy.com/silverlightspy/download-silverlight-spy/

Die Montagsmeinung: Wie sicher ist das World Wide Web?

15.06.2009 19:48:08 | Jan Schenk

German Wing? 

Wie sicher ist das Internet denn nun wirklich? Es gibt unzählige sichere Verschlüsselungsalgorithmen, sichere Protokolle, Zertifizierungsstellen und Best Practises, um Seiten und deren Inhalte vor unberechtigtem Zugriff zu schützen. Sobald ein Bug entdeckt wird oder ein Exploit öffentlich wird, arbeiten Tausende von fleissigen Entwicklern und Architekten daran, das Problem zu beheben. Aber am Ende ist das Netz nur so sicher, wie seine Benutzer.
Das ist auch nichts neues. Dafür gibt es dann Vorschriften, welche Stärke ein Passwort haben muss, wie oft das Passwort gewechselt werden muss oder was bei gehäufter Falscheingabe des Passwortes mit den hinterlegten Daten passiert. Alles im Streben nach Sicherheit. Auch das Bewusstsein für die Möglichkeiten des sogenanntem Social Engineering wird durch Kurse und Memos gestärkt. Jeder Benutzer von Elektronischer Datenverarbeitung weiß heute hoffentlich, dass Passwörter sowie PINs und TANs nicht in das Telefongespräch oder in den E-Mailverkehr gehören.
Aber der Mensch ist Mensch (um hier mal Herbert Grönemeyer zu zitieren), und der ist von Haus aus auf eine gewisse Einfachheit bedacht.

So hat der gemeine Mensch wie ich nur eine begrenzte Kapazität in seinem komplex entwickelten Denkorgan für das Speichern von Passwortketten zur Verfügung. Ich zum Beispiel kann mir nur etwa 5 verschiede PINs merken, und ich benutze nur etwa 4 verschiedene Passwörter, um mich an den unterschiedlichsten Systemen der elektronischen Datenverarbeitung zu authentifizieren.
Ich denke nicht, dass es tatsächlich Benutzer gibt, die für jede Anmeldung im Internet, nehmen wir als Beispiel einmal die Reihe von sozialen Netzwerken Facebook, Xing, LinkedIn, Lokalisten und Live, verschiedene Passwörter haben. Vielleicht verschiedene Benutzernamen, weil man aufgrund deren Einzigartigkeit gezwungen ist, öfter mal den Alias zu wechseln. Aber Passwörter. Wenn man doch schon mal ein bequemes Passwort hat, dann wird das doch um so lieber wiederverwertet.

Was wäre nun, wenn es jemandem gelänge, unbemerkt eines dieser Passworte auszuspähen.
Die Folgen wären katastrophal, mit nur einem Passwort hätte der Dieb Zugriff auf eine Vielzahl meiner Netzwerke, Communities, vielleicht sogar Onlinebanking (zumindest lesend) und Administrationsseiten, Email-Webclients etc.

Na gut, ließe sich dann ja noch argumentieren, dafür muss erst mal eines der Portale, auf denen ich unterwegs bin, gehackt werden. Und dann muss dort mein Passwort noch in Klartext, oder einer entschlüsselbaren Form hinterlegt sein. Das muss natürlich nicht der Fall sein, da es One-Way-Verschlüsslungen gibt, deren Algorithmus es gar nicht erst zulässt, dass das eingegebene Passwort gegen das auf dem Server hinterlegte überprüft wird. Dann finden nur sogenannte Hash-Abgleiche statt, die testen, ob das eingegebene Passwort in verschlüsselter Form mit dem verschlüsselt hinterlegten Passwort übereinstimmt.
Clever, oder?
Aber wie würde ich erkennen, dass die von mir genutzte Seite sich selbst dieser Auflage unterwirft? Und wer hat schon mal ernsthaft bei der Wahl seines Passwortes auf die ISO-Sicherheitszertifizierung der Seite geachtet?

Wir können aber noch einen Schritt weiter gehen. Was, wenn ich meine Daten freiwillig auf einer Online-Plattform preis gebe?
Das gibt es nicht? WOHL!
Wie aufwändig müsste eine Plattform wohl gestaltet sein, damit ein User nicht sofort merkt, dass es sich um einen Angriff auf die persönlichen Daten handelt?
Ich denke, angesichts der Vielzahl der täglich neu aus dem Boden schießenden Online-Dienste - nicht sehr aufwändig.

Mit dem richtigen Marketing, das - dank Social Networks - noch nicht mal viel Geld kosten muss, wäre so eine Plattform im Nu populär genug, um sich eventuell auch gleich noch die Account-Namen anderer Plattformen zu verschaffen - dank Serviceangeboten wie zum Beispiel Feed-Aggregation, die dem User vorgaukeln würde “nur” die Neuigkeiten des “anderen” Services mit in den eigenen Status aufzunehmen.

Zu abstrakt? Ich möchte nun ungern ein Real-Life-Beispiel heraufbeschwören. Aber das Bewusstsein für Sicherheit ist bei weitem noch nicht hoch genug, Paranoia hin oder her. Wenn man einen Menschen auf Basis seines Online-Daseins gesellschaftlich ruinieren kann (siehe auch Cyber-Mobbing), dann verschwimmen die Grenzen zwischen virtueller und realer Welt. Und dann passieren Dinge eben nicht mehr “nur Online”, im immer noch nicht erwachsen gewordenen Web. Und man kann es nicht mehr mit einem lapidaren “Was solls, ist ja nur das Internet!” bei Seite wischen.

Tut euch selbst den Gefallen, und benutzt entweder viele, viele sichere Passwörter - es gibt so schöne Dinge wie Passwort-Datenbanken - oder benutzt eine Reihe von sicheren Passwörtern, die aber gruppiert verwendet werden nach der Vertrauenswürdigkeit der Seiten. Für den beruflichen Domänen-Account sollte in jedem Fall ein eigenes Passwort verwendet werden, da hier wohl der größte Schaden angerichtet werden könnte.

Zuletzt muss natürlich jeder selbst wissen, wie wichtig ihm die eigenen Daten sind. Aber um die Gefahr einzuschätzen, sollte man sich ihrer auch bewusst sein können. Und dem Gros fehlt dafür einfach das nötige Hintergrundwissen.

Das war es mit der Montagsmeinung für heute!
Vielen Dank für Lesen,
jan



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/06/15/die-montagsmeinung-wie-sicher-ist-das-world-wide-web.aspx';

Silverlight on-the-fly - XAML per PHP erstellen

15.06.2009 16:16:07 | Jan Schenk

Ich war gerade echt schockiert ob der Möglichkeiten von Silverlight. Im Prinzip ist es ganz einfach. Ein Silverlight-Projekt muss nicht als kompilierte Quelle vorliegen, vielmehr ist es möglich, im object-Tag für das Einbetten der Silverlight-Applikation ein XAML-File als Quelle anzugeben.

   1: <object data="data:application/x-silverlight-2," 
   2:         type="application/x-silverlight-2" 
   3:         width="640" height="480">
   4:     <param name="source" value="content1.php"/>
   5:     <param name="onerror" value="onSilverlightError" />
   6:     <param name="background" value="gray" />
   7:     <param name="minRuntimeVersion" value="3.0.40307.0" />
   8:     <param name="autoUpgrade" value="true" />
   9:     <a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;">
  10:          <img src="http://go.microsoft.com/fwlink/?LinkId=108181" 
  11:             alt="Get Microsoft Silverlight" 
  12:             style="border-style: none"/>
  13:     </a>
  14: </object>

Damit eröffnen sich ganz neue Möglichkeiten. Die XAML-Datei lässt sich zur Laufzeit generieren, was einen gewaltigen Vorteil bietet, wenn man beispielsweise Silverlight nur als dynamische Präsentationsschicht verwendet. Oder als Navigation, die hochdynamisch sein soll und zur Laufzeit userabhängig gestaltet wird.

Im Screenshot oben wird eine PHP-Datei eingebunden, die den XAML-Code in der Datei content1.php generiert. Diese sieht in meinem Beispiel so aus:

   1: <Grid 
   2:         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   3:         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   4:         x:Name="LayoutRoot"
   5:         Width="640" Height="480">
   6:         <Image x:Name="backgroundImg" Source="Tulips.jpg" Stretch="Fill"/>
   7:  
   8:         <StackPanel 
   9:             x:Name="iconStacker"
  10:             Height="64" 
  11:             Margin="0,0,8,8" 
  12:             VerticalAlignment="Bottom" 
  13:             Orientation="Horizontal">
  14:             
  15: <?php
  16: $i = 0;
  17: if($dh = opendir(".")) {
  18:     while (($file = readdir($dh)) !== false) {
  19:         if ((substr($file, -3, 3) == "png") &amp;&amp; (substr($file, -6, 2) == "64")) {
  20:             echo '<Image x:Name="Icon' . ++$i . '" Height="64" HorizontalAlignment="Left" Margin="8,0,0,0" VerticalAlignment="Bottom" Width="64" Source="' . $file . '" Stretch="Fill">' . "\n";
  21:             echo '</Image>';
  22:         }
  23:     }
  24: }
  25: else echo "could not open dir";
  26:  
  27:  
  28: ?>
  29:         </StackPanel>
  30:     </Grid>
  31: <?php
  32: /* Even more to do here? */
  33: ?>

PHP generiert nun eine XAML-Datei mit diesem Inhalt:

   1: <Grid 
   2:         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   3:         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   4:         x:Name="LayoutRoot"
   5:         Width="640" Height="480">
   6:         <Image x:Name="backgroundImg" Source="Tulips.jpg" Stretch="Fill"/>
   7:  
   8:         <StackPanel 
   9:             x:Name="iconStacker"
  10:             Height="64" 
  11:             Margin="0,0,8,8" 
  12:             VerticalAlignment="Bottom" 
  13:             Orientation="Horizontal">
  14:             
  15: <Image x:Name="Icon1" Height="64" HorizontalAlignment="Left" Margin="8,0,0,0" VerticalAlignment="Bottom" Width="64" Source="blinklist_64.png" Stretch="Fill">
  16: </Image><Image x:Name="Icon2" Height="64" HorizontalAlignment="Left" Margin="8,0,0,0" VerticalAlignment="Bottom" Width="64" Source="facebook_64.png" Stretch="Fill">
  17: </Image><Image x:Name="Icon3" Height="64" HorizontalAlignment="Left" Margin="8,0,0,0" VerticalAlignment="Bottom" Width="64" Source="feedburner_64.png" Stretch="Fill">
  18: </Image><Image x:Name="Icon4" Height="64" HorizontalAlignment="Left" Margin="8,0,0,0" VerticalAlignment="Bottom" Width="64" Source="furl_64.png" Stretch="Fill">
  19: </Image><Image x:Name="Icon5" Height="64" HorizontalAlignment="Left" Margin="8,0,0,0" VerticalAlignment="Bottom" Width="64" Source="lastfm_64.png" Stretch="Fill">
  20: </Image><Image x:Name="Icon6" Height="64" HorizontalAlignment="Left" Margin="8,0,0,0" VerticalAlignment="Bottom" Width="64" Source="linkedin_64.png" Stretch="Fill">
  21: </Image>        </StackPanel>
  22:     </Grid>

Die verwendeten Bilder liegen im gleichen Verzeichnis wie die content1.php-Datei.

Hinweis für Silverlight Programmierer: Hier findet keine Optimierung der Quellbilder statt, das Hintergrundbild wird in der vorliegenden Größe geladen und clientseitig skaliert. Wer von Expression Blend gewohnt ist, dass Bilder automatisch optimiert werden, fällt bei dieser Variante auf die Nase!

Auf diesem Wege habe ich eine hochdynamische Möglichkeit, serverseitig Daten einzubinden, ohne in Silverlight etwas über das wie und wo wissen zu müssen. 

Wir zäumen sozusagen das Pferd von hinten auf, denn die Möglichkeiten das alles in Silverlight selber zu erledigen sind wesentlich mächtiger. Wenn man allerdings schon eine Business-Logik vorliegen hat und Silverlight über diese Art der Einbindung als Visualisierungswerkzeug verwenden will, steht dem nichts im Wege.



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/06/15/silverlight-on-the-fly-xaml-per-php-erstellen.aspx';

GameCamp Munich bei Microsoft

15.06.2009 10:25:39 | Christian Binder

Zurück aus dem Urlaub, ist der Montag immer ein Spass, Mails Mails Mails …… wer  kennt das nicht. Hatte schon mal darüber nachgedacht einfach alles zu löschen :-) 
Da hat mich mich Lori gebeten auch mal das GameCamp auf meinem Blog zu erwähnen. Also alle, die gerne auch mal ein Game Programmierern oder zu 100% im Game Development sind, können sich hier austauschen :-)

Das GameCamp Munich findet am 20.-21. Juni bei Microsoft in Unterschleißheim statt.  Das GameCamp Munich ist ein Event von und für alle, die sich für Games und das Games-Business interessieren.  Ziele des Camps sind die interdisziplinäre Vernetzung der Branche, die Entwicklung neuer Thesen und Ideen sowie die Förderung der Videospielkultur. Eingeladen sind alle, die Teil der Games-Branche sind oder sein wollen: Programmierer und Designer, Künstler und Publisher, Marketing und PR, Studenten, Modder, Blogger und natürlich die Presse.

GameCamp basiert auf den Grundlagen eines BarCamps und unterscheidet sich von anderen Konferenzen dahingehend, dass die Themen nicht Monate im Voraus vom Veranstalter festgelegt werden. Stattdessen wählen alle Teilnehmer noch bis kurz vor Beginn der Sessions aus, worüber gesprochen werden soll. Alle Teilnehmer sind aufgefordert, selbst einen Vortrag zu halten oder zu organisieren.

Die Teilnahme am GameCamp Munich ist kostenlos.  Mehr Information und Anmeldung zum GameCamp Munich finden Sie hier:  http://www.gamecampmunich.de


Viel Spass

Chris

MSDN Blog-Parade - Was sind Ihre Lieblings-Entwickler-Tools?

14.06.2009 21:40:19 | Lars Keller

Hier sind meine 3 Lieblings-Entwickler-Tools für die MSDN Blog-Parade:

  1. ReSharper: Ohne das Tool könnte ich nicht mehr arbeiten. ;-) Es steigert nicht nur die Produktivität bei der Entwicklung, sondern es hilft auch den Code schnell und einfach zu formatieren! Mit den Style-Regeln kann man viel vereinheitlichen. Es gibt auch weitere nützliche Add-In für den ReSharper.
  2. OutlookSpy:  Dieses kleine Helferlein ermöglicht das Inspizieren des Outlook Object Models. Das Tool installiert sich in Outlook als Add-In. Man kann so ganz einfach alle Funktionen, Extended MAPI, etc. einsehen.
  3. VisualSVN – Durch VisualSVN wird ein pflegeleichter und einfacher Zugriff auf Subversion aus Visual Studio heraus ermöglicht.


This weblog is sponsored by netcreate OHG.

MSDN Blog-Parade - Was sind Ihre Lieblings-Entwickler-Tools?

14.06.2009 20:40:19 | Lars Keller

Hier sind meine 3 Lieblings-Entwickler-Tools für die MSDN Blog-Parade:

  1. ReSharper: Ohne das Tool könnte ich nicht mehr arbeiten. ;-) Es steigert nicht nur die Produktivität bei der Entwicklung, sondern es hilft auch den Code schnell und einfach zu formatieren! Mit den Style-Regeln kann man viel vereinheitlichen. Es gibt auch weitere nützliche Add-In für den ReSharper.
  2. OutlookSpy:  Dieses kleine Helferlein ermöglicht das Inspizieren des Outlook Object Models. Das Tool installiert sich in Outlook als Add-In. Man kann so ganz einfach alle Funktionen, Extended MAPI, etc. einsehen.
  3. VisualSVN – Durch VisualSVN wird ein pflegeleichter und einfacher Zugriff auf Subversion aus Visual Studio heraus ermöglicht.

Meine 3 Lieblings-Entwicklertools

14.06.2009 14:53:00 | Mathias Raacke

Fast hätte ich vergessen, meinen Beitrag zur MSDN Blog-Parade zu verfassen. Zum Glück hatte ich mir die Deadline in meinen Outlook-Kalender eingetragen :-).

Was sind meine 3 Lieblings-Entwicklertools?

1. Ganz klar natürlich Visual Studio. Für die .NET-Entwicklung habe ich noch nichts besseres gesehen, und auch ganz allgemein eine sehr schöne IDE. So wie es Out-of-the-box kommt fehlen leider einige wichtige Refactorings und Code-analysen, aber dafür gibt es ja Tool Nr zwei.

2. Und das ist ReSharper. ReSharper erweitert Visual Studio um viele nützliche Refactorings, Code-Analyse, Code-Generierung, Navigationshilfen usw., so dass man deutlich produktiver mit Visual Studio arbeiten kann. Als User Group Leiter habe ich von Jetbrains eine kostenlose Lizenz für ReSharper bekommen.

3. Einen eindeutigen 3. Platz zu vergeben fällt schon schwerer. Deshalb vergebe ich den 3. Platz einfach mal mehrfach und nenne hier verschiedene Tools, die mir spontan einfallen:

MSDN Blog-Parade - Was sind Ihre Lieblings-Entwickler-Tools?

14.06.2009 11:40:01 | Lars Keller

Hier sind meine 3 Lieblings-Entwickler-Tools für die MSDN Blog-Parade:

  1. ReSharper: Ohne das Tool könnte ich nicht mehr arbeiten. ;-) Es steigert nicht nur die Produktivität bei der Entwicklung, sondern es hilft auch den Code schnell und einfach zu formatieren! Mit den Style-Regeln kann man viel vereinheitlichen. Es gibt auch weitere nützliche Add-In für den ReSharper.
  2. OutlookSpy:  Dieses kleine Helferlein ermöglicht das Inspizieren des Outlook Object Models. Das Tool installiert sich in Outlook als Add-In. Man kann so ganz einfach alle Funktionen, Extended MAPI, etc. einsehen.
  3. VisualSVN – Durch VisualSVN wird ein pflegeleichter und einfacher Zugriff auf Subversion aus Visual Studio heraus ermöglicht.

Das drei?-Stöckchen

12.06.2009 16:06:17 | Gordon Breuer

In den letzten Wochen war ich nur wenig aktiv an meinem Blog am arbeiten (was für ein schönes Beispiel für die deutsche Verlaufsform!). Auch im Live-Messenger oder in den einschlägigen Foren hat man mich nicht groß gesehen. Es gab einfach viel zu tun. Zum einen die Vorbereitungen für meine Abschlussprüfung, zum anderen auch durch die Prüfung liegen gebliebene Arbeit im Büro. Noch warte ich auf die Ergebnisse meiner Mühen, aber ich bin guter Dinge das mich die Ergebnisse befriedigen werden!

Da kommt mir das drei?-Stöckchen von Flowsens als Ablenkung gerade recht. Und wenn ich es mir recht überlege ist das sogar mein erstes Blog-Stöckchen! Also, los gehts… :-)

Die Regeln

Jeder Beworfene überlegt sich drei Fragen, deren Antworten ihn von anderen interessieren. Wenn möglich sollten das keine Fragen sein, die Grundsatzdiskussionen auslösen, es soll ja Spaß machen!

Diese Fragen beantwortet der Stöckchenwerfer zunächst selber und wirft den Drei?Stock dann an drei Blogger weiter. Leserantworten auf die gestellten Fragen per Kommentar sind natürlich ausdrücklich erwünscht!

Wer das Stöckchen zugeworfen bekommt, beantwortet die Fragen bitte erst als Kommentar beim Werfenden und überlegt sich dann selber auch drei Fragen für den eigenen Drei?Stock und wirft es wiederum an drei Blogger weiter.


Flowsens Fragen

Die gestellten Fragen und meine Antworten darauf gibt es hier zum nachlesen. Hey, Flo: Aktivier mal html-Kommentare – da kann man ja gar nichts ordentlich formatieren. Zumindest bold und italic wären schön ;-)

Meine “???”…

  1. Welchen Beruf habt ihr und wie seit ihr dazu gekommen?
  2. Wie sieht bei euch die prozentuale Aufteilung der zur Verfügung stehenden 24 Stunden eines durchschnittlichen Tages in verschiedene Aktivitäten aus?
  3. Seit wann und warum habt ihr überhaupt ein Blog?

…an folgende Blogger

  1. Jan Welker, .NET and Community
  2. Thomas Bandt, Thomas goes .NET
  3. Mathias Raacke, OutOfCoffeeException

Und natürlich an alle, die auch noch mitmachen wollen – schnappt euch einfach das Stöckchen!

DotNetKicks-DE Image

Dateien rekursiv kopieren

12.06.2009 15:45:28 | Daniel Schädler

Heute ist wieder mal der Tag an dem Powershell und C# einander ein wenig den Rang ablaufen (mir ist klar dass die Cmdlet’s in PowerShell in C# geschrieben sind, aber es verblüfft doch immer wieder wie einfach Sachen in PowerShell erledigt werden können.

Ziel eine Website mit Unterverzeichnissen kopieren, aber die svn-Dateien (SubVersion) weglassen. Den C# Code erspare ich mal, aber als Hinweis der MSDN-Link zu diesem Thema.

Mit PowerShell ein klassischer Ein- /Zwei- Zeiler (Je nach Bildschirm-Grösse) smile_wink

   1: Copy-Item -path C:\_Dev\AIS\Buraut.Ais.WebFrontEnd\src\WebSites 
   2: -destination C:\Temp\Test_Release -recurse

Wenn man dann auch entsprechende Unterverzeichnisse nicht wünscht, können diese wie folgt gelöscht werden.

   1: foreach($a in get-childitem C:\Temp\Test_Release -recurse -include "*.svn"){
   2:     $a | Remove-item -recurse -force
   3: }

Danach sind die entsprechenden Ordner nicht mehr vorhanden.

Wenn man mehrere Order haben möchte, dann muss man diese mit Semikolon einfach dran hängen und die Ordner, sowie deren Inhalt werden gelöscht. Ich wünsche allen ein erholsames Wochenende.

Mandelbrot mit Silverlight 3

12.06.2009 14:37:20 | Oliver Scheer

Basierend auf der Inspiration von http://www.eggheadcafe.com/tutorials/aspnet/05748429-75a4-449a-9aab-82758cfb13df/animating-mandelbrot-frac.aspx habe ich mich drangesetzt ein kleines Control für die Erstellung und Berechnung von Mandelbrot-Grafiken zu erzeugen. Im Gegensatz zum Original, habe ich das Control allerdings so geschrieben, das alle Parameter über Dependancy Properties in Blend konfigurierbar und animierbar sind.

Einige Impressionen …

image image image

Das ganze lässt sich übrigens in prima in Blend über die Eigenschaften konfigurieren.

image

Der Code für das Mandelbrot-Control …

   1: using System;
   2: using System.Windows;
   3: using System.Windows.Controls;
   4: using System.Windows.Media;
   5: using System.Windows.Media.Imaging;
   6:  
   7: namespace Homepage.Fun.Mandelbrot
   8: {
   9:     public partial class MandelbrotControl : UserControl
  10:     {
  11:         public MandelbrotControl()
  12:         {
  13:             InitializeComponent();
  14:  
  15:             DrawMandelbrotSet();
  16:         }
  17:  
  18:         #region Dependancy Properties
  19:  
  20:         public double RMin 
  21:         {
  22:             get { return (double)GetValue(RMinProperty); }
  23:             set 
  24:             {
  25:                 SetValue(RMinProperty, value);
  26:                 DrawMandelbrotSet();
  27:             }
  28:         }
  29:  
  30:         public static readonly DependencyProperty RMinProperty =
  31:                 DependencyProperty.Register("RMin", typeof(double),
  32:                 typeof(MandelbrotControl),
  33:                 new PropertyMetadata(-.75,
  34:                 null));
  35:  
  36:         public double RMax
  37:         {
  38:             get { return (double)GetValue(RMaxProperty); }
  39:             set
  40:             {
  41:                 SetValue(RMaxProperty, value);
  42:                 DrawMandelbrotSet();
  43:             }
  44:         }
  45:  
  46:         public static readonly DependencyProperty RMaxProperty =
  47:                 DependencyProperty.Register("RMax", typeof(double),
  48:                 typeof(MandelbrotControl),
  49:                 new PropertyMetadata(-.46,
  50:                 null));
  51:  
  52:         public double IMin
  53:         {
  54:             get { return (double)GetValue(IMinProperty); }
  55:             set
  56:             {
  57:                 SetValue(IMinProperty, value);
  58:                 DrawMandelbrotSet();
  59:             }
  60:         }
  61:  
  62:         public static readonly DependencyProperty IMinProperty =
  63:             DependencyProperty.Register("IMin", typeof(double),
  64:             typeof(MandelbrotControl),
  65:             new PropertyMetadata(-.65,
  66:             null));
  67:  
  68:         public double IMax
  69:         {
  70:             get { return (double)GetValue(IMaxProperty); }
  71:             set
  72:             {
  73:                 SetValue(IMaxProperty, value);
  74:                 DrawMandelbrotSet();
  75:             }
  76:         }
  77:  
  78:         public static readonly DependencyProperty IMaxProperty =
  79:             DependencyProperty.Register("IMax", typeof(double),
  80:             typeof(MandelbrotControl),
  81:             new PropertyMetadata(-.50,
  82:             null));
  83:  
  84:         public int Escape
  85:         {
  86:             get { return (int)GetValue(EscapeProperty); }
  87:             set
  88:             {
  89:                 SetValue(EscapeProperty, value);
  90:                 DrawMandelbrotSet();
  91:             }
  92:         }
  93:  
  94:         public static readonly DependencyProperty EscapeProperty =
  95:                 DependencyProperty.Register("Escape", typeof(int),
  96:                 typeof(MandelbrotControl),
  97:                 new PropertyMetadata(20,
  98:                 null));
  99:  
 100:         public int Max
 101:         {
 102:             get { return (int)GetValue(MaxProperty); }
 103:             set
 104:             {
 105:                 SetValue(MaxProperty, value);
 106:                 DrawMandelbrotSet();
 107:             }
 108:         }
 109:  
 110:         public static readonly DependencyProperty MaxProperty =
 111:                 DependencyProperty.Register("Max", typeof(int),
 112:                 typeof(MandelbrotControl),
 113:                 new PropertyMetadata(30,
 114:                 null));
 115:  
 116:         public double Step
 117:         {
 118:             get { return (double)GetValue(StepProperty); }
 119:             set
 120:             {
 121:                 SetValue(StepProperty, value);
 122:                 DrawMandelbrotSet();
 123:             }
 124:         }
 125:  
 126:         public static readonly DependencyProperty StepProperty =
 127:                 DependencyProperty.Register("Step", typeof(double),
 128:                 typeof(MandelbrotControl),
 129:                 new PropertyMetadata(.002,
 130:                 null));
 131:  
 132:         public int Count
 133:         {
 134:             get { return (int)GetValue(CountProperty); }
 135:             set
 136:             {
 137:                 SetValue(CountProperty, value);
 138:                 DrawMandelbrotSet();
 139:             }
 140:         }
 141:  
 142:         public static readonly DependencyProperty CountProperty =
 143:                 DependencyProperty.Register("Count", typeof(int),
 144:                 typeof(MandelbrotControl),
 145:                 new PropertyMetadata(100,
 146:                 null));
 147:  
 148:         public int ImageWidth
 149:         {
 150:             get { return (int)GetValue(ImageWidthProperty); }
 151:             set
 152:             {
 153:                 SetValue(ImageWidthProperty, value);
 154:                 DrawMandelbrotSet();
 155:             }
 156:         }
 157:  
 158:         public static readonly DependencyProperty ImageWidthProperty =
 159:                 DependencyProperty.Register("ImageWidth", typeof(int),
 160:                 typeof(MandelbrotControl),
 161:                 new PropertyMetadata(400,
 162:                 null));
 163:  
 164:  
 165:         public int ImageHeight
 166:         {
 167:             get { return (int)GetValue(ImageHeightProperty); }
 168:             set
 169:             {
 170:                 SetValue(ImageHeightProperty, value);
 171:                 DrawMandelbrotSet();
 172:             }
 173:         }
 174:  
 175:         public static readonly DependencyProperty ImageHeightProperty =
 176:                 DependencyProperty.Register("ImageHeight", typeof(int),
 177:                 typeof(MandelbrotControl),
 178:                 new PropertyMetadata(400,
 179:                 null));
 180:  
 181:         public int PowFactor
 182:         {
 183:             get { return (int)GetValue(PowFactorProperty); }
 184:             set
 185:             {
 186:                 SetValue(PowFactorProperty, value);
 187:                 DrawMandelbrotSet();
 188:             }
 189:         }
 190:  
 191:         public static readonly DependencyProperty PowFactorProperty =
 192:                 DependencyProperty.Register("PowFactor", typeof(int),
 193:                 typeof(MandelbrotControl),
 194:                 new PropertyMetadata(5,
 195:                 null));
 196:  
 197:         public double Param1
 198:         {
 199:             get { return (double)GetValue(Param1Property); }
 200:             set
 201:             {
 202:                 SetValue(Param1Property, value);
 203:                 DrawMandelbrotSet();
 204:             }
 205:         }
 206:  
 207:         public static readonly DependencyProperty Param1Property =
 208:                 DependencyProperty.Register("Param1", typeof(double),
 209:                 typeof(MandelbrotControl),
 210:                 new PropertyMetadata(2.0,
 211:                 null));
 212:  
 213:         #endregion
 214:  
 215:         private void DrawMandelbrotSet()
 216:         {
 217:             double rmin = (double)this.GetValue(RMinProperty);
 218:             double rmax = (double)this.GetValue(RMinProperty);
 219:             double imin = (double)this.GetValue(RMinProperty);
 220:             double imax = (double)this.GetValue(RMinProperty);
 221:             
 222:             double step = (double)this.GetValue(StepProperty);
 223:             int max = (int)this.GetValue(MaxProperty);
 224:             int escape = (int)this.GetValue(EscapeProperty);
 225:  
 226:             int width = (int)GetValue(ImageWidthProperty);
 227:             int height = (int)GetValue(ImageHeightProperty);
 228:             int powFactor = (int)GetValue(PowFactorProperty);
 229:             int count = (int)this.GetValue(CountProperty);
 230:  
 231:             double param1 = (double)GetValue(Param1Property);
 232:  
 233:             rmin -= step * count;
 234:             rmax += step * count;
 235:             imin -= step * count;
 236:             imax += step * count;
 237:  
 238:             WriteableBitmap bitmap = new WriteableBitmap(width, height, PixelFormats.Bgr32);
 239:  
 240:             double dr = (rmax - rmin) / (width - 1);
 241:             double di = (imax - imin) / (height - 1);
 242:  
 243:             for (int x = 0; x < width; x++)
 244:             {
 245:                 double cr = rmin + (x * dr);
 246:                 for (int y = 0; y < height; y++)
 247:                 {
 248:                     double ci = imin + (y * di);
 249:                     double zr = cr;
 250:                     double zi = ci;
 251:                     int counter = 0;
 252:  
 253:                     while (counter < max)
 254:                     {
 255:                         double zr2 = zr * zr;
 256:                         double zi2 = zi * zi;
 257:  
 258:                         if (zr2 + zi2 > escape)
 259:                         {
 260:                             bitmap.Pixels[(y * width) + x] = (int)Math.Pow(counter + 1, powFactor) % int.MaxValue;
 261:                             break;
 262:                         }
 263:                         zi = ci + (param1 * zr * zi);
 264:                         zr = cr + zr2 - zi2;
 265:                         counter++;
 266:                     }
 267:  
 268:                     if (counter == max)
 269:                     {
 270:                         bitmap.Pixels[(y * width) + x] = 0; // Black
 271:                     }
 272:                 }
 273:             }
 274:  
 275:             _image.Source = bitmap;
 276:         }
 277:     }
 278: }

Warum nicht conditional GET in ASP.NET verwenden?

12.06.2009 14:30:17 | Klaus Bock

Manch einer wird jetzt sagen: “Wird doch bereits verwendet”. Zum Teil stimmt das auch. Wenn man sich die Kommunikation einer ASP.NET Seite zwischen Client und Server einmal in Fiddler oder einem ähnlichem Werkzeug ansieht, fällt schnell auf, dass die Ressourcen der Seite wie etwa Images, CSS-Dateien udgl. zwar meist den Statuscode 304 (not modified) aber die aspx-Seiten immer 200 (OK) zurückgeben. Genau hier kann angesetzt werden.
In Zeiten von URL-Rewrite und der Allgegenwart von SEO versucht heute jeder eine eindeutige URL für jede einzelne Seite zu erzeugen. In diesem Moment kann man auch die für conditional GET benötigten Daten verwalten. Man benötigt hier lediglich den Zeitpunkt der letzten Änderung einer Seite oder deren Inhalt, sowie eine eindeutige Zeichenfolge die als sogenannter ETag verwendet wird. Was ist nun zu tun? Eigentlich nicht sehr viel:

  1. Die Werte des Änderungsdatums und des ETag als Http-Header schreiben.
  2. Zwei Http-Header vom Client lesen.
  3. Entscheiden ob die Seite oder der Statuscode 304 gesendet wird.

Das ist die ganze Kunst von conditional GET und funktioniert sehr gut.
Im folgenden Screenshot kann man sehr gut die Request- und Responseheader des ersten Aufruf der Seite AboutMe.aspx sehen. Da sich die Seite noch nicht im Cache des Browser befindet, sendet der Browser im Cache-Header: pragma no-cache. Der Server hat im Responseheader bereits den Zeitpunkt der letzten Änderung und eine Zeichenfolge als ETag an den Browser gesendet, so dass diese bei der nächsten Anfrage dem Browser zur Verfügung stehen.

Fiddler 304 nocache

Nun noch einmal der Aufruf der gleichen Seite. Jetzt, da sich die Seite bereits im Cache des Browser befindet, sendet der Browser im Cache-Header den Zeitpunkt der letzten Änderung der Seite die sich in seinem Cache befindet sowie den gespeicherten ETag im Header “If-None-Match”. Auf dem Server werden nun die übermittelten Header des Client ausgewertet und je nach Zustand der Seite entweder 304, oder die geänderte Seite mit neuen Daten im Header gesendet.

Fiddler 304 cached

Bei der Entscheidung conditional GET auch für aspx-Seiten zu verwenden, sollte man aber auch bedenken, dass nicht jede Seite der Website dafür geeignet ist. Man sollte also tunlichst darauf achten, Seiten mit ständig wechselndem Inhalt, wie etwas Fehlerseite oder Suchergebnisse, unbedingt auszuschließen. Es gibt bestimmt genug Mechanismen um den Ausschluss der jeweiligen Seite zu gewährleisten. 
Wie die Lösung eines einzelnen aussieht, wird wohl sehr unterschiedlich sein. Der eine wird vielleicht ein Http-Modul verwenden, ein anderer einen Http-Handler. Ich habe mich für eine einfache Methode in einer Helper-Klasse entschieden, die ich in der Masterpage verwenden kann. Um die aufgerufene Seite in der Masterpage zu bestimmen, habe ich die Eigenschaft CurrentExecutionFilePath verwendet.

// Dateipfad und Namen der Clientseite bestimmen
string clientPath = this.Page.Request.CurrentExecutionFilePath;

// andere Code hier

// conditional GET verarbeiten
Utils.HasConditionalGet(clientPath);

Die Methode HasConditionalGet der Helper-Klasse Utils ist vom Typ bool und gibt true zurück wenn 304 gesendet wurde.

public static bool HasConditionalGet(string site)
{
    // prüfen ob die Seite von conditional Get ausgenommen ist
    if (SiteSettings.Instance.NonCachedSites.Contains(Path.GetFileName(site)))
    {
        return false;
    }

    bool value = false;
    DateTime modifiedSince;

    HttpResponse response = HttpContext.Current.Response;
    HttpRequest request = HttpContext.Current.Request;

    // bestimmen wann die Datei zuletzt geändert wurde
    DateTime modifyDate = Utils.LastModified(request.MapPath(site));

    // prüfen ob das Datum nicht in der Zukunft liegt
    if (modifyDate > DateTime.Now)
    {
        modifyDate = DateTime.Now;
    }

    // einen ETag aus Seitennamen und Datum erstellen
    string eTag = Utils.GetETagFromFile(site, modifyDate);

    // prüfen ob ein Datum aus dem Header geparst werden kann
    if (DateTime.TryParse(
            request.Headers["If-Modified-Since"],
            CultureInfo.InvariantCulture,
            DateTimeStyles.AdjustToUniversal,
            out modifiedSince))
    {
        // prüfen ob das Datum der letzten Änderung neuer ist
        if (modifyDate > modifiedSince)
        {
            TimeSpan modifiedDiff = modifyDate - modifiedSince;

            // Differenz größer einer Sekunde melden
            value = modifiedDiff > TimeSpan.FromSeconds(1);
        }
    }

    // ETag aus dem Browser-Header lesen
    string ifNoneMatch = request.Headers["If-None-Match"];

    // prüfen ob die ETag's gleich sind
    if (string.Compare(ifNoneMatch, eTag) == 0)
    {
        value = true;
    }

    // Cacheability muss public sein, da sonst die Methoden
    // SetLastModified und SetETag die Header nicht schreiben.
    response.Cache.SetCacheability(HttpCacheability.Public);

    // die Cache-Header zum senden an den Client setzen
    response.Cache.SetLastModified(modifyDate.ToUniversalTime());
    response.Cache.SetETag(eTag);

    // keine Änderung; 304 senden
    if (value)
    {
        response.Clear();
        response.StatusCode = (int)HttpStatusCode.NotModified;
        response.SuppressContent = true;
    }

    return value;
}

Wie bereits weiter oben erwähnt, wird außer dem Datum der letzten Änderung auch eine eindeutige Zeichenfolge für den ETag-Header benötigt. In meiner Lösung verwende ich eine Hashwert, der aus dem Dateinamen der Seite und dem Datum der letzten Änderung erzeugt wird. Diesen Hashwert lasse ich als Zeichenfolge im Hex-Format darstellen. Es ist unbedingt erforderlich, die Zeichenfolge in Anführungszeichen zu setzen und mit diesen umschließenden Anführungszeichen in den Header zu schreiben.

Bei der Umsetzung dieser Lösung bin ich auf eine Eigenart des .NET Framework gestoßen: Wenn eine anderer HttpCacheability Wert als public verwendet wird, private ist der Default Wert, werden die Header von den Methoden SetLastModified und SetETag nicht gesetzt.

Sehr geholfen beim Testen der Funktion meiner Seite, hat mir HTTP compression and HTTP conditional GET test tool und natürlich Fiddler.

Windows 7 ohne Internet Explorer

12.06.2009 12:15:00 | Michael Schwarz

Wow, da habe ich gestaunt als ich heute morgen bei Daniel Melanchthon gelesen habe, dass Microsoft den Vista-Nachfolger Windows 7 in Europa ohne den Internet Explorer 8 ausliefert. Ganz unabhängig davon, ob es Menschen gibt, die keinen Internet Explorer in Windows 7 haben wollen, ich finde es doof. Mich hat der ja noch nie gestört, habe halt einfach den Firefox parallel dazu installiert.

In den Kommentaren bei Daniel habe ich mal nachgefragt, ob man wenigstens im MSDN- und TechNet-Abo ein Windows 7 auf Deutsch inkl. Internet Explorer gibt. Ansonsten stellt sich tatsächlich die Frage, wie man sich den Internet Explorer herunterladen kann. Beim aktuellen Windows 7 RC finde ich z.B. einen Download Link für den Live Messenger (und Windows Live Essentials) – der öffnet aber den Internet Explorer. Wenn ich keinen Webbrowser habe, wie kann ich dann überhaupt einen Webbrowser installieren? Und wenn dann ein Link “Jetzt Internet Explorer downloaden” angeboten wird, der über FTP oder was auch immer die benötigten Dateien herunterlädt, was sagt dann die EU dazu?


Wie gut sind Bing-Ergebnisse wirklich?

12.06.2009 07:13:03 | Norbert Eder

In den letzten Tagen habe ich total auf Bing gesetzt. Die Ergebnisse sind gefühlt gut. Aber sind sie das auch wirklich? Auf einen einfachen und schnellen Vergleich hat mich das MSDN Austria Team aufmerksam gemacht: http://blindsearch.fejus.com/. Einfach den gewünschten Suchbegriff eingeben und die Ergebnisse von Bing, Google und Yahoo werden...

Bericht: .NET Usergroup Karlsruhe – Das ASP.NET MVC Framework

11.06.2009 14:42:00 | Alexander Zeitler

.NET Usergroup Karlsruhe Logo

Wie angekündigt, fand gestern das Juni-Treffen der .NET Usergroup Karlsruhe statt.

Das Thema war “Das ASP.NET MVC Framework”, welches von Microsoft MVP Albert Weinert präsentiert wurde.

In etwas mehr als zwei Stunden zeigte Albert die Grundlagen, die notwendig sind, um eine Website mit dem kürzlich fertiggestellten ASP.NET MVC Framework zu erstellen.

Nach einer kurzen Einführung das Thema mit Slides ging Albert direkt zum Live-Coding über und zunächst den grundlegenden Aufbau von ASP.NET MVC Projekten.

Weitere Punkte, die Albert erklärte, waren unter anderem das Routing, Modelbinder, die Erstellung neuer Views und Controller und die Anpassung der T4-Templates.

Nach dem Vortrag fand noch eine Pro- und Contra-Diskussion zu ASP.NET MVC statt, welche später noch auf andere Themen wie die Microsoft-Lizenzmodelle, aktuelle Browser und COM ausgedehnt wurde.

Abschließend sei noch gesagt, dass Alberts Vortrag Teil einer Usergroup-Tour ist, welche Albert im Juni und Juli absolviert. Wer also Praxistipps zu ASP.NET MVC braucht, sollte an einem der weiteren Vorträge teilnehmen.

Nachdem die erste Häfte der Vorträge nun erledigt ist, hat Albert den Quellcode der Demos veröffentlicht.

 

Albert erklärt ASP.NET MVC

Albert erklärt ASP.NET MVC

 

Albert beim Live-Coding

Albert beim Live-Coding 

NRW Conf 09: Community is back!

11.06.2009 10:54:52 | Oliver Scheer

Community-Event-Werbung aus der Heimat ;)

“Am 28. August ist es wieder so weit. Die Community in Nordrhein-Westfalen gibt sich wie jedes Jahr die Ehre und veranstaltet das größte Event für Software-Entwickler, IT-Pros und dieses Jahr auch für UI-Designer.

Buchen Sie jetzt Ihr Ticket zum Wissensvorsprung und melden Sie sich heute noch zur NRW Conf 09 und zum Workshop Day an. Nationale und internationale Speaker bringen Ihnen neueste Developer und IT-Pro Technologien näher. Profitieren auch Sie vom Networking mit anderen Gästen auf unserem gemeinsamen Flug durch die IT.

Immer noch nicht überzeugt? Lesen sie unser Feedback vom letzten Jahr. “

Erstes Bootcamp bei der .Net Developer Group Braunschweig – Thema: Unit Tests

10.06.2009 14:20:13 | Lars Keller

Wie Torsten Weber schon in seinem Blogpost angekündigt hat, finde ich das Thema Bootcamps sehr spannend. Karim und ich haben uns entschlossen neben unseren monatlichen Treffen verschiedene Bootcamps anzubieten. Für das erste Bootcamp besucht uns Alexander Groß als Referent zu dem Thema Unit Tests. Dieses Bootcamp wird auch nach dem LdL-Prinzip gehalten. LdL bedeutet Lernen durch Lehren. Hierbei müssen die Teilnehmer aktiv mitmachen. Jeder Teilnehmer bekommt 1-2 Fragen vor dem Event zugeteilt und soll diese dann in dem Bootcamp erklären. Natürlich mit der Hilfe von Alex.

Gerade diese Idee der DNUG Leipzig, LdL mit einem Bootcamp zu verknüpfen, finde ich sehr interessant!

Ich freue mich auf das Bootcamp!

Links:



This weblog is sponsored by netcreate OHG.

16.06.09 Treffen der .NET Developer Group Braunschweig – Thema: F#

10.06.2009 13:41:56 | Lars Keller

dotnet-bs_banner_blog

Unser 33 User Group Treffen der .NET Developer Group Braunschweig findet am 16.06.09, ab 19:00 Uhr in Kilian's Raffinerie statt.

Dieses Mal kommt uns Steffen Forkmann mit dem Thema F# besuchen:

Funktionale Programmiersprachen nehmen seit geraumer Zeit einen hohen Stellenwert in der Wissenschaft ein. Demnächst könnte es eine dieser Sprachen sogar aus dem Forschungsbereich direkt in den Mainstream schaffen. Visual Studio 2010 wird neben C# und VB.NET die funktionale Programmiersprache F# als dritte Hauptsprache anbieten. Das Vortrag soll einen Einblick in funktionale Konzepte und deren Umsetzung in F# geben. Insbesondere soll auf "Funktionen höherer Ordnung", Typinferenz, Currying, Pattern Matching, "Unveränderlichkeit" und parallele Programmierung eingegangen werden.

Weitere Informationen unter www.dotnet-braunschweig.de.

Wie immer ist jeder herzlich willkommen!



This weblog is sponsored by netcreate OHG.

Xtopia [kompakt] 09: Videos und Vorträge jetzt als Download verfügbar

10.06.2009 13:39:00 | Lori Grosland

XTOPIA

Die erste Xtopia [kompakt]-Roadshow rund um die Themen Web/UX und Rich Internet Applications war ein voller Erfolg. Von April bis Mai 2009 war Microsoft mit hochkarätigen Partnern auf der Xtopia im Kleinformat unterwegs: In München, Karlsruhe, Hamburg, Köln, Berlin und Frankfurt erlebten jeweils bis zu 100 Teilnehmer Vorträge und Demos zu den Themen Web, User Experience und Silverlight/Rich Internet Applications.

Wenn Sie in diesem Jahr keine Zeit hatten, bei Xtopia [kompakt] dabei zu sein, finden Sie auf der Website der Xtopia [kompakt] ab sofort (fast) alle Vorträge als PDF, viele Videos und umfangreiche Informationen rund um die Inhalte der vergangenen Roadshow. Im Mittelpunkt stehen Microsoft Surface, Windows 7, Silverlight 3 und Internet Explorer 8. Partner wie PC-Ware und das deutsche RIA-Forum begleiteten uns auf der Roadshow. Agenturen aus der Design- und Webbranche ergänzten die Vorträge mit Erfahrungsberichten zu Design, User Experience, Rich Internet Applications und Webentwickung. Beispielsweise zeigte CRM-Spezialist CAS in einem Vortrag die Vorteile von Silverlight gegenüber AJAX und Flash bei der Entwicklung professioneller Unternehmensanwendungen auf. Weitere Erfahrungsberichte kamen von Quark, Ergosign, maximago, Pixelpark AG, T-Systems MMS, UID, Perun.net und Sensory Minds.

Hier entlang zu den gesammelten Präsentationen der XTOPIA [kompakt] 09  und den Session-Videos: http://blogs.msdn.com/riablog/archive/2009/06/09/xtopia-kompakt-09-videos-und-vortr-ge-jetzt-als-download-verf-gbar.aspx bzw.  http://snipurl.com/jtiex

Erstes Bootcamp bei der .Net Developer Group Braunschweig – Thema: Unit Tests

10.06.2009 13:20:13 | Lars Keller

Wie Torsten Weber schon in seinem Blogpost angekündigt hat, finde ich das Thema Bootcamps sehr spannend. Karim und ich haben uns entschlossen neben unseren monatlichen Treffen verschiedene Bootcamps anzubieten. Für das erste Bootcamp besucht uns Alexander Groß als Referent zu dem Thema Unit Tests. Dieses Bootcamp wird auch nach dem LdL-Prinzip gehalten. LdL bedeutet Lernen durch Lehren. Hierbei müssen die Teilnehmer aktiv mitmachen. Jeder Teilnehmer bekommt 1-2 Fragen vor dem Event zugeteilt und soll diese dann in dem Bootcamp erklären. Natürlich mit der Hilfe von Alex.

Gerade diese Idee der DNUG Leipzig, LdL mit einem Bootcamp zu verknüpfen, finde ich sehr interessant!

Ich freue mich auf das Bootcamp!

Links:

16.06.09 Treffen der .NET Developer Group Braunschweig – Thema: F#

10.06.2009 12:41:56 | Lars Keller

dotnet-bs_banner_blog

Unser 33 User Group Treffen der .NET Developer Group Braunschweig findet am 16.06.09, ab 19:00 Uhr in Kilian's Raffinerie statt.

Dieses Mal kommt uns Steffen Forkmann mit dem Thema F# besuchen:

Funktionale Programmiersprachen nehmen seit geraumer Zeit einen hohen Stellenwert in der Wissenschaft ein. Demnächst könnte es eine dieser Sprachen sogar aus dem Forschungsbereich direkt in den Mainstream schaffen. Visual Studio 2010 wird neben C# und VB.NET die funktionale Programmiersprache F# als dritte Hauptsprache anbieten. Das Vortrag soll einen Einblick in funktionale Konzepte und deren Umsetzung in F# geben. Insbesondere soll auf "Funktionen höherer Ordnung", Typinferenz, Currying, Pattern Matching, "Unveränderlichkeit" und parallele Programmierung eingegangen werden.

Weitere Informationen unter www.dotnet-braunschweig.de.

Wie immer ist jeder herzlich willkommen!

Xtopia [kompakt] 09: Videos und Vorträge jetzt als Download verfügbar

10.06.2009 12:39:00 | Lori Grosland

XTOPIA

Die erste Xtopia [kompakt]-Roadshow rund um die Themen Web/UX und Rich Internet Applications war ein voller Erfolg. Von April bis Mai 2009 war Microsoft mit hochkarätigen Partnern auf der Xtopia im Kleinformat unterwegs: In München, Karlsruhe, Hamburg, Köln, Berlin und Frankfurt erlebten jeweils bis zu 100 Teilnehmer Vorträge und Demos zu den Themen Web, User Experience und Silverlight/Rich Internet Applications.

Wenn Sie in diesem Jahr keine Zeit hatten, bei Xtopia [kompakt] dabei zu sein, finden Sie auf der Website der Xtopia [kompakt] ab sofort (fast) alle Vorträge als PDF, viele Videos und umfangreiche Informationen rund um die Inhalte der vergangenen Roadshow. Im Mittelpunkt stehen Microsoft Surface, Windows 7, Silverlight 3 und Internet Explorer 8. Partner wie PC-Ware und das deutsche RIA-Forum begleiteten uns auf der Roadshow. Agenturen aus der Design- und Webbranche ergänzten die Vorträge mit Erfahrungsberichten zu Design, User Experience, Rich Internet Applications und Webentwickung. Beispielsweise zeigte CRM-Spezialist CAS in einem Vortrag die Vorteile von Silverlight gegenüber AJAX und Flash bei der Entwicklung professioneller Unternehmensanwendungen auf. Weitere Erfahrungsberichte kamen von Quark, Ergosign, maximago, Pixelpark AG, T-Systems MMS, UID, Perun.net und Sensory Minds.

Hier entlang zu den gesammelten Präsentationen der XTOPIA [kompakt] 09  und den Session-Videos: http://blogs.msdn.com/riablog/archive/2009/06/09/xtopia-kompakt-09-videos-und-vortr-ge-jetzt-als-download-verf-gbar.aspx bzw.  http://snipurl.com/jtiex

Xtopia [kompakt] 09: Videos und Vorträge jetzt als Download verfügbar…

10.06.2009 11:22:33 | Steffen Ritter

Die erste Xtopia [kompakt]-Roadshow rund um die Themen Web/UX und Rich Internet Applications war ein voller Erfolg. Von April bis Mai 2009 war Microsoft mit hochkarätigen Partnern auf der Xtopia im Kleinformat unterwegs: In München, Karlsruhe, Hamburg, Köln, Berlin und Frankfurt erlebten jeweils bis zu 100 Teilnehmer Vorträge und Demos zu den Themen Web, User Experience und Silverlight/Rich Internet Applications.

Zu den Vorträgen der XTOPIA

Wenn Sie in diesem Jahr keine Zeit hatten, bei Xtopia [kompakt] dabei zu sein, finden Sie auf der Website der Xtopia [kompakt] ab sofort (fast) alle Vorträge als PDF, viele Videos und umfangreiche Informationen rund um die Inhalte der vergangenen Roadshow. Im Mittelpunkt stehen Microsoft Surface, Windows 7, Silverlight 3 und Internet Explorer 8. Partner wie PC-Ware und das deutsche RIA-Forum begleiteten uns auf der Roadshow. Agenturen aus der Design- und Webbranche ergänzten die Vorträge mit Erfahrungsberichten zu Design, User Experience, Rich Internet Applications und Webentwickung. Beispielsweise zeigte CRM-Spezialist CAS in einem Vortrag die Vorteile von Silverlight gegenüber AJAX und Flash bei der Entwicklung professioneller Unternehmensanwendungen auf. Weitere Erfahrungsberichte kamen von Quark, Ergosign, maximago, Pixelpark AG, T-Systems MMS, UID, Perun.net und Sensory Minds.

Hier entlang zu den gesammelten Präsentationen der XTOPIA [kompakt] 09  und den Session-Videos: http://blogs.msdn.com/riablog/archive/2009/06/09/xtopia-kompakt-09-videos-und-vortr-ge-jetzt-als-download-verf-gbar.aspx

Silverlight 3: Erstellen eigener Behaviors

10.06.2009 10:47:46 | Oliver Scheer

Ein neues Feature von Silverlight sind Behaviors. Dieses Feature wurde von WPF abgeguckt. Das schöne daran ist … diese WPF Behaviors können nahezu 1:1 wieder verwendet werden. Aber mal der Reihe nach.

Was sind Behaviors?

Behaviors sind eine Art von Verhalten, welches man einem Element nachträglich geben kann. Mittels Blend geht dies sogar ohne Programmieren, einfach durch Drag&Drop. Das folgende Bild zeigt die neue Asset-Bibliothek in Blend 3.

image

Um ein Behavior auf ein Element anzuwenden, zieht man dieses einfach per Drag&Drop aus der Asset-Library auf das entsprechende Control.

image

Und schon hat das Control (_imageGrid) die Mouse3DBehavior-Eigenschaften.

Anbei der Code für das Mouse3DBehavior, welches ich in meiner kleinen Bildergalerie verwende. Damit läßt sich nun jedes Control mit der Maus dreidimensional Bewegen. Einfach die linke Maustaste drücken und die Maus bewegen.

image

Anbei der Code für das Mouse3DBehavior.

   1: public class Mouse3DBehavior : Behavior<UIElement>
   2: {
   3: PlaneProjection _planeProjection;
   4: bool _buttonPressed = false;
   5: Point _originPoint;
   6:  
   7: protected override void OnAttached()
   8: {

 

   9:     base.OnAttached();
  10:  
  11:     _planeProjection = new PlaneProjection();
  12:     this.AssociatedObject.Projection = _planeProjection;
  13:  
  14:     (new MouseWheelHelper(this.AssociatedObject as FrameworkElement)).Moved += new System.EventHandler<MouseWheelEventArgs>(Mouse3DBehavior_Moved);
  15:  
  16:     this.AssociatedObject.MouseLeftButtonDown += new MouseButtonEventHandler(AssociatedObject_MouseLeftButtonDown);
  17:     this.AssociatedObject.MouseLeftButtonUp += new MouseButtonEventHandler(AssociatedObject_MouseLeftButtonUp);
  18:     this.AssociatedObject.MouseMove += new MouseEventHandler(AssociatedObject_MouseMove);
  19:     this.AssociatedObject.MouseLeave += new MouseEventHandler(AssociatedObject_MouseLeave);
  20:  
  21:     this.AssociatedObject.KeyUp += new KeyEventHandler(AssociatedObject_KeyUp);
  22:     this.AssociatedObject.KeyDown += new KeyEventHandler(AssociatedObject_KeyDown);
  23: }
  24:  
  25: bool _shiftPressed = false;
  26:  
  27: void AssociatedObject_KeyDown(object sender, KeyEventArgs e)
  28: {
  29:     if (e.Key == Key.Shift)
  30:     {
  31:         _shiftPressed = true;
  32:     }
  33: }
  34:  
  35: void AssociatedObject_KeyUp(object sender, KeyEventArgs e)
  36: {
  37:     _shiftPressed = false;
  38: }
  39:  
  40: void Mouse3DBehavior_Moved(object sender, MouseWheelEventArgs e)
  41: {
  42:     if (_buttonPressed)
  43:     {
  44:         _planeProjection.LocalOffsetZ += e.Delta * 10;
  45:         this.AssociatedObject.Projection = _planeProjection;
  46:     }
  47: }
  48:  
  49: void AssociatedObject_MouseLeave(object sender, MouseEventArgs e)
  50: {
  51:     _buttonPressed = false;
  52: }
  53:  
  54: void AssociatedObject_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  55: {
  56:     _originPoint = GetPoint(e);
  57:     _buttonPressed = true;
  58: }
  59:  
  60: void AssociatedObject_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
  61: {
  62:     _buttonPressed = false;
  63: }
  64:  
  65: void AssociatedObject_MouseMove(object sender, MouseEventArgs e)
  66: {
  67:     if (_buttonPressed)
  68:     {
  69:         Point p = GetPoint(e);
  70:  
  71:         double diffX = p.X - _originPoint.X;
  72:         double diffY = p.Y - _originPoint.Y;
  73:  
  74:         _planeProjection.RotationY += diffX / 10;
  75:         _planeProjection.RotationX += diffY / 10;
  76:         this.AssociatedObject.Projection = _planeProjection;
  77:  
  78:         _originPoint = p;
  79:     }
  80: }
  81:  
  82: private Point GetPoint(MouseEventArgs e)
  83: {
  84:     return e.GetPosition(this.AssociatedObject);
  85: }
  86:  
  87: protected override void OnDetaching()
  88: {
  89:     base.OnDetaching();
  90:  
  91:     this.AssociatedObject.Projection = null;
  92:  
  93:     this.AssociatedObject.MouseLeftButtonDown -= new MouseButtonEventHandler(AssociatedObject_MouseLeftButtonDown);
  94:     this.AssociatedObject.MouseLeftButtonUp -= new MouseButtonEventHandler(AssociatedObject_MouseLeftButtonUp);
  95:     this.AssociatedObject.MouseMove -= new MouseEventHandler(AssociatedObject_MouseMove);
  96: }

Damit das ganze funktioniert muss man noch die Microsoft.Expression.Interactivity bzw. System.Windows.Interactivity einbinden. Diese liegt in einem Unterordner von Expression bzw. dem SDK.

Silverlight 3: 3D ImageGrid erstellen

10.06.2009 10:38:58 | Oliver Scheer

Ich habe vor einigen Tagen eine sehr nette Anwendung zum Betrachten von Fotos im Browser gesehen. Der Nachtteil bei der Anwendung war allerdings, das man vorher ein spezielles Plug-In (weder Flash noch Silverlight) installieren musste um sich das ganze zu Betrachten. Außerdem war es sehr groß … :(

Das geht leichter und einfacher und noch viel dynamischer dachte ich mir und habe deshalb mal ein eigenes Container-Control (ImageGrid) erstellt.

image

Schritt 1: Ableiten von der richtigen Klasse –> Panel

   1: public class ImageGrid : Panel
   2: {
   3:     protected override Size ArrangeOverride(Size finalSize)
   4:     {
   5:         double imageWidth = (double)this.GetValue(ImageWidthProperty);
   6:         double imageHeight = (double)this.GetValue(ImageHeightProperty);
   7:         int rowsPerColumn = (int)this.GetValue(RowsPerColumnProperty);
   8:         double imageMargin = (double)this.GetValue(ImageMarginProperty);
   9:  
  10:         int currentRow = 0;
  11:         int currentColumn = 0;
  12:  
  13:         foreach (Image image in this.Children.OfType<Image>())
  14:         {
  15:             Hover3DBehavior behavior = new Hover3DBehavior();
  16:             behavior.ZHoverValue = (double)this.GetValue(ZHoverValueProperty);
  17:             behavior.Attach(image);
  18:  
  19:             if ((bool)this.GetValue(ShowShadowProperty))
  20:             {
  21:                 DropShadowEffect ds = new DropShadowEffect();
  22:                 ds.Opacity = .3;
  23:                 ds.BlurRadius = 10.0;
  24:                 ds.Direction = 0.0;
  25:                 ds.ShadowDepth = 20.0;
  26:                 image.Effect = ds;
  27:             }
  28:  
  29:             Rect rect = new Rect(
  30:                 currentColumn * (imageWidth + imageMargin),
  31:                 currentRow * (imageHeight + imageMargin),
  32:                 imageWidth,
  33:                 imageHeight);
  34:  
  35:             image.Width = imageWidth;
  36:             image.Height = imageHeight;
  37:             image.Arrange(rect);
  38:             image.InvalidateArrange();
  39:  
  40:             currentRow++;
  41:             if (currentRow >= rowsPerColumn)
  42:             {
  43:                 currentRow = 0;
  44:                 currentColumn++;
  45:             }
  46:         }
  47:  
  48:         Size newSize = new Size((currentColumn+1) * (imageWidth + imageMargin), rowsPerColumn * (imageHeight+imageMargin));
  49:  
  50:         return base.ArrangeOverride(newSize);
  51:     }
  52: }

Schritt 2: Erweitern mit netten Eigenschaften zum Konfigurieren

   1: private const int C_DefaultRowsPerColumn = 5;
   2: private const double C_DefaultImageWidth = 160.0;
   3: private const double C_DefaultImageHeight = 120.0;
   4: private const double C_DefaultZHover = 200.0;
   5: private const bool C_DefaultShowShadow = true;
   6: private const double C_DefaultImageMargin = 8.0;
   7:  
   8: #region Images per column
   9:  
  10: public int RowsPerColumn
  11: {
  12:     get { return (int)GetValue(RowsPerColumnProperty); }
  13:     set { SetValue(RowsPerColumnProperty, value); }
  14: }
  15:  
  16: public static readonly DependencyProperty RowsPerColumnProperty =
  17:         DependencyProperty.Register("RowsPerColumn", typeof(int),
  18:         typeof(ImageGrid),
  19:         new PropertyMetadata(C_DefaultRowsPerColumn,
  20:         new PropertyChangedCallback(OnImageSizeChanged)));
  21:  
  22: #endregion
  23:  
  24: #region Image Width
  25:  
  26: public double ImageWidth
  27: {
  28:     get { return (double)GetValue(ImageWidthProperty); }
  29:     set { SetValue(ImageWidthProperty, value); }
  30: }
  31:  
  32: public static readonly DependencyProperty ImageWidthProperty =
  33:         DependencyProperty.Register("ImageWidth", typeof(double),
  34:         typeof(ImageGrid),
  35:         new PropertyMetadata(C_DefaultImageWidth,
  36:         new PropertyChangedCallback(OnImageSizeChanged)));
  37:  
  38: #endregion
  39:  
  40: #region Image Margin
  41:  
  42: public double ImageMargin
  43: {
  44:     get { return (double)GetValue(ImageMarginProperty); }
  45:     set { SetValue(ImageMarginProperty, value); }
  46: }
  47:  
  48: public static readonly DependencyProperty ImageMarginProperty =
  49:         DependencyProperty.Register("ImageMargin", typeof(double),
  50:         typeof(ImageGrid),
  51:         new PropertyMetadata(C_DefaultImageMargin,
  52:         new PropertyChangedCallback(OnImageSizeChanged)));
  53:  
  54: #endregion
  55:  
  56: #region Image Height
  57:  
  58: public double ImageHeight
  59: {
  60:     get { return (double)GetValue(ImageHeightProperty); }
  61:     set { SetValue(ImageHeightProperty, value); }
  62: }
  63:  
  64: public static readonly DependencyProperty ImageHeightProperty =
  65:         DependencyProperty.Register("ImageHeight", typeof(double),
  66:         typeof(ImageGrid),
  67:         new PropertyMetadata(C_DefaultImageHeight,
  68:         new PropertyChangedCallback(OnImageSizeChanged)));
  69:  
  70: protected static void OnImageSizeChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
  71: {
  72:     ImageGrid i = obj as ImageGrid;
  73:     i.InvalidateArrange();
  74: }
  75:  
  76: #endregion
  77:  
  78: #region ZHoverValue 
  79:  
  80: public double ZHoverValue
  81: {
  82:     get { return (double)GetValue(ZHoverValueProperty); }
  83:     set { SetValue(ZHoverValueProperty, value); }
  84: }
  85:  
  86: public static readonly DependencyProperty ZHoverValueProperty =
  87:     DependencyProperty.Register("ZHoverValue", typeof(double), typeof(ImageGrid),
  88:     new PropertyMetadata((double)C_DefaultZHover, null));
  89:  
  90: #endregion
  91:  
  92: #region Show Shadow
  93:  
  94: public bool ShowShadow
  95: {
  96:     get { return (bool)GetValue(ShowShadowProperty); }
  97:     set { SetValue(ShowShadowProperty, value); }
  98: }
  99:  
 100: public static readonly DependencyProperty ShowShadowProperty =
 101:     DependencyProperty.Register("ShowShadow", typeof(bool), typeof(ImageGrid),
 102:     new PropertyMetadata((bool)C_DefaultShowShadow, new PropertyChangedCallback(OnImageSizeChanged)));
 103:  
 104: #endregion

Schritt 4: Erstellen eines Hover-Effektes mithilfe eines Behaviors

   1: public class Hover3DBehavior : Behavior<UIElement>
   2: {
   3:     PlaneProjection _planeProjection;
   4:  
   5:     public Hover3DBehavior()
   6:         : base()
   7:     {
   8:        
   9:     }
  10:  
  11:     Storyboard _hoverMe;
  12:     Storyboard _unhoverMe;
  13:  
  14:     private const double C_DefaultHoverValue = 500.0;
  15:  
  16:     #region ZHoverValue 
  17:  
  18:     public double ZHoverValue
  19:     {
  20:         get { return (double)GetValue(ZHoverValueProperty); }
  21:         set { SetValue(ZHoverValueProperty, value); }
  22:     }
  23:  
  24:     public static readonly DependencyProperty ZHoverValueProperty =
  25:         DependencyProperty.Register("ZHoverValue", typeof(double), typeof(Hover3DBehavior),
  26:         new PropertyMetadata((double)C_DefaultHoverValue, null));
  27:  
  28:     #endregion
  29:  
  30:     #region Overrides 
  31:  
  32:     protected override void OnAttached()
  33:     {
  34:         base.OnAttached();
  35:  
  36:         _planeProjection = new PlaneProjection();
  37:         this.AssociatedObject.Projection = _planeProjection;
  38:  
  39:         if (!DesignerProperties.GetIsInDesignMode(this))
  40:         {
  41:             _hoverMe = new Storyboard();
  42:  
  43:             DoubleAnimation da1 = new DoubleAnimation();
  44:  
  45:             _hoverMe.Children.Add(da1);
  46:             da1.Duration = new Duration(new System.TimeSpan(0, 0, 0, 0, 300));
  47:             da1.To = this.ZHoverValue;
  48:             Storyboard.SetTarget(da1, this.AssociatedObject);
  49:             Storyboard.SetTargetProperty(da1, new PropertyPath("(UIElement.Projection).(PlaneProjection.LocalOffsetZ)"));
  50:  
  51:             DoubleAnimation da2 = new DoubleAnimation();
  52:             BounceEase be2 = new BounceEase();
  53:             be2.EasingMode = EasingMode.EaseOut;
  54:             be2.Bounces = 3;
  55:             da2.EasingFunction = be2;
  56:  
  57:             _unhoverMe = new Storyboard();
  58:             _unhoverMe.Children.Add(da2);
  59:             da2.Duration = new Duration(new System.TimeSpan(0, 0, 0, 0, 1000));
  60:             da2.To = 0.0;
  61:             Storyboard.SetTarget(da2, this.AssociatedObject);
  62:             Storyboard.SetTargetProperty(da2, new PropertyPath("(UIElement.Projection).(PlaneProjection.LocalOffsetZ)"));
  63:  
  64:             if ((this.AssociatedObject as FrameworkElement).Resources.Contains("hoverme"))
  65:             {
  66:                 (this.AssociatedObject as FrameworkElement).Resources.Remove("hoverme");
  67:             }
  68:             (this.AssociatedObject as FrameworkElement).Resources.Add("hoverme", _hoverMe);
  69:             
  70:             if ((this.AssociatedObject as FrameworkElement).Resources.Contains("unhoverme"))
  71:             {
  72:                 (this.AssociatedObject as FrameworkElement).Resources.Remove("unhoverme");
  73:             }
  74:             (this.AssociatedObject as FrameworkElement).Resources.Add("unhoverme", _unhoverMe);
  75:         }
  76:         
  77:         this.AssociatedObject.MouseEnter += new MouseEventHandler(AssociatedObject_MouseEnter);
  78:         this.AssociatedObject.MouseLeave += new MouseEventHandler(AssociatedObject_MouseLeave);
  79:     }
  80:  
  81:     protected override void OnDetaching()
  82:     {
  83:         base.OnDetaching();
  84:  
  85:         this.AssociatedObject.Projection = null;
  86:         _planeProjection = null;
  87:  
  88:         this.AssociatedObject.MouseEnter -= new MouseEventHandler(AssociatedObject_MouseEnter);
  89:         this.AssociatedObject.MouseLeave -= new MouseEventHandler(AssociatedObject_MouseLeave);
  90:     }
  91:  
  92:     #endregion
  93:  
  94:     #region Events
  95:  
  96:     void AssociatedObject_MouseLeave(object sender, MouseEventArgs e)
  97:     {
  98:         _unhoverMe.Begin();
  99:     }
 100:  
 101:     void AssociatedObject_MouseEnter(object sender, MouseEventArgs e)
 102:     {
 103:         _hoverMe.Begin();
 104:     }
 105:  
 106:     #endregion
 107:  
 108: }

Schritt 3: Verwenden in Blend

Das ImageGrid nach dem ich einige Beispielbilder reingesetzt habe.

image

Der Arbeitsbereich

image

Der VisualTree.

 image

Die zusätzlichen Konfigurationsmöglichkeiten.

Kostenlose Silverlight-Entwicklungstools

10.06.2009 10:15:27 | Oliver Scheer

Mit dem kostenlosen Visual Web Developer Express mit ServicePack ist auf jeden Fall Silverlight-Entwicklung möglich: http://www.microsoft.com/germany/express/product/visualwebdeveloperexpress.aspx

Im deutschsprachigen Silverlight-Developer-Center gibt’s haufenweise Infos zu Silverlight-Entwicklung: http://msdn.microsoft.com/de-de/silverlight/default.aspx

Meine zehnteilige Video-Einführung in SL2: http://www.microsoft.com/germany/msdn/webcasts/serien/MSDNWCS-0806-01.mspx

Das SDK ist hier: http://silverlight.net/GetStarted/ (englisch)

Xtopia [kompakt] 09: Videos und Vorträge jetzt als Download verfügbar…

10.06.2009 10:11:18 | Oliver Scheer

Die erste Xtopia [kompakt]-Roadshow rund um die Themen Web/UX und Rich Internet Applications war ein voller Erfolg. Von April bis Mai 2009 waren wir mit  Microsoft und anderen hochkarätigen Partnern auf der Xtopia im Kleinformat unterwegs: In München, Karlsruhe, Hamburg, Köln, Berlin und Frankfurt erlebten jeweils bis zu 100 Teilnehmer Vorträge und Demos zu den Themen Web, User Experience und Silverlight/Rich Internet Applications.

clip_image002

Wenn Sie in diesem Jahr keine Zeit hatten, bei Xtopia [kompakt] dabei zu sein, finden Sie auf der Website der Xtopia [kompakt] ab sofort (fast) alle Vorträge als PDF, viele Videos und umfangreiche Informationen rund um die Inhalte der vergangenen Roadshow. Im Mittelpunkt stehen Microsoft Surface, Windows 7, Silverlight 3 und Internet Explorer 8. Partner wie PC-Ware und das deutsche RIA-Forum begleiteten uns auf der Roadshow. Agenturen aus der Design- und Webbranche ergänzten die Vorträge mit Erfahrungsberichten zu Design, User Experience, Rich Internet Applications und Webentwickung. Beispielsweise zeigte CRM-Spezialist CAS in einem Vortrag die Vorteile von Silverlight gegenüber AJAX und Flash bei der Entwicklung professioneller Unternehmensanwendungen auf. Weitere Erfahrungsberichte kamen von Quark, Ergosign, maximago, Pixelpark AG, T-Systems MMS, UID, Perun.net und Sensory Minds.

Hier entlang zu den gesammelten Präsentationen der XTOPIA [kompakt] 09  und den Session-Videos: http://blogs.msdn.com/riablog/archive/2009/06/09/xtopia-kompakt-09-videos-und-vortr-ge-jetzt-als-download-verf-gbar.aspx bzw.  http://snipurl.com/jtiex

Xtopia [kompakt] 09: Videos und Vorträge jetzt als Download verfügbar

10.06.2009 09:42:00 | Jan Schenk

whats_next Die erste Xtopia [kompakt]-Roadshow war ein voller Erfolg. Von April bis Mai 2009 waren wir mit der Xtopia im Kleinformat unterwegs: In München, Karlsruhe, Hamburg, Köln, Berlin und Frankfurt erlebten jeweils bis zu 100 Teilnehmer Vorträge und Demos zu den Themen Web, User Experience und Silverlight/Rich Internet Applications.

Wenn Sie in diesem Jahr keine Zeit hatten, bei Xtopia [kompakt] dabei zu sein, finden Sie hier (fast) alle Vorträge als PDF, viele Videos und umfangreiche Informationen rund um die Inhalte der vergangenen Roadshow. Im Mittelpunkt standen Microsoft Surface, Windows 7, Silverlight 3 und Internet Explorer 8. Partner wie PC-Ware und das deutsche RIA-Forum begleiteten Microsoft. Agenturen aus der Design- und Webbranche ergänzten die Vorträge mit Erfahrungsberichten zu Design, User Experience, Rich Internet Applications und Webentwickung. Beispielsweise zeigte CRM-Spezialist CAS in einem Vortrag die Vorteile von Silverlight gegenüber AJAX und Flash bei der Entwicklung professioneller Unternehmensanwendungen auf. Weitere Erfahrungsberichte kamen von Quark, Ergosign, maximago, Pixelpark AG, T-Systems MMS, UID, Perun.net und Sensory Minds.

http://blogs.msdn.com/riablog/archive/2009/06/09/xtopia-kompakt-09-videos-und-vortr-ge-jetzt-als-download-verf-gbar.aspx



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/06/10/xtopia-kompakt-09-videos-und-vortr-ge-jetzt-als-download-verf-gbar.aspx';

Erstes Bootcamp bei der .Net Developer Group Braunschweig – Thema: Unit Tests

10.06.2009 04:20:01 | Lars Keller

Wie Torsten Weber schon in seinem Blogpost angekündigt hat, finde ich das Thema Bootcamps sehr spannend. Karim und ich haben uns entschlossen neben unseren monatlichen Treffen verschiedene Bootcamps anzubieten. Für das erste Bootcamp besucht uns Alexander Groß als Referent zu dem Thema Unit Tests. Dieses Bootcamp wird auch nach dem LdL-Prinzip gehalten. LdL bedeutet Lernen durch Lehren. Hierbei müssen die Teilnehmer aktiv mitmachen. Jeder Teilnehmer bekommt 1-2 Fragen vor dem Event zugeteilt und soll diese dann in dem Bootcamp erklären. Natürlich mit der Hilfe von Alex.

Gerade diese Idee der DNUG Leipzig, LdL mit einem Bootcamp zu verknüpfen, finde ich sehr interessant!

Ich freue mich auf das Bootcamp!

Links:

16.06.09 Treffen der .NET Developer Group Braunschweig – Thema: F#

10.06.2009 03:41:05 | Lars Keller

dotnet-bs_banner_blog

Unser 33 User Group Treffen der .NET Developer Group Braunschweig findet am 16.06.09, ab 19:00 Uhr in Kilian's Raffinerie statt.

Dieses Mal kommt uns Steffen Forkmann mit dem Thema F# besuchen:

Funktionale Programmiersprachen nehmen seit geraumer Zeit einen hohen Stellenwert in der Wissenschaft ein. Demnächst könnte es eine dieser Sprachen sogar aus dem Forschungsbereich direkt in den Mainstream schaffen. Visual Studio 2010 wird neben C# und VB.NET die funktionale Programmiersprache F# als dritte Hauptsprache anbieten. Das Vortrag soll einen Einblick in funktionale Konzepte und deren Umsetzung in F# geben. Insbesondere soll auf "Funktionen höherer Ordnung", Typinferenz, Currying, Pattern Matching, "Unveränderlichkeit" und parallele Programmierung eingegangen werden.

Weitere Informationen unter www.dotnet-braunschweig.de.

Wie immer ist jeder herzlich willkommen!

Druckbetankung – Die Show: Silverlight 3

09.06.2009 13:16:06 | Oliver Scheer

In diesem ersten Teil unserer Silverlight3-Serie "Druckbetankung - Die Show" geht es um Grundsätzliches, von den Voraussetzungen für Silverlight 3, über die Installation zu der neuen Features. Ausserdem installieren und zeigen ein paar Details der Blend 3 Preview, zum Beispiel die dort integrierte IntelliSense-Unterstützung.
Alles zum Ausprobieren und Nachmachen, wie immer auf unterhaltsame Art präsentiert von Oliver Scheer und meiner Wenigkeit.

Druckbetankung - Die Show -- Silverlight 3 Teil I

Im zweiten Teil unserer Staffel Silverlight 3 der Serie "Druckbetankung - Die Show" (ihr seht, wir haben uns Gedanken gemacht, wie das richtige Wording aussehen soll (= ) seht ihr die Navigation Templates, die neu in Silverlight 3 sind. Navigation Templates vereinfachen das Konzept der Seitentransparenz in Silverlight, so dass einzelne Inhalte einer Silverlight-Applikation auch per URL angesteuert werden und von Suchmaschinen so direkt indiziert werden können. Wie das Ganze funktioniert und wo noch weitere Vorteile liegen erfahrt ihr im Video!

Druckbetankung - Die Show -- Silverlight 3 Teil II

Der dritte Teil unserer Silverlight 3 Staffel der Serie Druckbetankung befasst sich mit der Out-of-Browser-Funktionalität, die in Silverlight 3 neu hinzugekommen ist. Diese ermöglicht es dem User, eine Web-Silverlight-Applikation auf dem Desktop bzw. lokal auf dem PC abzulegen, und von dort wie gewohnt zu verwenden, ohne dass ein Browser involviert ist. Oliver Scheer und ich zeigen, wie man seine Applikation Out-of-Browser-Ready macht, und welche zusätzlichen Möglichkeiten der Programmierung dadurch möglich werden. Wir zeigen, wie man der Applikation beibringt zu wissen, ob sie im Browser oder lokal läuft und wie man den Onlinestatus überprüft.

Druckbetankung - Die Show -- Silverlight 3 Teil III

Im vierten Teil unserer Staffel Silverlight 3 der Serie "Druckbetankung - Die Show" erklären Oliver Scheer und ich das Thema Animation und Storyboarding in Expression Blend 3. Ausserdem kommt das Thema "Easing Functions" zur Sprache. Easing Functions erleichtern dank vorgegebener Bewegungsabläufe die natürliche Animation von Objektbewegungen.

Druckbetankung - Die Show -- Silverlight 3 Teil IV

Im fünften Teil der Staffel Silverlight 3 aus der Serie "Druckbetankung - Die Show" geht es um das Binden von Elementeigenschaften an die Werte der Eigenschaften anderer Elemente. Das Sogenannte Element-to-Element Binding ist dafür verantwortlich, dass man in Silverlight mit Hilfe eines Sliders beispielsweise die Darstellungsgröße eines Textes verändern kann. An einem praktischen Beispiel zeigen Oliver Scheer und ich wie diese Technik verwendet wird.

Druckbetankung - Die Show -- Silverlight 3 Teil V

In Teil sechs der Staffel Silverlight 3 aus der Serie "Druckbetankung - Die Show" dreht sich alles um die Plane Projection, die 3D-Projektion in Silverlight 3. Diese Projektion lässt sich sowohl in Expression Blend 3 verändern, als auch an Eingabefelder, beispielsweise Slider, binden und so in der Anwendung selber interaktiv verändern. Oliver Scheer und ich programmieren uns explorativ durch die Möglichkeiten der 3D-Projektion.

Druckbetankung - Die Show -- Silverlight 3 Teil VI

Druckbetankung – Die Show: Einführung Silverlight 2

09.06.2009 13:09:38 | Oliver Scheer

Im ersten Teil unseres neuen Formates "Druckbetankung - Die Show" erzählen Oliver Scheer und ich alles über Silverlight 2. Alles? Nicht ganz, aber wir fangen bei den Basics an, zeigen, welche Voraussetzungen man für die Silverlight-Entwicklung benötigt, wo Stolpersteine liegen könnten und wie man zu seiner ersten Silverlight Applikation kommt und diese auf seiner Seite einbindet.
In den kommenden Teilen wird dieses Wissen dann vertieft bis zur Datenbindung und zum Cross-Domain-Access.
Ausserdem seht ihr das Zusammenspiel zwischen Visual Studio 2008 und Expression Blend 2 SP1.

Druckbetankung - Die Show -- Silverlight Teil I

Im zweiten Teil der Silverlight-Serie "Druckbetankung - Die Show" bauen Oliver Scheer und ich einen RSS-Reader in Expression Blend 2 SP1 und Visual Studio. Was muss so ein Silverlight RSS-Reader können? Und wie kann man das mit wenig Code umsetzen?
Am Ende haben wir ein funktionales, wenn auch nicht unbedingt schönes Grundgerüst mit Cross-Domain-Zugriff per WebService aus der Windows Communication Foundation (WCF), interaktiver Suche per Language Integrated Query (LINQ) und Datenbindung der Ergebnisse an eine ListBox.

Druckbetankung - Die Show -- Silverlight Teil II

In Teil 3 unserer Serie "Druckbetankung - Die Show" geht es um Beautifying, Templates, Ressourcen, Styling und Skinning. Oliver Scheer und ich haben in den vorangegegangenen Webcasts bereits eine fertige Anwendung aus Entwicklersicht gebaut, denn alle wichtigen Funktionen sind integriert. Aber so richtig benutzbar und schön ist das Ganze noch nicht. Also nochmal ran mit Expression Blend und die Anwendung mit eigens entworfenen Buttons, einem animierten UserControl für die Zeit des Nachladens und ein paar Farbverläufe sollten auch noch drin sein.

Druckbetankung - Die Show -- Silverlight Teil III

Search Engine Optimization mit Silverlight

09.06.2009 11:32:06 | Oliver Scheer

Mein Kollege hat einige sehr interessante Beiträge zum Theme Suchmaschinenoptimierung / Search Engine Optimization/SEO veröffentlich.

http://blogs.msdn.com/waldred/archive/2009/03/23/Search-Engine-Optimization-for-Silverlight-Applications.aspx

http://blogs.msdn.com/waldred/archive/2009/03/24/search-engine-optimization-for-silverlight-applications-part-2.aspx

Zusätzlich gibt es seit einigen Tagen im Web PI (Microsoft Web Platform Installer) kostenfrei ein SEO-Toolkit für den IIS. Link: Microsoft Web Platform

Html in Silverlight darstellen, die Zweite

09.06.2009 11:21:55 | Oliver Scheer

Derzeit (Silverlight 3) ist es nicht direkt möglich HTML in Silverlight direkt darzustellen. Allerdings kann man sich mittels HTML und einem DIV über dem Silverlight-Control einfach behelfen.

Allerdings kann man sich auch den unten folgenden Links bedienen um eben Text mit HTML-formatiert in Silverlight direkt einzubinden.

http://www.vectorlight.net/tutorials/rendering_html_in_silverlight_2.aspx

http://blogs.msdn.com/delay/archive/2007/09/10/bringing-a-bit-of-html-to-silverlight-htmltextblock-makes-rich-text-display-easy.aspx

https://www.componentone.com/SuperProducts/HtmlHostSilverlight/

Meinen Weblog auf Deiner Webseiten einbinden?

09.06.2009 10:41:38 | Oliver Scheer

Dieses Posting ist für alle interessierten Webmaster gedacht, aber auch für mich selbst, um bei erneuten Anfragen zur Content-Syndication bezüglich Inhalte von meinem Weblog, darauf zu referenzieren.
Für ausgewählte Bereiche des MSDN Online-Portals in Deutschland stehen ja schon seit einiger Zeit RSS-Feeds zur Verfügung, die automatisch über neue Inhalte informieren. Dabei erhält man nicht nur werktäglichen News, sondern auch Infos zu technischen Ressourcen wie Webcasts, CodeClips, Artikel oder Bücher sowie zu Veranstaltungen. Mit dem neuen MSDN RSS Konfigurator lassen sich problemlos in wenigen Schritten diese Inhalte auf Webseiten integrieren und anzeigen. Seit einigen Tagen ist nun dort auch mein Weblog gelistet. Da ich doch öfters mal die Frage bekomme, ob man z.B. den RSS-Feed meines Weblogs woanders darstellen darf, hier nun die offizielle Antwort:
Wenn man den MSDN RSS Konfigurator dafür nutzt, darf man dies sehr gerne und ich würde mich sehr freuen, wenn man diese Art der Content-Syndication nutzen würde.
Fragen zum Konfigurator oder Feedback können auf MSDN Online im Forum gestellt und diskutiert werden.

Optimierungseinstellung im Reflector, oder: Wie sieht LINQ wirklich aus?

08.06.2009 20:24:00 | Peter Bucher

Beim dritten Treffen vom .NET Stammtisch Konstanz - Kreuzlingen habe ich einen Vortrag über LINQ gehalten.
Dabei wollte ich zeigen wie aus dem SQL ähnlichen Syntax von LINQ aneinandergereihte Methoden Aufrufe werden und aus den Lambda Ausdrücken jeweils anonyme Methoden.

Das geht über den Reflector auch wunderbar. Kurz vor dem Vortrag habe ich den Fehler begangen und Windows 7 installiert… nicht das Windows 7 der Fehler gewesen wäre, sondern die Neuinstallation.
So hatte ich vieles noch nicht 100% so wie es war und ausserdem war plötzlich die neuste Version vom Reflector installiert.

Als ich während dem Vortrag den Code demonstrieren wollte, bekamen wir natürlich nur wunderschöne Lambda-Ausdrücke zu sehen, keine anonymen Methoden. Ich wusste nicht wieso und hatte keine Zeit das herauszufinden.

.NET 3.5

public Download GetDownloadByFileName(string fileName)
{
    return this.GetList(d => d.FileName == fileName).SingleOrDefault<Download>();
}

Eigentlich ist es relativ einfach, man gehe im Menü unter: View –> Options –> Disassembler und stellt bei Optimization .NET 2.0 ein, dann sieht es nämlich so aus:

public Download GetDownloadByFileName(string fileName)
{
    return this.GetList(delegate (Download d) {
        return d.FileName == fileName;
    }).SingleOrDefault<Download>();
}

Wird None oder .NET 1.0 eingestellt ist der Code schon fast nicht mehr zu lesen.
Es ist hier gut zu erkennen, was der Kompiler im Hintergrund alles erzeugt damit die oben geschriebene Syntax funktioniert.

public Download GetDownloadByFileName(string fileName)
{
    <>c__DisplayClass1 CS$<>8__locals2;
    Download CS$1$0000;
    CS$<>8__locals2 = new <>c__DisplayClass1();
    CS$<>8__locals2.fileName = fileName;
    CS$1$0000 = this.GetList(new Func<Download, bool>(CS$<>8__locals2.<GetDownloadByFileName>b__0)).SingleOrDefault<Download>();
Label_0028:
    return CS$1$0000;
}

Bearbeitung / Korrekturen:
09.06.09 - Das Codesnippet zu .NET 2.0 war natürlich das falsche, jetzt sieht man auch die anonyme Methode.

prio.conference 2009 zu User Interface Themen

08.06.2009 15:07:13 | Mathias Raacke

Bei der nächsten prio.conference am 28. und 29. Oktober geht es um das Thema “User Interfaces”. Neben technischen Vorträgen, z.B. zu Silverlight, gibt es auch Vorträge zu Ergonomie oder UI-Tests.

Mit dem Thema “Internationalisierung von WPF Anwendungen” werde ich selbst mit einem Vortrag auf der prio vertreten sein. Zu diesem Thema schreibe ich zurzeit eine Diplomarbeit, und werde auf der prio die Ergebnisse dieser Arbeit vorstellen.

Hier der Abstract zu meinem Vortrag:

Sie entwickeln Ihre Anwendungen nicht  nur für einen Markt, sondern müssen Ihre Anwendung an verschiedene Sprachen und Kulturen anpassen können? Das war bei Windows Forms und ASP.NET einigermaßen bequem möglich, also wird das doch im neuen WPF mindestens genauso einfach sein? Die Realität sieht leider anders aus.

Windows Presentation Foundation Anwendungen lassen sich nicht mehr so einfach und bequem im Designer in andere Sprachen übersetzen, wie es noch bei Windows Forms oder ASP.NET Anwendungen möglich war. Visual Studio und Expression Blend bieten keine direkte Unterstützung für die Lokalisierung. Stattdessen bietet Microsoft nur eine Lokalisierungs-API, mit deren Hilfe eigene Lokalisierungswerkzeuge entwickelt werden müssen. Zu dieser API gibt es sogar eine Beispielanwendung; für mehr als die Übersetzung einer „Hello World“-Anwendung taugt diese jedoch nicht. Deshalb finden sich im Web auch unterschiedlichste Alternativen, um WPF Anwendungen zu lokalisieren, z.B. die Verwendung „klassicher“ .resx-Ressourcendateien  oder spezieller XAML-Markup-Extensions.

In diesem Vortrag erfahren Sie, mit welchen Techniken Sie Ihre WPF Anwendungen an verschiedene Sprachen und Kulturen anpassen können. Nach einem Überblick über die WPF Lokalisierungs-API werden verschiedene alternative Lokalisierungsmöglichkeiten vorgestellt.

 

.NET Code Contracts Vortrag auf der Springboard Konferenz

08.06.2009 14:55:50 | Mathias Raacke

Am Freitag war ich mit einem Vortrag zu .NET Code Contracts auf der Springboard Konferenz in Köln. Die Springboard war eine Konferenz für Studenten und somit eine schöne Gelegenheit, mal wieder ein paar alte Kollegen aus dem Student Program zu treffen.

Neben meinem Vortrag hatte ich an dem Tag noch einen weiteren wichtigen Termin, auf den ich mich intensiv vorbereiten musste. Das führte dazu, dass ich die ganze Woche meistens bis nach Mitternacht mit dem Vortrag oder dem anderen Termin beschäftigt war. Jedenfalls war das lezte Beispiel mal wieder Just-in-time ca. 30 Minuten vor meinem Vortrag fertig. Demnächst sollte ich darauf achten, wichtige Termine weiter auseinander zu legen, dann habe ich vielleicht auch wieder mehr Freizeit ;-).

Folien zum Vortrag

Den gleichen Vortrag halte ich noch einmal am 10.06. bei der .NET User Group Paderborn.

Die Montagsmeinung: Was für ein Kindergeburtstag

08.06.2009 12:51:46 | Jan Schenk

Kinderfasching oder Ponyhof, wer diese Sprüche erfunden hat, den würde ich gerne mal treffen. Ich bin mir sicher, er oder sie war - zumindest zu dem Zeitpunkt der Phrasenschöpfung - kinderlos.

Ich hatte letzte Woche den direkten Vergleich.
Freitag früh - Flug nach Köln 
Freitag Vormittag - Vorbereitung des Vortrags “Silverlight 3”
Freitag Mittag - Verabredung zum Essen
Freitag Nachmittag - Vortrag auf der Springboard Konferenz
Freitag Abend - Flug nach München
Freitag Nacht - schon wieder daheim? Da war ich doch erst…

Samstag - Vorbereitung für den Sonntag (Einkaufen, Erdbeeren pflücken, Kochen)

Sonntag früh - Hurra, Mia hat Geburtstag. Wer denkt, Zweijährige würden das noch nicht verstehen, täuscht sich.
Sonntag Vormittag - letzte Vorbereitungen, Vorkochen für den Geburtstagsmontag in der Krippe
Sonntag Mittag - Die Wohnung fit machen für die Geburtstagsgesellschaft (Aufräumen, Umräumen, Putzen)
Sonntag Nachmittag - 5 Familien mit den auch ca. zweijährigen Gästen, Oma und Opa empfangen, verköstigen, unterhalten
Sonntag Abend - Mia ist jetzt langsam müde, was war das für ein großer Tag
Sonntag Nacht - den ganzen Krempel wieder aufräumen, umräumen, abspülen, putzen, Chaos beseitigen

Zum Glück ist Geburtstag nur einmal im Jahr. Oder? Vorträge sind bei uns Evangelisten ja bekanntlich häufiger. 
Was es einem aber in Sachen Glücksgefühle und Zufriedenheit gibt, sind die zwei Beispiele - also Arbeitsalltag und der Ehrentag der Tochter - tatsächlich irgendwie vergleichbar. Beides macht mich stolz und glücklich, bei beidem bin ich danach froh, wenn sie rum sind, bei beiden freue ich mich auf das nächste Mal. Nur nicht all zu bald, wenn ich es mir aussuchen kann. Und bei beiden geht es immer nur darum, jemand anders glücklich und rundum zufrieden zu machen.

Das war eine komische Montagsmeinung? Stimmt, aber was erwartet ihr nach so einem Wochenende von mir ;-)

Viele Grüße,
jan



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/06/08/die-montagsmeinung-was-f-r-ein-kindergeburtstag.aspx';

Talk to Students: 1. Springboard Konferenz 2009 in Köln

08.06.2009 10:33:51 | Jan Schenk

Am Freitag hatte ich die Ehre an der ersten Springboard Konferenz als Sprecher teil zu nehmen. Die Springboard Konferenz versteht sich als studentische Entwicklerkonferenz und konnte mit 2 parallelen Tracks aufwarten, die den 5. Juni 2009 bis abends um 17:30 füllten. Ihr Zuhause hatte sie mit ca. 80 Teilnehmern im Kölner Microsoft Office.

Die Teilnehmer waren durchweg Studenten. Als Sprecher waren hauptsächlich Microsoft Student Partner eingeladen worden, zwei oder drei freie Sprecher und ich als einziger Microsoft Evangelist.

Womit ich auch bei meinem Thema dieser Konferenz angelangt wäre:
Silverlight 3
Leider waren nur zwei der Teilnehmer bisher mit Silverlight-Entwicklung in Kontakt gekommen, wodurch die Thematik “Silverlight 3” (also: was kommt Neues nach Version 2) ein wenig daneben gezielt war. Ein allgemeiner Silverlight-Talk hätte an der Stelle eventuell mehr Zuspruch bekommen. Nichts desto trotz war ich begeistert vom Interesse und der Motivation meiner Audience, und hätte mir danach am liebsten gewünscht, dass alle meine Talks ein so hochwertiges Publikum bekämen.

Die von mir gezeigte Präsentation und die Demo-Solutions gibt es hier als Zip zum Herunterladen: Springboard09_Silverlight3_JanSchenk.zip

Ich freue mich auf jeden Fall auf eine Fortsetzung dieser Veranstaltung.

Danke an Dennis für die Idee und die Umsetzung, und allen Beteiligten für ein schönes rundes Event (soweit ich das Beurteilen kann, da ich erst kurz nach Mittag angekommen bin).



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/06/08/talk-to-students-1-springboard-konferenz-2009-in-k-ln.aspx';

Microsoft WorldWide Telescope in Silverlight

08.06.2009 09:47:04 | Oliver Scheer

Wer gerne mal in den Sternenhimmel guckt, der ist hier richtig aufgehoben.

 

image 

Link: http://www.worldwidetelescope.org/webclient/

Sparkassen-Fotowettbewerb mit Silverlight

08.06.2009 09:32:15 | Oliver Scheer

Die Sparkasse Duisburg sucht derzeit das “Sparkassengesicht 2009”. Und das mit einer sehr netten Silverlight-Anwendung.

image

Live zu sehen unter: http://www.sparkassengesicht.de/Voting.html

Reflection die zweite

08.06.2009 08:16:38 | Daniel Schädler

Im vorherigen Blogpost habe ich geschrieben wie man mit Reflection Werte einem Control zuweisen kann. Wenn man nach folgenden Punkten vorgeht, dann kann die anschliessend aufgezeigte Methode fürs DataBinding an jedes beliebige Control verwenet werden. Wenn wir zum Beispiel von der Klasse Device, welche Eigenschaften wie Netbiosname, GUID, MAC etc. besitzt, diese Eigenschaften und deren Werte an ein entsprechendes Control binden wollen dann muss das entsprechende zu bindende Control mindestens den Namen einer Eigenschaft besitzen. Ich bin selber nach dem Namensschema gegangen:

- Seitenname_Klassenname_Eigenschaft_ArtderControls ergibt bei mir = GridViewRowUpdate_Device_NetbiosName_Label.

   1: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GridViewRowUpdate.aspx.cs" Inherits="Buraut.Ais.WebFrontEnd.Test.ControlPossibilities.GridViewRowUpdate" %>
   2:  
   3: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   4:  
   5: <html xmlns="http://www.w3.org/1999/xhtml" >
   6: <head runat="server">
   7:     <title></title>
   8: </head>
   9: <body>
  10:     <form id="form1" runat="server">
  11:     <div>
  12:         <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
  13:         <Scripts>
  14:         <asp:ScriptReference Path="~/JScript/jquery-1.3.2-vsdoc2.js" />
  15:         </Scripts>
  16:         </asp:ScriptManager>
  17:         <asp:GridView ID="Results_GridView" runat="server" AutoGenerateColumns="false" OnRowDataBound="ResultsGridView_OnRowDataBound" OnDataBound="ResultsGridView_OnDataBound">
  18:         <Columns>
  19:         <asp:TemplateField>
  20:         <HeaderTemplate>
  21:         <asp:Label ID="GridViewRowUpdate_Resource_Lifecycle_Header_Label" runat="server" Text="Lifecycle"></asp:Label>
  22:         </HeaderTemplate>
  23:         <ItemTemplate>
  24:         <asp:Image ID="GridViewRowUpdate_Resource_Lifecycle_Content_Image" runat="server" ImageUrl="~/Images/Common/Trafficlight_red_icon_large.png"></asp:Image>
  25:         <asp:HiddenField ID="DeviceId_Hdf" runat="server" Value='<% #Eval("Id") %>' />
  26:         </ItemTemplate>
  27:         </asp:TemplateField>
  28:         <asp:TemplateField>
  29:         <HeaderTemplate>
  30:         <asp:Label ID="GridViewRowUpdate_Device_NetBiosName_Header_Label" runat="server" Text="NetBiosName"></asp:Label>
  31:         </HeaderTemplate>
  32:         <ItemTemplate>
  33:         <asp:Label ID="GridViewRowUpdate_Device_NetBiosName_Content_Label" runat="server"></asp:Label>
  34:         </ItemTemplate>
  35:         </asp:TemplateField>
  36:         <asp:TemplateField>
  37:         <HeaderTemplate>
  38:         <asp:Label ID="GridViewRowUpdate_Device_GUID_Header_Label" runat="server" Text="GUID"></asp:Label>
  39:         </HeaderTemplate>
  40:         <ItemTemplate>
  41:         <asp:Label ID="GridViewRowUpdate_Device_GUID_Content_Label" runat="server" Text='<% #Eval("GUID") %>'></asp:Label>
  42:         </ItemTemplate>
  43:         </asp:TemplateField>
  44:         <asp:TemplateField>
  45:         <HeaderTemplate>
  46:         <asp:Label ID="Save_Header_Label" runat="server" Text="Speichern"></asp:Label>
  47:         </HeaderTemplate>
  48:         <ItemTemplate>
  49:         <asp:Button ID="Save_Button" runat="server" Text="Speichern" CommandName="Save" OnClientClick="javascript: this.enabled == false;"></asp:Button>
  50:         </ItemTemplate>
  51:         </asp:TemplateField>
  52:         </Columns>
  53:         </asp:GridView>
  54:     </div>
  55:     </form>
  56: </body>
  57: </html>

In der Codebehind habe ich im Ereignis on RowDataBound folgende Methode:

   1: protected void ResultsGridView_OnDataBound(object sender, EventArgs e) {
   2:     GridView gridView = (GridView)sender;
   3:  
   4:     foreach(GridViewRow row in gridView.Rows) {
   5:         if(row.RowType == DataControlRowType.DataRow) {
   6:             foreach(var item in WebUtils.FindControlsRecursiv(typeof(Label), row)) {
   7:                 if(((WebControl)item).ID.Contains("Content")) {
   8:                     ModelViewDataHelper.SetDataValue((WebControl)item, typeof(Device), Devices[row.RowIndex]);
   9:                 }
  10:             }
  11:         }
  12:     }
  13: }

Die im ModelViewDataHelper folgende Methode aufruft. Hier wir das momentane Elemente der ans GridView gebundene Collection als Parameter mitgegeben sowie der Typ (hier in diesem Beispiel Device) von welchem gebunden werden soll. Der Contorlname wird dann mit Split(‘_’) zerlegt und die Properties der entsprechenden Klasse Device werden durchsucht, ob eine Übereinstimmung vorhanden ist. Wenn ja wird der Wert des Properties, den wir ja über object erhalten, gesetzt.

   1: /// <summary>
   2: /// Sets the data value of a webcontrol through reflection.
   3: /// It must have the webcontrol als parameter to fill in and
   4: /// the class e.g. typeof(Device) so the properties can be read
   5: /// and assigned. Momentanous only controls with a text property
   6: /// are supported by this method.
   7: /// </summary>
   8: /// <param name="webcontrol">The webcontrol.</param>
   9: /// <param name="type">The type.</param>
  10: /// <param name="obj">The object that contains the data.</param>
  11: /// <returns></returns>
  12: public static void SetDataValue(WebControl webcontrol, Type type, object obj) {            
  13:     // Checking if provided webcontrol has a text property
  14:     if(webcontrol.GetType().GetProperty("Text") == null) {
  15:         throw new DeveloperException("The provided control must have a text property to fill with values. e.g Label or TextBox. [sda]");
  16:     }
  17:  
  18:     string[] searchPattern = webcontrol.ID.Split('_');
  19:  
  20:     // Looking for a matching property that is used in the controlname and it's correspondig model property
  21:     for(int i = 0; i < searchPattern.Length; i++) {
  22:         var result = from entry in type.GetProperties() where entry.Name.Contains(searchPattern[i]) select entry.Name;
  23:         if(result.Count() > 0 && result.First().Equals(searchPattern[i])) {
  24:             var ob = obj.GetType().GetProperty(result.First()).GetValue(obj, null);
  25:             webcontrol.GetType().GetProperty("Text").SetValue(webcontrol, ob, null);
  26:         }
  27:     }          
  28: }

Blogstatistik-Control für BlogEngine.NET

07.06.2009 17:39:54 | Klaus Bock

Blog StatistikAuf vielen anderen Blogs habe ich es schon gesehen, nur für BlogEngine.NET habe ich nichts passendes gefunden. Ein Steuerelement welches die relevanten Aktivitäten eines Blog anzeigt wie etwa: Die Gesamtzahl der Artikel, die Anzahl der Artikel im laufendem Jahr, Monat, Woche und natürlich die Anzahl der Kommentare. Im Archiv sind die meisten Daten ja zu finden, aber eben nicht auf den ersten Blick beim Besuch eines Blog. Da viele Erstbesucher eines Blog diesen nach der Aktivität beurteilen, haben genau dieses Besucher einen Indikator für ihre Bewertung vor Augen. Auch “Statistik-Junkies” dürften ihre Freude an so einem Steuerelement haben.

Die Funktionsweise des Web UserControl ist denkbar einfach.
Da BlogEngine.NET die meisten Daten bereits vorhält, brauchen diese nur ein einem Container gesammelt zu werden. Einzig die Bestimmung der wöchentlichen Posts musste ich selber erledigen. Um nicht bei jedem Aufruf des UserControl die Daten neu zu sammeln, werden die einmal gewonnen statistischen Daten im Cache vorgehalten. Damit die Daten auch aktualisiert werden, wenn z.B.: ein neuer Artikel veröffentlicht wird oder ein Kommentar erstellt wird, müssen die Daten im Cache irgendwann für ungültig erklärt werden. Für solche Fälle hat BlogEngine.NET die Extensions vorgesehen. In diesem Fall wird so eine Extension verwendet um das Objekt aus dem Cache zu entfernen, wenn ein neuer Artikel veröffentlicht, ein Kommentar hinzugefügt oder entfernt wird. Somit ist gewährleistet, dass die Daten im Cache immer aktuell und auf dem neuesten Stand sind.

Zur Installation muss lediglich die Datei BlogStatisticCacheRemover.cs in der Ordner App_Data/Extensions kopiert werden und die beiden Dateien des UserControl in den Ordner des verwendeten Theme. Dann das UserControl in der MasterPage des verwendeten Theme registrieren und an gewünschter Stelle verwenden.

BlogStatistic

Artikel: Silverlight wird erwachsen

07.06.2009 10:38:04 | Norbert Eder

In der aktuellen Ausgabe der Visual Studio One befindet sich von mir der Artikel Silverlight wird erwachsen Eine Flut an neuen Versionen hat sich auf uns ergossen. Darunter finden sich auch neue Beta-Versionen zu Silverlight 3 und Expression Blend 3. Mit diesem Gespann können Sie ultimative Silverlight-Anwendungen entwickeln. Aber wie gut ist...

Bing Maps 3D

07.06.2009 10:14:00 | Ozgur Aytekin

Bing Maps 3D brings you another step closer to knowing "what it is like out there". You can search, browse, and organize local information viewed in three dimensions, just the way it exists in the real world. This enables you to more effectively find the data that is relevant to you, making Bing Maps more useful than ever. Even better -- it's just plain fun!

http://www.microsoft.com/downloads/details.aspx?FamilyID=E9298080-50C4-4F2E-9FC4-4009074996BA&displaylang=en

.NET Usergroup Karlsruhe: Das ASP.NET MVC Framework

06.06.2009 14:29:00 | Alexander Zeitler

.NET Usergroup Karlsruhe Logo

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

Thema

Das ASP.NET MVC Framework mit Albert Weinert.

Details zum Vortrag

Das ASP.NET MVC ist eine weitere Säule des ASP.NET Framework. Lauffähig ab .net 3.5 bringt es einen anderen Ansatz in die Web-Entwicklung. Seperation-Of-Concerns ist das große Leitbild unter welchem ASP.NET MVC entwickelt worden und und wie man dafür entwickelt.
Gegenüber ASP.NET WebForms ist eine ganz andere Entwicklungsart, dieser Vortrag bringt Ihnen die Vorteile von ASP.NET MVC näher. Es wird erklärt wie es sich in die ASP.NET Pipeline einfügt, wie man eigenen Erweiterungen vornimmt und Web-Anwendungen mit sauberen Prinzipien entwickeln kann.
Es wird auf alle Bestandteile von ASP.NET MVC eingegangen. Routing, View, ModelBinder, Controller-Action, ActionResult, ActionFilter und vieles mehr. Nach dem Vortrag weiß man wie man ASP.NET MVC Web-Anwendungen erstellt, wo die Vorteile liegen und wo es Nachteile hat.

Über den Sprecher

Albert Weinert entwickelt seit über 20 Jahren Software aus Leidenschaft, von Anfängen mit dem C64, über den Amiga bis zu Windows. Von Basic nach Assembler zu Oberon über C++ mit einem zwischenstopp bei PHP ist er dann bei .NET und C# gelandet . Sein Spezialgebiet ist ASP.NET und für sein Community Engagement bekam er 2007, 2008 und 2009 die Microsoft MVP Auszeichnung verliehen.
Er ist regelmäßiger Sprecher bei .NET User Groups sowie Konferenzen. Als Leiter der .net user group Köln veranstaltet er monatliche Treffen rund um die .NET Software-Entwicklung. Desweiteren ist er Mitveranstalter des Afterlaunch und der dotnet Cologne 2009 gewesen.

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.

GameCamp Munich 2009

06.06.2009 13:55:00 | Lori Grosland

 

GameCamp Munich 2009 Das GameCamp Munich findet am 20.-21. Juni bei Microsoft in Unterschleißheim statt.  Das GameCamp Munich ist ein Event von und für alle, die sich für Games und das Games-Business interessieren.  Ziele des Camps sind die interdisziplinäre Vernetzung der Branche, die Entwicklung neuer Thesen und Ideen sowie die Förderung der Videospielkultur. Eingeladen sind alle, die Teil der Games-Branche sind oder sein wollen: Programmierer und Designer, Künstler und Publisher, Marketing und PR, Studenten, Modder, Blogger und natürlich die Presse.

GameCamp basiert auf den Grundlagen eines BarCamps und unterscheidet sich von anderen Konferenzen dahingehend, dass die Themen nicht Monate im Voraus vom Veranstalter festgelegt werden. Stattdessen wählen alle Teilnehmer noch bis kurz vor Beginn der Sessions aus, worüber gesprochen werden soll. Alle Teilnehmer sind aufgefordert, selbst einen Vortrag zu halten oder zu organisieren.

Die Teilnahme am GameCamp Munich ist kostenlos.  Mehr Information und Anmeldung zum GameCamp Munich findet Ihr hier:  http://www.gamecampmunich.de

GameCamp Munich 2009

06.06.2009 12:55:00 | Lori Grosland

 

GameCamp Munich 2009 Das GameCamp Munich findet am 20.-21. Juni bei Microsoft in Unterschleißheim statt.  Das GameCamp Munich ist ein Event von und für alle, die sich für Games und das Games-Business interessieren.  Ziele des Camps sind die interdisziplinäre Vernetzung der Branche, die Entwicklung neuer Thesen und Ideen sowie die Förderung der Videospielkultur. Eingeladen sind alle, die Teil der Games-Branche sind oder sein wollen: Programmierer und Designer, Künstler und Publisher, Marketing und PR, Studenten, Modder, Blogger und natürlich die Presse.

GameCamp basiert auf den Grundlagen eines BarCamps und unterscheidet sich von anderen Konferenzen dahingehend, dass die Themen nicht Monate im Voraus vom Veranstalter festgelegt werden. Stattdessen wählen alle Teilnehmer noch bis kurz vor Beginn der Sessions aus, worüber gesprochen werden soll. Alle Teilnehmer sind aufgefordert, selbst einen Vortrag zu halten oder zu organisieren.

Die Teilnahme am GameCamp Munich ist kostenlos.  Mehr Information und Anmeldung zum GameCamp Munich findet Ihr hier:  http://www.gamecampmunich.de

Axum Published! Tutorial: Building your first Axum application

05.06.2009 22:03:00 | Ozgur Aytekin

Not familiar with Axum? Here's a C9 interview with the Axum team to refresh your memory (it's a domain specific language for concurrent programming, formerly known as "Maestro", developed by the Parallel Computing Platform team).

Here, Axum PM Josh Phillips walks us through building a simple Axum application in just over 5 minutes. Josh builds a simple “math library” on agents and shows how easy it is with Axum to focus on your code and get parallelism and safety implicitly.

http://channel9.msdn.com/posts/Charles/Building-your-first-Axum-application/

Maestro: A Managed Domain Specific Language For Concurrent Programming

05.06.2009 21:58:00 | Ozgur Aytekin

Josh Phillips(PM), Niklas Gustafsson(Architect), and Artur Laksberg(Developer) of the Parallel Computing Platform Team spend some time with me to discuss a managed (.NET-based) DSL (Domain Specific Language) for concurrent programming, Maestro. Maestro incorporates well-entrenched language patterns (imperative, OO, C style syntax, etc) and language constructs (channels, agents, domains) in a compelling way to make concurrent composition more accessible and familiar to the legions of sequential code composers.

http://channel9.msdn.com/shows/Going+Deep/Maestro-A-Managed-Domain-Specific-Language-For-Concurrent-Programming/

GameCamp Munich bei Microsoft

05.06.2009 19:24:11 | Steffen Ritter

Das GameCamp Munich findet am 20.-21. Juni bei Microsoft in Unterschleißheim statt.  Das GameCamp Munich ist ein Event von und für alle, die sich für Games und das Games-Business interessieren.  Ziele des Camps sind die interdisziplinäre Vernetzung der Branche, die Entwicklung neuer Thesen und Ideen sowie die Förderung der Videospielkultur. Eingeladen sind alle, die Teil der Games-Branche sind oder sein wollen: Programmierer und Designer, Künstler und Publisher, Marketing und PR, Studenten, Modder, Blogger und natürlich die Presse.

GameCamp basiert auf den Grundlagen eines BarCamps und unterscheidet sich von anderen Konferenzen dahingehend, dass die Themen nicht Monate im Voraus vom Veranstalter festgelegt werden. Stattdessen wählen alle Teilnehmer noch bis kurz vor Beginn der Sessions aus, worüber gesprochen werden soll. Alle Teilnehmer sind aufgefordert, selbst einen Vortrag zu halten oder zu organisieren.

Die Teilnahme am GameCamp Munich ist kostenlos.  Mehr Information und Anmeldung zum GameCamp Munich finden Sie hier:  http://www.gamecampmunich.de

Steffen im Polaroid

Einen Web Slice im Blog automatisch erzeugen

05.06.2009 18:09:57 | Klaus Bock

Im Rahmen des Wettbewerbs Empower your Site  gab es des Öfteren Diskussionen über das für und wieder von Web Slices. Rene Drescher-Hackel hat in diesem Post im .NET-Forum einen interessanten Punkt angesprochen: “der Implementierungsaufwand sollte möglichst gering sein”.
An und für sich ist die Implementierung eines Web Slice nicht schwer. Doch gibt es mit Sicherheit genug Blogbetreiber die zu faul sind keine Lust haben sich die Arbeit anzutun, um dieses Feature für den IE8 anzubieten. Da ich im Rahmen des Wettbewerbs auch meinen Beitrag für das .NET-Forum leisten wollte, habe ich mir für all diejenigen die BlogEngine.NET als Plattform für ihren Blog einsetzen, eine einfache Lösung überlegt:
Ein Web UserControl, dass in der MasterPage des jeweiligen Theme registriert, den Web Slice und die benötigte Verknüpfung erzeugt. Zur Erzeugung des Inhalt wir eine einfache aspx-Seite verwendet, die vom UserControl als Content-Anbieter verwendet wird.

Die Installation, wenn man sie denn so nennen will, ist denkbar einfach:

  • Den Inhalt des Zip-Archiv in den Ordner des verwendeten Theme entpacken.
  • Das Web UserControl in der MasterPage des verwendeten Theme registrieren.
    <%@ Register Src="~/themes/klaus_b/WebSlice.ascx" TagName="webSlice" TagPrefix="kb" %>
  • Das Web UserControl in der MasterPage verwenden.
    Hier bietet sich der Platz direkt über dem ContentPlaceHolder der Seite an.
    <kb:webSlice ID="webSlice1" runat="server" Title="klaus_b@.NET (Aktuelle Artikel)" />
    <!-- maincontent -->
    <asp:ContentPlaceHolder ID="cphBody" runat="server" />

    Der Titel des Web Slice kann frei gewählt und dem UserControl im Markup übergeben werden.

Mit dieser Lösung sollte der Implementierungsaufwand auf ein Minimum geschrumpft sein, zumindest für Blogbetreiber die BlogEngine.NET als Plattform für ihren Blog einsetzen.

Das Web UserControl kann hier heruntergeladen werden:
BE_Webslice

Organisation von XAML-basierten Projekten

05.06.2009 17:23:13 | Oliver Scheer

Meine Kollegen Jamie Rodriguez und Adam Kinnley haben mit Experten aus der Industrie eine kleine Videoreihe erstellt. In dieser werden Fragen zum Thema “Wie strukturiert man am besten seine XAML-basierte Anwendungen”.

Teil 1:
http://channel9.msdn.com/shows/Continuum/XAML-Guidelines-Part-1/

Teil 2:
http://channel9.msdn.com/shows/Continuum/XAML-Guidelines-Part-2/

GameCamp Munich bei Microsoft

05.06.2009 16:20:03 | Oliver Scheer

Das GameCamp Munich findet am 20.-21. Juni bei Microsoft in Unterschleißheim statt.  Das GameCamp Munich ist ein Event von und für alle, die sich für Games und das Games-Business interessieren.  Ziele des Camps sind die interdisziplinäre Vernetzung der Branche, die Entwicklung neuer Thesen und Ideen sowie die Förderung der Videospielkultur. Eingeladen sind alle, die Teil der Games-Branche sind oder sein wollen: Programmierer und Designer, Künstler und Publisher, Marketing und PR, Studenten, Modder, Blogger und natürlich die Presse.

GameCamp basiert auf den Grundlagen eines BarCamps und unterscheidet sich von anderen Konferenzen dahingehend, dass die Themen nicht Monate im Voraus vom Veranstalter festgelegt werden. Stattdessen wählen alle Teilnehmer noch bis kurz vor Beginn der Sessions aus, worüber gesprochen werden soll. Alle Teilnehmer sind aufgefordert, selbst einen Vortrag zu halten oder zu organisieren.

Die Teilnahme am GameCamp Munich ist kostenlos.  Mehr Information und Anmeldung zum GameCamp Munich finden Sie hier:  http://www.gamecampmunich.de

Reflection und wie man es verwenden kann

05.06.2009 08:14:57 | Daniel Schädler

Heute hatte ich im vorhergegangenen Post gezeigt wie die Datenbindung auf die Controls gemacht werden kann. Nun es geht noch einfacher. Wenn man sich bewusst ist welche Properties einer bestimmten Klasse man binden möchte und die TextBoxen auch einen sinnvollen Namen gibt (Klasse_Property_ArtdesControls), dann kann man mit Reflection ganz einfach Werte zuweisen und die Properties die man nicht möchte einfach “herausfiltern”.

Zuerst nehme ich alle Controls eines bestimmten Typs und übergebe diese der folgenden Methode. Danach kann mit Reflection über die Properties der übergebenen Klasse iteriert werden und, falls gewünscht, diese dem Control als Wert zugewiesen werden.

   1: /// <summary>
   2: /// Sets the data value of an appropriate control.
   3: /// Set's the value of any textpropery of any webcontrol
   4: /// and gets an appropriate translation for it.         
   5: /// </summary>
   6: private void SetValue(WebControl wcontrol, Step currentStep) {
   7: if(wcontrol.GetType().Equals(typeof(LabeledTextBox))) {
   8:     foreach(var property in currentStep.GetType().GetProperties()) {
   9:         if(wcontrol.ID.Contains(property.Name) && (!property.Name.Equals("Finish")) && (!property.Name.Equals("Start")) && (!property.Name.Equals("TaskType"))) {
  10:             if(property.GetValue(currentStep, null).GetType().Equals(typeof(DateTime))) {
  11:                 DateTime dateTime = (DateTime)currentStep.GetType().GetProperty(property.Name).GetValue(currentStep, null);
  12:                 wcontrol.GetType().GetProperty("Text").SetValue(wcontrol, dateTime.ToShortDateString(), null);
  13:                 wcontrol.GetType().GetProperty("Label").SetValue(wcontrol, ResourceManager.GetLabel(typeof(Step), property.Name), null);
  14:             } else {
  15:                 if(!property.Name.Equals("Start") && !property.Name.Equals("Finish")) {
  16:                     wcontrol.GetType().GetProperty("Text").SetValue(wcontrol, property.GetValue(currentStep, null), null);
  17:                     wcontrol.GetType().GetProperty("Label").SetValue(wcontrol, ResourceManager.GetLabel(typeof(Step), property.Name), null);
  18:                 }
  19:             }
  20:         }
  21:     }
  22: } else {
  23:     if(wcontrol.GetType().Equals(typeof(Button))) {
  24:         // Do work for the button in the same manner as above but without
  25:         // iterating the properties of the class
  26:     }
  27: }

Somit lassen sich einigermassen elegant Property-Werte abfüllen. Für Feedback und Kritik bin ich gerne offen.

Create a Report with Visual Studio 2008 and Deploy it to SQL Server Reporting Services 2008

05.06.2009 05:58:00 | Ozgur Aytekin

This video shows how to build a report using Visual Studio 2008 and then deploy it to SQL Server Reporting Services.

This demo shows how to:

- Create report project in Visual Studio
- Create an shared data sources
- How to design a report
- How to add interactive sorting
- Change the project settings to deploy the report
- Deploy the report
- Run the report in SSRS

http://technet.microsoft.com/en-us/sqlserver/dd370686.aspx

Service Pack 2 for Windows Server 2008 and Windows Vista

05.06.2009 05:56:00 | Ozgur Aytekin

Service Pack 2 (SP2) for Windows Server 2008 and Windows Vista is an update to Windows Vista and Windows Server 2008. It provides customer and partner feedback-driven fixes into a single service pack, minimizing deployment and testing complexity. In addition to all previously released updates since SP1, SP2supports new types of hardware, and adds support for several emerging standards.

http://technet.microsoft.com/en-us/windows/dd262148.aspx

Interessante Zertifizierung

04.06.2009 22:11:14 | Andre Kraemer

Wer kennt solche Unterhaltungen nicht:

Ich: Der Build-Vorgang schlägt fehl. Wer hat als letztes eingecheckt?

Er: Ich wars

Ich: Herzlichen Glückwunsch! Du hast den Build kaputt gemacht.

Er: Bei mir läufts!

 

Was ist die Moral der Geschichte? Ob es auf dem eigenen Rechner kompiliert ist egal. Der Build Server (und nur der) ist wirklich wichtig!

 

Daher möchte ich aus gegebenem Anlass an dieser Stelle an folgende Zertifizierung erinnern:

worksonmymachine_logo_small  

Alternativ kann das Ganze übrigens auch in Form eines Awards vergeben werden:

works-on-my-machine-starburst

Happy coding ;-)



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

Meine drei Top Entwicklertools

04.06.2009 21:51:15 | Andre Kraemer

Ich weiß, ich bin spät, aber zum Glück noch nicht zu spät. MSDN Deutschland hat zur Blog-Parade aufgerufen und fragt nach den drei Lieblings-Entwickler-Tools.

150x32_BlogParade_anim_thumb

Nachdem Mario, Alex, Jan und viele andere auch schon mit gemacht haben, möchte ich meinen Senf selbstverständlich auch zum Besten geben.

Das Visual Studio zur Grundausstattung eines Entwicklers gehört setze ich mal voraus und lasse es daher außen vor. Nun aber zu meinen Top 3.

  1. Microsoft WinDbg

    windbg

    Ich kann gar nicht aufzählen, wie oft mir dieses Tool schon in unangenehmen Situationen geholfen hat.
    Wer kennt die Situation nicht:
    • Man entwickelt eine Applikation
    • Auf dem Entwicklungs- und Testsystemen läuft Sie großartig
    • Beim Kunden stürzt sie ab
    • Man hat weder eine vernünftige Fehlermeldung, noch einen aussagekräftigen Eintrag in der Log-Datei
    • Der Fehler ist bei uns nicht nachvollziehbar
    • Wir dürfen mit unserem PC nicht ins Kundennetz und Visual Studio oder CoreDbg dürfen wir dort auch nicht installieren
    • „Pech gehabt, lieber Kunde“ oder wirres Code-Ändern ist keine valide Option ;-)

    Wenn es so weit ist, hilft nur noch ein ganz tiefer Griff in die Werkzeugkiste, nämlich der zu WinDbg. Für diejenigen, die ihn nicht kennen: WinDbg ist ein unmanaged (native) Debugger mit grafischer Benutzeroberfläche. Dank der SOS Erweiterung kann man ihn jedoch wunderbar dazu verwenden, auch managed Code zu debuggen. Zugegeben, der Komfort liegt etwas hinter dem des in Visual Studio integrierten Debuggers, aber in der Not nimmt man schließlich, was man bekommen kann. Das tolle an diesem Debugger ist nämlich, dass er nicht installiert werden muss, sondern direkt vom Stick gestartet werden kann. Außerdem "sieht" er etwas mehr als der in VS integrierte Debugger, denn schließlich ist er ja eigentlich ein unmanaged Debugger. Bei Interesse könnte ich mich übrigens dazu verleiten lassen, mal ein WinDbg Einsteiger Tutorial zu schreiben, oder zumindest mein "Cheat-Sheet" hier aufs Blog zu packen. Also einfach die Kommentarfunktion dieses Eintrags nutzen!

  2. Infragistics NetAdvantage

    infragistics  

    »Für den ersten Eindruck gibt es keine zweite Chance« lautet ein geflügeltes Wort. Dass Menschen einander innerhalb weniger Augenblicke beurteilen, ist allgemein bekannt. Da diese Beurteilung vor allem anhand optischer Gesichtspunkte statt findet, achten viele Menschen heutzutage in besonderem Maße auf ihr Äußeres. Nur so lassen sich wichtige erste Begegnungen, wie zum Beispiel ein Vorstellungsgespräch, erfolgreich meistern.

    Ähnlich wie das menschliche Äußere bei einem Vorstellungsgespräch, kann auch das Äußere einer Softwareapplikation – also die Benutzeroberfläche – im Zweifelsfall über Sieg oder Niederlage (kaufen oder nicht kaufen!) entscheiden. Der Grund dafür ist, dass viele Benutzer, vor allem solche, die technisch nicht sonderlich versiert sind, vom Eindruck der Benutzeroberfläche auf die Gesamtqualität der Software schließen. Komplexe, überladene Bildschirmmasken, deren Design an ein typisches Look and Feel von vor zehn Jahren erinnern, mindern potentiell also den kommerziellen Erfolg einer Anwendung. Dies gilt besonders dann, wenn die Konkurrenz ihre Hausaufgaben gemacht hat!

    Reichte es vor 15 Jahren noch vollkommen aus, einfach nur die Bedienung der Applikation mit der Maus zu unterstützen, erwarten Anwender heute doch einiges mehr. Angeregt von innovativen Oberflächenelementen in Applikationen großer Hersteller, wie zum Beispiel Apples Coverflow, das Ribbon in Microsoft Office 2007 oder interaktiv gruppierbarer Tabellen wie in Microsoft Outlook, erwarten Endanwender solche Features auch in anderen, also unseren Applikationen.

    Leider kommt man mit den Bordmitteln, die Microsoft Visual Studio bis zur Version 2008 an dieser Stelle liefert nicht immer ans Ziel. So sind zum Beispiel weder Ribbons, noch interaktiv gruppierbare Tabellen oder Excel ähnliche Diagramme „out-of-the-box“ möglich.

    Möchte man die Anforderungen an eine konkurrenzfähige Oberfläche also erfüllen, kommt man (wirtschaftlich gesehen) kaum um den Einsatz einer 3rd Party UI Komponentensuite herum.

    Die Suite meiner Wahl ist Infragistics NetAdvantage. Die Komponenten sehen nicht nur top aus, sondern bieten auch alle Features, die das Entwicklerherz begehrt.

  3. StyleCop

    Konsistente Quellcode Formatierungen in einem Projekt mit mehreren Entwicklern. müssen dank StyleCop kein Wunschtraum mehr bleiben. Jedem, der im Team entwickelt kann ich dieses Tool nur wärmstens ans Herz legen!


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

Verwendung von neuen Technologien in Softwareprojekten: Teil 2

04.06.2009 17:17:00 | Thorsten Hans

In einer kleinen Artikelserie möchte ich die Verwendung von neuen Technologien in Softwareprojekten etwas erläutern, hierbei soll es nicht darum gehen einfach ein Featureset der verfügbaren .Net Technologien zu geben sondern auf bestimmte Fragen einzugehen, die dabei helfen können die richtigen Technologien in Projekte einfließen zu lassen.

 

Im ersten Teil der Serie habe ich mich mit der Frage “Welche Techniken benötige ich?” beschäftigt. Im heutigen – zweiten – Teil der Serie geht es um die Frage:

Welche Techniken bringen mir einen Vorteil?

Gerade die Lösung von Problemen im Softwarebereich bietet den beteiligten Personen viel Platz um Ihre Kreativität auszuleben, es sind prinzipiell immer mehr als ein richtiger Weg verfügbar. Demnach liegt es im Auge des Betrachters den besten Weg zur Problemlösung zu finden und zu gehen.

Oft scheinen Problemstellungen einfach, doch entpuppen sich erst spät im Projekt als Hürden die mit den gewählten Technologien nicht, oder nur umständlich, zu nehmen sind.

Heutzutage werden jedem Entwickler sehr viele Technologien zur Hand gegeben, mit denen er alltägliche Probleme lösen kann. Einige Technologiebeispiele sind in Tabelle 1 aufgelistet.

Problemstellung Technologie
Anbindung an eine zentrale Datenbank ADO.Net
ADO.Net Entity Framework
Linq to SQL
Linq to …
nHibernate
Bereitstellung auf vorhandenen Clients ClickOnce
Windows Installer
SOA SOAP WebServices (classic .Net 2.0)
WCF Services
BizTalk (BTS)
SharePoint (MOSS & WSS)
Web 2.0 Anwendung Silverlight
ASP.Net Ajax
ASP.Net MVC (with Ajax, jQuery)
Ansprechende Windows Anwendung Windows Forms
Windows Presentation Foundation

Tabelle 1: kleine liste vorhandener Technologien

 

Wie man Tabelle 1 entnehmen kann gibt es viele unterschiedliche Technologien die eine Lösung in einem Teilbereich anbieten. Auf dem heutigen Stand der .Net Technologie kann man durchaus sagen, dass es in allen großen Kernbereichen der Softwareentwicklung eine Alternative gibt, die natürlich andere Stärken hat als das entsprechende Pendant.

Doch zurück zur Frage, bevor mit der Implementierung einer Anwendung begonnen wird, sollte man die vorhandenen Technologien gegenüberstellen und abwägen, welche Technologie in dem aktuell vorliegenden Projekt entscheidende Vorteile bietet. Hierbei sollte verschiedene Faktoren beachtet werden, die bei der Entscheidungsfindung helfen können.

  • Zeitersparnis
  • Finanzersparnis
  • Wiederverwendbarkeit
  • Erreichen neuer Märkte
  • Steigerung der Kundenzufriedenheit
  • Erhöhung der Qualität

Die meisten dieser Punkte sollte selbstdefinierend sein, im Kontext der Softwareentwicklung möchte ich allerdings kurz auf die Begriffe “Wiederverwendbarkeit”, “Erreichen neuer Märkte” und “Erhöhung der Qualität” eingehen

 

Wiederverwendbarkeit

Unter Umständen kann die Entscheidung für eine Technologie die Wiederverwendbarkeit von diversen Softwarekomponenten steigern. Das bedeutet, dass zukünftige Projekte von den bereits erlangten Technologiekenntnissen profitieren können, indem bereits implementierte Komponenten als Grundstein für neue Anwendungen verwendet werden können. Dadurch wird in zukünftigen Projekten ebenfalls der Faktor Zeit und der Faktor Kosten minimiert.

Beispiel:

Ein meiner Meinung nach alltägliches Szenario ist die Entwicklung von RIA Web-Anwendungen, hierbei wird sich verstärkt auf Schlagwörter wie Usablilty gestützt und die Web-Anwendungen werden mittels JavaScript interaktiver gestaltet. Zwar wird in den meisten Projekten das JavaScript in separate Files ausgelagert, allerdings werden diese in neuen Projekten nur selten wiederverwendet. Hierbei würde es sich anbieten auf das JavaScript Framework jQuery zurückzugreifen und dementsprechende Plugins zu implementieren, diese Plugins können dann einfach in neuen Projekten wiederverwendet werden. Logischerweise sind Plugins für jQuery ebenfalls “nur” JavaScript Files, allerdings bringt jQuery bereits ein großes Gerüst mit, um welches sich der Entwickler im eigenen Code nicht mehr kümmern muss. Dadurch wird der eigene Code lesbarer, was meiner Meinung nach gerade bei JavaSript noch immer eine Hürde ist.

Erreichen neuer Märkte

Aufgrund der Fülle an Technologien ist es nur schwer möglich in allen Teilbereichen erfolgreich zu agieren, viele Firmen spezialisieren sich auf Teilbereiche der Softwareentwicklung um Ihren Kunden dort herausragende Leistungen zur Verfügung zu stellen. Durch die rapide ansteigende Anzahl an verfügbaren Softwaretechnologien, ergeben sich allerdings auch immer neue Märkte die mit wenig Aufwand von Softwareentwicklern erobert werden können. Gerade in Kombination mit vorhandenen Projekten, können Unternehmen Skills auf Grundlage von “neuen” oder “fremden” Technologien aufbauen und somit Ihren Stammkunden neue, alternative, einfachere Lösungen präsentieren.

Beispiel:

Bei unserem fiktiven Kunden TechiesLtd wurde eine Intranetlösung auf Basis von ASP.Net 2.0 realisiert, diese Anwendung ermöglicht es dem Kunden auf vorhandenen Servern nach Dokumenten zu suchen. Hierbei könnte allerdings auch der neue SearchServer von Microsoft zum Einsatz kommen, dieser kann mit einfachen Mitteln um Quellen erweitert werden um Verzeichnisse oder Devices zu indexieren und eine komfortable Suche nach Inhalten anzubieten.

Durch den Einsatz einer solch “neuen” und auch noch “fremden” Technologie kann sich unser fiktives Softwarehaus RealCodersInc von der Masse absetzen und gehört somit zu einem der wenigen Softwareanbietern, der individuelle Lösungen auf Basis des neuen SearchServers anbietet.

Erhöhung der Qualität

Mit Erhöhung der Qualität spreche ich in diesem Kontext von der Codequalität, diese wird von Verantwortungsträgern zwar gerne ignoriert, allerdings kann eine Ignoranz in diesem Bereich zu erheblichen Mehrkosten für Wartung oder Erweiterung führen. Jedes Problem lässt sich mit jeder Technologie irgendwie lösen, allerdings bietet eine andere Technologie eventuell schon eine Architektur an, auf deren Grundlage die geforderte Lösung im Nu erfüllt werden kann. Zudem wird durch diese alternative Technologie der Quellcode lesbarer und Wartungsfreundlicher, was auf lange Sicht auch kostenschonend ist.

An dieser Stelle muss ich allerdings erwähnen, dass sehr viel KnowHow in den Technologien vorhanden sein muss, um eine Entscheidung auf Grundlage dieses Argumentes zu treffen.

Als Beispiel kann man sich einfach ASP.Net im Vergleich zu ASP.Net MVC anschauen. ASP.Net MVC bringt eine komplette Architektur für CRUD-Anwendungen mit auf deren Grundlage einfache Webanwendungen schnell realisiert werden.

 

Durch die Validierung der Technologien gegen diese Merkmale, kann man klare Technologie-Vorteile oder Nachteile der einzelnen Komponenten aufdecken und demnach Entscheidungen für die zu verwendenden Technologien in Softwareprojekte treffen.

 

DotNetKicks-DE Image

Fokusprobleme bei eigenen ToolTips in Windows Forms

04.06.2009 16:22:59 | Thorsten Hans

Aufgrund meines Artikels im dotnet Magazin “Frischer Wind für Windows Forms” habe ich schon einige positive Rückmeldungen erhalten. Vorab schon mal ein Dankeschön hierfür.

Des weiteren erhielt ich mehrere Fragen zu eigenen ToolTips. Bei eigenen Tooltips gibt es unter Umständen das Problem, dass der Fokus in den Tooltip wandert, aber allerdings nicht mehr an das eigentliche Control im Parent-Form zurückgeht.

 

Hierfür gibt es eine einfache Lösung.

Die Toolstrip Komponente kann man einfach um eine Property erweitern, die das Control hält, dass zuletzt den Fokus hatte. Dann erweitert man einfach die Komponenten um einen Event der beim Schließen des ToolTips gefeuert wird und implementiert diesen im Parent-Form, über die EventArgs gebe ich im nachfolgenden Code einfach die Referenz auf das Control zurück welches wieder den Fokus bekommen soll.

 

   1:   public sealed class CustomerViewToolTip : ToolStripDropDown
   2:      {
   3:          private Control lastFocusedControl;
   4:          public event EventHandler<ControlEventArgs> ToolTipClosed;
   5:   
   6:   
   7:          public CustomerViewToolTip()
   8:          {
   9:              CustomerView customerView = new CustomerView();
  10:              customerView.ShowCustomerClicked += customerView_ShowCustomerClicked;
  11:              ToolStripControlHost toolStripControlHost = new ToolStripControlHost(customerView);
  12:              this.Items.Add(toolStripControlHost);
  13:          }
  14:   
  15:          public Control LastFocusedControl
  16:          {
  17:              get
  18:              {
  19:                  return this.lastFocusedControl;
  20:              }
  21:              set
  22:              {
  23:                  this.lastFocusedControl = value;
  24:              }
  25:          }
  26:          
  27:          void customerView_ShowCustomerClicked(int id)
  28:          {
  29:              this.Close();
  30:          }
  31:   
  32:          protected override void OnClosed(ToolStripDropDownClosedEventArgs e)
  33:          {
  34:              base.OnClosed(e);
  35:              if (ToolTipClosed != null)
  36:                  ToolTipClosed(this, new ControlEventArgs(this.LastFocusedControl));
  37:              
  38:          }
  39:      }

 

 

Die Verwendung in einem Form sieht demnach wie folgt aus

 

   1:        private void button1_MouseEnter(object sender, EventArgs e)
   2:          {
   3:              if (sender as Control == null) return;
   4:              customerViewToolTip1.LastFocusedControl = sender as Control;
   5:              customerViewToolTip1.ToolTipClosed += customerViewToolTip1_ToolTipClosed;
   6:              customerViewToolTip1.Show(sender as Control, 2, 3);
   7:          }
   8:   
   9:          void customerViewToolTip1_ToolTipClosed(object sender, ControlEventArgs e)
  10:          {
  11:              e.ControlToFocus.Focus();
  12:          }

 

 

Ich hoffe diese Lösung hilft euch.

 

Technorati-Tags: ,,,
DotNetKicks-DE Image

Update zur MSDN-Blog-Parade! Neue Logos!

04.06.2009 15:31:24 | Peter Kirchner

Unsere erste Blog-Parade erfreut sich ja zunehmender Beliebtheit, woran wahrscheinlich auch die Aussicht auf eine der drei Xboxen nicht ganz unschuldig ist. :-) Über 40 Teilnehmer haben wir soweit!

Wer noch nicht teilgenommen hat: bis zum 15.06. hat jeder noch die Chance mitzumachen!

Daher haben wir für unsere Blog-Parade Logos erstellt, die jeder in seinem Blog-Eintrag verwenden kann, um gleich zu zeigen, dass man Teilnehmer der MSDN-Blog-Parade ist. Jeder, der möchte, kann sich das passende Format aussuchen und in sein Blog kopieren.

Wir haben statische Logos:

60x9_BlogParade_stat

100x15_BlogParade_stat

150x22_BlogParade_stat

200x29_BlogParade_stat

455x60_BlogParade_stat 

Und animierte Logos:

60x21_BlogParade_anim

100x21_BlogParade_anim

150x32_BlogParade_anim

200x43_BlogParade_anim

455x97_BlogParade_anim

Termine der Technology Roadshow in Köln und Berlin

04.06.2009 15:11:28 | Peter Kirchner

Unter dem Motto “Microsoft und die Zukunft der Software” veranstalten wir die Technology Roadshow in Kooperation mit Technologie- und Gründerzentren.

Themen, die unter anderem beleuchtet werden, sind Überblick über die Microsoft Plattform, Cloud Computing, Windows Azure, Moderne Benutzerschnittstellen mit Silverlight und der Windows Presentation Foundation sowie Informationen darüber, wie Firmen und insbesondere Exisistenzgründer mit Microsoft zusammen arbeiten können.

Die beiden letzten Termine der Technology Roadshow sind wie folgt:

  • Köln, 16.06.09, 18 Uhr bis ca. 20 Uhr mit anschließendem Networking mit Buffet
    Anmeldung: hier klicken
  • Berlin, 22.06.09, 17.30 Uhr bis ca. 19:40 Uhr mit anschließdem Networking mit Buffet
    Anmeldung: hier klicken

Windows 7 Webcast Serie

04.06.2009 14:52:08 | Peter Kirchner

Bei der neuen Windows-Version wurde nicht nur auf die weitere Verbesserung der Sicherheit, Zuverlässigkeit und Performance, sondern auch auf die größtmögliche Kompatibilität zu Windows Vista Wert gelegt. Mit dieser Webcast-Serie wollen wir Ihnen wichtige Komponenten und Funktionen des neuen Betriebssystems vorstellen.

Die Themen dabei sind Windows APIs für .NET Entwickler, Libraries and Federated Search, Hintergrunddienste, Anwendungskompatibilität, sowie Scenic: Ein nativer RibbonBar und die Taskbar.

Die ersten beiden Teile stehen bereits zur Verfügung. Weitere folgen demnächst!

Die Referenten sind Heiko Böhm, Neno Loje und Bernd Marquardt. Sie können sich somit auf geballtes Wissen freuen!

Nachlese des Software Strategy Summit vom 24.04.2009

04.06.2009 14:46:07 | Peter Kirchner

vkey_events_sss[1] Der aus Microsoft Sicht wichtigste Strategie Event für Softwarehersteller und System Integratoren fand am 24. April in Köln statt. Hier finden Sie alle Videoaufzeichnungen, Präsentationsunterlagen sowie weiterführende Informationen, Webcasts und Angebote zu den Themen des Microsoft Software Strategy Summit. Die Fotos zur Veranstaltung finden Sie hier. Melden Sie sich am besten zu unserem Software und Web Solutions RSS Feed an. So bleiben Sie immer auf dem Laufenden.

Databinding im XML oder im Codebehind?

04.06.2009 07:10:32 | Daniel Schädler

Diese Frage habe ich mir manchmal schon gestellt. Ich habe bis zum heutigen Zeitpunkt immer ein wenig aus Bequemlichkeit die Datenbindung (inklusive casting in den gewünschten Datentyp) immer im XML gemacht. Das hatte für mich den Vorteil, dass ich meistens nur eine Zeile gebraucht habe, hatte aber auch den Nachteil, dass alles was zusammengehören sollte nicht zusammen gehört hat. Mittlerweile bin ich soweit, dass ich alle Manipulationen an Controls, sei es DataBinding oder das Setzen von Übersetzungen im Codebehind mache. (Der Beitrag von Peter Bucher hat mich auch dazu bewegt). Folgendes Szenario: Ich hab ein ListViewControl, welches ein paar weitere Controls (TextBoxen etc.) enthält. Damit diese mit Daten gefüllt werden habe ich im OnItemDataBound Ereignis des ListViewControl’s alles TextBoxen die mich interessieren durch iteriert und weise mit der Methode SetValue(WebControl webcontrol, currentStep) (der currentStep ist eine Referenz auf den Step der in einer Liste sich befindet, die wiederum an das ListViewControl gebunden ist.

Dank Polimorphie kann ich ein spezifisches Control in die Klasse WebControl hineinpacken, ohne dass hierfür die Informationen des zu behandelnden Controls verloren gehen. Mittels Reflection lese ich dann die Property welche ich setzen will und setze den gewünschten Wert mit SetValue.

   1: /// <summary>
   2: /// Sets the data value of an appropriate control.
   3: /// Set's the value of any textpropery of any webcontrol
   4: /// and gets an appropriate translation for it.        /// 
   5: /// </summary>
   6: private void SetValue(WebControl wcontrol, Step currentStep) {
   7:     if(wcontrol.ID.Contains("ScheduledStart")) {
   8:         wcontrol.GetType().GetProperty("Text").SetValue(wcontrol, string.Format("{0:dd.MM.yyyy}", currentStep.ScheduledStart.Value.ToString()), null);
   9:         wcontrol.GetType().GetProperty("Label").SetValue(wcontrol, ResourceManager.GetLabel(typeof(Step), "ScheduledStart"), null);
  10:     }
  11: }

Wenn natürlich alle Controls mit Werten versehen werden sollen, die sich auf der Seite befinden, kann sich die Methode natürlich gross werden. Für Verbesserungsvorschläge bin ich offen und bedanke mich für Rückmeldungen.

Einführung von VSTS bei Infragistics – Vortrag bei TSUG-VE

04.06.2009 00:02:14 | Thomas Schissler

Team System User Group - Virtual Edition

Im Juni werden wir beim EMEA-Meeting der Team System User Group Virtual Edition Ed Blankenship als Sprecher haben. Ed ist MVP für Team System und Release Manager bei Infragistics, dem führenden Hersteller von UI-Komponenten. Er wird in seinem Vortrag über die Erfahrungen bei der Einführung von VSTS bei Infragistics berichten. Dabei werden die verschiedenen Bereiche wie Versionsverwaltung, Build Management, Work Item tracking, das Management globaler Teams, automatisiertes Testen und vieles mehr aus einer Anwendersicht beleuchtet. Ein wirklich sehenswerter Erfahrungsbericht aus der Praxis.

Weitere Informationen unter www.tsug-ve.com.

Kostenloses Tool zur Auswertung der Historie von TFS Work Items

03.06.2009 16:06:35 | Thomas Schissler

Im Team Foundation Server werden Änderungen an den Inhalten der Workitems in einer Historie festgehalten. Diese Historie kann man auf jedem einzelnen Workitem einsehen.

image

Mit einem kostenlosen Excel-Addin können diese Auswertungen auch massenhaft durchgeführt und so über ganze Projekte Auswertungen über die Historie erstellt werden. Dazu wird zunächst ein Zeitraum und ein Intervall ausgewählt (alternativ kann man auch einen bestimmten Zeitpunkt wählen):

Nun werden für jeden gewählten Zeitpunkt die Work Items in dem jeweiligen Zustand in eine Excel-Tabelle eingetragen. Diese kann nun sehr schön über eine Pivot-Tabelle oder ein Pivot-Chart ausgewertet werden um so den zeitlichen Verlauf bestimmter Kennwerte abzubilden.

Natürlich lassen sich solche Ergebnisse auch über das DataWarehouse im TFS ermitteln, jedoch besitzt dieses Tool zwei Vorteile:

  1. Es ist wesentlich einfacher zu bedienen und übersichtlicher, so dass damit auch Ad-Hoc Reporting für Anwender möglich wird.
  2. Es grift auf alle Workitem-Daten zurück, nicht nur auf die, die im DataWareHouse konfigurierten. Einzige Ausnahme sind Links und Attachments, die in beiden Varianten nicht Teil der Historie sind.

Weitere Informationen und den kostenlosen Download gibtes unter http://www.alm-tools.de/?Product=5

Ein Video das die Fuinktionsweise des Tools demonstriert kann hier agezeigt werden.

Surface Development Webcasts

03.06.2009 13:48:48 | Oliver Scheer

ASP.NET MVC Vortrag beim .NET-Stammtisch Konstanz-Kreuzlingen

03.06.2009 04:41:00 | Jürgen Gutsch

Im Rahmen seiner User Group Tour wird uns Albert Weinert einen Besuch abstatten und einen Vortrag zum ASP.NET MVC Framework halten.

Der Vortrag findet am 18. Juni 2009 um 19:00 Uhr, wie immer in der FH-Konstanz (Brauneggerstrasse 55, 78462 Konstanz, im Raum F023, Gebäude F) statt (Anfahrt)

Das ASP.NET MVC Framework ist ein zusätzlicher Weg Web-Anwendungen mit .NET zu entwickeln.

Albert Weinert zeigt in diesem Vortrag wie man Anwendungen mit dem Framework entwickelt, wie man diese automatisiert testen kann und gibt praxisrelevante Tipps & Tricks zur Entwicklung. Mit Beispielen aus einer "echten" Anwendung.

Unter anderem erfahrt Ihr etwas über

  1. Routing
  2. ActionFilter
  3. Schreiben von HtmlExtensions
  4. Testen von Controllern
  5. Integrationstest mit WatIn
  6. jQuery und das Framework
  7. Datenbindung
  8. Die Zukunft vom WebForms
  9. und vieles mehr...

Mehr: http://www.dotnetkk.de/Appointments/Deta...t-mvc-framework

DotNetKicks-DE Image

Vierter .NET-Stammtisch Konstanz-Kreuzlingen

03.06.2009 04:24:01 | Jürgen Gutsch

Am 10 Juni 2009 um 19:00 Uhr ist es wieder soweit: Der .NET-Stammtisch Konstanz-Kreuzlingen trifft sich zum vierten Mal zu einer kleinen Vortragsrunde.

Treffpunkt ist wie immer der Raum F023, im Gebäude F der FH-Konstanz (Brauneggerstrasse 55, 78462 Konstanz) (Anfahrt)

Die Themen des vierten Treffen stehen bereits fest. Es sind zwei halbstündige Vorträge vorgesehen mit jeweils viel Zeit für Diskussionen im Anschluss.

  1. Informationsbeschaffung im Internet von Jürgen Gutsch
  2. Eine Einführung in die Möglichkeiten von Silverlight von Thomas Huber.

Für weitere Treffen werden noch Vortragsthemen und Vortragende gesucht. Wer also einen Vorschlag machen möchte und/oder selber einen kleinen Vortrag halten möchte. Darf uns seinen Vorschlag gerne hier anmelden.

DotNetKicks-DE Image

HTML in Silverlight darstellen

02.06.2009 16:12:40 | Oliver Scheer

HTML ist ein sehr beliebtes Format zur Formatierung von Text … okay … es wurde genau dafür und nur dafür erfunden. Es scheiden sich immer noch die Geister darüber ob es wirklich eine Programmiersprache ist. Das stimmt auf jedenfall wenn man HTML+JavaScript zusammen betrachtet.

Was in Silverlight nicht direkt möglich ist, ist die Darstellung von HTML formatierten Text, wie z.B. <b>fett</b> und <i>kursive"</b>

Allerdings hat einer meiner englischsprachigen Kollegen dieses “Potential” erkannt …

http://blogs.msdn.com/delay/archive/2007/09/10/bringing-a-bit-of-html-to-silverlight-htmltextblock-makes-rich-text-display-easy.aspx

Damit lassen sich einfache HTML-Texte leicht in Silverlight integrieren.

Ein Live-Beispiel dafür gibt es hier: http://cesso.org/Samples/SilverlightHtmlTextBlock/ 

Eine Silverlight 3 Variante davon habe ich in meinen SL3-Trainingskit integriert unter: http://www.the-oliver.com/sl3training

image

Neue Tools rund um den Team Foundation Server unter www.alm-tools.de

02.06.2009 15:45:30 | Thomas Schissler

image

Eigentlich versuche ich meinen Blog weitgehend werbefrei zu halten. Diesesmal möchte ich aber doch kurz auf die Seite www.alm-tools.de hinweisen, die mein Arbeitgeber artiso betreibt. Hier haben wir vor Kurzem eine Reihe neuer Tools rund um das Thema TFS und ALM (Application Lifecycle Management) veröffentlich, zum Teil kostenlos. Zudem gibt es hier inzwischen auch ein kleines Archiv mit Videos rund um das Thema das wir kontinuierlich ausbauen.

Seadragon Demos Teil 2

02.06.2009 14:01:00 | Lori Grosland

Dieses Video ist Teil 2 von meinem Gespräch mit Lutz Gerhard.  Er zeigt noch weitere Demos von Seadragon.  Manche Demos sind inzwischen sehr bekannt aber ich finde es ist interessant zu hören, wie jemand von dem Projektteam darüber redet.

Hard Rock Cafe Memorabilia
http://memorabilia.hardrock.com/

Kelly Blue Book
http://www.kbb.com/kbb/PerfectCarFinder/PhotoEdition.aspx

Yosemite Extreme Panorama
http://www.xrez.com/yose_proj/yose_deepzoom/new/XRez%20Xtreme%20Pano/index.html

Infinite Canvas
http://infinitecanvas.appjet.net/

Seadragon Ajax
http://livelabs.com/seadragon-ajax/

Gespräch mit Lutz Gerhard

02.06.2009 13:59:00 | Lori Grosland

Lutz Gerhard ist Program Manager in der Seadragon Gruppe bei Microsoft Live Labs in Seattle, WA.  Als ich in den USA war, habe ich Lutz getroffen und er hat mich über Live Labs und Seadragon informiert.  Seadragon ist ein Bildbetrachtungs-Software, das schnelle Navigation unabhängig von Größe und Anzahl der Bilder/Graphiken bietet.

Weil Lutz mir so viele Demos gezeigt hat, habe ich das Video in 2 Teile aufgeteilt.  Teil 2 enthält 5 weitere Seadragon Demos.

Seadragon - Live Labs:
http://livelabs.com/seadragon/

Lutz’s Blog:
http://blogs.msdn.com/lutzg/

Seadragon Demos Teil 2

02.06.2009 13:01:00 | Lori Grosland

Dieses Video ist Teil 2 von meinem Gespräch mit Lutz Gerhard.  Er zeigt noch weitere Demos von Seadragon.  Manche Demos sind inzwischen sehr bekannt aber ich finde es ist interessant zu hören, wie jemand von dem Projektteam darüber redet.

Hard Rock Cafe Memorabilia
http://memorabilia.hardrock.com/

Kelly Blue Book
http://www.kbb.com/kbb/PerfectCarFinder/PhotoEdition.aspx

Yosemite Extreme Panorama
http://www.xrez.com/yose_proj/yose_deepzoom/new/XRez%20Xtreme%20Pano/index.html

Infinite Canvas
http://infinitecanvas.appjet.net/

Seadragon Ajax
http://livelabs.com/seadragon-ajax/

Gespräch mit Lutz Gerhard

02.06.2009 12:59:00 | Lori Grosland

Lutz Gerhard ist Program Manager in der Seadragon Gruppe bei Microsoft Live Labs in Seattle, WA.  Als ich in den USA war, habe ich Lutz getroffen und er hat mich über Live Labs und Seadragon informiert.  Seadragon ist ein Bildbetrachtungs-Software, das schnelle Navigation unabhängig von Größe und Anzahl der Bilder/Graphiken bietet.

Weil Lutz mir so viele Demos gezeigt hat, habe ich das Video in 2 Teile aufgeteilt.  Teil 2 enthält 5 weitere Seadragon Demos.

Seadragon - Live Labs:
http://livelabs.com/seadragon/

Lutz’s Blog:
http://blogs.msdn.com/lutzg/

TF14087 Fehler beim Mergen in der TFS Versionsverwaltung

02.06.2009 08:39:21 | Thomas Schissler

image

Mein Kollege Mark Bulmahn hat in einem Screencast ein Problem näher untersucht, das beim Merge in der TFS Source Countrol auftreten kann. Dabei geht es vor allem darum, dass Verschiebe-Operationen im Visual Studio Solution Explorer in der Source Control nicht als Verschiebe-Operation sondern als Delete und Add ausgeführt wird. Das führt dann zu Problemen bei einem späteren Merge.In dem Screencast sieht man, wie dieses Problem vermieden und auch wieder repariert werden kann.

Windows 7 Webcast Serie – Teil 1 ist Live

02.06.2009 07:49:28 | Oliver Scheer

Bei der neuen Windows-Version wurde nicht nur auf die weitere Verbesserung der Sicherheit, Zuverlässigkeit und Performance, sondern auch auf die größtmögliche Kompatibilität zu Windows Vista Wert gelegt. Mit dieser Webcast-Serie wollen wir Ihnen wichtige Komponenten und Funktionen des neuen Betriebssystems vorstellen.

Die Themen dabei sind Windows APIs für .NET Entwickler, Libraries and Federated Search, Hintergrunddienste, Anwendungskompatibilität, sowie Scenic: Ein nativer RibbonBar und die Taskbar.

Windows 7 (Teil 1 von 6) - Windows APIs, die man als Entwickler kennen sollte

In diesem Webcast widmen wir uns vielen kleinen, aber sicherlich nicht minder interessanten Windows APIs, die der ambitionierte Entwickler unter Windows 7 kennen sollte. Die meisten APIs sind auch für Windows Vista, teilweise aber auch für frühere Windowsversionen, verfügbar. Ob Präsentationsmodus, Stromsparfunktionen, die neue flexible Systemsteuerung oder Transaktionen im Dateisystem – hier ist sicherlich für jeden etwas dabei.

Viele Beispiele zu Data Binding, MVVM, MVC und mehr

02.06.2009 02:39:04 | Norbert Eder

Du suchst WPF-Beispiele zu Data Binding (Datenbindung), MVVM, MVC oder anderen Bereichen? .NET GUI bietet mittlerweile zahlreiche Beispiele zu diesem Thema und es werden mehr. Diese stehen als vollständige Solutions zum Download bereit: .NET GUI Downloads. Zu den meisten Beispielen finden sich auch dazupassende Artikel, die Hintergrundwissen...

Meine erstes Video Bing

01.06.2009 22:59:31 | Oliver Scheer

Als persönliche Vorbereitung für die anstehende Tour von U2 muss man natürlich die aktuellen Termine der Herren aus Dublin nachverfolgen. So geschehen auf Bing. Und ich war sehr positiv von der Videosuche überrascht. Links die diversen Formate und Anbieter und rechts im zeitgemäßen Ajax-Style … Videoplayer ohne nerviges neuladen der gesamten Seite.

… einfach Magnificient …

image

Die Montagsmeinung - Imperative des Handelns

01.06.2009 22:49:39 | Jan Schenk

_MG_9102


Ob ich nun ein Kant-Sympathisant bin oder nicht kann ich nicht sagen, dafür kenne ich zu wenige seiner Werke. Stets beeindruckt war ich allerdings von seinem “Kategorischen Imperativ”.

Ich bin lange davon ausgegangen, dass dieser aus nur einem Satz besteht:

“Handle stets so, dass die Maxime deines Willens jederzeit als Prinzip einer allgemeinen Gesetzgebung dienen könnte.”

Eigentlich bis heute. Bis ich Wikipedia zur genauen Formulierung des Kategorischen Imperativs befragt habe. Und siehe da, was ich da vor mehr als einem Jahrzehnt in der Schule gelernt hatte, war doch tatsächlich unvollständig. Da gibt es doch tatsächlich wesentlich mehrere Formeln, die alle zum Kategorischen Imperativ zählen.

Den vollen Umfang des KIs erspare ich euch an dieser Stelle, denn das, was ich damals im Ethikunterricht gelernt hatte, kondensiert das Ganze schon ganz gut.

Der eigentliche Grund für diese Montagsmeinung ist aber ein Imperativ, der abseits von Kant liegt und mit Sicherheit nicht annähernd die gleiche philosophische Tiefe hat, aber für das tägliche Leben in Entscheidungsfragen meines Erachtens nach sehr hilfreich ist:

“Handle stets so, dass neue Möglichkeiten entstehen.”

Wow, als ich diesen Satz (mehr ist es erst mal nicht) das erste Mal gehört habe, bin ich ziemlich baff gewesen. Kann man es sich wirklich so einfach machen?
“Hey, ich weiß nicht was ich tun soll. Oh, ich habe ja einen Imperativ. Super, diese Entscheidung lässt die meisten neuen Möglichkeiten entstehen. Die nehm ich.”
Manchmal, nur manchmal, ist es so einfach. Wenn ich mit einer Entscheidung auf der Kippe stehe, dann hilft mir dieser Imperativ. Ich kann meinen Weg hin zu einer Entscheidung nicht mit dieser Maxime pflastern. Das geht mit Kant. Mein Lieblingsimperativ ist dafür nicht geeignet, aus dem einfachen Grund, als das man sich damit unglaublich leicht moralisch verzetteln kann. Natürlich entstehen Möglichkeiten, wenn ich einem Baby den Schnuller weg nehme. Ist das moralisch verwerflich? Selbstverständlich. Sollte ich es tun, nur weil ich damit meiner Entscheidungshilfe, einem Imperativ, folgen kann? Selbstverständlich nicht.

Aber in einer Entscheidung, einer Weggabelung, an der ich unsicher stehe, weil ich nicht weiß, von welchem Weg ich am Ende des Tages mehr habe, dort kann mir dieser Imperativ vielleicht nicht zur besseren Entscheidung verhelfen. Der Imperativ kann aber dafür sorgen, dass ich beim Treffen der Entscheidung ein besseres Gefühl habe und auch danach noch weiß, warum ich mich entschieden habe, wofür ich mich entschieden habe.

Die ein oder andere Entscheidung habe ich schon aufgrund dieses Imperativs gefällt, auch wenn ich mich auch gerne von Bauchgefühlen leiten lasse, dem sogenannten Instinkt. Auch damit habe ich meine guten und schlechten Erfahrungen gemacht.

Wenn wir uns jetzt komplett ins Gewirr der Imperative und Bauchgefühle stürzen wollen, dann könnten wir noch einen Imperativ oder ein Bauchgefühl zu Rate ziehen, wenn wir nicht wissen, ob wir lieber einen Imperativ oder ein Bauchgefühl befragen wollen.

Genauso gut wäre allerdings auch das Orakel von Delphi. Die Zuverlässigkeitsrate dürfte bei den Imperativen am höchsten sein, weil man so seine Entscheidung von Natur aus immer verteidigen kann.

Wahrscheinlich erfreuen sie sich deshalb auch einer gewissen Beliebtheit.

Andersherum ist das mit den Imperativen ein bisschen wie Religion, bloß gott- und wertungsfrei. Finde ich persönlich sympathischer. Ist aber sicher nicht jedermanns Sache.



tweetmeme_url = 'http://blogs.msdn.com/jansche/archive/2009/06/01/die-montagsmeinung-imperative-des-handelns.aspx';

Windows® API Code Pack for Microsoft® .NET Framework (v0.85)

01.06.2009 13:37:00 | Ozgur Aytekin

The Windows® API Code Pack for Microsoft® .NET Framework provides a source code library that can be used to access new Windows 7 features (and some related Windows Vista features) from managed code. These features are not available to developers today in the .NET Framework.

The features included in this version (v0.85) of the library are:

Support for Windows Shell namespace objects, including the new Windows 7 libraries, Known Folders and non file system containers.
Windows Vista and Windows 7 Task Dialogs.
Windows 7 Explorer Browser Control supporting both WPF and Windows Forms.
Support for Shell property system.
Helpers for Windows 7 Taskbar Jumplists, Icon Overlay and Progress bar.
Support for Windows Vista and Windows 7 common file dialogs, including custom file dialog controls.
Support for Direct3D 11.0 and DXGI 1.0/1.1 APIs.
Sensor Platform APIs
Extended Linguistic Services APIs


http://code.msdn.microsoft.com/WindowsAPICodePack

Heisst die Zukunft RIA?

01.06.2009 09:37:00 | Peter Bucher

Am 13. Oktober 2008 haben Golo Roden und ich unter dem Titel Noch Fragen, Golo? 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. Juni 2009, ist es nun wieder so weit, und unser Thema für diesen Monat lautet:

Heisst die Zukunft RIA?

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:

RIA, ausgeschrieben Rich Internet Application. Was ist das überhaupt?

Wikipedia definiert den Begriff so:

Der Begriff Rich Internet Application (RIA, deutsch: reichhaltige Internet-Anwendung) beschreibt eine Anwendung, die Internet-Techniken benutzt und eine intuitive Benutzeroberfläche bietet.

Die Definition(en) im Web sind ziemlich weitläufig, so gilt auch eine Webanwendung mit AJAX als RIA, oder eine Webanwendung die exessiv Javascript nutzt ebenso.

Angefangen hat alles mit Java-Applets, die Heute aber praktisch keine Benutzung mehr finden. Flash ist die bekannteste Technologie, die sich auch am meisten durchgesetzt hat, um reichhaltige Inhalt im Internet bereitzustellen.

Mit Silverlight ist vor einiger Zeit ein Pendant von Microsoft an den Start gegangen um .NET auch in diesem Bereich zu bringen.

Wahrscheinlich muss ich mal so anfangen: Ich bin ein Hypertext-Fan.
Das Internet wurde aufgrund der Konzepte dahinter so berühmt und erfolgreich. Verlinkung, einfache Bereitstellung von Inhalt, wenig Schnickschnak und niedrige Anforderungen.

Mit der Zeit sind die Anforderungen an eine Webanwendung extrem gestiegen. Eine Webseite soll schnell reagieren, nicht mehr komplett nachladen, Videos anzeigen, 3D anzeigen usw.
Diese Anforderungen können nicht mehr mit den normalen Hausmitteln (HTML / CSS / Javascript) erreicht werden.
Und genau an diesem Punkt springen Flash, Silverlight, … Plugins für den Browser ein.

Sie ermöglichen es, clientseitig eine Anwendung im Browser laufen zu lassen die viel mehr bietet als das mit HTML zu bewerkstelligen ist.

Um zum Thema zurückzukommen: Ich denke das wir in Zukunft mehr von diesen Technologien nutzen werden, um die grösser werdenden Anforderungen abzudecken. Es ist also die Zukunft, aber nicht die absolute :-)

Es schwirren überall Fragen wie “Soll ich die Anwendung jetzt mit Silverlight oder ASP.NET entwickeln?” rum.
Hierbei ist meine persönliche Antwort, so viel Plugins / Javascript wie nötig und so wenig wie möglich zu benutzen. Diese Meinung zählt natürlich nicht, wenn eine Anwendung bspw. komplett mit Flash entwickelt werden soll.

Auch wenn Plugins viele Vorteile bieten, haben sie auch Nachteile.
So gibt es meines Wissens in keiner Technologie eine eingebaute Möglichkeit die eine einfache Verlinkung von Navigationspunkten oder sogar verschiedener Statis ermöglicht.
Man könnte sowas zwar mit dem Hash-Zeichen in der Url nachbauen, wie das schon bei AJAX gemacht wird, jedoch ist auch das nicht die absolute Lösung. Ganz im Sinne von: Eine Ressource ist eine Ressource ist eine Ressource…

Auch ist zu bedenken wie eine Suche auf den Inhalt der in einer solchen Anwendung dargestellt wird, gelöst werden soll. Google kann kein Flash und auch kein Silverlight.

Bei einer reicheren Anwendung ist auch die anfängliche Downloadzeit grösser, was sich aber durch die schnellere Laufzeit wieder ausgleicht. Trotzdem ist das ein Nachteil der Nutzer mit einer richtig langsamen Verbindung (Ja die gibts noch) davon abhalten könnte, so lange zu warten.

Für gewisse Bereiche (Bspw. Intranet) sehe ich absolut Vorteile wenn eine Anwendung komplett mit Flash / Silverlight / … geschrieben wird. Im öffentlichen Internet sollte meiner Meinung nach jedoch immer mit einer gesunden Kombination gearbeitet werden.
In der Kombination liegt die Würze, so sorgen auch die Hersteller der Plugins dafür das die Host-Seite (HTML / Javascript) mit dem Plugin und umgekehrt kommunizieren kann. Damit ergeben sich wunderbare Möglichkeiten und die eingebettete Anwendung in der Webseite verfliesst mit der Webseite.

Meine Hauptaussage soll also sein: So viel wie nötig und so wenig wie möglich. Das Internet wird in ein paar Jahren nicht nur noch aus RIAs bestehen, sondern in einer guten Kombination, da bin ich sicher.

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