Email to Torsten Weber
Feed Icon
.NET User Group Leipzig

Neues Theme in Torsten Webers Blog Es hat schon ein wenig gedauert, da es in der Priorität von mir auf Wenn Zeit gesetzt wurde, doch was so lange währt wird gut und nun ist auch fertig geworden. Was? Klar, wie es in der Überschrift steht: Ein neues Theme für meinen Blog. Die Überschrift verrät auch noch etwas mehr und ist provokativ. Doch zuerst die Anforderungen für ein neues Theme:

  • es soll durch eine XHTML-Validierung kommen
  • es soll UTF-8 codiert sein
  • es soll smart – Stichwort Simplify – sein
    • Kontaktmöglichkeiten und bisherige Publikationen sollen sofort ersichtlich sein
    • weitere Anlaufstellen, wie die .NET User Group Leipzig, sollen sofort ersichtlich sein
    • die Suchfunktionalität soll rechts oben sofort im Blog verfügbar sein
    • die Navigation ist zu vereinfachen
      • für den direkten Aufruf des Blogs, ist eine Navigation wie in Outlook zwischen den Blogeinträgen zu implementieren
      • werden einzelne Blogeinträge aufgerufen, muss eine Schaltfläche für "Startseite" zur Verfügung stehen
      • als weitere Navigation im Blog soll es geben:
        • "aktuelle Blogeinträge"
        • "erster Blogeintrag"
        • "nach Kategorien sortiert anzeigen"
        • "nach Monaten sortiert anzeigen"
        • und natürlich "vorherige" und "nächste" in einer aggregierten Ansicht
    • jeder Blogeintrag besteht aus Titel, Datum / Inhalt und zusätzlicher Funktionalität
      • zusätzliche Funktionalität ist z. B. die Einordnung des Blogeintrags in Kategorien
      • eine 80/20 Regel ist anwenden – einige der zusätzlichen Funktionalität soll erst bei Bedarf zur Verfügung stehen
        • Veröffentlichungszeitpunkt & letzte Änderung sollen sichtbar sein
        • die Einordnung in Kategorien soll sichtbar sein
        • Kommentarfunktionen sind auszublenden
        • "Social Bookmarking" ist zur Verfügung zu stellen und auszublenden
        • Trackbacks und dergleichen sind komplett zu entfernen
    • keine riesige lange Blogroll, aber gleichzeitig sollen wiederum auch alle abonnierten Blogs anzeigbar und auch zum Herunterladen vorhanden sein
    • alles was nicht wirklich semantisch funktioniert, ist zu entfernen
      • "Verwandte Themen" ist z. B. zu entfernen
  • das Layout ist, wenn nicht anders möglich, komplett mit CSS-Funktionalität umzusetzen
    • die CSS-Styles sollen durch eine Validierung kommen
    • soll im Internet Explorer und Firefox möglichst gleich aussehen
    • soll auch noch bei geänderter Textgröße gut lesbar sein
    • beim Druck soll der Inhalt auf die wesentlichsten Inhalte reduziert sein
      • Titel / Datum
      • Inhalt
      • Copyright
      • und bei der Verwendung von Internet Explorer / Firefox in etwa gleich sein
  • das komplette Layout ist in Deutsch und Englisch zu lokalisieren
  • das Layout ist smooth anzulegen
  • alle Links sind auf Redirects und weitere Statusmeldungen automatisiert zu überprüfen
  • Funktionalität ist soweit wie möglich serverseitig anzulegen, andernfalls über Javascript und CSS
  • Kritischer Erfolgsfaktor: Können die Blogeinträge auf eine andere Engine migriert werden?

DasBlog und seine Macken

