Docker and mutation testing at the Berlin Ruby User Group

We attended the RUG::B (Berlin Ruby User Group) yesterday – as we do regularly. It was full house at co.up (Adalbertstrasse 8) and the program interesting.

Working in a different country

Jan Schulte (@neinasaservice) started off with a convincing case on ‘where Microsoft did a good job to make developing software easier’. With an almost exclusive Ruby audience, that must have been a tough cookie.

Jan got started with .Net in late 2007, was employed mid 2010 as a .Net developer and ‘only’ got started with Ruby in October 2013. He now uses a vast number of tools (Ruby, JRuby, vim, Rake, git, ctags, Mac OS X, Vagrant, Virtualbox, CouchDB, MySQL, Elasticsearch, …) whereas in his .Net days his toolbelt was much smaller with Microsoft Windows [XP, Vista, 7, 8], .Net Framework, C#, Visual Basic.net, SQL Server, Team Foundation Server, Office and Internet Explorer.

Jan praises Microsoft for having a solution ‘for everything’ with Office, Internet Explorer, Sharepoint, Team Foundation Server and libraries such as the Entity Framework for O/R Mapping – ready for commercial use. Product maintenance not being their strong point. Talking discontinued support for SilverLight Jan complains that does not only mean no more bugs will be fixed. You cannot fix bugs yourself as it’s not open source software, nor can you add features or even look at the code.

Yet Jan is a fan of using C#, WPF, ASP.Net MVC and Windows 7. And he sees a semi-bright future for .Net developers with the recently open sourced C# compiler, Git support with visual studio, the adaptation of Typescript and the open source release of ASP.Net.

Introduction to Docker

José Albornoz (@eljojo) ‘spent a couple days playing with Docker’ and shared his experiences using it at the meetup. He re-built his server where he hosts a small Twitter bot using Ansible and Docker, amongst some ‘other stuff’.

Documentation tells us that Docker is a management system for LXC Containers, it grants you ‘lightweight virtual machines’ and ensures your applications are ‘isolated and easy to distribute’. A Docker Image is basically a snapshot of your filesystem. Images are created through Dockerfiles, a simple script that prepares the system to run the app. A container, he went on to explain, is an instance of a Docker Image and has it’s own private IP. Registries are ‘like Git but for Docker Images’ and the Docker Index will host your public images for free.

José: “Docker images are based on layers, you can have an Ubuntu layer, and on top of that seperate layers for nginx, Ruby and then Rails. And you can exchange layers without having to touch the other ones.”

José concludes that Docker is neat for any project that runs on more than one server, which unfortunately was his use case. And with Docker approaching 1.0, bigger projects should definitely give it a try!

Mutation testing with Mutant

Erik Michaels-Ober and Markus Schirp (@_m_b_j_) were up next, with their shared talk on mutation testing. The talk was test-run at RailsConf Chicago. “Tests are a good tool to verify your code but how do you verify your tests?” Why, with mutation testing of course! MT is a technique to evaluate the quality of your tests by programmatically mutating (i.e. making a series of small modifications to) your code and ensuring that the tests no longer pass.

Mutant tests your tests, or rather: the requirements of your tests. Code coverage gives you a false sense of security, Erik claims. Mutation coverage entails making modifications to your code, the same way DNA modifies. Tests should fail. Else something is wrong and you have untested code or superfluous code on your hands.

And it’s fairly easy really. Add Rspec, Rspec-core, mutant and mutant-rspec to your Gemfile, run your Rspec test and then run your Mutant test. Definitely worth a try!

Lightning talks

Erik Michaels-Ober (@sferik) explored Swift in his lightning talk. He feels that Apple’s new programming language features Ruby / ActiveSupport-like things. Like maps and the ability of using extensions, albeit not as a built-in feature of the language. Extending an integer class, looks kinda like this:
extension Int { func times(block: () -> ()) { for _ in 0..self { block() } } }
5.times ( printlin("Hello") }

User Group announcements came from our friends at AlchemyCMS – they’ll meet Friday 13th at the Prinzessinnenstr. 20 in Kreuzberg. Ryan Levick (@itchyankles) announced the Strange Group, a meetup on ’emerging and alternative technology’. Idris and Objective Smalltalk will be subject of discussion at the first edition, taking place June 12 at the 6Wunderkinder office.

Then Andreas Tiefenthaler (@pxlpnk) introduced the Emacs Berlin User Group. Meeting every last Wednesday of the month, Emacs Berlin is a welcoming bunch, ‘mostly discussing the Space Cadet keyboard and the hyper key’. The Emacs meetup comes highly recommended, if you ask us. José Albornoz (@eljojo) invited everyone to enjoy Ruby in the Park. Literally.

Florian Gilcher (@Argorak) elaborated on the ‘dark side of Matz‘ in his lightning talk. Or: provided a lighthearted view on what Matz went on record to hate. Turns out MINSWAN (Matz Is Nice So We Are Nice) is a bit of a myth, Matz claims to hate DTS, multiple inheritance, autoload, non-free software and loads more.

The next Berlin Ruby User Group meetup will take place July 3rd (and you should join).

Leave a Reply

Your email address will not be published. Required fields are marked *

*