Seite 1 von 1

EasyDate - Nie mehr Termine vergessen!

Verfasst: Sonntag 21. September 2008, 10:50
von roschi
Hallo!

Ich moechte hier EasyDate vorstellen. Mithilfe dieses kleinen aber sehr nuetzlichen Tools werdet ihr nie mehr eure wichtigen Termine vergessen.

Schaut es doch bitte einmal an.
Kritik und Feedback ist erwuenscht!

Website:
http://python-tools.ath.cx/

mfg
roschi

Verfasst: Sonntag 21. September 2008, 11:34
von acoolon
hm..ich bevorzuge meinen schriftlichen terminplaner, der ist immer dabei.. :D

als feedback: pack das nicht in 7z, sondern in normales zip, dann ist sichergestellt, dass das jeder entpaclen kann, ohne sich vorher nach einem Programm unsehen zu muessen..

mfg

Verfasst: Sonntag 21. September 2008, 11:40
von nemomuk
Ich finde die Umsetzung nicht so gelungen...

anstatt des Minifensters könnte man gleich eine Übersicht mit den nächsten Terminen machen...
Das Hinzufügen könnte man in einer Oberfläöche zusammenfassen anstatt der umständlichen Klickerei... vllt. mit Select-Boxen für Uhrzeit/Datum und Checkboxen für Wiederholung etc. Das macht es einem viel einfacher und man hat alles im Überblick.

Verfasst: Sonntag 21. September 2008, 12:08
von roschi
hallo!

@SchneiderWeisse:
SchneiderWeisse hat geschrieben:Ich finde die Umsetzung nicht so gelungen...
was genau findest du denn nicht so gelungen?
SchneiderWeisse hat geschrieben:anstatt des Minifensters könnte man gleich eine Übersicht mit den nächsten Terminen machen...
Das Hinzufügen könnte man in einer Oberfläöche zusammenfassen anstatt der umständlichen Klickerei... vllt. mit Select-Boxen für Uhrzeit/Datum und Checkboxen für Wiederholung etc. Das macht es einem viel einfacher und man hat alles im Überblick.
ja, stimmt, das waere vielleicht einfacher in einem eigenen dialog. werd ich mal machen.

@acoolon:
upps :) ich bin da nur von mir selber ausgegangen.
ich habe 7zip, daher ist mir das nicht in den sinn gekommen. :(

vielen dank an euch fuer das feedback!
ich werde bald eine ueberarbeitete version reinstellen.

mfg
roschi

PS: ausserdem habe ich einen kleinen fehler bei der check-funktion gefunden. der wird auch weg kommen! :D

Verfasst: Sonntag 21. September 2008, 12:28
von BlackJack
Die Einrücktiefe ist üblicherweise 4 Leerzeichen pro Ebene, und nicht zwei.

Konvention bei Klassennamen ist CamelCase. Und der Name `datefuncs` lässt vermuten, dass es sich eher um eine Sammlung von Funktionen und nicht um ein "echtes" Objekt im OOP-Sinn handelt.

Warum ist `app` ausserhalb der `main()` auf Modulebene definiert?

Deine Fehlerbehandlung ist schlecht bis ziemlich kaputt. ``except`` ohne konkrete Ausnahme ist Böse™, weil damit alle möglichen Ausnahmen behandelt werden, auch solche mit denen man nicht gerechnet hat oder die man anders behandeln sollte.

In `datefuncs.get_shelve_obj()` wird jegliche Ausnahme abgefangen und durch den speziellen Rückgabewert `None` ersetzt und an der Stelle wo die Funktion aufgerufen wird, testest Du auf `None` und löst dann eine total nichtssagende und nackte `Exception`. WTF!? Spezielle Fehlerrückgaben will man mit Ausnahmen ja gerade vermeiden.

Die Aufteilung vom Öffnen des `shelve`\s in einer Funktion und dem schliessen an allen möglichen anderen Stellen ist auch ungünstig. Insbesondere ist das schliessen im Falle von Ausnahmen in Deinem Quelltext nicht überall garantiert. Da Du die Ausnahmen aber ignorierst, oder höchstens eine Meldung an den Benutzer aus gibst, kann es durchaus passieren, dass die gleiche "shelve"-Datei mehrfach geöffnet wird, was keine besonders gute Idee ist.

`check_for_shortly_dates()` ist wieder ein WTF. Dieses Tänzchen mit `time`, `datetime`, und regulären Ausdrücken kann man sich umständlicher ja gar nicht ausdenken. Zumal die Daten sowieso alle ge"pickle"t werden, verstehe ich auch nicht, warum Du nicht einfach `datetime`-Objekte verwendest. Für einen einzelnen Termin würde sich auch eine Klasse anbieten, mit ordentlichen Attributnamen, so dass man sich nicht immer merken muss an welchem Index welche Information steht.

Das liesse sich schön sauber und verständlich ungefähr so schreiben (ungetestet):

Code: Alles auswählen

    time_frame = datetime.timedelta(hours=24)
    for appointment in self.appointments.itervalues():
        date = appointment.date
        if 0 < (date - datetime.datetime.now()) < time_frame:
            mbox('ACHTUNG!\nTermin\n\n'
                 'Name: %s\n'
                 'Info: %s\n'
                 'Datum & Zeit: %s\n'% (appointment.name,
                                        appointment.info,
                                        date.strftime('%d.%m.%Y %H:%M:%S')))
``if`` ist keine Funktion und benötigt auch keine Klammern um die Bedingung. Ausserdem gibt es neben ``==`` auch den ``!=``-Operator. Den sollte man statt ``not a == b`` verwenden.

`add_date()` ist für meinen Geschmack zu lang und komplex. Hier schlägt unter anderem die Vermischung von GUI und Logik zu.

`shelve`-Objekte speichern als Werte beliebige "pickle"bare Python-Objekte, Du musst das also nicht selber machen. Du "pickle"st die Liste als Zeichenkette und `shelve` "pickle"t dann diese Zeichenkette *noch einmal*. Das ist unnötig kompliziert.

Fazit: Das ganze mit Trennung von GUI und Logik und mit einem ordentlichen OOP-Ansatz neu schreiben. :-)

