<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Jordan Brough</title>
    <link>http://jordan.broughs.net/</link>
    <pubDate>Fri, 20 Jan 2012 21:16:48 GMT</pubDate>
    <description>Jordan Brough</description>
    <item>
      <title>Running rspec tests in Sublime Text 2</title>
      <link>http://jordan.broughs.net/archives/2012/01/running-rspec-tests-in-sublime-text-2</link>
      <description>&lt;p&gt;To be able to run spec tests from within Sublime Text 2:&lt;/p&gt;

&lt;p&gt;Menu choice: Tools &gt; Build System &gt; New Build System...&lt;/p&gt;

&lt;p&gt;Then enter:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    {
      &quot;cmd&quot;: [&quot;bundle&quot;, &quot;exec&quot;, &quot;rspec&quot;, &quot;$file&quot;],
      &quot;working_dir&quot;: &quot;${project_path:${folder}}&quot;,
      &quot;file_regex&quot;: &quot;^(...*?):([0-9]*):?([0-9]*)&quot;,
      &quot;selector&quot;: &quot;source.ruby&quot;
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Thanks to &lt;a href=&quot;http://wesbos.com/sublime-text-build-scripts/&quot;&gt;http://wesbos.com/sublime-text-build-scripts/&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 20 Jan 2012 21:16:48 GMT</pubDate>
      <guid>http://jordan.broughs.net/archives/2012/01/running-rspec-tests-in-sublime-text-2</guid>
      <author>Jordan</author>
    </item>
    <item>
      <title>USB Safety</title>
      <link>http://jordan.broughs.net/archives/2012/01/usb-safety</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://plus.google.com/u/0/102786751626732213960/posts/QMfx8a4nxZf&quot;&gt;&lt;img src=&quot;http://files.jordan.brough.net/blog/life-is-too-short-to-remove-usb-safely.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hilarious enough to get me to post on my blog. :)&lt;/p&gt;</description>
      <pubDate>Fri, 20 Jan 2012 20:42:03 GMT</pubDate>
      <guid>http://jordan.broughs.net/archives/2012/01/usb-safety</guid>
      <author>Jordan</author>
    </item>
    <item>
      <title>Safety Check</title>
      <link>http://jordan.broughs.net/archives/2010/11/safety-check</link>
      <description>&lt;p&gt;&lt;img style=&quot;height: 300px&quot; src=&quot;/images/days-since-drop-production.png&quot;&gt;&lt;/p&gt;

&lt;p&gt;
Funny &lt;a href=&quot;https://github.com/blog/744-today-s-outage#comment-9179&quot;&gt;comment from notch8&lt;/a&gt; following Github's production database &lt;a href=&quot;https://github.com/blog/744-today-s-outage&quot;&gt;slip-up&lt;/a&gt;.
&lt;/p&gt;</description>
      <pubDate>Thu, 18 Nov 2010 16:17:55 GMT</pubDate>
      <guid>http://jordan.broughs.net/archives/2010/11/safety-check</guid>
      <author>Jordan</author>
    </item>
    <item>
      <title>Installing PostgreSQL for use in Rails testing on Mac OS X Snow Leopard</title>
      <link>http://jordan.broughs.net/archives/2010/10/installing-postgresql-for-use-in-rails-testing-on-mac-os-x-snow-leopard</link>
      <description>&lt;p&gt;These are instructions for setting up 64-bit postgres on Mac OS X 10.6, Snow Leopard using MacPorts.  My purpose was to be able to run Rails' tests when creating patches for ActiveRecord.&lt;/p&gt;

&lt;p&gt;This is a pure Snow Leopard install (not upgraded from 10.5 Leopard).  There may be some complications if you upgraded.  Good luck. ;)&lt;/p&gt;

&lt;h4&gt;Install with macports:&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;sudo port install postgresql84 postgresql84-server
&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;While that's happening, update PATH in the appropriate file&lt;/h4&gt;

&lt;p&gt;(mine is &lt;code&gt;~/.bash_login&lt;/code&gt;, yours may be &lt;code&gt;~/.profile&lt;/code&gt;, &lt;code&gt;~/.bash_profile&lt;/code&gt;, or something else)&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(in the correct file)
export PATH=&quot;/opt/local/lib/postgresql84/bin:$PATH&quot;
&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Follow the instructions that 'port install' printed out:&lt;/h4&gt;

