Seite 1 von 2

Pyedit 1.5

Verfasst: Freitag 2. Januar 2009, 12:56
von Andyh
Hallo
##############################################################
Pyedit 1.5 ist raus
diesmal aber nur für Linux und nicht meht windows


http://andy-h.de/pyedit/pyedit1.5.tar.gz

Was habe ich gemacht:
-Icon hinzugefügt (install.py angepast)
-kompatibilitäts Programm hinzugefügt
-Kann jetzt alle text Formate Lesen(Python-Programme haben immer noch syntax highlighting)
-Update Funktion wurde herausgenommen, weil sie wegen der neuen Installationsmethode nicht mehr
funktioniert(wird überarbeitet)
-neue Installationsmethode hinzugefügt, pyedit sollte jetzt installiert werden
####################
-Datensicherheit überarbeitet
-Die Daten wird jetzt alle 10sek. gesichert in die Datei "speed_save.txt"
-Alle 2min. werden die Daten zudem noch in die Datei"Autosave.txt" gesichert.
Die Dateien befinden sich:
-bei Installiertem Pyedit im Ordner "/tmp/"
-an sonst im Ordner "pyedit" den sie aus dem Internet haben
####################
-Programm ausführen komplett neu gestaltet, es werden jetzt die Fehler angezeigt.
##############################################################
Pyedit 1.3 ist raus
aber nur für Linux(müsste aber auch unter windows gehen)

http://andy-h.de/pyedit/pyedit1.3.tar.gz

Was habe ich gemacht:

-Bug beim Exportieren beseitig
-Es wurde das Modul complete.py hinzugefügt
-Codevervollständigung verbessert


Nach etlichen belästigungen die ich hier angerichtet habe ist es nun volbracht!
Pyedit1.0 Beta ist fertig!

Download:
http://andy-h.de/pyedit/pyedit.zip
http://andy-h.de/pyedit/pyedit.tar.gz

Was wird benötigt?
-das Modul wx http://wxpython.org/download.php#binaries
-das Pygments http://pygments.org/download/
-das system muss den befehl python kennen

Zur Installation:
Das Programm muss eigentlich nicht installieren, aber besser ist es wenn man es macht, besonders unter linux.

-Entpacken
-Terminal öffnen
-ins verzeichnis wechseln

Linux:
- ./instal.py eingeben
Windows:
-python install.py

-dann muss man den Instalationspafd eingben (z.B. linux /home, Windows C:/programme, wichtig der letzte schrägstrich muss wegbleiben)
-dann wird das Betreibsystem erkannt. wenn das erkennen gelungen ist nur ENTER ansonsten auswählen

Starten:

Linux:
Nicht auf das Programm (pyedit.py)direck kicken, sondern auf die Datei Pyedit.
Wenn man das Programm nicht installiert hat gibt es die Datei Pyedit nicht, dann muss man das Programm über die konsole starten

Windows:
Doppelt auf pyedit.py klicken.

Was fehlt noch?:
-Man kann das programm noch nicht Konfigurieren
-Export als HTML geht noch nicht perfekt
-so kleinigkeitet
-wenn ihr was findent her damit!

Gleich vorweg zur Kritik:
-Nehme ich grene an (will mich ja verbesser)
-das der code alles andere wie schön ist weis ich schon! Ich wills jetzt aber einfach mal hergeben damit man mal sieht das ich was arbeite!

Gruß
Andyh
[EDIT] tar.gz Datei nachgereicht

Verfasst: Freitag 2. Januar 2009, 14:23
von Leonidas
Hint: Tarballs können Executable-Bits enthalten, Zip-Archive afaik nicht.

Verfasst: Freitag 2. Januar 2009, 14:45
von audax
mach diese

Code: Alles auswählen

try:
    import foo
except ImportError:
    print 'Konnte "foo" nicht importieren!'
    sys.exit(-1)
bitte weg.

Und wenn du dich dann noch an PEP 8 hälst und das logging modul nutzt könnte das was werden...

Man braucht übrigens keine 5-zeiligen Module und die Config würde ich nicht als Py-Modul speichern sondern mit ConfigObj oder so

Verfasst: Freitag 2. Januar 2009, 15:11
von Andyh
Hallo

@audax:
Danke für die Antwort!

