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.
Jesse Hallett walks through the basics of
maketo be very useful for Crystal projects. I’ve even seen people use it for ruby development.
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.
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.
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.
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.
Ruby 2.5 was released a few days ago. Among the new features,
Structs gained the ability to be instantiated with using keyword arguments.
Pat Shaughnessy writes a great 5 part series on using tree structures inside Postgres to store hierarchical data. In this first post he covers on why using a tree structure makes sense. In later parts he will cover the basics of the LTREE extension, how to install and use it and how it hooks into the Postgres internals.
Brave New Geek writes the first part of a promised series on building a distributed log from scratch. in this post he focuses on storage mechanics. If you interested in why using a log is a good abstraction for distributed systems, see the referenced article The Log: What every software engineer should know about real-time data’s unifying abstraction.
Mikito Takada writes a short e-book about distributed systems at a high level, covering scalability, availability, performance, latency and fault tolerance. The implications of different levels of abstractions, time and ordering and different modes of replication are part of the fun. Warning: After reading you might find yourself going down the rabbit hole resaearching Vector Clocks and CRDTs (convergent replicated data types). See you there.