19/2k

Get The Cool Shoeshine

Hi, I'm bake.
You can find me on Mastodon and Twitter.
Most of my public code is hosted on on GitHub and Gitea.
This blog has a feed.

Hiding two-dimensional informations in alphanumeric strings

Sometimes you just come across a page with a bunch of images you’d like to download. Usually it’s just img tags with a src, sometimes its Base64 encoded JPEGs, occaisionally it’s JSON or even CSS1 that’s fetched after the page is done loading and other times these URLs are protected to make sure you can only view the images on this one specific website. The website in question publishes comics. Individual pages (images) are encoded in Base64 with added garbade characters at seemingly random positions, so that you can’t just download and decode them. …

Read More

Space Schnablis

Space Schnablis is an Arduino Uno sketch for use with a 3.5” ILI9486 TFT display. It uses the MCUFRIEND_kbv library and shows two platypodes flying through space with fireworks and stars in the background. Touching the screen results in even more fireworks. Fireworks A group of sparks is called a firework, if the sparks have the same color, were created at the same time and are moving in different directions. Sparks are stored in an array which holds 64 elements. …

Read More

RIFF WAVE

Busted and Blue Als im letzten Jahr Gorillaz’ Humanz erschien und ich darauf hingewiesen wurde, dass die Domain busted.blue noch nicht vergeben war, wusste ich noch nicht was ich damit tun sollte. Seit ein paar Monaten liegt dort nun eine relativ Dynamische Seite, die die Lyrics des Liedes Busted and Blue beim laden verstreut1. Das allein wird schnell langweilig. Die nächste Idee war es, die Zeilen einzeln zu animieren, das Lied im Hintergrund zu spielen und die aktuelle Zeile hervorzuheben. …

Read More

Custom image.Image Format in Go

Nachdem ich vor ein paar Wochen über Sprites in NES ROMs geschrieben habe, wollte ich gerne eine standardisiertere API anbieten als die verwendete: Read(io.Reader) ([][]byte, error) Entschieden habe ich mich dazu, ROMs wie Bilder zu verarbeiten, wozu sich image.Decode(io.Reader) (image.Image, error) anbietet. Es wählt einen Decoder aus zuvor registrierten Formaten aus. Vor dem main()-Aufruf, werden alle zuvor erstellten init() Funktionen verarbeitet. Dort kann mit image.RegisterFormat ein neues Bildformat registriert werden. Die akzeptierten Argumente sind der Name des Formats (string, hier "nes"), ein fixer Teil des Headers zur Bestimmung des Formats: magic (string, Fragezeichen (? …

Read More

NES Sprites

Ein bekanntes Format für NES-Roms ist iNES. Dessen erste drei Bereiche sind der Header, der Program ROM (PRG) und der Character ROM (CHR). PRG und CHR sind in Banks unterteilt, welche je 16 * 1024 Byte bzw. 8 * 1024 Byte groß sind. Der Header besteht aus 16 Byte. Die erste vier lauten immer 0x4e, 0x45, 0x53 und 0x1a, was in ASCII für NES(SUB) steht. Darauf folgen zwei Byte, welche je die Anzahl der PRG- und CHR-Banks beinhalten. …

Read More