Something I learned
Python package management hell
In pursuit of modernity, I upgraded the Python version we use at the startup. With it, Pip also got an upgrade. And because I'm modern and smart, I decided to upgrade Pipenv. We use Pipenv to manage our virtual environments and dependencies because it feels as modern as npm. It's weird that npm is a standard for anything, but Pip feels like a dinosaur in comparison.
My God, I can't understate how much of a shit show Python package management is. The virtual environment system is fundamentally broken. I taught Python part-time in a boot camp last year for about 9 months, and virtual environments were the thing every single student struggled with.
To make things even more complicated, virtual environments won't work as intended on my Windows machine unless I use Pyenv. Between that and Pip, running and managing different virtual environments is so finicky.
After the upgrade, I struggled with this while working on one of our lambda layers. I was trying to generate a requirements file from a PipFile and then use the requirements file to create the Python folder using Pip. Long story short, the pipFile has a dependency pointing to our local data-access-layer library, which we write in-house. As part of the upgrade somewhere, the concept of editable local libraries was introduced. I'm not going into detail, but Pipenv added a "-e" flag at the beginning of the local dependency line in the requirements file. Pip took this as not to copy the dependency code files on installation, but to copy the project files???
I have no idea who dropped the ball here, but I wrote a one-liner shell script to remove the flag, and everything works now.
The moral of the story is that in Python land, you have to manage the versions and compatibility of the package managers that manage the versions and compatibility of your packages — oh, the irony.
CPU Pipelining
CPU Pipelining is a fancy way of scheduling and executing more than one instruction at a time per core. As it turns out, some instructions in CPU instruction sets are done in multiple steps and take varying times. These are called micro-ops, and they're what gets pipelined. The laundry analogy made the concept click for me, and I won't do it justice here, so here is a link to someone who explains it better.
Gratefulness
I went to New York this weekend to meet up with six of my high school friends. It's crazy to think it's been 12 years since we graduated. It was such a fun weekend. We got to reminisce, catch up on each other's lives, and just have an overall good time.
It's a blessing to think that I've stayed in touch with so many of my high-school friends. Some of them have known me for closer to two decades now. I'm really grateful for their friendship and the many more years to come.