<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-18401019</id><updated>2011-04-21T15:04:08.914-07:00</updated><category term='rails struts'/><title type='text'>Thinking in Code</title><subtitle type='html'>Ruby, Rails and that technothingee currently known as Web 2.0</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>30</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-18401019.post-4162535606032572077</id><published>2007-09-29T10:39:00.000-07:00</published><updated>2007-09-29T10:56:09.359-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails struts'/><title type='text'>Struts and JSF Creator is a Rails advocate now!</title><content type='html'>Most people who have worked with me are familiar with my distain for Struts (though it had provided a paycheck for many years) and my fanatical love for Rails.  It seems that Creig McClanahan, the creator of Struts is now in agreement.  The money quote from David, posting about Craig's talk at RailsConf Europe 2k7, "He even went as far as to say that developing web applications in Java after working with Rails would probably not be a particularly pleasant experience for him.".&lt;br /&gt;&lt;br /&gt;This from David Heinemeier Hansson, the creator of Ruby on Rails.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;The biggest surprise at RailsConf Europe 2007 was hearing Craig McClanahan from Sun speak. Craig is the creator of Struts, the original blockbuster web framework for Java, and more recently Java Server Faces. Not exactly an obvious advocate for Ruby on Rails, but he sure played the part well.&lt;br /&gt;&lt;br /&gt;And not just on a superficial level because Sun was a diamond sponsor of the conference, but from months of experience developing Rails applications using the latest techniques and frameworks (like pushing the envelope with Active Resource). He even went as far as to say that developing web applications in Java after working with Rails would probably not be a particularly pleasant experience for him. Wow.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href='http://www.loudthinking.com/posts/11-sun-surprises-at-railsconf-europe-2007'&gt;See more from David's blog&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-4162535606032572077?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/4162535606032572077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=4162535606032572077' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/4162535606032572077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/4162535606032572077'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2007/09/struts-and-jsf-creator-is-rails.html' title='Struts and JSF Creator is a Rails advocate now!'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-649820654965143225</id><published>2007-08-14T15:19:00.000-07:00</published><updated>2007-08-14T15:22:23.424-07:00</updated><title type='text'>ri in irb</title><content type='html'>The shortest route to accessing ri from you irb session. &lt;br /&gt;&lt;br /&gt;add the following to your .irbrc file&lt;br /&gt;&lt;code&gt;&lt;br /&gt;def ri(str); y `ri #{str}`;end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This is all that I require, but for more (much more), see&lt;br /&gt;&lt;a href="http://eigenclass.org/hiki.rb?irb+ri+completion"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-649820654965143225?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/649820654965143225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=649820654965143225' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/649820654965143225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/649820654965143225'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2007/08/ri-in-irb.html' title='ri in irb'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-1305763897710117407</id><published>2007-07-20T07:24:00.000-07:00</published><updated>2007-08-14T15:17:50.494-07:00</updated><title type='text'>has_one :through</title><content type='html'>Rails is missing the capability to have a has_one association via a link table.  I created this implementation that adds methods to add basic "has_one" support through a habtm association.&lt;br /&gt;&lt;br /&gt;The following method defines a new type of association that is currently &lt;br /&gt;missing in rails.  There is currently no way to have a &lt;br /&gt;has_one association when a join table is used. &lt;br /&gt;&lt;br /&gt;This association requires that a has_and_belongs_to_many &lt;br /&gt;association exists and adds methods to access the first&lt;br /&gt;element of the resulting array.&lt;br /&gt;&lt;br /&gt; Example:  Enrollments have one registration, but is &lt;br /&gt; modeled through the enrollments_registrations join table.&lt;br /&gt; There is already a "has_and_belongs_to_many :registrations"&lt;br /&gt; and the following operations are added &lt;br /&gt;(and perform as expected):&lt;br /&gt;  &lt;ul&gt;&lt;br /&gt;  &lt;li&gt;enrollment.registration  =&gt; enrollments.registrations.first&lt;/li&gt;&lt;br /&gt;  &lt;li&gt; enrollment.registration_id  =&gt; enrollments.registrations.first.id&lt;/li&gt;&lt;br /&gt;  &lt;li&gt; enrollment.registration=   will set the assocation, erasing any existing registration.&lt;br /&gt;       This method will  take an id or a registration object&lt;/li&gt;&lt;br /&gt;  &lt;li&gt; enrollment.registration_id=   like registration=, but takes an id&lt;/li&gt;&lt;br /&gt;  &lt;li&gt; enrollment.has_registration? =&gt; true or false as the case may be&lt;/li&gt;&lt;br /&gt;  &lt;/ul&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;def self.has_one_through_join_table(class_name)&lt;br /&gt;  class_name = class_name.to_s&lt;br /&gt;  has_many_association_name = class_name.pluralize&lt;br /&gt;      &lt;br /&gt;  # def registration&lt;br /&gt;  define_method(class_name) do&lt;br /&gt;   send(has_many_association_name).first&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  #def registration_id&lt;br /&gt;  define_method(class_name+"_id") do&lt;br /&gt;    send(class_name) ? send(class_name).id : nil &lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  # def registration=(id_or_object)&lt;br /&gt;  define_method(class_name+"=") do |id_or_object|&lt;br /&gt;    clazz = eval(class_name.classify)&lt;br /&gt;    # the has_and_belong_to_many association (i.e. registrations)&lt;br /&gt;    habtm = send(class_name.pluralize)&lt;br /&gt;    &lt;br /&gt;    if id_or_object.nil?&lt;br /&gt;       habtm.clear&lt;br /&gt;       return&lt;br /&gt;    end&lt;br /&gt;    &lt;br /&gt;    id_or_object = clazz.find(id_or_object) unless &lt;br /&gt;                              id_or_object.is_a?(clazz)&lt;br /&gt;    if id_or_object&lt;br /&gt;      habtm.clear  # can only have one object&lt;br /&gt;      habtm &lt;&lt; id_or_object&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  #def registration_id=(id)&lt;br /&gt;  define_method(class_name+"_id=") do |id| &lt;br /&gt;     send(class_name+"=", id)&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  # def has_registration?&lt;br /&gt;  define_method("has_#{class_name}?") do&lt;br /&gt;    ! send(class_name).nil?&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;end # has_many_through_join_table&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-1305763897710117407?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/1305763897710117407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=1305763897710117407' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/1305763897710117407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/1305763897710117407'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2007/07/hasone-through.html' title='has_one :through'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-116304252572077846</id><published>2006-11-08T19:16:00.000-08:00</published><updated>2006-11-08T19:22:05.730-08:00</updated><title type='text'>"The cheering can be heard not just in America itself but around the planet."</title><content type='html'>&lt;a href="http://commentisfree.guardian.co.uk/martin_kettle/2006/11/america_has_spoken.html"&gt;Martin Kettle of London's Guardian newspaper&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-116304252572077846?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/116304252572077846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=116304252572077846' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/116304252572077846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/116304252572077846'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2006/11/cheering-can-be-heard-not-just-in.html' title='&quot;The cheering can be heard not just in America itself but around the planet.&quot;'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-116216161497309240</id><published>2006-10-29T14:38:00.000-08:00</published><updated>2006-10-29T14:40:14.976-08:00</updated><title type='text'>My Boy!</title><content type='html'>&lt;style type="text/css"&gt;.flickr-photo { border: solid 2px #000000; }.flickr-yourcomment { }.flickr-frame { text-align: left; padding: 3px; }.flickr-caption { font-size: 0.8em; margin-top: 0px; }&lt;/style&gt;&lt;div class="flickr-frame"&gt; &lt;a href="http://www.flickr.com/photos/bethhaught/279259096/" title="photo sharing"&gt;&lt;img src="http://static.flickr.com/89/279259096_72851f8246.jpg" width="400" class="flickr-photo" alt="" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;span class="flickr-caption"&gt;&lt;a href="http://www.flickr.com/photos/bethhaught/279259096/"&gt;&lt;/a&gt;, originally uploaded by &lt;a href="http://www.flickr.com/people/bethhaught/"&gt;bethhaught&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;    &lt;p class="flickr-yourcomment"&gt; Beth keeps the photostream of Bran at &lt;a href="http://www.flickr.com/photos/bethhaught"&gt;her flickr site&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-116216161497309240?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/116216161497309240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=116216161497309240' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/116216161497309240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/116216161497309240'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2006/10/my-boy_116216161497309240.html' title='My Boy!'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-116216093478225565</id><published>2006-10-29T14:21:00.000-08:00</published><updated>2006-10-29T14:28:54.963-08:00</updated><title type='text'>Mom &amp; Dad (last day at the hospital)</title><content type='html'>&lt;a href="http://www.flickr.com/photos/bethhaught/232651765/" title="photo sharing"&gt;&lt;img src="http://static.flickr.com/80/232651765_d07329cd04_m.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/bethhaught/232651765/"&gt;Mom &amp;amp; Dad (last day at the hospital)&lt;/a&gt; &lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/bethhaught/"&gt;bethhaught&lt;/a&gt;.&lt;/span&gt;&lt;br clear="all" /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-116216093478225565?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/116216093478225565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=116216093478225565' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/116216093478225565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/116216093478225565'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2006/10/mom-dad-last-day-at-hospital.html' title='Mom &amp; Dad (last day at the hospital)'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-116215855900298891</id><published>2006-10-29T13:42:00.000-08:00</published><updated>2006-10-29T13:49:19.013-08:00</updated><title type='text'>Bran and Sleapytime Bear</title><content type='html'>&lt;a href="http://www.flickr.com/photos/bethhaught/279259067/" title="photo sharing"&gt;&lt;img src="http://static.flickr.com/105/279259067_e4fc3fa7b0_m.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/bethhaught/279259067/"&gt;&lt;/a&gt; &lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/bethhaught/"&gt;bethhaught&lt;/a&gt;.&lt;/span&gt;&lt;br clear="all" /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-116215855900298891?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/116215855900298891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=116215855900298891' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/116215855900298891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/116215855900298891'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2006/10/bran-and-sleapytime-bear.html' title='Bran and Sleapytime Bear'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-115212995181921443</id><published>2006-07-05T13:05:00.003-07:00</published><updated>2006-07-05T13:12:32.786-07:00</updated><title type='text'>A Great Patent Strategy</title><content type='html'>Via reddit..&lt;br /&gt;&lt;br /&gt;...  Another instance of the “disappearing polymorph” may be the anti-depressant, Paxil (U.S. brand name for the chemical paroxetine hydrochloride). No, self-replicating Paxil doesn’t naturally spread into our brains and make people happy for free. It's not "happy goo." On the contrary, self-replicating Paxil converted, according to one of the parties in the ensuing lawsuit, an old, and now off-patent, form of Paxil into a new, patented form of Paxil. Once the new form, the hemihydrate form of Paxil, was created, its crystals started floating about, converting small fractions of the old form, anhydrous Paxil, into hemihydrate. Both forms of the drug work equally well as an anti-depressant, but it became impossible to manufacture the off-patent anhydrate without some of it being converted into the patented form. Call it "patent goo."&lt;br /&gt;&lt;br /&gt;&lt;a href="http://unenumerated.blogspot.com/2005/11/patent-goo-self-replicating-paxil.html"&gt;Unenumerated: Patent goo: self-replicating Paxil&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-115212995181921443?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/115212995181921443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=115212995181921443' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/115212995181921443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/115212995181921443'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2006/07/great-patent-strategy.html' title='A Great Patent Strategy'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-114666676698811789</id><published>2006-05-03T07:32:00.000-07:00</published><updated>2006-05-04T00:38:49.236-07:00</updated><title type='text'>Tim Berners-Lee on Net Neutrality</title><content type='html'>&lt;blockquote&gt;The Internet is increasingly becoming the dominant medium binding us. The neutral communications medium is essential to our society. It is the basis of a fair competitive market economy. It is the basis of democracy, by which a community should decide what to do. It is the basis of science, by which humankind should decide what is true.&lt;br /&gt;&lt;br /&gt;Let us protect the neutrality of the net.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dig.csail.mit.edu/breadcrumbs/node/132"&gt;Neutrality of the Net&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-114666676698811789?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/114666676698811789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=114666676698811789' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/114666676698811789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/114666676698811789'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2006/05/tim-berners-lee-on-net-neutrality.html' title='Tim Berners-Lee on Net Neutrality'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-114442249726061641</id><published>2006-04-07T08:08:00.000-07:00</published><updated>2006-04-07T08:08:19.320-07:00</updated><title type='text'>Headless Apps - Using the Rails 1.1. Integration features as an API to your Rails app</title><content type='html'>Here's a nice and straight-forward walkthrough of using the new integration test capabilities of Rails 1.1 to interact with your app from the console.  I ran through my app (which has a similar login structure) and it really has the "It's just that easy!" feel..&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.clarkware.com/cgi/blosxom/2006/04/04#HeadlessApp"&gt;Mike Clark's Weblog&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-114442249726061641?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/114442249726061641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=114442249726061641' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/114442249726061641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/114442249726061641'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2006/04/headless-apps-using-rails-11.html' title='Headless Apps - Using the Rails 1.1. Integration features as an API to your Rails app'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-113628059768322353</id><published>2006-01-03T01:29:00.000-08:00</published><updated>2006-01-24T17:41:07.246-08:00</updated><title type='text'>Feynman the Explainer</title><content type='html'>Richard Feynman, explaining what was going on at &lt;i&gt;Thinking Machines Corporation&lt;/i&gt;..&lt;br /&gt;&lt;br /&gt;&lt;quote&gt;&lt;br /&gt;"We have noticed in nature that the behavior of a fluid depends very little on the nature of the individual particles in that fluid. For example, the flow of sand is very similar to the flow of water or the flow of a pile of ball bearings. We have therefore taken advantage of this fact to invent a type of imaginary particle that is especially simple for us to simulate. This particle is a perfect ball bearing that can move at a single speed in one of six directions. The flow of these particles on a large enough scale is very similar to the flow of natural fluids."&lt;br /&gt;&lt;/quote&gt;&lt;br /&gt;&lt;br /&gt;From Danniel Hillis's excellent account.&lt;br /&gt;&lt;a href="http://www.kurzweilai.net/articles/art0504.html?printable=1"&gt;Richard Feynman and The Connection Machine&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-113628059768322353?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/113628059768322353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=113628059768322353' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113628059768322353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113628059768322353'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2006/01/feynman-explainer.html' title='Feynman the Explainer'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-113468660167316269</id><published>2005-12-15T14:43:00.000-08:00</published><updated>2005-12-15T14:46:43.026-08:00</updated><title type='text'>Rails Migration Cheat Sheet</title><content type='html'>I've added a simple cheat sheet for Rails Database Migrations to my 'backpack'..&lt;br /&gt;&lt;a href="http://garrettsnider.backpackit.com/pub/367902"&gt;Rails Migration Cheat Sheet&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-113468660167316269?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/113468660167316269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=113468660167316269' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113468660167316269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113468660167316269'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2005/12/rails-migration-cheat-sheet.html' title='Rails Migration Cheat Sheet'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-113468365226667173</id><published>2005-12-15T13:54:00.000-08:00</published><updated>2005-12-15T13:54:17.456-08:00</updated><title type='text'>Adding options to rake tasks</title><content type='html'>I've been wondering how to call a rake task and pass it arguments.... just found it:&lt;br /&gt;&lt;br /&gt;the example is in the rails code source code (railties/lib/tasks/databases.rake) for migrations.  Normally you just call 'rake migrate' to come up to the current version.  But if you want to revert back to another database version, you would add "rake migrate VERSION=12" (or whatever version is appropriate).&lt;br /&gt;&lt;br /&gt;A quick look at the rails codebase has the migrate task as:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;task :migrate =&gt; :environment do&lt;br /&gt;  ActiveRecord::Migrator.migrate("db/migrate/", ENV["VERSION"] ? ENV["VERSION"].to_i : nil)&lt;br /&gt;  Rake::Task[:db_schema_dump].invoke if ActiveRecord::Base.schema_format == :ruby&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;&lt;br /&gt;It uses &lt;pre&gt;ENV["VERSION"]&lt;/pre&gt; which is just accesses the environment.&lt;br /&gt;So rake just uses the command line to set up environment variables.  Good to know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-113468365226667173?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/113468365226667173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=113468365226667173' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113468365226667173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113468365226667173'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2005/12/adding-options-to-rake-tasks.html' title='Adding options to rake tasks'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-113457993719862770</id><published>2005-12-14T09:05:00.000-08:00</published><updated>2005-12-14T09:06:50.613-08:00</updated><title type='text'>NEWSFLASH!!! ... Rails 1.0 is released! ... World Rejoices!</title><content type='html'>Rails has a fancy new frontpage, new screencasts, and lots of giddy developers.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://weblog.rubyonrails.org/articles/2005/12/13/rails-1-0-party-like-its-one-oh-oh"&gt;David's Announcement&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-113457993719862770?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/113457993719862770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=113457993719862770' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113457993719862770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113457993719862770'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2005/12/newsflash-rails-10-is-released-world.html' title='NEWSFLASH!!! ... Rails 1.0 is released! ... World Rejoices!'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-113402239136197438</id><published>2005-12-07T22:13:00.000-08:00</published><updated>2005-12-07T22:14:39.226-08:00</updated><title type='text'>Ruby Book Sales Surpass Python</title><content type='html'>From the "What's Upcoming" Department:&lt;br /&gt;&lt;br /&gt;I wish we could simply skip the annoying period of large companies dragging their feet on the adoption of Ruby as a post-Java language.  Tim O'Reilly checked the numbers and found that Ruby books are up 1552% and now surpass Python.&lt;br /&gt;&lt;br /&gt;This is important for people like me that waited a bit too long to switch from Java.  I saw Python and Ruby both as good options and didn't fully jump into either.  Learning a new language as a *primary language* is time and brain consuming enough that its not a lightweight matter.  You learn to think in that language.&lt;br /&gt;&lt;br /&gt;Luckily, with the popularity of Rails and the underlying "Zen Goodness" of Ruby, I'm hopefully optimistic that this stalemate will resolve itself on the side of Ruby.  Don't get me wrong, I like Python, but to make inroads into the Post-Java World (ok, maybe the Alongside Java World) we need a good single contender. &lt;br /&gt;&lt;br /&gt;Here's the O'Reilly Story: &lt;br /&gt;&lt;a href="http://radar.oreilly.com/archives/2005/12/ruby_book_sales_surpass_python.html"&gt;Ruby Book Sales Surpass Python"&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-113402239136197438?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/113402239136197438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=113402239136197438' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113402239136197438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113402239136197438'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2005/12/ruby-book-sales-surpass-python.html' title='Ruby Book Sales Surpass Python'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-113367516565302812</id><published>2005-12-03T21:46:00.000-08:00</published><updated>2005-12-03T21:52:50.540-08:00</updated><title type='text'>Why Ruby is an acceptable Lisp</title><content type='html'>Eric Kidd has a very nice posting + discussion going on about Ruby in relation to Lisp.  I frequently stare longingly at Lisp (and frolic now and again with the Little Schemer). My interest in Ruby (along with moving to Cambridge) have me thinking more and more about Lisp these days.  &lt;br /&gt;&lt;br /&gt;Eric thinks that Ruby's metaprogramming facilities give you power approaching macros - "80% of what you want from macros" - while the language syntax provides a "dense functional language", allowing the compact and clear description of the programming task.  While I cringe a bit at the term 'dense' here, Ruby's expressive properties are formidable (something that I discuss briefly in a comment to the post itself).&lt;br /&gt;&lt;br /&gt;The post is well worth reading, and the comments provide a nice range of opinion.  Plus there are lots of yummy code snippets!  &lt;br /&gt;&lt;br /&gt;&lt;a href="http://randomhacks.net/articles/2005/12/03/why-ruby-is-an-acceptable-lisp"&gt;http://randomhacks.net/articles/2005/12/03/why-ruby-is-an-acceptable-lisp&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-113367516565302812?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/113367516565302812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=113367516565302812' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113367516565302812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113367516565302812'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2005/12/why-ruby-is-acceptable-lisp.html' title='Why Ruby is an acceptable Lisp'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-113125328664831487</id><published>2005-11-05T21:01:00.000-08:00</published><updated>2005-11-05T21:01:26.673-08:00</updated><title type='text'>Read/Write Web: Top Ten Web 2.0 Problems Amazon Mechanical Turk Can Solve For Me</title><content type='html'>More Amazon Turk ideas from the Tongue/Cheek dept:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.readwriteweb.com/archives/002922.php"&gt;Read/Write Web: Top Ten Web 2.0 Problems Amazon Mechanical Turk Can Solve For Me&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-113125328664831487?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/113125328664831487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=113125328664831487' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113125328664831487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113125328664831487'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2005/11/readwrite-web-top-ten-web-20-problems.html' title='Read/Write Web: Top Ten Web 2.0 Problems Amazon Mechanical Turk Can Solve For Me'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-113123896730203878</id><published>2005-11-05T17:02:00.000-08:00</published><updated>2005-11-06T18:37:01.573-08:00</updated><title type='text'>Amazon Mechanical Turk</title><content type='html'>Ideas for Amazon Mechanical Turk&lt;br /&gt;&lt;br /&gt;This is IMHO, a groundbreaking capability that I ranted and raved about in the Web 1.0 days, noting that (1) it is a pretty big project to do, but (2) it basically is second to government in being able to tax elements of work at each step in the ‘value creation chain’. In Amazon’s case, they get 10% of any work effort. In any case, if this is done right and they don’t blow it, it’s part of the “bigger picture” and a fundamental change. Anyway, here are some ideas for the operations/”chunks” of work (feel free to add to):&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Book Chapter Audio Transcription: Read out loud and record this chapter.&lt;/li&gt;   &lt;br /&gt;&lt;li&gt;Blog transcription. Text to Podcast&lt;/li&gt;   &lt;br /&gt;&lt;li&gt;Does this image contain x? imageContains(“vehicle”, imageUri)&lt;/li&gt;   &lt;br /&gt;&lt;li&gt;Convert this outline/xml/yaml/json to a textual description&lt;/li&gt;   &lt;br /&gt;&lt;li&gt;paraphraseThis(text)Code Formatting/IV&amp;amp;V/Review:&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Does this code follow these rules. Here, the checks are broken into chunks and distributed, as is the set of code. It is broken up like a text message over UDP, distributed to lots of people (who get it into their queue and check it in one-five minutes for a few cents. It’s then returned, possibly packaged up as another workitem and returned.&lt;/li&gt;   &lt;br /&gt;&lt;li&gt;If language people are signed up, we could easily ask “what’s wrong with this bit of code” and get the hint that get us past it. (This one could also work more informally, with a ‘tip jar’ concept.&lt;br /&gt;  &lt;/li&gt;  &lt;br /&gt;&lt;li&gt;Blog comment verification!&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;For a general description:&lt;br /&gt;&lt;a href="http://blog.outer-court.com/archive/2005-11-04-n69.html"&gt;Amazon's Mechanical Turk&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-113123896730203878?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/113123896730203878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=113123896730203878' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113123896730203878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113123896730203878'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2005/11/amazon-mechanical-turk.html' title='Amazon Mechanical Turk'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-113093064638716886</id><published>2005-11-02T03:24:00.000-08:00</published><updated>2005-11-02T03:29:05.496-08:00</updated><title type='text'>Beyond Java</title><content type='html'>There is a new O'Reilly book out called "Beyond Java" that questions if Java is about it be replaced by a newer generation of languages with Ruby being the current likely replacement:  &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.oreilly.com/catalog/beyondjava/"&gt;http://www.oreilly.com/catalog/beyondjava/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I browsed it a few days ago, but &lt;a href="http://www.intertwingly.net/blog/2005/11/01/Beyond-Java"&gt;Sam Ruby has more to say&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;I'll just second his conclusion regarding metaprogramming and add that Ruby makes metaprogramming natural enough that it's easier to actually *do* metaprogramming than to sit and ponder it.  Personally I'd like us to replace the word with something that doesn't sound quite so academic, though I've not thought of any good candidates yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-113093064638716886?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/113093064638716886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=113093064638716886' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113093064638716886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113093064638716886'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2005/11/beyond-java.html' title='Beyond Java'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-113089361507545084</id><published>2005-11-01T17:06:00.000-08:00</published><updated>2005-11-02T03:26:19.420-08:00</updated><title type='text'>evan_tech -- ruby on rails</title><content type='html'>Evan has a very informative and straightforward description of what Ruby is, what Ruby on Rails is and how the two differ.  If you're just coming into the Rails and Ruby world, or if you're just wondering what all the fuss is, then this is worth five minutes of your life.&lt;br /&gt;&lt;br /&gt;I especially like Evan's description of the Ruby language:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;I play with and write about a lot a lot of different programming languages here, and I'm happy to say that even this many years later I still regularly return to Ruby. It's not without its flaws, but for whatever reason* Matz managed to just nail a certain design space and aesthetic and make the language really work, really flow. The people who write about the language talk about how it's optimized for fun, and that really rings true for me.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;a href="http://www.livejournal.com/community/evan_tech/148686.html"&gt;evan_tech -- ruby on rails&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I saw Ruby about five years back and I really liked what I saw at the time.  Earlier this year though, I finally broke my personal stalemate over Python vs Ruby and really jumped into Ruby.  It turns out that my initial 'pleasant' impression was only a taste of what to come.  Ruby very much has gestalt going for it.  While this is simplistic, I have frequently had the thought that Ruby is to Java what Java is to C++.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-113089361507545084?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/113089361507545084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=113089361507545084' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113089361507545084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113089361507545084'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2005/11/evantech-ruby-on-rails.html' title='evan_tech -- ruby on rails'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-113088824212461195</id><published>2005-11-01T15:37:00.000-08:00</published><updated>2005-11-01T15:38:38.276-08:00</updated><title type='text'>A VC: The Looming Attention Crisis</title><content type='html'>A few months back I questioned what resources are truly limited. On a personal basis at least, my answer was 'attention'.  We can spend unlimited amounts of money (a theory that I've yet to test), but we can only 'pay attention' and focus on a finite number of people or topics or fields.  It's interesting to hear of Herb Simon discuss this way back in 1971.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://avc.blogs.com/a_vc/2005/11/the_looming_att.html"&gt;A VC: The Looming Attention Crisis&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-113088824212461195?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/113088824212461195/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=113088824212461195' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113088824212461195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113088824212461195'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2005/11/vc-looming-attention-crisis.html' title='A VC: The Looming Attention Crisis'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-113088601648989729</id><published>2005-11-01T15:00:00.000-08:00</published><updated>2005-11-01T15:08:10.136-08:00</updated><title type='text'>RadRails - A Ruby on Rails IDE</title><content type='html'>I've installed the of 0.4 version of RadRails.  It seems to be a simplified version of the Eclipse IDE but customized toward Ruby &amp; Rails development work.  If you're a Java person and used to using Eclipse, this seems like a no-brainer to get up and running with Rails.  My only caveat is that it may not be a good long term IDE for learning ruby and rails.  This is not so much because of the IDE itself, as there hasn't been a Ruby IDE that competes.  Rather it's that you may not break out of some Javathink as soon.  But that's pure speculation on my part.  &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.radrails.org/"&gt;http://www.radrails.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Regarding upcoming IDE news for Ruby, ActiveState is doing quite a bit of work to support Ruby in their Komodo IDE. I'm looking forward to it.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.activestate.com/activestate/2005/10/activestate_a_r.html"&gt;http://blogs.activestate.com/activestate/2005/10/activestate_a_r.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've gotten fairly used to TextMate and VIM on my Powerbook, but it would be wonderful to have some intelligence helping me out with dynamic languages.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-113088601648989729?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/113088601648989729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=113088601648989729' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113088601648989729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113088601648989729'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2005/11/radrails-ruby-on-rails-ide.html' title='RadRails - A Ruby on Rails IDE'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-113069089334329547</id><published>2005-10-30T08:48:00.000-08:00</published><updated>2005-10-31T08:11:21.396-08:00</updated><title type='text'>A Linguistic View of the Semantic Web?</title><content type='html'>Danny Ayers considers alternatives to the current set of ideas known as "The Semantic Web".  How else might we evolve a better web.  What would it be a web of?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dannyayers.com/archives/2005/10/23/alternatives-to-the-semantic-web"&gt;Alternatives to the Semantic Web?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;What follows is largely half-baked, stream-of-consciousness thoughtstuff.  You've been warned.&lt;br /&gt;&lt;br /&gt;Lately, at least in the Ruby community, there's been discussion of a language based approach to programming.  Domain Specific Languages are all the rage these days. See, for example, Martin Fowler's excellent article &lt;a href="http://martinfowler.com/articles/rake.html"&gt;Using the Rake Build Language&lt;/a&gt;. (And from RubyConf, I've now got some more reading to do on the Forth language that I successfully sidestepped during college.)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;The World as Language&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, all of this has me thinking quite a lot about the world as language.  Conversations, context of a discussion, verbs &amp; nouns as implemented in code, "executable words", etc, etc. It would make Wittgenstein proud!  (Actually, it would probably make him berate me until I was reduced to an illogical quivering mass, but I'll go with "proud" just the same).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Aside: Levels of Complexity&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So in the context of the Semantic Web, I'm considering an analog of the physical world where, in considering the human brain for instance, we have something like:&lt;br /&gt;&lt;br /&gt;Physics-&gt;Chemistry-&gt;Biology-&gt;Neurophysiology-&gt;Cognitive Neuroscience&lt;br /&gt;&lt;br /&gt;&lt;small&gt;(Note that this is not meant to be at all a rigorous taxonomy, just an example.)&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;Each of these fields looks at the physical world at differing levels of abstraction and they are all useful.  While a physicist may quip that all of biology is reducable to physics, and while that may be true, it would be a notably bad idea to fire all the biologists. Biologists discuss their world at a level of abstraction correlating to complexity of the physical world at the biological level. &lt;br /&gt;&lt;br /&gt;So what makes us think that as we build a "Semantic Web" that we wouldn't need similar levels of abstraction?  &lt;br /&gt;&lt;br /&gt;"But XML allows markup of any concept, no matter how concrete or abstract.  I think we've got it covered."&lt;br /&gt;&lt;br /&gt;Well yes, but that statement is quite similar to the statement that biology is reducable to physics. What are those intermediate concepts (or levels of complexity)?   &lt;br /&gt;&lt;br /&gt;Another way to say this in terms of contemporary programming is as follows:&lt;br /&gt;&lt;br /&gt;We talk about stuff and meta-stuff these days. Programming and metaprogramming. Content and metacontent.  But it seems that this is a relatively simplistic view of our programs, content and by extension our world. I think we need some intermediate (meta) levels.  &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Back to Language&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And this brings me back to the current thought.  Is a linguistic view of the world useful as a conceptual building block akin to biology in our example?  Or is it an optional and orthogonal way of considering the content on the Web?&lt;br /&gt;&lt;br /&gt;Well, until the content on the web looks like pure and granular semantic markup, we're left with language as a communication platform.  I can imagine content directly in the form of object structures captured in XML (or it's more readable forms like YAML - see some of my other posts) and without sentences:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;  &lt;br /&gt;lent:&lt;br /&gt;  from: Bob&lt;br /&gt;  to: Sally&lt;br /&gt;  thing:&lt;br /&gt;     book:&lt;br /&gt;       title: "A Tale of Two Cities"&lt;br /&gt;       id: ...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Yet even in this form, the markup carries quite a lot of linguistic baggage. 'Lent' is a verb, but it can also be considered an operation. 'from' and 'to' are prepositions, but can be considered attributes of the type or "dynamically typed object" called 'lent'. Similarly, 'book' is the object of the structure, even if it isn't a sentence, but it is also an object in the OO sense.&lt;br /&gt;&lt;br /&gt;We can't seem to extract the 'linguistic' from the structure, which brings up another possibility: that language is (a) already considered in the notions of the Semantic Web and (b) so deeply embedded that it's there but not explicit.&lt;br /&gt;&lt;br /&gt;So for now I leave it as an interesting question as to where language fits in to the Semantic Web. (Mostly because I need to get on with my day.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-113069089334329547?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/113069089334329547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=113069089334329547' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113069089334329547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113069089334329547'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2005/10/linguistic-view-of-semantic-web.html' title='A Linguistic View of the Semantic Web?'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-113069009555239029</id><published>2005-10-30T08:31:00.000-08:00</published><updated>2005-10-30T08:34:55.560-08:00</updated><title type='text'>RubyPad</title><content type='html'>So I'm doing a weird sort if integration between Ruby ("It's where objects want to be") and VoodooPad (_The_ OS X Personal Wikiware), currently called *RubyPad*.&lt;br /&gt;&lt;br /&gt;Imagine that an IDE, and eBook and a Personal Wiki (on Speed) all got together for an orgy and had a *Freaky Voodoo Lovechild*. You can capture your thoughts and code in one place, sort of like how we have learned to co-mingle HTML and code in one place (ERb, JSP, etc.)&lt;br /&gt;&lt;br /&gt;Presented for your consideration... &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://static.flickr.com/31/46114849_20a27bc2ea.jpg?v=0"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px;" src="http://static.flickr.com/31/46114849_20a27bc2ea.jpg?v=0" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(And yes it's RubyConf, not RubyCon.. I know.. now.)&lt;br /&gt;&lt;br /&gt;This next screenshot is - as they say - "where it's at". It's a standard page along with the results of hitting the _Magic Key_. When you press Cmd-R, you run whatever Ruby code is in the page.  And it's this - and the blindingly quick SpeedWiki editing - oh, and the automatic hyperlinking to reference information - and the (pseudo)autocomplete, that makes this little fellow such an interesting Hack of Technologies.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://static.flickr.com/32/46114919_4a5ef09345.jpg?v=0"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px;" src="http://static.flickr.com/32/46114919_4a5ef09345.jpg?v=0" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In general though, the whole thing is fairly hard to grasp unless you're actually using it. It's research right now (and a lot of fun at that), but if you're interested, ping me (gsnider at pobox dot com) and I can send you a voodoo doc example. This is quite new, and pretty theory-laden, so I'm quite interested in feedback. &lt;br /&gt;&lt;br /&gt;BTW, It's built on Flying Meat's "VodooPad":http://flyingmeat.com/voodoopad/, which is a wonderful OS X application - it's the "Personal Wiki on Speed" and has that 'oh so beautiful' OS X style.  If the WikiWorld tickles your fancy at all - or if you're just anal about notes - I hightly recommend taking the next thirty seconds to get the demo and the next few hours after that being dazed and confused by the Wonder that is VoodooPad.&lt;br /&gt;&lt;br /&gt;Back to RubyPad for a final thought... just keep in mind that:&lt;br /&gt;&lt;br /&gt;* It's part of a Wiki, but one without separate edit and view modes - like a word processor with on-the-fly hyperlinks. &lt;br /&gt;* You press Cmd-R to execute the code in the page&lt;br /&gt;All pages can have code, though some are 'mere' documents (like the index page in the screenshot, or the pages in every wiki in existence. :)&lt;br /&gt;* Navigation is weirdly simple. Think of a word (e.g. Regex) , type it, and *poof* becomes a hyperlink. You click and you're at all your notes and any ruby documentation in RubyPad for regular expressions. &lt;br /&gt;* I've even got the text of Dave Thomas's Programming Ruby (v1) in there and am trying to organize it such that navigation is automatic (And Surreal).&lt;br /&gt;* It's all in the phenomenology and the Gestalt, Baby!  (Note to self: work on my catch phrases.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-113069009555239029?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/113069009555239029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=113069009555239029' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113069009555239029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113069009555239029'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2005/10/rubypad.html' title='RubyPad'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-113052700354844552</id><published>2005-10-28T12:16:00.000-07:00</published><updated>2005-10-28T12:16:43.550-07:00</updated><title type='text'>Enterprise Ruby On Rails</title><content type='html'>Online book about deploying Rails on a large scale:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://defendem.com/read/book/1"&gt;Enterprise Ruby On Rails |&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Note that if you're not familar with it, this is posted using the &lt;a href="http://dev.hieraki.org/trac/"&gt;Hieraki&lt;/a&gt;, which describes itself as Wiki + Hierarchy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-113052700354844552?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/113052700354844552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=113052700354844552' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113052700354844552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113052700354844552'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2005/10/enterprise-ruby-on-rails.html' title='Enterprise Ruby On Rails'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-113052348816435255</id><published>2005-10-28T09:38:00.000-07:00</published><updated>2005-10-30T08:20:34.500-08:00</updated><title type='text'>The command line on steroids with Rails and YAML</title><content type='html'>Here's a quickie app that I am using to play with YAML as an enhanced command line.  Just as the command line is a "power user" interface, this just like a browser and a web server sending XML back and forth.  Unlike XML though, YAML is very concise and results in a fairly natural presentation form.  Here is a screenshot:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://static.flickr.com/30/56363635_977d3409f8.jpg?v=0"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px;" src="http://static.flickr.com/30/56363635_977d3409f8.jpg?v=0" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now, YAML (and XML) is just a representation of a (static) object structure, so in essence, the user and the web server are communicating with a object structure.  This provides a few new benefits:&lt;br /&gt;&lt;br /&gt;(1) The yaml layout provides context to the user-server interface.&lt;br /&gt;     &lt;br /&gt;(2) You can do multiple things at once.  The server can essentually ask for verification on multiple tasks, and the user can respond to those tasks _and_ specifies new commands and information to the server at once.&lt;br /&gt;&lt;br /&gt;(3) The object structure can be "typed" to specific ruby classes, or it can map simply to hashes, ostructs, arrays, strings, numerics, etc.  Using general types allows the user to actually define the object structure through use.  This form of interaction is similar to the way tagging is being done to dynamically define "classes of similar things".  Here though, we are extending that capability to define richer data types.  (Like one might do in code with a language like Lisp.)&lt;br /&gt;&lt;br /&gt;In general, I think this is a nice interface to have a "power user" interface that provides stateful and "conversational" form of cummunication between the user and the server. &lt;br /&gt;&lt;br /&gt;More to come...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-113052348816435255?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/113052348816435255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=113052348816435255' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113052348816435255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113052348816435255'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2005/10/command-line-on-steroids-with-rails.html' title='The command line on steroids with Rails and YAML'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-113051735735697872</id><published>2005-10-28T09:35:00.000-07:00</published><updated>2005-10-30T10:50:31.420-08:00</updated><title type='text'>Metaclasses in Ruby</title><content type='html'>Hints and discussion from Why the Lucky Stiff:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://whytheluckystiff.net/articles/seeingMetaclassesClearly.html"&gt;SeeingMetaClassesClearly&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-113051735735697872?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/113051735735697872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=113051735735697872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113051735735697872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113051735735697872'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2005/10/metaclasses-in-ruby.html' title='Metaclasses in Ruby'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-113051724488165379</id><published>2005-10-28T09:30:00.000-07:00</published><updated>2005-10-30T10:54:02.003-08:00</updated><title type='text'>From Java to Ruby: 10 Things Every Java Programmer Should Know About Ruby</title><content type='html'>You've heard about Ruby.  You're a Java Peep.  Read this article to get a grasp of the qualitative differences in the languages:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://onestepback.org/articles/10things/item10.html"&gt;10 Things Every Java Programmer Should Know About Ruby&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-113051724488165379?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/113051724488165379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=113051724488165379' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113051724488165379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113051724488165379'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2005/10/from-java-to-ruby-10-things-every-java.html' title='From Java to Ruby: 10 Things Every Java Programmer Should Know About Ruby'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-113088883400939374</id><published>2005-10-20T15:43:00.000-07:00</published><updated>2005-11-02T03:30:11.596-08:00</updated><title type='text'>TextPander: System-level predefined text snippets for your Mac</title><content type='html'>TextPander &lt;br /&gt;(&lt;a href="http://www.petermaurer.de/nasi.php?section=textpander"&gt;http://www.petermaurer.de/nasi.php?section=textpander&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Another Whooa! application for OS X.&lt;br /&gt;&lt;br /&gt;It does tag expansion, but does it at the OS level. There is a system preferences panel that is the interface. Typing the keywords will auto expand then on the fly. many expansion are simple string replacements, though date and time expansionas are supported. It would be nice to have the ability to execute any script (including ruby) and return the result. This might allow things like code completion to be done.&lt;br /&gt;&lt;br /&gt;In general, adding context awareness and the ability to execute anything would be nice.&lt;br /&gt;&lt;br /&gt;It’s a beautiful example of what I have been thinking about in the way of using the full system to build an application, rather than trying to suck everthing into a “abstracted”, “change protected” and massively overcoded app.&lt;br /&gt;&lt;br /&gt;As an example of it’s use, I use a context menu in VoodooPad to enter the crrent date and to add&lt;br /&gt;&lt;br /&gt; "------ -----  ----   ---    --     -"&lt;br /&gt;&lt;br /&gt;The problem is that these items are on a sub-context menu. So I set up entries to replace those: ”==.” =&gt; ”&lt;br /&gt;------ -----  ----   ---    --     -&lt;br /&gt;” “ddtt” =&gt; Tuesday; November 1, 2005 6:44 PM&lt;br /&gt;plus, I added the convienient:&lt;br /&gt;"uupdate" =&gt; (updated Tuesday; November 1, 2005 6:44 PM)&lt;br /&gt;and now I don’t have to even right click and navigate down. It’s soo fast!&lt;br /&gt;&lt;br /&gt;For code, I added (just as a starting point)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;"cclass" =&gt; &lt;br /&gt;class XXX&lt;br /&gt;    def initialize(arg)&lt;br /&gt;        @attr = "val" &lt;br /&gt;    end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;I would add similar stuff for java loops, if I typed many these days.&lt;br /&gt;Best of all, it’s free.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-113088883400939374?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/113088883400939374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=113088883400939374' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113088883400939374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113088883400939374'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2005/10/textpander-system-level-predefined.html' title='TextPander: System-level predefined text snippets for your Mac'/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18401019.post-113093221093933083</id><published>2005-10-06T09:08:00.000-07:00</published><updated>2005-11-02T03:50:10.950-08:00</updated><title type='text'></title><content type='html'>&lt;style type="text/css"&gt;.flickr-photo { border: solid 2px #000000; }.flickr-yourcomment { }.flickr-frame { text-align: left; padding: 3px; }.flickr-caption { font-size: 0.8em; margin-top: 0px; }&lt;/style&gt;&lt;div class="flickr-frame"&gt; &lt;a href="http://www.flickr.com/photos/garrettsnider/49969379/" title="photo sharing"&gt;&lt;img src="http://static.flickr.com/32/49969379_64be5deed9.jpg" class="flickr-photo" alt="" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;span class="flickr-caption"&gt;&lt;a href="http://www.flickr.com/photos/garrettsnider/49969379/"&gt;Collaborank&lt;/a&gt;, originally uploaded by &lt;a href="http://www.flickr.com/people/garrettsnider/"&gt;-garrett&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;    &lt;p class="flickr-yourcomment"&gt; Apparently, I'm the 813th most del.icio.us.  Yay, I think.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18401019-113093221093933083?l=thinkingincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingincode.blogspot.com/feeds/113093221093933083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18401019&amp;postID=113093221093933083' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113093221093933083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18401019/posts/default/113093221093933083'/><link rel='alternate' type='text/html' href='http://thinkingincode.blogspot.com/2005/10/photo-sharing.html' title=''/><author><name>garrett</name><uri>http://www.blogger.com/profile/15803545180149711519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos23.flickr.com/34605570_9ce3d7d4ba.jpg?v=0'/></author><thr:total>0</thr:total></entry></feed>