&lt;p&gt;&quot;To create a database instance, after install do&quot;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo mkdir -p /opt/local/var/db/postgresql84/defaultdb  
sudo chown postgres:postgres /opt/local/var/db/postgresql84/defaultdb  
sudo su postgres -c '/opt/local/lib/postgresql84/bin/initdb -D  /opt/local/var/db/postgresql84/defaultdb'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&quot;Execute the following command to start it, and to cause it to launch at startup:&quot;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo port load postgresql84-server
&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Create a postgres superuser for your username:&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;sudo -u postgres createuser your-username-here
Shall the new role be a superuser? (y/n) y
&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Install the ruby gem:&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;sudo gem install pg
&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Set up the rails activerecord test db:&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;cd your-rails-checkout-dir/activerecord
rake postgresql:build_databases
&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Verify test passage:&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;rake test_postgresql
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It works!  Hopefully. :)&lt;/p&gt;

&lt;h4&gt;Some possibly helpful references&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://flux88.com/blog/installing-postgresql-for-rails-on-mac-os-x/&quot;&gt;general flow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://railsonpostgresql.com/2009/09/04/rails-postgresql-and-database-drivers&quot;&gt;know which postgres gem to use&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.programmanstalt.de/articles/rails-postgres-snow-leopard-and-64bit-a-word-of-warning/&quot;&gt;possibly relevant 64-bit info&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://nachbar.name/blog/2008/11/28/rails-and-postgresql-on-ubuntu-hardy-804-lts/&quot;&gt;create a pg superuser for your username&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <pubDate>Fri, 29 Oct 2010 21:13:11 GMT</pubDate>
      <guid>http://jordan.broughs.net/archives/2010/10/installing-postgresql-for-use-in-rails-testing-on-mac-os-x-snow-leopard</guid>
      <author>Jordan</author>
    </item>
    <item>
      <title>Easy PDF Generation on Heroku</title>
      <link>http://jordan.broughs.net/archives/2010/05/easy-pdf-generation-on-heroku</link>
      <description>&lt;p&gt;Discovering the sleekness of &lt;a href=&quot;http://code.google.com/p/wkhtmltopdf/&quot; title=&quot;wkhtmltopdf&quot;&gt;wkhtmltopdf&lt;/a&gt; + &lt;a href=&quot;http://github.com/mileszs/wicked_pdf&quot;&gt;wicked_pdf&lt;/a&gt; and recalling old wounds incurred in past PDF generation coding made me smile so much I just had to make a sample app out of it.  What better way to do so than a plug-and-play Heroku app?&lt;/p&gt;

