ZPAQ's Face - eine Benutzeroberfläche zur effizienten Datenkompression v1.0.c

Vorstellungen von Programmen, welche mit Lazarus erstellt wurden.
Antworten
Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: ZPAQ's Face - eine Benutzeroberfläche zur effizienten Datenkompression v0.9.2

Beitrag von Winni »

Winni hat geschrieben: Mo 20. Jul 2020, 18:31 Hallo!

Hardrock-Test;

Hardware: AMD Ryzen 5 2400g mit 4/8 CPUs

OS: Suse Tumbleweed, Kernel 5.7.7-1

Testobject: Film, 1.98 GB, mpg Format das allgemein als nicht mehr komprimierbar gilt.

Start: 17:30:00 Fertig: 18:08:xx

Kompressionslevel 5: 1.98 GB --> 1.79 GB

Dafür dass man mpg (und jpg, mp3, mp4) für nicht mehr komprimierbar hält trotzdem ein guter Erfolg.

Hardware-Verhalten: Von 8 CPUs 7 permanent auf 100%, ,eine auf 96-99%. Gegen Ende zusehends zunehmende Anzahl von CPUs nur noch unter Teilllast .
Top zeigt an: Used Memory: 10.2 GB

Unbedingt notwendig für den User:
a) Screen. Cursor := crHourglass - damit man sieht, dass er noch arbeitet.
b) Ein progressbar wäre gut.
c) "Estimated time" wäre gut.
d) Im Memo: "komprimiere ...." melden

Weiter so!

Winni

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: ZPAQ's Face - eine Benutzeroberfläche zur effizienten Datenkompression v0.9.2

Beitrag von Euklid »

Winni hat geschrieben: Mo 20. Jul 2020, 18:31

Kompressionslevel 5: 1.98 GB --> 1.79 GB
10% für ein eigentlich inkompressibles Format sind super! :D
Unbedingt notwendig für den User:
a) Screen. Cursor := crHourglass - damit man sieht, dass er noch arbeitet.
Gute Idee, wird umgesetzt!
b) Ein progressbar wäre gut.
c) "Estimated time" wäre gut.
Ja, ZPAQ gibt in die Konsole genau diese beiden Informationen noch aus. Ich muss sie also im Prinzip nur abgreifen. Hierfür brauche ich noch Eure Hilfe - denn OutPutStream scheint zumindest den Datenstrom von ZPAQ erst an ZPAQ's Face zu übergeben, wenn ZPAQ zu Ende komprimiert hat. Zur Realisierung dieser beiden Punkte müsste ich den Output zur Laufzeit auslesen können.
d) Im Memo: "komprimiere ...." melden
Jawoll, wird umgesetzt!
Weiter so!
Danke für Deine Vorschläge und die Ermutigung! Ich habe Deine Vorschläge gerade zur ToDo hinzugefügt. Daraus kannst Du auch lesen, für welche Version ich die Umsetzung plane:
viewtopic.php?p=115716#p115716

Wenn Du Dich an der Entwicklung beteiligen möchtest, kannst Du gerne auch Patches hier rein setzen. Insbesondere die Sache mit der Prograssbar wird für mich einige Zeit kosten, drum nehme ich mir das auch erst für die Version 1.1 vor.

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: ZPAQ's Face - eine Benutzeroberfläche zur effizienten Datenkompression v0.9.2

Beitrag von Euklid »

pluto hat geschrieben: Mo 20. Jul 2020, 21:55 Ich habe es auch mal getestet. Kompilieren geht ohne Probleme. Bin aber etwas verwundert:
Ich habe ein Ordner komprimiert. Dieser hat eine Größe von ca
"938,7 kB"

Als ZIP 867,2 KB
Als .tar.7z 773,6 KB
Als zpaq 747,9 kb

Im Ordner selbst sind überwiegend kleine Text Dateien, kann es sein das zpaq damit Probleme hat? Habe Level 5(m5) Ausgewählt.
Ich vermute, die Texte sind in einem Office-Programm geschrieben und abgespeichert? OpenOffice, LibreOffice u.s.w. komprimieren bereits den Inhalt der Dokumente. Komprimierte Datein sind nur sehr schwer weiter zu komprimieren.

