<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title>SORESCODE - Home</title>
  <id>tag:www.gotascii.com,2010:mephisto/</id>
  <generator version="0.8.0" uri="http://mephistoblog.com">Mephisto Drax</generator>
  <link href="http://www.gotascii.com/feed/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="http://www.gotascii.com/" rel="alternate" type="text/html"/>
  <updated>2010-09-01T15:07:39Z</updated>
  <entry xml:base="http://www.gotascii.com/">
    <author>
      <name>gotascii</name>
    </author>
    <id>tag:www.gotascii.com,2010-07-27:138</id>
    <published>2010-07-27T03:26:00Z</published>
    <updated>2010-09-01T15:07:39Z</updated>
    <link href="http://www.gotascii.com/2010/7/27/bypass-featured-on-tv" rel="alternate" type="text/html"/>
    <title>Bypass Featured on TV</title>
<content type="html">
            &lt;p&gt;I&#8217;m currently the lead developer on a mobile web application that was just featured on &lt;a href=&quot;http://www.kvue.com/&quot;&gt;&lt;span class=&quot;caps&quot;&gt;KVUE&lt;/span&gt;&lt;/a&gt; in Austin, Texas. The app has been amazing to work on as it&#8217;s provided a host of challenges I&#8217;ve never faced before. The service the app provides is even more exciting as I&#8217;m a die-hard &lt;a href=&quot;http://redskins.com&quot;&gt;Redskins&lt;/a&gt; fan and have spent my fair share of time standing in line at FedEx Field. You can check out the details on the official &lt;a href=&quot;http://bypasslane.com&quot;&gt;Bypass Lane Website&lt;/a&gt; or you can check out &lt;a href=&quot;http://www.kvue.com/news/local/Order-food-on-your-phone-at-Dell-Diamond-98887724.html&quot;&gt;the Bypass TV clip on the &lt;span class=&quot;caps&quot;&gt;KVUE&lt;/span&gt; website&lt;/a&gt;.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.gotascii.com/">
    <author>
      <name>gotascii</name>
    </author>
    <id>tag:www.gotascii.com,2010-07-13:137</id>
    <published>2010-07-13T18:17:00Z</published>
    <updated>2010-07-13T18:24:54Z</updated>
    <link href="http://www.gotascii.com/2010/7/13/distributing-your-data" rel="alternate" type="text/html"/>
    <title>Distributing Your Data</title>
<content type="html">
            &lt;p&gt;This weekend I gave a presentation at &lt;a href=&quot;http://devnation.us/events/10&quot;&gt;Devnation Portland&lt;/a&gt; on some of the concepts behind distributed data stores.  You can checkout the slides on &lt;a href=&quot;http://sorescode.com/talks&quot;&gt;my talks page&lt;/a&gt; or you can &lt;a href=&quot;http://github.com/gotascii/talks/raw/master/distributing_your_data/distributing_your_data.pdf&quot;&gt;download the &lt;span class=&quot;caps&quot;&gt;PDF&lt;/span&gt;&lt;/a&gt;. Thanks to all the speakers and to everyone who came out! I had a great time and I&#8217;ll definitely be attending, and hopefully speaking, at another Devnation event in the near future.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.gotascii.com/">
    <author>
      <name>gotascii</name>
    </author>
    <id>tag:www.gotascii.com,2010-04-15:136</id>
    <published>2010-04-15T14:48:00Z</published>
    <updated>2010-04-15T14:50:54Z</updated>
    <link href="http://www.gotascii.com/2010/4/15/language-rdoc" rel="alternate" type="text/html"/>
    <title>Language.rdoc</title>
<content type="html">
            &lt;p&gt;While programing I usually have a few different rdocs open for the various libraries I am working with. I also have a dictionary and a thesaurus on hand and have often noticed I reference them more than the rdocs. I&#8217;ve always felt that there is a literary art form to abstraction naming but I have never been able to succinctly state why I felt this was so important. It existed as a strong intuition, something I knew was worth focusing on.&lt;/p&gt;
&lt;h2&gt;Ruby Hacknight to the Rescue&lt;/h2&gt;
&lt;p&gt;In order to prepare for the next &lt;a href=&quot;http://www.meetup.com/rubyhacknight/calendar/12843121/&quot;&gt;Ruby Hacknight&lt;/a&gt; I have been reading &lt;a href=&quot;http://www.amazon.com/Refactoring-Ruby-Jay-Fields/dp/0321603508&quot;&gt;Refactoring, Ruby Ed.&lt;/a&gt; and recently came across this quote which states precisely why proper naming is important.&lt;/p&gt;

&lt;p&gt;
&lt;blockquote&gt;So much of object-oriented design depends on the effectiveness of the abstractions that you create. Let’s say you have object A that delegates to object B, which in turn delegates to object C. It is much easier to understand the algorithm if each object can be synthesized in isolation by the reader. To provide for this, the clarity of the public interface of the object being delegated to is important. If object B’s public interface represents a cohesive piece of behavior with a well-named class, well- named methods, and parameter lists that make sense given the name of the method, a reader is less likely to have to delve into the details of object B to understand object A. Without this clear abstraction around the behavior of object B, the reader will have to move back and forth between object A and object B (and perhaps object C as well), and understanding of the algorithm will be much more difficult.&lt;/blockquote&gt;

Fields, Jay, Shane Harvie, Martin Fowler and Kent Beck. &lt;span&gt;Refactoring&lt;/span&gt;. Ruby ed. Upper Saddle River: Addison-Wesley, 2010.
&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.gotascii.com/">
    <author>
      <name>gotascii</name>
    </author>
    <id>tag:www.gotascii.com,2010-03-29:135</id>
    <published>2010-03-29T20:11:00Z</published>
    <updated>2010-03-29T20:11:50Z</updated>
    <link href="http://www.gotascii.com/2010/3/29/rails-3-generator-guts" rel="alternate" type="text/html"/>
    <title>Rails 3 Generators: Hooks</title>
<content type="html">
            &lt;p&gt;After a cold and dismal winter which has left this blog as barren as the icy tundra, I have emerged from a state of deep hibernation with an informative blog post on &lt;a href=&quot;http://www.viget.com/extend/rails-3-generators-hooks/&quot;&gt;Rails 3 generator hooks&lt;/a&gt;. Watch out because a follow up post that details how you can use Rails 3 generator hooks in your own custom generators is hot on the heels of this post. In addition, let it be known that I have officially broken the vow of winter silence I took 3 months ago.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.gotascii.com/">
    <author>
      <name>gotascii</name>
    </author>
    <id>tag:www.gotascii.com,2009-12-22:133</id>
    <published>2009-12-22T00:00:00Z</published>
    <updated>2009-12-22T21:59:09Z</updated>
    <link href="http://www.gotascii.com/2009/12/22/hackday-intro-to-ruby-meta-programming" rel="alternate" type="text/html"/>
    <title>Hackday: Intro to Ruby Meta-Programming</title>
<content type="html">
            &lt;p&gt;Me and my esteemed colleague, &lt;a href=&quot;http://www.viget.com/about/team/mswasey&quot;&gt;Matt Swasey&lt;/a&gt;, just wrapped up the &lt;a href=&quot;http://www.meetup.com/rubyhacknight/calendar/11696332/&quot;&gt;third Hackday&lt;/a&gt; at &lt;a href=&quot;http://viget.com&quot;&gt;Viget Labs&lt;/a&gt;. For this Hackday we led a discussion surrounding the mind-altering world of meta-programming. You can read a detailed summary of the event on the &lt;a href=&quot;http://www.viget.com/extend/hackday-intro-to-ruby-meta-programming/&quot;&gt;Viget Extend blog&lt;/a&gt;. You can also take a look at the code and notes we put together on &lt;a href=&quot;http://github.com/gotascii/metaprogramming&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.gotascii.com/">
    <author>
      <name>gotascii</name>
    </author>
    <id>tag:www.gotascii.com,2009-11-07:132</id>
    <published>2009-11-07T00:00:00Z</published>
    <updated>2010-01-03T14:57:10Z</updated>
    <link href="http://www.gotascii.com/2009/11/7/pygrack-pygments-highlighting-middleware" rel="alternate" type="text/html"/>
    <title>Pygrack, Pygments Highlighting Middleware</title>
