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.5

Beitrag von Winni »

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

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

Beitrag von Euklid »

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

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

Beitrag von Euklid »

Hallo wennerer und winni,

so soll es eigentlich aussehen:
Bildschirmfoto.png
Bildschirmfoto.png (72.42 KiB) 2640 mal betrachtet
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

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.5

Beitrag von Winni »

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:

Code: Alles auswählen

Label3.Caption   := IntToStr(ZPAQ.Output.NumBytesAvailable);
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

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

Beitrag von Euklid »

Hallo Winni,
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 .
Das leuchtet ein und wäre eine mögliche Erklärung. Danke für die Idee, ich werde dem nachgehen...

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);
In dem Label stand die ganze Zeit eine Null. D .h. das Binary zpaq ist schweigsam, während es im Hintergrund läuft.
Ganz oben im Timer wird ja die Prozedur ZPAQAusgabeEinlesen aufgerufen. Darin ist folgende Schleife enthalten:

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));  
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

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.5

Beitrag von Winni »

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.
Hallo!

Nee, ich bin nicht dumm ...

Mein Zeile steht natürlich als allererstes in der Timer-Procedure!!!

Winni

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.5

Beitrag von Winni »

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.

Code: Alles auswählen

Uses    .........{$IFDEF LINUX}UTF8Process,{$ENDIF LINUX}.....;
......
CPUnum := {$IFDEF LINUX}GetSystemThreadCount{$ELSE}GetCPUCount{$ENDIF};
 
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

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

Beitrag von Euklid »

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

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

Beitrag von Euklid »

Winni hat geschrieben:
Fr 24. Jul 2020, 20:10
Nee, ich bin nicht dumm ...
Ich weiß, das sollte auch nicht so rüber kommen.
Mein Zeile steht natürlich als allererstes in der Timer-Procedure!!!
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.

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 :!: 8)

Beste Grüße vom 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.5

Beitrag von Winni »

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
Dateianhänge
zapq-5Threads.png
zapq-5Threads.png (128 KiB) 2599 mal betrachtet

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

Beitrag von Euklid »

Winni hat geschrieben:
Fr 24. Jul 2020, 22:32
James Bond wird komprimiert.
Level 5 mit 5 Threads.
Die Grafik sieht gut aus! :D

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

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

Beitrag von Euklid »

@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
Dateianhänge
Output-Forschung.zip
(258.83 KiB) 79-mal heruntergeladen

reiter
Beiträge: 217
Registriert: Sa 18. Nov 2017, 16:58

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

Beitrag von reiter »

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

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

Beitrag von Euklid »

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
@Reiter:

Jawoll, Andy! Das habe ich heute verzweifelt versucht umzusetzen, habe das aus welchen Gründen auch immer nicht hinbekommen:
OpenDialog.png
OpenDialog.png (31.68 KiB) 2578 mal betrachtet
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 :shock: :D :D

Danke Dir!

Liebe Grüße vom Alexander alias Euklid

reiter
Beiträge: 217
Registriert: Sa 18. Nov 2017, 16:58

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

Beitrag von reiter »

zum Beispiel...

Code: Alles auswählen

OpenDialog1.Filter :='Datei(*.zpac)|*.zpac';
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

Antworten