<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
  <title>almost productive</title>
  <id>http://almostproductive.net/</id>
  <updated>2009-09-05T09:30:20-07:00</updated>
  <author>
    <name>Shay Arnett</name>
  </author>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/almostproductive" /><feedburner:info uri="almostproductive" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
    <title>Ruby Hoedown 2009 Recap</title>
    <link href="http://feedproxy.google.com/~r/almostproductive/~3/CJY_koM6CQY/" rel="alternate" />
    <id>http://almostproductive.net/past/2009/9/5/ruby_hoedown_2009_recap/</id>
    <published>2009-09-05T09:30:20-07:00</published>
    <updated>2009-09-05T09:30:20-07:00</updated>
    <author>
      <name>Shay Arnett</name>
    </author>
    <summary type="html">&lt;p&gt;I had the pleasure of going to the &lt;a href='http://rubyhoedown.com'&gt;Ruby Hoedown&lt;/a&gt; again this year. As awesome as it was last year, this year was even better! There were some really good talks, good hallway track discussions, and last but not least the venue was over the top ridiculous, like small city under a glass roof ridiculous.&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;I had the pleasure of going to the &lt;a href='http://rubyhoedown.com'&gt;Ruby Hoedown&lt;/a&gt; again this year. As awesome as it was last year, this year was even better! There were some really good talks, good hallway track discussions, and last but not least the venue was over the top ridiculous, like small city under a glass roof ridiculous.&lt;/p&gt;
&lt;h3&gt;Writing software, not code, with Cucumber - &lt;a href='http://twitter.com/bmabey'&gt;Ben Mabey&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I was really excited to see a Cucumber talk that wasn&amp;#8217;t just a basic intro to Cucumber. Ben did a good job showing how Cucumber features can add business value to your project. I&amp;#8217;m already a Cucumber fan, so I didn&amp;#8217;t need to be sold. But even so there was one statistic that really stood out, &amp;#8220;56% of all bugs are introduced in requirements&amp;#8221;. Over half of our bugs are introduced before we write even a single line of code. That is scary.&lt;/p&gt;

&lt;p&gt;For me the best part of the talk was Ben walking through a typical workflow with Cucumber + Rspec. It&amp;#8217;s something that I haven&amp;#8217;t seen in a talk before and really showed how these two can work really well together. That&amp;#8217;s not to say that you can&amp;#8217;t use Test::Unit or shoulda or whatever testing framework along with Cucumber.&lt;/p&gt;

&lt;p&gt;Ben also introduced a handful of additional tools, some which I hadn&amp;#8217;t heard of, which make Cucumber even more sweet to work with. I&amp;#8217;ll just link to the tools here, as they probably each deserve a blog post explaining how to use them.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://github.com/brynary/webrat'&gt;webrat&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://seleniumhq.org/'&gt;selenium&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://github.com/bret/watir'&gt;watir&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://github.com/jarib/celerity'&gt;celerity&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://github.com/langalex/culerity'&gt;culerity&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://github.com/chrisk/fakeweb'&gt;fakeweb&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://github.com/timcharper/spork'&gt;spork&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;How to be Simply Awesome - &lt;a href='http://twitter.com/atmos'&gt;Corey Donohoe&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;First off, I heard a lot of people talking who felt like it was an &lt;a href='http://engineyard.com'&gt;Engine Yard&lt;/a&gt; is awesome talk. &lt;em&gt;They are wrong.&lt;/em&gt; While Engine Yard may or may not be awesome, they are merely empowering Corey and Tim to do the awesome work that they do. Any company that would give these two free reign over their projects would see the same results I think.&lt;/p&gt;

&lt;p&gt;This talk was Simply Awesome! Corey tells me this talk was recorded the following day when he gave it at LSRC. So watch for it to become available, it is a must see. It was a fast paced Takahashi style talk, so the slides themselves are practically useless. You really have to watch or at least hear this talk to get the message. I&amp;#8217;ll just touch on some of the thoughts that I came away from the talk with.&lt;/p&gt;

