Objective C: KVC und KVO

Ich empfinde das Eintauchen in die Welt von Objective C und Cocoa als sehr erfrischend, jeden Tag gibt es etwas neues zu entdecken. Wenn man sich mit anderen Entwicklern, die Objective C nicht kennen, unterhält, kommt aus der C++ Ecke garantiert die Frage: „Kann man dort Operatoren überladen?„.

Nein kann man nicht. Braucht man auch gar nicht. Operatoren zu überladen ist zweifelsohne cool, aber ich multipliziere nicht den ganzen Tag Matrizen, sondern baue Dinge für Endanwender. Das angenehme an Objective C ist, dass es bestimmte Real World Probleme sehr schön löst.

Key Value Observing ist so eine Lösung und es ist ein so verdammt einfaches Konzept, dass ich mich wundere, wie die Welt bisher ohne leben konnte… (Um es vorweg zu nehmen: GObject hat ein ähnliches Konzept und es gibt bestimmt noch mehr Implementierungen dieses Patterns).

Das Real World Problem kommt bestimmt jedem bekannt vor: man hat eine Klasse A gebaut und eine andere Klasse B muss benachrichtigt werden, wenn sich in A irgendetwas interessantes ändert. Bisher wäre das Herangehen, dass A eine Referenz auf B mitschleifen muss, damit Klasse A die Klasse B benachrichtigen kann. Das bringt natürlich das schöne Klassendesign durcheinander, eigentlich hat A mit B nichts zu tun und die Referenz auf B zu handhaben ist auch nervig.

In Objective C gibt es Properties, die Membervariablen und deren Getter und Setter erzeugen können:

Im obrigen Beispiel hat die Klasse „Foo“ ein Member „bar“ und @synthesize generiert die Getter und Setter, die dann so verwendet werden können:

Soweit, so trivial. Mit Key Value Coding kann man auf Properties programmatisch zugreifen. Das bedeutet, ich baue mir einen String zusammen, dessen Inhalt der Name einer Property ist und ich kann auf die Property zugreifen:

Das wird unheimlich praktisch, wenn man z.B. XML parsen muss und die geparsten Key/Value-Paare direkt via KVC in den Properties einer Klasse speichern kann.

Key Value Observing ist nun die Lösung o.g. Problems: man kann sich einfach von außen als Observer für bestimmte Properties einer Klasse registrieren und wird benachrichtigt, falls sich ein Wert ändert.

Das spart eine Menge Code und die beobachtete Klasse A braucht sich um Klasse B nicht kümmern und muss keine Referenz auf B mitschleifen.

Ich finde das ziemlich elegant. Das Klassendesign bleibt sauber und trotzdem ist es möglich, sich kreuz und quer durch alle Schichten der Anwendung über Zustandsänderungen benachrichtigen zu lassen.

Update: Es gibt einen sehr schönen Wrapper von Andy Matuschak: Block Callbacks for Cocoa Observers (via Ole Bergmanns hoch interessantem Twitterstream)

Der Einstieg in die iPhone / iPad Programmierung

Ich lese mich gerade in die Welt der iOS-Programmierung ein, „for fun and profit“ sozusagen. Die Hürde bei der Plattform ist etwas höher, weil man erstmal eine neue Programmiersprache (Objective C) lernen muss und zusätzlich die ganze Cocoa-API verstehen muss. Ich mache Dinge gerne gründlich, deswegen habe ich mir erstmal die Sprache an sich zu Brust genommen um dann in die iPhone-Programmierung einzusteigen.

Objective C macht auf mich erstmal einen sehr aufgeräumten Eindruck. Ich habe vorher C, Java und etwas C++ programmiert und von den Sprachen findet man einen guten Mix in Objective C wieder. Die umfangreiche Foundation- API ist vergleichbar mit dem, was man in Java vorfindet, trotzdem kann man bis auf C-Ebene hinunter. Die Objektorientierung ist angenehm gelöst, es heisst alles nur ein bisschen anders. So sind Protokolle z.B. das was man in Java Interfaces nennt.

Die Syntax ist etwas anstrengend, man merkt der Sprache deutlich an, dass die ersten Versionen vermutlich im C-Präprozessor implementiert wurden. Die vielen eckigen Klammern sind zwar erstmal ungewohnt, aber damit kommt man relativ schnell klar. Schlimmer ist, dass mit Objective C 2.0 ein Bruch erfolgte und Setter/Getter jetzt mit einem Punkt angesprochen werden können. Das spart zwei eckige Klammern ein, wirkt aber ziemlich inkonsistent.

Insgesamt ist die Sprache sehr mächtig, es gibt schöne dynamische Features. So kann man einer Klasse nachträglich Methoden hinzufügen (Categories), es gibt Dictionaries, wie man sie aus Python kennt und man kann auch mit dem for x in y Konstrukt durch solche assoziativen Speicher durchiterieren:

Als Buch kann ich Programming in Objective-C 2.0* von Stephen Kochan empfehlen. Das Buch hat den Anspruch auch für Menschen geeignet zu sein, die bisher noch nicht in C programmiert haben. Trotzdem vermittelt es alle wichtigen Aspekte in der zu erwartenden Tiefe.

Was die Literatur zur „richtigen“ Programmierung unter iOS angeht: der Markt ist erstmal sehr unübersichtlich. Es gibt viele Bücher, aber welches davon ist gut? Ziemlich hoch gelobt wurde in letzter Zeit IPhone Programming: The Big Nerd Ranch Guide*. Wer sich die 3500 Euro für ein 7-Tage Training auf der Big Nerd Ranch nicht leisten kann, ist mit dem Buch gut beraten.
Man merkt deutlich, dass es aus Schulungsunterlagen hervorgegangen ist, aber das ist kein Manko, im Gegenteil. Man hat sofort Erfolgserlebnisse und muss nicht erst 200 Seiten Urschleim wälzen, bevor man einen Button programmieren darf. Ich kann das Buch fast uneingeschränkt empfehlen. Einziger Kritikpunkt ist, dass es für meinen Geschmack etwas Tiefgang missen lässt. Ich habe das Buch zur Hälfte durch und bis jetzt wurde das Thema Speicherverwaltung, das allen iOS-Anfängern das Genick bricht, sträflich vernachlässigt.

Zur iOS-Umgebung selbst kann ich noch nicht so viel sagen. Es wirkt alles sehr durchdacht, allerdings muss man sich das lineare Denken abgewöhnen. Jeder Pups wird über einen Callback erledigt (er heisst nur Delegate), was einfache Probleme ein bisschen verkompliziert. Aber ich denke das ist nur Übungssache.

Die Dokumentation ist mindestens auf dem Niveau der MSDN, wenn nicht sogar besser. Man kann Beispiele mit einem Knopfdruck direkt in Xcode öffnen. Die IDE ist allerdings eine Zumutung, Xcode 3 ist ein Wirrwar von Fenstern, die man ständig zur Seite schieben muss. Ich frage mich welcher ADS-Patient für das Interface-Design verantwortlich ist.
Xcode 4 dürfte die nächsten Wochen das Licht der Welt erblicken, hier findet sich alles in einem iTunes-Artigen Fenster wieder, was sich wesentlich angenehmer anfühlt. Allerdings haben die Previews von Xcode 4 noch ein paar hässliche Bugs, so lange die Final noch nicht draußen ist, würde ich Anfängern raten, bei Xcode 3 zu bleiben.

Was braucht man, um erstmal loszulegen? Ein gutes Buch, einen intel-Mac / Hackintosh und früher oder später ein „richtiges“ iOS-Gerät. Es genügt ein alter iPod-Touch, aber ohne geht es kaum. Der Simulator kann bestimmte Dinge nicht (Gravitationssensor, Kamera) und verhält sich auch manchmal ein klein bisschen anders (ich hatte speziell bei der Maps-API Probleme). Danke an Semmi, der mir so selbstlos seinen iPod Touch zur Verfügung gestellt hat. Ich verspreche, Du bekommst ihn noch in diesem Leben zurück 😉

