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

Feiner Fug

Der New Yorker Steward, der nach eigenen Angaben seit über zweieinhalb Jahren bei JetBlue arbeitet, ist nun wegen vorsätzlicher Gefährdung, groben Unfugs und Hausfriedensbruchs angeklagt.

(von hier)

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:

# erstmal die letzten 10 commits anzeigen
echo "***************************************************************"
(cd /etc; git log -10 --reversepretty=’format:%cd (%h)%n%s%n’ )
echo "***************************************************************"
 
# exit trap, schlägt beim Logout zu 
function on_exit()
{
  cd /etc/
  git commit -a
}
 
trap on_exit EXIT

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

Vorbereitungen: Smartphone am Fahrradlenker

Bis zum Start ist es noch ein bisschen, aber wir sind schon voll im Vorbereitungsfieber. Packlisten werden erstellt, Testfahren gefahren, Schwiegermütter beruhigt.
Natürlich ist ein GPS-Tracker für den Fahrradausflug Pflicht. Sonst hätte ich ja gar keine Rechtfertigung für mein neues Hosentascheninternet. Die Frage der Befestigung habe ich recht pragmatisch gelöst – das Telefon kommt in die Lenkertasche. Es gibt zwar spezielle Halterungen für Smartphones, aber ich habe eh keinen Platz am Lenker und das gute Stück will ja auch wetterfest verpackt werden. Die zu meiner Lenkertasche passende Kartenhülle ist wasserdicht und – oh Wunder – erlaubt die Bedienung des Touchscreens durch die Folie hindurch. Man merkt fast keinen Unterschied und muss nicht besonders stark aufdrücken.

Die Lesbarkeit ist bei maximaler Helligkeit völlig ok, lediglich, wenn die Sonne genau auf die Folie scheint, sieht man nichts mehr. Während der Fahrt wird das Telefon sowieso nicht bedient und im Stand kann ich auch den Lenker kurz drehen.

Was ich gerade so mache

image

Bloggen jedenfalls selten. Die Kollegen haben immer gefragt „…und wie lange bist Du dann nochmal im Urlaub?“. Ich pflege dann immer ernst zu gucken und sage „Elternzeit, nicht Urlaub. Ich erziehe meine Kinder“. Hätte die zwei Monate mal in den Winter legen sollen.

Überhaupt, so lange ist das gar nicht. Meine Freundin kann 12 Monate blau machen, darüber wundert sich auch keiner 🙂

Also was mache ich eigentlich den ganzen Tag? Fotos mache ich viele. Nur keine, die ich hier posten kann. Hochzeiten. Unser jüngstes Kind wurde getauft.

Ach ja, die Kinder. Irgendwo zwischen Lachanfall und Nervenzusammenbruch marodiert man so durch den Tag. Trotz ausgefeilter Logistik sind wir auf Tagesausflügen bepackt, wie andere bei der Besteigung eines Achttausenders. Aber es ist großartig dabei zu sein, die ganzen Highlights mitzuerleben. Die Flugzeuge gestern, ganz nah und ganz laut. Mit Propeller „der dreht sich!“. Die Dampflok heute, die zischt und pfeift und pufft. Wenn einem ein 26 Monate altes Kind mit seinem begrenzten Wortschatz in aller Ausführlichkeit das Erlebte beschreibt, ist das so eine Mischung aus zufriedenem Grinsen und stolz geschwellter Brust.

Dann freue ich mich aufs Fahrrad fahren. Ich bin voll angefixt und kann nicht genug Kilometer treten. Unsere Fahrräder sind eher Lowtech, aber um so größer ist der Spaß. Der Plan sind mindestens 300km, wenn es gut läuft auch 600km. Solo sicherlich ein klax, aber mit zwei Anhängern – einer für die Kinder, einer für’s Gepäck – schon eine Herausforderung.
Ich rechne schon ständig Durschnittsgeschwindigkeiten aus um planen zu können. Egal wie ich es drehe, mehr als 13km/h werden es nicht. Naja, kleine Etappen, wir haben ja Zeit. So lange wir regelmäßig an einer Waschmaschine vorbei kommen, ist alles gut.

Tja, Wäsche waschen ist auch so ein großes Hobby geworden. Das große Kind trocken zu bekommen und dabei eine Reise mit Minimalgepäck zu unternehmen… Abenteuer pur.

Dann griffel ich noch Tag und Nacht an meinem neuen Telefon rum. Nach drei Jahren Symbian-Masochismus war ich dann von den vielen Apple-Werbemaßnahmen überzeugt und hab mir ein google-Phone geklickt. Die Usability ist unterhaltsam (und um Welten besser als alles was ich von Nokia kenne), aber die vielen Features und theoretischen Möglichkeiten überwiegen die Patzer in der Bedienung. Aber zu dem Thema muss ich nochmal ein richtiges Review schreiben, im Moment bin ich noch am entdecken und staunen (und fluchen).

