It's been a few months! I've been busy working on some home repairs. Some plumbing, replacing a “Pressure Reducing Valve”, and the expansion tank for a water heater. We have also been working on tiling the walls in our kitchen, as well as replacing the cooktop, sink, garbage disposal and microwave. The induction cooktop is quite nice compared to the electric one we had before that was from 2007 (the year I graduated high school). If you are in the market for a new cook top, and can afford an induction one, I recommend it.

In other news I will begin the PhD program at Robert Morris in less than 2 weeks. I am quite excited and have been working on putting together my 3 introduction slides to present to the community there.

Lastly, I don't think I have mentioned thus far, that we are expecting our first child! The due date is in January, and we are anxiously awaiting their arrival.

Anyways, now time for some technical talk. I made this post on LinkedIn a few weeks ago, and intend to expound on it a bit.

Here is the original post:

This summer, alongside various home improvement projects, I spent a few days porting my personal website to docker and nginx setup. Some folks have asked me in the past how I set up my portfolio page ( http://bee.engineer ). This website has been quite an evolution over the years from about 2008 when I was working on my BS in Graphic Design. The website initially started as a adobe flash actionscript application which emulated the Macintosh user interface. Flash got depreciated and I then ported the website to HTML, and now in its current iteration it is a React/Next.js application that only serves as a front end user interface. Throughout the years I also utilized various hosting philosophies, primarily using "shared web hosting", and some flavor of CPanel - a pretty easy way to host static HTML pages - which you can generate from a Next.js project if you are so inclined. This approach has worked great for years, the web hosting company provides and configures an apache instance and I can change things quite easily through CPanel. However, shared hosting can cost a fair amount of money, especially for a pretty simple webpage. Usually the first year or so is pretty cheap($2-3 a month), then afterwards the price nearly doubles. I have a similar contract which expires within the next year. In the past, I would change hosting companies to exploit these promotions. The project this summer has been to end this song and dance, and I have achieved a cost effective solution which maintains that cheaper window, give me more control, and foster better mobility between providers. The solution, for now, has been to build a docker container for each piece of the website/application (as the portfolio website is a website of websites), and stand an nginx container in front of them to route the requests. Instead of shared hosting, I have found a fairly cheap VPS to deploy my containers to. This post is getting quite long, and perhaps I will write a blog post with more details about building such a website. Anyways, the next step is to get Let's Encrypt involved with some automations to issue and respond to requests utilizing SSL certs - much like we did during the capstone project last fall. Thank you for reading!

I also had an image along with the post...I will loosely translate it to text, as adding images here add's another complication

┌───────────────────────────────────────────────┐ │ VPS │ │ ┌─────────────────────────────────────────┐ │ │ │ Docker │ │ │ │ ┌─────────┐ ┌────────┐ │ │ │ │ │ Nginx │───▶ │ App1 │ │ │ │ │ │ │───▶ │ App2 │ │ │ │ │ │ │───▶ │ App3 │ │ │ │ │ └─────────┘ └────────┘ │ │ │ └─────────────────────────────────────────┘ │ └───────────────────────────────────────────────┘ ▲ │ User

I used ChatGPT to generate this ASCII art, as my attempts looked promising, but failed in practice.

Basically, I have a VPS with docker and it has a docker-compose file which builds an nginx container, that takes all incoming requests, checks the headers to see which domain they are trying to get to, and routes the request to the container holding each web application.

Each web application has its own docker compose file, which builds each application.

I worked on this a while ago, and some of the next steps are migrating this blog page over, and actually incorporating this blog into my website. I also need to work on the SSL portion, though none of my sites aside from this blog, which gets its own SSL cert, actually accept user data, so SSL is probably overkill, but its nice to see that lock in the top right corner of your browser.

I've continued my path of learning C++ as well, and am working with makefiles and trying to understand CMake and all of the capabilities. I think C++ is a great language. Header files seem like a great way to learn a libraries interface without trying to figure out what each function/class do, assuming the names are easy to understand. Templates and Template metaprogramming also seem very interesting. I am wrapping up reading “Effective C++”, and have been toying with a calendar application. I would like to eventually make it a web application, and might be bringing a fire hose to a water gun fight. Most internet sources do not recommend using C++ for such tasks and instead something like Python, Go or Ruby are likely better fits. But my previous experience building a web app with Rust really helped my understanding of how the internals work, and I think that is valuable experience. Plus I am learning C++ and want something to work on so why would I use another language?

Anyways, next time I might have some info about SSL and Let's encrypt, or porting this blog (Writefreely) to a docker container.

Thanks for reading!