Was ist daran falsch wenn ich ImportError abfange?
Gut es macht den code küstlich länger aber sonst...

zu den 5 zeiligen modulen, das stimmt die braucht man nicht, aber ich dachte gleich an später wenn ich ausbauen möchte.

Un zum PEP8 also ich finde ich habe mich schon ganz gut daran gehalten im gegensatz zu früher(jetzt mich aber nicht zerfleischen wegen dem satz).

Das logging modul kannta ich noch garnicht, Danke.
Muss ich mir mal ansehen.

Gruß
Andyh

Verfasst: Freitag 2. Januar 2009, 15:18
von audax
Andyh hat geschrieben: Was ist daran falsch wenn ich ImportError abfange?
Gut es macht den code küstlich länger aber sonst...
Es macht den Code länger und er wiederholt sich immer.
Es reicht völlig, den ImportError einfach werfen zu lassen...

Kommentare sollten übringens in eine extra-Zeile und nicht hintendran, das macht die Zeilen zu lang.

Verfasst: Freitag 2. Januar 2009, 16:02
von lunar
Ich habe mir nur das Installationsskript angeschaut. Das war so grausam, dass ich auf den Rest keine Lust mehr hatte. Nichts für ungut ;)

Der Selbsttest mit "sys.path[0]" ist idiotisch. Wenn du den Pfad des Installationsskripts möchtest, nutze "__file__". Auf Existenz einer Datei kann auch auch einfacher mit os.path.isfile testen.

Zum Zusammensetzen der Pfade gibt es os.path.join. Das verhindert böse Überraschungen für den Nutzer, wenn er entgegen deinem Rat den Schrägstrich doch vergisst.

Vollends abenteuerlich wird es dann bei der Erkennung des Betriebssystems. Wie zum Teufel bist du nur auf die Idee gekommen? Bitte, bitte nutze doch einfach sys.platform oder das platform-Modul.

Im Übrigen gibt es ja auch distutils/setuptools zur Installation.

@Leonidas

Code: Alles auswählen

$ ll pyedit
insgesamt 44
-rwxr-xr-x 1 lunar users  6937  2. Jan 12:36 install.py
-rw-r--r-- 1 lunar users  6921  2. Jan 12:33 install.py~
drwxr-xr-x 2 lunar users  4096  2. Jan 12:31 module
drwxrwxrwx 2 lunar users  4096  2. Jan 11:08 pics
-rw-r--r-- 1 lunar users 19293  2. Jan 12:34 pyedit.py
Diese Berechtigungen kommen auf jeden Fall nicht von meiner umask ;) Irgendwie unterstützt ZIP also Unix-Rechte.

Verfasst: Freitag 2. Januar 2009, 16:13
von Andyh
Hallo

@lunar

Na edlich ist es jemand aufgefallen.
Den istallationsscript habe ich heute morgen schnell gemacht ohne groß zu schauhen und tuhen.

Also ich finde die OS abfrage doch ausgefallen oder? :wink:

Achso den code sollt ihr euch auch nicht so genau anschauhen, guck euch lieber mal das programm an!

Gruß
Andyh

Verfasst: Freitag 2. Januar 2009, 16:18
von lunar
Andyh hat geschrieben:Achso den code sollt ihr euch auch nicht so genau anschauhen, guck euch lieber mal das programm an!
Nichts für ungut, aber wenn ich von der Codequalität des Installationsskripts auf den Rest des Codes schließe, dann möchte ich das Programm lieber nicht ausführen. Ganz generell würde ich das nicht ohne den Code anzusehen ausführen.

Und wenn es – wie ich vermute – nur ein weiterer Editor ist, dann musst du mir erstmal erklären, warum ich deinen Editor emacs vorziehen sollte ;)

Verfasst: Freitag 2. Januar 2009, 16:21
von Leonidas
Ok, da lunar meint, dass das mit den Rechten stimmt - ok. Was ich noch zu Kritisieren hätte wären die Backup-Dateien und die pyc-Dateien, sowie die ``Thumbs.db`` (und die GIFs sowieso). ``images.py`` finde ich ebenfalls ziemlich übel, was spricht gegen Bilddateien, die du ja sowieso auch hast? Statt einer ``install.py`` hätte ich mir eher eine ``README``-Datei gewünscht.

