Blog ist wieder reines Blog


Ich hatte zwischenzeitlich dem Blog hier viele weitere Funktionen eingebaut. Da diese aber nun auf kendoo.net ausgelagert sind, habe ich den Quellcode aufgeräumt und aus dem Blog wieder ein reines Blog gemacht. Ich hoffe, es funktioniert noch alles so, wie es auch funktionieren soll. Wink

Die alten Links leiten nun auf die entsprechenden Dienste bei kendoo.net weiter. Von daher sollte das kein Problem darstellen.

Der Quellcode ist auch einsehbar unter https://secure.bheil.net/b3/.

Ich hatte auch überlegt, das eigene Blog mit etwas anderem auszutauschen, z.B. Wordpress oder das auch auf Django basierende byteflow. Beides sehr gute Blog-Engines. Allerdings ist byteflow zu "überladen" für mein kleines Blog und hat viele Features, die ich nicht brauche. Außerdem gefiel mir nicht, dass soviel Javascript Einsatz findet. Zumindest nicht in einem Blog. Daher fiel meine Wahl darauf, doch mein eigenes System zu entschlacken und hier weiter zu verwenden. Das ist zwar recht einfach gehalten, aber läuft nun seit über einem Jahr ziemlich gut.

PISA: PDF-Dokumente in Python einfach erstellt


Auf meiner Arbeit wurde sehr lange ein Word-Makro verwendet, um Text in eine bestimmte Form zu pressen und dann auszudrucken. Dieses Makro war nicht gerade einfach in der Bedienung und relativ fehleranfällig, überdauerte aber die Zeit von Office 97, Office XP bis hin zu Office 2003 - in Office 2007 funktioniert es schlicht nicht mehr.

Nun stand ich vor dem Problem, das Makro in Office 2007 wieder zu flicken (oh Graus), oder vielleicht gleich das Ganze in einer anderen Umgebung umzusetzen. Die Wahl war klar und die betroffenen Kollegen, die damit am Ende arbeiten würden, hatten nichts gegen meinen Vorschlag, eine kleine Webanwendung zu schreiben, die die Konvertierung macht und daraus ein PDF generiert.

Die Django-Applikation war schnell geschrieben, aber da ich noch nie in Python ein PDF erstellt hatte, dachte ich, dass wird ein ziemlich großer Aufwand - bis ich auf Pisa stieß. Das ist nicht der berühmt-berüchtigte Test für das Bildungssystem, sondern ist ein HTML/CSS-zu-PDF-Konverter für Python. Lizenziert unter der GPLv2 steht dem Einsatz nichts im Wege.

Wer also HTML/CSS kann, der kann damit auch ziemlich einfach PDF-Dateien erstellen. Ein Bild könnt Ihr Euch auf der Demo-Seite von Pisa machen. Die Handhabung ist simpel und in der Dokumentation steht alles, was man wissen muss.

Damit war das angesprochene Projekt in wenigen Stunden umgesetzt. Und kein Microsoft Office ist mehr nötig - nur ein Browser und ein PDF-Reader. Zu guter Letzt ist auch der Arbeitsplatz nicht mehr relevant. Die Kollegin kann den Druck anstoßen, wo auch immer sie gerade arbeitet.

Open Source macht einfach produktiver! Smile

Checkout des Django 1.0 Subversion-Branches


Da das leider nicht direkt auf der Django-Webseite verlinkt ist und ich immer danach suchen muss, hier die Anweisung, wie die derzeit stabile Version 1.0 von Django direkt aus dem SVN ausgecheckt werden kann:

svn co http://code.djangoproject.com/svn/django/branches/releases/1.0.X/ django-1.0.x

In diesen Branch fliessen nur Sicherheitsaktualisierungen. Somit bietet sich dies für den produktiven Einsatz an.

Fehler beim Bildertausch behoben


