Dienstag, Juli 31, 2007

Neues Eisen

Python und Ruby sind seit Anfang der 90er Jahre als Programmiersprachen verfügbar. Das diese jedoch nicht zum alten Eisen gehören belegt sicher die Tatsache, dass Microsoft die Palette der .NET-Sprachen um diese beiden dynamischen Sprachen erweitert hat. Neben IronPython gibt es nun auch mit IronRuby die zweite Impelmentierung einer dynamischen Scriptsprache für's .NET CLR bzw. der neuen Dynamic Language Runtime (DLR). IronRuby ähnelt JRuby für die Java VM und IronRuby wird wohl bis Ende des Jahres bei CodePlex unter der BSD-ähnlichen Lizenz Microsoft Permissive Licence veröffentlicht sein. Bis dahin erhalten Interessierte mit dem pragmatischen Programmierfüherer Programming Ruby eine gute Einführung. Die Dynamic Language Runtime (DLR) fügt der Common Language Runtime (CLR) von .NET einige wenige, aber wichtige Merkmale hinzu, um diese für die Verwendung und die Entwicklung von dynamischen Sprachen zu optimieren bzw. zu erleichtern. Konkret umfassen diese Erweiterungen ein dynamisches Typsystem und ein standardisiertes Hosting Modell. Die DLR wird in Zukunft von den vier Sprachen JavaScript (EcmaScript 3.0), Python, Ruby und Visual Basic unterstützt werden. Versionen von JavaScript und Python sind schon jetzt Bestandteil von Silverlight.

Montag, Juli 30, 2007

Im Westen geht die Sonne unter

Und auf dem Balkon meiner Wohnung scheint von Morgens bis zum frühen Nachmittag die Sonne. So sieht man beim Sonnenuntergang dann oft schöne Reflektionen und interessante Kontraste!

LINQ: Csv To Xml

Wie kann man eigentlich mit LINQ schnell mal den Inhalt einer CSV-Datei in eine XML-Datei transferieren. Wie nachstehende Abbildung zeigt, ist dies nicht so schwierig! Jedoch muss man ein wenig überlegen, wie man bei dem Select-Kommandos die erste Zeile überliest. Als Lösung habe ich hier eine Outer-Variable gewählt, die - wie bei einer Outer-Variablen üblich - außerhalb des LINQ-Statements (bzw. einer Lambda-Expression = anonymen Methode) deklariert und mit 0 initialisert wird (int lineCounter = 0;). Mit einer Where-Klausel wird dann innerhalb des Statements geprüft ob lineCounter++ > 0 ist und schon wird die erste Zeile übersprungen.

Samstag, Juli 28, 2007

iPhone in meinen Händen

Heute war ich bei Gravis, weil eine Freundin sich ein MacBook kaufen möchte und wie der Zufall so spielt, hatten sie das erste Mal ein iPhone zur Vorführung bereit. Diese Gelegenheit habe ich mir nicht nehmen lassen, da der Laden fast leer war und der freundliche Verkäufer mir das Handy für einen kurzer Test sogar übergab. Und ich muss schon ehrlich sagen, dass das Handling dieses attraktiven Winzling extrem beeindruckend war. Wenn dies nicht der Anfang einer neuen, langen Freundschaft war ...

Orcas Beta II

Nur noch kanpp 30 Minuten bis zum Ende des Downloads der Orcas Beta II. Ich habe mich, weil ich z.Z. auch mit dem VS Team System 2005 arbeite für dessen Nachfolger entschieden. Es wird sicherlich recht interessant herauszufinden, welche Features sich im TS verbessert haben bzw. neu hinzugekommen sind nachdem ich schon viele Schritte mit der Beta 1 von Orcas gemacht habe. Einen guten Einstieg in die einfache Installation der Beta II von Orcas bietet Scott Hanselman.

Donnerstag, Juli 26, 2007

Tool zur Optimierung der Freizeit

Jedem .NET-Programmierer, der seine (Frei-)Zeit gerne auf dem Sofa vorm Fernseher, der Stereoanlage oder Spielkonsole verbringt und für die Qualität der notwendigen Geräte ordentlich investiert hat, empfehle ich das Visual Studio Add-In ReSharper. Zugegeben dieses Tool ist nicht kostenfrei. Jedoch weit preiswerter als die meiste Unterhaltungselektronik. Und durch den sinnvollen Einsatz dieses Tools kann leicht mehr Zeit für die Freizeit unter dem Strich herausspringen.

LINQ Where mit .NET 2.0

Mit LINQ ist es ab der kommenden Version 3.5 des .NET Frameworks möglich eine einheitliche Abfragesprache für alle IEnumerables zu verwenden. Diese Query Language ähnelt dem bekannten SQL und enthält auch ein Where-Kommando, um aus einer Collection alle die Elemente auszuwählen, die einer Bedingung entsprechen. Ein solches Where-Kommando ist auch leicht mit Hilfe von Generics und anonymen Methoden (C#) ab .NET 2.0 zu erstellen. Mittels des folgenden Code-Schnipsels wird die Liste customerList mittels einer anonymen Methode auf Elemente überprüft, deren Eigenschaft Surname mit der Zeichenkette „Muster“ beginnt.

 IEnumerable<Customer> names =
   EnumerableEnhancement.Where(customerList,
                               delegate(Customer c)
                               {
                                 return c.Surname.StartsWith("Muster");
                               });
Die Methode selbst kann wie folgt implementiert werden:

        public static IEnumerable<T> Where<T>(IEnumerable<T> items, Predicate<T> predicate)
        {
            List<T> list = new List<T>();
            IEnumerator<T> enumerator = items.GetEnumerator();
            while (enumerator.MoveNext())
            {
                if (predicate(enumerator.Current))
                    list.Add(enumerator.Current);
            }
            return list;
        }

Der als Parameter verwendete Delegate Predicate<T> ist als delegate bool Predicate<T> (T obj) in System deklariert. Die Implementierung dieses Delegates definiert einen Satz von Kriterien und bestimmt, ob das übergebene Objekt jene Kriterien erfüllt. Falls die Kriterien erfüllt sind wird das Objekt der Liste, die zurückgegeben wird, hinzugefügt.

Beutzer von VB.NET können dies beinah auch so machen. Jedoch gibt es bei VB.NET keine anonymen Methoden. Aus diesem Grund dürfen VB.NET eine extra Methode implementieren, die der Signatur des Delegates Predicate<T> entspricht. Ob dies in VB.NET wirklich so sinnvoll ist, bezweifele ich, da mittels einer Anonymer Methoden wie in C# mehr Möglichkeiten zur Verfügung stehen.