I went to Ancient City Ruby this past week, and had an amazing time. There was a great turnout, and it was a lot of fun meeting everyone. I'd like to take a few minutes to summarize the talks, and get you excited for their imminent release online. So with that, let's dig in.
Leon's Allegory of the Cave
Leon Gersing got things started with his allegory of the cave. He talked on, power distributions in organizations, and the training of young people to conform to a specified mentality. Drawing connections from Plato's allegory of the cave, Leon explained to us that the reality that we are taught is not necessarily real. That we have a responsibility to challenge these conventions everyday in order to progress. And, like in the allegory of the cave, once we've seen something more we cannot return to the cave. It was a really fun talk, that piqued my interest.
Breaking Up (With) Your Test Suite
This talk was great. Justin Searls explained an approach to organizing your suite into a few well defined test types in order to more immediately expose the meaning of the test. Generally, there are two types of tests. Confidence tests, which ensure that the code does what you want. And Understanding tests, which are designed to drive design and ensure usability. Luckily you don't have to rely on me to explain this talk, because Justin wrote a great blog about the process by which he created this talk. His blog post also has a link to the slide deck, which is awesome btw. Check it out here. Thanks @searls.
Let's Write Some Wierd Ruby
David Copeland decided to challenge our assumptions in his talk. First, he theorized a world that was bereft of the billion dollar mistake (the creation of nil) and wrote interesting Ruby without the use of nil. Then he continued in a world without
else. It was fun to see the clever use of Ruby to solve these problems.
In this talk Katrina Owen drew upon her experience with exercism.io's Bob example. Having reviewed many of these examples from Rubyists of varying skill levels, she was able to show the transformation over time. Moving from a naive implementation to a robust solution. The talk showed how beginner programmers will use a chainsaw (overkill) to solve their problems, and as you advance you'll begin reaching for more subtle tools. Also, it was great to hear her explain how much trouble she takes naming things. During Q&A she talked about how she struggled to name the beer for a "99 bottles of beer on the wall" program for six months, eventually going with
Be sure to check out exercism.io.
Testing the Untestable
Richard Schneeman talked about his experience testing the untestable. Which in this case was the Heroku ruby buildpack. He explained MVP, which in this case means Minimum Viable Patch, which led to a very difficult testing enviroment. He showcased some black box testing techniques that enabled him to have confidence that things were working as needed. I especially liked his approach to dealing with network testing issues, which involves retrying flaky network interactions. I like it primarily because of his rrrrtry gem, which has an awesome name. In case you were wondering, I think rrrrrtry and rrrtry are still available. :) Awesome talk @schneems.
Fast, Testable, and SANE APIs
Ben Lovell explained how to write sane APIs. He walked us through everything from ActiveModel::Serializers to JSON API to Rails-API. During this time he explained that the common themes that all SANE APIs have in common are
And he showed us how Haley Duff and Heath Ledger are making our lives easier...
Ruby & You
Terrence Lee showed us how he got into ruby-core and how we can contribute to Ruby. He walked us through using SVN to pull down the source and create a working patch for Ruby. Then he talked about the goals for Ruby. This included possibly moving Ruby to Git from SVN and updating the information out there to enable contributions from more people.
One of the main takeaways (for me) was that when you submit a patch you should use bullet points and code snippets to make your case because english is not everyones first language (and code is universal). Also, Friday hug:
Postgres Performance For Humans
Craig Kerstiens Gave an awesome run down of Postgres. Scans, Cache, indexes, and hstore were just a few of the features he went over. Craig took an advanced look at all of these and more. One of the major takeaways (for me anyways) here is that when 9.4 comes around we'll be able to use JSONB to store json. This will make JSON more performant (queryable and indexable). Pretty neat!
Introduction to Elixir for Rubyists
Josh Adams gave an introduction the Elixir. Elixir is a functional programming language created by José Valim built on top of the EVM. The functional paradigm is becoming more and more common. And Elixir is a wonderful functional language that will feel familiar to most Rubyists as it shares quite a bit of syntax. I reccomend checking out Elixir Sips if you want to see a bit more of the language.
Oh, Oh, Oh, It's Magic
In this talk Aaron Patterson explained his Magic, The Gathering interest. He has a large collection that he wanted to categorize. In order to achieve his goal he built a system that would take a photo of a card, normalize it, then compare it to a corpus of cards for likeness. As he scanned more cards the corpus grows and the guesses get better. This talk really got me thinking about applications of OpenCV (computer vision software). Not only was this an interesting topic area, but it was also a truly entertaining talk. You can see the code that he used for his project here. Thanks Aaron!
Hack Me If You Can
Konstantin Haase talked about internet security. Given recent security issues, this seems almost a prescient choice for a talk. We learned about several different attack vectors that black hats will use if you are unaware. From CSRF to Compression attacks we heard it all. Each of these attack vectors were intricate and subtle. I think my main take away was how difficult it is for framework maintainers to stay ahead of the curve security wise.
Juggling children ... and Rubies
In this talk Evan Machnic relayed his experience being both developer and parent. Specifically, his journey to learning how to work without negatively impacting his parenting (and vice versa). Part of this is to simply separate the two. Don't bring work home, and try to remove distraction while at work.
Ancient City Ruby is one of my favorite conferences for a number of reasons (not the least of which is that I work at Hashrocket), but this year was particularly amazing. I was able to meet many of the speakers, who were all very kind and welcoming as well as insightful. And the talks have definitely stoked my creative fires.
Thanks to Marian Phelan and everyone on the ACR team at Hashrocket - and thanks to all the speakers for taking the time to give such wonderful talks.