Immer ehrlich programmieren

Geschrieben von everflux am Januar 23rd, 2008

Mich hat heute etwas rund drei Stunden Lebenszeit gekostet und ich weiß noch nicht ob ich sauer sein sollte – und wenn ja, auf wen.
Die Ursache: In einer verteilten Anwendung gibt es Objekte, die eine lokale Repräsentation haben, und zusätzlich entfernt gespeichert werden. Bei der entfernten Speicherung gibt es für jedes Objekt eine Identität die durch eine „ID“ repräsentiert wird und ein paar Daten.
Für die lokale Speicherung gibt es eine Identität die durch eine – nicht notwendigerweise gleiche – „ID“ repräsentiert wird und auch Daten.
Praktischerweise gibt es Attribute die nur lokal oder nur bei der remote Version des Objektes vorhanden sind. Um teure Remoteaufrufe zu sparen wird nicht immer die Vereinigungsmenge der Attrbute gebildet, sondern in der Regel mit der lokalen Objektversion gearbeitet.
Alles halb so schlimm, alles ist schön gekapselt in mindestens drei Schichten und ordentlich Interface, Framework und Library Watte. Wehe jedoch man weicht von etablierten und getesteten Wegen ab, das kann ein schreckliches Ende nehmen.
local = mapRemoteToLocalObject( remoteService.getObject( local.getId()))
So in etwa sieht das dann aus. An einer klitzekleinen Stelle wird hier leider etwas gelogen. Wie bereits erwähnt gibt es eigentlich zwei IDs für das Objekt – die lokale und die – genauso echte – entfernte. Versucht man nun ein entferntes Objekt mit der lokalen ID zu holen, und hat blöderweise auch noch Testdaten die das zulassen ohne das gleich Tod und Teufel an der Tür stehen, kann man viel Zeit verbringen bis man der Sache auf die Spur kommt.
local = mapRemoteToLocalObject( remoteService.getObject( local.getRemoteId()))
Ist dann das Ergebnis des Abends.
Ein Glück, dass die Testdaten nicht noch schlechter waren – der Fehler hätte locker übersehen werden können.
Womit ich auf den Punkt komme: Ehrliches Programmieren bedeutet Code, der erstens wie Fließtext lesbar ist – und zweitens dabei nichts suggeriert, was nicht stimmt.

Head First Software Development

Geschrieben von everflux am Januar 22nd, 2008

Head First Software Development ist das neueste Buch aus der Headfirst Reihe bei O’Reilly. Der deutsche Titel dürfte dann „Softwareentwicklung von Kopf bis Fuß“ werden, sobald das Buch auf dem deutschen Markt erscheint. Ich habe das Buch auf englisch und möchte es jedem ans Herz legen. Weiterlesen »

Ich hätte eher…

Geschrieben von everflux am Januar 22nd, 2008

… wieder Joggen sollen.
Zugegeben, das Wetter ist nicht gerade optimal (am meisten Stören die Windgeräusche beim Podcast rezipieren), doch hab ich mich dann gestern Nacht noch aufgerafft.
Ergebnis: Ich bin merklich weniger angespannt, und hab eine Folge Java-Wissen und eine Folge Suchmaschinen-Wissen verdaut.
Kurz: Zufrieden.

Thinkpad: Bluetooth unter Ubuntu Linux aktivieren

Geschrieben von everflux am Januar 18th, 2008

Wenn man nur Ubuntu / Linux auf einem Thinkpad, z.B. dem Thinpad T40p installiert hat, kann es knifflig werden, das Bluetooth zu aktiveren.
Fn+F5 hat nämlich nicht unbedingt die gewünschte Funktion – ist Bluetooth erstmal aus, bekommt man es somit nicht wieder aktiviert. Leider läßt auch das Thinkpad Bios eine Bluetooth Option vermissen.
Abhilfe schafft dieser Befehl in der Kommandozeile:
sudo echo enable > /proc/acpi/ibm/bluetooth
Um komfortabel Bluetooth zu nutzen sollten die Pakete
gnome-vfs-obex bluez-gnome
installiert sein.
Das Deaktivieren von Bluetooth geht dann übrigens mittels „disable“. Je nach Laptop Hersteller kann es noch weiter Möglichkeiten geben, Bluetooth zu aktivieren oder zu deaktivieren, z.B. einen Schalter am Laptop. Auch hier gilt: Einfach ausprobieren!

Yahoo steigt bei OpenID ein

Geschrieben von everflux am Januar 17th, 2008

