Dankeschön NetBeans und Co

…. und ein großes Dankeschön geht an ….

NetBeans!

Warum?

Ich arbeite schon seit ein paar Jahren an einem Stundenplaner – ein Open Source Projekt names gstpl. Und NetBeans war immer an meiner Seite (in schweren wie in guten Zeiten …🙂, Java natürlich auch…

Vor ein paar Monaten began ich dann einen Algorithmus aufzuschreiben (einige der Ideen hatte ich schon ein paar Jahre vorher) um an einem Wettbewerb teilzunehmen. Die ‘Deadline’ dafür war heute Mittag und ohne NetBeans hätte ich wohl nie auch nur annähernd recht gute Ergebnisse erziehlt. Und neben meiner Physik-Diplomarbeit und anderen wichtigen Dingen im Leben hatte ich eigentlich gar keine Zeit😉 Die Produktivität ist mit Java+NetBeans (‘javne’) im Gegensatz zu ‘früher’ mit C++ – für mich gesprochen – um den Faktor 4 gestiegen.

Was heißt nun gute Ergebnisse? Wenn man mit ‘Stundenplanen’ anfängt so stellt sich die Frage: ‘Gibt es den optimalen Stundenplan’ für ein bestimmtes Problem? Ja, den gibt es! Nur würde es ziemlich lange dauern diese zu finden. Man muss ja alle Lösungen durchgehen und dann auch verifizieren, dass es die Beste ist… Man versucht also Methoden zu finden die in annehmbarer Zeit (auf meinem PC hatte ich im Wettbewerb ca. 11 Minuten) eine möglichst gute Lösung finden können. Sie sollten also ein ausgewogenes Maß an ‘aktuelle Version verbessern’ und ‘gänzlich neue Lösung finden’ besitzen.

Etwas konkreter: Es gab ein paar Personen (z.B. 1000) die Fächer (insgesamt z.B. 400) gewählt hatten. Ist es nun möglich einen Stundeplan zu bauen der keine Konflikte beinhaltet? Ein Konflikt kann z.B. auftreten, wenn eine Person zwei Fächer zur selben Zeit besuchen soll oder wenn zwei Fächer in einem Raum (ach ja die gab es ja auch noch, z.B. 10) stattfinden sollten. Bei bestimmten Fächern musste man auch noch deren relative Reihenfolge zueinander beachten und bestimmte Fächer hatte auch noch Anforderungen an Räume (Chemie kann ja nur in Räumen mit mind. einem Bunsenbrenner stattfinden). Wenn all dies passt – für alle Personen und Räume – so nennt man den Stundenplan konfliktfrei (no hard constraint violations) – er ist aber noch lange nicht optimal. Man sollte bei dem Wettbewerb auch noch die ‘weichen’ Nebenbedingungen optimieren: Z.B. sollten Personen möglichst nicht nur ein Fach pro Tag haben usw.

Ihr seht eine Menge Dinge gab es zu Beachten und zu tun. Ich musste außerdem noch die Geschwindigkeit optimieren (mit nem Profiler) da ich wahrscheinlich nur C++/C – Projekte als Konkurenz haben werde bzw. ‘hatte’.

Nebenbei habe ich versucht möglichst viele Sachen mit JUnit zu testen, damit die Jury nicht irgendwelche Bugs findet bzw. das Programm auch bei den noch nicht zugänglichen Dateien (hidden datasets) funktioniert.

Mit NetBeans alles kein Problem… Ein besonders cooles Feature ist die Local History, die mir ganz schnell die Unterschiede einer Datei zu versch. Zeitpunkte (auch von vorvorvorgestern) anzeigen konnte:

Local History

Außerdem hat die ‘unused Variable’-Warnung einige Bugs verhindern können, da ich dann z.B. gemerkt hatte, dass in einer Schleife nicht die lokale Variable, sondern der Variablenzähler genutzt wurde:

Unused Variables

Außerdem geht ein Dankeschön an folgende Projekte:

  • GNU screen – damit ich an einem schnelleren Rechner Tests starten konnte und diese auch Laufen würden, wenn mein Rechner aus ist. Siehe dazu auch ältere Blogeinträge.
  • YourKit Profiler – Eine propritäre Konkurenz zum NetBeans Profiler.
  • KDE svn ein Linux subversion client