Verfasst: Freitag 2. Januar 2009, 17:14
von audax
Beherzige doch mal das DRY-Prinzip, damit wäre dem Code sehr geholfen!

Verfasst: Freitag 2. Januar 2009, 17:39
von Andyh
Hallo

Was ist das DRY-Prinzip?

Ich habe jetzt den Installscrpit abgeändert("verbesser")
Mir gefällt er immer noch nicht, aber er tut das was er soll.

Wenn ich mir hier die ganzen negativen kommentare immer ansehe, beneide andere Programmiersprchen, wo man gleich eine .exe oder.bin verteilt. Da zählt dann erstmal das ergebniss und dann der rest.

Von euch hat sicher noch keiner Pyedit mal gestartet :cry:

Man ich bin ja auch erst bei der version 1.0 auf meiner TODO liste steht:

Bis Version 2.0 wird nur der Code ausgebessert.

Und da kann ich ja einige updates machen:
z.B 1.1.2.3

Verfasst: Freitag 2. Januar 2009, 17:45
von OverNord
Andyh hat geschrieben:Hallo

Was ist das DRY-Prinzip?
Don´t repeat yourself

Verfasst: Freitag 2. Januar 2009, 17:54
von Andyh
Hallo

@OverNord
Danke für die Antwort

Ich bin eigentlich kein Fan von immer gleichen Programm Teilen.

Am meisten mag ich

Code: Alles auswählen

liste = [1,2,3,4,5]

for item in liste:
    print item
Gruß
Andyh

Verfasst: Freitag 2. Januar 2009, 17:56
von Leonidas
Andyh hat geschrieben:Wenn ich mir hier die ganzen negativen kommentare immer ansehe, beneide andere Programmiersprchen, wo man gleich eine .exe oder.bin verteilt. Da zählt dann erstmal das ergebniss und dann der rest.
Ja, ist doch egal wie der Code ist, ob der scheiße ist oder nicht, hauptsache es passiert irgendwas, oder?

Naja, es war nicht anders zu erwarten: du schreibst einen Editor in Python und postest den Code in ein Python-Forum. Die Leute hier haben ja schon einen Editor, brauchen also keinen weiteren. Zudem dein Editor wx nutzt, was ich gar nicht installiert habe. Da ist es ja klar, dass man sich halt den Code ansieht und schaut ob wenigstens der interessant ist.

Verfasst: Freitag 2. Januar 2009, 18:10
von OverNord
Andyh hat geschrieben: Von euch hat sicher noch keiner Pyedit mal gestartet :cry:
Ich hab Pyedit gestartet. Was mich stört, ist, dass es kein richtiges Menu gibt, sondern eigentlich nur eine Toolbar. Ansonsten kann ich nur sagen: Mach weiter, kann nur besser werden :wink:

Verfasst: Freitag 2. Januar 2009, 18:26
von fred.reichbier
Ich habs mal gestartet und mir dafür den Code nicht angesehen ;) Merkwürdig fand ich, dass zwar nach einer 'return'-Zeile der Code um eine Einrückungstiefe nach links gerückt wird, aber nicht bei 'return 1'. Allgemein find ich die Einrückung noch ein bisschen zickig, aber das kann ja noch werden.

Verfasst: Freitag 2. Januar 2009, 19:30
von Andyh
Leonidas hat geschrieben: Ja, ist doch egal wie der Code ist, ob der scheiße ist oder nicht, hauptsache es passiert irgendwas, oder?

Naja, es war nicht anders zu erwarten: du schreibst einen Editor in Python und postest den Code in ein Python-Forum. Die Leute hier haben ja schon einen Editor, brauchen also keinen weiteren. Zudem dein Editor wx nutzt, was ich gar nicht installiert habe. Da ist es ja klar, dass man sich halt den Code ansieht und schaut ob wenigstens der interessant ist.
Ja genau haupsache es geht!

Nein Quatsch, es ist mir schon recht das man meinen Code schlecht macht, der ist auch schlecht!
Wenn mir keiner was sagt wirds auch nicht besser, nur arbeite ich jetzt schon lange an den ding und habe es vorgestellt obwohl es noch nicht ganz fertig ist und alles was man hört ist da da da und da. Da ist man erstmal schon gefrustet.

Das ist jetzt ja mein erstes Programm so für die Öffentlichkeit, da muss ich wohl erst noch dran gewöhnen.