&lt;p&gt;Voil&#225; &lt;a href=&quot;http://github.com/jordan-brough/heroku-pdf/&quot;&gt;heroku-pdf&lt;/a&gt;.  &lt;a href=&quot;http://heroku-pdf.heroku.com/&quot;&gt;Working example&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Fri, 28 May 2010 23:03:15 GMT</pubDate>
      <guid>http://jordan.broughs.net/archives/2010/05/easy-pdf-generation-on-heroku</guid>
      <author>Jordan</author>
    </item>
    <item>
      <title>Animoto's 5-word acceptance speech</title>
      <link>http://jordan.broughs.net/archives/2009/06/animotos-5-word-acceptance-speech</link>
      <description>&lt;p&gt;Presenting our CFO:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=oyy19j2XTo8&quot;&gt;Animoto's Webby acceptance speech&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Surely this is the greatest company on earth :)&lt;/p&gt;</description>
      <pubDate>Tue, 09 Jun 2009 16:26:52 GMT</pubDate>
      <guid>http://jordan.broughs.net/archives/2009/06/animotos-5-word-acceptance-speech</guid>
      <author>Jordan</author>
    </item>
    <item>
      <title>Animoto highlights the Webbys</title>
      <link>http://jordan.broughs.net/archives/2009/06/animoto-highlights-the-webbys</link>
      <description>&lt;p&gt;Animoto was asked to create a highlight clip for the Webby's (which we also got to accept an award from) --&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://biz.animoto.com/webbys.html&quot;&gt;Highlight Reel 2009&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 09 Jun 2009 16:25:03 GMT</pubDate>
      <guid>http://jordan.broughs.net/archives/2009/06/animoto-highlights-the-webbys</guid>
      <author>Jordan</author>
    </item>
    <item>
      <title>Animoto wins a Webby</title>
      <link>http://jordan.broughs.net/archives/2009/05/animoto-wins-a-webby</link>
      <description>&lt;p&gt;The awesome team here at &lt;a href=&quot;http://animoto.com&quot;&gt;Animoto&lt;/a&gt; has taken home an 'oscar of the internet' in this year's Webby Awards in the &lt;a href=&quot;http://www.webbyawards.com/webbys/current.php?season=13#Services%20&amp;amp;%20Applications&quot;&gt;Services &amp;amp; Applications&lt;/a&gt; category.  Go Animoto!&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/webby-win.png' style='width: 400px; border: 2px solid black; padding: 2px; background-color: #aaa;' /&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 05 May 2009 13:10:39 GMT</pubDate>
      <guid>http://jordan.broughs.net/archives/2009/05/animoto-wins-a-webby</guid>
      <author>Jordan</author>
    </item>
    <item>
      <title>Slow Ruby on Rails tests fixed!</title>
      <link>http://jordan.broughs.net/archives/2009/04/slow-ruby-on-rails-tests-fixed</link>
      <description>&lt;p&gt;I can't thank &lt;a href=&quot;http://bjhess.com/blog/&quot;&gt;Barry Hess&lt;/a&gt; and &lt;a href=&quot;http://blog.andischacke.com/&quot;&gt;Andi Schacke&lt;/a&gt; enough for writing and commenting on &lt;a href=&quot;http://bjhess.com/blog/2008/07/15/fixing-slow-rake-on-leopard/&quot;&gt;this post&lt;/a&gt; and saving me from all the darkness and despair ;) I've experienced over the past few months as my Rails test times plummetted on this shiny new MacBook Pro.  I recompiled as per Andi's comment and my times are now about a fourth what they were.  Thank you both.&lt;/p&gt;

&lt;p&gt;Revised &lt;a href=&quot;http://hivelogic.com/articles/view/ruby-rails-leopard&quot;&gt;Hivelogic&lt;/a&gt; instructions:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;curl -O ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p72.tar.gz
tar xzvf ruby-1.8.7-p72.tar.gz
cd ruby-1.8.7-p72
./configure
make
sudo make install
cd ..
&lt;/code&gt;&lt;/pre&gt;</description>
      <pubDate>Thu, 16 Apr 2009 05:41:16 GMT</pubDate>
      <guid>http://jordan.broughs.net/archives/2009/04/slow-ruby-on-rails-tests-fixed</guid>
      <author>Jordan</author>
    </item>
    <item>
      <title>MWRC: Jeremy McAnally - Machine Learning</title>
      <link>http://jordan.broughs.net/archives/2009/03/mwrc-jeremy-mcanally-machine-learning</link>
      <description>&lt;h1&gt;Jeremy McAnally - Machine Learning&lt;/h1&gt;

&lt;p&gt;&lt;img src='http://mtnwestrubyconf.org/2009/images/mwrc-logo.png' style='width: 150px; height: 94.5px;' /&gt; &lt;/p&gt;

&lt;p&gt;Works for entp. His latest app: &lt;a href=&quot;http://tweekapp.com/&quot;&gt;tweekapp&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;My Summary&lt;/h2&gt;

