Clone Detective für Visual Studio

Heute bin ich auf ein cooles Add-On für Visual Studio aufmerksam geworden: Der Clone Detective für Visual Studio.

image 

Als Engine hinter Clone Detective kommt ConQAT von der TU München zum Einsatz: http://conqat.cs.tum.edu/index.php/Download

Nach der Installation gibt es in der “Ansicht” –> “Weitere Fenster” neue Einträge:

  • Clone Explorer
  • Clone Intersections
  • Clone Results

image

Zur Demonstration der einzelnen Fenster habe ich mir mal die Freiheit genommen, den Quellcode von iTextSharp auf Code-Duplikate zu untersuchen.

Clone Explorer

Die Clone Explorer startet die Analyse des Quellcodes und zeigt in einer Übersicht das Resultat:

image

Die Resultate lassen sich nun noch speziell gruppieren (hier: nach duplizierten Codezeilen):

image

Ebenfalls unterstützt wird das Importieren und Exportieren des Clone-Berichts. Selbstverständlich lassen sich die Such-Optionen noch konfigurieren:

image

Für meinen Geschmack war das allerdings schon gut genug 🙂

Code Intersections

Code Intersections stellen – wie der Name schon sagt- Überschneidungen im Code dar. Im folgenden Beispiel enthält die Datei BarcodeInter25.cs 15 Codeüberschneidungen mit der Dtei BarcodePostnet.cs:

image

Das Diagramm zeigt das Vorkommen der Überschneidung in der Datei. Mit der rechten Maustaste kann nun noch in den Ergebnissen gesucht werden und die betreffende Stelle über einen Doppelklick im Editor geöffnet werden.

Im Editor wird an der linken Seite eine lila Markierung dargestellt:

image

Diese zeigt die Stelle der Codeduplikate im Code an.

Clone Result

Das Fenster Clone Result zeigt das Code-Duplikat aus dem Editor nochmal an:

image

Fazit

Nicht jedes Duplikat ist auch wirklich ein Duplikat. Viele Fundstellen hingegen haben mir persönlich weitergeholfen, Redundanzen zu verringern und nochmals kritisch über meinen Code zu sehen.

Download

Das Programm kann auf CodePlex kostenlos (inkl. Source Code) heruntergeladen werden:

http://clonedetectivevs.codeplex.com/

Das Installer-Paket ist ca. 14MB groß.

Also Systemvoraussetzungen werden folgende genannt:

  • Visual Studio 2008 Standard oder besser
    (sorry, Visual Studio 2008 Express Editions unterstützen keine AddIns)
  • Java 1.5.0_01 oder neuer
    (ConQAT läuft unter Java)

Top 3 Entwickler-Tools

MSDN Deutschland veranstaltet eine Blog-Parade. Da will ich natürlich auch mitmachen. Allerdings habe auch ich mehr als 3 Lieblingstools zum Programmieren. Hier kommt nun die Top 3 meiner Entwickler-Tools:

Platz 1: Microsoft Visual Studio 2008
Visual Studio ist mein Top-Tool, weil ich mir ohne gar nicht vorstellen könnte, Software zu entwickeln 🙂
Viele Tipps&Tricks findet man im Blog von Sara Ford: http://blogs.msdn.com/saraford/ Diese Tipps hat sie auch als Buch veröffentlicht (“251 Ways to Improve Your Productivity”).

Platz 2: JetBrains ReSharper
Früher, als ich noch mit Java entwickelte, war ich fasziniert von der Eclipse IDE. Tolle Refactoring-Funktionen, Quick-Fixes & Co. Der ReSharper bringt die lange vermissten Eclipse-Funktionen in Visual Studio. Muss man einfach haben!

Platz 3: JetBrains dotTrace
Unverzichtbares Tool (Profiler) zum Aufspüren von Performance-Engpässen. Klasse!

Da ich mit weitaus mehr Tools arbeite, möchte ich diese Liste nicht vorenthalten:

Platz 4: NUnit Framework
Framework zum Testen von .NET Anwendungen.

Platz 5: Ranorex
Ranorex ist ein Toolset zum automatisierten Testen von GUI-Applikationen. Es ist ein echt gelungenes Capture-And-Replay Tool.

