<?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:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" gd:etag="W/&quot;A0YCQHo5cSp7ImA9WhBVGE0.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185</id><updated>2013-04-24T08:12:41.429-05:00</updated><category term="Saikuro" /><category term="RailsConf2007" /><category term="attachment_fu" /><category term="Bundler" /><category term="Mocking" /><category term="javascript" /><category term="XP" /><category term="redis" /><category term="ActiveRecord" /><category term="metric_fu" /><category term="Amazon" /><category term="churn" /><category term="Math" /><category term="Windows" /><category term="cache-fu" /><category term="complexity" /><category term="pairing" /><category term="restful_authentication" /><category term="OSS" /><category term="Apprenticeship" /><category term="MongoDB" /><category term="Code" /><category term="singleton_class" /><category term="Obtiva" /><category term="RSpec" /><category term="RubyMidwest2010" /><category term="css" /><category term="JRuby" /><category term="git" /><category term="Svn" /><category term="consulting" /><category term="Mingle" /><category term="craftsmanship" /><category term="TextMate" /><category term="Flay" /><category term="LoneStarRubyConf2009" /><category term="Routes" /><category term="Rake" /><category term="GLSEC" /><category term="WindyCityRails" /><category term="test_coverage" /><category term="lean" /><category term="MacRuby" /><category term="ord_sessions" /><category term="legacy_code" /><category term="SQuiD" /><category term="refactoring" /><category term="ostatus" /><category term="craftsman_swap" /><category term="IO" /><category term="Rails" /><category term="Backstop" /><category term="LoneStarRubyConf2008" /><category term="DUST" /><category term="Agile2009" /><category term="Flog" /><category term="commentary" /><category term="OSX" /><category term="RailsConf2010" /><category term="RubyKaigi2010" /><category term="oracle" /><category term="RubyWorks" /><category term="Tomcat" /><category term="interview" /><category term="RubyConf2008" /><category term="memprof" /><category term="iPhone" /><category term="Bugs" /><category term="Ruby" /><category term="Linux" /><category term="mac" /><category term="RailsConf2009" /><category term="Fixtures" /><category term="memcached" /><category term="GC" /><category term="design" /><category term="EVDO" /><category term="testing" /><category term="Rcov" /><category term="not_code" /><category term="citcon" /><category term="db" /><category term="Metrics" /><title>Jake Scruggs</title><subtitle type="html">writes ruby/wears crazy shirts</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>212</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/JakeScruggs" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="jakescruggs" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;D0cBQHYyeyp7ImA9WhJXFEo.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185.post-2850506625953831384</id><published>2012-08-08T20:16:00.001-05:00</published><updated>2012-08-08T20:17:31.893-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-08T20:17:31.893-05:00</app:edited><title>Why I abandoned MetricFu</title><content type="html">My last commit to &lt;a href="http://metric-fu.rubyforge.org/" target="_blank"&gt;MetricFu&lt;/a&gt; was March 2...&amp;nbsp; of 2011.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
So. &lt;br /&gt;
much.&lt;br /&gt;
shame.&lt;br /&gt;
&lt;br /&gt;
Since I am throwing in the towel and handing over leadership (perhaps to you), I thought I should explain why I've been such a terrible maintainer and why I'm walking away. &lt;br /&gt;
&lt;br /&gt;
Reasons:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;1). MetricFu is a mess.&amp;nbsp; At some point, with all the submissions coming in, the architecture and testing got away from me.&amp;nbsp; Now it's pretty depressing to see crap code quality in an app that is supposed to be about good code quality.&amp;nbsp; I can not overstate how embarrassing and frustrating this is – mostly because it's my fault (I let in things I shouldn't have. Stupid feature blindness).&lt;/li&gt;
&lt;li&gt;2). In 2008, when I created MetricFu, I was fascinated by metrics and now I'm not because I don't need the tools to see the problems anymore.&amp;nbsp; Metrics made me better but now I'm leaving them behind:&amp;nbsp; Selfish.&lt;/li&gt;
&lt;li&gt;3). I'm not a consultant at the moment so the exploratory nature of MetricFu isn't very useful to me.&amp;nbsp; I know where the bad parts of town are in my app.&lt;/li&gt;
&lt;li&gt;4). I think metrics can be a great teaching tool, but you can learn all the wrong things if you're not careful. You can reduce Flog scores without making the app better (Simple: arbitrarily divide up every large method) . Same with code coverage. Even code duplication detection can lead to bad code.&amp;nbsp; DRY-ing things up in a bad way can often be much more harmful then leaving them moist (perhaps you removed some duplication by creating a crazy amount of indirection – a common problem).&lt;/li&gt;
&lt;li&gt;5). Ultimately, creating software is a craft.&amp;nbsp; It's not pure science and it's not pure art, it's a combination of both.&amp;nbsp; MetricFu leans a too little hard toward numbers and that implies a precision we just don't have. How to get from bad code to good is a very delicate dance between content, form, and business requirements.&lt;/li&gt;
&lt;li&gt;6). Integrating over a dozen meta-code gems is a god damn pain.&amp;nbsp; The gems that make up metric_fu use code to analyze code (intense meta Ruby) and so they sometimes conflict.&amp;nbsp; Also since MetricFu mostly uses regexes to parse the (command line or html) output, every change in one of MetricFu's underlying gems means that MetricFu needs a version bump.&amp;nbsp; &lt;/li&gt;
&lt;li&gt;7). The last year has been, personally, very busy and difficult for me.&lt;/li&gt;
&lt;/ul&gt;
For these reasons I'm going to be stepping aside as metric_fu maintainer – I'll still be around to answer questions and such but I probably won't be contributing much code.&amp;nbsp; If I've somehow disappointed or frustrated you because of last year's neglect then I apologize. Seriously.&amp;nbsp; I'm sorry.&lt;br /&gt;
&lt;br /&gt;
Want to lead MetricFu? Make your case in the metric_fu google group:&lt;br /&gt;
&lt;a href="https://groups.google.com/forum/?fromgroups#%21forum/metric_fu" target="_blank"&gt;https://groups.google.com/forum/?fromgroups#!forum/metric_fu&lt;/a&gt;</content><link rel="replies" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/2850506625953831384/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=2850506625953831384" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/2850506625953831384?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/2850506625953831384?v=2" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/2012/08/why-i-abandoned-metricfu.html" title="Why I abandoned MetricFu" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><thr:total>5</thr:total></entry><entry gd:etag="W/&quot;A0EHQXk4fCp7ImA9Wx9SF04.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185.post-5740749811748733602</id><published>2010-12-07T09:50:00.004-06:00</published><updated>2010-12-07T10:33:50.734-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-07T10:33:50.734-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="testing" /><category scheme="http://www.blogger.com/atom/ns#" term="Rails" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title>Oracle Foreign Key without Index Test</title><content type="html">We've been having some Oracle deadlock issues that have been hard to reproduce locally. After a lot of investigation and solving of important problems that happened not to be THE problem we figured out that while we've been pretty good creating integrity constraints in the database we have not been very good about making sure that every foreign key has a corresponding index.  And that can lead to problems.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So we had a situation were our documents table had a foreign key on the accounts table that was not indexed.  So updating an account row lead to a whole table lock on documents (instead of just a row lock which would have happened if there was an index) and that was very bad when we had two separate processes where one was doing a bunch of accounts stuff and the other was doing a lot of documents stuff.  Deadlocks for everyone! &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The sad thing is that if we had just drank the Rails cool-aid about having no integrity constraints in the db we would have been fine but we got into trouble by only implementing constraints and not the indexes they work much better with. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So we found this cool bit of SQL that helped us find all the foreign keys missing an index here: &lt;a href="http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:4530093713805#26568859366976"&gt;http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:4530093713805#26568859366976&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And that help us solve the deadlock problem.  But what about the future?  If only there was a way to run this check periodically and automatically...  Time for a test!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/731989.js?file=indexes_on_foreign_keys_test.rb"&gt;&lt;/script&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As an additional bonus, the failing output of the test tells you how to write the index you need. Big thanks to &lt;a href="http://twitter.com/#!/davebortz"&gt;Dave Bortz&lt;/a&gt; for tracking down this problem -- I just swooped in and wrote the test.  And took credit in this here blog.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/5740749811748733602/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=5740749811748733602" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/5740749811748733602?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/5740749811748733602?v=2" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/2010/12/oracle-foreign-key-without-index-test.html" title="Oracle Foreign Key without Index Test" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;CUYCQ3Y4eyp7ImA9Wx5QEEU.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185.post-9058791524994487093</id><published>2010-08-28T23:09:00.010-05:00</published><updated>2010-08-29T06:59:22.833-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-29T06:59:22.833-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="RubyKaigi2010" /><title>Ruby Kaigi 2010 Day 3</title><content type="html">&lt;div&gt;Last day of Ruby Kaigi! Sad to see it go, it's been a great conference. As per usual Tweets are in bulleted italics and the rest is after the fact commentary.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First I've got to show you the commemorative fans they were handing out:&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/jakescruggs/4934685088/" title="It's the creators of Ruby and PHP by jake_scruggs, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4095/4934685088_0308fb60c3.jpg" width="375" height="500" alt="It's the creators of Ruby and PHP" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It's Matz and... Someone else (sorry if it's obvious - I don't know).  And of course they are programing in the bath.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;BigDecimal: You can handle numbers as large as can fit into memory as opposed to the IEEE double #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;BigMath is the Math module for BigDecimal #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Lots of different rounding modes in BigDecimal #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;BigDecimal.mode is global per process - not thread safe #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;So BigDecimal is Fiber unsafe #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Bummer.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;.@mrkn implemented a solution storing mode in thread local #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Oh good.  Wait, is that in 1.9.2 or trunk. I'd have to be in 1.9.2 right? To the Google! ... Yep, seems like it made it in: &lt;a href="http://redmine.ruby-lang.org/issues/show/3285"&gt;http://redmine.ruby-lang.org/issues/show/3285&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;You can now change modes in a block (added to trunk yesterday) #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Effective digits/ Significant digits determines which digits to keep and which to round off #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;BigDecimals don't know their own effective digits #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;But I think the point of talking about sig figs was that it's coming soonish in Ruby. 1.9.3?&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;It is dangerous to mix floats and BigDecimals #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;BigDecimals can't convert from rational, integer, or float. just strings #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;And you can't do BigDecimal(BigDecimal) !! #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;That is one crappy interface. Taking in only strings is frustrating and weird. How did this happen?&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Now a preview of the future of BigDecimal #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;No library for irrational numbers in Ruby #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Perhaps we can represent irrational numbers as algorithms and on convert when needed. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;BigDecimals don't have real significant digits implemented right now. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;The issue of BigDecimal not being able to handle anything other than a string as input will be fixed as it is a bug #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;The irrational numbers thing sounds pretty cool.  Since I mostly sling around strings for my day job I don't know that I'll ever use it.  But purely for Ruby pride I like to see ruby challenge Python's rising dominance in the sciences and maths.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;I really don't like the lack of travel time between session. You should have at least 5 minutes to change sessions. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Look, this has been a great conference and any slights I've tended to overlook because they've really done a heroic job of keeping the admission price down but that lack of a passing period is just...  Well I don't see why they did it.  Just having the time as a buffer in case talks run over is reason alone.  Moreover, no passing period traps people in sessions that they'd rather not be in and restricts choice.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Apparently there is a lot of chatter in IRC by ruby commiters that NArray should be added to strd lib. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;NArray is 28x faster and uses 8x less characters in 1.9.2 #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;NArray is faster than what? Array, I assume, but I may not be following the translation correctly. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Translation is volunteer and best-effort so it adds some challenge to attending sessions in a foreign language. So if I make any mistakes in this here blog, that's what I'm blaming it on.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Pwrake is parallel distributed Rake - being developed here in Tsukuba. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Just a little tidbit dropped at the end of the NArray presentation -- sounds pretty cool.  Masahiro Tanaka is using it drive his workflow in his scientific research.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;yarv2llvm tries to speed up Ruby by implementing type inference (yarv is the vm for 1.9x) #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;There are times in Ruby when type can not be inferred and in those cases yarv2llvm is often slower than Ruby 1.9x #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Fixnum overflow to BigNum is one of the hardest problems to solve #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Btw, I think the title of this talk: "How Did Yarv2llvm Fail" is wonderful. Way to keep everything above board. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Great talk and very honest. The type inference thing looks promising but there are a couple of tough hurdles to clear.  Maybe some day.  Until then there's always &lt;a href="http://github.com/headius/mirah"&gt;Mirah&lt;/a&gt;.&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Ruby AOT complier is "mostly compatible" with Ruby 1.9 #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;AOT == "Ahead of time"&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Ruby AOT compiler is passing 7847 of 7850 Ruby Spec tests as of now. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;On average Ruby AOT compiler is 3.5x faster than 1.9 for common benchmarks #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Cool, let's all move to Ruby AOT!&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;It doesn't fair quite so well in the real world Ex: Rails. Slightly slower than 1.9 #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Something about cache misses makes it slower #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;The Ruby AOT compiler team wants to reduce the generated code size to increase speed. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Rails can be compiled in 77 min and size of compiled code is 92MB with Ruby AOT #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Oh.  Never mind. Plus, compiling.  Boo. Hiss.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;This memory profiler's gui looks amazing! #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Seriously, this is the sexiest profiler ever #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Can attach to running Ruby programs from another machine #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Designed to have as small as possible impact and be easy to use #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;I gotta tell ya the audience was chomping at the bit to get a hold of this profiler.  You can run it in production for christ's sake!  And the GUI is to die for.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Not available yet!?! #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Needs to get patch accepted into ruby core - maybe in 1.9.3. RATS! #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Very cruel of Tetsu Soh not to mention this up front.  I'm sure it was an oversight but everyone was crazy disappointed.  Still this was one of the best talks of the conf.  Tetsu Soh is one to watch.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Dear Ruby Core please, please, please, please, please, please, please, please accept Tetsu Soh memory profiler patch #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Indeed. I'm famous (on the internet (in one corner)) so you should listen to me.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Lots of requests to publish Tetsu Soh's memory profiler on Github. I agree! #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Automatic sliding doors in Japan trigger much latter than Americans would expect leading to a lot of stopping and hand waving&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;I'm not the only one who noticed this so I'm not crazy.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;More awesome techno in the #rubykaigi main hall. I want, nay, need the playlist.&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Please post it on the 'Goodies' section of the Ruby Kaigi site.  Or tweet about it.  Something.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Shay Friedman has spent the first five minutes of his talk apologizing for being associated with Microsoft. Stop. #rubykaigi&lt;/i&gt;  &lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;There was this weird hostile vibe coming from Shay.  I felt like he hated us for liking Apple products.  The weird thing is that there are a lot fewer Apple computers here than at a normal Ruby Conf.  Maybe he thought we were all Microsoft haters and so he might as well fire first.  Seemed like a mistake.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Just saw a nice hello world creating windows and dialog boxes in IronRuby #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;IronRuby currently passes 85% of Ruby Spec. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;IronRuby 1.0 is 1.8.6 compatible. 1.1 (coming soon) will be 1.9.2 compatible. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Windows Presentation Foundation's view templates are written in xaml which is like html. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Another markup language because we needed more. I feel like the IronRuby team really needs a win. They've been the slowest progressing Ruby VM for a long time now.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;&amp;lt;script language="ruby"&amp;gt; Whaa? Gestalt hides a hidden bit of Silverlight in the page so you can replace Javascript with Ruby. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Pretty neat trick that. Of course it means making your site dependent on silverlight. No worse than depending on Flash I guess.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;IronRuby.Rack is Rack implementation on ASP. Currently in beta. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;It's all coming along, I'd just like to see something working at this point in its life.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;If key is symbol then only one instance - less object creation. Which is why everyone uses symbols. Or because everyone else does #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;So did you know why everyone uses symbols?  Or did you just do it because that's the convention. Yeah, me too but then I learned. I'm not going to say how long ago that was.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Presenter's computer went down and it's taking forever to reboot. Stupid Mac. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;That's one of those rough moments where you really feel bad for the presentor. But he handled it like a champ -- continuing the presentation while he waited for his machine to boot back up. Well done. I wish I got more out of the talk but it was one of those inspirational talks that are hard to translate.  The Japanese speaking audience seemed to love it.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Please use the overburdened network to download the english version of the slides. Umm... What? #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Huh.  Why did that seem like a good idea. Since when does asking a room full of people to download something all at once ever work. And yet, it seems it happens once a conference. Repeat after me: Never ever depend on the network at a conference.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Funny story time.  All through the conference I spent a lot of time staring at the IRC screens on either side of the stage where the translations happen.  But since it's just IRC, anyone can join the room.  There was this one guy who posted A LOT and everyone of the posts seemed to be either:&lt;/div&gt;&lt;div&gt;888888888888&lt;/div&gt;&lt;div&gt;or&lt;/div&gt;&lt;div&gt;wwwwwwwwww&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I later found out that 888888 means clapping and wwwww means laughter. OK but stop cluttering  up the screen that I'm trying to read translations off of.  Then I found out who sora_h was: He's 14 and his name is Shota Fukumori.  He got up and gave an entertaining lightning talk.  Turns out he's a Ruby commiter so he's got that on me.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/jakescruggs/4934686542/" title="Young programmer by jake_scruggs, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4080/4934686542_10cf9b178b.jpg" width="500" height="375" alt="Young programmer" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And, all of a sudden, it was time for the final keynote by Chad Fowler.  He gave a talk about how to live a remarkable life and it was good stuff.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;The two things that are necessary to live a remarkable life are: To have intention and a system of realizing that intention #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Living intentionally means being mindful of your actions. It's easy to coast through life. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;"My co-workers laughed at me when I learned Ruby" - Chad Fowler #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;"You don't want to be in a situation where you are competing on price" - Chad Fowler #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Programming Cobol is like working in a hospice. There's a market for that. - Chad Fowler #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;"Always be the worst musician in whatever band you're in" Pat Matheney #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;"If you're playing things that sound good then you're not practicing" lesson from music that applies to programming #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;"I needed a project that was useless" - Chad Fowler #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;"Was today better than yesterday?" All you have to do is get a little better every day #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;"Passion is a resource that you have to conserve" - Chad Fowler #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Lots of gems in there.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;RubyKaigi 2011 will be in July and in Tokyo. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;There was something about the theme being "The Last Ruby Kaigi" but I think it was sort of a joke making fun of some guy who posted a rant about how the Ruby Kaigis need to end.  I didn't have enough background to get it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Oh, I forgot to talk about the guy hawking "The Last Google Wave Book Ever Published."  It seems he had been working on a Google Wave book and it was printed on the same day Google announced the end of wave.  His response?  To shamelessly promote the book at Ruby Kaigi in a lightning talk, at some sort of hallway session (with 30 people gathered around), and pretty much everywhere else.  And I actually saw some people carrying the book around.  Did they buy it?  Who knows -- his positive personality was so powerful I wouldn't be surprised if they did.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/jakescruggs/4937081377/" title="The Last Google Wave book ever published by jake_scruggs, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4116/4937081377_5fc3029114.jpg" width="500" height="375" alt="The Last Google Wave book ever published" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ruby Kaigi was an excellent time.  I thought it might be crazy intimidating but everyone was super nice and there were enough english speakers so that I could always get my ideas across.  Go if you have the chance.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also, check out my every growing set of Ruby Kaigi photos at Flickr:&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.flickr.com/photos/jakescruggs/sets/72157624815648014/"&gt;http://www.flickr.com/photos/jakescruggs/sets/72157624815648014/&lt;/a&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/9058791524994487093/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=9058791524994487093" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/9058791524994487093?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/9058791524994487093?v=2" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/2010/08/ruby-kaigi-2010-day-3.html" title="Ruby Kaigi 2010 Day 3" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm5.static.flickr.com/4095/4934685088_0308fb60c3_t.jpg" height="72" width="72" /><thr:total>3</thr:total></entry><entry gd:etag="W/&quot;CEENRn84fyp7ImA9Wx5QEE0.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185.post-4706721565901105774</id><published>2010-08-28T07:27:00.008-05:00</published><updated>2010-08-28T08:38:17.137-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-28T08:38:17.137-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="RubyKaigi2010" /><title>Ruby Kaigi 2010 Day 2</title><content type="html">Holy crap am I tired.  It's been a long awesome day. It started out with some excitement:&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Just found out I have an hour time slot when all I prepared was 30 minutes. Ok, time to write some more. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Panic! Maybe I'll talk about metric_fu a bit. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;I must have looked at that schedule 20 times and never realized that I had an hour slot.  Everyone else had 30 minutes so I thought I did too.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Attendees of "The Importance and Implementation of Speedy Tests" will also get "Metrics Based Refactoring" at no additional cost! #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;I did something I almost never do:  Look at crisis as an opportunity (crisi-tunity).  I had to write "Metrics Based Refactoring" anyway for Windy City Rails so why not write it now.  In less than 4 hours.  While watching my friends present at a conference.  Looking over those sentences now I can't believe I didn't freak out.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Ted Han used publicly available data to settle reviewing bais accusations against "The Edge" of hating the PS3 #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Turns out there was no bais. Math to the rescue! #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;bais? bias? baise? no idea.&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;You are probably not surprised to find out that I can't spell.  Even Eito Katagiri, who did a wonderful job translating my slides, found a bunch of spelling errors and English is not his first language.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;I just pulled out a table in the main hall and the table police where all over me. My mistake. Sorry. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;There were announcements everywhere about not doing this and yet I did.  In my defense: I'm an idiot.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;They're giving out an award to the person who committed most to Ruby 1.9.2: Yusuke Endoh #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;A very nice gesture.  Lots of class here at Ruby Kaigi.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Time for Matz's keynote!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Matz is talking about Ruby 2.0... again. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;This topic is a staple of Matz's speaking career.  I think the first time I saw him talk, years ago, he was talking about Ruby 2.0. Someday...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;"Right now ruby is just good enough" - Matz #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Matz hates local variable propagation (the lack thereof) but no one else seems to care so he's abandoning it. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Ruby's private is not private: it can be accessed from subclasses and overridden by accident #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Monkey patching modifies the class globally. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Classbox is the solution to global monkey patching #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Lots of talk about the mysterious 'classbox.'  What is it?  Well here's a paper on the subject:&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.iam.unibe.ch/~scg/Archive/Papers/Berg05aclassboxes.pdf"&gt;http://www.iam.unibe.ch/~scg/Archive/Papers/Berg05aclassboxes.pdf&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And some pertinent lines from the abstract:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;...Unfortunately existing approaches suffer from various limitations. Either class extensions have a global impact, with possibly negative effects for unexpected clients, or they have a purely local impact, with neg- ative results for collaborating clients. Furthermore, conflicting class extensions are either disallowed, or resolved by linearization, with consequent negative effects. To solve these problems we present classboxes, a module system for object-oriented lan- guages that provides for method addition and replacement. Moreover, the changes made by a classbox are only visible to that classbox (or classboxes that import it), a feature we call local rebinding. To validate the model we have implemented it in the Squeak Smalltalk environment, and performed benchmarks.&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;Now for more Ruby 2.0 preview:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;5/2 =&gt; 2 should be 2.5 or 5/2 (rational) #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Inheritance in ruby is more for connivence than for other merits #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Matz is thinking about moving mix-ins to a traits like solution which would have conflict detection (unintentional overrides) #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;You could declare the 'mix' and specify how to deal with conflicting methods. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;mix Foo, [:*] would copy all constants from the mix, or you can specify which ones you want and rename them #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;mix raises error on method/constant name conflict or removing #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;From Matz's slides "Ruby 2.0, just started, small step from 1.9, should be done soon" #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Ruby 2.0: Traits, Classbox, Keyword arguments, a few other nifty features #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;There some fierce discussion going on in IRC about the proposed changes in Ruby 2.0 #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;The debate on 'mixes' got pretty hot and heavy.  Keep in mind that all this IRC chatter is displayed behind Matz while he was giving his keynote because the translations are done in IRC.  So you'd be reading a translation of what he said right along with people discussing it.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;My presentation on "Speedy Tests" and "Metrics Based Refactoring" starts at 13:30 (10 min) in room 200 #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;The 'slides' from my presentation on "Speedy Tests" http://is.gd/eHNTN #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;I think the talk went very well.  Especially considering that I wrote the second half fairly fast.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;I just disparaged integration tests in favor of unit tests. Next up is @p_elliott talking about how he only does integration #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;.@p_elliott does a lot of things to make his integration test fly. I would like to see one of their suites. I could learn a lot. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;So I asked Paul how long their suites take and he said that they develop on 8 core machines and use Specjour to utilize 4 more cores so they tend to run between 5-8 minutes.  Pretty damn fast for full stack integration testing.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Hey, someone else made the 30 minutes vs. 60 minutes mistake. I feel better now. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Except he found out at the end of his presentation when he asked: "How much time do I have left?" and go the response: "25 minutes."  Yipes.  Luckily there were a lot of questions.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;.@nusco did a really good job explaining the basics of Ruby metaprograming&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;RT @sudhindraRao Whatever works in #java does not work in #ruby. Even huge classes are maintainable. @rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;.@nusco's favorite metaprogramming trick is method_missing. I thought he was kidding but he was not. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;When he said method_missing I grabbed the microphone back and responded: "Really?"  I couldn't help myself.  I tend to avoid method_missing.  There's usually a way to do what you want with other programming tricks.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Modules are extremely decoupled and can be tested in isolation so they are very flexible @nusco #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Good point.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Lightning Talks! I'm excited! #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Talking very fast does not lend itself to translation.  But still they were very cool.  Even better there was a lady in a kimono who would 'gong' you if you ran out of time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/jakescruggs/4934093277/" title="The gong lady stikes by jake_scruggs, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4081/4934093277_b0442a1fed.jpg" width="500" height="375" alt="The gong lady stikes" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;That is awesome.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After the lightning talks a few of us went back to the hotel to drop our things of before the party and we ran smack into this huge festival that happens once a year in Tsukuba. Here are some pics:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/jakescruggs/4934688370/" title="Festival 11 by jake_scruggs, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4074/4934688370_68bc9aa127.jpg" width="500" height="375" alt="Festival 11" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/jakescruggs/4934691494/" title="Festival 4 by jake_scruggs, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4120/4934691494_1e17f48008.jpg" width="500" height="375" alt="Festival 4" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/jakescruggs/4934097053/" title="Festival 6 by jake_scruggs, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4098/4934097053_78ae5d8471.jpg" width="500" height="375" alt="Festival 6" /&gt;&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The party was super nice.  And they had a fantastic spread of wonderful foods and drinks.  &lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/4706721565901105774/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=4706721565901105774" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/4706721565901105774?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/4706721565901105774?v=2" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/2010/08/ruby-kaigi-2010-day-2.html" title="Ruby Kaigi 2010 Day 2" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm5.static.flickr.com/4081/4934093277_b0442a1fed_t.jpg" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D04MSXc4fyp7ImA9Wx5RGUg.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185.post-7493601368196407080</id><published>2010-08-27T18:19:00.004-05:00</published><updated>2010-08-27T19:39:48.937-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-27T19:39:48.937-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="RubyKaigi2010" /><title>Ruby Kaigi 2010 Day 1</title><content type="html">&lt;div&gt;Here I am in Japan at RubyKaigi 2010.   Wow.  Generally I tweet a lot about the conf live and then publish those tweets here (in italics) and provide slightly more commentary.  So lets get it on.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;So my flight leaves at noon for #rubykaigi, takes 13 hours, and arrives at 3pm tomorrow... Wait -- that can't be right. #looksitupagain&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Before today's trip to Japan the furthest from the U.S.A. I've ever been is: Canada. #howisthatpossible&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;In cab. It has begun.&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Someone once said "If you've never missed a flight you're spending too much time in airports" #atgate2hoursearly&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Yep - can you feel the panic in those first couple of tweets? I was totally freaked out.  The actual trip turned out to be easy.  I met up with Chad Fowler, Yehuda, and Woody at the airport and we took a bus straight to Tsukuba.  I went to an exotic foreign land and the first thing I did was take a bus through 100 minutes of strip malls.  But I was in Japan.  And Yehuda held forth on 'snowmen' and encodings for most of the way so that was interesting.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/jakescruggs/4930480551/" title="Yehuda Katz Holds Forth on the Bus by jake_scruggs, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4123/4930480551_514009ca51.jpg" width="500" height="375" alt="Yehuda Katz Holds Forth on the Bus" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;So it's 7:15 am in Chicago, meaning I've been up for over 24 hours. So that's like 36 old man hours.&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;My first meal in Japan was near 60 bucks. And I'm not even in Tokyo yet. I'm gonna need a bigger wallet.&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Also, I almost got run over by not one, but two bicyclists using cell phones to text.&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;And 7-11's are everywhere.&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;So I survived the first day and even had an excellent dinner.  It was a bit pricey but worth it.  Many thanks to Makoto Inoue for helping organize this get together - it was exactly what I needed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Donuts are cute in Japan: http://is.gd/eFXCR&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/jakescruggs/4931073850/" title="Donuts are cute at Mr. Donut by jake_scruggs, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4122/4931073850_1d642418e1.jpg" width="500" height="375" alt="Donuts are cute at Mr. Donut" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Ate second breakfast/lunch at "Mr. Donut" which is really nice here in Japan.  Of course you can get noodles.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Good news: #rubykaigi has a non-freezing temperature. I was worried it would be 91 outside and 50 inside. Which tends to make me sick&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Some nice low-key techno playing in the #rubykaigi main convention hall.&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;RT @headius Ruby 1.8.8 will release this year and be the last 1.8 release. Some debate still about whether to backport 1.9.2 features. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Ah, Charles got to got to the secret Ruby Core meeting so he's in the know.  Actually I could have probably gone too but I wasn't sure if just anyone was allowed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Btw, the advice I received to stay up as long as possible after my flight to Japan was good. Feeling no jet-lag.&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;I adjusted my Japanese rent-a-phone to display am/pm and now it reads "0:32pm" I guess they really like military time here&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;It's the little things that are the most endearing. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Getting an introduction to #rubykaigi in japanese with translations coming in IRC which is displayed on side screens. #lag&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/jakescruggs/4932819961/" title="We get a lecture on proper use of wifi by jake_scruggs, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4114/4932819961_d550f03286.jpg" width="500" height="375" alt="We get a lecture on proper use of wifi" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Next up at #rubykaigi is a panel on Rails 3/ Ruby 1.9.2 (replacing canceled keynote)&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/jakescruggs/4933414302/" title="First panel by jake_scruggs, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4093/4933414302_1f84cf753d.jpg" width="500" height="375" alt="First panel" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Ah, the translations are back. Mostly. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;RT @headius I can't decide if it will be more or less exhausting to attend three days of conference sessions I can't understand :) #RubyKaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;.@wycats is fearless - he's critiquing Ruby 1.9.2 while sitting 5 feet from matz on stage&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;So Leonard was doing the translation from Japanese to English and Matz was doing the translation from English to Japanese which lead the a moment where Matz had to translate Yehuda's (nice) criticism of Ruby 1.9.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;One of things @tenderlove really likes about 1.9 is using encodings is painless. You have to think about it but it's easy. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Secret to getting commit rights on Ruby or Rails? Submit patches with tests over a consistent period. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;.@tenderlove doesn't think that ActiveRecord got the same amount of love that ActiveSupport did in Rails 3. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Specifically @tenderlove doesn't like ActiveRelation's integration in ActiveRecord in Rails 3. "It needs help" #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;.@wycats' response: "There's always 3.1" #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;.@tenderlove feels less able to bounce around the whole project when developing on Ruby as compared to Rails. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;.@wycats brought up something for Ruby core, saw a lot of discussion referencing his name but he could not participate. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Ah the perils of trying to develop across (real) languages. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Wait, Sarah's talk is going to be in Japanese? #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Oh, just the first part -- well done. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;She learned a lot of Japanese just for this presentation.  Good for her. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Rails wrapping of Javascript is kind of a disaster - mostly because javascript is changing fast. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Good point - I hadn't really thought about why wrapping SQL works so well while wrapping Javascript works out so poorly.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Step one to writing testable Javascript: Get it out of the view. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Pivotal uses Jasmine to test their Javascript: Bdd/RSpec like syntax and no dom is required. Can run in browser or headless. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;There's no time between sessions to escape one and go to another. Good thing I don't mind appearing rude. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Picture a lot of me saying "Excuse me" to people who don't understand english.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;OH "Social games are just CMS with bad UI's" #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;That's really funny.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;MySql 5 only supports 3 bytes for UTF8. huh. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;A 'u' with an umlaut is two code points that represent one character. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;UTF8 and UTF16 are both encodings of unicode. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;In Ruby 1.8 and C a string is just an array of bytes. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;"Corruption is normal" - @wycats #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;force_encoding is not the way. If you have to use it you probably have a deeper problem. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Dear internet: Take all sweeping statements with a grain of salt.&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Two sessions in a row on encodings.  We all feel like we need to know more about encodings.  And then we ignore that feeling until it bites us in the ass.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;jugyo has a lot of Growl-themed ideas. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Had an outbreak of super-sleepiness. Purchased a strange energy drink from an even stranger vending machine and I'm good. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;TermColor can do blink! Now that's progress. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Cinatra is Sinatra for command line apps. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;"write code like writing blog entries" - jugyo #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Watching Jugyo talk is always entertaining - I loved his lightning talk at last years Ruby Conf.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;.@tenderlove has changed into a crappy suit -- It's business time! #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;And headgear? #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/jakescruggs/4932823869/" title="@tenderlove 1 by jake_scruggs, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4123/4932823869_cd2d2ed3c0.jpg" width="500" height="375" alt="@tenderlove 1" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;That, my friends, is awesome.  I can't compete in shear crazy and acknowledge my superior.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;The number of languages (code) vs. the number of languages (speak) is completely off. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;"People are interpreters with forgiving parsers." - @tenderlove #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;.@tenderlove enjoys programming the most at hack nights. Challenging and fun. #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;PHP and Ruby living together: Webrick serving up WordPress. You are one weird dude @tenderlove #rubykaigi&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Webrick serving up PHP WordPress.  Think about that for a moment.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Making some last minute changes to my #rubykaigi presentation: "Speedy Tests" Come see it tomorrow at 13:30 in room 200&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Hey, I just found out I have an hour time slot when I had thought I was going to present for 30 minutes.  I guess the crowd is going to get some bonus metric_fu coverage.  As I'm going to present in 4 hours I better go write some more content.  Panic!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Oh yeah, go check out my Ruby Kaigi photo set on Flickr: &lt;a href="http://www.flickr.com/photos/jakescruggs/sets/72157624815648014/"&gt;http://www.flickr.com/photos/jakescruggs/sets/72157624815648014/&lt;/a&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/7493601368196407080/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=7493601368196407080" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/7493601368196407080?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/7493601368196407080?v=2" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/2010/08/ruby-kaigi-2010-day-1.html" title="Ruby Kaigi 2010 Day 1" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm5.static.flickr.com/4123/4930480551_514009ca51_t.jpg" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DU8ERXc-fyp7ImA9WxFaFkg.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185.post-7166009996374413798</id><published>2010-07-20T15:15:00.002-05:00</published><updated>2010-07-20T15:30:04.957-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-20T15:30:04.957-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="git" /><title>Using Git Inside a Git Hook</title><content type="html">Using Git Inside a Git Hook  can cause problems.  In my previous post: "&lt;a href="http://jakescruggs.blogspot.com/2010/07/signal-13-problems-with-git-hooks.html"&gt;Signal 13 Problems with Git Hooks&lt;/a&gt;" I describe how we are trying to automatically merge certain types of branches into a branch that is designed to hold them all.  Anyway, that means we want to run some git commands inside of the git hook.  We change dirs into another directory where we have a clone of the repo and start telling git to merge some stuff and we get a bunch of&lt;pre&gt;&lt;br /&gt;remote: fatal: Not a git repository: '.'&lt;br /&gt;&lt;/pre&gt;But if we run the exact same commands as the git user everything works fine.  Huh.  Eventually we got our linux guru over and he noticed that the environment under which the git user runs is totally different when inside a hook.  &lt;a href="http://github.com/sitaramc/gitolite"&gt;Gitolite&lt;/a&gt; does a bunch of things to the env, but the one that was screwing us up was the setting of the GIT_DIR.  After we figured that out, the solution was as easy as:&lt;pre&gt;&lt;br /&gt;ENV.delete 'GIT_DIR'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;in our ruby script that is triggered by the 'post-receive' hook.  And now I must get back to the fun.</content><link rel="replies" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/7166009996374413798/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=7166009996374413798" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/7166009996374413798?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/7166009996374413798?v=2" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/2010/07/using-git-inside-git-hook.html" title="Using Git Inside a Git Hook" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;DEEMSXc9fSp7ImA9WxFaFkg.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185.post-4497882811048392923</id><published>2010-07-20T12:16:00.005-05:00</published><updated>2010-07-20T15:11:28.965-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-20T15:11:28.965-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="git" /><title>Signal 13 Problems with Git Hooks</title><content type="html">Ran into a gotcha in Git today when trying to write a post push hook.  We want our designer to have a fast turn around time with clients so we're writing some hooks to merge all of the 'theme' branches he works with to get merged into a special preview branch which is then deployed to the preview site.  And all this should happen after he does a 'git push.'  Seems like a 'post-receive' hook is just what we want.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Except that every time we tried to create one we got these errors on a push:&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;error: git-shell died of signal 13&lt;br /&gt;fatal: The remote end hung up unexpectedly&lt;br /&gt;error: error in sideband demultiplexer&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;If the 'post-receive' file even existed in git_dir/hooks/ on the git repo box, we got this error.  We checked permissions, gitolite docs, git docs, google, etc and no help.  We finally realized that Git was piping in some information to our 'post-receive' file and since we were not consuming it, that was causing the explosion.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, I present to you, a stub of 'post-receive' file written in Ruby:&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/env ruby&lt;br /&gt;STDIN.readlines.each do |line|&lt;br /&gt;rev_old, rev_new, ref = line.split(" ")&lt;br /&gt;# You will get in here as many times as branches were pushed&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;rev_old is the old commit hash, rev_new is the new commit hash, and ref will be something like: "refs/heads/test_branch"  Useful information.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Git often passes things into it's hooks, check the &lt;a href="http://book.git-scm.com/5_git_hooks.html"&gt;git book docs&lt;/a&gt; to find out what.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/4497882811048392923/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=4497882811048392923" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/4497882811048392923?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/4497882811048392923?v=2" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/2010/07/signal-13-problems-with-git-hooks.html" title="Signal 13 Problems with Git Hooks" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CEQER34-eSp7ImA9WxFaFE8.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185.post-8529406623850827890</id><published>2010-07-17T21:39:00.005-05:00</published><updated>2010-07-17T22:05:06.051-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-17T22:05:06.051-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="GC" /><category scheme="http://www.blogger.com/atom/ns#" term="MongoDB" /><category scheme="http://www.blogger.com/atom/ns#" term="ostatus" /><category scheme="http://www.blogger.com/atom/ns#" term="memprof" /><category scheme="http://www.blogger.com/atom/ns#" term="OSS" /><category scheme="http://www.blogger.com/atom/ns#" term="testing" /><category scheme="http://www.blogger.com/atom/ns#" term="RubyMidwest2010" /><category scheme="http://www.blogger.com/atom/ns#" term="Bundler" /><title>Ruby Midwest 2010 Saturday</title><content type="html">So day 2 begins.  I got to bed early-ish as I am old so I'm fresh as a daisy and ready for more Ruby.  As per my established practice, Tweets are in italics.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Keynote by Yehuda Katz (@wycats) is up next at #RubyMidwest&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;I'm wondering why you can't give a technical keynote? Everyone says so. #RubyMidwest&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Why is that, exactly?  It's a technical conference.  And a single track one at that.  So I say tech it up, baby.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;Things that seem really easy are actually huge blockers to new users @wycats #RubyMidwest&lt;/li&gt;&lt;li&gt;.@wycats started Rails dev on windows - me too. #RubyMidwest&lt;/li&gt;&lt;li&gt;"What the F** is that thing with raw_host on it?" Ex of a small thing that is a blocker to a noob @wycats #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Yeah, I had a few of those.  I had no idea how to do public static final in Ruby.  When I figured it out it lead to one of my early blog posts: &lt;a href="http://jakescruggs.blogspot.com/2007/05/public-static-final-for-ruby.html"&gt;Public Static Final for Ruby&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;RT: @RubyMidwest Big thanks to @mbleigh and @intridea for hosting the OMGWTFBBQ dinner/lightening talks/hack night! #rubymidwest &lt;/li&gt;&lt;li&gt;RT: @RubyMidwest great roundup of the first day of @rubymidwest from @jakescruggs &lt;a href="http://bit.ly/arfY9m"&gt;http://bit.ly/arfY9m&lt;/a&gt; #rubymidwest (via @ajsharp) &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Oh yeah -- the Ruby Midwest Twitter account liked my post.  Go me.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;.@wycats got into the 'subversive' side of the Rails community through Data Mapper because he had a legacy DB #RubyMidwest&lt;/li&gt;&lt;li&gt;"Because of the craziness of what I was doing, Merb was much more appealing to me than Rails" @wycats #RubyMidwest&lt;/li&gt;&lt;li&gt;Building the Merb Server (never finished) pushed him hard into areas he didn't understand and made him much better @wycats #RubyMidwest&lt;/li&gt;&lt;li&gt;RT: @tswicegood "If you're gonna do something open-source, pick something hard." /via @wycats #rubymidwest &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Good advice.  Hard to work up the nerve to follow it but good none-the-less.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;Bundler has been much harder than Rails - It's a hard social problem. @wycats #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Yeah.  I'm the advocate for Bundler on my Rails 2.3x project and I've heard a lot of "Stupid Bundler!" and it was almost never Bundler's fault.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;Strength of the Rails community: We demand a very high level of external api excellence. @wycats #RubyMidwest&lt;/li&gt;&lt;li&gt;"User experience includes the command line" @wycats #RubyMidwest&lt;/li&gt;&lt;li&gt;We've spent a lot of time making the command line an enjoyable experience. Not so true in other communities. @wycats #RubyMidwest&lt;/li&gt;&lt;li&gt;.@wycats spent a bunch of time making Bundler's error messages more informative. #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Good man.  It really helps.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;People were confused by "Locking gems" so that inspired 0.9 =&gt; 1.0 @wycats #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Yep, I kept having to explain to my team that we lock because we're in production.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;Now, in 1.0, you get a lock automatically in Bundler. @wycats #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Nice!&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;People have a right to expect basic use of a product to not require a manual @wycats #RubyMidwest&lt;/li&gt;&lt;li&gt;Oh the other hand, with advanced features you should expect the users to read the manual @wycats #RubyMidwest&lt;/li&gt;&lt;li&gt;Sign of a mature project: Successful maintainer hand off @wycats #RubyMidwest&lt;/li&gt;&lt;li&gt;Another sign of a mature project: Survives several Ruby/Rails releases @wycats #RubyMidwest&lt;/li&gt;&lt;li&gt;Another sign of a mature project: Incorporating real world crazy bug fixes @wycats #RubyMidwest&lt;/li&gt;&lt;li&gt;.@wycats Sass is battle tested while Less is not. #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Oh no he di'ent!  Let the flame war begin.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;New things should be able to disrupt, but points should be given to things that are mature @wycats #RubyMidwest&lt;/li&gt;&lt;li&gt;.@wycats "Merb was massively immature when it got a lot of mind share. It should have been much harder than it was." #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Really honest of him to admit that.  Also, while I'm at it I should point out that it's really cool of him and Chris Wanstrath to show up to a small first year regional Ruby conference.  Stand up guys, they are.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;RT: @j_root #rubymidwest you heard it here first Yehuda Katz said that less css is clown school... and that Sass 3 rules its nuts. :) #misrepresent &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;It should be noted that @j_root used the hashtag #misrepresent AND a smiley emoticon so he's just trying to stir up trouble.  Bring it.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;RT: @j_root #rubymidwest Yehuda spits mad fire, holding the entire oss community to the flame. you can run but you can't hide, gems... bam pwnt &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I'm not sure what "bam pwnt" means but I like the cut of this @j_root's jib.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;"User confusion is an actual bug" @wycats #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Good point.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;OSS users: put pressure on the established projects to incorporate the new hotness instead of immediately jumping ship @wycats #RubyMidwest&lt;/li&gt;&lt;li&gt;.@wycats Reminds me of Winston Wolf. He just gracefully handled a "Why were you a dick to me online" question #RubyMidwest&lt;/li&gt;&lt;li&gt;To be fair, I don't think the question asker meant it to come out that way. But it kinda did. #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Remember the scene in "Pulp Fiction" where the Wolf showed up and effortlessly dealt with Vince Vega's guff?  It was like that but better.  Do NOT throw down with the wycats - he will destroy you.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;Next up "User Experience for Library Designers" - Wesley Beary (@geemus) at #RubyMidwest&lt;/li&gt;&lt;li&gt;Rename! talk is now called "eXperience Driven Design" @geemus #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;You can't sneak those renames by me -- I'm wise to your tricks.  Of course, I've had some of my talks renamed behind my back by organizers.  I'm looking at you, Ray Hightower.  But I kid the Hightower -- He's alright with me. &lt;br /&gt;&lt;br /&gt;But seriously, I'll cut you if you even think of renaming one of talks again.  I'm kidding!  Sorta.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;Slide from last night's Lightning Talks: &lt;a href="http://is.gd/dvOJw"&gt;http://is.gd/dvOJw&lt;/a&gt; "This is actually a simplified diagram" said the speaker #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Funny stuff.  If you're a Ruby nerd.  And you probably are.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;Check out &lt;a href="http://windycityrails.org/sessions"&gt;http://windycityrails.org/sessions&lt;/a&gt; for a familiar face. Spoiler: It's Me!&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;What? Windy City Rails picked me to talk?  Thanks guys.  Especially Ray, who didn't take those previous jokes personally.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;RT: @brntbeer @geemus is killing so far with funny slides #rubymidwest &lt;/li&gt;&lt;li&gt;Writing a test framework is a good way to learn if nothing else. And it probably will be nothing else. @geemus #RubyMidwest&lt;/li&gt;&lt;li&gt;Fog has 124 versions in just over a year. Holy crap! I thought metric_fu's 24 was pretty good over 2 years @geemus #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;What the what!?!  124 versions?  For real real and not for play play?  Damn.  I am humbled.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;Fog is "The Ruby cloud computing library." btw @geemus #RubyMidwest&lt;/li&gt;&lt;li&gt;"Encourage Contributors" Damn Straight. He gives out T-Shirts! @geemus #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;124 versions and T-Shirts?  This is the best open source project ever.  I may even use it someday.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;RT: @Arlen Wesley Beary: "When you're writing a library, the expert, is YOU. You are trying to help the rest along." #rubymidwest &lt;/li&gt;&lt;li&gt;Who wants to design a metric_fu T-Shirt? That would be cool. #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Seriously -- design a shirt for MetricFu and I'll name a major release after you.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;RT: @lpillow The dirty secret to project naming: spend as much time coming up with the name as coding the project. @geemus #rubymidwest &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Funny.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;"Practical Projects in Mongo DB" with Alex Sharp (@ajsharp) starts soon at #RubyMidwest&lt;/li&gt;&lt;li&gt;MongoDB is schema-less: great for rapid agile development @ajsharp #RubyMidwest&lt;/li&gt;&lt;li&gt;Mongo stores documents (in binary json) not rows @ajsharp #RubyMidwest&lt;/li&gt;&lt;li&gt;Auto-sharding is coming soon. But I've heard that before. &lt;insert&gt; @ajsharp #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Pretty sure I saw a talk on Mongo a year ago that was promising Auto-sharding.  Either they announced that feature way too early or it's proving harder than they thought.  Money on the later.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;Mongo writes are "fire and forget" @ajsharp #RubyMidwest&lt;/li&gt;&lt;li&gt;No Joins or Multi doc transactions in Mongo @ajsharp #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Hmm, could make like interesting.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;RT: @mattyoho @blowmage #rubymidwest has been a really great conference. Major kudos to the organizers; it's been smooth as butter. &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Here here!  If any organizers come to &lt;a href="http://windycityrails.org/"&gt;Windy City Rails&lt;/a&gt; I'm buying the drinks.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;.@ajsharp uses Mongo to create detailed super search-able logs that help him track down bugs #RubyMidwest&lt;/li&gt;&lt;li&gt;"I don't care about storing data, I care about persisting state" @ajsharp's argument against SQL #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Good quote and a good point.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;"Pragmatic Guide to Git" by Travis Swicegood (@tswicegood) coming up at #RubyMidwest&lt;/li&gt;&lt;li&gt;It's going to be an Intro to Git talk. @tswicegood #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Intro to Git is not really my thing (been using it for a few years) but he did a good job.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;RT: @ajsharp Slides for my @mongodb talk @rubymidwest &lt;a href="http://bit.ly/bTUSGi"&gt;http://bit.ly/bTUSGi&lt;/a&gt; #rubymidwest #mongodb &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;RT: @LuigiMontanez My slides on Civic Hacking from #rubymidwest: &lt;a href="http://bit.ly/cDa4RQ"&gt;http://bit.ly/cDa4RQ &lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Slides!&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;Can't say I've ever understood applauding people who win books at conferences. Great job being lucky! #RubyMidwest&lt;/li&gt;&lt;li&gt;Maybe it's just something to do while the winners make their way to the front. Clapping for book winners, that is. #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I say that at the next conference we all sit in stony silence while the lucky one slowly makes his or her way up to the front.  Who's with me?&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;"Interoperable Web" by Michael Bleigh (@mbleigh) next at #RubyMidwest&lt;/li&gt;&lt;li&gt;ostatus is a collection of web standards, like the hall of justice (superfriends) @mbleigh #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Great "Super Friends" Theme to this talk.  Remember the classic 70's-80's cartoon?  Well I do because I'm old.  Get off my lawn.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;RT: @adamstegman Interoperable Web wins best slide of the conference. Unicorn, hearts, rainbows, leg warmers - unattainable dream. #rubymidwest &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The leg warmers on the unicorn is what really made the slide for me.  Why would a Unicorn need leg warmers!?! That's just silly.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;pubsubhubbub - is webhooks with standards. you can subscribe to events @mbleigh #RubyMidwest&lt;/li&gt;&lt;li&gt;superfeedr provides a free hub server for public stuff @mbleigh #RubyMidwest&lt;/li&gt;&lt;li&gt;webfinger takes this point of view: "email = identity" And hooks everything up through that @mbleigh #RubyMidwest&lt;/li&gt;&lt;li&gt;redfinger is a ruby wrapper for webfinger @mbleigh #RubyMidwest&lt;/li&gt;&lt;li&gt;Salmon - if someone comments on a blog post on an aggregator (not the blog itself) then it can show up on the blog @mbleigh #RubyMidwest&lt;/li&gt;&lt;li&gt;activity streams - adding verbs to rss feeds. Ex: followed, posted, favorited, closed, updated, tagged, etc. @mbleigh #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;God Damn does this stuff sound sexy.  Everyone needs to support all of this right now.  Without me doing any work.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;OAuth 2.0 flexible multi-profile token authorization. @mbleigh #RubyMidwest&lt;/li&gt;&lt;li&gt;In OAuth 1.0 you had to go the website for auth. What if you couldn't (no browser), or their wasn't a website? @mbleigh #RubyMidwest&lt;/li&gt;&lt;li&gt;OAuth 2.0 provides 4 ways to auth: Web server, user agent, native app, and autonomous @mbleigh #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Good and needed improvements.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;RT: @LuigiMontanez .@mbleigh is giving an incredible presentation on the Interoperable Web at #rubymidwest -- a peak into the very near future &lt;/li&gt;&lt;li&gt;"Start thinking in standards" to make the web one big distributed info machine. @mbleigh #RubyMidwest&lt;/li&gt;&lt;li&gt;Here are @mbleigh's slides on the Interoperable Web. &lt;a href="http://bit.ly/bZfm8r"&gt;http://bit.ly/bZfm8r&lt;/a&gt; (via @LuigiMontanez)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;An exciting talk.  Assuming any of it gets adopted.  If not we'll look back and weep tears of regret into the pillow of despair.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;So I may have to calm down a bit on the tweeting as my talk is up after the next one and I should review my presentation. #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I don't think I did, really.  I'm out of control.  I'm on an airplane right now so I'll have to quit the over tweeting cold turkey.  By working on my blog post.  Kinda like methadone.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;"memprof" by Aman Gupta (@tmm1) next at #RubyMidwest&lt;/li&gt;&lt;li&gt;Ruby MRI has a "stop the world" GC. @tmm1 #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Boo.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;More objects == Longer GC run @tmm1 #RubyMidwest&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;So, of course, less objects == better performance @tmm1 #RubyMidwest&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Avoid leaked references (sometimes called memory leaks, but not really the right term) @tmm1 #RubyMidwest&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;bleak_house not only tells you what is 'leaking' but also where it is leaking @tmm1 #RubyMidwest&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Sounds good.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;RT: @chadmontplaisir @tmm1 "God was known for a long time to have memory leaks" #rubymidwest &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The God project has lead to a lot of unintentional humor.  And for that, we thank you God.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;memprof - easy to use, no patching the vm, detailed (file/line) object contents, refs between objects, simple json output @tmm1 #RubyMidwest&lt;/li&gt;&lt;li&gt;RT: @samullen I feel more smarter just by listening to @tmm1 #rubymidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;See what he did there? They bring the wit here in the heartland.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;&lt;a href="http://memprof.com/"&gt;http://memprof.com/ &lt;/a&gt;has gotten better since I last looked at. Nice visualizations of where your memory is going @tmm1 #RubyMidwest&lt;/li&gt;&lt;li&gt;&lt;a href="http://memprof.com/"&gt;http://memprof.com/&lt;/a&gt; is built using Mongo @tmm1 #RubyMidwest&lt;/li&gt;&lt;li&gt;RT: @chadmontplaisir @tmm1 Procs are a good way to memory leak because they keep all the variable references within the creation scope. #rubymidwest. &lt;/li&gt;&lt;li&gt;RT: @chadmontplaisir @tmm1 Take away: Looking through the trash gives you a better understanding of what your application is doing. #rubymidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;True dat.  Optimize, always optimize.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;My talk is in less than 10 minutes... Panic! #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Well, it was a quiet crowd.  Afternoon on the second day and all.  The Twitter seemed to like me and a bunch of people sought me out after the talk for more info or just to thank me.  So I guess it went well.  There was a moment, at the end of the talk, when I looked up from my computer to see tumble weeds rolling across the floor.  I shouldn't worry about it I suppose. &lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;My presentation canvas: &lt;a href="http://is.gd/dw696"&gt;http://is.gd/dw696&lt;/a&gt; for my "Speedy Tests" talk. #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I used Prezi.com for my presentation.  It's a canvas based presentation system and it's pretty cool.  You put all your ideas on a big canvas., sort and arrange them, paste in some pics or whatever, and define a path through said canvas.  Lots of fun to work with.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;Someone (not wearing a name tag) just turned me on to this: http://is.gd/dw6lp factory_data_preloader More speed! #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;That guy turned out to be Kyle Ginavan.  I'm totally going to try out factory_data_preloader when I get back to work on Monday.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;RT: @mattpetty "test suites should be reliable, repeatable, and understandable" -@jakescruggs #rubymidwest &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;My favorite quote from my talk and I completely made it up on the fly.  Felt good saying it.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;@lpillow It was a pic of a little girl making a frowny face. Honest.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Someone though one of my images or diagrams was pornographic.  I've looked through the presentation 20 times and I can't see it.  If you find something, let me know.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;"jQuery and Rails, Sitting in a Tree" by Adam McCrea (@adamlogic) is happening now at #RubyMidwest&lt;/li&gt;&lt;li&gt;Neat bit about stealing non-obtrusive javascript from Rails 3 to use in Rails 2x @adamlogic #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;To be honest, I was a bit burnt at this point and coming down from the post talk high so I didn't cover this one as much as I should.  Sorry Adam - say hi to Joe for me.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;"A New Set Of Wheels: Leveraging Ruby For System Administration" by Josh French (@joshfrench) #RubyMidwest&lt;/li&gt;&lt;li&gt;GrepFu looks pretty cool. Ruby wrapper for command line searching tools. &lt;a href="http://rubygems.org/gems/grep-fu"&gt;http://rubygems.org/gems/grep-fu&lt;/a&gt; @joshfrench #RubyMidwest&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Check out the GrepFu - it looks well worth investigating.  Luke Pillow, a Ruby Midwest organizer, said he uses it ever day.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;Well, I gotta go catch a plane back to Chicago. Thanks #RubyMidwest I had a great time and learned a ton.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;And I'm on that plane right now.  It's like a conversation with my past self.  Hey, past self, don't eat that airport BBQ - they're gonna put mayonnaise on brisket. &lt;br /&gt;&lt;br /&gt;Too late.&lt;br /&gt;&lt;br /&gt;I did get to sit in the airport sports bar and listen to two young ladies in interesting outfits argue about whether it was lying to omit the fact that you didn't sleep in your hotel room last night.  It took a very long time to decide.</content><link rel="replies" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/8529406623850827890/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=8529406623850827890" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/8529406623850827890?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/8529406623850827890?v=2" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/2010/07/ruby-midwest-2010-saturday.html" title="Ruby Midwest 2010 Saturday" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CEUCSHsyeip7ImA9WxFaE0k.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185.post-5149821342594083211</id><published>2010-07-16T23:42:00.000-05:00</published><updated>2010-07-16T23:51:09.592-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-16T23:51:09.592-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JRuby" /><category scheme="http://www.blogger.com/atom/ns#" term="singleton_class" /><category scheme="http://www.blogger.com/atom/ns#" term="testing" /><category scheme="http://www.blogger.com/atom/ns#" term="redis" /><category scheme="http://www.blogger.com/atom/ns#" term="RubyMidwest2010" /><category scheme="http://www.blogger.com/atom/ns#" term="db" /><category scheme="http://www.blogger.com/atom/ns#" term="css" /><title>Ruby Midwest 2010 Friday</title><content type="html">So people often ask me why I tweet so much at conferences (113 tweets today, for example).  Well, usually I'm furiously typing notes into TextMate so I can blog about it later.  Now, in the post twitter world, I type those thoughts into twitter and harvest them later for my wrap-up posts.  That way people can follow a conf's progress live or wait for the recap.&lt;br /&gt;&lt;br /&gt;So Tweets will be in italics and everything else is bonus commentary.&lt;br /&gt;&lt;br /&gt;Generally the first day of the conference went amazingly well. Hard to believe this is their first year. Wifi was plentiful, food was decent, and the space was nice.  Oh and the talks were good too.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;At @RubyMidwest waiting for the fun to begin&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;So I think the official hash tag for @RubyMidwest is #rbmw or at least that's what the welcome tag said. Although #RubyMidwest is popular &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;So there was a lot of confusion about the official Ruby Midwest Twitter hashtag.  The badges said one thing, the welcome screen said another, and everyone else chose a third: #RubyMidwest.  I eventually just went with the most popular. That's about as much controversy there was on the first day so everything went pretty well.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;"Open Source sucks and I'm to blame" - Chris Wanstrath at #RubyMidwest #rbmw &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;No one has more experience than me with running bad open source projects - @defunkt #mwrc #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;The trick to getting better at things is Practice. @defunkt #mwrc #rubymidwest He played guitar for 10 years and never got better nopractice &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Chris never got better at the guitar because he never practiced.  The same applies to code.  You can knock things out for years but until you work in a mindful manner you will never get better.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;It's too easy to release open source software - @defunkt #RubyMidwest #rbmw &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;By which I take him to mean that lots of people throw something up on GitHub, push a gem, and provide a few lines of doc before something even works.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Levels of open source Massive (Linux kernal), Big (Rails, JQuery), Medium (homebrew) Tiny (most of the rest) @defunkt #RubyMidwest #rbmw &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;The tiny ones tend to be all the ones we use - and they tend to be managed poorly @defunkt #RubyMidwest #rbmw &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Some open source projects are managed really well, but it's amazing how many we use on a regular basis that are not.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Always have a license file! @defunkt #RubyMidwest #rbmw &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;If it doesn't install easily it sucks because that's your first experience with the project @defunkt #RubyMidwest #rbmw &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Why do we use MySQL instead of Postgres? MySQL was way easier to use early on in Rails @defunkt #RubyMidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;JQuery no conflict mode is another example of making install easy. You could use it and Prototype super easy @defunkt #RubyMidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;If your api is for a human, design it to be easy and don't assume just ruby developers will be using it. @defunkt #RubyMidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Lack of examples is the next biggest problem in open source - people need help getting started @defunkt #RubyMidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Public Api means having methods you know won't go away when you upgrade. @defunkt #RubyMidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;man pages are important if you have a command line interface @defunkt #RubyMidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Set Expectations: explain what it's for. And make sure it does that! @defunkt #RubyMidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Projects that aren't maintained... OK, that happens. But say so: "Looking for a good home" note on home page @defunkt #RubyMidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;"Too many features is a really bad thing" @defunkt #RubyMidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;"It's way too easy to say yes" @defunkt #RubyMidwest #rbmw &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;"Much harder to remove a feature than to accept it later" @defunkt #RubyMidwest &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;These last 2 statements are particularly applicable to metric_fu right now.  There's a bug in the way it computes Flog averages and I'm having trouble fixing it because of an undocumented "files to ignore" feature.  I may have to rip it out.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Better to set up a plugin api and let people write their own extension functionality @defunkt #RubyMidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;The lack of competition is horrible -- Look at how competition from Merb made Rails better @defunkt #RubyMidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Too few releases is horrible and wastes people time - Too many can be annoying too. hmm. @defunkt #RubyMidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Have a decent change log - super important for long time users. @defunkt #RubyMidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Arbitrary version numbers confuse people. Look up Semantic Versioning @defunkt #RubyMidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;If you're using it in production it IS 1.0 - We have a lot of numbers and we're not going to run out of them @defunkt #RubyMidwest &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Excellent point.  How many gems have you deployed to production that claim to be version 0.194 or some such nonsense?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Define how to contribute to your project - don't assume every knows how you want it. @defunkt #RubyMidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Be a lazy maintainer - Write a road map and people will do your work for you. @defunkt #RubyMidwest &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Excellent point - this totally worked for metric_fu.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Link rot - don't point to your svn repo if you've moved to git - update old blog posts if you use them as doc @defunkt #RubyMidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Google your project name before you create it - Find problems early @defunkt #RubyMidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Examples of great open source projects: Rails, JQuery, Redis, homebrew, Django, Unicorn, Linux, Git... @defunkt #RubyMidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Chris Wanstrath - @defunkt always delivers an great talk. He has a style that feels conversational but gets points across #RubyMidwest &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Good talk - Chris is always an engaging speaker.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;"Ruby Techniques by Example" Jeremy Evans is up next at #RubyMidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;"Singleton class" has been said 20 times in the first 5 minutes of this talk @jeremyevans0 #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Yowza, kind of a rough start to the day.  Had to stop tweeting for awhile just so I could focus (the horror).&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;ruby-sequel's plugin method looks cool. Let's you easily add modules that add class and instance methods @jeremyevans0 #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;string evals dangerous but fast, define_method safer but slow. @jeremyevans0 #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;The default argument of a ruby method can be any ruby expression. @jeremyevans0 #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Wrapping underling exceptions (from different implementations) with your own is a good to keep your code sane @jeremyevans0 #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Jeremy gave an intense, but good, talk.  It's had to make those deep internals of Ruby not sound dry but he did an admirable job.&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;"JRuby" by Charles Nutter is up next at #rubymidwest &lt;/li&gt;&lt;li&gt;Jruby: Real Threads and access to all of the Java. Compelling points. The slow test cycle (starting up the JVM) is a problem #rubymidwest &lt;/li&gt;&lt;li&gt;I know there's solutions for starting up a test server, but I've found them wonky in the past - have they gotten better? &lt;/li&gt;&lt;/ul&gt;What I hear from my friends who develop in JRuby is that it's awesome in prod but slow to develop in (you're always waiting for the JVM to start up).  And the lack of C extension support often means that the gem that would totally do what you need is just not going to work.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;RT: @clam_tea #rubymidwest jruby allows you to do ruby on google app engine, android, anywhere java lives jruby is in the closet with a knife.  &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;RT: @clam_tea Mmmmmm, Ruboto = Ruby on Android. Epic win. #rubymidwest&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;I like how @headius voice drops an octave when blatantly selling JRuby #rubymidwest  &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;C extension support is being worked on by Google summer of code people for JRuby - Awesome. @headius #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;If they can get C extensions working that would really be something.  Maybe I'd have to give JRuby another look.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Next up is "Civic Hacking" by Luigi Montanez @LuigiMontanez at #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Sunlight Labs - developers and designers dedicated to improving government through transparency @LuigiMontanez #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Open Data + Open Source = Open Government @LuigiMontanez #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Of the hashtags #rmw #rbmw #rubymidwest, #rubymidwest is winning by volume For the Ruby Midwest Conference so that's why I'm using it &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;FlyOnTime.us mines gov data to predict flight times. neat. @LuigiMontanez #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;&lt;a href="http://outsideindc.com/stumblesafely"&gt;http://outsideindc.com/stumblesafely&lt;/a&gt; uses crime data to help you avoid crime when coming home drunk in DC @LuigiMontanez #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;RT: @rumblestrut Thanks @LuigiMontanez, I somehow missed this entertaining drama that @aaronsw ran into last year &lt;a href="http://bit.ly/1oZPmS"&gt;http://bit.ly/1oZPmS&lt;/a&gt; #rubymidwest&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;&lt;a href="http://codeforamerica.org/"&gt;http://codeforamerica.org/&lt;/a&gt; Like Teach for America but with %90 less soul crushing @LuigiMontanez #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Service to your country doesn't have to be joining government or the military - it could be code. @LuigiMontanez #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;One of those awesome talks that points out some very cool things you could do with your open source time.  Transparency is within our reach.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Free book time at #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Lunch was an enjoyable, if fairly standard, boxed lunch affair. Quite good quality considering the price of the Conf #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;RT: @rumblestrut I love that @wycats was the first book winner at  #rubymidwest book giveaway. Hilarious.&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;I just won a copy of "Beautiful Code" at #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Another book to read. At some point. w00t?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;"Migrating Legacy Data" by Patrick Crowley &amp;amp; Rob Kaufman is up next at #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Trucker is a gem for migrating legacy data into a Rails app @mokolabs #rubymidwest  &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Trucker is hard to google: &lt;a href="http://rubygems.org/gems/trucker"&gt;http://rubygems.org/gems/trucker&lt;/a&gt; @mokolabs #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;"Trucker helps you move, but you still have to pack your stuff up" @mokolabs #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Trucker looks pretty cool and if I had some legacy to migrate, I'd look into it.&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;There are 12ish adapters for ActiveRecord, but there are tons of JDBC adapters. JRuby to the rescue. @mokolabs #rubymidwest &lt;/li&gt;&lt;li&gt;RT: @ajsharp "ALTER TABLE mytable CONVERT TO CHARACTER SET utf8" #rubymidwest&lt;/li&gt;&lt;/ul&gt;That last line is a particularly useful bit of MySQL that will help you convert to UTF8.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Next up is John Hwang (@tavon) with "Object Oriented Unobtrusive CSS" at #rubymidwest  &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Rename! the talk is now just "Unobtrusive CSS" @tavon #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;He had to cut some scope to fit the deadline.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;.@tavon says CSS frameworks (like 960grid) are almost as bad as using tables. Strong words. #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;And he comes out swinging. I like it.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;CSS is like assembly programming, frameworks - procedural coding, and Sass works at a higher level of abstraction. @tavon #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Sass: Nested Rules, Variables, mixins, compiles to css, Fully CSS3 compatible @tavon #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;.@tavon says Sass is almost Turing complete #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;These are great points.  Sass lets you do things you should have been able to do years ago.  How did we ever live without it?  Wait, my project isn't using Sass... I need to talk to my designer.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;.@tavon feels like HAML is an unnecessary abstraction. Sass is a much bigger game changer #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;"Programmers: HTML/CSS is your problem" @tavon #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;"Programmers: You probably don't know CSS" @tavon #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;I think @tavon just called me lazy #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Hey now!  I've been busy.  I'll get around to doing a deep dive on CSS.  Really.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;.@tavon will not work on a project if you won't let him use Sass. #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;A man of principles and conviction.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Stupid @tavon, making me feel bad for not knowing CSS very well #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;He made my feel bad.  Jake no like feel bad.&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;"Integration Testing Strategies: Locally And In The Cloud" is next at #rubymidwest by Ryan Felton and Kyle Ginavan &lt;/li&gt;&lt;li&gt;Live coding Capybara Selenium slowness and fail at #rubymidwest Sorry guys, I've been there &lt;/li&gt;&lt;li&gt;Using specjour to parallelize his capaybara tests on another machine. Go. Go. Go! #rubymidwest &lt;/li&gt;&lt;li&gt;And it worked. mostly. live demos are hard. #rubymidwest &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.seleniumshots.com/"&gt;http://www.seleniumshots.com/&lt;/a&gt; is another an to run your integration tests in the cloud. Many have tried this. #ihopeitworks #rubymidwest &lt;/li&gt;&lt;li&gt;Don't get me wrong, I want "selenium shots" to succeed but I've seen a lot of smart dudes fail at parallelizing in the cloud. #rubymidwest &lt;/li&gt;&lt;li&gt;RT: @bellmyer I just signed up for selenium shots! #rbmw #rubymidwest &lt;a href="http://yfrog.com/1n9bcp"&gt;http://yfrog.com/1n9bcp &lt;/a&gt;&lt;/li&gt;&lt;li&gt;Re: Last re-tweet. Got a 500 after signing up for "Selenium Shots" #rubymidwest  &lt;/li&gt;&lt;/ul&gt;There's a lot of stiff competition out there trying to run tests in the cloud.  May the best project win.  Also, live coding and examples that rely on a network are to be avoided.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;"Metawhat? A look into the mysterious metaclass" next by Brandon Dimcheff @bdimcheff at #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Another talk where I couldn't tweet because I needed to focus.  Intense and worth tracking down the video when it comes out.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;"Redis Persistance Power" - Nick Quaranto (@qrush) happening now at #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Redis is Batman's utility belt @qrush #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Redis can take a command that waits for something to arrive in the queue - meaning you don't have to 'sleep' @qrush #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;.@qrush is working on hosting Redis in the cloud &lt;a href="http://akasentai.com/"&gt;http://akasentai.com/&lt;/a&gt; Ready soonish. #rubymidwest &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Cause that guy needs more side projects.  And they're all awesome.  Yes, I'm jealous.&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;"Three thousand years ago, the Omnipotent Disc King started a campaign to ravage Sector 5 of the Moon." from &lt;a href="http://akasentai.com/"&gt;akasentai.com &lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Weird placeholder site:  Go see it.&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;RT: @qrush My slides from Redis: Persistence POWER! (With way more  examples than I could cover!) &lt;a href="http://scr.bi/redispower"&gt;http://scr.bi/redispower&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Bonus content?  What a deal!&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;RT: @clam_tea $redis.sadd should have a $redis.happpy to balance it out. &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Yes it should.  Well not really, but fun to talk about but not do.  Like yielding 42 for no reason in complicated bit of Ruby -- funny but you wouldn't want to actually do it.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;RT: @pvisintin #RubyMidwest photos &lt;a href="http://www.flickr.com/photos/peterpunk/sets/72157624517058396/"&gt; http://www.flickr.com/photos/peterpunk/sets/72157624517058396/&lt;/a&gt; &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt; Side note: Kansas City and the University of Missouri-Kansas City campus  are quite nice. #rubymidwest&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;It is a pretty town and university.&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;"Chef - Cooking 101" by John Williams (@j_m_williams) is up next at #rubymidwest&lt;/li&gt;&lt;li&gt;Chef: Automate building a server up from bare metal to a ready to deploy machine. pretty awesome. @j_m_williams #rubymidwest &lt;/li&gt;&lt;/ul&gt;I talked to John the night before and I think it was his first talk.  He was a bit shaky.  It didn't help that server set up is dry, dry stuff.  And, to be honest, most of the crowd doesn't care about the topic.  Sorry John but we're coders.&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;One more Talk! "Surviving the last 20%" Mark Daggett (@heavysixer) at #rubymidwest&lt;/li&gt;&lt;li&gt;Speaking of Surviving the last 20%, I am mentally exhausted. #rubymidwest &lt;/li&gt;&lt;li&gt;I do! RT: @gregrhansen does anyone else see the irony of everyone leaving before the last talk of the day... the last 20% &lt;/li&gt;&lt;li&gt;"Facebook development is like building a ship in a bottle. Inside another bottle. While wearing mittens" @heavysixer #rubymidwest &lt;/li&gt;&lt;li&gt;RT: @tswicegood Regarding Facebook dev: FBML == Duplo, IFrame == Lego. #rubymidwest&lt;/li&gt;&lt;/ul&gt;Rough to be the last talk of the day.  A good percentage of the crowd has bailed, lots of us would rather drive a spike through our cornea than write a Facebook app, and everyone in the room has a severe case of mental fatigue.  Still he did a good job.&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;Demi Moore is to Facebooker as Patrick Swayze is to Rack. In the movie Ghost. In the clay spinning scene. @heavysixer #rubymidwest  &lt;/li&gt;&lt;li&gt;You really kinda needed to see the slide to get that last tweet #sorry #rubymidwest &lt;/li&gt;&lt;/ul&gt;That was a great slide.  Well played.&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;"Use Rack to wrap the plugins and gems to give them the params they expect instead of monkey patching them." @heavysixer #rubymidwest &lt;/li&gt;&lt;/ul&gt;Clever solution.  Mark strikes me a smart man fighting an insane API.  And winning.&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;The talks are over for the day, back to the hotel, and then to &lt;a href="http://omgwtfbbq.heroku.com/"&gt;http://omgwtfbbq.heroku.com/&lt;/a&gt; Great name. #rubymidwest &lt;/li&gt;&lt;/ul&gt;It is a great name.  From &lt;a href="http://www.urbandictionary.com/define.php?term=omgwtfbbq"&gt;Urban Dictonary&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;OMGWTFBBQ: A meaningless acronym which most often stands for "Oh My God What The Fuck Barbeque." It most likely originated on Something Awful (somethingawful.com). It can be interpreted simply as gibberish, or used when one wants to emphasize one's own incoherence, lack of understanding, or to mock others. It usually has an air of mockery, specifically with regard to teenagers who a lot of use three-letter acronyms.&lt;/blockquote&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;Evans just gave a lightning talk on singleton classes of singleton classes and had the room rolling with laughter. Only at #rubymidwest     &lt;/li&gt;&lt;/ul&gt;You sorta had to be there.  The rest of the lightning talks were good, but I was too tired to Tweet it up so they will be lost to the internet forever.  Apologies.  The BBQ was excellent, however.  I can still smell sauce on my hands and I've washed them 3 times.&lt;br /&gt;&lt;br /&gt;Time for bed.</content><link rel="replies" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/5149821342594083211/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=5149821342594083211" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/5149821342594083211?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/5149821342594083211?v=2" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/2010/07/ruby-midwest-2010-friday.html" title="Ruby Midwest 2010 Friday" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CUQAQHs4eCp7ImA9WxFaEkg.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185.post-6158904919972886157</id><published>2010-07-15T22:47:00.004-05:00</published><updated>2010-07-15T23:09:01.530-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-15T23:09:01.530-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="RubyMidwest2010" /><title>The Road to Ruby Midwest</title><content type="html">Crazy day:&lt;br /&gt;It was the day before &lt;a href="http://www.rubymidwest.com/"&gt;Ruby Midwest&lt;/a&gt; so I gave my 'Speedy Tests' talk to my workmates at &lt;a href="http://backstopsolutions.com/"&gt;Backstop Solutions&lt;/a&gt; during lunch today and they had the nerve to find some things wrong with it -- so I'll be doing some re-tooling before Saturday.  Then I was all set to leave 2 hours early for the airport when my manager wants to talk about me helping QA understand our process, new features, and maybe get some automated tests running.  Hell to the yeah.  So I'm all over this opportunity but our conversation makes me leave the office a bit late to catch my flight.  No problem, I build in a lot of buffer.  Then the Blue line (Chicago's subway) was down.  Uh oh.  Some surly dude said there was a free shuttle to somewhere else but I couldn't find it so I took a cab.  Crazy traffic puts me at the airport with 30 min until my flight.  Panic!  But the security lines are longish so I panic while inching forward in a zig-zag line.  Then I sprint to terminal C (which is the farthest away and involves going underground) and find my seat minutes before they close the doors.&lt;br /&gt; &lt;br /&gt;The lady next to me wanted to make small talk about how I was out of breath.   I did not.&lt;br /&gt;&lt;br /&gt;Then when I landed I noticed that all the signs say "KCI" when I'm pretty sure I booked a flight to "MCI" so I had a minor heart attack moment where I thought I flew into the wrong city.  But no, it turns out that KCI and MCI are the same.  That's not confusing at all.&lt;br /&gt;&lt;br /&gt;But all was well when I made it too the speakers dinner.  Very nice of the Ruby Midwest guys to organize such a dinner and pick up the tab.  Good conversations with some locals (Shashank, Luke, and Josh), a 37 signals-er (John), and an Edge Case-r (Adam).  Looks like the conference is off to a swimming start.</content><link rel="replies" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/6158904919972886157/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=6158904919972886157" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/6158904919972886157?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/6158904919972886157?v=2" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/2010/07/road-to-ruby-midwest.html" title="The Road to Ruby Midwest" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;Dk4HQnc9fSp7ImA9WxFVFEg.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185.post-4984857037247312966</id><published>2010-06-13T13:30:00.002-05:00</published><updated>2010-06-13T13:48:53.965-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-13T13:48:53.965-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="RailsConf2010" /><category scheme="http://www.blogger.com/atom/ns#" term="Rails" /><title>Rails Conf 2010 Day 3</title><content type="html">A few days late on this because I've been sick all weekend.  There just has to be a way to do climate control in conference centers in such a way as to not destroy the planet and, more importantly, Jake's health.  I seriously wore black jeans and 2 shirts on hot summer days and yet I was shivering and caught a cold. &lt;br /&gt;&lt;br /&gt;But let's get to last day of Rails Conf 2010 and my exciting adventures therein. (tweets are in &lt;span style="font-style: italic;"&gt;italics&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Woke to "Relax" by Frankie Goes to Hollywood. Which is good 'cause my heart was pounding. Settled it with some bacon. #railsconf&lt;/span&gt;&lt;br /&gt;Yep, I could feel cold coming but I was in denial.  I ran into Neal Ford at breakfast and we chit chatted about this and that and then he mentioned that he had read my blog post from yesterday.  First thought:  I published that sucker at 1am this morning and he's read it already?  Second thought:  Oh shit, what did I say about his keynote -- I think I called him a jerk at some point.  But my brain was foggy and so I wasn't quite sure what I had said.  Later I looked and, yes, I had called him a jerk.  I was kidding!  If only that was the most embarrassing thing I did that day...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Pro tip: Have the hotel watch your bag for the day while your at the last day of the con #railsconf&lt;/span&gt;&lt;br /&gt;It's true.  This year Rails Conf was nice enough to have a section for people's bags at the conference but they don't always.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Twenty-Five Zeros - Robert Martin &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So, as many of you know, I started out at Object Mentor (as an unpaid apprentice/intern) and I'm a bit of an Uncle Bob fanboy.  As these next tweets can attest:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Bring it Uncle Bob! #railsconf&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Good to see Uncle Bob still starts all his talks with some hard core physics. #railsconf&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;HOLY SHIT!!! Uncle Bob opens by showcasing some impressive drum chops. #railsconf&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;RT @duncan: Photo of @unclebobmartin on drums at #RailsConf (ISO 12800 in the dark)&lt;a href="http://www.flickr.com/photos/oreillyconf/4688547550/"&gt; http://www.flickr.com/photos/oreillyconf/4688547550/ &lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;@spiceee call him (@unclebobmartin) butter cause he's on a roll #railsconf&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;#railsconf haiku Uncle Bob holds us | We are enraptured by him | Rambling? I think not!&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Great speaker, although I had to de-follow him on twitter as I'm not into right wing politics.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;If we have computers 10^25 times more powerful than 1960 then why no AI? Always seems 10 years out. #railsconf  &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Our software has not improved anywhere near 25 orders of magnitude unlike the processors @unclebobmartin #railsconf&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Funny how social sciences never really advance as fast as the hard ones.  I think of programming as a 'soft' science because the hard part is NOT getting a computer to understand the code it's describing intent to humans.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;.@unclebobmartin "What language do you know that still has goto?" guy in crowd: "PHP" #railsconf  &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;A brief tour of programming languages with @unclebobmartin #railsconf&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;RT "vi? what the hell?" - @unclebobmartin #railsconf&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Vi, Emacs, TextMate, etc. all seem like some weird time warp compared to the awesomeness of the language.  It always seems like a really good Ruby IDE is just around the corner.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;RT the point emerges. multicore processors pass the buck to us. future == parallelism #railsconf&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Real innovation in software may be driven by the move to parallel processors @unclebobmartin #railsconf&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;.@unclebobmartin is hawking #sicp Yeah, yeah, yeah. I'm getting to it. #railsconf    &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;#sicp is a page turner? Really? @unclebobmartin #railsconf&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Structure and Interpretation of Computer Programs is so often praised that people in the know just refer to it as sicp. It's available for free here: &lt;a href="http://mitpress.mit.edu/sicp/"&gt;http://mitpress.mit.edu/sicp/&lt;/a&gt;  I'm thinking of working through it in clojure.  And who doesn't like LISP?  Uh...&lt;br /&gt;&lt;br /&gt;But his point about multi-core is important (although it has been made before).  A lot of people took his talk to mean that Ruby will lead the way into the future of programming.  I think his point was that the people at Rails Conf will lead the way -- but probably not in Ruby.  I've seen a few frameworks for handling concurrency in Ruby and they all suck.  Why?  Because you have to remember to use them all the time.  All it takes is one programmer mutating a state somewhere in your code and now you have an intermittent race condition bug.  If you're really going to do concurrency you need a language that treats all mutation like a disease that must be contained in explicitly declared blocks.  And that language is not Ruby.&lt;br /&gt;&lt;br /&gt;But I think we still have a few years left before we all have to get functional, so that's nice.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;There's 2 prominent black dudes in the Ruby community. I just gave a hardy hello to one and referred to him by the other's name. #railsconf    &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. #railsconf&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;In my defense:  I'm an idiot.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;You May Also Be Interested in: Implementing User Recommendations in Rails - Matthew Deiters&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So Amazon makes 25% of its sales based on recommendations.  I was talking with a friend from Groupon the night before and he was telling me that just guessing the sex from a person's name (and targeting what they get offered) has led to a significant sales boost.  If you're not thinking about how to intelligently recommend to your customers, it's a sure bet your competitors are.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Aaahh the Hoff's crotch is coming at me! #railsconf    &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Oh it was just an animated gif. #railsconf   &lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I urge you not to click this link: &lt;a href="http://www.post-literate.com/gerpunx/archives/2005/01/prepare_to_lose_your_mind.php"&gt;http://www.post-literate.com/gerpunx/archives/2005/01/prepare_to_lose_your_mind.php&lt;/a&gt;&lt;br /&gt;I think Deiters was trying to make a point about recursion in SQL being bad, but the image made my brain stop working.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Gem Neo4jr-social is a graph db that uses JRuby but isolates it in a Jetty server so you don't need to use JRuby throughout #railsconf    &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;You can use Neo4jr-social to get friend recommendations and degrees of separation pretty easily. @mdeiters #railsconf&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;To which Charles Nutter (@headius) responded @jakescruggs Jeez, why not just use JRuby? So much pain could be avoided.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;I really want @mdeiters slides for the explanation of all these crazy graph relationship terms #railsconf   &lt;/span&gt; &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Graph db's are amazing for relationship stuff.  You can do "what's my degree of separation from X" stuff in milliseconds.  And Neo4jr-social looks like a pretty cool way to do that stuff in a readable way.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;You have a lot of money lying around in your data - pick it up! @mdeiters #railsconf    &lt;/li&gt;&lt;li&gt;RT "This conference is the NoSQL conference. But remember: It's not No SQL. It's Not Only SQL" -- @mdeiters #railsconf&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Really good talk.  Lots of info in the slides:&lt;br /&gt;&lt;a href="http://assets.en.oreilly.com/1/event/40/You%20May%20Also%20Be%20Interested%20in_%20Implementing%20User%20Recommendations%20in%20Rails%20Presentation.pdf"&gt;http://assets.en.oreilly.com/1/event/40/You%20May%20Also%20Be%20Interested%20in_%20Implementing%20User%20Recommendations%20in%20Rails%20Presentation.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Lapidary: the Art of Gemcutting - Nick Quaranto&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;RubyGems.org has a nice versioned API @qrush #railsconf&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;'gem yank' to remove a gem. Didn't know you could do that. There's an undo too. Nice. @qrush #railsconf&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Versioned API and an 'undo' -- cool.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;gem webhook projects suggestion - gem tarballer @qrush #railsconf    &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;gem webhook projects suggestion - distributed testing service @qrush #railsconf    &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;gem webhook projects suggestion - change log service @qrush #railsconf    &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;All these ideas are great.  I command the readers of this blog to go implement them now...  Please?&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;Gemcutter moved from postgres to redis @qrush #railsconf mostly    &lt;/li&gt;&lt;li&gt;Lots of Gemcutter clones out there @qrush #railsconf    &lt;/li&gt;&lt;li&gt;.@qrush wants to add better indexes, dependency resolution, and support bundler in RubyGems.org #railsconf    &lt;/li&gt;&lt;li&gt;.@qrush also wants historical data for every gem with download graphs. @qrush #railsconf    &lt;/li&gt;&lt;li&gt;github.com/rubygems/rubygems No longer on svn. @qrush #railsconf&lt;/li&gt;&lt;/ul&gt;All very cool.  Nick is clearly firing on all cylinders -- he deserves a raise.&lt;br /&gt;&lt;br /&gt;Yehuda Katz - showed up and thanked Nick for his contributions to the Ruby community.  I was in quite a few talks where he made it a point to thank the speaker for things he really liked.  Stand up guy that Yehuda.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;RT: OH: "Firefox is the new IE." #railsconf (via @glv)&lt;/span&gt;&lt;br /&gt;Ouch.  But kinda true.&lt;br /&gt;   &lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;The Cold/Hot/Cold/Hot/Cold/Hot/Cold/Hot of this week has made me weak. Picked up some knockoff airborne at the CVS #railsconf  &lt;/li&gt;&lt;li&gt;Getting sicker... Must consume more vitamins and wear more clothes. Covering up crazy shirt now. :( #railsconf  &lt;/li&gt;&lt;li&gt;Must. Fight. Sickness. At. The. Airport.&lt;/li&gt;&lt;/ul&gt;At that point the sickness overtook me so I found a quiet place and laid down.  So I missed the last keynote -- which I'm about to watch now.&lt;br /&gt;&lt;br /&gt;And I'm back.  Good Keynote.  Actually, all the keynotes were pretty darn good this year.  And so were the sessions.  Shortly before I got sick on Thursday I remember thinking "This is probably my favorite Rails Conf."&lt;br /&gt;&lt;br /&gt;Gary Vaynerchuk's talk is probably summed up best with this (made up) title:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Relationships, relationships, relationships, (and swearing) - Gary Vaynerchuk&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here's some memorable quotes and thoughts:&lt;br /&gt;&lt;br /&gt;"Giving a Fuck is coming on strong"&lt;br /&gt;&lt;br /&gt;"Stop using the space (twitter, facebook, etc) just to put out fires"&lt;br /&gt;&lt;br /&gt;"If I get a hundred more followers I'll donate $100 to Haiti - Hey Fuck-face just donate $100 to Haiti"&lt;br /&gt;&lt;br /&gt;"Everything you're doing is being documented"&lt;br /&gt;&lt;br /&gt;"It's just getting real hard to hide"&lt;br /&gt;&lt;br /&gt;In 2005-6 everything was free 24/7/365.  Now people are being trained to pay for things.&lt;br /&gt;&lt;br /&gt;On consulting for huge companies: Its stunning how little most big companies give a crap.  Most CEO's want to keep the stock price up for 3-5 years and get out with a huge payday.&lt;br /&gt;&lt;br /&gt;Getting people to your site is awesome but "Content is always king"&lt;br /&gt;&lt;br /&gt;"What's the ROI (Return On Investment) in social media?  Well I don't know fuck-face what's the ROI in having a real relationship?  Meanwhile you're paying for billboards..."&lt;br /&gt;&lt;br /&gt;Old businesses: "They lived under small town rules" - if you screw someone you're going out of business.  Those days are coming back.&lt;br /&gt;&lt;br /&gt;Corporations: "We don't want to open this up because people could say our product's bad"&lt;br /&gt;&lt;br /&gt;Gary on the future:  "I'm all in -- I'm bullish on human beings."&lt;br /&gt;&lt;br /&gt;You can find Gary's Keynote along with all the others at: &lt;a href="http://www.youtube.com/view_play_list?p=393ECE649BB3813D"&gt;http://www.youtube.com/view_play_list?p=393ECE649BB3813D&lt;/a&gt; or on iTunes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Well that's the end of my Rails Conf 2010 coverage.  Thanks for reading.</content><link rel="replies" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/4984857037247312966/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=4984857037247312966" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/4984857037247312966?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/4984857037247312966?v=2" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/2010/06/rails-conf-2010-day-3.html" title="Rails Conf 2010 Day 3" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;AkQHRnw-fip7ImA9WxFVFEg.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185.post-1730086529597400230</id><published>2010-06-09T23:35:00.004-05:00</published><updated>2010-06-13T14:45:37.256-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-13T14:45:37.256-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="RailsConf2010" /><category scheme="http://www.blogger.com/atom/ns#" term="Rails" /><title>Rails Conf 2010 Day 2</title><content type="html">Only 40 tweets today (re and otherwise).  I must be slowing down in my old age. Tweets are in &lt;span style="font-style: italic;"&gt;italics&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Today's morning music was "Bulletproof" by Pop Will Eat Itself. Cram that in your head @ryanbriones&lt;/span&gt;&lt;br /&gt;Ryan was complaining yesterday that he had the theme from flash stuck in his head all day because of me.  That sounds awesome!  I had a Daft Punk song stuck in my head all day today and I was a better person for it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Trying to work on my Lightning Talk. Lightning talks are usually the best part of any conf so it better be good. 4:25 today #railsconf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Lightning talk is finished. Title: "ActiveMQ and ActiveMessaging: I've Experienced the Pain So You Don't Have To" #railsconf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yeah, I got up, worked out, ate eggs wrapped in cheese and bacon, showered and then realized I had gotten up an hour early by mistake.  Opportunity!  So I worked on the lightning talk.  To be honest, I was kinda pissed at myself for the boneheaded alarm mishandling but if it doesn't make you money or happy, you need to let it go.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Don't forget to read my sham of a blog post about #RailsConf Day 1: http://is.gd/cIdLZ&lt;/span&gt;&lt;br /&gt;So very meta.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;iPod at #RailsConf Keynote has been set to "BadPopCountryMusic" wtf mate?&lt;/span&gt;&lt;br /&gt;Seriously.  Is there anything worse than top 40 wanna be country music?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Creativity &amp;amp; Constraint - Neal Ford&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"Some of the 'facts' in this talk may in fact be harmless lies" - disclaimer of @neal4d #railsconf&lt;/span&gt;&lt;br /&gt;This disclaimer needs to be in front of all keynotes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;I'm Not Old, I'm seasoned. @neal4d #railsconf&lt;/span&gt;&lt;br /&gt;Me too buddy, me too.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"The right community to suggest something really weird to" @neal4d #railsconf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;RT I so wanna go to Neal Ford's halloween party! #railsconf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Constraints are liberating: @neal4d excuse for showing cool Halloween photos at #railsconf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;His Halloween party pics were off the hook.  Did I ever tell you I took Neal to his first day lunch at ThoughtWorks?  You'd think that would get me a Halloween party invite but memories are short.  Jerk.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;What constraints help? Maybe not static typing... @neal4d #railsconf&lt;/span&gt;&lt;br /&gt;Double true.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Hemingway and the Ex Pats in Paris wore stupid hats #railsconf&lt;/span&gt;&lt;br /&gt;Well they do.  Americans in berets look stupid.  There -- I said it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;An empty canvas is a daunting task @neal4d #railsconf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The invention of the camera made painters do something different besides making it look real. @neal4d #railsconf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The Camera gave painters freedom from the responsibility of representation. @neal4d #railsconf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Our camera is Java Enterprise Development - they can crank out vanilla apps so we can move on to interpretation @neal4d #railsconf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Interesting.  I think he meant no offense to Java devs in specific but much offense to the mindless and complacent.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;.@neal4d has a crazy terse 3 line Quicksort implementation #railsconf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yeah, I had no idea what it did.  You'd need a team powerful enough to turn goat piss into moonshine if you're going to check that in.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Non-obfuscating density is a characteristic of art in code @neal4d #railsconf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But how much density is too much?  It's a thin line between art and crap.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;RT #railsconf @_why : when u dont create things, u become defined by ur tastes rather than ability. ur tastes narrow &amp;amp; exclude ppl. so create&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Neal ended up his talk with poignant quote from _why.  Pour one out for the homies who couldn't be here.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Sponsored Keynote: Engine Yard's Open Source Love Affair - Evan Phoenix&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Dr. Who Theme! Played live by  #railsconf ers&lt;/span&gt;&lt;br /&gt;Huh?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Did Evan come on as a rock star or a parody of a rock star? you decide. #railsconf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Rim shots at a keynote? #railsconf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Talk show format is... interesting Will it pay off? @evanphx #railsconf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A 'Late Night with X' theme backed up by a live band.  And a game of password.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;.@evanphx "Perl is the word you were looking for" Dr. Nic: "Never heard of it." #railsconf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Well played Doc.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Enjoyed a pleasant 10 minutes of nothing with @evanphx #railsconf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I really did enjoy it.  Better than somebody coming out and saying "hey we bought this slot with our sponsorship and we're awesome."&lt;br /&gt;&lt;br /&gt;And then Twitter went down.  Again.  So I had to type into a document instead of live to the world.  It felt weird and dirty.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ruby on Rails: Tasty Burgers -- Aaron Patterson &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First, you &lt;span style="font-weight: bold;"&gt;have&lt;/span&gt; to download his slides just for the introduction: http://tenderlovemaking.com/railsconf2010.pdf&lt;br /&gt;&lt;br /&gt;Two samples to entice you:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/jakescruggs/4687409786/" title="Hello this is @tenderlove by jake_scruggs, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4006/4687409786_31e150afa4.jpg" alt="Hello this is @tenderlove" height="415" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/jakescruggs/4687410170/" title="Nom by jake_scruggs, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4025/4687410170_d27bba969a.jpg" alt="Nom" height="339" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Btw his outfits put mine to shame.  Today's was a deep magenta velvet jacket with a 70's tie and an ironic mustache.  Or a sincere but poorly chosen mustache.  There's a point when intense silliness becomes serious and upon that point Mr. Tender Love Making is doing an interpretive dance.&lt;br /&gt;&lt;br /&gt;Topics he talked about:&lt;br /&gt;&lt;br /&gt;sqlite3-ruby and Sqlite&lt;br /&gt;&lt;br /&gt;Did you know you can have a virtual file system in Sqlite?  Me neither.&lt;br /&gt;&lt;br /&gt;The new version of sqlite3-ruby is x1000 faster than before (1.3.0 vs 1.2.5)&lt;br /&gt;&lt;br /&gt;Mmap&lt;br /&gt;&lt;br /&gt;Mmap is a gem that lets you treat a file like a string.  So if you need to pass in a string to something but don't want to read the whole file into memory use Mmap.  Pretty useful tool to have in your back pocket.&lt;br /&gt;&lt;br /&gt;Rack&lt;br /&gt;&lt;br /&gt;Unknown but useful rack trick:  Rack will call 'each' and 'close' on the return object.  So you can pass it an array or file and things will work out just fine.  Handy.&lt;br /&gt;&lt;br /&gt;He speculated that Rails could take advantage of this and return html in pieces (as it's rendered) to make things faster.  Would be hard to do but awesome.&lt;br /&gt;&lt;br /&gt;JSON is a subset of YAML -- I did not know that.  Did everyone else?  Really? I knew you all were talking behind my back.&lt;br /&gt;&lt;br /&gt;He left the stage with a plea for the audience to dig into rails and investigate the 'Tasty Burgers.'&lt;br /&gt;&lt;br /&gt;But wait, there was some advanced shenanigans when he called Evan Phoenix to ask him a question.  During Evan's talk!  Those guys are the kings of wacky.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Redis, Rails, and Resque - Background Job Bliss by Chris Wanstrath&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;No Slides at all!  But still good.&lt;br /&gt;&lt;br /&gt;"Redis is all we really wanted it for a long time but we didn't know we wanted it"&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Redis is a key value store for data structures @defunkt #railsconf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This doesn't have anything to do with Chris Wanstrath's appearance but comical mustaches are the new black.  Except that he has a mustache now.  And it looks silly.  Not that I can complain about peoples fashions sense.&lt;br /&gt;&lt;br /&gt;Chris is totally in love with Redis and Unicorn because their maintainers are awesome, active, and their software is pretty bullet proof (it stays up).  Which is kinda important to Github.&lt;br /&gt;&lt;br /&gt;He advises you to background everything you can and I agree.&lt;br /&gt;&lt;br /&gt;Resque is the queuing system they built on top of Redis.  I've used it at Groupon and seen it used on Mad Mimi and it works well.  Plus the built in Sinatra web UI provides an amazingly informative look into the live queues.&lt;br /&gt;&lt;br /&gt;Github is on Ruby Enterprise Edition now.  So is Backstop (my company).  And everyone else at Ruby Conf.  It just surpassed ironic mustaches as the new black.&lt;br /&gt;&lt;br /&gt;Chris is determined to not add any queuing features to Resque.  He wants to let the plugins do that and there are more than a few you should check out.  I'd Google that for you but I'm tired.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Rocket Fueled Cucumbers - Joseph Wilk&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So Joseph's cuke build was getting out of control as it grew.  Taking more than 4 hours.  He solved this by using EC2 and Testjour (or Hydra) to parallelize the suite across 20 machines and got it down to 11 minutes.  But it cost $3K a month.  Yipes.&lt;br /&gt;&lt;br /&gt;He recommends stubbing out slow services and maybe even caching the db (but didn't specify how).&lt;br /&gt;&lt;br /&gt;He's excited about using the cucover gem to do "Lazy coverage-aware running of Cucumber acceptance tests"  Kinda like a super smart autotest.&lt;br /&gt;&lt;br /&gt;He mentioned this post as required reading that he doesn't necessarily agree with: &lt;a href="http://jamesshore.com/Blog/Alternatives-to-Acceptance-Testing.html"&gt;http://jamesshore.com/Blog/Alternatives-to-Acceptance-Testing.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Capybara can use envjs gem to run javascript tests in cuke.  Which is very cool.  Capybara-envjs on github&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Dear Lazyweb, how do you get a showoff presentation up on Heroku? I'd like to put my lightning talk up. #railsconf&lt;/span&gt;&lt;br /&gt;Posted this before my talk.  Still have no answer but if all the cool kids can do it I'm sure I can figure it out.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Lightning Talks&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Lightning Talks start now and I'm giving one. Come to Ballroom 1 now! #railsconf&lt;/span&gt;&lt;br /&gt;Yep.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;RT client_side_validations http://bit.ly/9gEfuL #railsconf&lt;/span&gt;&lt;br /&gt;Interesting gem.  Way too much live coding for a lightning talk - dude was brave.  He barely made it to the end and almost missed giving out the gem name.  Live coding seems like a good idea but is to be avoided in presentations.  Ignore my advice at your own peril.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Don't hide costs from the client -- it leads to bad relationships #lightningtalks #railsconf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Custom filters based on metadata looks cool in RSpec 2 #lightningtalks #railsconf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;gem install surveyor for easy surveys in your rails app #lightningtalks #railsconf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;surveyor gem can ask some complicated questions with easy. #lightningtalks #railsconf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;RT Mind. Blown. http://bit.ly/90D1ur Now that was a lightning talk by @igrigorik. #railsconf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yeah the schema free sql database thing was a nice antidote to all this NoSql hype.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;http://bit.ly/RwandaOnRails looks like an interesting way to track charity money's effectiveness #lightningtalks #railsconf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"Yes and..." is an important part of improv and pairing. I totally agree. #lightningtalks #railsconf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;My lightning talk went well and as soon as I figure out how to get it up on Heroku I'll give you (dear reader) the url.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update:&lt;/span&gt; Here they are: &lt;a href="http://active-messaging-pain.heroku.com/"&gt;http://active-messaging-pain.heroku.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Keynote - Derek Sivers&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In 2007 Derek took a lot of heat for his article entitled: "7 reasons I switched back to PHP after 2 years on Rails"&lt;br /&gt;Which can be found here: &lt;a href="http://www.oreillynet.com/ruby/blog/2007/09/7_reasons_i_switched_back_to_p_1.htm"&gt;http://www.oreillynet.com/ruby/blog/2007/09/7_reasons_i_switched_back_to_p_1.htm&lt;/a&gt;l&lt;br /&gt;&lt;br /&gt;I remember reading it and thinking he was a moron.  He gives a pretty good keynote for a moron so perhaps I should reevaluate.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;RT The first follower turns a lone nut into a leader. - @sivers #railsconf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;RT derek sivers shows this vid http://bit.ly/guHuz to talk about being a leader and starting a movement #railsconf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The talk was all about how he preferred his own PHP frameworky thing but how that couldn't scale and so he's coming back to Rails.  And is excited about Rails 3.  Also there was a lot about building community.  We use our emotional brain to justify our rational experiences.  But sometimes our emotional brain has access to things we don't consciously know (detailed in the book 'Blink').  There was more but it's late and I'm pretty tired so I'm wrapping this blog post up with a few more tweets:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Fogo de Chao ftw #railsconf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Drunk. Drunk on steak. Drunk on chocolate. In fact, I'm like a chocoholic except for alcohol.&lt;/span&gt;</content><link rel="replies" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/1730086529597400230/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=1730086529597400230" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/1730086529597400230?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/1730086529597400230?v=2" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/2010/06/rails-conf-2010-day-2.html" title="Rails Conf 2010 Day 2" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm5.static.flickr.com/4006/4687409786_31e150afa4_t.jpg" height="72" width="72" /><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;DEMDRXczcCp7ImA9WxFVEEg.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185.post-4174380645838596436</id><published>2010-06-08T22:57:00.003-05:00</published><updated>2010-06-08T23:07:54.988-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-08T23:07:54.988-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="RailsConf2010" /><category scheme="http://www.blogger.com/atom/ns#" term="Rails" /><title>Rails Conf 2010 Day 1</title><content type="html">I tweeted 73 times today.  What the hell is wrong with me?  When twitter went down in the middle of the day I panicked until I realized that things continue to exist even if you don't tweet about them. &lt;br /&gt;&lt;br /&gt;Anyway, here's my thoughts on Rails Conf Day the First interspersed with relevant tweets in &lt;span style="font-style: italic;"&gt;italics&lt;/span&gt; and director's commentary. &lt;br /&gt;(Is this Lazy? Yes -- Bite me.)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Woke up to "Theme Song from Shaft" -- Bring it #railsconf&lt;/span&gt;&lt;br /&gt;Set the old iPod classic to some inspirational music to psyche myself up for a day of interacting with strangers.  160 Gigs of storage -- take that solid staters.&lt;br /&gt;&lt;br /&gt;I ate my customary breakfast of bacon topped with eggs, salt, and cheese and then was off to the castle-like mammoth Baltimore conference center.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Keynote - David Heinemeier Hansson  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Number 1 Fave of DHH in Rails 3: Bundler. #railsconf&lt;/span&gt;&lt;br /&gt;Nice to see some validation of my blatant fan-boy cheering on of Bundler.  DHH loves it so suck it, haters.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;DHH - "When I would swear Bundler was a piece of shit it usually turned out to be me not listing a Gem" #railsconf&lt;/span&gt;&lt;br /&gt;Yep, just when I think it's Bundler doing something wrong, it's not.  It's the canary in the coal mine telling you about gem problems in your app.  As such it gets blamed a lot for problems out of its control.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;DHH - "Hashes are great but we've kinda been drunk on them for a long time" #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The new ActiveRelation gets rid of hashes in favor of method calls (.order vs :order =&gt; ...) #railsconf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;DHH - ActiveRelation makes building up queries much easier. #railsconf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The ActiveRelation stuff (covered in yesterday's post a bit) does a good job of fighting 'hasheritous' and making queries readable.  No small feat.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;If you just please your core users you create an impenetrable framework. Stepping away from that is what makes Rails 3 great. #railsconf&lt;/span&gt;&lt;br /&gt;This may be the most important but overlooked thing about Rails 3.  Keeping things easy to get into and read while increasing the power of Rails is a powerful combination that will increase adoption.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;DHH is bashing on the old routes format: concise but unreadable. #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;DHH - "there's just too much hashing going on" in routes #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;DHH - The majority case is now complicated routes files and Rails 3 is trying to make them more readable. #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;map.with_options is now a scope -- looks cool #railsconf &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is something like the 4th re-write of routes.  But the emphasis this time is on readability.  Which is awesome as almost all routes files were becoming impenetable piles of hashes that did some bad ass shit.  Rails 3 increases the bad ass but adds some intentionality.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;If you like the new stuff in ActiveRecord, thank @miloops, whose GSOC project integrated Arel. Great job Emilio! #railsconf &lt;/span&gt;&lt;br /&gt;True dat.  Mad props to Emilio.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;@dkastner Why not use Ruby for configuration -- I understand it better than the pitfalls of yaml&lt;/span&gt;&lt;br /&gt;I was responding to this: "Hm, so the question is, why are we using Ruby to define our routes? Do we really need loops and conditionals?"  Basically I love config in Ruby for reasons stated above.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;DHH's 4 faves of Rails 3: Bundler, Active Record Queries, Router, and ActionMailer #railsconf&lt;/span&gt;&lt;br /&gt;The official @railsconf twitter account retweeted this tweet.  I've really arrived.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;DHH - "Mailers for a long time had a split personality" Half controller and model and the worst of both. Controller won in R3 #railsconf&lt;/span&gt;&lt;br /&gt;Complaints that I and others have been making for years.  Glad to see Mailers finally becoming one thing.  &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Signed permanent cookies in Rails 3? Neat. #railsconf&lt;/span&gt;&lt;br /&gt;I had not heard about that.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;DHH - wants asset pipeline for Rails 3.1 #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;May I suggest http://github.com/aberant/css-spriter for creating sprites? as part of asset pipe-lining #railsconf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Would be cool to handle css, javascript, and images not as a bunch of junk in the public dir but as first class important things.  Also, why not use css-spriter for creating sprites of your many images?  Full disclosure: Css-spriter was written by some friends of mine.  But they're real smart so you (and Rails) should use it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Keynote - Michael Feathers&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Hard - breaking dependencies to write usable tests in java/c# - Not so hard in Ruby @mfeathers #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Novices start out writing good code, but as they become experts they write complex code as they understand too much @mfeathers #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Big Ball of Mud from @mfeathers talk http://www.laputan.org/mud/ #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"Your commit history is a Gold Mine" Most change areas are important to know about. @mfeathers #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"Find the most executed path and hammer it" make it awesome and tested @mfeathers #railsconf &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Hard to follow DHH's Rails 3 is ponies and rainbows talk with a thoughtful one but @mfeathers did a good job #railsconf &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Michael's talk was good stuff but it did come after the excitement for DHH's keynote so I hope people could shift gears and appreciate his insights.  He's not always the most dynamic speaker but "Working Effectively with Legacy Code" was an important book in my development as a coder so he definitely has good ideas.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Real Software Engineering - Glenn Vanderburg &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Winston W. Royce wrote a paper entitled "Managing the development of large software systems" which is generally credited with starting waterfall. However it was actually designed to be a warning against waterfall software processes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;People who designed software engineering misunderstood 2 things: Software and Engineering @glv #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Royce: defined waterfall and said it would not work. The world saw the definition is easy terms and adopted waterfall. @glv #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Royce: An implementation plan keyed only to these steps (waterfall) is doomed to failure. @glv #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Of all the thing's in Royce's paper (that started waterfall) the easiest to understand was waterfall so it was adopted @glv #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;There is no kind of engineering where you put something in one end and turn the crank. @glv #railsconf &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;I signed up for a Lightning Talk tomorrow at #railsconf I wonder what I'll talk about...&lt;/span&gt;&lt;br /&gt;I should probably figure that out.  Soon.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-style: italic;"&gt;Build models and test them. Early bridge makers new this before they had the math to prove things. @glv #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;In fact when math came along, it was incomplete and led to the Tacoma Narrows bridge collapse - testing would have helped @glv #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Mathematically modeling was introduced (to engineering) as a cost saving measure @glv #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The source code is the design of our system @glv #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Source code is math that does real work. @glv #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;RT "SW engineering is the science &amp;amp; art of designing &amp;amp; making... systems that can adapt to situations they may be subjected to" @glv #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Agile processes are optimized feedback engines @glv #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;RT Glenn Vanderberg is the Garrison Kellior of software engineering conferences. #railsconf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Good thoughtful stuff.  Glenn later said to me that he's dying to give this talk somewhere where he isn't "preaching to the choir."  Check out his slides for cool quotes at: &lt;a href="http://assets.en.oreilly.com/1/event/40/Real%20Software%20Engineering%20Presentation.pdf"&gt;http://assets.en.oreilly.com/1/event/40/Real%20Software%20Engineering%20Presentation.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Lots of "Fail Whale" today. Twitter can handle Ashton Kutcher but not #railsconf &lt;/span&gt;&lt;br /&gt;The dark time of the day when twitter went down.  The horror, etc.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Metrics Magic - Aaron Bedra&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Seems like people really like failing the build on bad metrics -- I should really get around to putting that into metric_fu #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Churn mentioned in @abedra talk can be found here: http://rubygems.org/gems/churn #railsconf &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Churn is a gem extracted from metric_fu that looks at your source control to see which files change a lot (possibly too much -- god objects).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Liked @abedra talk on metircs - he focuses a lot on failing the build with metrics #railsconf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Check out Flack-jacket if you want to fail the build on poor metrics results:&lt;a href="http://github.com/abedra/flack-jacket"&gt; http://github.com/abedra/flack-jacket&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Saw a "Save the princess, Save the world shirt" with a image of Link. Nice. #railsconf &lt;/span&gt;&lt;br /&gt;Old Heroes ref (remember when that show was exciting?  Me neither -- its been too long.) but still funny.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;@dastels Totally -- I got a free pony plushy for signing up with http://workbeast.com/ Haven't seen any rainbow swag. #railsconf&lt;/span&gt;&lt;br /&gt;Dave Astels was giving me (and the rails community) crap about Rails 3 being ponies and rainbows.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Garbage Collection and the Ruby Heap - Joe Damato&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;GC talk is cool. We really need to tweak our GC settings on REE to get better performance. #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Where are you leaking memory? Memprof knows. It rewrites your Ruby binary in memory to do deep awesome. #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;memprof.com "a web-based heap visualizer and leak analyzer" Sounds good but site is showing a passenger error page now. #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;@aslak_hellesoy Download the PDF @ http://timetobleed.com/ Looks better on your laptop&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;Joe's slides had poor contrast - luckily they were available online.  Check 'um out, there's some good info there.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Garbage Collection and the Ruby Heap with Joe Damato was technical but still graspable. Slides here: http://timetobleed.com/ #railsconf &lt;/span&gt;&lt;br /&gt;I'm old and repeat myself sometimes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;http://memprof.com should totally get bought out by @newrelic and the coolest performance site eva! #railsconf &lt;/span&gt;&lt;br /&gt;New Relic totally owes me a %10 finders fee for this idea.  It would be teh awesome.&lt;br /&gt;&lt;br /&gt;Later &lt;a href="http://memprof.com"&gt;http://memprof.com&lt;/a&gt; came back up and I looked around.  Nice interface and cool site.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ruby's Dark and Dusty Corners - Evan Phoenix, Charles Nutter&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I loved Charles' 3 rules for threads:&lt;br /&gt;1. Don't use threads&lt;br /&gt;2. If you do, don't share state&lt;br /&gt;3. If you share state, don't share mutable state&lt;br /&gt;&lt;br /&gt;word.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Interesting super nerdy language implementation talk here in the "Dusty Corners" talk. Some important caveats. #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;RT #railsconf : just say no to _id2ref!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"Memoized values are a memory leak." #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;GC.start - MRI: sometimes helps, REE: better tuned not needed as much, JRuby, Rubinius, MAcRuby, IronRuby: May actually hurt #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;More sophisticated GC implementations need more 'room to breath' but are faster. #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;About GC: Memory is cheap, CPU cycles are not. #railsconf &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;GC is important, you should probably take some time to look into it if you need to make your app perform better.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Keynote - Yehuda Katz&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Rails: Make hard things easy and impossible things possible #railsconf &lt;/span&gt;&lt;br /&gt;Slogan stolen from Perl and modified.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"Find something that looks impossible and then do that" @wycats #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Both @wycats and I started programming in earnest in 2004 #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;We both also used Front Page in the early days. It's like we're twins. @wycats #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Even if you are a total noob you can help @wycats #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Rewriting TMail and ActionMailer seemed impossible but it's done and in Rails 3 @wycats #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Lots of dudes without CS degrees and no followers on twitter so they were not in the 'in' crowd. But they are now. @wycats #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;People say Ruby will never be as fast as C. Who wants to bet against the JRuby and Rubinius boys? Not me. @wycats #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The Secret to getting into the 'in' crowd: Almost nobody turns down an offer to do hard work. @wycats #railsconf &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A really inspiring speech by Yehuda.  I had no idea that he, like me, didn't have a CS background. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ruby Heroes Awards Ceremony - Gregg Pollack&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Congrats @qrush on your Ruby Hero award. Well deserved. #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Congrats on your Ruby Hero Award @wayneeseguin How could I live without RVM? It wouldn't be worth it. #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;RT 2010 Ruby Heroes: @josevalim, @qrush, @fxn, @tenderlove, @wayneeseguin, @seacreature -- well deserved, great job! #railsconf &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Take the initiative this year. Don't ask permission. Think it, write it, ship it. @greggpollack #railsconf &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The Ruby Hero Awards are very cool.  Kinda made me feel like a slacker but that's OK.  Do as much as you can and the rest will sort itself out is my motto.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Long day of shaking hands and kissing babies for an introvert. Time to hide in my room and call the wife. See ya tomorrow #railsconf &lt;/span&gt;&lt;br /&gt;Yep.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;@polgardy Perl was credited in the talk, but the slogan was improved upon.&lt;/span&gt;&lt;br /&gt;Fred was asking about the Perl slogan mod.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;@dastels GC has, sadly, not been 'solved' in Ruby. It's finally getting the attention it deserves.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;@dastels Why so long to take GC seriously in Ruby? A. You solve problems when you need to. B. The East/West Ruby/Rails divide.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dave wanted to know why all the tweets about Garbage Collection.&lt;br /&gt;&lt;br /&gt;Time for bed.  Thanks for reading this sham of a blog post.</content><link rel="replies" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/4174380645838596436/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=4174380645838596436" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/4174380645838596436?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/4174380645838596436?v=2" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/2010/06/rails-conf-2010-day-1.html" title="Rails Conf 2010 Day 1" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A0IMQX8zfCp7ImA9WxFWGUg.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185.post-405788223977306301</id><published>2010-06-07T19:41:00.003-05:00</published><updated>2010-06-07T20:13:00.184-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-07T20:13:00.184-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="testing" /><category scheme="http://www.blogger.com/atom/ns#" term="RailsConf2010" /><category scheme="http://www.blogger.com/atom/ns#" term="Rails" /><title>Rails Conf 2010 Tutorial Day</title><content type="html">Here I am at Rails Conf 2010 in scenic Baltimore, MD and these are my thoughts on the tutorial day.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Rails 3 Ropes Course - Gregg Pollack and his band of minions (Nathaniel Bibler, Thomas Meeks, Jacob Swanner, Tyler Hunt, Mark Kendall, and Caike Souza)&lt;/span&gt;&lt;br /&gt;The worst thing about this presentation is that is was so informative, slick, and well paced that it spoiled me for the afternoon session -- But more on that later.  Gregg et al. took on an ambitious task and knocked it out of the park.  They discussed a number of new things in Rails 3 and had 5 labs to work through.  Every time I was just about done with my lab time was just about up and we moved on.  Speaking as a former teacher, that is damn hard to do.&lt;br /&gt;&lt;br /&gt;Details:&lt;br /&gt;When setting up a Rails 3 app you can do some interesting things like skip active record, or test unit, or git (What? By default Rails 3 will create an intelligent .gitignore file for you as every Rails developer uses Git (heh)).  You can do things like this because of the increased modularity of Rails 3.&lt;br /&gt;&lt;br /&gt;The new routes syntax is fun:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;match 'login' =&gt; 'session#new', :as =&gt; 'login', :via =&gt; :get&lt;/li&gt;&lt;li&gt;get '/articles/(:year)' =&gt; 'articles#show'  # The :year is an optional parameter as it is inside parens.&lt;/li&gt;&lt;/ul&gt;You can add constrains like so:&lt;br /&gt;:constraints =&gt; {:user_agent =&gt; /iphone/}&lt;br /&gt;&lt;br /&gt;In Rails 3, Bundler is used to manage gems.  I've used bundler in a few production apps now and I'm totally in love with it.  Bundler does what config.gem was supposed to in an easy and awesome way.  And you can use it in 2.3.5! Bundler Rulez!  OK, I'll stop now.&lt;br /&gt;&lt;br /&gt;ActionMailer now extends from AbstractController.&lt;br /&gt;&lt;br /&gt;O.&lt;br /&gt;M.&lt;br /&gt;G.&lt;br /&gt;&lt;br /&gt;Now mailers aren't this weird other world that's kinda like a model but kinda like a controller.  It uses the same underlying code as the controllers.  This is a long needed refractor that has enabled better syntax and less confusion.&lt;br /&gt;&lt;br /&gt;ActiveRelation is the new bad-ass relational algebra querying syntax where you can do cool stuff like:&lt;br /&gt;Post.where(:author =&gt; "Joe").include(:comments).order(:title).limit(10)&lt;br /&gt;&lt;br /&gt;To sum up ActiveModel, all of these things that used to be tightly coupled with ActiveRecord:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;  Callbacks (before and after hooks)&lt;/li&gt;&lt;li&gt;  Dirty&lt;/li&gt;&lt;li&gt;  Errors&lt;/li&gt;&lt;li&gt;  Naming&lt;/li&gt;&lt;li&gt;  Observing&lt;/li&gt;&lt;li&gt;  Serialization&lt;/li&gt;&lt;li&gt;  Translation&lt;/li&gt;&lt;li&gt;  Validations&lt;/li&gt;&lt;/ul&gt;Are not anymore and you can use them in ordinal Ruby objects just by including a mixin. Sweet.&lt;br /&gt;&lt;br /&gt;Rails 3 assumes any string is an XSS (Cross Site Scripting) attack unless you tell it otherwise and escapes it.  To output html in a view, you'll need to use the 'raw' method.&lt;br /&gt;&lt;br /&gt;Unobtrusive JS is now used in all the view helpers so if you've ever felt bad about using :confirm =&gt; "Are you sure?" but did it anyway because it was just so easy, you can put down that bit of guilt as it all reference a proper Javascript file and with no inline JS.&lt;br /&gt;&lt;br /&gt;Rails 3 truly is ponies and rainbows.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Rails 3 Deep Dive - Jeremy McAnally&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Tweet from Jeremy McAnally (@jm) 2 days before Rails Conf: "Why wouldn't I catch the flu right before RailsConf where I'm supposed to talk in front of people for a few hours? *sigh* Vitamin-C, engage!"&lt;br /&gt;&lt;br /&gt;So the first 10 minutes were about how Rails 3 is basically a Rack app.  And then, all of a sudden, we were in a lab.  He gave us 3 possible things to build with either Rack or Sinatra.  With no explanation of how to do so...  So I started to google for Rack docs, but 2 thoughts occurred to me:&lt;br /&gt;1.  I could google on my own time.&lt;br /&gt;2.  This does not bode well for the rest of the talk.&lt;br /&gt;&lt;br /&gt;So I bailed.  It could have gotten awesome after that, but the tweets were not kind.&lt;br /&gt;&lt;br /&gt;I ended up at:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Contributing to OSS - The 8 Steps for Fixing Other People’s Code - Dr Nic Williams&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Which was... Well right after I showed up he had a 'lab' where you were supposed to meet people until you ran into a foreigner.  In a way it was valid to have us meet people as open source is all about collaboration.  In another, much more real, way it seemed like he was trying to pad a short presentation.  He encouraged us to find an open source project an write a 'how to contribute' section for it because almost none of them have one.  I then realized that metric_fu doesn't have such a section and wrote one.  After that there was some floundering around with git and everyone trying to use the wireless at the same time.  I wandered away.&lt;br /&gt;&lt;br /&gt;And into an awesome discussion at BOHconf (an open spaces, or 'un-conference' that is running concurrently with Rails Conf at the Baltimore conference center) about fast tests.  I got way more out of that half hour than the previous 3 hours combined.&lt;br /&gt;&lt;br /&gt;Things I'm planning on looking into:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://grease-your-suite.heroku.com/"&gt;http://grease-your-suite.heroku.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Turning off your atime and journal data write back for faster file IO (don't try this in prod).&lt;/li&gt;&lt;li&gt;Looking at hard disk vs cpu activity during tests.&lt;/li&gt;&lt;li&gt;Tweak your test database to delay time to write back and increase its cache size&lt;/li&gt;&lt;li&gt;Using Hydra to parallelize your suite -- &lt;a href="http://rubygems.org/gems/hydra"&gt;http://rubygems.org/gems/hydra&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Specjour - RSpec with bonjour&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Things that came up which I hardily recommend:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use Ruby Enterprise Edition and set your GC settings to be absurdly wasteful.&lt;/li&gt;&lt;li&gt;Get rid of fat factories (Code that generates a model with lots of models hanging off it -- all of which need to be created in the db).&lt;/li&gt;&lt;li&gt;When using Factory Girl (or any other factory that generates ActiveRecord models) just create an instance instead of always saving it to the db.  Most times you don't need to touch the database.&lt;/li&gt;&lt;/ul&gt;Somewhere in there Nick Gauthier declared: "I love making test suites faster.  Tell anyone who wants to come by BOHconf and I will make their test suite faster."  Take him up on it is my advice.&lt;br /&gt;&lt;br /&gt;And then it was time for steak and rum.</content><link rel="replies" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/405788223977306301/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=405788223977306301" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/405788223977306301?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/405788223977306301?v=2" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/2010/06/rails-conf-2010-tutorial-day.html" title="Rails Conf 2010 Tutorial Day" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><thr:total>3</thr:total></entry><entry gd:etag="W/&quot;DkYBRXY6fip7ImA9WxFXEk8.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185.post-482694815251915790</id><published>2010-05-18T18:06:00.000-05:00</published><updated>2010-05-18T18:09:14.816-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-18T18:09:14.816-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="interview" /><title>Interview Coding Problems</title><content type="html">One of the awesome things about the business we're in is that you can ask people to actually do the thing you're hiring them to do IN THE INTERVIEW!  You can't really ask a banker to do some banking during an interview, but it's relatively easy to set up a computer with a coding problem and ask a potential hire to work through it.  Having recently gone through a job search, I though I'd discuss my thoughts on coding problems as part of the interview process.&lt;br /&gt;&lt;br /&gt;The first time I ever wrote code for an interview was at &lt;a href="http://www.thoughtworks.com/"&gt;ThoughtWorks&lt;/a&gt;.  It was a 3 day at home coding problem.  There were always 3 different questions and each could be knocked out in a few hours.  The candidate could choose which one they wanted to solve and upon submission, the solution was looked at by at least 2 different developers.  The great part about this is that we could filter out a lot of candidates before bringing them in to the intensive day long interview.  The downside of a take home test is that you never really know if they got some help.  Which is why in this type of interview it's important to go over their solution in person.&lt;br /&gt;&lt;br /&gt;One coding interview I did was 2 developers and I working on a Rails plugin.  It seemed like a good idea, but I don't create Rails sites from scratch every day so there was a fair bit of fumbling around hooking up the database and trying to remember what generators to use and so on.  When we finally got to the writing a plugin part I was a bit flustered and short on time.  We made some progress but I don't think either of us were satisfied with the outcome.  This brings me to an important point:  You will accomplish a lot less in an hour than you think you might.  This is because the interviewee is using an unfamiliar machine, text editor, doesn't have his or her custom bash aliases available, and is being watched.  And questioned.  All this will slow anyone down by 50%.  So if it would take you 30 minutes to solve a given problem from scratch then it's about right for an hour long pairing interview.&lt;br /&gt;&lt;br /&gt;At &lt;a href="http://obtiva.com/"&gt;Obtiva&lt;/a&gt;, &lt;a href="http://twitter.com/aberant"&gt;Colin&lt;/a&gt; and I paired on some truly horrible code that he had inherited.  Oh the stories we could tell you about that code base...  But I'm not sure how I feel about these "work with me" interviews if they are going to last less than 3-4 hours.  Actually, a day would be a better time allotment for this type of interview.  The reason is that solving a problem in an existing code base requires a lot of backstory.  If you only have an hour or two it's hard to grok the domain and you may just be testing the candidate for familiarity with the subject matter instead of pure programming talent.  It would be easy to miss a good candidate or hire someone who just happens to know the domain.&lt;br /&gt;&lt;br /&gt;Speaking of domain, you should try as hard as possibly to eliminate it from your coding problem.  I once did an interview with a firm where the challenge was to build a highly simplified version of something from their domain.  The problem was that it really wasn't simplified enough.  After reading a page and a half describing the system my head was spinning with new terms and concepts (I wasn't familiar at all with their field).  They had helpfully started me out with some stub classes and some failing cucumber specs but when piled onto a shaky foundational understanding it actually hurt more than it helped.  I had to figure out the domain, understand the class stubs (and any hints they may have been providing), describe what I was doing to the interviewer, understand what the cucumber tests were asking for, and navigate an unfamiliar workstation.  It turned into a bit of a train wreck.  Basically I did what I do when I don't understand something:  I went slow and tested everything.  But I ran out of time before I could even get one of the cucumber scenarios passing.&lt;br /&gt;&lt;br /&gt;You should try to structure the problem so that it has an easily achievable first step.  This enables the interviewee to get his or her confidence up to try the trickier parts and also provides an easy hint you can give them if the are struggling.  You might say:  "Hey, why don't you just try and get X working."  X being the easy part.  You'll get better results when people are relaxed.&lt;br /&gt;&lt;br /&gt;At &lt;a href="http://backstopsolutions.com/"&gt;Backstop&lt;/a&gt; we have a couple of coding questions, but the central theme is that the domain is either something everyone is totally familiar with or we can teach them in a few minutes before the coding starts.  We also make sure that the candidate pairs with different programmers to see how they interact with different people.  Now pairing while interviewing is not like regular pairing, of course.  When I run the interview, I approach pairing with an interviewee like I'm a novice developer who is a domain expert.  I'll answer any questions they have about the domain but I don't help much with the coding part.  I always allow access to any documentation they want to look up and of course I have irb open and ready for experimentation.&lt;br /&gt;&lt;br /&gt;For me the pairing interview is just a way to have an engaging conversation about code.  If someone doesn't solve the problem but does so in an interesting and thoughtful way then I consider it a success.  This also means that an unreadable working solution is considered a failure.&lt;br /&gt;&lt;br /&gt;Having actual programing be a part of your interview process will take a some thought, but all that time is well worth the effort.  I can't tell you how many times someone has sailed through the talking parts of the process only to crash and burn in the coding section.  Hiring someone who is great at talking about code but terrible at actually coding is one of the worst things you can do.</content><link rel="replies" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/482694815251915790/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=482694815251915790" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/482694815251915790?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/482694815251915790?v=2" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/2010/05/interview-coding-problems.html" title="Interview Coding Problems" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;DUYEQX49fSp7ImA9WxFXEUk.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185.post-1380155276900785539</id><published>2010-05-17T20:45:00.000-05:00</published><updated>2010-05-17T20:45:00.065-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-17T20:45:00.065-05:00</app:edited><title>Upcoming Speaking Dates</title><content type="html">I'll be giving an all new talk entitled "The Necessity and Implementation of Speedy Tests" at &lt;a href="http://rubykaigi.org/2010/en"&gt;Ruby Kaigi&lt;/a&gt; in Japan!  Ruby Kaigi is being held August 27-29th, 2010 in Tsukuba, Ibaraki, Japan.  Very exciting!&lt;br /&gt;&lt;br /&gt;Want to see the above talk but can't make it to Japan?  I'll be giving the same (ish) talk at &lt;a href="http://www.rubymidwest.com/"&gt;Ruby Midwest&lt;/a&gt; in Kansas City, MO.  Ruby Midwest will be held July 16-17, 2010.&lt;br /&gt;&lt;br /&gt;Stop on by and say hello -- I'll be the guy in the crazy shirt.</content><link rel="replies" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/1380155276900785539/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=1380155276900785539" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/1380155276900785539?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/1380155276900785539?v=2" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/2010/05/upcoming-speaking-dates.html" title="Upcoming Speaking Dates" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;A0MGRXc8cCp7ImA9WxFXEEg.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185.post-4092176406052456118</id><published>2010-05-16T20:20:00.000-05:00</published><updated>2010-05-16T20:23:44.978-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-16T20:23:44.978-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Obtiva" /><category scheme="http://www.blogger.com/atom/ns#" term="Backstop" /><category scheme="http://www.blogger.com/atom/ns#" term="consulting" /><title>Why I Left Obtiva</title><content type="html">Recently I ended my nearly 2 year relationship with &lt;a href="http://obtiva.com/"&gt;Obtiva&lt;/a&gt; and why I left deserves a few words.&lt;br /&gt;&lt;br /&gt;The issues I had with Obtiva were mostly just issues I have with consulting: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;You only work at places messed up enough that they need to hire consultants &lt;/li&gt;&lt;li&gt;You leave before you get to spend time with code you wrote so it's hard to learn long term lessons &lt;/li&gt;&lt;li&gt;The most stable gigs that pay the bills for a consultancy tend to be the worst programming experiences (Large corporations with way more money than sense)&lt;/li&gt;&lt;li&gt;You have to track every hour of your time&lt;/li&gt;&lt;li&gt;Time off has to be negotiated with two companies instead of one&lt;/li&gt;&lt;li&gt;Learning a whole new bunch of names. personalities, and organizational structures every 6 months&lt;/li&gt;&lt;/ul&gt;Now don't get me wrong, consulting with ThoughtWorks and then Obtiva made me a much better programmer and was an amazing learning experience but I felt that, in order to grow as a programmer, I needed to work for a product company and learn the lessons that only living with a code base long term can teach you.  Consulting is a great drinking-from-a-fire-hose experience that every developer should consider, but it has its limitations.  So I joined &lt;a href="http://backstopsolutions.com/"&gt;Backstop Solutions &lt;/a&gt;and I write Ruby on Rails sites for hedge funds and the people who use them (note: we sell products to hedge funds, I don't actually work for a hedge fund).&lt;br /&gt;   &lt;br /&gt;Why Backstop?  Well, it's big enough (60ish people) that they've worked out most of the kinks of being a business (direct deposit, 401k, health insurance, etc.) but small enough that you can get to know everyone and (hopefully) help steer the company.  Their product is strong and growing, but there's some new products in the works too.  They do Agile but would like to do it better (I've been brought on to help with that in addition to my coding responsibilities).  But the best part was that while everyone is smart and nice, it's oddly unknown in the Ruby community -- and I can help with that.&lt;br /&gt;&lt;br /&gt;Obtiva was a great experience.  During my time there I moved from being just a coder to being more of a leader, started speaking at conferences, got to participate in many wonderful geekfests, helped mentor software apprentices (which I once was), and learned a ton from all the programmers I interacted with. &lt;br /&gt;&lt;br /&gt;To sum up I'll quote from my company-wide resignation email:  "Mommy and daddy still love each other.  Except we're going to see other people.  And not live together."</content><link rel="replies" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/4092176406052456118/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=4092176406052456118" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/4092176406052456118?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/4092176406052456118?v=2" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/2010/05/why-i-left-obtiva.html" title="Why I Left Obtiva" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><thr:total>3</thr:total></entry><entry gd:etag="W/&quot;DkcDRHs9fCp7ImA9WxFQGEg.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185.post-4934757985106449905</id><published>2010-05-14T11:15:00.001-05:00</published><updated>2010-05-14T11:21:15.564-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-14T11:21:15.564-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="XP" /><title>Are you Really Doing Agile Development?</title><content type="html">So recently at work I was asked help to make the company more "Agile."  Well I'm a developer first and process wonk second so I responded with my usual "How many of the 12 practices are you really following?"  Which was met with a lot blank stares.  Turns out the classic XP practices are not so easy to find on the internet anymore.  It also turns out that the word "Agile" has been so successful that lots of people don't know that XP stands for Extreme Programming.  Now I'll be the first to admit that "Extreme Programming" is a colossally stupid name, but what I like about XP and the original 12 practices is that they were controversial and easy to evaluate:  Either you were doing them or you weren't.  What I don't like about "Agile" is that it's so broad and defined in such a "hand wavy" way that pretty much everyone can fool themselves into thinking that they already are fully Agile.&lt;br /&gt;&lt;br /&gt;So to fix this and help my company start measuring their "Agility" better, I've decided to list out classic (They've changed over time -- but not for me.  And get off my lawn!) 12 XP processes.  And my highly opinionated view of each of them.  After that I'll tell you how to score your "Agility."&lt;br /&gt;&lt;br /&gt;* Planning Game&lt;br /&gt;  Get requirements from customer, form them into (short) stories, estimate the time it will take, do them, measure velocity, examine failed estimates for clues as to how to estimate better, and repeat.  A story should be a placeholder for a conversation -- This only works if the customer (or surrogate) is highly available to the developers and the developers take advantage of that availability by checking in frequently during the development process.  Note:  Stories that take longer than a day significantly undermine many of the other parts of XP.&lt;br /&gt; &lt;br /&gt;* Small Releases&lt;br /&gt;  Iterations should be 1-2 weeks (depending on how painful/expensive it is to organize an iteration).  Releases should happen after every iteration if the application is easy to deploy (web apps).&lt;br /&gt;&lt;br /&gt;* Metaphor&lt;br /&gt;  Nobody does this.  Extra points if you do.&lt;br /&gt;&lt;br /&gt;* Simple Design&lt;br /&gt;  This means different things at different levels.  When kicking off a green field project a week of requirements gathering and design is good.  For an individual story, a few minutes to an hour is good.  Then you start writing code.  Important:  Design as you go.  Stopping to spend a few hours with a whiteboard is allowed and encouraged.  Do the simplest thing that could possible work until it becomes apparent that it will not.  Then redesign.  The idea is that at the beginning of the project you know the least about it -- spread the design across the life of the project so you can make design decisions with more knowledge.&lt;br /&gt;&lt;br /&gt;* Testing&lt;br /&gt;  Test first.  Coverage above 80% for Java, 90% for Ruby (less exception checking in Ruby means easier to cover).  Non-brittle, atomic, fast tests (unit tests should run under 5 min. Actually under 1 minute is best, but most think that's impossible (spoiler: Its possible)).&lt;br /&gt;&lt;br /&gt;* Refactoring&lt;br /&gt;  Short:  Red, Green, Refactor!  Long:  Write a failing test, make it pass, refactor the code.  This also means when you wander into a messy place you leave it a little better than you found it.   &lt;br /&gt;&lt;br /&gt;* Pair Programming&lt;br /&gt;  Above 80% of the time.  Seriously.  Tasks that seem like you can't pair on them often mean that you aren't using the right pairing techniques.  Pairing is a skill:  Get good at it.&lt;br /&gt;&lt;br /&gt;* Collective Code Ownership&lt;br /&gt;  Anyone can change any code.  Yes, they should consult whoever is knowledgeable about said code, but there are no parts of the code that only developer X is allowed to touch.&lt;br /&gt;&lt;br /&gt;* Continuous Integration&lt;br /&gt;  Every check-in to the remote repository triggers a comprehensive suite of unit tests.  The developers have to care if the build fails.  For example:  When the build fails, no one checks in until it is fixed.  Also there should be some social ridicule for the build breaker (have to wear a stupid hat for the rest of the day, an obnoxious build breaker trophy placed on their desk, they have to buy donuts for the team, etc.).  This all assumes that the build is reliable and that a failure means there is a real problem. &lt;br /&gt;&lt;br /&gt;* 40-hour Week&lt;br /&gt;  Now called "Sustainable Pace" because "40-hour Week" tends to scare managers and end of project pushes are sometimes necessary even in XP.  This should be no more than 2 weeks, have a clearly defined point at which the long hours will stop, and happen no more than twice a year.  Actually, if it happens twice a year it means your estimation skills need to get better.&lt;br /&gt; &lt;br /&gt;* On-site Customer&lt;br /&gt;  Doesn't happen often for non-internal projects.  Usually customer surrogates are used.  These surrogates need to take pains to talk to real users often (not just the managers of the users) and be highly available to developers to answer questions. &lt;br /&gt; &lt;br /&gt;* Coding Standards&lt;br /&gt;  Doesn't matter what they are but the developers need to come to a consensus and stick to it.  Consensus does not mean everyone nods yes in the meeting but ignores the standards when they feel like it.&lt;br /&gt; &lt;br /&gt;So how do I score my Agility?  Take the number of practices that you actually do, divide by 12, and then multiple by 100 -- that's your percent Agile.  Do not give yourself a point if you don't fully implement a practice.  Have Continuous Integration but some of the tests fail randomly?  No point.  You pair "when necessary" which ends up being 40% of the time.  No point!  Run iterations but don't estimate your stories?  No Point!!&lt;br /&gt;&lt;br /&gt;This is take a hard look at yourself in the mirror time, not some hippie love fest.</content><link rel="replies" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/4934757985106449905/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=4934757985106449905" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/4934757985106449905?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/4934757985106449905?v=2" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/2010/05/are-you-really-doing-agile-development.html" title="Are you Really Doing Agile Development?" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;DU4FQHc8fyp7ImA9WxNSFko.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185.post-3095689412863072053</id><published>2009-08-30T18:51:00.004-05:00</published><updated>2009-08-30T19:18:31.977-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-30T19:18:31.977-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="LoneStarRubyConf2009" /><title>Lone Star Ruby Conf 2009 Day Two Afternoon Sessions</title><content type="html">&lt;span style="font-weight: bold;"&gt;More Lighting Talks!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A lot of people skip the lighting talks, but I find that some of the best stuff at any given conference comes out of the these intense 7 minutes sessions.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Jared Ning: "Ruby Without Borders" &lt;/span&gt;&lt;br /&gt;Matthew Todd gave a talk last year asking for people to came to Tanzania and help him code in Ruby.  Jared did and he loved the experience.&lt;br /&gt;He mentioned a very useful TextMate short-cut:&lt;br /&gt;If you have a bunch of files and folders open in the project drawer and you click the chevron (the triangle thingy) to close a top level folder then when you open it back up TextMate remembers the state of what folders were open and closed underneath.  But sometimes you want to close down all the folders underneath.  Option clicking on the chevron will do that.  Also, option clicking on a closed chevron will open up all sub folders.  I've been looking for this.&lt;br /&gt;&lt;br /&gt;Check out &lt;a href="http://matthewtodd.org/2009/01/26/ruby-without-borders.html"&gt;Ruby Without Borders&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Jeffrey Taylor: "Fast Multi-protocol XML Parsing"&lt;/span&gt;&lt;br /&gt;Jeffrey's project had to read a lot of RSS feeds and it was super slow even with the fast ruby xml parsers.  So he rolled his own, which can be found here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://abluz.dyndns.org/fast_xml_parsing.rb"&gt;http://abluz.dyndns.org/fast_xml_parsing.rb&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Jeffrey used the &lt;a href="http://en.wikipedia.org/wiki/Simple_API_for_XML"&gt;sax model&lt;/a&gt; to do super fast xml parsing (10 times faster than nokogiri - he claims).  He does admit that the code has a Flog score of over 500 for one method.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Hal Fulton: "Reia: The Next Big Thing" &lt;/span&gt;&lt;br /&gt;&lt;a href="http://wiki.reia-lang.org/wiki/Reia_Programming_Language"&gt;Reia&lt;/a&gt; is an attempt to combine Erlang and Ruby.  If you want the cool concurrency of Erlang with Rubyish syntax, take a look.&lt;br /&gt;&lt;br /&gt;Yehuda Katz: &lt;a href="http://github.com/wycats/bundler"&gt;http://github.com/wycats/bundler&lt;/a&gt;&lt;br /&gt;A true dependency resolver&lt;br /&gt;From the README:&lt;br /&gt;&lt;blockquote&gt;Bundler is a tool that manages gem dependencies for your ruby application. It takes a gem manifest file and is able to fetch, download, and install the gems and all child dependencies specified in this manifest. It can manage any update to the gem manifest file and update the bundled gems accordingly. It also lets you run any ruby code in context of the bundled gem environment.&lt;/blockquote&gt;So basically it's a better way to vendor your gems with your project.  Check it out if you've had trouble using other systems.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Before Matz's Q and A, Jim Freeze got up and talked about Lone Star Ruby Conf's attendance over it's three year span:&lt;br /&gt;2007 - 200&lt;br /&gt;2008 - 282&lt;br /&gt;2009 - 230ish&lt;br /&gt;&lt;br /&gt;Which is right around where they want it.  Small enough to be intimate, large enough to be interesting.  And that size group fits nicely in the Norris Conference Center.&lt;br /&gt;&lt;br /&gt;Btw, the network was outstanding this year.  They bought something like 6 wireless routers and although sometimes it was sluggish, it remains some of the best wireless I've had at a conference.  Usually the high tech load crashes the network within minutes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Matz Q and A&lt;/span&gt;&lt;br /&gt;The two answers that stood out to me were when he said that the Perl $ variables were the thing he regrets the most about designing Ruby.  Also, when I asked him about how often he gets to write in Ruby he said that the largest Ruby program he ever wrote is 2-3000 lines of ruby code.  It was a mail client with Emacs front end.  Generally he uses it for scripts and such.  I find it amazing and a little heartbreaking that Matz doesn't get to program in the language he created and clearly loves.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Encoding Domains - Rich Kilmer&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First, there was a lot of buzz about &lt;a href="http://prezi.com/"&gt;Prezi&lt;/a&gt; at the conference.  Prezi is a canvas presentation tool that so impressed Rich Kilmer that he learned it the night before and wrote his keynote in it.  In Prezi you put all your text, videos, images, sound files, and whatever in one huge canvas and then tell give it a bunch of waypoints and zoom levels to follow.  It's pretty bad-ass.&lt;br /&gt;&lt;br /&gt;This was Rich's first keynote ever.  Which is kinda hard the believe as he's been doing amazing things with Ruby since the dawn of time (which is 2000, btw).  In it he discussed how software libraries don't have value, they have potential.  What has real value is encoding domains.  He told an interesting story about how he encoded the domain of a massive military project mostly by sitting down with some experts in the field and figuring out how they would like the DSL to read.  Once he had captured all the information they could enter in to their logistics system in syntactically correct Ruby, he went about making it work.  He called it syntax driven development and it worked so well that 5 years later he still gets calls about the prototype he wrote in two months.  Apparently they are still trying to create the real product in some other language.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Well, the perfect storm of conferences (Agile 2009, Software Craftsmanship North America, and Lone Star Ruby Conf) is now over and I'm looking forward to actually writing some Ruby tomorrow.  I need the rest.</content><link rel="replies" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/3095689412863072053/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=3095689412863072053" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/3095689412863072053?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/3095689412863072053?v=2" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/2009/08/lone-star-ruby-conf-2009-day-two.html" title="Lone Star Ruby Conf 2009 Day Two Afternoon Sessions" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkcHQno-fCp7ImA9WxNSFUo.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185.post-3044021609102876037</id><published>2009-08-29T12:52:00.004-05:00</published><updated>2009-08-29T13:20:33.454-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-29T13:20:33.454-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="testing" /><category scheme="http://www.blogger.com/atom/ns#" term="LoneStarRubyConf2009" /><title>Lone Star Ruby Conf 2009 Day Two Morning Sessions</title><content type="html">Last night Matz gave a keynote entitled "Why do we Love Ruby?" He talked about how Ruby embodies Quality Without A Name (Qwan).  Here's a description of &lt;a href="http://www.munnecke.com/islands/qwan.htm"&gt;Qwan&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I think it might be time to retire this talk, as I've seen it more than a few times before. I'd much rather hear about interesting problems he's solved while designing Ruby or meditations on where the language is heading. A humble suggestion from a guy who's very grateful for Ruby.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;TDD: More than just "testing" - Evan Light&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Evan started out his talk by pointing out that lately we've been focusing more on tools and techniques more than the goal of testing. Testing is not the end, it is a way to help you get to the goal of a well designed application.&lt;br /&gt;&lt;br /&gt;He did a live BDD coding demo - which is very courageous. I've seen way too many presenter's brains melt under the hot lights and audience pressure. He managed to pull it off and show some Behavior Driven Development. Evan likes to write out his series of specs/tests before he writes any code. It's sort of a high level sketching out of the design. Then he works on getting them to pass. Watching him work I was struck by how much good BDD is a conversation between the tests and the code - going back and forth. Sometimes the tests push bask and tell you the code needs to change, but just as often the code can push back on a naive test.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;At this point I got up and gave my talk. The crowd was way more into it than when I gave the same talk a few days ago at Agile2009. Later people kept coming up to me and thanking me for the talk and metric_fu. Felt pretty good.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Lightning talks:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;How to Get More Women (in Programming) - Sara Brumfield&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Anti-patterns:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Impostor syndrome - a lot of women feel like they are impostors so they don't go to conferences. They don't realize that just about everyone feels that way.&lt;/li&gt;&lt;li&gt;Voice of unquestionable authority - The one guy who asks the really hard intense question. This action can intimidate women a lot more than men.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Suggestion: Offer women's t-shirts at you conference.  Little things like that encourage women to attend.&lt;br /&gt;&lt;br /&gt;The "Pipeline Problem." Math classes filter out some women, programming classes filter out more, the job itself keeps filtering. Sara feels that we've been trying to solve the pipeline problem for years, but she feels it's not working.&lt;br /&gt;&lt;br /&gt;Sara &lt;a href="http://sarabrumfield.blogspot.com/2009/08/how-to-get-more-women-in-programming.html"&gt;posted&lt;/a&gt; a more detailed description of her thoughts on the subject.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Prawn - Gregory Brown&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://prawn.majesticseacreature.com/"&gt;Prawn&lt;/a&gt; is a Ruby gem for creating PDFs.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;High level interface for basic reports.&lt;/li&gt;&lt;li&gt;It's the fastest pure ruby pdf generator&lt;/li&gt;&lt;li&gt;Prawn is pure Ruby with no tricky dependencies so it runs on all the Rubys&lt;/li&gt;&lt;li&gt;M17I is a top priority&lt;/li&gt;&lt;/ul&gt;The PDF specification is 1300 pages so it's been interesting.  1.0 of Prawn should come out soon.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;HTML5 &amp;amp; CSS3 - Dallas Pool&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The combination of HTML5 and CSS3 manages to move a lot of the dynamic view stuff out of flash, javascript, and photoshop and into... the view! Looks pretty cool.&lt;br /&gt;&lt;br /&gt;If you want to know more checkout a presentation he gave here: &lt;a href="http://www.scribd.com/doc/19111526/HTML5-Presentation"&gt;http://www.scribd.com/doc/19111526/HTML5-Presentation&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;a href="http://codingmentors.com/"&gt;CodingMentors.com&lt;/a&gt; - Mark McSpadden&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Mark wants you to get involved with mentoring developers in specific areas or to get mentorship. You can commit to remote mentoring and limited hours so don't be scared.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Spork - Tim Harper &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://github.com/timcharper/spork/tree/master"&gt;Spork&lt;/a&gt; is a gem that forks the linux process so you can run rails specs faster. Basically you don't have to load up the rails environment every time you run a test (which is why tests that claim to take 0.023 seconds really take 5)&lt;br /&gt;&lt;br /&gt;Time for lunch!</content><link rel="replies" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/3044021609102876037/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=3044021609102876037" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/3044021609102876037?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/3044021609102876037?v=2" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/2009/08/lone-star-ruby-conf-2009-day-one_29.html" title="Lone Star Ruby Conf 2009 Day Two Morning Sessions" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkUNQ3w6eSp7ImA9WxNSFUo.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185.post-1207716483466259026</id><published>2009-08-28T17:26:00.005-05:00</published><updated>2009-08-29T13:24:52.211-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-29T13:24:52.211-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="LoneStarRubyConf2009" /><title>Lone Star Ruby Conf 2009 Day One</title><content type="html">I have to admit that this morning I was not looking forward to seeing another day of presentations after 3 days of Agile 2009 and 1 of Software Craftsmanship North America, but almost immediately upon entering the Norris Conference Center I felt welcomed.  Part of this is that Jim Freeze, the LSRC head organizer, is a heck of a nice guy who recognized me in the hallway and said hello but also that when I sat down I noticed that every table had plenty of power for computers.  Awesome.  At Agile there was no power in any of the rooms and very limited access anywhere else.  I type up my notes on the presentations as they happen (and I notice a lot of others do the same) so I spent much of my time at Agile glancing at my diminishing power and hoping I could make it through the next session.  I know a lot of people hate open laptops at conferences but studies have shown that if you give some people something to do with their hands while they listen to a presentation they consume it more effectively.  I know it can seem annoying to have the person next to you furiously IM-ing all his friends but that may just be his or her way of listening.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Something interesting - Dave Thomas&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ah to be so famous that don't have to bother to title your talks.  Despite what seemed like a lack of preparation, once he got up there his talk seemed quite polished and interesting.&lt;br /&gt;&lt;br /&gt;Dave mentioned early on that it's his tenth year using Ruby which is amazing for a man who has "the attention span of a gnat."&lt;br /&gt;&lt;br /&gt;Why?&lt;br /&gt;&lt;br /&gt;First of all, Ruby is a Multi-paradigm language.  Ruby can do procedural, prototypes, objects, and even a passible interpretations of functional all in one somewhat unified whole.  They idea is to let you, the programmer, do what you like.&lt;br /&gt;&lt;br /&gt;"Ruby thinks the way I think" - which means it's imperfect.  "It's gloriously imperfect."&lt;br /&gt;&lt;br /&gt;Dave then showed a bunch of quotes from famous people talking about how the sterility of perfection can hinder creativeness.  He ultimately concluded that if their is no ambiguity, there is no room for you.&lt;br /&gt;&lt;br /&gt;An example of Ruby's ambiguity:&lt;br /&gt;def foo x&lt;br /&gt;puts x&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;foo { :e =&gt; 2 } # Syntax error!&lt;br /&gt;foo :e =&gt; 2 # Totally fine&lt;br /&gt;&lt;br /&gt;Ruby's interpreter has some quirks - there are heuristics that make your code read naturally and work 99% of the time.  So, Dave concluded, some ambiguity is worth it.&lt;br /&gt;&lt;br /&gt;Ruby keywords are loose. For example, is 'begin' is a keyword?  Check this out:&lt;br /&gt;&lt;br /&gt;&gt;&gt; c = Object.new&lt;br /&gt;=&gt; #&lt;object:0x5e6b68&gt;&lt;br /&gt;&gt;&gt; def c.begin&lt;br /&gt;&gt;&gt;  puts "hello"&lt;br /&gt;&gt;&gt; end&lt;br /&gt;=&gt; nil&lt;br /&gt;&gt;&gt; c.begin&lt;br /&gt;hello&lt;br /&gt;=&gt; nil&lt;br /&gt;&lt;br /&gt;Wacky.&lt;br /&gt;&lt;br /&gt;Ruby's view is there is no right way.&lt;br /&gt;&lt;br /&gt;The progress in Ruby is Messy.  The size of the Ruby tarball is going going up &lt;/object:0x5e6b68&gt;exponentially&lt;object:0x5e6b68&gt; while the number of methods is going up linearly. And Ruby 1.9 is very different from 1.8x.  The benefit to breaking some backwards compatibility is new and powerful features keep entering the language.&lt;br /&gt;&lt;br /&gt;The People are Messy.&lt;br /&gt;&lt;br /&gt;Ruby was the wild west in the beginning with a small true community.  But then someone found Gold in them thar hills.  Rails came in and all of a sudden the group grew by leaps and bounds.&lt;br /&gt;&lt;br /&gt;Dave was physically sick reading Zed's rant (in which Zed Shaw said some none too nice things about Dave).  It was 9 months before he slept properly again.  Dave thought he was part of the Ruby community.  But Ruby is not a singular community anymore.  To say Ruby is a community now would be like claiming there was a screwdriver community.  Ruby is a resource around which communities gather.&lt;br /&gt;&lt;br /&gt;In conclusion:  Messy can be fun.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Programming Intuition - Glenn Vanderburg&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Last year Glenn gave a talk called 'Tactical Design' in which he advocated focusing on three things for the beginning programmer:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Do One Thing&lt;/li&gt;&lt;li&gt;DRY&lt;/li&gt;&lt;li&gt;SLAP (Single Level of Abstraction Principle)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Last year's talk was all about what you can do.  This talk was about how you think.&lt;br /&gt;&lt;br /&gt;What makes a programmer good is not a command of the syntax, it's more like art.  Great programmers all talk about code as if they can touch and smell it.  Large portions of human brains are designed to use 5 senses.&lt;br /&gt;&lt;br /&gt;Glenn showed Bobby McFerrin at the world science festival&lt;a href="http://www.youtube.com/watch?v=ne6tB2KiZuk"&gt; teaching the audience&lt;/a&gt; the Pentatonic scale.  Then he showed a &lt;a href="http://www.youtube.com/watch?v=asDXpfFMKNA"&gt;visualization&lt;/a&gt; of Frederic Chopin nocturne opus 27 #2.  The point being that music/computation/thinking are all would up together.&lt;br /&gt;&lt;br /&gt;At one of Paul Graham's shops they had some mechanical gauges to tracking networks traffic.  He could hear the gauges moving and knew when there is a problem without ever having to get up and look at the display.&lt;br /&gt;&lt;br /&gt;Glenn was saying that we need to cultivate a sense of code.  The best programers seem to use all the parts of their brain including the 5 senses.  Quick feedback is essential to this.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Module Magic - James Edward Gray II&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So when &lt;a href="http://www.confreaks.com/"&gt;confreaks&lt;/a&gt; post this talk online go check it out.  There was way too much code on the screen for me to even attempt to copy it all down. James showed off some pretty cool things you can do with modules.  Check out his slides or the full talks and meditate on the code.  What I really like about James' presentations is that he knows how to start off slow.  He has a real teacher's gift for bringing an audience along.&lt;br /&gt;&lt;br /&gt;Towards the end of the talk James said that he feels that modules can replace a lot of what we use inheritance to do now and without inheritance's side effects.&lt;br /&gt;&lt;br /&gt;Update, he's posted the &lt;a href="http://blog.grayproductions.net/articles/lone_star_rubyconf_slides"&gt;slides&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Succeeding with Rails - Chad Pytel&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Chad is one of the founders of Thoughtbot and he went through some Thoughtbot's values and strategies that have guided them.&lt;br /&gt;&lt;br /&gt;Hiring process:&lt;br /&gt;1. Initial Resume and code review&lt;br /&gt;2. Initial phone call - high level (who you are, what your goals are)&lt;br /&gt;3. Second techincal interview.&lt;br /&gt;4. Week long immersive trial. Payed.&lt;br /&gt;&lt;br /&gt;Core hiring principles:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Look for the best Skill and Attitude at a Salary you can afford.&lt;/li&gt;&lt;li&gt;They hire all technicians (coders)&lt;/li&gt;&lt;li&gt;No subcontractors or outsourcing&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Clients:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Do the best you can for the client&lt;/li&gt;&lt;li&gt;Be proactive (over communicate).  Have the hard conversations early.&lt;/li&gt;&lt;li&gt;Set expectations and keep setting them.  See above&lt;/li&gt;&lt;li&gt;Be nice. And fire the not nice customers.&lt;/li&gt;&lt;li&gt;Work the way they want or no deal.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Client interaction:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Their project planning form is online.&lt;/li&gt;&lt;li&gt;They use highrise for managing client information.&lt;/li&gt;&lt;li&gt;Use master services agreement (how we work and how much you pay us) and set out the first several iterations&lt;/li&gt;&lt;li&gt;Appoint a project lead (PM/CP)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Development values:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Practice sustainable development - 40 hour work week&lt;/li&gt;&lt;li&gt;Design first (build the user interface)&lt;/li&gt;&lt;li&gt;TDD&lt;/li&gt;&lt;li&gt;Iterative development - use Pivotal Tracker&lt;/li&gt;&lt;li&gt;Focus on time instead of money&lt;/li&gt;&lt;li&gt;People should do what they enjoy&lt;/li&gt;&lt;li&gt;Always at least 2 developers&lt;/li&gt;&lt;li&gt;Rotate people in and out of projects&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Everything you do is marketing&lt;br /&gt;&lt;br /&gt;Open Source:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A part of their culture&lt;/li&gt;&lt;li&gt;Payback for all the open source they use&lt;/li&gt;&lt;li&gt;It Legitimizes what they do&lt;/li&gt;&lt;li&gt;Gives them crowd-sourcing support&lt;/li&gt;&lt;li&gt;They keep the quality of their open source high by using it internally before it goes out&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Why did they get into products?:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Consulting scales with people - but they don't want lots of people.&lt;/li&gt;&lt;li&gt;Products scale without large groups of people&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;They focus on solving problems that they have and products they enjoy building&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Checking under the Hood: A Guide to Rails Engines - Mike Perham&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This was interesting talk where Mike went over Rails Engines, which are basically like a plugin that can have views and controllers.&lt;br /&gt;&lt;br /&gt;Note: The real application code always wins over the engine in cases of name or file collision.  You can use this to your advantage with a view you need to change.&lt;br /&gt;&lt;br /&gt;There are no way to add migrations&lt;br /&gt;&lt;br /&gt;To avoid model name collisions use name-spacing (Foo::User instead of User).&lt;br /&gt;&lt;br /&gt;'helpers :all' will not load engine helpers&lt;br /&gt;&lt;br /&gt;Static assets need to be copied over from the engine to the app&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Dataflow: Declarative concurrency in Ruby - Larry Diehl&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dataflow is a ruby gem that handles some interesting concurrency problems in Ruby.&lt;br /&gt;&lt;br /&gt;In your model:&lt;br /&gt;&lt;br /&gt;class Foo&lt;br /&gt;declare :my_var&lt;br /&gt;def initialize&lt;br /&gt;  unify my_var, 1&lt;br /&gt;  unify my_var, 3 # kaboom&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;the second time you try to change my_var, it blows up.&lt;br /&gt;&lt;br /&gt;local do | x, y |&lt;br /&gt;Thread.new { unify x, "blah"}&lt;br /&gt;Thread.new { unify y, "argh #{x}"}&lt;br /&gt;y.should == "argh blah"&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;No mater how long the threads take a call to y will work in the above code.&lt;br /&gt;&lt;br /&gt;There is a need_later method that will go off and do it's thing.  If you try to call a method on the object returned by need_later it will either wait (if its not done) or return it (if the thread has finished).&lt;br /&gt;&lt;br /&gt;FutureQueue, may come in at some point.  With FutureQueue you can pop from it before you push to it.&lt;br /&gt;&lt;br /&gt;Larry made inspect not block for debugging purposes.&lt;/object:0x5e6b68&gt;</content><link rel="replies" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/1207716483466259026/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=1207716483466259026" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/1207716483466259026?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/1207716483466259026?v=2" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/2009/08/lone-star-ruby-conf-2009-day-one.html" title="Lone Star Ruby Conf 2009 Day One" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;C08AQ30yfip7ImA9WxNSFE4.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185.post-8009386802087981553</id><published>2009-08-27T22:43:00.004-05:00</published><updated>2009-08-27T22:57:22.396-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-27T22:57:22.396-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="testing" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile2009" /><title>Agile Conference 2009 - Day Four</title><content type="html">&lt;span style="font-weight: bold;"&gt;Agile's Too Slow: Developing a Facebook App for the Obama Campaign - Andy Slocum &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Andy worked on the Facebook application for the Obama campaign.  In two months they build a Facebook app that could assist users in encouraging their friends to register and vote.  There where only two people on the project and they came in with the common ideas of XP: continuous integration, weekly iterations, story estimates, developer testing, etc.&lt;br /&gt;&lt;br /&gt;Except that all of the above was way too heavy for the Obama campaign's pace.  They'd have an Iteration planning meeting on Monday and by the Tuesday it was out of date because so much had changed.  Also Facebook apps don't really run very well outside of Facebook so they could only write tests around code that was completely isolated from the Facebook stuff.  So they basically moved to a lean process with priorities set at the standup meeting every day.  They also ditched the idea of continuous integration as there were only two people to integrate.&lt;br /&gt;&lt;br /&gt;An interesting part of the presentation was about the lack of privacy in Facebook.  Any Facebook app can get the birth date, state of residence, and name of any user and all their friends.  So the Obama app could use existing voter registration databases to figure out if a user's friends were already registered.&lt;br /&gt;&lt;br /&gt;They deployed the application multiple times a day.  Their load testing was asking one of the stakeholders, who had over a thousand Facebook friends, to test out the new features.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Ogre and the Wimp: Cleaver Influencing Tricks - Help the Most Reluctant Teams -- Anda Abramovici&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This talk was about how to introduce agile practices to particularly stubborn developers.  Anda was a consultant on project where she had a bunch of developers who didn't want to pair or use TDD.  She conspired with an upper level manager known for her toughness to come in and play the Ogre while she played the wimp.  She would join the team and pretend to be just as unhappy and resistant to TDD and Pairing as the rest, but then the Ogre would come in and demand that the team increase it's test coverage.  Then she'd feign resistance while helping the developers respond to the 'crazy' demands of the Ogre.&lt;br /&gt;&lt;br /&gt;Later they conspired to move a bunch of equipment into Anda's workstation so she had no place to sit.  So she shared an station with another developer.  Eventually they started pairing.&lt;br /&gt;&lt;br /&gt;They also recommended using free drinks to help the wimp bond with her new team.&lt;br /&gt;&lt;br /&gt;All this seemed a little dishonest to me and has a large chance of backfiring if the wimp was ever found out as an agile advocate.  It did, however, work for them.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Slow and Brittle: Replacing End to End testing -- Arlo Belshee and James Shore&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This was a workshop where we discussed the problems of End to End testing (they tend to be, uh, slow and brittle) and possible solutions.  I had to leave to catch my flight to Austin (I'm on a plane to Lone Star Ruby Conf as I type this) before the end so I'm interested to hear what they came up with.  One of the answers was the idea of giving up on trying to test all paths in an End to End test and focusing on unit tests and an abbreviated 'smoke test' suite that is forbidden to go above 5 minutes.  There was quite a lot of passion in the room.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;OK, I'm exhausted.  Time to hit 'Publish Post' and relax for a bit as tomorrow will be my third conference in as many days.</content><link rel="replies" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/8009386802087981553/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=8009386802087981553" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/8009386802087981553?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/8009386802087981553?v=2" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/2009/08/agile-conference-2009-day-four.html" title="Agile Conference 2009 - Day Four" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A0QER347fyp7ImA9WxNSE0Q.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185.post-1985489087144762490</id><published>2009-08-26T23:25:00.000-05:00</published><updated>2009-08-27T13:55:06.007-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-27T13:55:06.007-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="lean" /><category scheme="http://www.blogger.com/atom/ns#" term="XP" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile2009" /><category scheme="http://www.blogger.com/atom/ns#" term="craftsmanship" /><category scheme="http://www.blogger.com/atom/ns#" term="Apprenticeship" /><title>Software Craftsmanship North America Conference</title><content type="html">This was the first ever &lt;a href="http://scna.softwarecraftsmanship.org"&gt;Software Craftsmanship conference&lt;/a&gt; and it was put on by my company &lt;a href="http://obtiva.com/"&gt;Obtiva&lt;/a&gt; and &lt;a href="http://www.8thlight.com/"&gt;8th Light&lt;/a&gt; (a company I have pretty strong ties to).  It was a pretty big day for the Craftsmanship movement and our little companies.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://manifesto.softwarecraftsmanship.org/"&gt;Software Craftsmanship Manifesto&lt;/a&gt; is:&lt;br /&gt;&lt;blockquote&gt;As aspiring Software Craftsmen we are raising the bar of professional software development by practicing it and helping others learn the craft. Through this work we have come to value:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Not only working software, but also well-crafted software&lt;/li&gt;&lt;li&gt;Not only responding to change, but also steadily adding value&lt;/li&gt;&lt;li&gt;Not only individuals and interactions, but also a community of professionals&lt;/li&gt;&lt;li&gt;Not only customer collaboration, but also productive partnerships&lt;/li&gt;&lt;/ul&gt;That is, in pursuit of the items on the left we have found the items on the right to be indispensable.&lt;/blockquote&gt;&lt;br /&gt;The idea is to build on the &lt;a href="http://agilemanifesto.org/"&gt;Agile Manifesto&lt;/a&gt; toward better software and the community that surrounds it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Swimming Upstream, Sprouting Legs, and Running Free -- Ken Auer&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is by far the most provoking talk I've heard in awhile.  At the beginning Ken announced that he wasn't going to be politically correct.  And as the talk went on I kept wondering what that was going to be.  Would he go after women drivers, Mexicans, president Obama...?  I kept waiting for the other shoe to drop. &lt;br /&gt;&lt;br /&gt;Ken had a fairly happy childhood where he desperately wanted to be a baseball player.  But, alas, that dream doesn't often come true.  But he was good at math so he played a lot of "&lt;a href="http://en.wikipedia.org/wiki/Strat-O-Matic"&gt;Strat-O-Matic Baseball&lt;/a&gt;" which is a game where you use the stats of baseball players.  He developed a series of algorithms so that he could beat all his friends.  This, of course, lead to a career in computers.&lt;br /&gt;&lt;br /&gt;The other theme in Ken's life is religion.  This, apparently, is 'not politically correct' part of the talk.  I gotta say that it's takes a lot of chutzpah to talk about religion at a software development conference.  I have never heard somebody say "Do you accept Jesus Christ as your personal saviour?" at any conference before, but I have now. &lt;br /&gt;&lt;br /&gt;Ken attended church all throughout childhood going there "whenever the doors were open."  But he feels that he was sort of passively religious during that time.  He didn't know much about the bible or question any of the church's practices.&lt;br /&gt;&lt;br /&gt;In Ken's software life he had his eyes opened by the Object Oriented revolution when he attended the first ever OOPSLA in 1986.  He and his company got into OO and Smalltalk very early on and produced a bunch of working software before anyone could tell them that Smalltalk wasn't for 'real' software.  It's funny how often people succeed because they didn't know it was supposed to be hard.&lt;br /&gt;&lt;br /&gt;Also, around this time, Ken started attending Bible study groups and thinking more about his work/life balance.  He spent a few years ruminating about how to affect a change and eventually came up with the idea that he would start his own company "Role Model Software."  Over the years Ken has:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Mentored a bunch of apprentices &lt;/li&gt;&lt;li&gt;Built a huge house where he lives, works, and teaches his children (he's a homeschooler)&lt;/li&gt;&lt;li&gt;Become an elder at his church&lt;/li&gt;&lt;li&gt;Created a lot of working software&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Ken seems pretty happy with the current of his life.  He's managed to combine a bunch of the formerly separate aspects of his life into one unified whole.&lt;br /&gt;&lt;br /&gt;Late in Ken's presentation he ran out of time and had to skip past a bunch of slides (I think I saw Darwin in there somewhere) and wound up with a slide that said "I don't believe we came out of the mire.  But we need to."  Which I take to mean that he doesn't believe in Evolution but that he feels that our current software situation is a bit of a mess and needs to be changed.&lt;br /&gt;&lt;br /&gt;Again, easily the most provoking conference presentation I've ever seen.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Self Eduction and the Craftsman - Michael Feathers&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Michael's talk was mostly a list of things he thought that people who were self taught or apprenticed might not have learned (because they weren't in a formal Computer Science program).&lt;br /&gt;&lt;br /&gt;Things you need to know about:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Big-O, Little-O, and Theta Notation&lt;/li&gt;&lt;li&gt;Covariance &amp;amp; Contravariance&lt;/li&gt;&lt;li&gt;Types&lt;/li&gt;&lt;li&gt;Objects are Closures&lt;/li&gt;&lt;li&gt;State Machines&lt;/li&gt;&lt;li&gt;Regular Expressions&lt;/li&gt;&lt;li&gt;Turning Machines&lt;/li&gt;&lt;li&gt;The Halting Problem - limits on verifiability&lt;/li&gt;&lt;li&gt;Worse is Better (just good enough) (less features is easier to debug)&lt;/li&gt;&lt;li&gt;Redundancy is not strength - "It's a weird industry where we are the things that introduce problems into a working system" "The same spec given to different teams tends to produce the same bugs"&lt;/li&gt;&lt;li&gt;Security on Sand ("On Trusting Trust") Security can only be so good&lt;/li&gt;&lt;li&gt;Location Transparency is a Myth &lt;/li&gt;&lt;li&gt;Objects are Clay&lt;/li&gt;&lt;/ul&gt;Books that you might not have read:&lt;br /&gt;&lt;a href="http://www.amazon.com/Structure-Interpretation-Computer-Programs-Engineering/dp/0262011530"&gt;Structure and Interpretation of Computer Programs&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Designing-Object-Systems-Object-Oriented-Modelling/dp/0132038609/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1251383688&amp;amp;sr=1-1"&gt;"Designing Object Systems" Cook and Daniels (Syntropy)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Graphs-Theory-Algorithms-K-Thulasiraman/dp/0471513563/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1251383749&amp;amp;sr=1-1"&gt;"Graphs: Theory and Algorithms" Swamy (Graph Theory)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1251383779&amp;amp;sr=1-1"&gt;"Compilers" Aho, Sethi, Ullman (The Dragon Book) &lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Discrete-Mathematics-Combinatorics-James-Anderson/dp/0130457914/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1251383828&amp;amp;sr=1-1"&gt;Discrete Mathematics - Anderson&lt;/a&gt; &lt;br /&gt;&lt;a href="http://www.amazon.com/Introducing-Theory-Computation-Wayne-Goddard/dp/0763741256/ref=sr_1_3?ie=UTF8&amp;amp;s=books&amp;amp;qid=1251383860&amp;amp;sr=1-3"&gt;Theory of computation - Michael Sipser&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Observations from an Old Warhorse - Fred George&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This talk, by the highly engaging Fred George, was a series of completely unrelated observations from a guy who's done a lot of Agile and non-Agile projects.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;What is considered a big application?&lt;/span&gt;&lt;br /&gt;1970 - 10K Lines&lt;br /&gt;1980 - 100K&lt;br /&gt;1990 - 1M&lt;br /&gt;2000 - 10M&lt;br /&gt;2010 - 100M&lt;br /&gt;&lt;br /&gt;But effort seems to rise and fall to build big applications because we keep getting advances in writing software and all advances have this in common:  Simplify the problem.  Get rid of duplication.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Discard to Make Languages more Robust:&lt;/span&gt;&lt;br /&gt;goto&lt;br /&gt;Tektronics School of Objects: 'if' is suspicious 'else' is almost always wrong.&lt;br /&gt;&lt;br /&gt;I've heard this 'If/Else' claim before but without any examples, it's hard to understand how to purge my code of all the 'Else's.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;(Rails - TDD) == Productive VB&lt;/span&gt;&lt;br /&gt;If application is less than a page of code would you..&lt;br /&gt;- write tests?&lt;br /&gt;- pair?&lt;br /&gt;&lt;br /&gt;Fred doesn't write test or pair on micro projects.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Feedback =&gt; Quality&lt;/span&gt;&lt;br /&gt;1. Frequent releases&lt;br /&gt;2. iterations&lt;br /&gt;3. Stand ups&lt;br /&gt;4. Tasking Cycle 1-2 hours (all the way through a story in 1-2 hours?  This guy is big into Lean.)&lt;br /&gt;5. Pair Programming&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Lean: Identify and Eliminate Waste&lt;/span&gt;&lt;br /&gt;What are you making?&lt;br /&gt;How do you make it faster&lt;br /&gt;&lt;br /&gt;Story life cycle.&lt;br /&gt;&lt;a href="http://epistemologic.com/2007/10/02/lean-software-development-how-to-find-bottlenecks-metrics-that-matter/"&gt;Finger charts&lt;/a&gt; are useful.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Iterations are dead&lt;/span&gt;&lt;br /&gt;From scrum's couple of months&lt;br /&gt;to xp's 2-3 weeks&lt;br /&gt;to ThoughtWorks 1 week&lt;br /&gt;to Daily (part of the stand up)&lt;br /&gt;&lt;br /&gt;Fred uses a Kanban board to track stories in progress.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Developers pick up the most important thing next. If management wants to have a meeting -- let them.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Continuous Deployment&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Holy Grail of Software Development:  Short lead times&lt;br /&gt;&lt;br /&gt;Right now on Fred's team:  Over 50% of stories are deployed within 2 days of the story surfacing.  Which reduces the need for branching.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Grand Unified Theory of Software Design -- Jim Weirich&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This was an interesting attempt to find a unifying principle underlying all software principles (Don't Repeat Yourself, Single Responsibility, etc.).  Sort of like how physicists are looking for a single underlying law to the four fundamental forces.&lt;br /&gt;&lt;br /&gt;Jim thinks that using 'connascence' he can derive many of the principles.  Connascence is defined by &lt;a href="http://www.thefreedictionary.com/"&gt;thefreedictionary.com&lt;/a&gt; as:&lt;br /&gt;Con`nas´cence&lt;br /&gt;n.&lt;br /&gt;  1.  The common birth of two or more at the same tome; production of two or more together.&lt;br /&gt;  2.  That which is born or produced with another.&lt;br /&gt;  3.  The act of growing together.&lt;br /&gt;&lt;br /&gt;For software connascence is when changing one piece of software requires a corresponding change in another place.&lt;br /&gt;&lt;br /&gt;As the distance between the software increases we want to use weaker forms of Connascence&lt;br /&gt;&lt;br /&gt;A weak form of connascence is connascence of name&lt;br /&gt;def foo(bar)&lt;br /&gt;  bar + 1&lt;br /&gt;end&lt;br /&gt;if I change the name of 'bar,' I have to change the next line too.  If I change the name of the function 'foo,' I'll have to change all the places that call the 'foo.'  So, even within connascence of name there are levels.&lt;br /&gt;&lt;br /&gt;Connascence of position is when order matters (worse than connascence of name):&lt;br /&gt;def foo(a,b,c,d,e)&lt;br /&gt;....&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;People calling this method have to remember the order of the arguments.  A common solution in Ruby is to use a hash to move to a lower form of connascence (connascence of name):&lt;br /&gt;&lt;br /&gt;def foo(options)&lt;br /&gt;...&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;so you can call the method like so:&lt;br /&gt;foo(:position =&gt; 54, :height =&gt; 10, :width =&gt; 20, :depth =&gt; 3, :solid =&gt; true)&lt;br /&gt;&lt;br /&gt;A common connascence of meaning problem is magic numbers.  If many places have to know that -999 means a bad response this is connascence of meaning.&lt;br /&gt;&lt;br /&gt;Connascence of timing is race conditions&lt;br /&gt;&lt;br /&gt;Connascence of Execution is when the order of the steps matters.&lt;br /&gt;&lt;br /&gt;Unfortunately I wasn't able to get down all his examples of how Connascence is the common link for all software problems (and I think this is a work in progress) so hopefully Jim will write this up in more detail some day.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What if Bacteria Designed Computers? -- Ward Cunningham&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ward Cunningham is legend in Agile, XP, and computing in general so he can pretty much talk about what he wants and everyone will applaud at the end.  Today he was talking about buying tiny IC chips, wiring them together, and getting them to communicate like cells.  By doing this he was able to build completely new and seemingly complicated devices (such as a flag waving robot) simply by swapping some parts around.  Was this a powerful metaphor for having a reusable tool set or just a guy talking about geeky stuff?  He never came out and made it explicit.  I enjoyed the talk none the less.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Business of Craftsmanship - Kevin Taylor, Micah Martin, and Carl Erickson&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The owners of three craftsmanship oriented shops got together and took questions from the audience.  Carl Erickson founded Atomic Object in 2001 in Grand Rapids, MI.  Kevin Taylor started Obtiva in 2005 and Micah Martin created 8th Light in 2006. &lt;br /&gt;&lt;br /&gt;This discussion rather quickly became about how the Apprenticeship programs work at each company.  At Atomic object it seems to be a summer thing for college students and it continues from summer to summer as long as it's working out.  If it goes well, it leads to a hire.  Obtiva brings in apprentices and the apprenticeship may continue for a year or two before they are moved out of the apprenticeship.  Apprentices can be moved into billable work whenever they are ready which could be a matter of weeks or months but no more than 3 months (it's a paid position so the company can only afford to carry someone for so long).  At 8th Light apprentices are assigned to one of the higher level consultants and are non-billable for 3 months.  After a series of challenges they are either given another 3 months, promoted, or let go. &lt;br /&gt;&lt;br /&gt;All three companies have experimented with different types of overseeing the apprentices and have generally found that someone needs to 'own' the mentor-ship of an apprentice otherwise, as Carl Erickson said, "You'd see two apprentices off in a corner working together" and that didn't work.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;At that point I had to run off and give my "What's the Right Level of Testing?" talk at Agile 2009.  Since the two conferences were held a city block apart, the commute wasn't too hard.  The talk went pretty well, there were about 40 attendees but they mostly seemed kinda sleepy.  4 or 5 people were pretty engaged though and seemed to enjoy it.  90 minute presentations are the rule here at Agile so when you have a 45 minute talk two of them get squished together into a 90 minute slot with no time for transition.  So to attend my talk someone would have to see the 45 minute talk before me and hang around, leave another talk mid-stream, or sprint from one 45 minute talk (which could be in another tower) to mine in zero seconds.  So with these rationalizations firmly in place, I feel good about the turnout and how it was received.&lt;br /&gt;&lt;br /&gt;Tomorrow I'll be able to see some of talks but I'll have to leave early to fly to Austin to present at Lone Star Ruby Conf.</content><link rel="replies" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/1985489087144762490/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=1985489087144762490" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/1985489087144762490?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/1985489087144762490?v=2" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/2009/08/software-craftsmanship-north-america.html" title="Software Craftsmanship North America Conference" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;CkYDQ3k6fCp7ImA9WxNSEkg.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185.post-6682006200524762896</id><published>2009-08-25T20:14:00.002-05:00</published><updated>2009-08-25T20:29:32.714-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-25T20:29:32.714-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Agile2009" /><title>Agile Conference 2009 - Day Two</title><content type="html">&lt;span style="font-weight: bold;"&gt;"I Come to Bury Agile, Not to Praise It" -- Keynote by Dr. Alistair Cockburn&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So this is one of those classic keynotes where the title has little to do with the content of the talk.  I did enjoy the keynote, very much so, but only the first 10 minutes were devoted to Agile's 'Death.'&lt;br /&gt;&lt;br /&gt;Alistair came out following a bagpiper playing "Amazing Grace" -- like a funeral.  I gotta admit that it was a pretty nice entrance.  Then he gave a modified version of "I came to bury Caesar, not to praise him" speech from Shakespeare's Julius Caesar (full text here: &lt;a href="http://alistair.cockburn.us/I+come+to+bury+Agile%2c+not+to+praise+it"&gt;http://alistair.cockburn.us/I+come+to+bury+Agile%2c+not+to+praise+it&lt;/a&gt;).  His point was that Agile started out as something for small, co-located, groups and was pretty rare.  It is now very prominent and used in quite large organizations.  So it has gone through a bunch of changes despite the fact that we call it by the same name.  Not quite a 'death' but "Isn't it weird how we still call Agile the same thing even though it's changed a lot since 2000?" isn't a catchy title for a keynote.&lt;br /&gt;&lt;br /&gt;Then he spent the next 70 minutes talking about the 4 pillars of Agile:&lt;br /&gt;1. The finite co-operative game&lt;br /&gt;Goals of the game:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Deliver the software&lt;/li&gt;&lt;li&gt;Setup the next game&lt;/li&gt;&lt;/ul&gt;Moves you can make:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;  Invent &lt;/li&gt;&lt;li&gt;  Decide&lt;/li&gt;&lt;li&gt;  Communicate&lt;/li&gt;&lt;/ul&gt;The situations almost never repeat&lt;br /&gt;&lt;br /&gt;2. &lt;a href="http://manifesto.softwarecraftsmanship.org/"&gt;Craft&lt;/a&gt;&lt;br /&gt;Pay attention to skills and to the medium&lt;br /&gt;&lt;br /&gt;People learn in 3 stages:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Shu: learn a technique&lt;/li&gt;&lt;li&gt;Ha: Collect techniques&lt;/li&gt;&lt;li&gt;Ri: Invent/blend techniques&lt;/li&gt;&lt;/ul&gt;Beginners tend to get stuck in the 'Shu' box.  Alistair claims he spends most of his time trying to kick people out of the 'Shu box.'&lt;br /&gt;&lt;br /&gt;3. Lean processes&lt;br /&gt;Aim for continuous flow&lt;br /&gt;Watch your queues (where the bottlenecks are)&lt;br /&gt;&lt;br /&gt;4. Knowledge Acquisition&lt;br /&gt;If you integrate all the time (or release) you can have knowledge lead cost (spending on the project) then you can trim the tail of the project to deliver on time or extend to get a little bit better value.  If you integrate late the options are:  Deliver late or work overtime.&lt;br /&gt;&lt;br /&gt;At one point he claimed that there are studies that show how expensive distance is to a company.  12 people not pairing costs 100,000 per year and goes up to $300,000 if they are on different floors.  Taking a look at his slides, I think this fact was taken from the book "&lt;a href="http://mitpress.mit.edu/catalog/item/default.asp?ttype=2&amp;amp;tid=6100"&gt;Managing the Flow of Technology&lt;/a&gt;," but I'm not sure. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://alistair.cockburn.us/Keynote+at+Agile2009.pps"&gt;Link to the slides&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Idea Factory - Brian Marick, David Carlton&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This was an attempt to relate 3 ideas of how scientific ideas are adopted to Agile.&lt;br /&gt;&lt;br /&gt;The "Trading Zones" idea is from a book by Peter Galison titled "Image and Logic: A Material Culture of Microphysics."  The idea is to setup local areas where separate groups working on the same project, but do drastically different things, can get together and possibly form a common language.&lt;br /&gt;&lt;br /&gt;Packages are a way of, well, packaging your ideas so that they are easy to assimilate and adopt.&lt;br /&gt;Example: JUnit made it easy to do TDD.  (That's kind of what I'm trying to do with &lt;a href="http://metric-fu.rubyforge.org/"&gt;metric_fu&lt;/a&gt; and code metrics).&lt;br /&gt;&lt;br /&gt;Actor/Network theory is a study of "how does a fact become a fact?" A successful idea will, over time, go from:&lt;br /&gt;Something that is cited conditional in publications.  Ex. "Watson and Crick propose that DNA has a double helix structure"&lt;br /&gt;to&lt;br /&gt;Being cited without question. Ex. "Watson and Crick proved that DNA has a double helix structure"&lt;br /&gt;to&lt;br /&gt;Being assumed. "Given the double helix nature of DNA..."&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;XP: My Greatest Misses 2000-2009 - J. B. Rainsberger&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This was another interesting talk by Rainsberger.  He discussed his greatest failures as an XP/Agile coach/trainer.  Almost all of his problems were caused by his failure to consider the people part of software.  His ideas, processes, and plans may have been spot on in his own mind but they were often interpreted by others as challenges or insults or worse.&lt;br /&gt;&lt;br /&gt;The breakthrough for him was when he finally started reading the works of Gerald M. Weinberg and Virginia Satir and learned about the human side of consulting.  When J.B. speaks he thinks about how what he said will be interpreted.  And when he hears something jarring or offensive he tries to figure out what an alternate and generous interpretation might be for the comment. &lt;br /&gt;&lt;br /&gt;He wrote up an article about miscommunication entitled: &lt;a href="http://www.infoq.com/articles/satir-communication-model-teams"&gt;Don't Let Miscommunication Spiral Out Of Control&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Improving Obama Campaign Software by Learning from Users -- Paul Baker, Billy Belchev, and Zack Exley&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Every 4 years the election software budget goes from 0 to 800 million.  Which can be hard on the software.  Paul Baker and Billy Belchev were hired to evaluate a bunch of software used by Obama volunteers during the campaign to track canvassing and phone banking efforts.&lt;br /&gt;&lt;br /&gt;They did this in 3 ways:&lt;br /&gt;1. Contextual inquires (interviews)&lt;br /&gt;1-5 users per task&lt;br /&gt;30-45 min per interview&lt;br /&gt;&lt;br /&gt;2. Lightweight usability testing&lt;br /&gt;1-3 user per task&lt;br /&gt;15-25 min per session&lt;br /&gt;&lt;br /&gt;3. Collecting artifacts&lt;br /&gt;Taking pictures and video of the environment, people, and software interacting (or, in some cases, failing to interact)&lt;br /&gt;&lt;br /&gt;Basically they went out into the field and talked to people as they used the software.  Amazing how this simple strategy quickly (they spent 9 days in the field) finds huge problems with the software.&lt;br /&gt;&lt;br /&gt;Example quote: "The way I would really do it?  I'd write her name down and call her later."  Instead of use the cumbersome tracking software.&lt;br /&gt;&lt;br /&gt;Lots of offices used Google Docs to store information because an overly restrictive permission system wouldn't let key members see data and to store specific fields the software couldn't hold.&lt;br /&gt;&lt;br /&gt;All the sticky notes on the wall, computer, and stuff on the whiteboards will tell you what the software isn't doing (or doing well)&lt;br /&gt;&lt;br /&gt;They used a lot of video clips with people talking about how they worked around the bad parts of the software.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pretty good day, all in all.  Tomorrow I'll be attending the &lt;a href="http://scna.softwarecraftsmanship.org/"&gt;Software Craftsmanship Conference &lt;/a&gt;sponsored by my own company Obitva.  Then I have rush back to Agile to give my talk "&lt;a href="http://www.agile2009.org/node/1394"&gt;What's the Right Level of Testing?&lt;/a&gt;" at 4:45.  Seeing the caliber of talks here I'm pretty proud and excited to be a presenter.</content><link rel="replies" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/6682006200524762896/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=6682006200524762896" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/6682006200524762896?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/6682006200524762896?v=2" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/2009/08/agile-conference-2009-day-two.html" title="Agile Conference 2009 - Day Two" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DU8MRHs6eCp7ImA9WxNSEUs.&quot;"><id>tag:blogger.com,1999:blog-1042801964488488185.post-1953930824949091215</id><published>2009-08-24T21:29:00.003-05:00</published><updated>2009-08-24T21:38:05.510-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-24T21:38:05.510-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="lean" /><category scheme="http://www.blogger.com/atom/ns#" term="testing" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile2009" /><title>Agile Conference 2009 - Day One</title><content type="html">It's been 5 years since I attended the granddaddy of Agile conferences and I have to say that the first day was damn good.  My notes my be a little rough, so I apologize in advance, but if I don't type and post them on the day I pretty much never will.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Workflow is Orthogonal to Schedule -- Mary Poppendieck&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Mary started out with an example of on time development from 1929:  The Empire State Building.&lt;br /&gt;&lt;br /&gt;In September of 1929 they started cleaning the constructions site of previous buildings and by May 1st of 1931 the building was finished and open to the public.  It was exactly on time and 18% under budget.&lt;br /&gt;&lt;br /&gt;Cash flow was king:  Every day of construction was another day before they could start getting their money back.&lt;br /&gt;&lt;br /&gt;How did they do it?  They focused on flow.  They thought of the project as "A marching band going through the building and out the top."&lt;br /&gt;&lt;br /&gt;Key success factors:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The owner, architect, and builder got along well and worked as a team.&lt;/li&gt;&lt;li&gt;They had a deeply experienced building team.&lt;/li&gt;&lt;li&gt;There was a lot of focus placed on the key constraint: Material Flow.  500 trucks a day but only arrived with materials for the building, but they only had a few days of storage on site so everything that arrived had to go up and onto the building.&lt;/li&gt;&lt;li&gt;Decoupled the work:  The systems (windows, floors interiors) were designed to be independent&lt;/li&gt;&lt;li&gt;Cash flow thinking:  Every day of delay coat $10,00 ($120,000 in today's dollars)&lt;/li&gt;&lt;li&gt;The schedule was not derived from the design.  The design was put in place to meet the constraints of the schedule.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Mary used this as a shining example of Lean development in the pre-computer era.  So how do you run a software project with the highest degree of efficiency possible?&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Establish high level system goals (what do we really need).&lt;/li&gt;&lt;li&gt;Involve those who understand the details early in the process.&lt;/li&gt;&lt;li&gt;Use teamwork based on trust.  Contract thinking increases costs 30-50%.&lt;/li&gt;&lt;li&gt;Reduce complexity wise wise decoupling&lt;/li&gt;&lt;li&gt;Understand and manage the constraint&lt;/li&gt;&lt;li&gt;Features can be big but dev stories must be small (1-3 days at most)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;At this point she compared Kanban to Iterations.  This article describes Kanbab better than I could do it justice:  &lt;a href="http://www.agileproductdesign.com/blog/2009/kanban_over_simplified.html"&gt;http://www.agileproductdesign.com/blog/2009/kanban_over_simplified.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Schedules (are way different from flow)&lt;br /&gt;1. If you have a level work flow you have both predictability and control without a schedule&lt;br /&gt;2  Schedules based on experience are reliable&lt;br /&gt;3. Schedules summed up from task breakdown are not.&lt;br /&gt; - without experience, task break-down/sum up schedules are a hypothesis&lt;br /&gt; - without slack, task breakdown/sum up schedules are deterministic and do not allow for normal variation&lt;br /&gt; - attempts to remove normal variation from a system cause oscillation&lt;br /&gt;&lt;br /&gt;Asking for feedback means you'll get it.  You can only commit to 50-70% of what you want because you will get feedback that takes over the rest of the time.&lt;br /&gt;&lt;br /&gt;Small batch size means you can get 80-90% utilization -- an iron law of math.  Utilization above this range causes thrashing and wastes lots more time than it gives you.&lt;br /&gt;&lt;br /&gt;Optimize Throughput, not utilization&lt;br /&gt;&lt;br /&gt;She covered a lot of interesting stuff in her talk and I feel like I've not really captured the flow and force of her arguments.  Mary is one of the best Agile speakers around and I recommend taking any opportunity to see her talk.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What Do Agile Coaches Do? -- Liz Sedley and Rachel Davies&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This was a tutorial were the audience broke into groups and discussed Agile coaching.  The presenters posited that there are 3 types of coaching: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Consultative - Trying to change process&lt;/li&gt;&lt;li&gt;Motivational - Encouragement&lt;/li&gt;&lt;li&gt;Education - Helping understanding&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;We looked at some common problems that Agile coaches face and discussed solutions.  I thought the conversations I had were pretty interesting but I would have liked to hear more from Liz Sedley and Rachel Davies about there experiences in Agile coaching as they had just written a book on the subject.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Integration Tests are a Scam -- J.B. Rainsberger&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This was a pretty awesome talk and I totally owe my attendance to Colin Harris, as he recommended a &lt;a href="http://www.jbrains.ca/integration_tests_are_a_scam"&gt;blog post&lt;/a&gt; to me about just this topic by just this author.&lt;br /&gt;&lt;br /&gt;J.B. defines integrations tests as any tests that test more than one class. &lt;br /&gt;&lt;br /&gt;Why is this bad?  Well he spent 90 minutes making a very solid case, but let me try to sum up:&lt;br /&gt;&lt;br /&gt;First he started off by saying that he's talking about developer tests and not customer tests.  In other words, he cares about tests you run before you check in not huge regression suites used by Q.A.&lt;br /&gt;&lt;br /&gt;1. Integration tests are slow.  Slow tests will eventually become ignored tests.&lt;br /&gt;&lt;br /&gt;2. Testing a group of, say, 3 interacting objects creates a ridiculous amount of tests you need to write.  If there are 5 paths through the main object under test, but the methods it uses in another object have 3 and 10 paths respectively then you should write 3 X 5 X 10 = 150 tests to exhaustively try out all the paths.  However, if you test each object in isolation then you need to write 3 + 5 + 10 = 18 tests to get the same coverage of paths.  You are far more likely to write 18 tests, then 150.&lt;br /&gt;&lt;br /&gt;The way J.B. does this is to create interfaces for all his objects that have complex behavior (He likes &lt;a href="http://en.wikipedia.org/wiki/Domain-driven_design"&gt;Domain Driven Design&lt;/a&gt; so he tends to refer to these objects as 'Services') and then use 'Doubles' (mocks and stubs) to eliminate the need to use the real objects.  Now when you use doubles, you need to make sure that the thing you're mocking on one end really does return what you think it does on the other.&lt;br /&gt;&lt;br /&gt;When I asked him about having setups with lots and lots of mocks he claimed that if you're having trouble mocking things in your tests you probably have problems with your models.  Sigh.  He's probably right.  For instance, if you need to have a mock that returns a mock which returns a mock you probably have an object that is breaking your layered design.&lt;br /&gt;&lt;br /&gt;Of course when I test in Rails I have to do this all the time.  Part of the reason is that good design is way hard and I'm still learning.  But the other is that Rails has ActiveRecord which is an entity that is responsible for it's own persistence and that is something that J.B. and a lot of people I respect look down upon. &lt;br /&gt;&lt;br /&gt;Rainsberger gave me a lot of things to think about which is pretty much the highest praise I can give a session.</content><link rel="replies" type="application/atom+xml" href="http://jakescruggs.blogspot.com/feeds/1953930824949091215/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1042801964488488185&amp;postID=1953930824949091215" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/1953930824949091215?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1042801964488488185/posts/default/1953930824949091215?v=2" /><link rel="alternate" type="text/html" href="http://jakescruggs.blogspot.com/2009/08/agile-conference-2009-day-one.html" title="Agile Conference 2009 - Day One" /><author><name>Jake Scruggs</name><uri>http://www.blogger.com/profile/16274380203959781950</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://farm1.static.flickr.com/200/441258345_b0379aaf00_m.jpg" /></author><thr:total>1</thr:total></entry></feed>
