~/ $ whoami #
My name is Nic. I’m a nerd of the 80s and 90s and started on a DOS computer writing QBasic, customizing autoexec.bat and config.sys files, playing everything MicroProse, X-Wing, Star Control II, the SSI Goldbox games. Built computers with summer job money, hosted giant LANs, etc. I went to college for Linguistics at the recommendation of a family friend that worked in banking software. I have a core memory of them saying not to go to school for computer science because you’d just come out four years behind everyone and need to be retrained. Linguistics was AI adjacent at the time and I liked languages so it seemed like a good fit, I particularly enjoyed rhetoric and discourse analysis and the fact that the discipline was niche with a small and rather close cohort.
My first official gig was working in a computer lab for a high school district, which turned into a 12 year career moving from tech support to district analyst. I wrote a grade platform used by all teachers, students, and guardians from scratch through a combination of Python, later some Go, and JavaScript. At the end I was regularly hitting 30,000 MAU for about $400 a month on AWS and later less on GCP. I was basically given free reign to solve problems which gave me insane opportunities to experiment. My goals were always to find high time consuming tasks and beat them to death with automation, often polling teachers and department heads to find out where they felt they were wasting time and destroying it for pennies a month in compute.
Eventually I started to butt up against government bureaucracy and corruption in a way that shook me so hard I swore never to work for government again. This lead me to strike out into the private sector with the satellite manufacturing and data analytics company that I work for now. I was able to add writing from scratch and certifying both an ISO 27001 and 22301 management system to my resume as well as apply what I’d learned and build experience automating and problem solving in a high compliance environment.
Tools #
Vim #
One of the first real tools that changed everything was vim. I remember attending PyCon for the first time as a relative newbie and attending one of the paid for classes. The class ended up being more JavaScript than Python so I couldn’t even tell you what the class was about, but holy crap did I recognize the hipster running the class using vim to edit code. I remember having my mind blown not having a clue that vim could do what was being done on the projector at the front. I forced myself from that point to do as much editing in vim as possible while learning as much as I could about how to actually use it. Now it’s a core tool that I use nearly every day. Sure development has moved mostly to VSCode, but you better believe I have vim mode enabled. There’s just something about vim that makes text editing entertaining, which I know probably sounds weird, but it’s honestly a joy to use and has saved me probably thousands of hours at this point.
Python #
Way back in the beginning of my programming language journey I decided to make a choice between perl, php, and python. The deciding factor was going to be a client server app where messages typed into the client would show up on the server side. I eventually got the perl and php applications to work, but it took days of reading and troubleshooting at that point in my journey. I remember that python had been a recommendation from a buddy of mine at the time, so I opened up whatever editor (pre vim) I was using at the time and got to writing, following documentation and moving along. When I hit run, it worked. First time, no errors, no bugs, just did exactly what I wanted it to do. That was probably more than 15 years now and thousands and thousands of lines of python ago.
Now python is still a huge part of my toolkit. Sync middleware, command line tools, reports, small internal web tools, ETL, quite literally anything that’s back office automation or IT related I still write in python. It’s just easy and fast to write and the ecosystem is impossible to beat.
Jupyter (Formerly IPython) #
I attended a paid class at PyCon one year that was run by Travis Oliphant. He was revealing some beta version of the IPython Notebook, a web based version of the IPython repl that allowed you to write and run python in block format in a web interface. I can’t recall the version but it couldn’t have been v1 and it was years before what we all know as Jupyter now. I remember being floored and it has been a core part of my IT toolkit since that day. Most people believe it’s a tool for data scientists, but it’s utility doing data exploration for synchronizing systems, reporting, API exploration, learning new modules is unparalleled.
Today in it’s modern incarnation as Jupyter Lab, it’s a self documenting playbook of one-off reports, API tests, you name it as well as a rudimentary text editor and web based terminal host. If you’re in IT and you’re not using Jupyter notebooks, you are seriously missing out. It’s not just a data science app, it’s a killer IT Swiss army knife.
Golang #
At one point in my programming career in education I remember facing a green field project. At this point I had written dozens of tools and half as many web based internal tools so the first thing I did was set up a python stack with flask, gunicorn, celery backed by redis and I just stopped. I looked at the complexity that I had just willed into existence and a quote from one of the many PyCon talks I’d attended floated up in memory. “Magic systems fail magically.” I stopped and told myself there had to be a better way.
I spent the next couple of days doing research trying to find out what other people were doing to host production ready first class concurrency systems. At this point nearly every problem I was facing was dealing with student records. 20,000 students each with an average of 6 classes, lord knows how many assignments per class, 4 quarters of grades, 2 guardians, teachers with their own classes, etc and everyone wanted everything now. Concurrency had been my bane up to that point and I needed something else. This rube goldberg python stack just couldn’t be the answer. Queue Go, I think at the time version 0 rc 9 something? Definitely not version 1 though.
I ended up writing a service as an add-on to a compute heavy API I’d written in python and marveled at the build and deploy anywhere single binary, complete with an amazing and easy to use concurrency model and a built in production ready web server. I was sold from day one. Since then nearly every personal project and every professional project that’s needed concurrency, performance, small size (killer docker cold starts), or cross platform deployment I’ve written in Go. It’s an absolute joy to work with and even though it doesn’t quite have the ecosystem of solutions that python does, get’s me there 9 times out of 10. It’s also super fun to read and write, which I expect not everyone will understand.
JavaScript #
These day’s you can’t get away with working with at least a moderate amount of JavaScript. The flavor of poison that I’ve picked out is Vue for my front ends, simply because I like the small footprint and the way it’s built feels similar to the backbone.js and rivets.js I used to use way back when. I won’t claim to be an expert, but I know my way around a decent frontend for my Go APIs and love messing around with Phaser.js, D3.js, and Three.js. The immediate feedback is fun and I’ve written quite a few toy graphics apps and a couple of games in JavasScript.
Honorable Mentions #
- JSON, because you have to.
- YAML, because you have to.
- Terraform, because you have to.
- Docker, because you have to, and it is actually a really great solution to the problem it’s trying to solve. This one I like, just don’t have much to say on the topic.
- Ansible, because I work in IT and bash scripts really, really don’t cut it.
- A metric bajillion CLI tools including but not limited to ssh, screen, awk, sed, cat, csvkit, jq, yq, curl, wget, |, », >, 2>&1, cd, ls, find / -type f -delete, etc, etc… I live in ssh screen sessions and nix terminals. Everything is a file and pipe all the things. It works, use it. No you probably can’t make a better one, but doing so would be a great learning exercise. Yes the old people maintaining 40 year old software knew what they were doing.
- 2019 AWS Solutions Architect Associate
- Use sqlite. If you scoffed at that, use PostgreSQL.
- rclone is one of the greatest CLI tools ever made. You can thank me later.
- Don’t write an html parser with regex
- I said don’t write an html parser with regex
Why a Blog #
I enjoy writing and a blog is a good place for me to present my thoughts on the topics that I’m interested in. I read or heard somewhere that we all contribute to the collective experience of each other and as a result, what you think or feel is likely to be valuable to someone somewhere. So maybe someone somewhere will read something here that helps.
I’m also a firm believer that attempting to teach a topic to people, even if it’s to the vast amorphous masses, advances your understanding of the topic. I want to be constantly improving and expanding my interests and there comes a point when you must attempt to convey what you’ve learned to others to achieve that improvement. Win win.