Platz 6: vmware WorkStation
Zum Testen (und Debuggen!) des Projekts / der Anwendung auf unterschiedlichen Betriebssystemen. Echt Klasse!

Platz 7: JetBrains TeamCity
Sehr gelungener Build-Server für Continous Integration. Macht echt Spaß, damit zu arbeiten. Früher habe ich mit CruiseControl.NET gearbeitet. Die Konfiguration ist jedoch bei TeamCity viel schöner und einfacher.

Platz 8: Reflector
Muss man glaub ich nicht mehr erklären: Toller Disassembler und Assembly-Inspector mit zahlreichen Plugins.

Platz 9: Sparx Enterprise Architect
Design-Tool für UML-Diagramme & Co.

Platz 10: Notepad++
Schneller, komfortabler Editor. Sollte eigentlich jeder installiert haben 🙂

Platz 11: WiX-Toolkit (Windows Installer XML)
Das erste OpenSource-Tool von Microsoft. Mittels XML-Definition werden MSI-Pakete inkl. Bootstrapper erzeugt. Hier gibt es ein sehr gutes Tutorial für den ersten Einstieg. Tipp: SharpDevelop bietet einen brauchbaren Editor für die UI.

Platz 12: SandCastle & SandCastle Help File Builder
Tool von Microsoft (Open Source) zum Generieren der Code-Dokumentation (beispielsweise im MSDN-Style).

Platz 13: NCover
Code-Coverage Tool. Sehr praktisches Tool zum Prüfen, ob die erstellten Tests den Code abdecken. Optional kann man auch auf PartCover (Open Source) setzen; allerdings ist es etwas unkomfortabler.

Platz 14: StyleCop & FxCop
Diese Tools analysieren den Code auf Best Practices, potentielle Sicherheitsprobleme usw. Die Regeln können auch selbst erweitert werden. Super Sache!

Platz 15: VisualSVN
Integration von Subversion in Visual Studio. Zeigt, welche Dateien sich geändert haben, Diff-Funktionalität direkt aus Visual Studio heraus, …
Sehr empfehlenswert!
BTW: Die Entwickler stellen kostenlos einen einfach zu konfigurierenden SVN-Server zur Verfügung (Visual SVN Server)

Tutorial iTextSharp: Erstellen von PDF-Objekten

Texte

In iTextSharp werden Texte mithilfe von drei Klassen zusammengesetzt: Chunk, Phrase und Paragraph. Diese sollen in den nächsten Zeilen etwas näher beschrieben werden.

Chunk

Die Klasse Chunk befindet sich im Namespace iTextSharp.text. Chunk stellt die „kleinste“ Einheit in iTextSharp dar. Es besteht aus einem String, bei dem alle Zeichen die gleiche Formatierung (also Schriftart, -größe, -stil und -farbe) besitzen.

Chunk-Objekte besitzen keinerlei Informationen über Zeilenabstände. Das heißt, dass wenn der enthaltene String zu lang ist, wird ein Wagenrücklauf (Carriage return) ohne Zeilenvorschub ausgelöst. Das Resultat ist das, dass die gerade geschriebene Zeile überschrieben wird (ohne gelöscht zu werden). Deshalb sollten Chunk-Objekte in der Regel nicht dazu verwendet werden, direkt einem Dokument hinzugefügt zu werden. Stattdessen sollten sie in Kombination mit anderen Objekten verwendet werden.

Code-Beispiel

Document doc = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(doc, File.Create(„Zitate.pdf“));
doc.Open();
Chunk zitatEinstein = new Chunk(„Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.“);
Chunk zitatTwain = new Chunk(„Gib jedem Tag die Chance, der schönste deines Lebens zu werden.“);
doc.Add(zitatEinstein);
doc.Add(zitatTwain);
doc.Close();

Ausgabe im Adobe Reader

image

Phrase

Ein Phrase-Objekt (engl. Satz) besteht aus einer Aneinanderreihung von Chunk-Objekten mit einem wichtigen Extra: Wenn ein Zeilenende erkannt wird, dann wird neben den Wagenrücklauf (Carriage Return) auch ein Zeilenvorschub (New Line / Line Feed) ausgelöst, sodass sich die Chunks nicht mehr überschreiben. Der Zeilenabstand wird auch als Leading bezeichnet und kann im Konstruktor als auch in der Leading-Eigenschaft der Phrase-Klasse als float-Wert angegeben werden.

