Friday, November 18, 2011

KrzFlopt 1.23

What is KrzFlopt? KrzFlopt is rebranded KrzYoptimizer (renamed) that again is developped by me. The program is written in VB6. Why? Because I wrote my first VBS script with GUI at the age of 16 and I liked this programming language. It also is much faster than .NET platform. Also it is too simply to be rewritten to .NET, although using ConsoleRead would be nice to create some log windows/status bar information what programs KrzFlopt is using are doing in the background.

By using some advanced deflate tools like kzip, DeflOpt, 7-zip, pngout and more KrzFlopt is able to reduce file size by optimizing Deflate streams. With build in ZIP to GZ, and ExtPK to PK header and vice versa conversions the user is able to open GZ and JAR files for processing. My program directy reads data from ZIP, GZ and JAR files that I programmed basing on online documents containing information on how file headers in those files are stored. This means it doesn't require any tools to at least: Open files, convert ZIP to GZ, ExtPK to PK headers and vice versa, calculate CRC32. You can add multiple files for optimisation.

User is free to chose 3 predefined optimisation methods or define his own and select Custom Mode. For Example in Fast mode program will only try blocks from 1-16, it's good for small files. It's still recommended to create Custom mode with settings: 16 or 32 blocks to try first, search for up to 1024 blocks (kzip/pngout limit) and run at least 100 random Huffman table inits.

KrzFlopt tries to find best number of blocks to split file to by extending searching range. When it successfully found best settings and number of blocks found is equal or higher maximum blocks in this range*66% (for example 13 block is > than 16*66%) then it extends it to maximum blocks*2, till it reaches 1024.

Optimised PNG files are saved on-fly but ZIP/GZ/JAR files are stored only when it ends optimising each file in Deflate archive. Of course the program discards any data that is larger than original file.

Although program may crash from time to time (for example when opening ZIP containing MeGUI profiles - dunno why, I need to research it where the overflow occurs), it should be very stable.

Changes in this version let users send/retrieve data to/from server. This means that my server stores best results for files optimised and sends it to users to save a lot of time. For example file that is 6MB takes very long time to find best settings when searching for up to 1024 blocks. If program finds a file that its best settings data is stored on server then it jumps directly to best settings and later only random huffman table inits are run to eventually futher reduce its size a bit.

Time for some changelog on what was changed sinve fersion 1.22 till 1.23 final.

- Added additional information in TitleBar (Expert Settings)
- Added support for GnuZIP/gz (Unix) timestamp format
* File inside GZ has same time/date as file in ZIP (may reduce the time by 1h on new windowses, I need to fix it someday - it's cause by day savings)
- Added number of bytes reduced in random
tries for Randoms tab "bytesb (successes)"
- Added option to skip 7-zip 3-257 fast bytes test (only 258)
- Added End 7-zip button
- Added CRC32 calculation in File menu
- Added Strategy display: 9 /s 9 /c 9 /f 9 /d [PNG]
- Added Result sending/retrieving
* Program sends best results to server
* Program retrieves best results from server and jumps to best results
and, if selected, checks for randoms to futher reduce file length
* Works if appropriate check boxes in settings
are selected (either one or both)
* Should work fine for ZIP and PNG files.
- Fixed CRC Checking
- Fixed crash when license window was closed after being accessed
through about windows
- Fixed blocks sometimes not displaying in list. [PNG]
- Fixed: Random inits always used extreme strategy even when
it should not [PNG]
- Fixed program doing 1/2 of total maximum blocks to test for ZIP/GZ/JAR
- Fixed status not updating for PNG files
- Fixed strategy parameter not being remembered at all when PNG file
was inside Deflate file [PNG]
- Fixed compression strategy [/s] being sometimes -3 instead of 0 [PNG]
- !!Changed to new webserver:
- Skip 7-zip compression when file is in database (only KZIP-ped
files are stored anyway)
- Reduced 7-zip passes from 255 to 15 and added check for
all fast bytes settings (VERY RARERY produces file smaller
than with 258 fast bytes but DOES)
- Bugfixes for block/strategy algorithm
- now work automatically resumes when user answers NO on exit msg
- Updated CRC file on server
- Updated and fixed 'Download & Install' Module
- Code rearranging and optimisation
- Compiled without optimizations (for some reason 13KB smaller exe)
- Changed Deflate settings algorithm a bit. Now it starts checking from
block 1 and checks file size after each strategy pass (not block as before)
* May lead to better or worse results - need testing [PNG]
- Rewrote 'Limit CPU Usage' code (works better now)
- Rearranged GUI a bit
in ensuring best number of blocks mode
- Updated CRC file (pngout and jpegtran update)
- Hopefully Fixed PNG file not being repacked
* Sorry for that bug, didn't notice it earlier. Program wrongly
calculated reduced PNG size for zipslim.

Download it from here.