Das war dann doch schon eine ganze Menge, zumal einiges davon nicht direkt mit DasBlog umsetzbar ist. DasBlog bietet durch vordefinierte und selbst definierbare Makros für Theme-Designer zwar auch die Möglichkeit zur Erweiterung, aber ein ordentliches Plug-In System wie bei Miranda oder Wordpress fehlt. Ich habe den Eindruck seit Scott Hanselman bei Microsoft unterschrieben hat, ist DasBlog auf dem sterbenden Ast geraten. Jedenfalls zeigen das die letzten Checkins. Da passiert derzeit nicht mehr viel. Egal was in ein neues Thema investiert werden würde, es musste also vorher durch eine Möglichkeit zur Migration der Blogeinträge auf eine andere Blog-Engine abgesichert werden. Warum? Weil sonst eine Investition in eine Schaffung der Möglichkeit zur Migration einen höheren Wertbeitrag hat, als ein neues Theme. Doch eine Migration ist möglich, wenn auch mit einigen Hürden. Also ran an das Theme?

Bleibt noch die Frage, ob man eher selbst definierte Makros scheiben sollte oder den Quellcode einfach auscheckt und erweitert. Die Anforderung "durch XHTML-Validierung" kommen trägt zur Antwort bei:

  • DasBlog-produzierter (X)HTML-Code ist nicht valid

Neues Theme in Torsten Webers Blog Das ist noch sehr gemildert ausgedrückt. Will man dieses ändern, bleibt dann doch gar nicht anderes möglich, als den Quellcode anzufassen. Unglaublich, was da alles für sehr triviale Fehler in DasBlog drin sind. Ein Beispiel dafür ist die fehlende Codierung von & als & bei URLs. Über die Anpassung des Quellcodes konnte ich die Fehler auf nur noch 16 Stück, alles mal bei Gelegenheit wie bei einer Zugfahrt oder im Flugzeug korrigierbar, reduzieren.

An die UTF-8 Codierung wurde nicht gedacht. Hat jemand seinen Browser bei der Codierung auf den Wert  "Auto" geschaltet, bewusst oder unbewusst, werden Inhalte "komisch" angezeigt. Die entsprechenden  Dateien mussten so auf UTF-8 Codierung überprüft und die Templates korrigiert werden.

Danach konnte es los gehen. Doch mir wurde wirklich schwindlig. Die Arbeit von newtelligence, die die Grundlage von DasBlog gelegt haben, will ich gar nicht herunter reden oder in Frage stellen. Zumal auch natürlich mit jedem Entwickler von DasBlog über die Zeit hinweg die Codebasis in Abhängigkeit seiner Fähigkeiten verändert wird. Da ich mich jetzt wiederhole, sei mir verziehen: Mir wurde schwindelig.

  • DasBlog-Anwendungscode ist voll von auskommentiertem Anwendungscode
  • DasBlog-Anwendungscode ist voll von "that do we later", "HACK" und "it's ok now"
  • DasBlog-Anwendungscode ist "Spagetticode"

Rahmenbedingungen, Code-Guidelines, Stil, Eleganz von Anwendungscode scheint es nicht zu geben. Ich persönlich habe das Gefühl, es ist so codiert, wie man es an lehrt, es nicht zu tun. Ein Beispiel: Was soll auskommentierter Anwendungscode, abgesehen von wenigen Ausnahmen wie bei Hacks? Wozu gibt es Versionierungssysteme? Oh come on, things aren't as bad as all that. Nein! Auskommentiertes kann und gehört versioniert und danach gelöscht. Man soll nicht auf andere Leute, respektive Entwickler, mit dem Finger zeigen, aber das ist einfach schlechter Stil. Ich spreche auch keinen einzelnen Entwickler an. Alex hat übrigens erneut großartige Arbeit (im Blogeintrag fehlt, dass Parameter an .ASPX-Seiten übergeben werden können) geleistet. Es geht ums Prinzip. Es ist mehr als der Zeitpunkt für ein Refactoring erreicht:

  • DasBlog wird bald, jetzt, überarbeitet oder stirbt irgendwann, bald, an einem Wulst von Code
  • .NET 3.5 ist derzeit für DasBlog so sinnvoll, wie Bridgestone-Breitreifen an einem Fahrrad