Die Weiterentwicklung PAQ8PX aus meinem Artikel entpackt die Office-Dateien und komprimiert dann den unkomprimierten Inhalt. Dadurch kann PAQ8PX die Office-Dateigrößen noch einmal mehr als halbieren.

Ich plane die Integration von PAQ8PX in Version 1.1 von ZPAQ's Face ;)
Was die Oberfläche angeht, ein paar Anregungen(Zum Überlegen):
- Mit Panels die sich Automatisch an der Fenster Größe ausrichten.
Guter Vorschlag, entweder das oder eine feste Fenstergröße. Da muss ich mir nochmal Gedanken machen.
- Mit Trenner zwischen den Panels, damit die Größe der Panels Manuel beeinflusst werden kann.
Oh - ich glaube das hat für mich jetzt erstmal untergeordnete Wichtigkeit.
- Mit ein paar Icons(z.b. die Standard Icons von Linux unter /usr/share/icons
Perfekt! Diesen Ordner habe ich gesucht. Weißt Du auch zufällig, in welchem Ordner man in Windows die ICons findet? Dann könnte ich das für beide Systeme umsetzen.
- Tastenkombinationen
- Einer Horizontalen Toolbar
Okay, danke für den Vorschlag! Die beiden Punkte hätten für mich ebenfalls keine ganz so große Wichtigkeit und ich stelle sie mal hinten an.
zum Einfachen testen, reicht die Oberfläche völlig aus(bitte nicht falsch verstehen).
Ja genau, danke für Deine Rückmeldungen und Anregungen, Pluto, finde ich super! :)
Für mich steht erstmal die Funktion im Zentrum, das Design stelle ich etwas hinten an, da ja z.B. mit PAQ8PX weitere Einstellungsmöglichkeiten etc. hinzuhommen. Über das endgültige Design mache ich mir also ganz zum Schluss Gedanken.

Auch Deine Ideen habe ich hinzugefügt, Pluto:
viewtopic.php?f=11&t=13055&p=115716#p115716

Liebe Grüße und Euch noch einen schönen Abend!
- Euklid

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: ZPAQ's Face - eine Benutzeroberfläche zur effizienten Datenkompression v0.9.2

Beitrag von pluto »

Euklid hat geschrieben:Ich vermute, die Texte sind in einem Office-Programm geschrieben und abgespeichert? OpenOffice, LibreOffice u.s.w. komprimieren bereits den Inhalt der Dokumente. Komprimierte Datein sind nur sehr schwer weiter zu komprimieren.
Nein, es sind *.txt
Euklid hat geschrieben:Perfekt! Diesen Ordner habe ich gesucht. Weißt Du auch zufällig, in welchem Ordner man in Windows die ICons findet? Dann könnte ich das für beide Systeme umsetzen.
ich kopiere mir die Icons immer in das Projekt Verzeichnis.
Es gibt auch noch ein anderen Weg, aber dort sind nicht alle Icon's drin....
(Bin mir gerade nicht sicher, wie der Weg genau noch "hieß"....)
Euklid hat geschrieben:Auch Deine Ideen habe ich hinzugefügt, Pluto:
Euklid hat geschrieben:-> Icons für die Dateien in die TShellListView einbauen (Pluto)
Ich dachte da eher an die Buttons, diese mit ICONS zu versehen. Für Dateien und Ordner ist es auch nicht verkehrt....
MFG
Michael Springwald

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: ZPAQ's Face - eine Benutzeroberfläche zur effizienten Datenkompression v0.9.2

Beitrag von Winni »

Hi!

Lass die Finger weg von Windows-Icons!
Das ist Copyright drauf.

Such Deinen Linux-Rechner nach Verzeichnissen mit dem Namen Icon* ab :

find / -mount -iname 'icon*'

Winni

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: ZPAQ's Face - eine Benutzeroberfläche zur effizienten Datenkompression v0.9.2

Beitrag von Euklid »

Winni hat geschrieben: Di 21. Jul 2020, 00:09 Hi!

Lass die Finger weg von Windows-Icons!
Das ist Copyright drauf.
Okay, danke für den Hinweis. M$...

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: ZPAQ's Face - eine Benutzeroberfläche zur effizienten Datenkompression v0.9.2

Beitrag von Winni »

Hi!

Quick and Dirty:

