Blog
I picked up the book Fundamentals of Software Architecture and have been reading through it. I had also read Clean Architecture last year. So, thoughts about software architecture have been on my mind as of late. I decided I would jot down some thoughts from the books. What's Software Architecture I like how the Fundamentals of Software Architecture defines a software architecture. Most definitions I've come across deal with structuring the software into components. While…
I've been working with Docker for close to 4 years now. My first project was a React application that I needed to deploy an on-premsis server. I was fairly new to containers, so I decided I'll just install it on a Linux server and see what the fuss is about. Once I had something working, I was hooked. They just made life so much easier! While it is very easy to containerize applications, there are a few tips and tricks I've learned over the years that really make Docker much…
Over the New Years break, I built a little console app to help with my new practice of engineering daybook. Engineering daybooks are the practice of documenting what happened in a work day. If you have read the Pragmatic Programmer, the practice is discussed in Topic 22. It has also be an very long time since I've just written a simple console application, so I wanted to see what's available in the latest version of .NET and NuGet libraries. Engineering Daybook I started…
I keep finding new little gems in .NET 6. The latest was the DateOnly and TimeOnly structs in .NET 6. Previous to .NET 6, time was typically represented as a DateTime, a DateTimeOffset, or sometimes a TimeSpan for intervals. DateTime and DateTimeOffset worked, but there are odd situations where you need to represent just a Time or just a Date. Trying to represent a Time in a DateTime can lead to all kinds of odd situations. Is one DateTime UTC vs Local, etc? What if I just…
Why is estimating in hours so difficult? I often wondered this as I sit and am required to put hours on tasks. I had been formulating ideas on this, and these are the conclusions I've come to so far. I've been reading some select chapters from "The Mythical Man-Month". The book has some key conceptual ideas behind estimating that are still relevant nearly 50 years after it was published. However being 50 years old, there are also some chapters that are very antiquated and…
The GA of .NET 6 is right around the corner, I've posted some articles in the past about upcoming changes I'm looking forward to. While there are a lot of major improvements that get a lot of attention, many of the smaller improvements get pushed to the wayside. One small change that I really like is the new PeriodicTimer class. Previously Timers in .NET revolved around a callback interface. System.Timers.Timer had a event which an event handler could be added that would be…
Today I updated to Windows 11 on my laptop. After an hour or two of use, this is a blog post on some first impressions of things I've noticed. Three Things I Like There are a lot of new things in the OS, these were some initial things I just appreciated as I've been working on Windows 11. Maximize Button Shows Layout Options Hovering over the maximize button now gives you the option to the window in a particular layout. Snapping a window along the edges of the screen has been…
I've been a fan of Docker Desktop for years. Docker compose was my go to for developing multi-container applications locally. However, while it was polished there was always a gap between building docker compose files and then running it in Kubernetes. Docker had done things over the years to simplify this, but I wanted to automate more of my local development experience. The recent changes to Docker Desktop's Licensing model started me on a search to see what other tools are…
Many software projects enlist the amount of complexity that requires documentation. The primary reason for the documentation to either aid external users on how to use the project, or to document the internal complexities of the software for other developers. While commenting code and public interfaces can help, it's sometimes helpful to include extra details about how an application is built for other maintainers. There are many tools to write documentation, keeping the…
APIs are everywhere! APIs are one of the basic building blocks of modern software architectures. With the proliferation of HTTP based APIs, facilitating API consumption with minimal effort becomes crucial. The bridge between programming languages and APIs is to use a programmatic API specification that defines the contracts of the API. From there, utilizing tools to read that specification to generate an API client. When utilizing a single language, it's sometimes possible to…