Website Relaunch 2009
Ziemlich lange hatte ich schon das Bedürfnis meine eigene Webseite endlich zu erneuern. Seit April 2005 schreibe ich meinen Blog und von Beginn an habe ich immer das Kubrick-Template benutzt. Die meiste Zeit über wurde der Blog mit Serendipity betrieben und der Rest der Seite bestand aus ein paar statischen HTML-Seiten.
Schon im Dezember 2007 habe ich gebloggt, dass ich meinen Blog gerne auf Django umstellen würde, hatte aber irgendwie immer zu viel zu tun, so dass bis auf einige Ansätze nie etwas Fertiges draus geworden ist.
Technik
Nachdem ich also ein Jahr lang nicht wirklich vorangekommen bin, habe ich mich im Dezember letzten Jahres noch einmal dran gemacht und den Grundstein für meine neue Seite auf Django-Basis gelegt. Der erste Prototyp war schnell fertig, aber was aufgehalten hat war die Konvertierung der Inhalte. Über die Jahre hinweg habe ich meine Blog-Einträge in den unterschiedlichsten Markups abgespeichert - von bbcode bis HTML ist alles dabei - und für die neue Seite habe ich mich entschieden reStructuredText als grundlegendes Format zu benutzen.
ReStructuredText ist der Quasi-Standard für Dokumentationen in der Python-Welt. Das Text-Format ist gut lesbar und die Verarbeitung ist durch eigene Direktiven anpassbar. Auch das erzeugte HTML kann man durch einen eigenen Writer beeinflussen.
Mit einem JavaScript Editor für reST geht auch das Schreiben von Blog-Einträgen relativ leicht von der Hand. Inklusive Integration mit einem Medienpool vermisse ich wirklich keinen Komfort.
Es sollte ein leserliches Plain-Text format sein, da die Webseite neben der normalen HTML-Ausgabe auch noch eine Text-Ansicht, eine JSON-Version und eine PDF-Ansicht für so gut wie jede Seite bereitstellt. Im Moment ist zwar nur die HTML-Ansicht öffentlich zugänglich, aber die alternativen Versionen sind schon vollständig implementiert.
RSS-Feeds gibt es nicht nur für die Blog-Einträge und Kommentare, sondern wie bisher auch für jedes verwendete Tag einen Feed. Neu dazugekommen sind Kommentar-Feeds für jeden einzelnen Blog-Eintrag und Tag-Feeds für die Schnittmenge und die Vereinigungsmenge verschiedener Tags.
Das Blog-Archiv kann auf zwei Arten navigiert werden, entweder fortlaufend oder datumsbasiert. Das datumsbasierte Archiv habe ich von der Struktur her dem Archiv meines bisherigen Serendipity-Blogs nachempfunden, vielleicht werde ich es in nächster Zeit noch einmal überarbeiten. Das fortlaufende Archiv benutzt Djangos Paginator, also nichts besonderes, bis auf die Tatsache, dass die Seiten bei mir nicht mit Seite 1 anfangen und dann aufsteigen, sondern rückwärts nummeriert sind. Der Sinn dabei ist, dass ein Beitrag der sich jetzt auf Seite 25 (z.B.) in meinem Archiv befindet, dort auch in 2 Jahren noch zu finden sein wird. Würde ich die Nummerierung bei 1 beginnen würde sich die Position eines Artikels im Archiv mit jedem neu veröffentlichtem Artikel ändern.
Design
Natürlich hatte ich keine Lust das neue Django-Backend mit dem alten Design online zu stellen, also habe ich mich dran gesetzt und ein neues Layout erstellt. Visuell habe ich mich ein wenig vom aktuellen minimalistischen Trend inspirieren lassen, habe dann aber doch nich komplett auf eine gewohnte Navigation verzichtet. Da ich selbstständig tätig bin dient die Webseite nicht nur als Blog, sondern auch als Geschäftsauftritt sozusagen, deshalb wollte ich nicht zu viel weglassen.
Einige Texte sind noch nicht wirklich schön und so einiges an Inhalten fehlt sicherlich auch noch, aber ganz im Sinne der agilen Entwicklung - release early - release often - wollte ich die Seite nun erstmal online stellen und den Rest später erledigen.
Die Webseite ist bewusst relativ schlicht gehalten damit sich der Besucher besser auf die Inhalte konzentrieren kann, ich finde nichts schlimmer als Webseiten, auf denen man vor lauter Werbung oder anderer Ablenkung, den Inhalt gar nicht findet.
HTML und CSS sind handgeschrieben und sollten in allen gängigen Browsern funktionieren. Sogar der ie:mac 5.2 wird von mir offiziell unterstützt. Auch wenn ich den ie6 noch unterstütze bekommen Besucher mit ie6 trotzdem im Footer der Seite einen Hinweis angezeigt, dass Sie doch bitte updaten mögen, vielleicht kann ich damit meinen Teil zum Tod des ie6 beitragen.
Was nun?
Einen 20 minütigen Screencast darüber zu machen, wie man einen Blog mit Django implementiert ist sicher möglich, allerdings gilt auch hier die 80/20 Regel: 80% der Arbeit benötigen nur 20% der Zeit, oder anders gesagt: es gibt einen ganzen Haufen Kleinkram, den man beachten muss, bevor man eine Seite so weit fertig hat, dass man Sie auf die Menschheit loslassen kann. Redirects für alte URL-Schemata, eine XML-Sitemap, RSS-Feeds, E-Mail-Benachrichtung bei neuen Kommentaren (contrib.comments ist eh ein Thema für einen eigenen Blog-Eintrag), Statistiken über die Feed-Subscriber (auch ohne Feedburner), Trackbacks und Pingbacks, Versionierung der Inhalte, Import-Routinen für bestehende Inhalte, eine Suchfunktion und vernünftige HTTP-Header mit dem dazugehörigen Caching ...
Außerdem habe ich von Anfang an alles darauf ausgelegt, dass ich demnächst unter meiner zweiten Domain arnebrodowski.com alle englischen Inhalte präsentieren kann, die bisher ja mit den deutschen Inhalten vermischt sind.
Alles in Allem konnte ich zwar einige reuseable Apps für meine Seite verwenden, habe aber auch viel Code selbst geschrieben, da ich nichts passendes gefunden habe, was mir gefiel. Einiges davon passt vielleicht in einen zukünftigen Blog-Eintrag und anderes wird vielleicht mal als App veröffentlicht.
Ich bin auf jeden Fall froh, dass die Seite jetzt online ist und hoffe mal, dass ich nicht all zu viel verbockt habe :)
Super Sache Arne.
Ich finde das schlichte Design eine sehr gute Wahl. Ich kenne auch diese Webseiten, wo man auf Anhieb nicht erkennt, was man nun lesen muss.
Ich probier dann mal fleißig alles, was man testen kann :-)
Viel Erfolg mit deinem neuen Blog.
Gruß,
Andre
Geschrieben von Andre 42 Minuten nach Veröffentlichung des Blog-Eintrags am 22. Feb. 2009, 22:44. Antworten
Meinen Glückwunsch! Ein sehr gelungener Relaunch. Ich freue mich schon auf einige Blogartikel von dir über die Django-Interna und Applikationen deiner Website ;)
Wär’ das nicht was für einen Vortrag auf dem nächsten Djangonauten-Treffen?
Besonders ReST würde mich dabei interessieren. Denn gerne würde ich Markdown ersetzen, aber mit der Standardausgabe von ReST bin ich als Semantik-Fan nicht immer glücklich.
Die Seiten ist übrigens rasend schnell, Django-Caching oder sind das gar statische Seiten?
Geschrieben von Stefan 16 Stunden, 33 Minuten nach Veröffentlichung des Blog-Eintrags am 23. Feb. 2009, 14:35. Antworten
Das Design gefällt!
Mich würde interessieren, was du für ein JS Editor verwendest, der ReST unterstützt?
Gruß Simon
Geschrieben von Simon 1 Tag, 11 Stunden nach Veröffentlichung des Blog-Eintrags am 24. Feb. 2009, 09:55. Antworten
Moin Arne,
so ein reStructuredText-Javascript-Editor wäre schon großartig.. Hast du den ursprünglichen Autor erreichen können ? Kannst du deinen Code veröffentlichen ?
Gruß,
Geschrieben von Peritus 1 Monat nach Veröffentlichung des Blog-Eintrags am 31. März 2009, 11:23. Antworten
Sehr schöner Relaunch :D
Heißt das, dass du alle Posts auch im Webeditor schreibst? Ich frage nur, weil ich es genau andersherum mache: Ich schreibe immer zuerst in vim/textmate und kopiere das ganze Zeugs erst ganz am Schluss ins Webinterface :-)
Ist die Kommentarapp auch selbstgeschrieben oder verwendest du da threadedcomments?
LG, Horst
Geschrieben von Horst 1 Tag, 13 Stunden nach Veröffentlichung des Blog-Eintrags am 24. Feb. 2009, 11:35. Antworten
Hallo Horst,
alle alten Inhalte habe ich in TextMate geschrieben und als Textdateien in meinem SVN Repo. Neue Inhalte kann ich (wie z.B. diesen Blog-Eintrag) direkt im Webeditor schreiben, versioniert werden die dann mittels django-rcsfield. Wie ich es langfristig halten werden weiß ich noch nicht. Für alle "statischen" Seiten (die auch auf ReST basieren) ist es auf jeden Fall nett, direkt online Änderungen machen zu können und dabei die unterstützung vom JS Editor zu haben.
Die Kommentare basieren auf contrib.comments (newcomments), wobei ich hier einen Patch aus Ticket #9958 und #9890 (grade committed worden sehe ich eben) in meinem Django-Tree drin habe um die Anpassung überhaupt möglich zu machen.
Gruß, Arne
Geschrieben von Arne 1 Tag, 13 Stunden nach Veröffentlichung des Blog-Eintrags am 24. Feb. 2009, 11:47. Antworten
Cool. Ich bräuchte nochmal detaillierte Infos zum Thema Pisa, PDF etc.
Geschrieben von Jan 2 Tage, 2 Stunden nach Veröffentlichung des Blog-Eintrags am 25. Feb. 2009, 00:05. Antworten
Hallo Arne,
nette Seite. Einige deiner Ideen habe ich auch umgesetzt. (So finde ich die Sortierung der Seiten sehr klug, ich habe sie leider nur teilweise umgesetzt... Google findest es sicher klasse.)
Das Layout ist wohl zu 100% Geschmackssache. Ich für meinen Teil finde es klasse. Jedoch denke ich, dass du die Texte (speziell Titelseite) geschickter schreiben solltest, denn mit einem solchen Layout ist der Inhalt wirklich das wichtigste. (Idee: http://www.arnebrodowski.de/ Die fetten Begriffe nicht fett, sondern als Tags in den Blog verlinken, fett sieht doof aus. Hier im Blog und überall anders solltest du `text-align: justify` nutzen, das gibt klare Linien vor ohne dass du einen Border zeichnest und unterstützt dein Layout.) Dein Favicon passt nicht mehr so ganz zur Seite. Vielleicht ist Jannis <http://jannisleidel.com/> Idee eines Favicons hier nicht schlecht.
Spitze finde ich deine Idee "2 Stunden nach Veröffentlichung des Blog-Eintrags am ..." -- Super! Auch deine Tags mit + und - sind einsame Spitze. (Nur bei Auswahl von drei Tags steht zweimal "und" da... http://www.arnebrodowski.de/blog/tag/django+python+javascript/)
Gespannt bin ich, wie du das mit *.com / *.de umsetzt. Ich habe das bereits gemacht, bzw. versucht. Denn django-tagging ist nicht site-aware (oder ich habe es falsch konfiguriert.) Die Tag-Clods des Blogs sind identisch und mit dem Cache habe ich so meine Probleme... Naja. *So much to do -- so little time*
Hoffentlich konnte ich Ideen liefern, die deine ohnehin sehr schöne Seite weiter zu verbessern könnten.
Viele Grüße
Martin
PS.
Kleiner Hinweis: "z.B." wird laut Duden "z. B." (mit Leerzeichen) geschrieben. Habe es immer falsch geschrieben, deine Einträge würde ich nicht anpassen, aber vll. die Titelseite.
Geschrieben von Martin Geber 4 Tage, 11 Stunden nach Veröffentlichung des Blog-Eintrags am 27. Feb. 2009, 09:45. Antworten
Sehr gutes Design, gefällt mir echt gut!
Nachdem ich dein Screenshot vom Admin gesehen habe, bin ich nun auch dabei auf rst umzustellen ;-). Dabei interessiert mich vorallem wie du die tags, author, published aus dem Dokument parsed da docutils dies normallerweise als html kommentare darstellt.
Geschrieben von Arthur 4 Tage, 15 Stunden nach Veröffentlichung des Blog-Eintrags am 27. Feb. 2009, 13:45. Antworten
Nach deinem ersten Kommentar in meinem neuen Blog mein erster Kommentar in deinem neuen Blog. ;-)
Die ganzen "Kleinigkeiten", die soviel Zeit schlucken... - Habe ich zuletzt auch erlebt und bin noch lang nicht fertig. Schön, dass du es geschafft hast, das durchzuziehen - ein Schuster weniger mit schlechten Latschen. :-) 20 Minuten ist eben nur das gröbste. Viel Erfolg damit! Also noch mehr Leute denen es gefällt, noch mehr Aufmerksamkeit der SEs, noch mehr Traffic etc. von mir!
PS: Deine Kommentar-Anwendung scheint vom Start weg ohne Probleme zu funktionieren! ;-)
Geschrieben von Micha 5 Tage, 13 Stunden nach Veröffentlichung des Blog-Eintrags am 28. Feb. 2009, 11:14. Antworten
Hallo zusammen,
'text-align:justify'-Thema: Ich gebe dir recht, dass es häßliche passagen gibt (siehe Quellen in diesem Beitrag: http://www.martin-geber.de/thought/2009/02/18/ajax/) Der Punkt ist jedoch, dass wir als Autoren diesen Gesichtspunkt beachten sollten. Soll heißen: Der Programmierer sagt, dass es optisch Probleme geben *kann*, defato ist es aber so, dass der Autor diese vermeiden kann. (z. B. Code-Segemente, auch wenn es nur text-align:justify ist, in einen code-BLOCK legen, das strukturiert den Text gut und vermiedet komische Optik...) Ist meine Ansicht (die ich im Übrigen noch nicht 100%ig korrekt umsetze, aber dran arbeite).
@Micha:
"ein Schuster weniger mit schlechten Latschen" --> Ich krieg mich vor Lachen immer noch nicht ein :) Gutes Gleichnis.
Viele Grüße an alle
Martin
PS.
@Arne: Diese ausgiebige Diskussion ist ein großes Lob an dich und deine Seite, würde ich mal sagen :) Gratulation!
Geschrieben von Martin Geber 6 Tage, 16 Stunden nach Veröffentlichung des Blog-Eintrags am 1. März 2009, 14:06. Antworten