Case study repost: Red Hat Software Collections – ScriptScribe

Dave and I first chatted last year about Software Collections when they first became available, and less than a year later he’s written up this great summary of his experience with them.

“Red Hat Software Collections

By Scott Merrill

In the beginning

“When I started working at CoverMyMeds, I inherited a server infrastructure that made sense for where the company was at the time. There was one full-time system administrator and a small group of developers. There were only a handful of production servers running a small collection of applications. The majority of applications were Ruby, and Ruby was installed onto the servers using RVM, the Ruby Version Manager.

“We had a number of PHP applications running on different versions of that language, including a custom RPM for a specific version of PHP for one app. The Red Hat default version of PHP was 5.3, which was already ancient by PHP standards.” (more…)

For more information about Red Hat Software Collections or Red Hat Developer Toolset, visit

DevNation Talk: Shenandoah: An ultra-low pause time garbage collector for OpenJDK

Join us at DevNation and learn about Shenandoah.

You’ve tuned your Java application so that you can promise response times of 10ms and then a GC pause happens. You want to scale up your enterprise application but suddenly your GC pauses go from 50ms to 2 minutes. You need a garbage collector that works while your program is running so that you don’t hit the GC wall.

Current GC technology works really well for managing pause times right up until the time that it doesn’t. If your heaps are just too big for the GC to handle during your specified pause times you are going to end up falling back to a full GC and that can take minutes.  The problem has gotten so bad that users are resorting to off heap self managed storage to avoid GC thus negating one of the primary benefits of working in Java.

Shenandoah is a new GC algorithm developed at Red Hat to solve this problem.  We take small GC pauses to be able to accurately scan your thread stacks, but the bulk of the GC tracing and compaction happens concurrently while the Java threads are running.

This talk will describe the algorithm in detail, give some preliminary performance results, and answer any questions.

More about DevNation:  DevNation 2014, was our inaugural open source, polyglot conference for application developers and maintainers. Learn about DevNation and view its many recorded sessions here.  DevNation 2015 will be in Boston, MA, USA, June 23-26, 2015.  Be sure to follow its status on

Imagine this – the life of an image

Imagine this: deploy an application from code-commit to qa, validate through automated testing, and then push the same image into production with no manual intervention, no outage, no configuration changes, and with full audibility through change records. A month-and-a-half ago, we formed a tiger team and gave them less than 90 days to do it. How? Build an end-to-end CI/CD environment leveraging RHEL Atomic 7.1 as the core platform and integrating with key technologies like git, Jenkins,, in a hybrid deployment model and in accordance with our enterprise standards. Oh, and make sure we don’t care if we lose a couple of the nodes in the cluster when we’re running the application in production.

Disruptive technology that spawns disruptive business architecture. And it all starts with imagining the life of this thing called an image.


For more information about Red Hat Enterprise Linux and other topics related to this article, visit one of these sites:  Red Hat Enterprise Linux, Red Hat Enterprise Linux Developer Program, Red Hat Enterprise Linux 7 is now generally available.


DevNation 2015 hot tip: Build distributed, fault-tolerant infrastructure with Apache Mesos

devnation_logo_lightbkg_200pxby Chris Aniszczyk, Head of Open Source, Twitter
Apache Mesos is a resource manager for datacenter infrastructure that uses a 2-level scheduling model to provide hardware resources to various application frameworks.Similar to Infrastructure-as-a-Service (IaaS), Mesos manages hardware and the execution of applications, while delegating the responsibility of deployment to other platforms. In the Mesos’ model, application frameworks are responsible for scheduling and deployment logic. Multiple frameworks can be run on bare metal at the same time, using a single pool of resources, including use cases for long-running services (including Marathon, Aurora, Singularity) and batch or streaming (Hadoop, Storm, Jenkins).

Several IaaS projects, including OpenStack and CloudStack, are interested in the abstraction Mesos provides for running and writing distributed applications. While IaaS typically addresses a larger set of concerns, the narrow focus of Mesos on resource management provides opportunities for integration between traditional IaaS and Mesos in the future.

In this session, you’ll get you an overview of the Mesos compute model, see how it relates to Infrastructure-as-a-Service, and walk through writing an application for Mesos using the framework API.

 Register for DevNation 2015 today!

More about DevNation:  DevNation 2014, was our inaugural open source, polyglot conference for application developers and maintainers. Learn about DevNation and view its many recorded sessions here.  DevNation 2015 will be in Boston, MA, USA, June 23-26, 2015.  Be sure to follow its status on

DevNation 2015 hot tip: DevOps with Java EE

devnation_logo_lightbkg_200pxRed Hat’s Arun Gupta, the Java guru, has this great talk at DevNation:

Techniques such as automated builds and testing, continuous integration and continuous deployment allow software to be developed to a high standard and easily packaged and deployed to test environments, resulting in the ability to rapidly, reliably and repeatedly push out enhancements and bug fixes to customers at low risk and with minimal manual overhead. What container-agnostic tools are available for testing, continuous integration and deployment of a Java EE application ?