Hier wäre jetzt Platz für ein Fazit. Ich sage mal: Kinder fetzen, legt los und macht Euch welche. Ist ganz einfach und man hat dann viel Spaß.

ssh host-key Prüfung abschalten

Ich habe oft verschiedene WLAN-Router an meinem Rechner. Jeder Router ist auf dem LAN-Port über die gleiche IP zu erreichen (i.d.R. 192.168.1.1), allerdings hat jeder Router einen anderen ssh host-key. Wechsel ich den Router, schlägt die Überprüfung des Keys fehlt, weil unter der gleichen IP plötzlich ein anderer Key presentiert wird. Die Lösung habe ich hier gefunden und sieht so aus:

Host router
        Hostname 192.168.1.1
        StrictHostKeyChecking no
        UserKnownHostsFile=/dev/null
        User root

Geforkte Prozesse mit Netbeans debuggen

Debugging unter Linux/Unix ist ein großer Haufen Mist. Zumindest, wenn man schon mal mit Visual Studio gearbeitet hat. Ich sitze gerade an einem Produkt, dass massiv Prozesse forkt und irgendwo in einem Child steckt ein Bug.

Weil das Erzeugen und das Beenden der Prozesse ziemlich schnell geht, kann man sich nicht an den Prozess attachen, er ist schon lange wieder weg, bevor der Debugger oben ist. Findige Kollegen haben dann soetwas in den Code eingebaut:

  if (getenv("DEBUG_XYZ")) kill (getpid(),SIGSTOP);

Ich muss also eine Umgebungsvariable DEBUG_XYZ setzen, den Master-Prozess neu starten und irgendwann wird der fragliche Prozess als Gestoppt in der Prozessliste stehen, ich kann mich in Ruhe attachen und debuggen.
Die Lösung hat natürlich massive Nachteile: ich muss den Code jedesmal ändern, wenn ich den „Breakpoint“ verschieben will und schlimmstenfalls kommt solcher Code versehentlich ins finale Release.

Es geht ein bisschen besser, wenn man gdb benutzt, der kann nämlich beim Fork entweder dem Parent- oder dem Childprozess folgen:

set follow-fork-mode mode

Wobei mode entweder „child“, „parent“ oder „ask“ ist. Nun will niemand „nativ“ mit dem gdb debuggen, man spannt Netbeans davor. Damit man aber in Netbeans den follow-fork-mode setzen kann, braucht man erstmal eine GDB Debugger Console:

-J-Dgdb.console.window=true

muss unter netbeans_default_options in der netbeans.conf hinzugefügt werden.

Jetzt kann man zumindest das Debugging starten und sich entscheiden, ob man den Childs oder den Parents folgt. „ask“ geht komischerweise nicht. Auch muss man scheinbar den follow-fork-mode bei jedem Start neu setzen.

Das ist immernoch ein riesengroßer Haufen Mist. Aber zumindest habe ich schöne gelbe Gummistifel an. Geht das nicht einfacher? 🙁

Watchdog script to supervise /proc/user_beancounters

I’m in the process of setting up my new server. The services are running inside OpenVZ-Containers. The Problem is, that you don’t know how to setup the resource parameters. You have to walk the way of trial and error, because you don’t how much resources the services consume under productive load.

After migrating some domains, my postfix process died last night because of a lack of pirvvmpages. So I wrote a script that monitors changes in /proc/user_beancounters of every container. The script runs from crontab every 5 minutes and compares UBC failcounter values to the last known values. If there is a difference, a mail is sent to root.

Feel free to re-write the script in your favorite language 😉

#!/bin/sh
# get running VEs
VES=`vzlist -H -o veid`
MAILFILE=/var/run/ubcWatchdog_mail.txt
 
# check every running VE
for VE in $VES; do
  # create file if it does not exist
  NEWFCFILE=/var/run/ubcWatchdog_$VE.new.txt
  OLDFCFILE=/var/run/ubcWatchdog_$VE.txt
  touch $NEWFCFILE
  touch $OLDFCFILE
 
  # save current failcounter
  vzctl exec $VE 'cat /proc/user_beancounters' | cut -b 13-129 | sed 's/ \+/ /g' | awk {'print $6 "\t"  $1'} > $NEWFCFILE
 
  # compare to reference failcounter
  diff -U 0 -d $OLDFCFILE $NEWFCFILE > /dev/null
  if [ $? != 0 ]; then              
    # yepp, something failed
    echo "****************************************" >> $MAILFILE
    echo "UBC fail in VE $VE!" >> $MAILFILE
    diff -U 0 -d $OLDFCFILE $NEWFCFILE | grep "^[+,-][a-z,A-Z,0-9]\+" >> $MAILFILE
    echo "****************************************" >> $MAILFILE
    echo "" >> $MAILFILE
    echo "UBC now:" >> $MAILFILE
    vzctl exec $VE 'cat /proc/user_beancounters' >> $MAILFILE
  fi
 
  # save new failcounter as reference
  mv $NEWFCFILE $OLDFCFILE
