Die Visual Studio 2010 Beta 2 steht nun zum Download zur Verfügung.

http://www.microsoft.com/germany/visualstudio/products/visual-studio/2010/default.aspx

clip_image002


 
Categories: .NET | C#

No Pressure, No Speed!Die Verwendung von mehrdimensionalen Arrays ist oftmals ein wesentlicher Bestandteil in Programmen. Je nach Problemstellung und Größe der Arrays kann der Zugriff auf solche die Laufzeit eines Programms negativ beeinflussen.

In C# gibt es grundsätzlich neben den eindimensionalen Arrays 2 Arten von mehrdimensionalen Arrays. Diese unterscheiden sich nur in ihrer Notation:

  • [,] – Multidimensionale Arrays
  • [][] – Jagged-Arrays

Bei multidimensionalen Arrays werden die Dimensionen durch ein Komma getrennt, bei Jagged-Arrays durch die erneute Klammerung. Multidimensionale Arrays haben eine feste Größe. Bei einem Jagged-Array kann die Größe variieren, da es ein Array von Arrays ist. Das ist im Grunde genommen eigentlich schon alles was man darüber wissen sollte. – Wie aber steht es jetzt mit den Geschwindigkeits-Unterschieden? Gibt es vielleicht noch andere Möglichkeiten?

Ja! Die gibt es definitiv. Bei einem Disput mit einem Kommilitonen über genau dieses Thema hat dieser prompt einen Eintrag in seinem Blog dazu und dazugehörige Messergebnisse veröffentlicht:

 Manolo's HPC Blog

Er verwendet dort eine weitere, eher aus der Welt der C Programmierer bekannte Technik, um mehrdimensionale Arrays zu realisieren. Es wird einfach ein eindimensionales Array verwendet, das alle Elemente linear beinhaltet.

Der Zugriff erfolgt über die Formel:

position = Y * breite + X

Als ich das Ergebnis das erste mal sah, konnte ich kaum glauben, dass dieses schneller als ein Jagged-Array ist. Aber bei einer genaueren Untersuchung erklärt sich auch warum. Darf man dem manik.net – Blog trauen:

MSIL kann eindimensionale Arrays besser optimieren wie mehrdimensionale.
Auf MSIL ebene sieht man den unterschied:

int [,] secondarr = new int[1, 2];
secondarr[0, 0] = 40;

MSIL:
IL_0029: ldc.i4.s 40
IL_002b: call instance void int32[0...,0...]::Set(int32, int32,in32)

Mit einem Jaggedarray sieht das ganze dann auf MSIL so aus:
IL_001c: ldc.i4.s 40
IL_001e: stelem.i4
stelem = „store an element“

Bei mehrdimensionalen Arrays wird der ganze „Generic Type“-Kram also betrieben was einiges an Overhead erzeugt.

Daher ist es ratsam wann immer möglich ein lineares Array anstelle von einem Mehrdimensionalen Array zu verwenden.

Ich habe mir die ganze Sache aber in eigener Regie noch einmal angesehen. Als Ergebnis habe ich es geschafft, eine noch schnellere Variante zu programmieren. Diese setzt allerdings ein \unsafe bei den Compiler-Einstellungen voraus.

Anstelle auf die einzelnen Elemente des Arrays zuzugreifen, wird direkt auf einen Pointer zugegriffen. – Eigentlich nichts besonderes, kann aber bei manch einer Berechnung den ein oder anderen Performancegewinn bringen.

Die Ergebnisse sehen dabei wie folgt aus:

Result = 249500250000000
1000times: Matrix A with [1000, 1000]  (matrix array): 11637ms
Result = 249500250000000
1000times: Matrix B with [1000][1000]  (jagged array): 6361ms
Result = 249500250000000
1000times: Matrix C with [1000* 1000]  (linear array): 5486ms
Result = 249500250000000
1000times: Matrix D with [1000* 1000]  (unsafe array): 5175ms!!!

Gegenüber dem [,] Array sind die beiden letzten Varianten ungefähr doppelt so schnell.

