Dienstag, 17. November 2009

map (chr.(158-).ord)

Mein Lieblingsfitzel Haskell. Der Ausdruck ist eine Funktion, die eine Zeichenkette als Argument erwartet und eine andere zurückliefert, die jedes Zeichen durch 158 minus originalen Zeichenwert ersetzt. Angewandt auf "oo~W909,=*9:~8529r~:/~0/*~9:5*~58~%/)~2/(9~%/),~'/,3", damit der
Klartext nicht im Quellcode steht.

Das in Java zu schreiben ist kein Fest. Und nicht annähernd so kurz. Und vor allem bekommt man das Idiom nicht hin. Was hier passiert, ist nämlich, daß man eine Funktion '(chr.(158-).ord)' schreibt, die man mit map auf jedes Zeichen des Argumentstrings losläßt, und aus den Resultaten wird ein neuer String gebaut und als Resultat zurückgegeben. (Das geht hier so elegant, weil Strings in Haskell einfach Listen von Zeichen sind, und map arbeitet generisch auf Listen.) In Java eine Methode schreiben, die irgendeine Funktion derart auf Listen anwendet und dann die Funktion selbst zu definieren, artet einfach nur in Arbeit aus.

Dann wird jedes Fragment einzeln verständlicher, aber man sieht den Wald vor lauter Bäumen nicht mehr.

Sonntag, 15. November 2009

Fonic-Erfahrungen

Naja, inzwischen habe ich das Ding eine Weile, und bereue es nicht. Erstmal, nachdem ich grundsätzlich immer per ssh-Portforwarding auf einen vertrauenswürdigen Proxy surfe, ist mir die ganze neulich wieder hochgekochte Bilderstürmer- und Deep-Packet-Inspection-Geschichte der Mobilprovider egal.

Ansonsten: Da ist eine Java-Einwahl-etc-pp-Software dabei, die direkt aus dem Hades der GUI-Richtlinien stammt. Sie versorgt den Stick mit der PIN, man kann Konstostand abfragen und modifizieren, SMS schicken und empfangen, und natürlich sich einwählen. Auf dem Mac ist das immer damit verbunden, daß das OS fragt, ob man ein neu gefundenes Netzwerkgerät konfigurieren möchte (nein, will man nicht). Das Icon sieht arg hochskaliert aus, und die Applikation fragt nach einem Cmd-Q immer (egal, ob verbunden oder nicht), ob man das wirklich will. Das könnte man alles besser machen. Viel besser.

Aber: Es funktioniert jedenfalls. Nur wenn man sich bewegt, gibt es etwas erratisch Verbindungsabbrüche, und ich habe keine Ahnung, wo man den Timeout dafür hochdrehen könnte. (Mein olles K600i unter Linux segelt problemlos durch minutenlange Funklöcher, und danach geht es einfach weiter.)