Als Entwickler kann man kann nur Anwendungen auf iOS Geräten installieren, wenn man ein Entwicklerzertifikat hat, das kostet pro Jahr 79 Euro. Das ist die einzige Kröte, die man schlucken muss. Ob das gerechtfertigt ist, vermag ich nicht zu sagen, aber man kann sich so ein Zertifikat auch teilen und dann bis zu 100 iOS-Geräte bestücken. Das klappt natürlich nur mit Leuten, denen man halbwegs vertrauen kann.

*=affiliate Link

OH HAI new job

Der letzte Chaos Communication Congress hat mir einen neuen Job beschert 🙂 Interessant ist auch, wie schnell so etwas gehen kann. Einen Monat nach dem ersten informellen Gespräch auf dem Kongress habe ich am Montag meinen letzten Arbeitstag in der alten Firma. Wie alles im Leben sind eben auch Kündigungsfristen verhandelbar.

27c3: Tag 4

OMG WTF PDF war ein prima Einstieg in den letzten Kongresstag. Julia Wolf hat vorgeführt, was mit PDF alles möglich ist. Leider ist sie so rasend zwischen den Folien hin- und her gesprungen, dass man beim Konsum der Aufzeichnung die Folien zur Hand haben sollte. Sie hat u.A. vorgeführt, wie man Dateien aufbauen muss, die gleichzeitig ZIP und PDF Dateien sind. Highlight war ein Executable vom Windows-Taschenrechner, das sie auch mit dem Acrobat Reader öffnen konnte und dieser den Inhalt korrekt dargestellt hat.

Es gab dann noch ein paar Überlegungen, was man noch machen könnte – u.A. die PDF-Engine von Druckern nutzen, um Portscans durchzuführen. Heise hat das so dargestellt, als ob das schon möglich ist, aber Julia hat lediglich gesagt „man könnte mal“. Ich bezweifle jedoch, das es so einfach möglich ist. In dem Druckern ist ja kein Acrobat Reader eingebaut, der für Sicherheitslücken und Parserfoo bekannt ist. Vielmehr nehmen Drucker das PDF nur an und wandeln es dann in ein Format, das sie nativ verstehen, also PCL i.d.R. Es würde mich stark wundern, wenn da nicht-grafische Elemente berücksichtigt werden (Javascript ect.).

Insgesamt jedoch schein PDF ein weites Feld für Experimente sein. Julia hat sich hauptsächlich den Acrobat Reader angeschaut, aber es gibt ja noch mehr PDF Interpreter auf diesem Planeten – nicht nur in Druckern 😉

Bizarr war „Cybernetics for the Masses„. Eine quirlige Dame anfang zwanzig hüpft nervös über die Bühne und erklärt, wie man sich in der eigenen Küche Implantate unter die Haut jagt. Die Materialwahl schein extrem schwierig zu sein, Rost ist ein großes Problem. Dazu gab es noch hilfreiche Tipps wie „kein Skalpell verwenden, lieber eine große Kanüle“, „Venen in den Fingern kann man prima mit einer Lampe finden“ und „nie alleine arbeiten, falls man mal das Bewusstsein verliert“.
L. hat diverse Implantate unter der Haut, z.B. Sensoren für elektromagnetische Felder. Wenn man so einen Sensor ein paar Wochen trägt, trainiert man das Gehirn so sehr an die Signale, dass der Sensor zu einem weiteren Sinnensorgan wird. Ich hatte von diesem Effekt schon mal vor 2 (?) Jahren in einem Biohacking-Talk auf dem Kongress gehört. Mir ist allerdings nicht ganz klar, was der Nutzwert so einer zusätzlichen Wahrnehmung ist.
Interessanter klang L.s aktuelles Projekt, sich einen elektrischen Kompass ins Bein zu implantieren. Gerade für solche orientierungslosen Menschen wie mich, wäre das ein prima Addon 🙂

27c3: Tag 3

Der Jahresrückblick ist für mich Pflichtveranstaltung, er bestätigt mich regelmäßig darin, dass der Mitgliedsbeitrag richtig investiert ist. Nirgends bekommt man mehr Verfassungsklagen und Lobbying für’s Geld als beim CCC 😉
Parallel dazu lief „A Critical Overview of 10 years of Privacy Enhancing Technologies“ und soweit ich das mitbekommen habe, war der Talk auch sehr gut, ich werde mir auf jeden Fall die Aufzeichnungen anschauen.

Danach wurde mit dem Deutschlandfunk „Was kommt nach dem analogen Radio?“ besprochen, was mich aber nicht sonderlich angesprochen hat. Es hat auf mich gewirkt, als ob der Deutschlandfunkt denk, er ist im digitalen 21. Jahrhundert angekommen und das Publikum ist der Meinung, Der DLF hat noch gar nichts verstanden, weil von „Sendezeit“ gesprochen wird.

Ich habe mich dann zu „SIP home gateways under fire“ verkrümelt. Der Vortrag von Wolfgang Beck war etwas wirr, letztendlich wurden diverse Möglichkeiten für Source Routing Angriffe aufgezählt. Wolfgang hätte den Vortrag ruhig etwas ausschmücken können, denn nur mit blanken SIP-Schnipseln ohne weiterführende Grafiken, hing das Verständnis der Zuhörer stark von deren Fähigkeiten ab, SIP in Echtzeit von den Folien zu parsen.

Den „PS3 Epic Fail“ wollte ich natürlich nicht verpassen. Im Vortrag wurde die These aufgestellt, dass die Play Station erst das Interesse der Hacker auf sich gezogen hat, als der Linux-Support offiziell eingestellt wurde. Erst als sich Hacker den Weg zurück zur Playstation (Slim) „erkämpfen“ mussten, haben als Nebeneffekt auch illegetim kopierte Spiele auf der Plattform Verbreitung gefunden.

Den Vortrag solltet Ihr Euch anschauen, es wird ein Sicherheitsmechanismus nach dem anderen zerlegt und das Highlight ist, dass das Team soweit gekommen ist, den Private Key (der Konsole?) zu berechnen, weil die Crypto-Funktionen eine Konstante verwenden, die eigentlich eine Zufallszahl sein soll. Sie haben sich dann in der Q&A-Session etwas gewunden und meinten sie zeigen nur wie es gehen könnte, aber ich hatte den starken Eindruck, dass sie im Besitz des Keys sind (so hat es fefe auch aufgefasst). Es ist unklar, ob das der generische Signing-Key ist oder ein Key der individuell pro Konsole ist. Wenn man den Signing-Key veröffentlichen würde, hätte das natürlich erhebliche Auswirkungen: jeder könnte Software für die Playstation signieren, finanziell würden Raubkopierer natürlich davon profitieren. Es ist auch nicht klar, ob Sony das Problem jemals beheben kann, denn es wurden Wege gezeigt, wie man die Playstation auf beliebige älte Firmware-Revisionen downgraden kann, da ist es irrelevant, wie viele Updates Sony hinterherschiebt.

Der Talk „IMMI, from concept to reality“ war etwas bizarr, Daniel Domscheit-Berg stand auf der Bühne um den Talk für seine verhinderte isländische Partnerin zu halten. Nach dem Talk drifteten die Fragen jedoch relativ schnell zu Wikileaks und Daniels neuem Projekt Openleaks.org. Ganz interessant war, dass er aus ähnlichen Motiven wie Julian ein Buch schreibt: damit er von dem Geld eine gewisse Zeit leben kann und diese Zeit in Openleaks investieren kann (Julian schreibt ein Buch um seine Anwaltskosten bezahlen zu könnnen).
Es scheint mit Openleaks noch bis in den Januar zu dauern, dann soll die Webseite zumindest mit einer detaillierten Erklärung zum Projekt online gehen. Laut Daniel wird es auch Support-Formulare geben, falls man die Platform in der einen oder anderen Art unterstützen möchte. Ich denke da an Bandbreiten- und Storage spenden, ähnlich wie beim Wikileaks Mass Mirroring Projekt.

