Frameworks, Libraries, and Learning Curves
I've been quiet recently as I've both been prepping for a personal hobby project and putting a customer project to rest. On the work front, I was dealing with a combination of limitations in Amazon's built in VPN and the fact that the IBM environment we were trying to connect to overlapped the VPC. Namely, we needed to do NAT translation across the VPN, and Amazon doesn't do it.
OK, fine, spin up a Fortinet instance, or a mikrotik instance, or even just an ubuntu/etc. instance and install OpenSWAN, and setup IPTables. Easier said than done when you're trying to figure out why your traffic is going into a black hole and IBM won't let any inbound connections so you can't do troubleshooting from both ends. I ended up starting up a separate VPC to figure out how I had to have the combination of instance firewall rules, AWS Security Group rules, and interfaces/Elastic IP's set up to get traffic to flow. I also had to deal with the fact that a critical step in setting up an instance that could pass along VPN traffic as opposed to a standalone piece of hardware was left out of most instructions on how to set up a site-to-site VPN, even those dealing with EC2.
On the personal/hobby front, I've decided to knock some rust off my programming skills. This isn't a "looking for work" project. In part I want to make sure I understand the current state of HTML/CSS/frameworks, but mostly I want to have a small, reasonably scoped and completable project to practice programming.
The hangup with that is less python vs javascript (node.js), but the fact that if I want a deployable app with a workable web interface, I either need to spend a bunch of time coding interface elements from scratch in javascript instead of the core app itself, or rely on a framework that already provides hooks for connecting to a database, moving things around on the page, reloading data, etc.
Frameworks and API's are great. Without them, every time you wanted to present a list in a window, or click a button, or remove something from a list, or anything we're used to doing, you'd have to write up the respective code from scratch, or find examples of that action and piecemeal them together. Without them, the standard window presentations we see in most Mac and Windows apps would simply not exist. The time invested in them is justified because of the time they save.
Nevertheless, one can still easily spend more time learning the framework needed to make an application interactive than one does learning the core language. Worse - there's a much steeper learning curve, because almost any practical app is going to call on a number of those features.
The project? I'll be starting with a character generator for Classic Traveller and / or the core Cepheus rules. I'll likely bolt on additional rules for High Guard, Mercenary, Scout, and so forth as that's mostly a matter of additional skills options and not a fundamental change in the procedure. While this doesn't require fancy presentation or drag and drop lists it will still benefit from live updating without reloading the page, and will need backend portable datasets of the various options for character generation, and I'm leaning toward MongoDB as it has hooks for python-related frameworks as well as node.js ones such as Angular and React. I'll also need to make sure it's proof from database injections (security) but we're not looking at saving completed characters or such that requirees user authentication.
Once I have it to the point of both auto or interactively generating characters I'll take a closer look at the Cepheus or Classic Traveller ship design rules. That will certainly benefit from some form of drag and drop in-page interactivity.
I'm starting with Python and Flask, but want to also get up to speed on javascript/node.js. While I'd appreciate a more batteries-included approach like Django so I can waste less time setting up the various pieces needed to make a full app stack, Flask has hooks more readily available for Mongo-style "NoSQL" databases, which then allows me to port the first project to NodeJS at whatever point I'm ready to. I can use the existing algorithms and structure to simplify the porting, though I have to be careful of how different languages have different standard paradigms and patterns. That will allow me to concentrate more on re/learning Angular and Javascript than on how the program logic works.
I don't need a fancy app like Gmail. I don't want to spend a bunch of time learning that vs focusing more on the language and how to make the program itself behave. so the scope of the apps is relatviely limited, and the choices are towards minimizing how much I need to learn at any step.