6.1.2007 12:50
Da gibt es Software, um die man sich mit Hackern aus der ganzen Welt kümmert, zum Beispiel xmpp4r oder Ruby-IXP, und dann gibt es Software, die eher kleine Hacks darstellen.
Für die erste Kategorie gibt es Seiten wie Gna! Aber eigentlich will man überall Versionskontrolle, auch dort wo man noch nicht so viel Code vorzuweisen hat. Und zumindest bei Gna! wird verlangt, dass bereits Code existiert.
Aber seit svn.c3d2.de gibt es die Möglichkeit schnell selbst ein Repository einzurichten, selbst zu administrieren, und, ausreichend dokumentiert natürlich, ein Trac unter trac.c3d2.de zu bauen.
Dank dessen habe ich vor geraumer Zeit SVN & Trac für das Astroblog, sowie SVN & Trac für den Harvester eingerichtet.
Ich habe damit die leise Hoffnung, dass die Hürden sich am Code zu beteiligen nun niedriger sind.
Während das Astroblog bestimmt kaum jemanden interessiert, der nicht tierisch auf Ruby, XSLT und PostgreSQL abgeht,
so habe ich schon vorher Patches für den Harvester erhalten.
Und vor ein paar Wochen habe ich da sogar weitere Features reingehackt.
Erstens ist diese widerliche Templatesprache gekickt und durch, wer hätte es gedacht, XSLT ersetzt.
Nicht dass es jetzt schneller und cooler wäre, aber XSLT ist flexibler und wird von mehr Menschen beherrscht.
Zweitens versucht das Ding nun leere Einträge (im Sinne von Link & Titel) ganz zu ignorieren,
drittens können Einträge nun optional mit htree geparst werden,
wo dann der Harvester gleich schaut, ob //a/@href oder //img/@src relativ sind und in absolute URLs umschreibt.
Der öffentliche Harvester läuft schon auf trunk™, womit nun mehr Links und Bilder stimmen sollten.
Trotzdem hakt es hie und da noch ein wenig, ist aber bei mir niedrig priorisiert.
Übrigens hat MaxX endlich mal einiges seiner Software publiziert.
Dort finden sich viele, äh, unportable Dinge, sowie ein paar lehrreiche Hacks.
Zum Beispiel Sniffed Network Graphics (or SuperNailGun), was wir hackten als wir von EtherPEG hörten und Driftnet noch nicht kannten.
23.7.2006 02:23
Schon seit mehr als einem Monat läuft hier die Reimplementation des Astroblog.
Wer hats mitbekommen?
Das erste Astroblog schrieb ich vor zirka anderthalb Jahren.
Damals wollte ich anfangen zu bloggen und natürlich die Software dazu selber schreiben, so wie sich das gehört.
Zufälligerweise wollte ich zu dem Zeitpunkt auch eine neue Programmiersprache lernen: Ruby.
Also bot sich das Astroblog als erstes Projekt an, wo doch eine CGI-Bibliothek schon mit Ruby mitkommt.
2005 lernte ich aber noch andere interessante Technologien kennen: Jabber, XSLT und, durch sven gefördert, ein bisschen Vertiefung in Datenbanken.
Und irgendwann reichte dann der alte Code nicht mehr aus.
Die Erweiterbarkeit war nicht zufriedenstellend.
Das Layout war fest in den Code gehackt (und basierte auf Tabellen).
Die Beiträge wurden in UBB-Code geschrieben.
Aber das allerschlimmste Problem war: es versank in Spam.
Letztendlich hatten sich 100MB Kommentarspam angesammelt, was einige Einträge nahezu unladbar machte.
Da die Kommentare immer vor dem Laden komplett gelesen wurden, machte das spaceboyz.net ganz schön zu schaffen.
Ich schaltete Kommentare stillschweigend ab, was natürlich absolut keine Musterlösung war.
Aber schon vorher begann ich ein wenig mit coolen Codestrukturen herumzuspielen.
XSLT sollte als Basis für die Templates dienen.
Die Vorteile von XSLT kann ich nicht wirklich zusammenfassen, es gefällt mir einfach.
Eine erste Variante drückte alle möglichen Daten einer Seite in XML, um es dann durch den XSLT-Prozessor zu schieben.
Ich redete schon von Ruby on Nails - stirring up MVC und hätte das am liebsten schon vor dem 22C3 benutzbar gehabt.
Verpeilungsfaktor.
Später aber entdeckte ich, daß mit neuerem Ruby-XSLT sogenannte extFunctions klappen.
Heißt, ich kann bei nebensächlichen Daten einfach Funktionen aus den XSLT-Templates aufrufen, die Ruby vorher registriert hat.
So kann ich das eigentliche XML-Dokument auf die Beiträge beschränken und meine Templates holen sich dann die Daten die sie zusätzlich brauchen.
Am anderen Ende setzt der Datenbanklayer an.
Zuerst hatte ich ihn selbstgeschrieben, aber Momomoto ging stark in die selbe Richtung und war natürlich viel sauberer konzipiert.
Um nun die Daten aus der Datenbank in XML zu bekommen, baute ich mir einfache (De-)Serialisierungsroutinen.
Diese sieht im Grunde folgendermaßen aus:
class Momomoto::Row
def to_xml
r = REXML::Element.new(self.class.to_s.split(/::/)[-2].downcase)
table.columns.each do |key,|
next if table.excludes? key
value = send(key)
if table.xml_chunks.include? key
r.add(REXML::Document.new("<#{key}>#{value}</#{key}>").root)
elsif value.kind_of? Time
r.add(REXML::Element.new(key.to_s)).text = value.xmlschema
else
r.add(REXML::Element.new(key.to_s)).text = value
end
end
r
end
end
Die Daten bringen sich selbst in Form.
Muss Objektorientierung so aussehen?
Wäre dann noch das Spamproblem.
Da nahm ich mich der Idee des blitzblog an: Kommentieren per Jabber.
Ist zwar per se nicht gegen Spam gefeit, tut aber relativ gut, da es eine Insellösung ist.
Und das bleibt es sicher auch, ich glaube kaum dass das Verbreitung findet.
Wer nicht damit klarkommt (wie's geht steht ganz unten), der kann mir ja einen Kommentar schreiben. :-)
Bleiben letztendlich noch Nebensächlichkeiten:
ich kann meinen del.icio.us-Feed direkt im XSLT reinzutschen,
meine Einträge endlich in XML verfassen,
und den Feed zusätzlich als ATOM zu schreiben, war auch kein großer Aufwand.
Was noch ein Versuch ist: die Feeds gibts auch wahlweise mit eingebetteten Kommentaren.
Sie werden nicht zu einzelnen Items gemacht, aber in den Item-Text geschrieben.
Sowas habe ich mir schon immer bei Weblogs gewünscht.
Ich habe allerdings noch nicht geschaut, ob das von irgendwem überhaupt genutzt wird.
Das neue Layout wollte ich fröhlich in Regenbogenfarben halten.
Da ich mir immer einrede auf keinen Fall Webdesigner sein zu wollen, bin ich echt zufrieden damit.
Und wer sich schon über die seltsame Suche auf der rechten Seite gewundert hat: das ist ein AJAX-Spielplatz.
Einfach lostippen.
Allerdings ist es ziemlich lahm.
Das liegt aber grösstenteils daran, dass Astroblog nun an einer TDSL-Leitung hängt und auf meiner Pappschachtel läuft.
Aber eigentlich will ich keine Besuchermassen, dazu sind meine Inhalte zu irrelevant.
Von daher ist das echt wurscht.
Die alten Einträge sind auch nur recht halbherzig konvertiert und es fehlt an Kommentaren und Bildern.
Ich weiss noch nicht, ob ich dafür nochmal Lust aufbringe...
Falls sich jemand für den Code interessiert, da gibt es mittlerweile sogar schon ein Repository.
Ich müsste nur mal committen.