DEPT® Engineering Blog

A Developer Community

Why You Should Use React Native For Your Next Mobile App
react

Why You Should Use React Native For Your Next Mobile App

I believe there is a wide misconception about developing mobile applications. Many seem to think that the only proper way to create a phone app is by engineering it natively. This splits codebases, increases costs, and consumes more resources. Depending on your needs and how fast it’s required to be done, this is not always ideal. Herein lies the cross-platform and single-source solution: React Native. There was not an instance where I directly experienced a conversation about choosing betw

Process

Contentful Migrations

I've spent the last few days getting Contentful set up for a new project and have become frustrated with the migration story. As a developer, the primary way I interact with a CMS is by defining the data model. When project requirements change, I will need to update and grow the model to accommodate new feature requests. A good CMS, from my perspective, is one that makes this schema migration process safe and painless. Why we need migrations Some CMSs don't support migrations. The schema and a

Introducing Web Blueprint - Our Practices for Web Development
Process

Introducing Web Blueprint - Our Practices for Web Development

This week we released a Github project called web-blueprint [https://github.com/rocketinsights/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. [By the way, we're hiring!] I'm sure you've often found yourself asking "How do we usually...?" within your own team. I know we have. Six years ago, Rocket was five people in a small offi

Evaluating Your Tech Stack: Content Management Systems
Platforms

Evaluating Your Tech Stack: Content Management Systems

Choosing a content management system is kind of a big deal. It’s a choice that has a lasting legacy for any company, and migrating from an existing system to a new one is complicated at best. Given the multitude of options available, it’s interesting to me that most people default to “something like Wordpress”, which usually means actually Wordpress. And while Wordpress has its place, it’s hardly a one size fits all solution. The core problem with making this very important choice is just tha

Marketing Analytics with AWS and Power BI
Process

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 which we hope will demonstrate the vast territory that is covered by a modern Data Architect / Engineer and how it all eventually comes together into a simple and friendly solution for the end users. How did this project start out? Jason:

Process

A Journey Moving the Monolith to Microservices

2020 was a hell of a year:  A global pandemic, a fraught US election, and ... Microservices!  😬 Myself and a team of Rocket developers spent the entirety of 2020 at a client who wanted to move their Java based monolith into the 2020's with a spanking new Microservice / Single Page App (SPA) architecture.  Sound a little too good to be true? Here was the catch:   We needed to keep their old monolith running while we did it, and it is a big, complicated application. It's now 2021, and I can con

Platforms

From RxJava to LiveData (and back?)

Disclaimer: I'm no Reactive Extensions [http://reactivex.io/] (RX) expert. I'm simply a happy user with some (~6 years) experience with it. I've seen people struggling with RX. They say it has a steep learning curve. In that light, I was super excited when I first heard about Google's Android Architecture Components [https://developer.android.com/topic/libraries/architecture/] (AAC) and LiveData [https://developer.android.com/topic/libraries/architecture/livedata]. A simplified version of RX wi

Platforms

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

Platforms

Deployments at Scale with AWS ECR and ECS

With DevOps at DEPT, one of our primary goals is to make the life of the developer easier. A specialty of ours is assisting in our customer's deployment process. In short, this is how a code change can safely make it from a developer's laptop all the way to a production environment where it can be seen by end-users. In a typical software project, your environments will be something along the lines of dev, staging, and prod. Maintaining a release pipeline to these is simple enough in most cases,

iOS Accessibility: Dynamic Type
iOS

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

Platforms

Create a Rust web service, from zero to cloud

Rust is a fantastic general-purpose language with a rich and expressive type system, but one of the reasons the language is so loved [https://insights.stackoverflow.com/survey/2021#section-most-loved-dreaded-and-wanted-programming-scripting-and-markup-languages] is the overall developer experience. Writing software can be very complex in any language. Working with the language and tools, however, should not be. This is an area where Rust shines! This tutorial will describe how to... * Insta

Process

File Uploads Directly to S3 From the Browser

Uploading files to S3 directly from the browser is a great way to increase performance by removing the need to process and then re-upload files from your own server. Note: In this post we'll be examining the use of pre-signed POST requests. See pre-signed URLs [https://docs.aws.amazon.com/AmazonS3/latest/dev/PresignedUrlUploadObject.html] as an alternative (less powerful) method. Overview A traditional approach to file uploading would typically involve the client making a POST request to an

Platforms

How to Build a full page calendar with React

As a developer, I can’t help but get excited when I see immersive apps built on the web. I love it when I get to build things that are a little bit “out of the ordinary”. I recently built a full-page calendar widget. At first, I thought I’d reach for a library, but I found myself a little disappointed with the options in the ecosystem. More importantly, I realized that it’s actually not very hard to build a full-page calendar using modern web technologies. Because it doesn’t take much code and

  • Nat Ring
Platforms

Reusable Patterns in CloudFormation

At DEPT, we use a variety of tools to provision infrastructure in the cloud. In this post, we take a look at some of the reusable patterns we've developed using AWS CloudFormation. What is CloudFormation? If you've ever created infrastructure and/or resources in AWS then there's good chance you've used or at least heard of CloudFormation. For those who are unfamiliar, CloudFormation is an AWS service that allows you to provision and configure almost all AWS resources using yaml (or json) templa

People

GitOps with Terraform, Terragrunt and GitHub Workflows

At DEPT, we love pushing the envelope of new technologies and tooling to deliver best-in-class products and solutions that delight our clients. We use Terraform and Terragrunt to build and provision as much as we possibly can, and recently we've begun leveraging GitHub Workflows for CI/CD. In this post, we'll take a look at how we combine these tools to create a GitOps centric workflow for managing cloud infrastructure. Specifically we'll: * Define GitOps * Review a sample Terraform app mod

Platforms

CI/CD with CodeBuild and CodePipeline

At DEPT we use a variety of hosted continuous integration / continuous delivery (CI/CD) platforms to help our clients deliver great products and experiences to their customers. Recently, we've used a few of AWS's services to create full integration and delivery solutions. In this post we'll look at how we've used AWS CodeBuild and CodePipeline to create a cost effective, performant and code driven end-to-end CI/CD solution. What is CodeBuild and CodePipeline? AWS has a number services they've

Securely Storing Data on iOS
Platforms

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

Platforms

Using Unity with Swift for AR

Since the introduction of ARKit with iOS 11, we've seen an increasing demand for applications incorporating some form of Augmented Reality (AR) experience. AR is a relatively new technology that enhances the user's real world with virtual audio/visual objects, and a mobile phone or tablet is a perfect platform for this tech. In this post, I’ll dive into some of the technical challenges of AR as well as our preferred solution, focusing on integrating Unity into an iOS project. The first techni

Platforms

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

  • Nat Ring
SQL 101 for Product Managers
Platforms

SQL 101 for Product Managers

The following presentation was transcribed from “SQL and Python for Product Managers” webinar, presented by Colorado Product Meetup and senior software engineer, Brian Schiller. It has been edited for clarity. What is SQL? SQL is a family of programming languages used to communicate with a database. These languages are different, but they’re similar enough that we can call them a family. One thing to note is that pronouncing it “sequel” or “SQL” are both totally valid options so continue saying

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

FreeRTOS Tutorial: Getting Started with ESP32 on Linux

Updated August 24, 2021 Author: Michael Stone While building our latest IoT product, our development team found that documentation for FreeRTOS was dated and often flat-out wrong. To help others as they make their way through this process, we decided to document and release our findings as a FreeRTOS tutorial for developers. Here is how to get started with ESP32 on Linux. Initial Observations One can set up and install AWS FreeRTOS on numerous microcontrollers. For most of these steps, you wil

Platforms

FreeRTOS Tutorial: Create a Hello World Application with ESP32

Updated August 20, 2021 While building our latest IoT product, our development team found that documentation for FreeRTOS was dated and often flat-out wrong. To help others as they make their way through this process, we decided to document and release our findings as a FreeRTOS tutorial for developers. Here is how to create a Hello World application. You can always view our open-source IoT project here [https://github.com/devetry/internal-iot-embedded/commit/0583412d992abb93a1b5caa76bf940ec01a

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

Best Practices for Terraform AWS Tags

Update Jan 1, 2022: Thank you for making this blog post so popular. It is a first page Google and Bing search result for aws terraform tags [https://www.google.com/search?q=aws+terraform+tags] . Originally we coded the default tags examples for Terraform 0.12 [https://github.com/rocketinsights/terraform-blog-default-tags/tree/main/default-tags] . We updated the example code for Terraform 1.0 [https://github.com/rocketinsights/terraform-blog-default-tags/tree/main/default-tags-tf1.0] and Terra

Speeding Up Docker Development on the Mac24

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

How to File Uploads Directly to S3 From the Browser

Uploading files to S3 directly from the browser is a great way to increase performance by removing the need to process and then re-upload files from your own server. Note: In this post, we'll be examining the use of pre-signed POST requests. See pre-signed URLs [https://docs.aws.amazon.com/AmazonS3/latest/dev/PresignedUrlUploadObject.html] as an alternative (less powerful) method. Overview A traditional approach to file uploading would typically involve the client making a POST request to an

On Design Systems: Scope and Governance

This is the first entry in a two-part series covering various strategic and functional aspects of design systems. The challenges discussed in this entry are specifically relevant to individuals that have roles in design leadership, product ownership, and user interface design. A Design-gineer Walks Into A Bar Depending on my current mood on any given day I either describe myself as a designer who codes, or a coder that designs. Ultimately, I am passionate about building user experiences and b

Platforms

On Design Systems: Platforms and Implementation

This is the second entry in a two-part series covering various strategic and functional aspects of design systems. The challenges discussed in this entry are specifically relevant to individuals that have roles in engineering leadership, user interface architecture, and design systems engineering. You can find the first entry on scope and governance here. Beyond Scope And Governance In the previous entry I discussed some strategic pitfalls that teams can embrace in the hopes of creating the

Deploying a WebSocket Application on Beanstalk

Deploying a WebSocket Application on Beanstalk

So, you are about to build a new app and you need at least part of it to update in real-time. Well, we live in a modern world so it’s pretty common to have at least a part of the app update without requiring a user interaction or a page (re)load. Let’s assume for the sake of this article that you have already investigated polling, long-polling and WebSocket [https://blog.rocketinsights.com/state-of-swift-websockets/]. And, you’ve decided to use WebSocket. A WebSocket is a communication protocol

C++ v. Rust -Speed, Safety, & Community Comparison

Rust is the new and exciting language on the block, while C++ has been around for decades. With so many technical teams comparing rust vs C++, you’re probably curious. Is one better than the other? Which one should you use? Below, we’ll be comparing C++ with Rust, sharing our thoughts on when you should use each language, and predicting the future of C++ vs Rust. Let’s start with the basics. A Bit About C++ C++ is a programming language that’s been around for decades. It’s used in a lot of em

Could not sign up! Invalid sign up link.