Ich hab mal kurz zusammengehackt, wie man das Echo des Binaries während der Kompression ausliest .

Für den InFile musst Du ne entsprechend große Datei in Deinen Schätzen suchen und Dateinamen und Pfad anpassen. Nur mal um zu zeigen, wie das prinzipiell geht. Kann man eleganter machen.

Buena note

Winni
Dateianhänge
zpack_echo.zip
(126.02 KiB) 90-mal heruntergeladen

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: ZPAQ's Face - eine Benutzeroberfläche zur effizienten Datenkompression v0.9.2

Beitrag von pluto »

@Euklid
schau dir mal das https://wiki.freepascal.org/TMPlayerControl

So ähnlich würde ich es auch machen, die Grund Funktion in einer Klasse Kapseln, so dass es leichter wird, es für andere Projekte wieder Zuverwenden.
Gibt es eigentlich eine Pascal Header?
MFG
Michael Springwald

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: ZPAQ's Face - eine Benutzeroberfläche zur effizienten Datenkompression v0.9.2

Beitrag von Euklid »

Winni hat geschrieben: Di 21. Jul 2020, 01:32
Für den InFile musst Du ne entsprechend große Datei in Deinen Schätzen suchen und Dateinamen und Pfad anpassen. Nur mal um zu zeigen, wie das prinzipiell geht. Kann man eleganter machen.
Danke Dir Winni, so ähnlich wird das bereits in ZPAQ's Face gelöst. In folgender Prozedur:

Code: Alles auswählen

procedure THauptfenster.ZPAQAusgabeEinlesen;
var
  OutputStream : TStream;                                                         //In diesen Stream wird die Ausgabe von ZPAQ gespeichert.
  BytesRead, VerfuegbareBytes: longint;                                           //Variablen, die speichern, wie groß der Output ist.
  Buffer       : array of byte;                                                   //Hier wird die Ausgabe von ZPAQ zwischengespeichert.
begin
  OutputStream := TMemoryStream.Create;
  repeat
    VerfuegbareBytes:=ZPAQ.Output.NumBytesAvailable;                            //Speichert, wie viele verfügbare Bytes ZPAQ ausgibt.
    setlength(Buffer, VerfuegbareBytes);                                          //Die Puffergröße wird entsprechend gesetzt
    BytesRead := ZPAQ.Output.Read(Buffer[0], VerfuegbareBytes);                   //Die ZPAQ-Ausgabe wird in den Buffer übertragen...
    OutputStream.Write(Buffer[0], BytesRead);                                     //...und vom Buffer in den OutPutStream übertragen.
  until BytesRead = 0;
  OutputStream.Position:=0;                                                       //Der OutputStream soll anschließend beginnend von Position 0 übergeben werden.
  AusgabeMemo.Lines.LoadFromStream(OutputStream);                                 //Übergabe des Outputs in das AusgabeMemo.
  AusgabeMemo.SelStart := Length(AusgabeMemo.Text);                               //Das Ausgabememo wird so eingestellt, dass die letzte Zeile gesehen werden kann.
  AusgabeMemo.Refresh;                                                            //Neuen Inhalt anzeigen.
  OutputStream.free;                                                              //Freigabe des OutputStream.
end;    
Diese Prozedur wird mit einem Timer 5 mal die Sekunde aufgerufen, damit das Memo während der Laufzeit von ZPAQ aktuell bleibt. Durch "NumBytesAvailable" kann ich verhindern, dass das "ZPAQ's Face" während der Ausführung von ZPAQ einfriert.

Ich glaube aber, ich habe meinen Fehler gefunden:

Das AusgabeMemo wird nämlich offenbar mit jedem Aufruf neu überschrieben. Wenn ZPAQ zum Abrufzeitpunkt kein Output produziert hat, wird das Memo also mit leerem Inhalt überschrieben und der vorherige Inhalt wird gelöscht.

Ich werde das Problem spätestens am Wochenende lösen und dann eine neue Beta hochladen. Falls es klappt, ist Dein Wünsch einer Progressbar sehr einfach zu realisieren und dann schon im Release V1.0 enthalten.

Liebe Grüße, Euklid

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: ZPAQ's Face - eine Benutzeroberfläche zur effizienten Datenkompression v0.9.2

Beitrag von Euklid »