Yahoo ist bei OpenID eingestiegen – ab dem 30. Januar sollen alle User, die eine Yahoo ID (Mailadresse) haben, automatisch darüber auch eine OpenID erhalten.
Mit Yahoo werden die derzeit rund 120 Millionen OpenID Account um 250 Millioenen weitere wachsen. (Zugegeben, die Spam Accounts müßten noch abgezogen werden.)
Das dürfte dazu führen, dass OpenID weiter an Attraktivität zulegen wird.

Sun kauft MySQL: Eine Milliarde Dollar

Geschrieben von everflux am Januar 16th, 2008

Sun Microsystems (Börsenzeichen „JAVA“) hat den schwedischen Hersteller von MySQL gekauft – für eine Milliarde Dollar. (Davon lediglich 800 Millionen in bar, der Rest in Aktienoptionen.)
Interessant ist der kauf von MySQL insbesondere, da MySQL ursprünglich dieses Jahr an die Börse wollte – und Sun sich bisher mit dem Support von Postgresql hervortat.
Wie die genaue Geschäftsstrategie von Sun mit MySQL zkünftig aussieht, kann derzeit wohl nur spekuliert werden. Auf jeden Fall soll das Open Source Datenbank-Management-System weiterhin kostenlos für verschiedene Plattformen verfügbar sein.
Ich persönlich hätte mir eher mehr Schub für Postgresql gewünscht – jedoch kann man die Augen nicht davor verschließen, dass für bestimmte Bereiche MySQL derzeit einfach das DBMS ist. Auch nicht wenn man Sun Microsystems heißt.

Pepsi und Amazon vs. Coke und iTunes

Geschrieben von everflux am Januar 15th, 2008

Wie Techcrunch berichtet haben sich Amazon und Pepsi zusammen getan, um „Pepsi Stuff“ zu gründen. Im Prinzip wird hier Cokefridge nachgebaut – aber mit einem wesentlichen Unterschied (von der Plörre die man trinken muß abgesehen): Amazon bietet DRM freie Musik an.
Das bedeutet für den Kunden, er kann die Musik problemlos brennen, im Auto, im Handy, MP3 Player – und auch im iPod hören. Und das ohne auf iTunes angewiesen zu sein, oder sonstige häßliche Klimmzüge machen zu müssen.
Das Pepsi Stuff Programm startet am 1. Februar, und ich wünsche den beiden viel Erfolg, denn sowohl Coke als auch Apple brauchen etwas Konkurrenz um von ihrem hohen Ross herunter zu kommen. Den generellen Seitenhieb gegen DRM sehe ich dabei natürlich auch mit einem langgezogenen Grinsen. Den Kunden permanent als potentiellen Dieb zu behandeln darf sich einfach nicht auszahlen.
Ich werde allerdings dennoch nicht anfangen Pepsi zu trinken – aber weiterhin meinen Coke Boykott aufrecht erhalten. Afri Cola und Jolt wird es freuen.
Amazon akzeptiert zum Glück ja auch eine Kreditkarte.

Warum ich Newskraft sperre

Geschrieben von everflux am Januar 10th, 2008

Für alle die eine „Suchmaschine“ bauen – es gibt ein paar klitzekleine Verhaltensregeln, die man beachten sollte.
Ein Beispiel:


