Gabi und Sascha
Tags - Kategorien : Alle | Berlin | Bücher | Java | Linkhalde | Weichware | Verfassung

In meiner spärlichen Freizeit entwickel ich gerade eine mobile Anwendung. Für J2ME. Wer in mir jetzt einen Masochisten sieht. Nur zu, du hast nicht ganz unrecht.

Das Problem: Ich muss kurze Informationen über Position, Zeit und einiges mehr ausgeben. Der Benutzer muss diese Information unter Stress schnell erfassen können. Die J2ME Plattform ist in dieser Hinsicht nicht zu gebrauchen. Deswegen habe ich ein eigenen UI entwickelt. Für das UI habe ich mit dem MicroFont-Maker den DejaVu True Type Font die benötigten Bilder erzeugt. Nachteil: DejaVu sieht auf einem Handydisplay nicht wirklich gut aus. Ausserdem ist er zu breit. Das heisst, Information nimmt zuviel Platz ein. Bei eingeschränken Handy Displays nicht optimal.

Heute hatte ich dann genug von DejaVu. Ich machte mich auf die Suche nach einem Ersatz. Anforderung: Gut auf Handy Displays aussehen und unter einer freien Lizenz stehen. Die Lösung ist naheliegend: Das Android Projekt hat genau die gleichen Probleme. Und es hat eine Lösung: Droid. Ein Font für limitierte Displays unter der Apache 2.0 Lizenz.

Das Ergebnis ist überzeugend. Der Font sieht aus dem Handy eleganter aus und ist im Schnitt 20% schmaler. Droid hat heute DejaVu abgeöst.

[FDP WAHLPLAKAT - "ARBEIT MUSS SICH WIEDER LOHNEN"] 1. Hartz Ⅳ Bezüge kürzen
2. Mindestlöhne einführen 
3. Opposition ist Mist®
 

Jetzt ist es wohl passiert: Attentäter hatte Sprengstoff geschluckt und wollte Sohn des saudischen Innenministers töten. Wenn ich schon vor 2 Jahren darauf gekommen bin, dann sicherlich auch so genannte Terrorexperten. Deswegen ist auch der Spiegel Online Artikel wiedermal typische Spiegel Terrorpanikmache.

Keine Ahnung ob ich Nerd war oder bin. Und deswegen passt der Text von Jens Scholz ganz gut, denn ich erkenne mich zumindest etwas wieder.

[ST֖BELE WAHLPLAKAT OBEN MIT "ERSTSTIMME STR֖BELE" UND WAHLPLAKAT PIRATENPARTEI DARUNTER: "ZWEITSTIMME PIRATEN"]
Grünbergerstraße

 

[GRAFFITI: SIZTENDE PERSON DIE NACHDENKT]
Frankfurter Tor, Friedrichshain
[STREETART KLEBEBILD: GLÄSCHEN MIT DEM LOGO VON HIPP (BABYNAHRUNG). ANSTELLE DES SCHRIFTZUGES HIPP STEHT DORT "HIRN"]
Bersarinplatz, Friedrichshain

[STREETART KLEBEBILD MIT FRAU UND SPRECHBLASE "I WISH YOU WOULD SEE ME" VON EL BOCHO]
El Bocho
[STREETART KLEBEBILD: ÜBERWACHUNGSKAMERAS]

[FREIHEIT STATT ANGST DEMOAUFRUF]

 

«Frische deutsche Erdbeeren, aus Ungarn…»

Stutzten – dann schlug er sich gegen die Stirn :-)

1986
Letztes Terrorattentat in Deutschland (Diskothek La Belle). Auftraggeber des Attentats vermutlich die Regierung Libyens unter Gaddafi – alles andere als ein islamistischer Fanatiker.
2001
Anschläge in den USA. Hauptsächlich geplant in Deutschland.
2004
Bundeswehr in Afghanistan (Kundus)
2007
Festnahme der als islamistisch eingestuften Sauerland-Gruppe

Vor diesem Hintergrund ist es schon ungewöhnlich, wenn Angela Merkel im Bundestag davon spricht, dass der islamische Terror erst nach Deutschland gekommen ist. Und daraufhin die Bundeswehr nach Afghanistan geschickt wurde.

Nachtrag: Klarer hier beschrieben.

Weil die Site permanent Fehler meldet:

Ich lese nicht viel Neues im Internet-Manifest. Nicht, weil ich täglich damit zu tun habe. Eher weil zentrale Aussagen schon über ein Jahrzehnt alt sind. John Barlow von der Electronic Frontier Foundation hat sie schon im ausgehenden letzten Jahrtausend formuliert.

Die Thesen – Manifest ist viel zu hochtrabend – wurde um ein paar neuere Entwicklungen ergänzt, schön und gut. Aber viel zu Journalismus- und Weblastig. So als ob diese das Doppelsternsystem des Internet sind.

Auch die Festschreibung des Urheberrechts gefällt mir nicht – schon gar nicht als Bürgerpflicht. Zwar stelle ich Software, die ich entwickel, selbst unter offene Lizenzen, damit das Urheberrecht gewahrt bleibt. Ich kann aber auch darauf verzichten, wenn etwas anderes kommt… Und hier liegt der Hase im Pfeffer: das Manifest versucht auch die Zukunft zu manifestieren. Während die klassischen Verlage gerade zum Roleback ansetzen, soll hier konservativ der Status quo festgeschrieben werden. Ich sehe keine Weiterentwicklung.

