<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>I am ... unhindered by talent &#187; programming</title>
	<atom:link href="http://UnhinderedByTalent.com/Phi/archives/tag/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://UnhinderedByTalent.com/Phi</link>
	<description>Not all battles are fought with a sword</description>
	<lastBuildDate>Thu, 17 May 2012 02:57:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Just 2 days left: Genetic Programming and Evolvable Machines anniversary issue available for free!</title>
		<link>http://UnhinderedByTalent.com/Phi/archives/2010/07/29/just-2-days-left-genetic-programming-and-evolvable-machines-anniversary-issue-available-for-free/</link>
		<comments>http://UnhinderedByTalent.com/Phi/archives/2010/07/29/just-2-days-left-genetic-programming-and-evolvable-machines-anniversary-issue-available-for-free/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 23:21:55 +0000</pubDate>
		<dc:creator>Phi</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Evolution]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[Science]]></category>
		<category><![CDATA[anniversary issue]]></category>
		<category><![CDATA[artificial intelligence]]></category>
		<category><![CDATA[evolution]]></category>
		<category><![CDATA[evolutionary computation]]></category>
		<category><![CDATA[genetic programming]]></category>
		<category><![CDATA[Genetic Programming and Evolvable Machines]]></category>
		<category><![CDATA[GPEM]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[springer journal]]></category>

		<guid isPermaLink="false">http://UnhinderedByTalent.com/Phi/?p=1337</guid>
		<description><![CDATA[The Springer journal Genetic Programming and Evolvable Machines is celebrating its first 10 years with a special anniversary issue of articles reviewing the state of the field and considering some of its possible futures.  For the month of July the entire issue is available for free! <a href="http://UnhinderedByTalent.com/Phi/archives/2010/07/29/just-2-days-left-genetic-programming-and-evolvable-machines-anniversary-issue-available-for-free/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.springerlink.com/content/h46r77k291rn/"><img alt="Cover of the journal of Genetic Programming and Evolvable Machines" src="http://www.springerlink.com/content/104755/cover-medium.jpg" title="GPEM cover" class="alignright" width="95" height="142" /></a></p>
<p>A momentary interruption in the (slow) posting on the road trip (which has been done for nearly two weeks now!) to provide a time sensitive plug for those of you interested in genetic programming, evolutionary computation, and the like.</p>
<p>The Springer journal Genetic Programming and Evolvable Machines is celebrating its first 10 years with a special anniversary issue of articles reviewing the state of the field and considering some of its possible futures.  For the month of July (which ends in two days!) the entire issue is <a href="http://www.springerlink.com/content/h46r77k291rn/">available for free download</a>.</p>
<p>Included in the issue are:</p>
<ul>
<li>Human-competitive results produced by genetic programming</li>
<li>Theoretical results in genetic programming: the next ten years?</li>
<li>Genetic Programming and Evolvable Machines: ten years of reviews</li>
<li>Open issues in genetic programming</li>
<li>Grammar-based genetic programming: a survey</li>
<li>Developments in Cartesian Genetic Programming: self-modifying CGP</li>
<li>Bio-inspired artificial intelligence: theory, methods, and technologies</li>
</ul>
<p>Once the month ends these will all start costing money again with two exceptions: the article on human-competitive results and the survey of 10 years of reviews will remain free in perpetuity.</p>
<p>In the spirit of full disclosure, I&#8217;m on the editorial board of the journal and contributed to one of the articles.  Still, it&#8217;s a cool resource marking an interesting time in the development of the field, so take advantage of it while you can!</p>
]]></content:encoded>
			<wfw:commentRss>http://UnhinderedByTalent.com/Phi/archives/2010/07/29/just-2-days-left-genetic-programming-and-evolvable-machines-anniversary-issue-available-for-free/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flickr Uploadr is a pain, but Flickraw saved the day</title>
		<link>http://UnhinderedByTalent.com/Phi/archives/2010/01/30/flickr-uploadr-is-a-pain-but-flickraw-saved-the-day/</link>
		<comments>http://UnhinderedByTalent.com/Phi/archives/2010/01/30/flickr-uploadr-is-a-pain-but-flickraw-saved-the-day/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 00:05:40 +0000</pubDate>
		<dc:creator>Phi</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Family]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[Flickr]]></category>
		<category><![CDATA[Flickraw]]></category>
		<category><![CDATA[my photography]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[scripting]]></category>

		<guid isPermaLink="false">http://UnhinderedByTalent.com/Phi/?p=1177</guid>
		<description><![CDATA[Flickr&#8217;s Uploadr is fine for small uploads, but tends to die consistently and unpleasantly when I have several hundred photos to upload, like those from Thursday&#8217;s opening of &#8220;The boys next door&#8221;, this year&#8217;s Morris Area High School one-act. It &#8230; <a href="http://UnhinderedByTalent.com/Phi/archives/2010/01/30/flickr-uploadr-is-a-pain-but-flickraw-saved-the-day/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><div class="wp-caption alignnone" style="width: 510px"><a href="http://www.flickr.com/photos/nics_events/4313355604/in/set-72157623180822901"><img alt="Thomas McPhee as Arnold in the MAHS 2010 production of &quot;The boys next door&quot; as a one-act" src="http://farm5.static.flickr.com/4017/4313355604_e68f0979bd.jpg" title="Thomas McPhee as Arnold in the MAHS 2010 production of &quot;The boys next door&quot; as a one-act" width="500" height="333" /></a><p class="wp-caption-text">Tom as Arnold in &quot;The boys next door&quot;</p></div><br />
Flickr&#8217;s Uploadr is fine for small uploads, but tends to die consistently and unpleasantly when I have several hundred photos to upload, like those from Thursday&#8217;s opening of &#8220;The boys next door&#8221;, this year&#8217;s Morris Area High School one-act.  It almost always takes me several tries to get a large pool of photos uploaded, which is a pain, but not fatal.  This time, however, it chose to upload them in a semi-random order, so then it died I had 80-ish photos scattered all across the show, which meant I couldn&#8217;t just delete the first <em>K</em> from the list and restart the upload.  Ugh.</p>
<p>Because it was late and I was in a hurry, I ended up just uploading the whole set (over several attempts), but marked them as private so people wouldn&#8217;t end up seeing two copies of that first group of images, figuring I&#8217;d sort things out in the morning.</p>
<p>The morning came, and it turned out that I really didn&#8217;t have a workable plan.  All the pictures were on Flickr, but there was no good (i.e., automated) way to figure out which were the duplicates.  If I could identify them, then deleting the duplicates and making the rest visible would be easy, but I didn&#8217;t have a clue how to find the duplicates using Flickr&#8217;s tools.</p>
<p>Sigh.</p>
<p>This would, however, be pretty straight forward in a script if I had all the data I needed, and this is where Flickr redeemed itself.  They have a very rich API for accessing (and modifying) photos and their associated information (like tags), so if I could figure out how to use that I&#8217;d be golden.  I&#8217;d poked a <em>little</em> with some Ruby Flickr libraries in the past, but none of them ever seemed very complete and they were always struggling to stay on top of Flickr&#8217;s changes and extensions to the API.  A little searching this time, however, turned up <a href="http://github.com/hanklords/flickraw">Flickraw</a>, which uses some really nifty <a href="http://pragprog.com/titles/ppmetr/metaprogramming-ruby">Ruby metaprogramming</a> to essentially build the Ruby part of the API &#8220;on the fly&#8221;, ensuring that it will be complete and up-to-date all automagically!</p>
<p>It turns out that Flickraw was indeed powerful, flexible, and easy to use.  After authenticating (following the example on the Flickraw web site), I was able to use it to pull down a list of all the photos from &#8220;The boys next door&#8221;</p>
<pre class="brush: ruby; title: ; notranslate">
my_owner_id = &quot;68457656@N00&quot;
play_title = &quot;The boys next door&quot;
my_stream = flickr.photos.search(
              :user_id =&gt; my_owner_id,
              :text =&gt; play_title,
              :per_page =&gt; 500)
</pre>
<p>I then split that list into the initial set of publicly visible photos, and the photos I&#8217;d uploaded after things got screwy and kept private (i.e., visible only to me):</p>
<pre class="brush: ruby; title: ; notranslate">
public_photos = my_stream.find_all {|photo| photo.ispublic == 1}
private_photos = my_stream.find_all {|photo| photo.ispublic == 0}
</pre>
<p>My next task was to determine which of the private photos were duplicates of one of the public photos people were already looking at.  All I <em>really</em> needed was the list of duplicates, but I decided to create lists of both the duplicates and the non-duplicates.  I had to compare titles here because the Flickr IDs would be different; as far as Flickr knew they were all different photos.  Happily, I had named them in a way that they each had a unique title, so if two photos had the same title, I knew they were the same shot uploaded twice.</p>
<pre class="brush: ruby; title: ; notranslate">
dups = []
non_dups = []
private_photos.each do |photo|
  public_duplicate = public_photos.find { |pub| photo.title == pub.title }
  if public_duplicate
    dups.push(photo)
  else
    non_dups.push(photo)
  end
end
</pre>
<p>At this point, I could apply tags to all the photos in the two groups, and all the rest of the fiddling could be done through Flickr&#8217;s web tools:</p>
<pre class="brush: ruby; title: ; notranslate">
non_dups.each do |photo|
  flickr.photos.addTags(:photo_id =&gt; photo.id,
                        :tags =&gt; &quot;to_keep&quot;)
end

dups.each do |photo|
  flickr.photos.addTags(:photo_id =&gt; photo.id,
                        :tags =&gt; &quot;to_delete&quot;)
end
</pre>
<p>I could have actually done everything with the Ruby script (delete the duplicates, change the remaining images to publicly visible, and add them to the appropriate set), but wanted to do that via Flickr so I could see what was happening as I went.  And once the tags were in place, the work in Flickr was quite straightforward.  The result: <a href="http://www.flickr.com/photos/nics_events/sets/72157623180822901/">A set of 339 images</a> that contains all the photos I uploaded, with no duplicates, all accomplished without deleting any of the original uploads.</p>
<p>Big thanks to <a href="http://github.com/hanklords">Maël Clérambault</a>, the author of Flickraw, for his excellent little library, and thanks to Flickr for providing this very nice set of API calls.  (Now go fix Flickr Uploadr, damnit!)</p>
<p>As for the play &#8211; I just heard that they took second at today&#8217;s sub-sections competiton, which means they move on to sections next week, and <a href="http://ThomasMcPhee.com/">Tom</a> got a star performance award!  Congratulations all!</p>
]]></content:encoded>
			<wfw:commentRss>http://UnhinderedByTalent.com/Phi/archives/2010/01/30/flickr-uploadr-is-a-pain-but-flickraw-saved-the-day/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>I love our students (alumni edition)</title>
		<link>http://UnhinderedByTalent.com/Phi/archives/2009/12/02/i-love-our-students-alumni-edition/</link>
		<comments>http://UnhinderedByTalent.com/Phi/archives/2009/12/02/i-love-our-students-alumni-edition/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 21:58:31 +0000</pubDate>
		<dc:creator>Phi</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[alum]]></category>
		<category><![CDATA[alumni]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[quotes]]></category>
		<category><![CDATA[students]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[UMM]]></category>

		<guid isPermaLink="false">http://UnhinderedByTalent.com/Phi/?p=1105</guid>
		<description><![CDATA[Two cool tweets from two cool alumni :-). <a href="http://UnhinderedByTalent.com/Phi/archives/2009/12/02/i-love-our-students-alumni-edition/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><div class="wp-caption alignright" style="width: 250px"><a href="http://www.flickr.com/photos/nics_events/468851897/in/pool-913304@N20"><img alt="_eli at MICS 2007" src="http://farm1.static.flickr.com/200/468851897_06ee8efbac_m.jpg" title="_eli at MICS 2007" width="240" height="160" /></a><p class="wp-caption-text">_eli at MICS 2007</p></div><br />
These two tweets, each wonderful in their own way, just showed up back-to-back in my Twitter stream:</p>
<blockquote><p>The joy of programming is taking a crappy piece of code, full of hacks and bad practices, and rewriting it to be better in every way. &#8212; <a href="http://twitter.com/lynnkale">LynnKale</a></p></blockquote>
<blockquote><p>for a moment I couldn&#8217;t think of a word for &#8220;thing to tell me how to do other things,&#8221; googled &#8216;how to&#8217; and figured the word (documentation) &#8212; <a href="http://twitter.com/_eli/status/6280862944">_eli</a></p></blockquote>
<p>It&#8217;s gems like this that make my day.  Both authors are UMM CSci alum, now off doing cool stuff.  It&#8217;s neat to be able to stay in touch on-line.</p>
]]></content:encoded>
			<wfw:commentRss>http://UnhinderedByTalent.com/Phi/archives/2009/12/02/i-love-our-students-alumni-edition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nothing like a little shameless self-promotion</title>
		<link>http://UnhinderedByTalent.com/Phi/archives/2008/03/10/nothing-like-a-little-shameless-self-promotion/</link>
		<comments>http://UnhinderedByTalent.com/Phi/archives/2008/03/10/nothing-like-a-little-shameless-self-promotion/#comments</comments>
		<pubDate>Mon, 10 Mar 2008 16:48:17 +0000</pubDate>
		<dc:creator>Phi</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[Sabbatical]]></category>
		<category><![CDATA[Science]]></category>
		<category><![CDATA[Travels]]></category>
		<category><![CDATA[Art]]></category>
		<category><![CDATA[awards]]></category>
		<category><![CDATA[EuroGP]]></category>
		<category><![CDATA[evolutionary computation]]></category>
		<category><![CDATA[genetic programming]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://UnhinderedByTalent.com/Phi/archives/2008/03/10/nothing-like-a-little-shameless-self-promotion/</guid>
		<description><![CDATA[I&#8217;ve been sitting on this for a while I waited for EuroGP to get their web site updated; they have, freeing me up to do a little unabashed chest-thumping, leavened with some praise for UMM&#8216;s excellent students. A few weeks &#8230; <a href="http://UnhinderedByTalent.com/Phi/archives/2008/03/10/nothing-like-a-little-shameless-self-promotion/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/nicmcphee/474509989/" title="Choosing two points at random by Unhindered by Talent, on Flickr"><img src="http://farm1.static.flickr.com/168/474509989_3f0797786d.jpg" width="450" alt="Choosing two points at random" /></a></p>
<p>I&#8217;ve been sitting on this for a while I waited for EuroGP to get their web site updated; they have, freeing me up to do a little unabashed chest-thumping, leavened with some praise for <a href="http://www.morris.umn.edu/">UMM</a>&#8216;s excellent students.  </p>
<p>A few weeks from now the <a href="http://evostar.iti.upv.es/index.php?option=com_content&#038;view=article&#038;id=46&#038;Itemid=51">Eleventh European conference on Genetic Programming</a> (EuroGP) will happen in Naples Italy.  The only other time I&#8217;ve been to EuroGP was in 2001 when we were here on sabbatical the first time.  I really <em>love</em> the conference, and it&#8217;s small and intimate and tends to have a really high signal-to-noise ratio.  Unfortunately, it&#8217;s also an expensive flight from Minnesota for a three day event, and the timing tends to be really awkward in my teaching schedule, so I&#8217;ve never made it back.  One of my <em>many</em> fond memories of that conference was <a href="http://evonet.lri.fr/eurogp2001/post-papers.html">winning the best paper award with Riccardo Poli</a> for a pair of papers we&#8217;d written together as part of that sabbatical visit.  <a href="http://www.flickr.com/photos/nicmcphee/14169907/" title="Lake Como and the Alps by Unhindered by Talent, on Flickr"><img src="http://farm1.static.flickr.com/13/14169907_aafc240323_m.jpg" width="240" height="180" alt="Lake Como and the Alps" align='left' hspace='10' vspace='10' /></a>  (Oddly, both times I&#8217;ve attended have happened to be the only two times it&#8217;s been in Italy.  The little photo is from the 2001 event at Lake Como.)</p>
<p>The <a href="http://evostar.iti.upv.es/index.php?option=com_content&#038;view=article&#038;id=72&#038;Itemid=62">best paper nominations for this year&#8217;s event</a> have been released, and I&#8217;m quite excited that both of the papers that I submitted this year are on the list.  One is another join project with Riccardo, and the other is a paper with two UMM undergrads:  Brian Ohs and Tyler Hutchison.</p>
<p>That&#8217;s Tyler in the photo up top, presenting some work he did with Andy Korth and I that won the best student paper award at MICS a year ago; Tyler also did <a href="http://www.flickr.com/photos/nicmcphee/2296264822/">the cover illustration</a> for the forthcoming book Riccardo, Bill Langdon, and I are just wrapping up.  In a big happy, Tyler was able to pull together the funds to fly out for the conference, so we&#8217;ll be able to do a joint presentation enlivened by his presence and cool drawings.  Unfortunately Brian can&#8217;t make it, but it&#8217;s cool that Tyler can; this will be the first of my students co-authors that&#8217;s made it to a European conference with me.</p>
<p>The competition is gonna be tough for the best paper award, including a very nice paper by one of Riccardo&#8217;s students (Stephen Dignum).  Fingers crossed!</p>
<p>The <a href="http://evostar.iti.upv.es/includes/EuroGPProg.pdf">full program is also now on-line (as a PDF)</a> &#8212; it looks like some cool material.  I&#8217;m quite looking forward to the conference, although I must say I&#8217;m a bit nervous about the ongoing trash crisis in Naples (<a href="http://unhinderedbytalent.com/Phi/archives/2008/02/25/man-thats-gonna-stink/">here</a> and <a href="http://news.bbc.co.uk/2/hi/europe/7266755.stm">there</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://UnhinderedByTalent.com/Phi/archives/2008/03/10/nothing-like-a-little-shameless-self-promotion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JOCP!  At revision 400!</title>
		<link>http://UnhinderedByTalent.com/Phi/archives/2008/02/28/jocp-at-revision-400/</link>
		<comments>http://UnhinderedByTalent.com/Phi/archives/2008/02/28/jocp-at-revision-400/#comments</comments>
		<pubDate>Thu, 28 Feb 2008 11:43:22 +0000</pubDate>
		<dc:creator>Phi</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[My writing]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[Science]]></category>
		<category><![CDATA[Writing]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[evolution]]></category>
		<category><![CDATA[evolutionary computation]]></category>
		<category><![CDATA[genetic programming]]></category>
		<category><![CDATA[GP Book]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Sabbatical]]></category>

		<guid isPermaLink="false">http://UnhinderedByTalent.com/Phi/archives/2008/02/28/jocp-at-revision-400/</guid>
		<description><![CDATA[It&#8217;s pretty cool when you update your repository and see At revision 400 We just hit that on the genetic programming book that Riccardo and Bill and I are working on; we&#8217;re currently averaging close to 10 commits a day &#8230; <a href="http://UnhinderedByTalent.com/Phi/archives/2008/02/28/jocp-at-revision-400/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src='http://UnhinderedByTalent.com/Phi/wp-content/uploads/2008/02/changeset400.png' alt='Revision 400 screenshot' /></p>
<p>It&#8217;s pretty cool when you update your repository and see</p>
<blockquote><p>
At revision 400
</p></blockquote>
<p>We just hit that on the genetic programming book that Riccardo and Bill and I are working on; we&#8217;re currently averaging close to 10 commits a day here in the final stages.  We hope to wrap it up in the next 1.5 weeks and then off to the printers for fun (<a href="http://unhinderedbytalent.com/Phi/archives/2007/11/24/show-me-what-they-really-want-and-dont-assume-its-the-money/">and no profit in the traditional sense</a>)!</p>
<p>P.S.  Anyone want to proof read a few pages?  Get in touch and we can work something out.</p>
]]></content:encoded>
			<wfw:commentRss>http://UnhinderedByTalent.com/Phi/archives/2008/02/28/jocp-at-revision-400/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Decentralized, distributed systems, evolutionary computation, and prisoner&#8217;s dilemma</title>
		<link>http://UnhinderedByTalent.com/Phi/archives/2008/02/08/decentralized-distributed-systems-evolutionary-computation-and-prisoners-dilemma/</link>
		<comments>http://UnhinderedByTalent.com/Phi/archives/2008/02/08/decentralized-distributed-systems-evolutionary-computation-and-prisoners-dilemma/#comments</comments>
		<pubDate>Fri, 08 Feb 2008 08:50:50 +0000</pubDate>
		<dc:creator>Phi</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[Science]]></category>
		<category><![CDATA[cooperation]]></category>
		<category><![CDATA[distributed systems]]></category>
		<category><![CDATA[emergent behavior]]></category>
		<category><![CDATA[evolution]]></category>
		<category><![CDATA[evolutionary computation]]></category>
		<category><![CDATA[insects]]></category>
		<category><![CDATA[prisoner's dilemma]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://UnhinderedByTalent.com/Phi/archives/2008/02/08/decentralized-distributed-systems-evolutionary-computation-and-prisoners-dilemma/</guid>
		<description><![CDATA[Chris posted some cool questions on my earlier post about decentralized behavior in social insects: so what kinds of things do computer scientists do w/this idea? is sort of what evolutionary computing is about? i picked up the evolution of &#8230; <a href="http://UnhinderedByTalent.com/Phi/archives/2008/02/08/decentralized-distributed-systems-evolutionary-computation-and-prisoners-dilemma/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/nicmcphee/31627560/" title="Farming up close and personal by Unhindered by Talent, on Flickr"><img src="http://farm1.static.flickr.com/21/31627560_bb4f4a3dc8_m.jpg" width="190" height="240" alt="Farming up close and personal" align='right' vspace='10' hspace='10' /></a></p>
<p class="p1">Chris posted some cool questions on <a href="http://unhinderedbytalent.com/Phi/archives/2008/01/11/i-think-my-head-is-full-of-ants/#comment-32290">my earlier post</a> about decentralized behavior in social insects:</p>
<p class="p2"></p>
<blockquote><p>
so what kinds of things do computer scientists do w/this idea? is sort of what evolutionary computing is about? i picked up the evolution of cooperation recently (tit for tat wins prisoner’s dilemma) you must be familiar w/this, yes?”</p></blockquote>
<p class="p2"></p>
<p class="p1">There’s really three different (but related) ideas in this question:</p>
<ul>
<li>Decentralized and emergent behavior</li>
<li>Evolutionary computation</li>
<li>Game theory and cooperation</li>
</ul>
<p class="p4">I’ll take them one at a time, with more on the first of the three, at least for now.</p>
<p><span id="more-791"></span></p>
<p class="p4"><b>Decentralized and emergent behavior</b></p>
<p class="p4">People in computing are still trying to figure out how to best use the amazing things that we’re learning about critters like social insects. Probably the most promising application area is where you need flexible autonomous agents that don’t require some sort of central control.</p>
<p class="p4">One of the easiest examples would be robot exploration of a distant planet like Mars. Communication between here and there is slow enough that if you rely on control from Earth (as we currently do), things move <i>very</i> slowly. If, on the other hand, you “let them loose” there is a real risk that they’ll fall off a cliff or get stuck on a rock or whatever, and the process of replacing them is a lot slower (and more expensive) than the process of controlling them from here. An alternative, though, is to send a lot (dozens, maybe hundreds) of small and (relatively) cheap robots that work independently. In this scenario you <i>expect</i> to lose some, but count on enough surviving that you still accomplish the primary task. So instead of sending the great, lumbering <i>Lost in space</i> robot, you send a swarm of robotic ants, planning to lose a some (like worker ants) but doing great things in aggregate.</p>
<p class="p4">And this isn’t just a science fiction exercise. There are very real military applications of these ideas; imagine a hoard of reconnaissance robots, for example, in a battle theatre. You have to presume you’ll lose some of them, and you can’t have them depend on a single central control as that would present a serious weak point. There are also people exploring applications of these ideas for tasks like cleanup in extremely hazardous environment such as Chernobyl. Out on the edges of the spectrum, you have people proposing swarms of micro- or nano-devices, none of which are very smart, but which can in aggregate accomplish significant tasks.</p>
<p class="p4">One vision I’ve daydreamed about for several years, for example, would be replacing the massive combine harvester style of agriculture with a swarm of little “agribots”. These could handle things like planting, weeding, pest control, and potentially even harvesting without the need for huge expensive machines or grinding physical labor. One thing this could allow is the use of highly mixed plantings instead of the massive, fragile mono-cultures that define most of modern agriculture. Highly mixed plantings are essentially impossible in the current state of industrial agriculture, which favors vast fields of uniform crops, but were very common in pre-industrial agriculture.</p>
<p class="p4">At some level there’s a serious conflict between these approaches to problem solving and traditional computing. Most computer science is built on notions of precision and exact reproducibility. When you sort a list, for example, you want to <i>sort</i> a list in an exact and predictable way. It’s hard to predict with any precision the behavior of distributed systems with no centralized control. You can say things about their general behavior (they “tend” to do this or that), but it’s hard to perform any sort of exact analysis. This has made it hard to sell these ideas in certain quarters, especially if people want or need some level of precise understanding.</p>
<p class="p4"><b>Evolutionary computation</b></p>
<p class="p4">These kinds of decentralized, distributed systems are not inherently connected to the area of evolutionary computation (EC), although EC is often used to to aid in the programming them.</p>
<p class="p4">In EC you evolve an (often approximate) solution to a problem. You typically start with a randomly generated collection of potential solutions to a problem. Some of these are better solutions than others, so you pull out the best and mutate and/or recombine them in some way to generate a new population. Again, some of those are better than others, so you use the better ones to make a new population. This process is repeated until either a reasonable solution is found, or you get bored and try again.</p>
<p class="p4">This can work very well in certain circumstances, usually where (a) you’re OK with an approximate solution (evolution is best at producing solutions that are “good enough” rather than “perfect”), (b) you’re working in a domain that we don’t understand well (there’s no point in goofing around with evolving approximate solutions if we have tools that provide exact solutions), and (c) you do have a good way of judging the quality of solutions (without which you can’t decide who are the “winners” in the evolutionary process).</p>
<p class="p4">EC is used in a whole host of settings, some of which are very cool. (There was a great example a few years ago of evolving a satellite antenna which I could say some more about if folks are interested.) Writing programs to control highly distributed, decentralized systems remains a very challenging problem, but we can often measure how well a swarm of agents solves a problem even if we don’t really understand how they accomplish the task. Consequently EC is often at least one of the tools that is considered when developing distributed, decentralized multi-agent systems.</p>
<p class="p4"><b>Game theory and cooperation</b></p>
<p class="p4">The prisoner’s dilemma problem has long since been a favorite of mine, and I could blather on about it at great length. Sticking to the general theme here, however, it’s a nice example of a problem where the agents involved have to make decisions without being able to coordinate or communicate beforehand.</p>
<p class="p4">I&#8217;m definitely aware of (and highly recommend) Axelrod&#8217;s <em>Evolution of cooperation</em> and his other work on the prisoner’s dilemma problem; it’s easy to over-interpret some of the ideas in his book, but there is still much to be said there about cooperation, trust, and responding to threats. Hofstadter also has an nice discussion of this and a host of related problems in several chapters of <i>Metamagical themas</i>.</p>
<p class="p4">The evolution of cooperation has long been (and remains) a central question in biology as well as in evolutionary computation.  Prisoner&#8217;s dilemma has, as a result, been a subject of considerable study in the EC community.  It (along with numerous other examples from game theory) has also formed the basis of numerous EC studies in areas such economics and market studies.</p>
<p>Thanks to Chris for the excellent questions!</p>
]]></content:encoded>
			<wfw:commentRss>http://UnhinderedByTalent.com/Phi/archives/2008/02/08/decentralized-distributed-systems-evolutionary-computation-and-prisoners-dilemma/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>N-grams and the evolution of programs</title>
		<link>http://UnhinderedByTalent.com/Phi/archives/2008/02/02/n-grams-and-the-evolution-of-programs/</link>
		<comments>http://UnhinderedByTalent.com/Phi/archives/2008/02/02/n-grams-and-the-evolution-of-programs/#comments</comments>
		<pubDate>Sat, 02 Feb 2008 22:58:53 +0000</pubDate>
		<dc:creator>Phi</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[Sabbatical]]></category>
		<category><![CDATA[Science]]></category>
		<category><![CDATA[Dagstuhl]]></category>
		<category><![CDATA[estimation of distribution algorithm]]></category>
		<category><![CDATA[evolutionary computation]]></category>
		<category><![CDATA[genetic programming]]></category>
		<category><![CDATA[N-gram]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://UnhinderedByTalent.com/Phi/archives/2008/02/02/n-grams-and-the-evolution-of-programs/</guid>
		<description><![CDATA[Which of the following was written by (a) me, (b) William Shakespeare, and (c) Charles Darwin? “I would have sent to Rome that&#8217;s worthy death?” “The naturalist looking at species as he might succeed from a fork low down in &#8230; <a href="http://UnhinderedByTalent.com/Phi/archives/2008/02/02/n-grams-and-the-evolution-of-programs/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p class="p1">Which of the following was written by (a) me, (b) William Shakespeare, and (c) Charles Darwin?</p>
<p class="p2"></p>
<blockquote><p>“I would have sent to Rome that&#8217;s worthy death?”</p></blockquote>
<blockquote><p>
“The naturalist looking at species as he might succeed from a fork low down in the separation of the species of any species in a more or less from their sap this is unimportant for the instincts already possessed by certain plants so that natural selection of mere piles of superimposed strata and watch the sea separating an island even if we believe that pure water can effect little or no offspring.”
</p></blockquote>
<blockquote><p>
“The troubling aspects of a building block semantics in a given tree in the context and false.”
</p></blockquote>
<p class="p1">The answer and (much) more is below the fold.</p>
<p><span id="more-788"></span></p>
<p class="p1">That probably wasn’t too hard.</p>
<p class="p1">Except, of course, I’m a mean person and it was a trick question. In fact none of those sentences was actually written by a human being. All three of these pseudo-quotes were generated using simple statistics and the notion of <a href="http://en.wikipedia.org/wiki/N-gram">N-grams</a> (which I will describe below) to capture and reproduce the <i>sense</i> of a text, without really understanding it at a larger scale. I wrote a program to create these examples as an opening illustration for my <a href="http://kathrin.dagstuhl.de/08051/Materials2/">Dagstuhl</a> talk, and since they’re a lot of fun I thought I’d summarize the key concepts here.</p>
<p class="p2"></p>
<h3>A quick intro to N-grams</h3>
<p class="p1">The essential idea is to look at the frequency of the occurrences of groups of adjacent symbols (called N-grams). In this example the symbols are words, and we’re using N=3, so we’re looking at triplets of adjacent words. The preceding sentence, for example starts with the following sequence of triplets:</p>
<ul>
<li>(“In”, “this”, “example”)</li>
<li>(“this”, “example”, “the”)</li>
<li>(“example”, “the”, “symbols”)</li>
<li>Etc.</li>
</ul>
<p class="p1">Note that the triplets overlap, so most words will in fact appear in three N-grams (triplets), once at the end, once in the middle, and once at the beginning, as happens for “example” above.</p>
<p class="p1">Let’s say you go through a text (a book, say), and make a great big list of all the N-grams and how often they each occur. What would that tell us about that text? That depends pretty crucially on the value of N. If N=1, for example, then we’re simply counting up the frequency of individual words. This could be very useful in certain circumstances; we could, for example, probably use that to decide whether the text is a crime novel or a technical paper on econometrics. N=1, however, doesn’t give us any sense of the larger structure of the document; we may find it difficult to distinguish between two particular novels, and we’d be unable to recognize when words tended to appear in related contexts (does the author tend to mention the butler whenever missing candlestick is discussed?).</p>
<p class="p1">If, on the other hand, we take N to be much larger (several 100s or 1,000s of words) then we capture lots of long range structure, but we lose any kind of statistics. Almost all sequences of 100 consecutive words, for example, are likely to be unique. Consequently they will tend to only appear once in our table for a given text, and are unlikely to appear in the tables for any two texts (although if they did that would be a useful plagiarism flag). Very large sequences don’t really work, therefore, as a tool for looking for relationships between documents, or even patterns within a text.</p>
<p class="p1">Experience in fields such as computational linguistics suggest that taking N=3 is a useful compromise position. [1] Different triples occur often enough (assuming the text has some length) that their distribution is meaningful (like when N=1), while there’s enough structure and overlap with N=3 that you can capture some long-range regularities as well.</p>
<h3>Generating my &#8220;pseudo-quotes&#8221;</h3>
<p class="p1">All of which is illustrated by my pseudo-quotes above. Each was generated by first computing the frequency of triples in three texts: <i>Coriolanus</i>, <i>The origin of species</i>, and a paper I wrote last fall with a couple of UMM students. [2] I also kept track of the frequency with which words occurred as the first word of a sentence, and the frequency of pairs containing the first two words in every sentence.</p>
<p class="p1">The program starts generating a sentence by picking a first word based on the frequency of first words (so if 20% of the sentences started with “The”, there would be a 20% chance of starting our new sentence with “The”). Given that choice, the program would take the table of frequencies of all the pairs of first two words, and pull out just those pairs that used our chosen first word. Once we have the first two words, we can repeatedly generate words based on the frequencies of 3-grams in our big table. If we’re using <i>Coriolanus</i>, and the last two words we’ve generated were (in order) “I” and “would”, then the relevant triples that occur in that play more than once are:</p>
<table>
<tbody>
<tr>
<td valign="middle" class="td1">
        I would <i>he</i>
      </td>
<td valign="middle" class="td1">
        2 occurrences
      </td>
</tr>
<tr>
<td valign="middle" class="td1">
        I would <i>I</i></p>
</td>
<td valign="middle" class="td1">
        2 occurrences
      </td>
</tr>
<tr>
<td valign="middle" class="td1">
        <strong>I would <i>have</i></strong>
      </td>
<td valign="middle" class="td1">
        3 occurrences
      </td>
</tr>
<tr>
<td valign="middle" class="td1">
        I would <i>they</i>
      </td>
<td valign="middle" class="td1">
        4 occurrences
      </td>
</tr>
<tr>
<td valign="middle" class="td1">
        I would <i>not</i>
      </td>
<td valign="middle" class="td1">
        4 occurrences
      </td>
</tr>
</tbody>
</table>
<p class="p1">with another 11 &#8220;I would&#8221; triples that occurred a single time. Thus &#8220;I would have&#8221; (the prefix we chose in the &#8220;Shakespearean&#8221; sentence above) was more likely to be chosen than &#8220;I would he&#8221; by a ratio of 3:2, and three times more likely to be chosen than any of the triples that occurred just once. It was, on the other hand, <i>less</i> likely to be chosen than either &#8220;I would they&#8221; or &#8220;I would not&#8221;, but the (digital) dice rolled in its favor on this particular run.</p>
<p class="p1">Now that we have that start, we continue choosing words based on the last two that we&#8217;ve added to the sentence. So we look in our table at what triples start &#8220;would have&#8221;, and chose (this time) &#8220;sent&#8221; as the next word. We then look up &#8220;have sent&#8221; and chose &#8220;to&#8221;. The process continues (in my program at least) until we choose a &#8220;word&#8221; that&#8217;s in fact a terminal punctuation mark (a period, a question mark, or an exclamation point), thus ending the sentence.</p>
<h3>A few observations</h3>
<p class="p1">As we can see from the pseudo-quotes that I opened with, this process can generate sentences whose style is clearly recognizable, and which can make a great deal of sense at the local level (e.g., at the level of phrases). This process, however, doesn&#8217;t &#8220;understand&#8221; or respect larger structural connections or semantics. The third pseudo-quote, for example,</p>
<blockquote><p>
“The troubling aspects of a building block semantics in a given tree in the context and false.”
</p></blockquote>
<p class="p1">lacks a verb. The large Darwin pseudo-quote</p>
<blockquote><p>
“The naturalist looking at species as he might succeed from a fork low down in the separation of the species of any species in a more or less from their sap this is unimportant for the instincts already possessed by certain plants so that natural selection of mere piles of superimposed strata and watch the sea separating an island even if we believe that pure water can effect little or no offspring.”
</p></blockquote>
<p class="p1">rambles all over the shop, containing very sensible phrases like &#8220;The naturalist looking at species&#8221; as well as nonsense such as &#8220;pure water can effect little or no offspring&#8221;.</p>
<h3>What we did with it</h3>
<p class="p1">In the research I was reporting on, Riccardo Poli and I applied this idea of N-grams as a tool for capturing regularities in a language to computer programs that were represented as sequences of simple &#8220;machine&#8221; instructions in a highly simplified programming language that was designed for a specific set of test problems. We used a type of <i>Estimation of distribution algorithm</i> (EDA) to essentially evolve the triplet frequencies, instead of taking them from a text like I did with <i>Coriolanus</i>, and then used those to generate programs much like I did with the text examples. We would generate a set of, say, 100 programs this way, and try each of them on our test problem. Some were better than others, so we&#8217;d take the better ones (say the top half) and use those to update the frequencies; triplets that appeared in those better programs would have their frequencies increased somewhat, while those that didn&#8217;t would have their frequencies reduced.</p>
<p class="p1">When repeated over several generations, this process would evolve/learn/find/discover a set of frequencies that allowed it to generate successful programs with a reasonably high probability, at least on problems that had solutions that could be formed from repeated sequences of instructions. Even though it was limited to only 3-grams, the system was able to &#8220;learn&#8221; some fairly long sequences of instructions. In one case, for example, the evolved set of probabilities generated, given a particular starting pair, a particular sequence of 9 instructions with probability of over 60%, which is some 500,000 times more likely than generating a sequence of that length by randomly drawing instructions from a hat. The solutions that were generated tended to be composed of numerous copies of a small number of basic patterns, and it seems likely that this approach will do better in problem spaces where there are solutions that exhibit that kind of regularity.</p>
<p class="p1">If you&#8217;re interested in learning more, check out the paper: “<a href="http://www.essex.ac.uk/dces/research/publications/technicalreports/2008/ces-479.pdf">A Linear Estimation-of-Distribution GP System</a>”.</p>
<p class="p6">[1] Does anyone know of a theoretical justification for this?</p>
<p class="p6">[2] ”<a href="http://www.morris.umn.edu/academic/fclt/Working%20Papers/Morris_WP_3.2.pdf">Semantic building blocks in Genetic Programming</a>”, which will be appearing next month in the Proceedings of the European Conference on Genetic Programming (provide link).</p>
]]></content:encoded>
			<wfw:commentRss>http://UnhinderedByTalent.com/Phi/archives/2008/02/02/n-grams-and-the-evolution-of-programs/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Celebrate your inner nerd!</title>
		<link>http://UnhinderedByTalent.com/Phi/archives/2008/01/15/celebrate-your-inner-nerd/</link>
		<comments>http://UnhinderedByTalent.com/Phi/archives/2008/01/15/celebrate-your-inner-nerd/#comments</comments>
		<pubDate>Tue, 15 Jan 2008 14:59:25 +0000</pubDate>
		<dc:creator>Phi</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[competition]]></category>
		<category><![CDATA[contest]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[TopCoder]]></category>

		<guid isPermaLink="false">http://UnhinderedByTalent.com/Phi/archives/2008/01/15/celebrate-your-inner-nerd/</guid>
		<description><![CDATA[Registration for both the Algorithm and Marathon competitions in this year&#8217;s TopCoder Open close in the last week of January, so start sharpening your &#8230; uh &#8230; programming &#8230; thingies &#8230; I was participating in TopCoder events a fair bit &#8230; <a href="http://UnhinderedByTalent.com/Phi/archives/2008/01/15/celebrate-your-inner-nerd/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.topcoder.com/tc?module=Static&#038;d1=tournaments&#038;d2=tco08&#038;d3=about"><img src="http://www.topcoder.com/i/home/tco08registerBanner.png" alt="TopCoder Open 2008 registration banner" /></a></p>
<p>Registration for both the Algorithm and Marathon competitions in this year&#8217;s <a href="http://www.topcoder.com/tc?module=Static&#038;d1=tournaments&#038;d2=tco08&#038;d3=about">TopCoder Open</a> close in the last week of January, so start sharpening your &#8230; uh &#8230; programming &#8230; thingies &#8230;</p>
<p>I was participating in TopCoder events a fair bit when we first got to Colchester.  I stopped, though, once the research really got up to speed, and I haven&#8217;t participated in TopCoder in several months.  I&#8217;m not entirely sure I&#8217;ll be able to participate in this year&#8217;s open (there may be an unavoidable scheduling conflict), but it would be nice to try to add another t-shirt to my collection. </p>
<p>For those about to code, we salute you!</p>
]]></content:encoded>
			<wfw:commentRss>http://UnhinderedByTalent.com/Phi/archives/2008/01/15/celebrate-your-inner-nerd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A wonderfully different way to thing about computing</title>
		<link>http://UnhinderedByTalent.com/Phi/archives/2007/11/19/a-wonderfully-different-way-to-thing-about-computing/</link>
		<comments>http://UnhinderedByTalent.com/Phi/archives/2007/11/19/a-wonderfully-different-way-to-thing-about-computing/#comments</comments>
		<pubDate>Mon, 19 Nov 2007 20:45:31 +0000</pubDate>
		<dc:creator>Phi</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[Politics]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[Science]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[culture]]></category>
		<category><![CDATA[One Laptop Per Child]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[programming languages]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://UnhinderedByTalent.com/Phi/archives/2007/11/19/a-wonderfully-different-way-to-thing-about-computing/</guid>
		<description><![CDATA[One of my constant struggles as an educator in computer science has been helping students see a bigger picture, look past the mundanities of yesterday&#8217;s &#8220;help wanted&#8221; page, and see what the world could be rather than what it has &#8230; <a href="http://UnhinderedByTalent.com/Phi/archives/2007/11/19/a-wonderfully-different-way-to-thing-about-computing/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://laptopgiving.org/"><img src="http://laptopgiving.org/g1g1/logo_v2.gif" alt="One Laptop Per Child logo" align='right' hspace='10' vspace='10' /></a><br />
One of my constant struggles as an educator in computer science has been helping students see a bigger picture, look past the mundanities of yesterday&#8217;s &#8220;help wanted&#8221; page, and see what the world <em>could be</em> rather than what it <em>has been</em>.</p>
<p>One way this has often played out has been in debates over programming languages and development tools.  Students are (quite legitimately) concerned with their near term employment prospects, and so they tend to focus what they&#8217;ve heard of, and what they see in the job web sites.  Unfortunately that is almost always an exercise in looking backwards in time.  When I started in 1991, the problem was getting students out of Pascal and C and start thinking about objects.  Now we&#8217;re working to add things like Ruby and Python to our Java-heavy toolkit.  Constant throughout has been the difficult task of getting them to take (semi-) functional languages (Scheme, Haskell) seriously or, in fact, any language doesn&#8217;t have a &#8220;For dummies&#8221; book at their local mega-bookshop.</p>
<p>I need to be fair, though, and make it clear that we&#8217;ve always had students who could see the bigger picture, and have often pushed us faculty to open some important new doors.  I suspect that we&#8217;ve actually been luckier in that respect at UMM than many other programs.  That said, you still get groaners (often very vocal) who never seem to be happy unless you&#8217;re emphasizing whatever tool or language they&#8217;re firmly convinced is their only road to employment.</p>
<p>This is one of the reasons that it makes me so happy to see <a href="http://laptop.org/laptop/software/specs.shtml">the list of programming languages used in the One Laptop Per Child project</a>:</p>
<blockquote><p>
We will support five programming environments on the laptop: (1) Python, from which we have built our user interface and our activity model; (2) Javascript for browser-based scripting; (3) Csound, a programmable music and audio environment; (4) Squeak, a version of Smalltalk embedded into a media-rich authoring environment; and (5) Logo. We will also provide some support for Java and Flash.
</p></blockquote>
<p>OK, we can debate the details (and I&#8217;m sure people have and will), but let&#8217;s skip all that shall we?  Let&#8217;s instead note that <em>none</em> of these was a &#8220;heavy hitter&#8221; 5 or 10 years ago, and there are plenty of people who would (wrongly in my opinion) argue that none are terribly important today.  How many data structures classes in the U.S., for example, (a key &#8220;bread and butter&#8221; course in most computing curriculums) use any of these languages?  I&#8217;m sure there are a few (especially Python), but proportionally I bet it&#8217;s pretty tiny.  (Try searching either Amazon or the web for textbooks for such a course, for example.)</p>
<p>It&#8217;s also worth considering impact here.  Sure, I doubt that anyone&#8217;s likely to start building inventory control systems in Logo, but should that be the issue?  What&#8217;s the real opportunity for impact here?  How do I change the world?  By building accounting systems?  Or by contributing to a project that plans to put computers and software in the hands to <em>millions of kids all around the world</em>?</p>
<p>You want to make the world a better place?  You want to <em>really</em> fight terrorism?  Then give people hope, a chance to grow and make their world better.  Give them something to protect.  Contribute to a project like this.</p>
<p>And, if you&#8217;re contributing to this project, you apparently program in Python, JavaScript, CSound, Squeak and Logo.</p>
<p>So let&#8217;s put an end to the whining about these not being &#8220;real&#8221; programming languages and nobody building &#8220;real&#8221; programs with them.  I&#8217;ve written a crapload of Java code in my day that only a handful of people will ever use.  Some bright bulbs used Squeak to build <a href="http://scratch.mit.edu/">Scratch</a>, which I suspect will be used by millions.  Hmmm &#8230; which do I find more impressive?</p>
]]></content:encoded>
			<wfw:commentRss>http://UnhinderedByTalent.com/Phi/archives/2007/11/19/a-wonderfully-different-way-to-thing-about-computing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