@fred.reichbier
Danke für die guten worte sowas braucht man auch, sonst hat man ja garkeine lust mehr.
Zum einrücken:
Ja das ist in der tat noch son problem, ich dachte mir ich lasse es mal so drin besser als keins.

@OverNord
Auch danke für deine Worte!

Eigentlich wahr es auch mein ziel ohne Toolbar auszukommen, weil ich das hauptaugenmerk auf die paar Symbole und des Code setzten wollte.

Aber es wird schon noch eine Toolbar kommen, weil mir noch ein paar sachen eingefallen sind und ich ja nicht alles in symbole packen kann.

Gruß
Andyh

Edit (Leonidas): Restliche Diskussion in "Freundlichkeit und Unfreundlichkeit" abgetrennt.

Verfasst: Samstag 3. Januar 2009, 08:56
von gkuhl
Abend,

ich hab's jetzt auch mal gestartet (nur das Programm, die install.py habe ich mich nicht getraut). Auf den ersten Blick sieht nicht so schlecht aus, wobei vieles noch fehlt. Was mir aufgefallen ist, dass Suchen und Ersetzen nicht richtig funktioniert. Das Funktion findet schon ersetzte Zeichenketten und überschreibt dann anderen Text.

Zum Code ist mir beim Überfliegen schon aufgefallen, dass einige Codezeilen länger als 237 Zeichen sind (also 3x länger als nach PEP8 gewünscht), was ich persönlich auf meinem kleinen 14'' Notebook für unzumutbar halte. Weiter ist der Code zum größten Teil ein bunter Mix aus deutsch, englisch und denglisch:

Code: Alles auswählen

   def laden(self, datei):
       data = open(datei).read()
In den ganzen print-Anweisungen sind auch recht viele Rechtschreib- und Tippfehler und die Ausgaben machen nicht einmal Sinn:

Code: Alles auswählen

ERROR Das Modul "pygments" wurde nicht gefunden Programm
    Das Programm kann trozdem ausgeführt werden,
    es kamm aber zu einschränkungen beim Drucken.

Das Modul "export_html" wurde gefunden und Importiert

ERROR Das Modul "pygments" wurde nicht gefunden Programm
    Das Programm kann trozdem ausgeführt werden,
    es kamm aber zu einschränkungen beim Drucken.

Das Modul "export_rtf" wurde gefunden und Importiert

Das Modul "drucken" wurde gefunden und Importiert

Es wurden alle Module gefunden
Mein Vorschlag: Verbessere erstmal deinen "Coding Style" und korrigiere vor allem die Tippfehler, dann wird sich die Kritik hier auch mehr auf den Code beziehen.

So weit erstmal von mir.
gkuhl

Verfasst: Samstag 3. Januar 2009, 09:16
von BlackJack
@Andyh: Falls wir Dir mit unserer Unfreundlichkeit den Spass am veröffentlichen von Python-Programmen nicht ganz verderben sollten, wäre eine Versionsangabe im Namen des Archivs praktisch, damit man die Versionen besser auseinander halten kann. :-)

Deine Antwort zum DRY-Kommentar habe ich nicht verstanden!? Es geht bei DRY übrigens nicht nur um 100% gleiche Wiederholungen, sondern auch um Quelltext der sich nur durch einige Kleinigkeiten unterscheidet, also Kandidat für eine eigene Funktion wäre.

Mal sehen ob ich mich durch mehr Quelltext als durch die `pyedit.py` arbeiten kann. Da fängt's schon mal mit der Einrückung von drei Leerzeichen pro Ebene an. Damit hast Du quasi eine Zusammenarbeit mit anderen schon fast ausgeschlossen.

Die "Klasse" `Datei_Dialoge` scheint nur als Namensraum für zwei Funktionen missbraucht zu werden. Erbt aber trotzdem von `wx.FileDialog`!? "Spezielle" Rückgabewerte für Ausnahmesituationen sind keine gute Idee. Insbesondere dann nicht, wenn der Wert an sich *gültig* wäre! Es mag zwar sinnlos sein eine Datei mit dem Namen ' ' anzulegen, aber eben nicht unmöglich. Ausser halt mit Deinem Editor.

``pass`` ist ein Schlüsselwort, das man so gut wie nie einsetzen muss. Von den 16 Stück in `pyedit.py` können alle ersatzlos gestrichen werden.

