On September 14th-15th I attended the Barcelona Ruby Conference 2013. This conference was organised by Codegram Technologies at the AXA Auditorium in the Illa Diagonal shopping centre in Barcelona and was attended by around 300-400 people. I had attended several conferences before but this was my first Ruby conference, so I was looking forward to seeing what the Ruby community had to offer.
Barcelona is a wonderful city to visit and therefore made a great conference location. The weather was hot on the Saturday but then rained on the Sunday. The conference itself was a single-track conference with all talks held in a single auditorium, where this had a large stage for speakers and a big projection screen behind the stage. The two days of talks for the conference both ran from 9am until after 6pm, with a dense schedule and lots of well-known speakers from the Ruby world. Both days had an evening party, where Saturday night’s party was held on the beach until late. Lunch and coffee were provided on both days by some of the many conference sponsors.
The opening day of the conference was scheduled to start at 9am, but large registration queues formed outside and it eventually started 30 minutes late. Whilst waiting in the auditorium for the introduction to start, it was clear that the audio/visual production quality of this conference was high. The conference had a space theme, so NASA-style space exploration announcements were played in a loop over the PA system before the introduction began. A great intro video was then played on screen, where this was in the style of a Hollywood action movie trailer, where a single bad Git commit caused the global internet to fail catastrophically.
The Master of Ceremonies was Dr Nick (I didn’t catch his surname) and he came on stage dressed in a full astronaut costume. He introduced the conference with great enthusiasm, telling lots of jokes and giving the standard conference attendee announcements. He also announced that the astronaut costume he was wearing was being raffled off at 5 euros per ticket. Dr Nick acted as an MC for the entire two days program and also coordinated the Q&A sessions after each talk. The opening keynote speaker was then Ruby creator Yukihiro Matz with “Changing your World”. Matz talked for 50 minutes on the Ruby community, how he learned about coding from examining the Emacs source code and how he created Ruby. He made the statement that “language development is about programming the minds of programmers” and also discussed future plans for the standard MRI implementation of Ruby.
The second speaker was GitHub engineer Vicent Marti on “Once upon a time, Ruby”. He presented three problems encountered in hosting large Ruby applications at GitHub, each of which was told in the style of a children’s fairy tale. The first of these stories was on MRI mark-and-sweep garbage collection and its difficulties in managing Ruby programs interacting with C libraries. His second example was on timeouts and how to manage them. Vicent Marti‘s final example then encouraged more people to use JRuby and Rubinius instead of MRI Ruby, as he believed that MRI Ruby has too much legacy code for future use as the reference Ruby implementation. He finished with a plea to gem creators that they should test their libraries against JRuby and Rubinius for correct functionality.
The next speaker was then Chris Kelly on “Rabbit hole: garbage collection and Ruby’s future”. This was a very low-level talk with lots of C code showing how garbage collection works in MRI Ruby, in order to communicate that the MRI Ruby garbage collection system is a non-trivial piece of Ruby infrastructure. He described how C functions such as gc_mark() and gc_sweep() are used in mark-and-sweep garbage collection, and stated that this C code was “macros all the way down”.
The final speaker before lunch was then Matt Wynne on “Treating objects like people”. He began with the statement that, despite him being an OO programmer for many years, he recently realised that he’d been using Ruby objects wrong. He showed the existing source code for the Cucumber BDD framework and stated that he felt using a data-centric domain model for it was a mistake in retrospect. He gave a brief history of OO programming languages, from SIMULA-67 to Smalltalk-80 and C++, and recommended both the GOOS and Object Thinking books for a better understanding of OO programming. He then showed the source code for Cucumber 2.0, where this was a rewrite of the library to use a more immutable, functional style.
A packed lunch was then provided and attendees were able to sit and enjoy the hot Barcelona weather in a park outside the conference venue. The first talk after lunch was “Rules” by Sandi Metz, author of Practical Object-Oriented Design in Ruby. She introduced 5 rules for better code quality, including short classes and short methods. She conveyed her theme of rules by presenting fascinating asides from social science research on the tendency for people to be law followers or law breakers. This included research examples on people crossing a series of pedestrian crossings in the fastest times possible and competing players drawing resources from a shared regenerating pool when resource renewal limits existed. She made the point that turn-based collaborative games can lead to reciprocal rule breaking, but that humans tend towards collaborative behaviour.
The next talk was then Jeremy Walker on “Refactor your productivity”, where this did not contain any code but gave many life tips on becoming a more productive programmer. He recommended the Coffitivity background noise app for those used to coding in coffee shops. He also presented a slide that simply said “Vim”. There was an expectant pause from the audience, then a mixture of 70/30 cheers and boos as he revealed the next slide that said “Use Vim”. He did present a following slide, however, which conceded that Emacs is also available. He finished off with fascinating diagrams of spider webs after those spiders had been fed flies injected with cannabis, sleeping pills or caffeine, thus showing the effects of these drugs.
Next up came Heroku employee Richard Schneeman with “Millions of apps: what we’ve learned”. He gave deployment tips such as never putting secret keys or any kind of login credentials into version control, but reading them from environment variables. He also advised to aim for development/production parity, where having different database implementations in development and production is a bad idea. He added that there are no performance problems in a software application, only visibility problems.
The following talk was then Ruby Tapas presenter Avdi Grimm on “You gotta try this”. He presented his Naught Ruby library for building Null Object classes and also showed great enthusiasm when describing his views on both the teaching and learning benefits of pair programming. He also showed his www.pairprogramwith.me site and #pairwithme Twitter hashtag for encouraging pair programming, especially remote pairing.
The final talk of the Baruco opening day was then Corey Haines on “Design patterns and the proper cultivation thereof”. He described the origins of design patterns, including the c2 Wiki where the original design pattern discussions took place. He then discussed the correct times to use design patterns, whether they were still relevant in modern software development and recommended Refactoring to Patterns as a good book for the practical use of design patterns.
The opening talk on Sunday was a second keynote “Hunters and Gatherers” by Paolo Perrotta. As with all keynotes, this was more abstract than solely presenting code, where he discussed the evolution of programming languages. As a metaphor for this evolution, Paolo Perrotta discussed how mankind learned to calculate longitude, which he described as one of the greatest scientific achievements of the human race. He then described the introduction of new programming languages as analogous to unexpected evolutionary adaptations, and compared the popularity decline and deaths of some programming languages as “evolutionary dead ends”, where he gave the SOAP protocol as an example of this. In line with the “Hunters and gatherers” title, he explained that programming language designers with strong opinions and who act single-mindedly are hunters, whereas those who build and incrementally improve on existing languages are gatherers. He finished by advising a strategy of “strong opinions, weakly held” when developing new programming languages and frameworks.
The next talk was JRuby creator Charles Nutter on “The future of JRuby”. He gave a low-level technical talk on current and forthcoming features of JRuby, including the new invokedynamic feature that has helped to improve the performance of JRuby. He mentioned the Graal Oracle API to a Native JIT compiler and the Truffle library for working with Graal. He then gave a code example from the jo gem for implementing goroutines from the go language in Ruby, and mentioned a recent Google Summer of Code project that aimed to optimise JRuby startup times.
Next up was Bryan Helmkamp on “Building a culture of quality”, where he discussed improving the quality of code created by a software organisation, especially when starting from a low level of existing code quality. He advocated introducing process changes as experiments, so the positive results from these experiments could be used as justifications of the process changes for sceptical/reluctant team members. He also suggested to introduce a culture of lunchtime brown bag sessions for knowledge sharing, where this could involve watching screencasts or discussing interesting blog posts.
The final talk before lunch was then “iOS Games with RubyMotion” by Brian Sam-Bodden. He began with a controversial quote from the RubyMotion creator that “We do not believe that Xcode makes a good environment for Ruby development (or development in general)”. He then mentioned the bubble-wrap and motion_model gems for RubyMotion and gave the statistic that games make up 60% of paid apps on iPhone and 50% on iPad. He introduced the joybox gem for RubyMotion game creation with a built-in physics engine and presented his two RubyMotion games rm-tetris and rm-super-koalio. He gave a brave and ambitious coding demo on these two games, including a sequence of 13 Git commits to show incremental progress on developing his rm-super-koalio game in RubyMotion. This was a great talk on the power of RubyMotion in creating iOS games.
After lunch came “Yak shaving is best shaving” by Aaron Patterson. Aaron Patterson is a very funny and entertaining speaker, as well as a well-known and well-respected Rubyist. He presented a simple bug fix that led to him delving deeper into the underlying Ruby and C code for the library out of curiosity. He questioned a statement on performance made in a comment for that section of code and chose to also investigate that assumption. This was to make the point that sometimes investigating deeply into source code and allowing yourself to be distracted by your own curiosity can improve your software knowledge.
The next talk was “A Rubyist in Clojure-land” by RSpec creator David Chelimsky. He discussed using functional idioms from Clojure in Ruby code, especially chaining together functions to form a pipeline. He also compared a few different expectation libraries that could be used in RSpec assertions.
Following him came Katrina Owen with “Freeloaders”, where the slides for this talk were styled as a 1980s computer game. She discussed fixing a bug in some terrible Ruby code, where she gained XP (Expletive Points) based on the poor quality of the code. She then discussed the team behaviour that leads to such poor code and introduced a Game Theory analogy to explain it. She made the intriguing comparison between individual developers on a team cutting corners to produce bad code and the Prisoner’s Dilemma, where developers can either collaborate (write clean code) or cheat (hack together quick, bad code to implement features). This was an analogy that I’d never considered before and which presents the problem in a different light.
The next talk was then Reg Braithwaite on “What developing with Ruby can teach us about developing Ruby”. He began by referencing the idea of the Infinite Monkey Theorem and stated that the main problem in software development is separating very good code from the rest. He continued on this theme with the assertion that searching for changes in programming language syntax or faster languages is merely desiring faster typewriters. He finished off with the belief that the two most important things for Ruby to concentrate on are making it easy to write tests and encouraging collaborative software developing through social coding such as GitHub. This was a thought-provoking talk exploring aspects of Ruby language culture and introducing ideas from social sciences, not a lower level coding talk.
This reached the end of the main talks, although there were then 8 lightning talks of 5 minutes each. These covered a variety of topics, the best of which was from Anatoli Makarevich. He’d watched Sandi Metz‘s “Rules” talk from the previous day and written the sandi_meter library overnight to test whether a specified code base adhered to those rules. This bought the final day of the conference to a close.
Overall I felt that this was a great conference. The speaker list included lots of high-quality Rubyists and covered a wide range of topics. Some talks such as Charles Nutter‘s and Chris Kelly‘s were very low-level and included lots of core Ruby implementation code. Other talks like Reg Braithwaite‘s, Jeremy Walker‘s, Sandi Metz‘s and Paolo Perrotta‘s were much more abstract, covering non-software topics as thought-provoking asides. Some talks were given by very confident, funny and entertaining speakers, especially Aaron Patterson. My favourite talk of the conference was “Freeloaders” by Katrina Owen
My only criticism of this conference was the venue wifi, which was very poor. A large part of a modern software conference is interactions and discussions on Twitter from the attendees. This has the benefit of generating discussions between the attendees in real time and with other people not present at the conference. The conference wifi was very poor, however, making it difficult to send tweets or browse the internet at all. A conference with 300-400 geeks attending, most of them bringing several computing devices, is a non-trivial problem and would act as a stress test for many wifi networks. The wifi was simply not good enough though, and the conference organisers knew in advance how many people would be in attendance.
This was my only criticism of an otherwise great conference and I would attend again in a future year. The conference attendees were friendly and this was an entertaining conference as well as an educational one. The mark of a good conference is that a person leaves feeling that they have lots of new tools and libraries that they need to learn and new books that they need to read. I definitely felt that way leaving this conference and there were many informative talks on new libraries or techniques to try in my day job. Congratulations to Codegram and all of their volunteers for a well-organised and successful conference.