Running your own GSM stack on a phone“ schaut ihr Euch am besten selbst an. Harald Welte hat das Thema (wie immer) ziemlich gründlich durchgearbeitet. Herausgekommen ist eine „Ethernet-Karte für das GSM-Netzwerk“, also eine Möglichkeit, nur mittels eines geeigneten GSM-Telefons direkt mit dem Netzwerk zu reden. Also bis auf Layer1 (also die ganze HF-Technik) wird alles auf einem normalen PC implementiert.
Es existiert mit OsmocomBB ein ganzes Toolset, mit dem man GSM erforschen kann. „Make interesting stuff“ ist Haralds Aufruf an die Community. Das ist natürlich hoch interessant – eine Basisstation kauft man sich nicht mal eben um mit OpenBSC herumzuspielen, aber ein 20 Euro Handy um GSM besser zu verstehen, finde ich schon ein geeigneteres Spielzeug.

27c3: Tag 2


(The internet is for porn.)

Ich habe den Tag mit Felix Domkes Vortrag „Distributed FPGA Number Crunching for the masses“ begonnen. Felix will DES (56bit) knacken und das möglichst preisgünstig. Nach Evaluierung aller Optionen (CPU, GPU, Cell Processor, FPGA) hat er sich für FPGAs entschieden. Leider sind die mitunter recht teuer, daher hat er auf ebay gebrauche Hardware ersteigert auf der FGPAs verbaut sind. Die Methode ist echt abenteuerlich, man muss bei einem unbekannten Board erstmal herausbekommen, welche Spannungsversorgung notwendig ist und wo die JTAG-Pins sitzen. Jedoch hat er pro FPGA nur $50 ausgegeben, statt $2000 (Listenpreis 2006). Sein Prototyp hat drei Boards á drei FPGAs, die einen 56bit Key in einer Woche berechnen können. Der Protyp verbraucht etwa 80 Watt, das ist weit mehr, als im „Normalbetrieb“.

Interessant finde ich, dass so ein Projekt mit ein paar Mannmonaten Arbeit möglich ist. Was wird möglich sein, wenn man extrem hohe finanzielle Resourcen zur Verfügung hat? Brute-Force Angriffe skalieren linear, je mehr Geld man auf das Problem wirft, desto größere Schlüssel können in zumutbarer Zeit geknackt werden. Welche Schlüssellängen kann man noch als sicher ansehen?

Die weiterführende Idee von Felix ist es, brach liegender FPGA-Power in einem verteilten Community Netz verfügbar zu machen, also ein distributed.net für FPGAs. Viel mehr als die Idee und ein paar Sourcecodefragmente existieren (noch) nicht, aber irgendwo muss man ja anfangen und ich bin gespannt, was wir auf dem nächsten Kongress von dem Projekt hören werden.

Ich habe dann ein paar Vorträge geskipt um mich in „Is the SSLiverse a safe place?“ zu setzen. Jesse und Peter von der EFF haben in drei Monaten das gesamte IPv4 Internet auf https-Server gescannt und die Zertifikate in eine Datenbank heruntergeladen. Die Datenbank gibt es per BitTorrent und man kann die Ergebnisse selbst auswerten – sofern man die Monster SQL-Queries entsprechend formulieren kann 😉
Soweit sind die Erkenntnisse aber nicht neu, EV-Zertifikate sind Geldschneiderei, die Browser vertrauen automatisch 1400 CAs, viele davon machen Fehler und dass das ssh-Security Modell „tofu“ (trust on first usage) im Browser implementiert werden soll, fordert fefe schon lange…
Trotzdem ein ganz interessanter Talk, Respekt vor der Leistung „das Internet“ zu scannen. Es gab auch gleich den Hinweis, dass es in Zukunft schwieriger werden wird. Etwa, weil dank SNI jetzt hinter einer IP mehrere SSL-Zertifikate lauern können. Und mit IPv6 werden es nicht weniger Hosts, die man scannen muss. Die EFF arbeitet an einem verteilten Ansatz, damit künftig User am Scan mitwirken können und so ein regelmäßiges Update der Datenbank möglich ist. Das impliziert natürlich auch eine zeitliche Nachverfolgung der Änderungen in der Zertifikatslandschaft.

Die Techniken zur Identifizierung von Netzwerk-Protokollen sind ein statistischer Ansatz um Netzwerkverkehr zu klassifizieren. Florian hat den SPID-Algorithmus in C++ re-implementiert – die Referenzimplementierung ist in C# realisiert – und schafft es damit auf einem Plastikrouter Traffic in Echtzeit zu klassifizieren. Der Ansatz ist von daher interessant, weil er ohne die sonst üblichen Deep Packet Inspection Techniken auskommt, die Paketweises Pattern Matching betreiben. Er schaut eher auf der Metaebene (Paketgröße, Richtungswechsel, Hash der ersten 4 Bytes des Paketes) und erlangt damit für die 17 untersuchten Netzwerkprotokolle eine sehr hohe Trefferrate – auch auf einem 40 Euro Plastikrouter.

Den Rest des Tages habe ich mir gesundheitsbedingt zu hause als Stream angeschaut. Klares Highlight war Daniel J. Bernstein Vortrag „High-speed high-security cryptography: encrypting and authenticating the whole Internet„. Der Vortrag ist sehr unterhaltsam, schaut Euch die Aufzeichnung an.

Im Prinzip mixt DJB ein paar bekannte und erprobte Elemtente um eine Art VPN aufzubauen. Er will HTTP-Traffic in UDP kapseln. DIe UDP-Pakete sollen einzeln verschlüsselt und signiert sein. Dank elliptischer Kurven mit vertretbaren Aufwand. Beim Client wird im Browser ein Proxy eingestellt, der Webserver nimmt die UDP-Pakete auf Port 53 an und leiten den entschlüsselten Verkehr an den richtigen Webserver weiter. Die Public-Key infrastruktur soll über DNS realisiert werden, nur dass die Public Keys im CNAME-Feld einer Domain untergebracht werden und nicht als TXT-Records wie bei DNSSEC (über das er ziemlich hergezogen ist, mangels Fachwissen kann ich nicht beurteilen, wie viel davon FUD und wieviel davon fundierte Kritik ist).
Mein Eindruck von seiner Lösung ist, dass er sich wirklich Gedanken gemacht hat. Er möchte gerne eine Art IPSEC möglichst simpel implementieren. Allerdings ist die Vorgestellte Lösung erstmal „nur“ für HTTP tauglich. Sicher lassen sich auch andere TCP-Protokolle tunneln, aber das steigert den Aufwand auf Clientseite (installation zusätzlicher Proxies), obwohl ich mir vorstellen kann, dass ein Browser diese Verschlüsselung nativ implementieren könnte.
Nachtrag: Siehe auch fefes Artikel dazu, heise berichtet ebenfalls.

27c3: Tag 1

Day0
Foto (cc) anders_hh

Verpeilung seitens der Bahn (Schnee) und meinerseits (müde) bin ich etwas spät im BCC angekommen und habe nur die Hälfte der Keynote von Rop mitbekommen.

Das Anzug-Anziehen hat sich gelohnt, gleich nach der Keynote wurde Nick auf die Bühne geholt, er war tatsächlich stilecht als Hacker gekleidet: Kapuzenpulli, Cargohosen, Turnschuhe… als Krönung gab es noch eine „goldene Uhr“, die sich als Mega-Bandwidth-Meter herausstellte („Porn“). Hier der Videobeweis (leider ohne Ton):

