Tagarchiv: Mono

Der Blog ist umgezogen! Der Artikel ist nun HIER zu finden.

Vor kurzem ist Gendarme 0.2 fertig geworden! Es gibt nun inzwischen auch einen Windows-Installer „gendarme-0.2.0.0-win32-setup.zip“ in der Google-Gruppe zum Projekt. Nach der Installation kann man direkt loslegen … Assemblies auswählen, analysieren und den resultierenden Report betrachten.

Inzwischen gibt es eine wirklich große Anzahl an Code-Regeln. Nicht alles ist unbedingt immer für jeden sinnvoll, aber mit diesem Klasse-Tool findet man sicher immer noch einige unerwartete Probleme … und nicht zuletzt erhält man natürlich auch wunderschönen Code, wenn man alle Regeln einhält :-)

Viele kennen sicherlich die Codeanalyse von Microsoft, die auch in einige Editionen der Visual Studio Produkte integriert ist … nun gibt es eine Open Source Alternative namens Gendarme, die innerhalb des Mono Projekts entwickelt wird.

Mit Gendarme kann man Probleme in seinem .NET-Code finden und leicht beheben. Neben echten Problemem werden von dem Analyse-Tool aber auch sehr viele Vorschläge und harmlose Warnungen angezeigt, die für ein besseres OOP-Design sorgen sollen. So meckert Gendarme z.B. bei sehr langen Methoden, deckt mögliche Threading-Probleme auf und sorgt allgemein für besseren und stabileren Code.

Aktuell gibt es einen Assistenten, der nach dem Auswählen von .NET-Assemblies einen Report ausgibt. In Zukunft wird es sicherlich auch eine Integration in ausgewählte IDE’s geben, ein Addin für MonoDevelop ist bereits in Arbeit.

Vor einiger Zeit bin ich auf das Open Toolkit gestoßen, einen sehr coolen OpenGL/OpenAL .NET-Wrapper. Anders als z.B. Tao funktioniert das Toolkit bei mir auch problemlos unter Linux/Ubuntu. Außerdem bietet OpenTK zusätzlich zur normalen C-API von OpenGL/OpenAL viele High-Level-Klassen. Besonders interessant ist für mich das einfache Zeichnen von Text, der dann auch noch gut aussieht.

Ein weiterer Pluspunkt: Es gibt ein Winforms-Control, was mit Mono und .NET gleichermaßen funktioniert und so erstmals die Entwicklung von CrossPlattform-OpenGL-Programmen mit .NET möglich macht.

Da es bisher kein Stable-Release gibt, sind jedoch Veränderungen der Schnittstelle an der Tagesordnung. Dafür kann man aber auch noch selber Patches einsenden, um diese zu verändern. So habe ich nun beispielsweise Unterstützung für Bezier-Kurven nachgereicht, sowie die Anbindung von Mathe-Klassen an die OpenGL-API ermöglicht.

Bekanntermaßen muss man bei vielen Matrix-Funktionen in OpenGL einen Zeiger übergeben, der auf das float[]-Array zeigt. OpenTK bringt eine Reihe von nützlichen Strukturen wie Vector3 oder Matrix4 mit, mit denen der sichere Umgang mit OpenGL problemlos möglich ist. Auch in Sprachen, die ohne Zeiger auskommen müssen – wie Visual Basic. Beispiel:

Vector3 start = new Vector3(1.0f, 0.0f, 5.0f);
Vector3 end = new Vector3(5.0f, 3.0f, -6.0f);
Matrix4 projection = Matrix4.LookAt( .);

GL.LoadMatrix(ref projection);
GL.Color4(Color.Green);

GL.Begin(BeginMode.Lines);
GL.Vertex3(start);
GL.Vertex3(end);
GL.End();

So einfach war OpenGL-Programmierung noch nie :-)

Heute habe ich mir mal einen Webcast zum Thema „Wie erzeuge ich selber Symbol- und Projektvorlagen“ angeschaut. Erstaunlich einfach! Ich habe gleich mal ein Item Template gebaut, mit dem man XML-Dateien für Mono.Addins erzeugen kann.

addintemplate.png

Diese Eintrag erscheint nun wenn man auf ein Projekt rechtsklickt und dann „Hinzufügen | Neues Element“ anwählt. So kann man sich das lästige Eintippen des Grundgerüsts nun sparen.

Installation der Vorlage

1. Zip-Datei hier runterladen

2. Datei verschieben nach „Eigene Dateien/Visual Studio 2005/Templates/ItemTemplates

3. Fertig!

So und jetzt wollen wir natürlich noch sehen, was die Vorlage überhaupt erzeugt (der Name der Datei wurde im Dialog auf „My Addin“ festgelegt):

addinxml.png

Vor ein paar Tagen habe ich die Bibliothek Mono.Addins gefunden, mit der man erweiterbare Anwendung schreiben kann. Das Konzept dahinter ist stark dem Kern von SharpDevelop angelehnt.
Man hat ebenfalls einen Addin-Tree, der alle sogeannten Extension Points enthält. Dies sind die Punkte im Baum, an denen man sich als Addin einklicken kann. Beispielsweise könnte dies der Baumpfad „\Menu\File\“ sein. Ein Addin würde nun innerhalb einer XML-Manifest-Datei eigene Knoten (Extension Nodes) zu diesem Pfad hinzufügen und sich somit bei der Anwendung registrieren. Beim Start der Anwendung werden alle Manifest-Dateien aller Addins eingelesen und zu einem gemeinsamen Baum zusammengefasst. Bei diesem Beispiel würden nun alle Einträge aus dem Pfad „\Menu\File“ ausgelesen werden und auf Basis dieser Daten würde das Menü erzeugt werden.

Insgesamt ist Mono.Addins etwas „sauberer“ programmiert als der Kern von #Develop. Es gibt keine festen Verweise zu log4net oder z.B. zu WindowsForms. Möchte man Features wie das Logging eingebaut haben, kann man diese später noch mit Hilfe von Interfaces innerhalb von Mono.Addins integrieren. Die Bibliothek ist außerdem auch portabel und daher genauso gut für Linux wie für Windows geeignet.

Eine exzellente Referenz befindet sich auf der Mono-Seite hier. Übrigens kann man in Mono.Addins auch fast alles, was man über XML-Dateien beschreibt, auch über Attribute im Code regeln. Eine weitere interessante Option (und auch meine bevorzugte) ist das Integrieren der XML-Beschreibung in die Assembly als eingebettete Ressource.