Warum ist der Quelltext in `Menu_bar.make()` nicht in der `Menu_bar.__init__()` bzw. wird dort nicht aufgerufen. Und warum heisst die Klasse `Menu_bar`?

Wahrheitswerte sollte man mit ``True`` und ``False`` modellieren und nicht mit Zahlen. Dann wäre der ``else``-Zweig in `Menu_bar.onfind()` auch überflüssig.

"Magische Zahlen" sind nicht gut. Die Zahlen für Ja und Nein in `Menu_bar.save_frage()` haben auch Namen, dann könnte man sich den Kommentar auch sparen. In der Funktion (Methode ist es nämlich keine) fällt auch extrem auf, wie viel komplizierter der ganze Loggingkram das Programm macht. Das könnte auch so aussehen:

Code: Alles auswählen

def save_question():
    answer = wx.MessageDialog(parent=None,
                              style=wx.YES_NO,
                              message='Datei wurde noch nicht gespeichert!\n'
                                      'Erst Speichern?'
                              caption='Speichern').ShowModal()
    return answer == wx.ID_YES
`Menu_bar.save_test()` ist ziemlich verwirrend und auch zu kompliziert. In Bedingungen sollte man nicht nicht noch einmal explizit auf ``== True`` oder ``== False`` testen. Nachdem ich in `edit.py` nachgesehen habe, was `is_saved()` macht, ist mir auch meine Verwirrung klar. Das gibt einen *wahren* Wert zurück, wenn *nicht* gespeichert wurde, und einen *falschen*, wenn gespeichert wurde. Es macht also genau das Gegenteil, von dem was man anhand des Namens vermuten würde. Ausserdem werden da wieder Zahlen anstelle von Wahrheitswerten verwendet. Die Methode könnte (mit einem intuitiveren Rückgabewert von `is_saved`) so aussehen:

Code: Alles auswählen

    def save_test(self):
        if not self.master.editor.is_saved and self.save_frage():
            return self.save_or_saveas()
        return True
`Menu_bar.save_or_saveas()` kann man analog verkürzen:

Code: Alles auswählen

   def save_or_saveas(self):
        if self.datei_pfad:
            return self.onsave(None)
        else:
            return self.onsaveas(None)
Ausnahmebehandlung ohne konkrete Ausnahmen ist Böse™.

Tastenkürzel für die einzelnen Funktionen wären nett.

Bei Suchen/Ersetzen habe ich erst einmal gerätselt, wie man das wieder wegbekommt. Da wäre es hilfreich, wenn der Knopf in der Werkzeugleiste gedrückt dargestellt wird.

Warum gehen die Fenster immer an einer von Dir fest vorgegebenen Position auf? Neue Anwendungen sollen bei mir da aufgehen, wo Platz ist, und das macht mein Fenstermanager auch ganz gut, wenn die Anwendung nicht glaubt es besser zu wissen.

Übrigens ein absolutest Killerkriterium Deinen Editor nicht zu verwenden: Umlaute eingeben, und auf Speichern drücken --> Keine offensichtliche Fehlerrückmeldung, dass nur eine leere Datei angelegt wurde, weil's einen `UnicodeEncode`-Error gab. Ganz böse.

Verfasst: Samstag 3. Januar 2009, 09:57
von Andyh
Hallo

@BlackJack

Danke für deine Antwort!

Ich muss mich mal genau in deinen Beitrag einlesen. Was ich schon gesehen habe ist alles nachvollziehbar, Danke für die erläuterung!

Denn ganzen save-Teil muss ich nochmal neu machen der ist echt verwirrend.

@gkuhl

Naja die jetztige install.py ist schon einiges besser als der rest. Ich werde jetzt aber zwei versionen machen eine für Windows und eine für Linux.

Zur Rechtschreibung:
Na und ich habe ne 4 in Deutsch (Hauptschule) und ich stehe dazu. Ich weis eh nicht warum ich nocht tippe wenn ich doch Spracherkennung habe :P

Das mit den vermisschten sprachen ist bei mir so ein problem:
-Einmal weil ich gern mal was kopiere von anderen code
-weil ich recht off Deutsch und Englisch zusammen Chatte.

Mal schauhen

Auch danke für deine Gute Antwort!

Gruß
Andyh