Nick hat sich gerächt und in den Pausen zwischen den Vorträgen die anderen Anzugträger #0daysuits ermahnt, wie man einen Anzug korrekt trägt: „Keine Krawatte? FAIL!“, „hey, den untersten Knopf lässt man offen…“.

Ich habe mich zunächst in den Vortrag von Branko Spasojevic gesetzt und mir etwas über „code deobfuscation by optimization“ angehört. Der Ansatz ist, verschleierten Code durch Optimierung wieder lesbar zu machen und so Malware leichter auf die Spur zu kommen. Branko hat ein Plugin für IDA veröffentlicht, das die Arbeit wesentlich erleichtert, in dem durch feste bzw. fälschlich konditionale Sprünge verteilte Codeblöcke zusammengefügt werden man so Funktionen wieder rekonstruieren kann. Allerdings habe ich zum letzten Mal im Studium Assembler programmiert (dazu noch auf Microcontrollern und nicht x86), so dass ich bei einigen Folien nur verwirrt lächeln konnte.

Darauf brauchte ich erstmal etwas leicht verdauliches und habe mir Alvar Freudes Zensursula-Rückblick angeschaut. Er hat das schwierige politische Thema echt unterhaltsam rübergebracht und daran erinnert, wie wichtig es ist, dass Nerds auf politscher Ebene mitwirken.

In der Pause habe ich mich mit S. unterhalten, der an sehr interessanten Sachen arbeitet und unter anderem einen TCP Port-Scanner geschrieben hat. Das besondere ist, dass der Scanner single threaded ist und dank einer kniffligen State-Machine 10.000 SSH-Handshakes pro Sekunde ausführen kann. Damit kann man dann tatsächlich „das Internet“ scannen, was aber in der Praxis schwieriger ist, als man denken sollte. Es gibt keinen Provider der solche Aktionen genehmigt, weil bei dieser großen Anzahl von Verbindungen Netzwerküberwachungsmechanismen Alarm schlagen. Das kann so weit führen, dass plötzlich das Routing zum Provider wegen bösartigem Traffic eingestellt wird, das will natürlich kein kommerzieller Provider. Bei einem normalen Portscan mit nmap ist das natürlich nicht der Fall.

Ein ganz netter Nebeneffekt von großen Portscans auf SSH ist, dass man Hosts anhand der Schlüssel wiedererkennen und nachverfolgen kann. Selbst wenn ein Host in ein anderes Rechenzentrum umzieht, kann man ihn wiederfinden. Oder man findet hosts hinter gateways wieder, d.h. der gleiche Key ist auf mehreren IPs zu finden. Oder man identifiziert Notebooks auf einer großen Hackerkonferenz, die per DHCP eine Adresse bekommen… eine schöne Spielwiese 🙂

Dann ging es zum Vortrag des Wistleblower-Netzwerk e.V. Ein ganz interessanter Einblick in die jüngere Geschichte des Whistleblowings und gleichzeitig die deprimierende Erkenntnis, dass man als Whistleblower immer anonym handeln sollte – was schwierig ist, sobald die Information, die man publizieren möchte, nur sehr wenigen Menschen zugänglich ist und man automatisch in den Kreis der Verdächtigen gerät. Wer sich als Whistleblower outet, ist eigentlich immer Repressionen ausgesetzt.

Super Interessant war der darauf folgende Vortrag „sms-o-death“ von Collin Mulliner und Nico Golde. Die beiden haben eine marktübliche Auswahl von 10 Telefonen von der Seite des GSM-Netzwerkes angegriffen. Das mag jetzt wie ein theoretischer Angriff klingen, man bedenke aber, dass man gebrauchte GSM-Basisstationen auf ebay kaufen kann und dass inzwischen Open Source Software wie OpenBSC frei verfügbar ist. Genau das haben Collin und Nico gemacht – natürlich in einem abgeschirmten Raum der TU-Berlin um nicht extra eine GSM-Testlizenz erwerben zu müssen. Sie haben sich in ihrem Angriffsszenario auf SMS beschränkt (geht auf jedem Telefon) und durch Fuzzing alle möglichen Felder auf ungültige Werte gesetzt. Insgesamt wurden 120.000 SMS an die Telefone gesendet, was nur eine kleine Auswahl der theoretisch möglichen Anzahl von Variationen ist.

Das große Problem bei diesem Angriff ist, automatisch herauszufinden ob das Telefon nach Empfang der manipulierten SMS abgestürtzt ist. Die Basisstation kann feststellen, dass das Telefon sich vom Netzwerk getrennt hat (spontaner Reboot). Weil manchmal Telefon die SMS stillschweigend „verschlucken“ wurde noch ein kleines J2ME Programm entwickelt, dass als SMS-Echo-Server fungiert und das nach dem Angriff noch antworten musste.

Die Ergebnisse waren ziemlich ernüchternd: alle Telefone sind angreifbar. Die Symptome sind meist ein Komplettabsturz des Telefons, mitunter ein Reboot. Nokia S40 Telefone kann man so aus der Ferne abschalten. Sie haben einen Watchdog, der nach drei aufeinander folgenden Reboots das Telefon automatisch runterfährt und ausschaltet.

Noch spanndender war allerdings, dass es bei drei von fünf untersuchten Herstellern überhaupt keine Kontaktmöglichkeit für Sicherheitsexperten gibt und entsprechend lang die Reaktionszeiten sind. Wie das Problem der Softwareupdates für billige Featurephones aussieht, haben wir ja schon beim „Curse of Silence“ gelernt.

Ich habe dann erstmal versucht nach hause zu kommen, auf ein Winderabenteuer mit der Deutschen Bahn nach ?itternacht hatte ich keine Lust. Den Netzneutralitätstalk habe ich sausen lassen, er wurde vom Deutschlandradio übertragen und hinterher kontrovers diskutiert. Ich muss mir erstmal die Aufzeichnung ansehen, bevor ich dazu eine eigene Meinung habe.
Via Stream habe ich mir noch die Vorträge „Desktop on the Linux“ (Rant eines gefrusteten Sysadmins…) und „Hacking iButtons“ (sehr interessant) angeschaut.

Klares Highlight zum Abschluss des Tages war jedoch „Adventures in analyzing Stuxnet“ von Bruce Dang. Bruce arbeitet bei Microsoft von daher war seine Perspektive besonders interssant. Der Vortrag drehte sich hauptsächlich um die Analyse der 0day-Lücken, die Stuxnet ausgenutzt hat um sich auf einer ganzen Bandbreite von Windowsversionen zuverlässig zu verbreiten.
Das interessante war, dass Stuxnet sich nur über Lücken verbreitet, die 100%ig funktionieren, weil sie ohne Speichermanipulation auskommen. Es gibt also keine Abstürze, weil der Buffer Overflow manchmal nicht funktioniert oder sonstige Nebeneffekte, die man sonst oft bei Malware findet. Der Vortrag war sehr unterhaltsam („so I was tired and watched porn“), schaut Euch auf jeden Fall die Aufzeichnung an.

27c3, Tag 0: Vorbereitungen

Morgen ist wieder Chaos Communication Congress, der 27. um genau zu sein. Ich habe gerade versucht zu rekonstruieren, seit wann ich dort hin fahre, was gar nicht so einfach war. Es waren mindestens zwei Veranstaltungen im Haus am Köllnischen Park dabei, dann wird wohl der 16C3 mein erster gewesen sein.

Ich schreibe das nicht, weil ich so ein cooler Tüp bin, der schon eeeewig dabei ist und ganz locker mit Wau gefachsimpelt hat (ich war zu schüchtern ihn anzusprechen…). Nein, ich will damit nur sagen, dass es mir ziemlich wichtig ist dort hin zufahren. Meine Familie muss in der Nachweihnachtszeit ziemlich zurückstecken während ich im BCC staunend zuhöre und zu verstehen versuche, was mir in vier Tagen ins Gehirn geprügelt wird.

