Bücherliste für das neue Semester

Das neue Semester hat angefangen und bietet für mich einiges an Lesestoff. Da die Bücher thematisch mehr oder weniger zum Blog passen, stelle ich sie hier vor.

In “Software Architecture” behandeln wir die Planung und Durchführung von Software-Projekten. Folgendes Buch Buch behandelt vorallem die Implementierung grosser Projekte. Es treten immer wieder ähnliche Situationen auf in denen man Probleme ähnlich löst. Das Buch stellt nun diverse “Muster” vor, welche immer wieder verwendet werden. Es werden Vor- und Nachteile, sowie verschiedene Gefahren erklärt. Das Buch deckt in unserem Fall jedoch nicht den gesamten Stoff ab, da wir insbesondere auch Requirements, Planung und Testing behandeln.

Das zweite Buch ist für die Vorlesung über Computer Netzwerke. Das Buch dient als Einführung, insbesondere in die Verschiedenen Schichten eines Netzwerkes (von der Physikalischen Übertragung im Kabel/in der Glasfaser, bis zu den Programmen, welche Daten austauschen). Das Buch ergänzt die Vorlesungsunterlagen, insbesondere geht es in einigen Bereichen noch ein bisschen mehr in die Tiefe.

Das letzte Buch ist für die Datenbank-Vorlesung. Es geht in erster Linie um die Modellierung von Daten (einerseits mittels relationalen Datenbanken, andererseits auch allgemein, bzw. um die Darstellung mittels ER/UML). Das Buch ergänzt die Vorlesung mit weiteren Beispielen und mehr Erklärungen.

Viel Spass beim lesen.

Hudson – Continiuous Integration

Nachdem wir nun unser “Semester-Projekt Part I” beinahe abgeschlossen haben, habe ich mir “Hudson” nochmals genauer angeschaut und mal ausprobiert. Für Java-Projekte, und insbesondere Web-Projekte (welche mit Java implementiert werden) eigent sich Hudson hervorragend. Hudson wurde selber in Java programmiert und benötigt einen “ServletContainer” (eine Art (Web-)Server, welcher das Java-Webapp ausführt). Ich habe mich für Tomcat entschieden, da wir Tomcat auch für die Entwicklung unseres Projektes verwenden und die Installation von Hudson beinahe null Aufwand mit sich bringt.

Was macht nun dieses “Hudson” genau? Beim Programmieren eines Webprojektes möchte man immer mal wieder testen ob alles funktioniert, ob alte Bugs repariert sind und ob sich evtl. neue Bugs eingeschlichen haben. Vorallem wenn auch Nicht-Programmierer an diesem Prozess beteiligt sind, muss das ganze Projekt auf einem Testserver eingerichtet werden und für die Tester zugänglich sein. Dabei muss bei jeder Änderung das Projekt kompiliert und übertragen werden. Hudson übernimmt nun diesen Teil. Der Quelltext wird von der Versionsverwaltung geholt, kompiliert und alles es keine Fehler gibt eingerichtet. Zusätzlich können Test-Mechanismen wie JUnit oder TestNG eingebunden werden. Entwickler können (falls gewünscht) direkt benachrichtigt werden, falls das Kompilieren fehlschlägt, usw.

Hudson kann auch mit anderen Programmiersprachen als Java umgehen und ist nicht nur auf Webprojekte beschränkt. Die Konfiguration ist sehr flexibel gestaltet und alles ist durch Plugins erweiterbar. Dies führt leider auch zu einer gewissen Komplexität. Für sehr kleine Projekte wird der Aufwand für die Konfiguration wohl beinahe ein bisschen zu gross. Ausserdem muss sich auf dem Server ein Compiler, und alles weitere befinden um das Projekt zu kompilieren und das ist für die Sicherheit des Server nicht unbedingt optimal. Weiter muss man den Beteiligten am Projekt bis zu einem gewissen Grad vertrauen können, denn diese können mit Änderungen am Code relativ viel Unfug anstellen auf dem Server. Meiner Meinung nach fehlt das “Sandboxing” ein wenig. Kann man mit diesen Nachteilen leben, macht Hudson das Leben der Programmierer um einiges leichter und beschleunigt die Arbeitsabläufe.

Viel Spass beim ausprobieren:

Tomcat6, Java, JDBC4, eine MySQL-Datenbank und “Communications link failure”

Damit uns der Einstieg in unser Semester-Projekt nicht so schwer fällt haben wir eine Muster-Anwendung inklusive Anleitung bekommen. Wir benutzen Java und wollen eine Web-Anwendung schreiben. Als Web-Server benutzen wir Tomcat6 und für die Datenbank MySQL.