Eine weitere Überlegung ist <% LocalString(...) %>. An sich ist dessen Verwendung von <% LocalString("John Doe|DE:Max Mustermann") %> nicht schlecht. So kann Englisch und Deutsch lokalisiert werden in den Templates und so weiter. Doch warum ist diese Funktion nicht intern gekapselt? Jedes weitere Makro was Zeichenfolgen entgegennimmt und ausgibt, könnte so auch Lokalisierung verwenden. <% MeinMakro("Email|DE:E-Mail") %> könnte bei einer Kapselung einfach LocalStringBlank(...) rufen, denn LocalString(...) gibt nicht eine "blanke" Zeichenfolge, sondern eben ein Control zurück. Ist das vielleicht zu trivial, weil einfach?

Jedenfalls ist mein¹ Anwendungscode nun erweitert z. B. um:

  • <% CommentsCount(String separatorText) %>
  • < % IfCommentsRawText(String commentTextZero, String commentTextSingular,
                                         String commentTextPlural) %>
  • <% IfItemRawText(String ifIsItemExpression, String elsewiseExpression) %>
  • <% IfParamRawText(String paramName, String paramValue,
                                  String expression, String elsewiseExpression) %>
  • <% IfViewPermalinkUrlRaw() %>

Beispiel:

  • <% CommentsCount(&nbsp;) %>
    < % IfCommentsRawText("Comments, give one|DE:Kommentare, einen verfassen",
                                         "Comment, show it|DE:Kommentar zeigen",
                                         "Comments, show it|DE:Kommentare zeigen) %>

wird damit zu

  • "0 Comments, give one" bzw. "0 Kommentare, einen verfassen" oder
  • "1 Comment, show it" bzw. "1 Kommentar zeigen" oder
  • "2 Kommentare, show it" bzw. "2 Kommentare zeigen" ...

Warum funktioniert das so? Weil ich die Kapselung von LocalString implementiert habe. Das zerreißt den restlichen Anwendungscode? Nein, eben nicht. Der merkt das gar nicht. Weiterer Anwendungscode, ob neuer oder alter, kann transparent davon profitieren.

Einen guten Blogeintrag zum Thema "was nützlich bei Blogs ist" gibt es übrigens hier.

Zielvorgaben, Requirements, erhöhen das Anspruchsniveau

  • es soll durch eine XHTML-Validierung kommen
    ja, teilweise, noch einige Fehler im Anwendungscode von DasBlog sind zu beheben
  • es soll UTF-8 codiert sein
    ja
  • es soll smart – Stichwort Simplify – sein
    alles erledigt
    • Kontaktmöglichkeiten und bisherige Publikationen sollen sofort ersichtlich sein
    • weitere Anlaufstellen, wie die .NET User Group Leipzig, sollen sofort ersichtlich sein
    • die Suchfunktionalität soll rechts oben sofort im Blog verfügbar sein
      Neues Theme in Torsten Webers Blog
    • die Navigation ist zu vereinfachen
      alles erledigt
      • für den direkten Aufruf des Blogs, ist eine Navigation wie in Outlook zwischen den Blogeinträgen zu implementieren
        Neues_Theme_7
      • werden einzelne Blogeinträge aufgerufen, muss eine Schaltfläche für "Startseite" zur Verfügung stehen
        Neues_Theme_8
      • als weitere Navigation im Blog soll es geben:
        erledigt
        • "aktuelle Blogeinträge"
        • "erster Blogeintrag"
        • "nach Kategorien sortiert anzeigen"
        • "nach Monaten sortiert anzeigen"
        • und natürlich "vorherige" und "nächste" in einer aggregierten Ansicht
    • jeder Blogeintrag besteht aus Titel, Datum / Inhalt und zusätzlicher Funktionalität
      alles wie gewünscht
      • zusätzliche Funktionalität ist z. B. die Einordnung des Blogeintrags in Kategorien
      • eine 80/20 Regel ist anwenden – einige der zusätzlichen Funktionalität soll erst bei Bedarf zur Verfügung stehen
        • Veröffentlichungszeitpunkt & letzte Änderung sollen sichtbar sein
        • die Einordnung in Kategorien soll sichtbar sein
        • Kommentarfunktionen sind auszublenden
        • "Social Bookmarking" ist zur Verfügung zu stellen und auszublenden
        • Trackbacks und dergleichen sind komplett zu entfernen
          Neues Theme in Torsten Webers Blog

          Neues Theme in Torsten Webers Blog
    • keine riesige lange Blogroll, aber gleichzeitig sollen wiederum auch alle abonnierten Blogs anzeigbar und auch zum Herunterladen vorhanden sein
      Neues Theme in Torsten Webers Blog

      Neues Theme in Torsten Webers Blog
    • alles was nicht wirklich semantisch funktioniert, ist zu entfernen
      • "Verwandte Themen" ist z. B. zu entfernen
  • das Layout ist, wenn nicht anders möglich, komplett mit CSS-Funktionalität umzusetzen
    • die CSS-Styles sollen durch eine Validierung kommen
      erledigt
    • soll im Internet Explorer und Firefox möglichst gleich aussehen
      erledigt, auch wenn vertical-align bei Text/Bildern einen kleinen CSS2-Hack benötigte
    • soll auch noch bei geänderter Textgröße gut lesbar sein
      erledigt
    • beim Druck soll der Inhalt auf die wesentlichsten Inhalte reduziert sein
      • Titel / Datum
      • Inhalt
      • Copyright
      • und bei der Verwendung von Internet Explorer / Firefox in etwa gleich sein
        erledigt, ein Blogeintrag im Browser
        Neues Theme in Torsten Webers Blog
        wird so beim Druck zu
        Neues Theme in Torsten Webers Blog
  • das komplette Layout ist in Deutsch und Englisch zu lokalisieren
    erledigt, jetzt können die ersten Deutsch/Englisch-sprachigen Beiträge folgen
  • das Layout ist smooth anzulegen
    Kanten wurden soweit wie möglich "entschärft", Bilder mit Schatten versehen usw.
    Neues Theme in Torsten Webers Blog
  • alle Links sind auf Redirects und weitere Statusmeldungen automatisiert zu überprüfen
    erledigt und hier festgestellt, dass Microsoft Blogs von rss.aspx auf rss.xml umgestellt worden und das Feedburner derzeit wohl ziemlich beliebt ist...
  • Funktionalität ist soweit wie möglich serverseitig anzulegen, andernfalls über Javascript und CSS
    ja, vorhandenen Anwendungscode korrigiert und erweitert
    kann durch Versionierungssystemen mit aktueller Codebasis zusammengeführt werden
  • Kritischer Erfolgsfaktor: Können die Blogeinträge auf eine andere Engine migriert werden?
    ja, ist möglich

Bis auf XHTML ist somit jede Anforderung umgesetzt worden, perfekt und ich bin ab sofort "Sepiaisch"!
;)

