Archiv der Kategorie: Entwicklung

Mein Beruf und mein Hobby überlappt sich: Die Entwicklung von Software für Computer.

PostgreSQL character varying maximum length

Gerade habe ich in einem Projekt eine legacy Datenbank nach Postgres importiert, und bin dabei sie zu analysieren und umzubauen. Dabei sind die Längenangaben bei Feldern vom Typ character varying immer interessant. Hierbei kann man eine Maximallänge des Feldes in Zeichen angeben. Bei vorgegebenen Daten ist die Ausnutzung dieser Länge interessant, also die Frage, wie lang ist die maximal abgespeicherte Zeichenlänge in jedem Feld.

Eine Idee ist dies mit einer PL/pgSQL-Function zu berechnen, nach etwas Tüfteln habe ich sie hingebracht:

CREATE OR REPLACE FUNCTION public.character_varying_length()
  RETURNS TABLE(table_name varchar, column_name varchar, character_maximum_length integer, actual_maximum_length integer) AS $func$
DECLARE
   tbl information_schema.columns.table_name%TYPE;
   col information_schema.columns.column_name%TYPE;
   width information_schema.columns.character_maximum_length%TYPE;
BEGIN
   FOR tbl, col, width IN
      SELECT c.table_name, c.column_name, c.character_maximum_length
      FROM   information_schema.columns c
      WHERE  c.table_schema = 'public' and c.data_type = 'character varying'
      order by c.table_name, c.ordinal_position
   LOOP
      RETURN QUERY EXECUTE format('SELECT %L::varchar, %L::varchar, %s::integer, max(length(%I)) from %I', tbl, col, width, col, tbl);
   END LOOP;
END
$func$  LANGUAGE plpgsql;

Aufgerufen wird dies mit

select * from character_varying_length()

und liefert dann 4 Spalten für alle character varying felder im Schema public:

Screenshot Abfrage

Ergebnis der Abfrage der Funktion

Diese Funktion funktioniert in jeder Postgres-Datenbank, einfach deklarieren und aufrufen wie oben.

Everything a Java Developer Should Know about the JavaScript Landscape

Als altgedienter Java-Programmierer ist mir die schnelle Evolution im Bereich HTML5, CSS3, Single Page Anwendung und Javascript oft suspekt. Was heute noch angesagt ist, ist morgen schon old school. Mit Entwicklung in Apache Wicket, mit dem ich gerne arbeite, bin ich ja auch ein Vertreter des alten serverzentrierten Ansatzes. Trotzdem bleibe ich am Ball und schaue mir die neuen Tendenzen und Hypes an.

Geertjan Wielenga hat auf der JAX London eine gute Präsentation zum Thema gehalten. Auch wenn ich nicht alle seine Tipps sofort akzeptiere (bei Tipp 8 und 9 kriege ich Gänsehaut) oder für richtig halte, sind seine Überlegungen und Empfehlungen sehr wertvoll.

Mercurial Repositories nach Git konvertieren mit fast-export

Schon seit längerem verwalte ich meine Entwicklungsprojekte mit einer verteilten Versionsverwaltung. Habe ich früher Mercurial verwendet, weil es besser unter Windows verfügbar und integriert war, so bin ich inzwischen auf das angesagte Git umgestiegen, das ja vor allem durch die breite Verwendung von github populär ist. Zur Vereinheitlichung will ich alles mit Git verwalten und dazu natürlich die Mercurial-Repositories verlustfrei in Git-Repositories umwandeln. Dies ist gar nicht so schwer, und so will ich dem Netz dazu mal eine deutschsprachige Anleitung dazu reichen.

Diese Anleitung geht Fragen (1, 2) in stackoverflow zurück, wird also von mir hier nur neu präsentiert. Als Werkzeug wird dabei fast-import verwendet, das es unter https://github.com/frej/fast-export gibt und dort auch erklärt ist. Auf meinem Mint Linux (Ubuntu Derivat) lies es sich ganz leicht installieren mit

sudo apt-get install hg-fast-export

Dies holt auch alle nötigen Pakete wie Mercurial etc. nach. Unter Windows habe ich es nicht getestet, da dort meist kein Python vorhanden ist.

