Jazoon 2008

Tag 0, Tutorial

Für mich hat die Jazoon bereits am Montag mit Angelika Langer’s dreistündigem Generics-Tutorial angefangen. Drei Stunden über Generics? Ja, das ist kein Problem, Java Generics sind nun mal einfach ziemlich mühsam zu verstehen, und ein wirkliches gutes Beispiel, wie man ein Sprach-Feature nicht implementieren sollte—normalerweise sollte man nicht wissen müssen was der Compiler tut um etwas nachvollziehen zu können.

Tag 1, Martin Odersky, Simon Phipps, Neal Ford

Am morgen drei ziemlich spannende Keynotes, leider hatte Martin Odersky zu wenig Zeit und musste die interessanteren Aspekte von Scala—Higher Order Functions—überspringen. Dafür hatte ich später die Gelegenheit ein bisschen mit ihm über IDE-Support von Scala zu plaudern. Mal kucken, eventuell gibts bald mehr darüber ;-) Was ich auch mal noch herausfinden muss ist, was für eine Muttersprache er hat.

Ein Dankeschön an Simon Phipps, dem wir zu veranken haben, dass Sun unterdessen eine richtige Open-Source Firma geworden ist

Und Neal Ford über DSLs war auch nicht schlecht, auch wenns irgendwie schade ist, dass ich seine Beispiele alle schon gekannt habe. Und nach dem Talk ist er mir leider entwischt, ich wollte ihn noch nach seinem neusten Buch fragen. Im Dezember hatte er mir noch geschrieben, dass es “within the
next few weeks for Beta book” erscheinen sollte.

Tag 2, Ted Neward, Roy T. Fielding, Stefan Tramm, Dierk König

Die Keynote von Ted Neward war super, man merkt, dass er das nicht zum ersten Mal tut, sondern, nach eigener Aussage, rund ein Mal pro Woche—er sei rund 200 Tage pro Jahr unterwegs, und das obschon er eine Frau und zwei Kinder hat; deren Fotos er im Kaffee natürlich prompt auf seinem iPhone herumzeigen musste :-) Im Gegensatz zu Ted war Roy Fielding eher etwas entäuschend, allerdings war er auch nicht ganz gesund.

So, mal ein unbekannter Name—Stefan Tramm von Netcetera—welcher eine sehr unterhaltsame und erfrischende Präsentation mit dem Thema Unix survival guide for Java programmers gehalten hat. Eigentlich nicht beschränkt auf Java programmers—also eigentlich genau das, was ich auch versuche, nämlich die Leute “aus ihrer IDE (oder ihren GUIs) zu locken” und zu lernen, effizient mit ihrem System umzugehen. Er war auch der erste Speaker, der das Publikum mit mehr als nur Hände hochhalten miteinbezog, indem wir alle regelmässig read the man page sagen mussten.

Am Nachmittag habe ich dann noch Dierk König kennengelernt und mit ihm etwas über IDEs und speziell natürlich auch Refactoring Plug-ins geplaudert (er ist Experte für unsere Groovy-Refactoring Bachelorarbeit, welche ich co-betreue).

Tag 3, Joshua Bloch, Joshua Bloch und nochmals Joshua Bloch

Der letzte Tag war eindeutig mein Joshua-Bloch-Tag. Am Morgen die Keynote über sein neues Buch, später eine Stunde lang Java-Puzzles und dann noch seine Meinung zum Thema BGGA Closures. Ziemlich interessante Geschichte, aber wahrscheinlich für viele Leute etwas zu viel. Man hat den Eindruck, dass Java als Sprache das einfach nicht verkraftet. Glücklicherweise wird Scala von vielen als Nachfolger von Java gehandelt—eine sehr schöne Vorstellung! Vielleicht zusammen mit Ola Bini’s Vision?

Ausserdem habe ich noch Heinz Kabutz zugehört, welcher eine Zusammenfassung seiner letzten zehn Newsletter zum Thema Concurrency präsentierte (hier der letzte). Ich bin ehrlich gesagt froh, dass ich keine multithreaded Programme in Java schreiben muss, da ich eigentlich nicht so begierig darauf bin zu lernen, wie der Memory-Manager der JVM funktioniert.

Generell

