• The REPL: Issue 45 - April 2018

    the Origins of Opera and the Future of Programming

    Jessica Kerr writes eloquently about how some groups of people in music, painting, science, and programming produce extraordinary results, like the invention of a novel genre of music. She goes deep into the theory behind it and introduces the concept of symmathesy:

    Nora Bateson points out that there’s more to a living system than parts and interrelations: the parts aren’t constant. We grow and learn within the system, so that the parts don’t stay the same and the interrelationships don’t stay the same. She gave a word to this, something deeper than any mechanical or model-able system, a learning system composed of learning parts: symmathesy.

    I am still processing what this all means. My immediate takeaway is that some teams have dynamics in which positive outcomes are amplified to form a virtuous cycle. I believe this is equivalent to what people mean by “synergy”.

    How I Write SQL, Part 1: Naming Conventions

    This post covers a lot of detail on the naming conventions Sehrope Sarkuni prefers when writing SQL, including the rationale behind for each convention. I agree with most of the conventions. In reality, I am more interested in my team having conventions in the first place.

    How To Index Your Database

    The slides for Baron Schwartz’s presentation at PostgresConf US 2018 cover a lot of detail on what indexes are, how databases use them and in the uses cases where indexes help: Read less data, read data in bulk, and read data presorted. This is one of those slide decks that contains enough information and context without needing to see the talk – not available on video at the time of writing.

    Read on →

  • The REPL: Issue 44 - March 2018

    Mistakes Rails Developers Make in Elixir Part 1: Background Jobs

    Background jobs in Rails are a common patter. In this post Desmond Bowe explores some of the available patterns in Elixir that can be used instead of reaching for a background queue. The information is very good. In my experience, every time I reach for background jobs, I also need to ensure that jobs survive node crashes. For that, the author still advises to use a traditional background queue.

    A Career Cold Start Algorithm

    Andrew Bosworth (Boz) advocates a simple way to start a new job: Ask everyone what is it that they think that you need to know, what are their challenges and who should you talk to next. This is a great idea, especially in places where a robust knowledge transfer process is not in place.

    Elapsed time with Ruby, the right way

    Luca Guidi explains why the naive use of Time.now to measure elapsed time between starting and ending an expensive operation is wrong. What to use? Monotonic time.

    Remember: wall clock is for telling time, monotonic clock is for measuring time.

    Read on →

  • The REPL: Issue 43 - February 2018

    What Does OO Afford?

    Sandi Metz is one of my favorite authors, and for good reason. In this post, she talks about affordances (a made up word!) that programming languages give, in particular Object-Oriented languages:

    OO… wants you to replace your procedural monoliths with collections of small, independent, collaborative objects.

    The Lost Art of the Makefile

    Jesse Hallett walks through the basics of make and Makefiles. He talks about targets, how it excels at managing dependencies and how it can be leveraged for a modern Javascript workflow. I don’t write Javascript, but I have found make to be very useful for Crystal projects. I’ve even seen people use it for ruby development.

    Read on →

  • Book Review: Functional Web Development with Elixir

    Functional Web Development with Elixir, OTP, and Phoenix: Rethink the Modern Web App by Lance Halvorsen covers how to build web application in Elixir leveraging it’s great concurrency properties using OTP. Throughout the book, the author guides the reader through building an application. At first, the focus is only on the business logic, outside from any web-framework. Later, the author covers how to use that code inside a Phoenix application without the tight coupling that often results in other web frameworks. Phoenix web views are largely ignored, focusing instead on it’s finest features: Channels and Presence.

    Read on →

  • The REPL: Issue 42 - January 2018

    SPAs Are Just Harder, And Always Will Be

    William Gross points out that Single-Page Applications add more development overhead than traditional server-rendered applications. There are more layers to code and maintain and essentially add to each browser the burden of distributed computation and data synchronization.

    Things I wish ActiveRecord had after using Ecto

    Ecto is a database wrapper library for Elixir. It’s design is very different that ActiveRecord – the Ruby library included with Ruby on Rails. They are often compared, because each seems to hold the majority of mindshare in it’s own ecosystem and there is a significant portion of the Ruby community interested in Elixir.

    Vladimir Rosančić walks through the things he likes about Ecto that are missing from ActiveRecord. He names changesets, database constrain validation, explicit pre-loading, batch inserts, safety when loading single records and the query language itself. I find these type of comparisons really useful. They usually make clear how the choice of language or library affects the code we write.

    The Modular Monolith: Rails Architecture

    In this post Dan Manges details how the engineering team at Root dealt with the fabled Rails monolith and made it more modular. The achieved a healthier separation of concerns, faster builds and got rid of circular dependencies by using Rails Engines to separate the different domains in their app. They obtained a lot of the benefits often attributed to micro-services, without adding layers of network traffic (and the failure modes that come with that) in the middle of their app.

    Read on →