ZPAQ's Face - eine Benutzeroberfläche zur effizienten Datenkompression v1.0.c
- 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.5
Hi!
Alter Unix/Linux Trick.:
Bevor man die man-page aufruft, lieber erstmal
befehl --help - also
./bin/zpaq --help
Das ergibt:
Usage: zpaq command archive[.zpaq] files... -options...
Files... may be directory trees. Default is the whole archive.
Use * or ???? in archive name for multi-part or "" for empty.
Commands:
a add Append files to archive if dates have changed.
x extract Extract most recent versions of files.
l list List or compare external files to archive by dates.
Options:
-all [N] Extract/list versions in N [4] digit directories.
-f -force Add: append files if contents have changed.
Extract: overwrite existing output files.
List: compare file contents instead of dates.
-index F Extract: create index F for archive.
Add: create suffix for archive indexed by F, update F.
-key X Create or access encrypted archive with password X.
-mN -method N Compress level N (0..5 = faster..better, default 1).
-noattributes Ignore/don't save file attributes or permissions.
-not files... Exclude. * and ? match any string or char.
=[+-#^?] List: exclude by comparison result.
-only files... Include only matches (default: *).
-repack F [X] Extract to new archive F with key X (default: none).
-sN -summary N List: show top N sorted by size. -1: show frag IDs.
Add/Extract: if N > 0 show brief progress.
-test Extract: verify but do not write files.
-tN -threads N Use N threads (default: 0 = 0 cores).
-to out... Rename files... to out... or all to out/all.
-until N Roll back archive to N'th update or -N from end.
-until 2020-07-24 16:49:58 Set date, roll back (UT, default time: 235959).
Ich hab eben nach ner Monotype Schrift gesucht, aber kann man hier anscheinend nicht einstellen.
Winni
Alter Unix/Linux Trick.:
Bevor man die man-page aufruft, lieber erstmal
befehl --help - also
./bin/zpaq --help
Das ergibt:
Usage: zpaq command archive[.zpaq] files... -options...
Files... may be directory trees. Default is the whole archive.
Use * or ???? in archive name for multi-part or "" for empty.
Commands:
a add Append files to archive if dates have changed.
x extract Extract most recent versions of files.
l list List or compare external files to archive by dates.
Options:
-all [N] Extract/list versions in N [4] digit directories.
-f -force Add: append files if contents have changed.
Extract: overwrite existing output files.
List: compare file contents instead of dates.
-index F Extract: create index F for archive.
Add: create suffix for archive indexed by F, update F.
-key X Create or access encrypted archive with password X.
-mN -method N Compress level N (0..5 = faster..better, default 1).
-noattributes Ignore/don't save file attributes or permissions.
-not files... Exclude. * and ? match any string or char.
=[+-#^?] List: exclude by comparison result.
-only files... Include only matches (default: *).
-repack F [X] Extract to new archive F with key X (default: none).
-sN -summary N List: show top N sorted by size. -1: show frag IDs.
Add/Extract: if N > 0 show brief progress.
-test Extract: verify but do not write files.
-tN -threads N Use N threads (default: 0 = 0 cores).
-to out... Rename files... to out... or all to out/all.
-until N Roll back archive to N'th update or -N from end.
-until 2020-07-24 16:49:58 Set date, roll back (UT, default time: 235959).
Ich hab eben nach ner Monotype Schrift gesucht, aber kann man hier anscheinend nicht einstellen.
Winni
-
- 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.5
Ja genau:
-s1 kürzt die Ausgabe des zpaq-Outputs, daher "brief progress".
Der Output ist allerdings auch ohne -s1 vorhanden, wird eben aus welchen Gründen auch immer nicht in der Memo angezeigt (bei Euch).
Ich werde dem nachgehen...
- Euklid
-s1 kürzt die Ausgabe des zpaq-Outputs, daher "brief progress".
Der Output ist allerdings auch ohne -s1 vorhanden, wird eben aus welchen Gründen auch immer nicht in der Memo angezeigt (bei Euch).
Ich werde dem nachgehen...
- 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.5
Hallo wennerer und winni,
so soll es eigentlich aussehen:
Der Fortschritt in %, die verbleibende Zeit und schließlich Pfad + Dateiname der Datei, die gerade komprimiert wird.
Ziel für Version 1.1 oder später wird es sein, diese Zeilen im Memo zu parsen und z.B. den Fortschritt als Balken anzuzeigen.
Das hier ist noch ein Foto von dem Beta 0.9.4
Liebe Grüße, Alexander
so soll es eigentlich aussehen:
Der Fortschritt in %, die verbleibende Zeit und schließlich Pfad + Dateiname der Datei, die gerade komprimiert wird.
Ziel für Version 1.1 oder später wird es sein, diese Zeilen im Memo zu parsen und z.B. den Fortschritt als Balken anzuzeigen.
Das hier ist noch ein Foto von dem Beta 0.9.4
Liebe Grüße, Alexander
- 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.5
Hallo Euklid!
Also wenn es auch nirgendwo explizit steht:
Ich vermute, dass das Binary so schlau ist, dass es merkt, ob es an einer Konsole betrieben wird, oder irgendwo im Hintergrund läuft, weil es von einer App aufgerufen wird. Im zweiten Fall gibt es dann keinen Output ohne expliziten Flag. Wäre nicht das erste Programm, dass es so macht .
Beweis dafür : Ich hab ein Label in Dein Programm eingefügt plus im Timer folgende Zeile:
In dem Label stand die ganze Zeit eine Null. D .h. das Binary zpaq ist schweigsam, während es im Hintergrund läuft.
Aber mit dem Flag -s1 gibt er ja Prozente und Restzeit aus. Das genügt ja für unsere Wünsche.
Ich schätze, das ist kein Bug in der LCL sondern das Verhalten von zpaq.
Winni
Also wenn es auch nirgendwo explizit steht:
Ich vermute, dass das Binary so schlau ist, dass es merkt, ob es an einer Konsole betrieben wird, oder irgendwo im Hintergrund läuft, weil es von einer App aufgerufen wird. Im zweiten Fall gibt es dann keinen Output ohne expliziten Flag. Wäre nicht das erste Programm, dass es so macht .
Beweis dafür : Ich hab ein Label in Dein Programm eingefügt plus im Timer folgende Zeile:
Code: Alles auswählen
Label3.Caption := IntToStr(ZPAQ.Output.NumBytesAvailable);
Aber mit dem Flag -s1 gibt er ja Prozente und Restzeit aus. Das genügt ja für unsere Wünsche.
Ich schätze, das ist kein Bug in der LCL sondern das Verhalten von zpaq.
Winni
-
- 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.5
Hallo Winni,
D.h. er wiederholt das Einlesen in den Stream so lange, bis NumBytesAvailable Null wird.
Das heißt aber auch, dass Dein Label immer Null anzeigen wird, wenn es hinter der Prozedur ZPAQAusgabeEinlesen im Timer steht.
Ich habe ähnliche Tests auch schonmal ausgeführt und kam zum Ergebnis, dass obige Schleife je nach Größe der Ausgabe mehrfach durchlaufen wird.
Wir tasten uns langsam an mögliche Ursachen für das Verhalten heran, das finde ich gut
Viele Grüße vom Euklid
Das leuchtet ein und wäre eine mögliche Erklärung. Danke für die Idee, ich werde dem nachgehen...Winni hat geschrieben: Fr 24. Jul 2020, 19:19 Ich vermute, dass das Binary so schlau ist, dass es merkt, ob es an einer Konsole betrieben wird, oder irgendwo im Hintergrund läuft, weil es von einer App aufgerufen wird. Im zweiten Fall gibt es dann keinen Output ohne expliziten Flag. Wäre nicht das erste Programm, dass es so macht .
Ganz oben im Timer wird ja die Prozedur ZPAQAusgabeEinlesen aufgerufen. Darin ist folgende Schleife enthalten:Beweis dafür : Ich hab ein Label in Dein Programm eingefügt plus im Timer folgende Zeile:
In dem Label stand die ganze Zeit eine Null. D .h. das Binary zpaq ist schweigsam, während es im Hintergrund läuft.Code: Alles auswählen
Label3.Caption := IntToStr(ZPAQ.Output.NumBytesAvailable);
Code: Alles auswählen
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)and((ZPAQ.Running=false) or (TeilweiseEinlesen=true));
Das heißt aber auch, dass Dein Label immer Null anzeigen wird, wenn es hinter der Prozedur ZPAQAusgabeEinlesen im Timer steht.
Ich habe ähnliche Tests auch schonmal ausgeführt und kam zum Ergebnis, dass obige Schleife je nach Größe der Ausgabe mehrfach durchlaufen wird.
Wir tasten uns langsam an mögliche Ursachen für das Verhalten heran, das finde ich gut

Viele Grüße vom Euklid
- 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.5
Hallo!Euklid hat geschrieben: Fr 24. Jul 2020, 19:51
Das heißt aber auch, dass Dein Label immer Null anzeigen wird, wenn es hinter der Prozedur ZPAQAusgabeEinlesen im Timer steht.
Nee, ich bin nicht dumm ...
Mein Zeile steht natürlich als allererstes in der Timer-Procedure!!!
Winni
- 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.5
Hi!
Experten-Einstellung Threads:
Die Anzahl der auf dem jeweiligen Rechner vorhandenen HyperThreads lässt sich per Software ermitteln .
Leider ist das zwischen Windows und Linux immer noch nicht vereinheitlicht.
Damit könnte man dann die maximale Anzahl der Items in der ComboBox automatisch erstellen .
Beobachtung: Benutzte HyperThreads:
Per Default werden alle minus 1 Thread bis zum Anschlag ausgenutzt - zu 100%.
Der letzte wird " nur" zwischen 96% und 99% ausgenutzt. Ich weiß nicht, ob zpaq oder Linux so schlau ist, noch etwas Luft für andere events zu lassen.
Die Einstellung der Anzahl der Threads lässt also nur eine Reduzierung zu - was durchaus sinnvoll sein kann, wenn zpaq im Hintergrund arbeitet und man trotzdem flüssig arbeiten möchte. Die Einstellung der Thread-Anzahl klappt einwandfrei - selbst bei so krummen Zahlen wie 5 oder 7.
Winni
Experten-Einstellung Threads:
Die Anzahl der auf dem jeweiligen Rechner vorhandenen HyperThreads lässt sich per Software ermitteln .
Leider ist das zwischen Windows und Linux immer noch nicht vereinheitlicht.
Code: Alles auswählen
Uses .........{$IFDEF LINUX}UTF8Process,{$ENDIF LINUX}.....;
......
CPUnum := {$IFDEF LINUX}GetSystemThreadCount{$ELSE}GetCPUCount{$ENDIF};
Beobachtung: Benutzte HyperThreads:
Per Default werden alle minus 1 Thread bis zum Anschlag ausgenutzt - zu 100%.
Der letzte wird " nur" zwischen 96% und 99% ausgenutzt. Ich weiß nicht, ob zpaq oder Linux so schlau ist, noch etwas Luft für andere events zu lassen.
Die Einstellung der Anzahl der Threads lässt also nur eine Reduzierung zu - was durchaus sinnvoll sein kann, wenn zpaq im Hintergrund arbeitet und man trotzdem flüssig arbeiten möchte. Die Einstellung der Thread-Anzahl klappt einwandfrei - selbst bei so krummen Zahlen wie 5 oder 7.
Winni
-
- 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.5
Hallo Winni,
danke für die Tests! Ja super, freut mich, dass es klappt.
Wenn bei Threads "(automatisch)" eingestellt ist, müsste er so viele Threads erzeugen, wie der Prozessor Kerne hat. Genau so auch, wenn die Experteneinstellung deaktiviert ist.
Da zpaq die einzelnen Blöcke parallel rechnet, wird pro Thread der gleiche Faktor Arbeitsspeicher benötigt. Die Threads teilen also den verfügbaren Arbeitsspeicher auf.
Da die Menge an Arbeitsspeicher, die zpaq benötigt, erheblichen Einfluss auf die Kompressionsdichte großer Datenmengen hat, kann man also durch eine Reduktion der Threads eine zusätzliche Verdichtung der Daten erreichen, auf Kosten der Laufzeit.
Liebe Grüße, Euklid
danke für die Tests! Ja super, freut mich, dass es klappt.
Wenn bei Threads "(automatisch)" eingestellt ist, müsste er so viele Threads erzeugen, wie der Prozessor Kerne hat. Genau so auch, wenn die Experteneinstellung deaktiviert ist.
Da zpaq die einzelnen Blöcke parallel rechnet, wird pro Thread der gleiche Faktor Arbeitsspeicher benötigt. Die Threads teilen also den verfügbaren Arbeitsspeicher auf.
Da die Menge an Arbeitsspeicher, die zpaq benötigt, erheblichen Einfluss auf die Kompressionsdichte großer Datenmengen hat, kann man also durch eine Reduktion der Threads eine zusätzliche Verdichtung der Daten erreichen, auf Kosten der Laufzeit.
Liebe Grüße, 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.5
Ich weiß, das sollte auch nicht so rüber kommen.
Aus dem Screenshot oben in meinem vorvorletzten Beitrag kannst Du sehen, dass ich das Problem nicht reproduzieren kann, da zpaq bei mir eine Ausgabe an das Memo weiter gibt.Mein Zeile steht natürlich als allererstes in der Timer-Procedure!!!
Da es bei Dir und wennerer nicht funktioniert, tappe ich ein wenig im Dunkeln. Ich werde einfach alle Möglichkeiten mal durchprobieren und so lange dann mit dem Workaround "-s1" leben müssen.
Unsere Systeme unterschieden sich in der Distribution und im Compiler/Lazarus-Version. Vielleicht erklärt das auch das unterschiedliche Verhalten, ist natürlich hoch spekulativ.
Oder hast Du vielleicht eine Erklärung, weshalb zpaq bei mir den Output ins Memo gibt, so wie es soll und bei Euch nicht?
Ich kann mir das einfach nicht erklären

Dir einen schönen Abend, winni! Und danke für Deine großartige Unterstützung


Beste Grüße vom Euklid
- 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.5
Hi!
Und nun das Ganze optisch:
James Bond wird komprimiert.
Level 5 mit 5 Threads.
Die restliche CPU geht an Net-Radio und Firefox. Und Lazarus.
Winni
Und nun das Ganze optisch:
James Bond wird komprimiert.
Level 5 mit 5 Threads.
Die restliche CPU geht an Net-Radio und Firefox. Und Lazarus.
Winni
- Dateianhänge
-
- zapq-5Threads.png (128 KiB) 3276 mal betrachtet
-
- 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.5
Die Grafik sieht gut aus!

Bei meinem Videos hat zpaq 10% rausholen können.
Heute habe ich meine externe Festplatte mit den ganzen Sicherungen der vergangenen Jahre komprimiert und sie war plötzlich statt komplett nur noch zur Hälfte gefüllt

ZPAQ's Face kann aktuell nur ganze Archive wieder entpacken. Gerade bin ich am Überlegen, ob ich bis zum Release V1.0 noch die Möglichkeit einbaue, Datein in der Dateiliste einzeln zu markieren und zu entpacken.
- 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.5
@winni:
Ich habe ein wenig geforscht und einige der unerklärlichen Bugs konnten behoben werden, indem ich den Outputstream nicht direkt in das Memo, sondern in eine StringList lade.
Ich habe eine experimentelle Version diesem Beitrag angehängt.
In der experimentellen Version ist auch das "-s1"-Workaround eingeflossen.
Falls Du Zeit und Lust hast wäre es super, wenn Du mir zu zwei Dingen mal Rückmeldung geben könntest:
(1) --> Funktioniert die Anzeige bei Dir jetzt so wie gewünscht?
(2) --> Kannst mal testweise das Workaround "add('-s1')" ausklammern und mir kurz schreiben, ob und wenn ja zu welchem Zeitpunkt Du eine Ausgabe im Memo siehst?
Danke Dir im Voraus!
Beste Grüße vom Euklid
Ich habe ein wenig geforscht und einige der unerklärlichen Bugs konnten behoben werden, indem ich den Outputstream nicht direkt in das Memo, sondern in eine StringList lade.
Ich habe eine experimentelle Version diesem Beitrag angehängt.
In der experimentellen Version ist auch das "-s1"-Workaround eingeflossen.
Falls Du Zeit und Lust hast wäre es super, wenn Du mir zu zwei Dingen mal Rückmeldung geben könntest:
(1) --> Funktioniert die Anzeige bei Dir jetzt so wie gewünscht?
(2) --> Kannst mal testweise das Workaround "add('-s1')" ausklammern und mir kurz schreiben, ob und wenn ja zu welchem Zeitpunkt Du eine Ausgabe im Memo siehst?
Danke Dir im Voraus!
Beste Grüße vom Euklid
- Dateianhänge
-
Output-Forschung.zip
- (258.83 KiB) 109-mal heruntergeladen
Re: ZPAQ's Face - eine Benutzeroberfläche zur effizienten Datenkompression v0.9.5
was mir noch aufgefallen ist Alex...
ist aber ne Feinheit was Du später machen kannst... beim Archiv öffnen würde ich einen Filter setzen auf zpac ,das erleichtert das finden der Dateien um einiges ,weil der rest ausgegraut ist
gruss
ist aber ne Feinheit was Du später machen kannst... beim Archiv öffnen würde ich einen Filter setzen auf zpac ,das erleichtert das finden der Dateien um einiges ,weil der rest ausgegraut ist
gruss
-
- 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.5
@Reiter:reiter hat geschrieben: Sa 25. Jul 2020, 00:22 was mir noch aufgefallen ist Alex...
ist aber ne Feinheit was Du später machen kannst... beim Archiv öffnen würde ich einen Filter setzen auf zpac ,das erleichtert das finden der Dateien um einiges ,weil der rest ausgegraut ist
gruss
Jawoll, Andy! Das habe ich heute verzweifelt versucht umzusetzen, habe das aus welchen Gründen auch immer nicht hinbekommen: Ich dachte, es reicht, wenn ich bei "Filter" einfach ".zpaq" eingebe. Klappt allerdings nicht. Dann habe ich mit DefaultExt experimentiert, mit den Options und es einfach nicht hinbekommen, dass es im OpenDialog ausschließlich *.zpaq-Dateien anzeigt.
Weißt Du vielleicht, wie man das macht? Ich habe schon an meinem Verstand gezweifelt



Danke Dir!
Liebe Grüße vom Alexander alias Euklid
Re: ZPAQ's Face - eine Benutzeroberfläche zur effizienten Datenkompression v0.9.5
zum Beispiel...
und baue mal noch eine Funktion ein das man versehentliche Dateien oder Ordner auch aus dem Archiv wieder löschen kann
vor dem Archiv speichern
als Anregung
gruss
Code: Alles auswählen
OpenDialog1.Filter :='Datei(*.zpac)|*.zpac';
vor dem Archiv speichern
als Anregung
gruss