Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Perhaps, you can leverage the <a href="http://www.chromium.org/developers/design-documents/software-updates-courgette" rel="noreferrer">courgette algorithm</a>, which is the update mechanism that is used in <a href="http://en.wikipedia.org/wiki/Google_Chrome" rel="noreferrer">Google Chrome</a>. It is really easy to use and apply to your infrastructure. Currently, it just works for Windows operating systems. Windows users of Chrome receive updates in small chunks, unlike Mac and Linux users who still receive the chunks in total size.</p> <p>You can find the source code <a href="http://src.chromium.org/viewvc/chrome/trunk/src/courgette/" rel="noreferrer">here</a> in the <a href="http://en.wikipedia.org/wiki/Chromium_%28web_browser%29" rel="noreferrer">Chromium</a> SVN repository. It is a compression algorithm to apply small updates to Google Chrome instead of sending the whole distribution all the time. Rather than push the whole 10&nbsp;MB to the user, you can push just the diff of the changes.</p> <p>More information on how Courgette works can be found <a href="http://dev.chromium.org/developers/design-documents/software-updates-courgette" rel="noreferrer">here</a> and the official blog post about it <a href="http://blog.chromium.org/2009/07/smaller-is-faster-and-safer-too.html" rel="noreferrer">here</a>.</p> <p>It works like this:</p> <blockquote> <pre><code>server: hint = make_hint(original, update) guess = make_guess(original, hint) diff = bsdiff(concat(original, guess), update) transmit hint, diff client receive hint, diff guess = make_guess(original, hint) update = bspatch(concat(original, guess), diff) </code></pre> </blockquote> <p>When you check out the source, you can compile it as an executable (right click compile in Visual Studio) and you can use the application in that form for testing:</p> <p><strong>Usage:</strong></p> <pre><code> courgette -dis &lt;executable_file&gt; &lt;binary_assembly_file&gt; courgette -asm &lt;binary_assembly_file&gt; &lt;executable_file&gt; courgette -disadj &lt;executable_file&gt; &lt;reference&gt; &lt;binary_assembly_file&gt; courgette -gen &lt;v1&gt; &lt;v2&gt; &lt;patch&gt; courgette -apply &lt;v1&gt; &lt;patch&gt; &lt;v2&gt; </code></pre> <p>Or, you can include that within your application and do the updates from there. You can imitate the Omaha auto update environment by creating your own service that you periodically check and run Courgette.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload