SierraXTC am 29.10.10 um 20:29 Uhr

Code Refactoring

Geschwafel

Taglogo Tags: ,

Refactoring wird hauptsächlich auf unschöne Stellen im Code (siehe Code-Smell) angewandt. Dabei wird der Quelltext eines Computerprogramms umgestaltet, wobei die tatsächliche Programmfunktion unverändert bleiben soll.

Quelle: wikipedia

Eine kleine Anekdote aus meinem Arbeitsleben: Zur Zeit beschäftige ich mich vornehmlich mit dem Code-Refactoring unter der Prämisse neue Erweiterungen für zukünftige Ergänzungen zu implementieren. Refactoring ist in meinen Augen eigentlich eine denkbar unangenehme Aufgabe. Früher oder später hat man sich den aktuellen Source-Tree soweit zerhauen, das kein Stück mehr auf’s andere paßt. Dabei den Überblick zu behalten und nicht den Fehler zu machen, Funktionalitäten aus versehen bei der Re-Implementierung zu übersehen ist nicht ganz einfach.

Fast mehr als die Hälfte der Woche sprühte es vor roten Kreuzen in meinem eclipse-Projekt und der aktuelle Stand läßt mich nur unbefriedigend ins Wochenende gehen, da ich jetzt schon weiß, das ich den roten Faden, den ich bis vorhin noch hatte, am Dienstag erstmal mühsam suchen muss. Abgesehn von den restlichen Aufgaben, die einen in diesem Prozess eh schon fortwährend ablenken.

Code-Refactoring from scratch wäre ja ganz nett – verfehlt aber bei mir konsequent den Sinn, da ich aus Terminüberschneidungen ausstehende Implementierungen bereits existierender/benötigter Funktionalitäten immer mal wieder zurück stellen muss. Der Job bringt es eben so mit sich, das man nicht seine gesamte Zeit auf eine Aufgabe aufwenden kann.

Natürlich – wer sinnvoll und ausgiebig konzeptionell planen und entwickeln kann, dem stellen sich – zumindest weitaus seltener – eben diese Probleme nicht. Aber wir leben nunmal nicht in einer Welt mit unendlich Zeit und ohne Störfaktoren. So gibt man sich eben den Gegebenheiten hin und reißt gelegentlich auch mal ganze – oder zumindest sehr große – Konstrukte ein um sie neu aufzubauen.

Eierlegende Wollmilchsau
image found @neulehrer.wordpress.com

Aber immerhin durfte ich in weiten Teilen dabei auch Abwärtskompatibilität kappen und so schon mal einige Zeilen Code-Müll dem Papierkorb zuführen. Ist ja auch mein (adoptiertes) “Baby” – mit dem ich schon während der Ausbildung beginnen durftemusstekonnte und das nun intern unter dem süffisanten Projektnamen “Eierlegendewollmilchsau” läuft. :lol:

Derzeit grübel ich doch sehr stark, wie man so’n tolles Refactoring strukturierter angehen könnte. Vielleicht kennt da ja jemand hilfreiche Tipps, wie man in paar Tausend Zeilen Code nicht den Überblick verliert? Grade in Hinblick auf eclipse wäre es spannend.

SierraXTC am 15.10.10 um 22:56 Uhr

HyperSQL

Technikecke

Taglogo Tags: , ,

Datenbank Management System (kurz DBMS) gibt’s wie Sand am Meer. Schlachtschiffe wie MSSQL oder Oracle – *sigh* – bieten mehr oder minder Komfort in der Verwaltung des DBMS. Der geneigte 08/15-User verläuft sich sicherlich häufiger bei MySQL – was ja nun mittlerweile auch unter Oracle HerrschaftFührung entwickelt wird. Warum also HyperSQL (aka HSQLDB)? Gute Frage!

Auf der Arbeit nutze ich MSSQL. Das liegt darin begründet, das grob überschlagen vermutlich rund 80% aller Kundeninstallationen MSSQL-Datenbanken sind. Hat aber den entscheidenden Nachteil, das so eine dicke MSSQL ein wenig Ressourcen zieht. Wer mal auf einem normalen – *sigh* – Desktop-Rechner mit eclipse und einer parallel laufenden MSSQL-DB entwickelt hat, der wird schnell feststellen, das Hardware-Ressourcen in Form von Arbeitsspeicher schnell Mangelware sind. Insbesondere wenn man mit Datenbanken arbeitet, deren reiner Datenbestand auch mal niedliche 1GB umfassen.

  • Installation