Wenn man in den Fahrplan schaut, ist für jeden etwas dabei. Auf Twitter und im Wiki bahnen sich auch diverse Interessante Themen an. Ausgelöst durch einen Tweet von Joern, ist davon auszugehen, dass morgen diverse Nerds im Anzug auftauchen. Das ist eine schöne Idee, sonst sieht man auf dem Congress eher die Mehrheit im Kapuzenpulli rumschlumpfen. Der einzige Nerd, der grundsätzlich im Anzug auftaucht, ist Nick Farr 🙂 Natürlich mache ich ebenfalls mit, obwohl ich mit 0days wenig am Hut habe und ein Krawattenknoten mich in die Verzweiflung treiben kann.

Ein ganz interessanter Bug in MacOS X ist heute Abend bekannt geworden: Scheinbar crasht die Cisco WLAN Hardware alle Macs, die sich mit dem WLAN verbinden wollen.

(Foto von @robotviki)

Gerüchteweise klappt das sogar mit iOS-Geräten (ipad, ipod, iphone). Es wird schon fleissig nach dem magischen WLAN-Paket gesucht, das die Ursache ist. Da der Kongress traditionell eine recht hoche Dichte an Macs aufweist, wird es dieses Mal echt interessant. Man stelle sich das mal vor: ein WLAN-Paket und der ganze Saal 1 schreit entnervt auf 😉 Interessanter ist natürlich die Ausführung von Code auf dem angegriffenen Mac, aber ein reproduzierbarer Crash ist schon die halbe Miete. Bei Interesse an der Thematik kann man die Twitter-Hashtags #0day #27c3 verfolgen.

Ansonsten fühle ich mich ganz gut präpariert, das für den Kongress unverzichtbare VPN läuft, auf dem Smartphone ist die sehr empfehlenswerte 27c3 Anwendung von Simon Schoar installiert und der Rucksack fasst alle Weihnachtsschokolade, die ich den Kindern unter dem Vorwand „gesunde Ernährung ist wichtig“ geklaut habe. Möge der Kongress beginnen.

Portable __VA_ARGS__ macros for Linux, HP-UX, Solaris and AIX

I recently needed a macro with variable arguments that work on all mainstream compilers. I use gcc only on Linux, on the other platforms I want to use the „native“ compiler that belongs to the OS. Let’s start with Linux.

Linux

If you’re inside the gnu/gcc world, things are easy. This is what everybody tries first:

The problems start, if you want to use the macro without variable arguments.

gcc will not accept the code, because it resolves the macro to

(note the comma)

The gcc workaround for this kind of a situation is:

If „s“ is null, this erases the comma to the left of the „##“ in the macro definition. The resulting expansion is:

The comma is gone, the code compiles. Great.

HP-UX

However, this approach fails on HP-UX

I found the solution for this problem in the HP-docs:

you must insert a space to the left of the comma to make it clear to the preprocessor that the comma is the left operand of the „##“ operator.

Yes. A space. Left of the comma. Sigh….

The definition that works on Linux and HP’s cc -AC99 compiler looks like this:

Solaris

Solaris c89 compiles the above definition with a warning:

Solaris c99 compiler is very strict and allows

only. The documentation points out, that it is possible to use #__VA_ARGS__ which seems to be similar to GNU’s/HP’s ## Operator:

Ok, the code compiles, but calling PRINTERROR results in a „argument mismatch“-warning. I found no other solution than disabling the warning. Dirty but it works:

If course it is bad to hide warnings, but if your code is multi-platform, you can use very strict compiler settings on another platform to make the warnings visible at least there.

AIX

The original AIX-compiler (cc) does not complain, but c89 fails with

There is a langlvl #pragma to switch the compiler language level. All levels that allow implementation-specific language extensions are sufficient. I used extc99 which allows to use the c99 compiler. Simply add this to the beginning of your sourcefile:

The final result

This is the result of some hours browsing the compiler docs. The macro works on all c99-compilers mentioned above and allows zero arguments:

Of course you have to use the compiler switch -D_AIX, -D_SOLARIS or -D_HPUX on the apropriate platform. Let me know what do you think and how it could be done better.

Update: André suggests this solution (see his comment):

Ohrenfutter

Ich habe früher Podcasts ignoriert. Meine Einstellung dazu war etwa

Warum soll ich mir das Gequatsche von anderen Leuten anhören, schliesslich kann ich geschriebenen Text viel schneller parsen.

Irgendwann ist mir mal aufgegangen, dass ich in vielen Situationen nichts lesen kann oder will. Etwa beim Autofahren. Beim Einkaufen. Nach 10 Stunden im Büro. Beim Saubermachen – mein neues Hobby seit ich Kinder habe 😉 Mein ADS-versautes Gehirn verlangt nach einem kontinuierlichem Informationsbombardement.
Also Stöpsel ich mir einen Podcase in die Ohren. Und bin begeistert. Weil ich mich so drüber freue, dass ich Podcasts nun doch gut finde, gebe ich hier gerne meine derzeit liebsten Abonnements zum besten:

  • Chaosradio Express. Ok, wer Podcasts hört, hört sehr wahrscheinlich diesen Podcast. Wer keine Ahnung hat, was Podcasts sind: hört Euch eine beliebige Folge zum Thema Eurer Wahl an. Es ist für alle etwas dabei. Highlight für mich war Folge 147: Mikrokosmos, Makrokosmos.
  • Mobile Macs. Der chaotische Podcast für Apple-Fanboys. Ich habe zwar nur einen recht immobilen 25kg-Mac, verpasse aber trotzdem keine Folge. Gegenüber Bits und So erheblich mehr Nerd- aber auch mehr Quatschfaktor. Das Leiden lohnt sich aber für die 5% Informationsgehalt. Unglücklicherweise sind die interessanten Infos immer an einer anderen Stelle versteckt, so dass man gezwungen ist, sich den ganzen Podcast anzuhören.
  • Bits und So. Der „vernünftige“ Podcast für Apple Fanboys. Eigentlich ziemlich langweilig, aber es gibt mitunter gute Tipps für hilfreiche Applikationen. Seit Leo Becker vom fscklog mit dabei ist, gesteigerter Informationsgehalt. Höre ich trotzdem nur, wenn gerade alle anderen Podcasts alle sind.
  • Küchenradio. Ganz toll, ganz anders. Sehr viele gesellschaftliche Themen, je nach Besetzung stark schwankende Qualität. Zum Reinhören empfehle ich: NR. 268: Gentrifizierung.
  • Alternativlos. Die Fnord News Show für die Hosentasche. Hoher Unterhaltungs- und Geekfaktor. Kann man nicht beschreiben, einfach mal reinhören. Anspieltipp: die Folge zur Polizeigewalt.
  • Netzpolitik Podcast. Höre ich nur, wenn mich das Thema interessiert. Hauptsächlich macht die entspannte Art von Markus Beckedahl den Charme des Podcasts aus.
  • Elementarfragen. Leider im Moment inaktiver Podcast, der hautpsächlich für seine großartige Sendung zu Tschernobyl extrem viel positives Feedback erhalten hat. Hört Euch wenigstens diese Folge an. Es lohnt sich. Ich drücke die Daumen, dass die Sommerpause bei den Elementarfragen bald vorbei ist.
  • Pandroid Podcast. Ich war vor einer Weile mal auf der Suche nach einem vernünftigen Podcast zu Android. Aber das was man üblicherweise findet, sind Gadget-lastige Labersendungen („Oh wow, das neue Samsung Bla bla bla mit 12 Megabupsel Kamera…muss ich haben…“). Speziell die US-amerikanische Podcastlandschaft ist in der Beziehung unerträglich.

    Um so erfreuter war ich gestern, als ich gelesen habe, dass Yan Minagawa und Dirk Jäckel mit dem Pandroid Podcast gestartet sind und sich explizit mit der Softwareentwicklung für Android beschäftigen wollen. Sendung 01 ist nur 15 Minuten lang, aber schon sehr vielversprechend. Was dem Podcast noch fehlt, ist lediglich ein flattr-Button.

