The AK Alembic

Recent distillations produced by Annkissam Elixir Alchemists

  • Ecto and Binary IDs

    I’d previously read a blog post about the benefits of using UUIDs as primary keys. For a recent Phoenix project (1.4.0 w/ Ecto 3.0) I wanted to implement that advice. The Ecto.Schema documention has an example that shows how to set the @primary_key, and @foreign_key_type attributes to binary_ids (UUIDs in PostgreSQL):

  • The interaction of API calls w/ Ecto.preload and Mox

    In previous articles, the AK Alembic1 has discussed building API clients, but we left out how they’d be used in an application. For this discussion, let’s say you’re working with a blog-style application whose principal resources are posts and comments. Posts can have many comments, however these comments are managed through an API. In your Post controller you’ll use...

  • Architecting API Clients

    Having used Elixir for over 2 years, I have often run into places where I have to make HTTP requests. Most of the time, I end up writing a generic way of making those requests to a website, an API client. In this post, I will be sharing my views on how to write an extensible, modular, and maintainable API...

  • Making an Asynchronous Function Synchronous with GenServer.reply

    I encountered an interesting problem while developing the absinthe_websocket library: I wanted to make an asynchronous function call appear to be synchronous. In this particular case, I wanted to run queries through the WebSocket connection1. The problem is that WebSockets use a single persistent connection and the responses can come out of order. How can we hide the...

  • GraphQL Subscriptions - Connecting Phoenix Applications with Absinthe and Websockets

    At Annkissam we’ve been updating our internal tooling. We transformed several independent rails applications into a Constellation of Phoenix applications. This service-oriented design has worked well, as most use cases involve a single application (for instance, there’s a time-keeping system). However, some use cases require coordination between services. For that, we needed event-driven messaging. We choose GraphQL to meet...

  • Using Akd to Solve Build-time vs Run-time Environment problem

    Deploying Elixir applications can be hard to figure out, with multiple strategies involving tools like distillery, docker, edeliver or mix to choose from. At Annkissam, we have adopted a simple workflow for deploying Elixir applications, which we would like to share with the community.

    This post digs deeper into akd while explaining how we at...

  • Elixir Deployments with Akd

    The development experience in Elixir is amazing, but deploying to production can still be difficult. Akd was developed to improve this process, and once configured, it makes deployment as easy as mix akd.deploy

    In this walkthrough we will be covering the basics of Elixir deployments and how we can make them easier with Annkissam’s deployment package: