Apps I'm Taking into 2025
It’s been a struggle to find the time in the evenings to write my annual application update. Sadly, I fell ill during the December holiday season and was unable to do much of anything for several weeks. This week of stillness is unfortunately the very time that I use every year to reflect on my growth during the previous year and make projections about the year to come.
Here’s a set of applications that I’m excited to take with me into the new year.
Proxmox
I’m in the process of moving the applications that I’ve been running on separate hardware (Raspberry Pi 4 units) into a virtualization environment. I’d like to repurpose the small form-factor hardware for entertainment system around the house.
I was fortunate to be gifted a fully-functional 2U Dell PowerEdge R520 in 2024, but I’ve been slow to make progress on the migration project with my increased focus on development projects at OPLIN. Even so, I’ve taken several evenings to set up this new-to-me server and install a type 1 hypervisor to leverage the complete potential of the underlying hardware for my fleet of virtual machines. It was an easy decision to run Proxmox on top of the bare metal. So far, I’ve been extremely pleased with the stability and feature set available on the open source product without purchasing an enterprise license.
Over the course of this year, my plan is to explore the landscape of open source media servers. A few applications I’d like to spin are:
- Audiobook Shelf for self-hosting audiobooks and podcasts
- Emby and Jellyfin for streaming music
- Kavita for storing and accessing digital books, epubs, and PDFs
Libraries/Packages
My current development uses Python as the foundation. As the smallest unit of a Python project, modules contain various functions, classes, and utilities to support the overall project’s needs. A library is a collection of modules that perform a set of related operations. Most projects rely on some third-party libraries to quickly implement shared and common functional needs in a standard way, without the need to reinvent the wheel with every application. A package is a unit of distribution. The Python Package Index (PyPI) is a major repository of libraries, modules, and binaries available to the Python development community.
These packages definitely worth checking out:
Name | Function |
---|---|
Arrow | Python Dates & Times |
Great Tables | Journalistic Tables |
uv | Python Packaging |
Pillow | Image Processing |
Selenium | Web Testing/Automation |
DuckDb | In-Process Database |
Uv is a command line tool for managing Python virtual environments, interpreter versions, and one-off binaries. It’s been an absolute game changer for me. I’ve been using Poetry to manage my Python environments and dependencies for the last 5 years, but uv eliminated some of the challenges that I was experiencing building project dependencies. Uv will replace several command line tools in my daily toolbox.
As the largest unit of a coding paradigm, a framework is a set of libraries that provides a pattern and overall architecture for developing a software program. I’ll next move on to my chosen framework for any new web-based Python project.
Django
With the excitement of my new roles as a software developer, the enticement to investigate a wide spectrum of applications to wire together proved to be the path to a false start. As a solo developer with several responsibilities outside of writing code to add features to custom apps, there are trade-offs to using the best-in-class solutions for every problem. One is the scaling the complexity of the overall solution. As the application matures, troubleshooting performance issues or a feature bug can consume unnecessary hours that would be better spent elsewhere.
Enter Django.
Django provides a suite of common web-based app functionality out-of-the-box; such as: a generic user model, authentication, pluggable middleware, an ORM system supporting multiple relational and non-relational databases, and a broad community of engagement with varying domains of expertise. Django’s documentation is robust and readable. And although there’s an initial learning curve with any web framework, the flexibility and completeness of the built-in features allow for repurposing from one project to another.
There are many, many awesome third-party packages available from the Django community too. Once the basics of working with Django and it’s ORM are absorbed, rapid prototyping of varying applications will exponentially increase. Some of the third-party party packages I’m currently investigating are:
- Ninja - streamlines the implementation of RESTful API services
- Environs - configuration section of the 12 Factor App
- Simple History - auditing and reverting model changes
- Whitenoise - serving static files from WSGI/ASGI, i.e., without Nginx
- Allauth - simplifies integration of OIDC/OAuth providers
- Tasks - forthcoming background workers without celery
Until next time 👋🏻