<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Rob Conery</title> <link>http://wekeroad.com</link> <description>Co-owner/Founder of Tekpub, Web development with Ruby on Rails and ASP.NET MVC</description> <lastBuildDate>Wed, 08 Feb 2012 19:16:26 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/wekeroad/EeKc" /><feedburner:info uri="wekeroad/eekc" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>wekeroad/EeKc</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item><title>Kiss The Ring…</title><link>http://feedproxy.google.com/~r/wekeroad/EeKc/~3/k4Tyt3CteZo/</link> <comments>http://wekeroad.com/2012/02/07/kiss-the-ring/#comments</comments> <pubDate>Tue, 07 Feb 2012 20:46:34 +0000</pubDate> <dc:creator>Rob Conery</dc:creator> <category><![CDATA[Microsoft]]></category> <category><![CDATA[Opinion]]></category><guid isPermaLink="false">http://wekeroad.com/?p=6137</guid> <description><![CDATA[... In which we reflect on my ego-mania and just how in the dark Enterprise Devs using OSS really are...]]></description> <content:encoded><![CDATA[<p
style="float:right; margin:0 0 10px 15px; width:240px;"> <img
src="http://wekeroad.com/wp-content/uploads/2012/02/AlPacinoKissTheRing8x10.jpeg" width="240" /></p><p><a
href="http://wekeroad.com/wp-content/uploads/2012/02/AlPacinoKissTheRing8x10.jpeg"><img
class="alignnone size-full wp-image-6138" title="AlPacinoKissTheRing8x10" src="http://wekeroad.com/wp-content/uploads/2012/02/AlPacinoKissTheRing8x10.jpeg" alt="" width="640" height="415" /></a></p><p>Hadi Hariri, <a
href="http://devlicio.us/blogs/hadi_hariri/archive/2012/02/06/submit-a-patch.aspx" target="_blank">reflecting on the &#8220;Submit a Patch&#8221; attitude:</a></p><blockquote><p>If you’re working on OSS, you’re doing it because you are benefiting from it. You benefit because you enjoy it. You benefit because you learn. You benefit because you potentially can rise to fame (albeit a micro-celebrity), and you benefit because it can ultimately provide you with potential consulting and training opportunities.</p><p>Nobody owes you anything for working on OSS!</p></blockquote><p>So if I get this right, <strong>the whole idea of Open Source: that a community can come together as a group to build something of common interest as opposed to paying a Big Corporate Entity with an Agenda &#8211; is secondary to my own ego?</strong></p><p><i><strong>Edit</strong>: Hadi pointed out that 1) we make the same point here and 2) it&#8217;s no very nice of me to &#8220;judge&#8221; him &#8211; he&#8217;s done a lot of work on Open Source. My reflection below on how much I&#8217;ve learned from others was to point out that it&#8217;s the collaboration, not the fame and consulting that drives me. Always has &#8211; so yes we make the same point, minus the other bullshit. In terms of &#8220;judging&#8221; Hadi &#8211; don&#8217;t know where that comes from: this is a response to <strong>his post</strong></i></p><p>I think Hadi has a reasonable point &#8211; that maybe some OSS leaders can be a tad aggressive (myself included). Especially when the code is offered in an email instead of a patch and there&#8217;s no way to Diff what they&#8217;ve done and no test to prove it fixes anything and it turns out it doesn&#8217;t and I&#8217;ve just wasted hours of my time AGAIN and then I get to try and have an ego battle with the person who sent the email when I ask where the tests are&#8230;.</p><p>Ahem. Yeah that can make people grumpy&#8230; beside the point really.</p><p>I hear this kind of thing a lot with the various projects I&#8217;ve run up over the years. I&#8217;ve gotten into many scraps, as you can imagine <img
src='http://wekeroad.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . I used to think it was just .NET &#8211; but it&#8217;s not. It&#8217;s everywhere.</p><p>Something for Hadi to consider is that I <a
href="http://github.com/robconery" target="_blank">Open Source (just about) everything</a> because I think there&#8217;s value to sharing my code and endeavors. Any &#8220;fame&#8221; or &#8220;notoriety&#8221; I have achieved has zenithed a while ago &#8211; it&#8217;s just my habit to share what I think is interesting.</p><p>But I still keep pushing the stuff out. And I find it a little offensive that someone would straight up tell me I do it because I &#8220;seek fame and money&#8221;. I wrote Massive because I wanted to &#8211; and it seemed like fun. Same with the Highrise and MadMimi API Wrappers, same with Manatee, same with all the stuff in my repository.</p><p>Ask anyone who&#8217;s actually authored something and they&#8217;ll probably tell you the same thing:<strong> I did it because it needed to be done.</strong></p><p>To be honest I think Hadi&#8217;s whole article is a sad reflection of the current attitude rampant in the .NET community (though also present in other communities as well): that somehow we&#8217;re all trying to become rich and famous and climb the ranks.</p><p>This positions Open Source projects as &#8220;egoware&#8221; and is more than a bit damaging when you consider that it&#8217;s actually thwarting efforts. What a loss. And that might sound exceedingly arrogant of me to say &#8211; as if it&#8217;s some great privilege to work on one of my projects.</p><p>But I actually mean the opposite: <strong>the privilege is all mine</strong>. I met some amazing programmers along the way:</p><ul><li><strong>Scott Watersmasysk</strong> helped me write up many of the first parts of SubSonic</li><li><strong>Eric Kemp</strong> was a champion and a hero who taught me a whole lot about programming with his help with SubSonic 2 and 3.</li><li><strong>J Sawyer</strong> taught me more about programming in a single summer than I have ever learned with his help on the Commerce Starter Kit</li><li><strong>Karl Seguin</strong> was patient and kind with his BSON work and NoRM &#8211; and showed me a thing or two about Mongo and socket programming</li><li><strong>Rob Sullivan</strong> took some of his time to show me some whip-crack SQL with Massive (and continues to do so)</li></ul><p>The list goes on &#8211; the point being that it&#8217;s not my ego that&#8217;s the neat part, it&#8217;s working in an ad-hoc group towards a mutual goal. That, my friends, is the power of Open Source.</p><h2>In The Land of The Blind&#8230;.</h2><p>Hadi, reflecting on OSS in the Enterprise (emphasis mine):</p><blockquote><p>However, we need to look at ourselves and see how much of this <strong>low adoption</strong> of OSS that we’re so passionately fighting for<strong> is our fault.</strong> If <strong>we expect</strong> all the users of our projects to <strong>know how to work with our source control or compile the source and deal with dependencies, submit patches or work with our testing framework, all we’re doing is raising the entry barrier to OSS.</strong></p><p>Before shouting that I’m stereotyping OSS projects, I’m not. I’m well aware that there are amazing projects out there with beautiful and thoughtful teams and communities around them that make many commercial support alternative envious. However, I’ve seen the <em>submit a patch </em>attitude often enough, over the many years I’ve been involved in OSS to warrant mentioning it.</p></blockquote><p>One of the more condescending things I&#8217;ve read in a while. I&#8217;m not arguing the point that many Enterprise Devs are more than a bit behind &#8211; but I think Hadi put that whole stereotype on another level.</p><blockquote><p>Before shouting that I’m stereotyping OSS projects, I’m not.</p></blockquote><p>Of course not. We&#8217;re all ego maniacs and Enterprise Devs don&#8217;t know what source control is.</p> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=k4Tyt3CteZo:Em4Z5mq5u7M:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=k4Tyt3CteZo:Em4Z5mq5u7M:Q8R26LmAkSY"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=k4Tyt3CteZo:Em4Z5mq5u7M:Q8R26LmAkSY" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=k4Tyt3CteZo:Em4Z5mq5u7M:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=k4Tyt3CteZo:Em4Z5mq5u7M:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=k4Tyt3CteZo:Em4Z5mq5u7M:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=k4Tyt3CteZo:Em4Z5mq5u7M:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wekeroad/EeKc/~4/k4Tyt3CteZo" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://wekeroad.com/2012/02/07/kiss-the-ring/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://wekeroad.com/2012/02/07/kiss-the-ring/</feedburner:origLink></item> <item><title>A Handy Script For Compiling CoffeeScript On The Fly</title><link>http://feedproxy.google.com/~r/wekeroad/EeKc/~3/3Tghg22hK8A/</link> <comments>http://wekeroad.com/2012/02/03/a-handy-script-for-compiling-coffeescript-on-the-fly/#comments</comments> <pubDate>Fri, 03 Feb 2012 02:04:18 +0000</pubDate> <dc:creator>Rob Conery</dc:creator> <category><![CDATA[Javascript]]></category><guid isPermaLink="false">http://wekeroad.com/?p=6129</guid> <description><![CDATA[Rails 3.1 and beyond has the asset pipeline. Node has connect-assets, and there are plenty of "Just In Time" CoffeeScript compilers out there for other platforms as well. I like using a File Watcher - and here's my code.]]></description> <content:encoded><![CDATA[<p>CoffeeScript has the ability to run tasks in much the same way as Ruby does with Rake. In the same vein &#8211; CoffeeScript has &#8220;Cake&#8221; &#8211; or &#8220;Coffee Make&#8221; files.</p><p>Up-front: I stole this from PeepCode. Well&#8230; I didn&#8217;t really &#8220;steal&#8221; it since I <a
href="http://peepcode.com/products/coffeescript" target="_blank">paid for the video</a> &#8211; but credit where credit is due: this is <a
href="http://peepcode.com/blog/2011/coffeescript-in-motion" target="_blank">Grosenbach&#8217;s work</a>. I did modify it, however, as I wanted it to work with NodeJS for the coming Tekpub series:</p><h3>Edit</h3><p><i>Geoffrey pinged me to let me know that Node understands CoffeeScript natively &#8211; just require it and use it <img
src='http://wekeroad.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . No need to do the compilation ahead of time &#8230; groovy! Never knew!</i></p><div
class="codecolorer-container ruby blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:620px;"><table
cellspacing="0" cellpadding="0"><tbody><tr><td
style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br
/>2<br
/>3<br
/>4<br
/>5<br
/>6<br
/>7<br
/>8<br
/>9<br
/>10<br
/>11<br
/>12<br
/></div></td><td><div
class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color:#006600; font-weight:bold;">&#123;</span>spawn, <span
style="color:#CC0066; font-weight:bold;">exec</span><span
style="color:#006600; font-weight:bold;">&#125;</span> = <span
style="color:#CC0066; font-weight:bold;">require</span> <span
style="color:#996600;">'child_process'</span><br
/> sys = <span
style="color:#CC0066; font-weight:bold;">require</span> <span
style="color:#996600;">'util'</span> <span
style="color:#008000; font-style:italic;">#util might be outdated on your system</span><br
/> <br
/> runCommand = <span
style="color:#006600; font-weight:bold;">&#40;</span>name, args...<span
style="color:#006600; font-weight:bold;">&#41;</span> <span
style="color:#006600; font-weight:bold;">-&gt;</span><br
/> &nbsp; <span
style="color:#CC0066; font-weight:bold;">proc</span> = spawn name, args<br
/> &nbsp; <span
style="color:#CC0066; font-weight:bold;">proc</span>.<span
style="color:#9900CC;">stderr</span>.<span
style="color:#9900CC;">on</span> <span
style="color:#996600;">'data'</span>, <span
style="color:#006600; font-weight:bold;">&#40;</span>buffer<span
style="color:#006600; font-weight:bold;">&#41;</span> <span
style="color:#006600; font-weight:bold;">-&gt;</span> console.<span
style="color:#9900CC;">log</span> buffer.<span
style="color:#9900CC;">toString</span><span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#006600; font-weight:bold;">&#41;</span><br
/> &nbsp; <span
style="color:#CC0066; font-weight:bold;">proc</span>.<span
style="color:#9900CC;">stdout</span>.<span
style="color:#9900CC;">on</span> <span
style="color:#996600;">'data'</span>, <span
style="color:#006600; font-weight:bold;">&#40;</span>buffer<span
style="color:#006600; font-weight:bold;">&#41;</span> <span
style="color:#006600; font-weight:bold;">-&gt;</span> console.<span
style="color:#9900CC;">log</span> buffer.<span
style="color:#9900CC;">toString</span><span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#006600; font-weight:bold;">&#41;</span><br
/> &nbsp; <span
style="color:#CC0066; font-weight:bold;">proc</span>.<span
style="color:#9900CC;">on</span> <span
style="color:#996600;">'exit'</span>, <span
style="color:#006600; font-weight:bold;">&#40;</span>status<span
style="color:#006600; font-weight:bold;">&#41;</span> <span
style="color:#006600; font-weight:bold;">-&gt;</span> process.<span
style="color:#CC0066; font-weight:bold;">exit</span><span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#006666;">1</span><span
style="color:#006600; font-weight:bold;">&#41;</span> <span
style="color:#9966CC; font-weight:bold;">if</span> status isnt <span
style="color:#006666;">0</span><br
/> <br
/> task <span
style="color:#996600;">'project:watch'</span>, <span
style="color:#996600;">'Watch source files and build JS'</span>, <span
style="color:#006600; font-weight:bold;">&#40;</span>options<span
style="color:#006600; font-weight:bold;">&#41;</span> <span
style="color:#006600; font-weight:bold;">-&gt;</span><br
/> &nbsp; runCommand <span
style="color:#996600;">'coffee'</span>, <span
style="color:#996600;">'-o'</span>, <span
style="color:#996600;">'models'</span>, <span
style="color:#996600;">'-wc'</span>, <span
style="color:#996600;">'coffeescripts/models'</span><br
/> &nbsp; runCommand <span
style="color:#996600;">'coffee'</span>, <span
style="color:#996600;">'-o'</span>, <span
style="color:#996600;">'routes'</span>, <span
style="color:#996600;">'-wc'</span>, <span
style="color:#996600;">'coffeescripts/routes'</span></div></td></tr></tbody></table></div><p>Put this code in a &#8220;Cakefile&#8221; (no extension) in the root of your project and then, in a console (assuming you have Node installed) run &#8220;cake project:watch&#8221;.  This here code is written for a Node project using ExpressJS and I want it to compile the .coffee files in my &#8220;coffeescripts/models&#8221; and &#8220;coffeescript/routes&#8221; directories. When it&#8217;s done compiling, I want it to take the output and stick it into the corresponding &#8220;models&#8221; and &#8220;routes&#8221; directories in the root of my app.</p><p>The -o option here is simply the output directory, relative to the Cakefile&#8217;s location (which I keep in the root of the app). &#8220;-wc&#8221; is telling the CoffeeScript compiler to &#8220;watch and compile&#8221; the .coffee scripts in the following directories.</p><p>You can change this as needed, of course. If you&#8217;re using a Rails app, you might not want to use the Asset pipeline to compile your stuff &#8211; so you could organize things a bit differently if you want:</p><div
class="codecolorer-container ruby blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:620px;"><table
cellspacing="0" cellpadding="0"><tbody><tr><td
style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br
/>2<br
/></div></td><td><div
class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">task <span
style="color:#996600;">'project:watch'</span>, <span
style="color:#996600;">'Watch source files and build JS'</span>, <span
style="color:#006600; font-weight:bold;">&#40;</span>options<span
style="color:#006600; font-weight:bold;">&#41;</span> <span
style="color:#006600; font-weight:bold;">-&gt;</span><br
/> &nbsp; runCommand <span
style="color:#996600;">'coffee'</span>, <span
style="color:#996600;">'-o'</span>, <span
style="color:#996600;">'public/javascripts'</span>, <span
style="color:#996600;">'-wc'</span>, <span
style="color:#996600;">'app/coffeescripts'</span></div></td></tr></tbody></table></div><p>The Cakefile can also be used to compile SASS (if you use that):</p><div
class="codecolorer-container ruby blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:620px;"><table
cellspacing="0" cellpadding="0"><tbody><tr><td
style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br
/>2<br
/></div></td><td><div
class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color:#008000; font-style:italic;">#from PeepCode</span><br
/> runCommand <span
style="color:#996600;">'sass'</span>,   <span
style="color:#006600; font-weight:bold;">&#91;</span><span
style="color:#996600;">'--watch'</span>, <span
style="color:#996600;">'public/css/sass:public/css'</span><span
style="color:#006600; font-weight:bold;">&#93;</span></div></td></tr></tbody></table></div><p>I like doing it this way as it keeps me from having to run my app in order to compile the coffeescript bits &#8211; and I also have feedback if there are errors, right in the console.</p> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=3Tghg22hK8A:KLkubMnQ760:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=3Tghg22hK8A:KLkubMnQ760:Q8R26LmAkSY"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=3Tghg22hK8A:KLkubMnQ760:Q8R26LmAkSY" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=3Tghg22hK8A:KLkubMnQ760:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=3Tghg22hK8A:KLkubMnQ760:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=3Tghg22hK8A:KLkubMnQ760:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=3Tghg22hK8A:KLkubMnQ760:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wekeroad/EeKc/~4/3Tghg22hK8A" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://wekeroad.com/2012/02/03/a-handy-script-for-compiling-coffeescript-on-the-fly/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://wekeroad.com/2012/02/03/a-handy-script-for-compiling-coffeescript-on-the-fly/</feedburner:origLink></item> <item><title>Microsoft Doesn’t Read Their Own Terms of Service Apparently</title><link>http://feedproxy.google.com/~r/wekeroad/EeKc/~3/Pr8PG8xBJJE/</link> <comments>http://wekeroad.com/2012/02/02/microsoft-doesnt-read-their-own-terms-of-service-apparently/#comments</comments> <pubDate>Thu, 02 Feb 2012 19:57:04 +0000</pubDate> <dc:creator>Rob Conery</dc:creator> <category><![CDATA[Off-Topic]]></category><guid isPermaLink="false">http://wekeroad.com/?p=6124</guid> <description><![CDATA[Every time Microsoft Marketing tries to make something "viral" it comes off as what my old baseball coach used to call a "Monkey F***ing a Football". It's just the same with their latest "Gmail Man" BS.]]></description> <content:encoded><![CDATA[<p
style="float:right; margin:0 0 10px 15px; width:240px;"> <img
src="http://wekeroad.com/wp-content/uploads/2012/02/monkeyball.jpeg" width="240" /></p><h2><a
href="http://wekeroad.com/wp-content/uploads/2012/02/monkeyball.jpeg"><img
class="alignnone size-full wp-image-6125" title="monkeyball" src="http://wekeroad.com/wp-content/uploads/2012/02/monkeyball.jpeg" alt="" width="321" height="292" /></a></h2><h2>Of Course, This is What They Want</h2><p>The plan is, of course, to polarize people into positions so they write about the thing you want to make viral. The ad tries to be cute and silly &#8211; painting Gmail as a <a
href="http://www.youtube.com/watch?feature=player_embedded&amp;v=TDbrX5U75dk" target="_blank">dorky, snooping mail man who reads your email to serve you ads</a>.</p><p>Indeed, that&#8217;s the Gmail premise. Always has been, always will be.<strong> It&#8217;s how they can offer the service to you for free.</strong> Microsoft does the same with Live Mail (which used to be Hotmail). They might not read your subject line &#8211; but then again, <a
href="http://explore.live.com/microsoft-service-agreement?mkt=en-us" target="_blank">if you read the terms of Live Mail&#8230;</a> (emphasis mine)</p><blockquote><p>You understand that Microsoft may need, and you hereby grant Microsoft the right, to <strong>use, modify, adapt, reproduce, distribute, and display content posted on the service solely to the extent necessary to provide the service.</strong></p></blockquote><p>In other words&#8230; they can do precisely what GMail is doing. And I&#8217;m sort of thinking they do (and they never deny that they do) &#8211; but I don&#8217;t have Live Mail and I certainly don&#8217;t care. Moreover, as I&#8217;m sure you&#8217;re thinking &#8211; this ad wasn&#8217;t about LiveMail &#8211; it was about Office365.</p><h2>Terms, Terms, Terms</h2><p>Not many people read the terms of agreement when they use an online service. In there are goldmines of corporate silliness buried under piles of lawyer-speak. Microsoft, to their credit, <a
href="http://explore.live.com/microsoft-service-agreement?mkt=en-us" target="_blank">makes it very clear</a> that what you post, they get to feel up as they deem necessary (emphasis mine):</p><blockquote><p>The Services may contain e-mail services, bulletin board services, chat areas, news groups, forums, communities, personal web pages, calendars, photo albums, file cabinets and/or other message or communication facilities designed to enable you to communicate with others (each a &#8220;Communication Service&#8221; and collectively &#8220;Communication Services&#8221;)&#8230;.</p><p><strong>Microsoft reserves the right to review materials posted to the Communication Services and to remove any materials in its sole discretion</strong>. Microsoft reserves the right to terminate your access to any or all of the Communication Services at any time, without notice, for any reason whatsoever.</p><p>Microsoft reserves the right at all times to disclose any information as Microsoft deems necessary to satisfy any applicable law, regulation, legal process or governmental request, or to edit, refuse to post or to remove any information or materials, in whole or in part, in Microsoft&#8217;s sole discretion.</p></blockquote><p>Just don&#8217;t load up a document about <a
href="http://www.dailymail.co.uk/news/article-2093796/Emily-Bunting-Leigh-Van-Bryan-UK-tourists-arrested-destroy-America-Twitter-jokes.html?ito=feeds-newsxml" target="_blank">&#8220;Destroying America&#8221; or &#8220;Digging up Marilyn Monroe&#8217;s grave&#8221;</a>&#8230;</p><p>Look, it&#8217;s easy at this point to start flipping out about Microsoft policing content. I don&#8217;t think they would do that &#8211; but they have to be exceedingly clear here that if you&#8217;re found to be the next Bradley Manning or Julian Assange &#8211; well &#8220;not in their house&#8221;. So they&#8217;re protecting themselves that way. Good for them.</p><p>Don&#8217;t kid yourself: <strong>if you use an online service to load up pictures of your junk &#8211; it&#8217;s OUT THERE on the web</strong>. You&#8217;re the one who put it there, don&#8217;t be surprised if it somehow gets you in trouble or a guest spot on Leno. You are the one who decides your privacy and the minute you go online, you&#8217;ve decided you want less privacy. That&#8217;s the deal in this age.</p><p>The thing that irks me is that Microsoft Marketing is somehow trying to suggest your documents, pictures, sensitive business documents and so on are &#8220;safer&#8221; with them and Office365 because &#8220;they won&#8217;t snoop&#8221;. That&#8217;s crap!</p><p>And see this is where I wonder if the Marketing guys vetted the<a
href="http://www.microsoft.com/about/legal/en/us/IntellectualProperty/Copyright/Default.aspx" target="_blank"> Terms of Service</a> carefully enough (emphasis mine):</p><blockquote><p>&#8230; by posting, uploading, inputting, providing or submitting (&#8220;Posting&#8221;) your Submission you are granting Microsoft, its affiliated companies and necessary sublicensees <strong>permission to use your Submission in connection with the operation of their Internet businesses (including, without limitation, all Microsoft Services)</strong>, including, without limitation, the license rights to: copy, distribute, transmit, publicly display, publicly perform, reproduce, edit, translate and reformat your Submission; <strong>to publish your name in connection with your Submission; and the right to sublicense such rights to any supplier of the Services.</strong></p></blockquote><p>I&#8217;ll be signing up real soon for that! I&#8217;m sure that it&#8217;s probably the same over at Google -<a
href="http://www.google.com/accounts/TOS?hl=en" target="_blank"> in fact I know it is:</a></p><blockquote><p>11.1 You retain copyright and any other rights you already hold in Content which you submit, post or display on or through, the Services. By submitting, posting or displaying the content<strong> you give Google a perpetual, irrevocable, worldwide, royalty-free, and non-exclusive license to reproduce, adapt, modify, translate, publish, publicly perform, publicly display and distribute any Content which you submit,</strong> post or display on or through, the Services. This license is for the sole purpose of enabling Google to display, distribute and promote the Services and may be revoked for certain Services as defined in the Additional Terms of those Services.</p><p>11.2 You agree that this license includes a right for Google to make such Content available to other companies, organizations or individuals with whom Google has relationships for the provision of syndicated services, and to use such Content in connection with the provision of those services.</p><p>11.3 You understand that Google, in performing the required technical steps to provide the Services to our users, may (a) transmit or distribute your Content over various public networks and in various media; and (b) make such changes to your Content as are necessary to conform and adapt that Content to the technical requirements of connecting networks, devices, services or media. You agree that this license shall permit Google to take these actions.</p><p>11.4 You confirm and warrant to Google that you have all the rights, power and authority necessary to grant the above license.</p></blockquote><p>And like I said &#8211; if you put it out there, it&#8217;s out there. I wouldn&#8217;t believe anyone who tries to suggest otherwise &#8211; especially Microsoft Marketing.</p><p>This whole thing is a complete mess. Suggesting that you&#8217;re safer at Office365 is a ridiculous joke.</p> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=Pr8PG8xBJJE:zOf3Qk1CE7w:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=Pr8PG8xBJJE:zOf3Qk1CE7w:Q8R26LmAkSY"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=Pr8PG8xBJJE:zOf3Qk1CE7w:Q8R26LmAkSY" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=Pr8PG8xBJJE:zOf3Qk1CE7w:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=Pr8PG8xBJJE:zOf3Qk1CE7w:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=Pr8PG8xBJJE:zOf3Qk1CE7w:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=Pr8PG8xBJJE:zOf3Qk1CE7w:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wekeroad/EeKc/~4/Pr8PG8xBJJE" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://wekeroad.com/2012/02/02/microsoft-doesnt-read-their-own-terms-of-service-apparently/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://wekeroad.com/2012/02/02/microsoft-doesnt-read-their-own-terms-of-service-apparently/</feedburner:origLink></item> <item><title>Siri and The Jammy Dodger</title><link>http://feedproxy.google.com/~r/wekeroad/EeKc/~3/-S_wkVJ40I8/</link> <comments>http://wekeroad.com/2012/02/01/siri-and-the-jammy-dodger/#comments</comments> <pubDate>Wed, 01 Feb 2012 23:16:39 +0000</pubDate> <dc:creator>Rob Conery</dc:creator> <category><![CDATA[Off-Topic]]></category><guid isPermaLink="false">http://wekeroad.com/?p=6116</guid> <description><![CDATA[Can&#8217;t&#8230; stop &#8230; laughing&#8230; (via boingboing)]]></description> <content:encoded><![CDATA[<p><iframe
src="http://www.youtube.com/embed/SGxKhUuZ0Rc" frameborder="0" width="640" height="360"></iframe><br
/> Can&#8217;t&#8230; stop &#8230; laughing&#8230; (via <a
href="http://boingboing.net/2012/02/01/apple-scotland-iphone-commer.html" target="_blank">boingboing</a>)</p> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=-S_wkVJ40I8:hOYFG-X0qp0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=-S_wkVJ40I8:hOYFG-X0qp0:Q8R26LmAkSY"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=-S_wkVJ40I8:hOYFG-X0qp0:Q8R26LmAkSY" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=-S_wkVJ40I8:hOYFG-X0qp0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=-S_wkVJ40I8:hOYFG-X0qp0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=-S_wkVJ40I8:hOYFG-X0qp0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=-S_wkVJ40I8:hOYFG-X0qp0:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wekeroad/EeKc/~4/-S_wkVJ40I8" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://wekeroad.com/2012/02/01/siri-and-the-jammy-dodger/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://wekeroad.com/2012/02/01/siri-and-the-jammy-dodger/</feedburner:origLink></item> <item><title>Tekpub Update: January 2012</title><link>http://feedproxy.google.com/~r/wekeroad/EeKc/~3/3kFeb42OdkE/</link> <comments>http://wekeroad.com/2012/01/31/tekpub-update-january-2012/#comments</comments> <pubDate>Tue, 31 Jan 2012 20:08:02 +0000</pubDate> <dc:creator>Rob Conery</dc:creator> <category><![CDATA[Tekpub]]></category><guid isPermaLink="false">http://wekeroad.com/?p=6109</guid> <description><![CDATA[Time for another update on what's happening at Tekpub - and there's a lot of good stuff. This coming month we're working with more authors then we ever have - and I think you'll like the lineup.]]></description> <content:encoded><![CDATA[<p
style="float:right; margin:0 0 10px 15px; width:240px;"> <img
src="http://wekeroad.com/wp-content/uploads/2012/01/tpub2logo_black.png" width="240" /></p><h2><a
href="http://wekeroad.com/wp-content/uploads/2012/01/tpub2logo_black.png"><img
class="alignnone size-full wp-image-6110" title="tpub2logo_black" src="http://wekeroad.com/wp-content/uploads/2012/01/tpub2logo_black.png" alt="" width="678" height="350" /></a></h2><h2>Site Updates</h2><p>For various reasons we have decided to move from <a
href="http://www.braintreepayments.com/">Braintree</a> to <a
href="https://stripe.com/">Stripe</a> for our payment processing. Braintree served us incredibly well and I remain a Huge Fan of their service, but unfortunately there were some red tape issues that we couldn&#8217;t get passed (my fault, completely) and we had to change to a different processor.</p><p>I can&#8217;t say enough about Stripe. They answered my support requests usually within <strong>minutes</strong> and I each time I was working with the developer of a given feature that I had questions about. They even have a Campfire room that you can drop into at any time &#8211; there&#8217;s always 4-5 of them sitting in there &#8211; and ask them a code question!</p><p>The system was easy to figure out &#8211; and as usual <a
href="http://railscasts.com/episodes/288-billing-with-stripe" target="_blank">Ryan Bates showed me</a> what I needed to know.</p><p>In addition I finally upgraded to Rails 3.2.1 and the speed bump is very welcomed. All of this took about 3 weeks or so, and I&#8217;m finally done (save for a few bugs that might crop up) &#8211; so it&#8217;s time to go full-tilt with making some videos!</p><h2>Hello Raven</h2><p><a
href="http://ayende.com" target="_blank">Oren&#8217;s</a> back and louder than ever &#8211; this time showing us what <a
href="http://ravendb.net" target="_blank">RavenDB</a> is all about. We cover the basics &#8211; from why you should care about document databases in general all the way into the more advanced stuff &#8211; like how to shard and replicate your indexes out to SQL Server.</p><p>Did you know RavenDB could do that for you? Automatically push your data to a relational system? I didn&#8217;t. Did you know that it&#8217;s both ACID compliant (for writes to the DB) <strong>as well as </strong>BASE &#8211; or &#8220;eventually consistent&#8221; when it comes to queries?</p><p>I&#8217;ve worked with a number of document databases and RavenDB&#8217;s ease of use, beautiful admin UI, and general &#8220;smarts&#8221; (like automatic index creation based on usage and throttles for select N+1) make it incredibly compelling. As with most videos we do with Oren &#8211; I was happily surprised at just how simple, and powerful, RavenDB is.</p><p>This one will be out in the next 10 days to 2 weeks and should be roughly 5 episodes at 30-40 minutes apiece. No price tag yet, but it will be in the same range as most of our videos.</p><h2>Getting To Know PostGres</h2><p>Rob Sullivan is back and we&#8217;ve decided to port the StackOverfaux database (that we created in <a
href="http://tekpub.com/productions/ft_sullivan" target="_blank">Rob&#8217;s SQL Server DB Tuning Full Throttle</a>) to PostGres! And while we&#8217;re at it, we push the entire codebase to Mono and deploy it to Linode (a LINUX host) using Capistrano &#8211; the famous Ruby on Rails deployment system!</p><p>PostGres is a fast, standards-compliant database that can stand right up to SQL Server and other &#8220;industrial strength&#8221; databases &#8211; and even surpass them with a highly pluggable architecture and configurable core. Did you know that you can write functions in Ruby and install them into PostGres? I didn&#8217;t. Did you know that PostGres allows inheritance of tables? I didn&#8217;t&#8230;.</p><p>Full Text indexing built right in, a forgiving language for writing queries, windowing functions that remove the pain from GROUP BY rollups, dynamic table joins, <strong>indexed functions</strong> - PostGres is an amazing database system and &#8220;The Robs&#8221; show you all the ways you can leverage, tune, and generally have a lot of fun with it.</p><p>The entire production has been recorded and now I just have to stitch it together along with some supporting &#8220;B-roll&#8221;. It should be out in the next 3 weeks and have 3-4 episodes, 30-40 minutes apiece.</p><h2>NodeJS Love</h2><p>I&#8217;ve spent the last 3 months &#8220;playing&#8221; with NodeJS &#8211; doing what I do to get to know a framework, community, and overall system: I forked Tekpub and rewrote our simple/not-so-simple app in it (not deployed, just a private Node Edition). I&#8217;ve learned a whole lot &#8211; specifically that <strong>I Love NodeJS</strong>. I&#8217;m not sure why &#8211; but I can give you a general set of reasons:</p><ol><li><strong>The community</strong> is exploding and alive. For instance: DynamoDB just came out from Amazon and within 3 days there was<a
href="https://github.com/spolu/node-dynamodb" target="_blank"> a Node library</a> for working with it &#8211; with major contributions coming from <a
href="http://openmymind.net" target="_blank">Karl Seguin</a>.</li><li><strong>It&#8217;s simple. Really simple</strong>. I used ExpressJS to get the core of the site up and running and within 4 hours was rewriting Massive into &#8220;MassiveJS&#8221;. It was so easy to add a module and then publish it that it became obvious rather quickly: this is one of the reasons why NodeJS is so popular! Side note: I&#8217;ll finish up MassiveJS and publish it as part of our Node screencast.</li><li><strong>It&#8217;s incredibly fast and scalable.</strong> This one is difficult for &#8220;traditional&#8221; web programmers to understand: what makes Node so scalable? The simple answer is that it leverages Javascript&#8217;s asynchronous nature to handle load instead of creating more processes and threads. One single thread can handle thousands of requests <strong>at the same time</strong> - whereas Ruby and PHP can&#8217;t. C# can &#8211; but generally .NET developers don&#8217;t write async routines. This, to me, makes Node fascinating.</li></ol><p>We have 2 productions planned for NodeJS &#8211; the first is an introductory look at the framework where you&#8217;ll get your feet wet with Node&#8217;s concepts, build out a simple site, write some queries, and create a constant connection using Socket.io. I might even sneak in some Azure goodness in there&#8230;</p><p>For the second production <a
href="http://www.youtube.com/watch?v=pXT0mF9bMyA" target="_blank">Matt Ranney</a> has agreed to go Full Throttle with us and crack out a Node application that I have yet to conceive of. Matt is the CTO of <a
href="http://voxer.com/" target="_blank">Voxer</a> - a very popular iPhone/Android app that turns your phone into a walkie-talkie &#8211; and it&#8217;s powered by NodeJS. In fact, it&#8217;s the largest deployment of NodeJS on the planet. It&#8217;s safe to say that if anyone knows how to work NodeJS &#8211; it&#8217;s Matt.</p><p>Moreover, he lives right down the road from me!</p><p>Both of these productions should be out in the next 60 days. Matt&#8217;s will be a single episode Full Throttle, mine will have 4-5 episodes to it (TBD).</p><h2>NServiceBus with Udi Dahan</h2><p>Every week someone asks for Udi to come on and do something with NServiceBus. Our schedules never matched up &#8211; but that&#8217;s about to change. Udi is going to come on and show us NServiceBus &#8211; something I know very little about. Actually that&#8217;s not true: I know <strong>nothing</strong> about it.</p><p>I&#8217;m looking forward to this one &#8211; I know Udi is a tremendously talented speaker and a bit of a genius. Hopefully we&#8217;ll have this one out in the next 60 days.</p><h2>More Javascript!</h2><p>I&#8217;m going to keep dropping the single Javascript episodes (like our JS: Up to Speed) focusing on various tools and platforms. I have a rough outline of a <a
href="http://wekeroad.com/tag/backbonejs/" class="st_tag internal_tag" rel="tag" title="Posts tagged with BackboneJS">BackboneJS</a> production and I&#8217;m planning on recording that over the next 60 days, as well as a look at testing frameworks like Jasmine and Mocha.</p><p>Javascript&#8217;s relevance is skyrocketing and every week sees another framework cropping up. More and more developers are sharpening their JS skills &#8211; and we&#8217;ll be right there to help!</p><h2>Apple and iOS</h2><p>I have two authors at the ready who want to dive in and cover iOS &#8211; from an app-building perspective as well as a deep look at Objective-C and Cocoa. I don&#8217;t have any firm dates yet, and I don&#8217;t have an outline, but <strong>I do</strong> have two very enthusiastic authors.</p><p>Over the next 30 days I&#8217;ll be firming up the agreements with the authors and we&#8217;ll kick it into &#8220;outlining mode&#8221; &#8211; coming up with a plan for what we want to cover. Once I know, I&#8217;ll be sure to blog about it.</p><p>Apple&#8217;s Cocoa framework as well as their creaky/funky language (Objective-C) has been called &#8220;the most important technology to know&#8221; for developers of all colors over the next decade. Agree with it or not &#8211; the Apple landscape is exploding as evidenced by their skyrocketing device sales.</p><h2>Lifehacking</h2><p>I almost forgot! I&#8217;ve recorded about 60 minutes of solid Homebrewing fun with yours-truly creating a simple batch of beer with everyday household equipment. I think <strong>everyone </strong>should have a hobby that&#8217;s entertaining and fun to drink <img
src='http://wekeroad.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> &#8211; so I&#8217;m hoping to piece together a &#8220;basics&#8221; and then an All-grain advanced.</p><p>There are a lot of crossover skills that a geek can use to make good beer: process, patience, math and chemistry, and engineering! It really is a very fun geek hobby &#8211; especially when you can watch a fellow geek do it!</p><h2>Suggestions?</h2><p>As always &#8211; <a
href="http://mailto:rob@tekpub.co" target="_blank">fire &#8216;em my way!</a></p> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=3kFeb42OdkE:PfscN55k3w0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=3kFeb42OdkE:PfscN55k3w0:Q8R26LmAkSY"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=3kFeb42OdkE:PfscN55k3w0:Q8R26LmAkSY" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=3kFeb42OdkE:PfscN55k3w0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=3kFeb42OdkE:PfscN55k3w0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=3kFeb42OdkE:PfscN55k3w0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=3kFeb42OdkE:PfscN55k3w0:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wekeroad/EeKc/~4/3kFeb42OdkE" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://wekeroad.com/2012/01/31/tekpub-update-january-2012/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://wekeroad.com/2012/01/31/tekpub-update-january-2012/</feedburner:origLink></item> <item><title>I’m A Piece of Trash: Recycle Me</title><link>http://feedproxy.google.com/~r/wekeroad/EeKc/~3/RqskUHdsf94/</link> <comments>http://wekeroad.com/2012/01/27/im-a-piece-of-trash-recycle-me/#comments</comments> <pubDate>Fri, 27 Jan 2012 09:05:27 +0000</pubDate> <dc:creator>Rob Conery</dc:creator> <category><![CDATA[General]]></category> <category><![CDATA[Hawaii]]></category> <category><![CDATA[Off-Topic]]></category> <category><![CDATA[Opinion]]></category><guid isPermaLink="false">http://wekeroad.com/?p=6095</guid> <description><![CDATA[I stare at the bottom of my drained coffee cup - the stray grounds settle on the bottom in a final stand against the tyranny of filtration. The quiet of the morning is leaving me - the minivans, SUVs, hybrid/crossover/family cars are pulling up in front of our house: it's Go Time. I'm Mr. Trash today - and the children in my daughters' class are about to get thrown away with me...]]></description> <content:encoded><![CDATA[<p
style="float:right; margin:0 0 10px 15px; width:240px;"> <img
src="http://wekeroad.com/wp-content/uploads/2012/01/plastic01.jpeg" width="240" /></p><h2><a
href="http://wekeroad.com/wp-content/uploads/2012/01/plastic01.jpeg"><img
class="alignnone size-full wp-image-6097" title="plastic01" src="http://wekeroad.com/wp-content/uploads/2012/01/plastic01.jpeg" alt="" width="400" height="267" /></a></h2> <address>http://jonathanalcorn.blogspot.com/2008/12/plastic-water-bottle-pollution.html</address><h2>This Could Be a Mistake</h2><p>There&#8217;s always work. At night, reading stories with my kids: there is work in some percentage of my conscious mind. Talking to my wife in the quiet of the 60 minutes of post kid-bed-time-quiet-exhaustion&#8230; even THEN &#8230; work sits in a small part of my brain. And it itches.</p><p>So it is today. I volunteered to take my 2 daughters &#8211; and their small class &#8211; on a &#8220;nature field trip&#8221;. They go every Thursday and it typically consists of a visit to the beach, collecting shells. Or maybe to the yarn shop to make some kind of cutesy &#8230; cute thing. It&#8217;s nice, fun. Cute.</p><p><strong>I decide to take them to the dump.</strong></p><p>It fascinates me and always has. The psychology of throwing shit away is an intense stew of denial, absurdity and ego-fantastical bullshit. I thought so before and I&#8217;m convinced of it now &#8211; but kids&#8230; they don&#8217;t have the weird shit we have. They like Big Machines, crunching stuff, and raw materials from which to build forts and Fairy Battlegrounds.</p><p>Enough pretending this world is a ball of yarn and pretty seashells. Today is Junk Art, Crashing Trash from Booming Trucks, Exhaust, Mayhem, Smells and the 21st century Snake Oil otherwise known as &#8220;Recycling&#8221;.</p><p>&#8220;Hey Rob &#8211; sounds like an &#8230; <em>interesting</em> trip today&#8230;&#8221; offers one of the dads and he gives me <em>that look</em>. If you&#8217;re a dad &#8211; you know <em>that look</em> from one of your dad buddies when he drops his kid at your house.</p><p>Whatever work I was thinking of vanishes as the kids rush me. Their eyes are wide, smiles large, hair all over the place. Little bony wild bodies run up to me full of voice and intensity THE DUMP UNCLE ROB YAH!!!</p><p>Mom smiles that smile that says Whatever Just Don&#8217;t Kill Them Retard smile and drives away.</p><p><em>Oh shit.</em></p><h2>Uncle Cholo</h2><p>Yep, that&#8217;s his name. It&#8217;s tatoo&#8217;d on his neck. He wears a bright orange hard hat which shouts against his deep blue eyes. His pidgin is thick as the kids in the class watch him fire the giant piston at the transfer station, crushing the trash into the bin waiting just out of site. He&#8217;s Uncle Cholo and he runs the dump.</p><p>&#8220;You see dat der&#8230; some bugga throw away da bottle &#8211; you can recycle em now wid da HI-5 but off to da landfill bumbye&#8230;&#8221;</p><p>Uncle is showing them a bag of trash with some stray bottles left in. He&#8217;s excited &#8211; I don&#8217;t think he gets visitors much. 3 of the kids are watching a mattress explode under the unrelenting squeeze of the 5 foot by 5 foot piston, box springs cracking under the splintered wood frame.</p><p>&#8220;But&#8230; that&#8217;s a perfectly good bed!&#8221; yells one of the kids. &#8220;Why would anyone throw it away!&#8221;.</p><p>&#8220;We don&#8217;t ask em sistah &#8211; we stick on da truck and shoots! Off to da landfill in Kekaha&#8221;</p><p>Uncle sees trash all day long. People drop in, leave him their garbage, smile and wave, and then leave. Uncle sees what we leave behind every day. Uncle knows us better than we could ever imagine.</p><p>&#8220;Do you find cool stuff!&#8221; one of the younger girls asks.</p><p>&#8220;Oh yeah- you know what we find most of all? Money.&#8221;</p><p>&#8220;COOL! How MUCH!&#8221;</p><p>&#8220;Oh mostly da quartah&#8230; just a minute I swept a dime into da chute. Jeez if I save em I&#8217;d be one millionaire alreddy&#8221;</p><p>Money. We throw away money. For some reason I&#8217;m not surprised.</p><h2>You&#8217;re All Trash</h2><p>Before we start talking to Uncle, I pull the kids aside and tell them how we need to be safe here &#8211; there&#8217;s broken glass, broken&#8230; everything and it can cut us, make us sick. This place is really dirty, the things we don&#8217;t want come here.</p><p>So, today we&#8217;re all pieces of trash. You guys are garbage. What kind do you want to be? Everyone gets to pick what bit of trash they want to be for today and we&#8217;re going to find out why you&#8217;re here, and what&#8217;s going to happen to you.</p><p>&#8220;I&#8217;m a glass bottle!&#8221; shouts a young boy. &#8220;I&#8217;m an aluminum CAN!!!&#8221; &#8220;ME TOO!&#8221;.</p><p>In the end I have 3 cans, 2 bottles, 2 cardboard boxes and a plastic bottle. I&#8217;m the plastic bottle in case you&#8217;re wondering &#8211; someone has to be. No one in their right mind would pick a plastic bottle &#8211; it&#8217;s just not cool. Which is kind of interesting&#8230;</p><p>&#8220;Why are you here? Why, Mr. Aluminum Can, are you at the garbage dump?&#8221;</p><p>&#8220;Because someone used me up and they&#8217;re done and now I get to be RECYCLED!!!!&#8221;</p><p>&#8220;How many times were you used?&#8221; I ask.</p><p>&#8220;Ummm&#8230; one time? Yeah.. one time&#8221;.</p><p>Around the circle I ask each one how many times they were used. The kids that picked cardboard boxes tell me that they used to also function as kitty homes so they were used 3 times.</p><p>&#8220;Let&#8217;s go see what happens to you&#8221;.</p><h2>Trucks.</h2><p>We make our way over to the Aluminum bins, and we lift each kid up so they can see their new friends. Same with Cardboard and Glass. Some have lots of friends (there are a load of bottles &#8211; not so many cans) and the cardboard bin is completely filled.</p><p>&#8220;What happens to you now?&#8221; I ask.</p><p>&#8220;I dunno &#8211; we&#8217;re recycled right?&#8221;. Right &#8211; you&#8217;re &#8220;recycled&#8221;. I think back on my days as a Geologist working in the booming environmental field. I&#8217;d go to landfills routinely to take all kinds of measurements, to oil companies to test the effluent from their fractionation processing.</p><p><em>Curious thing with the environment: people very seldom wish to see what&#8217;s actually happening. They&#8217;d rather just know that &#8220;someone is doing something about it&#8221;. Case in point: the Chevron Refinery at Richmond, CA. They dump effluent into the SF Bay from various contamination points at their refinery.</em></p><p><em>At the time, citizens were pretty upset about the contaminants being spilled into the nearby wetlands habitat (rightly so). The local government said &#8220;make it safer&#8221; and by &#8220;safer&#8221; they meant &#8220;less parts per million of bad stuff&#8221;. So Chevron made a bigger pipe, pumped more water, and evacuated the same amount of effluent.</em></p><p><em>All with less parts per million of bad stuff. The citizens were happy. They just forked out millions of their tax dollars to help Chevron do absolutely nothing about a problem that the citizens themselves caused, with their SUVs.</em></p><p>&#8220;Recyclying &#8211; what does that mean to you?&#8221; I ask&#8230;</p><h2>Ships.</h2><p>Ask anyone who recycles why they do it, and they answer the same thing: &#8220;we should reuse this stuff and not put it in a landfill&#8221;. The same could be said of confiscated Crack Cocaine.</p><p>I&#8217;m feeling a bit of that surly edge kick in. The smoldering disillusionment of working in, what I felt, was an industry trying to do &#8220;good&#8221; &#8211; instead to find out we worked for the polluters, trying to get them by and let the keep polluting.</p><p>&#8220;It means we make new stuff from the things we recycle. Bottles are made into bottles again. Cans and cardboard too!&#8221;.</p><p>&#8220;Close&#8221; I say. &#8220;Aluminum cans are the one case where we reuse them completely. We melt them down and turn them into cans again &#8211; usually within 60 days. So you aluminum cans? You guys will be back in my house in 2 months. And then back here again&#8230;&#8221;</p><p>&#8220;The cardboard &#8211; not so much. Same with bottles and plastics. Let&#8217;s ask Uncle what happens to those.&#8221;</p><p>We wak over to Uncle Cholo who&#8217;s sitting in a chair, enjoying the day and the kids. We gather round him and his eyes perk up &#8211; a smile that one dad can see in another dad: I don&#8217;t even need to ask.</p><blockquote><p>&#8220;Uncle &#8211; where does our recycling go?&#8221;</p></blockquote><p>&#8220;Well &#8211; my daughta asked me jus dis da uddah day. You see da big green bin? All a dem &#8211; we fill em up and take em to da harbor in Lihue (an hour away). Den, stick em on a beeeg ship and off dey go to da mainland. From there&#8230; who knows?&#8221;</p><p>There are a number of big recycling facilities throughout the US. I recall seeing a huge scrap metal center outside of the San Francisco Bay Area where cars, refrigerators and other huge metal machines are reduced to little balls of metal and rubber. Their fluids carefully drained and shipped somewhere else.</p><p>Our plastics are milled down and put on big ships to China where they are used in manufacturing more crap for the West. Bottles are sent off to concrete facilities and used in pavement and, rarely, as glass in something else.</p><p>That bottle of water you bought the other day? The plastic was formulated at a chemical company in Ohio (most likely) and then sent to a bottle manufacturer &#8211; perhaps in Nevada. Once completed, the bottle is then sent off to be filled with &#8220;product&#8221; (usually water, which falls from the sky) &#8211; this can be anywhere in the world.</p><p>Once filled with water that bottle was then put on a series of trains and trucks until it reached a distribution hub, at which point it was put on a smaller truck and delivered to the place that you bought it from.</p><blockquote><p>You drank it and, likely, spent all of 10 minutes enjoying it. Being a good person you decided to recycle this bottle and put it in the blue bin at your office.</p></blockquote><p>This bin was dropped into another bin which was dropped into a truck which drove to a collection hub and the bottle was placed onto another truck or train and sent to California where it was dropped off and shredded into very small pieces. These pieces were put back on a truck and sent to San Pedro (the LA Harbor) and put on a ship which sailed halfway around the world to China, where the plastic was sold in bulk to a massive factory with questionable working conditions that makes cheap crap for our kids to play with.</p><p>&#8220;Wow on a SHIP? That must be a BIG SHIP!&#8221;</p><p>Yes, indeed, it&#8217;s a big ship.</p><h2>But That Doesn&#8217;t Make Any Sense</h2><p>I&#8217;m still tired from the nights before. I stayed up very late to be sure I knew at least a few answers to what the kids were going to ask. I already knew more than I wanted to based on my previous career &#8211; but I owe it to them to know more.</p><p>Landfills are filling up quickly &#8211; there are just too many people on the planet. These kids with me &#8211; we&#8217;re talking about recycling right now but what they don&#8217;t know is that our state, Hawaii, was about to <a
href="http://www.oregonlive.com/environment/index.ssf/2010/07/hawaii_trash_could_be_headed_t.html" target="_blank">send it&#8217;s trash to a landfill in Oregon.</a></p><p>Yes &#8211; all of our trash, put on a ship, and sailed across the ocean and up the Columbia Gorge.</p><p>&#8220;But that doesn&#8217;t make any sense at all!&#8221; says one of the kids. &#8220;Why would you put empty, used up bottles on a boat and send them across the sea?&#8221;</p><p>&#8220;I don&#8217;t know &#8211; maybe it&#8217;s cheaper than making the plastic in da first place?&#8221; says Uncle.</p><p>Actually, it&#8217;s not. It&#8217;s a whole lot more expensive to recycle just about&#8230; well everything. Aside from the obvious transportation costs of ships, trucks and fuel &#8211; there are the companies that are subsidized by our tax dollars to run the recycling programs.</p><p>There&#8217;s only one thing that pays to recycle &#8211; and it&#8217;s the one thing that you can actually make money from if you collect it &#8211; and that&#8217;s aluminum cans. It costs less to recycle aluminum cans then it does to make them from raw materials.</p><p>Unfortunately aluminum is the 8th-most recycled material behind things like cardboard, glass, plastic, scrap metal and copper.</p><p>Plastic bottles are the villain. The hardest to recycle, the most prolific and the most environmentally damaging. All of the other major recyclables are natural in origin: glass comes from Silica sand, cardboard from wood&#8230; etc. Plastic &#8211; not so much.</p><h2>Reduction</h2><p>Our dump trip is done and we&#8217;re at a local beach. The trades have died and it&#8217;s getting muggy as we eat our lunch under the ironwood trees.</p><p>&#8220;What did we learn about recycling today?&#8221; I ask the kids.</p><p>&#8220;That it costs a LOT OF MONEY to recycle things &#8211; except for aluminum cans!!!!&#8221;</p><p>&#8220;Yes &#8211; that&#8217;s true. But I think we learned something even better&#8230; didn&#8217;t we?&#8221;</p><p>The kids look puzzled and unsure. I hadn&#8217;t come out and said it but I was hoping it was on their mind. So I prodded&#8230;</p><p>&#8220;One of you said &#8216;it doesn&#8217;t make sense&#8217; to buy a bottle of water, drink it in 5 minutes, then recycle it or throw it away. The water comes from the sky right? It comes from our sink, it comes from filters in our refrigerators&#8230; why do we need water sent to us on trucks and ships from across the world if we have it right here?&#8221;</p><p>&#8220;I&#8217;m never going to drink from ANYTHING but my blue bottle EVER AGAIN&#8221; says one of the kids.</p><p>&#8220;You need to stop going to Costco dad&#8221; says another&#8230;</p> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=RqskUHdsf94:TO1LRiUGn0A:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=RqskUHdsf94:TO1LRiUGn0A:Q8R26LmAkSY"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=RqskUHdsf94:TO1LRiUGn0A:Q8R26LmAkSY" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=RqskUHdsf94:TO1LRiUGn0A:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=RqskUHdsf94:TO1LRiUGn0A:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=RqskUHdsf94:TO1LRiUGn0A:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=RqskUHdsf94:TO1LRiUGn0A:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wekeroad/EeKc/~4/RqskUHdsf94" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://wekeroad.com/2012/01/27/im-a-piece-of-trash-recycle-me/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://wekeroad.com/2012/01/27/im-a-piece-of-trash-recycle-me/</feedburner:origLink></item> <item><title>Sublime Text: The text editor you’ll fall in love with</title><link>http://feedproxy.google.com/~r/wekeroad/EeKc/~3/M1qdGfmh8U4/</link> <comments>http://wekeroad.com/2012/01/13/sublime-text-the-text-editor-youll-fall-in-love-with-3/#comments</comments> <pubDate>Fri, 13 Jan 2012 19:56:29 +0000</pubDate> <dc:creator>Rob Conery</dc:creator> <category><![CDATA[Opinion]]></category> <category><![CDATA[Vim]]></category><guid isPermaLink="false">http://wekeroad.com/?p=6086</guid> <description><![CDATA[The title of this post is the tagline from the Sublime Text 2 website. A tad lofty, and altogether very accurate.]]></description> <content:encoded><![CDATA[<p
style="float:right; margin:0 0 10px 15px; width:240px;"> <img
src="http://wekeroad.com/wp-content/uploads/2012/01/Screen-Shot-2012-01-13-at-9.19.22-AM.png" width="240" /></p><p><a
href="http://wekeroad.com/wp-content/uploads/2012/01/Screen-Shot-2012-01-13-at-9.19.22-AM.png"><img
class="alignnone size-full wp-image-6087" title="Screen Shot 2012-01-13 at 9.19.22 AM" src="http://wekeroad.com/wp-content/uploads/2012/01/Screen-Shot-2012-01-13-at-9.19.22-AM.png" alt="" width="845" height="538" /></a></p><p>I needed a break yesterday and took a look at the newly released Beta 2 of <a
href="http://www.sublimetext.com/" target="_blank">Sublime Text 2</a>. I had seen a little Twitter Chatter about it and I thought it would be a fun thing to look over as I tried to vent my brain a bit.</p><p>In a nutshell:<strong> it&#8217;s everything I love about Vim and Textmate, rolled into one.</strong> It doesn&#8217;t try to be a pretentious IDE, rather it stays committed to speedy text editing and file location. Finding files is incredibly easy and more intuitive then with TextMate, and it&#8217;s even easier than using Rails.vim with Vim.</p><p>I&#8217;m still a Vim fan &#8211; but when I flipped on &#8220;Vintage Mode&#8221; last night I almost fell out of my chair. <strong>All of the commands I&#8217;m used to in Vim (editing commands, that is) are there at the ready</strong>. Unreal &#8211; it&#8217;s Vim wrapped in some serious sex appeal &#8211; or the other way round it&#8217;s TextMate given a lot more smarts (and some much-needed UI flare).</p><p>And then there&#8217;s the automatic, <strong>intelligent code-completion</strong> thing. You get that with Supertab in Vim&#8230; but it&#8217;s always on in Sublime and it literally felt like intellisense in Visual Studio (but it&#8217;s based on words in the open windows, not types and properties).</p><p>The<strong> font rendering looks utterly lickable</strong> on a Mac. I mean seriously: I&#8217;ve never seen fonts so crisp and clean &#8211; all wrapped up in a lightning fast editor UI.</p><p>I&#8217;m quite taken with Sublime, and it&#8217;s surprising to me. I&#8217;m a bit of an Old Dog when it comes to my tools &#8211; I tend to like things &#8220;just so&#8221; (as opposed to playing with languages and frameworks). I was utterly surprised when, after 45 minutes or so of goofing around and getting things setup &#8211; I decided that <strong>Beta or not I was going to buy this thing and switch right over.</strong></p><p>Sublime will work with all of your TextMate bundles &#8211; so you have everything at the ready, right now! It comes with some great themes (typical Blackboard from TextMate &#8211; but I settled for Twilight) and there&#8217;s already a fleet of plugins ready to go.</p><p>Finally &#8211; this is a killer feature: multiple selection and edit. Select a word in your file using Cmd-D. Hit Cmd-D again and Sublime will highlight the next instance of that word. Start typing &#8211; multiple cursors show up and you&#8217;re now editing all of the instances of your selected word.</p><p>Give it a whirl &#8211; it&#8217;s Friday, have some fun!</p><h2>Tips</h2><p>Here&#8217;s some tips to get you up to speed quickly:</p><p><strong>Setup your console</strong>. If you launch Sublime from the console it&#8217;s much easier to get many of the plugins working. You can do this by using the following command:</p><pre class="terminal">ln -s "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl" /usr/local/bin</pre><p>This command will add a symbolic link to your path for Sublime &#8211; so you can open it up from the console using the command &#8220;subl&#8221;.</p><p><strong><a
href="http://wbond.net/sublime_packages/package_control" target="_blank">Add Sublime Package Control</a></strong>. This amazing little plugin will let you search for plugins and install them just like any package manager would (npm, rubygems, nuget, apt). Need something to execute RSpec tasks with a simple command? Shift-Cmd-P brings up the Finder, &#8220;Install&#8221; brings up the Package Control UI. Enter the package you want, hit enter, and you&#8217;re off. Incredibly simple.</p><p><strong>Get to know the basic commands</strong>. If you&#8217;re familiar with TextMate &#8211; then most everything is what you expect, with a few exceptions. Cmd-T opens a new tab (but also let&#8217;s you search for a file) but selecting a block of text and using TAB will indent it (just like VS). SHIFT-TAB will outdent. Option-Cmd 1, 2, and 3 will split the window into 1, 2 and 3 columns. I could fill this up with key commands but I&#8217;ll leave it here. There&#8217;s a lot to explore.</p><p><strong>Distraction Free Mode</strong>. Give it a whirl. It looks amazing on a dual monitor system and you tend to get a lot of work done <img
src='http://wekeroad.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p><p><strong>Font changes</strong>. I like Monaco, mostly because I&#8217;m used to it. I didn&#8217;t care for the default font so I changed it in Preferences/File Settings &#8211; User (or Cmd-,). It&#8217;s a JSON file and you simply want to add the like &#8220;font_face&#8221;: &#8220;Monaco&#8221; (or whatever). The UI will change instantly, which is nice.</p><p>I&#8217;m sure I&#8217;ve missed a few things &#8211; leave a comment with whatever I&#8217;ve left out.</p> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=M1qdGfmh8U4:3uJbCLdBJGY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=M1qdGfmh8U4:3uJbCLdBJGY:Q8R26LmAkSY"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=M1qdGfmh8U4:3uJbCLdBJGY:Q8R26LmAkSY" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=M1qdGfmh8U4:3uJbCLdBJGY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=M1qdGfmh8U4:3uJbCLdBJGY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=M1qdGfmh8U4:3uJbCLdBJGY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=M1qdGfmh8U4:3uJbCLdBJGY:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wekeroad/EeKc/~4/M1qdGfmh8U4" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://wekeroad.com/2012/01/13/sublime-text-the-text-editor-youll-fall-in-love-with-3/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://wekeroad.com/2012/01/13/sublime-text-the-text-editor-youll-fall-in-love-with-3/</feedburner:origLink></item> <item><title>Understanding the Rails Asset Pipeline</title><link>http://feedproxy.google.com/~r/wekeroad/EeKc/~3/0iUe-v11f44/</link> <comments>http://wekeroad.com/2012/01/12/understanding-the-rails-asset-pipeline/#comments</comments> <pubDate>Thu, 12 Jan 2012 19:38:51 +0000</pubDate> <dc:creator>Rob Conery</dc:creator> <category><![CDATA[Rails]]></category> <category><![CDATA[BackboneJS]]></category> <category><![CDATA[CSS]]></category> <category><![CDATA[Jeremy Ashkenas]]></category> <category><![CDATA[RTFM]]></category><guid isPermaLink="false">http://wekeroad.com/?p=6063</guid> <description><![CDATA[Rails 3.1 marks a strange turning point in the evolution of Rails: many hard-core fans are feeling the framework is losing its edge and becoming over-engineered. That might be a premature opinion.]]></description> <content:encoded><![CDATA[<p
style="float:right; margin:0 0 10px 15px; width:240px;"> <img
src="http://wekeroad.com/wp-content/uploads/2012/01/Screen-Shot-2012-01-12-at-9.17.27-AM.png" width="240" /></p><h2>Is There a Problem?</h2><p>It&#8217;s a popular theme of late: &#8220;I liked Rails 2 much better&#8221;:</p><p><img
title="Screen Shot 2012-01-12 at 9.17.27 AM.png" src="http://wekeroad.com/wp-content/uploads/2012/01/Screen-Shot-2012-01-12-at-9.17.27-AM.png" alt="Screen Shot 2012 01 12 at 9 17 27 AM" width="514" height="174" border="0" /></p><p><img
title="Screen Shot 2012-01-12 at 9.18.17 AM.png" src="http://wekeroad.com/wp-content/uploads/2012/01/Screen-Shot-2012-01-12-at-9.18.17-AM.png" alt="Screen Shot 2012 01 12 at 9 18 17 AM" width="517" height="93" border="0" /></p><p>That&#8217;s <a
href="http://wekeroad.com/tag/jeremy-ashkenas/" class="st_tag internal_tag" rel="tag" title="Posts tagged with Jeremy Ashkenas">Jeremy Ashkenas</a>, creator of CoffeeScript and <a
href="http://wekeroad.com/tag/backbonejs/" class="st_tag internal_tag" rel="tag" title="Posts tagged with BackboneJS">BackboneJS</a> with a very blunt opinion about how Rails has changed over the years.</p><p>Despite how you feel about Rails (I happen to love it and run a business on it) &#8211; it&#8217;s a valid question:<strong> Is Rails 3 any better that Rails 2? Or is it worse?</strong></p><h2>Engineering</h2><p>Derick Bailey over at Los Techies <a
href="http://lostechies.com/derickbailey/2011/09/20/a-visual-history-of-the-usefulness-of-ruby-on-rails/" target="_blank">had an interesting post</a> where he looked at how Rails has progressed over the years. It&#8217;s a fun read, but he didn&#8217;t have too many good things to say about Rails 3:</p><blockquote><p>I have yet to hear “WOW! that was SO EASY!” out of anyone, regarding Rails 3.1 and the Asset Pipeline. Instead, I continue to hear more and more complaints about how difficult it is to make it work; how much work it takes to get it running, and how people are frustrated by Rails … I hope they fix whatever the problem is, soon, and get Rails back on it’s rails. It’s sad to see things in this state.</p></blockquote><p>I remember reading that at the very time I decided to look into a possible upgrade for Tekpub. We were running smooth and happy on Rails 3.0.x &#8211; but 3.1 had some interesting improvements.</p><p>So I loaded up a new 3.1 project and moved everything over, and<strong> gasped at how completely unusable it was. </strong>In short: the site took over 10 seconds to load and every time I ran *any* test (using RSpec)<strong> I began to think that the Rails guys had literally lost their fucking minds</strong>.</p><h2>Rails Fault?</h2><p>Of course not. This is what happens when you move your focus a bit from &#8220;The Experience&#8221; to &#8220;The Engineering&#8221;. It&#8217;s a subtle shift &#8211; but it happens over the lifetime of any project. SubSonic did this: in the beginning it was all about the developer experience and the joy of having (basically) instant data access and over time we focused more and more on the engineering of it all.</p><p>When you do that, when you focus on the nuts and bolts rather than the shiny exterior, you (by default) as the user to get on board a bit and <a
href="http://wekeroad.com/tag/rtfm/" class="st_tag internal_tag" rel="tag" title="Posts tagged with RTFM">RTFM</a> more. The Asset Pipeline is the perfect example of this.</p><p>So what is it and why is it there?</p><h2>You Don&#8217;t Have To Use It</h2><p><em><span
style="color: #800000;"><strong>*** EDIT:</strong></span> It was suggested that I move this to the top of the post, and I agree. When Rails 3.1 was initially released it was much slower to load then it is currently. Recent releases have fixed this. In addition, you probably want to move into the pipeline slowly if you&#8217;re upgrading.</em></p><p>Before I get to any of this: you don&#8217;t need to put your JS files inside your app/assets directory. If you have a big file (like jquery_tools for instance) you can put it in the vendor/assets directory and it will be included in the page just as it&#8217;s always been:</p><div
class="codecolorer-container rails blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:620px;"><table
cellspacing="0" cellpadding="0"><tbody><tr><td
style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br
/></div></td><td><div
class="rails codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">= <span
style="color:#5A0A0A; font-weight:bold;">javascript_include_tag</span> <span
style="color:#996600;">&quot;jquery_tools&quot;</span></div></td></tr></tbody></table></div><p>The Asset Pipeline will do a search on disk before it processes anything &#8211; and if it finds a match, it will serve that file. The same goes for any ad-hoc <a
href="http://wekeroad.com/tag/css/" class="st_tag internal_tag" rel="tag" title="Posts tagged with CSS">CSS</a> or JS you&#8217;ve written that you don&#8217;t want to rewrite. Just pop that into public/assets and, like jquery_tools above, it will be pulled from the disk.</p><p>This is a nice way to slowly upgrade your site to using the Asset Pipeline if you&#8217;re upgrading from 2.x. Or don&#8217;t use it at all &#8211; there are still good reasons to upgrade &#8211; which I&#8217;ll cover in later posts.</p><h2>The Asset Pipeline</h2><p>In short:<strong> web developers tend to suck at writing concise, clean javascript and CSS</strong>. I know I do. The load times of our pages can make our sites look horrendously slow &#8211; and if you take time to examine the CSS and JS code it&#8217;s almost always unminified and uncompressed, spread out over multiple pages with no caching directives.</p><p>The Rails guys decided to fix this &#8211; WHILE AT THE SAME TIME making it easier and more fun for you to do &#8220;The Right Thing&#8221;. Sometimes we don&#8217;t want to do the right thing. Sometimes we need to be pulled by the shorties into the modern day. Rails excels at this &#8211; so <strong>perhaps we should expect a little pain as we learn something new</strong>.</p><p>That&#8217;s what the Asset Pipeline is all about: compiling, compressing, minifying, and fingerprinting your CSS and Javascript while at the same time making it more fun.</p><p>Let&#8217;s see how.</p><h2>SASS and Your Design Model</h2><p>There are all kinds of ways to put code behind CSS generation, perhaps the most favored of these is one of the first: SASS. The purpose of SASS is really quite simple: it helps you write less CSS while also being more effective.</p><p>For instance, I can create variables to use around my CSS:</p><div
class="codecolorer-container rails blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:620px;"><table
cellspacing="0" cellpadding="0"><tbody><tr><td
style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br
/>2<br
/>3<br
/>4<br
/>5<br
/>6<br
/>7<br
/>8<br
/></div></td><td><div
class="rails codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color:#ff6633; font-weight:bold;">$gray</span>: <span
style="color:#008000; font-style:italic;">#ccc;</span><br
/> <span
style="color:#ff6633; font-weight:bold;">$darker</span>: <span
style="color:#008000; font-style:italic;">#333;</span><br
/> <span
style="color:#ff6633; font-weight:bold;">$lighter</span>: <span
style="color:#008000; font-style:italic;">#e5e5e5;</span><br
/> <span
style="color:#ff6633; font-weight:bold;">$column</span>: 42px;<br
/> <span
style="color:#008000; font-style:italic;">#some-section{</span><br
/> width:<span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#006666;">5</span> <span
style="color:#006600; font-weight:bold;">*</span> <span
style="color:#ff6633; font-weight:bold;">$column</span><span
style="color:#006600; font-weight:bold;">&#41;</span>; <span
style="color:#006600; font-weight:bold;">//</span>this results <span
style="color:#9966CC; font-weight:bold;">in</span> <span
style="color:#006666;">5</span> <span
style="color:#006600; font-weight:bold;">*</span> 48px, 240px<br
/> color: <span
style="color:#ff6633; font-weight:bold;">$darker</span>;<br
/> <span
style="color:#006600; font-weight:bold;">&#125;</span></div></td></tr></tbody></table></div><p>That&#8217;s the idea &#8211; the things with the &#8220;$&#8221; are variables and they can be sizes or colors, whatever. You can then use some logic in your CSS to structure things happily. Seems a bit wonky, I know, but stay with me.</p><p>You can embed one document in another by using &#8220;@import&#8221;. This is handy if you want to have a set of global variables and site-wide settings that are easily tweaked. <strong>If you think of CSS as a bit of a &#8230; &#8220;Design Model&#8221; &#8211; it starts to become clear.</strong></p><p>Check out the <a
href="http://framelessgrid.com/" target="_blank">Frameless CSS &#8220;framework&#8221;</a>. It&#8217;s not so much a framework as a bit of &#8220;a good way of doing it&#8221; &#8211; here&#8217;s <a
href="https://github.com/jonikorpi/Frameless/blob/master/frameless.scss" target="_blank">their SASS main sheet</a>. You can see that it&#8217;s a bunch of variables and media queries that go into Responsive Design (something I&#8217;ll blog about later).</p><p>It&#8217;s nice, but we can structure this to make more sense.</p><h2>CSS Structure and The Rails Pipeline</h2><ol><li>Every site had the same CSS approach:</li><li>Structural settings</li><li>Typographical settings</li><li>Stylistic settings</li><li>A Reset sheet</li><li>And if you&#8217;re into forward-thinking CSS, a set of media queries for Responsive Design</li></ol><p>Organizing this much CSS can be a complete nightmare! That&#8217;s why we have The Asset Pipeline. Not only does it help you arrange your CSS in a much nicer way, it also helps you deliver and work with that CSS with little effort.</p><p>How? Let&#8217;s organize our stylesheets so they make more sense. I&#8217;ll create a set of 6:</p><ul><li>globals.css.scss</li><li>reset.css.scss</li><li>responsive.css.scss</li><li>structure.css.scss</li><li>styles.css.scss</li><li>typography.css.scss</li></ul><p>In &#8220;globals.css.scss&#8221; I&#8217;ll put the site-wide settings that all the other sheets will use. This won&#8217;t output anything &#8211; it will only provide variable declarations:</p><p><a
href="http://wekeroad.com/wp-content/uploads/2012/01/Screen-Shot-2012-01-12-at-9.53.40-AM.png"><img
class="alignnone size-full wp-image-6065" title="Screen Shot 2012-01-12 at 9.53.40 AM" src="http://wekeroad.com/wp-content/uploads/2012/01/Screen-Shot-2012-01-12-at-9.53.40-AM.png" alt="" width="612" height="423" /></a></p><p>The &#8220;$cols&#8221; stuff you see here is the Frameless stuff &#8211; I have it go all the way up to $cols20.</p><p>Now, I need to include that in every other sheet &#8211; and SASS makes this simple. Let&#8217;s take a look at &#8220;structure.css.scss&#8221;:</p><p><a
href="http://wekeroad.com/wp-content/uploads/2012/01/Screen-Shot-2012-01-12-at-9.58.06-AM.png"><img
class="alignnone size-full wp-image-6067" title="Screen Shot 2012-01-12 at 9.58.06 AM" src="http://wekeroad.com/wp-content/uploads/2012/01/Screen-Shot-2012-01-12-at-9.58.06-AM.png" alt="" width="451" height="487" /></a></p><p>Again: SASS isn&#8217;t anything supernatural. It&#8217;s just CSS with some love. At the very top there I have an @import directive, which acts like a #INCLUDE statement if you will, and drops all of the variables I need into structure.css.scss so I can use them in that sheet. I do the same for all the other sheets I&#8217;m using (typography, styles, etc).</p><p>At this point I&#8217;ll sum up the overall approach by saying that you divide out your &#8220;Design Model&#8221; by purpose so you know where to go when you need to fix things. Some ugly type? Fix it in typography.css.scss. Something not aligned, it&#8217;s probably in structure.css.scss.</p><p>What does this have to do with Rails and the Asset Pipeline?</p><p>A lot of people think this stuff is served on the fly &#8211; and indeed it can be, but that&#8217;s not a very good idea. When you&#8217;re developing it makes perfect sense &#8211; however when you&#8217;re in production you don&#8217;t want your users to wait for this stuff to get processes along with your pages.</p><p>So the Asset Pipeline does that for you: it compiles the SASS and CoffeeScript files per request in development mode (plus a few other things), and it compiles/minifies/uglifies/compresses the same files in production.</p><p>This is extremely important &#8211; that&#8217;s a lot of work and Rails is just doing it for you!</p><h2>Asset Pipeline In Production</h2><p>All you need to do to use the asset pipeline is invoke it in your layout:</p><div
class="codecolorer-container rails blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:620px;"><table
cellspacing="0" cellpadding="0"><tbody><tr><td
style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br
/>2<br
/>3<br
/></div></td><td><div
class="rails codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">= <span
style="color:#5A0A0A; font-weight:bold;">stylesheet_link_tag</span> <span
style="color:#996600;">&quot;application&quot;</span><br
/> <br
/> = <span
style="color:#5A0A0A; font-weight:bold;">javascript_include_tag</span> <span
style="color:#996600;">&quot;application&quot;</span></div></td></tr></tbody></table></div><p>These invocations fire up the pipeline and on first request, will compress/minify/concatenate every SCSS file into a single file called &#8220;global&#8221; with a fingerprinted timestamp as part of the filename, not the querystring (which some browsers will simply ignore.</p><p>You want your users to have only one CSS file to download and you want their browser to cache your CSS so it doesn&#8217;t need to be loaded again. All of this will make your site faster to load, which makes your user very happy.</p><p>All of this applies to CoffeeScript as well. You can work on your CoffeeScript files inside the assets directory and it will be compiled/uglified/minified/concatenated in the exact same way as the SASS stuff. If you like CoffeeScript &#8211; then this is a great thing.</p><p>If you don&#8217;t care, that&#8217;s OK to.</p><h2>Some Tips</h2><p>Much of the angst that comes from Rails 3.1 is the load time. This is due, primarily, to the Asset Pipeline trying to do too much. If you load up all of your JS files and CSS files, as well as all of your images into app/assets, you&#8217;re in for a world of hurt.</p><p>Only put in there what needs to be processed. I don&#8217;t have a single image in my Tekpub upgrade app here, and it loads up just fine &#8211; in fact a bit faster than it&#8217;s 3.0.x brother.</p><p>Make sure you <a
href="http://guides.rubyonrails.org/asset_pipeline.html" target="_blank">RTFM</a> and know what&#8217;s going on before you expect Rails to simply do everything for you. We&#8217;re sort of past that point in Rails history. The neat thing is that, with a little understanding and some knowledge &#8211; doing the right thing is drop-dead easy.</p> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=0iUe-v11f44:4yx48zai2tE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=0iUe-v11f44:4yx48zai2tE:Q8R26LmAkSY"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=0iUe-v11f44:4yx48zai2tE:Q8R26LmAkSY" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=0iUe-v11f44:4yx48zai2tE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=0iUe-v11f44:4yx48zai2tE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=0iUe-v11f44:4yx48zai2tE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=0iUe-v11f44:4yx48zai2tE:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wekeroad/EeKc/~4/0iUe-v11f44" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://wekeroad.com/2012/01/12/understanding-the-rails-asset-pipeline/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://wekeroad.com/2012/01/12/understanding-the-rails-asset-pipeline/</feedburner:origLink></item> <item><title>Rails Has Turned Me Into a Cannibalizing Idiot</title><link>http://feedproxy.google.com/~r/wekeroad/EeKc/~3/N3IueabS1S8/</link> <comments>http://wekeroad.com/2012/01/03/rails-has-turned-me-into-a-cannibalizing-idiot/#comments</comments> <pubDate>Tue, 03 Jan 2012 02:13:43 +0000</pubDate> <dc:creator>Rob Conery</dc:creator> <category><![CDATA[Opinion]]></category><guid isPermaLink="false">http://wekeroad.com/?p=6048</guid> <description><![CDATA[Some interesting posts flying around about how ActiveRecord is rotting people's brains and how Rails is "pants on head retarded". I figured I might as well respond.]]></description> <content:encoded><![CDATA[<p
style="float:right; margin:0 0 10px 15px; width:240px;"> <img
src="http://wekeroad.com/wp-content/uploads/2012/01/tumblr_lvdjxugidf1r3g7gao1_500.gif" width="240" /></p><h2><a
href="http://wekeroad.com/wp-content/uploads/2012/01/tumblr_lvdjxugidf1r3g7gao1_500.gif"><img
class="alignnone size-full wp-image-6051" title="You're a mean man, Mr. Myers :)" src="http://wekeroad.com/wp-content/uploads/2012/01/tumblr_lvdjxugidf1r3g7gao1_500.gif" alt="You're a mean man, Mr. Myers :)" width="500" height="363" /></a></h2><h2>Chad Myers, Letting It Flow</h2><p>Chad and I are friends. Chad has opinions and I tend to like people who not only have opinions &#8211; <a
href="http://lostechies.com/chadmyers/2011/12/30/sweet-sweet-vindication/" target="_blank">but let them out freely</a>. There&#8217;s no guess work, no worrying about &#8220;did I say something wrong?&#8221; &#8211; the conversations tend to flow. I like it when people &#8220;let it all out&#8221; cause then I get to do the same. And, like Chad, it&#8217;s been a while <img
src='http://wekeroad.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> so let&#8217;s do it!</p><p>So it turns out Chad doesn&#8217;t like Rails:</p><blockquote><p>The state of big web frameworks sucks. Not the least sucky among these is Rails. There, I said it. “Bah, he’s just a bitter .NET developer stuck in the stone ages”. I’m tired of getting made fun of and beat up by former PHP scripters telling me how lame and “enterprisey” .NET is and how wonderful and magical Rails is and how it solves every problem</p></blockquote><p>As I mention, Chad and I are friends. So I have no problem telling Chad that <strong>this post really paints him as a serious asshole</strong>. There. I said it. I let it out. Normally I would say &#8220;Chad might consider some alternatives here&#8221; or I might say &#8220;Chad&#8217;s a smart guy but I think he overlooked this one thing&#8230;&#8221;. Where&#8217;s the fun in that?</p><p>That&#8217;s me, as a friend with beer in hand &#8211; smile on my face as I look Chad in the virtual eye: &#8220;Wow you sound like an asshole&#8221;.</p><p>Ahhh this is going to be some fun! Let&#8217;s take a look at why Chad doesn&#8217;t like Rails.</p><h2>Dijkstra</h2><p>Chad starts his post off with a bit of a bang, invoking a quote from Edsger W. Dijkstra:</p><blockquote><p>It is practically impossible to teach OO design to students that have had a prior exposure to Rails: as potential programmers they are mentally mutilated beyond hope of regeneration.</p><ul><li>Edsger W. Dijkstra (paraphrased)</li></ul></blockquote><p>There are a few problems here: the first is that Mr. Dijkstra died in 2002 and never experienced Rails. The second is that Dijsktra never said that. The quote that Chad pulled it from was not paraphrased &#8211; it was completely bastardized for comedic effect. It seems Chad didn&#8217;t know this. <a
href="http://www.cs.virginia.edu/~cs655/readings/ewd498.html" target="_blank">What Dijkstra said</a> was:</p><blockquote><p>It is practically impossible to teach good programming to students that have had a prior exposure to <strong>BASIC</strong>: as potential programmers they are mentally mutilated beyond hope of regeneration.</p></blockquote><p>He went on to say other fun things too:</p><blockquote><ul><li>FORTRAN &#8211;&#8221;the infantile disorder&#8221;&#8211;, by now nearly 20 years old, is hopelessly inadequate for whatever computer application you have in mind today: it is now too clumsy, too risky, and too expensive to use.</li><li>The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offence.</li></ul></blockquote><p>But this one is my favorite:</p><blockquote><p><strong>Simplicity is prerequisite for reliability</strong></p></blockquote><p>I wonder what he thought about Ruby? Either way &#8211; <strong>if you&#8217;re going to quote someone, make sure the context is clear before basing a post on it.</strong></p><h2>Composition</h2><blockquote><p><strong>INHERITANCE IS FAIL FOR MOST DESIGNS, BUT NEVER MORE SO THAN IN WEB/MVC FRAMEWORKS!</strong></p></blockquote><p>Chad likes composition. So do I. What&#8217;s wrong with Inheritance in web/mvc framworks?</p><blockquote><p>One class — that derives from some gawdawful ginormous base class — that has many “action” methods on it is a pile of fail. Why? Because each of those methods has, by definition, a different responsibility and you’re breaking the Single Responsibility Principle&#8230; It seems almost every web framework has this wrong: Rails, ASP.NET MVC, Struts, Django, Spring, and MonoRail from my limited research.</p></blockquote><p>There&#8217;s something wonderful in this paragraph. That a person can unequivocally declare <em>every other web framework</em> in the world as failures &#8211; is just precious. Sometimes I marvel at people&#8217;s ability to not read what they&#8217;ve written and wonder to themselves: &#8220;Does this last paragraph make me sound like a complete ass?&#8221;</p><p>I&#8217;m not going to argue Chad&#8217;s point about inheritance, nor am I going to suggest he&#8217;s wrong. For all I know he&#8217;s completely right. To borrow from David Lee Roth:</p><blockquote><p>I don&#8217;t feel tardy</p></blockquote><p>After 3 years of running my business on Rails I&#8217;ve never experienced any trouble with this Pile of Fail. Has it been smooth? For me it has &#8211; but how?  I measure &#8220;smooth&#8221; by simple means:</p><ol><li><strong>Getting work done in a timely manner</strong> &#8211; I can test up a new feature, and deploy it rather quickly. I just did it with special invoicing for large groups &#8211; it took me 4 hours.</li><li><strong>A site that stays up and doesn&#8217;t crash</strong> (except when I make it crash). I&#8217;ve had to restart my server twice in 3 years. Both times were my fault.</li><li><strong>Little to no security issues</strong>.</li><li><strong>Get in, Get out, Deliver value</strong>. Fixing bugs is typically a quick affair. I have a load of tests and I&#8217;m able to pinpoint problems quickly and push a fix in about 10 minutes. Seems OK to me.</li></ol><p>Granted: Tekpub isn&#8217;t a stock trading app. But there&#8217;s a lot going on under the hood: managing Cutomers, Commerce, Subscription Billing, Custom Invoicing and Video Streaming &#8211; it does have it&#8217;s challenges. Rails has served us well.</p><h2>ActiveRecord</h2><p>Chad doesn&#8217;t like ActiveRecord:</p><blockquote><p>To call ActiveRecord an ORM is to insult the already sullied and notorious name of ORM. I won’t even say that AR is the Linq2SQL of Rails dev because it’s worse than that. AR is the equivalent of dragging and dropping your database to your design surface in Northwind/Designer-driven developing in Visual Studio.</p></blockquote><p>It&#8217;s actually the other way around if you&#8217;re using Rails the &#8220;Rails Way&#8221; &#8211; your pushing your model into your database. I&#8217;m sure Chad wouldn&#8217;t like that either.</p><p>But what&#8217;s the problem here? Is it ActiveRecord? What&#8217;s making Chad mad (emphasis mine)?</p><blockquote><p>I don’t care what you’re doing with your data store, <strong>the model should be the core</strong>. This principle is so fundamental that not even silly dynamic typing can overcome it. The model flows out into everything, not your database driving your model. <strong>AR represents everything that’s wrong with data-driven development</strong> &#8230;  It’s just wrong, always has been wrong, and always will be wrong&#8230;  AR flagrantly and flamboyantly <strong>violates this principle and anyone with a clue who has used AR seriously on any project of length will tell you how it grows into a big mess.</strong></p></blockquote><p>3 years running &#8211; my model is pretty tight. Granted it&#8217;s not a Huge Enterprise Design &#8211; but if it was I&#8217;d probably break out the app into separate apps. I don&#8217;t care for monolithic design and I&#8217;d rather build something with messaging and service endpoints &#8211; something that Rails&#8217; RESTful focus is quite nice at. But I&#8217;ll concede this point: Rails might not be the best candidate for building Massive Legacyware.</p><p>The thing that always strikes me about .NET developers who write about their dislike of Rails is the down-the-nose engineering sophistry and snobbery that is so freely given. It&#8217;s almost as if .NET gives you some kind of Asshole Jacket where you get to call everyone else an ignorant dumbass &#8211; and then accuse them of doing the precise thing you&#8217;re trying to get away with.</p><p>If you read Chad&#8217;s post &#8211; right there in the first paragraph Chad calls out the Haters:</p><blockquote><p> “Bah, he’s just a bitter .NET developer stuck in the stone ages”. I’m tired of getting made fun of and beat up by former PHP scripters telling me how lame and “enterprisey” .NET is and how wonderful and magical Rails is and how it solves every problem</p></blockquote><p>Right on! Stand up yo! But then 4 paragraphs down:</p><blockquote><p>I’m sorry. You’re an idiot&#8230; It’s just wrong (unit testing against your database and eating people).  Just because you wear thick rimmed glasses and drink lattes with your scarf flipped casually around your neck doesn’t mean you get to throw fundamental principles out of the window.</p></blockquote><p>Zing! Good one!</p><p>Just for fun &#8211; let&#8217;s assume that I&#8217;m That Guy. Scarf flipped up, thick glasses on. <strong>My name is Rob and I&#8217;ll be your Token Rails Idiot for today. I&#8217;ll be violating all of Chad&#8217;s principles.</strong></p><p>Is it possible to build a compositional model with ActiveRecord and Rails? <a
href="http://wekeroad.com/2011/10/14/rails-models-and-business-logic/" target="_blank">Why yes it is</a>. And oddly, in many ways, it&#8217;s a lot cleaner.</p><p>That said &#8211; if it&#8217;s light and simple I have no problems putting it on my model. <strong>Why over-engineer and complicate life from the start?</strong> This is one major flaw I find in the &#8220;Theory-driven Development&#8221;: the need to engineer your app before it&#8217;s needed. A .NET Engineer would argue that it&#8217;s always needed for &#8220;maintainability&#8221;. Others might argue that &#8220;You Aint Gonna Need It&#8221; until you &#8230; well you know&#8230; need it.</p><p>Report from the wild: I use extensive mixins that hang off ActiveRecord &#8211; or just use ActiveRecord as a tool &#8211; and everything works nicely. For instance, I have a class called &#8220;ShoppingCart&#8221; that has nothing to do with ActiveRecord. It has all kinds of logic in it &#8211; as you might imagine &#8211; but it does use ActiveRecord to save a CartItem.</p><p>Those noises in my head? Those are thoughts and experience. I don&#8217;t like bad design much &#8211; but I don&#8217;t blame the frameworks, I blame myself (sometimes for using those frameworks which spawn horrible messes).  Moving on&#8230;</p><p>I have a module called &#8220;Authenticatable&#8221; that handles membership for me. I can attach it to whatever model object I please (Customer, Account, User, whatever) and guess what it can do! Ruby is really a fascinating language when you take the time to understand it beyond a demo that makes you hate it. Did you know Ruby is older than C#? It is.</p><p>If you spend some time with Ruby and investigate various idiomatic approaches (mixins, blocks) you&#8217;ll quickly find that it&#8217;s a very deft language &#8211; and probably a bit different from what you&#8217;re used to.</p><p>Or you might write a snarky post and call all Ruby programmers idiots.</p><h2>Unit Tests, Databases, Cannibalism</h2><p>Chad doesn&#8217;t like testing against a database (emphasis mine):</p><blockquote><p>&#8230;<strong> I’m sorry. You’re an idiot</strong>. <em>Unit</em> testing against the database is always, and in every case, wrong. Attempts to explain otherwise sound awfully like arguments I once heard from someone explaining why cannibalism isn’t as bad as people make it out to be. It’s just wrong (unit testing against your database and eating people).  Just because you wear thick rimmed glasses and drink lattes with your scarf flipped casually around your neck doesn’t mean you get to throw fundamental principles out of the window. So stop it. Just because it may be quick or easy (which I don’t believe) doesn’t make it right.</p></blockquote><p>Cannibalism. Idiots. Go Chad Go.</p><p>So if my attempt here to explain otherwise sounds like endorsing cannibilism &#8211; get your forks out. The short answer is that many Rails devs don&#8217;t do this &#8211; they prefer to stub their models using Test::Unit (Rails built-in bits) or RSpec&#8217;s mocking.</p><p>It&#8217;s actually quite simple:</p><div
class="codecolorer-container ruby blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:620px;"><table
cellspacing="0" cellpadding="0"><tbody><tr><td
style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br
/></div></td><td><div
class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Customer.<span
style="color:#9900CC;">stub</span>!<span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#ff3333; font-weight:bold;">:find_by_email</span><span
style="color:#006600; font-weight:bold;">&#41;</span>.<span
style="color:#9900CC;">and_return</span><span
style="color:#006600; font-weight:bold;">&#40;</span>Customer.<span
style="color:#9900CC;">new</span><span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#ff3333; font-weight:bold;">:email</span> =<span
style="color:#006600; font-weight:bold;">&amp;</span>gt; <span
style="color:#996600;">&quot;test@test.com&quot;</span><span
style="color:#006600; font-weight:bold;">&#41;</span><span
style="color:#006600; font-weight:bold;">&#41;</span></div></td></tr></tbody></table></div><p>You can do that in a pre-test harness or wherever you like. I tend to <a
href="https://github.com/thoughtbot/factory_girl" target="_blank">just use Factories</a>. All I can tell you is that after 3 solid years of having fun while testing &#8211; I&#8217;ve never had an issue. In fact I&#8217;ve had the opposite happen: one of my tests uncovered a stupid database issue that I added in error. I set the length wrong on a price field in MySQL (I set it to 2). MySQL likes to be helpful so it reduced the value of 200 to 99 for me (Chad and I would probably agree: MySQL is pants-on-head retarded).</p><p>I wouldn&#8217;t have caught this. Good thing my tests hit the database! Don&#8217;t tell Chad that.</p><h2>Perfection Is&#8230; Can You Guess?</h2><p>Chad likes principles. If he had to create his own web framework, it would:</p><ol><li>Have total adherence to principles</li><li>Completely compositional</li><li>Model-based (whatever that means)</li><li>No Controllers</li><li>Statically Typed (of course!)</li></ol><p>&#8230; etc. Sounds like a riot. Can&#8217;t wait to try it. That&#8217;s actually not true: I have tried it and I find it to be&#8230; just as Chad wants it to be. Is this the part where I get to tell Chad that I&#8217;d shoot myself if I had to maintain his Mountain of Theory in order to run my business?</p><p>I&#8217;m not saying there&#8217;s a damn thing wrong with Fubu &#8211; yet I know people will say I&#8217;m being a dick to an Open Source project (as opposed to Chad who&#8217;s&#8230; nevermind). Look, if you like Fubu and want to rock your principles &#8211; then rock on coder!</p><p>Rails works for me. I&#8217;m not failing, and I don&#8217;t feel like an idiot. Have I tried FUBU? Yes &#8211; I certainly have. It&#8217;s not for me. Can we leave it at that and can I take this silly scarf off yet?</p><blockquote><p>In many ways, FubuMVC is better than Rails and I’ll put my framework up against yours any day of the week.</p></blockquote><p><a
href="http://wekeroad.com/wp-content/uploads/2012/01/9.jpeg"><img
class="alignnone size-full wp-image-6050" title="9" src="http://wekeroad.com/wp-content/uploads/2012/01/9.jpeg" alt="" width="300" height="400" /></a></p><p>The perfect way to end one of the funniest posts I&#8217;ve read in a while.</p> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=N3IueabS1S8:miGCafsxBdo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=N3IueabS1S8:miGCafsxBdo:Q8R26LmAkSY"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=N3IueabS1S8:miGCafsxBdo:Q8R26LmAkSY" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=N3IueabS1S8:miGCafsxBdo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=N3IueabS1S8:miGCafsxBdo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=N3IueabS1S8:miGCafsxBdo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=N3IueabS1S8:miGCafsxBdo:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wekeroad/EeKc/~4/N3IueabS1S8" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://wekeroad.com/2012/01/03/rails-has-turned-me-into-a-cannibalizing-idiot/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://wekeroad.com/2012/01/03/rails-has-turned-me-into-a-cannibalizing-idiot/</feedburner:origLink></item> <item><title>Happy Holidays to You and Yours</title><link>http://feedproxy.google.com/~r/wekeroad/EeKc/~3/-z2mN_Jsqy4/</link> <comments>http://wekeroad.com/2011/12/25/happy-holidays-to-you-and-yours/#comments</comments> <pubDate>Sun, 25 Dec 2011 07:38:06 +0000</pubDate> <dc:creator>Rob Conery</dc:creator> <category><![CDATA[Tekpub]]></category><guid isPermaLink="false">http://wekeroad.com/?p=6039</guid> <description><![CDATA[It's been a very fun year - hoping you're relaxing with friends and family ... or having some well-deserved quiet time to yourself...]]></description> <content:encoded><![CDATA[<p
style="float:right; margin:0 0 10px 15px; width:240px;"> <img
src="http://wekeroad.com/wp-content/uploads/2011/12/charlie-brown-xmas-tree.jpeg" width="240" /></p><p>Presents under the tree&#8230;</p><p><a
href="http://wekeroad.com/wp-content/uploads/2011/12/charlie-brown-xmas-tree.jpeg"><img
class="alignnone size-full wp-image-6040" title="charlie-brown-xmas-tree" src="http://wekeroad.com/wp-content/uploads/2011/12/charlie-brown-xmas-tree.jpeg" alt="" width="280" height="280" /></a></p><p
style="color: #fef9ed;">OV7JHGLEJFUF<br
/> EAEMMYOPBNR2<br
/> QZPXIPGNM4NE<br
/> DBJOASRWMCPS<br
/> I5LS6E9KUJ8F<br
/> UZSEZWU6TVNX<br
/> UOZKGMF4KEN3<br
/> ITVB3PMPQH6R<br
/> XPJQOP6WY72E<br
/> K4FMTHU7H7UK<br
/> 1V35L0MHZIB4<br
/> L9FS4F2Y8UQD<br
/> W4RZXUTYRATW<br
/> V9SL6ZA6UGWZ<br
/> 5IFURIJQNVKD<br
/> 5XIUCTFD7XQP<br
/> BRURPBCHB2VR<br
/> J9GAY5ZIRETV<br
/> UUF3AUD57UOE<br
/> 6WVPNFN3G1PS</p><p>Enjoy <img
src='http://wekeroad.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=-z2mN_Jsqy4:AL94dK9kEqI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=-z2mN_Jsqy4:AL94dK9kEqI:Q8R26LmAkSY"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=-z2mN_Jsqy4:AL94dK9kEqI:Q8R26LmAkSY" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=-z2mN_Jsqy4:AL94dK9kEqI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=-z2mN_Jsqy4:AL94dK9kEqI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wekeroad/EeKc?a=-z2mN_Jsqy4:AL94dK9kEqI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wekeroad/EeKc?i=-z2mN_Jsqy4:AL94dK9kEqI:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wekeroad/EeKc/~4/-z2mN_Jsqy4" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://wekeroad.com/2011/12/25/happy-holidays-to-you-and-yours/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://wekeroad.com/2011/12/25/happy-holidays-to-you-and-yours/</feedburner:origLink></item> </channel> </rss><!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 2/4 queries in 0.008 seconds using disk: basic
Object Caching 1803/1803 objects using disk: basic

Served from: wekeroad.com @ 2012-02-08 19:22:22 -->