pluto hat geschrieben: Di 21. Jul 2020, 11:30 @Euklid
schau dir mal das https://wiki.freepascal.org/TMPlayerControl

So ähnlich würde ich es auch machen, die Grund Funktion in einer Klasse Kapseln, so dass es leichter wird, es für andere Projekte wieder Zuverwenden.
Gibt es eigentlich eine Pascal Header?
Hallo Pluto,

danke für den Tipp. Aktuell plane ich noch nicht, das Projekt so groß werden zu lassen, dass sich die Kapselung lohnt.
ZPAQ's Face soll einfach nur ein kleines Tool sein, mit dem man zpaq-Archive leicht über eine grafische Benutzeroberfläche nutzen kann.

Zu Deiner Frage: Schaue doch einfach mal in den Quelltext - der ist ja bisher nur 300 Zeilen lang und sehr gut dokumentiert, dadurch sehr gut nachvollziehbar.

Liebe Grüße, Euklid

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: ZPAQ's Face - eine Benutzeroberfläche zur effizienten Datenkompression v0.9.3

Beitrag von Euklid »

Die neue BETA v0.9.3 ist draußen :shock: :D :D
Hallo zusammen, es gibt gute Nachrichten:

--> Die neuen Dateien der Version 0.9.3 sind dem ersten Beitrag dieses Threads angehängt.
--> Das Programm müsste jetzt auch unter Windows kompilierbar sein...
...Wäre echt super, wenn das jemand probieren könnte! Danke Euch ;)

Eure Wünsche, Tipps und Bugreports sind zum Teil schon eingeflossen. An Euch nochmal ein Dank für Eure tollen Rückmeldungen! :)

Die Änderungen zur Version 0.9.3:
//ab v0.9.3:-> Bernds Tipp aus dem Forum zu TShellListView aufnehmen und Gedanken machen, die PFade weg zu lassen.
//ab v0.9.3:-> $IFDEF Unix um BaseUnix-Unit, sonst lässt sich das Programm nicht unter Windows kompilieren
//ab v0.9.3: -> Nach Vorschlag von Bernd im Forum: Buttons tauschen
//ab v0.9.3: -> Entsprechend dem Vorschlag von winni "DirectorySeparator" für das Verzeichnistrennzeichen verwenden
//ab v0.9.3:-> (gelöst durch feste Fenstergröße) Mit Panels die sich Automatisch an der Fenster Größe ausrichten. (Pluto)
// ab v0.9.3: Behoben! -> Bug: Bei Archiven mit sehr vielen Dateien werden nicht alle Dateien in der ShellListView angezeigt.
//ab v0.9.3: -> AusgabeMemo soll während der Laufzeit von zpaq aktualisiert werden.
//ab v0.9.3: Behoben!-> Bug: Bei sehr langsamen Datenträgern kommt es beim Öffnen großer Archive zum Zugriffsfehler, da ZPAQ langsamer ist als das Einlesen des Outputs. Dadurch werden in der Prozedur ArchivinhaltAusAusgabeParsen in den Ausgabezeilen auf Zeichen zugegriffen, die "hinter" dem Ende der Zeile liegen.

Wir nähern uns also in großen Schritten der Version 1.0, dem offiziellen Release :!:

Ihr könnt mir gerne schreiben, wenn Ihr Bugs findet oder Ideen habt.

Euch noch einen schönen Abend!

Liebe Grüße, Euklid

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: ZPAQ's Face - eine Benutzeroberfläche zur effizienten Datenkompression v0.9.3

Beitrag von Winni »

Moin!

Land of Confusion:

Es steht 0.93 drauf, es ist aber 0.92!

Winni

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: ZPAQ's Face - eine Benutzeroberfläche zur effizienten Datenkompression v0.9.3

Beitrag von Euklid »

Winni hat geschrieben: Di 21. Jul 2020, 22:16 Land of Confusion:

Es steht 0.93 drauf, es ist aber 0.92!
Hi Winni,

das verwirrt mich jetzt auch haha :D
Ich habe beide Dateien nochmal runter geladen und meine die v0.9.3 hochgeladen zu haben :?:

Die 0.9.3 sieht so aus:
ZPAQ's Face v0.9.3.png
ZPAQ's Face v0.9.3.png (41.36 KiB) 2729 mal betrachtet
Habe unten die Anleitung zur Bedienung eingebaut.

