{"id":557,"date":"2013-05-09T18:18:34","date_gmt":"2013-05-09T22:18:34","guid":{"rendered":"http:\/\/blog.agilityfeat.com\/?p=557"},"modified":"2013-05-09T18:18:34","modified_gmt":"2013-05-09T22:18:34","slug":"8-things-railsconf-2013","status":"publish","type":"post","link":"https:\/\/agilityfeatpanama.com\/en\/blog\/2013\/05\/8-things-railsconf-2013\/","title":{"rendered":"8 things I learned at RailsConf 2013"},"content":{"rendered":"<p><a href=\"https:\/\/agilityfeat.com\/wp-content\/uploads\/2013\/05\/Portland.jpg\"><img loading=\"lazy\" src=\"https:\/\/agilityfeat.com\/wp-content\/uploads\/2013\/05\/Portland-300x204.jpg\" alt=\"Portland Oregon\" width=\"300\" height=\"204\" class=\"alignleft size-medium wp-image-558\" \/><\/a>Last week I was in Portland Oregon for <a href=\"http:\/\/railsconf.com\/\">RailsConf<\/a> 2013.\u00a0 Portland is a great city with beautiful views of mountains that us East Coasters dream of, unusually good weather (last week anyways), and a very entertaining <a href=\"http:\/\/www.portlandtimbers.com\/\">soccer team<\/a>.\u00a0 But none of that is why I spent a week and some long flights going there.\u00a0 Here are eight takeaways I had from RailsConf\u2026<\/p>\n<h2>1. Real Time Rails takes a step forward<\/h2>\n<p>Brian Cardarella demo\u2019d how Rails 4 makes it easier to write real time apps in Rails that were previously better done in something like nodejs.\u00a0 Brian\u2019s slides are <a href=\"http:\/\/slid.es\/bcardarella\/real-time-rails\">here<\/a>, but most of his talk was a demo so the slides don\u2019t do it justice.\u00a0 For a hint of how this is done in Rails 4 you could also check out this <a href=\"http:\/\/tenderlovemaking.com\/2012\/07\/30\/is-it-live.html\">blog post from Tender Loving<\/a>.\u00a0 To see how you can do similar things now <a href=\"http:\/\/liamkaufman.com\/blog\/2013\/02\/27\/adding-real-time-to-a-restful-rails-app\/\">before Rails 4<\/a>, try out this blog post by Liam Kaufman.<\/p>\n<h2>2. Hiring Volatiles and Stables \u2013 So Happy Together?<\/h2>\n<p>On Monday night, <a href=\"http:\/\/www.randsinrepose.com\/\">Michael Lopp<\/a> gave the evening keynote.\u00a0 My takeaway from his entertaining (if rambling) talk was about how to build a successful but still innovative company, you need to balance the conflicting desires of very innovative-but-difficult-to-manage developers (the Volatiles) and those very reliable-but-not-very-creative developers that drift to more established companies <a href=\"https:\/\/agilityfeat.com\/wp-content\/uploads\/2013\/05\/2013-04-30_13-48-05_509.jpg\"><img loading=\"lazy\" src=\"https:\/\/agilityfeat.com\/wp-content\/uploads\/2013\/05\/2013-04-30_13-48-05_509-300x168.jpg\" alt=\"RailsConf Exhibit Hall\" width=\"300\" height=\"168\" class=\"alignleft size-medium wp-image-559\" \/><\/a>(the Stables).\u00a0 As AgilityFeat grows, I can start to see this tension coming into play.\u00a0 While this was not a technical talk or specific to Rails, there were some very good nuggets for where I am at right now.<\/p>\n<h2>3. Snappy Apps take advantage of asynchronous workers<\/h2>\n<p><a href=\"https:\/\/twitter.com\/HappyMrDave\">David Kapp<\/a> from <a href=\"http:\/\/www.coshx.com\/\">coshx labs<\/a> gave a very good overview of <a href=\"https:\/\/github.com\/coshx\/async_and_rails\">how to use asynchronous workers in rails<\/a>, and it reminded me to remind myself to use them more often.\u00a0 He listed these candidates for aynch calls:<\/p>\n<ul>\n<li>call external apis, especially slow ones<\/li>\n<li>number crunching<\/li>\n<li>document generation<\/li>\n<li>image or video manipulation<\/li>\n<li>sending email<\/li>\n<li>payment processing<\/li>\n<li>geolocation<\/li>\n<\/ul>\n<p>David was using <a href=\"https:\/\/github.com\/resque\/resque\">Resque<\/a> in his example, but other frameworks would work well too.\u00a0 He suggested starting with 2 or 3 worker threads initially and then monitoring the workload, make sure things are not being queued faster than they can be processed.<\/p>\n<h2>4. Split Testing in Rails<\/h2>\n<p><a href=\"https:\/\/agilityfeat.com\/wp-content\/uploads\/2013\/05\/2013-05-01_12-20-56_731.jpg\"><img loading=\"lazy\" src=\"https:\/\/agilityfeat.com\/wp-content\/uploads\/2013\/05\/2013-05-01_12-20-56_731-300x168.jpg\" alt=\"RailsConf sessions were packed!\" width=\"300\" height=\"168\" class=\"alignleft size-medium wp-image-560\" \/><\/a><a href=\"https:\/\/twitter.com\/bryanwoods\">Bryan Woods<\/a> talked about how to do <a href=\"https:\/\/speakerdeck.com\/bryanwoods\/split-testing-for-product-discovery\">split testing using Rails<\/a>, and introduced an open source frame called <a href=\"https:\/\/github.com\/howaboutwe\/experimental\">Experimental<\/a> that has come out of his teams\u2019 work.\u00a0 They built this framework after realizing that doing simple splitting techniques like odd\/even user id\u2019s was not working well for users.\u00a0 For example, they realized they typically gave all the changes to even numbered users, and so those user saw lots of changes all the time, making them look bad as a company.\u00a0 The odd numbered users always saw stability and never a change.<\/p>\n<p>Experimental allows them to bucket users and put them in specific experiments easier to ensure a better experience for everyone.<\/p>\n<h2>5. WTF is the deal with PRY?<\/h2>\n<p>Conrad Irwin gave a great tour of <a href=\"https:\/\/github.com\/pry\/pry\">PRY<\/a>, which is an alternative to the ruby console tool IRB.\u00a0 It allows you to do all sorts of cool things like \u201cls\u201d commands to see the methods on a class, code documentation, and the very entertaining <a href=\"https:\/\/github.com\/pry\/pry\/blob\/d6ef67cfa7cd5ff2b6da5aa2c9946969c033b105\/lib\/pry\/commands\/wtf.rb\">\u201cwtf?\u201d<\/a> command that shows part of the trace resulting from the most recent command.\u00a0 Very useful stuff for debugging.<\/p>\n<h2>6. Datomic and \u201cnewSQL\u201d<\/h2>\n<p>If you are tired of noSQL vs SQL debates, then you can take comfort in a third option:\u00a0 what <a href=\"https:\/\/twitter.com\/yokolet\">Yoko Harada<\/a> called \u201cnewSQL.\u201d\u00a0 Yoko showed how the <a href=\"http:\/\/rubygems.org\/gems\/diametric\">diametric<\/a> gem will give ActiveRecord-like model functionality in Ruby on top of a Datomic data store.\u00a0 Datomic\u2019s \u201cfact based\u201d database is supposed to be very good for large-read database needs and also has a sense of time built into it that makes it easy to roll back data and look at what it was previously.<\/p>\n<h2>7. BDD for iOS? Yes you can with RubyMotion!<\/h2>\n<p><a href=\"https:\/\/agilityfeat.com\/wp-content\/uploads\/2013\/05\/2013-05-02_07-02-15_34-e1368137623514.jpg\"><img loading=\"lazy\" src=\"https:\/\/agilityfeat.com\/wp-content\/uploads\/2013\/05\/2013-05-02_07-02-15_34-e1368137623514-168x300.jpg\" alt=\"2013-05-02_07-02-15_34\" width=\"168\" height=\"300\" class=\"alignleft size-medium wp-image-561\" \/><\/a><a href=\"https:\/\/twitter.com\/bsbodden\">Brian Sam-Bodden<\/a> showed us how to use <a href=\"https:\/\/github.com\/alloy\/macbacon\">MacBacon<\/a> to do behavior driven development of an iOS app using <a href=\"http:\/\/www.slideshare.net\/bsbodden\/tdd-withrubymotion\">Ruby Motion<\/a>.\u00a0 BDD is not something you normally see on iOS apps, and while RubyMotion is not appropriate for all mobile development it can be a very useful way to bridge the gap to mobile development for Rails developers.\u00a0 Especially if you don\u2019t want to give up your RSpec ways.<\/p>\n<h2>8. Running with Rails coders<\/h2>\n<p>The best things at conferences usually happen outside the sessions.\u00a0 RailsConf is no exception.\u00a0 Going to the Portland Timbers soccer game was great, but perhaps even better was taking the initiative to go running with some Rails coders.\u00a0 <a href=\"https:\/\/twitter.com\/darinrs\">Darin Swanson<\/a> kindly organized two runs during the week.\u00a0 One was a riverside run in downtown Portland and the second was a mountain top trail run near the Portland Zoo.\u00a0 I ran a little farther on those runs than I typically do, because I was inspired by the scenery as well as the example set by those marathon coders I was running with.\u00a0 It as a very friendly group and a real highlight of the trip \u2013thank you to everyone I met along the way at RailsConf!<\/p>","protected":false},"excerpt":{"rendered":"<p>Last week I was in Portland Oregon for RailsConf 2013.\u00a0 Portland is a great city with beautiful views of mountains that us East Coasters dream of, unusually good weather (last week anyways), and a very entertaining soccer team.\u00a0 But none of that is why I spent a week and some long flights going there.\u00a0 Here [&hellip;]<\/p>","protected":false},"author":4,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":""},"categories":[16],"tags":[19,95,96,35],"jetpack_featured_media_url":"","yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v15.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>8 things I learned at RailsConf 2013 - AgilityFeat Panama Software Test Center<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/agilityfeatpanama.com\/en\/blog\/2013\/05\/8-things-railsconf-2013\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"8 things I learned at RailsConf 2013 - AgilityFeat Panama Software Test Center\" \/>\n<meta property=\"og:description\" content=\"Last week I was in Portland Oregon for RailsConf 2013.\u00a0 Portland is a great city with beautiful views of mountains that us East Coasters dream of, unusually good weather (last week anyways), and a very entertaining soccer team.\u00a0 But none of that is why I spent a week and some long flights going there.\u00a0 Here [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/agilityfeatpanama.com\/en\/blog\/2013\/05\/8-things-railsconf-2013\/\" \/>\n<meta property=\"og:site_name\" content=\"AgilityFeat Panama Software Test Center\" \/>\n<meta property=\"article:published_time\" content=\"2013-05-09T22:18:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/agilityfeat.com\/wp-content\/uploads\/2013\/05\/Portland-300x204.jpg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\">\n\t<meta name=\"twitter:data1\" content=\"4 minutes\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/34.200.113.64\/#website\",\"url\":\"https:\/\/34.200.113.64\/\",\"name\":\"AgilityFeat Panama Software Test Center\",\"description\":\"AgilityFeat Panama offers customized, multilevel web and mobile software testing for a variety of industries.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/34.200.113.64\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/agilityfeatpanama.com\/en\/blog\/2013\/05\/8-things-railsconf-2013\/#primaryimage\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/agilityfeat.com\/wp-content\/uploads\/2013\/05\/Portland-300x204.jpg\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/agilityfeatpanama.com\/en\/blog\/2013\/05\/8-things-railsconf-2013\/#webpage\",\"url\":\"https:\/\/agilityfeatpanama.com\/en\/blog\/2013\/05\/8-things-railsconf-2013\/\",\"name\":\"8 things I learned at RailsConf 2013 - AgilityFeat Panama Software Test Center\",\"isPartOf\":{\"@id\":\"https:\/\/34.200.113.64\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/agilityfeatpanama.com\/en\/blog\/2013\/05\/8-things-railsconf-2013\/#primaryimage\"},\"datePublished\":\"2013-05-09T22:18:34+00:00\",\"dateModified\":\"2013-05-09T22:18:34+00:00\",\"author\":{\"@id\":\"https:\/\/34.200.113.64\/#\/schema\/person\/c8d60d597071526db386b2b8a4afac64\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/agilityfeatpanama.com\/en\/blog\/2013\/05\/8-things-railsconf-2013\/\"]}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/34.200.113.64\/#\/schema\/person\/c8d60d597071526db386b2b8a4afac64\",\"name\":\"arin\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/34.200.113.64\/#personlogo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/cc498e210512c707ed769986dd745896?s=96&d=mm&r=g\",\"caption\":\"arin\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"https:\/\/agilityfeatpanama.com\/en\/wp-json\/wp\/v2\/posts\/557"}],"collection":[{"href":"https:\/\/agilityfeatpanama.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/agilityfeatpanama.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/agilityfeatpanama.com\/en\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/agilityfeatpanama.com\/en\/wp-json\/wp\/v2\/comments?post=557"}],"version-history":[{"count":0,"href":"https:\/\/agilityfeatpanama.com\/en\/wp-json\/wp\/v2\/posts\/557\/revisions"}],"wp:attachment":[{"href":"https:\/\/agilityfeatpanama.com\/en\/wp-json\/wp\/v2\/media?parent=557"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/agilityfeatpanama.com\/en\/wp-json\/wp\/v2\/categories?post=557"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/agilityfeatpanama.com\/en\/wp-json\/wp\/v2\/tags?post=557"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}