Archive: VPatch development


VPatch development
It's been really quiet about VPatch the last time (VPatch is a program which can calculate differences between 2 files, and then create a small .EXE program out of it which updates one file to the other one). I'm currently rewriting VPatch v1.21 and will release a beta version soon. It's about 15% faster which is nice :D
These faster versions based on the current algoritm will be called v1.5x.

After that, I'm thinking about VPatch 2.0 with a completely different algoritm. Does anyone have ideas about patching? VPatch 1.x currently searches for large similar blocks (typically 256-1024 byte blocks). Performance issues can't make this smaller with 1.x algoritm.

If you have any ideas I'd like to hear them!


... nsis fits into this how? I'm confused?

-Scott


NSIS can be used to make installers, but if you want to change a 10 MB file just a little bit (->update), then you don't want to include the entire file. Hence you use VPatch to create a patch file, and then use it inside NSIS to update this file on the users PC.
I made it because it's useful in combination with NSIS :D


I'm trying to make a patch engine too and it works like you, searching for similar blocks, it first search blocks of size 1/2*"bigger file size" and aproximates to a power of 2, then 1/4*"bigger file size", 1/8,.... It stops when the block size is 32 because for block size 16 it takes very,very long time if the files are very diferents.
If i found a block in block size=1024 then this block is marked as found and in the next iteration (512) skipt this block (for speed gain). The advantages: is very fast in very similar files. Disadvantages: very slow in other cases.

I'm was working in a new algorithm, but it needs a bigger amount of memory (8*new file size :(). If i discover a new algorithm i will tell you.

(Sorry for my poor english)


Can you make a VPatch NSIS DLL?


I probably should make a NSIS DLL instead of the current 3KB EXE runtime :D
I don't know much C so it'll be a little experimenting to merge them.

To MoNKI:
sounds nice, since my program only goes down to about 128/256 block sizes (depends on settings). However performance is greatly dependant on the type of file. If there are large similarities it is very fast, but EXE files for example are incredibly slow and give almost no gain. Does your algoritm have this problem with EXE files too?


Joost - I don't understand a thing about the Microsoft C++ IDE 6.0. I've just spent an hour trying to get a DLL project (and if I open the ExDLL workspace, nothing opens). :igor:
I have no idea why this project won't open. Can someone make me a simple project which compiles and exports a function?
I've attached the C EXE runtime, basically only the command line parameters (source and target filenames) need to be popped of the stack. But it's a bit hard to do if you can't create a project properly...

Can anyone give me a hand? Thanks :D


Oops :rolleyes:


Sorry, but i haven't two good exe files to check it (around 600kb) the only exe file with diferent versións that i have are the versións of makensisw (± 20kb).

PD: My algorithm actualy gets bigger patch files than vpatch (in teory, it not produces patch files, is in very earlier stage), maybe combining two diferent algorithms i will beat you, ;)


We're not having a competition ;)
Compression depends on the block size chosen, if you choose the same block size as with your program there probably won't be much of a difference. If the implementation is more efficient, then you can choose smaller block sizes :)