LZW and GIF explained
eecis.udel.edu
eecis.udel.edu
* "What's In A GIF": https://www.matthewflickinger.com/lab/whatsinagif/
It's a five part explanation that includes both great visualisations and bespoke analysis tools[2].
Here's a direct link to the section on LZW compression[0]:
* https://www.matthewflickinger.com/lab/whatsinagif/lzw_image_...
[0] Which somewhat confusingly credits "John Barkaus's LZW and GIF Explained" which actually turns out[1] to be... the text of "LZW and GIF explained----Steve Blackstock" via a news group post by John Barkaus (and is the text at OP's HN post URL).
[1] http://web.archive.org/web/20050217131148/http://www.danbbs....
[2] Including this fantastic example of visualizing individual sections of a multi-part binary file format, the UX/UI of which I think would be a great addition to a "hex viewer" application: https://www.matthewflickinger.com/lab/whatsinagif/gif_explor...
(I've done some VJing in my time, so it's always cool to see related projects--I particularly like the effect on the ping-pong ball in the examples with its bounce path trail. :) )
For example, suppose you have a lot of chess PGNs you'd like to store [1]. If you compress each PGN separately, you won't get nearly as high of a compression ratio as if you stored them all in the same file and compressed that file. But storing games individually is more convenient. Here are the numbers:
Original PGN file: 780 bytes
Default zstd compression: 508 bytes (35% decrease)
With dictionary: 376 bytes (52% decrease)
I'm thinking about ways to compress at an even higher ratio. Chess PGNs are a great candidate for this task because they have a huge amount of redundant and repeated text.
(I encountered this aspect while investigating potential size optimization opportunities for the Godot game engine's web/WASM builds--though presumably the Brotli dictionary compresses well if the transfer encoding is... Brotli. :D )
---- footnotes ----
[-1] An aspect also previously mentioned on HN: https://news.ycombinator.com/item?id=27160590
[0] "This needs to be reviewed immediately #876": https://github.com/google/brotli/issues/876
[1] Which, regardless of meaning, certainly bears similarities to the type of "unexpected weird text" commonly/normally associated with spam, malware, LLMs and other entities of ill repute.
[2] The final example may not actually be factual. :)
* The dictionary part takes up a similar amount so maybe 2x that
I think some image viewers didn't like how I made the gif data and then I didn't care enough to make it perfect because LZW was the interesting part and that worked.