done;
 
# send mail to root
if [ -f $MAILFILE ]; then
  mail -s "UBC Fail!" root < $MAILFILE
  rm $MAILFILE
fi

The mail looks like this:

****************************************
UBC fail in VE 20!
-205 kmemsize
+59936 kmemsize
****************************************

And is the result of a fork-bomb that exploded inside VE 20 🙂

dovecot deliver – Fatal: postmaster_address setting not given

It took me an hour to figure out the reason for this message. The only hint is, that there might be special characters like tabs in the config file. But in my case, the reason was the dovecot-postfix package of Ubuntu 9.10.

There are two config-files: /etc/dovecot/dovecot-postfix.conf and /etc/dovecot/dovecot.conf. The header says:

# If there's a file /etc/dovecot/dovecot-postfix.conf, which is part of
# dovecot-postfix package, it will be used instead of dovecot.conf.
 
# Keep in mind that, if that file exist, none of the changes in
# /etc/dovecot/dovecot.conf will have effect on dovecot's configuration.
# In that case you should customize /etc/dovecot/dovecot-postfix.conf.

The problem: dovecot’s deliver command ignores dovecot-postfix.conf and reads it’s config from /etc/dovecot/dovecot.conf 🙁

Ok, how to fix this? Open /etc/postfix/master.cf and specify the configfile using the -c parameter of the deliver-command:

dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -c /etc/dovecot/dovecot-postfix.conf -f ${sender} -d ${recipient}

See bug #511295.

pam-ldap: I have no name! (ubuntu)

Ich bin gerade über einen blöden Fehler gestolpert, den ich nicht noch einmal machen möchte… Ich habe an pam und ldap geschraubt und plötzlich konnten Gruppen und User-IDs nicht mehr aufgelöst werden:

groups: cannot find name for group ID 1000
I have no name!@vz10:~$

In einem nahezu identischen System ging es ohne Probleme. Ein Vergleich der beiden /etc-Verzeichnisse hat keine Auffälligkeiten gezeigt. Nachdem ich drauf und dran war, das System wegzuschmeißen und neu aufzusetzen, habe ich doch noch die Lösung gefunden:

/etc/ldap.conf muss für alle User lesbar sein. Ich hatte testweise ein Bind-Password eingetragen und aus diesem Grund die Rechte der Datei eingeschränkt. Ein einfaches

chmod 644 /etc/ldap.conf

hat das Problem gelöst 🙂

Debian Lenny auf einem Rootserver mit Raid-1 und LVM

Das ist ein Update zu meiner alten Anleitung. Der Unterschied zur alten Anleitung:

  • Dieses Mal soll ein Server unter Debian Lenny eingerichtet werden
  • Swap liegt ebenfalls im Raid
  • Der Server soll mit OpenVZ virtualisierte Maschinen hosten
  • Das root-Dateisystem soll ebenfalls im LVM liegen, damit wir beim Backup konsistente Snapshots vom gesamten System machen können

Hier also das Update zu meiner rundum-sorglos copy&paste-Anleitung zur Einrichtung von

Debian Lenny auf einem Rootserver mit Raid-1 und LVM

„Debian Lenny auf einem Rootserver mit Raid-1 und LVM“ weiterlesen

OpenLDAP Replikation mit syncprov

Für einen neuen Server in unserer Rootserver-Kommune brauche ich eine Replik unseres LDAP-Servers. Wie sich herausstellte, ist das ziemlich einfach und in der umfangreichen Dokumentation exzellent erklärt.

Im zu replizierenden LDAP-Server („Provider“) muss man lediglich dafür sorgen, dass das syncprov-Modul in der slapd.conf geladen wird:

modulepath      /usr/lib/ldap
moduleload      back_hdb
moduleload      syncprov

Im Zielserver („Consumer“), wird so eine 1:1 Replikation des Quellservers konfiguriert:

# replication settings
syncrepl rid=001
    provider=ldaps://ldaps.yourdomain.de:636
    type=refreshAndPersist
    searchbase="dc=yourdomain,dc=de"
    schemachecking=on
    type=refreshAndPersist
    retry="60 +"
    bindmethod=simple
    binddn="cn=replicator,dc=yourdomain,dc=de"
    credentials=assword