Verfasst: Sonntag 21. September 2008, 16:56
von abgdf
Hallo,

muß mir grad' noch p7zip...rpm runterladen :(.

Hier

http://duehl.de/christian/perl/perlmain.html#projekte

hat jemand schonmal sowas Ähnliches in Perl geschrieben ("wichtig.pl". Der Code ist dort leider nicht gepostet, kann man vielleicht per Email erhalten; so zum Vergleich ...).

Gruß

Verfasst: Montag 22. September 2008, 20:02
von thinkfree
hm... Hinzufügen zu umständlich, Erinnerung sollte automatisch kommen, "wöchentlich", "täglich" als Optionen...

Ich hab auch einmal einen Terminplaner gesucht und entschieden selbst einen zu programmieren

Angefangen in Visual Basic, oft überlegt in andere Sprachen zu portieren... aber im Moment fehlt da sowieso die Zeit (Studium & nebenbei arbeiten...)

Verfasst: Freitag 26. September 2008, 19:15
von roschi
hallo ihr alle!

ich danke euch vielmals fuer eure vielen antworten!

die kritik habe ich mir natuerlich zu herzen genommen und einen großteil am programm verbessert.

@BlackJack:
ich finde vier leerzeichen einruecktiefe einfach zu viel. irgendwie wird der code dadurch sehr unuebersichtlich. wenn man mal so 5 ebenen eingerueckt hat (was ja durchaus mal schnell passieren kann), ist man schon bei 20 zeichen. dann passt ja nicht mehr viel in die zeile! zudem bin ich (aber das kannst du natuerlich nicht wissen :)) stark sehbehindert, und habe dann probleme mit diesen riesigen spruengen. ich kann ja mal versuchen den code, bevor ich ihn hier poste, auf 4 zeichen einruecktiefe abzuaendern.
klammern um 'if' und 'elif' war ich einfach so gewoehnt. ich weiss auch nicht woher... ich hab das in meiner anfangszeit oft so gesehen, und mir dann so angewoehnt. jetzt ist es jedenfalls geaendert!

@abgdf:
das tut mir wirklich leid mit dem 7zip. ich werde den code naechstes mal bei paste.pocoo.org reinpacken.

so, die neue version ist also bald fertig, ich sag dann einfach nochmal bescheid!

mfg
roschi

Verfasst: Freitag 26. September 2008, 20:07
von audax
5 Eben tief sollte allerdings nicht passieren ;)

