Pflock - ein statisches Blogsystem

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
Benutzeravatar
SigMA
User
Beiträge: 181
Registriert: Sonntag 4. April 2004, 13:27
Wohnort: Freiburg
Kontaktdaten:

moin, moin!

nach langer Zeit bin ich froh mal wieder ein Projekt vorstellen zu dürfen. Es hört auf den tollen Namen Pflock ein Python Blogsystem. Der Clou daran ist, dass es sich hierbei um ein statisches Blogsystem handelt. Das Blog wird als HTML-Seiten erstellt und dann automagisch hochgeladen. Die Einträge müssen in ReST vorliegen.

Pflock generiert automagisch eine Übersicht, einzelne Seiten, RSS-Feed, eine Archivseite und Permalinks.

Ich persönlich muss sagen, dass mir das System besser gefällt als immer über den Browser meine Dateien zu verwalten. Hier habe ich die volle Kontrolle :twisted:

Downloadlink: http://www.lakaetzer.de/pflock/pflock_01.tar.bz2
OnlineBeispiel: http://www.lakaetzer.de/cms/

Freu mich auf Feedback, welches auch über kritische Codebetrachtung hinausgeht :)
gez. SigMA
Leichtdio.de - Das Kreativ-Blog
http://www.leichtdio.de
BlackJack

Du bist farbenblind, oder!? :twisted:
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

  • deine Beispielseite ist nicht valide (9 Fehler)
  • die Links auf der Beispielnavigation könnten ruhig etwas breiter sein
  • primitiv heißt auf englisch primitive (templer.py)
  • README, Kommentare und Ausgabetext sollten auf englisch sein, wenn du Pflock Open Source veröffentlichen möchtest
  • zum Auskommentieren von Code nimmt man keine Doc-Strings, sondern einzeilige Kommentare (differ.py)
  • ftppush.py löst einen NameError aus, weil die Funktion upload nicht gefunden werden kann (es wird aber upload_files definiert)
  • keywords.py
    • Es gibt die Methode splitlines und das os.path Modul
    • Warum wird das Modul os innerhalb von der Funktion generate importiert und nicht im globalen Namespace?
  • blog.tmpl: Es muss generated by Pflock heißen
  • main.py: Zeile 15 ist überflüssig. Ich würde Zeile 16 mit

    Code: Alles auswählen

    print "\n\t"
    anfangen
lunar

Das Design deines Blocks ist – gelinde gesagt – abenteuerlich. Giftgrün auf hellem Orange ist nicht gerade augenfreundlich, gleiches gilt für den gestreiften Hintergrund, der beim Lesen sehr stört. Ein dezenteres Design wäre angebracht.

Zum Code:

Grundsätzlich ist die Art der Verteilung nicht optimal: Lerne distutils/setuptools zu nutzen. Dann kannst du Archive automatisch erstellen, im Cheeseshop veröffentlichen und Abhängigkeiten angeben.

Letzteres ist von Vorteil, da du an einigen Stellen das Rad neu erfindest. Template-Engines gibt es wie Sand am Meer, also nutze auch eine davon (ich persönlich empfehle Jinja2) für deine Templates. Momentan kann man ja eigentlich nicht mal von der Verwendung einer Template-Engine sprechen, da du an vielen Stellen im Code HTML-Tags einbettest (was auch der Lesbarkeit nicht gerade zuträglich ist).

Anstelle einer Python-Konfigurationsdatei würde ich configobj nutzen. Die Vorteile sind, dass du die Konfigurationsdatei validieren kannst. Momentan ist dein Programm gegen Fehler in der Konfigurationsdatei nämlich nicht gefeit. Außerdem ist die Syntax einer INI-Datei weniger komplex als die von Python, und ich denke nicht, dass sich dein Programm ausschließlich an Python-Programmierer richtet, oder?

Die Konfiguration als Modul zu laden, ist ebenfalls schlecht, da man so für jede Installation nur eine einzige Konfigurationsdatei nutzen kann. Besser wäre es, die Konfigurationsdatei aus dem Blog-Verzeichnis zu laden. Dadurch ist die Konfiguration unabhängig von der Installation und man kann das Quellverzeichnis einfach umziehen.

In main.py solltest du "if __name__ = '__main__':" nutzen, um das Modul vor unbeabsichtigter Ausführung zu schützen.