Soweit so gut. VirtualBox war schon installiert, Ubuntu in ein paar Minuten heruntergeladen und kurze Zeit später lief mein Developpement-System. Tomcat6, JDK, eclipse, MySQL, etc waren schnell installiert und alles lief super. Die Homepage wurde angezeigt… und als ich mich “Registrieren” wollte:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

Vollständige Fehlermeldung: http://bin.esheep.ch/2

Mit dem Befehl:

telnet localhost 3306

Konnte ich zum Server verbinden, Die Datenbank war also erreichbar. Ich prüfte die Konfiguration der Datenbank. Der Benutzer war korrekt eingerichtet, die Tabelle vorhanden (alles korrekt und so wie es in der Anleitung stand). Schlussendlich lag der Fehler daran, dass zwar die Datenbank erreichbar ist, jedoch Tomcat die Registrierungs-Anwendung nicht verbinden lies. TCP-Verbindungen sind mit den Default-Einstellungen vebroten.

Mit folgendem Befehl kann das init-Script geöffnet werden:

sudo EDIT /etc/init.d/tomcat6

Da muss anschliessend die Zeile “TOMCAT6_SECURITY=yes” gesucht und durch “TOMCAT6_SECURITY=no” ersetzt werden. Falls vorhanden, muss das Kommentarzeichen vor der Zeile entfernt werden.

Anschliessend Tomcat neu starten:

sudo /etc/init.d/tomcat6 restart

Viel Spass mit Tomcat, Java und MySQL 😉

GSView – PDF drucken

An der Hochschule, an welcher ich zur Zeit studiere gibt es immer wieder Diskussionen ob das “kostenlose Drucken” abgeschafft werden soll, den immer mehr Studenten missbrauchen das Ganze und drucken vollständige Vorlesungsscripts und teilweise sogar Bücher aus. Um dem Abhilfe zu schaffen wurde eigens ein Dienst eingerichtet, welcher es ermöglicht (gegen ein kleines Entgelt) Scripts, etc. drucken zu lassen. Einerseits bleibt so die normale Infrastruktur frei wenn sie benötigt wird (z.B. um die gelösten Aufgaben auszudrucken) andererseits gibt es weniger Fehldrucke und die Scripts werden auch gleich gebunden. So weit so gut. Einzelne Professoren nutzen den Dienst auch wirklich, oder bieten selbst an die Scripts zu drucken und verkaufen diese dann den Studenten (i.d.R. zum Selbstkostenpreis). Es gibt allerdings immer wieder Professoren, welche die Übungsserien im Script integrieren. Repetierende Studenten haben dann meistens bereits ein Script und die gelösten Übungen und möchten nur noch einen Satz neue Übungen. Sollte ja auch kein Problem sein, denn diese sind im Internet als PDF verfügbar, allerdings nicht druckbar (da der Professor denkt, dass die Studenten sonst das Script nicht mehr kaufen und alles selber drucken).

An dieser Stelle kommt GSView ins Spiel. GSView ermöglicht es Postscript-Dateien, sowie PDFs und eine Reihe weitere Formate zu öffnen, zu konvertieren oder zu drucken. Dabei werden die Kopierschutzmassnahmen von Adobe ignoriert. Sofern die Studenten verantwortungsvoll damit umgehen, ist das wirklich praktisch. Die aktuelle Benutzung der Drucker lässt zwar auf anderes schliessen, allerdings braucht es bei 13’000 Studenten nicht wirklich viele schwarze Schafe damit dieser Eindruck entsteht 😉

Hier bekommt man GSView:

http://pages.cs.wisc.edu/~ghost/gsview/index.htm

Anmerkung: Das Programm ist schon etwas in die Jahre gekommen, funktioniert aber bei den meisten PDF-Dateien recht gut. Probleme gibt es wohl bei Formularen sowie den neueren Features, welche Adobe in der Zwischenzeit eingebaut hat.

Eiffel-Übung: Reversi-Spiel

Als letzte Übung müssen wir ein Spiel programmieren in Eiffel. Inklusive einem grafischen Interface.
Ich habe mich für “Reversi” entschieden. Ich werde die Grafik eher einfach halten, aber dafür eine kleine Spieler-Klasse programmieren, welche mit “MiniMax” oder einem einfachen “AlphaBeta-Algorithmus” Züge sucht.
Ich werde den Quelltext hier oder auf Black-Silence veröffentlichen.
Obwohl wahrscheinlich recht wenige etwas mit Eiffel anfangen können 😉

Hier ist erstmal ein Screenshot:

Der Quellcode folgt noch. Es hat noch einige Unschönheiten drin, allerdings hab ich im Moment keine Zeit alles auszubessern. Ausserdem ist das Ganze ja nur eine Übung 😉

Edit: Alle Spiele welche im Rahmen der Vorlesung programmiert wurden werden hier veröffentlicht: http://games.ethz.ch/09