Systems | Development | Analytics | API | Testing

AppSignal

Parser Combinators in Elixir: A Deeper Dive

In our last post, we wrote a basic parser for phone numbers using Elixir. It was a bit simplistic since it didn't really respect the format phone numbers are expected to have, but it was a great start. We'll now improve the parser to ensure we only accept phone numbers that fit the spec and make our return type an instance of structured data. Let's dive straight in!

How to Scale Ruby on Rails Applications

Today we will dive into some strategies you can use to scale Ruby on Rails applications to a huge user base. One obvious way of scaling applications is to throw more money at them. And it works amazingly well — add a few more servers, upgrade your database server, and voila, a lot of the performance issues just go poof! But it is often also possible to scale applications without adding more servers. That's what we will discuss today. Let's get going!

How to Handle Async Code in JavaScript

The easiest way to understand asynchronous code is to realize that the code does not execute sequentially. This can be difficult to comprehend in JavaScript, especially if you come from a programming language that's synchronous or sequential by default, like PHP. In this post, you will learn how to write async (also known as 'non-sequential') code in JavaScript efficiently. You'll learn the basics of using callbacks, promises, and the modern async/await style. Let's get started!

What's New in Next.js 13

Version 13 of Next.js, a well-established React framework from the Vercel company, was released last week. The announcement was made at the Next.js Conf and took the community by storm. Developers worldwide spread the news about the features and goodies announced live on October 25th. Now, as the dust slowly settles, we can go through what's new in Next.js 13.

Build a Table Editor with Trix and Turbo Frames in Rails

In this post, we will implement a basic ActionText table editor for your Rails application. We'll learn how: This article draws inspiration from the excellent 'Adding Tables to ActionText With Stimulus.js' blog post from 2020. That was written before the advent of Turbo though, which we can expect to simplify matters quite a bit. Let's get going!

AWS Lambdas with TypeScript: Improve the Dev Experience

In part one of this series, we successfully built a TypeScript Lambda on the AWS cloud. But we left a lot of room for improvement in terms of the developer experience. For starters, the Lambda didn’t run on a local machine, which is cumbersome. The code we wrote is also not testable, which makes refactoring hard or, at least, dangerous. In this take, let’s focus on improving the developer experience. The goal is to make the code more robust and easier to work with. Ready?

Improve Code in Your Ruby Application with RubyCritic

RubyCritic provides visual reports highlighting code smells, code structure, ease of testing, and test coverage in your Ruby application. It's in active development, with new code analysis tools often being introduced as new features. It's well worth keeping track of RubyCritic's releases. This article will touch on some of RubyCritic's benefits, its dependencies, and how to read its code reports. Let's get going!

Parser Combinators in Elixir: Taming Semi-Structured Text

The need to manipulate strings comes up quite often, whether it's to validate user-provided values or transform text into structured data that can be used programmatically. Most often, we'll reach for regular expressions to accomplish this task, but sometimes there's a better solution to the problem: parser combinators. In this two-part article, we'll explore how they work. Before moving on, let's define what 'parsing' is: Source: Wikipedia.