I wanted to kickstart this new year with my first ever developer log. Think of it like a blog post with personal flair, intended to share some of the highlights of my most recent development cycle as I continue working on fun and exciting projects. I may not be using facebook anymore, but I hope I can provide interesting stories for those who enjoy my content.
To christen the new year, I built a new PC! This is the first build I've made in about 10,000 years and the process was so different than I remember. Back when I was a PC Technician I would piece together systems like some horrific chimera built from the most unsavory assortment of parts. There were always random issues like components not fitting or routing cables giving me a headache. A lot of those problems seem rather moot these days. I guess industry suppliers really rallied around some standards and that's pretty cool if I say so myself.
It still took me around 3 hours, but everything fit like a glove.
Most of the parts were sourced from amazon and arrived in a timely manner, but I also discovered that newegg has some really cool PC builder tool that helps speedrun part selection. Using that to explore which components will be compatible was really useful. Furthermore, I settled on an NVIDIA 4060 Ti (founders edition) which came direct from the source! It looks so good.
Overall, my build has some killer specs:
After putting it all together I'm running most of my favorite games on maximum! Let's be real though, I don't need a 4060 Ti to comfortably play Dwarf Fortress but it's still nice to have.
And with this new PC came a new operating system! This is the year of Linux, as they say, and if anyone is interested in spending ungodly amounts of time configuring your setup, I highly recommend Gentoo. It's a pain in the ass to get going, but once it's all configured you will have a deeper understanding of the platform and a sense of accomplishment that Windows can only dream of providing.
Now for the actual development update. If you recall, ChronoPixel is my Macromedia Flash remake. I'm looking to bring back the retro web and - more importantly - make highly interactive visualizations much more accessible to folks with limited technical experience. You can check out the full backlog of remaining tasks on my kanban.
Well, this development cycle I've added a ton of new stuff! Including:
I designed a basic color wheel using HTML5 canvas. When you pick a color, it just calculates the angle of your mouse in a circular motion and uses that to select the HSV theta parameter. In this way, it's really easy to implement. I didn't actually add the "S" and the "V" portion, so you can only select vibrant colors. I'll be adding that in the near future.
My project is just a bunch of linear algebra matrixes in a trenchcoat, which makes zooming easy (from a rasterization perspective).
static scale(x: number, y: number) {
return [
x, 0, 0,
0, y, 0,
0, 0, 1
];
}
The problem is that all the coordinate calculations for the tools (like drawing a square or even selecting an area on screen) need to translate between "screen space" and "world space". To put another way, you need to scale the position of everything based on the current zoom factor and my code wasn't robust enough to do that at first.
I'm pretty sure I left a few bugs in there around grouping/ungrouping logic because that is also impacted by the current zoom factor. Whoops! I'll get to it eventually.
Speaking of grouping and ungrouping, implementing that feature was a major part of my December. Creating a hierarchy of objects that can nest infinitely and supporting the ability to ungroup at any stage is... extremely complicated.
The challenge here is predicting how parents and children elements will need to be repositioned when the rendering hierarchy changes. To accomplish this, I created a concept of a "Render Graph" which can be instantiated outside the main drawing loop. With the power of this graph structure you can simulate different state changes and calculate how they will impact the final position of all the components on the screen.
There's still some work to be done, but I think it works nearly good enough for an Alpha build.
I have a new project idea! I want to create a facebook archive viewer so I can help folks self-host a time capsule of their facebook content (easily). I know a handful of folks who would love to revisit their memories without necessarily supporting Meta. Perhaps a set of scripts or an easily approachable install would be a great middle ground. We'll see where that thread leads.
Regarding ChronoPixel, I'm going to double down on wrapping up my alpha build. Top of the list includes:
I am hoping to get the project in a stable enough state that I can actually release the code and an alpha build and begin forming a community. I'd love to get this project in the hands of others and see what I can do to make it actually useful.
As always, thank you so much for being a part of my development journey and taking some time to read this newsletter. It really means a lot.
Cheers!