Trash Manager ist soweit fertig



  • 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?


  • Mod

    nman schrieb:

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

    Ich würde eher sagen, dass es eine Ergänzung ist. "Effective Modern C++" ist quasi "Effective C++11" mit einem zeitloseren Titel, aber "Effective C++" wird dadurch weder überflüssig, noch werden in "Effective Modern C++" die Lehren aus "Effective C++" wiederholt.

    Die Bücher klingen tatsächlich nach etwas, das Bennisen sehr gut täte. Er kann offensichtlich programmieren, er hat bloß nie gezeigt bekommen, wie man effektiv 😉 programmiert.

    (Wobei das mit dem "new weil ich einen Pointer brauche" aber schon ein krasser Hauer ist. Keine Ahnung, wo er das her haben kann und wie man diese Denkweise wieder los wird. Möglicherweise sind die Meyers-Bücher da doch zu anspruchsvoll. Referenzen, Zeiger & Co. sind Grundlagen)



  • Ich hab halt keine Bücher gelesen. Außer ein paar Bücher mit Grundlagen. Bei mir gings halt immer einfach drauf los. Muss auch ehrlich sagen das ich von Design null Ahnung habe.



  • Bennisen schrieb:

    Ich hab halt keine Bücher gelesen. Außer ein paar Bücher mit Grundlagen. Bei mir gings halt immer einfach drauf los. Muss auch ehrlich sagen das ich von Design null Ahnung habe.

    Die meisten Menschen lernen am besten durchs "Machen". Dabei hat man nämlich Erfolgserlebnisse, was einen weiter anspornt.

    Bücher sind nur nützliches Beiwerk. Programmierer-Bücher für Fortgeschrittene beschäftigen sich auf tausenden von Seiten mit Bugs und Fallstricken. Aber ohne Praxis vergisst man alles schneller, als man es lesen konnte. 🙂



  • SeppJ schrieb:

    Wobei das mit dem "new weil ich einen Pointer brauche" aber schon ein krasser Hauer ist. Keine Ahnung, wo er das her haben kann und wie man diese Denkweise wieder los wird. Möglicherweise sind die Meyers-Bücher da doch zu anspruchsvoll. Referenzen, Zeiger & Co. sind Grundlagen

    Glaube ich gar nicht. Vieles davon lernt er vmtl. wirklich gut, wenn er drauflos programmiert und Grundlagen-Fehler macht. Wenn man deswegen dann Schwierigkeiten hat und die dann behebt, merkt man sich das alles für immer und ewig.

    Bennisen: Ich verstehe die Herangehensweise gut und finde es auch sinnvoll, dass du dich auch an echten Tools versuchst und die auf GitHub stellst. Trotzdem: Lies jetzt Effective C++ und falls du irgendwas da drin nicht verstehst, frag nach oder lies irgendwoanders weiter nach. Effective C++ ist in meinen Augen eines der wichtigsten C++-Bücher, das ausnahmslos _jeder_ C++-Entwickler gelesen haben sollte und wird dir zum jetzigen Zeitpunkt vmtl. zu einem riesigen Sprung nach vorne verhelfen.

    Effective C++ | ISBN: 0321334876

    Ich mag den Meyers sehr gerne, weil er unheimlich angenehm lesbar ist und nützliche, praxis-orientierte Tips in mundgerechten Häppchen präsentiert. Sehr sehr empfehlenswertes Buch, das besonders Praktikern sehr viel weiterhilft.



  • Werde mir das mal anschauen Danke



  • egalo schrieb:

    Mechanics schrieb:

    prepared statements statt + "'".

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

    Jaein, es ist heut zu Tage einfach guter Stil es mit prepared statements zu machen, da diese wirklich sehr starke sicherheit garantieren, und auch bei einer eventuellen falschen validierung (escaping) eines user strings sicherheit bieten.

    Ubuntu bietet mit seinem Standart backuptool übrigens die Wiederherstellung von Datein, die längst gelöscht sind, in beliebiger Version 😉


Anmelden zum Antworten