School closed today, learn Ruby picture

Here in my home town of Brno, Czech Republic, Red Hat strongly supports local universities. One of the things we do is to provide students with practical courses on development technologies. This year there were several including Ruby, Python, and JBoss. Because I was running one of the Ruby courses, I will focus on that.

The awesome thing about working for Red Hat is that the company encourages us to do this. I was teaching before joining Red Hat and OpenShift and I loved it. During the interview process I was not sure I would be able to keep teaching with all the responsibilities I would have at work. However, during the interview process I found out that Red Hat was not only okay with me doing it, but supported me in this activity.

The course was taught by three people Ivan Necas, me from Red Hat, and Martin Hrdlicka.

Starting the Ruby course

It was a one-semester long course using the programming language Ruby. Students were expected to have no knowledge of the language and the ecosystem.

In September we started with an introduction to Ruby, covering the basics of the language, ecosystem, command line tools and all the things a person needs to know to get started. For development we encourage everyone to use their own preferred tool, however if a student did not have a preference we provided a class-room license for Rubymine by Jetbrains.

The year before we also provided pre-built Virtualbox virtual machines with Linux, where the students could instantly start working with Ruby. This year we ditched that idea and encouraged everyone to install Ruby on their own machine.

The Ecosystem is Important

After the first two lectures where students received an introduction to Ruby and the basic tools, they needed to learn the ecosystem. Starting with Rubygems, we introduced the most important libraries and tools, but that was not all. Ruby is very closely connected to the Git version control system so in the third lecture students learned how to do basic tasks with Git and set up their own account on Github.

Building Web Applications

After the first three weeks of learning the basics, it was time to move to the area Ruby is used the most--web application development. Over the next two weeks the students learned how to use the Ruby on Rails framework. This was the most difficult part of the whole course because students had only two weeks to wrap their heads around MVC, databases, Rails, templating languages, etc.

Testing for Life

After they are familiar with Ruby on Rails, students are introduced to testing using Ruby on Rails applications. Testing is an important part of the Ruby world, so it's unfortunate we have to squash it into just one lecture.

Lightweight Web Applications

Next we moved to development of web applications using the Sinatra framework. This lecture was done by another Red Hat employee Michal Fojtik of Deltacloud fame. He introduced students to the framework, it's features, and also compared it to the Ruby on Rails framework.

Ruby and Java are Friends

I am a big fan of JRuby, the Ruby language implementation on top of the JVM, and I do encourage everybody to take a look at it. Therefore we had one lecture dedicated to introducing students to JRuby and the interoperability between the Java and Ruby language.

Server Applications are not a Problem

Web applications are a big area where Ruby excels, however it also has a strong place in the land of client-server applications. One lecture was reserved for learning and experimenting with EventMachine. Here we did my favorite task--implementing a SMTP server. During the class, 90% of students ended up with event-driven SMTP server implementation that they test with their favorite e-mail client. It was a nice exercise to demonstrate for the students, one of the fundamental protocols that drives today Internet.

Don't Forget Devops

Ruby is used for Devops tools to so we did not skip that. Sprinkle, Puppet and Chef are mentioned and we discuss why Ruby is a good language to implement such tools.

Integrated development environments are an important part of developer's life - and we spent a huge amount of time using it. As mentioned before, we provided Rubymine license to the students, however Rubymine is not the tool of choice for everyone. Somebody likes Vim, somebody emacs or Sublime and we dedicate one lecture to get you set up with Ruby development environment with each of those.

Grades? Oh, come on!

Because none of us is in love with theoretical teaching - we prefer hands-on. To finish the course, student are required to do a project in Ruby. We allow them to do whatever they want and the only thing we want to see is that they learned something during the semester. Makes sense, right?

Interesting Student Projects This Year


Control remote machine by sending e-mails. Client and server tools included.



Netstorm is an on-line brainstorming tool. Using the faye protocol, it allows real time collaboration for people at different computers.



Reservoir is an on-line web application for booking rooms. It partially integrates with Zimbra and also provides iCal support.



iMenu is an aggregator of menus from local university cantines.



Rhoto is a simple web-gallery using the Ruby on Rails framework.


Project Activity Tracker

Project Activity Tracker is a simple extensible command line utility for retrieving events from services. Useful for tracking activity across teams and projects. Currently supported services are Github, JIRA and Bugzilla. Available formats include pretty plaintext and JSON.


What's OpenShift's role?

Well, in previous iterations we had to provide the students with a place to deploy their projects for a demo and presentation of the projects. This year we solved this by using OpenShift. Everyone gets a free account and can deploy three applications without paying a penny to Red Hat. It's an awesome way for teachers to provide simple and robust deployment option for students.


I believe this was a successful year and that the students got what they expected (at least those 5 credits, right?) and I am looking forward to the next iteration starting next September.

What's Next?

< Back to the blog