Ich habe vorhin festgestellt, dass es ein Problem bei der Bildertausch-Funktion gab. Das Problem trat nur bei Bilder größer als 2.5 MB auf. Grund waren falsch gesetzte Rechte im System, so dass das Bild zwar korrekt hochgeladen wurde, dann aber nicht vom entsprechenden Prozess gelesen werden konnte.
Die Lösung war simpel: In der Django-Dokumentation steht, mit welchem Wert man festlegen kann, welche Dateirechte an hochgeladenen Dateien vergeben werden. Nach Setzen des Parameters rennts wieder.

Django 1.0 Released!


Wenn das keine freudige Nachricht ist: Django 1.0 ist endlich fertig! Yippie! Smile

Eines der leistungsfähigesten Web-Frameworks hat es zum ersten richtig großen Milestone geschafft. Ein dickes Danke an die Entwickler, die eine fantastische Arbeit leisten.

Download Release Note

Empfehlenswerte Eclipse-Plugins


Wenn man Django-Projekte mit Eclipse bearbeitet, lohnt es sich, folgende Plugins zu installieren (neben PyDev logischerweise):

- GEF (wird vom HTML-Editor benötigt) wie in der GEF-FAQ beschrieben

- Amateras, ein HTML-Editor, damit man die Templates auch schön bearbeiten kann

- Wer mit SVN arbeitet, sollte noch Subclipse installieren.

Kennt noch jemand ein paar hilfreiche Plugins?

Weiter empfehlenswert ist, ein eigenes Projekt in Eclipse zu erstellen, dass den Django-Source enthält. Dieses kann man dann in seinen eigenen Projekten als Abhängigkeit definieren. Klickt man nun auf einen Bezeichner, sprint Eclipse sofort zur Deklaration direkt im Django-Code!

Django-Projekte in Eclipse debuggen


Um mit Eclipse ein Django-Projekt zu debuggen, sind folgende Schritte notwendig (dies bezieht sich auf die Eclipse-Version 3.2.2 aus den Ubuntu-Quellen, andere Versionen sind nicht getestet):

- Eclipse und PyDev installieren, falls noch nicht geschehen. Unter Ubuntu dazu die beiden Pakete "eclipse" und "eclipse-pydev" installieren, die die entsprechenden Abhängigkeiten auflösen.

- Eclipse starten und unter Window->Preferences->PyDev->Interpreter Python als Interpreter python suchen und auswählen - das ist in der Regel /usr/bin/python.
Unter PYTHONPATH den direkten Pfad zur Django-Installation eintragen (bei mir z.B. /opt/django/trunk/django).

Um Django-Projekte zu integrieren, muss man folgendes tun. Dabei sollte das Django-Projekt ganz normal über die manage.py erstellt worden sein, wie man es sonst auch macht. Ist das geschehen, setzt man da ein Eclipse-Projekt drauf:
- Ein neues Projekt in Eclipse erstellen über File->New project. Dort ein pydev-Projekt auswählen. Unter "project contents" das Häkchen entfernen und direkt den Pfad zum schon erstellten Django-Projekt wählen. Die manage.py z.B. sollte direkt in diesem Verzeichnis liegen.
"Create default 'src' folder and add it to the pythonpath?" kann dabei angehakt bleiben.

- Um das Debuggen zu ermöglichen, muss eine neue Debug-Konfiguration erstellt werden. Über Run->Debug... kann durch einen Doppelklick auf "Python Run" eine neue Konfiguration erstellt werden. Dort wird als Projekt das eben erstelle Projekt gewählt und als "Main Module" die Datei "manage.py" ausgewählt. Im Reiter "Arguments" trägt man unter "program arguments" noch "runserver --noreload" ein und klickt auf "Debug". Dann sollten Breakpoints funktionieren.

Spam-Kommentare und tschüß!


