Hallo
Und wer jetzt denkt:
jaja der schon wieder, der hat recht! Der schon wieder.
Ich habe in letzter Zeit daran gearbeitet eine einfache Möglichkeit zu erstellen wie ich meine Programme online zu Präsentieren.
Mit der Zeit dachte ich warum nur für mich?
Daraus und aus 0.99€ pro Monat (für die Domain) habe ich http://www.code-host.de gemacht. Die Idee ist die das man nicht mal den Internet-Explorer (kann man das eigentlich so schreiben ohne das jeder an den IE denkt?) starten muss um seine Programme online zu bringen, deswegen wird code-host über ein Programm bedient.
Was mir auch klar ist das jemand der sich auf github oder bitbucket wohl füllt von code-host.de nicht viel halten wird.
Auf der Internetseite von code-host steht "Beta", wolte ich mal betonen
Es gibt nämlich noch ältliches zu machen.
Achso:
Und wenns einfach nicht wird dann:
-habe ich eine Plattform für meine Programme(Was ich eigentlich wollte)
-etliches gelernt(auch nicht schlecht)
(meine gute Laune bekommt ihr also nicht weg)
Gruß
Andyh
(Warte aufs zerfleischen)
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys
if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
Andyh hat geschrieben:Die Idee ist die das man nicht mal den Internet-Explorer (kann man das eigentlich so schreiben ohne das jeder an den IE denkt?) starten muss um seine Programme online zu bringen, deswegen wird code-host über ein Programm bedient.
Nein, kann man nicht schreiben, da "Internet Explorer" ein Produktname ist. Du suchst den Begriff "Browser". (oder für Computerbildleser: Internetseiten-Anschau-Programm ^^).
Ich habe mal durch zwei Dateien gescrollt: grausam ist an einigen Stellen die richtige Beschreibung. Überall doppelter Code und unnötig kompliziert Dinge. Mal abgesehen davon, dass Kennwörter speichern an sich schon eine suboptimale Angelegenheit ist: sehe ich es richtig, dass du sie im Klartext ablegst?
Wie Leonidas ist es mir aber auch zu viel Code, um ihn genauer anzuschauen.
Das Design ist nicht mein Fall. Die Farbgebung ist nicht sehr augenfreundlich, die Ausrichtung und die Abstände des Texts und der Icons vom umgebenden Rahmen und zueinander passen oft nicht. Außerdem kann man es mit Javascript auch übertreiben, insbesondere wenn wichtige Dinge gar nicht ohne Javascript funktionieren ohne das die Seite immer darauf aufmerksam macht.
Anstatt einer eigenen Installationsroutine solltest du distutils/setuptools nutzen. Wenn du schon eine eigene Installationsroutine schreiben willst, solltest du wenigstens die Wahl des Installationsverzeichnisses ermöglichen. Und warum zum Teufel hast du "copytree()" aus dem Quelltext von "shutil" in diese Datei kopiert?
Das "code-host"-Skript ist völlig überflüssig, eine symbolische Verknüpfung hätte es auch getan. Die Einschränkung auf ein Argument ist künstlich, da unnötig, außerdem kann man auch eleganter und kürzer auf die Existenz eines Arguments prüfen, ohne umständlich try … catch … finally zu bemühen.
In "main.py" zeigen sich Fehler, die du in allen Dateien machst: Klassen sind keine new-style-Klassen, außerdem verwendest du ein Sprachengemisch für Namen und Kommentare. Entscheide dich für eine Sprache (vorzugsweise Englisch)! Außerdem solltest du nicht "sys.exit()" nutzen, wenn ein Import fehlschlägt. Python bricht bei einer unbehandelten Ausnahme eh ab, also kannst du dem Nutzer auch erlauben, den Traceback zu sehen, damit er wenigstens weiß, warum das Programm nicht funktioniert. Apropos Ausnahmen: Ein "except" ohne konkreten Ausnahmetyp ist kein guter Stil.
In "browser.py" fällt auf, dass du GUI-Widgets in Threads erstellst. Ich habe mich nicht durch die Struktur deines Codes gewühlt, um zu beurteilen, ob das in diesem Fall ok ist. Im Allgemeinen jedenfalls verträgt kein GUI-Toolkit Zugriff auf Widgets außerhalb des erstellenden Threads.
"config.py" ist überflüssig, Python hat ein Modul für Konfigurationsdateien in der Standardbibliothek. Außerdem sollte eine Bibliotheksklasse nicht auf die Standardausgabe schreiben, sondern allenfalls logging verwenden.
"connection.py" ist ebenfalls nicht wirklich nötig. Wenn du schon die Internetverbindung künstlich überprüfen willst, dann doch nicht mit google, sondern mit deiner eigenen Seite. Im Allgemeinen sollte man sich derartige Scherze aber auch sparen. Hat der Nutzer einen Dialup-Tarif oder einen beschränkten Zeit- oder Volumentarif, verursachen solche Tests unnötige Kosten, andernfalls sind sie einfach überflüssig. Zudem fängst du Verbindungsfehler eh beim eigentlichen Aufbau der Verbindung ab, wozu also der Test? Im Übrigen ist es nicht sinnvoll, magische Zeichenkettenkonstanten zurückzugeben, um besondere Zustände wie den "Offline-Modus" (was immer das sein soll) anzuzeigen. Dafür gibt es Ausnahmen.
Das ist nur, was mir beim kurzen Durchsehen aufgefallen ist. Die Codequalität aber reicht, um mich davon abzuhalten, deine Seite zu verwenden. Alles viel zu kompliziert, oftmals dupliziert, und viel zu oft unnötigerweise selbst erfunden.
Ach ja, deine Rechtschreibung ist nicht gerade Duden-konform ...
Grundsätzlich erst mal Respekt, daß Du versuchst eine Idee in die Praxis umzusetzen und zu veröffentlichen. Ich habe trotzdem Schwierigkeiten Dein Projekt zu verstehen. Sollte irgendwie klarer dargestellt werden.
Und ganz übel ist mir Deine Rechtschreibung aufgestoßen. Pisa läßt grüßen. So kann man sich nicht präsentieren.
Da die Kritik recht harsch ausgefallen ist, möchte ich trotz allem einwerfen dass die Betreffenden (mich eingeschlossen) das nur gut gemeint haben; ich hoffe dass du, Andyh das auch positiv auffasst und aus solchen Reviews und besser wirst (ich persönlich lerne hauptsächlich durch Reviews, weil sie einem sagen welches Sprachfeature man wo sinnvoll verwenden kann).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ich denke es ist besser erstmal eine reine Browser Lösung zu basteln, bevor man anfängt ein eigenes Client Programm zu coden. So können alle interessierten direkt mal rein schnüffeln.
Ich persönlich habe ehr weniger Lust ein Client Programm zum test zu "installieren".
Hey also meine Laune könnt ihr niemals verderben, ich freue mich schon seit einem Monat auf die Präsentation hier und habe eigentlich mit noch viel schlimmeren gerechnet.
Nur eins möchte ich richtig stellen:
von lunar:
Und warum zum Teufel hast du "copytree()" aus dem Quelltext von "shutil" in diese Datei kopiert?
Weil copytree nicht so funktioniert wie ich das brauche. Man kann damit nicht in vorhandene Verzeichnisse kopieren weil es immer auch die Ordner erstellt und das nicht geht wenn sie schon da sind. Ich habe das so umgebaut das es funktioniert , also nicht zum Teufel.
Sonst möchte ich lunar sehr danke, weil du mir ja sehr viele Fehler aufgezeigt hast.
Gruß
Andyh
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys
if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
Andyh hat geschrieben:Weil copytree nicht so funktioniert wie ich das brauche. Man kann damit nicht in vorhandene Verzeichnisse kopieren weil es immer auch die Ordner erstellt und das nicht geht wenn sie schon da sind.
Es wäre trotzdem nicht nötig gewesen, die komplette Funktion zu kopieren. Es reicht ja auch, mittels "os.listdir()", "shutil.copy2()" und "shutil.copytree()" die Inhalte des obersten Verzeichnisses zu kopieren (ungetestet):
# copy directory contents (unlike shutil.copytree, which copies the directory itself)
for name in os.listdir(directory):
src = os.path.join(directory, name)
dest = os.path.join(target, name)
if os.path.isdir(src):
shutil.copytree(src, dest)
else:
shutil.copy2(src, dest)
Das ist kürzer und verständlicher als eine komplette Kopie der Funktion. Wenn du die Kopie behalten möchtest, dann solltest du zumindest in einem Kommentar erklären, warum du sie komplett kopiert hast und vielleicht auch den Namen dahingehend anpassen (z.B. als "copy_tree_contents()").
Btw, sind die Quellen der Website auch irgendwo zu finden?