EasyDate - Nie mehr Termine vergessen!

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

Sonntag 21. September 2008, 10:50

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
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
acoolon
User
Beiträge: 27
Registriert: Samstag 2. August 2008, 20:16

Sonntag 21. September 2008, 11:34

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
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Sonntag 21. September 2008, 11:40

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.
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

Sonntag 21. September 2008, 12:08

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
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
BlackJack

Sonntag 21. September 2008, 12:28

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. :-)
abgdf

Sonntag 21. September 2008, 16:56

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ß
thinkfree
User
Beiträge: 3
Registriert: Montag 22. September 2008, 18:17

Montag 22. September 2008, 20:02

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...)
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

Freitag 26. September 2008, 19:15

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
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Freitag 26. September 2008, 20:07

5 Eben tief sollte allerdings nicht passieren ;)
zerghase
User
Beiträge: 15
Registriert: Samstag 19. November 2005, 21:15
Wohnort: München

Freitag 26. September 2008, 20:24

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 ;)
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

Freitag 26. September 2008, 20:34

@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
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
lunar

Freitag 26. September 2008, 22:50

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.
Benutzeravatar
name
User
Beiträge: 254
Registriert: Dienstag 5. September 2006, 16:35
Wohnort: Wien
Kontaktdaten:

Freitag 26. September 2008, 23:03

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 :)
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

Samstag 27. September 2008, 09:31

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.
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
BlackJack

Samstag 27. September 2008, 10:36

@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.
Antworten