Natürlich müssen im Quellserver entsprechende Credentials hinterlegt werden. Durch das Keyword refreshAndPersist bleibt die Verbindung dauerhaft bestehen und Änderungen im Quellserver werden sofort auf dem Zielserver repliziert.

Achtung: im Zielserver müssen natürlich die gleichen Schemata geladen sein, wie im Quellserver. Schaut euch also die Include-Section entsprechend an, sonst hagelt es Fehler.

Mit dieser Methode kann man den LDAP-Server super-komfortabel umziehen, einfach Replikation einschalten, DNS-umschwenken und dann die Replikation auf dem Zielserver ausschalten.

DynDNS mit dem Alice Modem 1121 WLAN

Das Alice Modem 1121 WLAN bzw. TV hat eine recht spartanische Administrationsoberfläche. Man kann wirklich nur das Nötigste einstellen, eine Möglichkeite den beliebten DynDNS-Dienst zu konfigurieren, sucht man vergeblich.

Die Modemsoftware bringt jedoch einen DynDNS-Client mit, allerdings ist der nur via Telnet zu konfigurieren. Das Modem ist vom LAN und WLAN aus unter seiner Standard-IP 192.168.1.1 erreichbar.

Die Zugangsdaten lauten:

  • User: admin
  • Passwort: AliceXXXXXX123

Die Zeichenfolge XXXXXX muss durch die letzten sechs Zeichen der LAN MAC-Adresse des Modems ersetzt werden. Lautet die MAC-Adresse des Modems z.B. 00:25:5E:AB:64:FE, so muss man als Passwort AliceAB64FE123 verwenden:

$ telnet 192.168.1.1
 
Entering character mode
Escape character is '^]'.
 
Alice Modem WLAN 1121
Login: admin
Password: AliceAB64FE123
 
>

Man findet sich auf einer kastrierten Linux(?)-Shell wieder. help liefert eine Liste der möglichen Kommandos. Mit ddns kann man den DynDNS-Client konfigurieren:

> ddns
ddns add hostname --username username --password password --interface interface --service tzo|dyndns
     remove hostname
     show
ddns --help>

Ok, mit add fügt man eine DynDNS-Konfiguration hinzu, mit remove wird sie wieder entfernt und mit show kann man alle anzeigen lassen.

Der folende Aufruf fügt eine Konfiguration für den Hostnamen myhomedsl.dyndns.org beim Dienst dyndns mit dem Usenamen user6 und dem Passwort 123456 hinzu:

ddns add myhomedsl.dyndns.org --username user6 --password 123456 --interface ppp_0_1_32_1  --service dyndns

Wichtig: man muss im parameter --interface den Namen des WLAN-Interfaces eingeben. Den Namen bekommt man mit dem Kommando ifconfig heraus. Es listet alle Interfaces auf, gesucht ist das mit ppp im Namen:

ppp_0_1_32_1    Link encap:Point-Point Protocol  
                inet addr:85.178.209.191  P-t-P:213.191.89.4  Mask:255.255.255.255
                UP POINTOPOINT RUNNING NOARP ALLMULTI MULTICAST  MTU:1492  Metric:1
                RX packets:9540 errors:0 dropped:0 overruns:0 frame:0
                TX packets:7456 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:3 
                RX bytes:6444034 (6.1 MiB)  TX bytes:1135835 (1.0 MiB)

In meinem Beispiel lautet der Name des Interfaces also ppp_0_1_32_1.

Papa Loch!

Kind 1: (zeigt auf Knie) „Papa Loch!“
Papa: „Ja, die Hose hat ein Loch.“
Kind 1: (zeigt auf anderes Knie) „Papa, auch Loch!“
Papa: „Ja, da ist noch ein Loch.“
Kind 1: „Cool!“
Papa: (grinst)

Cancer Clan

Shot for the upcoming third demo of Cancer Clan.

The setup was pretty simple:

Cancer Clan light setup

We tried to use a second flash to get a shadow of the chainsaw-blade. It was hard to adjust everything and when we got finally a good shadow, the whole photo looked pretty boring…

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

Double Galaxy

If you come close enough, you will see a double galaxy 😉

Camera Model: Nikon D90
Lens: Sigma 150mm 2.8 EX Makro
Focal Length: 150.00 mm
Focal Length (35mm Equiv): 225 mm
Exposure Time: 1/200 sec
F-Number: f/2.8
Shooting mode: Manual
Exposure bias: 0 EV
Flash: Yes
ISO: 200
Image at flickr, large version