war alles sehr gut organisiert, und den ganzen Tag im Kino zu sitzen macht irgendwie auch viel mehr Spass als vermutet; entweder sind die Sitze dort viel bequemer als in anderen Kinos oder man sitzt beim Hören eines Talks anders als beim Schauen eines Filmes. Ich freue mich auf nächstes Jahr!

No comment »

Personenraten

Hab gerade was interessantes gelesen, ratet mal, von wem all diese Zitate sein könnten:

Then it [Windows] told me to reboot my machine. Why should I do that? I reboot every night — why should I reboot at that time?

The following garbage is there [Add/Remove Programs Dialog]. Microsoft Autoupdate Exclusive test package, Microsoft Autoupdate Reboot test package, Microsoft Autoupdate testpackage1. Microsoft AUtoupdate testpackage2, Microsoft Autoupdate Test package3.
Someone decided to trash the one part of Windows that was usable? The file system is no longer usable. The registry is not usable. This program listing was one sane place but now it is all crapped up.

So after more than an hour of craziness and making my programs list garbage and being scared and seeing that Microsoft.com is a terrible website I haven’t run Moviemaker and I haven’t got the plus package.
The lack of attention to usability represented by these experiences blows my mind. I thought we had reached a low with Windows Network places or the messages I get when I try to use 802.11.

Und noch viel mehr davon auf seattlepi. Ich habe fast Mitleid mit ihm :-) .

2 comments »

Neues im Ganymede CDT

Gibts bei Emanuel.

No comment »

Auch Ausserirdische Haben Wikis

Zitat von Rodney McKay in der neusten Stargate Atlantis Folge, nachdem er eine Festplatte analysiert:

It’s Michael’s Wiki!

Hätte ich nicht gedacht, dass die Wraith Wikis einsetzen :-)

No comment »

SMS senden leicht gemacht (Orange)

Gibt es was mühsameres, als die unsäglichen Browser-SMS-Versende-Dienste unserer Mobilfunkanbieter? Naja, wahrscheinlich gibt es schlimmeres, aber verbessern kann man es ja trotzdem. Das Ziel ist, möglichst einfach SMS zu versenden, also schreiben wir doch ein Script, welches als Parameter Nummer und Text entgegennimmt und versendet.

Ist eigentlich ganz einfach, Mechanize mimt einen Browser und macht genau das, was auch ein Mensch tun würde, also anmelden, Formularfelder ausfüllen und abschicken:

#!/usr/bin/ruby
require 'mechanize'

username = 'mirkostocker'
password = 'XXXXXXXXXXXX'
number   = ARGV.shift
message  = ARGV * " "

if message.length > 144 || message.length < 1
  $stderr.puts "Nachricht zu lang oder zu kurz.."
  exit 1
end

def find_form_with_field(page, fieldname)
  page.forms.each do |form|
    if form.fields.find{|f| f.name == fieldname}
      yield form
    end
  end
end

WWW::Mechanize.new do |agent|

  agent.get('https://www.orange.ch/footer/login') do |page|

    find_form_with_field(page, 'username') do |f|
      f.username = username
      f.password = password
      f.submit
    end
  end

  agent.get('https://www.orange.ch/myorange/sms') do |page|

    find_form_with_field(page, 'messageInput') do |f|
      f.destinationNumberInput = number
      f.messageInput = message
      f.wui_target_id = 'sendButton'
      f.wui_event_id = 'onclick'
      f.submit
    end
  end
end


find_form_with_field musste ich schreiben, da die Formulare keine Namen besitzen, und fragt mich nicht, weshalb ich wui_target_id und wui_event_id setzen muss, im echten Browser wird das per Javascript gemacht und ist anscheinend wichtig. Hat auch gleich die Projektdauer um 50% verlängert, auf rund 1.5 Stunden.

So, und wer kümmert sich um die Swisscom und Sunrise?

Guido: Wie du siehst habe ich einen netten Weg gefunden, bunten Code zu bloggen, der beste Editor der Welt hat nämlich eine TOhtml Funktion.

6 comments »

Jazoon08: Ich komme!

Nächste Woche findet hier in Zürich die Jazoon statt. Wer kommt sonst noch?

4 comments »

Gelesen: Bugs in Writing