Ich bin immer noch auf der Suche nach guten Podcasts zur Softwareentwicklung. Es gibt zwar den heise developer Podcast, aber so richtig umhauen tut mich das nicht. Speziell Systemnahe Entwicklung unter Unix scheint ein unbesetztes Nischenthema zu sein. Über Empfehlungen freue ich mich in den Kommentaren.

gdb attach fails with ptrace: Operation not permitted

Today I ran into a weird problem. I could not attach to my own process with gdb. The process ran under my UID, but gdb refused to attach. This is a problem of wrong permissions, although /proc/[pid]/status looked ok:

I am the owner but cannot attach? Well, I launched gdb as root and could attach. Strange. Without digging deeper into this, my dirty workaround was this:

Update: Thanks to Mario, who pointed out, that the reason is the Kernel hardening stuff build into the Ubuntu kernel. See his comment how to fix the problem permanently.

Sonntagssoundtrack

1st rule is: The laws of Germany
2nd rule is: Be nice to your mommy
3rd rule is: Don’t talk to commies
4th rule is: Eat kosher salamis

J and S

The image does not look very innovative, but taking it was a lot of fun. After the obligatory "dancing book poses" the models got more relaxed. As always, the really interesting photos are taken at the end ("hey, there are some megabytes left on the sdcard, let’s try this…").

Strobist info: Octabox camera left (very close to the middle), one striplight right of the models, one SB-600 from the upper left corner of the background.

Camera Model: Nikon D90
Lens: Nikon AF-S DX Nikkor 18-105mm 1:3.5-5.6G ED VR
Focal Length: 24.00 mm
Focal Length (35mm Equiv): 36 mm
Exposure Time: 1/60 sec
F-Number: f/11
Shooting mode: Manual
Exposure bias: 0 EV
Flash: Yes
ISO: 200
Image at flickr, large version

Google Nexus One Review

Nexus One mit Fingerabdrücken und Neoprenhülle

Nexus One mit Fingerabdrücken und NeoprenhülleWie versprochen versuche ich mal meine Eindrücke vom Nexus One in Worte zu fassen. Es geht weniger um harte technische Fakten als um die Frage, was mir im täglichen Betrieb aufgefallen ist.

Wie man sieht, ist das Display in kürzester Zeit voller Fingerabdrücke und Spuren, die aber einfach wieder weggewischt werden können. Man sieht sie auch nur bei ausgeschaltetem Display und für das Foto habe ich noch ein wenig mit dem Blitz nachgeholfen 😉

Display und Touchscreen

Fangen wir mal mit dem Display an. Es ist hell, hochauflösend und gut lesbar. Die Fonts sind so klein noch lesbar, dass man aus schlechten Gewissen seinen Augen gegenüber lieber etwas heranzoomt.

Auf dem Foto rechts bekommt man eine Ahnung von der Auflösung des Bildschirms. Bei dieser Schriftgröße kann man den Text wirklich noch lesen, auch wenn die Augen bluten.

Normalereweise belasse ich die Helligkeit auf der kleinsten Stufe, das genügt für normale Umgebungen (In Büro, Wohnung oder ÖPNV) vollkommen. Draußen ist das Display gut lesbar, wenn man es auf 50 oder 100% Helligkeit regelt. Das praktische Energiesteuerungswidget erlaubt das mit einem Fingertipp.

Im Freien kann man die Spiegelung des Displays höherer Helligkeit ausgleichen – auf Kosten der Akkulaufzeit. Die automatische Helligkeitsregelung war mir unter Android 2.1 zu träge, aber mit Android 2.2 ist sie akzeptabel und ich verwende sie lieber als eine der festen Helligkeitsstufen.

Ok, das Display sieht gut aus, aber wie fässt es sich an? Nunja, der Touchscreen macht mich etwas fertig. Das größte Manko ist, dass genau der Mittelpunkt der berührten Fläche als Berührungspunkt an die Software weiter gegeben wird. Das ist zwar technisch korrekt, aber von der Usability quatsch. Aus der Perspektive des Benutzers sieht es so aus, als ob man einen Punkt weiter oben „berührt“, die Wölbung der Fingerkuppe führt aber dazu, dass man den Screen an einer anderen Stelle berührt als man denkt.

Ich habe das mal auf folgendem Foto illustriert. Die grüne Linie zeigt, wo man als Benutzer den Berührungspunkt erwartet. Die rote Linie zeigt, wo Android den Berührungspunkt registriert.

In der Praxis fühlt es sich so an, als ob man ständig ein Stück zu tief den Bildschirm berührt hat. An diese Unzulänglichkeit kann man sich zwar gewöhnen, aber ich denke die „Tippfehlerrate“ liesse sich senken, wenn Android den physikalischen Berührungspunkt umgerechnet an die Software weitergeben würde. iPhone/iPad-Benutzer wissen, wie sich die korrekte Implementierung des Touchscreen-offsets anfühlt 😉

Weiterhin habe ich den Eindruck dass der Touchscreen manchmal „prellt“ – also eine Berührung als mehrfache Berührungen interpretiert. Das führt speziell in Multitouch-Anwendungen wie google maps zu extremen Sprüngen beim Zoomen oder zu Doppeltipp-Aktionen, die gar nicht gewollt sind. Einen ähnlichen unschönen Effekt konnte ich mit meinem Daumen erzielen, der dank eines Unfalls in der Küche zeitweilig eine Delle an der Kuppe hatte, was zu zwei Berührungspunkten führte. Das ist natürlich wieder so ein Softwareding, Prellen kann man mit Totzeiten unterbinden (z.B. 0.1 Sekunde lang in 0.6cm Umkreis alle Berührungen ignorieren), warum Android das nicht macht, verstehe ich nicht.

Hardwaretasten, Trackball und Usability

Die vier „Hardwaretasten“ an der Unterseite des Displays sind eine Usability-Katastrophe. Tim hat in einer Folge von Mobile Macs gesagt, das wäre ein Medienbruch und dieser Begriff trifft den Nagel auf den Kopf. Man hat es mit einem Touchscreen-Telefon zu tun. Als Anwender erwarte ich, das Gerät vollständig über den Touchscreen bedienen zu können. Es gibt leider ein paar Aktionen, die ausschliesslich über das Kontextmenü erreichbar sind. Beispiel: ich kann in K9Mail die Mail nicht mit einem Button auf dem Screen absenden, sondern muss den Menüknopf drücken und dort „Send Mail“ auswählen.

Als Anwender erwarte ich natürlich, dass es immer mehrere Wege gibt, eine Aktion auszulösen und ich den Weg gehen kann, den ich in einer bestimmten Situation am ehesten erwarte. Daran ist google erstmal nur indirekt schuld. In erster Linie liegt es am Programmierer der jeweiligen Anwendung. Da jedes Android-Gerät über diese Tasten verfügt, denken die Softwareentwickler gar nicht darüber nach und setzen voraus, dass jeder Benutzer selbstverständlich die Hardwaretasten benutzt. Aktionen, die jedoch ausschliesslich auf den Hardwaretasten liegen, bleiben dem Benutzer verborgen.

Die Tasten sind beim Nexus One nicht als physikalische Knöpfe sondern als berührungsempfindliche Felder ausgeführt. Durch das bereits erwähnte Berührungsoffset-Problem des Touchscreens kommt es gelegentlich dazu, dass Tastendrücke nicht ausgewertet werden, weil die Fingerkuppe die Tastfläche zu weit unten berührt. Da man kein mechanisches Feedback hat, ist es unklar, ob die Taste gedrück wurde oder nicht.

Ohne Strengen Usability-Regeln, wie sie z.B. bei Apple herrschen, sehen natürlich alle Anwendungen anders aus und verhalten sich auch anders. Nur ein paar Beispiele: ein Doppeltipp auf den Text führt manchmal zum Vollbildmodus (NewsRob), Textumbruch (Android-Browser) oder zum rein/rauszoomen (Dolphin Browser HD).

Mitunter werden die Hardwaretasten auch unterschiedlich verwendet. So belegt NewsRob die Lauter/Leiser-Tasten per Default so, dass man damit durch die RSS-Artikel skippen kann. Die Zurücktaste führt meist dazu, dass man einen Bildschirm zurück kommt. Manchmal, z.B. bei Spielen kann sie aber auch das Spiel beenden (Jewels, Dolphin Browser bei langem Tastendruck).

Ein besonderer Patzer in sachen Usability ist das Thema Text markieren. Zunächst muss man den Cursor an Anfang oder Ende des zu markierenden Textes bewegen. Mit dem Finger klappt das kaum. Man muss … Trommelwirbel … den Trackball dafür benutzen. Total naheliegend, oder? Dann muss man lange aufs Textfeld drücken, im Kontextmenü „Text auswählen“ antippen und dann das andere Ende des zu markierenden Textes ansteuern. Entweder mit dem Finger, meist jedoch mit dem Trackball. Dann nochmal lange aufs Textfeld drücken und „kopieren“ oder „ausschneiden“ auswählen. Man denke mal an das Gespött, als Apple copy & paste auf dem iPhone eingeführt hat. Immerhin haben die es so hinbekommen, dass man es benutzen kann.

Das Headset ist eigentlich recht gut, man hat Tasten für die Annahme von Gesprächen (play/pause) sowie Next und Previous. Blöderweise wird Lauter / Leiser am Gerät eingestellt und das Telefon ist in dem Fall meist in der Hosentasche oder im Rucksack.

Bildschirmtastatur

Die normale Android-Tastatur ist gerade noch akzeptabel. Man kann mit ihr tippen, aber nicht besonders schnell oder fehlerarm. Ich weiss, dass es Better Keyboard gibt, aber eigentlich will ich eine swype-Tastatur. Leider gibt’s swype noch nicht mit deutschem Wörterbuch, sonst würde ich ohne Bedenken meine Kreditkarte zücken und swype kaufen.

Also muss ich mit der normalen Tastatur leben. Im Querformat kann man damit ganz passabel Texte tippen, im Hochformat lange ich zu oft daneben. Das Wörterbuch ist erstaunlich gut ausgebaut, allerdings gibt es ein nerviges Feature: Die Spacetaste führt dazu, dass das gerade vorgeschlagene Wort angenommen wird. Wenn man ein Wort eintippt, das es nicht im Wörterbuch gibt und dann Space drückt, fügt Android das Wort ein, das es als Alternative vorgeschlagen hat. Plötzlich hat man also völlig sinnfreie Wörter in seinem Text stehen und merkt das im schlimmsten Fall nicht gleich.

Positiv muss man anmerken, dass die Vorschläge recht intelligent sind und man meist schon nach drei eingetippten Buchstaben das entsprechende Wort aus den Vorschlägen auswählen kann. Das beschleunigt das Tippen von Texten ungemein.

Umlaute können nur mit langem Druck auf a, u und o eingegeben werden. Ein Wisch nach oben, wie beim iOS 4 wäre schön. Gibt es Android Keyboards, die das können? Obwohl, ich warte ja auf swype …

Manchmal gibt es Situationen, in denen man Elemtente auf der Seite nicht mehr erreicht, weil die Tastatur darüber liegt – man muss sie erstmal über die „Zurück“-Taste einfahren. Normalerweise kann man einfach die Seite „anfassen“ und nach oben schieben. Das klappt aber mitunter nicht. Ich habe schon sehr oft deswegen geflucht, bis ich bemerkt habe, dass in dieser Situation – Trommelwirbel – der Trackball es ermöglicht, die Seite hochzuscrollen. Schön, warum klappt das nicht mit dem Finger?

Performance

Die Performance des Systems ist gut, meist lässt es sich flüssig bedienen und die Anwendungen starten sehr flott. Nur selten – meist mit vielen Anwendungen im Hintergrund – ruckeln Displayanimationen. Anwendungen selbst sind sehr schnell, der Bildaufbau im Browser hat fast Desktop-Niveau. Mit Android 2.2 ist das ganze noch ein bisschen flotter geworden. Das gelegentliche Ruckeln der Displayanimationen ist aber nicht ganz verschwunden.

Gelegentlich legt das Telefon bei vielen offenen Anwendungen auch eine Gedenksekunde ein. Das ist besonders verwirrend, wenn man gerade den Touchscreen berührt oder eine Hardwaretaste gedrückt hat und nicht weiss, ob der Tastendruck empfangen wurde oder ob das Telefon nur gerade angestrengt loopt. Die kurzen Aussetzer führen dazu, dass man zur Sicherheit nochmal den gleichen Knopf drückt und beide Tastendrücke vom System verarbeitet werden, was oft vom Benutzer nicht gewünscht ist.

Market

Tja, es gibt angeblich über 100.000 Anwendungen im Market, allerdings ist es trotzdem schwer dort etwas vernünftiges zu finden. Das Preisniveau bei bezahlten Anwendungen scheint höher als im Apple AppStore zu sein, allerdings gibt es auch sehr viele „kostenlose“, meist jedoch werbefinanzierte Anwendungen. Oft stößt man dabei auf das in Verruf geratene Admob.

Die Liste der bei mir installierten Anwendungen ist ein extra Artikel wert. Soviel jedoch: ich habe noch keine Anwendung gekauft. Meist aus Geiz, es ist aber auch schwer im Market gute Anwendungen zu finden, weil die Suche nicht nach Userbewertung sortieren kann. Da muss man auf externe Seiten wie AndroidPit zurückgreifen.

Macken

Absolut subjektiv und ohne es näher untersucht zu haben: der 3g Empfang ist gefühlt schlechter als bei meinem Nokia Knochen. Es kann aber auch am schrottigen E+ Netz liegen, aber ich habe öfters EDGE Empfang, wo ich 3G erwarten würde.

Die Verbindungsfreudigkeit zu WLANs ist begrenzt, meist hat mein Notebook noch guten WLAN-Empfang, wo das Nexus One schon auf 3G umschaltet.

Manchmal kann man auf die SD-Karte nicht zugreifen. Das ist sehr nervig. Die Karte ist dann nicht verfügbar und alle Anwendungen, die darauf zugreifen, versagen mehr oder minder elegant. Beispiel Kamera: man kann aus heiterem Himmel keine Fotos / Filme mehr machen. Es gibt aber keine Fehlermeldung, sondern der Druck auf den Aufnahmeknopf wird ignoriert. Erst hinterher merkt man, dass kein Foto / Film gemacht wurde 🙁
Schlimmer ist dieser Fehler jedoch im Zusammenhang mit dem (exzellenten!) RSS-Reader NewsRob: der Speichert Feedinhalte auf der SD-Karte. Wenn die Karte mitten im Feed-Updateprozess versagt, hängt sich das ganze System auf. Man kommt nicht mal mehr an den Lockscreen. Das ist kein Fehler von NewsRob aber extrem nervig.
Die einzige Abhilfe: Telefon ausschalten, Akku raus, Akku rein, einschalten. Nicht gerade eine Aktion, die man öfters durchführen will. Das hatte ich heute vormittag 10 Mal und war entsprechend gut gelaunt. Ich habe dann den Cache von NewsRob auf den internen Speicher des Telefons gelegt und seit dem scheint das Problem nicht mehr aufzutreten.