Vor einiger Zeit, als ich die Software für diesen Blog hier schrieb, integrierte ich zwar auch Spam-Schutz für die Kommentarfunktion (durch den Einsatz der fantastischen comment_utils; warum das Rad zweimal erfinden?), hatte dies aber deaktiviert. Doch die letzten Tage hat sich das Spam-Aufkommen in den Kommentaren vervielfacht, soll heißen: Die Spammer haben das Blog hier entdeckt und munter Linklisten gepostet (bestes Beispiel hier). Ich aktivierte also Akismet, und - tata - es ging natürlich nicht. Nach einigem Debuggen hab ich den Fehler dann gefunden: Ein Rechtschreibfehler! Oh Mann!
Datz

Jedenfalls werden nun alle Kommentare (und Trackbacks) von Akismet durchleutet und Spam-Kommentare rausgefiltert.

Trotzdem schade, dass überhaupt solche Massnahmen nötig sind. Spam ist ein einziges Elend! Sad

Django's Admin-App verwendet newforms - und zwingt zu Code-Anpassungen


Im Zuge des Sprints auf Django 1.0 wurde nun im trunk die Admin-App so aktualisiert, dass newforms verwendet werden. Zwar ergeben sich dadurch wirklich tolle Möglichkeiten, allerdings sind diese Änderungen leider nicht rückwärtskompatibel und man muss Dinge im eigenen Code zwangsläufig anpassen.
Aber aufgrund der tollen Dokumentation von Django ist das kein sonderlich großes Unterfangen, wie ich freudig festgestellt habe. Smile

Wer sich den neuesten trunk aus dem SVN auscheckt und dann den Entwicklungsserver startet, wird Fehlermeldungen wie z.B. diese erhalten:

TypeError: __init__() got an unexpected keyword argument 'prepopulate_from'

Das liegt daran, dass nun Model-Definitionen von Angaben für die Admin-App bereinigt wurde. Diese Angaben wandern nun in eine extra Klasse, die dann in der Admin-App registriert wird. Dies bringt einige Vorteile: Man kann munter neue Klassen von früheren ableiten und sich sogar mehrere Admin-Oberflächen basteln, die unter verschiedenen URLs erreichbar sind (zum Beispiel darf dann Klaus nur den Admin-Bereich Bäckerei betreten und neues Gebäck zur Datenbank hinzufügen, während Egon nur die Getränkdatenbank bearbeitet und neue Bier-Sorten eintragen kann). Außerdem macht das Model-Definitionen übersichtlicher und sorgt für eine logische Trennung.
Eine schöne Übersicht, was man damit alles anstellen kann, gibts im Django-Wiki.

Es gibt zu der Sache auch einen sehr guten Screencast, den man sich erstmal anschauen sollte in folgendem Artikel:

http://oebfare.com/blog/2008/jul/20/newforms-admin-migration-and-screencast/

Die Änderungen im Detail und was zu tun ist, kann man auch nochmal auf einer Wiki-Seite nachlesen.

Neugestaltung der Webseite oder mein Weg zu Django ...


Endlich ist sie fertig, zumindest in der ersten Beta-Version: meine neue Webseite, komplett in Django geschrieben, konform zu XHTML 1.0 Strict und mit validem CSS.

Ich hoffe, den werten Leser und Besucher spricht die neue Seite an. Am Design habe ich mich ein wenig an der Einfachheit von Google orientiert. Trotzdem sollte es ein relativ zeitloses Design sein, womit man auch noch in einigen Monaten oder Jahren zufrieden sein kann, und dessen Farben ein gutes Gefühl bei gleichzeitig guter Lesbarkeit gewährleisten. Und dabei sollten natürlich die Standards eingehalten werden, so dass die Seite überall gut lesbar ist, egal welcher Browser oder OS (iPhone konnt ich leider nicht probieren Wink ) und auch ohne CSS sollte sie gut strukturiert bleiben. Ich denke, dass ist mir soweit gelungen (jedenfalls in meinen Tests Two thumbs ). Yippie!

Aber warum denn überhaupt eine neue Webseite? War das alte Wordpress-Blog nicht gut? Huh

Vorherige Einträge  Vorherige Einträge