Article: Parallel Change (AKA expand and contract): Pattern to safely make backward-incompatible changes to an interface

Parallel Change

From the article:

Making a change to an interface that impacts all its consumers requires two thinking modes: implementing the change itself, and then updating all its usages. This can be hard when you try to do both at the same time, especially if the change is on a PublishedInterface with multiple or external clients.

Parallel change, also known as expand and contract, is a pattern to implement backward-incompatible changes to an interface in a safe manner, by breaking the change into three distinct phases: expand, migrate, and contract.

Deis: Open source PaaS build on Docker/CoreOS with Heroku-like workflow

Deis logo

From the Deis Overview page:

Deis (pronounced DAY-iss) is an open source PaaS that makes it easy to deploy and manage applications on your own servers. Deis builds upon Docker and CoreOS to provide a lightweight PaaS with a Heroku-inspired workflow.

Deis can deploy any application or service that can run inside a Docker container. In order to be scaled horizontally, applications must follow Heroku’s 12-factor methodology and store state in external backing services.

Deis can deploy any language or framework using a Dockerfile. If you don’t have a Dockerfile, Deis includes Heroku buildpacks for Ruby, Python, Node.js, Java, Clojure, Scala, Play, PHP, Perl, Dart and Go.

Deis can be deployed on any system that supports CoreOS including your workstation, as well as most public clouds, private clouds and bare metal.

Quasar: Java library providing high-performance lightweight threads similar to go-routines

http://docs.paralleluniverse.co/quasar/

From the Quasar website:

Java 7 is required to run Quasar.

Quasar is a Java library that provides high-performance lightweight threads, Go-like channels, Erlang-like actors, and other asynchronous programming tools.

Quasar’s chief contribution is that of the lightweight thread, called fiber in Quasar.
Fibers provide functionality similar to threads, and a similar API, but they’re not managed by the OS. They are lightweight in terms of RAM (an idle fiber occupies ~400 bytes of RAM) and put a far lesser burden on the CPU when task-switching. You can have millions of fibers in an application. If you are familiar with Go, fibers are like goroutines. Fibers in Quasar are scheduled by one or more ForkJoinPools.

Fibers are not meant to replace threads in all circumstances. A fiber should be used when its body (the code it executes) blocks very often waiting on other fibers (e.g. waiting for messages sent by other fibers on a channel, or waiting for the value of a dataflow-variable). For long-running computations that rarely block, traditional threads are preferable. Fortunately, as we shall see, fibers and threads interoperate very well.

Fibers are especially useful for replacing callback-ridden asynchronous code. They allow you to enjoy the scalability and performance benefits of asynchronous code while keeping the simple to use and understand threaded model.

Jekyll: Blog-aware static website generator written in Ruby

Jekyll logo

I’ll probably manage my next blog using a static site generator, and Jekyll is the current front-runner. The Jekyll documentation is quite good.

  • Supports Markdown and Textile markup
  • Uses the Liquid templating engine
  • Blog aware: Supports permalinks, categories, pages, posts, & custom layouts
  • Can import from CSV, Drupal 6, Drupal 7, Enki, Ghost, Google Reader, Joomla, Jrnl, Marley, Mephisto, Movable Type, Posterous, RSS, S9Y, Textpattern, Tumblr, Typo, WordPress, and WordPress.com
  • Free hosting with Github Pages
  • Comes with a built-in development server for local preview

Spring Boot: Create Spring applications with minimal configuation

Spring Logo

From Spring Boot page:

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that can you can “just run”. We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need very little Spring configuration.

  • Create stand-alone Spring applications
  • Embed Tomcat or Jetty directly (no need to deploy WAR files)
  • Provide opinionated ‘starter’ POMs to simplify your Maven configuration
  • Automatically configure Spring whenever possible
  • Provide production-ready features such as metrics, health checks and externalized configuration
  • Absolutely no code generation and no requirement for XML configuration