Blog - Schlagwort HowTo

Scala Entwicklungsumgebung aufsetzen

Veröffentlicht am 25. January 2016

Ich möchte in nächster Zeit hier einige über die funktionale Programmiersprache Scala schreiben. Um darin entwickeln zu können, muss aber zunächst die “Toolchain” aufgesetzt werden, inklusive JRE (Java Laufzeitumgebung), SBT (Scala Build Tool) und Integration in einer IDE (hier: Eclipse).

In diesem kurzen Tutorial möchte ich daher kurz beschreiben, wie man alle notwendige Software installiert, um mit der Scala-Programmierung loslegen zu können.

Kategorie: Scala

Caches entwerfen mit Java

Veröffentlicht am 16. December 2010

Ich habe bei meinen aktuellen Java Web-Applikationen oft mit der Situation zu tun, dass verschiedene Handler der Applikation auf einen gemeinsamen Pool von Daten lesend (und manchmal auch schreibend) zugreifen müssen.

Das einfache Vorgehen, dass ich auch zu meinen PHP-Zeiten gewohnt war, ist es, eine Datenverbindung (soll heißen: eine offene MySQL-Verbindung) zu errichten oder aufrechtzuerhalten, und diese an alle Handler weiterzugeben, so dass diese die benötigten Daten unmittelbar aus der Datenbank lesen und Änderungen direkt in die Datenbank zurückschreiben können.

Allgemeine Überlegungen

Dieses “Read-On-Demand”-Verfahren hat aber ein paar häßliche Nachteile, weshalb ich es heute nicht mehr gerne einsetze:

  • Die Daten aus der Datenbank müssen evtl. bei jedem Request neu eingelesen und verarbeitet werden. Das kann bei großen (oder komplizierten) Daten einiges an Verarbeitungszeit kosten
    (Beispielsweise dauert das Neueinlesen der Weblog-Daten aus diesem Blog schon ein paar Sekunden, da erst die enthaltenen Bilder nachgeprüft und verkleinert werden müssen, LaTeX-Formeln verarbeitet werden usw.)
  • Bei einer Änderung der Datenschnittstelle (z.B: Änderung des Tabellenformats in der Datenbank) müssen alle Handler angepasst werden. Dabei kann man leicht eine Abfrage vergessen, die dann zu einem Bug führt.
  • In jeden Handler muss das Lesen und Interpretieren der Daten (inklusive SQL-Abfragen) hineinprogrammiert werden, was den Aufwand zum Entwickeln eines Handlers stark erhöht. Oft ergibt sich dann doppelter Code, weil verschiedene Handler die selben Daten einlesen
  • Bei mehreren gleichzeitigen Abfragen (wobei mindestens eine davon die Daten verändert) können Datenhazards auftreten, also eine Verfälschung der Daten durch eine falsche Verarbeitungsreihenfolge. Dadurch kann auch permanenter Datenverlust auftreten

Um diese Probleme zu umgehen bin ich seit kurzem auf Caches umgestiegen. Unter einem Cache verstehe ich eine gemeinsame Instanz, die den Zugriff auf eine bestimmte Datenmenge der Applikation zur Verfügung stellt:

Kategorie: Java

String-Templates mit Java

Veröffentlicht am 15. December 2010

Wenn man in Java mit komplexeren Strings arbeiten will, benötigt man oft Funktionen, um das Ergebnis aus einer Vorlage zu erzeugen, indem verschiedene Variablenwerte eingesetzt werden.
Vor allem, um Textdateien in einem bestimmten Format (z.B. CSV oder HTML) zu erzeugen, bei dem die Grundstruktur irgendwo entworfen und abgespeichert werden soll, macht ein Templatesystem für Strings Sinn.

Für die Web-Ausgabe gibt es JSP, um Inhalte in ein Template einzufügen und auszugeben.
Aber für lokale Anwendungen ist mir bisher kein solches System bekannt.
Einfache Sachen lassen sich ja in Java hartkodieren oder mit Suchen-und-Ersetzen-Methoden generieren, aber je komplizierter die Struktur wird, desto mehr Arbeit macht auch die Implementierung.

Um dieses Problem ein für alle Mal zu lösen, habe ich eine Template-Klasse geschrieben, die String-Templates mit folgenden Funktionen repräsentieren:

  • Ersetzen von Variablen
  • Auswählen von If-Then-Else-Verzweigungen
  • Iterieren über Collections (mit Code-Duplikation)

