Beware the outdated SDK: A cautionary tale of broken websites
Your site has gone down. Users are contacting you for support, but you have no idea what could be causing the issue. Mild panic sets in. This scenario is all too common, and recently, I also encountered this issue. It turned out that the problem was not in the code I had recently written; but in my failure to realize the software development kit (SDK) I was using was deprecated. This article will explore the risks of using an outdated SDK and provide tips to avoid its pitfalls. So, what exa
Unleashing the Plumbing Superhero: Fixing a Memory Leak caused by Emotion, Chakra-UI, and Dynamic Props!
This blog post explores a memory leak caused by Emotion, Chakra-UI, SSR, and dynamic props in web development. It covers their significance, impact, detective work, solution, and impressive results.
What I learned about network programming with Kotlin/Native
A note to preface: you can find the project repository here. The origin story After a while developing software in Java, I was intrigued by all the praise of Kotlin and also interested in Kotlin/Native as a way to develop applications that don't require a VM to run. Inspired by this Golang implementation of traceroute, I settled on trying my hand at implementing traceroute with Kotlin/Native. tracerte is already available on every operating system, so why the hell would I rewrite it? Good qu
Strengths & Weaknesses of GPT-3 for Enhancing Developer Efficiency
In this article, we will explore the usefulness of GPT-3 for developers by examining its performance in handling three common challenges that they may encounter in their work. These challenges include generating new code, explaining unfamiliar code constructs, and deciphering unusual error messages.
Setting up Integration Tests for a Django backend & React frontend
With a React frontend, Django isn't responsible for the frontend and doesn't know how to start the frontend process. This causes the tests to fail due to there being no frontend to interact with. To fix the failing tests we need to have the frontend running when running the integration tests.
Integration Testing NestJS APIs with a Test Database
Unit tests for APIs can sometimes provide little to no value, so the next logical step is often to write integration tests. You don’t want to touch live data though, and want tests to make assertions against actual (un-mocked) service logic. The following is an approach to do just that.
Dependency Injection for Type Script AWS Lambdas
We talk about Microsoft's dependency injection package TSyringe and its different dependency scopes. We explain how to use resolution scoped dependencies over transient, singleton, and container scoped dependencies to limit the scope of a dependency to a single lambda invocation.
Introducing Web Blueprint - Our Practices for Web Development
This week we released a Github project called web-blueprint that documents our practices and opinions on web development. If you're a prospective client or hire, our hope is that you'll learn a little bit more about what web engineering at Rocket is all about.
Marketing Analytics with AWS and Power BI
We recently completed a project with one of the largest affiliate marketing consulting firms in the US which turned out to be a great success for everyone involved. We asked one of the lead consultants on the project, Jason Lombardo, to answer a few questions.
Organizing AWS microservices with Python, Serverless, and namespace packages
Our project began with a small ask: build a small Python back-end using AWS Lambda and API Gateway (with just a handful of endpoints to support a few pages) and use Serverless [https://serverless.com/] to manage the Cloud Formation setup. Not very involved, not much code, not even much configuration for the deploy. Next came authentication. In pursuing the joint dreams of DRTW ("don't reinvent the wheel") and WALCAP ("write as little code as possible"), we selected AWS Cognito over other opti
iOS Accessibility: Dynamic Type
Nowadays just about everyone, everywhere, regardless of age and ability, uses a smartphone. With that in mind, it’s more important than ever to consider all the different ways to make your app accessible to everyone to ensure an inclusive experience. In this series, we’ll be discussing different ways iOS developers can make their apps more accessible. First up, we’ll be talking about Dynamic Type. Dynamic Type is a feature on iOS that enables the app’s content to scale based on the user's
Create a Rust web service, from zero to cloud
This tutorial will describe how to... install Rust, create a new project and manage dependencies, Set up a simple web server, and compile the app and deploy to a virtual server. I'll be working on Ubuntu 20.04 but most of the setup should be the same on macOS or a different flavor of Linux.
GitOps with Terraform, Terragrunt and GitHub Workflows
In this post, we'll define GitOps, review a sample Terraform app module repo and an associated GitHub Workflow to lint and version the module repo, and review a sample Terragrunt live repo and a GitHub Workflow to apply infrastructure changes.
Securely Storing Data on iOS
Our mobile devices and the apps that run on them have a unique insight into our lives. We use them for communication, entertainment, shopping, photography, navigation, and myriad other purposes. Consequently, apps have access to a great deal of information about our preferences, our contacts, where we go, what we buy, and who we are. As app developers, we need to be cognizant of the information being handled by our apps and to safeguard it accordingly. The protection of sensitive information is
Heroku Review Apps with Automated Custom Domains on Route 53
We were recently transitioning a client to use Heroku build pipelines for their Next.js project that handles most business logic through an external API, including authentication and cookie handling. This pipeline uses Heroku's review apps [https://devcenter.heroku.com/articles/github-integration-review-apps] as well as separate instances for staging and production environments. The client handled their domains through AWS's Route 53 [https://aws.amazon.com/route53/] DNS service. Pointing thei
Compliance in Codebases - How to Use Clang LibASTMatchers for Compliance
The following article was created from a 2021 CppCon talk given by Jonah Jolley. One of our clients has a software product that must comply with federal regulations. For them, they must submit technical documents to a governing body. However, in their case, the codebase didn’t accurately reflect what was documented. This led to an unmitigated, unsafe condition. To solve this issue, we used Clang LibASTMatchers to check the codebase and ensure they were indeed compliant. Why Compliance in Cod
State of Swift WebSockets
Apple delivered several exciting and innovative new APIs for developers at WWDC this year. You might have heard or read about the SwiftUI and Combine revamp, but I want to address the new world of native WebSockets! The historically complicated connection protocol is now delivered as a first class citizen! Before we dive in on how awesome this is, it's important to have a basic understanding of Sockets and the road we've traveled to reach this point. What is a socket? By definition a socket is
Speeding Up Docker Development on the Mac
Docker is a helpful tool for both developers and ops. It can simplify both the development of an application as well as deployment and management of it. In this post we are going to explore a common pitfall related to developing an application in Docker on the Mac and see what we can do to mitigate the issue and work as productively as possible. Developing in Docker Developing in Docker has a number of advantages over developing directly on your Mac. Before we begin, let’s remind ourselves of a
Practical Tips for a More Performant Airflow
Properly configuring and tuning your Airflow deployment to be generally performant can be a nontrivial endeavor. You can easily shoot yourself in the foot if you don’t do it right at first. You’ll discover and experience sporadic bottlenecks in Airflow-wide and DAG-level execution. You’ll apply solutions to those as they arise. You run the risk of developing a fragmented and mystical understanding of Airflow’s goings-on. You’ll have many questions and, frustratingly, fewer answers. Why are more