PS: Danke erneut an Alexander, der bei der "OnPageNavigation" und den Parametern mitgewirkt hat!

¹ der geänderte Code ist bei DasBlog nicht eingecheckt, also nur bei mir enthalten

Wednesday, January 09, 2008 7:43:54 AM (W. Europe Standard Time, UTC+01:00)
Hi
Habe dein Blog via Mail "[DasBlog Dev]" gefunden.
Ich würde mich freuen. Dann würde sicher mal wieder was gehen.
Das mit Scott kann ich nur unterstützen. Zur Zeit ist wirklich tote Hose.
Habe mir schon überlegt auf ein anderes Blogsystem zu wechseln.
Aber so richtig überzeugt hat mich keine ASP.NET Blogengine.
Thursday, January 10, 2008 6:27:16 AM (W. Europe Standard Time, UTC+01:00)
Hey,

Your code looks interesting for dasBlog, do you have an english version of your blog?
Bill Harkless
Thursday, January 10, 2008 12:01:22 PM (W. Europe Standard Time, UTC+01:00)
Hi Bill,

no, not yet.

Best Regards!

Torsten
All comments require the approval of the site owner before being displayed.
Name
E-mail
(will show your gravatar icon)
Home page

Comment (Some html is allowed: a@href@title, b, blockquote@cite, em, i, strike, strong, sub, sup, u) where the @ means "attribute." For example, you can use <a href="" title=""> or <blockquote cite="Scott">.  

Live Comment Preview

Boldness, risk‐taking and a little bit of craziness – lateral thinker Torsten Weber
Boldness, risk‐taking and a little bit of craziness – lateral thinker Torsten Weber

Torsten Weber is a MVP for Device Application Development

Calendar of the .NET User Group Leipzig

Microsoft Community Leader/Insider Program

Programmieren mit dem .NET Compact Framework. Anwendungsentwicklung für mobile Geräte.
Inhaltsverzeichnis & mehr

Programmieren mit dem .NET Compact Framework 3.5. Anwendungsentwicklung für mobile Geräte.

Microsoft – change the mobile world or go home!

Categories

Calendar

<October 2008>
SunMonTueWedThuFriSat
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

Archive

My subscribed blogs

show all
show less
Blogs of good friends (as OPML)
More Blogs (as OPML)
RSS: .NET Casts .NET Casts
RSS: .NET Compact Framework Team .NET Compact Framework Team
RSS: Alan Cameron Wills Alan Cameron Wills
RSS: Alex Feinman Alex Feinman
RSS: Alex Januschewsky Alex Januschewsky
RSS: Alex Yakhnin Alex Yakhnin
RSS: Alexander Wechsler Alexander Wechsler
RSS: Alexander Zeitler Alexander Zeitler
RSS: Amit Chopra Amit Chopra
RSS: Anand Balachandran Anand Balachandran
RSS: Anthony Wong Anthony Wong
RSS: Ausgefallene Gadgets & Ideen Ausgefallene Gadgets & Ideen
RSS: Barry Bond Barry Bond
RSS: Boas Enkler Boas Enkler
RSS: Calvin Hsia Calvin Hsia
RSS: Chris Eberl Chris Eberl
RSS: Chris Lorton Chris Lorton
RSS: Chris Tacke Chris Tacke
RSS: Christian Weyer Christian Weyer
RSS: Christopher Fairbairn Christopher Fairbairn
RSS: ComputerBase News ComputerBase News
RSS: Cordula Lochmann Cordula Lochmann
RSS: Dan Elliot Dan Elliot
RSS: Daniel Chong Jyh Tar Daniel Chong Jyh Tar
RSS: Daniel Fisher Daniel Fisher
RSS: Daniel Melanchthon Daniel Melanchthon
RSS: Daniel Moth Daniel Moth
RSS: Dave Baker Dave Baker
RSS: David Kline David Kline
RSS: Dirk Primbs Dirk Primbs
RSS: DotNetGerman Bloggers DotNetGerman Bloggers
RSS: e-commerce blog e-commerce blog
RSS: Erich Holzbauer Erich Holzbauer
RSS: Florian Mätschke Florian Mätschke
RSS: Frank Fischer Frank Fischer
RSS: Gareth Jones Gareth Jones
RSS: George Mathew George Mathew
RSS: Gurbir Singh Gurbir Singh
RSS: Guy Burstein Guy Burstein
RSS: Hannes Preishuber Hannes Preishuber
RSS: Hard Tecs 4U News Hard Tecs 4U News
RSS: Heike Scholz Heike Scholz
RSS: heise online News heise online News
RSS: HoppeRx HoppeRx
RSS: IE Mobile Team Weblog IE Mobile Team Weblog
RSS: Inside Bennie Inside Bennie
RSS: Inside Microsoft Inside Microsoft
RSS: Jack Greenfield Jack Greenfield
RSS: James Pratt James Pratt
RSS: Jason Hogg Jason Hogg
RSS: Jason Langridge Jason Langridge
RSS: Jens Häupel Jens Häupel
RSS: Jezz Santos Jezz Santos
RSS: Jim Wilson Jim Wilson
RSS: Johanna Merhof  Johanna Merhof
RSS: José Gallardo Salazar José Gallardo Salazar
RSS: Josh Heitzman Josh Heitzman
RSS: Kai Gloth Kai Gloth
RSS: Kevin Daly Kevin Daly
RSS: Lao K Lao K
RSS: Loke Uei Tan Loke Uei Tan
RSS: Maarten Struys Maarten Struys
RSS: Marcus Perryman Marcus Perryman
RSS: Mark Arteaga Mark Arteaga
RSS: Mark Ihimoyan Mark Ihimoyan
RSS: Mark Prentice Mark Prentice
RSS: Markus Beckedahl Markus Beckedahl
RSS: Markus Hage Markus Hage
RSS: Markus Zeischke Markus Zeischke
RSS: Martin Fowler Martin Fowler
RSS: Mathias Raacke Mathias Raacke
RSS: Mel Sampat Mel Sampat
RSS: Michael Korp Michael Korp
RSS: Michael Saffitz Michael Saffitz
RSS: Mike Hall Mike Hall
RSS: Mike Temporale Mike Temporale
RSS: Mike Zintel Mike Zintel
RSS: Mobile Developer Center Mobile Developer Center
RSS: Mobile Tagging Mobile Tagging
RSS: MozBackup MozBackup
RSS: MS Mobiles MS Mobiles
RSS: MSDN Forum .NET CF MSDN Forum .NET CF
RSS: MSDN Forum Device Emulator MSDN Forum Device Emulator
RSS: MSDN Forum Smart Devices C#/VB MSDN Forum Smart Devices C#/VB
RSS: MSDN Forum Smart Devices MSDN Forum Smart Devices
RSS: MVP Global Summit 2008 MVP Global Summit 2008
RSS: Nazim Lala Nazim Lala
RSS: Neil Cowburn Neil Cowburn
RSS: Neno Loje Neno Loje
RSS: Nils Müller Nils Müller
RSS: Nino Benvenuti Nino Benvenuti
RSS: Norbert Eder Norbert Eder
RSS: Oliver Block Oliver Block
RSS: Oliver Scheer Oliver Scheer
RSS: OrbLog OrbLog
RSS: Outlook Mobile Team Blog Outlook Mobile Team Blog
RSS: OVIDEO (Kino) OVIDEO (Kino)
RSS: OVIDEO (Trailer) OVIDEO (Trailer)
RSS: Pedro Silva Pedro Silva
RSS: Peter Foot Peter Foot
RSS: Peter Kirchner Peter Kirchner
RSS: Rabi Satter Rabi Satter
RSS: Ralf Westphal Ralf Westphal
RSS: Rob Tiffany Rob Tiffany
RSS: Rod Drury Rod Drury
RSS: Roger Schäffeler Roger Schäffeler
RSS: Roman Batoukov Roman Batoukov
RSS: Scott Guthrie Scott Guthrie
RSS: Scott Holden Scott Holden
RSS: Sebastian Weber Sebastian Weber
RSS: Simon Hackfort Simon Hackfort
RSS: Smartphone-Web Smartphone-Web
RSS: Sriram Krishnan Sriram Krishnan
RSS: Stephen Fry Stephen Fry
RSS: Steve Cook Steve Cook
RSS: Steve Hegenderfer Steve Hegenderfer
RSS: Steven Kelly Steven Kelly
RSS: Steven Pratschner Steven Pratschner
RSS: Stuart Kent Stuart Kent
RSS: Sue Loh Sue Loh
RSS: Thomas Schissler Thomas Schissler
RSS: Tom Hollander Tom Hollander
RSS: Vik Thairani Vik Thairani
RSS: Visual Studio For Devices Team Visual Studio For Devices Team
RSS: We-Dig.org We-Dig.org
RSS: Windows Mobile Team Blog Windows Mobile Team Blog
RSS: Xin Yan Xin Yan