Gutgläubig, wie man so ist, greift man jeden Tipp auf. OK – heute auf der Schaffe eben schnell HSQLDB geladen und installiert. Ja klar: Herunterladen, in einen Ordner seiner Wahl entpacken und – unter Windows – das beigefügte Startscript runServer.bat aufrufen. Das war’s! In etwa 200 Millisekunden steht einem ein DBMS zur Verfügung. Klasse Sache. Für den geneigten Linux- oder MacOS-Nutzer:

#!/bin/bash
cd ../data
java -classpath ../lib/hsqldb.jar org.hsqldb.server.Server

Zu speichern als runServer.sh mit chmod 755 runServer.sh im bin/-Verzeichnis der HSQLB-Installation.

  • Benutzung

OK – was mach ich nun damit? HSQLB legt unter data/ eine Test-Datenbank an. Ist jetzt nicht unbedingt der Einstieg schlechthin. Wer die üblichen DBMS gewöhnt ist, der erwartet vielleicht die Vorgehensweise: Mit dem Management-Tool seiner Wahl sich zur HSQLDB verbinden und mit CREATE DATABASE moep eine eigene, leere Datenbank anlegen. Mitnichten!

Nehmen wir als Management-Tool mal SQuirreL, dann ist für die Verbindung natürlich der JDBC-Treiber für HSQLDB notwendig. Der Treiber findet sich in der etwa 1 MB großen hsqldb.jar aus der HSQLDB-Installation. Was ja die eigentliche Datenbank ist. Ist der JDBC-Treiber von SQuirreL gefunden und geladen kann man aus den Varianten “In-Memory“, “Server“, “Standalone” und “Web-Server” wählen. “Server” ist nun erstmal eine gute Wahl. Mit der URL

jdbc:hsqldb:hsql://localhost

bekommt man auch eine Verbindung zu der laufenden DBMS-Instanz. Wer damit schon zufrieden ist, kann auf dieser Datenbank seine Tabellen erzeugen und damit arbeiten. Das ich damit nicht glücklich bin steht außer Frage.

  • Neue Datenbank

Wer einigermaßen schlau ist, der wühlt sich durch diedas API und durch die Dokumentation. Dann wird ins Auge springen, das man HSQLDB parametrierbar(?) starten kann. Man übergibt dem obigen Start-Script einfach Parameter zur Datenbank, die man nutzen möchte:

--database.0 file:baseDb --dbname.0 baseDb

So hat man nun zumindest immer eine Datenbank im Zugriff. Kann reichen, muss aber nicht. Auch da hilft die Dokumentation weiter:

When a server instance is started, or when a connection is made to an in-process database, a new, empty database is created if no database exists at the given path.

Ich geh hier bewußt auf den file-Modus der Datenbank ein. Dieser erscheint mir persönlich am sinnvollsten. Gut, wie bekomm ich nun den in-process Zugriff? HSQLB ist in Java geschrieben und bietet eine entsprechend einfache Integration in Java-Projekte. Ja, wir sind nun schon auf einer Ebene, wo wir unsere Entwicklungs-Umgebung bemühen sollten. Denn nun heißt es, z.B. Java-Code auszuführen:

Connection c = DriverManager.getConnection(
"jdbc:hsqldb:file:/opt/db/testdb;ifexists=true", "SA", "");

OK, zerlegen wir zunächst obigen Code – vielmehr des Strings, der die Datenbank-Verbindung erzeugt (getConnection()):

  • Parameter 1:
    die Verbindungs-URL, typisch für den file-Mode. Die Datenablage im Dateisystem wird mit file: definiert, es folgt der Pfad zum Verzeichnis im Dateisystem, unter dem die Datenbank erzeugt werden soll. Der Datenbank-Name ist dabei der letzte Teil hinter dem (Back-)Slash. Dieser Teil erzeugt auch kein weiteres Verzeichnis, sondern lediglich Dateien mit dem Datenbank-Namen als Prefix.

    Nun wird’s etwas knifflig: Oben wird hinter der URL noch ein Parameter angehangen, semikolon-separiert. ifexists=true bedeutet, das eine existierende Datenbank im Dateisystem genommen wird, sonst wird eine Neue erzeugt. Dazu gleich noch eine Anmerkung.

  • Parameter 2:
    Benutzername der Datenbank. Standardmäßig erfolgt der Zugriff über den HSQLDB-Benutzer “SA“. Lediglich bei diesem ist Groß-/Kleinschreibung irrelevant.
  • Parameter 3:
    Passwort des Benutzers. Auffallend ist: “SA” hat per default kein Passwort.

Bezüglich des Parameters ifexists=true hilft lesen ungemein:

