Parts of this blog, including the code examples and architecture frameworks, were generated using Keyhole Software’s EnterpriseGPT web clientโan open-source tool that empowers organizations to deploy user-friendly chatbot solutions with ease. Interested in exploring further? Contact our team, and weโd be happy to provide credentials for you to try it out. The Rise of Python and Other Languages Weโve seen …
Recording & Communicating Time in Software
When I first started writing software to handle time, I went into it with a naive perspective that it couldnโt be that hard. After all, itโs just time, and Iโve understood how that worked since elementary school! It took my first daylight savings time transition to disabuse me of that notion. I began daydreaming that one day all systems would fully run on UTC and people would adapt to that as a standard.
No more writing code to handle time zones in different regions. No urgent time zone library updates to account for new government legislation around daylight savings time. Being able to add and subtract time without having to account for crossing time zones…
It sounded great to me at the time, and sometimes when Iโm neck-deep in tricky code, I feel that way still. In calmer moments though, Iโve learned thatโs not a philosophy that serves me. When I talk to people about my birthday, a holiday, or give vague time measurements like โtwice a dayโ or โfirst thing tomorrow,โ Iโm not speaking to them about timestamps. Iโm conveying an idea that just happens to involve time. Time isnโt just a number; it is communication that is tied to our days and nights and the lived human experience.
A good software product handles, records, and displays time accurately. A great piece of software captures, stores, and displays time and date information in a format that conveys the full idea to the intended recipients. Good software works; great software communicates.
Your Keyboard as an Output Device?
Though we don’t really see as many of them as we used to, they are still with us. One helps indicate if a 10-key is in number or cursor mode. Another helps show when we use capital letters without holding the shift key. You might even have another to show if you accidentally hit the scroll lock key. I’m talking of course about keyboard state indicators.
Most people only think of a keyboard as an output device, but given that it has a changeable state, it most definitely can be used for output as well! Unfortunately, producing meaningful output using a keyboard state indicator (beyond their intended purpose) is rather tedious because they only have two states; the indicator light is either on or off. And to convolute things further, most keyboards these days donโt have many indicators in general. For example, the very keyboard I’m typing on only has a caps lock indicator! Thankfully, there is a well-established encoding that requires only one “bit” to be useful: Morse code!
In this article, I will show how I approached the development of a small utility to output Morse code on the caps lock LED. Even if itโs impractical, I wanted a challenge, and I had fun working through it. Though I’m certainly not an expert, I used the C programming language because I figured it would be the simplest approach.
I hope it is as clear to you, the reader, as it is to me, especially since I tried to make this as simple as possible. And don’t worry if you don’t have a caps lock indicator, either, as we will display the Morse code, too.
Optimize Frontend Deployments with Module Federation
Itโs time to release your latest front-end changes to production. However, as you create a new tag, you notice a large number of commits unrelated to the feature youโve been working on. Now, instead of simply kicking off your deployment and watching the pipeline run, you need to check with numerous developers and managers to ensure you donโt deploy any …
Legacy Code Automation with AI: Building a Solution
This blog post serves as a thought experiment, delving into potential solutions for a pattern I have noticed on projects throughout my career. As a consultant, I work with many companies, each with unique ways of organizing and handling software development. However, throughout my career at Keyhole and elsewhere, Iโve noticed something that seems to be consistent across all dev teams: the existence of legacy code.
Legacy code can be frustrating and time-consuming to work with, so I used AI to create a solution to mitigate the hassle. While other solutions may already exist (and some may be more efficient), I found the process of creating this tool expanded my understanding; it really helped me grow as an engineer.
So, Iโm using this blog post to share my process with you! Let’s dive into how AI can assist in improving application design (specifically legacy code) through automation.





