Just for Fun - April 2025
Starting this series called: Just for Fun. It's inspired by the book Just for Fun: The Story of an Accidental Revolutionary by Linus Torvalds and David Diamond. I'm on my second read of the book. With this series I will describe what I am working on for fun.
The fun project is a resume builder. Here is how the idea started. A couple of years ago, I was ready to look for the next job. I couldn't find my resume at first. I was afraid I wiped it off my hard drive when changing my operating system from Windows to Linux. I ended up finding it, but it was a Microsoft Word file. It should have just been wiped off the disk. Since working with Microsoft Word was such a pain, and I am decent at HTML and CSS, I decided to build a resume that way. I ended up learning Tailwind CSS and made a nice looking resume in the browser.
After landing the next job, I had an idea to make an app to build resumes. This way I wouldn't be worried about losing my resume, it will look good, and easy to update. I set off to make this web app. You punch in your resume data and on the screen a virtual piece of paper in the browser updates as you type. It is pretty slick.
I started running into issues with a specific amount of data. It was resumes with multiple pages. Depending on the information in the resume, a second or third page becomes hard to render. I gave it many attempts to figure out but all the coded ended up being a big ball of spaghetti. I attempted with React, ELM, and Angular. I was pushing the code and I could feel it pushing back with no ideal solution that felt right.

The problem was with the HTML DOM. It is not an ideal way for trying to render the dimensions of paper as HTML. The height of a DIV cannot be calculated until it is rendered by the browser. This requires having call backs on the resize event for all the DOM elements representing the virtual paper in the HTML. After the call back, you have update the model data with the calculated height that was rendered. Yuck!
One day it just hit me. Why don't I just build it as a desktop application. They render graphics so they can render my virtual resume. I ended up using Scala as my programming language since I use that for my day job. I paired it with JavaFX as the desktop application framework. This concept also solved some other issues I had which were not related to the rendering of the resume. I started on this adventure.
The biggest leap forward was when I started learning about typography and learning how to calculate the resume design with a layout grid. I was able to calculate the height of all the elements for the resume before rendering. This removed the callback hell from resize events in previous projects. I also decided to start smaller and just render some boxes of alternating colors instead of text. This allowed my to prove that my idea was possible with less complexity. I was able to render several pages with the elements moving to the next page when there was no more space. It was exciting!
This project has taken me all over the place. It has inspired me to learn so many languages and frameworks. It's also opened up the world of typography to me. I have currently started to learn Clojure and LISP. I stumbled upon a video about it and was sold on it's powerful REPL. We will see if my next update has some Clojure in and what fun it may bring.