In keywords.py solltest du die absoluten Pfade loswerden. Deine Erkennung von Schlüsselwörtern ist abenteuerlich. Anstatt die Texte manuell nach Worten zu durchsuchen, kannst du reguläre Ausdrücke nutzen. Das macht so ziemlich den Großteil deines Codes überflüssig. Die Erkennung von Genitiven ist zwar nett, aber realitätsfremd. Zum einen endet nicht jeder Genitiv mit s, zum anderen gibt es noch andere Fälle. Um Wörter unabhängig von ihrer grammatikalischen Form zu erkennen, bildet man den Wortstamm und fügt diesen dem Wörterbuch hinzu. Dafür gibt es pystemmer.

Der Sinn von differ.py erschließt sich mir nicht ganz, wenn er doppelte Dateien finden soll, ist das recht umständlich und unverständlich implementiert.

In ftppush.py sehe ich ein except ohne konkrete Ausnahme, was du durch "typisierte" excepts ersetzen solltest. Außerdem ist die Fehlermeldung kaum als solche zu bezeichnen, schweigt sie sich doch über die möglichen Ursachen aus.

Bezogen auf den ganzen Code solltest du die lokalen Imports und Funktionen loswerden. Mal ist sowas ok, aber in deinem Code nimmt das überhand. Außerdem stehen überall hartkodierte Werte, die nur auf dein System zutreffen. Dann ist dein Englisch manchmal falsch. Soll ein Archiv erzeugt werden, dann in einer Funktion "make_archive". "made_archive" heißt, dass das Archiv bereits erzeugt wurde. Außerdem nutzt du an vielen Stellen magische Indizes. Hier solltest du mit besseren Datenstrukturen arbeiten.

Das ist mir beim Überfliegen deines Codes alles aufgefallen. Auf Details habe ich nicht geachtet.
Benutzeravatar
SigMA
User
Beiträge: 181
Registriert: Sonntag 4. April 2004, 13:27
Wohnort: Freiburg
Kontaktdaten:

Guten Morgen und einen schönen ersten Advent ;)

Ich hatte leider die letzten Tage keine Zeit zu antworten, was ich aber jetzt nachholen werden :) Ich bin gerade dabei den größten Teil der bemängelten Sachen auszubügeln (wobei einige schon sehr schnell gefixt wurden sind).

Ich möchte mich erstmal für das "CodeSeeing" bedanken. Es ist immer sehr gut, wenn man (vor allem wenn es so ausführlich ist) Feedback bekommt.

Ziel von Pflockr ist es, kaum Abhängigkeiten zu haben. Deswegen habe ich auch auf eine externe TemplateEngine verzichtet und mir eine eigene primitive Engine geschrieben. Der gleiche Grund verbietet auch pyStemmer reinzunehmen. Das würde die Sache unnötig aufblasen. Die Keyworderkennung funktioniert ja recht zuverlässig ;) Recht gebe ich dir mit dem Umbau auf RE daran habe ich nicht gedacht, aber es würde die Sache einfacherer machen. Ich bin dabei.

Eine config (in welcher Form auch immer) IN das Blogverzeichniss find ich sinnfrei. Eine zentrale Config in der man alles configuriert finde ich übersichtlicher. Vielleicht ist das ja geschmackssache ... ich werde das ConfigModul im laufe der Zeit umschreiben. Vielleicht mache ich dann ne Option mit der es dem User überlassen ist wie er es halten will.

Der Sinn von Differ.py ist folgender. Differ indexiert alle Dateien, hasht und speichert sie in der Datenbank db.hash ab. Bei jedem Aufruf schaut Differ, ob sich eine Datei verändert hat und gibt die liste aller veränderten Dateien zurück, die dann von ftppush hochgeladen werden können. Somit lädt man nichts unnötig hoch.

Freude mich über weitere Anregungen jeder Art
Tobias
Leichtdio.de - Das Kreativ-Blog
http://www.leichtdio.de
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo Tobias!

Den Code habe ich noch nicht gesehen. Aber du solltest wissen, dass ich nach zwei Minuten auf deiner Website nicht mehr klar sehe. Und das meine ich jetzt nicht in irgendeinem übertragenem Sinne. Mir wurde leicht schwindlig und ich tu mir sogar schwer, diese Zeilen hier zu schreiben.

Falls du die subtilen Hinweise meiner Vorposter nicht verstanden hast, hier ein klarer und deutlicher Hinweis:

Wenn du möchtest, dass sich irgendjemand auf dieser Welt deinen Blog durchliest, dann musst du unbedingt eine andere Farbgestaltung wählen. Von diesem Grün/Orange bekommt man Kopfschmerzen (nicht nur ich) und wird Schneeblind (ja, so ähnlich fühlt sich das an). Und die Streifen im Hauptbereich der Seite lassen den Text unruhig erscheinen, was die Lesbarkeit noch mehr verschlechtert.

Ich meine das wirklich nicht böse. :-)

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BlackJack

@SigMA: Der Sinn von Konfiguration im Blogverzeichnis ist, das man dann die Software einmal Systemweit installieren kann und jeder Benutzer problemlos mehrere unabhängige Blogs damit verwalten kann. Die kann man dann zum Beispiel auch einzeln und komplett mit allen Einstellungen sichern oder in eine Versionsverwaltung stecken. Das geht mit einer zentralen Konfiguration nicht.
lunar

SigMA hat geschrieben:Ziel von Pflockr ist es, kaum Abhängigkeiten zu haben. Deswegen habe ich auch auf eine externe TemplateEngine verzichtet und mir eine eigene primitive Engine geschrieben. Der gleiche Grund verbietet auch pyStemmer reinzunehmen. Das würde die Sache unnötig aufblasen.
Du beseitigst die Komplexität nicht, sondern verlagerst sie nur in deinen eigenen Code. Diesen Code musst du selbst testen und warten, eine Verantwortung, die du durch die Verwendung von 3rd-Party-Modulen an andere Entwickler abgibst. Außerdem hat ein externes Modul ungleich mehr Tester und Anwender, es ist also mit größerer Wahrscheinlichkeit fehlerfrei.

Wenn du zugunsten einer einfachen Installation Abhängigkeiten vermeiden willst, dann halte ich das zwar immer noch nicht für sinnvoll, aber ich kann es zumindest nachvollziehen. Die "Sache nicht aufblasen zu wollen", ist für mich dagegen nicht nachvollziehbar. Ohne die Verwendung externer Modul ist dein Code de facto größer und komplexer, also "aufgeblasen".
Eine config (in welcher Form auch immer) IN das Blogverzeichniss find ich sinnfrei.
Gegenwärtig muss man die Software für jeden Nutzer separat installieren. Angenommen, deine Schwester/Freundin/Ehefrau will das an deinem PC auch nutzen: Dann musst du die Software für jeden Nutzer separat installieren und updaten.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Also ich kann verstehen, wenn man die Installation vereinfachen will.

Aber dieser Weg ist imho falsch!

Schreib doch einfach eine umfangreiche Installationsanleitung! Da kannst Du dann bequem die unterschiedlichen Möglichkeiten beschreiben, wie man 3rd Party Libs auf den eigenen Rechner bekommt. Wer Deine Software nutzen will, wird sich dadurch sicher nicht bageschreckt fühlen.

Mir ist es alle Mal lieber so etwas präsentiert zu bekommen, als auf eine obskure *.exe zu klicken :-D
Benutzeravatar
SigMA
User
Beiträge: 181
Registriert: Sonntag 4. April 2004, 13:27
Wohnort: Freiburg
Kontaktdaten:

Ja ich bin ja schon leise :wink: Zumindest werde ich jetzt die Config so umbauen, dass es eine Config-File in dem Blogverzeichnis gibt. Ob ich wirklich eine externe Templateengine einsetzten werde weiß ich noch nicht, aber ich schau mich mal um.

Hab die Farben auf der Beispielseite mal etwas "beschwichtigt". Könntet ihr mir kurz ein Feedback geben, ob das augenfreundlicher ist? Auf meinem LCD sieht es angenehm aus, aber das heißt ja nichts^^

gez. SigMA
Leichtdio.de - Das Kreativ-Blog
http://www.leichtdio.de
lunar

Naja, der Fließtext ist akzeptabel (auch wenn ich schwarz auf hellem Orange nicht für gelungen halte). Störend sind die hervorgehoben, blauen Kapitälchen. Das Navigationsmenü mit grüner Schrift auf dunklem Orange und den penetranten Hover-Effekten ist nach wie vor eine Usability-Katastrophe.

Im Allgemeinen gilt: Nur weil CSS Kapitälchen kennt und die Farbpalette grün und orange liefert, heißt das nicht, dass man das nutzen sollte. Bei Webdesign ist weniger eben mehr.
Antworten