Java: Typsicherheit bei generischen Datentypen

Veröffentlicht am 22. May 2010

Ab Java 1.5 unterstützt die Programmiersprache Java die Verwendung von sogenannten “Generics” (auch generische Typen, parametrisierte Typen).

Die Idee dahinter ist es, dass sich viele Datenstrukturen, die Objekte von bestimmten Typen enthalten, für alle diese Typen gleich (oder zumindest ähnlich) verhalten.
Als Beispiel kann man hier die Listen ansehen: Egal von welchem Typ die Objekte sind, die in der Liste enthalten sind, die Liste verhält sich immer gleich (Operationen: Hinzufügen, Löschen, Iterieren, Größe bestimmen, etc.)

Kategorie: Java
Schlagworte:

Dateien ausliefern mit Java Servlets

Veröffentlicht am 2. May 2010

Wenn man dynamische Web-Applikationen programmieren möchte, stehen einem eine große Auswahl an Technologien zur Verfügung. Sehr verbreitet ist vor allem im Business-Bereich die Java-Servlet-Technologie.

Üblicherweise ist an vordester Front ein gewöhnlicher Webserver (z.B. Apache HTTPD) vorgeschaltet, der eingehende HTTP-Requests zunächst verarbeitet.

Verweist der Request auf eine dynamische Resource (also eine Seite der Web-Applikation), so wird der Request an den Servlet-Container (z.B. Apache Tomcat) weitergeleitet und dort von dem zugehörigen Servlet verarbeitet.

Kategorie: Java

Videos schneiden auf der Kommandozeile

Veröffentlicht am 10. January 2009

Besitzer einer TV-Karte oder eines an einen Receiver angeschlossenen Computers kennen sicher das Problem:
Da hat man nun endlich den lang erwarteten Film aufgezeichnet und möchte ihn für spätere Videoabende archivieren; doch leider ist er wie immer vollgestopft mit Werbung und es befinden sich mit etwas Pech auch noch die letzten zehn Minuten der vorherigen Sendung auf der Aufnahme, so dass die gemütliche Atmosphäre beim Filmabend durch ein lästiges Herumspulen bzw. -scrollen gestört wird.

Also muss Abhilfe geschafft werden:
ein Videoschnittprogramm kann die lästigen Teile, die nicht zum Film gehören, herausschneiden.

Glücklicherweise gibt es mittlerweile auch ausreichend viele Open-Source-Videoschnittprogramme, so dass diese Arbeit kostenneutral angegangen werden kann.

Ärgerlicher wird das ganze, wenn die Videodatei irgendwo auf einem Fileserver liegt, auf dem kein grafische Umgebung läuft – oder diese nicht erreichbar ist.

In diesem Falle muss man die Videodatei per Kommandozeile von ihrer ungewollten Werbe-Last befreien.
Wie dies mit ein paar Scripten und einem lokalen Mediaplayer zu bewerkstelligen ist, will ich hier kurz zeigen.

Kategorie: Linux
Schlagworte:

SSH für Fortgeschrittene I - SSH Tunnel

Veröffentlicht am 30. October 2008

Unter SSH (Secure Shell) versteht man ein Netzwerkprotokoll, über das man eine sichere Verbindung zu einem anderen Computer aufbauen kann.

Normalerweise benutzt man dieses Protokoll, um über eine sichere Leitung Kommandos auf dem entfernten Rechner auszuführen oder Dateien zu übertragen.

Aber die Vielseitigkeit dieses Protokolls erlaubt auch zahlreiche weitere Anwendungen, die einen Vorteil aus dieser sicheren Verbindung ziehen können.

Die wohl wichtigste Anwendung des Protokolls über seine Basisfunktionen hinaus sind die sogenannten SSH-Tunnel.

Kategorie: Technik
Schlagworte:

Gentoo: Pakete bearbeiten

Veröffentlicht am 31. October 2007

Wenn man Gentoo (oder ein anderes Paketbasiertes Basissystem) benutzt, kommt diese Situation schon des öfteren vor:

Man möchte ein Paket installieren, aber dieses Paket hat Abhängigkeiten zu irgendwelchen anderen Pakete, von denen man weiß, dass man auch ganz gut ohne sie auskommen kann (z.B. zusätzliche Themes), aber ohne die sich das Paket einfach nicht installieren lassen will.

Normalerweise sind dafür USE-Flags vorhanden, aber manchmal werden diese auch nicht so vollständig implementiert, wie man das gerne hätte.

