For the last few years, we’ve been using a universal TypeScript platform including TypeScript, GraphQL, React, and Express. Having TypeScript on both the client and the server (including command-line utilities and background worker processes) has transformed how we go about ensuring the quality of the software we build. When compared to other stacks we’ve used, […]
One of the biggest challenges of building elegant mobile interfaces is making them adapt properly to the full gamut of screen sizes. This is especially true for Android development. Back in 2016, Google introduced a new container view class called ConstraintLayout which makes this task much easier. One nice feature of the ConstraintLayout class is […]
SAML 2.0 is an authentication protocol, an agreed-upon way to transfer authentication information between parties. It was approved as an OASIS standard in 2005, and there are SAML Protocol Documents with details about the protocol. The protocol is complex (the core document alone is 86 pages) and has a wide range of capabilities. In this post, I’ll scratch […]
Over the last year and a half, I’ve had the pleasure of working on a web app built in TypeScript. I came to Atomic with no web development experience at all. On my first couple of projects, I spent most of my time working on small, relatively isolated pieces of functionality for various applications: a […]
One of the nice things about Android development is having the power of a real SQLite database to store data, along with built-in support in the framework using Room. Room is an abstraction layer over SQLite. It has a lot of nice features, but it also has some limitations.
When building a Kotlin app, or any app for that matter, it’s pretty inevitable that it will contain push notifications. And with push notifications, it’s likely the app icon will need a badge. This is possible with the standard Android API, but unfortunately, the target SDK needs to be 26 or higher for it to […]
node-gyp is a tool that enables the compilation of native add-on modules for Node in multiple platforms. It has widespread use and is included as a dependency in many NPM packages. On most systems, this isn’t an issue, and installing node-gyp with the rest of your packages works as expected. Unfortunately, this is not the case […]
TypeScript 2.8 introduced the conditional type operator, which allows for building comprehensive and powerful types. One of the more useful ones I’ve found is a “disjoint” type, which ensures that there are no elements in common between two sets or objects. This could also be referred to as “mutual exclusion.”
TypeScript is a wonderful language for designing data-driven applications. The type system is suited to describe the many different shapes and transformations of data as it travels from one end of a system to another. As my team has gained more experience with TypeScript, we’ve developed some guidelines for creating typed modules that help the […]
At some point, you may need to create custom forms in Active Admin for admin users to create records. Active Admin uses Formtastic, a FormBuilder DSL, to output these forms. In this post, I’m going to show you some of the things you can do with them.