Blog

What, Why, and How of gRPC

Introduction When developers start a new software project, they frequently give a lot of consideration to the choice of programming language or languages, frameworks, and persistence tools; however, they often give little thought to how the services or endpoints will communicate. Projects will automatically select REST, or something REST-like for this communication.  There are other options available, each with their own strengths and weaknesses, and one of the more interesting ones is gRPC. What is gRPC? Google developed gRPC as…

How to Diagnose Distressed Development Projects

In recent years, there has been a growing emphasis on diagnosing health issues early to prevent them from escalating into serious problems. This proactive approach has proven effective in maintaining health and well-being, and it can be equally beneficial when applied to software development projects. Recognizing the signs of distress early in a project can help prevent costly setbacks and ensure successful outcomes. Here’s how to diagnose distressed development projects and address their underlying issues. Recognizing the Signs of a…

Getting Started with Burpless: Writing Cucumber Tests in Clojure

No matter how rapidly the world of software development may change, one constant is the need to ensure the quality, functionality, and reliability of our software applications. As our demand for more and more complex applications continues to increase, so does the risk, not only that developers might program something incorrectly thereby introducing bugs, but that they might “correctly” build the wrong thing, due to having misunderstood the requirements! Worse than having bugs is having built something that is not…

An ML tale: From notebook to production

Data Scientists spend their days working in Jupyter notebooks, which are then passed to an implementation team to prepare for production. This post guides you through that process, emphasizing iterative refinement. I will be using the scikit-learn and XGBoost libraries, but other ML libraries could be swapped in. While scikit-learn offers a comprehensive library of algorithms and tools that simplify data analysis and model building, it doesn’t impose a strict framework for organizing projects. This flexibility can be advantageous, but…

Cost Optimizing an ML Feature Store

A client recently started building a new machine learning (ML) architecture with a feature store as one of the key pieces. The feature store was already burning through a lot of money on AWS Elasticache and it wasn’t even scaled up in production yet! The project was in danger of being shelved without serious cost reductions so I was asked to take a look and see what could be done. What is a Feature Store? Simply put, a feature store…

Websockets feeding Kinesis

We recently explored a project to retrieve data from a third-party service. They didn’t offer any push capabilities such as writing to a Kafka or Kinesis stream, or even a web-hook. But they did offer a WebSocket interface, so we explored whether we could use that as our streaming source. We didn’t go that route, but I was intrigued by the idea enough to make a proof-of-concept.

Automate the Boring Stuff with AI

My motivation for creating tools often stems from a desire to get familiar with new technologies. This project was no different; I wanted to deepen my understanding of Generative AI. However, this wasn’t the primary reason for its creation. The real driving force was a persistent gap in my workflow that I couldn’t ignore any longer. Every so often I’ll encounter a task that makes me think, “If only this one thing was more like this,” or “If I could…

A Practical Way to Improve Javascript Code using Dependency Injection

We have all seen endless articles and walkthroughs for implementing The Greatest Design Pattern Ever™. The one failing many of them seem to have in common is that they all assume a user is starting with a new project. It’s relatively easy to set up an ideal theoretical project, and implement a design pattern, but how many of us get that luxury in our jobs?  Many, if not most of us, are stuck maintaining other people’s code, sometimes decades old….

Lambda Four Ways, a Rosetta Stone for AWS

When I write Lambdas professionally, Python is my preferred language. It offers decent performance, a straightforward syntax, and high developer productivity. I’ve also used Java, both in demonstration apps and actual client work. But while I have some familiarity with other languages supported by the platform, I’ve never used them. So, with some downtime, I decided to implement the same Lambda in four different languages: Python, Java, JavaScript, and Go, to get a better sense of their strengths and weaknesses.

Scaling Effortlessly: How Jenkins, Karpenter and EKS Redefines CI/CD

Jenkins has served as the backbone of the CI/CD landscape for over a decade. Throughout these years, CI/CD practices have transformed from jobs executed in companies’ own data centers to those running in the cloud. Jenkins has adapted and evolved throughout this time, remaining a workhorse in the ever-changing CI/CD domain. If you looked at a typical AWS-based Jenkins setup, you would probably see a master Jenkins node running in EC2. When initiating a job, the master node dynamically spawns…

1 2 52

How can we help your company with your development needs?

Contact Us