&lt;p&gt;We need to really embrace &lt;a href='http://agilemanifesto.org'&gt;Agile&lt;/a&gt;, no I mean &lt;em&gt;REALLY EMBRACE&lt;/em&gt; it.&lt;/p&gt;

&lt;p&gt;To be able to quickly respond to changes in requirements, Corey and Tim, like to build small services wrapping specific endpoints, instead of monolithic apps. They did TDD/BDD all the time, so each of those tiny services was ruthlessly tested. When your services are tiny with excellent test coverage, you are no longer afraid to make changes, refactor, or add in new features.&lt;/p&gt;

&lt;p&gt;Corey also demanded that we man, or woman, up and really own our code. No more of the whining and complaining about requirements changing. We all know requirements &lt;em&gt;WILL&lt;/em&gt; change so why are we so miffed when a client actually requests a change.&lt;/p&gt;

&lt;p&gt;Corey also talked about the impact that using tools you like have on the work that you do. Specifically they use Sinatra, DataMapper, Cucumber, and RSpec, among many others I&amp;#8217;m sure. This of course doesn&amp;#8217;t mean you will enjoy these same tools, but that is the point, find what you like and use it.&lt;/p&gt;
&lt;h3&gt;MacRuby to the Max&lt;/h3&gt;
&lt;p&gt;Unfortunately this talk was cancelled. Having recently launched an iPhone app, I was interested to see how much more friendly Mac development would be without having to use Obj-C.&lt;/p&gt;
&lt;h3&gt;External DSLs with Ruby - &lt;a href='http://twitter.com/puppetmasterd'&gt;Luke Kanies&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Luke was a very opinionated speaker, which always makes for a fun and interesting talk. Building external DSLs aren&amp;#8217;t part of my daily ruby work, so I just took down the main points and figure I can lookup more info if I need it later. It basically boiled down to four things.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Buy the &lt;a href='http://www.amazon.com/gp/product/0201100886?ie=UTF8&amp;amp;tag=almosprodu-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0201100886'&gt;dragon book&lt;/a&gt;.&lt;/li&gt;

&lt;li&gt;Define a formal grammar.&lt;/li&gt;

&lt;li&gt;Don&amp;#8217;t reinvent the wheel on your lexer, parser, or interpreter if you don&amp;#8217;t have to.&lt;/li&gt;

&lt;li&gt;Use ASTs, which are only really discussed in the dragon book. But that&amp;#8217;s ok cause you have the dragon book now right? :)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Be a civic coder - &lt;a href='http://twitter.com/luigimontanez'&gt;Luigi Montanez&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I missed the first part of this talk, and decided to check out the hallway track instead of trying to play catch up with what was being discussed.&lt;/p&gt;
&lt;h3&gt;Appcelerator Titanium - &lt;a href='http://twitter.com/fallenrogue'&gt;Leon Gersing&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;First off, I need some of that magic EdgeCase public speaking juice. Just like every other EdgeCase presenter I&amp;#8217;ve seen, Leon was very engaging and comfortable speaker.&lt;/p&gt;

&lt;p&gt;On to the good stuff.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.appcelerator.com/'&gt;Appcelerator&lt;/a&gt; currently has two platforms, desktop and mobile. Both of which look pretty cool from a rapid development point of view. Both platforms use HTML, CSS, and Javascript as the backbone. The desktop platform also supports Ruby and Python. The desktop platform is basically a webkit or gecko instance, depending on the platform. While the mobile version actually offers use of native controls and features.&lt;/p&gt;

&lt;p&gt;There is a sweet packaging and management gui. Also there are cloud services for building applications on platforms you don&amp;#8217;t have access to. There is also a good possibility of an App Store like feature coming to the platform.&lt;/p&gt;