Nein, nix über Snow Leopard. Nur die Bestätigung das Max Recht hat. Mac OS X wird immer mehr zu Windows: jedes Popelupdate erfordert einen Neustart. Heute ein lächerliches 161 MB Java-Update. Wieso erfordert ein Java-Update einen Neustart? Das versteht vermutlich nur Apple.

Im just on the trip to simplify some aspects of software development thru bytecode extendsion. In «Loggen vereinfachen» (german) I've written down some thought about simplify logging.

Today I read a blog entry from Kirk Pepperdine on the subject. The tipp is trivial. Kirk suggests that before a logcall a condition checks whether the call is at all meaningful. The approach makes sense, but has a nasty side effect: it bloats the code in such a way that the actual business logic between the log blocks will eventually go away.

One solution may be to examine the generated bytecode. If there is a log call in the code, it can be automatically surrounded with such a if statement.

Advantage: The developer can continue to write simple log calls without bloat the code.
Disadvantage: It does not look right, a tool that manipulates its code. An he needs the tool.

What prevails? Advantage or disadvantage? In my opinion, the advantage of cleaner code.

As well as some Java developers read along I would be interested what you think.

@ToString - Nächste Schritte

Für meinen Arbeitgeber, die Zimory GmbH, habe ich einen Prozessor für die @ToString Annotation implementiert.

equals und hashCode

Was können jetzt die nächsten Schritte sein? Als Erstes fällt natürlich ein ähnlicher Mechanismus für equals und hashCode ein. Hierfür gibt es aber schon hervorragende Unterstützung in den IDEs. Ebenfalls muss für dieses beiden Methoden der Sourcecode angepasst werden. Grund: equals und hashCode können gravierdende Auswirkungen auf ein System haben. Deswegen muss in den Javadocs dokumentiert sein, dass das die beiden Methoden überschrieben wurden. Das Problem könnte mit Annotationen und dem Annotation Processing Tool umgesetzt werden.

Loggen

Mit einer einheitlichen toString() lässt sich aber auch das Loggen stärker vereinfachen und vereinheitlichen. Loggen ist ein klassisches Cross-Cutting Concern. Es hat im Code fachlich selten etwas zu suchen. Dadurch, dass es gemacht wird, bläht es den Code wiederum unfachlich auf. Ergebniss: irgendwann sieht der Entwickler vor lauter Log-Anweisungen das fachliche nicht mehr.

Eine @Log Annotation kann da weiter helfen. Sie kann auf Konstruktoren, Methoden und lokalen Variablen angewendet werden. Bei Konstruktoren und Methoden erzeugt ein Prozessor beim Ein- bzw. Austritt Logmeldungen. Bei Eintrittmeldungen können die eventuell übergebenen Parameter ausgegeben werden und/oder der aktuelle Zustand des Objektes. Bei Austrittsmeldungen eventuell der Rückgabewert und auch der aktuelle Zustand des Objektes.

Lokale Variablen

Bei lokalen Variablen kann es Sinn machen, wenn die Methoden grösser sind. Eigentlich bin ich ein Freund von Composed method and SLAP. Deswegen muss loggen von lokalen Variablen nicht wirklich sein. Dennoch kann es machmal sinnvoll sein.

Aktuelle Grenzen

Java setzt hier allerdings Grenzen. Zwar können lokale Variablen annotiert werden, die Information geht aber beim Compilieren verloren. Sie geht auch verloren, wenn die RetentionPolicy auf CLASS gesetzt ist (default). Der Grund bei Java 5 war, dass keine Struktur im Classfile-Format für lokale Annotationen definiert war. In Java 6 können lokale Annotationen theoretisch verwendet werden, allerdings wurde die Funktionaliät im Compiler ausgeschaltet. Der Compiler des JSR 308 (downalod ) Projektes erzeugt die nötigen Informationen. Mal sehen ob der Compiler es in Java 7 schafft. Bis es soweit ist, schiebe ich das Problem beiseite.

Wieso nicht den Quellcode modifizieren?

Macht es Sinn den Quellcode zu parsen und den benötgen Log-Code für lokale Annotationen einzuweben? Soetwas kann gemacht werden. Allerdings unterscheidet sich dann der erzeugte Quellcode wahrscheinlich hinsichtlich Zeilenposition. Dies wiederum ist unschön bei Stacktraces, wenn Entwickler Zeilennummern bekommen. Dies haben keine sinnvolle Aussagekraft mehr und sind wertlos. Da das Logging zusätzlich für die Fehlersuche herangezogen wird, kann eine Quellcodemodifikation hier kontraproduktiv wirken. Aus diesem Grund ziehe ich sie nicht weiter in Betracht.

Ausblick

Im nächsten Eintrag diskutiere ich dann, wie die Annotationen für ein vereinfachtes Logging aussehen müssen. Ebenfalls wird diskutiert, welche Logging-Frameworks wie unterstützt werden und welche Probleme es dabei gibt.