78.46.45.99 - - [10/Jan/2008:21:28:46 +0100] "GET /feed/ HTTP/1.1" 200 15773 "http://www.newskraft.de" "Newskraft.de" 0 everflux.de
78.46.45.99 - - [10/Jan/2008:21:28:46 +0100] "GET /feed/rss/ HTTP/1.1" 200 9052 "http://www.newskraft.de" "Newskraft.de" 1 everflux.de
78.46.45.99 - - [10/Jan/2008:21:28:46 +0100] "GET /feed/atom/ HTTP/1.1" 200 15021 "http://www.newskraft.de" "Newskraft.de" 0 everflux.de
78.46.45.99 - - [10/Jan/2008:21:28:46 +0100] "GET /?p=470&akst_action=share-this HTTP/1.1" 200 4908 "http://www.newskraft.de" "Newskraft.de" 0 everflux.de
78.46.45.99 - - [10/Jan/2008:21:28:46 +0100] "GET /?p=469&akst_action=share-this HTTP/1.1" 200 5049 "http://www.newskraft.de" "Newskraft.de" 0 everflux.de
78.46.45.99 - - [10/Jan/2008:21:28:46 +0100] "GET /?p=468&akst_action=share-this HTTP/1.1" 200 4644 "http://www.newskraft.de" "Newskraft.de" 0 everflux.de
78.46.45.99 - - [10/Jan/2008:21:28:46 +0100] "GET /?p=467&akst_action=share-this HTTP/1.1" 200 4828 "http://www.newskraft.de" "Newskraft.de" 0 everflux.de
78.46.45.99 - - [10/Jan/2008:21:28:47 +0100] "GET /?p=465&akst_action=share-this HTTP/1.1" 200 6963 "http://www.newskraft.de" "Newskraft.de" 0 everflux.de
78.46.45.99 - - [10/Jan/2008:21:28:47 +0100] "GET /?p=464&akst_action=share-this HTTP/1.1" 200 5003 "http://www.newskraft.de" "Newskraft.de" 0 everflux.de
78.46.45.99 - - [10/Jan/2008:21:28:47 +0100] "GET /?p=462&akst_action=share-this HTTP/1.1" 200 4847 "http://www.newskraft.de" "Newskraft.de" 0 everflux.de
78.46.45.99 - - [10/Jan/2008:21:28:47 +0100] "GET /?p=461&akst_action=share-this HTTP/1.1" 200 7506 "http://www.newskraft.de" "Newskraft.de" 0 everflux.de
78.46.45.99 - - [10/Jan/2008:21:28:47 +0100] "GET /?p=463&akst_action=share-this HTTP/1.1" 200 9277 "http://www.newskraft.de" "Newskraft.de" 1 everflux.de

Man beachte die Zeiten, wann die Zugriffe stattfanden.
Und das war noch lange nicht das Ende. Also wenns denn schon ein Crawler sein soll, dann nicht mehr als einen Zugriff pro Sekunde.
Immerhin bei Newskraft lobenswert: robots.txt wird vorher geladen – wie sie genutzt wird, hab ich jedoch nicht ausprobieren wollen.

Google gibt Feedstatistiken im User-Agent an

Geschrieben von everflux am Januar 10th, 2008

Normalerweise schaue ich nicht in die live Logs vom Apache Webserver des Blogs, aber aus gewissen Gründen machte ich mir doch mal die Mühe.
Was mir da gerade über den Weg gelaufen ist, finde ich doch interessant:

„Feedfetcher-Google; (+http://www.google.com/feedfetcher.html; 1 subscribers; feed-id=18021914886172537744)“

Viellicht gehört das nicht unbedingt in den Useragent – aber in jedem Fall eine sehr innovative Idee.
Da muß ich nichtmal Feedburner oder ähnliches bemühen um herauszufinden dass ich einen ganzen Leser habe 😉
Was ich nicht ganz verstehe, sind die weiteren Requests, die eine andere Feed-Id beeinhalten.

„Feedfetcher-Google; (+http://www.google.com/feedfetcher.html; 1 subscribers; feed-id=16484629274111537011)“

Aha, die antwort ist einfach: Wenn Google den Feed über verschiedene URLs kennt, so wird jedesmal eine eindeutige 64bit ID pro URL erzeugt.
Das bedeutet, man muss die Anzahl der Abbonennten zusammenzählen. Dann hab ich wohl 2. 🙂
Weitere Informationen zum Google Feedfetcher gibt es im Google Reader Help Bereich.

MapReduce library für Ruby: Skynet

Geschrieben von everflux am Januar 6th, 2008

Wer by Skynet „Terminator“ denkt liegt nicht ganz falsch.
Die Skynet Bibliothek stellt ein „selbsterweiterndes, fehlertollerantse und vollständig verteiltes“ System bereit, um rechenintensive Aufgaben zu verteilen.
Es handelt sich hierbei nicht um einen Hadoop Wrapper oder ähnliches, sondern um eine 100% Ruby Implementierung der von Google vor einiger Zeit vorgestellten Map/Reduce Herangehensweise.
Das Skynet Konzept basiert dabei auf einer Messagequeue, in die „Tasks“ eingestellt werden können. Als Messaging Systeme werden derzeit TupleSpace und Mysql (sic!) unterstützt.
Skynet geht dabei konzeptionell so vor, dass es keine dedizierten Master oder Slave Knoten gibt, sondern lediglich worker. Diese können aufeinander „aufpassen“ und einspringen, wenn einzelne Worker versagen. Geht man von einer redundanten Auslegung der Messagequeue aus, so hat Skynet keinen „single point of failure“ und soll sich sehr einfach in eigene (Rails) Anwendungen integrieren lassen.


http://everflux.de/
Copyright © 2007, 2008 everflux. Alle Rechte vorbehalten. All rights reserved.