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.
Author: braveterry
Free Programming Book: An Introduction to Programming in Go by Caleb Doxsey
Deis: Open source PaaS build on Docker/CoreOS with Heroku-like workflow
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.
SSH Kung Fu: List of useful SSH use cases
http://blog.tjll.net/ssh-kung-fu/
List of use cases from the blog entry
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
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
Try Git: Interactive Git tutorial
Article: Building microservices with Spring Boot
I learned about Spring Boot at a talk on the project at a Software Development conference. When I saw the talk, one of the first things that came to mind was, “this would be great for building microservices.” Apparently, I’m not the only one to have that thought, because I recently came across this article:
Spring Boot: Create Spring applications with minimal configuation
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