<summary type="html">&lt;p&gt;&lt;a href=&quot;http://rack.rubyforge.org/&quot;&gt;Rack&lt;/a&gt;, the ruby web server interface, has a powerful feature called rack middleware that allows you to filter requests and responses in your application. In an effort to explore the possible uses of middleware &lt;a href=&quot;http://lunarlogicpolska.com/&quot;&gt;Lunar Logic Polska&lt;/a&gt; created &lt;a href=&quot;http://coderack.org/&quot;&gt;CodeRack&lt;/a&gt;, a rack middleware coding contest. When &lt;a href=&quot;http://github.com/mig&quot;&gt;Matt Swasey&lt;/a&gt;, a fellow &lt;a href=&quot;http://viget.com&quot;&gt;Viget Labs&lt;/a&gt; developer, saw that &lt;a href=&quot;http://github.com/trevorturk&quot;&gt;Trevor Turk&lt;/a&gt; had created a &lt;a href=&quot;http://pygments.appspot.com/&quot;&gt;pygments &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;&lt;/a&gt; he suggested that we create a CodeRack entry that uses the &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; to provide syntax highlighting to your rack application.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;&lt;a href=&quot;http://rack.rubyforge.org/&quot;&gt;Rack&lt;/a&gt;, the ruby web server interface, has a powerful feature called rack middleware that allows you to filter requests and responses in your application. In an effort to explore the possible uses of middleware &lt;a href=&quot;http://lunarlogicpolska.com/&quot;&gt;Lunar Logic Polska&lt;/a&gt; created &lt;a href=&quot;http://coderack.org/&quot;&gt;CodeRack&lt;/a&gt;, a rack middleware coding contest. When &lt;a href=&quot;http://github.com/mig&quot;&gt;Matt Swasey&lt;/a&gt;, a fellow &lt;a href=&quot;http://viget.com&quot;&gt;Viget Labs&lt;/a&gt; developer, saw that &lt;a href=&quot;http://github.com/trevorturk&quot;&gt;Trevor Turk&lt;/a&gt; had created a &lt;a href=&quot;http://pygments.appspot.com/&quot;&gt;pygments &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;&lt;/a&gt; he suggested that we create a CodeRack entry that uses the &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; to provide syntax highlighting to your rack application.&lt;/p&gt;
&lt;h2&gt;Pygments&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://pygments.org/&quot;&gt;Pygments&lt;/a&gt; provides syntax highlighting via a Python library and command-line interface. Trevor Turk created a Google App Engine that provides an &lt;span class=&quot;caps&quot;&gt;HTTP&lt;/span&gt; interface to the library. Basically, you send the engine some &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt; via an &lt;span class=&quot;caps&quot;&gt;HTTP&lt;/span&gt; request and it sends you the pygmentized version of the code you passed in. This allows systems and applications that don&#8217;t have python available to use pygments. If you do have python installed you can add syntax highlighting to your ruby application via the &lt;a href=&quot;http://github.com/github/albino/blob/master/albino.rb&quot;&gt;albino library&lt;/a&gt;, a small wrapper around the pygments command-line interface.&lt;/p&gt;
&lt;h2&gt;Pygrack&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://coderack.org/users/the2craigs/entries/73-pygrack&quot;&gt;Pygrack&lt;/a&gt; uses the built-in net-http library and &lt;a href=&quot;http://github.com/tenderlove/nokogiri/&quot;&gt;nokogiri&lt;/a&gt;, an impressive markup parser, to inject pygment syntax highlighting into your rack application. In order to use Pygrack you&#8217;ll need to add it to your rackup config.&lt;/p&gt;
&lt;div class=&quot;CodeMacro&quot;&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;pygrack&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;map &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  use &lt;span class=&quot;co&quot;&gt;Pygrack&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  run &lt;span class=&quot;co&quot;&gt;Rack&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;Directory&lt;/span&gt;.new(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;./public&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;Next, wrap your code block in a pre tag with a class attribute that contains the language you want to apply to the block.&lt;/p&gt;
&lt;div class=&quot;CodeMacro&quot;&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;ta&quot;&gt;&amp;lt;pre&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;class&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;code ruby&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  # make sure you dry all your glue&lt;tt&gt;
&lt;/tt&gt;  def sticking&lt;tt&gt;
&lt;/tt&gt;   @gloo = 'pasting'&lt;tt&gt;
&lt;/tt&gt;   puts @gloo&lt;tt&gt;
&lt;/tt&gt;  end&lt;tt&gt;
&lt;/tt&gt;  puts &amp;quot;glue is good for #{sticking}&amp;quot;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;ta&quot;&gt;&amp;lt;/pre&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;At this point you&#8217;ll need to include one of the pygments css files. You can grab &lt;a href=&quot;http://github.com/trevorturk/pygments/blob/master/default.css&quot;&gt;the default one&lt;/a&gt; from Trevor&#8217;s &lt;a href=&quot;http://github.com/trevorturk/pygments&quot;&gt;pygments &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; repository&lt;/a&gt; or choose one from the list &lt;a href=&quot;http://github.com/richleland/pygments-css&quot;&gt;here&lt;/a&gt;. Start your rack application, using &lt;a href=&quot;http://github.com/rtomayko/shotgun&quot;&gt;shotgun&lt;/a&gt; perhaps, and you should see some sweet pygments syntax highlighting. You can get the pygments code and see a simple rack application example at the &lt;a href=&quot;http://github.com/gotascii/pygrack&quot;&gt;pygrack github repository&lt;/a&gt;.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.gotascii.com/">
    <author>
      <name>gotascii</name>
    </author>
    <id>tag:www.gotascii.com,2009-10-26:130</id>
    <published>2009-10-26T00:00:00Z</published>
    <updated>2009-10-26T16:35:58Z</updated>
    <link href="http://www.gotascii.com/2009/10/26/simple_importer-a-csv-processing-gem" rel="alternate" type="text/html"/>
    <title>simple_importer, a csv processing gem</title>
<content type="html">
            &lt;p&gt;I just released a tiny gem that helps in creating &lt;span class=&quot;caps&quot;&gt;CSV&lt;/span&gt; import tasks. Check out the &lt;a href=&quot;http://www.viget.com/extend/re-introducing-simple-importer/&quot;&gt;introductory blog post&lt;/a&gt; on the &lt;a href=&quot;http://www.viget.com/extend/&quot;&gt;Viget Labs developer blog&lt;/a&gt;.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.gotascii.com/">
    <author>
      <name>gotascii</name>
    </author>
    <id>tag:www.gotascii.com,2009-10-08:128</id>
    <published>2009-10-08T00:00:00Z</published>
    <updated>2009-10-08T22:35:41Z</updated>
    <link href="http://www.gotascii.com/2009/10/8/getting-xml-into-your-processing-sketch" rel="alternate" type="text/html"/>
    <title>Getting XML Into Your Processing Sketch</title>
<summary type="html">&lt;p&gt;During one of the recent Learning Processing sessions, &lt;a href=&quot;http://www.keithmuth.net/&quot;&gt;Keith&lt;/a&gt; asked how one would go about getting data from a web service, such as &lt;a href=&quot;http://developer.yahoo.com/yql/&quot;&gt;&lt;span class=&quot;caps&quot;&gt;YQL&lt;/span&gt;&lt;/a&gt;, into a Processing sketch.  After poking around the Processing &lt;a href=&quot;http://processing.org/reference/libraries/&quot;&gt;library reference&lt;/a&gt; we were able to create an example of how to pull in data from a web service and use it to control the parameters of a sketch.&lt;/p&gt;
</summary><content type="html">
            &lt;p&gt;During one of the recent Learning Processing sessions, &lt;a href=&quot;http://www.keithmuth.net/&quot;&gt;Keith&lt;/a&gt; asked how one would go about getting data from a web service, such as &lt;a href=&quot;http://developer.yahoo.com/yql/&quot;&gt;&lt;span class=&quot;caps&quot;&gt;YQL&lt;/span&gt;&lt;/a&gt;, into a Processing sketch.  After poking around the Processing &lt;a href=&quot;http://processing.org/reference/libraries/&quot;&gt;library reference&lt;/a&gt; we were able to create an example of how to pull in data from a web service and use it to control the parameters of a sketch.&lt;/p&gt;

&lt;p&gt;It turns out getting &lt;span class=&quot;caps&quot;&gt;XML&lt;/span&gt; data into Processing from a web service is pretty easy.  The first thing we need to do is import the built-in &lt;span class=&quot;caps&quot;&gt;XML&lt;/span&gt; library.&lt;/p&gt;

&lt;div class=&quot;CodeMacro&quot;&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;kw&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;ic&quot;&gt;processing.xml&lt;/span&gt;.*;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;


&lt;p&gt;Next we construct our query string using a &lt;a href=&quot;http://developer.yahoo.com/yql/&quot;&gt;&lt;span class=&quot;caps&quot;&gt;YQL&lt;/span&gt;&lt;/a&gt; query that returns the most interesting flickr photos.  You can take a look at the result here &lt;a href=&quot;http://tinyurl.com/ydqc4rt&quot;&gt;select * from flickr.photos.interestingness(10)&lt;/a&gt;.  One of the cooler aspects of XMLElement is that you can initialize an object with a url and it will take care of making the http request and fetching the &lt;span class=&quot;caps&quot;&gt;XML&lt;/span&gt;.&lt;/p&gt;

&lt;div class=&quot;CodeMacro&quot;&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;ty&quot;&gt;String&lt;/span&gt; query = &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20flickr.photos.interestingness(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; + count + &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&amp;amp;format=xml&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;XMLElement xml = &lt;span class=&quot;kw&quot;&gt;new&lt;/span&gt; XMLElement(&lt;span class=&quot;lv&quot;&gt;this&lt;/span&gt;, query);&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;


&lt;p&gt;There are two children returned in the &lt;span class=&quot;caps&quot;&gt;XML&lt;/span&gt;: diagnostics and results.  We want to examine the data in results, so we get that block of &lt;span class=&quot;caps&quot;&gt;XML&lt;/span&gt; via the &lt;a href=&quot;http://processing.org/reference/XMLElement_getChild_.html&quot;&gt;getChild&lt;/a&gt; method.  Children are indexed starting at 0, so the second child is at index 1.&lt;/p&gt;

&lt;div class=&quot;CodeMacro&quot;&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;XMLElement results = xml.getChild(&lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;);&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;


&lt;p&gt;At this point we can stop and party for a while because we have technically achieved our goal. We have pulled some data into our sketch and it is sitting inside our XMLElement object. The next step is to iterate through the data and do something with it.&lt;/p&gt;
&lt;p&gt;Before we started to code we took some time to analyze the data and figure out a few different ways to display it.  I noticed that with each record flickr returned a server id.  We assumed this identified the server that contains the picture.  I was curious as to how distributed the results were and we decided to write a sketch based on this aspect of the data.  One of the most interesting things to do in Processing is to find new ways of looking at data in order to expose hidden characteristics.&lt;/p&gt;
&lt;p&gt;The first thing we&#8217;ll do is iterate through the records using a for loop. The &lt;a href=&quot;http://processing.org/reference/XMLElement_getChildCount_.html&quot;&gt;getChildCount&lt;/a&gt; method allows us to define the for loop conditions and we use &lt;a href=&quot;http://processing.org/reference/XMLElement_getChild_.html&quot;&gt;getChild&lt;/a&gt; inside the loop to access individual results.  The &lt;a href=&quot;http://processing.org/reference/XMLElement_getStringAttribute_.html&quot;&gt;getStringAttribute&lt;/a&gt; lets us get specific attribute values from a particular record so we&#8217;ll use that to get back the server id.&lt;/p&gt;
&lt;div class=&quot;CodeMacro&quot;&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;kw&quot;&gt;for&lt;/span&gt;(&lt;span class=&quot;ty&quot;&gt;int&lt;/span&gt; i = &lt;span class=&quot;i&quot;&gt;0&lt;/span&gt;; i &amp;lt; results.getChildCount(); i++) {&lt;tt&gt;
&lt;/tt&gt;  XMLElement result = results.getChild(i);&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;ty&quot;&gt;String&lt;/span&gt; server = result.getStringAttribute(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);&lt;tt&gt;
&lt;/tt&gt;}&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;


&lt;p&gt;We tie all together by first checking to see if we&#8217;ve created an entry in our HashMap.  If we haven&#8217;t, we create one and put a 1 in the counter.  If we find an entry already exists, we increment the counter stored at that key and save it.&lt;/p&gt;

&lt;div class=&quot;CodeMacro&quot;&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;ty&quot;&gt;HashMap&lt;/span&gt; hm = &lt;span class=&quot;kw&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;ty&quot;&gt;HashMap&lt;/span&gt;();&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;kw&quot;&gt;for&lt;/span&gt;(&lt;span class=&quot;ty&quot;&gt;int&lt;/span&gt; i = &lt;span class=&quot;i&quot;&gt;0&lt;/span&gt;; i &amp;lt; results.getChildCount(); i++) {&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;kw&quot;&gt;if&lt;/span&gt;(hm.get(server) == &lt;span class=&quot;kw&quot;&gt;null&lt;/span&gt;) {&lt;tt&gt;
&lt;/tt&gt;    hm.put(server, &lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;);&lt;tt&gt;
&lt;/tt&gt;  } &lt;span class=&quot;kw&quot;&gt;else&lt;/span&gt; {&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;ty&quot;&gt;Integer&lt;/span&gt; sum = (&lt;span class=&quot;ty&quot;&gt;Integer&lt;/span&gt;)hm.get(server);&lt;tt&gt;
&lt;/tt&gt;    sum += &lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;    hm.put(server, sum);&lt;tt&gt;
&lt;/tt&gt;  }&lt;tt&gt;
&lt;/tt&gt;}&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;


&lt;p&gt;When the loop finishes running we&#8217;ll have a HashMap with keys that correspond to server ids and values that contain the number of images that server holds.  We took that data and made a simple processing sketch that creates ellipses which are larger and more red if they are serving more images.  In the end, the sketch turned out to be a strange sort of load monitoring visualization for flickr.  You can get the code for this sketch &lt;a href=&quot;http://github.com/gotascii/processing/blob/master/notes/xml/xml.pde&quot;&gt;here&lt;/a&gt;.  Here is the full code for our HashMap creation method.&lt;/p&gt;
&lt;div class=&quot;CodeMacro&quot;&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;kw&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;ic&quot;&gt;processing.xml&lt;/span&gt;.*;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;ty&quot;&gt;HashMap&lt;/span&gt; serverCounts(&lt;span class=&quot;ty&quot;&gt;int&lt;/span&gt; count) {&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;ty&quot;&gt;String&lt;/span&gt; query = &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20flickr.photos.interestingness(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; + count + &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&amp;amp;format=xml&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;  XMLElement xml = &lt;span class=&quot;kw&quot;&gt;new&lt;/span&gt; XMLElement(&lt;span class=&quot;lv&quot;&gt;this&lt;/span&gt;, query);&lt;tt&gt;
&lt;/tt&gt;  XMLElement results = xml.getChild(&lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;);&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;ty&quot;&gt;HashMap&lt;/span&gt; hm = &lt;span class=&quot;kw&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;ty&quot;&gt;HashMap&lt;/span&gt;();&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;kw&quot;&gt;for&lt;/span&gt;(&lt;span class=&quot;ty&quot;&gt;int&lt;/span&gt; i = &lt;span class=&quot;i&quot;&gt;0&lt;/span&gt;; i &amp;lt; results.getChildCount(); i++) {&lt;tt&gt;
&lt;/tt&gt;    XMLElement result = results.getChild(i);&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;ty&quot;&gt;String&lt;/span&gt; server = result.getStringAttribute(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;kw&quot;&gt;if&lt;/span&gt;(hm.get(server) == &lt;span class=&quot;kw&quot;&gt;null&lt;/span&gt;) {&lt;tt&gt;
&lt;/tt&gt;      hm.put(server, &lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;);&lt;tt&gt;
&lt;/tt&gt;    } &lt;span class=&quot;kw&quot;&gt;else&lt;/span&gt; {&lt;tt&gt;
&lt;/tt&gt;      &lt;span class=&quot;ty&quot;&gt;Integer&lt;/span&gt; sum = (&lt;span class=&quot;ty&quot;&gt;Integer&lt;/span&gt;)hm.get(server);&lt;tt&gt;
&lt;/tt&gt;      sum += &lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;      hm.put(server, sum);&lt;tt&gt;
&lt;/tt&gt;    }&lt;tt&gt;
&lt;/tt&gt;  }&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;kw&quot;&gt;return&lt;/span&gt; hm;&lt;tt&gt;
&lt;/tt&gt;}&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
          </content>  </entry>
  <entry xml:base="http://www.gotascii.com/">
    <author>
      <name>gotascii</name>
    </author>
    <id>tag:www.gotascii.com,2009-09-03:11</id>
    <published>2009-09-03T00:00:00Z</published>
    <updated>2009-09-03T17:20:07Z</updated>
    <link href="http://www.gotascii.com/2009/9/3/learning-processing-lesson-1" rel="alternate" type="text/html"/>
    <title>Learning Processing, Lesson 1</title>
<summary type="html">&lt;p&gt;Over the next few weeks months I will be teaching a small introduction to programming course at &lt;a href=&quot;http://vigetlabs.com&quot;&gt;Viget Labs&lt;/a&gt;.  I&#8217;ll be using &lt;a href=&quot;http://processing.org&quot;&gt;Processing&lt;/a&gt; as a means to explore some basic programming concepts and I&#8217;ll be following the excellent book &lt;a href=&quot;http://www.learningprocessing.com/&quot;&gt;Learning Processing: A Beginner&#8217;s Guide to Programming Images, Animation, and Interaction&lt;/a&gt; by &lt;a href=&quot;http://www.shiffman.net&quot;&gt;Daniel Shiffman&lt;/a&gt;.  Each lesson will have an accompanying blog post that outlines the topics we&#8217;ll try to cover and links to any resources we may need.   Here are some notes on Lesson 1.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;Over the next few weeks months I will be teaching a small introduction to programming course at &lt;a href=&quot;http://vigetlabs.com&quot;&gt;Viget Labs&lt;/a&gt;.  I&#8217;ll be using &lt;a href=&quot;http://processing.org&quot;&gt;Processing&lt;/a&gt; as a means to explore some basic programming concepts and I&#8217;ll be following the excellent book &lt;a href=&quot;http://www.learningprocessing.com/&quot;&gt;Learning Processing: A Beginner&#8217;s Guide to Programming Images, Animation, and Interaction&lt;/a&gt; by &lt;a href=&quot;http://www.shiffman.net&quot;&gt;Daniel Shiffman&lt;/a&gt;.  Each lesson will have an accompanying blog post that outlines the topics we&#8217;ll try to cover and links to any resources we may need.   Here are some notes on Lesson 1.&lt;/p&gt;
&lt;h2&gt;Points&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Explained the difference between the Cartesian coordinate system and the Processing coordinate system.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;CodeMacro&quot;&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;  point(x, y);&lt;tt&gt;
&lt;/tt&gt;  line(x1, y1, x2, y2);&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;


&lt;h2&gt;Shapes&lt;/h2&gt;

&lt;div class=&quot;CodeMacro&quot;&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;  rect(x, y, w, h);&lt;tt&gt;
&lt;/tt&gt;  rectMode(CORNER); // default&lt;tt&gt;
&lt;/tt&gt;  rectMode(CENTER);&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  rectMode(CORNERS);&lt;tt&gt;
&lt;/tt&gt;  rect(x1, y1, x2, y2);&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  ellipseMode(CENTER); //default&lt;tt&gt;
&lt;/tt&gt;  ellipse(x, y, w, h);&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;


&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.processing.org/learning/tutorials/basics/&quot;&gt;http://www.learningprocessing.com//learning/tutorials/basics&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.learningprocessing.com/exercises/chapter-1/exercise-1-1/&quot;&gt;http://www.learningprocessing.com/exercises/chapter-1/exercise-1-1/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.learningprocessing.com/exercises/chapter-1/exercise-1-2/&quot;&gt;http://www.learningprocessing.com/exercises/chapter-1/exercise-1-2/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.learningprocessing.com/exercises/chapter-1/exercise-1-3/&quot;&gt;http://www.learningprocessing.com/exercises/chapter-1/exercise-1-3/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Color&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Covered grayscale, &lt;span class=&quot;caps&quot;&gt;RGB&lt;/span&gt;, HSB and alpha colors in Processing.&lt;/li&gt;
  &lt;li&gt;Walked through some examples in order to explain how color funcations apply to shapes.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;CodeMacro&quot;&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;  noStroke();&lt;tt&gt;
&lt;/tt&gt;  stroke();&lt;tt&gt;
&lt;/tt&gt;  noFill();&lt;tt&gt;
&lt;/tt&gt;  fill();&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;


&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.processing.org/learning/tutorials/color/&quot;&gt;http://www.learningprocessing.com/learning/tutorials/color/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.learningprocessing.com/exercises/chapter-1/exercise-1-4/&quot;&gt;http://www.learningprocessing.com/exercises/chapter-1/exercise-1-4/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.learningprocessing.com/exercises/chapter-1/exercise-1-5/&quot;&gt;http://www.learningprocessing.com/exercises/chapter-1/exercise-1-5/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.learningprocessing.com/exercises/chapter-1/exercise-1-6/&quot;&gt;http://www.learningprocessing.com/exercises/chapter-1/exercise-1-6/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.learningprocessing.com/examples/chapter-1/example-1-1/&quot;&gt;http://www.learningprocessing.com/examples/chapter-1/example-1-1/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.learningprocessing.com/examples/chapter-1/example-1-2/&quot;&gt;http://www.learningprocessing.com/examples/chapter-1/example-1-2/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.learningprocessing.com/examples/chapter-1/example-1-3/&quot;&gt;http://www.learningprocessing.com/examples/chapter-1/example-1-3/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.learningprocessing.com/examples/chapter-1/example-1-4/&quot;&gt;http://www.learningprocessing.com/examples/chapter-1/example-1-4/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Zoog!&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://www.learningprocessing.com/examples/chapter-1/example-1-5/&quot;&gt;http://www.learningprocessing.com/examples/chapter-1/example-1-5/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;The Processing Application&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Serves as the Processing &lt;span class=&quot;caps&quot;&gt;IDE&lt;/span&gt;, Integrated Development Envronment.&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;caps&quot;&gt;IDE&lt;/span&gt; is a fancy acronym that refers to the app you write code with.&lt;/li&gt;
  &lt;li&gt;Talked about the idea of &#8220;sketches&#8221; &#38; the sketchbook.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Syntax&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Reviewed the three general statement types of function calls, assignments, and control structures.&lt;/li&gt;
  &lt;li&gt;Explained that in the beginning, almost every line will be a function call.&lt;/li&gt;
  &lt;li&gt;Dissected a function call into its constituent parts of name &#38; arguments.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;CodeMacro&quot;&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;  println(&amp;quot;omg sheuz!&amp;quot;);&lt;tt&gt;
&lt;/tt&gt;  // single line comment&lt;tt&gt;
&lt;/tt&gt;  /*&lt;tt&gt;
&lt;/tt&gt;  multi&lt;tt&gt;
&lt;/tt&gt;  line&lt;tt&gt;
&lt;/tt&gt;  comment&lt;tt&gt;
&lt;/tt&gt;  */&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;


&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.learningprocessing.com/exercises/chapter-2/exercise-2-6/&quot;&gt;http://www.learningprocessing.com/exercises/chapter-2/exercise-2-6/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;The Reference&lt;/h2&gt;
&lt;p&gt;
  &lt;a href=&quot;http://processing.org/reference/&quot;&gt;http://processing.org/reference/&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;Interaction&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Discussed &lt;code&gt;setup()&lt;/code&gt; and &lt;code&gt;draw()&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Covered the &lt;code&gt;mouseX&lt;/code&gt;, &lt;code&gt;mouseY&lt;/code&gt;, &lt;code&gt;pmouseX&lt;/code&gt;, &lt;code&gt;pmouseY&lt;/code&gt; constants.&lt;/li&gt;
  &lt;li&gt;Showed that &lt;code&gt;draw()&lt;/code&gt; redraws on each frame by placing &lt;code&gt;background()&lt;/code&gt; in &lt;code&gt;setup()&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Defined some &lt;code&gt;mousePressed()&lt;/code&gt;, &lt;code&gt;mouseReleased()&lt;/code&gt;, and &lt;code&gt;mouseClicked()&lt;/code&gt; event handlers.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;CodeMacro&quot;&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;  void draw() {&lt;tt&gt;
&lt;/tt&gt;    background(208);&lt;tt&gt;
&lt;/tt&gt;    // a rect that follows the mouse around&lt;tt&gt;
&lt;/tt&gt;    rectMode(CENTER);&lt;tt&gt;
&lt;/tt&gt;    rect(mouseX, mouseY, 20, 20);    &lt;tt&gt;
&lt;/tt&gt;  }&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  void draw() {&lt;tt&gt;
&lt;/tt&gt;    // draw on the screen with a pen&lt;tt&gt;
&lt;/tt&gt;    line(mouseX, mouseY, pmouseX, pmouseY);&lt;tt&gt;
&lt;/tt&gt;  }&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;


&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.learningprocessing.com/exercises/chapter-2/exercise-3-3/&quot;&gt;http://www.learningprocessing.com/exercises/chapter-2/exercise-3-3/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.learningprocessing.com/exercises/chapter-2/exercise-3-4/&quot;&gt;http://www.learningprocessing.com/exercises/chapter-2/exercise-3-4/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.learningprocessing.com/exercises/chapter-2/exercise-3-7/&quot;&gt;http://www.learningprocessing.com/exercises/chapter-2/exercise-3-7/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.learningprocessing.com/examples/chapter-3/example-3-1/&quot;&gt;http://www.learningprocessing.com/examples/chapter-3/example-3-1/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.learningprocessing.com/examples/chapter-3/example-3-2/&quot;&gt;http://www.learningprocessing.com/examples/chapter-3/example-3-2/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.learningprocessing.com/examples/chapter-3/example-3-3/&quot;&gt;http://www.learningprocessing.com/examples/chapter-3/example-3-3/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.learningprocessing.com/examples/chapter-3/example-3-4/&quot;&gt;http://www.learningprocessing.com/examples/chapter-3/example-3-4/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.learningprocessing.com/examples/chapter-3/example-3-5/&quot;&gt;http://www.learningprocessing.com/examples/chapter-3/example-3-5/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.learningprocessing.com/examples/chapter-3/example-3-6/&quot;&gt;http://www.learningprocessing.com/examples/chapter-3/example-3-6/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
          </content>  </entry>
  <entry xml:base="http://www.gotascii.com/">
    <author>
      <name>gotascii</name>
    </author>
    <id>tag:www.gotascii.com,2009-08-25:10</id>
    <published>2009-08-25T00:00:00Z</published>
    <updated>2009-08-25T19:30:29Z</updated>
    <link href="http://www.gotascii.com/2009/8/25/learning-processing-introduction" rel="alternate" type="text/html"/>
    <title>Learning Processing, Introduction</title>
<summary type="html">&lt;p&gt;Over the next few weeks months I will be teaching a small introduction to programming course at &lt;a href=&quot;http://vigetlabs.com&quot;&gt;Viget Labs&lt;/a&gt;.  I&#8217;ll be using &lt;a href=&quot;http://processing.org&quot;&gt;Processing&lt;/a&gt; as a means to explore some basic programming concepts and I&#8217;ll be following the excellent book &lt;a href=&quot;http://www.learningprocessing.com/&quot;&gt;Learning Processing: A Beginner&#8217;s Guide to Programming Images, Animation, and Interaction&lt;/a&gt; by &lt;a href=&quot;http://www.shiffman.net&quot;&gt;Daniel Shiffman&lt;/a&gt;.  Each lesson will have an accompanying blog post that outlines the topics we&#8217;ll try to cover and links to any resources we may need.   Here is the first installment!&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;Over the next few weeks months I will be teaching a small introduction to programming course at &lt;a href=&quot;http://vigetlabs.com&quot;&gt;Viget Labs&lt;/a&gt;.  I&#8217;ll be using &lt;a href=&quot;http://processing.org&quot;&gt;Processing&lt;/a&gt; as a means to explore some basic programming concepts and I&#8217;ll be following the excellent book &lt;a href=&quot;http://www.learningprocessing.com/&quot;&gt;Learning Processing: A Beginner&#8217;s Guide to Programming Images, Animation, and Interaction&lt;/a&gt; by &lt;a href=&quot;http://www.shiffman.net&quot;&gt;Daniel Shiffman&lt;/a&gt;.  Each lesson will have an accompanying blog post that outlines the topics we&#8217;ll try to cover and links to any resources we may need.   Here is the first installment!&lt;/p&gt;
&lt;h2&gt;What is this book?&lt;/h2&gt;
&lt;p&gt;
&lt;blockquote&gt;This book tells a story. It is a story of liberation, of taking the first steps toward understanding the foundations of computing, writing your own code, and creating your own media without the bonds of existing software tools. This story is not reserved for computer scientists and engineers. This story is for you.&lt;/blockquote&gt;
&lt;/p&gt;

&lt;h2&gt;Who is this book for?&lt;/h2&gt;
&lt;p&gt;
&lt;blockquote&gt;Because this book uses Processing (more on Processing in a moment), it is especially good for someone studying or working in a visual field, such as graphic design, painting, sculpture, architecture, film, video, illustration, web design, and so on. If you are in one of these fields (at least one that involves using a computer), you are probably well versed in a particular software package, possibly more than one, such as Photoshop, Illustrator, AutoCAD, Maya, After Effects, and so on. The point of this book is to release you, at least in part, from the confines of existing tools. What can you make, what can you design if, instead of using someone else&#8217;s tools, you write your own? If this question interests you, you are in the right place.&lt;/blockquote&gt;
&lt;/p&gt;

&lt;h2&gt;What is Processing?&lt;/h2&gt;
&lt;p&gt;
Old: Text In -&amp;gt; Text Out -&amp;gt; Text Interaction&lt;br /&gt;
New: Text In -&amp;gt; Visuals Out -&amp;gt; Mouse Interaction (and more)&lt;br /&gt;
Not novel idea:  Logo, Design by Numbers&lt;br /&gt;
Novel implementation: Java, Open Source, Community Driven
&lt;/p&gt;

&lt;h2&gt;Write in this book! (or on some paper)&lt;/h2&gt;
&lt;p&gt;
&lt;blockquote&gt;Let&#8217;s say you are a novelist. Or a screenwriter. Is the only time you spend writing the time spent sitting and typing at a computer? Or (gasp) a typewriter? Most likely, this is not the case. Perhaps ideas swirl in your mind as you lie in bed at night. Or maybe you like to sit on a bench in the park, feed the pigeons, and play out dialogue in your head. And one late night, at the local pub, you find yourself scrawling out a brilliant plot twist on a napkin.&lt;br /&gt;&lt;br /&gt;

Well, writing software, programming, and creating code is no different. It is really easy to forget this since the work itself is so inherently tied to the computer. But you must find time to let your mind wander, think about logic, and brainstorm ideas away from the chair, the desk, and the computer. Personally, I do all my best programming while jogging.&lt;/blockquote&gt;
&lt;/p&gt;

&lt;h2&gt;Course Outline&lt;/h2&gt;
&lt;p&gt;
Lesson 1: Chapters 1-3&lt;br /&gt;
Lesson 2: Chapters 4-6&lt;br /&gt;
Lesson 3: Chapters 7-8&lt;br /&gt;
Lesson 4: Chapter 9&lt;br /&gt;
Lesson 5: Chapter 10–11&lt;br /&gt;
Midterm! (Also, continue Lesson 5: Chapter 12)&lt;br /&gt;
Lesson 6: Chapter 13–14&lt;br /&gt;
Lesson 7: Chapter 15–16&lt;br /&gt;
Lesson 8: Chapters 17-19&lt;br /&gt;
Lesson 9: Chapters 20-21&lt;br /&gt;
Lesson 10: Chapters 22-23&lt;br /&gt;
Final Project Workshop&lt;br /&gt;
Final Project Presentations
&lt;/p&gt;

&lt;h2&gt;&lt;a href=&quot;http://www.learningprocessing.com/&quot;&gt;Learning Processing, the website!&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;
You will find many resources here such as tutorials, examples, &#38; exercises.  Use this website, it is your friend.
&lt;/p&gt;

&lt;h2&gt;Incremental Development&lt;/h2&gt;
&lt;p&gt;
You will have bugs.  Working in small increments and verifying the work you&#8217;ve done at each increment will help you catch bugs as soon as they are created.  It will help you fail fast, which is a good thing in the software development world.  In addition to bug squashing, working incrementally lends itself to object-oriented programming, a powerful software development methodology that we&#8217;ll cover in later lessons.
&lt;/p&gt;

&lt;h2&gt;Algorithms&lt;/h2&gt;
&lt;p&gt;
Programming is the practice of getting a computer to do what you want.  It is about communicating with a computer.  Computers communicate in only one way: algorithms.  A computer will always succeed in performing a precise set of well-defined instructions that dictates what you want.  Ever taken a programming course in college?  Was it tedious as fuck?  In general, algorithms are quite tedious and it is a fact we&#8217;ll learn to accept and love.  Thinking incrementally has the benefit of failing fast, which has the benefit of allowing us to fix the failure fast, which has the benefit of succeeding fast.  The tedious nature you may have experienced in past programming courses was most likely a result of slow or negligible feedback.  When you start thinking incrementally, what you want the computer to do becomes incremental.  You start to see the feedback you want and see it often.  Processing has the added benefit of giving you visual feedback and interactivity with a minimal amount of tedium.  In a short time you will be incrementally developing algorithms that do exactly what you want!
&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.gotascii.com/">
    <author>
      <name>gotascii</name>
    </author>
    <id>tag:www.gotascii.com,2009-08-20:9</id>
    <published>2009-08-20T00:00:00Z</published>
    <updated>2009-08-20T15:47:44Z</updated>
    <link href="http://www.gotascii.com/2009/8/20/excess-poultry-waste-contamination" rel="alternate" type="text/html"/>
    <title>Excess Poultry Waste Contamination</title>
<summary type="html">&lt;p&gt;While this post may not fit the strictly technical nature of my blog, the impact of unregulated poultry waste is an issue that directly affects me, and most likely you as well (especially if you live in or near Northern Virginia).  There is a very important bit of legislation coming up regarding poultry waste regulation that you have an opportunity to voice your opinion about!  Here is an explanation of why you should care and information on how you can help.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;While this post may not fit the strictly technical nature of my blog, the impact of unregulated poultry waste is an issue that directly affects me, and most likely you as well (especially if you live in or near Northern Virginia).  There is a very important bit of legislation coming up regarding poultry waste regulation that you have an opportunity to voice your opinion about!  Here is an explanation of why you should care and information on how you can help.&lt;/p&gt;
&lt;h3&gt;The Issue&lt;/h3&gt;
&lt;p&gt;
I am an avid fly fisherman and I enjoy fishing the waters from the Shenandoah National Park all the way to the Chesapeake Bay.  Unfortunately, these waters are subject to a wide variety of pollutants as they run through a gamut of industrial and developmental regions.  The Shenandoah Valley is home to one of the largest poultry producing areas in the country.  In addition, just east of the valley, suburban growth radiating outwards from the Washington, D.C. has reached the banks of the Shenandoah River.  Further east, all of the urban population and its associated waste end up reaching our rivers through drainage systems.  While the effort to keep our rivers and streams clean and healthy is clearly a multi-front battle there is a very important bit of legislation regarding poultry waste regulation that you have an opportunity to voice your opinion about.  Poultry waste in our water has all sorts of heinous environmental impacts, mainly surrounding the extremely high levels of phosphorous and nitrogen that act as an algae fertilizer.  Algal blooms deplete the oxygen from the water creating dead zones where no life can be sustained.  This in turn causes widespread, long term stress on the fish population damaging their immune system and leaving them susceptible to normally innocuous aquatic bacteria.  In addition, growth hormones present in poultry waste have a devastating effect on the endocrine system of fish leading to fish inter-sex (male fish producing female eggs).  This combined degradation has led to widespread fish kills in addition to rendering many areas of waterfront unusable for recreational purposes.  The regulation itself aims to close a legal loophole that has existed in the Shenandoah Valley (one of the top ten poultry producing regions in the country) for some time.  Large scale industrial poultry farming operations are already regulated, however they are allowed to give their excess waste to neighboring farms that do not meet the production requirements for regulation.  In turn, these farms do not dispose of the waste properly and it is making its way back into the Shenandoah River.
&lt;/p&gt;
&lt;h3&gt;How You Can Help!&lt;/h3&gt;
&lt;p&gt;
The legislation in question is &lt;a href=&quot;http://legis.state.va.us/codecomm/register/vol25/iss21/v25i21.pdf &quot;&gt;9VAC25-630 Virginia Pollution Abatement General Permit Regulation for Poultry Waste Management&lt;/a&gt; and  can be found starting on page 101 (or 3867 according to the &lt;span class=&quot;caps&quot;&gt;TOC&lt;/span&gt;) to page 120.  If you wish to offer your support, leave a short comment &lt;a href=&quot;http://www.townhall.state.va.us/L/comments.cfm?stageid=5172 &quot;&gt;here on the petition&lt;/a&gt;.  Provide your name, how you use the waterways, and that you support this regulation.  You can take a look at &lt;a href=&quot;http://www.townhall.state.va.us/L/viewcomments.cfm?commentid=9746&quot;&gt;the comment I left&lt;/a&gt; for inspiration.
&lt;/p&gt;
&lt;h3&gt;The Catch!&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;caps&quot;&gt;THE PETITION CLOSES ON FRIDAY AUGUST 21&lt;/span&gt;, 2009!&lt;/strong&gt;  Short notice, I know.  Please, if you wish to show your support sign it &lt;span class=&quot;caps&quot;&gt;ASAP&lt;/span&gt;.&lt;/p&gt;
&lt;h3&gt;Resources&lt;/h3&gt;
&lt;p&gt;
&lt;a href=&quot;http://legis.state.va.us/codecomm/register/vol25/iss21/v25i21.pdf &quot;&gt;9VAC25-630, start on page 101 (or 3867 according to the &lt;span class=&quot;caps&quot;&gt;TOC&lt;/span&gt;) &#8211; 120&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.townhall.state.va.us/L/comments.cfm?stageid=5172 &quot;&gt;The Petition&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.fosr.org/reports/CCreport.cfm&quot;&gt;The Health of the Shenandoah River in Clarke County&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.usgs.gov/newsroom/article.asp?ID=1870&quot;&gt;Intersex in Smallmouth Bass Coincident with Population and Agriculture &#8230;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.bayjournal.com/article.cfm?article=102&quot;&gt;Study warns of pitfalls to poultry waste as fertilizer substitute&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.agroecol.umd.edu/files/fisherplacsPR.pdf&quot;&gt;Hormones found in field runoff can disrupt fishes’ endocrine systems (PDF)&lt;/a&gt;
&lt;a href=&quot;http://www.pbs.org/wgbh/pages/frontline/poisonedwaters/view/&quot;&gt;Poisoned Waters, Frontline report on Chesapeake Bay pollution&lt;/a&gt;
&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.gotascii.com/">
    <author>
      <name>admin</name>
    </author>
    <id>tag:www.gotascii.com,2009-06-02:2</id>
    <published>2009-06-02T19:35:00Z</published>
    <updated>2009-06-08T17:46:37Z</updated>
    <category term="lily"/>
    <category term="monome"/>
    <link href="http://www.gotascii.com/2009/6/2/monome-lily" rel="alternate" type="text/html"/>
    <title>Monome &amp; Lily</title>
<summary type="html">I recently gave a presentation at &lt;a href=&quot;http://developer-day.com&quot;&gt;Developer Day&lt;/a&gt; on the Monome and Lily.  Here is a brief synopsis of the talk as well as some resources to help you get started making patches in Lily.</summary><content type="html">
            I recently gave a presentation at &lt;a href=&quot;http://developer-day.com&quot;&gt;Developer Day&lt;/a&gt; on the Monome and Lily.  Here is a brief synopsis of the talk as well as some resources to help you get started making patches in Lily.
&lt;h3&gt;An Introduction&lt;/h3&gt;
&lt;p&gt;
I am Justin Marney.&lt;br /&gt;
I work at &lt;a href=&quot;http://vigetlabs.com&quot;&gt;Viget Labs&lt;/a&gt; building websites using &lt;a href=&quot;http://rubyonrails.org&quot;&gt;Ruby on Rails&lt;/a&gt;.
&lt;/p&gt;
&lt;h3&gt;Goals&lt;/h3&gt;
&lt;p&gt;
Introduce the concept of visual programming via a live demo.&lt;br /&gt;
Dig into a unique browser-based visual programming language named Lily.&lt;br /&gt;
Learn how, when, and why to use a visual programming language.&lt;br /&gt;
Show off the power of Lily via a DOM-driven sound generator.
&lt;/p&gt;
&lt;h3&gt;Game of Life Sequencer Performance&lt;/h3&gt;
&lt;p&gt;
Explained how my Game of Life sequencer works and played a short improvised set.  Nothing broke, so I was pleased.
&lt;/p&gt;
&lt;h3&gt;The Monome&lt;/h3&gt;
&lt;p&gt;
A &lt;a href=&quot;http://en.wikipedia.org/wiki/Physical_computing&quot;&gt;physical computing interface&lt;/a&gt; with an open-source hardware platform.&lt;/a&gt;&lt;br /&gt;
Built by Brian Crabtree and Kelli Cain.

The list of &lt;a href=&quot;http://docs.monome.org/doku.php?id=app&quot;&gt;applications&lt;/a&gt; that run on the Monome.&lt;br /&gt;
The various &lt;a href=&quot;http://monome.org/series/&quot;&gt;models&lt;/a&gt; and information on how to &lt;a href=&quot;http://monome.org/order&quot;&gt;order one&lt;/a&gt; for yourself.
&lt;/p&gt;
&lt;h3&gt;Visual Programming Languages&lt;/h3&gt;
&lt;p&gt;
Explained the basic concept behind &lt;a href=&quot;http://en.wikipedia.org/wiki/Visual_programming_language&quot;&gt;visual programming languages&lt;/a&gt;.&lt;br /&gt;
Reviewed the basic language components and discussed common usage scenarios.&lt;br /&gt;
Showed how to create a basic Lily patch, which can be found &lt;a href=&quot;http://github.com/gotascii/thunderdome/blob/master/example.json&quot;&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;h3&gt;Lily&lt;/h3&gt;
&lt;p&gt;
&lt;a href=&quot;http://lilyapp.org&quot;&gt;Lily&lt;/a&gt; is an open-source Firefox Add-On developed by Bill Orcutt.&lt;br /&gt;
Showed off Lily's ability to manipulate the DOM using a &lt;a href=&quot;http://github.com/gotascii/thunderdome/blob/master/4.%20Modifying%20the%20Page.json&quot;&gt;demo patch &lt;/a&gt; that scrambles the links on &lt;a href=&quot;http://www.craigslist.org&quot;&gt;craigslist&lt;/a&gt;.&lt;br /&gt;
Created a custom external named &lt;a href=&quot;http://github.com/gotascii/thunderdome/blob/master/cheerio.js&quot;&gt;cheerio&lt;/a&gt; using basic Javascript.
&lt;/p&gt;
&lt;h3&gt;Open Sound Control&lt;/h3&gt;
&lt;p&gt;
Briefly explained the technology behind &lt;a href=&quot;http://en.wikipedia.org/wiki/OpenSound_Control&quot;&gt;Open Sound Control&lt;/a&gt;.&lt;br /&gt;
Described the &lt;a href=&quot;http://docs.monome.org/doku.php?id=tech:protocol:osc&quot;&gt;Monome OSC protocol&lt;/a&gt;.&lt;br /&gt;
Showed a small example of how to use oscsend and oscreceive in Lily.
&lt;/p&gt;
&lt;h3&gt;DOM-Driven Sound Generator Performance&lt;/h3&gt;
&lt;p&gt;
Showed off a &lt;a href=&quot;http://github.com/gotascii/sonifier/tree/master&quot;&gt;patch&lt;/a&gt; that turns DOM elements into sound bytes and allows me to sequence them using the Monome.  For some reason the Monome wasn't getting the /led messages which was frustrating.  Fortunately, the cheerio external allowed me to create a sequence via the mouse and we got to listen to the sounds of &lt;a href=&quot;http://startrek.com&quot;&gt;Star Trek&lt;/a&gt;, &lt;a href=&quot;http://twitter.com/gotascii&quot;&gt;my twitter profile&lt;/a&gt;, and the &lt;a href=&quot;http://vigetlabs.com&quot;&gt;Viget Labs&lt;/a&gt; website.  It sounded industrial as hell.  Trent Reznor would have been proud.
&lt;/p&gt;
&lt;h3&gt;Further Reading&lt;/h3&gt;
&lt;p&gt;
The &lt;a href=&quot;http://gotascii.com/assets/2009/6/8/explosion.pdf&quot;&gt;pdf version&lt;/a&gt; of the slides.&lt;br /&gt;
All of the &lt;a href=&quot;http://github.com/gotascii/thunderdome&quot;&gt;example patches and the keynote presentation&lt;/a&gt;.&lt;br /&gt;
&lt;a href=&quot;http://github.com/gotascii/sonifier&quot;&gt;The DOM Sound Generator&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://monome.org&quot;&gt;Monome&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://lilyapp.org&quot;&gt;Lily&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://puredata.info&quot;&gt;PureData&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://cycling74.com&quot;&gt;Max/MSP&lt;/a&gt;, the licensed version of PureData.&lt;br /&gt;
&lt;a href=&quot;http://ableton.com&quot;&gt;Ableton Live&lt;/a&gt;, the sound generator.
&lt;/p&gt;
          </content>  </entry>
</feed>
