Trash Manager ist soweit fertig



  • Du bist wohl ein Bisschen empfindlich?



  • Ach komm, auf dummen Spruch kommt dummer Spruch. Find ich in dem Fall voll in Ordnung 🙂



  • hustbaer schrieb:

    Du bist wohl ein Bisschen empfindlich?

    keines Wegs. Ich rechne immer mit solchen Kommentaren. Ich werde erst überempfindlich wenn es massiv viele solcher Kommentare sind 😉



  • Das war in dem Fall gar nicht böse gemeint. Das Programm interessiert mich nicht, aber ich hab kurz in den Code geschaut und hab mir gedacht, wenn das für dich eine Übung ist, geb ich dir halt mal den Tipp mit den Prepared Statements. Hab keine gesehen, mir ist nur eine Stelle ins Auge gesprungen, wo keine benutzt werden.



  • Mechanics schrieb:

    Das war in dem Fall gar nicht böse gemeint. Das Programm interessiert mich nicht, aber ich hab kurz in den Code geschaut und hab mir gedacht, wenn das für dich eine Übung ist, geb ich dir halt mal den Tipp mit den Prepared Statements. Hab keine gesehen, mir ist nur eine Stelle ins Auge gesprungen, wo keine benutzt werden.

    Dann ist es wohl falsch angekommen. Aber danke für den Hinweis, hatte es ja sofort geändert.



  • Mechanics schrieb:

    prepared statements statt + "'".

    Die braucht man doch nur, wenn der input ein unbekannter String ist (nicht validierter user input zB.) ?!



  • Bennisen schrieb:

    So kann man anstatt den Befehl rm zB trm zum löschen benutzen und die Datei könnte bei Bedarf wiederhergestellt werden.

    Es wäre klüger gewesen, den rm-Befehl zu ersetzen.



  • Andromeda schrieb:

    Bennisen schrieb:

    So kann man anstatt den Befehl rm zB trm zum löschen benutzen und die Datei könnte bei Bedarf wiederhergestellt werden.

    Es wäre klüger gewesen, den rm-Befehl zu ersetzen.

    Ich möchte eigentlich niemanden dazu zwingen einen Papierkorb zu nutzen. Mit dem Trash Manager soll man nur eine Alternative haben eine Datei anders zu behandeln. Zum Beispiel wenn ich eine Datei löschen will, mir aber in den Sinn kommt, vielleicht brauche ich die noch. Dann könnte man Trash Manager einsetzen. Ich glaube das würde auch niemanden machen, also rm ersetzen.



  • Bennisen schrieb:

    Ich möchte eigentlich niemanden dazu zwingen einen Papierkorb zu nutzen. Mit dem Trash Manager soll man nur eine Alternative haben eine Datei anders zu behandeln. Zum Beispiel wenn ich eine Datei löschen will, mir aber in den Sinn kommt, vielleicht brauche ich die noch. Dann könnte man Trash Manager einsetzen. Ich glaube das würde auch niemanden machen, also rm ersetzen.

    Hast Recht. Letztlich wird keiner trm einsetzen und sich hinterher ärgern, weil er es nicht getan hat. 😃

    Eigentlich müssten moderne Betriebssysteme inzwischen eine integrierte Versionsverwaltung haben, die jeden beliebigen Stand einer Datei wieder restaurieren kann. Haben sie leider nicht. Kommt aber bestimmt.



  • Andromeda schrieb:

    Bennisen schrieb:

    Ich möchte eigentlich niemanden dazu zwingen einen Papierkorb zu nutzen. Mit dem Trash Manager soll man nur eine Alternative haben eine Datei anders zu behandeln. Zum Beispiel wenn ich eine Datei löschen will, mir aber in den Sinn kommt, vielleicht brauche ich die noch. Dann könnte man Trash Manager einsetzen. Ich glaube das würde auch niemanden machen, also rm ersetzen.

    Hast Recht. Letztlich wird keiner trm einsetzen und sich hinterher ärgern, weil er es nicht getan hat. 😃

    Eigentlich müssten moderne Betriebssysteme inzwischen eine integrierte Versionsverwaltung haben, die jeden beliebigen Stand einer Datei wieder restaurieren kann. Haben sie leider nicht. Kommt aber bestimmt.

    Ok da muss ich dir zustimmen. Hatte vor ein paar Wochen mal eine Situation wo ich was gelöscht habe und 1 Sekunde danach ging mir durch den Kopf "Oh Shit..."



  • Andromeda schrieb:

    Es wäre klüger gewesen, den rm-Befehl zu ersetzen.

    Wenn trm die gleichen Command-Line-Optionen wie rm unterstützen würde, könnte man einfach ein "alias rm=trm" in sein Profil packen.

    Andromeda schrieb:

    Eigentlich müssten moderne Betriebssysteme inzwischen eine integrierte Versionsverwaltung haben, die jeden beliebigen Stand einer Datei wieder restaurieren kann. Haben sie leider nicht. Kommt aber bestimmt.

    Hatte OpenVMS doch in den 80ern (70ern?) schon. Gibt auch einige moderne Implementierungen für sowas:
    https://en.wikipedia.org/wiki/Versioning_file_system



  • Nur ganz kurz in die Sourcen reingeschaut. Das hier ist eine sehr schlechte Idee:

    if (user == "root")
            strPath = "/root/.trashdb/";
        else
            strPath = "/home/" + (std::string)user + "/.trashdb/";
    

    Ich habe einige Maschinen, bei denen die User-Verzeichnisse nicht in /home/$USER liegen. Verwende besser man: getpwnam und das pw_dir -Feld.



  • Btw, ich habe vor Tausend Jahren mal hiermit herumgespielt, das löst ein ähnliches Problem auf recht kreative Art:
    http://pages.stern.nyu.edu/~marriaga/software/libtrash/



  • Vielen Dank. Hab das gleich mal geändert. Freut mich sehr, wenn welche in meinen Code reinstöbern und ein paar Tipps haben.



  • Fein, freut mich. 👍

    Ich habe ehrlich gesagt gerade keine Zeit, mir das Projekt genauer anzusehen, aber das hier sieht auch ein bisschen ungewöhnlich aus:

    System *sys = new System();
    

    Normalerweise würde man da einfach System sys; schreiben. (Gründe lassen sich ergoogeln. Sieht nach einem Javaismus aus.)



  • nman schrieb:

    Fein, freut mich. 👍

    Ich habe ehrlich gesagt gerade keine Zeit, mir das Projekt genauer anzusehen, aber das hier sieht auch ein bisschen ungewöhnlich aus:

    System *sys = new System();
    

    Normalerweise würde man da einfach System sys; schreiben. (Gründe lassen sich ergoogeln. Sieht nach einem Javaismus aus.)

    direkt nach dieser Zeile übergebe ich sys an die Klasse Params, da ich keine Kopie wollte habe ich einen Pointer verwendet.


  • Mod

    Bennisen schrieb:

    direkt nach dieser Zeile übergebe ich sys an die Klasse Params, da ich keine Kopie wollte habe ich einen Pointer verwendet.

    Das ist absolut kein Grund.



  • Jup. Google mal nach "c++ pass by reference" oä. Selbst als Pointer könntest du es übergeben wenn du es am Stack anlegst.

    Nach einem ersten Blick auf params uä. würde ich mir auch mal ein paar Containerklassen ansehen, die würden einigen Code kompakter und lesbarer machen.


  • Mod

    Ich sehe da überhaupt 1000 weitere Fehlerquellen und falsche Designentscheidungen. Allererste Datei, ziemlich weit oben:

    trm::Database::Database()
    {
    
    }
    
    trm::Database::~Database()
    {
        //Close Database
        sqlite3_close(db);
    }
    

    RAII nicht verstanden. Da habe ich doch gleich keine Lust mehr, weiter zu lesen. Habe ich aber trotzdem. Aber nicht lange, denn die Art und Weise, wie die Fehler behandelt werden, geht auch gar nicht. Da habe ich mir spontan ein Beispiel genommen und ein exit(0) auf den Leseprozess gemacht. Wen kümmert schon, wenn der Browsertab nun für immer offen bleibt? 😉

    Fazit: Nein, das ist nicht gut. Da fehlen grundlegende Kenntnisse über Design und Programmstruktur in C++.



  • SeppJ: Ich weiß nicht so recht, ich habe in freier Wildbahn schon wesentlich schlimmeres gesehen. Klar gibt es da viel zu reparieren, aber wenn er ein paar passende Grundlagen-Texte liest und nebenbei das Projekt Schritt für Schritt aufräumt, lernt er extrem viel.

    "Effective C++" und "More Effective C++" vielleicht? Bin nicht mehr am laufenden was aktuell gerade gut ist, aber Bennisens Projekt sieht für mich schon so aus, als wäre das eine gute Grundlage um mehr zu lernen.

    edit: Verstehe ich richtig dass "Effective C++" von "Effective Modern C++" abgelöst wurde?


Anmelden zum Antworten