<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Compound Thinking &#187; Ruby on Rails</title>
	<atom:link href="http://compoundthinking.com/blog/index.php/category/programming/ruby/ruby-on-rails/feed/" rel="self" type="application/rss+xml" />
	<link>http://compoundthinking.com/blog</link>
	<description>Thinking about programming in new ways</description>
	<lastBuildDate>Tue, 15 Mar 2011 02:03:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Working at SourceForge</title>
		<link>http://compoundthinking.com/blog/index.php/2009/04/09/working-at-sourceforge/</link>
		<comments>http://compoundthinking.com/blog/index.php/2009/04/09/working-at-sourceforge/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 14:20:53 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
				<category><![CDATA[Lean IT]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[TurboGears]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/?p=621</guid>
		<description><![CDATA[I&#8217;ve been at SourceForge for a couple of months now, it&#8217;s been great, the work is surprisingly fun and rewarding. There&#8217;s a local office, and so I actually get to g and hang out with smart people whenever I want. I can still work from home, but having someplace to go in to has been [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been at SourceForge for a couple of months now, it&#8217;s been great, the work is surprisingly fun and rewarding.   There&#8217;s a local office, and so I actually get to g and hang out with smart people whenever I want.  I can still work from home, but having someplace to go in to has been a refreshing change. </p>
<p>I haven&#8217;t gotten to know many people outside the engineering team in Dexter, but they are great guys. </p>
<p>There&#8217;s lots of good stuff happening here, support for bazar, mercurial, git, trac, and other options on SourceForge itself, improved feeds, and other API&#8217;s for getting at SF data, etc.   But I&#8217;m only peripherally  aware of all that at the moment because I was hired to work on &#8220;totally new stuff&#8221; which is written in Python. </p>
<p><strong>What I&#8217;m working on</strong></p>
<p>Our first new project is a site called <a href="http://fossfor.us">FossFor.Us</a>, and it was the vision for this site, and the team that is working on this and other new stuff, that sold me on the coming to work for Sourceforge.     It&#8217;s written in Django, and it&#8217;s been my first really large Django project, and while the experience has been pretty positive, there have been a number of things that have renewed my commitment to TurboGears development &#8212; but that&#8217;s a blog post for another day.  </p>
<p>The backstory to the FossFor.Us site is that open source project hosting providers (Sourceforge and it&#8217;s recent competitors) have traditionally been pulled in two very different directions by  two very different sets of users: </p>
<ul>
<li>developers of open source software</li>
<li>and people who just want to<em use software to do stuff</em>.</em></li>
</ul>
<p>And that tension has held us back in the past, we have to serve everybody with the same portal, and it ends up not serving either community as well as it should.   But since developers are the most vocal users, it&#8217;s been the second class of user that&#8217;s been most neglected.</p>
<p><a href="http://fossfor.us"><img src="http://compoundthinking.com/blog/wp-content/uploads/2009/04/foss_blog_image.jpg" alt="foss_blog_image" title="foss_blog_image" width="400" height="229" /></a></p>
<p>These people are just looking to get things done, and don&#8217;t care about the &#8220;project&#8221; part of open source software, they are, at least at first, only interested in the &#8220;product.&#8221;   In many ways the Free and Open Source Software community has not served these people well. </p>
<p><a href="http://fossfor.us">Fossfor.us</a> is in it&#8217;s first incarnation an attempt to create a window on the free software world, that&#8217;s just about finding and using software.   But in a larger sense it&#8217;s an attempt to help us as a community to connect with potential users better. </p>
<p><strong>I think connecting FOSS geeks and users is  actually <em>important</em><br />
</strong></p>
<p>It&#8217;s important because people aren&#8217;t aware that there are free options, and are paying for software they can&#8217;t afford.   There&#8217;s a prototypical user (based on a real person) that we talk about a lot, who&#8217;s a single mom, has an old laptop, and struggles week to week to pay her bills, but who bought Photoshop, because &#8220;that&#8217;s how you edit photos.&#8221;    Her family could have used that money to more productive ends, but because she needed to edit photos, and didn&#8217;t know about the free alternatives all those opportunities are just lost.    </p>
<p>Of course the same thing is true of small business owners, who could use free software to reduce their &#8220;overhead&#8221; costs, and actually spend money on creating things people love.   Free software has the potential to lubricate the wheels of the economy, encourage entrepreneurial activity, and enrich people&#8217;s lives.    </p>
<p>All of this is to say I think <a href="http://fossfor.us">fossfor.us</a> is a way to serve the world by making the product of all the open source developer&#8217;s labor more easily available and more accessible to real people.   And when my mom actually used it to find some software a couple weeks ago, I knew we&#8217;d done something right.</p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2009/04/09/working-at-sourceforge/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>REST is a design for the long run</title>
		<link>http://compoundthinking.com/blog/index.php/2008/10/20/rest-is-a-design-for-the-long-run/</link>
		<comments>http://compoundthinking.com/blog/index.php/2008/10/20/rest-is-a-design-for-the-long-run/#comments</comments>
		<pubDate>Mon, 20 Oct 2008 18:46:30 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[TurboGears]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/?p=511</guid>
		<description><![CDATA[Found this quote in a recent discussion or REST. REST is software design on the scale of decades: every detail is intended to promote software longevity and independent evolution. Many of the constraints are directly opposed to short-term efficiency.]]></description>
			<content:encoded><![CDATA[<p>Found this quote in a <a href="http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven">recent discussion</a> or REST. </p>
<blockquote><p>REST is software design on the scale of decades: every detail is intended to promote software longevity and independent evolution. Many of the constraints are directly opposed to short-term efficiency.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2008/10/20/rest-is-a-design-for-the-long-run/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Threads, Processes, Rails, TurboGears, and Scalability</title>
		<link>http://compoundthinking.com/blog/index.php/2008/05/14/threads-processes-rails-trubogears-and-scalability/</link>
		<comments>http://compoundthinking.com/blog/index.php/2008/05/14/threads-processes-rails-trubogears-and-scalability/#comments</comments>
		<pubDate>Wed, 14 May 2008 00:30:24 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[TurboGears]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/?p=306</guid>
		<description><![CDATA[Threads may not be be best way, or the only way, to scale out your code. Multi-process solutions seem more and more attractive to me. Unfortunately multi-process and the JVM are currently two tastes that don&#8217;t taste great together. You can do it, but it&#8217;s not the kind of thing you want to do too [...]]]></description>
			<content:encoded><![CDATA[<p>Threads may not be be best way, or the only way, to scale out your code.   Multi-process solutions seem more and more attractive to me.</p>
<p>Unfortunately multi-process and the JVM are currently two tastes that don&#8217;t taste great together.   You can do it, but it&#8217;s not the kind of thing you want to do too much.   So, the Jruby guys had a problem &#8212; Rail&#8217;s scalability story is only multi-process (rails core is NOT thread safe), and Java&#8217;s not so good that that&#8230;. </p>
<p>Solution:  Running &#8220;multiple isolated execution environments&#8221; in a single java process.</p>
<p>I think that&#8217;s a neat hack.    The JRuby team is to be congratulated in making this work.  It lets Rails mix multi-process concurrency with multi-threaded concurrency, if only on the JVM.  But it&#8217;s likely to incur <em>some</em> memory bloat, so it&#8217;s probably not as good as it would be if Rails itself were to become threadsafe. </p>
<p><a href='http://compoundthinking.com/blog/wp-content/uploads/2007/01/istock_000000305278small.jpg'><img align="left" src="http://compoundthinking.com/blog/wp-content/uploads/2007/01/istock_000000305278small.jpg" alt="" title="Gears" width="300" height="199" class="alignright size-medium wp-image-191" /></a><br />
I&#8217;m not sure that the Jython folks have done anything like this.   And I&#8217;m not sure they should.   It&#8217;s a solution python folks don&#8217;t really have.  Django used to have some thread-safety issues, but those <a href="http://groups.google.com/group/django-users/msg/484af837e2e08cf9">have been worked out</a> on some level.  While the Django people aren&#8217;t promising anything about thread safety,  it seems that there are enough people using it in a multi-threaded environment to notice if anything&#8217;s not working right.   </p>
<p>At the same time, TurboGears has been threadsafe, from the beginning, as has Pylons, Zope, and many other python web dev tools.  The point is, you have good web-framework options, without resorting to multiple python environments in one JVM. </p>
<p><strong>Why you actually want multi-threaded execution&#8230;<br />
</strong></p>
<p>In TurboGears we&#8217;ve found that the combination of <em>both multi-threaded and multi-process</em> concurrency works significantly better than either one would alone. This allows us to use threads to maximize the throughput of one process up to the point where python&#8217;s interpreter lock becomes the bottleneck, and use multi-processing to scale beyond that point, and to provide additional system redundancy. </p>
<p>A multi threaded system is particularly important for people who use Windows, which makes multi-process computing much more memory intensive than it needs to be. As my Grandma always said Windows &#8220;can&#8217;t fork worth a damn.&#8221;  ;)  </p>
<p>But, given how hard multi-threaded computing can be to get right TurboGears and related projects work hard to keep our threads isolated and not manipulate <em>any</em> shared resources across threads.  So, really it&#8217;s kinda like shared-memory optimized micro-processes running inside larger OS level processes, and that makes multi-threaded applications a lot more reasonable to wrap your brain around.   Once you start down the path of lock managment the non-deterministic character of the system can quickly overwhelm your brain.  </p>
<p>As far as i can see, the same would be true for a Ruby web server in Ruby 1.9, where there is both OS level thread support and an interpreter lock. </p>
<p>I&#8217;m well aware of the fact that stackless, twisted, and Nginx have proved that there are other (asynchronous) methods that can easily outperform the multi-threaded+multi-process model throughput/concurrency per unit of server hardware.   The async model requires thinking about the problem space pretty differently, so it&#8217;s not a drop in replacement, but for some problems async is definitely <em>the</em> way to go.  </p>
<p>Anyway, hats off to the Jruby team, and here&#8217;s hoping that Rails itself becomes threadsafe at some point in the future. </p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2008/05/14/threads-processes-rails-trubogears-and-scalability/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>So many revolutions, so little time.</title>
		<link>http://compoundthinking.com/blog/index.php/2008/04/30/so-many-revolutions-so-little-time/</link>
		<comments>http://compoundthinking.com/blog/index.php/2008/04/30/so-many-revolutions-so-little-time/#comments</comments>
		<pubDate>Wed, 30 Apr 2008 16:28:22 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
				<category><![CDATA[IT Management]]></category>
		<category><![CDATA[Lean IT]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[SE Michigan Tech]]></category>
		<category><![CDATA[TurboGears]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/?p=305</guid>
		<description><![CDATA[Tim Bray is blogging about &#8220;inflection points&#8221; in the uptake of various technologies. Python get&#8217;s a very positive review: Today you’d be nuts not to look seriously at PHP, Python, and Ruby. So, the rise of the so-called scripting languages is one of the inflection points, but it&#8217;s not the only one. He singles out [...]]]></description>
			<content:encoded><![CDATA[<p>Tim Bray is blogging <a href="http://www.tbray.org/ongoing/When/200x/2008/04/24/Inflection">about &#8220;inflection points&#8221;</a> in the uptake of various technologies. </p>
<p>Python get&#8217;s a very positive review: </p>
<blockquote><p>Today you’d be nuts not to look seriously at PHP, Python, and Ruby.</p></blockquote>
<p>So, the rise of the so-called scripting languages is one of the inflection points, but it&#8217;s not the only one.  </p>
<p>He singles out web-framework development as one place where there&#8217;s a lot of stuff happening, and a lot of new &#8220;rails-like&#8221; frameworks are cropping up all the time.   TurboGears will live or die in the context of a much larger web-development revolution, and we need to be prepared to make our way forward in the midst of that. </p>
<p>What comes after rails will not be a rails clone.  It will learn the right lessons from rails, avoid the pitfalls of rails, but it will also need to carve out something new and better than rails.    For RDBMS users, I think the key difference between TG and Rails is the power and flexibility of SQLAlchemy.   We need to &#8220;sell&#8221; this better.</p>
<p>There are a lot of other revolutions coming <a href="http://www.tbray.org/ongoing/When/200x/2008/04/24/Inflection">according to Tim</a>.   And I do think we&#8217;re looking at big changes in terms of everything from programming language choice, to web-development tools, to end-user desktops, and data persistence mechanisms.    We&#8217;re also just beginning to see what the world of high-end javascript and other &#8220;rich&#8221; internet applications is going to do to our view of end-user software.  </p>
<p>He doesn&#8217;t even mention the rise of EC2 and the Google App Engine as sea-changes in the way we buy computational resources, and I think that&#8217;s going to have a huge impact.  </p>
<p>In the end my prediction is that the way we develop applications will change more in the next 5 years than it did in the last 5, and it&#8217;s time to start getting our heads wrapped around these issues, or we&#8217;ll be left behind. </p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2008/04/30/so-many-revolutions-so-little-time/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>TurboGears 2 sprint</title>
		<link>http://compoundthinking.com/blog/index.php/2007/10/15/turbogears-2-sprint/</link>
		<comments>http://compoundthinking.com/blog/index.php/2007/10/15/turbogears-2-sprint/#comments</comments>
		<pubDate>Mon, 15 Oct 2007 13:43:36 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
				<category><![CDATA[IT Management]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[TurboGears]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/index.php/2007/10/15/turbogears-2-sprint/</guid>
		<description><![CDATA[I&#8217;ll be hosting a TG2 sprint here in Ann Arbor Michigan on October 27th, hopefully we&#8217;ll also have a large virtual presence from folks around the world. I&#8217;ve created a page on the Wiki for Sprint Organization tasks: http://docs.turbogears.org/SprintOrganization If the sprint goes well it could get us very, very close to the point where [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ll be hosting a TG2 sprint here in Ann Arbor Michigan on <strong>October 27th</strong>, hopefully we&#8217;ll also have a large virtual presence from folks around the world. </p>
<p>I&#8217;ve created a page on the Wiki for Sprint Organization tasks: <a href="http://docs.turbogears.org/SprintOrganization">http://docs.turbogears.org/SprintOrganization</a></p>
<p>If the sprint goes well it could get us very, very close to the point where we could reasonably do a TurboGears 2 technology preview release.   </p>
<p>The main things we&#8217;ll need to do is sync up with the latest pylons, improve our tests, and do some basic doc organization work (migrate some information from the doc strings to the docs wiki, and create some pages which link to external docs).   There&#8217;s lots of other things I want to do like improve out user authentication/authorization/registration support, or create a toolbox tool for helping create SQLAlchemy models. So, there&#8217;s tasks for anybody who can lend a hand.  </p>
<p>If you&#8217;re available and want to help out (either attending physically or virtually), feel free to add your name to the <a href="http://docs.turbogears.org/SprintOrganization">wiki</a>.</p>
<p>Likewise, if you can host a in-person sprint in another location, please feel free to edit the wiki with that information.</p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2007/10/15/turbogears-2-sprint/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Relational Databases as an &#8220;implementaiton detail?&#8221;</title>
		<link>http://compoundthinking.com/blog/index.php/2007/09/29/relational-databases-as-an-implementaiton-detail/</link>
		<comments>http://compoundthinking.com/blog/index.php/2007/09/29/relational-databases-as-an-implementaiton-detail/#comments</comments>
		<pubDate>Sat, 29 Sep 2007 18:03:49 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[TurboGears]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/index.php/2007/09/29/relational-databases-as-an-implementaiton-detail/</guid>
		<description><![CDATA[I found this little tidbit in amidst the hugely overraught comment treads on Derik&#8217;s post describing his return to PHP from the wonderful world of Ruby on Rails: I loved the part about the database as an &#8220;implementation detail.&#8221; That sings to me. &#8211;Daniel Waite And, in spite of the poetic hyperbole of folks like [...]]]></description>
			<content:encoded><![CDATA[<p>I found this little tidbit in amidst the hugely overraught comment treads on<a href="http://www.oreillynet.com/ruby/blog/2007/09/7_reasons_i_switched_back_to_p_1.html"> Derik&#8217;s post</a> describing his return to PHP from the wonderful world of Ruby on Rails: </p>
<blockquote><p>I loved the part about the database as an &#8220;implementation detail.&#8221; That sings to me.</p></blockquote>
<p>&#8211;<a href="http://www.rabbitcreative.com/">Daniel Waite</a></p>
<p>And, in spite of the poetic hyperbole of folks like Daniel, I think relational databases exist for good reasons and knowing about how they work is a good thing.  Active record treats the database kinda like a big hash table in the sky, which is OK for some applications, but not so OK for others.</p>
<p>I find that large, complex apps have a way of growing in unexpected ways over time &#8212; and relational algebra is much better designed to handle unexpected requests for complex datasets than hash tables or even the most well designed objects.   SQL, and relational algebra are implementation details in the same way that using a hammer is an implementation detail in building a tree house.   Sure you can do without, but you will have a harder time, and will definitely <em>end up building a  different treehouse!</em><em><br />
</em><br />
<img align="left" src='http://compoundthinking.com/blog/wp-content/uploads/2007/09/istock_000002108956xsmall.jpg' alt='Database' /> </p>
<p>Don&#8217;t misunderstand me, Object&#8217;s are good things, and I sure as hell hope people understand them, use them, and make great software with them.  But relational algebra is a good thing too.   And it&#8217;s  become clear that any really good database toolkit can&#8217;t forsake one in favor of the other, and that&#8217;s why SQLAlchemy, Storm, DejaVu, and Hibernate are all better tools than Rails&#8217; Active Record.   </p>
<p>As for Derik&#8217;s original article.  In spite of all the brouhaha, Derek&#8217;s post basically says: &#8220;hey I liked Rails, and I learned a lot about good programming from it.  And ultimately it was easier to get my site rewrite done in PHP because I learned rails first.&#8221;   </p>
<p>I think it&#8217;s obvious that Rails could have done the job for Derek, but two things got in the way:</p>
<ul>
<li> everything was already in PHP so Rails wasn&#8217;t and incremental update, it was a rewrite.</li>
<li>Active Record got in the way of using SQL as a relational algebra engine, rather than a glorified hash persistence mechanism.</li>
</ul>
<p>TurboGears users should pay attention to both points.  If you have a large complex app, you&#8217;ll be better off with an ORM that treats SQL as a full partner, which is why we&#8217;re migrating the defaults to SQLALchemy which does a fantastic job of making <strong>both</strong> relatinal algebra, and object oriented programming part of it&#8217;s core. </p>
<p>The second point is much harder to deal with, but if you can wrap existing application functionality in a larger TurboGears app, and migrate it piece by piece you&#8217;ll definitely have more success.  I&#8217;ve been doing a lot of Web Service architecture stuff this year, and that&#8217;s proven to be a great way to connect existing resources to TurboGears applications. </p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2007/09/29/relational-databases-as-an-implementaiton-detail/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Change the World &#8212; One Program at a Time</title>
		<link>http://compoundthinking.com/blog/index.php/2007/05/23/change-the-world-one-program-at-a-time/</link>
		<comments>http://compoundthinking.com/blog/index.php/2007/05/23/change-the-world-one-program-at-a-time/#comments</comments>
		<pubDate>Wed, 23 May 2007 03:38:07 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/index.php/2007/05/23/change-the-world-one-program-at-a-time/</guid>
		<description><![CDATA[This is a very late comment about Pycon2007. At that conference one Ruby/Rails book author said something like; &#8220;I really like the vibe here. Everybody here is talking about making a difference, educating third world children, building better communities, and making the world a better place.&#8221; And he was setting this as a stark contrast [...]]]></description>
			<content:encoded><![CDATA[<p>This is a very late comment about Pycon2007.   </p>
<p>At that conference one Ruby/Rails book author said something like; &#8220;I really like the vibe here.   Everybody here is talking about making a difference, educating third world children, building better communities, and making the world a better place.&#8221;  And he was setting this as a stark contrast to his experience of RailsConf where &#8220;everybody was talking about how much money they made.&#8221; </p>
<p>On one level it&#8217;s hard to fault the Rails conf people for this.  Money does on some level validate what they&#8217;ve been doing, and it <em>is</em>good to feel that kind of validation.  </p>
<p>But, I think it&#8217;s fair to say that the Rails people have been too focused on proving something, and that has lead to a perception that many rails folks have a chip on their shoulder, or are totally focused on money as a metric of success.  The extent that some elements in the Rails community have embraced this perception (as <a href="http://www.martinfowler.com/bliki/RailsConf2007.html">mentioned</a> on Martin Fowler&#8217;s recent blog posting), is actually a bit frighting. </p>
<p>So, I think Chad is doing exactly the right thing by encouraging the Rails community to take a look at how they can improve their image.  A couple days ago Chad posted a blog entry entitled &#8220;<a href="http://www.chadfowler.com/2007/5/19/changing-the-world">Change the world</a>&#8221; and I hope that it makes an impact in the Rails community.  I definitely see Chad Fowler many of the other members of the Rails community that I know personally as good guys, and I&#8217;d like to see the current negative stereotyping of the rails community come to an end.    </p>
<p>I&#8217;d like to see the Rails community as a whole step up to the plate, and focus their attention and marketing efforts on new projects with altruistic goals.  Turn the whold Buzz machine towards something that will really change people&#8217;s lives &#8212; replacing Java just isn&#8217;t a worthwhile goal when compared with helping to feed hungry people. </p>
<p>So, in the hope that a little good natured competition can spur things forward, I&#8217;d just like to mention that I think the Python community is beating the pants off of the rails community in the change the world department.  Here are a couple of projects that I could think of off of the top of my head which the Python community is working on:  </p>
<ul>
<li><a href="http://irrepressible.info/">Irrepressible.info</a> &#8212; which is focused on fighting censorship</li>
<li>the <a href="http://www.laptop.org/">OLPC project</a> &mdash; which aims to bring better educational materials to millions of underprivileged childeren around the world</li>
<li>the <a href="http://www.openplans.org/">Open Planning Project </a>&#8211; which aims to provide tools for grass roots community improvement tools.</li>
</ul>
<p>On another note, over the last 6 months or so Compound Thinking has been been working for Philantech on a project called <a href="http://www.philantech.com/products.htm">PhilanTrack</a> which takes a slightly different tack.   The goal of the Philantrack project is to make it easier to manage the process of giving, receiving and reporting on grants.   </p>
<p>The idea is that &#8220;greasing the wheels&#8221; of grant giving, and allowing non-profit organizations to focus more on <em>doing the work</em>, will make the nonprofits more efficient, more fun, and ultimately make the world a better place.</p>
<p>We may not think about it, but we geeks have a lot of individual power, and collectively we really can make the world a better place.  If you&#8217;re working on a Rails or Python app that can change the world for the better, drop a comment here and let us all know. </p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2007/05/23/change-the-world-one-program-at-a-time/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Code Mash</title>
		<link>http://compoundthinking.com/blog/index.php/2006/11/27/code-mash/</link>
		<comments>http://compoundthinking.com/blog/index.php/2006/11/27/code-mash/#comments</comments>
		<pubDate>Mon, 27 Nov 2006 00:10:38 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
				<category><![CDATA[Lean IT]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[SE Michigan Tech]]></category>
		<category><![CDATA[TurboGears]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/index.php/2006/11/27/code-mash/</guid>
		<description><![CDATA[Some friends of mine are putting together a non-denominational developers conference called code-mash in Ohio this January. Looks like Python and Ruby are both going to have a good number of talks. I&#8217;ll be talking about SQLAlchemy, which is the best object relational mapper I&#8217;ve ever seen. There&#8217;ll be talks about Test Driven Development in [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.codemash.org"><img id="image174" align = "right" src="http://compoundthinking.com/blog/wp-content/uploads/2006/11/codemash_logo1.jpg" alt="CodeMashLogo" /></a>Some friends of mine are putting together a non-denominational developers conference called <a href="http://www.codemash.org/">code-mash</a> in Ohio this January.   </p>
<p>Looks like Python and Ruby are both going to have a good number of talks.   I&#8217;ll be talking about SQLAlchemy, which is the best object relational mapper I&#8217;ve ever seen.  There&#8217;ll be talks about Test Driven Development in Python, Enterprise Architectural Patterns for Python developers, along with lots of cool talks about Lean Software Development, the side benefits of Test Driven development. </p>
<p>You can still submit a talk proposal before November 30th, and you&#8217;ll get free room and board.  I think it would be great to see somebody talk about Dabo and Desktop application Development in Python, and they seem to be missing any talk about OSX/Cocoa stuff, which I&#8217;m sure is because they haven&#8217;t had any proposals yet. </p>
<p>It would also be nice to see a good cross platform development with Mono talk&#8230; </p>
<p>I&#8217;m really excited by the opportunity to get developers of all kinds together and talk about how to be productive and learn more about the strengths and weaknesses of the various tools/frameworks people are using. </p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2006/11/27/code-mash/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Will Ruby and Rails save my IT Department?</title>
		<link>http://compoundthinking.com/blog/index.php/2006/04/24/will-ruby-and-rails-save-my-it-department/</link>
		<comments>http://compoundthinking.com/blog/index.php/2006/04/24/will-ruby-and-rails-save-my-it-department/#comments</comments>
		<pubDate>Mon, 24 Apr 2006 07:42:34 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
				<category><![CDATA[IT Management]]></category>
		<category><![CDATA[Lean IT]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/index.php/2006/04/17/will-ruby-and-rails-save-my-it-department/</guid>
		<description><![CDATA[My client is not an IT person and he knows nothing about programming&#8230;. I started sharing [Ruby on Rails] with him&#8230;. About ten minutes into my presentation he interrupted me and said, &#8220;So, this could save my IT department, couldnâ€™t it?&#8221; This is from Dave Thomas&#8217; blog, where he is quoting an e-mail where Eric [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>My client is not an IT person and he knows nothing about programming&#8230;. I started sharing [Ruby on Rails] with him&#8230;. About ten minutes into my presentation he interrupted me and said, &#8220;So, this could save my IT department, couldnâ€™t it?&#8221;</p></blockquote>
<p>This is from <a href="http://blogs.pragprog.com/cgi-bin/pragdave.cgi/Tech/Ruby/RailsIsMore.rdoc">Dave Thomas&#8217; blog</a>, where he is quoting an e-mail where Eric Knapp just gushes about the possibilities that Rails brings to the table.   It seems nice enough, and everybody is well intentioned.  But, I must admit I have my doubts.  First of all, it sounds like a thousand non-technical managers getting sold on some new technology without taking time to understand the real life benefits and risks.</p>
<p>But it goes further than that, <em>I doubt that Rails will ever save anybody&#8217;s IT department.</em></p>
<p>Can it make IT departments more productive?  Absolutely.   But when a department is <em>broken</em> that&#8217;s not usually just because they have bad tools, it&#8217;s because the staff either aren&#8217;t interested in finding better tools, or they are crippled by organizational red tape, or they are too afraid to tell management that the current tools suck.</p>
<blockquote><p>&#8220;Whatever they say the problem is, it&#8217;s always a people problem.&#8221;<br />
&#8211; Gerald Weinberg</p></blockquote>
<p>Rails, TurboGears, Django,  Plone, and even Zope and EJB 3 all offer the hope of more productive web development.  Better tools <em>are</em> important.  But a growing, healthy, team can discover, evaluate and when necessary  the fit between these new tools and their current projects is <em>the critical factor</em> in long term success.</p>
<p>Rails may appear to be the world saving framework today.  But it is not the end of the road, people are hard at work inventing better tools (for example, SQLAlchemy is poised to become a far better Dynamic Language based ORM than ActiveRecord), and if your team can&#8217;t evaluate new tools as they come they will end up stuck when Ruby on Rails is surpassed by other tools.</p>
<p>If you Rails is the end of the line, rather than just a remarkable jump forward &#8211;which will itself be left behind by new tools in the future &#8212; you&#8217;ve been fooled by the hype machine.</p>
<p>By the way, since I&#8217;ve noticed a few people in the Rails/Ruby community have a thin skin, this whole post should in no way be understood anti-rails.  The problem is not the technology it is the marketing and the the uncontrolled hype which doesn&#8217;t admit the limitations of the technology.</p>
<p>But, in the same way that Rails won&#8217;t save your IT Department, TurboGears will not save you, nor will Zope, or EJB 3.</p>
<p><strong>You have to save yourselves by becoming a place where software teams have the freedom to learn, grow and experiment with new tools.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2006/04/24/will-ruby-and-rails-save-my-it-department/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python, Ruby, Rails and Readability</title>
		<link>http://compoundthinking.com/blog/index.php/2006/04/17/python-ruby-rails-and-readability/</link>
		<comments>http://compoundthinking.com/blog/index.php/2006/04/17/python-ruby-rails-and-readability/#comments</comments>
		<pubDate>Mon, 17 Apr 2006 21:26:31 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/index.php/2006/04/17/python-ruby-rails-and-readability/</guid>
		<description><![CDATA[When developing code you should always choose readability over convenience. Code will be read many, many more times than it is written&#8230; &#8211;Practices of an Agile Developer by Venkat Subramaniam Andy Hunt This quote from Ruby advocate and Rails book author Andy Hunt, explains why I work in Python even though Ruby has anonymous blocks [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>When developing code you should always choose readability over convenience.   Code will be read many, many more times than it is written&#8230;</p>
<p>&#8211;<strong>Practices of an Agile Developer</strong> by Venkat Subramaniam Andy Hunt</p></blockquote>
<p>This quote from Ruby advocate and Rails book author <a href="http://www.toolshed.com/blog/articles/2006/04/10/practices-of-an-agile-developer-now-available">Andy Hunt</a>, explains why I work in <a href="http://compoundthinking.com/blog/wp-admin/www.python.org">Python</a> even though <a href="http://compoundthinking.com/blog/wp-admin/ruby.org">Ruby</a> has anonymous blocks and slightly less historical baggage than Python.</p>
<p>I  recently taught a couple of free introductory classes, one for Python and another for Ruby. People with little experience in either language, could quickly read Python code.  But with Ruby &#8212; and Rails in particular &#8212; there is so much heavy use of the &#8220;power features&#8221; of the language &#8212; like dynamic classes &#8212; that code readability was severely compromised.  New programmers were quickly confused and lost.  There were lots of &#8220;where does this happen&#8221; questions. <a href="http://www.loudthinking.com/">Dave Heinemeier Hanson</a> carries most of the blame here: Rails is built on his philosophy that values &#8220;convention always trumps configuration&#8221; and &#8220;less code is better&#8221; so highly that other critical considerations like the value of locality and orthogonality play in making code readable.   In my view this is a serious mistake. After all, <em>Code is read more often than it is written!</em></p>
<p>Wherever possible methods should be understandable on their own.  No matter how powerful dynamic classes and objects are, using them means there will always becode elsewhere in your system that changes the behavior of the code you write &#8212; that means you have to<em> know about </em>and <em>understand</em> all of that elsewhere just to understand &#8212; and debug &#8212; the object in front of you.<br />
For example, Rails has this nifty feature where Database classes map to table names that are the plural of the class name.  This auto-pluralization like other Rails hacks is cute and fun at first, and it certainly makes the surface of the code shiny and pretty, but it also creates a layer of indirection and &#8220;magic&#8221; that obscures what is happening under the covers.</p>
<p>Of course, sometimes you have to make hard choices and it&#8217;s worth sacrificing code readability for other concerns.   I&#8217;m not disputing that, I&#8217;m just saying the code you write &#8212; if it&#8217;s used and maintained &#8212; is going to be read many, many more times than it is written.   So, you ought to optimize for the code reading experience, and more than any other language I&#8217;ve used, Python is designed just that.</p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2006/04/17/python-ruby-rails-and-readability/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Framework Comparison Video</title>
		<link>http://compoundthinking.com/blog/index.php/2006/03/10/framework-comparison-video/</link>
		<comments>http://compoundthinking.com/blog/index.php/2006/03/10/framework-comparison-video/#comments</comments>
		<pubDate>Fri, 10 Mar 2006 16:52:19 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[TurboGears]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/index.php/2006/03/10/framework-comparison-video/</guid>
		<description><![CDATA[Sean Kelly has posted an interesting comparison (warning 60 min video!) of Rails, TurboGears, Django, Plone, and Java Sevlets/JSP, and full fledged J2EE development. There is a lot of interesting commentary on this movie floating around out there, so I thought it might be worth while to try to gather some of that commentary in [...]]]></description>
			<content:encoded><![CDATA[<p>Sean Kelly has posted an <a href="http://oodt.jpl.nasa.gov/better-web-app.mov">interesting comparison</a> (warning 60 min video!) of Rails, TurboGears, Django, Plone, and Java Sevlets/JSP, and full fledged J2EE development.</p>
<p>There is a lot of interesting commentary on this movie floating around out there, so I thought it might be worth while to try to gather some of that commentary in one place.</p>
<p>Overall, I think<strong> </strong>the message of the video is: <strong>The &#8220;Dynamic Language Frameworks&#8221; are all demonstrably better than their Java counterparts for web based application development.  </strong>These frameworks allow you to make small incremental changes to the user interface as you test your ideas with real users.</p>
<p><strong>And this conclusion is exactly right</strong> &#8212; user interface design is hard, and it requires the ability to iterate and deploy incremental improvements.<br />
But before I move on to other people&#8217;s commentary, let me say a couple of things from my own perspective:</p>
<ol>
<li>Plone rocks for a certain set of problems, which it can solve out of the box.</li>
<li>Sean uses TurboGears 0.8.  Had he used the newly released 0.9 he would have been able to get authentication and automatic CRUD. Someone made his application with something like 9 lines of TG 0.9 code! :)</li>
<li>Rails and Django also have internationalization frameworks now too (For those of you where this is important, I think Django and TurboGears do internationalization better than Rails because of Python&#8217;s Unicode support).</li>
<li>His application is pretty trivial &#8212; a real test for these applications would look better for the TurboGears framework.</li>
</ol>
<p>On the web people have been saying (I&#8217;ll do my best to be complete, and get the attribution right):</p>
<ul>
<li>
<div class="discussBody">He&#8217;s very kind to Zope/Plone, if you step out of the Plone box then the cliff is indeed there but if you stay inside Plone everything tends to look like Plone and act like Plone and that isn&#8217;t that useful. That said, I&#8217;m sticking with Zope. &#8212; <a rel="nofollow" title="http://sliver.objective2k.com" href="http://sliver.objective2k.com/">Simon Lucy</a></div>
</li>
<li>This Lessig-style presentation is mostly good, especially if you want to compare J2EE to web frameworks in general&#8230; it clearly shows how using any of these frameworks will drastically decrease your development time and lines of code, and generally make your life a lot more fun. &#8212; <a href="http://jeffcroft.com/blog/links/archives/design/web/index.php">Jeff Croft</a></li>
<li>I should point out, though, that his version of  Django was a little outdated, and his impressions  of it had a few inaccuracies.  Django&#8217;s got  excellent i18n support, and for a while now it&#8217;s  been able to use it without a database.<em> Still, as long as someone&#8217;s not using J2EE, that&#8217;s  a win for all of us dynamic-language freaks :) </em> &#8212; <a href="http://www.jacobian.org/">Jacob Kaplan-Moss</a></li>
</ul>
<p>My complaint (and it is a minor one) is that Sean seems to get a lot of things wrong about TurboGears, Django, and Rails, so it&#8217;s not very good at providing insight into which of these frameworks is going to be the best fit for your particular needs.</p>
<p>Most of the problems I have with his analysis stem from the fact that these three &#8220;dynamic language frameworks&#8221; are growing and evolving very quickly.</p>
<p>TurboGears, Rails, Django, Plone, and Zope 3 are building the future today.   I&#8217;m most connected with the future of TurboGears, and I have to say that the changes that are coming present a lot of exciting possibilities.   If this is any indication of what is happening in Django, Zope and Rails, then the future of Python web development frameworks looks very bright indeed.</p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2006/03/10/framework-comparison-video/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
<enclosure url="http://oodt.jpl.nasa.gov/better-web-app.mov" length="396866253" type="video/quicktime" />
		</item>
		<item>
		<title>Ruby on Rails class</title>
		<link>http://compoundthinking.com/blog/index.php/2006/02/15/ruby-on-rails-class/</link>
		<comments>http://compoundthinking.com/blog/index.php/2006/02/15/ruby-on-rails-class/#comments</comments>
		<pubDate>Wed, 15 Feb 2006 04:55:45 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/index.php/2006/02/15/ruby-on-rails-class/</guid>
		<description><![CDATA[The folks over at the Ruby users group have decided to hold a Ruby on Rails class for free. Patrick Hurley will do the heavy lifting for the class, and Humantech is supplying space for us to use for the class. Patrick has significant Rails experience in real-world enterprise deployments, and I for one am [...]]]></description>
			<content:encoded><![CDATA[<p>The folks over at the <a href="http://www.rubymi.org/index.php?title=Southeast_Michigan_Ruby_Users_Group">Ruby users group</a> have decided to hold a Ruby on Rails class for free.  <a href="http://blog.hurleyhome.com/">Patrick Hurley </a>will do the heavy lifting for the class, and Humantech is supplying space for us to use for the class.  Patrick has significant Rails experience in real-world enterprise deployments, and I for one am looking forward to hearing what he has to teach.</p>
<p>The class is scheduled for the afternoons of Saturday, March 11 and Saturday, March 25.</p>
<p>If you would like to enroll in the class all you have to do is:</p>
<p>1. Go to <a href="http://compoundthinking.com/classes/course/index.php">Compound Thinking&#8217;s course site</a><br />
2. Click on &#8220;Ruby on Rails&#8221;.<br />
3. Create an account (if you don&#8217;t have one already!).<br />
4. When prompted for the enrollment key, enter &#8220;rubymi-222&#8243;.</p>
<p>For now at least, this class is Ann Arbor&#8211;In Person only.</p>
<p>The first 25 people to sign up get in, so even if you sign up, you might not get a seat, since I have to close enrolment manually when the class gets full, but if you do enroll, and we don&#8217;t have room, I&#8217;ll let you know as soon as possible.</p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2006/02/15/ruby-on-rails-class/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MVC, Smalltalk and the Web</title>
		<link>http://compoundthinking.com/blog/index.php/2006/01/03/mvc-smalltalk-and-the-web/</link>
		<comments>http://compoundthinking.com/blog/index.php/2006/01/03/mvc-smalltalk-and-the-web/#comments</comments>
		<pubDate>Tue, 03 Jan 2006 16:45:55 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[TurboGears]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/?p=53</guid>
		<description><![CDATA[So, I&#8217;ve been writing the MVC paradigm recently as part of the TurboGears book, and the process has been interesting. MVC has a long and illustrious history, and it seems like it now has as many definitions as there are are books/articles that discuss it. There are a million MVC based frameworks out there, from [...]]]></description>
			<content:encoded><![CDATA[<p>So, I&#8217;ve been writing the MVC paradigm recently as part of the TurboGears book, and the process has been interesting.    MVC has a long and illustrious history, and it seems like it now has as many definitions as there are are books/articles that discuss it.  There are a million MVC based frameworks out there, from TurboGears, Rails, Struts, and WebObjects, to Cocoa.  And the frustrating/interesting/enlightening thing is that each of these environments implements MVC slightly differently, and those differences reflect significantly different understandings of what is core to the MVC paradigm.   </p>
<p>My quest for a unified explanation of MVC lead me back to the original SmallTalk implementation which was codified in Smalltalk-80.   But that adds another layer of complexity to the problem of describing MVC, because Smalltalk-80 controllers did things that are now taken care of entirely outside of all of the modern MVC frameworks.   For example, the controller was responsible for dealing with keypress and mouse click events &#8212; and doing something sensible with them.   Now days the OS, and drivers, and window-managers take care of all of that, leaving a Smalltalk-80 controller without much to do.</p>
<p>And that, I think, is one of the key reasons that MVC has mutated so much over the last dozen or so years.   The original architectural pattern was created to &#8212; among other things &#8212; solve the problem of where to put all the event-interpretation code that is necessary when your code is directly responsible for dealing with user input events.   Now that we have mouse drivers, windows management systems, and a whole layer of GUI abstraction code between our users and the events there isn&#8217;t anywhere near as much need to keep &#8220;controller code&#8221; partitioned off in it&#8217;s own corner.  </p>
<p>Another key component of the early version of MVC in Smalltalk that is different than what we find in &#8220;modern versions&#8221; is the observer relationship between Views and Models.   In the original design views either poll, or subscribe to, models and automatically change what the user sees whenever the model is updated.   But  at least with web based MVC is that it is no longer feasible (well, at least until Ajax came along).   So, as a sort of natural evolution, Controllers gained responsibility for sending status updates first to the model after a user event, and the also for telling the view to publish that updated data to the user.</p>
<p>This is natural, and sort of sensible, because much of the complexity of Smalltalk-80 style controllers had already been abstracted away, so it&#8217;s not really that painful to add a bit of &#8220;glue code&#8221; to the controller.  So, anyway you can trace the history of this evolution through Objective-C, and NextStep, to Cocoa, WebObjects and Struts.  With the controller being seen increasingly as &#8220;the glue that holds models and views together&#8221; in addition to its original purpose as &#8220;the code that processes user actions.&#8221;   </p>
<p>OK, so given that this evolution has taken place, how is that reflected in all of the new &#8220;full-stack frameworks&#8221; we are seeing today.   </p>
<p>I&#8217;m only deeply familiar with TurboGears and Rails, and both of them allow you to use model objects directly from your View code, so they are somewhat more like Smalltalk-80 than their older brother Struts.   But, rails goes further by making it trivially easy to call Models from your view &#8212; everything is even magically imported s all you need to do is call the objects.  TurboGears has so such magic, so if you want direct access to your model objects you have to import them (which is a single line of code).   But it is often easier to just have your controller pass a dictionary of all the data you need into the view when it is called.  </p>
<p>This is also a clear reflection of the Rails &#8220;convention over configuration&#8221; philosophy informing David&#8217;s view of MVC, while Python&#8217;s &#8220;Explicit is better than implicit&#8221; philosophy informs Kevin&#8217;s interpretation of the &#8220;same&#8221; design pattern.   It&#8217;s hard to say which is better, but my experience was that it was really, really, really easy to do easy things in Rails, but then I had to figure out &#8220;how the magic works&#8221; before I felt comfortable venturing out from there.   TurboGears, on the other hand took a little longer to get started, but then the learning curve was comparatively easier for moving on to more complex stuff,  because everything was visible and I knew exactly where to look to find out more about how each of the pieces worked.     </p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2006/01/03/mvc-smalltalk-and-the-web/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ruby and Python (Can&#8217;t we all just get along?)</title>
		<link>http://compoundthinking.com/blog/index.php/2005/12/19/ruby-and-python-cant-we-all-just-get-along/</link>
		<comments>http://compoundthinking.com/blog/index.php/2005/12/19/ruby-and-python-cant-we-all-just-get-along/#comments</comments>
		<pubDate>Mon, 19 Dec 2005 14:33:00 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/?p=39</guid>
		<description><![CDATA[Over on Loud Thinking, David Hanson creator of Rails, seems pretty frustrated with Bruce Eckel&#8217;s recent blog post about Ruby, Rails, Python and Tate&#8217;s Beyond Java book. &#8220;I&#8217;m losing track of the ill-conceived comparisons, but I do know what&#8217;s astoundingly clear: Bruce Eckel doesn&#8217;t like Ruby, he doesn&#8217;t like the attention its getting, and he [...]]]></description>
			<content:encoded><![CDATA[<div style="clear:both;"></div>
<p>Over on <a href="http://www.loudthinking.com/">Loud Thinking</a>, David Hanson creator of <a href="http://www.rubyonrails.com/">Rails</a>, seems pretty frustrated with Bruce Eckel&#8217;s recent <a href="http://www.artima.com/weblogs/viewpost.jsp?thread=141312">blog post</a> about Ruby, Rails, Python and Tate&#8217;s <a href="http://www.amazon.com/gp/product/0596100949/002-2477326-8950405?v=glance&#038;n=283155">Beyond Java</a> book.<br />
<blockquote>&#8220;I&#8217;m losing track of the ill-conceived comparisons, but I do know what&#8217;s astoundingly clear: Bruce Eckel doesn&#8217;t like Ruby, he doesn&#8217;t like the attention its getting, and he doesn&#8217;t like people such as Bruce Tate fueling that attention.&#8221;</p></blockquote>
<p>Bruce isn&#8217;t a huge fan of Ruby, but he doesn&#8217;t slam it either. So he does have some critical things to say, but on the other hand, here are a few quotes where he praises Ruby and Rails:<br />
<blockquote>Clearly Ruby is making important contributions to the programming world.</p></blockquote>
<blockquote><p>Rails approach isn&#8217;t the ultimate solution; there will be plenty of other problems that we need to solve on the way to making web development easy. But it represents a fundamental restart in the thinking process.</p></blockquote>
<p>He does however criticize Tate&#8217;s <span style="font-style: italic;">Beyond Java</span> for announcing Ruby to the be the successor to Java without considering Python in any depth. And from what I can tell this is a reasonable critique of that book.</p>
<p>I know that a while ago on the Ruby list there where some quotes from one of Bruce&#8217;s posts which were not favorable to Ruby. And there might some bad blood from those quotes. But that post is no longer available in it&#8217;s entirety, and the only thing left is a few out of context quotes on the Ruby mailing list.</p>
<p>So, as far as I&#8217;m concerned the Ruby folks should get over it, and start engaging Bruce in a reasonable dialog. Especially since his current stance is that Ruby is nice, but he&#8217;s not yet convinced that there&#8217;s enough benefit to switching to let go of the advantages (and yes there are some!) of Python.
<div style="clear:both; padding-bottom: 0.25em;"></div>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2005/12/19/ruby-and-python-cant-we-all-just-get-along/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Bruce Eckel on Python and Rails</title>
		<link>http://compoundthinking.com/blog/index.php/2005/12/19/bruce-eckel-on-python-and-rails/</link>
		<comments>http://compoundthinking.com/blog/index.php/2005/12/19/bruce-eckel-on-python-and-rails/#comments</comments>
		<pubDate>Mon, 19 Dec 2005 14:08:00 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[TurboGears]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/?p=40</guid>
		<description><![CDATA[Over on Artema.com Bruce Eckel reviews Beyond Java and is somewhat critical of the way that Bruce Tate jumps on the Ruby bandwagon without considering the merits of other languages, and python in particular. I agree that a book like Beyond Java ought to be looking more deeply into the future alternatives before declaring a [...]]]></description>
			<content:encoded><![CDATA[<div style="clear:both;"></div>
<p>Over on <a href="http://www.artima.com/">Artema.com</a> Bruce Eckel <a href="http://www.artima.com/weblogs/viewpost.jsp?thread=141312">reviews</a> <span style="font-style: italic;">Beyond Java </span>and is somewhat critical of the way that Bruce Tate jumps on the Ruby bandwagon without considering the merits of other languages, and python in particular. I agree that a book like Beyond Java ought to be looking more deeply into the future alternatives before declaring a &#8220;winner.&#8221;</p>
<p>And while Ruby has a lot going for it (blocks), so does Python (mature libraries). I hope there is room for both in the post-java-as-a-tool-for-every-conceivable-job world, because I really like both languages.</p>
<p>Bruce also brings some much needed perspective to the Rails hype:<br />
<blockquote>I&#8217;m sure we will find that the Rails approach isn&#8217;t the ultimate solution &#8230; But it represents a fundamental restart in the thinking process. </p></blockquote>
<p> In other words, Rails is light-years better than what came before, but it isn&#8217;t at all likely to be better than what comes next.</p>
<p>And as far as what comes next in the Python community, Bruce has this to say:<br />
<blockquote>And [Rails] has caused, in the Python community, attention to Django, the development of Subway (although I don&#8217;t know how that one is faring), and the creation of <a href="http://www.turbogears.com/">TurboGears</a>, which seems like a very good solution because it builds on best-of-breed existing pieces using a Rails-inspired approach.</p></blockquote>
<p>TurboGears is my pick of the Python litter. And interestingly enough as far as TurboGears goes, the &#8220;rails-inspired&#8221; approach is less about API than marketing. Sure both frameworks are &#8220;full-stack&#8221; and both frameworks are &#8220;Ajax-enabled&#8221; and both frameworks include and easy to use ORM. But the syntax and developer workflow for the two projects is still pretty different.</p>
<p>But as for marketing, the <a href="http://www.blueskyonmars.com/">Kevin Dangoor</a> creator of TurboGears, learned a lot from the Rails folks about intelligent use of screencasts, and the need for a good looking web-site. But I also happen to know that both Kevin and <a href="http://www.loudthinking.com/">David</a> read the <a href="http://http//headrush.typepad.com/creating_passionate_users/2005/09/you_can_outspen.html"><span style="font-style: italic;">Creating passionate Users</span></a> blog, which is a good source of &#8220;marketing&#8221; ideas for framework developers.  </p>
<p>I think the most critical piece of marketing advice a framework designer could read is &#8220;<a href="http://headrush.typepad.com/creating_passionate_users/2005/09/you_can_outspen.html">You can&#8217;t out-spend or out-teach</a>.&#8221; I think the key to developing mindshare in &#8220;the coming framework wars&#8221; is not necessarily having the best framework with the cleanest code, and the most features. It will be which framework can grab a users attention long enough to teach them something significant, so they can actually start using the framework.
<div style="clear:both; padding-bottom: 0.25em;"></div>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2005/12/19/bruce-eckel-on-python-and-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

