2021 Year End Projects - 2022-01-02
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.
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.
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
- 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
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.
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
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 22.214.171.124 / 2022-00-01T19:36:31Z 126.96.36.199 / 2022-00-01T19:36:30Z 188.8.131.52 / 2022-00-01T19:36:29Z 184.108.40.206 / 2022-00-01T19:36:28Z 220.127.116.11 / 2022-00-01T19:36:26Z 18.104.22.168 / 2022-00-01T19:36:24Z 22.214.171.124 / 2022-00-01T19:36:22Z 126.96.36.199 / 2022-00-01T19:36:21Z 188.8.131.52 / 2022-00-01T19:34:12Z 184.108.40.206 /lottie 2022-00-01T19:21:24Z 220.127.116.11 / 2022-00-01T18:35:38Z 18.104.22.168 / 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 22.214.171.124 / 2022-00-01T18:19:53Z 126.96.36.199 / 2022-00-01T18:19:52Z 188.8.131.52 / 2022-00-01T18:19:51Z 184.108.40.206 / 2022-00-01T18:19:48Z 220.127.116.11 / 2022-00-01T18:19:47Z 18.104.22.168 / 2022-00-01T18:19:46Z 22.214.171.124 / 2022-00-01T18:19:45Z 126.96.36.199 / 2022-00-01T18:19:44Z 188.8.131.52 / 2022-00-01T18:19:43Z 184.108.40.206 / 2022-00-01T18:19:42Z 220.127.116.11 / 2022-00-01T18:19:41Z 18.104.22.168 / 2022-00-01T18:19:40Z 22.214.171.124 / 2022-00-01T18:19:40Z 2607:9000:::: / 2022-00-01T18:19:39Z 126.96.36.199 / 2022-00-01T18:19:38Z 2607:9000:::: / 2022-00-01T18:19:38Z 188.8.131.52 / 2022-00-01T18:19:37Z 184.108.40.206 / 2022-00-01T18:19:36Z 2607:9000:::: / 2022-00-01T18:19:36Z 220.127.116.11 / 2022-00-01T18:19:34Z 2607:9000:::: / 2022-00-01T18:19:34Z 18.104.22.168 / 2022-00-01T18:19:33Z 2607:9000:::: / 2022-00-01T18:19:32Z 22.214.171.124 / 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 126.96.36.199 / 2022-00-01T18:15:02Z 188.8.131.52 / 2022-00-01T18:15:01Z 184.108.40.206 / 2022-00-01T18:15:00Z 220.127.116.11 / 2022-00-01T18:14:59Z 18.104.22.168 / 2022-00-01T18:14:58Z 22.214.171.124 / 2022-00-01T18:14:20Z 2607:fb90:::: / 2022-00-01T18:14:16Z 2607:fb90:::: / 2022-00-01T18:13:49Z 126.96.36.199 / 2022-00-01T18:11:38Z 188.8.131.52 / 2022-00-01T18:11:37Z 184.108.40.206 / 2022-00-01T18:11:35Z 220.127.116.11 / 2022-00-01T18:11:34Z 18.104.22.168 / 2022-00-01T18:11:31Z 22.214.171.124 / 2022-00-01T18:10:55Z 126.96.36.199 / 2022-00-01T18:10:52Z 188.8.131.52 / 2022-00-01T18:10:47Z 184.108.40.206 / 2022-00-01T18:09:49Z 220.127.116.11 / 2022-00-01T18:09:48Z 18.104.22.168 / 2022-00-01T17:46:30Z 22.214.171.124 / 2022-00-01T17:46:24Z 126.96.36.199 / 2022-00-01T17:31:21Z 188.8.131.52 / 2022-00-01T03:36:19Z 184.108.40.206 / 2022-00-00T22:46:45Z 220.127.116.11 /lottie 2022-00-00T22:46:43Z 18.104.22.168 / ------ cendyne.dev ------ 2022-00-01T18:41:29Z 22.214.171.124 / 2022-00-01T18:41:28Z 126.96.36.199 /posts/ 2022-00-01T18:41:00Z 188.8.131.52 /posts/2022-01-01-new-year.html 2022-00-01T18:40:57Z 184.108.40.206 /posts/ 2022-00-01T18:40:48Z 220.127.116.11 / 2022-00-01T18:14:57Z 18.104.22.168 / 2022-00-01T18:12:57Z 22.214.171.124 /posts/2022-01-01-new-year.html 2022-00-01T17:46:50Z 126.96.36.199 /posts/2021-11-11-project-planning-part-6.html 2022-00-01T17:46:49Z 188.8.131.52 /posts/ 2022-00-01T17:46:48Z 184.108.40.206 / 2022-00-01T16:47:31Z 220.127.116.11 /posts/2021-10-02-dynamic-handler-mapping.html 2022-00-01T16:47:28Z 18.104.22.168 /posts/2022-01-01-new-year.html 2022-00-01T16:47:27Z 22.214.171.124 /posts/ 2022-00-01T16:47:25Z 126.96.36.199 / ...
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.