2021 Year End Projects

- 8 min read - Text Only

I took a longer vacation at the end of the year. One of those use-it-or-lose it personal time off policies.

It finally gave me time to cool down from all the overwhelming feelings from work, and it is clear that I was burned out before.

Feeling recovery
Archived Tweet

I wrote a bit on what had me down in 2021. But here's what I did to bring myself back up.

Bowtie Resident Site

I'm in a small community of those that appreciate tech from 1990-2000. As part of that, I wrote a site that works in IE5. Though for reasons it is no longer operating.

Supported in internet explorer 5

It takes input from my twitter account, showing what I tweet, retweet, etc.

Shows how it includes twitter

And I can post content through telegram too. Telegram content at least will include gifs sized appropriately for a dial up connection.

Shows an animated gif

The source for this is on GitHub. It is made to run in Visual Studio Code Remote - Containers, which I highly recommend.

Glitch's Bread

Last year oh it's weird to say that, a few friends set up redirecting domains to a png or a webp hosted by @Nican.

I decided to add one myself but a redirect would not be satisfying for me. So I took this sh*tpost seriously.

I decided to use Janet, a lightweight lisp to write a web server for this.

At first it was just some static content plus some content negotiation code, but now the pages are actually dynamic.

Along the way

Then more arrived and Glitch had to start tracking them. One uses the vectorized svg I made, another shows the lottie animation derived from the original sticker (also adjusted and replicated on mine afterwards), and another does some particle affects.

Oh, and at one point I discovered that Telegram will use the twitter:player data and not use the og:video sources. That was a bother. This motivated me to change it to dynamic in the first place.

Twitter hijacking twitter data
Archived Tweet

Following all this, now more are getting in on it personally with their original characters.

Dbleki gets commissioned for more
Archived Tweet

So I got my own too with a croissant:

Silly Bread sticker
Art by @Dbleki

Now bread.cendyne.dev cycles through all that I am aware of.

This project in particular helped me feel a bit more connected to the community as my work inspired more to create their own.

The source for this is on GitHub.

Little Analytics

One of my goals was to make my own tracking instrument, a very very simple one. I knew about tracking pixels, but learned they're also called web beacons.

So why would I want my own when I could just add google-analytics for free? Well, that's the thing. Big Tech free products aren't made for you, it's made for them. There are some self hosted solutions out there. But for something this small, I'd rather learn myself what's going on and what I can collect and track for my personal uses.

Oh but why not just tail the nginx server logs? Differentiating page requests from content requests and dealing with cloudflare is not fun. Plus, I have multiple servers and there's no central logging set up.

So my plan was simple. Figure out how to send a pixel without any caching between the server and client, and log each request after piecing out the data.

Like the bread project, this was also done in Janet.

For now deployments are only collecting content in the path, but I ended up Forking janet-uri to add flexibility to query parameter parsing.

Janet-uri and halo2 still needs some more changes, since both headers can't be put into hash maps as is. It is perfectly valid to send multiple headers with the same key but different values, to send query parameters likewise, and for query parameters to have no value.

So what would I serve? I see that most recommend a 48 or 49 byte gif.

But can we go smaller?

But I found The Tiniest GIF Ever by Probably Programming. A 37 byte transparent gif exists! So that's what I ended up serving.

Each request has some content filtered out, then json encoded and dumped into sqlite for later.

The source for this is on GitHub.

If I go to a special url with a secret token in it, I can get back a text/plain report on the visits. The IPs have been masked below. I was surprised to find that some were connecting in with ipv6!

---- Unique hosts last 30 days ----
bread.cendyne.dev: 69
cendyne.dev: 61

---- Last 100 visits ----
------ bread.cendyne.dev ------
2022-00-01T19:36:32Z /
2022-00-01T19:36:31Z /
2022-00-01T19:36:30Z /
2022-00-01T19:36:29Z /
2022-00-01T19:36:28Z /
2022-00-01T19:36:26Z /
2022-00-01T19:36:24Z /
2022-00-01T19:36:22Z /
2022-00-01T19:36:21Z /
2022-00-01T19:34:12Z /lottie
2022-00-01T19:21:24Z /
2022-00-01T18:35:38Z /
2022-00-01T18:22:25Z 2607:9000:::: /
2022-00-01T18:22:23Z 2607:9000:::: /
2022-00-01T18:22:22Z 2607:9000:::: /
2022-00-01T18:22:20Z 2607:9000:::: /
2022-00-01T18:19:54Z /
2022-00-01T18:19:53Z /
2022-00-01T18:19:52Z /
2022-00-01T18:19:51Z /
2022-00-01T18:19:48Z /
2022-00-01T18:19:47Z /
2022-00-01T18:19:46Z /
2022-00-01T18:19:45Z /
2022-00-01T18:19:44Z /
2022-00-01T18:19:43Z /
2022-00-01T18:19:42Z /
2022-00-01T18:19:41Z /
2022-00-01T18:19:40Z /
2022-00-01T18:19:40Z 2607:9000:::: /
2022-00-01T18:19:39Z /
2022-00-01T18:19:38Z 2607:9000:::: /
2022-00-01T18:19:38Z /
2022-00-01T18:19:37Z /
2022-00-01T18:19:36Z 2607:9000:::: /
2022-00-01T18:19:36Z /
2022-00-01T18:19:34Z 2607:9000:::: /
2022-00-01T18:19:34Z /
2022-00-01T18:19:33Z 2607:9000:::: /
2022-00-01T18:19:32Z /
2022-00-01T18:19:30Z 2607:9000:::: /
2022-00-01T18:19:29Z 2607:9000:::: /
2022-00-01T18:19:27Z 2607:9000:::: /
2022-00-01T18:19:03Z 2607:9000:::: /
2022-00-01T18:15:09Z /
2022-00-01T18:15:02Z /
2022-00-01T18:15:01Z /
2022-00-01T18:15:00Z /
2022-00-01T18:14:59Z /
2022-00-01T18:14:58Z /
2022-00-01T18:14:20Z 2607:fb90:::: /
2022-00-01T18:14:16Z 2607:fb90:::: /
2022-00-01T18:13:49Z /
2022-00-01T18:11:38Z /
2022-00-01T18:11:37Z /
2022-00-01T18:11:35Z /
2022-00-01T18:11:34Z /
2022-00-01T18:11:31Z /
2022-00-01T18:10:55Z /
2022-00-01T18:10:52Z /
2022-00-01T18:10:47Z /
2022-00-01T18:09:49Z /
2022-00-01T18:09:48Z /
2022-00-01T17:46:30Z /
2022-00-01T17:46:24Z /
2022-00-01T17:31:21Z /
2022-00-01T03:36:19Z /
2022-00-00T22:46:45Z /lottie
2022-00-00T22:46:43Z /

------ cendyne.dev ------
2022-00-01T18:41:29Z /
2022-00-01T18:41:28Z /posts/
2022-00-01T18:41:00Z /posts/2022-01-01-new-year.html
2022-00-01T18:40:57Z /posts/
2022-00-01T18:40:48Z /
2022-00-01T18:14:57Z /
2022-00-01T18:12:57Z /posts/2022-01-01-new-year.html
2022-00-01T17:46:50Z /posts/2021-11-11-project-planning-part-6.html
2022-00-01T17:46:49Z /posts/
2022-00-01T17:46:48Z /
2022-00-01T16:47:31Z /posts/2021-10-02-dynamic-handler-mapping.html
2022-00-01T16:47:28Z /posts/2022-01-01-new-year.html
2022-00-01T16:47:27Z /posts/
2022-00-01T16:47:25Z /

Well now that's pretty neat. I can make charts and graphs later.

The many same-ip visits are because bread.cendyne.dev will randomly choose one of the artworks for the subject.

But this is satisfying for now.

How I feel

Little Analytics was definitely on my wish list for a few months. So I feel great having that done. The other two projects were fun things to polish with a social nature to it.

I feel like my social life is in ruin last year after prioritizing work above everything else. These social project had a healing affect for me. So I may do more of these as I feel drained and empty.