Multitasking und Akku

Wo beim iPhone das Problem besteht, mehrere Anwendungen parallel laufen zu lassen, besteht bei Android das Problem, die Anwendungen zu beenden. Ja, richtig gelesen. Bei Android soll sich die VM um das Beenden kümmern, nämlich dann, wenn der Speicher knapp wird. Das wäre soweit auch kein Problem, aber manche Anwendungen laden in regelmäßig Daten aus dem Netz nach. Das drückt natürlich die Akkulaufzeit. Gute Kandidaten dafür sind rss-Reader, Twitter-Clients etc. Als Anwender hat man erstmal keinen Überblick, welche Anwendungen noch im Hintergrund Daten transferieren.

Ich habe mir angewöhnt Anwendungen regelmäßig mit einem Taskmanager zu beenden und die poll-Intervalle sehr groß zu setzen oder gleich die Tweets von Hand zu pollen. Leider lädt die offizielle Andoid Twitter App nur die Tweets der letzten Stunde…

Das Multitasking an sich ist jedoch gut und kann wie erwartet eingesetzt werden. Also Feedreader auf, Link im Browser öffnen, Artikel lesen, Twitter-Client öffnen, Artikel posten, zurück zum Feedreader … das klappt soweit sehr gut.

Der morgends frisch aufgeladene Akku ist bei meinem Nutzungsverhalten Abends leer. Das ist natürlich ziemlich ernüchternd. Ich nutze das Telefon auch extrem intensiv, aber auch bei sparsamer Nutzung scheint nicht mehr als 24 Stunden Laufzeit drin zu sein. Ich denke man könnte noch 1/3 mehr Laufzeit mit guter Softwareoptimierung rausholen, aber gegenüber Telefonen wie dem Nokia E71 sieht das Nexus One akkumäßig ziemlich alt aus.

Was ist denn eigentlich gut an Android?

Bisher habe ich eher die Schwachstellen aufgezeigt. Hier ein paar Dinge, die das Telefon wunderbar und unverzichbar machen:

Die mitgelieferte Neoprentasche ist prima. Man kan das Telefon ohne Bedenken in den Rucksack pfeffern oder es einfach mal fallen lassen. Genau das richtige für mich 😉

Die Notifications in Android sind sehr schön gelöst. Die Notifications tauchen mit eine *pling* auf und stören den Workflow nicht. Wenn man Zeit hat, sich darum zu kümmern, zieht man die Icon-Leiste von oben runter und kann einzelne notifications antippen (und die damit verbundene Aktion auslösen) oder alle löschen.

Push-Mail funktioniert ebenfalls sehr gut. Sowohl gmail als auch k9mail (unverzichtbarer imap-Client) melden sich sofort, wenn eine neue Mail eingetroffen ist. Verglichen mit der Nokia-Anwendung funktioniert push-Mail zuverlässiger und schneller.

Die google-Navigation funktioniert sehr gut. Mein Auto-Navi will immer eine exakte Adresse und kennt kaum POIs. Google dagegen gibt sich notfalls mit einem Stichwort zufrieden („Oktoberfest“).

Als Radfahrer in einer fremden Stadt ist die Navigation mit Headset schön. Einfach das Telefon in den Rucksack oder die Hosentasche stecken und sich von der freundlichen Google-Dame leiten lassen. Der GPS-Empfang ist durch den Stoff nicht merklich eingeschränkt.

Die Spracheingabe liefert gute Ergebnisse. Allerdings ist muss man schon ziemlich schmerzbefreit sein, wenn man sie in der Öffentlichkeit nutzt. Es sieht einfach ziemlich dämlich aus, wenn man mitten in München steht und „Englischer Garten, München“ in seinen Tricorder spricht. Meine Freundin ist vor Scham im Boden versunken 😉

Die Kamera macht gute Bilder. Für ein Telefon sogar exzellente. Ich habe nicht das Bedürfnis eine Kompaktkamera dabei zu haben, weil ich den Alltag mit meiner Familie prima mit dem Nexus One festhalten kann. Es gibt Schwächen in extremen Lichtsituationen, aber als immer-dabei Kamera reicht das Telefon locker aus.

Natürlich hat das Nexus One einen gewissen Hackvalue. USB-Kabel ran, SDK installiert und los. Anderes Firmware-Image ausprobieren? Kein Problem…

Fazit

Würde ich so ein Telefon meinen Eltern empfehlen? Nein. Gerade der SD-Karten Fehler und die schlechte Usability sind k.o. Kriterium. Würde ich lieber ein iPhone haben wollen: weiss ich nicht. Immerhin hat Apple eine gut besetzte QA-Abteilung, die Anwendungen auf Herz- und Nieren prüft, bevor sie auf die Menschheit losgelassen werden.
Ich bin nach wie vor unsicher, ob das Telefon ein guter Kauf war. Vielleicht bin ich zu kritisch und als Mac-Anwender zu Usability-fixiert. Allerdings erwarte ich von 415 Euro in meiner Hand, dass sie einfache Tasks vernünftig und zuverlässig erledigen. Das klappt leider nur bedingt.

/etc unter Versionskontrolle mit git

Auf unserem Freifunkserver sind teilweise mehrere Admins am Werk. Damit Änderungen an der Konfiguration nachvollziehbar werden und man auch nach einem halben Jahr weiss, was man eigentlich gemacht hat, steht das Verzeichnis /etc unter Versionskontrolle.

Ich hatte das schon mal auf unserem alten Server mit svn, aber das Hauptproblem war, dass ich immer vergessen habe meine Änderungen zu committen. Folglich sammeln sich über Tage/Wochen/Monate Änderungen an und man weiss gar nicht mehr, was jede einzelne Änderung zu bedeuten hat.

Zum Glück hat mich Wulf vom Berliner Freifunk auf eine super Idee gebacht: man kann das commit-Kommando in der .bash_logout von root unterbringen. Sobald root seine Session beendet hat, passiert folgendes:

  • /etc wurde nicht verändert: es passiert gar nix
  • /etc wurde verändert: es öffnet sich ein Editor, in dem man seine Änderungen kurz beschreiben muss. Nach dem Abspeichern erfolgt automatisch der commit

Prima Sache. In der Praxis gibt es damit aber noch ein kleines Problem: „sudo su -“ berücksichtigt die .bash_logout, „sudo su“ jedoch nicht. Da ich meine Schlampigkeit kenne, habe ich eine Lösung gefunden, die in beiden Fällen funktioniert: ein exit-Trap. Das ganze wird in die .bashrc vom root eingebaut:

Der/die geneigte Leser/in mag hier nach Belieben noch Funktionen ranbauen, die z.B. den diff des letzten commits per Mail versenden 🙂

Vorbereitungen: erste Teststrecke

Ich habe mal einen Track aufgezeichnet. Gibt’s noch etwas besseres als google maps um GPX-Daten zu visualisieren? Ich suche etwas mit Höhen und Geschwindigkeitsprofilen. Als Desktop-Tool habe ich Trailrunner ausprobiert, das sieht echt vielversprechend aus, auch wenn es eher auf laufen ausgelegt ist.

Wir sind zu viert gemächlich gefahren, 20km in 153 Minuten, davon gut eine Stunde Mittagspause, also sind es ca. 13 km/h Durchschnittsgeschwindigkeit. Wir gehen von maximal 2x 2 Stunden Fahrtzeit aus, mehr wollen wir den Zwergen nicht zumuten. Von daher habe ich heute relativ konservative Streckenabschnitte von 30-40km aufgeteilt. Ich muss halt den Lance Armstrong in mir etwas zügeln, wir sind ja nicht in Frankreich 😉


Rshnhsn -> Sülzfeld -> U-Feld -> Rshnhsn auf einer größeren Karte anzeigen

Pages: <<< 1 2 3 4 5 6 7 8 ... 95 96 97 >>>