Samstag, 24. Dezember 2011

Spenden beim Shoppen

Inzwischen ist die Weihnachts-Großeinkaufszeit zwar vorbei, aber ich wollte trotzdem gern noch auf die Seite Bildungsspender.de aufmerksam machen. Affiliate-Programme sind bestimmt den meisten bekannt. Wird ja auch viel von Bloggern genutzt, die auf diesem Weg ein paar Euro für Produktempfehlungs-Links bekommen. Genauso ist das bei Bildungsspender.de, bloß, dass man sich dort einen Verein, eine Schule oder Kita etc. aussuchen kann, die dann die Provision des eigenen Einkaufs als Spende erhält. Feine Sache eigentlich.

Donnerstag, 22. Dezember 2011

Jampal - Java auf dem Desktop 6

Und weiter geht es mit der Serie "Java auf dem Desktop". Dieses mal mit Jampal, einem Schlanken Java-Musikplayer und Tag-Editor. In der Kategorie "Einfach und Effizient" ist bei Musik-Playern irgendwann eine Lücke aufgetaucht, die Winamp, Audacious und Konsorten mit wachsenden Fähigkeiten nicht mehr bedienen können. Hier springt Jampal in die Bresche. Die Benutzeroberfläche präsentiert sich denkbar einfach als Liste zu spielender Tracks mit den gewohnten Steuerelementen zum Abspielen.


In den Einstellungen lassen sich noch verschiedene Fein-Anpassungen vornehmen. So lässt sich auch der Mixer auswählen, was bei Verwendung des Paketes java-6-sun notwendig ist, damit überhaupt etwas aus den Lautsprechern kommt. Mit dem Paket java-6-openjdk funktionierte das bei mir automatisch.

Ebenfalls sehr gelungen ist die MP3-Tag-Integration. Tags lassen sich nicht nur Anzeigen und sind suchbar, sondern mit dem Tag-Editor auch bearbeitbar. Die Bibliothek-Dateien sind einfache Textdateien, die sich auch in jede Tabellenkalkulation einlesen lassen. Hinter der einfachen Oberfläche verstecken sich etliche Funktionen, die nur entdeckt werden wollen.

Mehr zum Thema Jampal beim Trompetenkäfer und auf der Jampal-Projektseite

Dienstag, 20. Dezember 2011

Mint Personalisierung

Inzwischen habe ich etwas Zeit gehabt mich an das neue Gnome 3 zu gewöhnen. Mir fehlte noch die Dropbox, die sich aber inzwischen ziemlich einfach per apt-get install dropbox installieren lässt. Ich kenne das noch umständlicher. Nur starten wollte sie nicht automatisch, was mit einem dropbox autostart behoben werden kann.

Dann mochte ich eigentlich immer gern das Wetter-Applet im Panel. Das gibt es auch für Gnome 3 mit der Gnome-Shell-Wetter-Extension. Das kommt zwar nicht als Debian-Paket, aber lässt sich trotzdem leicht installieren. Die WOEID, die es für den Standort braucht, lässt sich am einfachsten mit dem Yahoo-Wetterdienst ermitteln. Einfach über die Webseite den eignen Standort ermitteln. Die Zahl am Ende der URL ist die WOEID. Den Rest einfach nach Anleitung.

Montag, 12. Dezember 2011

Auf neuen Wegen

Inzwischen ist mit dem neuen Mint auch Gnome3 auf meinem Rechner angekommen. Vieles ist neu und will entsprechend konfiguriert werden. Die für mich wichtigsten Sachen:

Browser und Mail-Client habe ich gern im Autostart. Der Dialog für die Autostart-Programme wurde allerdings versteckt und lässt sich nur noch mit gnome-session-properties aufrufen.

Häufig genutzte Programme habe ich gern direkt im Panel. Das geht nun mit der Extension Frippery Panel Favorites, die alle als Favoriten markierten Programme im Panel anzeigt. Da kann ich gut mit leben.

Der HPlip-Treiber für meinen Multifunktionslaser ist nichts für schwache Nerven. Etwas wehrhaft braucht es einen kleinen Workaround, um ihn zur Mitarbeit zu bewegen. Erst später habe ich gemerkt, dass es hplip inzwischen auch in den Paketquellen gibt.

Mehr war erst mal nicht. Scheint mir alles weniger schlimm, als angenommen, mit dem neuen Gnome.

Freitag, 2. Dezember 2011

Bei "Linux und Ich" gibts was zu holen..

..und zwar etliche Preise wie Fachbücher, Abos und Hardwaresachen. Der Hauptpreis ist die schicke, kleine Computerbox Cirrus7.



Meine bisherige sieht übrigens so aus:



Ein gutes altes ThinkCentre von IBM. Funktioniert tadellos, ist aber keine Schönheit und macht bei HD auch schon mal schlapp.

via Linux und Ich

Mittwoch, 30. November 2011

Was ist neu in Java 7

Bei heise Developer gibt es eine Artikelserie, die das Neue in Java 7 sehr anschaulich zusammenfasst.

  • Teil 1 – Produktivität
  • Teil 2 – Performance
  • Teil 3 – Allgemeingültigkeit
  • Teil 4 – Integration
  • Donnerstag, 24. November 2011

    Unsigned Datatypes

    Da James Gosling der Meinung war, nicht-vorzeichenbehaftete, primitive Datentypen würden die Sprache unnötig verkomplizieren, gibt es bis dato nur die vorzeichenbehafteten. Darüber lässt sich vortrefflich diskutieren. Zum Beispiel macht der negative Zahlenbereich bei Listen keinen Sinn. Interessant ist das auch beim Unicode-Char, der eigentlich einem unsigned 16-Bit-Wert entspricht bzw. als solcher behandelt wird (1). Mit ein bisschen Bit-Opration kommt man aber durchaus an den Unsigned-Wert heran (2). Komfortabel ist allerdings anders. Dafür habe ich neulich die sehr nette, kleine Bibliothek jouu gefunden, die sich dem Thema sehr elegant annimmt. Wenn man nicht um die Operation mit unsigned Datentypen herumkommt, bietet sich damit eine gut lesbare Alternative.

    Referenzen:
    1) White Paper - The Java Language Environment
    2) unsigned : Java Glossary

    Mittwoch, 26. Oktober 2011

    Rechnen mit Zeitangaben

    Klein aber sehr nützlich ist die TimeUnit-API, die im Grunde nur aus einer Enum-Klasse besteht. Die Idee das Thema derart simpel auszugestalten ist unschlagbar.

    via Thomas Muchs Java Blog und java.net weblogs

    Sonntag, 16. Oktober 2011

    Steve Jobs - Verehrung und Kritik

    Verehrung und Abneigung, beides vereinte Steve Jobs stets auf sich. Ein visionärer Geist und ein knallharter Geschäftsmann. Während Richard Stallman froh über Steves Abtreten ist, wird ihm postum ein eigener Feiertag gewidmet. Kaum jemand, der mit seiner Meinung hinterm Berg hält und viele die sich Fragen, ob dies alles wirklich gerechtfertigt ist. Da wird argumentiert, dass Jobs eine neue Gadget und Benutzerführungsära einleutete, der zunächst kaum ein Konkurent etwas entgegenzusetzen hatte, dem aber fleißig nachgeeifert wurde. Inzwischen können wir selbst auf den billigen Tablet- und Smartphone-Derivaten herumwischen und alles ist superintuitiv. Anwendungen lassen sich nur noch über die hauseigenen Online-Stores Installieren, was nicht nur lukrativ ist, sondern auch über Inhalte bestimmen lässt. Folge ist eine privatwirtschaftliche Zensur nach amerikanischem Moralempfinden. Merken tut man davon freilich wenig. Ebenso unauffällig ist die Verdongelung der Hardware, die gemeinsam mit den Nutzungsbedingungen die Einhaltung einiger Open-Source-Lizenzen unmöglich macht. Manche Geräte wurden durch fest verbaute Akkus deutlich in ihrer Lebensdauer beschnitten oder sind mit einem modernen iTunes nicht mehr zur Zusammenarbeit zu bewegen. Die Innvoation geht schließlich weiter und altes hat da keinen Platz.

    Jobs hatte Ideen, er hatte Charisma, war Perfektionist, Verkäufer und nicht zuletzt auch Techniker. Er schaffte es eine Firma aufzubauen, die heute als eine der wertvollsten weltweit gilt. Er erdachte Geräte, die eine Vielzahl von Menschen bezaubert und fasziniert. Mit dem was er tat, schaffte er es aber auch an die 39. Stelle der Forbes-Liste. Kritiker, wie Verehrer haben genügend Argumente, denn Jobs hat viel bewegt. Mit einer Schwierigkeit haben Kritiker allerdings schwer zu kämpfen und hinterlassen mit jedem Argument einen schalen Geschmack. Es gehört sich eigentlich nicht schlecht über Tote zu sprechen.

    Sonntag, 2. Oktober 2011

    JBidwatcher - Java auf dem Desktop 5

    JBidwatcher wahr vor Jahren die Ebay-Sniping-Tool-Alternative, als ich mein Windows ganz aufgegeben habe und den Biet-O-Matic nicht mehr nutzen konnte. Dabei gefiel mit der JBidwatcher auf anhieb um längen besser. Seither wurde das Tool gut gepflegt und ist gestern bei Version 2.6.1 angekommen. Die Gelegenheit habe ich wieder genutzt und mich mit einer kleinen Spende bedankt. Wer ein Debian- oder Ubuntu-Derivat hat kann sich das Deb-Paket von hier holen.

    Donnerstag, 22. September 2011

    Technische Podcasts - Update

    Inzwischen ist der Beitrag mit den (überwiegend deutschsprachigen) technischen Podcasts kontinuierlich angewachsen. Grund also, hier noch einmal auf meinen Beitrag Technische Podcasts hinzuweisen. Ein dickes Danke geht noch an windvilla für den Stapel an Ergänzungen. Wer noch interessante Podcasts kennt, bitte in die Kommentare damit.

    Montag, 19. September 2011

    UTF-8 Erkennen

    Will man Text im UTF-8 Format einlesen, kann es mitunter eine gute Idee sein zu testen, ob der vorliegende Text überhaupt in UTF-8 vorliegt. Die ersten drei Bytes können schon einen ersten Hinweis darüber geben, da UTF-8 die Definition eines Byte order mark (BOM) erlaubt. Die Vorliegenden bytes, aus denen später ein String entstehen soll, kann also vorab mit einem if(bytes.length > 3 && bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) geprüft werden.

    Die BOM-Markierung ist aber leider nicht zwingend und deshalb nur ein Anhaltspunkt. Alles weitere lässt sich aber auch nach der Codierung noch herausfinden. UTF-8 definiert einen Replacement-Character, der immer dann Verwendung findet, wenn ein unbekanntes Zeichen vorliegt. Enthält ein String einen Replacement-Character, war die UTF-8 Codierung nicht die richtige. Eine Abfrage kann mit einem einfachen if(s.indexOf('\uFFFD') == -1) erfolgen. Der Character '\uFFFD' ist hierbei der Replacement-Character.

    Freitag, 9. September 2011

    Analogie zur Softwareentwicklung

    Sprichwörter und Analogien können helfen eine Problemsituation zu pointieren und somit klarer und verständlicher zu machen. So erinnerte mich das Sprichwort "Wenn man nur einen Hammer hat, sieht jedes Problem irgendwann wie ein Nagel aus" an die Wahl von Programmiersprache und Entwicklungs-Framework. Manchmal passt das präferierte Framework oder die Lieblingssprache nicht gut zu der Aufgabenstellung. Man kann mit einem Hammer eben gut Nägel einschlagen und - gesetzt dem Fall man hat einen Zimmermannshammer - auch wieder ziehen. Wenn es jedoch ans Sägen geht, wird es kniffelig. Aber kein Problem für den im Hämmern geübten Softwareentwickler. Mit trauter Sicherheit werden die Bretter in passende Stücke gehackt. Das Ergebnis ist funktional - was will man mehr?

    Einfach CSV

    Weil mir auch immer wieder mal ein CSV-Import oder Export unterkommt, will ich mir fürs nächste Mal die Bibliothek Super Csv merken. Mehr im Blog der Holisticon AG.

    Mittwoch, 31. August 2011

    Quo Vadis UI

    noch nie war es so wichtig, wie heute, ein User-Interface anzubieten, das von den meisten Benutzern intuitiv zu bedienen ist. In einer Zeit, in denen internetfähige Computer in fast jedem Haushalt zu finden sind, ergibt sich mit "den meisten" eine ganz andere Zielgruppe, als vor zehn oder zwanzig Jahren. Heute soll jeder mit dem technischen Gerät zurecht kommen, ganz gleich ob mit oder gänzlich ohne Computerkenntnisse. Das führt zu schicken und gut bedienbaren Oberflächen, die so weit wie möglich vom technischen Level abstrahiert werden. Ganz gleich ob Unity, Gnome3 oder OSX, Ahnung sollte man am besten nicht haben, das verwirrt nur. So manche Umgestaltung ist nämlich nur mit Unvoreingenommenheit und nicht mit technisch strukturiertem Denken oder entsprechender Erfahrung nutzbar. Schade, bietet doch die nähe zur Technologie auch immer eine gewisse Effizienz. Ich bin ehrlich gespannt, wo der Weg hingeht und welche Kehrtwendungen noch vonnöten sind. Das derzeitige Angebot moderner UI erscheint mir viel mehr für den Übergang zu etwas anderem geschaffen, als der Weisheit letzter Schluss.

    Freitag, 19. August 2011

    HTML5 let's start die Zweite

    Ein paar Linktips zu HTML5 habe ich ja vor einiger Zeit schon mal verbloggt. Interessant ist auch das H5BP-Projekt (HTML5 Boilerplate), das kürzlich die Version 2 erreicht hat. H5BP eignet sich als Vorlage für neue Projekte. Es ist nahezu alles enthalten, was man so standardmäßig braucht. Da wären zum Beispiel Styles, die ein einheitliches Browserverhalten erzielen oder das jQuery minified, aber auch noch vieles mehr. Für den Projektstart auf jeden Fall einen Blick wert.

    H5BP-Projekt

    Montag, 15. August 2011

    MiG Layoutmanager für SWT/Swing/JavaFX

    Ich kannte ihn noch nicht, scheint aber wohl total Toll zu sein, was die Lesbarkeit und Handhabung anbelangt. Muss ich mir mal merken, für den Fall, dass ich mal wieder eine UI basteln muss.

    MigLayout - Java Layout Manager

    Mittwoch, 3. August 2011

    Hello World Ausgabe beim Compilieren

    Das coolste Hello World Beispiel ist mir heute untergekommen, funktioniert aber nur in der Windows-Console.

    Zuerst mit einem Texteditor eine Datei anlegen und die folgende innere Klasse einfügen:
    class Con {
        String hi = "Hello World";
    }
    Anschließend das ganze auf der Console compilieren.



    Für die Ausgabe ist ein MS-DOS Relikt zuständig, das alle Dateien, deren Name mit CON beginnen, anstelle ins Dateisystem, auf die Console schreibt.

    via Vanilla Java

    Dienstag, 2. August 2011

    Methoden verständlich anlegen

    Nicht selten benötigt eine Methode mehrere Parameter, um ihre Aufgabe zu verrichten. Gerade bei Ergänzungen, für die eine Methode nur geringfügig anders ablaufen soll, neigen viele dazu, einfach ein Boolean- oder Integer-Flag anzuhängen. Das verhindert unnötig redundanten Code, vermindert aber die Lesbarkeit. Das ist bei der Methodensignatur noch nicht weiter wild. Deklarations-Beispiel:
    void doSomething(Document doc, String name, String value, boolean ignoreCase) wird aber beim Aufruf interessant, da bei den Flag-Parametern häufig keine Variable auf seiten des Aufrufers verwendet wird. Aufruf-Beispiel: doSomething(doc, name, value, true). Kommen solche Konstruktionen zustande, ist im Aufruf nicht erkennbar, wofür das Parameter steht. Besonders schlimm wird es, wenn sich solche Parameter häufen.

    Als Lösung würde es sich anbieten, für den Aufruf zuvor eine Variable mit passendem Namen zu deklarieren, so dass der Aufrufparameter erkennbar wird. Aufruf-Beispiel: doSomething(doc, name, value, ignoreCase). Die Lesbarkeit wird damit verbessert, jedoch eine eigentlich nicht benötigte Variable deklariert, die ausschließlich durch den Methodenaufruf Verwendung findet.

    Am ehesten würde aber vermutlich die Deklaration von Konstanten sinn machen, um die Lesbarkeit zu verbessern. So könnten für das Beispiel die Konstanten DO_IGNORE_CASE und DO_NOT_IGNORE_CASE mit dem jeweiligen boolean deklariert werden, so dass der Aufruf letztlich so aussieht: doSomething(doc, name, value, DO_IGNORE_CASE).

    Am meisten hat es sich bewährt, anstelle eines weiteren Parameter, eine neue Methode anzulegen, die den Flag-Parameter im Namen trägt. Deklarations-Beispiel: void doSomethingIgnoreCase(Document doc, String name, String value). Damit werden unnötige Schnörkel, wie Variablen-Deklarationen vermieden und sowohl Lese- als auch Schreibfluss gefördert. Es ist nämlich auch beim schreiben angenehmer die passende Methode auszusuchen, anstelle mit den Flag-Parametern zu hadern. Leider ist diese Möglichkeit nicht in jedem Fall praktikabel oder Möglich. Dann würde ich am ehesten die Konstanten-Schreibweise bevorzugen.

    Freitag, 29. Juli 2011

    OpenVPN-Clientverbindung als Windows-Dienst

    Ich benutze schon länger OpenVPN um ins Firmennetz zu kommen. Bisher habe ich das mit OpenVPN GUI gemacht, dass mich immer brav nach dem Passwort für den Schlüssel gefragt hat, bevor es die Verbindung aufbaute. Wenn man das Passwort als Klartext-Datei ins OpenVPN-Config-Verzeichnis ablegt und in der Client-Konfiguration darauf verweist, kann man die OpenVPN-Client-Verbindung auch als Dienst starten.

    Dazu einfach die Zeile askpass passwort.txt in die .ovpn eintragen und die passwort.txt gleich daneben legen. In der ersten Zeile der passwort.txt einfach das Passwort eintragen und fertig.

    Die Nummer mit der Klartext-Passwort-Datei ist allerdings ein Sicherheitsproblem.

    Mittwoch, 27. Juli 2011

    Speicheranalyse von Java-Anwendungen mit MAT

    Eclipse mit MAT
    Ich benutze in den meisten Fällen die VisualVM, wenn ich mir das Speicherverhalten einer Java-Anwendung ansehen möchte. Nach dem Motto: Andere Programmierer, andere Tools, wurde mir heute der Memory Analyzer (MAT) empfohlen, den es als RCP-Anwendung sowie als Eclipse-Plugin gibt. Ich habe es mal mit dem Plugin versucht, dass auf meinem Eclipse 3.6 auch problemlos installiert. Einen großen Abhängigkeitszoo gibt es zur Abwechslung mal nicht.

    MAT erlaubt die Analyse von Speicherabbildern, kann aber nicht, so wie VisualVM, eine Anwendung live untersuchen. Dafür kann MAT mit vielen Analyse-Funktionen punkten. Die Dokumentation ist ganz ordentlich, so dass man sich in recht kurzer Zeit mit den Funktionen vertraut machen kann. Auf mich macht das ganze einen sehr brauchbaren Eindruck.

    Donnerstag, 14. Juli 2011

    Ubuntu: Lautstärke-Schrittweite einstellen

    Ein paar ordentlich Desktop-Lautsprecher haben den Weg auf meinen Schreibtisch gefunden. Der Anschluss erfolgt über USB, was mehrere Vorteile mit sich bringt. Die Boxen bringen gleich eine Fernbedienung mit, die unabhängig vom Rechner funktioniert und doch die Lautstärke des Systems und nicht nur die, der Lautsprecher selbst regeln kann. Das ist ungefähr so, wie beim Lautstärkeregler auf der Tastatur. Außerdem gewinnt die Soundqualität, weil das Signal erst in der Soundkarte der Boxen zu einem analogen gewandelt wird.

    Unerträglich hingegen ist die Lautstärke-Schrittweite, die bei Ubuntu mit 6% vorkonfiguriert ist. Es tönt also immer ein bisschen zu leise oder ein bisschen zu laut aus den Lautsprechern. Ändern lässt sich das mit dem gconf-editor unter /apps/gnome_settings_daemon/volume_step. Ich habe das mal auf 2% runtergeregelt.

    Mittwoch, 13. Juli 2011

    Einfacher LRU-Cache in Java

    Manchmal geht es erstaunlich einfach und man muss nur wissen, wie. Jedenfalls freue ich mich über alles, was einfach und ohne Zusatzbibliothek einsatzfähig gemacht werden kann. So zum Beispiel einen LRU-Cache (least recently used). Den kann man gut benutzen, wenn man einen Cache braucht, der jedoch nicht uneingeschränkt wachsen darf. Dafür lässt sich eine LinkedHashMap verwenden, der eine Maximalgröße verpasst wird. Die Objekt-Instanzen in der LinkedHashMap rutschen mit jedem weiteren, hinzugefügten Eintrag weiter nach Hinten. Die im Beispiel implementierte Methode removeEldestEntry sorgt dann dafür, dass die letzten, und somit auch die ältesten Einträge, die über die Maximalgröße hinausreichen, weggeworfen werden. Einträge wiederum die via get angefordert wurden, wandern praktischer Weise auch gleich wieder nach vorne, was dazu führt, dass sie länger im Cache verbleiben.

    Hier also die versprochene Klasse. An Einfachheit wirklich kaum zu übertreffen:

    /**
     * Provides support for a LRU (least recently used) cache.
     * This cache is not thread safe and would need to wrap with Collections.synchronizedMap() if thread safety is needed.
     */
    public class LRUCacheMap<K, V> extends LinkedHashMap<K, V>{
        
        private final int maxSize;
        
        /**
         * @param maxSize maximum number of entries.
         */
        public LRUCacheMap(final int maxSize) {
            super(maxSize * 4 / 3, 0.75f, true);
            this.maxSize = maxSize;
        }
    
        @Override
        protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
            return size() > maxSize;
        }
    }
    

    via Vanilla Java

    Freitag, 8. Juli 2011

    Hibiscus - Java auf dem Desktop 4

    Schon lange kein Geheimtipp mehr, aber erst kürzlich bei Version 2.0 angekommen. Das Online-Banking-Programm Hibiscus ist inzwischen die quasi Standard-Open-Source-Lösung für das deutsche Onlinebanking mit HBCI. Bei mir hat Hibiscus damals mein Starmoney/Wine abgelöst. Der kostenpflichtige Update-Zwang von Starmoney war unerträglich, so dass ich glücklich war, etwas alternatives zu haben.

    Für eine Homebanking-Anwendung natürlich naheliegend und ideal zum Testen, ist die Spenden-Schaltfläche links unten. Eine kleine Anerkennung für den Entwickler, dessen Software in häufiger Nutzung ist, sollte ja eigentlich drin sein.

    Hibiscus bei heise

    Montag, 27. Juni 2011

    Swing Star Rating Panel

    Star Rating
    Kürzlich brauchte ich eine Swing-Komponente, die ein paar Sternchen darstellen kann. Weil ich mich eigentlich nicht mit der Erstellung der Komponente, sondern viel mehr mit dessen Einsatz befassen wollte, hoffte ich etwas fertiges zu finden, was sich auch in einer Open-Source-Anwendung nutzen ließe. Tatsächlich gibt es eine einfach, funktionstüchtige Komponente, die sogar Public Domain ist. Das nenne ich mal unkompliziert. Benutzen kann man die Komponente wie folgt:

    StarRater starRater = new StarRater(5, 3.61, 3);
    starRater.addStarListener(new StarRater.StarListener() {
      public void handleSelection(int selection) {
        // a new number of stars has been selected
        do something...
      }
    });
    add(starRater);   // add the component to the container...
    

    Download Star Rating Source-Code by NOBLE MASTER DEVELOPER’S BLOG

    Freitag, 24. Juni 2011

    Shape Collage - Java auf dem Desktop 3

    Shape Collage ist ein Java-Desktop-Tool, das ich schon länger auf der Platte habe und irgendwie extrem interessant finde, aber ehrlich gesagt noch nie ernsthaft nutzen konnte. Mit Shape Collage lassen sich eine Vielzahl von Bildern zu einer beliebigen Form zusammensetzen. Dafür gibt es ein paar vordefinierte Formen oder man greift selbst zum Griffel und skizziert die Zielform selbst. Das Ganze ist eine kommerzielle Anwendung, die man aber auch in einer brauchbaren Demoversion herunterladen kann.

    Donnerstag, 23. Juni 2011

    9 Gründe kein iPhone 5 zu kaufen

    Und ja, es ist wahr. All die coolen Features wurden von Steve ignoriert und haben es nicht ins iPhone 5 geschafft. Das zehnte Feature, bevor ich das iPhone kaufen würde, wäre ein offenes Betriebssystem. Ich fürchte, bevor es dazu kommt, kann es die anderen 9 Sachen.


    via BRAAAAAAAAAAAAAINZ!!!!

    Mittwoch, 22. Juni 2011

    Buntes für Eclipse

    Vor einiger Zeit habe ich ja schon mal was zum Thema Color-Themes und Eclipse geschrieben. Das ganze ist inzwischen eine ganze Ecke weiter und man kann richtig schicke Themes basteln oder einfach eines von den vielen fertigen benutzen. Richtig schick das Ganze!

    Eclipse Color Themes

    Montag, 20. Juni 2011

    MyJgui - Java auf dem Desktop 2

    Wenn ich mal an eine MySQL-Instanz ran muß, dann ist üblicher Weise phpMyAdmin die erste Wahl. Deutlich effizienter geht es aber immer noch mit einer zünftigen Desktop-Anwendung, wo wir dann bei MyJgui wären. Das Tool steht unter GPLv2 und bringt so im groben und ganzen das Nötigste mit, um den Überblick über seine Datenbank zu behalten und ein paar SQL-Queries abzusetzen. Wer von den Tools der großen kommerziellen verwöhnt ist, wird MyJgui zwar als puristisch empfinden, es taugt aber durchaus  was und lohnt einen Blick.

    Ebenfalls ein Java-Tool für Datenbank-Design, aber leider nicht Open-Source, ist das Aqua Data Studio. Eigentlich darf man das nur zum Ausprobieren herunterladen und soll es dann kaufen, bekommt aber trotzdem eine uneingeschränkte Vollversion.

    Freitag, 17. Juni 2011

    Auch kleine Änderungen besser Testen

    Was ein kleines Leerzeichen an der passenden Stelle anrichten kann... na am besten bei bumblebee weiterlesen. Die Moral aus der Geschichte ist auf jeden Fall "Besser Testen". Ansonsten hat man die Hähme vollständig auf seiner Seite.

    Samstag, 11. Juni 2011

    JShot - Java auf dem Desktop 1

    Es heißt ja immer, es gibt keine brauchbaren Java-Programme für den Desktop. Weil das nur bedingt richtig ist, werden gelungene Java-Desktopanwendungen in Zukunft hier Erwähnung finden.

    Den Anfang macht JShot, was nicht nur ein Tool für die Erstellung von Screenshots ist, sondern eine Vielfalt an nützlichen Funktionen integriert, die für Erklärungszwecke nützlich sind. So lässt sich der Screenshot mit der Pfeil- oder Textmarkerfunktion aufbereiten, darin malen oder texten. Das Ergebnis kann anschließend per FTP, ImageShack, Skype, Twitter, Picasa, Dropbox oder Minus veröffentlicht werden. Das ideale Tool also, um mal eben einen Screenshot zu einer Erklärung dazuzulegen.

    JShot ist zwar kostenlos, leider jedoch nicht Open-Source.

    via MakeTechEasier

    Freitag, 10. Juni 2011

    It's Tooltime

    Bill zeigt auf seinem Youtube-Kanal, wie Hardware funktioniert. Dafür nimmt er sie auseinander und erklärt das Zusammenspiel der einzelnen Komponenten. Wirklich sehr anschaulich.



    via Kraftfuttermischwerk

    Montag, 16. Mai 2011

    Die intern-Methode der String-Klasse

    Die Klasse java.lang.String besitzt eine intern-Methode, um an die String-Referenz zu gelangen, die für den String-Wert im Java-Cache abgelegt wurde. Das ist nützlich, wenn ein String durch new erzeugt, oder mittels StringBuilder zusammengefügt wurde. Dann nämlich ist der String nicht aus dem Javainternen-Cache abrufbar. Das hat zur Folge, dass zum Beispiel bei der Verwendung von equals der tatsächliche Inhalt der Zeichenketten verglichen werden muss, was unperformanter ist, als der einfache Referenzvergleich, der sonst als erstes von der equals-Methode ausgeführt wird. Zur Verdeutlichung: das folgende Beispiel ergibt false

    "foo" == new StringBuilder().append("f").append("oo").toString()

    Dieses hier hingegen ist true

    "foo" == new StringBuilder().append("f").append("oo").toString().intern()

    Wird ein neu gebauter String später häufig verglichen, so kann es sich lohnen die intern-Methode zu verwenden, um unnötige operationen beim Stringvergleich zu vermeiden.

    Interessant ist übrigens, dass das Java-Framework selbst ebenfalls davon gebrauch macht, um den Vergleich mit equals gleich ganz zu vermeiden. In der Klasse java.lang.Class findet sich zum Beispiel folgende Methode, die aber nur deshalb sicher funktioniert, weil die getName-Methode der Klasse java.lang.Field garantiert, immer einen interned-String zurückzugeben.

    // Helpers for fetchers of one field, method, or constructor
        private Field searchFields(Field[] fields, String name) {
            String internedName = name.intern();
            for (int i = 0; i < fields.length; i++) {
                if (fields[i].getName() == internedName) {
                    return getReflectionFactory().copyField(fields[i]);
                }
            }
            return null;
        }
    

    *Update 19.5.11*
    Links: mindprod, enicholas

    Montag, 9. Mai 2011

    Auskommentierter Code

    Auskommentierter Code ist absolut nichts seltenes. Aber wie oft ist er eigentlich noch nützlich? Vor allem, wenn es Code ist, den man nicht selbst per Kommentarzeichen aufs Altenteil geschickt hat. Als ich als Entwickler anfing, sagte mir mal ein erfahrenerer Kollege, auskommentierter Code sei so eine Art Code-Dokumentation und würde für sich selbst stehen. Ich konnte damit nie viel anfangen und weiß heute, dass das quatsch ist. Der Auskommentierte Code sagt nämlich kaum etwas aus, sondern stört viel mehr den Lesefluss. In den meisten Fällen weiß ich nämlich nicht einmal, warum der Code auskommentiert wurde. War er defekt? Unperformant? Hat er Seiteneffekte Produziert? Wurde er vielleicht zum Testen auskommentiert und sollte später wieder rein? Das könnte natürlich auch dazugeschrieben werden, was mir aber in den seltensten Fällen untergekommen ist. Ich stehe mitlerweilen auf dem Stand, dass das Versionierungssystem viel besser für Altcode geeignet ist als Kommantarloser Kommentarcode. Im Versionierungssystem lässt sich das alte Codefragment in seinem originalen Lebensraum begutachten, was viel mehr Aussagekraft besitzt, als etwas loses.

    Das schönste sind aber Stellen, die für Verwirrung sorgen. In einem Projekt habe ich eine Codestelle, an der seit 2007 steht: TODO: Das muss noch ausprogrammiert werden. Das ist natürlich ein Hinweis, mit dem kein Mensch mehr etwas anfangen kann. Scheinbar hat sich an der bestehenden Funktionalität keiner mehr gestört.

    Ebenfalls häufig anzutreffen sind auskommentierte stellen wie alert("hier") oder System.out.println("message +" " + id"). Das sind dann Überreste, die beim Debugging gebraucht wurden und schlicht vergessen wurden, wobei "vergessen" gut gemeint ist. Ich habe schon Code gehabt, wo ich ein Minnimum von mindestens zwei auskommentierten Debugg-Meldungen pro Methode hatte. Das stört dann sehr beim Lesen und ich kann dem auch nichts praktisches mehr abgewinnen.

    Zum Glück nicht ganz so häufig, aber leider auch nicht selten, sind die Verquickungen von Auskommentierten und funktionalem Code. Da habe ich gerade ein aktuelles Beispiel vor mir. Ich nehme an, so etwas entsteht, wenn man mal eben etwas ausprobieren will. Ob die Kommentarzeichen nur vergessen wurden oder das return an dieser Stelle einfach falsch gewesen ist, lässt sich leider nicht mehr so einfach herausfinden.

        else if (document.multiBox.id != formDiv.id){
        //  return;
        }

    Samstag, 7. Mai 2011

    Python Lesestoff

    Lesestoff für Python Einsteiger. Die Python Special Edition 1 vom Full Circle Magazine ist eine Zusammenfassung der Serie „Programming in Python“ der Ausgaben 35 bis 42.

    via menzer.net

    Swing-Bibliothek Japura

    In letzter Zeit habe ich mal wieder ein bisschen was mit Swing gemacht. Dafür wollte ich eine Multiselect-ComboBox-Komponente, die ich in dem noch jungen Swing-Framework Japura (LGPL) gefunden habe. Auch nach ein bisschen Herumprobieren gefällt mir Japura gut. Einiges an Features hat noch platz, dafür sind die Komponenten nicht überfrachtet und eigene Änderungen sind ebenfalls schnell eingepflegt. Einzig die Dokumentation beschränkt sich auf einige Beispiele auf der Webseite während die Code-Dokumentation gegen null tendiert. Neben verschiedenen Komponenten, bringt Japura auch ein paar nützliche Klassen, zum Beispiel für Controller/View-Aufbauten oder für Hintergrundprozesse mit.

    Donnerstag, 5. Mai 2011

    Einstieg in die Arbeit mit regulären Ausdrücken

    Wenn man jemandem die Arbeit mit regulären Ausdrücken näher bringen oder erklären möchte, gibt es da die ganz klassische Klick-Lernschwelle - also jene Lernschwelle an der man es plötzlich verstanden hat, es also Klick gemacht hat. Dazu ist es nützlich als erstes zu verstehen, wie die Ausdrücke funktionieren. Dazu habe ich kürzlich etwas gefunden, was zum Spielen einlädt und bei dem gleich praktische Beispiele produziert werden können. Nämlich den regular expression generator txt2r. Der erzeugt zwar ein Perl-Script, aber das soll nicht weiter stören. Der reguläre Ausdruck lässt sich ohne weiteres daraus zusammensetzen.

    Wenn dann genügend zusammengeklickt wurde, sollten die Ausdrücke verfeinert werden. Dafür ist zum einen eine Übersicht sehr nützlich, wie sie in der Java-Klassendokumentation vorliegt, als auch ein Editor, der einem zeigt, welcher Teil der Zeichenkette bei Veränderungen des Ausdrucks noch passt und welcher nicht. Da hat mir der Online-Editor RegExr sehr gute gefallen. Die zuvor mit txt2r zusammengeklickten Ausdrücke können hier nämlich 1a erweitert und verändert werden.

    Mittwoch, 4. Mai 2011

    Linktips

    Software-Kanban im Einsatz: Ein handliche Einführung in Kanban für den Einsatz in der Softwareentwicklung.
    Addition mit Grazie: Magische Quadrate in der Mathematik. Wozu der Mensch das braucht erschließt sich wahrscheinlich nur Mathematikern, aber interessant ist es trotzdem.
    Softwaremetriken: Zyklomatische Komplexität: Die McCabe-Metrik in verständlicher Kürze. Absolut Lesenswert!

    Montag, 18. April 2011

    Regexp-Tutorial

    Die Grundlagen von regulären Ausdrücken sollte man als Entwickler eigentlich beherrschen. Trotzdem kenne ich viele, denen das völlig abgeht. Über Sinn und Unsinn lässt sich auch vortrefflich diskutieren, trotzdem begegnen sie einem immer wieder. Deshalb der Linktip: regexp-evaluator.de mit klasse Stoff zum Reinlesen.

    Samstag, 16. April 2011

    Neue Hardware: Ein HP CM1415fn color MFP


    Mein alter Multifunktionslaserdrucker, ein Brother 7440N hat mir gute Dienste geleistet, muss aber nun aufs Altenteil. Leider nur drei Jahre hat er durchgehalten, weshalb ich mich auch nicht erneut für einen Brother entschieden habe. Der Linuxsupport war in Ordnung, die kurze Lebensdauer nicht.

    Weil die Linuxunterstützung für mich unabdingbar ist und die Preisliga nicht allzu hoch angesiedelt sein sollte, habe ich beim HP CM1415fn color MFP zugegriffen. Ein Farblaserdrucker, den ich inzwischen schon auf Herz und Nieren durchtesten konnte. Ich bin insgesamt zufrieden, aber von vorne.

    Für den Linuxtreiber gibt es von HP das OpenSource-Projekt HPLIP. Die Installation ist zwar nicht DAU-Geeignet, aber mit dem Installationsprogramm nicht weiter schwierig. Einzig bei meinem Linux-Mint musste ich bei der Distributionserkennung behaupten, ich hätte ein Ubuntu, dann klappt es auch mit den Abhängigkeiten, die der Treiber nachinstallieren will.

    Das Ergebnis hat mich sehr überrascht. Der Drucker funktioniert auf Anhieb und das Scannen via XSane klappt ebenfalls sofort (und alles im Netzwerk). HPLIP bringt auch gleich ein Programm mit, das sich im Panel verankert und Informationen, wie Tonerstand, Status etc. ausgibt.

    Für die Installation unter Windows gibt es einen "Minimalmodus". Es graute mir nämlich schon vor den vielen, für mich unnützen Programmen, die HP meiner Erfahrung nach mitbringt und die sich gern irgendwo im System verankern und natürlich auch beim Booten mitgestartet werden müssen. Davon ist - Dank dieser Minimaloption - angenehmer Weise nichts zu sehen.

    Der Drucker selbst ist selbst für ein Multifunktionsgerät ein ziemliches Monster. Mein Brother war deutlich kompakter, konnte aber zugegebener Maßen auch keine Farbe. Die Schublade fürs Papier ist ziemlich wackelig. Der Rest wirkt wertig verarbeitet. Die Geräuschkulisse, die beim Drucken entsteht, ist laut und klingt teils, als würde das Gerät gleich auseinander fallen.

    Ansonsten bietet der Drucker eine Menge Funktionen. Scannen kann er auf einen USB-Stick, aber leider nicht auf einen FTP-Server, wie mein Brother vorher. Was mir neu war, sind Apps für den Drucker. Ich brauche sie nicht und habe sie nicht weiter beachtet. Auch die Funktion, dass der Drucker auf E-Mails bei einem HP-Mailkonto lauscht, benötige ich eher nicht. ich wollte das mal antesten, bin aber leider bereits bei der Anmeldung gescheitert, weil der "Weiter"-Button auf der HP-Anmeldeseite nicht funktionieren wollte.

    Mein Fazit: Wenn auch zu laut, für die Preisliga ein ordentliches Gerät mit guter Linux-Unterstützung.

    *Update 20.4.2011*
    Wie mir inzwischen aufgefallen ist, gibt der Drucker hin- und wieder ein kurzes, deutlich vernehmbares Geräusch von sich, wenn er eine Weile im Standby ist. Was der da genau tut erschließt sich mir nicht.
    *Update 30.9.2011*
    Jetzt habe ich den Drucker schon eine ganze Weile. Weil der Drucker so geschätzt alle 12 Stunden aus dem Standby erwacht und seinen Motor ein bisschen drehen muss, habe ich ihn meistens ganz aus. Nervig ist dabei aber, dass die Zeit bis er wieder einsatzbereit ist, echt lang ist. Zwei Minuten sind es gewiss, bis ich dann endlich mal Scannen oder Kopieren kann. Ausdrucke nimmt er schon früher entgegen. Es ist auch nicht so, dass das Display blockieren würde. Ich komme in den Scan- oder Kopierdialog, bekomme dann aber eine Fehlermeldung. Auch das ist nervig. Warum lässt mich HP da auf dem Display rumpatschen, wenn das ganze Ding eh noch nicht soweit ist? Der Scan auf USB erfolgt übrigens nur in jpg. Da war ich mit PDF bei anderen Herstellern auch schon mal besseres gewöhnt. Im Ergebnis habe ich nach einem Scan also eine Bilddatei pro Seite anstelle eines PDF-Containers. Das sind alles Kleinigkeiten, die aber irgendwie die Liebe zum Detail missen lassen. Als Fehlkauf würde ich das ganze nicht einstufen, aber Softwaremäßig hätte ich HP da mehr zugetraut. Wenn wieder mal eine Anschaffung ansteht, werde ich mehr auf das Angebot von Brother gucken. Die Brotherfirmware meines alten war jedenfalls brauchbarer.

    Dienstag, 12. April 2011

    Sortieralgorithmen mit ungarischen Volkstänzen erklärt

    Trockene Theorie, wie so einen Sortieralgorithmus, mittels ungarischer Folklore zu erklären, ist schon eine klasse Idee. Schließlich gehört das zum Handwerkszeug. Wie sonst kann man fachkompetent entscheiden, welcher Algorithmus zu welchen Daten passt.


    Mehr davon gibt es beim i-Programmer.

    via Minds Delight

    Samstag, 9. April 2011

    BerlinExpertDays Zusammenfassung

    Die letzten zwei Tage habe ich ja die Hörsaalbank gedrückt und verschiedenen Vorträgen gelauscht. Der Themenmischmasch war bunt und die meisten Sprecher ohne Einschlafgefahr hörbar. Sehr interessant fand ich die Variante, einen Vortrag, der eigentlich für eine halbe Stunde länger konzipiert war, einfach schneller abzunudeln.

    Zusammenfassend kann man einen Trendfaden durch die verschiedenen Themen entdecken. Zwar scheint Agile Softwareentwicklung allgemein bekannt und auch akzeptiert, der Nachholbedarf in Umsetzung und Einführung jedoch ungebrochen zu sein. Weiter scheint man einhellig der Meinung, dass NoSQL auch im Serverbereich, stark im kommen ist. NoSQL ist auf jeden Fall ein spannendes Thema, in das man derzeit gut einsteigen kann.

    Dienstag, 5. April 2011

    Eclipse-Code-Template für Logger

    Ein Eclipse-Code-Template will ich noch zum besten geben. Nämlich eines für den Javaeigenen Logger, das ich vorhin schnell zusammengestrickt habe:

    Logger.getLogger(${enclosing_type}.class.getName()).log(Level.WARNING,
    "${cursor}",${exception_variable_name});
    ${logger:import(java.util.logging.Logger)}

    ${level:import(java.util.logging.Level)}

    Siehe auch Eclipse-Code-Template über eine Map iterieren
    Und einiges nützliches gibt es auch wieder beim Stackoverflow.

    Freitag, 1. April 2011

    Eclipse-Code-Template über eine Map iterieren

    Über eine Map iterieren ist nicht weiter schwierig. Eine besonders einfache Variante, wenn man Key- und Value beim iterieren haben möchte, habe ich vor gut zwei Jahren mal gepostet. Weil ich das hin- und wieder brauchen konnte, habe ich mir ein Eclipse-Code-Template dafür erstellt.

    Einfach unter Window-Preferences auf der linken Seite Java->Editor->Templates auswählen und ein neues Template mit folgendem Inhalt anlegen.

    ${:import(java.util.Map.Entry)}
    for (Entry<${keyType:argType(map,0)},${valueType:argType(map,1)}> entry :
    ${map:var(java.util.Map)}.entrySet()) {
      ${keyType} key = entry.getKey();
      ${valueType} value = entry.getValue();
      ${cursor}
    }

    Weiter habe ich im Feld Name for eingetragen, damit sich das in die übliche Liste einfügt, die ich beim Code-Completion nach Eingabe von for erhalte. Also im Java-Editor unter einer Map-Deklaration ein for und anschließend Ctrl+Space eingeben.

    Dienstag, 29. März 2011

    Passwörter hashen, salzen, speichern

    Vor einiger Zeit habe ich mich ja schon mal über Passwörter in Webanwendungen ausgelassen. Eigentlich ist ohnehin Konsens, dass Passwörter nicht im Klartext in die Datenbank geschrieben werden sollten. Besser ist es einen Hash aus dem Passwort zu erzeugen, der dann nur noch beim Authentifizieren verglichen wird. Weil beim Knacken von Passwörtern aber auch auf Fertig-Hashes zurückgegriffen werden kann, macht es Sinn einen weiteren, zufälligen Wert zum Hashen des Passworts hinzuzuziehen - den Salt. Der Salt muss zwar ebenfalls bei jeder Authentifizierung bereit stehen und gespeichert werden, trotzdem erschwert der Salt das Knacken. Der Salt wird für jedes Passwort zufällig erzeugt, so das selbst die Hashes identischer Passwörter unterschiedlich sind. Um das an einem Beispiel zu zeigen, habe ich mal was vorbereitet (Die Hilfsmethoden- und Klassen folgen am Ende des Beitrags):

    public SaltedPass flavorWithSalt(String passwd) throws Exception {
      final Random rand = new Random();
      final MessageDigest m = MessageDigest.getInstance("MD5");
      final byte[] salt = new byte[12];

      rand.nextBytes(salt);
      m.update(salt);
      m.update(passwd.getBytes("UTF8"));
      byte hash[] = m.digest();

      return new SaltedPass(toHex(salt), toHex(hash));
    }

    Der Methode flavorWithSalt wird das gewünschte Benutzerpasswort im Klartext übergeben. Die Methode generiert einen Zufallswert, der als Salt verwendet und beim Hashen einbezogen wird, sowie den Hash selbst. Die Anwendung darf nur den zurückgegeben Hash und den Salt speichern.

    Für die Authentifizierung ist die Passworteingabe im Klartext und der Salt erforderlich. Beides ergibt wieder einen Hash, der mit dem gespeicherten Hash verglichen wird. Sind die Hashes identisch, ist die Authentifizierung erfolgreich.

    public boolean validate(String passwd, SaltedPass flavored) throws Exception {
      final MessageDigest m = MessageDigest.getInstance("MD5");
      final byte[] salt = fromHex(flavored.salt);

      m.update(salt);
      m.update(passwd.getBytes("UTF8"));
      byte hash[] = m.digest();
      if(toHex(hash).equals(flavored.hash)) {
        return true;
      }
      return false;
    }

    Damit das ganze compiliert, sind noch die Methoden zum Wandeln der Byte-Arrays in ihre hexadezimale String-Representation und zurück, sowie die Klasse SaltedPass, die als Dataholder dient, erforderlich.

    private String toHex(byte[] bytes) {
      final StringBuilder result = new StringBuilder(bytes.length * 2);
      for (int i = 0; i < bytes.length; i++) {
        result.append(Integer.toHexString((0x000000ff & bytes[i]) |   0xffffff00).substring(6));
      }
      return result.toString();
    }

    public static byte[] fromHex(String hexString) {
      final char[] hex = hexString.toCharArray();
      final int length = hex.length / 2;
      final byte[] raw = new byte[length];

      for (int i = 0; i < length; i++) {
        int high = Character.digit(hex[i * 2], 16);
        int low = Character.digit(hex[i * 2 + 1], 16);
        int value = (high << 4) | low;
        if (value > 127) {
          value -= 256;
        }
        raw[i] = (byte) value;
      }
      return raw;
    }

    private class SaltedPass {
      private String salt;
      private String hash;

      SaltedPass(String salt, String hash) {
        this.salt=salt;
        this.hash = hash;
      }

      public String toString() {
        return "salt:" + salt + " hash:" + hash;
      }
    }

    Und zuletzt noch die Main-Methode zum Ausprobieren:

    public static void main(String[] args) throws Exception {
      String pass = "testpass";
      SaltedPass flavorWithSalt = new SaltTrialout().flavorWithSalt(pass);
      System.out.println(flavorWithSalt);

      boolean validate = new SaltTrialout().validate(pass, flavorWithSalt);
      System.out.println(validate);
    }

    Update 30.3.11
    Source zum Download

    Montag, 28. März 2011

    Kostenlose E-Book Software zum lesen und bearbeiten

    Trotz des mageren Buch-Angebots werden E-Books auch in Deutschland allmählich populärer. Ich nenne seit letztem Jahr ein Pocketbook 902 mein eigen. Deshalb heute ein paar Software-Tips für Programme, die sich inzwischen als nützlich erwiesen haben.

    Beim Thema E-Book muss man natürlich mit Calibre den Anfang machen. Eine Software zum Verwalten und Konvertieren von E-Books. Calibre ist wohl das prominenteste Programm, wenn es um E-Books geht. Eine freie alternative für Verwaltung und Konvertierung gibt es wohl nicht, was ich schade finde, weil mir die Software nicht besonders gefällt. Sie ist weder besonders intuitiv, noch sonderlich gut in der Handhabung. Füttert man Calibre mit Büchern, werden diese indiziert und in ein eigenes Verzeichnis abgelegt. In das Verzeichnis gucken möchte man lieber nicht. Will man seine Bücher in eine eigene Verzeichnishierarchie ablegen, kann man Calibre als Verwaltungstool im Grunde vergessen.

    Das für Lesegeräte geläufigste Buchformat ist wohl Epub. Das Format fühlt sich nicht an einen festen Textfluss gebunden und besteht im Wesentlichen aus einer Ansammlung von HTML, CSS und XML-Dateien.

    Zum Überführen von Inhalten in das Epub-Format hat sich für mich Sigil als der ideale Arbeitsbegleiter erwiesen. Sigil ist so etwas, wie ein WYSIWYG-Editor für epubs. Inhalte finden so per Copy&Paste ihren Weg in das Epub, so das ich sie später locker auf dem Pocketbook lesen kann. Auch sonst bringt Sigil alles mit, was für die Epub-Erstellung so notwendig ist.

    Wenn man ein paar Bücher sichten, oder mal eben am Arbeitsplatz ohne Lesegerät lesen möchte, ist Lesesoftware für den Desktop nötig. Hier führt wohl FBReader wieder die Bekanntheitsliste an. Man merkt aber sehr deutlich, dass FBReader eigentlich nicht für den Desktop, sondern für Lesegeräte gedacht ist. Weil ich die Software unhandlich fand und manche epubs auch nicht so recht mit FBReader wollen, habe ich mangels alternative auf das Firefox-Plugin EPUBReader zurückgegriffen. Vor einiger Zeit bin ich dann noch auf die Lesesoftware Coolreader gestoßen. Ähnlich wie FBReader ist Coolreader eigentlich für Lesegeräte gedacht, das Interface ist aber besser für den Desktopeinsatz geeignet. Heute bin ich noch auf die Lesesoftware Lucidor aufmerksam geworden. Lucidor enthält außerdem eine ganz ordentliche Katalogfunktion, die aber nur Epub-Dateien abdeckt. Ansonsten würde ich Lucidor die beste Desktoptauglichkeit attestieren. Außerdem gibt es noch das Lucidor-Firefox-Plugin, was ich aber noch nicht testen konnte. 

    Zuletzt noch ein Lesetip. Wer auf dem Laufenden bleiben will, sollte am besten den Feed von lesen.net abonnieren.

    Links:
    Verwaltung und Konvertierung: Calibre
    Epub-Authoring: Sigil
    Lesesoftware: FBReader, EPUBReader, Coolreader, Lucidor

    Freitag, 25. März 2011

    HTML5 let's start

    Die Spielwiese für HTML5 wird allmählich größer und weil ich immer noch gern ausprobiere, habe ich mal ein paar Sachen zusammengesucht.

    Für den Start eines HTML5-Projektes ist der HTML5-Templategenerator Initializr hervorragend geeignet. Der Code ist super, um schon mal was zum durchstarten zu haben. Das, was der da generiert, sieht codeseitig durchweg gut aus und könnte so manch einen HTML-Schrauber noch inspirieren.

    Im weiteren kann man sich ein wenig auf HTML5 & Friends oder html5rocks umsehen. Beides sind Demo-Seiten, die zeigen wollen, was in HTML5 alles drin steckt. Zuletzt kann man dann auch noch ein bisschen niedriger stapeln und die etwas einfacheren Demos von html5demos durchprobieren.

    Der Weg ist eindeutig: Es wird interaktiver und bunter. Dem ist ja bereits so, seit Google mit seinen Mailreader gezeigt hat, wie eine Browseranwendung aussehen kann. Jedenfalls warten eine menge technische Spielereien darauf ausprobiert zu werden.

    Bilder im Batch konvertieren und verarbeiten

    Heute mal wieder eine Programm, das mir gut gefällt. Der Bildkonverter XnConvert ist zwar nicht OpenSource aber es gibt ihn kostenlos und vor allem für alle gängigen Betriebssysteme - sogar als 64bit-deb, was bei unfreier Software sonst gerne mal fehlt. Die Stärke des Programms liegt ganz klar in der komfortablen Oberfläche, weil Batch-Konvertierung unter Linux ja sonst nicht so spannend ist. Mit der Bash und ImageMagick hat man ja eigentlich schon alles, was man so für die Massenkonvertierung brauchen könnte.
    Neben der Formatkonvertierung kann XnConvert aber noch mehr, was es auch erst richtig interessant macht. Es erlaubt nämlich den Einsatz von Filtern, mit denen zum Beispiel Texte eingebettet, EXIF-Daten gelöscht oder Bildmasken aufgesetzt werden können. Die Filterauswahl ist umfangreich und gut handhabbar. Alles in allem macht das Programm einen runden Eindruck.

    XnView v1.0
    via stadt-bremerhaven

    Donnerstag, 24. März 2011

    HTML5 von Stefan Münz

    Das HTML5-Buch von Stefan Münz und Clemens Gull ist draußen. Das Buch kann vollständig online gelesen werden. Fairer Zug, wie ich finde. Das schafft zudem den Vorteil der Online-Durchsuchbarkeit. Das Buch gibt es auf http://webkompetenz.wikidot.com/docs:html-handbuch

    via golem

    Mittwoch, 23. März 2011

    HTML generieren mit rendersnake

    An APIs und Systemen, die HTML auf den Bildschirm bringen, herrscht ja kaum ein Mangel. Ob XSL generiert oder per JSP erzeugt, für beinahe jeden Geschmack ist was dabei. Kürzlich bin ich auf das renderSnake-Projekt aufmerksam geworden. Damit lässt sich HTML mittels Kettenschreibweise (Fluent-Pattern) erzeugen. Ich würde den Einsatz an der Stelle verorten, wo JSP nicht gemocht wird und reine Servlets auch nicht wirklich hübsch anzusehen sind, wenn sie HTML ausgeben sollen. Bestimmt fällt dem einen oder anderen aber noch was besseres ein.

    Mit renderSnake sieht das ganze dann zum Beispiel so aus:

    public void renderOn(HtmlCanvas html) throws IOException {       
        html
          .div(id("search"))
          .form(
               id("search-form")
               .method("POST")
               .action(this.getClass().getName()))
             .write("Search ")
             .input(name("search-text").type("text"))._input()
          ._form()
          ._div();
        }
    

    Auf jeden Fall eine interessante Lösung, weil zum einen die durchgängige Schreibweise einen gut lesbaren Code erzeugt, zum anderen maximale Flexibilität erhalten bleibt, eben weil man den Java-Code-Scope nie verlässt. Somit stehen auch die gewohnten Refactoring-Tools weiter zur Verfügung, die es zwar auch für JSP gibt, meiner Meinung nach aber an das Eclipse-Refactoring für Java nicht herankommen.

    Interessant wäre noch, wie gut das Zusammenspiel mit CSS aussieht bzw. wie man das ausgestalten könnte. Dazu habe ich zumindest nichts vorgegebenes gefunden. Aber man kann ja auch selber noch kreativ werden.

    via Dark Views
    related java.dzone.com, philemonworks.wordpress.com
    project renderSnake

    Dienstag, 22. März 2011

    Java einfach modernisiert mit Lombok

    Es gibt ja einige Dinge, die Java als unmodern angelastet werden, oder die sprachlich schlicht unhandlich sind. Seien es checked Exceptions oder das ewige generieren von Getter- und Setter-Methoden, um nur zwei Themen zu nennen. Für sprachlich frischen Wind kann das Project Lombok sorgen, das eine Hand voll Annotations für genau diese Zwecke bereit stellt. Ein Beispiel: Anstelle zu einem Feld die Getter- und Setter-Methoden zu generieren, deklariert man für das Feld kurzerhand eine @Getter @Setter Annotation. Gleichermaßen lässt sich anstelle vom ewigen hochgereich von checked Exceptions einfach die @SneakyThrows Annotation einsetzen, die den Compiler austrickst, so dass man bei Bedarf auf die Behandlung von checked Exceptions an der Stelle ihres Auftretens verzichten kann. Diese und weitere Features sorgen aufgeräumteren Code, der den Blick aufs Wesentliche schärft. Alles in allem sicher Geschmackssache, aber mir gefällts.

    Freitag, 18. März 2011

    Entwicklung des Browsermarktes

    Sehr hübsch visualisiert. Zwar fehlt der Mosaic, aber ansonsten spiegelt das die Entwicklung im Browsermarkt gut wieder. Man muss es aber auch miterlebt haben, um wirklich etwas damit anfangen zu können. Wie wichtig Netscape damals war und wie der Explorer aufgeholt hat, einfach nur, weil er bereits vorinstalliert war. Ich weiß noch, ein wichtiges Netscape-Feature bestand darin, dass man das Laden der Bilder manuell anstoßen konnte - also erst, wenn man die Seite gesichtet hatte und wusste, dass es sich lohnt darauf zu warten. Das waren noch Zeiten.


    via shah3d.com

    Donnerstag, 17. März 2011

    BerlinExpertDays

    Am 7. und 8. April sind die BerlinExpertDays. Ich werde aller Voraussicht nach hingehen. Es gibt auf jeden Fall etliche interessante Themen.

    Montag, 28. Februar 2011

    HTML Verarbeiten mit jsoup

    In den letzten Tagen hatte ich häufiger mit der Verarbeitung von HTML-Daten zu tun. Zum einen sollten Inhalte aus fremden HTML-Seiten extrahiert, zum Anderen sollten HTML-formatierte Eingaben gesäubert werden. Dabei kam mir sehr gelegen, dass ich vor einiger Zeit schonmal über die jsoup-Bibliothek geblogged hatte, die ich bei dieser Gelegenheit auch ausprobieren wollte. Um das Ergebnis vorweg zu nehmen, jsoup funktioniert großartig.

    Die API ist extrem einfach gehalten. Man erzeugt einfach via Jsoup.parse(html); ein org.jsoup.nodes.Document, das man dann wiederum nach allen Elementen einer Klasse, eines bestimmten Tag-Typs etc. abfragen kann.

    Was man unbedingt machen sollte, wenn man HTML-Eingaben verarbeitet bzw. überhaupt Eingaben verarbeitet, die vielleicht irgendwann wieder auf die HTML-Oberfläche gelangen könnten, ist sie zu säubern. Tut man das nicht, hat man schnell eine Sicherheitslücke (Stichwort Cross-Site-Scripting). Für genau diesen Fall bringt jsoup eine Methode mit, die alles kritische aus der HTML-Eingabe entfernt. Was kritisch ist, lässt sich mittels Whitelist auch selbst definieren, die Basic-Whitelist ist aber schon recht gut überdacht und deckt die gängigen Formatierungstags ab. Der Aufruf mit Basic-Whitelist ist auch hier wieder denkbar einfach: Jsoup.clean(html, Whitelist.basic())

    Die Whitelist lässt sich fein granular steuern. Sowohl an Tags, als auch an Attribute und deren Inhalt wurde gedacht. Außerdem mag ich die Kettenschreibweise einfach gern:

    Whitelist w = new Whitelist().addTags("a", "b", "blockquote")
      .addAttributes("a", "href")
      .addProtocols("a", "href", "ftp", "http", "https", "mailto")
      .addProtocols("blockquote", "cite", "http", "https")
      .addEnforcedAttribute("a", "rel", "nofollow");
    

    Ein paar Beispiele finden sich im jsoup Cookbook.

    jsoup.org

    Linktips

    HTML5 Rocks - Ein paar super Beispiele, teils mit Links, wo die Technik in freier Wildbahn zu begutachten ist. Stöbern lohnt.

    20 Software Developing Best Practices -  Eine der üblichen Listen mit dem "Aha, das kenne ich"-Effekt, den man dann mit dem eigenen, manchmal schludrigen Umfeld in Verbindung bringen kann. geht mir zumindest irgendwie so.

    Software Antipatterns : The Golden Hammer - Wenn wir schon bei dem "Aha"-Effekt sind, darf das "Golden Hammer"-Pattern bzw. Antipattern natürlich nicht fehlen.

    Sandboxie - Ein Windows-Programm, das ich mir merken will. Ich bin bisher noch nicht zum testen gekommen, da es mir aber schon mehrfach beim Meckern über Windows ans Herz gelegt wurde, sollte ich das vielleicht irgendwann mal tun. Man kann damit einzelnen Programmen in einer Sandbox laufen lassen.

    Computer Repair with Diagnostic Flowcharts - Super Flowcharts für die Rechner-Diagnose, wenn mal was nicht läuft. Bisher bin ich zwar mit meinem Hardware-Grundverständnis auch ohne immernoch erfolgreich gewesen, aber aus irgendeinem Grund mag ich diese Flowcharts.

    Donnerstag, 24. Februar 2011

    Verrücktes im Unicode 6

    Seit der deutsche Wikipedia-Admin an Berühmtheit gewonnen hat, ist die Begrifflichkeit Inkludist und Exkludist nahezu jedem halbwegs Netzaffinen geläufig. Während im deutschen Wikipedia die Exkludisten herrschen, nimmt man es andernorts nach dem Motto "Speicherplatz ist genügend vorhanden" gelassener. Zugegeben, das Beispiel fängt in dem Moment an zu hinken, wo internationales mit nationalem verglichen wird. Wir Deutschen sind da eben sehr speziell, was Genauigkeit, Ordnung bis hin zur Pedanterie anbelangt.

    Erheblich mehr Inkludisten gibt es offensichtlich beim Unicode-Konsortium. Der Eindruck drängt sich bei einem genaueren Blick in den neuen Unicode 6-Standard geradezu auf. Beispiel gefällig?

    Beginnen wir mit der Kategorie Miscellaneous Symbols And Pictographs, die mitunter schon etwas speziellere Zeichen, wie die Freiheitsstatue oder die Japanischen Inseln vorhält.

        ...


    Weiter geht die Exkursion in den Bereich unverzichtbarer, japanischer Emojis.

        ...

    Und das war noch bei weitem nicht alles, was die nächste Unicode-Version zu bieten hat. Einen guten Überblick kann man sich im Unicode 6.0 Versioned Charts Index verschaffen. Mit dabei sind übrigens nicht nur solche Symbole, die wir in Wing- und Webdings schon immer vermisst haben, sondern auch sprachliche Ergänzungen aus dem afrikanischen Raum, wie Mandäisch, Batak und Brahmi.

    Weil ich zwar Pedant, aber auch bekennender Inkludist bin, finde ich das natürlich Klasse. Leider wird es wohl noch ein wenig dauern, bis Unicode 6 eine Verbreitung gefunden hat, die es einem erlaubt die Zeichen daraus gefahrlos zu nutzen.

    Zuletzt aber noch mein Favorit 'PILE OF POO' (U+1F4A9).


    Mehr auch bei heise.

    Sonntag, 20. Februar 2011

    Bibliothek JavaEventing

    Bei Client-Anwendungen habe ich häufiger die Erfahrung gemacht, dass man irgendwann irgendwelche Listener oder Observer-Pattern implementiert, weil irgendeine Aktion, eine andere auslösen soll. Die AWT-Eventlistenerklassen in java.awt lassen sich zwar gut verwenden, um so etwas für die Anwendung zu bauen, aber etwas fertiges wäre natürlich schöner. Abhelfen will da die Bibliothek JavaEventing. Vielseitig und leichtgewichtig verspricht JavaEventing zu sein. Auf den ersten Blick scheint sie mir vor allem eines zu sein, nämlich simpel. So bekommt man mit dem EventManager eine Klasse, an der man kurzerhand seine Listener einhängen und auslösen kann. Arbeitet man Multithreaded, gibt es auch hierfür Helfer, wie zum Beispiel einen Auslöser, der erst startet, wenn die Verarbeitung des vorherigen Events abgeschlossen ist. Ich würde meinen, dass man da einiges geschenkt bekommt, was man sonst auf die Schnelle vielleicht schlechter implementiert hätte.

    Computers – A Chronological Timeline

    Meine ersten Computerkontakte lagen so ungefähr in der Mitte der Neunzehnhundertachziger. Die Zeit der Personal Computer eben. Die Tapete lässt zwar diverse Computermodelle vermissen, was wohl dem Platz geschuldet ist, vermittelt aber trotzdem einen guten Eindruck, wie die technische Entwicklung so vonstatten gegangen ist.



    via kraftfuttermischwerk

    Mittwoch, 9. Februar 2011

    Java Abschussbereit

    Java-Anwendungen abschießen für Dummies. Tante Heise schreibt
    Die Umwandlung des Literals "2.2250738585072012e-308" in eine Gleitkommazahl führt zu einer Endlosschleife in Java, in dessen Folge die CPU voll ausgelastet wird.
    Das musste ich natürlich ausprobieren. Leider klappt das auf meiner Linux-Kiste mit meiner 64-Bit OpenJDK Server VM ziemlich gut. Einfach new Double("2.2250738585072012e-308")  ausführen und schon steht die JVM. So etwas dürfte halbwegs zielgerichtet in eine Webanwendung einschleusbar sein.

    *Update 16.02.11*
    Das Java-Update 1.6_24 behebt den Bug. via heise

    via heise.de

    Dienstag, 8. Februar 2011

    for-Schleifenperformance über eine Liste

    Frisch gefunden - eine Schleifenvariante, bei der wohl jemand meinte noch ein bisschen Performance rauskitzeln zu wollen:

    for (int i=0, j=list.size(); i < j ; i++) {...

    Häufiger sieht man das so:

    for (int i=0; i < list.size(); i++) {...

    Die zweite Version ruft für jeden Durchlauf die size-Methode der Liste auf. Das wollte der Schreiber der ersten Version wohl sparen, wie ich finde zu lasten der Lesbarkeit. Wenn man das auf Grund sehr vieler zu erwartender Durchläufe tatsächlich sparen möchte, könnte man natürlich auch einen Zweizeiler daraus machen, was wohl auch die geläufigere Form ist:

    int len = list.size();
    for (int i=0; i < len; i++) {...


    Die Schleife rückwärts laufen zu lassen, wäre eine weitere Idee (keine besonders gute, wie ich finde), den Methodenaufruf zu sparen. Auch hier erfolgt die Initialisierung nur ein einziges mal und wir sparen sogar die zweite Variable:

    for (int i=list.size()-1; i>=0; i--) {...

    Meiner Meinung nach, lohnt die Einbuße der Lesbarkeit in diesem Fall nicht. Die size-Methode gibt nur den Wert einer Instanz-Variablen zurück, was nicht viel kostet. Bei wenigen hundert Durchläufen jedenfalls kaum messbar und definitiv nicht fühlbar.

    In dem gefundenen Fall bearbeitet die Schleife übrigens eine Liste mit ungefähr einer Hand voll Einträgen.

    Die Suchmaschine und Ich

    Seit Google (anfangs noch als Geheimtipp) mit den besten Ergebnissen punkten konnte, nutze ich die Googlesuche. Inzwischen hat sich viel getan und dennoch ist Google noch immer eine, wenn nicht die meist genutzte Suchmaschine. Einzig, die Popularität hat auch seine Kehrseite. Das Ranking hat inzwischen wirtschaftliche Bedeutung, was zu massenhaften Manipulationen und einer neuen Berufsgruppe, des SEO geführt hat, die einem die eigene Webpräsenz auf die vorderen Plätze hievt. Das bedeutet aber nicht zwingend, dass die Relevanz für die Suchbegriffe der Seite auch tatsächlich gegeben sind. Ich denke da an eine Vielzahl kommerzieller Seiten, die bei einer Vielzahl von Begriffen ganz vorne mit dabei sind. Anfangs waren das die Virenschleudern und Abofallen mit ihren Linkfarmen, später dann Ebay, Dooyoo oder Chiao, heute ist Idealo, Guenstiger und Wikipedia ganz vorne.

    Eigentlich gilt für mich schon fast, dass die ersten Plätze zu den Ergebnissen gehören, die für mich am wenigsten relevant sind. Will ich nämlich etwas nachschlagen, dann kann ich das auch gleich bei Wikipedia tun. Will ich einen Preisvergleich, ist mir auch da etwas passendes geläufig.

    Leider zieht das Relevanz zu Popularität-Verhältnis immer dort nicht mehr, wo die Popularität so hoch ist, dass die Kenntnis darüber bereits zur Allgemeinbildung des Thema Web gehört. Hier gilt nämlich, wenn ich bei Amazon nachlesen möchte, kann ich dieses direkt dort tun und brauche keinen überflüssigen Eintrag in der Suchliste. Zu diesem Zweck habe ich irgendwann mal das Firefox-Plugin OptimizeGoogle installiert. Das bietet unter anderem eine Blacklist für Google-Suchergebnisse, in die alle Verdächtigen eingetragen werden können. Insgesamt hat das Plugin eine ganze Menge nützlicher bis netter Tweaks.

    Aktuell bin ich noch auf die Suchmaschine DuckDuckGo aufmerksam geworden. Ich muss zugeben, die erste seit langem, die mir auf Anhieb sympathisch ist. DuckDuckGo weist nämlich einen hohen Nerdfaktor auf. Die Suchmaschine präsentiert sich so karg, wie Google zu seinen besten Zeiten, verspricht aber "We don't track you!". Hinzu kommt eine neue Idee namens !Bang. !Bangs erlauben die Suche anderer Seiten auszulösen und so wird mit der Suchanfrage "!a lunchbox" die Amazon-Ergebnisseite mit passendem Suchbegriff zurückgeliefert. Außerdem gibt es noch ein paar praktische Funktionen, wie zum Beispiel die Abfrage von Wolfram Alpha. Zuletzt gibt es für die Puristen auch eine Version, die ganz ohne visuelle Spielereien auskommt - nämlich die DuckDuckGo Lite-Version.

    Montag, 7. Februar 2011

    WLAN-Lunchbox zum Mitnehmen

    PirateBox_2-0_Case3
    PirateBox Photo-Gallery
    Es gibt ja schon seit längerem diverse Bastelprojekte, die Standardrouter zu etwas neuem umfunktionieren. Das PirateBox-Projekt finde ich aber besonders charmant. Die Box verspricht anonymes Filesharing und basiert auf OpenWrt, das auf einem Buffalo-Router läuft. Ein tolles Mitbringsel also. Die Teile für die Konstruktion sind für unter 100 Euro zu beschaffen. Einzig das Akku schlägt mit nochmal einem knappen Hunderter zu Buche.

    Die Bauanleitung gibt es im PirateBox-Wiki.

    Donnerstag, 27. Januar 2011

    Programmiererwitz

    Viele Programmiererwitze haben die Eigenschaft, nicht komisch zu sein. Der hier hat aber was. Noch mehr gibt es übrigens hier.

    Eine Frau bittet ihren Mann zum Supermarkt zu gehen:

        Lieber Mann, gehe bitte zum Supermarkt und kaufe ein Brot. Sollten Sie Eier haben, bringe 6 mit.

    Der Mann geht los und kommt nach einer Weile mit 6 Laiben Brot wieder wieder:

        Frau: Oh verdammt, wieso hast Du sechs Brote mitgebracht?

        Mann *unschuldig*: Sie hatten Eier vorrätig.


    via Reizzentrum

    Dienstag, 25. Januar 2011

    8 Regeln für den totalen Stillstand in Unternehmen

    Firmen- und Projektrealität zielgenau auf den Punkte gebracht. Mir sind einige der genannten Obskuritäten so oder so ähnlich auch schon untergekommen.

    Gruyere - Anleitung zum Hacken

    Mit Sicherheitslücken in der eigenen Anwendung ist es so, wie mit schweren Krankheiten - die haben auch immer nur die Anderen. So oder so ähnlich scheinen mir etliche Entwickler zu denken. Zumindest habe ich das bereits häufiger so mitbekommen. Die Anwendung funktioniert, die Zeit ist knapp - was soll man da Zeit mit der Anwendungssicherheit vergeuden. Vielen Entwicklern erscheint der Hack der eigenen Anwendung eher wie ein theoretischer Fall, der sowieso nie vorkommt. Vor allen Dingen ist die Gefahr sehr abstrakt, weil der Entwickler selbst zwar einige gefahren kennt, aber zumeist null Erfahrung damit hat, wie einfach so ein Anwendungshack sein kann. Besonders kritisch ist das natürlich bei offenen Webanwendungen.

    Dagegen helfen will das Projekt Gruyere, das eine löchrige Python-Anwendung bereitstellt, sowie Tips und Anleitungen für verschiedene Hacks, wie zum Beispiel Cross Site Scripting oder SQL-Injections. Betätigt man sich nämlich mal selbst als Hacker, dürfte das den Blick für die eigene Entwicklertätigkeit deutlich schärfen.

    Montag, 24. Januar 2011

    Empfehlung AS-Auto Replace

    Das Windows-Programm AS-Auto Replace benutze ich inzwischen schon einige Jahre. Heute ist mir aufgefallen, dass das Programm bereits bei Version 1.4 angekommen ist. AS-Auto Replace ist ein Tool zum Suchen und Ersetzen über Dateigrenzen hinweg. Das Programm kommt eher schlicht und ohne große Features daher, ist aber sehr flott. Kurzum, seit Version 1.0 mein ständiger Begleiter, wenn es um XML-Dateien geht (meistens jedenfalls), in denen eine Zeichenkette, gegen eine andere auszutauschen ist.

    Samstag, 22. Januar 2011

    Lorem ipsum Generator

    Mir geht es bei der Entwicklung nicht selten so, das neue Eingabemasken beim Testen mit Text in der Qualität von "shfjhsdgjkdfjg" befüllt werden. Das sieht natürlich nicht wirklich hübsch aus und wirkt vor allem an Stellen, wo mehr Text verarbeitet werden darf, nicht besonders präsentativ. Im Printbereich gibt es da schon seit mehreren Jahrhunderten eine Lösung. Dort wird nämlich auf "Lorem ipsum" als Platzhalter- bzw. Blindtext zurückgegriffen. Zu Beginn war der Text noch für die Präsentation von Schriftzeichen gedacht, heute verwendet man ihn aber auch, wenn zwar ein Layout zu bauen, jedoch noch kein echter Text vorhanden ist. Das kann natürlich auch uns Entwicklern dienlich sein, wenn es darum geht, die Anwendung während der Entwicklung mit irgendwelchen Texten zu füttern. Erst kürzlich bin ich wieder in eben diese Verlegenheit gekommen, und glatt über den Lorem ipsum-Generator gestolpert. Der Generator erzeugt Platzhaltertext in beliebiger Wort- und Absatzzahl.

    Bei der Entwicklung von Webinterfaces drängt sich natürlich der Einsatz eines passenden plugins für diesen Zweck auf. Dafür gibt es natürlich auch gleich mehrere. Ich habe es mal mit dem Dummy Lipsum ausprobiert. Das Plugin tut ziemlich exakt, was es soll. Mal sehen, ob es sich auch dauerhaft als zweckdienlich erweist.

    *Update 28.04.11*
    Ein ausgezeichneter Online-Blindtextgenrator findet sich auch hier: http://www.blindtextgenerator.de/