Zur Anwendung sei als Illustration ein kleines shell-Script angegeben, das im Verzeichnis über dem Projektverzeichnis mit dessen Namen als Parameter aufgerufen wird. Das alte Projektverzeichnis wird mit der Endung .bak umbenannt und steht nachher als Backup noch zu Verfügung. Nach der Anwendung steht das Verzeichnis wieder unter dem alten Namen, jedoch mit .git Respository, zur Verfügung.

#!/bin/sh
projectdir=$1
[ $# -eq 0 ] && { echo "Usage: $0 subdir_with_hg_project"; exit 1; }
bakdir=$projectdir'.bak'

mv $projectdir $bakdir
git init $projectdir
cd $projectdir
hg-fast-export -r ../$bakdir
git checkout HEAD
# undo last commit, if we had changed files in hg and did commit just for completeness
# git reset HEAD~
# remove old project directory, if not needed any more
# rm -rf ../$bakdir

Es wird dabei ein leeres Verzeichnis mit git init initialisiert und dann das Git Repository durch hg-fast-export mit sukzessiven Commits befüllt. Danach ist es dem Mercurial-Repository gleichwertig. Zu den Dateien kommt man erst mit git checkout HEAD, da diese zuerst nur im Repository hinterlegt sind.

Ist das Mercurial-Verzeichnis noch mit offenen Änderungen versehen, so muss man diese vor dem Übertragen commiten, damit sie mit übertragen werden. Der letzte, eigentlich unerwünschte Commit kann dann mit git reset HEAD~ im Git-Verzeichnis ungeschehen gemacht werden. In der IDE netbeans kann dies auch mit der hervorragenden Git-Integration unter Team > Revert/Recover > Reset mit der Option Modify Working Tree (--mixed) gemacht werden.

Dieter Tremel

6. Juni 2014

Heute habe ich die erste Lektion eines Online-Kurses abgeschlossen:

Oracle Massive Open Online Course: Develop Java Embedded Applications Using a Raspberry Pi May 2014

Der Kurs ist kostenlos und ich habe mich erstmal nur zögerlich angemeldet, weil ich nicht schon wieder eine neue Baustelle haben wollte. Doch die Materie ist recht interessant auch für konkrete Projekte, der Kurs überzeugt gleichzeitig mit hoher Qualität, und ich bin inzwischen sehr angetan bis begeistert.

Der Kurs lehrt anhand eines Beispiels die Entwicklung von Anwendungen mit der neuesten Java Micro Edition (JAVA ME EMBEDDED, JMEE) auf der populären „Volks-Hardware“, dem Raspberry Pi. Da ich auch schon mal ein Projekt in der Sprache C mit einem Atmel AVR gemacht habe, bei dem ich alles von Grund auf gelöst habe, kann ich die Erleichterungen, welche die Kombination JMEE 8 und der Raspberry Pi bietet, gut ermessen.

Weiterlesen

Perl 5.20 erschienen

Die Programmiersprache Perl ist heute in der Version 5.20 erschienen. Diese Sprache teilt die Programmierer in zwei Hälften: Die einen hassen und die anderen lieben sie. Grund ist ihre unkonventionelle Syntax, die es erlaubt, sehr mächtige Ausdrücke sehr kompakt zu notieren. So ist es ein beliebter Sport von Perl-Kennern, Problemstellungen in Foren auch mit ungeheuer ausgefuchsten Einzeilern zu lösen, die dann aber mangels Verständlichkeit nur noch der geneigte Leser versteht. Sehr schön brachte das der amerikanische Programmierveterane Keith Bostic in dem Zitat “Perl – The only language that looks the same before and after RSA encryption” zum Ausdruck. Köstlich!

Diese Möglichkeit von Perl, sehr kryptisch zu Programmieren wird aber auch oft überbetont, man kann damit auch vernünftiger und durchaus lesbar arbeiten. Ich mochte Perl, vor allem für kleinere Scripts nutze ich sie auch heute noch, zum Beispiel um METAR Flugwettermeldungen von Webservern zu laden und archivieren.

Beginner’s All-purpose Symbolic Instruction Code

Die Programmiersprache BASIC feiert am 1.5.2014 ihren 50. Geburtstag.

Mit dieser Sprache habe ich, nach ersten Erfahrungen mit programmierbaren Taschenrechnern von Texas Instruments, auch das Programmieren gelernt. Das zeigt wohl, dass ich schon ein paar Jährchen in dem Metier unterwegs bin 😉 BASIC war immer eine Hassliebe:

Geliebt, weil es damals die erste preiswert verfügbare Hochsprache war, Assembler auf Lehrsystemen oder Großrechnerbenutzung war damals die Alternative. Auf Maschinen wie dem Commodore PET 2001 und dann dem C64 war BASIC einer breiteren Schicht von Anwendern, als die anderen Sprachen, verfügbar.

Commodore PET 2001

Commodore PET 2001 computer. On display at the Musée Bolo, EPFL, Lausanne. (Quelle wikipedia)

Ich konnte den PET damals in der Fachoberschule Freising, nach einem Kurs bei Achim Burgermeister, benutzen, und war auf jede Minute dieser gewährten Möglichkeit fast süchtig. Der Hauptspeicher dieser Geräte war 8 Kilobyte groß, eines als Premium-Gerät, war mit 32 KB ausgestattet, damals sehr teuer, und ich konnte mir nicht vorstellen, wie man soviel Speicher mit Daten und Programmen füllen könnte 🙂

Gehasst, weil sie doch auch sehr beschränkt und noch nicht weit entwickelt war und bei größeren Programmen sehr schnell unlesbaren Code produzierte, wenn der Entwickler nicht sehr diszipliniert war. Das waren die Entwickler damals meistens nicht, so dass oft der gefürchtet Spaghetti-Code entstand. So habe auch ich die Sprache C und die damalige Bibel dazu, den sogenannten „Kernighan Richie“ als Befreiung empfunden und gerne damit entwickelt.

Akronyme, wie BASIC (Beginner’s All-purpose Symbolic Instruction Code) sind in der Computerei verbreitet und es gibt viele schöne davon. So viele, dass die Bezeichnung PCMCIA der Personal Computer Memory Card International Association, bekannt für die damals üblich Lapttop-Erweiterungskarten, zu „People Can’t Memorize Computer Industry Acronyms“ (etwa: Niemand kann sich die Akronyme der Computer-Industrie merken) verballhornt wurde. Dieses Zitat fand seinen festen Platz im Sprachschatz von Computerspezialisten.

Java EE 7 ist fertig

Oracle hat Java EE 7 gelauncht:

http://www.heise.de/newsticker/meldung/Oracle-gibt-Java-Enterprise-Edition-7-offiziell-frei-1887250.html

http://www.oracle.com/us/corporate/press/1957557

Ich habe es mit Netbeans 7.3.1 bereits im Test, aber habe wie immer bei einem Upgrade noch so kleinere Probleme, meine Anwendungen darauf zum Laufen zu kriegen. Viele Warnings around CDI.

Glassfish 4.0 erschienen

Oracle führt nach ziemlich schlechter Presse in letzter Zeit mal wieder was Positives in die Java Welt ein: Schon einen Tag vor dem morgigen Java EE 7 Launch ist Glassfish 4.0 Online verfügbar. Dieser Applikationsserver ist die Referenzimplementierung für Java EE 7 und wird von mir intensiv benutzt.

http://www.heise.de/newsticker/meldung/GlassFish-4-0-als-Referenzimplementierung-von-Java-EE-7-1886255.html

http://www.heise.de/developer/meldung/Referenzimplementierung-fuer-Java-EE-7-GlassFish-4-0-erschienen-1886175.html

https://glassfish.java.net/

Netbeans 7.3 erschienen

Oracle hat die Version 7.3 der Entwicklungsumgebung netbeans freigegeben. Ich arbeite jeden Tag mit netbeans und ziehe es dem Markführer Eclipse vor, da es weniger chaotisch ist und im mindestens im Bereich Java EE und Maven-Unterstützung überlegen ist.

Wichtigste Neuerung ist die sehr weit reichende Unterstützung von HTML5, CSS und auch den komplexesten Javascript Bibliotheken und dies in einer hervorragenden Vorschau eng verzahnt mit Google Chrome.

http://www.heise.de/newsticker/meldung/Viel-JavaScript-in-NetBeans-7-3-1807721.html

http://netbeans.org/community/releases/73/

Weiterlesen