Zusätzlich ist es möglich, eine Hauptschriftart anzugeben, mit der das Phrase-Objekt formatiert wird. Somit erhalten alle enthaltenen Chunk-Objekte die gleiche Formatierung und ein einheitliches Aussehen. Aber ebenso kann man auch jedes Chunk-Objekt einzeln formatieren.

Code-Beispiel

Document doc = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(doc, File.Create(„Zitate.pdf“));
doc.Open();
Chunk zitatEinstein = new Chunk(„Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.“);
Chunk zitatTwain = new Chunk(„Gib jedem Tag die Chance, der schönste deines Lebens zu werden.“);
Phrase zitate = new Phrase(25);
zitate.Add(zitatEinstein);
zitate.Add(zitatTwain);
doc.Add(zitate);
doc.Close();

Ausgabe im Adobe Reader

image

Paragraph

Das Paragraph-Objekt verbindet mehrere Chunk- und Phrase-Objekte zu einem Absatz (Paragraph, engl. Absatz). Nach jedem Absatz wird automatisch ein Zeilenumbruch erstellt. Das entspricht etwa dem, dass man einem Phrase-Objekt ein Chunk.NEWLINE oder new Chunk(„n“) anhängt.

Die Paragraph-Klasse leitet von der Phrase-Klasse ab und ergänzt diese um einige Funktionen:

image

Abbildung 3: Klassenhierarchie bei Phrase und Paragraph

Der Zusammenhang zwischen Chunk, Phrase und Paragraph soll in folgender Abbildung verdeutlicht werden:

Bild1

Abbildung 4: Zusammenhang zwischen Paragraph, Phrase und Chunk

Initialisierung

Die Paragraph-Klasse besitzt mehrere Konstruktoren:

public Paragraph()
public Paragraph(float leading)
public Paragraph(Chunk chunk)
public Paragraph(float leading, Chunk chunk)
public Paragraph(string str)
public Paragraph(string str, Font font)
public Paragraph(float leading, string str)
public Paragraph(float leading, string str, Font font)
public Paragraph(Phrase phrase)

Ein Absatz kann also aus Chunks, Phrases oder String-Objekten erstellt werden. Über das Font-Objekt kann eine beliebige Schriftart für den Absatz festgelegt werden.

Abstand zwischen den Zeilen festlegen

Zusätzlich unterstützen einige Konstruktoren die Definition von Zeilenabständen (hier leading genannt). Alternativ kann über die Leading-Eigenschaft der Zeilenabstand festgelegt werden.

Abstand zwischen Absätzen festlegen

Den Abstand zwischen einzelnen Absätzen kann über die Eigenschaften SpacingBefore und SpacingAfter gesteuert werden. Dabei wird der angegebene Wert zu dem Wert addiert, der als leading definiert wurde.

Ausrichtung

Als „Besonderheit“ beim Paragraph-Objekt ist die Möglichkeit, Textausrichtungen vorzunehmen. Dazu wird die Methode SetAlignment verwendet. Als Parameter wird ein String erwartet, der als Konstante in ElementTag-Klasse festgelegt ist. Mögliche Werte sind: ALIGN_LEFT, ALIGN_CENTER, ALIGN_RIGHT, ALIGN_JUSTIFIED, ALIGN_JUSTIFIED_ALL, ALIGN_TOP, ALIGN_MIDDLE, ALIGN_BOTTOM und ALIGN_BASELINE.

Ebenso wäre es möglich, anstatt die SetAlignment-Methode zu verwenden, der Alignment-Eigenschaft einen Wert zuzuweisen. Dieser Wert muss dabei vom Typ integer sein. Auch hier gibt es wieder Konstanten, die zum Setzen der richtigen Ausrichtung verwendet werden – allerdings sind sie in der Element-Klasse definiert: ALIGN_LEFT, ALIGN_CENTER, ALIGN_RIGHT, ALIGN_JUSTIFIED, ALIGN_JUSTIFIED_ALL, ALIGN_TOP, ALIGN_MIDDLE, ALIGN_BOTTOM und ALIGN_BASELINE.

Wann man welche Methode verwendet, ist reine Geschmackssache. Intern wird SetAlignment auf Alignment gemappt.