This talk will start with how to package Java EE application “operating environment” such as Operating System, JVM, Database, dependencies, and other configuration in a reusable format, such as Docker. It explains how to replicate the environment for development, testing, staging, and production minimizing the impedance mismatch between them. A quick overview of Arquillian and how it helps in a automated testing across multiple Java EE containers is shown. How functional testing, code coverage, performance and other aspects for going in to production will be discussed. Using Arquillian against Docker containers will be explained as well. Finally, configuring Jenkins for Continuous Integration and setting up deployment pipelines will show how to take an application from push-to-production and achieve almost 100% automation.


Register for DevNation 2015 today!

More about DevNation:  DevNation 2014, was our inaugural open source, polyglot conference for application developers and maintainers. Learn about DevNation and view its many recorded sessions here.  DevNation 2015 will be in Boston, MA, USA, June 23-26, 2015.  Be sure to follow its status on

Asciidoctor on OpenShift

Asciidoctor encompasses and builds an ecosystem around Asciidoc for writing documentation, and well, writing anything.   If you want to host your own blog, documentation site, book, ect.., Asciidoctor would be an excellent choice.  If you want to do that in OpenShift, that is what I’m going to help you with.

Getting Started

Create a Sinatra ruby gear or on the command line.

rhc app create mydocs sinatra ruby-2.0

The current sinatra-example is geared for ruby 1.9 current, It could be modified to work with 2.0 but I will focus on 1.9 here.

rhc app create mydocs ruby-1.9 --from-code

You may or may not need to clone the project, it should auto-clone it unless there was a timeout.

rhc git-clone mydocs
cd mydocs

Set your environment up so the bundler won’t install dev dependencies.

rhc env set BUNDLE_WITHOUT=development -a mydocs

This gives us a base Sinatra project to work with. Now let’s add Asciidoctor to the mix.

Configure Ruby for Asciidoctor

Add the Asciidoctor gem and development gems to bundler and bundle. Your Gemfile should look like:

source ''

gem 'sinatra'
gem 'asciidoctor'

group :development do
    gem 'guard'
    gem 'guard-shell'
    gem 'guard-livereload'

Now Install those new gems, this will also trigger a new bundle install when you push since the Gemfile.lock will change.

bundle install

Write an Asciidoc file

Create a folder for your Asciidoc files, let’s call it adocs.

mkdir adocs

Create an adocs/index.adoc, open it up and paste in:

= Introduction
:toc: left

Welcome to my documentation!

== Heading 1

=== Sub Heading 1

== Heading 2

=== Sub Heading 1

=== Sub Heading 2

Development and LiveReload

Create a Guardfile in the project root. The :safe => :unsafe is for the injection of asciidoctor.css into the html. This Guardfile will watch for changes to the index.adoc and compile it to the public dir.

require 'asciidoctor'

guard 'shell' do
  watch(/^adocs\/index\.adoc$/) {|m|
  Asciidoctor.convert_file(m[0], :to_dir => "public", :safe => :unsafe)

guard 'livereload' do

Add public/index.html and public/asciidoctor.css to .gitignore as Asciidoctor will be invoked on push.  The benefit to this setup is your generated html will not pollute git, it will be generated on push.

echo "public/index.html" >> .gitignore
echo "public/asciidoctor.css" >> .gitignore

Install the LiveReload browser extension then guard start

guard start

Click on the Live Reload icon in the browser, in the Guard console you should see:

[1] guard(main)> 13:30:31 - INFO - Browser connected.

Now you can live edit the index.adoc and see updates in the browser. You will need to navigate to the file in your browser. In my case I went to the url: file:///Users/smendenh/Projects/mydocs/public/index.html


Add a .openshift/action_hooks/build file which will be responsible for invoking Asciidoctor to generate the html.

mkdir -p .openshift/action_hooks
vim .openshift/action_hooks/build

pushd $OPENSHIFT_REPO_DIR > /dev/null
bundle install --path ./vendor/bundle --without development
bundle exec ruby -C${OPENSHIFT_REPO_DIR} -rasciidoctor -e "Asciidoctor.convert_file('adocs/index.adoc', :to_dir => 'public', :safe => :unsafe)"
popd > /dev/null

Test it out!

Edit the adocs/index.adoc file, change anything.

git commit -a -m "Simple update"
git push

Wait for the push to finish then hit the openshift url for your gear in the browser and see your changes.

Other ideas for Asciidoctor on OpenShift

You can use Asciidoctor in many languages, be it Java, Ruby, Javascript, ect…   Hooking in Asciidoctor to the Sinatra gear was simple and straight forward, the documentation on the site was a fantastic help.  There is around a 30 second delay in git push, that is minor, but if you wanted an even faster means of hosting an Asciidoctor based OpenShift gear you could use the Nginx gear and push the generated html.  I’ve done that, and it is incredibly fast to push to and update.

For more information about Red Hat OpenShift and other related topics, visit: OpenShift, OpenShift Online, OpenShift Enterprise