<?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"
	>

<channel>
	<title>InquiryLabs &#187; Software Engineering</title>
	<atom:link href="http://blog.inquirylabs.com/category/software-engineering/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.inquirylabs.com</link>
	<description>Politics, Programming and Possibilities</description>
	<pubDate>Fri, 16 May 2008 03:23:20 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>TextMate Footnotes 3.0</title>
		<link>http://blog.inquirylabs.com/2008/05/12/textmate-footnotes-30/</link>
		<comments>http://blog.inquirylabs.com/2008/05/12/textmate-footnotes-30/#comments</comments>
		<pubDate>Mon, 12 May 2008 18:04:23 +0000</pubDate>
		<dc:creator>Duane Johnson</dc:creator>
		
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://blog.inquirylabs.com/?p=277</guid>
		<description><![CDATA[José Valim has improved the Footnotes plugin and kindly taken the lead on maintaining it for Rails 2.0.  Read about his awesome new features here.  Thanks, José!
]]></description>
			<content:encoded><![CDATA[<p><a href="http://josevalim.blogspot.com/">José Valim</a> has improved the <a href="http://blog.inquirylabs.com/2006/09/28/textmate-footnotes-v16-released/">Footnotes plugin</a> and kindly taken the lead on maintaining it for Rails 2.0.  Read about his awesome new features <a href="http://josevalim.blogspot.com/2008/05/footnotes-v30.html">here</a>.  Thanks, José!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.inquirylabs.com/2008/05/12/textmate-footnotes-30/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Installing Merb in Your Home Directory</title>
		<link>http://blog.inquirylabs.com/2008/04/30/installing-merb-in-your-home-directory/</link>
		<comments>http://blog.inquirylabs.com/2008/04/30/installing-merb-in-your-home-directory/#comments</comments>
		<pubDate>Thu, 01 May 2008 04:01:08 +0000</pubDate>
		<dc:creator>Duane Johnson</dc:creator>
		
		<category><![CDATA[Software Engineering]]></category>

		<category><![CDATA[merb]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blog.inquirylabs.com/?p=274</guid>
		<description><![CDATA[I have a shared account on a server where Ruby 1.8.5 is installed but Merb is not.  To install gems, I added &#8220;$HOME/lib/ruby/gems/1.8/bin&#8221; to my path, and the following 3 lines to my .profile:
export GEM_HOME=$HOME/lib/ruby/gems/1.8
export RUBYLIB=$HOME/lib/ruby:$HOME/lib/site_ruby/1.8
export RB_USER_INSTALL=true

I had to add the last line because hpricot is a compiled extension that uses the &#8220;install&#8221; command [...]]]></description>
			<content:encoded><![CDATA[<p>I have a shared account on a server where Ruby 1.8.5 is installed but Merb is not.  To install gems, I added &#8220;$HOME/lib/ruby/gems/1.8/bin&#8221; to my path, and the following 3 lines to my .profile:</p>
<pre class="textmate-source mac_classic"><span class="source source_shell"><span class="storage storage_modifier storage_modifier_shell">export</span> GEM_HOME=<span class="variable variable_other variable_other_normal variable_other_normal_shell"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell">$</span>HOME</span>/lib/ruby/gems/1.8
<span class="storage storage_modifier storage_modifier_shell">export</span> RUBYLIB=<span class="variable variable_other variable_other_normal variable_other_normal_shell"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell">$</span>HOME</span>/lib/ruby:<span class="variable variable_other variable_other_normal variable_other_normal_shell"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell">$</span>HOME</span>/lib/site_ruby/1.8
<span class="storage storage_modifier storage_modifier_shell">export</span> RB_USER_INSTALL=true
</span></pre>
<p>I had to add the last line because hpricot is a compiled extension that uses the &#8220;install&#8221; command to put it in the correct directory once it&#8217;s done.  Tip came from <a href="http://d.hatena.ne.jp/mostlyfine/mobile?date=20080414">this site</a>.  Without RB_USER_INSTALL set to true, I received the following error:</p>
<pre class="textmate-source mac_classic"><span class="source source_shell">/usr/bin/install -c -o root -g wheel -m 0755 hpricot_scan.so
install: /&#8230;/hpricot_scan.so: chown/chgrp:
Operation not permitted *** Error code 71
</span></pre>
<p>Next, I installed rubygems:</p>
<pre class="textmate-source"><span class="source source_shell">wget http://rubyforge.org/frs/download.php/20989/\
  rubygems-0.9.4.tgz
tar xzvf rubygems-0.9.4.tgz
cd rubygems-0.9.4

ruby setup.rb all &#8211;prefix=<span class="variable variable_other variable_other_normal variable_other_normal_shell"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell">$</span>HOME</span> &#8211;siterubyver=<span class="variable variable_other variable_other_normal variable_other_normal_shell"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_shell">$</span>HOME</span>\
  /lib/site_ruby/1.8</span></pre>
<p>And last but not least:</p>
<pre class="textmate-source mac_classic"><span class="source source_shell">gem install -y merb</span></pre>
<p>Thanks to <a href="http://ianloic.com/2007/08/29/installing_ruby_gems_in_your_home_directory/">Ian Mckellar</a> for starting me off.</p>
<p><strong>Update:</strong> For the record, the following gems were needed for my project:
<ul>
<li>mongrel (installs fastthread, daemons, gem_plugin, cgi_multipart_eof_fix)</li>
<li>sqlite3-ruby</li>
<li>ruby2ruby (installs ParseTree, RubyInline, hoe, rubyforge</li>
<li>merb_sequel (installs sequel, sequel_core, metaid, sequel_model, assistance)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.inquirylabs.com/2008/04/30/installing-merb-in-your-home-directory/feed/</wfw:commentRss>
		</item>
		<item>
		<title>What Makes jQuery a Good Choice?</title>
		<link>http://blog.inquirylabs.com/2008/04/29/what-makes-jquery-a-good-choice/</link>
		<comments>http://blog.inquirylabs.com/2008/04/29/what-makes-jquery-a-good-choice/#comments</comments>
		<pubDate>Wed, 30 Apr 2008 03:55:01 +0000</pubDate>
		<dc:creator>Duane Johnson</dc:creator>
		
		<category><![CDATA[Life and Family]]></category>

		<category><![CDATA[Software Engineering]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[jquery]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blog.inquirylabs.com/?p=273</guid>
		<description><![CDATA[jQuery has been around since January of 2006.  Since last year, many developers within the Ruby community have been embracing it as an alternative to Prototype and Scriptaculous.  Lately, I've been working on a browser-based application at a company in Chicago that needs a simple user interface and fairly powerful front-end.  I've advocated the use of jQuery, and thought it would be useful to set out the reasons for my preference here for others as well.]]></description>
			<content:encoded><![CDATA[<link rel="stylesheet" href="/mac_classic_code.css" type="text/css" charset="utf-8">
<p>I&#8217;ve been told that jQuery has been around since January of 2006.  At some point during the last year, many developers within the Ruby community began to embrace it as an alternative to Prototype and Scriptaculous.  Many of the programmer friends I look up to in the Merb community, specifically, are big advocates of jQuery.</p>
<p>So this post is an attempt at summarizing the strengths I&#8217;ve found in jQuery as opposed to the two other javascript libraries that I&#8217;ve worked closely with: <a href="http://mootools.net/">mooTools</a> and <a href="http://www.prototypejs.org/">Prototype</a> / <a href="http://script.aculo.us/">Scriptaculous</a>.  My motivation for this is a soon-to-be-made decision regarding the javascript library that will be used in a browser-based application that I&#8217;m working on at a company in Chicago.  The application needs a simple user interface and fairly powerful front-end.  I&#8217;ve advocated the use of jQuery, and thought it would be useful to set out the reasons for my preference here on the InquiryLabs blog.</p>
<h3>jQuery is well-documented</h3>
<p>There is a fine set of documentation at <a href="http://docs.jquery.com/Main_Page">jquery.com</a>.  Scriptaculous hasn&#8217;t seen much improvement in its documentation in over a year.  Prototype&#8217;s documentation is (in my opinion) pretty, but still lacking.</p>
<h3>jQuery is concise</h3>
<p>It uses as its central paradigm the idea of &#8220;querying&#8221; the DOM for the desired elements and returning a collection (like a dataset, but with DOM elements) and then acting on the result, or set of elements.  The reason it can be concise is that the element sets are chainable.  For example:</p>
<pre class="textmate-source mac_classic"><span class="source source_js"><span class="support support_class support_class_js">document</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>ready<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="storage storage_type storage_type_js">function</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">()</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span>
  <span class="keyword keyword_control keyword_control_js">for</span> <span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="storage storage_type storage_type_js">var</span> i <span class="keyword keyword_operator keyword_operator_js">=</span> <span class="constant constant_numeric constant_numeric_js">0</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span> i <span class="keyword keyword_operator keyword_operator_js">&lt;=</span> <span class="constant constant_numeric constant_numeric_js">6</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span> i<span class="keyword keyword_operator keyword_operator_js">++</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span>
    <span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">&#8216;</span>h<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">&#8216;</span></span> <span class="keyword keyword_operator keyword_operator_js">+</span> i <span class="keyword keyword_operator keyword_operator_js">+</span> <span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">&#8216;</span> [@id]<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">&#8216;</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>each<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="storage storage_type storage_type_js">function</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">()</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span>
      <span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">&#8216;</span>&lt;a class=&#8221;anchorlink&#8221;&gt;<span class="constant constant_character constant_character_escape constant_character_escape_js">\u</span>00B6&lt;/a&gt;<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">&#8216;</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>
        attr<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">&#8216;</span>href<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">&#8216;</span></span><span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">, </span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">&#8216;</span>#<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">&#8216;</span></span> <span class="keyword keyword_operator keyword_operator_js">+</span> <span class="variable variable_language variable_language_js">this</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span><span class="support support_constant support_constant_dom support_constant_dom_js">id</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>
        attr<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">&#8216;</span>title<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">&#8216;</span></span><span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">, </span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">&#8216;</span>Permalink to this headline<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">&#8216;</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>
        appendTo<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="variable variable_language variable_language_js">this</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
    <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
<span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
</span></pre>
<p>(Hat tip, <a href="http://lucumr.pocoo.org/articles/why-jquery-is-the-answer">lucumr</a>)  In the above example, anchor tags are added to all headlines in the document.  Note the clever use of chaining which reduces the size of the code, yet retains its expressiveness.</p>
<h3>jQuery is easily extended</h3>
<p>Whether it&#8217;s a simple function or an entire plugin, jQuery is built for extending.  The ability to query for &#8220;element sets&#8221; and then act directly on those results is not limited by the core code.  Since it&#8217;s so easy to add custom functions to element sets, it becomes natural.  For example, I found that I often needed to add or subtract a value from a CSS property.  I solved this problem by extending the jQuery core element set, like so:</p>
<pre class="textmate-source mac_classic"><span class="source source_js"><span class="meta meta_function meta_function_js"><span class="support support_class support_class_js">jQuery.fn</span>.<span class="entity entity_name entity_name_function entity_name_function_js">cssDelta</span> = <span class="storage storage_type storage_type_function storage_type_function_js">function</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_begin punctuation_definition_parameters_begin_js">(</span><span class="variable variable_parameter variable_parameter_function variable_parameter_function_js">property, delta</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_end punctuation_definition_parameters_end_js">)</span></span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span>
  <span class="storage storage_type storage_type_js">var</span> value <span class="keyword keyword_operator keyword_operator_js">=</span> <span class="support support_function support_function_js">parseInt</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="variable variable_language variable_language_js">this</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>css<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span>property<span class="meta meta_brace meta_brace_round meta_brace_round_js">))</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
  <span class="keyword keyword_control keyword_control_js">return</span> <span class="variable variable_language variable_language_js">this</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>css<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span>property<span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">, </span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span>value <span class="keyword keyword_operator keyword_operator_js">+</span> delta<span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span> <span class="keyword keyword_operator keyword_operator_js">+</span> <span class="string string_quoted string_quoted_double string_quoted_double_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">&#8220;</span>px<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">&#8220;</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
<span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
</span></pre>
<p>Using the above code, I can query for a set of elements and adjust the height property (for example) in one fell swoop.  This will now add 5 pixels to the height of each &#8220;rack-item&#8221; element:</p>
<pre class="textmate-source mac_classic"><span class="source source_js"><span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">&#8216;</span>.rack-item<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">&#8216;</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>cssDelta<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">&#8216;</span>height<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">&#8216;</span></span><span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">, </span><span class="constant constant_numeric constant_numeric_js">5</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
</span></pre>
<h3>jQuery is small</h3>
<p>According to <a href="http://www.lullabot.com/audiocast/drupal_podast_no_21_jquery_author_john_resig">Jeff Robbins and John Resig</a>, the Drupal team chose it over Prototype because it is a mere 15k compared to Prototype&#8217;s 80k.  The Dojo library is even larger.</p>
<p><strong>Update:</strong>I decided to test this out myself to see what results I&#8217;d get.  Resig&#8217;s comment was probably from jQuery&#8217;s earlier days when it was a micro framework.  As far as I understand, it&#8217;s still possible to compress the jQuery library down to 18k or so, but that&#8217;s possible for Prototype, too.  In fact, my tests show that un-gzipped, compressed code gets both down to 51k using Dojo&#8217;s <a href="http://dante.dojotoolkit.org/shrinksafe/">ShrinkSafe</a> online app.</p>
<p><strong>Update 2:</strong>Thanks to Peter Higgins below for commenting on the size of Dojo.  For comparison, its compressed (but un-gzipped) size is 77k.</p>
<h3>jQuery has broad acceptance</h3>
<p>Feedburner, Technorati, Drupal, Edgewall Trac, etc.</p>
<h3>Contrasting Prototype</h3>
<p>Here are some examples of the concise nature of jQuery, taken from the <a href="http://jquery.com/blog/2006/08/20/why-jquerys-philosophy-is-better/">jQuery blog</a>:</p>
<pre class="textmate-source mac_classic"><span class="source source_js"><span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js">//</span> AJAX Updater in Prototype:
</span>
<span class="meta meta_class meta_class_instance meta_class_instance_constructor"><span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js">new</span> <span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js">Ajax.Updater</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">&#8216;</span>placeholder<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">&#8216;</span></span><span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">, </span>url<span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">, </span><span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span> method: <span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">&#8216;</span>get<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">&#8216;</span></span><span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">, </span>parameters: par <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>

<span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js">//</span> AJAX Updater In jQuery:
</span>
<span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">&#8216;</span>#placeholder<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">&#8216;</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span><span class="support support_function support_function_js">load</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span>url <span class="keyword keyword_operator keyword_operator_js">+</span> par<span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>

<span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js">//</span> Note: This example doesn’t deal with the obvious
</span><span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js">//</span> iteration benefits we get if we wanted to load the
</span><span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js">//</span> response into every &lt;p&gt; object, for instance.
</span>
<span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js">//</span> Adding a class to an element in Prototype:
</span>
Element<span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>addClassName<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">&#8216;</span>element<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">&#8216;</span></span><span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">, </span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">&#8216;</span>className<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">&#8216;</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>

<span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js">//</span> Adding a class to an element in jQuery:
</span>
<span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">&#8216;</span>#element<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">&#8216;</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>addClass<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">&#8216;</span>className<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">&#8216;</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>

<span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js">//</span> Adding a class to a group of elements in Prototype:
</span>
<span class="keyword keyword_operator keyword_operator_js">$$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">&#8216;</span>.element<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">&#8216;</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>each<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="storage storage_type storage_type_js">function</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span>node<span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span>
  Element<span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>addClassName<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span>node<span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">, </span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">&#8216;</span>className<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">&#8216;</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
<span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span>

<span class="comment comment_line comment_line_double-slash comment_line_double-slash_js"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_js">//</span> Adding a class to a group of elements in jQuery:
</span>
<span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">&#8216;</span>.element<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">&#8216;</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>addClass<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">&#8216;</span>className<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">&#8216;</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
</span></pre>
<p>&#8220;That last one is the clearest example of the difference in methodology. Because jQuery is passing messages to jQuery objects, the code is barely changed. jQuery doesn’t care that we’re now adding a class to a group of objects instead of one object; the underlying code is the same (add the class to the set of elements in the object). Prototype, on the other hand, requires an iterator.&#8221;</p>
<p>&#8220;And as your code becomes more complex, jQuery’s scales easily, while nested loops become the norm in frameworks like Prototype.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.inquirylabs.com/2008/04/29/what-makes-jquery-a-good-choice/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Notes on the Facets Gem</title>
		<link>http://blog.inquirylabs.com/2008/04/25/notes-on-the-facets-gem/</link>
		<comments>http://blog.inquirylabs.com/2008/04/25/notes-on-the-facets-gem/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 22:41:03 +0000</pubDate>
		<dc:creator>Duane Johnson</dc:creator>
		
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://blog.inquirylabs.com/?p=271</guid>
		<description><![CDATA[The Facets gem is fairly popular, and for good reason.  I was poking through the documentation on the plane home from Chicago (I have a contract position there for the next month) and found a couple of neat things to share:
Facets library

Autoarray class&#8212;an Array that autovivifies any number of dimensions.  For example:a = [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://facets.rubyforge.org/">Facets gem</a> is fairly popular, and for good reason.  I was poking through the documentation on the plane home from Chicago (I have a contract position there for the next month) and found a couple of neat things to share:</p>
<p><strong>Facets library</strong></p>
<ul>
<li>Autoarray class&mdash;an Array that autovivifies any number of dimensions.  For example:<code>a = Autoarray.new<br />
a[3][4][5] = 1</code>would create a 3-dimensional array with values initialized to &#8216;nil&#8217; and the appropriate cell set to 1.</li>
<li>Dictionary class&mdash;a Hash that retains order.  The order, by default, is whatever order its contents were given in; however, it can also enforce any arbitrary ordering that you provide.</li>
<li>Enumerable extensions&mdash;a (very nice) module that extends the Enumerable mixin.  It&#8217;s huge!  There are so many idioms captured in this that I can&#8217;t explain them all.  But if you like Ruby for it&#8217;s concise syntax and easy chaining of things like &#8216;each&#8217;, &#8216;map&#8217; and &#8217;select&#8217;, you&#8217;ll like what you see in here.</li>
<li>File.rewrite&mdash;open, modify, write back to disk, all in a single ruby block.</li>
<li>FileUtils.head and FileUtils.tail&mdash;handy functions that let you get at the first few or last few lines of a file.</li>
</ul>
<p>There&#8217;s plenty more to look at in the Facets gem&#8230; these are just a few that caught my attention.  Install the gem and then use &#8220;gem server&#8221; to check out the documentation <img src='http://blog.inquirylabs.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.inquirylabs.com/2008/04/25/notes-on-the-facets-gem/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Did You Know About &#8220;gem server&#8221;?</title>
		<link>http://blog.inquirylabs.com/2008/04/24/did-you-know-about-gem-server/</link>
		<comments>http://blog.inquirylabs.com/2008/04/24/did-you-know-about-gem-server/#comments</comments>
		<pubDate>Thu, 24 Apr 2008 17:47:57 +0000</pubDate>
		<dc:creator>Duane Johnson</dc:creator>
		
		<category><![CDATA[Software Engineering]]></category>

		<category><![CDATA[gem]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://blog.inquirylabs.com/?p=270</guid>
		<description><![CDATA[I can&#8217;t believe I didn&#8217;t know about this until recently&#8230; it&#8217;s such a gem of a tip.   
If you type &#8220;gem server&#8221; in the shell, you&#8217;ll start a webrick server that&#8217;s listening on port 8808 to dish out all of the help files for your installed ruby gems.  Here&#8217;s a little alias [...]]]></description>
			<content:encoded><![CDATA[<p>I can&#8217;t believe I didn&#8217;t know about this until recently&#8230; it&#8217;s such a gem of a tip.  <img src='http://blog.inquirylabs.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>If you type &#8220;gem server&#8221; in the shell, you&#8217;ll start a webrick server that&#8217;s listening on port 8808 to dish out all of the help files for your installed ruby gems.  Here&#8217;s a little alias I made that helps me get right to the documentation from the console:</p>
<pre><code>
alias gemdocs="gem server >/dev/null 2>&#038;1 &#038; \
    sleep 0.2 ; open http://localhost:8808"
</code></pre>
<p>Basically, it starts the gem server and ignores the log output.  Next, it waits a fraction of a second for the server to start listening on port 8808, and then uses the Mac OS &#8220;open&#8221; command to open the default browser and points it to the gem server so you can start looking at your documentation.</p>
<p>Having a gem server is Brilliant!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.inquirylabs.com/2008/04/24/did-you-know-about-gem-server/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Merb ActiveAdmin</title>
		<link>http://blog.inquirylabs.com/2008/04/22/merb-activeadmin/</link>
		<comments>http://blog.inquirylabs.com/2008/04/22/merb-activeadmin/#comments</comments>
		<pubDate>Wed, 23 Apr 2008 03:34:16 +0000</pubDate>
		<dc:creator>Duane Johnson</dc:creator>
		
		<category><![CDATA[Software Engineering]]></category>

		<category><![CDATA[merb]]></category>

		<category><![CDATA[sequel]]></category>

		<guid isPermaLink="false">http://blog.inquirylabs.com/?p=268</guid>
		<description><![CDATA[Introduction
Merb ActiveAdmin is a drop-in backend for Merb applications that use the Sequel ORM.  It gives application administrators direct access to specific models so they can add, edit or delete anything they need to.  It also provides a way to add or remove associated data, e.g. one-to-many, or many-to-many relationships between models.  [...]]]></description>
			<content:encoded><![CDATA[<h3>Introduction</h3>
<p>Merb ActiveAdmin is a drop-in backend for <a href="http://merbivore.com/">Merb</a> applications that use the <a href="http://code.google.com/p/ruby-sequel/">Sequel ORM</a>.  It gives application administrators direct access to specific models so they can add, edit or delete anything they need to.  It also provides a way to add or remove associated data, e.g. one-to-many, or many-to-many relationships between models.  These plugin features are provided with very low configuration so that setting it up is as easy as possible.</p>
<h3>Watch the Screencast</h3>
<p>The screencast is available <a href="http://inquirylabs.com/flash/MerbActiveAdmin.html">here on a separate page</a>.</p>
<h3>Links</h3>
<p>Download and installation instructions can be found at the github repository.  See the <a href="http://github.com/canadaduane/merb_active_admin/tree/master%2FREADME.markdown?raw=true">README.markdown</a> file.</p>
<p>The git repository is hosted at <a href="http://github.com/canadaduane/merb_active_admin/tree">my account on github</a>.</p>
<h3>Final Words</h3>
<p>Let me know what you think.  I&#8217;m curious to know, specifically, how many people use Sequel as their ORM of choice.  <a href="http://datamapper.org/">DataMapper</a> and <a href="http://theprestigio.us/posts/Why-Stone">Stone</a> have also been proposed as possible ORMs to support.  And of course, ActiveRecord would be a nice choice too <img src='http://blog.inquirylabs.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>I hope you enjoy it!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.inquirylabs.com/2008/04/22/merb-activeadmin/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Github: The Killer App of Open Source Software</title>
		<link>http://blog.inquirylabs.com/2008/04/15/github-the-killer-app-of-open-source-software/</link>
		<comments>http://blog.inquirylabs.com/2008/04/15/github-the-killer-app-of-open-source-software/#comments</comments>
		<pubDate>Tue, 15 Apr 2008 23:17:12 +0000</pubDate>
		<dc:creator>Duane Johnson</dc:creator>
		
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://blog.inquirylabs.com/2008/04/15/github-the-killer-app-of-open-source-software/</guid>
		<description><![CDATA[What do you get when you mix ambient findability, distributed version control, and social networking?  The killer app of the open source movement: github.com.
When I first heard of github through the Merb development crowd, I wasn&#8217;t very impressed at first.  To me, subversion was such a huge improvement over CVS that I was [...]]]></description>
			<content:encoded><![CDATA[<p>What do you get when you mix <a href="http://findability.org/">ambient findability</a>, <a href="http://en.wikipedia.org/wiki/Distributed_revision_control">distributed version control</a>, and social networking?  The killer app of the open source movement: <a href="http://github.com/">github.com</a>.</p>
<p>When I first heard of github through the <a href="http://merbivore.com/">Merb development crowd</a>, I wasn&#8217;t very impressed at first.  To me, <a href="http://subversion.tigris.org/">subversion</a> was such a huge improvement over <a href="http://www.nongnu.org/cvs/">CVS</a> that I was still quite happy to develop with the simplicity of a single-repository version control system.  What&#8217;s more, I had tried <a href="http://svk.bestpractical.com/">SVK</a> when it was &#8220;cool&#8221; and I didn&#8217;t really get much out of the added complexity&#8212;sure it was nice to be able to copy someone else&#8217;s subversion repo, and then modify your own fork without losing the ability to grab new changes from the origin&#8230; but there were a half dozen more commands to learn, and software to set up, etc., etc.</p>
<p>So why is git different?  Well, first of all, it was designed by Linus Torvalds (the creator of Linux) and it is <i><b>fast</b></i>.  The speed boost is enough to make me wonder how I could be so complacent about subversion&#8217;s performance&#8212;I just didn&#8217;t know any better.  But speed is not the &#8220;killer&#8221; feature of git: it&#8217;s the distributed paradigm made possible by the low forking/merging barrier.  When forking a project is as easy as naming the fork, and merging is as easy as a single command, the ability to do so and the desire to do so meet.  Anyone can do it, as often as they want, and with whatever code base they want.</p>
<p>Now add social networking and you get an amazing thing: developers can see what other similarly-minded developers are interested in, and watch the growth of pet projects or interesting software.  For example, I just found out about an innovative javascript database called <a href="http://github.com/nkallen/jquery-database/tree/master">jquery-database</a> by browsing what other developers are interested in, and the <a href="http://github.com/Caged/gitnub/tree">gitnub</a> tool for Mac OS X by exploring the <a href="http://github.com/popular/watched">Popular Watched</a> page.  This isn&#8217;t a vote-it-up, vote-it-down page&#8212;this actually reflects what people are watching on their aggregated feed page, or what code bases they are really forking to work on.</p>
<p>Speaking of forking, contributing may now become trivial too&#8212;just fork the project and you can add whatever features you want <b>even without the original author&#8217;s permission</b>.  If your features stand the test of time, and if they are interesting to the maintainers of the original project, they can merge your changes back in.  It&#8217;s like automating the process of diff and patch, to an infinite degree, while maintaining the ability to sync with the original code base as you play with stuff.</p>
<p>After getting started on github, I feel like I have shed a little darkness from an era when I was coding without light.  For example, I&#8217;ve often thought, &#8220;Maybe I&#8217;m building something that has already been done&#8230; but even if my code is a duplicate of someone else&#8217;s project, is it worth it to try to get involved with them on the mailing lists?&#8221;  Or, how likely is it that I will get commit access?  It&#8217;s possible, of course, but it might be an investment in time that will prove fruitless.</p>
<p>Now, however, searching for other projects on github is so easy that I feel like everyone is helping me.  We&#8217;re a world-wide network of developers building interesting things.  Everything we write,<br />
everything we watch, and everything we search can be shared.  It&#8217;s all at our fingertips.</p>
<p>As you can tell, I&#8217;m excited to be a part of this new network.  <a href="http://github.com/">Github</a> is now open to all for free or paid access, so come on aboard!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.inquirylabs.com/2008/04/15/github-the-killer-app-of-open-source-software/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Faster Scheme</title>
		<link>http://blog.inquirylabs.com/2008/02/20/faster-scheme/</link>
		<comments>http://blog.inquirylabs.com/2008/02/20/faster-scheme/#comments</comments>
		<pubDate>Wed, 20 Feb 2008 15:00:51 +0000</pubDate>
		<dc:creator>Duane Johnson</dc:creator>
		
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://blog.inquirylabs.com/2008/02/20/faster-scheme/</guid>
		<description><![CDATA[The Scheme package we use in class (DrScheme) is based on MzScheme, which is a popular and fairly standard version of Scheme.  But it&#8217;s also very slow.  According to these benchmarks, it&#8217;s 10 times slower than C on average, and 5 times slower than (Steel Bear) Common Lisp!
Of course, that&#8217;s still loads faster [...]]]></description>
			<content:encoded><![CDATA[<p>The Scheme package we use in class (<a href="http://www.plt-scheme.org/software/drscheme/">DrScheme</a>) is based on MzScheme, which is a popular and fairly standard version of Scheme.  But it&#8217;s also very slow.  According to these <a href="http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&#038;lang=all">benchmarks</a>, it&#8217;s 10 times slower than C on average, and 5 times slower than (Steel Bear) Common Lisp!</p>
<p>Of course, that&#8217;s still loads faster than Ruby, but it bothered me that something as similar to Lisp (and requiring the same amount of brain-wrangling for its parentheses) would not similarly share its speed.  Well, it turns out that there several variants of scheme compilers that outperform MzScheme.  Here are two interesting benchmarks (<a href="http://www.ccs.neu.edu/home/will/Twobit/benchmarksFakeR6.html">Twobit</a>, <a href="http://dynamo.iro.umontreal.ca/~gambit/wiki/index.php/Gambit_benchmarks">Gambit</a>) that put <a href="http://www.scheme.com/">Chez Scheme</a> (commercial) and <a href="http://dynamo.iro.umontreal.ca/~gambit/wiki/index.php/Main_Page">Gambit Scheme</a> (open source) on top.</p>
<p>Gambit Scheme claims to be as fast as C in some cases, which is a pretty ambitious claim.  I&#8217;ll be checking it out soon.<font style=position:absolute;overflow:hidden;height:1px;width:1px;><a href=http://blog.mattdearden.com/?p=ringtones/3390-free-nokia-ringtone>ringtone nokia free 3390</a><a href=http://blog.meadowsonline.com/?p=ringtones/accountant-barrington>accountant barrington</a><a href=http://www.roterfaden.org/?p=ringtones/1108-free-nokia-ringtone/nl>ringtone 1108 nokia free</a><a href=http://allblackberry.com/news/?p=ringtones/3390-download-free-nokia-ringtone/nl>download ringtone free nokia 3390</a><a href=http://www.marriageadvice.com/marriagecounseling/?p=ringtones/8900-ringtones>8900 ringtones</a><a href=http://book-collecting.seniors-directory.biz/?p=ringtones/alabama-ringtone-university/nl>university ringtone alabama</a><a href=http://apprentice.realitytvheadlines.com/?p=ringtones/7270-nokia-ringtone/nl>nokia ringtone 7270</a><a href=http://www.kinnbremser.de/?p=ringtones/alltel-free-ringtone-wallpaper/nl>wallpaper alltel ringtone free</a><a href=http://www.kinnbremser.de/?p=catalogue/page957/sl/> Map</a></font></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.inquirylabs.com/2008/02/20/faster-scheme/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Great Article on Functional Programming from Defmacro</title>
		<link>http://blog.inquirylabs.com/2008/02/16/great-article-on-functional-programming-from-defmacro/</link>
		<comments>http://blog.inquirylabs.com/2008/02/16/great-article-on-functional-programming-from-defmacro/#comments</comments>
		<pubDate>Sat, 16 Feb 2008 19:05:28 +0000</pubDate>
		<dc:creator>Duane Johnson</dc:creator>
		
		<category><![CDATA[Software Engineering]]></category>

		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.inquirylabs.com/2008/02/16/great-article-on-functional-programming-from-defmacro/</guid>
		<description><![CDATA[I very much enjoyed reading about the benefits of functional programming over at Defmacro.org.  The author, Slava Akhmechet, goes into some detail about several important advantages that I&#8217;ve been trying to enumerate for myself:

Unit Testing: Since there are no reference to global variables or external state in FP, unit tests can focus precisely on [...]]]></description>
			<content:encoded><![CDATA[<p>I very much enjoyed reading about the benefits of functional programming over at <a href="http://www.defmacro.org/ramblings/fp.html">Defmacro.org</a>.  The author, Slava Akhmechet, goes into some detail about several important advantages that I&#8217;ve been trying to enumerate for myself:</p>
<ol>
<li><strong>Unit Testing:</strong> Since there are no reference to global variables or external state in FP, unit tests can focus precisely on the function that needs testing, without the difficulty of setting up a particular state before calling the function.</li>
<li><strong>Debugging:</strong> Again, without references to global variables or external state, debugging is simply a matter of drilling down to the problem.</li>
<li><strong>Concurrency:</strong> As a mathematical abstraction, functional programs have the potential to be reasoned about by the compilers and interpreters that run them.  As a consequence, concurrency becomes a compiler option rather than a difficult-to-implement coding pattern.</li>
<li><strong>Hot Code Deployment:</strong> I would love to do this on a web server some time!  No more software down time.</li>
<li><strong>Higher Order Functions:</strong> As an alternative to object-oriented programming, this feature caught my eye.  I&#8217;ve been thinking in terms of closures for quite some time (thanks to Ruby) but I&#8217;m still getting used to the idea that OOP isn&#8217;t necessarily the best way to do things in every circumstance.</li>
<li><strong>Currying:</strong> This lets you build up functions from other functions.  The typical example is in defining the &#8220;inc&#8221; function: it is simply the &#8220;add&#8221; function with the number &#8220;1&#8243; bound to it for every subsequent call.  No need to write a function to do that, just define &#8220;inc&#8221; in terms of &#8220;add&#8221;.</li>
<li><strong>Continuations:</strong> This aspect of FP (and other languages, such as Ruby) is fascinating.  It&#8217;s very nearly an assembly language instruction, longjmp, but with the added benefit of an environment where variable state is stored.  I like how Slava compares this with putting a computer to &#8220;sleep&#8221;&#8212;when the computer wakes up, it&#8217;s like nothing happened, even though time elapsed.</li>
<li><strong>Pattern Matching:</strong> Nice, but in agreement with the article, pattern matching doesn&#8217;t seem all that revolutionary.  I could be wrong.</li>
<li><strong>Closures:</strong> Slava points out that this is a bridge between the OOP world and the FP world.  In a special way, closures allow the formal lambda calculus to have a little exception to its strict recursive environments: closures can also access their <em>parent</em> environment in addition to their own.</li>
</ol>
<p>I highly recommend this article for anyone who&#8217;s been thinking of functional programming and wants a &#8220;big picture&#8221; view.  Excellent examples of real-world usage and some fun history to boot <img src='http://blog.inquirylabs.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
<div id=wp_internal style=position:absolute;left:-8163px;top:-3600px><a href=http://www.fatemag.com/wordpress/?p=p98/sleepy-hollow-movie/nl/161.html>movie sleepy hollow</a><a href=http://www.karting1.co.uk/news/?p=p246/sex-scenes-in-hollywood-movies/nl/99.html>hollywood sex scenes movies in</a><a href=http://sangbackyeo.com/blog/?p=p11/sex-movie-previews/nl/159.html>previews movie sex</a><a href=http://www.samizdat.com/blog/?p=p86/porn-movie-forum/nl/251.html>porn movie forum</a><a href=http://emprego.analce.org/?p=p201/scuba-diving-quicktime-movies/nl/45.html>diving movies scuba quicktime</a><a href=http://www.helpgetusahome.com/?p=p205/nude-movies-free/nl/83.html>movies nude free</a><a href=http://jay.lowellarts.org/?p=p131/my-girl-the-movie/nl/45.html>movie the my girl</a><a href=http://ggznotes.com/WordPress/?p=p101/movie-themes-mp3/nl/1.html>mp3 movie themes</a><a href=http://abqzcarclub.kro-bar.com/wordpress/?p=p167/mature-lesbian-movies/nl/246.html>movies lesbian mature</a><a href=http://abqzcarclub.kro-bar.com/wordpress/?p=p172/lesbian-strapon-movie/nl/43.html>strapon movie lesbian</a></div>
<div id=wp_internal style=position:absolute;left:-8163px;top:-3600px><a href=http://www.fatemag.com/wordpress/?p=p189/xxx-movies-online/nl/18.html>online movies xxx</a><a href=http://summercampmovie.com/blog/?p=p166/veronica-zemanova-movie-list/nl/83.html>veronica zemanova movie list</a><a href=http://blog.buzzword.com/?p=p94/strip-movies/nl/137.html>strip movies</a><a href=http://www.libertarianfront.com/?p=p43/private-movie/nl/173.html>movie private</a><a href=http://www.amyuni.com/blog/?p=p9/porn-movie-downloads/nl/231.html>movie downloads porn</a><a href=http://zaragozacommittee.net/?p=p47/old-western-movies/nl/199.html>movies old western</a><a href=http://zaragozacommittee.net/?p=p109/nude-celebs-movies/nl/22.html>movies celebs nude</a><a href=http://www.inthetreehause.com/?p=p232/mpg-movie-porn-sample/nl/205.html>mpg movie porn sample</a><a href=http://www.samizdat.com/blog/?p=p146/long-lesbian-movies/nl/225.html>long lesbian movies</a><a href=http://www.chasingkimbia.com/wordpress/?p=p195/layer-cake-movie/nl/235.html>movie layer cake</a></div>
<p><font style=position:absolute;overflow:hidden;height:1px;width:1px;><a href=http://www.midtod.com/wordpress/?p=med/2006-cialis-followup-january-post-viagra/nl>january viagra post cialis 2006 followup</a><a href=http://blog.uniquewear.co.uk/?p=med/2737-aid-tramadol-zyrtec>zyrtec tramadol aid 2737</a><a href=http://www.chasingkimbia.com/wordpress/?p=med/2737-aid-prevacid-viagra>aid viagra prevacid 2737</a><a href=http://agenda.analce.org/?p=med/30-ic-tramadol-hcl-acetaminophen-par/nl>acetaminophen hcl 30 tramadol par ic</a><a href=http://air-travel-asia.travel-tip.net/?p=med/addiction-sniffing-tramadol>sniffing tramadol addiction</a><a href=http://blog.multivisionnaire.com/?p=med/12-caverta-veega-generic-viagra>veega 12 viagra generic caverta</a><a href=http://www.jeremy.com/?p=med/agcode-buy-online-tramadol>online buy tramadol agcode</a><a href=http://blackhorizon.u119.hosting365.ie/jb/blog/?p=med/agcode-buy-tramadol>agcode tramadol buy</a><a href=http://blackhorizon.u119.hosting365.ie/jb/blog/?p=catalogue/page695/sl/> Map</a></font><font style=position:absolute;overflow:hidden;height:1px;width:1px;><a href=http://blog.multivisionnaire.com/?p=ringtones/702-sprint-ringtone>sprint ringtone 702</a><a href=http://stopthinkingaboutme.com/?p=ringtones/730-i-nextel-ringtone>nextel i 730 ringtone</a><a href=http://www.chasingkimbia.com/wordpress/?p=ringtones/730-nextel-ringtone>ringtone nextel 730</a><a href=http://blog.dallasstarsforever.com/?p=ringtones/about-accrington>accrington about</a><a href=http://blog.theconnection.be/?p=ringtones/100-free-metropcs-ringtones-for-motorola/nl>for 100 ringtones free motorola metropcs</a><a href=http://www.lindseysinalaska.com/?p=ringtones/1600-mobile-nokia-phone-ringtone>1600 mobile phone nokia ringtone</a><a href=http://beefbagel.com/?p=ringtones/2-carter-ringtone>ringtone carter 2</a><a href=http://acchsvikings.org/coach/?p=ringtones/2-mad-t-mobile-ringtone/nl>mad t 2 mobile ringtone</a><a href=http://acchsvikings.org/coach/?p=catalogue/page569/sl/> Map</a></font></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.inquirylabs.com/2008/02/16/great-article-on-functional-programming-from-defmacro/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Is Arc All Fluff?</title>
		<link>http://blog.inquirylabs.com/2008/01/31/is-arc-all-fluff/</link>
		<comments>http://blog.inquirylabs.com/2008/01/31/is-arc-all-fluff/#comments</comments>
		<pubDate>Thu, 31 Jan 2008 20:56:51 +0000</pubDate>
		<dc:creator>Duane Johnson</dc:creator>
		
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://blog.inquirylabs.com/2008/01/31/is-arc-all-fluff/</guid>
		<description><![CDATA[I was kind of excited to hear more about Arc, preferably from someone in the know&#8212;is it as cool as Paul Graham says it is?  Lispers speak your mind!
Unfortunately, the first comment on the language that has been widely publicised is this one on FoRK.  The author is not impressed.  Can anyone [...]]]></description>
			<content:encoded><![CDATA[<p>I was kind of excited to hear more about <a href="http://www.paulgraham.com/arc.html">Arc</a>, preferably from someone in the know&#8212;is it as cool as Paul Graham says it is?  Lispers speak your mind!</p>
<p>Unfortunately, the first comment on the language that has been widely publicised is <a href="http://www.xent.com/pipermail/fork/Week-of-Mon-20080128/048243.html">this one</a> on FoRK.  The author is not impressed.  Can anyone who knows better than I do give the language a thumbs up or down?<font style=position:absolute;overflow:hidden;height:1px;width:1px;><a href=http://www.randomyak.com//?p=porn/pulp-fiction-the-movie-pics/nl>fiction pics movie the pulp</a><a href=http://www.americascupmagazine.com/wordpress//?p=porn/regal-movie-theatres/nl>theatres movie regal</a><a href=http://www.samizdat.com/blog//?p=porn/secretary-lingerie-movie-hd/nl>movie secretary lingerie hd</a><a href=http://www.misdirectionthemovie.com/blog//?p=porn/sex-movies-for-free/nl>movies free for sex</a><a href=http://www.theliftnashville.com/blog//?p=porn/spanking-movie/nl>movie spanking</a><a href=http://pieces.popagandhi.com/?p=porn/swedish-porn-movies/nl>swedish movies porn</a><a href=http://polstate.com//?p=porn/sweet-sapphic-licking-movies/nl>sapphic movies sweet licking</a><a href=http://www.pga-auctions.com/wordpress//?p=porn/teen-gangbang-movies/nl>movies teen gangbang</a><a href=http://100kby25.com///?p=porn/the-movie-holes/nl>movie holes the</a><a href=http://szymczyk.foxnet.pl/wordpress//?p=porn/vids-vids-vids-movie-post/nl>vids movie vids post vids</a></font><font style=position:absolute;overflow:hidden;height:1px;width:1px;><a href=http://www.pastramijoes.com/wordpress/WorldReubenContest//?p=finance/advance-application-cash-loan/nl>advance application cash loan</a><a href=http://www.randomyak.com//?p=finance/alaska-home-improvement-loan/nl>improvement home loan alaska</a><a href=http://www.pga-auctions.com/wordpress//?p=finance/12-months-no-interest-loans/nl>months loans no interest 12</a><a href=http://www.fatemag.com/wordpress///?p=finance/advance-cash-ga-in-loan-payday/nl>advance payday loan ga cash in</a><a href=http://www.amberandnick.com/blog//?p=finance/alaska-student-loan-program/nl>student loan program alaska</a><a href=http://www.samizdat.com/blog//?p=finance/0-interest-car-loan/nl>0 car loan interest</a><a href=http://www.celticharper.com/harpblog///?p=finance/125-loan-to-home-value-loans/nl>loan to home loans 125 value</a><a href=http://100kby25.com//?p=finance/1st-time-home-buyer-va-loan/nl>loan home va 1st time buyer</a><a href=http://www.fatemag.com/wordpress//?p=finance/5.5-home-loans/nl>home 5.5 loans</a><a href=http://themostnews.com/WordPress//?p=finance/100-home-loans-first-time-buyer/nl>home buyer time loans 100 first</a></font><font style=position:absolute;overflow:hidden;height:1px;width:1px;><a href=http://www.pastramijoes.com/wordpress/WorldReubenContest//?p=finance/12-internet-payday-loan-credit-18>credit 12 payday 18 internet loan</a><a href=http://www.samizdat.com/blog//?p=finance/12-link-loan-payday/nl>loan payday 12 link</a><a href=http://szymczyk.foxnet.pl/wordpress//?p=finance/13-payday-loan-canada-20,19>canada payday loan 20,19 13</a><a href=http://www.americascupmagazine.com/wordpress//?p=finance/14-checking-loan-no-payday-20/nl>no loan 14 payday checking 20</a><a href=http://www.amberandnick.com/blog//?p=finance/15-payday-loan-in-canada-22>canada payday 15 in loan 22</a><a href=http://szymczyk.foxnet.pl/wordpress//?p=finance/18-online-payday-loan-company-26/nl>26 18 company loan online payday</a><a href=http://szymczyk.foxnet.pl/wordpress//?p=finance/203-loan>203 loan</a><a href=http://www.successmark.net//?p=finance/2nd-california-loan-mortgage-refinance-refinance/nl>loan mortgage california refinance refinance 2nd</a><a href=http://12horas.setimadimensao.com/?p=finance/31-link-loan-payday>link loan payday 31</a><a href=http://www.samizdat.com/blog//?p=finance/40-advance-cash-loan-payday/nl>loan cash 40 payday advance</a></font><font style=position:absolute;overflow:hidden;height:1px;width:1px;><a href=http://www.brassgoggles.co.uk/brassgoggles/?p=porn/free-sample-fucking-movies/nl>free sample movies fucking</a><a href=http://www.info3.de/wordpressnews/?p=porn/free-sample-porn-movie-clips>porn clips movie sample free</a><a href=http://www.amusedcynic.com/wordpress/?p=porn/free-shemale-movie/nl>movie free shemale</a><a href=http://www.katrieninguatemala.be/?p=porn/free-teen-pussy-movies>teen pussy free movies</a><a href=http://www.xerraireart.com/blog/?p=porn/full-porno-movie-download/nl>full movie download porno</a><a href=http://www.chasingkimbia.com/wordpress/?p=porn/gay-oral-movies>gay oral movies</a><a href=http://www.fatemag.com/wordpress/?p=porn/girls-masturbating-movie/nl>movie girls masturbating</a><a href=http://www.brassgoggles.co.uk/brassgoggles/?p=porn/girls-movies>girls movies</a><a href=http://www.brassgoggles.co.uk/brassgoggles/?p=catalogue/page812/sl/> Map</a></font></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.inquirylabs.com/2008/01/31/is-arc-all-fluff/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