Also für die Zukunft merken:

    • Keine [,]-Arrays verwenden!

    • [][]-Arrays können durch lineare Arrays ersetzt werden!

    Den Quellcode zum verifizieren und selber Testen gibt es hier:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Diagnostics;
    
    namespace SpeedTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                int n = 1000;
                Stopwatch swatch = new Stopwatch();
                
                double[,] A = new double[n, n];
                swatch.Start();
                CalcMatrix(A,n);
                swatch.Stop();
                Console.WriteLine("{0}times: Matrix A with [{0}, {0}]  (matrix array): {1}ms", n, swatch.ElapsedMilliseconds);
                swatch.Reset();
    
                double[][] B = new double[n][];
    
                // init jagged arrays
                for (int i = 0; i < n; i++)
                {
                    B[i] = new double[n];
                }
    
                swatch.Start();
                CalcJagged(B, n);
                swatch.Stop();
                Console.WriteLine("{0}times: Matrix B with [{0}][{0}]  (jagged array): {1}ms", n, swatch.ElapsedMilliseconds);
                swatch.Reset();
    
    
                double[] C = new double[n* n];
                swatch.Start();
                CalcLinear(C, n);
                swatch.Stop();
                Console.WriteLine("{0}times: Matrix C with [{0}* {0}]  (linear array): {1}ms", n, swatch.ElapsedMilliseconds);
                swatch.Reset();
    
                unsafe
                {
                    double[] D = new double[n * n];
                    swatch.Start();
                    fixed(double* pD = D)
                    CalcUnsafe(pD,n);
                    swatch.Stop();
                }
                Console.WriteLine("{0}times: Matrix D with [{0}* {0}]  (unsafe array): {1}ms", n, swatch.ElapsedMilliseconds);
                swatch.Reset();
                Console.ReadKey();
            }
    
            private static void CalcJagged(double[][] B, int n)
            {
                double result = 0;
                for (int x = 0; x < n; x++)
                {
                    for (int i = 0; i < n; i++)
                    {
                        for (int j = 0; j < n; j++)
                        {
                            B[i][j] = i * j;
                            result += B[i][j];
                        }
                    }
                }
                Console.WriteLine("Result = " + result);
            }
    
            private static void CalcMatrix( double[,] A, int n)
            {
                double result = 0;
                for (int x = 0; x < n; x++)
                {
                    for (int i = 0; i < n; i++)
                    {
                        for (int j = 0; j < n; j++)
                        {
                            A[i, j] = i * j;
                            result += A[i, j];
                        }
                    }
                }
                Console.WriteLine("Result = " + result);
            }
    
    
    
    
            private static void CalcLinear(double[] C, int n)
            {
                double result = 0;
                for (int x = 0; x < n; x++)
                {
                    for (int i = 0; i < n; i++)
                    {
                        for (int j = 0; j < n; j++)
                        {
                            C[i * n + j] = i * j;
                            result += C[i * n + j];
                        }
                    }
                }
                Console.WriteLine("Result = " + result);
            }
    
            unsafe private static void CalcUnsafe(double* pD, int n)
            {
                double result = 0;
                for (int x = 0; x < n; x++)
                {
                    for (int i = 0; i < n; i++)
                    {
                        for (int j = 0; j < n; j++)
                        {
                            *(pD + i * n + j) = i * j;
                            result += *(pD + i * n + j);
                        }
                    }
                }
                Console.WriteLine("Result = " + result);
            }
        }
    }

     
    Categories: .NET | C# | HPC

    image

    Wer sich mit diesem Fehler rumärgern sollte kann diesen relativ leicht beheben. Es fehlt wahrscheinlich nur eine Bibliothek.

    Ein simples apt-get install libgdiplus genügte, und der Fehler war Geschichte.

    Darauf kommen muss man jedoch erst mal…


     
    Categories: .NET | C# | Mono

    image Wie ich dieses Ding nur hasse! ;)

    Ich habe heute endgültig einen Anfall bekommen und mir dieses lästige Problem aus dem Weg geschafft, mit dem ich mich herum plage. Aber zunächst erst mal das Problem erläutert.

    Als Microsoft Student Partner haben wir das Vergnügen schon heute nicht etwa mit Exchange 2007 zu arbeiten, sondern mit dem Nachfolger, Exchange 14. Dabei hat, wenn ich es richtig verstanden habe, jeder User 5GB Speicherplatz bei Microsoft ( Exchangelabs.com ). Es sind bereits 1.5 Millionen Mailboxen im Einsatz, was mal locker 7,5 petabytes an Speicher wären. Nicht schlecht @ Microsoft, vor allem als eine Exchange Server Installation.

    Das nervige dabei ist jedoch, dass man sich bei jedem Outlook-Start an diesem System neu anmelden muss. – Und ja, es gibt kein Häkchen, um das Passwort zu speichern. Weil ich persönlich jemand bin, der Outlook nur dann aufmacht, wenn er es nutzen will, nervt das schon manchmal tierisch, vor allem wenn man sich bei den langen kryptischen Passwörtern mal vertippt.

     

    Der eine oder andere würde jetzt fragen: “Schon mal den Credentials Manager in der Benutzerkontensteuerung (Systemsteuerungen) ausprobiert?”

    Die Antwort ist: Ja, alle möglichen Kombinationen, mehrere Leute (andere Student Partner), ohne Erfolg.

    Danach habe ich noch folgendes beim Exchange Labs FAQ gefunden:

    Frequently Asked Questions for End Users - Exchange Labs:

    Every time I open Outlook 2007, it asks for my password. I don't see a "Remember this password" option. How can I configure Outlook to remember my password?

    Outlook 2007 requires that you specify your password every time you open Exchange Labs. This is because of the kind of security built into Outlook 2007.

     

     

    ENGLISH: I have written an Outlook 2007 Loader to autofill your credentials for use with Exchange Labs Mailservice Exchange 14. Download it below…

     

     

    Danach war ich echt abgenervt. Mit dem Iphone klappt das ohne Probleme, warum sollte das Outlook nicht können. – Es scheint eine Policy vom Exchange 14 zu sein.

    Naja nicht der Rede wert.

    Marcel Hoyer hat mich mit dem Programm KeePass auf eine nette Idee gebracht.

    Kurzum habe ich mir einen Loader geschrieben, der Outlook 2007 startet, und automatisch den Login übernimmt. Jetzt hab ich endlich ein sorgenfreies Leben.

    Das Programm inklusive Quelltext gibt es bei mir zum Download:

    Download ZIP Archive: Outlook 2007 Loader

     

    Die Lizenz hab ich vergessen, “macht damit was ihr  wollt”. Für Schäden haftet ihr selbst. Andernfalls sei der Download nicht gestattet. ;)

    PS: Der Quelltext ist vielleicht auch ganz interessant, um den standard Windows Login Dialog, welcher ja überall mal wieder auftaucht, anzusteuern.

    WICHTIGER NACHTRAG:

    Bitte bedenkt, dass mit dieser Lösung euer Username und passwort im Klartext an den Loader als Parameter übergeben wird. Das ist nicht ganz optimal. Der Quelltext liegt bei. Aber wer mag, kann seine Daten fest zu einer Binary kompilieren, oder wer die Zeit hat, kann Verschlüsselung einbauen.


     
    Categories: .NET | C# | Dies und Das

    October 25, 2008
    @ 09:55 AM

     image Scott Hanselmann gab auf seinem Blog bekannt, dass es ein neues .NET Logo gibt.

    Das Logo ähnelt dabei einer Welle, was wohl für die Eigenschaften von .NET stehen soll.

    Für den ein oder anderen wird es sicher eine ungewohnt sein, mir gefällt es allerdings sehr gut. 

    Das neue reiht sich perfekt in die Silverlight und co. Design-Ära ein. Und wenn wir mal ehrlich sind, ist das alte .NET Logo doch schon ein bisschen in die Jahre gekommen.

    imageimage


     
    Categories: .NET

    Im Rahmen meines Besuchs auf der „BASTA!“ vom 22. – 26. September 2008 habe ich es mir nicht nehmen lassen die Speaker in der Speaker-Lounge um ein kurzes Interview zu bemühen. Dazu habe ich jeden den ich angetroffen habe, 3 einfache Fragen gestellt, die optional per Email beantwortet werden konnten:

    1. Welche Technologie fasziniert Dich am meisten?

    2. Was genau ist das?

    3. Warum ?

    Ob Software oder Hardware war bei dieser Umfrage egal.

    Leider haben es jedoch nicht alle rechtzeitig geschafft auf die Mail von mir zu antworten, sei es wegen Zeitgründen, Stress auf der Arbeit, etc. , was ich natürlich niemanden verübeln kann. Damit diese Umfrage jedoch noch halbwegs aktuell bleibt, habe ich mich entschieden diese heute zu veröffentlichen.

    Ich habe das ganze thematisiert aufbereitet. Zu jeder Person steht ein kurzer „Abstract“, den ich von der „BASTA!“ übernommen habe, danach folgen die beiden Antworten zu den Fragen 2 und 3.

    Dabei habe ich mir ebenfalls das Recht genommen, bei der ein oder anderen Antwort ein paar Tippfehler zu korrigieren.

    Als Gewinner, wenn man das überhaupt so sagen kann, ist ganz klar Silverlight, passend zum morgigen Silverlight 2 Release von Microsoft, davongegangen. Dicht gefolgt von Funktionaler-Programmierung mit F# oder LINQ in C#.

    Was ich persönlich am interessantesten fand, war das doch teilweise sehr identische Ergebnis der Umfrage.

    Ich wünsche viel Spaß beim lesen.

     

     

    4x Silverlight

    Patrick Theobald, Theobald Software GmbH:

    Patrick Theobald ist Fachbuchautor und Geschäftsführer der Theobald Software GmbH, Stuttgart. Sein Hauptaufgabengebiet sind die Entwicklung und das Design von Schnittstellen zwischen SAP und Microsoft-Produkten. Ein besonderes Augenmerk liegt dabei auf Transparenz, Stabilität und vor allem Kostenersparnis. Sie erreichen Ihn unter Patrick.Theobald (at) theobald-software.com oder www.theobald-software.com.

    „Silverlight ist das Microsoft-.NET-Pendant zu Flash bzw. zu Java-Applets.“

    „Weil mit Silverlight die Möglichkeit geschaffen wird, eine Anwendung frei von schwierigen Installationen und ggfs. Updates auf den Rechner des Anwenders zu bringen. Im Gegensatz zu Web/Ajax-Anwendungen sind einige Nachteile ausgemerzt, die klassische Webanwendungen mit sich bringen.“

    Robert Panther, Logica Deutschland GmbH & Co. KG:

    Der Diplom-Informatiker (FH) Robert Panther ist als Senior Consultant für die Logica Deutschland GmbH & Co. KG tätig. Daneben schreibt er Fachartikel und Bücher zu seinen Spezialgebieten SQL Server, Web-Programmierung und Anwendungsentwicklung für mobile Geräte.

    „Technologie zur Entwicklung von "Rich Internet Applications"“

    „Weil damit nicht mehr alle Web-Anwendungen gleich aussehen und einen ähnlichen Bedienkomfort erreichen können wie Desktop-Anwendungen.“

    Tobias Richling, rquadrat GmbH & Co. KG:

    Tobias ist Richling ist 27 Jahre alt, und wohnt in einer kleinen Stadt im Münsterland. Er hat in Münster Wirtschaftsinformatik studiert. Seit 2001 ist er als selbständiger Trainer und Softwareentwickler tätig. Seine Zuneigung zu Basic-Dialekten und zu Microsoft Produkten ist historisch gewachsen: angefangen mit Amiga Basic hin zum PC mit QuickBasic, VB 6 zu VB.NET. Diese Affinität konnte auch von einen studienbedingten Delphi oder Java Intermezzo nicht durchbrochen werden. Diese Vorlieben haben dann auch im beruflichen Alltag Wirkung gezeigt, Trainingsinhalte lagen hauptsächlich im Softwareentwicklungsbereich im Microsoft Umfeld. Vorwiegend mit .NET (auch C# war mitunter dabei) und dem SQL Server, aber auch im Bereich ASP.NET. Auch in Softwareentwicklungsprojekten konnten diese Fähigkeiten gut eingesetzt werden. Aktuelle Schwerpunkte liegen auf den neuen .NET Technologien, insbesondere im Bereich der Webtechnologien Silverlight & Co.

    „Eine Browser-Plugin basierte Technologie zur Erstellung von Rich Internet Applications. Microsofts Konkurrenz zu Flash. Basiert wie WPF auch auf XAML, was die Lernkurve flach hält.“

    „Weil man von vorhandenem XAML / WPF Wissen profitiert. Weil man schöne Webseiten damit bauen kann.“

    Marcel Hoyer:

    Marcel Hoyer studiert an der Universität Leipzig im Masterstudium für Informatik. Er ist seit Jahren .NET begeistert und aktiv an der Gestaltung der .NET User Group Leipzig beteiligt. Seit November 2006 steht er Studenten zusätzlich als Ansprechpartner im Rahmen des Microsoft Student Programs zur Verfügung.

    „Ein neues Konzept von Microsoft zur Modellierung von Benutzeroberflächen. Dabei kommt XAML als deklarative Sprache zum Einsatz. WPF ermöglicht größere gestalterische Freiräume als bisherige Technologien wie WinForms, GDI usw. Mit Silverlight gibt es das Pendant für den Webbrowser mit ähnlichem Ansatz.“

    „Usability, Layout und Design sind mir wichtig, wenn ich mit Anwendungen arbeite oder Webseiten anschaue. Diese Punkte auch selbst in eigenen Projekten umzusetzen ist mein Ziel. Mit WPF und Silverlight liefert Microsoft eine Technologie, die dieses ermöglicht und zugleich die Schwierigkeiten von früheren Technologien ausmerzt.“

     

    2x Funktionale Programmierung: F#

    Alexander Groß, Synexus GmbH:

    „Funktionale Programmierung ist eine Alternative zur imperativen Programmierung wie man sie z. B. von C# kennt. Alle Variablen sind inhärent nicht veränderbar, was zu einer Reihe von interessanten Nebeneffekten führt. Z. B. sind Typen automatisch „Thread Safe“ und Algorithmen lassen sich einfach parallelisieren. F# ist eine typsichere und objektorientierte Sprache, angereichert mit Konzepten aus anderen funktionalen Sprachen wie LISP: Closures, Pattern Matching, Currying und Partial Application.“

    „In Zeiten in denen sich Moore’s Law sich nicht mehr automatisch auf die Taktgeschwindingkeit auswirkt und Prozessoren mit 32 oder mehr Cores in nicht allzu weiter Ferne liegen, ist Parallelisierung ein wichtiges Thema. Anwender erwarten schnelle Applikationen, doch diese sind nur mithilfe von Multi Threading umsetzbar. Multi-Threaded-Programmierung ist schwierig und die korrekte Synchronisierung nebenläufiger Tasks eine anspruchsvolle Aufgabe für den Entwickler. Funktionale Programmierung in Kombination mit Libraries wie Microsofts ParallelFX sind eine Möglichkeit, die Parallelisierung einzelner Aspekte einer Anwendung zu vereinfachen.“

    Steffen Forkmann, msu solutions GmbH:

    Steffen Forkmann, geboren 1982, lebt in Halle und studiert dort BioInformatik. Nebenbei arbeitet er als Software-Entwickler für die msu solutions GmbH (http://www.msu-solutions.de), einem Microsoft Gold Certified Partner. Seinen Einstieg in die Software-Entwicklung fand er mit Pascal und Delphi - heute programmiert er hauptsächlich in Microsoft Dynamics Nav oder mit C#. Seine Lieblingsthemen sind Algorithmik und Optimierung.

    F# ist eine funktionale aber objektorientierte Programmiersprache für das .NET Framework und wird von Microsoft momentan stark gepusht. In der nächsten Version von Visual Studio wird F# neben C# und VB.NET die dritte Standardsprache sein.“

    „F# gibt mir die Möglichkeit meine Funktionen und Algorithmen wesentlich kürzer zu schreiben. Ich setze die Sprache bereits bei einem Tourenoptimierungsprojekt für meine Diplomarbeit ein und erhoffe mir neben dem Performancegewinn durch parallele Verarbeitung auch einen Vorteil beim Abdrucken von kürzeren Codebeispielen in der schriftlichen Arbeit.“

     

    1x Funktionale Programmierung: C# - LINQ

    Rainer Stropek, software architects:

    Rainer Stropek ist Mitbegründer und Geschäftsführer von cubido business solutions GmbH, einem Microsoft Gold Certified Partner. Er arbeitet bei cubido als Senior-System-Architekt und spricht regelmäßig bei Microsoft-Konferenzen zu Themen rund um .NET, SQL Server und BizTalk.

    „Besser als der Erfinder von LINQ, Anders Hejlsberg, kann ich das nicht erklären: http://wm.microsoft.com/ms/msdn/visualcsharp/anders_2007_01/Anders_0001.wmv


    1x XNA

    Martin Wahnschaffe, Baam!! Studios:

    Martin Wahnschaffe studiert im 6. Semester Informatik an der TU Braunschweig und schreibt zur Zeit seine Bachelorarbeit. Mehrere Jahre Erfahrung in der Entwicklung von Computerspielen und C#-Programmierung trafen im letzten Jahr auf das Microsoft XNA Framework. Mit dessen Hilfe arbeitet er derzeit, zusammen mit Jochen Isensee und Florian Mätschke, am Projekt ImagineEarth - einem XBOX360 und Windows PC Spiel. Neben diesen Tätigkeiten arbeitet er seit 4 Jahren als freiberuflicher.NET-Entwickler.

    „Ein Framework zur Windows & XBOX360 Spiele-Entwicklung“

    „Es macht Spaß damit zu arbeiten, obwohl es eigentlich gerade erst dabei ist richtig zu entstehen (3.0 Release). Außerdem wird man gefordert und gefördert (Imagine Cup, Dream Build Play, Community, ...). Wer hätte gedacht, dass jeder(!) so komfortabel für die XBox entwickeln kann?!“

     

    1x VSTO (Visual Studio Tools for Office)

    Lars Keller, netcreate OHG:

    Lars Keller ist Mitbegründer und Geschäftsführer EDV/Entwicklung der netcreate OHG (www.netcreate.de) in Braunschweig. Er beschäftigt sich seit Jahren mit der.NET-Entwicklung und berät Firmen bei verteilten Anwendungen. Seine langjährige Berufserfahrung im Web reicht zurück von ASP (classic) bis ASP.NET 3.5. Weitere Tätigkeitsschwerpunkte sind Beratung beim Aufbau von Wissensmanagement, Office Entwicklungen (VSTO) und Integration von Visual Studio Team System. Des Weiteren ist er Leiter der INETA .NET Developer Group Braunschweig sowie Co-Lead von INETA Deutschland. Sie finden sein Blog unter Lars Keller …inspired by .NET

    „.NET Wrapperklassen für die Entwicklung von MS Office Add-Ins. Durch die VSTO Runtime können .NET Entwickler einfacher auf die COM-Schnittstellen von MS Office zugreifen.“

    „Durch VSTO wachsen zwei Welten zusammen! Die Möglichkeiten verschiedene Add-Ins mit .NET Power im Hintergrund zu entwickeln, ist eine reizvolle Aufgabe. Die Vernetzung der verschiedenen Office Applikationen untereinander oder auch mit  anderen Business Applikation, stellt ein faszinierendes Gebiet dar.  Z.B. durch die Automatisierung von Prozessen in Outlook, Excel oder Word bekommen die Nutzer die Chance die Produktivität ihrer Arbeitsumgebung zu steigern. VSTO bietet dazu eine gute Grundlage und stellt  nützliche Erweiterungen zur Verfügung.“

     

    1x Cloud Computing

    Frank Mantek, Google Deutschland:

    A former long time Microsoft employee, Frank Mantek joined Google in 2005 to work on the Google Data API. His past work include SQLXML, Internet Explorer, and other Microsoft technologies. When he is not working on new data technologies, he enjoyes playing the Djembe really loud.

    „Ein sehr verschwommener Begriff, der im Moment gerne für alles genommen wird, das sich mit Daten oder Computerresourcen beschäftigt, die nicht mehr nur Lokal existieren. Beispiele sind Amazon EC2 oder Google AppEngine Service Angebote. Im generellen zählen auch Angebote wie Google Apps, oder Flickr im weiteren Sinne zu Cloud Computing, zumindestens nach der letzten Wikipedia definition.“

    „ Meiner Meinung nach befindet sich das Internet in einer Umbruchsphase. Mit dem PC erfuhren Entwickler und Benutzer zum ersten Mal eine gewisse Freiheit im Umgang mit Computer Diensten, indem Rechenleistung persöhnlich verfügbar gemacht wurde. Jetzt werden massiv Daten und Anwendungen vom PC losgelöst und für mehr wie nur PCs verfügbar gemacht. Dadurch das Daten und Rechenleistung in der Cloud allen möglichen Devicen zur Verfügung stehen, ermöglichen sich völlig neue Anwendungen und Anwendungskombinationen. Wenn in der Zukunft, mein Kühlschrank feststellt das mein Sohn gerade die letzte Coke getrunken hat, und mein Telefon mir das mitteilt weil ich gerade im Supermarkt bin und daher dieses Problem beheben kann, dann liegt das an dem Versprechen des Cloud Computing.“

     

    1x Windows Home Server

    Felix Kollmann, init AG:

    Felix Kollmann arbeitet seit 2005 im Bereich Informations- und Kommunikationsmanagement bei der init AG in Berlin. Zu seinen Schwerpunkten gehören Programmierung mit C#/C++, Portalentwicklung in .NET sowie WSE 3.0 und WCF.

    „Das ist ein Server speziell auf die Bedürfnisse der Heimanwender zugeschnitten: Backup, zentrale Dateiablage mit Spiegelung und Web Access.“

    „Weil sich hieran die Open Source Gemeine schon sehr lange versucht hat, und der Windows Home Server einfach alles je dagewesene in den Schatten stellt.“

     

    1x Objekt-Relationales Mapping (ORM) in Verbindung mit LINQ

    Dr. Holger Schwichtenberg, IT-Visions.de:

    Dr. Holger Schwichtenberg ist Inhaber des auf .NET spezialisierten Beratungs- und Schulungsunternehmen IT-Visions.de. Seine persönlichen Schwerpunkte sind ASP.NET, verteilte Systeme, Active-Directory-Programmierung und PowerShell sowie die Migration von Altanwendungen auf .NET. Von Microsoft ist er für sein Fachwissen ausgezeichnet als Microsoft Most Valuable Professional (MVP) und .NET Code Wise Member. Er gibt sein Wissen in Schulungen, Vorträgen auf nationalen und internationalen Fachkonferenzen (u.a. TechEd, IT Forum, OOP) weiter. In seiner mehr als 10-jährigen Laufbahn als Softwareentwickler und Softwarearchitekt hat er 22 Fachbücher und über 400 Fachartikel veröffentlicht. In seinem Weblog www.dotnet-doktor.de berichtet er regelmäßig über aktuelle Entwicklungen im .NET-Markt.

    „ORM bedeutet, auf objektorientierte Weise auf relationale Datenbanken zuzugreifen.“

    „Beim ORM wird von den Eigenarten des relationalen Modells einschließlich der Sprache SQL abstrahiert. Microsoft bietet hier mit LINQ eine sehr elegante Möglichkeit, leider aber direkt zwei Alternativen (LINQ-to-SQL und LINQ-to-Entities), was die Anwender verwirrt.“

     

    1x .NET Compact Framework

    Simon Hackfort, eXp – eXtreme-Players:

    Simon Hackfort ist SCJP und seit 2002 bei T-Systems Enterprise Services GmbH tätig. Nebenberuflich ist er Fachjournalist und arbeitet als Senior-Redakteur beim Online-Spiele-Portal eXp. Privat beschäftigt er sich derweil mit dem .NET Compact Framework und der Spiele-Entwickelung für die Xbox360-Plattform mit Hilfe des XNA Frameworks.

    „Das .NET Compact Framework ist ein spezielles Framework für die Windows Mobile Plattform. Es ist ein eigenes Derivat und hat dennoch viele Gemeinsamkeiten des großen Bruders.“

    „Das Compact Framework ist von der Dateigröße her enorm kleiner als der große Bruder und bietet dafür sehr viele Leistungsmerkmale, wie Oberflächen, DB-Anbindungen, Telefonfunktionen usw. Zudem ist es ein Teil des Windows Mobile OS geworden und somit weit verbreitet.“

     

    1x Flash-Speicher

    Peter Pohmann, dataweb GmbH

    Peter Pohmann arbeitet seit 15 Jahren als Softwareentwickler, Projektleiter, Architekt und Coach sowohl in der eigenen Firma dataWeb GmbH als auch für Kundenprojekte. Sein besonderes Interesse gilt dem Entwurf stabiler und verständlicher Softwarearchitekturen, hauptsächlich im Bereich technischer Software. Seine bevorzugte Entwicklungsumgebung ist seit vielen Jahren Delphi, in der letzten Zeit kam C# hinzu. Als großes und wichtiges Versprechen für die Zukunft der Softwareentwicklung sieht Peter die ALM-Strategie von Borland, also die Integration des gesamten Entwicklungsprozesses von Definition über Entwurf und Implementierung bis hin zu Test und Auslieferung in einem einzigen Werkzeug.

    „Digitale Speicherchips, die Informationen ohne permanente Spannungsversorgung halten können. Sind schneller als Festplatten und auch kleiner. Werden für USB-Sticks, Digitalkameras und Solid State Disks benutzt.


    „Wirklich Spannend wird die Sache dann, wenn Flash Speicher mal so schnell werden wie RAM. Dann verschwindet der Unterschied zwischen Hauptspeicher und Platte, langsamem und schnellem Speichermedium. Rechner werden nicht mehr gebootet; Datenbanken und Dateisysteme werden überflüssig.“


     
    Categories: .NET | Dies und Das

    Es ist schon ein paar Tage her seitdem Release der 2.0 Version, aber die Neuerungen sind vielleicht doch noch einmal sehr interessant.

    Laut Miguel de Icaza, einer der Gründer vom Gnome und Schirmherr von Mono, ist eine der größten Neuerung für Mono, dass es jetzt endlich einen Debugger für Mono gibt.
        - Bisher gab es nämlich keinen, und die Entwickler musst auf WriteLine() und ähnliche Methoden setzen.

    Er selbst schreibt auf seinem Blog, dass Mono so sehr gewachsen ist,dass es zu komplex für einen Blogeintrag wäre, alle Features im Detail zu beschreiben.

    Der selben Ansicht bin ich auch, daher möchte ich gerne hier auf eine sehr übersichtliche Tabelle der Features in 2.0 von Miguel verweisen:

    Compiler Support .NET APIs Mono APIs
    Mono's Open Source Compilers: Open Source Compilers: Commercial Compilers:
    • ISE's Eiffel.
    • Microsoft's C#.
    • Microsoft's F#.
    • Microsoft's VB.NET.
    • RemObject's Oxygene (Object Pascal).
    And many more.
    Core API:
    • 2.0 core APIs.
    • System, System.Xml.
    • 3.5 System.Core.
    • System.Drawing.
    • System.DirectoryServices.
    • System.Web.Services.
    Windows.Forms 2.0:
    • Win32 driver.
    • Quartz/OSX driver.
    • Cairo/X11 Unix driver.
    ASP.NET 2.0:
    • Core ASP.NET.
    • ASP.NET AJAX.
    • Apache and FastCGI integration.
    ADO.NET 2.0 plus providers for:
    • Managed drivers: Postgresql, MS SQL Server, Sybase.
    • Semi-managed drivers: Firebird, IBM DB2, Oracle, Sqlite.
    • MySQL provides their own drivers.
    GUI APIs:
    • Gtk# (Unix, Windows, MacOS X).
    • Cocoa# (MacOS X).
    Mono Core:
    • Mono.Addins - Extensibility Framework.
    • Mono.Cairo - Cairo Graphics Binding.
    • Mono.Cecil - ECMA CIL Manipulation.
    • Xml.Relaxng.
    • Novell.Directory.Ldap
    • C5 - Generics Library.
    Linux Specific: Other Ecosystem Libraries:
    • Bit# - Bittorrent client/server library.
    • Mono.Fuse - User-space file systems.
    • Mono.ZeroConf - Bonjour stack.
    • Mono.Nat - Network Address Translation.
    • Mono.Upnp - Universal Plug and Play.
    • Tao Framework - OpenGL, OpenAL, SDL and Cg bindings.

     

    Was man dabei erkennen kann ist auf jeden Fall, dass Mono längst aus den Kinderschuhen ist, und als ernstzunehmendes Produkt angesehen werden kann.

    Heute findet Mono Anwendung in portablen MP3 Playern, wirkt hinter der  Unity3D Engine auf dem Apple iPhone, der Nintendo Wii, MacOS X und Windows. Mal ganz davon abgesehen, dass es auf großen Serverclustern von SecondLife ebenfalls verwendet wird.

     

    Ich bin gespannt was die Zukunft bringt.


     
    Categories: .NET | C#

    Da sitzt man grade und entwickelt an der Next-Gen Game-Engine, bastelt sich ein Tool zur automatische Verwaltung und Code-Generierung von Netzwerkpaketen, und wird dann wieder von so Kleinigkeiten ausgebremst, ala ListBox. ...

    Man stelle sich vor, man hat ein eigene Klasse mit überschriebener ToString()-Methode, die man als Items zu einer ListBox hinzufügen möchte. - Die ToString()-Methode ist also überschrieben um den Namen, der später in der ListBox für das jeweilige Item auftaucht, zu ändern.

    So in etwa wie die Klasse TestObjekt:

       1: public class TestObjekt
       2: {
       3:     public string Name;
       4:     public string Vorname;
       5:  
       6:     public override string ToString()
       7:     {
       8:         return Vorname + " " + Nachname;
       9:     }
      10: }

    Sollte man später jetzt aber ein Item der Liste ändern wollen, wie z.B. den Vornamen, dann wird der Text des Items in der Listbox nicht aktualisiert.

    Refresh() hilft leider (zum Glück) nicht.

    Zeit mal etwas aus der neuen C# 3.0 Trick-Kiste auszuprobieren:

    C#3.0 Extension Methods

    Man erstellt sich einfach eine statische, nicht generische Klasse, und baut eine Extension Method, die das gewünschte leistet:

       1: public static class ListBoxExtension
       2: {
       3:     public static void RefreshItem(this ListBox listbox, int index)
       4:     {
       5:         if (listbox.Items.Count <= index) return;
       6:         if (listbox.Items[index] == null) return;
       7:  
       8:         // Selektion der Listbox merken:
       9:         int selection = listbox.SelectedIndex;
      10:  
      11:         // Item einfach erneut einfügen und danach das alte löschen.
      12:         // Beim Einfügen ruft die ListBox nämlich ToString() auf.
      13:         listbox.Items.Insert(index, listbox.Items[index]);
      14:         listbox.Items.RemoveAt(index + 1);
      15:  
      16:         // Verlorengegangene Selektion wiederherstellen:
      17:         listbox.SelectedIndex = selection;
      18:     }
      19: }

    Danach kann man die neue Methode in jeder ListBox wie folgt nutzen:

       1: // Selektiertes Item aktualisieren:
       2: myList.RefreshItem(myList.SelectedIndex);

    Falls Probleme auftreten, oder jemand eine bessere Lösung hat lasst es mich wissen! ;)

    Btw: Extension Methods haben den Vorteil, wenn man mal einen Fehler in der Programmierung gemacht hat, kann man diesen später an einer zentralen Stelle ganz leicht ausbügeln. Ging mir hierbei jedenfalls so ;)

     

    Grüße,

    Euer Resharper Padawan


     
    Categories: .NET | C#

    Wie Scott Guthrie auf seinem Blog berichtet, steht nun endlich der source code des .NET Frameworks zur Verfügung.

    Bisher beinhaltet er folgende Teile des .NET Frameworks:

    • .NET Base Class Libraries (including System, System.CodeDom, System.Collections, System.ComponentModel, System.Diagnostics, System.Drawing, System.Globalization, System.IO, System.Net, System.Reflection, System.Runtime, System.Security, System.Text, System.Threading, etc).
    • ASP.NET (System.Web, System.Web.Extensions)
    • Windows Forms (System.Windows.Forms)
    • Windows Presentation Foundation (System.Windows)
    • ADO.NET and XML (System.Data and System.Xml)

     

    Es wird außerdem bereits an der Veröffentlichung weiterer Teile, wie zum Beispiel WCF, WF oder LINQ gearbeitet.

    Wie man den source code zum Debuggen in Visual Studio 2008 einbindet findet man ebenfalls auf Guthrie's Blog.

    Der source code unterliegt dabei folgender Lizenz:

    Reference License

    "The .NET Framework source is being released under a read-only reference license. When we announced that we were releasing the source back in October, some people had concerns about the potential impact of their viewing the source. To help clarify and address these concerns, we made a small change to the license to specifically call out that the license does not apply to users developing software for a non-Windows platform that has “the same or substantially the same features or functionality” as the .NET Framework. If the software you are developing is for Windows platforms, you can look at the code, even if that software has "the same or substantially the same features or functionality" as the .NET Framework."


     
    Categories: .NET | C#

    December 17, 2007
    @ 04:08 PM

    Ja wir alle kennen es noch aus der Schule oder aus der Kindheit. Das beliebte Weihnachtsspiel: Das Wichteln.

    Wer schon immer mal wissen wollte, wie viele verschiedene Möglichkeiten es gibt sich untereinander zu beschenken, sollte sich mal folgenden Code-Snippet anschauen:

    Wichteln mit .NET
    public static int Wichteln(int anzahlTeilnehmer) { if(anzahlTeilnehmer >=2) return Convert.ToInt32(anzahlTeilnehmer * Wichteln(anzahlTeilnehmer - 1) + Math.Pow(-1,Convert.ToDouble(anzahlTeilnehmer))); return 0; }

    Das Code-Snippet basiert auf der rekursiven Formel für die Rencontre-Zahlen.

    Viel Spaß damit!


     
    Categories: .NET | C#

    Seit heute Morgen, dem 19.11.2007, steht Visual Studio 2008 als finale Version bei Microsoft MSDN als Download zur Verfügung. Das lange Warten hat endlich ein Ende.
    Das erstaunliche bei diesem Visual Studio Release war jedoch, dass es keinen RC0 für die Öffentlichkeit gegeben hat, sondern nur eine Beta (Beta2). Dafür kommt man nun relativ früh in den Genuss der Final-Version.

    Visual Studio 2008 beinhaltet viele neue Features, die das Entwickeln wiedermal sehr vereinfachen werden. Mit dem .NET Framework 3.5 gibt es neue Sprachfeatures für C# und VB.NET. Features wie LINQ und integrierte Office VSTO-Entwicklung gehören zu Visual Studio 2008 ebenso dazu wie der für Webentwickler integrierte JavaScript-Debugger. Dieser sollte für Webentwickler mit am interessantesten sein.
     
    Categories: .NET | C#

    Über das Blog von Scott Guthrie wurde es angekündigt, große Teile des Quellcodes der .NET Klassenbibliotheken zu veröffentlichen:

    "One of the things my team has been working to enable has been the ability for .NET developers to download and browse the source code of the .NET Framework libraries, and to easily enable debugging support in them."

    Dazu zählt der Quellcode der Base Class Library (System Namespace, IO, Text, Collections, CodeDom, Regular Expressions, usw.), ASP.NET, Windows Forms und WPF. Zusätzlich sollen später weitere Teile veröffentlicht werden (z.B. WCF, WF und LINQ).

    Der Quellcode wird über 2 Wege verfügbar sein:

    1. Als Downloadpaket mit dem gesamten Quellcode
    2. Über eine Integration in Visual Studio 2008

    Microsoft verwendet für die Veröffentlichung dazu die Microsoft Reference License, welche nur das Betrachten, nicht jedoch aber das Verarbeiten, Verändern und Weitergeben erlaubt.

     

    Daraus profitiert man also in erster Linie beim Debuggen und kann auch direkt in die .NET Libs mit hineinschauen.

    Was diese Veröffentlichung für das Quelloffene portable Mono-Projekt zur Folge hat, bleibt abzuwarten. Ich könnte mir vorstellen, dass Microsoft damit die Arbeit zu einem erleichtert, aber zum anderen auch erschweren könnte.

    Danke an Mathias Raacke für die Info!


     
    Categories: .NET | C#

    September 10, 2007
    @ 08:47 PM

    Es ist soweit. Ich setze meinen Plan in die Tat um, und werde mein Enzo Projekt verwirklichen. Worum geht es dabei?

     

    EnzoFerrariEs handelt sich um ein Modell Auto, genauer um einen Lego Enzo Ferrari (ca 23cm x 45cm groß, rechts auf dem Bild), der mit einem Elektromotor, Akku, PC, Webcam und WLAN ausgestattet werden soll. Das beigestellte Teelicht auf dem Foto soll dabei nur eine Größenordnung vermitteln.

    Der Clou an der Sache ist, dass es ein Client/Server-System werden soll. D.h. die eigentliche KI kann auch auf einem anderen PC laufen, z.B. auf einem Laptop z.B. in .NET ( Juhuu! :) ), oder über das Internet auf einem noch weiter entfernten Rechner, z.B. in einem Rechenzentrum. (Was die Latenz angeht, bleibt da jedoch noch fraglich. - Probieren geht über studieren.)

    Die Software dabei wird einmal unter Windows und unter Linux, sowie auf dem ATMEL Chip laufen. Ein wichtiger Punkt ist dabei die reibungslose Funktionalität der einzelnen Komponenten untereinander. Ich habe mich daher schon im Vorfeld informiert, welche Hardware, mit was zusammenspielt. Und die [EmbeddedPC mit Linux/Webcam/WLAN]-Kombi eigenet sich nahezu hervorragend, da alles Quelloffen ist, bereits funktioniert, und ein Viewer des Live-Streams der Webcam in Linux als auch in Windows mit Source-Code verfügbar ist.

     

    Folgende Hardware soll für das Projekt verwendet werden:

    • Lego Enzo Ferrari:

      LEGO 8653 RACERS Enzo Ferrari 1:10

      PICT0198

     

    • Antriebsmotor, Servos, und weitere Elektronik:
    • Microcontroller ATMEL Evaluation Board:

      MicrocontrollerEvaluationBoard   Antriebsmotor   Servo

     

    • Embedded-PC: FOX Board LX 8+32:


    • Software Features

      Kernel
      Full Linux ver 2.4.31 (default) or 2.6.15

      Server
      HTTP (WEB), FTP, SSH, TELNET

      Driver
      USB Pen driver, FTDI and PROLIFIC USB to Serial Converter

      SDK
      Open source SDK for Linux Systems
      (Read more...)

      Language
      C, C++, PHP, PYTHON, etc

      Tools
      Easy to use GNU C compiler service available on ACME web
      (Read more...)

      Hardware Features

      Size
      66 x 72 mm (2.6 x 2.8 inches)

      Cpu
      Axis ETRAX 100LX
      32 bit, RISC, 100MHz (100MIPS)

      Memory
      FOXLX816: 8MB FLASH 16MB RAM
      FOXLX832: 8MB FLASH 32MB RAM

      Power
      Single power supply
      5 Volt 280mA (1 watt)

      Ports
      1 Ethernet (10/100 Mb/s)
      2 USB 1.1
      1 serial console port

      Extension
      2 extension sockets with IDE, SCSI, serial lines, parallel ports, I/O lines, I2C bus interface

      Weight
      37 gr

      Temperature range
      0-70 °C

     

    • Kompatible Webcam (wird zerlegt):

      USB camera with built-in microphone,
      640x480, Frame rate up to 30fps,
      fully compatible with FOX Board.


     

    • USB-Wlan Adapter:
    • DWLG122
      Wireless USB Adapter (802.11g)

       

    • Akku? (Noch nicht entschieden)
    • Alles andere was ich noch vergessen habe.

     

    Das Projekt soll in mehrere Phasen aufgeteil werden

    1. Microcontroller-Ansteuerung (ATMEL) für die Servos (Lenkung) und den Antriebsmotor funktionsfähig
    2. Microcontroller, Antriebsmotor, Servos, Embedded-PC, Webcam und Akku eingebaut.
    3. Steuerung des Autos über Laptop möglich, Bild der Webcam auf dem Bildschirm.
    4. Beginn der KI-Programmierung in .NET!
    5. Teilnahme am Wettbewerb der TU-Braunschweig

     

    Sponsoring

    Wie ihr leider sehen könnt, fehlen mir noch ein paar Bauteile:

    • Fox-Board (ca. 120€)
    • USB-Webcam ( ca. 30€)
    • USB-Stick (ca. 30€)

    Für Sponsoring oder Spenden jeder Form würde ich mich freuen. Wenn z.B. jemand diese Webcam hat und eh nicht mehr benutzt, dann her damit! :)

    Für alle Sponsoren würde ich Werbe-Aufkleber am Auto selbst Befestigen. Der Werbe-Effekt auf diesem Auto auf einer Veranstaltung, wo nur Technik-Begeisterte Roboter/Modellbauer anwesend sind, ist sicherlich großartig.

     

    Hilfe und Support ?

    Na, habe ich da ein Bastler-Herz zum Leben erweckt oder aus dem Exil befreit? - Nein im Ernst, wenn ihr Lust habt mitzubauen, dann meldet euch bei mir, Florian Mätschke.

    Es wäre z.B. auch denkbar dieses Auto innerhalb der DotNET-Braunschweig User Group zu realisieren.

     

    Weitere News zum Projekt folgen, versprochen! ;)


     
    Categories: .NET | C# | Enzo Ferrari