Und @winni, was Dir besonders gefallen wird: Man erkennt jetzt beim Komprimieren umfangreicher Ordner den Fortschritt und die von ZPAQ prognostizierte Zeit im Memo unten :)

Du kannst mir ja mal schreiben, ob sich die Verwirrung gelöst hat.

Liebe Grüße, Euklid :D

EDIT: Mein Projekt ist ja sehr klein, ich aktualisiere die Form1.Caption erst beim Release. Vielleicht kommt daher die Verwirrung...

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: ZPAQ's Face - eine Benutzeroberfläche zur effizienten Datenkompression v0.9.3

Beitrag von Winni »

Hi!

Kurztest 0.93 (der Richtige), Linux:

Wenn man eine fette Datei komprimiert, steht der Rechner nahezu unter Vollast.
Es wird kein Status im Memo angezeigt.
Wenn bei ca 60% erledigt sind, wird dir Last geringer:
Alles von 0% bis 60% wird auf einmal angezeigt.
Abhilfe: In die Timer-Function am Ende

Code: Alles auswählen

application.ProcessMessages;
einfügen.

Hast Du zwar als Änderung aufgeführt, aber nirgends zu sehen:
In die
StartButtonClick
muss

Code: Alles auswählen

Screen.Cursor := crHourglass;
Nice to have:
Da man typischerweise (erstmal) die komprimierte Datei im Quellordner speichern will, könnte das schon mal automatisch erledigt werden. InitialDir im SaveDialog setzen. Spart viel Geklicke.

Winni

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: ZPAQ's Face - eine Benutzeroberfläche zur effizienten Datenkompression v0.9.3

Beitrag von Euklid »

Winni hat geschrieben: Mi 22. Jul 2020, 00:05 Hi!

Kurztest 0.93 (der Richtige), Linux:

Wenn man eine fette Datei komprimiert, steht der Rechner nahezu unter Vollast.
Es wird kein Status im Memo angezeigt.
Wenn bei ca 60% erledigt sind, wird dir Last geringer:
Alles von 0% bis 60% wird auf einmal angezeigt.
Abhilfe: In die Timer-Function am Ende

Code: Alles auswählen

application.ProcessMessages;
einfügen.
Danke für Deinen Test und Deine Rückmeldung! :)
Alles klar, werde ich einfügen. Diesen Punkt hast Du oben schonmal irgendwo genannt, er ist leider unter gegangen.

Meine Vermutung bezüglich des von Dir geschilderten Verhaltens ist allerdings, dass das eine zpaq-spezifische Eigenschaft sein könnte, auf die ich keinen Einfluss habe. zpaq komprimiert in Blockgrößen von ca 64 MiB. Es ließt recht ruckhaft die Daten ein, um anschließend das Context Mixing-Verfahren auf die Blöcke anzuwenden, was dann wiederum sehr viel Zeit und Rechenpower benötigt.

Dieses Verhalten kannst Du auch in der Konsole beobachten, mit folgenden Befehl komprimierst Du einen Ordner zu einem Archiv:

Code: Alles auswählen

zpaq a Archiv.zpaq Ordner -m5
Hast Du zwar als Änderung aufgeführt, aber nirgends zu sehen:
In die
StartButtonClick
muss

Code: Alles auswählen

Screen.Cursor := crHourglass;
Dieser Punkt ist noch offen in meiner ToDo. Du kannst sie unter folgendem Link einsehen. Hier steht auch, was bereits für die 0.9.3 realisiert wurde und was noch nicht:
viewtopic.php?f=11&t=13055&p=115716#p115716

Nice to have:
Da man typischerweise (erstmal) die komprimierte Datei im Quellordner speichern will, könnte das schon mal automatisch erledigt werden. InitialDir im SaveDialog setzen. Spart viel Geklicke.
Ja, das ist ein wirklich guter Punkt, der auch schon in der ToDo steht.

Bis zum Release V1.0 wird wohl noch ein Weilchen vergehen. Ich werde Euch weiter die nächsten Betas hier reinstellen, in denen die ToDos nach und nach eingearbeitet sind.

Danke für Deine Rückmeldungen und eine gute Nacht! :)

- Euklid

Antworten