2021 Year End Projects
- 8 min read - Text OnlyI 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.
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.
It takes input from my twitter account, showing what I tweet, retweet, etc.
And I can post content through telegram too. Telegram content at least will include gifs sized appropriately for a dial up connection.
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 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
- I forked janet-html - an html library
- I forked halo2 - a webserver library
- I wrote some C to quickly classify content as utf8 or binary
- I added several alternate silly things, like video, audio, vectorize it to svg, and do other silly formats like sql.
- Aquos contributed a 1.5GB compressed stream of
breadn
with zstd - Pull requests came in for python, rust, and C++
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.
Following all this, now more are getting in on it personally with their original characters.
So I got my own too with a croissant:
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.
So what would I serve? I see that most recommend a 48 or 49 byte gif.
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 73.73.255.255 /
2022-00-01T19:36:31Z 73.73.255.255 /
2022-00-01T19:36:30Z 73.73.255.255 /
2022-00-01T19:36:29Z 73.73.255.255 /
2022-00-01T19:36:28Z 73.73.255.255 /
2022-00-01T19:36:26Z 73.73.255.255 /
2022-00-01T19:36:24Z 73.73.255.255 /
2022-00-01T19:36:22Z 73.73.255.255 /
2022-00-01T19:36:21Z 73.73.255.255 /
2022-00-01T19:34:12Z 134.215.255.255 /lottie
2022-00-01T19:21:24Z 134.215.255.255 /
2022-00-01T18:35:38Z 24.15.255.255 /
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 82.8.255.255 /
2022-00-01T18:19:53Z 82.8.255.255 /
2022-00-01T18:19:52Z 82.8.255.255 /
2022-00-01T18:19:51Z 82.8.255.255 /
2022-00-01T18:19:48Z 82.8.255.255 /
2022-00-01T18:19:47Z 82.8.255.255 /
2022-00-01T18:19:46Z 82.8.255.255 /
2022-00-01T18:19:45Z 82.8.255.255 /
2022-00-01T18:19:44Z 82.8.255.255 /
2022-00-01T18:19:43Z 82.8.255.255 /
2022-00-01T18:19:42Z 82.8.255.255 /
2022-00-01T18:19:41Z 82.8.255.255 /
2022-00-01T18:19:40Z 82.8.255.255 /
2022-00-01T18:19:40Z 2607:9000:::: /
2022-00-01T18:19:39Z 82.8.255.255 /
2022-00-01T18:19:38Z 2607:9000:::: /
2022-00-01T18:19:38Z 82.8.255.255 /
2022-00-01T18:19:37Z 82.8.255.255 /
2022-00-01T18:19:36Z 2607:9000:::: /
2022-00-01T18:19:36Z 82.8.255.255 /
2022-00-01T18:19:34Z 2607:9000:::: /
2022-00-01T18:19:34Z 82.8.255.255 /
2022-00-01T18:19:33Z 2607:9000:::: /
2022-00-01T18:19:32Z 82.8.255.255 /
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 134.215.255.255 /
2022-00-01T18:15:02Z 134.215.255.255 /
2022-00-01T18:15:01Z 134.215.255.255 /
2022-00-01T18:15:00Z 134.215.255.255 /
2022-00-01T18:14:59Z 134.215.255.255 /
2022-00-01T18:14:58Z 134.215.255.255 /
2022-00-01T18:14:20Z 2607:fb90:::: /
2022-00-01T18:14:16Z 2607:fb90:::: /
2022-00-01T18:13:49Z 134.215.255.255 /
2022-00-01T18:11:38Z 71.231.255.255 /
2022-00-01T18:11:37Z 71.231.255.255 /
2022-00-01T18:11:35Z 71.231.255.255 /
2022-00-01T18:11:34Z 71.231.255.255 /
2022-00-01T18:11:31Z 71.231.255.255 /
2022-00-01T18:10:55Z 45.83.255.255 /
2022-00-01T18:10:52Z 45.83.255.255 /
2022-00-01T18:10:47Z 45.83.255.255 /
2022-00-01T18:09:49Z 134.215.255.255 /
2022-00-01T18:09:48Z 134.215.255.255 /
2022-00-01T17:46:30Z 134.215.255.255 /
2022-00-01T17:46:24Z 134.215.255.255 /
2022-00-01T17:31:21Z 134.215.255.255 /
2022-00-01T03:36:19Z 100.19.255.255 /
2022-00-00T22:46:45Z 134.215.255.255 /lottie
2022-00-00T22:46:43Z 134.215.255.255 /
------ cendyne.dev ------
2022-00-01T18:41:29Z 24.15.255.255 /
2022-00-01T18:41:28Z 24.15.255.255 /posts/
2022-00-01T18:41:00Z 24.15.255.255 /posts/2022-01-01-new-year.html
2022-00-01T18:40:57Z 24.15.255.255 /posts/
2022-00-01T18:40:48Z 24.15.255.255 /
2022-00-01T18:14:57Z 134.215.255.255 /
2022-00-01T18:12:57Z 74.132.255.255 /posts/2022-01-01-new-year.html
2022-00-01T17:46:50Z 134.215.255.255 /posts/2021-11-11-project-planning-part-6.html
2022-00-01T17:46:49Z 134.215.255.255 /posts/
2022-00-01T17:46:48Z 134.215.255.255 /
2022-00-01T16:47:31Z 134.215.255.255 /posts/2021-10-02-dynamic-handler-mapping.html
2022-00-01T16:47:28Z 134.215.255.255 /posts/2022-01-01-new-year.html
2022-00-01T16:47:27Z 134.215.255.255 /posts/
2022-00-01T16:47:25Z 134.215.255.255 /
...
Well now that's pretty neat. I can make charts and graphs later.
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.