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
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
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:

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
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:
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:
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:
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 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
Die Nummer mit der Klartext-Passwort-Datei ist allerdings ein Sicherheitsproblem.
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 |
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.
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
Hier also die versprochene Klasse. An Einfachheit wirklich kaum zu übertreffen:
via Vanilla Java
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
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
Abonnieren
Posts (Atom)