&lt;p&gt;The demos were really where you saw the power of Appcelerator. So if you are interested, I suggest you look online for some screencasts or presentations.&lt;/p&gt;
&lt;h3&gt;Forget Kindergarten, Learn to Scale - &lt;a href='http://twitter.com/bmizerany'&gt;Blake Mizerany&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This was a high level blitz of horizontal and vertical scaling techniques. Blake went through a variety of tools and showed very briefly how to take advantage of them to speed up your app. It blew away the misconception that some of them were some kind of voodoo magic that I would never understand. He used the &lt;a href='http://heroku.com'&gt;Heroku&lt;/a&gt; platform in many of the examples to explain how these technologies can be used in the real world. Needless to say I was totally blown away with the Heroku platform and started messing around with it that night.&lt;/p&gt;

&lt;p&gt;I did manage to come away with a few tips so here is a short list.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use HTTP cacheing, Heroku has a very cool cacheing layer, but even if you aren&amp;#8217;t on Heroku, use browser cacheing to your advantage.&lt;/li&gt;

&lt;li&gt;Use S3, or similar cloud storage, instead of relying on problematic NFS/GFS.&lt;/li&gt;

&lt;li&gt;Keep your response times down, under 200ms. Use ajax to hide slowness if possible.&lt;/li&gt;

&lt;li&gt;Use delayed job or message queues where appropriate.&lt;/li&gt;

&lt;li&gt;Move complexities to small standalone apps and keep the front end dumb and fast.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Time of Your Life - &lt;a href='http://twitter.com/cardioid'&gt;Yossef Mendelssohn&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Due to audio problems and being in the back of the room, I ended up in the hallway track again. From what I could gather it was a look at time tracking and specifically a tool Yossef built to help him keep time in Freshbooks.&lt;/p&gt;
&lt;h3&gt;Threaded Awesome - &lt;a href='http://twitter.com/joedamato'&gt;Joe Damato&lt;/a&gt; and &lt;a href='http://twitter.com/tmm1'&gt;Aman Gupta&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A suprisingly easy to follow discussion of their experience improving the ruby threading model. They introduced me to a handful of awesome profiling tools that I would have probably been to scared to touch otherwise. Definitely check out the slides for this talk if for no other reason than the examples using the profiling tools.&lt;/p&gt;
&lt;h3&gt;Testing or Something - &lt;a href='http://twitter.com/dchelimsky'&gt;David Chelimsky&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The title was just a working title, the talk ended up being about mock objects and how and when to use them. There were at least 3 different mock libraries used throughout the talk, so you got a quick glimpse at the syntax of each. Much like Ben&amp;#8217;s Cucumber talk, this talk had some excellent BDD step by step walkthroughs that were extremely helpful. Because of these walkthroughs, the talk was actually a really awesome intro to BDD with RSpec. The talk and the questions brought up some very interesting thoughts on testing philosophies, something I hope to look at in more detail on this blog.&lt;/p&gt;
&lt;h3&gt;Keynote - &lt;a href='http://twitter.com/jamis'&gt;Jamis Buck&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Jamis used the world of &lt;a href='http://www.isfa.org/'&gt;string figures&lt;/a&gt;, as related to programming, to explain how diversity, expertise, and moderation all play a part in doing the best we can. Diversity opens up new perspectives and thought processes that might never get explored in problem solving situations. Expertise of not only your language, but also your tools, and even your platform was emphasized. Jamis really pushed the moderation part as well. Recommending that we all find at least one hobby that was away from our day to day technology. It will help you to unwind and relax, and can even be a source of diversity in your thought processes.&lt;/p&gt;

&lt;p&gt;Tips &amp;amp; Techniques to deepen your knowledge in expert areas, as well as areas you are just learning were discussed. &amp;#8220;Code spelunking&amp;#8221;, as Jamis called it, is something many of us do already, but if it isn&amp;#8217;t then you should definitely start. Basically when you are doing something unfamiliar, don&amp;#8217;t just chalk it up to magic and go on about your day. Open the hood and step through what is actually going on. Even if you can only spare a couple of minutes, you will have a better grasp on what is happening, and can dig even deeper the next time.&lt;/p&gt;

&lt;p&gt;Also mentioned was sharing knowledge. While you are learning you will obviously be looking to others for answers. You should look for ways to share those answers, and other knowledge you have, for others that might have the same questions. Blogs, forums, and mailing lists were mentioned as great opportunities for this.&lt;/p&gt;
&lt;h3&gt;Lighting talks, hallway track, dinner, and hacking sessions.&lt;/h3&gt;
&lt;p&gt;As always, the extracurricular activities at a Ruby conference were awesome. If you are going to conferences and watching the talks, then kinda sitting back by yourself chilling out, &lt;em&gt;YOUR DOING IT WRONG!&lt;/em&gt; Go out and ask questions, propose ideas, and don&amp;#8217;t be afraid to have opinions. I got to meet loads of new people this year, and got involved in many thought provoking conversations.&lt;/p&gt;
&lt;h3&gt;Overall&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Hoedown Rocked!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href='http://twitter.com/jm'&gt;@jm&lt;/a&gt; ROCKS!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The sponsors that made it all possible ROCK!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;See you next year at the Hoedown!&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/almostproductive/~4/CJY_koM6CQY" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://almostproductive.net/past/2009/9/5/ruby_hoedown_2009_recap/</feedburner:origLink></entry>
  <entry>
    <title>Adopting the GitHub deployment strategy</title>
    <link href="http://feedproxy.google.com/~r/almostproductive/~3/RLV_He1nbDw/" rel="alternate" />
    <id>http://almostproductive.net/past/2009/9/3/adopting_the_github_deployment_strategy/</id>
    <published>2009-09-03T19:46:39-07:00</published>
    <updated>2009-09-03T19:46:39-07:00</updated>
    <author>
      <name>Shay Arnett</name>
    </author>
    <summary type="html">&lt;p&gt;The other day I read a &lt;a href='http://github.com/blog/470-deployment-script-spring-cleaning'&gt;blog post&lt;/a&gt; from &lt;a href='http://twitter.com/defunkt' title='@defunkt on twitter'&gt;@defunkt&lt;/a&gt; about cleaning up the deployment strategy at GitHub. He explained, including some example code, how they had created a &lt;a href='http://git-scm.com/'&gt;git&lt;/a&gt; based deployment strategy for &lt;a href='http://www.capify.org/'&gt;Capistrano&lt;/a&gt;. He also mentioned that this new strategy was MUCH MUCH faster than the typical git deployment.&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;The other day I read a &lt;a href='http://github.com/blog/470-deployment-script-spring-cleaning'&gt;blog post&lt;/a&gt; from &lt;a href='http://twitter.com/defunkt' title='@defunkt on twitter'&gt;@defunkt&lt;/a&gt; about cleaning up the deployment strategy at GitHub. He explained, including some example code, how they had created a &lt;a href='http://git-scm.com/'&gt;git&lt;/a&gt; based deployment strategy for &lt;a href='http://www.capify.org/'&gt;Capistrano&lt;/a&gt;. He also mentioned that this new strategy was MUCH MUCH faster than the typical git deployment.&lt;/p&gt;

&lt;p&gt;I happened to be prepping an app for deployment and decided I would try out this new strategy. I ran into a few issues where the examples given weren&amp;#8217;t namespaced properly to work right out of the box for me. I also decided to make a few changes for my needs. In the end I have a new favorite deployment strategy that can deploy this specific app in around 3 seconds which is AMAZING! Read the &lt;a href='http://github.com/blog/470-deployment-script-spring-cleaning'&gt;original post&lt;/a&gt; for an in depth explanation of how it all works, or just grab this &lt;a href='http://gist.github.com/180365'&gt;deploy.rb&lt;/a&gt; and have at it.&lt;/p&gt;
&lt;script src='http://gist.github.com/180365.js' /&gt;&lt;img src="http://feeds.feedburner.com/~r/almostproductive/~4/RLV_He1nbDw" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://almostproductive.net/past/2009/9/3/adopting_the_github_deployment_strategy/</feedburner:origLink></entry>
</feed>