Verfasst: Freitag 26. September 2008, 20:24
von zerghase
Würden alle mit tabs einrücken, hätte niemand das Problem und könnte einfach seinen Editor so einstellen wie er möchte.
Ausserdem wären die Programme kleiner ;)

Verfasst: Freitag 26. September 2008, 20:34
von roschi
@zerghase:
ja, da hast du recht!

@audax:
klasse -> funktion in der klasse -> for-schleife in der funktion -> if in der for-schleife -> try/except in dem if

:)

mfg
roschi

Verfasst: Freitag 26. September 2008, 22:50
von lunar
zerghase hat geschrieben:Würden alle mit tabs einrücken, hätte niemand das Problem und könnte einfach seinen Editor so einstellen wie er möchte.
Man kann die Tabweite nicht überall einstellen. Und dort, wo man sie nicht einstellen kann, sieht man acht Leerzeichen, was die Lesbarkeit von Code ziemlich herabsetzt. Im Übrigen existieren ja nun auch Tools, die die Einrückung automatisch ändern können.

@roschi
Bei fünf Ebenen ala vier Leerzeichen bleiben noch 60 Zeilen, bevor man das Längenlimit von PEP 8 überschreitet. In diesen 60 Zeilen findet sich – so man sie überschreiten würde – garantiert mindestens eine Stelle zum Umbrechen.

Im Ernst, wenn du wirklich Probleme hast, bei vier Leerzeichen keine überlangen Zeilen zu produzieren, ist dein Code ein bisschen zu verschachtelt. Nicht, dass zwei Leerzeichen jetzt ein großes Problem wäre, aber wenn man schon einen Styleguide hat, sollte man sich auch nach Möglichkeit daran halten.

Verfasst: Freitag 26. September 2008, 23:03
von name
lunar hat geschrieben:
zerghase hat geschrieben:Würden alle mit tabs einrücken, hätte niemand das Problem und könnte einfach seinen Editor so einstellen wie er möchte.
Im Ernst, wenn du wirklich Probleme hast, bei vier Leerzeichen keine überlangen Zeilen zu produzieren, ist dein Code ein bisschen zu verschachtelt. Nicht, dass zwei Leerzeichen jetzt ein großes Problem wäre, aber wenn man schon einen Styleguide hat, sollte man sich auch nach Möglichkeit daran halten.
Amen.
Wrap die Zeilen halt einfach, irgendwo gehts immer, ausser du hast Namen mit mehr als 60 Zeichen :)

Verfasst: Samstag 27. September 2008, 09:31
von roschi
ja, okay.
also: es wird sich schon irgendwo eine umbruchstelle finden.
das war vielleicht ein bisschen uebertrieben.
ihr habt recht.

@lunar:
welche tools gibts denn zum aendern der einruecktiefe? kannst du mir eins empfehlen?

mfg
roschi

PS: ich kenne keinen vernuenftigen editor, bei dem man die tabgroeße nicht einstellen kann.

Verfasst: Samstag 27. September 2008, 10:36
von BlackJack
@roschi: Von Editoren hat Lunar auch nicht gesprochen. Zum Beispiel kann man die Tab-Weite in Browsern in der Regel nicht einstellen, d.h. Quelltext, den man hier postet muss man dann mit 8 Leerzeichen pro Tab ertragen.

Das gleiche gilt für Terminals und News- und E-Mail-Clients, wo auch viele Leute Quelltexte regelmässig zu Gesicht bekommen. Zum Beispiel in Tracebacks oder beim "diffen" oder als Patches, die automatisch per Mail von Versionsverwaltungen verschickt werden können.

Verfasst: Samstag 27. September 2008, 10:50
von lunar
roschi hat geschrieben:@lunar:
welche tools gibts denn zum aendern der einruecktiefe? kannst du mir eins empfehlen?
Eines ist schon bei deiner Python-Installation dabei, nämlich reindent.py. Und mit ein bisschen Suche lässt sich da sicher noch was anderes finden. Empfehlen kann ich dir keines, ich nutze sowas nicht. Mein Code ist (hoffentlich) weitestgehend PEP 8 konform.

Was die Tabweite angeht, so hat BlackJack mir die Worte aus dem Mund genommen.

Verfasst: Samstag 27. September 2008, 13:09
von roschi
@BlackJack:
gut, daran habe ich nicht gedacht. sorry

@lunar:
ja, reindent.py funktioniert super.
vielen dank!

mfg
roschi