Hey Python Freunde,
Ich habe ein neues Programm gebastelt was euch bei euren Projekten behielflich sein könnte.
Da ich ein wenig in Eile bin kann ich hier nicht so viel darüber erzählen.
Besucht einfach den Link: https://github.com/Jonas18175/ProjectPlan
Da findet ihr auch eine ausführliche Beschreibung.
Die Programmversion ist noch im development-status.
Nächte woche werde ich die Erste release rausbringen.
jtschoch
ProjectPlan
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Hmm... Du bist ja nun schon länger hier im Forum aktiv, da frage ich mich bei dem Code leider, wie wenig bei Dir augenscheinlich hängen geblieben ist.
Grundsätzlich scheinst Du Dir ja schon Mühe gegeben zu haben, aber alleine die Namen zeigen, dass Du PEP8 immer noch nicht verinnerlicht hast. Daran solltest Du *dringend* arbeiten; speziell wenn Du nach Mitstreitern suchst, wie auf Github beschrieben.
Zufällig stach mir das hier ins Auge:
Das ist doch furchtbar umständlich! Für das Prüfen, ob ein Schlüssel in einem Dictionary enthalten ist kann man den ``in`` Operator benutzen:
Dazu kommt auch hier der Name... klassisches Denglisch! ``hasInstanz``... wenn schon ``hatInstanz`` oder ``hasInstance``. Dazu ist die Formatierung eher Javaesque; in Python gilt bei Funktionen und Methoden lower_case_with_underscore, in diesem Falle also ``has_instance``.
Das sind zwar Kleinigkeiten, aber ich denke das zieht sich durch das gesamte Projekt. Daran solltest Du wirklich arbeiten.
Dein selbst gebauter ORM ist auch eher... naja - von Transaktionen sehe ich da z.B. nichts. Ebenfall ist mir unklar wo sich das "API-System für SQL-Server Anbindung" befindet. Ich sehe da nur Code für SQLite.
Wenn Du schon viel abstrahieren willst und wohl Wert auf den Support verschiedener DBMS legst, würde ich Dir einfach SQLAlchemy ans Herz legen, ehrlich! Das spart am Ende Arbeit, auch wenn Du Dich zunächst darin einarbeiten musst.
Das hier riecht auch eher nach Java:
In Python ist es eigentlich Konvention, in einer zu überschreibenden Methode eine Exception auszulösen:
Mir fehlt irgend wie auch ein Domain-Layer. Evtl. könnte man den Datenbank-Teil als solchen ansehen, aber so eine enge Kopplung an die Persistenzschicht ist imho eher unschön, wenn man (später?) Domänenlogik implementiert.
Generell würde auch erwarten, dass *mehr* und *genauere* Infos auf der Projektseite verfügbar sind, die das Projekt beschreiben. Unter einem Bug-Tracker kann man sich sicherlich etwas vorstellen, aber ein paar Features sollte man schon erwähnen. Evtl. auch, was Deine Software von Bugzilla, Track, Mantis usw. abhebt. Last but not least helfen Screenshots durchaus das Interesse bei einem potenziellen Nutzer oder gar Mitstreiter zu wecken.
Außerdem musst Du an der Dokumentation arbeiten; es muss ja nicht nur reine API Doku sein, aber aktuell ist da im Grunde genommen nichts, was mir zeigt, wie ich Code oder auch das Programm verwenden soll.
Bevor ich einen solchen Schnellschuss ("Ich habe das Programm in 3 Tagen zusammengeschrieben, ...") veröffentliche (oder publik mache), würde ich doch an diesen Punkten arbeiten
Grundsätzlich scheinst Du Dir ja schon Mühe gegeben zu haben, aber alleine die Namen zeigen, dass Du PEP8 immer noch nicht verinnerlicht hast. Daran solltest Du *dringend* arbeiten; speziell wenn Du nach Mitstreitern suchst, wie auf Github beschrieben.
Zufällig stach mir das hier ins Auge:
Code: Alles auswählen
class ClassRegister(Enum):
"""This registered all classes"""
#...
def hasInstanz(self, name):
try:
self[name]
return True
except KeyError:
return False
Code: Alles auswählen
class Foo:
def has_key(self, key):
return key in self.__dict__
f = Foo()
f.has_key("foo")
False
f.__dict__["foo"] = 42
f.has_key("foo")
True
Das sind zwar Kleinigkeiten, aber ich denke das zieht sich durch das gesamte Projekt. Daran solltest Du wirklich arbeiten.
Dein selbst gebauter ORM ist auch eher... naja - von Transaktionen sehe ich da z.B. nichts. Ebenfall ist mir unklar wo sich das "API-System für SQL-Server Anbindung" befindet. Ich sehe da nur Code für SQLite.
Wenn Du schon viel abstrahieren willst und wohl Wert auf den Support verschiedener DBMS legst, würde ich Dir einfach SQLAlchemy ans Herz legen, ehrlich! Das spart am Ende Arbeit, auch wenn Du Dich zunächst darin einarbeiten musst.
Das hier riecht auch eher nach Java:
Code: Alles auswählen
#@Override
def createTable(self):
pass
Code: Alles auswählen
def createTable(self):
raise NotImplementedError("Please implement 'createTable'")
Generell würde auch erwarten, dass *mehr* und *genauere* Infos auf der Projektseite verfügbar sind, die das Projekt beschreiben. Unter einem Bug-Tracker kann man sich sicherlich etwas vorstellen, aber ein paar Features sollte man schon erwähnen. Evtl. auch, was Deine Software von Bugzilla, Track, Mantis usw. abhebt. Last but not least helfen Screenshots durchaus das Interesse bei einem potenziellen Nutzer oder gar Mitstreiter zu wecken.
Außerdem musst Du an der Dokumentation arbeiten; es muss ja nicht nur reine API Doku sein, aber aktuell ist da im Grunde genommen nichts, was mir zeigt, wie ich Code oder auch das Programm verwenden soll.
Bevor ich einen solchen Schnellschuss ("Ich habe das Programm in 3 Tagen zusammengeschrieben, ...") veröffentliche (oder publik mache), würde ich doch an diesen Punkten arbeiten

encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Hallo Hyperion,
du hast da was überlesen, da steht kommende Favorites.
Vielen Dank das du mich auf diese Dingen hingewiesen hast, ich werde dran Arbeiten.
Die Github Version desm Projektes ist ja auch noch nicht fertig.
Und wie meinst du das?

PEP8
Und zu Java, ja ich habe es ein wenig in Java-Style gemacht.
du hast da was überlesen, da steht kommende Favorites.
Vielen Dank das du mich auf diese Dingen hingewiesen hast, ich werde dran Arbeiten.
Die Github Version desm Projektes ist ja auch noch nicht fertig.
Und wie meinst du das?
Das mit den "in" wusste ich, aber ich habe es dort wieder mal vergessenMir fehlt irgend wie auch ein Domain-Layer. Evtl. könnte man den Datenbank-Teil als solchen ansehen, aber so eine enge Kopplung an die Persistenzschicht ist imho eher unschön, wenn man (später?) Domänenlogik implementiert.

PEP8
Darf ich nicht mal meinen Stiel beibehalten?Function names should be lowercase, with words separated by underscores as necessary to improve readability.
mixedCase is allowed only in contexts where that's already the prevailing style (e.g. threading.py), to retain backwards compatibility.
Und zu Java, ja ich habe es ein wenig in Java-Style gemacht.
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Das bezieht sich ausschliesslich auf Code der vor PEP8 geschrieben wurde.jtschoch hat geschrieben: PEP8Darf ich nicht mal meinen Stiel beibehalten?Function names should be lowercase, with words separated by underscores as necessary to improve readability.
mixedCase is allowed only in contexts where that's already the prevailing style (e.g. threading.py), to retain backwards compatibility.
@jtschoch: unter »Enum« habe ich mir bisher immer etwas anderes vorgestellt. Aber in der Klasse wird auch Dein Stilmix deutlich. Standard-Python-Schreibweise und Deine spezielle Schreibweise nebeneinander. Übrigens: Was ist der Unterschied zwischen »has_key« und »compareKey« (außer dass zweiteres deutlich langsamer und umständlicher geschrieben ist)?