For troubleshooting purposes, you can specify a connection property ifexists=true to allow connection to an existing database only and avoid creating a new database. In this case, if the database does not exist, the getConnection() method will throw an exception.

Hinweis: ifexists=true sucht auch explizit nach einer bestehenden Datenbank. Wird diese nicht gefunden, bekommt man direkt mal Exceptions um die Ohren gepfeffert.

  • Zugriff

Nun gut, dann haben wir also in Schritt 1 ohne ifexists=true die Datenbank erzeugt und greifen im Folgenden mit selbigem Parameter auf die erzeugte Datenbank zu. Komm ich nun auch per SQuirreL an die Datenbank ran? Logisch – wenn da keine offene Verbindung drauf existiert schon. Wie man – öhm – mehrere Verbindung, wenn denn möglich, nutzt lernen wir ich dann später mal. Was trägt man nun bei SQuirreL als URL ein?

Halt genau die obige URL – es geht wohlweißlich auch ohne den Parameter.

  • Benutzer

Wer meint, das seine Anwendung lieber mit einem Benutzer mit Passwort auf HSQLDB zugreifen sollte, der kann der erzeugten Datenbank per SQL mit dem Befehl

CREATE USER moep PASSWORD moep [ADMIN]

einen weiteren Nutzer hinzufügen – inklusive der optionalen Berechtigungen eines Admins. Dieser verfügt dann über die Berechtigungsrolle des “SA“-Benutzers. In die Tiefen der Benutzerrechte bin ich bisher noch nicht hinab gestiegen. HSQLDB ist auch primär eine Entwicklungs-Datenbank zum schnellen starten und stoppen und nicht für den produktiven Einsatz vorgesehn.

Wenn ich nun obiges SQL-Statement in SQuirreL abfeuer, dann greift indes eine merkwürdige Form des Case-Sensitive in HSQLDB: Egal ob groß oder klein geschrieben, ein erfolgreicher Verbindungsaufbau erfolgt nur, wenn Benutzername und Passwort groß geschrieben ist. Weiß der Geier warum …

  • Und nun? Hibernate?

Was macht man nun mit diesem gewonnen Wissen? Man kann zumindest mit seiner Java-Anwendung diese Datenbank nutzen. Hooray! Kein “ernsthafter” Entwickler geht noch ohne Hibernate – einem Persistenz-Framework für Datenbank-Verbindungen unter Java – an Datenbanken ran.

An dieser Stelle vertröste ich dann auf den zweiten Teil dieser Einführung in HSQLDB, die ich von der Arbeit aus wohl schreiben werde. Merkwürdigerweise fehlen mir Java-Projekte hier zu Hause, da hier das Entwickeln auf Grund von anderem, unnötigen Zeitvertreib seit Jahren zu kurz gekommen ist. Grob überschlagen bietet Hibernate einige Optionen für die Datenbank-Verbindung zu HSQLDB, die ich dann beim Aufbau meines Testsystems auch ausprobieren und womöglich nutzen werde.

So einfach HyperSQL auch ist, so – für mich – ungewöhnlich ist da die Vorgehensweise, wenn man es anders gewohnt ist. Gewonnen wäre zwar indes nur etwas für mich, wenn ich eine MSSQL-Datenbank in HSQLDB konvertieren könnte, aber ich muss eh mindestens eine neue, saubere Testumgebung für mich aufbauen. Von daher hoffe ich in Zukunft auf weniger Performance-Probleme beim Entwicklen – kann ja auch nicht schaden und reduziert wohlweislich den Koffein-Konsum.

SierraXTC am 17.10.08 um 17:22 Uhr

dom4j *gnah*

Technikecke

Taglogo Tags: , ,

Ja warum auch nicht:

malcolmhardie.com – Java FileWriter, XML and UTF-8

Genau das gleiche Problem hatte ich auch: Warum sollte auch dom4j mit dem XMLWriter geschriebene Dateien selber parsen können. :roll:

Stattdessen erfreut es lieber mit Fehlermeldungen:

2008-10-17 17:09: ERROR [Thread-1] DocumentException:
2008-10-17 17:09: ERROR [Thread-1] org.dom4j.DocumentException: Invalid byte 2 of 4-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 4-byte UTF-8 sequence.

SierraXTC am 22.08.08 um 06:12 Uhr

Aptana

Technikecke

Taglogo Tags: , , ,