Das wichtigste zuerst: unbedingt lesen!

Und warum? Ganz einfach, weil es ein geniales Buch ist und nützlich für jeden, der englische Texte schreibt.

Inhalt

Auf über 600 Seiten werden 150 Themen rund ums Thema debugging your Prose aufgegriffen und mit jeweils sehr vielen Beispielen typische Fehler und korrekte Anwendungen erläutert. Dabei geht es aber nicht nur um Grammatik, sondern auch um Stil-Elemente wie Listen, Referenzen, Fussnoten, Graphiken, et cetera.

Beispiele:

  • You and Your Reader (vermeide den Passiv)
  • Number Spelling
  • Contractions
  • Parentheses
  • Em- und En-Dashes
  • Which Versus That

Lyn Dupré mag Katzen über alles, das merkt man nach den ersten paar Beispielen. Aber das Buch ist ja für technische Schreiber, wie zu erwarten sind die meisten beispiele technischer Natur. Wie zum Beispiel:

C is a language that after its development in the early 1970s by Brian Kernighan and Dennis Ritchie at Bell Laboratories, became popular because of its integration with Unix.

(Es fehlt das Komma nach that; wir fügen einen “parenthical remark” ein.)

Man muss das Buch auch nicht unbedingt von vorne bis hinten durchlesen, es reicht wohl, wenn man es zur Hand hat und nachschlagen kann, sobald beim Schreiben irgendwelche Fragen auftauchen.

No comment »

Imap-Feeder: RSS und Atom Feeds nach IMAP

Imap-Feeder ist ein Programm, welches eine Reihe von Feeds abklappert und die Einträge als E-Mails auf einem IMAP Server ablegt.

Warum?

Mein Problem, das ich lösen wollte war, dass ich meine Feeds an mehreren Orten lesen will (also am Arbeitsplatz, am PC zu Hause und auf mindestens einem Laptop), das ist aber ziemlich mühsam weil man von Hand die bereits gelesenen Einträge verwalten muss. Und bei rund 50 Feeds ist das ziemlich nervig.

“Browser-basierte Feedreader” höre ich es schon rufen. Sorry, aber ist für mich keine Alternative. Ich kann mich mit Browser-basierten Anwendungen einfach nicht anfreunden – bin wohl von KDE zu sehr verwöhnt was Desktop-Applikationen und Interoperabilität anbelangt. Ausserdem bin ich nicht immer Online (jaja, Google Gears..).

Die Lösung: IMAP

Eigentlich gibt es ja schon eine sehr bewährte Technologie um Mail-ähnliche Daten aufzubewahren: IMAP. Von beliebig vielen Clients kann ich auf meinen IMAP Account zugreifen, und mit Cached- oder Offline-IMAP stehen die Daten auch immer zur Verfügung. Der Unterschied zwischen einer E-Mail und einem Eintrag in einem Feed sind eigentlich auch nicht so gross: Beide besitzen einen Betreff und einen Inhalt; bei Feeds kommt teilweise noch ein Autor sowie ein Timestamp dazu.

Vorteile

  • Mehrere Clients können ohne Probleme zugreiffen, wenns sein muss kann man immer noch einen Webmail-Client nutzen.
  • Einträge können wie E-Mails behandelt werden, man kann sie also mit speziellen Tags versehen, an andere Leute weiterleiten, archivieren, verschieben, durchsuchen und so weiter.
  • Man (oder zumindest ich als Entwickler) habe die volle Kontrolle, in welcher Form die Einträge abgelegt werden. Dadurch lassen sich eine Erweiterungen realisieren, wie beispielsweise:
    • Aenderungen an bereits vorhandenen Einträgen: Neu hinzufügen oder ignorieren?
    • Filtern von Einträgen, wenn man blog.misto.ch nicht mag und trotzdem den Planet-HSR abonnieren möchte.
    • Minderwertige Feeds aufwerten: Man könnte durch einen CSS oder XPath-Ausrucke beispielsweise die News von heise.de scrapen und direkt als Body einfügen.
    • … (nehme gerne neue Ideen entgegen).

Nachteile

Es gibt auch Nachteile, man braucht natürlich einen Server, welcher das imap-feeder Skript regelmässig laufen lässt.

Imap-Feeder

Momentan sind noch nicht alle oben genannten Features implementiert, auch gibt es keine HTML-Mails: der HTML-Code von Feeds wird mit ein paar simplen Regeln in Text umgewandelt. Mein Beitrag zu GitHub sieht dann so aus:

Ich hätte noch Einladungen für GitHub[1] zu vergeben (FCFS), falls jemand eine will. Einfach mit einer E-Mail-Adresse bei mir melden.

Wer mer über GitHub erfahren will, kann ja mal hier[2] weiterlesen.

[1] http://github.com/
[2] http://www.infoq.com/news/2008/03/github-git-repository-hosting

http://blog.misto.ch/archives/551

Die Links werden alle gesammelt und am Schluss dargestellt, um den Lesefluss nicht zu stören.

Das ganze ist in Ruby geschrieben und kann von der offiziellen Website bezogen werden. Installation und Einrichtung sind eigentlich ziemlich simpel.

Zukunft

Als nächstes werde ich wohl noch einige der oben genannten Features implementieren oder vervollständigen; HTML-Mails könnten durchaus praktisch sein für Einträge mit Bildern.

5 comments »

Andere Länder — Andere Übersetzungen

Ich glaube, dazu brauchts nicht mehr allzu viele Worte:

Aufgenommen letzte Woche in Griechenland.

2 comments »

Neues in Eclipse 3.4 Ganymede

Es ist wieder mal so weit, Ende Juni wird die neuste und schönste Version von Eclipse im Zug des Ganymede Release-Trains veröffentlicht. Wie auch schon letztes Jahr möchte ich hier gerne einige der Neuerungen vorstellen.

Ich werde mich auf das JDT, also die Java Development Tools, PDE, sowie die Plattform beschränken; Emanuel wird dann hoffentlich über die Neuigkeiten im CDT berichten.

Extract Class Refactoring

Starten wir mit meinem Lieblingsthema: Refactoring. Und zwar gibt es ein neues Refactoring, welches einem einfach erlaubt, Teile einer bestehenden Klasse in eine Neue auszulagern:

Das Resultat ist eine Klasse mit den selektierten Feldern, sowie delegierenden Methoden aus der Ursprungsklasse.

Rearrange Content of Files Per Drag&Drop

Auch ganz nett ist, dass man Member innerhalb einer Klasse per Drag&Drop verschieben kann:

(Den Cursor muss man sich vorstellen, er zieht das selektierte Element an die Position der schwarzen Linie.)

Rename Field Renames Properties key

Auch eine sehr nützliche Erweiterung ist beim Rename Field Refactoring hinzugekommen: Beim Umbenennen eines Feldes, welches als Message-String verwendet wird, wird auch automatisch der entsprechende Key im messages.properties-File umbenannt. So kleine Dinge sind es nämlich, welche einem das Arbeiten mit Eclipse so angenehm machen.

New Quick Assist: MessageFormat

Mit + zusammengesetzte Strings sind zum einen häufig nicht sehr leserlich und zum anderen nur sehr mühsam zu internationalisieren. Abhilfe schafft ein neuer Quick-Fix:

Read and Write Occurrences

Mark Occurences ist schon mindestens seit der vorlezten Version dabei, aber natürlich kann man auch dieses Feature noch verbessern, und zwar durch eine farbliche Unterscheidung von Lese- und Schreibzugriffen (das doofe Beispiel sei mir vergeben).

JUnit View Shows Execution Time

Hm ja, der Titel sagts wohl schon:

Plug-in Spy

Endlich! Der Plug-in Spy ist Teil des PDE. Der Plug-in Spy ist sehr nützlich, wenn man sich beispielsweise fragt, welche Klasse die aktuelle View implementiert oder auch, wie der Identifier für die View lautet. Das hätte mir zu Beginn meiner Plug-in Entwickler-Karriere einiges an Zeit gespart.

Das waren wohl die für mich wichtigsten Neuerungen. Ich bin mir sicher, dass ich im Lauf des Jahres noch einige andere coole Dinge entdecken werde.

Ganymede is coming!

Viel Spass! Und wer immer noch nicht genug hat, findet in den New and Noteworthy Seiten noch ganz vieles mehr.

2 comments »