Nachfolgend ein paar Code-Beispiele für die Textausrichtung im Absatz:

Document doc = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(doc, File.Create(„Zitate.pdf“));
doc.Open();
Chunk zitatTwain = new Chunk(„Gib jedem Tag die Chance, der schönste deines Lebens zu werden.“);
zitatTwain.Font = FontFactory.GetFont(„Tahoma“, 24);
Paragraph paragraphTwain = new Paragraph(zitatTwain);

Setzen der Ausrichtung über SetAlignment-Methode

paragraphTwain.SetAlignment(ElementTags.ALIGN_CENTER);
doc.Add(paragraphTwain);
paragraphTwain.SetAlignment(ElementTags.ALIGN_LEFT);

Setzen der Ausrichtung über Alignment-Eigenschaft

doc.Add(paragraphTwain);
paragraphTwain.Alignment = Element.ALIGN_RIGHT;
doc.Add(paragraphTwain);
doc.Close();

Ausgabe im PDF

image

Einrückungen am Absatzanfang

Weiterhin besitzt das Paragraph-Objekt noch die Möglichkeit, Einrückungen am Anfang eines Absatzes einzufügen. Die wird mithilfe der IdentationLeft- und IdentationRight-Eigenschaft.

Tutorial iTextSharp: Writer & Meta-Daten

Das Writer-Objekt

Nachdem nun das Document-Objekt definiert wurde, wird zum Schreiben ein Writer-Objekt benötigt. Dieses entscheidet, wie das Dokument später geschrieben wird. Für jeden „Dokumenttyp“ gibt es ein Writer-Objekt: Beispielsweise wird für PDF-Dokumente ein PdfWriter benötigt, während für TeX-Dokumente ein TeXWriter instanziiert werden muss usw. Das Konzept von iTextSharp ermöglicht auch eine Dokumenttypen und –writer zu erstellen. Diese müssen nur von der abstrakten Klasse DocWriter aus dem iTextSharp.text-Namespace abgeleitet sein.

image

Abbildung 1: Klassenhierarchie DocWriter

Der Konstruktor der Writer-Klassen ist nicht öffentlich (private), sodass mittels GetInstance-Methode ein neues Objekt erzeugt werden muss. GetInstance erwartet zwei Parameter: das Document-Objekt (Das Document-Objekt) und einen Stream, in den die Ausgabe geschrieben wird.

Beispiel für das Erstellen eines neuen PDF-Writers:

Document doc = new Document(PageSize.A4.Rotate());

PdfWriter writer = PdfWriter.GetInstance(doc, File.Create(„test.pdf“));

Zum Schreiben einer PDF-Datei wird das writer-Objekt nicht mehr direkt verwendet (natürlich hält jedes Writer-Objekt einen IDocListener auf das Document-Objekt und wird somit über Änderungen im Document informiert). Stattdessen ermöglicht es weitere Features, auf die in den entsprechenden Kapiteln eingegangen wird:

  • Bearbeiten vorhandener PDF-Dokumente
  • Direktes Zeichnen von Grafiken
  • Verschlüsseln von PDF-Dokumenten
  • Viewer-Einstellungen vornehmen (Anzeige mit/ohne Menüleiste, Vollbild-Modus, Vorschaubilder anzeigen, Seiten-Skalierung etc.)
  • Dateien anhängen

PDF Meta-Daten bearbeiten

Die Meta-Daten im PDF-Dokument beinhalten allgemeine Informationen über das Dokument. Im Adobe Acrobat Reader können die Meta-Daten in den Dokumenteigenschaften (Datei à Dokumenteigenschaften / Strg + D) angesehen werden:

image

Abbildung 2: PDF-Metadaten

Rot hervorgehoben sind die jeweiligen Metadaten, die programmatisch auf dem Document-Objekt gesetzt werden können:

Eigenschaft in den Metadaten

image

Beispiel für das Setzen der Meta-Daten:

doc.AddAuthor(„Ralf Abramowitsch“);
doc.AddCreationDate();
doc.AddCreator(„Mein Tool“);
doc.AddKeywords(„iTextSharp“);
doc.AddKeywords(„Tutorial“);
doc.AddKeywords(„.NET“);
doc.AddSubject(„Thema“);
doc.AddTitle(„Titel“);
doc.AddProducer();