&lt;p&gt;Jeremy was out to convert everyone to doing DSLs the 'right way'.  Some salient points were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the point of a DSL ought to be to make the DSL easier to use for the &lt;em&gt;experts&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;'external dsls' (i.e., you make up your own language) can be great for simple project, like config-writing code&lt;/li&gt;
&lt;li&gt;'internal dsls' (e.g., ruby-code-dsls) get a lot of stuff for free (loop structures, etc)&lt;/li&gt;
&lt;li&gt;dsl composition (using more than one dsl at a time) can cause namespace issues (he didn't really offer much in the way of solutions here as far as I can remember)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;DSLs&lt;/h2&gt;

&lt;p&gt;Used by experts, for specific problems.&lt;/p&gt;

&lt;h3&gt;Domain&lt;/h3&gt;

&lt;p&gt;Different problems have different domains, and they each have their own language.&lt;/p&gt;

&lt;h3&gt;Specific&lt;/h3&gt;

&lt;p&gt;DSLs that are very generic or look a lot like english don't make sense to him.  DSLs are supposed to make the brain-to-code jump much smaller.  Also, why waste the keystrokes?&lt;/p&gt;

&lt;h3&gt;External DSLs&lt;/h3&gt;

&lt;p&gt;These are DSLs that don't use an existing language (e.g. ruby).  Sounds like he doesn't like them as much in general, though there are specific cases where the language structure is simple enough that it makes sense (e.g. &lt;a href=&quot;http://reductivelabs.com/products/puppet/&quot;&gt;puppet&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;Internal DSLs&lt;/h3&gt;

&lt;p&gt;Implemented in an existing language (e.g. ruby).  Loops &amp;amp; basic things like that are baked-in and already understood by end-users.  External DSLs have to go to a lot of work to create these structures &amp;amp; etc.  When to use?  Look at the possible complexity of your code, look at what your 'experts' will use.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rails Templates (written by him).&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ambition.rubyforge.org/&quot;&gt;Ambition&lt;/a&gt; - 'Take the suck out of SQL'&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://github.com/jeremymcanally/foundry/tree/master&quot;&gt;Foundry&lt;/a&gt; (Another of his).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Designing the DSL&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Think about the problem domain&lt;/li&gt;
&lt;li&gt;Deconstruct -- remove the cruft.  DSLs are not fake English.  No Finglish allowed.&lt;/li&gt;
&lt;li&gt;Implementation&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Method chaining&lt;/h3&gt;

&lt;p&gt;Approach 1: return a new object every time&lt;/p&gt;

&lt;p&gt;Approach 2: return self after changing state&lt;/p&gt;

&lt;p&gt;Choosing an approach -- think about which is more concise in your case, also think about how #2 can get ugly &amp;amp; unwieldy.&lt;/p&gt;

&lt;p&gt;Dynamic dispatch&lt;/p&gt;

&lt;p&gt;He likes using closures.  Some extra chrome -- if that's bad maybe look at an external DSL.&lt;/p&gt;

&lt;p&gt;Compositon - meshing DSLs. Presents namespace issues.&lt;/p&gt;

&lt;h3&gt;Decoupled DSLs&lt;/h3&gt;

&lt;p&gt;In his opinion, the DSL ought to be decoupled from the library behind it.  The DSL is &lt;em&gt;just&lt;/em&gt; the interface to the logic.  Thus, when testing you test them separately.&lt;/p&gt;</description>
      <pubDate>Mon, 16 Mar 2009 14:54:15 GMT</pubDate>
      <guid>http://jordan.broughs.net/archives/2009/03/mwrc-jeremy-mcanally-machine-learning</guid>
      <author>Jordan</author>
    </item>
    <item>
      <title>MWRC: Kirk Haines - Vertebra</title>
      <link>http://jordan.broughs.net/archives/2009/03/mwrc-kirk-haines-vertebra</link>
      <description>&lt;h1&gt;Kirk Haines - Vertebra&lt;/h1&gt;

&lt;p&gt;&lt;img src='http://mtnwestrubyconf.org/2009/images/mwrc-logo.png' style='width: 150px; height: 94.5px;' /&gt; &lt;/p&gt;

&lt;p&gt;Kirk is working for EngineYard on Vertebra&lt;/p&gt;

&lt;h2&gt;Jordan's Summary&lt;/h2&gt;

&lt;p&gt;Vertebra is a solution from EngineYard to manage processes in the cloud.  Still in development (no production usage so far).  Sounds interesting, will probably take a look at their &lt;a href=&quot;http://github.com/engineyard/vertebra&quot;&gt;source code&lt;/a&gt; if for nothing else than an interesting architecture.  Uses XMPP, which I seem keep hearing about these days.&lt;/p&gt;

&lt;h2&gt;Cloud Computing&lt;/h2&gt;

&lt;p&gt;Clouds are great b/c it's many, many machines waiting to do you bidding.&lt;/p&gt;

&lt;p&gt;Clouds are hard b/c there are many, many machines to manage.&lt;/p&gt;

&lt;p&gt;Scripted SSH works, but he says it has its limits.  Vertebra built to be 'fault-tolerant operations among autonomous agents'.&lt;/p&gt;

&lt;h2&gt;Enter Vertebra&lt;/h2&gt;

&lt;p&gt;Built on XMPP.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;very chatty protocol&lt;/li&gt;
&lt;li&gt;upside to chatty-ness is fault tolerance.  back-and-forth paints the picture of message reception.&lt;/li&gt;
&lt;li&gt;goal is: if network dies, operation in progress should be able to pick right up where it left off&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For an XMPP Server they use EJabberd&lt;/p&gt;

&lt;p&gt;The pieces of Vertebra are agents.  E.g. a logger agent.&lt;/p&gt;

&lt;h2&gt;Special Vertebra Agent: Herault&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;originally written in ruby, rewritten in erlang for performance &amp;amp; scalability&lt;/li&gt;
&lt;li&gt;new agents coming on board advertise their capabilities to Herault&lt;/li&gt;
&lt;li&gt;when looking for capabilities ('show me all loggers') you ask Herault&lt;/li&gt;
&lt;li&gt;also handles authorization for dispatching operations&lt;/li&gt;
&lt;li&gt;when asking Herault to dispatch an operation, can specify :all or :single (more options in the works)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Concurrency API&lt;/h2&gt;

&lt;p&gt;Talking about using vertebra to schedule future units of work that may or may not execute depending on a given set of conditions.  &lt;/p&gt;</description>
      <pubDate>Fri, 13 Mar 2009 20:44:16 GMT</pubDate>
      <guid>http://jordan.broughs.net/archives/2009/03/mwrc-kirk-haines-vertebra</guid>
      <author>Jordan</author>
    </item>
    <item>
      <title>MWRC: Yehuda Katz - The Great Rails Refactor</title>
      <link>http://jordan.broughs.net/archives/2009/03/mwrc-yehuda-katz-the-great-rails-refactor</link>
      <description>&lt;h1&gt;Yehuda Katz - The Great Rails Refactor&lt;/h1&gt;

&lt;p&gt;&lt;img src='http://mtnwestrubyconf.org/2009/images/mwrc-logo.png' style='width: 150px; height: 94.5px;' /&gt; &lt;/p&gt;

&lt;p&gt;Yehuda is working for EngineYard, was working on merb, is now working on rails.&lt;/p&gt;

&lt;h2&gt;My Summary&lt;/h2&gt;

&lt;p&gt;He says he's talking more about the future of rails &amp;amp; less about what-came-from-merb these days.&lt;/p&gt;

&lt;p&gt;Yehuda's presentation really seemed to be centered on componentization of the entire Rails stack&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pluggable persistence layers (ActiveRecord, DataMapper, Sequel, CouchDB, etc)&lt;/li&gt;
&lt;li&gt;Using and becoming middleware&lt;/li&gt;
&lt;li&gt;Making rails' ruby modules less tightly coupled with each other&lt;/li&gt;
&lt;li&gt;Replaceable rails components (ActiveRecord, ActiveSupport, Action)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;He ended talking about how all these areas of componentization will open up new possibilities of competition (and thus greater health &amp;amp; growth) for the whole Rails ecosystem.  An interesting thought in juxtaposed with the elimination of Merb vs Rails competiton.  I'm a bit skeptical of whether this can be really pulled off, but I'm excited to see what the brilliant minds behind all this produce.&lt;/p&gt;

&lt;h2&gt;ORM Agnosticism&lt;/h2&gt;

&lt;p&gt;Possible in rails right now, but things like &lt;code&gt;form_for&lt;/code&gt; ought to work also.&lt;/p&gt;

&lt;p&gt;There were two interfaces that merb switched on: ActiveRecord/Datamapper or Sequel.  Not too bad but not ideal.&lt;/p&gt;

&lt;p&gt;The solution: ActionORM (Lori Holden) - a way of making any ORM look like ActiveRecord.&lt;/p&gt;

&lt;p&gt;Two options going forward for compliance for ORMs&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mimick AR&lt;/li&gt;
&lt;li&gt;provide a proxy that supports the key methods&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A few core things will be covered (like form_for) but it will be up to the community to create extensions for the rest.  It's hard for them to ascertain what's going to be useful up front and they want to move forward quickly.&lt;/p&gt;

&lt;h2&gt;Rack&lt;/h2&gt;

&lt;p&gt;Some middleware they used in merb:  PathPrefix, ConditionalGet, Static&lt;/p&gt;

&lt;p&gt;Static - can use for tweaking static asset handling for dev mode (and turn off in prod)&lt;/p&gt;

&lt;p&gt;Rails middleware usage: Session middleware, Param parsing, Failsafe&lt;/p&gt;

&lt;p&gt;This is all working toward amore unix-like setup, requests come in and get routed to pieces (Sinatra, Rails, etc) which are not special -- they just know how to handle the same thing.&lt;/p&gt;

&lt;h2&gt;Callbacks&lt;/h2&gt;

&lt;p&gt;He worked on improving callbacks a lot.  His first analysis of Rails showed callbacks taking 20% of the time for a request (admittedly a simple request).  A bit on the history of callbacks in Rails:  there was no unified callback system originally -- lots of different ones.  Then it was refactored into callbacks.rb.  But it didn't solve all the needs of all the pieces and thus there was a lot of reaching-into-and changing going on that added complexity and slowness.  Yehuda went through &amp;amp; made a single calback system that served all needs.  Improved actual calling of callbacks - went to 'compilation' instead.&lt;/p&gt;

&lt;p&gt;On complex code:  Sometimes it's ok to have a complicated bit of code, as long as your abstraction is leak proof &amp;amp; well-abstracted.  E.g., nobody cares that ruby is complicated internally because it's done well enough that nobody has to go digging through the C code.&lt;/p&gt;

&lt;p&gt;One big problem w/ current rails code -- poorly named (confusing) instance variables make it hard to read &amp;amp; understand.&lt;/p&gt;

&lt;p&gt;Upcoming: Abstract controller.  Will be module based (truly module based, not tightly coupled modules like rails currently has).&lt;/p&gt;

&lt;p&gt;Ruby tip:  If you include a module in a class you can super from a module method.  Much better than alias method chaining, which can get really messed up if things aren't chained in the right order.&lt;/p&gt;

&lt;p&gt;About the plugin api -- there are lots of methods in Rails that are not for everyday use, but are available for plugin authors.  These are methods that they don't want to clutter the API docs with, but they will stand by them as far as keeping them working the same way.  Sort of a 'hidden' but valid public API.  Still thinking about how to provide plugin API for the future of Rails to avoid all the crazy monkey patching that currently goes on.&lt;/p&gt;

&lt;p&gt;Upcoming: Debug Toolbar like Django's, but more pluggable.&lt;/p&gt;

&lt;p&gt;Orchestra -- gets the pieces working together.  Hopefully will make it a lot easier for people to add instrumentation (especially specialized instumentation) to Rails, not only for fiveruns &amp;amp; etc, but for normal end users.&lt;/p&gt;

&lt;h2&gt;On Competition&lt;/h2&gt;

&lt;p&gt;Yes, the competition between Rails &amp;amp; Merb is gone.  However, Yehuda says that they've really eliminated a less-useful competition in order to open up a more useful one. That is, competition on the component level. The want to make the pieces of Rails compete instead of the entire framework compete.  E.g., Sequel vs ActiveRecord, your own ActionController, etc.&lt;/p&gt;</description>
      <pubDate>Fri, 13 Mar 2009 19:56:37 GMT</pubDate>
      <guid>http://jordan.broughs.net/archives/2009/03/mwrc-yehuda-katz-the-great-rails-refactor</guid>
      <author>Jordan</author>
    </item>
    <item>
      <title>MWRC: Jon Crosby - Middleware</title>
      <link>http://jordan.broughs.net/archives/2009/03/mwrc-jon-crosby-middleware</link>
      <description>&lt;h1&gt;Jon Crosby - Middleware&lt;/h1&gt;

&lt;p&gt;&lt;img src='http://mtnwestrubyconf.org/2009/images/mwrc-logo.png' style='width: 150px; height: 94.5px;' /&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://getcloudkit.com&quot;&gt;getcloudkit.com&lt;/a&gt;&lt;br/&gt;
contributor to rack-contrib project&lt;br/&gt;
working at Engine Yard on Engine Yard Solo&lt;/p&gt;

&lt;h2&gt;CGI&lt;/h2&gt;

&lt;p&gt;Remembering the bad old days...&lt;/p&gt;

&lt;h2&gt;Things we maybe could pull out of our apps&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;authentication&lt;/li&gt;
&lt;li&gt;caching&lt;/li&gt;
&lt;li&gt;openid + oauth&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Rack&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://github.com/rack/rack-contrib&quot;&gt;http://github.com/rack/rack-contrib&lt;/a&gt;&lt;br/&gt;
based on http model of having layers&lt;br/&gt;
based on wsgi (web server gateway interace)&lt;br/&gt;
Interesting -- Rack::CSSHTTPRequest&lt;br/&gt;
Rack::Cache&lt;br/&gt;
Check out his cloudkit - intersting out it builds up rack items w/ oauth, openid items &amp;amp; etc&lt;br/&gt;
Middleware announcing itself - Middleware can announce it's presence via env headers&lt;br/&gt;
Adding sinatra as middleware before Rails  &lt;/p&gt;

&lt;p&gt;Comment from Yehuda: they are currently working on rails as middleware stuff&lt;/p&gt;</description>
      <pubDate>Fri, 13 Mar 2009 17:02:00 GMT</pubDate>
      <guid>http://jordan.broughs.net/archives/2009/03/mwrc-jon-crosby-middleware</guid>
      <author>Jordan</author>
    </item>
    <item>
      <title>MWRC: James Edward Gray, II</title>
      <link>http://jordan.broughs.net/archives/2009/03/mwrc-james-edward-gray-ii</link>
      <description>&lt;h1&gt;James Edward Gray, II&lt;/h1&gt;

&lt;p&gt;&lt;img src='http://mtnwestrubyconf.org/2009/images/mwrc-logo.png' style='width: 150px; height: 94.5px;' /&gt; &lt;/p&gt;

&lt;p&gt;If you want to learn Ruby you should read code, lots of code.  He estimates that an 'expert' ruby programmer would read &lt;em&gt;more&lt;/em&gt; code than he writes.&lt;/p&gt;

&lt;h2&gt;Examples of good code libraries&lt;/h2&gt;

&lt;h3&gt;Restclient&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;clean interface to restful services&lt;/li&gt;
&lt;li&gt;this is networking code done right&lt;/li&gt;
&lt;li&gt;quote he likes:  'Everything in a method should be written to the same level of abstraction'&lt;/li&gt;
&lt;li&gt;logs from restclient are executable ruby code&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;bj&lt;/h3&gt;

&lt;p&gt;background priority queue for rails&lt;/p&gt;

&lt;h3&gt;terminator&lt;/h3&gt;

&lt;p&gt;robust thread/pipe/etc level code written by an expert&lt;/p&gt;

&lt;h3&gt;slave&lt;/h3&gt;

&lt;p&gt;trivial multiprocessing with built-in ipc&lt;/p&gt;

&lt;h2&gt;The art of code reading&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;when you start reading, relax.  not all code sucks &amp;amp; you probably won't understand the author's reasons at first&lt;/li&gt;
&lt;li&gt;don't start with Rails (too big &amp;amp; complex)&lt;/li&gt;
&lt;li&gt;have a goal&lt;/li&gt;
&lt;li&gt;get the source code open in your standard text editor (e.g. use gem unpack or get a copy from a vcs)&lt;/li&gt;
&lt;/ul&gt;</description>
      <pubDate>Fri, 13 Mar 2009 16:59:13 GMT</pubDate>
      <guid>http://jordan.broughs.net/archives/2009/03/mwrc-james-edward-gray-ii</guid>
      <author>Jordan</author>
    </item>
    <item>
      <title>Happy Valentines Day!</title>
      <link>http://jordan.broughs.net/archives/2009/02/happy-valentines-day</link>
      <description>&lt;p&gt;Two videos from our family to yours. :)&lt;/p&gt;

&lt;script type=&quot;text/javascript&quot; src=&quot;http://widgets.clearspring.com/o/4805fc0db4a3562c/4998e0f1b6fa4cf6/4805fc0d7c7211c3/77cf044/-cpid/91fdf5f2110e2ec4/autostart/false/widget.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;&lt;object width=&quot;480&quot; height=&quot;295&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/eM3mlgLAlMs&amp;amp;hl=en&amp;amp;fs=1&amp;amp;rel=0&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/eM3mlgLAlMs&amp;amp;hl=en&amp;amp;fs=1&amp;amp;rel=0&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;480&quot; height=&quot;295&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;</description>
      <pubDate>Mon, 16 Feb 2009 04:43:59 GMT</pubDate>
      <guid>http://jordan.broughs.net/archives/2009/02/happy-valentines-day</guid>
      <author>Jordan</author>
    </item>
  </channel>
</rss>

