Programming with Linear Temporal Logic Operators

At Matrix AI our research into language constructs for formally describing distributed systems has led us to a concept called Linear Temporal Logic. It is a logic system that allows us to express logical statements about time. This article will provide a brief introduction to this logic system. Linear Temporal…

Developing with Nix (C, JavaScript, Python, Haskell, Emscripten, PHP)

Nix, NixOS and NixPkgs allows us to to create project-specific development environments with project-specific dependencies (this usually means things like a C project, or a Python project... etc). The way this is done is different for every language community within the Nix ecosystem. The most well developed patterns would be…

Intro to Nix Channels and Reproducible NixOS Environment

This introduction assumes you have played with NixOS a bit, you know about content addressability and why it is important, and how Git repositories represent a distributed content addressed storage system. Git and Github is used as the source control for all of NixOS and NixPkgs. Both NixOS and NixPkgs…

Reproducible Builds vs Semantic Versioning

Today, the most common way for developers to address a dependency is through the use of semantic versioning. This is where you create project A that depends on B at 1.2.3, where 1 is the major version, 2 is the minor version and 3 is the patch version.…

Declarative Stateless Migrations in Databases

Ever since we read Domen Kožar's thoughts on how Nix and NixOS is a superior configuration management system because it features: Declarative Semantics Stateless Deterministic (pure) Avoids dependency hell Idempotent Atomic/Transactional Reversible or Rollbacks We've been thinking about how to apply the Nix philosophy to live database migrations. (Specifically…

Functionally Composing Service Oriented Architecture

How do you manage service oriented architecure (SOA) when your services are at differing levels of maturity? We encountered that question at the CTO summit in Sydney. It turns out, that we can use the lens architecture as model to understand this problem and what the possible solutions are: The…

Docker, Rockets, Mesos and Atlas

It's an exciting time in the infrastructure orchestration/automation space. The technologies are moving fast, but here are the interesting things we've observed in the past week: Docker & Rocket Controversy Docker has moving ahead extending their platform with tools such as: Docker Machine - Basically configuration management (CM) for…

Reification & Abstraction in Configuration Management

Reification and abstraction are 2 fundamental concepts on computer programming and how humans communicate in general. These 2 concepts are also guiding the development of the Forge Architect orchestration language. Abstraction is the process of creating an construct that captures the essence of that which is concrete. It can be…

Configuration Management Language

The term configuration management has a long history beyond software development. When applied to software, people usually refer to the implementations of: CFEngine Puppet Chef Ansible Salt Docker Kubernetes Terraform Fleet And lots more... In a nutshell, configuration management in software refers the process of configuring the servers, and then…