Hacker News new | ask | show | jobs
by happybits 923 days ago
CUSTOMER

Hackerman, I need an impressive icon for my website. It should be 5x5 pixels big and look like a rabbit. Can you please draw it for me?

HACKERMAN

Draw!? Bah! I don’t need any graphic program for that. I am Hackerman. I will code it for you. You will get the image next week.

CUSTOMER

Next week?? But…

HACKERMAN

No buts! I just need to read about how the GIF file format works, then I can create the image in no time.

[TIME PASSES]

After spending some evenings, Hackerman gets the main idea of how the GIF file format works and the compression algorithm called LZW. With that knowledge, he succeeded in creating the image within an hour.

Hackerman calculated that the binary of the image should be as follows:

47 49 46 38 39 61 00 00 00 00 70 00 00 2c 00 00 00 00 05 00 05 00 81 11 11 11 FF FF FF D5 D7 D9 00 00 00 07 0F 80 01 00 83 01 82 84 85 88 82 8A 85 02 85 81 00 3b

So he just opened his code editor, saved the file as rabbit.gif, and sent it to his customer. Boom! Easy-peasy!

Do you want understand the GIF-file format and be as cool as Hackerman?

3 comments

I teach a foundational media technology course at on of the bigger european art universities — I do the same thing with the students using a broadcast wave file.

The goal of the thing isn't to turn them into hackers, it is to give them a feeling what the stuff they work with is made of, what a file is. This is also a great introduction to talk about compression, metadata, encoding, decoding, sample rate, bitdepth and so on.

If you dive that deep into it, the settings in a typical media conversion program will suddenly become much less intimidating. My motto always was: this was made by humans so it should be possible for humans to understand it as well. And this is maybe the "hidden" lesson: If you bring enough patience you can go into the depth of nearly every topic.

I absolutely love that you do this. There appears to be a trend to discount the value of knowing the low-level details of these sorts of things -- but even if you never actually work at that level, knowing what's happening "behind the scenes" increases and deepens understanding and can make high-level things that seem arbitrary or nonsensical make sense.
First principles and curiosity > blithe unconcern about the "magic box". Likewise, coders who don't have enough understanding all the way down the stack including hardware are merely engineer posers in it for a paycheck.
Thanks a lot JohnFen.

One reason for writing the post and trying to create GIF-images from binary, was to come as close as possible to GIF format and especially the LZW-algorithm. To understand it in an intuitive way. To get a bit closer to the minds who created the algorithm in the first place.

I forgot most of what little I learned in semiconductor physics and analog design courses in college, but I remember enough to know that nothing about computers is magic. Nothing. That knowledge gives me confidence that I can figure out anything having to do with computers given enough quiet time.

On the other hand, I don't really know much about cars. If I had a 2024 model year car and something went wrong with it, I'd very quickly run up against a wall of arcane-seeming knowledge that I don't have easy access to. I don't know where I would start to learn everything about cars from scratch like I did with computers.

There might be a name for this, but I don't know what it is.

Exactly this is the reason I do it. The "knowledge" part will fade if it isn't applied regularily. If I manage to convey a deeper understanding of how things are intertwined or at least the feeling that it is actually possible to understand things and that curiosity is king, that is all I can do.

It is an art school after all. I will never turn all of them into low level systems programmers, but I can give them enough understanding of the tech world that it can become the topic of art without making people with a tech background cringe.

And some of them take this as a starting point to go way deeper.

> nothing about computers is magic

In this vein I think about nelhage's "Computers Can Be Understood" from time to time - https://blog.nelhage.com/post/computers-can-be-understood/ .

computers contain transistors and how transistors work is by magic.

before that, tubes. tubes also work by magic.

before that, relays, which are based on electromagnets. electromagnets work by magic.

> how transistors work is by magic

ok but it's "just" semiconductor band-gap physics, which my monkey grug brain can kind of just barely make out, if I squint

> tubes also work by magic

tubes work by "just" thermionic emission, or "tube physics", which grug brain has a better handle on

> electromagnets work by magic

okay, you've got me there, physics grug brain think magnets high magic.

tubes work by not just thermionic emission (that'd be a diode) but also by a sort of uncanny leveraging of inverse square laws in free space surrounding the grid. when the first tube amplifier was invented, it was by accident, it wasn't understood how it worked.
You can make computers (in a non economical fashion) using pipes of water and water actuated valves. This can be done in a manner _highly_ analogous to transistor, tube or relay machines. That was what convinced me that computers are not magic.
atoav: this sounds like at great exercise. Have you written any public article about that?

The main reason for writing this article was * My curiosity - what secret is behind all strange bytes in a graphical file * To spend some time doing something weird, that I know have zero effect of my career and no chance of giving and benefits or profit in the future.

That first

> 00 00 00 00

should be `05 00 05 00`.

Yeah the article says these "aren't used anymore," but my image viewer (sxiv) complained that the gif was corrupted until I put something there. It still displayed the image, but it also complained afterwards.
In the case of viewnior, it said that the resulting image has zero size and displayed nothing. That statement of it not being used seems false.
Aha, thanx for the info, I didn't know. So the canvas width and height should be the same as the width and height?
Yes? Is that such a bad thing? Is this trying to say there is no value in learning something so low level. Exploration leads to learning, and learning leads to innovation. Perhaps Hackerman will go on to create the greatest image encoding library for images so that they can easily scale from 5x5 to 25x25 or more and fit in the same space as the 5x5. Who knows.
He’s quoting from TFA.