Es gibt logischerweise viele Entwicklungsumgebungen für die Webentwicklung. Von vermeindlich einfachen WYSIWYG-Editoren, die ich persönlich meide, bis hin zu Integrationen in (semi-)professionelle Software-Entwicklungsumgebungen wie z.B. Zend oder eben auch eclipse. Als Java-geschädigter Entwickler bevorzuge ich – gegensätzlich zum Unix-Prinzip – eher eine Umgebung für alle Lösungen.

Zur Zeit darf ich mich wieder vermehrt der Webentwicklung mit PHP widtmen und meine erste Anlaufstelle war die inoffizielle Erweiterung für eclipse Namens PHPeclipse. Diese stieß in eclipse Europe (v3.3) aber schon beim Syntax-Hightlighting für Stylesheet-Dateien ans Ende der Fahnenstange. Die offiziellen PHP Development Tools vom eclipse Projekt setzen unter anderem Webdeveloper-Module vorraus, die auf der JavaEE-Umgebung von eclipse basieren, welche sich zur PlugIn-Development-Suite (zumindest bei Europe) höchst inkompatibel zeigen.

Mir war darüber hinaus noch ein weiteres Projekt Namens Aptana bekannt, welches auf die Software-Basis von eclipse aufsetzt und sich entweder als Modul in eclipse benutzen läßt, oder aber als eigenständiges IDE installierbar ist. Ich habe mich für letztere Variante entschieden, um mein eclipse dann doch nicht noch mehr zuzumüllen, als es zwingend notwendig erscheint. Der Vorteil liegt dennoch auf der Hand: Ein erfahrener eclipse-Nutzer findet sich in der graphischen Oberfläche recht schnell zurecht.

Aptana spezialisiert sich vornehmlich auf die Webentwicklung mit (X)HTML, CSS und JavaScript inklusive JavaScript-, respektive AJAX-Frameworks. PHP gehört dabei nicht zum Hauptaugenmerk des IDE. Jedoch läßt sich der PHP-Support einfach über ein offizielles Modul nachinstallieren. Vornehmlich zielt diese PHP-Unterstützung in der aktuellen Version jedoch eher rein auf Syntax-Highlighting ab, weniger auf die Verwaltung von PHP-Projekten, wie sie PHPeclipse deutlich besser beherrscht. Derzeit kann ich mit diesem Manko noch ganz gut leben, weswegen ich Aptana auch seit einigen Tagen eine Chance gegeben habe.

Aptana GUI

Der Vorteil der kostengünstigen OpenSource-Lösung verschmerzt bei mir noch das Missen der wirklich rundum gelungenen, aber kostenpflichtige Full-Feature-Lösung Zend. Jedoch stößt ein eclipse-Nutzer mit Kenntniss des Java-Editors recht schnell auf kleinere Mängel. Kopieren oder verschieben von Dateien zwischen den Projekten sitzt noch nicht drin. Die Code-Completition verfolgt dabei eher den Zend-Ansatz mit den DropDown-Menüs. Ein strg + leertaste ist in Aptana gewohnheitsmäßig schnell gedrückt, hilft aber nur bedingt, denn Code-Completition unterstützt Aptana für HTML, CSS, PHP zwarrecht gut, kann jedoch nur nichts mit inkludierten PHP-Klassen anfangen.

Ansonsten unterscheidet sich Aptana nicht wirklich wesentlich von eclipse in der Bedienung. Wie die Integration von AJAX-Frameworks wie MooTools und vielen weiteren gelungen ist, hab ich bisher noch nicht antesten können. Alles in allem gefällt mir diese Lösung jedoch zur Zeit zur Verwaltung von kleineren Webprojekten recht gut. Es gilt zwar die Augen weiterhin nach Feature Updates offen zu halten, aber für ein erstes offizielles Stable-Release ist Aptana in meinen Augen eine mehr als nur brauchbare Alternative zu anderen Code-Editoren.

SierraXTC am 09.06.08 um 13:59 Uhr

Netzfundstücke

Lustiges/Sinnloses

Taglogo Tags: , ,

HTML-Programmierung mit Word

Quelle: HTMLbasis.de

Ein Beispiel, welches man sich besser nicht sonderlich zu Herzen nimmt :lol:

Kategorien
STATISTIK
  • Insgesamt 1289 Beiträge
  • mit 305,141 Wörtern
Mai 2012
M D M D F S S
« Apr    
 123456
78910111213
14151617181920
21222324252627
28293031  
SUCHE

Monatsarchiv
KOMMENTARE Commets RSS 2.0 Feed
  • Top Kommentatoren
  • commanderx (112)
  • Manuel (69)
  • Yank (59)
  • Marc (53)
  • Noodles (41)
  • Links
    META
    SYNDICATION