Crossroad Development

two roads crossed to make an X

Great Ends and New Beginnings

2025-01-05

In this new year I am walking in with a new degree and technical certificate from Arkansas State University Mountain Home. To be sure, I have learned a great deal of technical and soft skills obtaining the Associate of Applied Science in Programming and Mobile Development. However, I don’t have a great deal of the projects or “artifacts” produced from this course published to my GitHub or well documented here on my blog.

This presents a great opportunity, so I have decided to try and publish one post a week detailing an essay, project, or skill that I picked up in my course work. A lot of times, experience in one system can reflect and allow for a greater level of comfort in new projects. For example, one class that I was intimidated by at first was the .NET class. After exploring exactly what we were learning in the system specifically building an MVC application with a SQL database to run a movie rental admin tool, it was just a matter of learning the patterns. MVC or Model View Controller is a common way of splitting up application code and your mental model of your project. So, more recently when I began dabbling in Phoenix and Elixir, finding the right code to modify the API’s behavior was clearly in the controllers directory.

That might be a good idea as well, maybe include something in each post on how this has helped as a background in researching more current projects or day to day operations. And even a better idea, I will leave an enumeration of what I currently have in my backlog, as these are just hobby projects or what I can get done after work and social obligations are met.

The least consequential being my home server. Most recently, I have installed a fresh copy of Ubuntu server and I need some more physical improvements before it can be installed in the garage. The placement there is for proximity, because not only do I want to use it as a homelab like to have a stable dev environment like a dedicated Postgres DB and compile open source software, but also I want to run my 3D printer with Octoprint. I don’t want to put too much of a workload on it, but it would be great to be running my own DNS resolver and pi hole to block ads. Basically, there is a whole laundry list of things this server could do for me, but none of it is mission critical. Classes that have and will help me here include the Linux+ course and I think it was the backend development class that had some introductory information on Docker. That’s going to be the secret sauce to managing all the ports and services, while keeping their infrastructure from interfering with other services. This might be another good use of a reverse proxy with Nginx as well, as I would like to have various services that all think they should be the public port 80 of a machine reporting to the host OS as different internal ports. If I’m not mistaken those should be able to be mapped to different routes. Also using a local DNS resolver means I could make local domains for my server like in the packet tracer application we used in Cyber Security.

Another minor project is a fork of the MUD color picker, codename “Fifty Shades of MUD”, for use in a different MUD than the first iteration, where the xterm color codes are terminated differently. I made this project originally for a friend who was visiting old multiuser dungeons he played as a youngster, an all text based world of Star Wars. He provided me with an SVG color chart that showed the color in the background, the hex value of that color, and the xterm three digit code that correlated with one of the 256 available xterm colors. Basically the game when assigning a name to an item for instance would allow you to color the name’s text “&000Hello” for instance would be Hello in all white characters. The tool I made was an exercise in data types and the manipulation there in. Working with strings and arrays etc. It was a fun project, and gave me an excuse to try Daisy UI, as recommended by fireship, and in order to use that also I had to pick up Tailwind. This new fork is just different enough I don’t think I could easily make it a drop down option like I did for the prefix of the code to be a # instead of a &, this change encapsulates the text {TextHere|256} like so. I think this could be a good place to learn some git commands and really become comfortable using git in the terminal.

A more serious project that I should prioritize is building an infrastructure and then a web application for Ragnawok, a local business that I’m a partner of. One of my recent pursuits has been to learn Elixir, because I have heard and affirmed with research that it is a fantastic language that allows for scalability and by many other measures is amazing. Several major tech companies have solved their problems of scale by using it such as Discord and Twitch. Not to think that will be a problem here, I was just satisfying my curiosity. Therefore, I have been trying to learn the basics of making a basic API server, that way, I can set up a web hook with Square to send order details to the API ever time an order successfully is placed. Just to keep some obfuscation about this system, two big problems I plan to solve is storing order data in an easily manipulatable and reachable location like a database and a more permanent backup file that administrators at the company can also access like a spreadsheet. The other goal is possibly a digital ticketing system to save money on thermal paper and allow for a more streamlined kitchen flow. After that backend adventure, I really need to flesh out a front end for their web presence and build a web app that allows customers to place online orders. You can see why the digital ticketing system would be integral to the online ordering system of things. So far, I’m just taking it one day at a time and learning this new world. Elixir is such a shock to the system because it is not only a loose typing system, like I’m used to with Javascript, but a functional style of programming that challenges your previous assumptions on problem solving with programming. Somethings like not having mutable data structures can be frustrating, but think of it like the first time you learned about function scope, it was a barrier that frustrated you, and it should “just work.” Well, you probably found out that function scope was a tool, that allowed for not just organization but overloads. Oddly enough, some important background helping me here was my experience learning Python in our Object Oriented Programming course. Mostly, allowing myself to unlearn what is the “right” syntax, and allowing a language to play to it’s strength has been a great reminder when I have struggled. I tried doing the Advent of Code this year even in Elixir and only got to about day 4, read the problem and realized I would need to figure out how to do 8 way matrix traversal to programmatically solve a word search and said yeah the holidays are too taxing to do both.

Comments