Systems | Development | Analytics | API | Testing

AppSignal

A First Look at Hanami 2 for Ruby

As of today (06/12/2022), Hanami 2.0.1 has been released. Read more about the enhancements, bug fixes and gems in release 2.0.1. Hanami 2 was released on 22 November, concluding four years of work on this version. It brings a breath of fresh air into Ruby's web development community. Version 2.0 is not just an incremental upgrade. One could say it's a project written anew, with bright ideas from version one rebuilt on top of a solid dry-rb libraries ecosystem.

Optimize Your AWS Lambdas with TypeScript

Last time in this series, we looked at improving the developer experience. As your Lambda function gains more features and dependencies, you may notice that the bundle size begins to grow exponentially. This can negatively affect deployments and cold starts. A bigger bundle means deployments take longer to upload to the AWS cloud. The JavaScript engine has more work to do before it can execute the Lambda function. In this take, we will focus on optimizing our Lambda function.

Debugging in Elixir and Erlang: An Introduction

Welcome to part one of this two-part series on debugging in Elixir and Erlang. In this post, we'll use several different tools and techniques to debug Elixir code. First, we'll get to know the demo project I created to showcase certain tools: dist_messenger. It's an Elixir project of a distributed messaging system that can be used directly on IEx. It allows users in different nodes to send and receive messages to each other.

System Notifications with Noticed and CableReady in Rails

Notifications are a typical cross-cutting concern shared by many web applications. The Noticed gem makes developing notifications fantastically easy by providing a database-backed model and pluggable delivery methods for your Ruby on Rails application. It comes with built-in support for mailers, websockets, and a couple of other delivery methods. We'll also examine the merits of using the CableReady gem for triggering system notifications in your Ruby on Rails application. Let's get into it!

Node.js Error Handling: Tips and Tricks

As unpleasant as they are, errors are crucial to software development. When developing an application, we usually don't have full control over the parties interacting with a program and its hosts (including operating system versions, processors, and network speed). It's important you have an error reporting system to diagnose errors and make errors human-readable. In this post, we'll first look at the two common types of errors.

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!