Tutorial iTextSharp: Einführung

iTextSharp ist eine Open Source Bibliothek zum Erstellen und Bearbeiten von PDF-Dateien. Die Java-Bibliothek iText wurde auf .NET (C#) portiert und wird synchron mit dem .NET-Pendant weiterentwickelt.

Ziel der Entwicklung war Entwicklern eine Bibliothek in die Hand zu geben, mit der sie ihre eigenen Anwendungen um PDF-Funktionalitäten erweitern konnten. In diesem Tutorial soll darum gehen, einzelne Funktionalitäten von iTextSharp anhand von Beispielen vorzustellen.

Bezugsmöglichkeiten

iText: http://www.lowagie.com/iText

iTextSharp: http://sourceforge.net/projects/itextsharp/

Tipp: Code-Dokumentation mit Doxygen erzeugen

Ich habe mich immer gefragt, warum ich denn bei IntelliSense keine Hilfe zu sehen bekomme. Ist der Code schlecht oder gar nicht dokumentiert? Nein! Der Autor hat darauf verzichtet, Kommentare im .NET-Format zu verfassen, stattdessen hat er auf das Doxygen-Format zurückgegriffen.

Somit werden keine Kommentare in die Metadaten exportiert und IntelliSense kann diese nicht auslesen. Daher ist jeder gut beraten, sich die Dokumentation kurz selbst zu erzeugen. Dazu lädt man einfach das letzte Doxygen Release von http://www.stack.nl/~dimitri/doxygen/ herunter.

Erstellen von PDF-Dokumenten

Das Document-Objekt

Das Document-Objekt stellt die Basis aller Dokument-Typen der iTextSharp-Bibliothek dar. Das Document-Objekt besitzt drei öffentliche Konstruktoren:

public Document()

public Document(Rectangle pageSize)

public Document(Rectangle pageSize, int marginLeft,int marginRight,

int marginTop, int marginBottom)

Definition der Seitengröße

Der parameterlose Konstruktor von Document verwendet als Default-Einstellung die Seitengröße A4, während die anderen beiden Konstruktoren eine Angabe der Seitengröße erwarten. Bei deren Definition kann auf die Klasse PageSize zurückgegriffen werden. PageSize besitzt öffentliche Felder, die die Auswahl von Seitengrößen vereinfacht. Mögliche Werte sind: A0 … A10, B0 … B10, HALFLETTER, LETTER, EXECUTIVE, LEGAL, NOTE, POSTCARD und einige mehr.

Definition des Seitenformats

Neben der eigentlichen Größe des PDF-Dokuments kann man auch dessen Ausrichtung, also Hochformat oder Querformat festlegen. Die Standard-Einstellung ist dabei Hochformat. Um eine Seite im Querformat anzulegen, ruft man einfach die Methode „rotate()“ auf dem von PageSize zurückgegebenen Wert auf. Ein PDF-Dokument im Querformat der Größe A4 würde wie folgt definiert werden:

Document doc = new Document(PageSize.A4.Rotate());

Definition der Seitenränder

Der dritte Konstruktor von Document bietet zudem noch die Möglichkeit, die Größe von Seitenrändern zu definieren. Die Angabe der Größe erfolgt in der Einheit „Point“ (Punkte). Die Umrechnung von „Point“ in „Zentimeter“ ist etwas umständlich, da die 72 Points genau ein Zoll darstellt. Ein Zoll wiederum besteht aus 2,54cm. Seitenränder von jeweils 2cm entsprechen also 56,693Points und werden wie folgt berechnet:

Ein PDF-Dokument der Seitengröße A4 mit jeweils 2cm Seitenrändern würde so erstellt werden:

Document doc = new Document(PageSize.A4.Rotate(), 28, 28, 28, 28);

image

Öffnen und Schließen des Documents

Document besitzt zwei wesentliche Funktionen, die zum Erstellen des PDF-Dokuments notwendig sind: Open() und Close():

Open() / IsOpen()
Um ein Dokument zu bearbeiten bzw. mit Inhalten zu befüllen, muss es geöffnet werden. Dazu ruft man die Methode Open() auf dem Document-Objekt auf. Über die Methode IsOpen() kann man abfragen, ob das Dokument bereits mit Open() geöffnet wurde.
Hinweis: Nachdem Open() aufgerufen wurde, kann man weder Meta-Daten noch PDF-Header-Informationen bearbeiten!

Close()
Sobald alle Inhalte dem Dokument hinzugefügt wurden, muss das Dokument geschlossen werden, damit es korrekt (auf die Festplatte) geschrieben werden kann. Nach dem Aufruf von Close() kann nichts mehr hinzugefügt werden.

Vortrag: iTextSharp – Eigene Programme um PDF-Funktionalität erweitern

Am Mittwoch, den 30. Juli 2008, habe ich vor der .NET-Developers Group Stuttgart einen Vortrag über die Open Source Bibliothek iTextSharp gehalten.

Den Vortrag, zusammen mit Code-Beispielen, habe ich auf meinen Webserver hochgeladen: www.abramowitsch.de/vortraege/dotnetstuttgart/itextsharp/itextsharp.zip

Viel Spaß damit 🙂

Ralf

Office Live Workspace: Problem bei der Installation des Add-Ins

Ich habe mich vor einer Weile bei der Beta-Version vom Office Live Workspace angemeldet. Dort kann man seine Office-Dokumente archivieren, verteilen und betrachten. Leider ist es – im Gegensatz zu Google Text & Tabellen – nicht möglich, die Texte online zu bearbeiten 🙁

image

http://office.live.com

Nun habe ich auf der Webseite gesehen, dass man sich ein Plugin für Office installieren kann, mit dem man direkt mit Office Live Workspace kommunizieren kann:

image

Nachdem ich die Setup.exe gestartet habe, erhalte ich folgende Fehlermeldung:

image

Das Hotfix for Office KB941637 konnte nicht installiert werden:

image

Ich setze hier seit Kurzem ein x64-Vista Ultimate Edition mit Office 2007 Professional ein.

Auf dem Logfile konnte ich entnehmen, dass die Installation mit dem Exitcode 17031 („Process exited with code 17031“) beendet wurde.

Nach kurzem Googeln habe ich festgestellt, dass es ein Problem mit der Web Authoring Component vom Visual Studio 2008 das Problem ist! Wenn man dieses deinstalliert, sollte es funktionieren:

image

image

Danach startet man die Setup.exe vom Office Live Update (die hat man oben bereits von der Office Live Workspace Seite heruntergeladen):

 image

Jetzt funktioniert auch die Installation des Add-Ins:

image

So sieht das Add-In dann in beispielsweise PowerPoint aus:

image

Es kommen zwei neue Menüpunkte hinzu: „Von Office Live aus öffnen“ und „In Office Live speichern“.

 

Scheinbar wird gerade an einer Lösung gearbeitet. Doch bisher ist davon nichts zu spüren, denn das Problem ist bereits seit Wochen bekannt …

Gratis Source-Code Analyse Tool für Visual Studio

Vor ein paar Wochen hat Microsoft das Project „Microsoft Source Analysis for C#“ veröffentlicht. Die Grundlage für die statische Code-Analyse ist dieses Mal der (C#)-Quellcode.

image

Wie man der eigens dafür eingerichteten Blog-Seite entnehmen kann, wurde das Tool zuvor intern eingesetzt, um den Code auf bestimmte Qualitätsmerkmale zu überprüfen.

Für meinen Geschmack sind ein paar Einstellungen wirklich unnötig bzw. nicht wirklich praxistauglich (zumindest für mich). Zum Glück kann man die zu prüfenden Kriterien über ein kleines Tool im Installationsverzeichnis konfigurieren:

image

Mit einem Doppelklick auf die Settings-Datei wird der Editor geöffnet. Dieser verfügt über 5 Tabs zur Konfiguration: Rules, Settings Files, Results Caching, Company Information und Hungarian. Diese sind nachfolgend der Übersicht halber

alle aufgeführt:

image

image

image

image

image

Im Visual Studio 2008 wird dann eine neue View „Source Analysis“ hinzugefügt, in der die jeweiligen Regelverletzungen aufgeführt werden:

image

Download: http://code.msdn.microsoft.com/sourceanalysis/Release/ProjectReleases.aspx?ReleaseId=1047

Blog-Seite:
http://blogs.msdn.com/sourceanalysis/

Dokumentation der einzelnen Rules:
http://blogs.msdn.com/sourceanalysis/pages/source-analysis-4-2-rules.aspx

F12 –> Programm.exe has triggered a breakpoint …

Beim Debuggen meiner Anwendung bin ich heute auf ein seltsames Phänomen gestoßen:

Ich habe die F12-Taste als Tastenkürzel einer Funktion zugeordnet. Wenn ich diese Funktion debuggen möchte, in dem ich auf F12 drücke, erscheint folgende Meldung:

image 

Nachdem ich länger dazu gegoogelt hab, war die Lösung näher als ich dachte: Es liegt daran, dass WindowsNT (wozu auch WindowsXP & Co. zählen) eine Funktion aufrufen, die ähnlich zu DebugBreak() ist.

Wen’s zu sehr nervt (wie mich zum Beispiel) der kann das Problem mithilfe eines Registry-Keys aus der Welt schaffen:

 

HKLMSOFTWAREMicrosoftWindows NTCurrentVersionAeDebugUserDebuggerHotKey

image

Mehr Informationen dazu findet man auf http://support.microsoft.com/kb/130667/en-us

NetBeans 6.1 Beta ist veröffentlicht!

Heute bekam ich eine E-Mail von Sun, in der die neue Version von NetBeans 6.1 als Beta angekündigt wurde. Es gibt zwar einen Blog-Contest für diese neue Version, doch die Jury-Mitglieder verstehen leider die deutsche Sprache nicht.

Trotzdem möchte ich meine ersten Eindrücke hier kurz festhalten. Mein Fokus liegt vor allem auf der Entwicklung mobiler Anwendungen für J2ME.

image

Als erstes ist mir der neue Flow-Designer für J2ME-Applikationen aufgefallen:

image

Damit ist es nun noch einfach möglich, sich die gewünschte Oberfläche und die entsprechenden Aufrufreihenfolgen der Fenster zu konfigurieren.

Neu ist auch, dass es jetzt einen Startpunkt „Mobile Device“ gibt, bei dem man auch den Eintrittspunkt der Anwendung flexibel nutzen kann. Je nachdem ob das Programm zum ersten Mal gestartet wurde oder fortgesetzt wird:

image

Eine sehr gelungene Erweiterung ist die Möglichkeit, eine eigene Methode anzugegeben, die bei der Ausführung einer Aktion (z.B. Klick auf OK) ausgeführt wird.

image

Vorher musste man den Code zwischen die ActionListener quetschen. Mit der neuen Variante kann man dagegen den Code besser strukturieren.

Ein weiteres interessantes Feature ist die Kennzeichnung der Methoden im Editor, die beispielsweise von einem Interface implementiert werden:

image

Somit weiß man gleich, welchen „Ursprung“ die Methode hat. Mit einem Klick auf das „I“ wird dann die jeweilige Interface-Datei geöffnet (vorausgesetzt, der Quellcode liegt vor).

Ein weiteres nettes Feature ist die Hervorhebung der Verwendungsstellen von beispielsweise Variablen:

image

Hier ist beispielsweise die Variable „command“ und ihre Verwendung im Code hervorgehoben. Dies hilft wirklich sehr beim Verstehen von beispielsweise fremden Code.

Der integrierte „Analyzer“ zeigt ungenutze Schaltflächen, sowie Kompatibilitätsprobleme mit dem gewünschten Device Profile (MIDP)

image 

Auch die Palette verfügbarer GUI Elemente wurde erweitert. Es gibt nun auch Login Screens, File Browser uvm.:

image

Leider ist die Integration von Subversion nicht wirklich gut gelungen. Der Support von Subversion ist nicht Build-in und man muss im Plugin erst die Commandline-Version von svn installieren:

image

Erst dann kann man auf das Repository zugreifen:

image

Fazit

Mir gefällt NetBeans 6.1 als Entwicklungsumgebung schon ziemlich gut. Für die Entwicklung mobiler Software auf Java-Basis kenne ich momentan keine bessere Software. Mit eclipse & co. habe ich noch keine so guten Erfahrungen gesammelt!

Download

Downloaden kann man die Beta-Version wie immer kostenfrei unter folgender URL:

NetBeans IDE 6.1 Beta Download (http://download.netbeans.org/netbeans/6.1/beta/)