Ich möchte die Situation einmal an einem ganz konkreten Beispiel verdeutlichen:

Ich möchte eine neuere Version von Gnome (welche eigentlich noch über Keywords maskiert ist) installieren. Diese neue Version verlangt allerdings eine Aktualisierung des Pakets gnome-themes, wobei in der neueren Version mein lieblings-Theme des Window-Decorators in meinen Augen “verunstaltet” ist. Sprich: ich will die alte Version behalten.

Dumm nur, dass sich gnome-2.20.0 nur installieren lässt, wenn ich gnome-themes-2.20.0 oder höher unmaske und damit zum installieren oder updaten freigebe.

Die Lösung für das Problem ist eigentlich ganz simpel: ich verändere das Gnome-Paket.

Kategorie: Linux
Schlagworte:

Verschlüsselte Datenträger und Images

Veröffentlicht am 23. December 2006

Wie man unschwer erkennt, habe ich mich auf die Suche nach (relativ) sicheren, praktikablen und kompatiblen Verschlüsselungen gemacht. Der Hintergrund: einerseits interessiere ich mich sehr fü die Kryptographie, andererseits finde ich, dass die heutigen Computersysteme geradezu nachlässig sind bezüglich unserer Geheimnisse und persönlichen Daten.

Und wer jetzt das Killerargument „wer nichts verbotetes tut, muss nichts geheimhalten, ergo Datenschützer = Terroristen“ im Hinterkopf hat, dem sei gesagt, dass dieses Argument aus logischer Sicht sehr bedenklich ist:

  • Im Allgemeinen muss man paranoid sein und davon ausgehen, dass andere (unpersönlich) dich (wirtschaftlich) ausnutzen wollen. Wenn der Viagrahersteller XY deine E-Mail Adresse rausbekommt, kriegst du nunmal zehn Spammail mehr am Tag. Oder wenn ein Gauner an deine zwischengespeicherte Kredikartennummer im Browsercache kommt, ist halt nunmal dein Geld weg. Gelegenheiten gibt es viele - und die sollte man vermeiden …
  • Der Datenschutz ist (beispielsweise im Postgeheimnis) in den Grundrechten verankert. Und ein Grundrecht sollte man nicht leichtsinnig aufgeben.
  • Es geht einfach NIEMANDEN was an, mit wem ich E-Mails schreibe, welche Webseiten ich besuche und welches Textverarbeitungsprogramm ich benutze. Ebenso haben meinen Chef meine privaten Urlaubsfotos nicht zu interessieren und meine Notizen zu Thema XY haben auch keinen zu interessieren, wenn ich das nicht möchte.

Wie auch immer, ich machte mich jedenfalls (unter Linux) auf die Suche nach anwendbare Verschlüsselungstechniken.

Jetzt habe ich mich intensiver mit direkter Hardwarenaher Verschlüsselung mittels eines Device Mappers beschäftigt.

Kategorie: Linux

Zwiegespräch mit dem Server

Veröffentlicht am 27. July 2006

Wer schon einmal einen Rootserver administriert hat, kennt sicher das leidige Problem der Datenübertragung.

Folgende Situation: Man hat auf der einen Seite den eigenen Arbeitsrechner, auf der anderen Seite den Server. Wenn man nun Dateien auf den Server aufspielen möchte, ist der einfachste Weg über FTP:

  • FTP Serverprogramm installieren
  • FTP Benutzer einstellen (evtl. Systembenutzer?)
  • Verbinden und übertragen.

Nun ist diese Vorgehensweise recht trivial und bietet doch gewisse Nachteile:

  1. FTP ist unsicher. Das wird sich auch nicht so schnell ändern. Das Benutzerpasswort wird unverschlüsselt übertragen und die Verbindung ist nicht über TLS/SSL oder sonstiges gesichert. Jeder kann den Traffic abhören.
  2. Wenn man über FTP Daten überträgt, nehmen diese Daten den Owner und die Gruppe des FTP-Benutzers an.
  3. Man kann FTP-Benutzer (mit den üblichen FTP-Servern) nur schwer auf ein Verzeichnis beschränken. Entweder der ganze Verzeichnisbaum oder nur das Home-Verzeichnis des FTP Benutzers

Man sieht also, FTP ist ganz OK für schnelle und einfache Dateiübertragung, bietet aber auch entscheidende Nachteile.

Ein anderer Weg führt über SSH (Secure Shell).

Kategorie: Technik
Schlagworte: