<?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>Erik Pukinskis, Snowed In &#187; computing</title>
	<atom:link href="http://snowedin.net/blog/category/computing/feed/" rel="self" type="application/rss+xml" />
	<link>http://snowedin.net/blog</link>
	<description></description>
	<lastBuildDate>Thu, 15 Jul 2010 07:06:07 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Online IDEs and Freedom</title>
		<link>http://snowedin.net/blog/2007/06/06/online-ides-and-freedom/</link>
		<comments>http://snowedin.net/blog/2007/06/06/online-ides-and-freedom/#comments</comments>
		<pubDate>Wed, 06 Jun 2007 19:45:28 +0000</pubDate>
		<dc:creator>erik</dc:creator>
				<category><![CDATA[computing]]></category>
		<category><![CDATA[forkolator]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[pi]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://snowedin.net/blog/index.php/2007/06/06/online-ides-and-freedom/</guid>
		<description><![CDATA[Google released Google Mashup Editor today, which is an online IDE in the spirit of Forkolator.  Google Docs is pretty similar to a design I had been playing with too.  I guess Google and I have similar goals.  The difference is, they implement their ideas, and I often just blog about mine.
But [...]]]></description>
			<content:encoded><![CDATA[<p>Google released <a href="http://blog.outer-court.com/archive/2007-06-01-n84.html" title="http://blog.outer-court.com/archive/2007-06-01-n84.html">Google Mashup Editor</a> today, which is an online IDE in the spirit of <a href="http://snowedin.net/blog/index.php/2007/04/24/yay-working-code/" title="http://snowedin.net/blog/index.php/2007/04/24/yay-working-code/">Forkolator</a>.  Google Docs is pretty similar to a <a href="http://snowedin.net/blog/index.php/2005/10/10/making-use-of-the-medium/" title="http://snowedin.net/blog/index.php/2005/10/10/making-use-of-the-medium/">design</a> I had been <a href="http://snowedin.net/blog/index.php/2005/10/03/mockup/" title="http://snowedin.net/blog/index.php/2005/10/03/mockup/">playing with</a> too.  I guess Google and I have similar goals.  The difference is, they implement their ideas, and I often just blog about mine.</p>
<p>But I&#8217;m getting a little scared.  Google building a great, functional platform that&#8217;s going to entice a lot of people to spend the bulk of their time in Google software.  But when we use Google products, we have no control over the software we&#8217;re using.  We can&#8217;t change it.  We can&#8217;t even prevent it from changing.  Google has the keys to the car.</p>
<p>As a free software advocate, that&#8217;s scary.</p>
<p>As a user, it should be scary too.  Yes, Google seems altruistic enough, but the fact is, they have interests.  Often their interests align with the interests of many users, but what if you&#8217;re in the 5% whose interests are not being served?  Your only option is to choose another product.  Maybe find something from Yahoo or Microsoft.</p>
<p>But that&#8217;s not good enough for me.</p>
<p>And that&#8217;s why Forkolator is still important, even in the face of <a href="http://pipes.yahoo.com/pipes/" title="http://pipes.yahoo.com/pipes/">Yahoo Pipes</a>, <a href="http://www.popfly.ms/" title="http://www.popfly.ms/">Microsoft Popfly</a> and <a href="http://editor.googlemashups.com/" title="http://editor.googlemashups.com/">Google Mashup Editor</a>.  Forkolator is about giving people total control over the software they use, and encouraging uninhibited exploration of possibilities.  Microsoft actively constrains our freedom to change our software.  At best, Google is granting us a few limited freedoms because they&#8217;ve deemed those freedoms useful to some large segment of their user base.  And because in this case, GME drives more traffic to their services.</p>
<p>Despite this minor detour towards proprietary software, I really believe the future of software is total Freedom.  But for that to be true, we need to build infrastructure to compete with Google and we need to do it fast.</p>
]]></content:encoded>
			<wfw:commentRss>http://snowedin.net/blog/2007/06/06/online-ides-and-freedom/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Dogfood, bootstraps, and working code</title>
		<link>http://snowedin.net/blog/2007/04/24/yay-working-code/</link>
		<comments>http://snowedin.net/blog/2007/04/24/yay-working-code/#comments</comments>
		<pubDate>Tue, 24 Apr 2007 06:31:39 +0000</pubDate>
		<dc:creator>erik</dc:creator>
				<category><![CDATA[Favorites]]></category>
		<category><![CDATA[computing]]></category>
		<category><![CDATA[forkolator]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[geekery]]></category>
		<category><![CDATA[language]]></category>
		<category><![CDATA[pi]]></category>
		<category><![CDATA[school]]></category>
		<category><![CDATA[screenshots]]></category>

		<guid isPermaLink="false">http://snowedin.net/blog/index.php/2007/04/24/yay-working-code/</guid>
		<description><![CDATA[ .flickr-photo { border: solid 2px #000000; } .flickr-yourcomment { } .flickr-frame { text-align: left; padding: 3px; } .flickr-caption { font-size: 0.8em; margin-top: 0px; } 
 	
This is version 0.2 of ForkCode, the web-based IDE that I&#8217;m working on. IDE is an acronym that means &#8220;software for making software&#8221;.
There are a bunch of fun geeky [...]]]></description>
			<content:encoded><![CDATA[<style type="text/css"> .flickr-photo { border: solid 2px #000000; } .flickr-yourcomment { } .flickr-frame { text-align: left; padding: 3px; } .flickr-caption { font-size: 0.8em; margin-top: 0px; } </style>
<p class="flickr-frame"> 	<a href="http://www.flickr.com/photos/erikpukinskis/470974869/" title="photo sharing"><img src="http://farm1.static.flickr.com/167/470974869_4876691276.jpg" class="flickr-photo" /></a></p>
<p>This is version 0.2 of ForkCode, the web-based IDE that I&#8217;m working on. IDE is an acronym that means &#8220;software for making software&#8221;.</p>
<p>There are a bunch of fun geeky turns of phrase that apply to what I&#8217;m doing right now. First, ForkCode can &#8220;bootstrap&#8221; itself which means I&#8217;m using ForkCode to create ForkCode. You know, like &#8220;pull yourself up by your own bootstraps!&#8221;</p>
<p>The second thing I&#8217;m doing is &#8220;dogfooding&#8221;.  That means I&#8217;m using the software I&#8217;m writing. The term refers to eating your own dogfood, which is, ostensibly, what the head chef at a dogfood factory must do to ensure a quality product.</p>
<p>Lately I&#8217;ve been feeling like I should be moving forward, faster on things that&#8217;ll lead to my 2nd year project.  But I&#8217;m not raring to go on those things, for better or for worse.  So I decided: Erik, just do the project that you&#8217;re dying to do.  And right now, it&#8217;s this.  And maybe I&#8217;ll fall behind, but it&#8217;s better to do something than nothing.</p>
<p>And honestly, truly&#8230; I love this project right now.</p>
]]></content:encoded>
			<wfw:commentRss>http://snowedin.net/blog/2007/04/24/yay-working-code/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Turducken, Part 2</title>
		<link>http://snowedin.net/blog/2007/04/13/turducken-part-2/</link>
		<comments>http://snowedin.net/blog/2007/04/13/turducken-part-2/#comments</comments>
		<pubDate>Sat, 14 Apr 2007 03:53:20 +0000</pubDate>
		<dc:creator>erik</dc:creator>
				<category><![CDATA[alife]]></category>
		<category><![CDATA[computing]]></category>
		<category><![CDATA[geekery]]></category>
		<category><![CDATA[research]]></category>
		<category><![CDATA[school]]></category>

		<guid isPermaLink="false">http://snowedin.net/blog/index.php/2007/04/13/turducken-part-2/</guid>
		<description><![CDATA[Here&#8217;s another draft of my paper from last quarter. Still not finished, but hopefully will be done tomorrow. Just need to edit, smooth things out, add some lit review (including Von Neuman, Holland) and explain the last little bit about how the &#8220;DNA&#8221; gets copied.
Apologies to everyone to whom none of this makes sense.  [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s another draft of my paper from last quarter. Still not finished, but hopefully will be done tomorrow. Just need to edit, smooth things out, add some lit review (including Von Neuman, Holland) and explain the last little bit about how the &#8220;DNA&#8221; gets copied.</p>
<p>Apologies to everyone to whom none of this makes sense.  The blog is just a nice public place to keep this.</p>
<p><em>Update 4/14: This is complete now.  It&#8217;s not a great paper, but at least it represents my idea.</em></p>
<p><span id="more-797"></span><br />
The goal of this project is to design an ALife system that has a good chance of supporting open-ended evolution and to do so as simply as possible. This will hopefully lead to better understanding of what open-ended evolution is and how it happens. This paper presents a detailed specification of a system which was designed in order to support tighly coupled multi-scale evolutionary activity and encourage its emergence.</p>
<p><strong>Background</strong></p>
<p>Previous work, presented in my seminar paper <em>Increasing Complexity in Artificial Life Systems,</em> explored several definitions of complexity and ALife research that made some claims about complexity. It also made four guesses about ways to create ALife systems that would increase in complexity over time:</p>
<ol>
<li> Use intrinsic fitness and replication functions</li>
<li> Create an artificial physics with forces of different strengths</li>
<li> Choose the scale of the world in the replication carefully. Replication should happen on a super-atomic scale (&gt;= 1 order of magnitude larger than atoms) and the world should be at least 3 (?) orders of magnitude larger than the scale of replication.</li>
<li> Creatures should be built of component systems</li>
</ol>
<p>The current work, then, tries to put some of these into practice. As it turns out, it&#8217;s very difficult to define complexity and to work with it experimentally, so I&#8217;m focusing on a less abstract goal: an create an ALife system that supports tightly coupled evolutionary activity at multiple scales, where large scale structures are built out of the smaller scale structures. An example of this in biology is cells and organisms. Cells are evolving within organisms, and organisms are evolving their composition of cells. The holy grail of this project would be to see larger scale activity emerge from small: organisms evolving out of a population of cells.</p>
<p>The method being employed is to specify a candidate model in pictures and words, and then engage in thought experiments about how it would play out, how much computational power would be required, and its potential for meeting the goal of multi-scale evolution. This has led to a design specification for an ALife system which can now be built and experimented with.</p>
<p><strong>Choice points in the design process</strong></p>
<p>Just as important as the specification itself are the motivations behind its properties. Almost all properties of the model present a tradeoffs between richness and simplicity. I constantly fought a desire to make the model more and more like the physical substrate of the biological world: molecules with complex interactions emerging from their structure. But the goal is not to replicate the natural world, but to replicate its properties of complexity and evolutionary activity across scales, and so made great effort to get the model down to the bear bones that would meet my goal.</p>
<p>There were four major insights that came out of the design process.</p>
<p><em> Physics with multi-scale forces is not important</em></p>
<p>While it does seem true that some of the complexity that happens at a small scale (cellular and below) seems to arise from the fact that the physics at that scale is so varied, the fact that there is such complexity above the cellular level, and indeed much complexity in structures built entirely of cells, it seems like it would be reasonable to start with something like cells as the bottom of the pyramid.</p>
<p>That is as deep as the analogy gets &#8220;something like&#8221;. The point is not to duplicate their behavior, but rather to create objects that might play a vaguely similar role in larger-scale structures.</p>
<p><em>Intrinsicness is a continuum<br />
</em></p>
<p>Another one of the major insights that arose from considering a wide range of possible designs is that intrinsicness of fitness and replication is not a binary property. A purely extrinsic replication, for example, would simply pull organisms out of a world, copy them, and place them back in the world, based on an external clock. A slightly more intrinsic replication scenario would be to put a button in the world that organisms could push that would replicate them. Then, the &#8220;hand of god&#8221; would come and create a copy. More intrinsic still would be if body parts could be duplicated with a supernatural machine, but that organisms needed to use their own power to assemble them. This continuum continues all the way to the point where the entire replication process takes place in the world, and is subject to all the same selective pressures that the organisms themselves are.</p>
<p align="left">This insight led me to place several &#8220;buttons&#8221; in the environment that allow fairly limited replication to occur for free. In Turducken, this is basically manifested in the COPY actuator, which nodes can use to copy a range of classifiers from their memories into other nodes. This means you can get a simple node that self-replicates &#8220;for free&#8221;. But larger structures require a more complex process which is the subject of most of the rest of the paper.</p>
<p align="left">The nice thing about having a largely intrinsic replication process like this is that fitness and replication functions can be entirely done away with. Whether an organism survives and propagates depends only on whether the organism survives and propagates. With typical classifier systems, replication and fitness are handled extrinsicly by functions crafted by the developer.</p>
<p align="left">Why is this important? Because intrinsic fitness and replication are an absolute requirement for organisms to emerge into fitness and replication niches created by other populations of organisms, and this is a key requirement for multi-scale organisms. In the real world, a cell&#8217;s fitness is determined by the structure of the organism, and an organism&#8217;s fitness is determined by the structure of the cell, both of which are constantly evolving. Intrinsic fitness and replication give us a fighting chance at replicating this phenomena.</p>
<p><em>Information is impetus for growth</em></p>
<p>A third major insight came from looking at Holland&#8217;s classifier system&#8217;s (Booker, Goldberg, Holland, 1989). Classifier systems are collections of input-output rules. They are presented encoded information from an external source, and the information is matched against the entire body of rules. If the information matches any rule&#8217;s input pattern, that rule either activates some kind of actuator, or puts out another message for the other classifiers to consume. The classifiers that get the most work are selected for by an external fitness function and are allowed to remain in the system, and are also used to create mutated copies. Classifier systems are a fertile medium, in that they seem to be able to &#8220;implement&#8221; almost anything. Long chains of classifiers can emerge, with classifiers deeper in the chains consuming more and more refined information. This suggests a kind of open-ended complexity, with more and more abstract information being used.</p>
<p>Indeed, this might be a good incentive for organisms growing large in the real world. In order to be able to process information on larger and larger scales, organisms would need to grow larger and more complex. It is because of this insight that drove me to base Turducken&#8217;s information processing capabilities on classifier systems.</p>
<p><em>Departure from classifier systems</em></p>
<p>Early work on this project focused on creating an artificial physics that could support multi-scale evolution. However in the light of my personal discovery of classifier systems, I was faced with a choice: do I abandon the artificial physics and start working entirely in classifier systems? Or should I integrate some of the key properties of classifier systems into my artificial physics? I ended up choosing the latter mostly for one particular reason:</p>
<p>Classifier systems have a distinct, independent inside and outside. The inside is controlled by a genetic algorithm, and the outside is controlled by a third party, although it might be influenced by the behavior of the classifier system, as mitigated by the classifier system&#8217;s body, which is off in the black box of the environment. In contrast, what I wanted for Turducken was a situation in which life processes provided the environments for each other and apply selective pressures to each other. This kind of happens in classifier systems, but in the end the fitness depends on an external process. In essence, by embodying classifiers in the way I do, I allow them to mutually define their own fitness landscapes.</p>
<p><strong>The Model</strong></p>
<p>This model is named &#8220;Turducken&#8221;, after the kitchy practice of stuffing a turkey with a chicken and then jamming the entire thing into a duck and roasting it. It is hoped that the model outlined here will yield a similarly satisfying nesting of organisms, albeit a nesting of a very different kind.</p>
<p>Turducken is a virtual world populated primarily with &#8220;nodes&#8221; (Figure 1), atomic particles which float around in a soup. Nodes have no real boundaries or substance, in that two nodes can occupy the same location and can easily pass through one another.</p>
<p align="center"><img src="http://farm1.static.flickr.com/52/425409478_871bc31a80_s.jpg" /><br />
<em>Figure 1: A single node</em></p>
<p>One strategy employed in Turducken to provide an incentive for organisms to exploit niches at multiple scales is to create an information-rich environment which is made up of organisms themselves. It oes this by embodying properties similar to one of the simplest-possible information environments that has been proven to support evolutionary activity: John Holland&#8217;s &#8220;classifier system&#8221;. (FIXME: Citation)</p>
<p>In a typical classifier system, information comes from the outside in the form of character strings representing sensory input. These strings are then &#8220;broadcast&#8221; to a set of classifiers, which have two parts: a pattern that may or may not match some sensory input, and an actuator that emits some output signal or broadcasts another message back to the classifier set.</p>
<p>For example, a light detector might generate a string: 11111 that represents a bright light. A classifier with the pattern 1???? would match that string, and emit an output signal for the organism to close its eyes. Another classifier that matches strings that look like 1?1?1 might broadcast another message &#8220;10001&#8243; back to the classifier set, which would, also activate the first classifier, causing the eye close actuator to be activated again.</p>
<p>Turducken creates a similar situation, with some small but important modifications. First, messages come not from the outside world, but from the nodes themselves. This allows life to truly provide a foundation for life, and ensure that nodes responding to messages from other life forms intrinsic to the world are selected for, instead of nodes that respond well to some extrinsic input. The simplest form of broadcasting is simply for a node to emit a string (Figure 2) that reaches all nodes in its local area, with a probability inversely proportional to distance.</p>
<p align="center"><a href="http://flickr.com/photos/erikpukinskis/"><img src="http://farm1.static.flickr.com/68/425409480_b3fecda012_m.jpg" /></a><br />
<em> Figure 2: Message source</em></p>
<p>These simple nodes then provide a backdrop for bootstrapping more complex behaviors. Nodes with movement classifiers (Figure 3) listen for messages of a certain form, and then move in response to matches. A node could have several classifiers all pertaining to different directions of movement (up, down, left right).</p>
<p align="center"><a href="http://flickr.com/photos/erikpukinskis/425399348/"><img src="http://farm1.static.flickr.com/151/425399348_9e38ade611_m.jpg" /></a><br />
<em> Figure 3: Message-driven movement rule</em></p>
<p>Classifier systems can yield complicated structures of dependency, with chains of classifiers feeding into each other, but in order to have tightly-coupled classifiers, each classifier needs to encode information about the other classifiers to which it is coupled. This makes it harder to have tight-coupling across scales, because both the large and small scale must be &#8220;aware&#8221; of each other.</p>
<p>This is why Turducken includes a concept of space, motion and several other constraints that are hard-coded outside of the classifiers. These constraints create an environment in which classifiers can be coupled, even in exclusively ways, without having to encode this coupling in their input/output patterns. As described, nodes have position and motion, but a third property of these classifier &#8220;bodies&#8221; is bonds. (Figure 4)</p>
<p align="center"><img src="http://farm1.static.flickr.com/176/425409441_509c265228_t.jpg" /><br />
<em> Figure 4: Three bonded nodes</em></p>
<p>Nodes can bond with other nodes by using the BOND actuator. This actuator essentially &#8220;offers&#8221; a bond conditionally on matching a certain message pattern. So a node which offers a ???? bond will match any other bond-offering node, whereas a node offering a 1011 bond will only match generalizations of that string.</p>
<p>The bonding process is shown in Figure 5. Any two nodes in close proximity with matching bonds offered automatically bond together. Both nodes can then break the bond with a corresponding BREAK actuator.</p>
<p align="center"><a href="http://flickr.com/photos/erikpukinskis/425399158/"><img src="http://farm1.static.flickr.com/187/425399158_2f474c1120.jpg" /></a><br />
<em> Figure 5: The mechanism for node bonding (steps 1-4) and bond breaking (step 5).</em></p>
<p align="left">Once nodes have been bonded together, they can move as a group with a &#8220;rubber-band&#8221; effect. One node can move, and the others will be dragged behind it. (Figure 6) In addition, bonded nodes can send private messages to one another via a MESSAGE actuator. (Figure 7)</p>
<p align="center"><em><img src="http://farm1.static.flickr.com/174/425399356_c32e29d6e0.jpg?v=0" onload="show_notes_initially();" class="reflect" height="149" width="500" /><br />
Figure 6: Movement of bonded nodes.</em></p>
<p align="center">&nbsp;</p>
<p align="center"><em><img src="http://farm1.static.flickr.com/185/425399334_fe4adb9322_m.jpg" /><br />
Figure 7: Private communication between bonded nodes.</em></p>
<p align="left">Detailed specifications for the different actuators and their diagramatic representations follow:</p>
<p><a href="http://www.snowedin.net/images/turducken/simpler%20sequence%20processing.png"> </a></p>
<p align="center"><a href="http://www.snowedin.net/images/turducken/key.png"><img src="http://www.snowedin.net/images/turducken/key_small.png" alt="http://www.snowedin.net/images/turducken/key_small.png" /></a></p>
<p><em>MOVE(x, y)</em></p>
<p>Causes the node to try to move x steps horizontally and y steps vertically. The node may or may not actually move, depending on the stress on its bonds.</p>
<p>The only new actuator used here is the COPY actuator, which erases all of the classifiers in a bonded node and then copies a subset of the current node&#8217;s classifiers over it.</p>
<p>The next step is to describe how the behavior of the + node might be implemented in a turducken structure. Ideally, the structure would have some generic set of machinery and then a string of nodes that contained the actual instructions carried out by +.</p>
<p><em>BOND(bond_id, pattern, message)</em></p>
<p>Where bond_id is a number to use as a label for the bond, pattern is the pattern that needs to be matched by the other node which is offering a bond, and message is the message to broadcast when the bond is formed. If the bond_id is left blank, a bond will be formed with no ID, and if the message is left blank, no message will be broadcasted</p>
<p><em>BCAST(message)</em></p>
<p>Broadcasts messages to &#8220;nearby&#8221; nodes. The message &#8220;strength&#8221; would fall-off at longer distances, meaning the probability of reception would decrease. Therefore a large array of nodes could reliably hear &#8220;fainter&#8221; messages.</p>
<p><em>MSG(bond_id, message)</em></p>
<p>Sends a message to the single node that is connected on bond_id.</p>
<p><em>COPY(first_classifier, last_classifier, bond_id)</em></p>
<p>Copies the invoking node&#8217;s classifiers to the node connected on bond_id.  Only in the numerical range provided are copied.</p>
<p><em>BREAK(bond_id)</em></p>
<p>Breaks the bond with the given bond_id.</p>
<p><strong>Intrinsic Fitness and Replication<br />
</strong></p>
<p>There are many ways to self-replicate, and parasites often exploit highly creative reproductive niches, but a good starting point for self-replication is to break the process down into three tasks: describing the activity of building an organism, describing the mechanism by which a blueprint is decoded into that activity, and describing the mechanism by which the blueprint gets copied.</p>
<p>Let&#8217;s start by examining a mechanism by which structures in Turducken might be built.</p>
<p><strong>Self-Replication</strong></p>
<p>A simple self-replicating structure in Turducken is complicated enough that it needs to be looked at in parts. To do this, we will assume temporarily that we already have a nettwork of nodes (represented by the + node) which can carry out a sequence of actions. Later on we&#8217;ll describe how the + node could be implemented. Figure 8 details the steps that would be required to build the simplest multi-node structure.</p>
<p align="center"><em><a href="http://flickr.com/photos/erikpukinskis/425399212/"><img src="http://farm1.static.flickr.com/166/425399212_29370d9b58.jpg?v=0" onload="show_notes_initially();" class="reflect" height="485" width="500" /></a><br />
Figure 8: Structure building with a &#8220;god&#8221; node (the +). </em></p>
<p align="left">Despite the fact that the target structure is relatively simple (A-B), quite a few steps are required, and a good bit of overhead. It turns out, it would be relatively simple to write up a set of classifiers for a node that would do what + does. It would be a lot of classifiers, but it would be doable. However, we couldn&#8217;t simply work those out and be done, because it that approach wouldn&#8217;t really work for large-scale objects. You&#8217;d have to have millions of classifiers in one node, and nodes are meant to be simple, largely atomic information processors. In order to have a large-scale replication process we need to be able to store the blueprints in a chain of nodes.</p>
<p align="left">The next step is therefore to describe how the behavior of the + node might be implemented with a structure that &#8220;reads&#8221; a chain of nodes.</p>
<p><strong>First + Implementation</strong></p>
<p>My first crack at this was to a string of command nodes (A,B,C&#8230;) and then a sort of &#8220;playhead&#8221; node (~) which would tell a command node to write an instruction to the + node and then send a message to + to tell it to carry out the command. The ~ and the command node would then work together to move the + and the ~ on to the next command node.</p>
<p>This entire process is depicted in figure 9. The system depicted will wait for a message to come from nearby, because this is sometimes required by the specification for +. Advancing to the next step without waiting for a message simply requires adding the actions from ~&#8217;s [P] classifier to its [START] classifier.</p>
<p align="center"><a href="http://www.snowedin.net/images/turducken/oneaction.png"><img src="http://www.snowedin.net/images/turducken/oneaction_small.png" alt="The image â€œhttp://www.snowedin.net/images/turducken/oneaction_small.pngâ€ cannot be displayed, because it contains errors." /><br />
<em>Figure 9: Initial implementation of + node with genetic chain</em><br />
</a></p>
<p>The classifiers required for this behavior are shown below:</p>
<p>A and B:<br />
1.    &#8220;M&#8221;    -&gt;     COPY(6,7,2)<br />
MSG(2,&#8221;N&#8221;)<br />
2.    &#8220;Q&#8221;    -&gt;    MSG(2,&#8221;T&#8221;)<br />
MSG(0,&#8221;S&#8221;)<br />
3.    &#8220;S&#8221;    -&gt;    BOND(1,&#8221;R&#8221;,&#8221;V&#8221;)<br />
-&gt;    BOND(2,&#8221;U&#8221;,&#8221;W&#8221;)<br />
4.    &#8220;V&#8221;    -&gt;    BREAK(1)<br />
5.    &#8220;W&#8221;    -&gt;    BREAK(2)<br />
6.    &#8220;N&#8221;    -&gt;    [do something*]<br />
BCAST(&#8221;P&#8221;) [or let the structure being built broadcast "P"]<br />
7.    &#8220;T&#8221;    -&gt;    BOND( ,&#8221;U&#8221;)</p>
<p>~:<br />
1.    &#8220;START&#8221;    -&gt;    MSG(0,&#8221;M&#8221;)<br />
2.    &#8220;P&#8221;    -&gt;    BOND(1,&#8221;R&#8221;)<br />
MSG(0,&#8221;Q&#8221;)<br />
3.    &#8220;W&#8221;    -&gt;    MSG(1,&#8221;M&#8221;)</p>
<p>Note that classifier 6 in the command node could be anything. It&#8217;s simply whatever action + is supposed to carry out at that moment. This classifier is the only one that varies from node A to B to C, and is really the &#8220;blueprint&#8221; information.</p>
<p>There are a few known bugs with this implemention. Classifier 3 in ~ waits for the &#8220;W&#8221; message, signifying one of the bonds in step 7 being made, but really it should wait for the &#8220;V&#8221; message too. This could be done trivially with an extra classifier and a way to store state. State storage is described in section FIXME below.</p>
<p>In addition, ~&#8217;s bond to node A is bond 0, but when it bonds to node B it has to use a new bond: bond 1. That means the classifiers that worked with A will no longer work. This could probably be fixed by breaking the bond with A before forming the bond with B.</p>
<p>This still has no mechanism for copying the A-B-C chain, which would need to be automated somehow. A mechanism for this is described in the &#8220;Copying the blueprint&#8221; section below.  The real problem, though, is that this setup is awfully complicated, and it requires a LOT of procedural information to be duplicated and stored in the A-B-C chain. Ideally that chain would contain only the raw instructions to be carried out by +. A structure that is much closer to this level is described in the following section.</p>
<p><strong>Second + Implementation</strong></p>
<p align="center"><a href="http://www.snowedin.net/images/turducken/simpler%20sequence%20processing.png"><img src="http://www.snowedin.net/images/turducken/simpler-sequence-processing_small.png" alt="The image â€œhttp://www.snowedin.net/images/turducken/simpler-sequence-processing_small.pngâ€ cannot be displayed, because it contains errors." /><br />
<em> Figure 10: Second + implementation</em><br />
</a></p>
<p>After thinking through the initial implementation of +, it seemed like the same behavior could be accomplished much more simply. My second strategy was to have the A-B-C nodes just send an encoded command to the + node and have the + node decode it and carry it out. This process, depicted in figure 10 required fewer nodes, however it requires + to have a large number of classifiers for decoding the commands. Below are the classifiers required for processing the A-B-C sequence, along with a sample of a few of the decoding classifiers:</p>
<p>A,B,C, etc:<br />
1.    &#8220;P&#8221;    -&gt;    MSG(0,[encoded command])<br />
MSG(1,&#8221;N&#8221;)<br />
BREAK(0)<br />
2.    &#8220;N&#8221;    -&gt;    BOND(0,&#8221;M&#8221;,&#8221;P&#8221;)</p>
<p>+:<br />
1.    &#8220;Q&#8221;    -&gt;    BOND( ,&#8221;M&#8221;)<br />
&#8220;MOVE?,?&#8221;    -&gt;    MOVE(\1,\2)<br />
&#8220;BOND?,?,?&#8221;    -&gt;    BOND(\1,\2,\3)<br />
&#8220;BCAST?&#8221;        -&gt;    BCAST(\1)<br />
etc&#8230;</p>
<p>Note that I&#8217;ve introduced a new feature here in the classifiers, which is the actual content of blocks of ?&#8217;s can be referenced in the actuator part of the classifier with an escaped number.</p>
<p>More ?&#8217;s would likely have to be used to be able to use longer messages. Or perhaps a * operator should be introduced so that ?* would match a string of any length.</p>
<p><strong>State</strong></p>
<p>In order to have the + node wait for a certain message before proceeding, we need some way to store state. This is pretty trivial, but it requires two nodes. (Figure 11) The first node contains both states of the second node, and the second node essentially asks the first node to rewrite it in order to change state.</p>
<p align="center"><a href="http://www.snowedin.net/images/turducken/state.png"><img src="http://www.snowedin.net/images/turducken/state_small.png" alt="The image â€œhttp://www.snowedin.net/images/turducken/state_small.pngâ€ cannot be displayed, because it contains errors." /><br />
<em>Figure 11: Storing state</em><br />
</a></p>
<p><strong>Waiting for messages with the second implementation</strong></p>
<p>Our original implementation of + described how the + could have an instruction that would wait for a message before it executed. This doesn&#8217;t automatically work in the new system, because we need a way to prevent the message from having an effect until that piece of the genetic code is &#8220;activated&#8221;. This is why we needed a way to store state, and the mechanism described for storing state provides us with our solution.</p>
<p align="center"><a href="http://www.snowedin.net/images/turducken/simpler%20dna%20with%20waiting.png"><img src="http://www.snowedin.net/images/turducken/simpler-dna-with-waiting_sm.png" alt="The image â€œhttp://www.snowedin.net/images/turducken/simpler-dna-with-waiting_sm.pngâ€ cannot be displayed, because it contains errors." /><br />
Figure 12: Second + implementation, with waiting </a></p>
<p>Figure 12 depicts a node tuple (S and B) which has an ON state and an OFF state, and only responds to a message when in the ON state. The ON state responds to a message, and the OFF state doesn&#8217;t. The mechanism pictured is basically the same as the one in figure 10, except with a few extra classifiers for changing state.</p>
<p>This situation still has a few bugs. Likely, the mechanism should change the state back to OFF after advancing to the next node (C, not pictured). However, it can change the state to off in just the same way it changed it to ON, by S copying B&#8217;s new state onto it. There is no need to belabor the process.</p>
<p><strong>Copying the blueprint</strong></p>
<p>The last big unexplained component of a self-reproducing Turducken structure is the replication of the genetic code, in this case, the A-B-C-&#8230; chain of nodes.  Figure 13 depicts a piece of a rather buggy replication process, but it&#8217;s a starting point. The X node grabs a free floating node and programs it to try to bond to A.  X then tells A to bond to the free floating node (now programmed as Y) and A does so.  A then copies its code onto Y, turning it into a clone, while X releases A and swings around to bind to B.  A essentially tells B that X is ready for it and B offers a bond to X.</p>
<p align="center"><a href="http://www.snowedin.net/images/turducken/copying.png"><img src="http://www.snowedin.net/images/turducken/copying_small.png" style="cursor: -moz-zoom-out" alt="http://www.snowedin.net/images/turducken/copying_small.png" /><br />
Figure 13: Copying the blueprint</a></p>
<p>There are several bugs in this process.  First, it fails to copy the S (state) nodes, used for waiting in during the construction process, which are described above.  This is a tricky issue, but perhaps it could be solved by having the state nodes be part of the chain, rather than offshoots of it.  The second major bug in this copying process is that it doesn&#8217;t really describe how the copied nodes come to be bonded to each other.  Obviously in the next few (unpictured) steps X would have to tell the new Y node and the A&#8217; node to bond to each other.</p>
<p>The trouble with all of that is that it just puts a lot of complexity into the A-B-C nodes.  And that just seems less than ideal from the perspective of a computer scientist.  But if it works, and it&#8217;s enough to get the process of adaptation started, maybe it&#8217;s fine.</p>
<p><strong>Conclusion</strong></p>
<p>The same major criticisms of this project remain from the beginning of the quarter.  It&#8217;s based on intuition.  There&#8217;s no data to prove anything.  There&#8217;s not even really a very good argument about why it ought to work.  In fact, I myself have little confidence that it will work.  But it is a much more detailed picture of my intentions than I had three and a half months ago.  And most usefully it allows me to see flaws in my thinking I couldn&#8217;t really see before.</p>
<p>And it provides a platform on which to actually test some of my hypotheses.  So that&#8217;s progress. Still, bugs remain in the self-replication process described here.  And it&#8217;s not clear that any kind of evolutionary activity would happen in a population of these, especially given that there&#8217;s no energy being transacted, only information, which doesn&#8217;t leave a lot of incentive to evolve.</p>
<p>Still, parasites could easily be introduced that would attack these larger structures, and that might provide enough selective pressure to evolve competetive mechanisms that would then provide a medium for further competition.  I&#8217;d certainly like to give it a try.</p>
<p><strong>References</strong></p>
<p>LB Booker, DE Goldberg, JH Holland (1989) Classifier systems and genetic algorithms. Artificial intelligence [0004-3702] Booker yr:1989 vol:40 iss:1-3 pg:235</p>
]]></content:encoded>
			<wfw:commentRss>http://snowedin.net/blog/2007/04/13/turducken-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Turducken</title>
		<link>http://snowedin.net/blog/2007/03/18/turducken/</link>
		<comments>http://snowedin.net/blog/2007/03/18/turducken/#comments</comments>
		<pubDate>Sun, 18 Mar 2007 20:04:22 +0000</pubDate>
		<dc:creator>erik</dc:creator>
				<category><![CDATA[alife]]></category>
		<category><![CDATA[computing]]></category>
		<category><![CDATA[geekery]]></category>
		<category><![CDATA[pi]]></category>

		<guid isPermaLink="false">http://snowedin.net/blog/index.php/2007/03/18/turducken/</guid>
		<description><![CDATA[This is an early draft of a paper I&#8217;m working on.  It&#8217;s late, unfortunately, but I want to post what I&#8217;ve got so far for my classmates to check out before our final presentations, so I&#8217;m posting it here.
The goal of this project is to design an ALife system that has a good chance [...]]]></description>
			<content:encoded><![CDATA[<p><em>This is an early draft of a paper I&#8217;m working on.  It&#8217;s late, unfortunately, but I want to post what I&#8217;ve got so far for my classmates to check out before our final presentations, so I&#8217;m posting it here.</em></p>
<p>The goal of this project is to design an ALife system that has a good chance of supporting open-ended evolution and to do so as simply as possible.Â  This will hopefully lead to better understanding of what open-ended evolution is and how it happens.Â  This paper presents a detailed specification of a system which was designed in order to support tighly coupled multi-scale evolutionary activity and encourage its emergence.</p>
<p><strong>Background</strong></p>
<p>Previous work, presented in my seminar paper <em>Increasing Complexity in Artificial Life Systems,</em> explored several definitions of complexity and ALife research that made some claims about complexity.Â  It also made four guesses about ways to create ALife systems that would increase in complexity over time:</p>
<ol>
<li> Use intrinsic fitness and replication functions</li>
<li> Create an artificial physics with forces of different strengths</li>
<li> Choose the scale of the world in the replication carefully. Replication should happen on a super-atomic scale (&gt;= 1 order of magnitude larger than atoms) and the world should be at least 3 (?) orders of magnitude larger than the scale of replication.</li>
<li> Creatures should be built of component systems</li>
</ol>
<p>The current work, then, tries to put some of these into practice.Â  As it turns out, it&#8217;s very difficult to define complexity and to work with it experimentally, so I&#8217;m focusing on a less abstract goal: an create an ALife system that supports tightly coupled evolutionary activity at multiple scales, where large scale structures are built out of the smaller scale structures.Â  An example of this in biology is cells and organisms.Â  Cells are evolving within organisms, and organisms are evolving their composition of cells.Â  The holy grail of this project would be to see larger scale activity emerge from small: organisms evolving out of a population of cells.</p>
<p>The method being employed is to specify a candidate model in pictures and words, and then engage in thought experiments about how it would play out, how much computational power would be required, and its potential for meeting the goal of multi-scale evolution.Â  This has led to a design specification for an ALife system which can now be built and experimented with.</p>
<p><strong>Choice points in the design process</strong></p>
<p>Just as important as the specification itself are the motivations behind its properties.Â  Almost all properties of the model present a tradeoffs between richness and simplicity.Â  I constantly fought a desire to make the model more and more like the physical substrate of the biological world: molecules with complex interactions emerging from their structure.Â  But the goal is not to replicate the natural world, but to replicate its properties of complexity and evolutionary activity across scales, and so made great effort to get the model down to the bear bones that would meet my goal.</p>
<p>One of the first major concessions I made a was</p>
<p><em>Focus on Information</em></p>
<p>When it became clear that effective use of information was going to be a major incentive for the emergence of scale, I looked at classifier systems and their capabilities.Â  Classifier systems are collections of input-output rules.Â  They are presented encoded information from an external source, and the information is matched against the entire body of rules.Â  If the information matches any rule&#8217;s input pattern, that rule either activates some kind of actuator, or puts out another message for the other classifiers to consume.Â  The classifiers that get the most work are selected for by an external fitness function and are allowed to remain in the system, and are also used to create mutated copies.</p>
<p>Through this mechanism large-scale chains of classifiers can emerge, and high level classifiers can &#8220;evolve&#8221; alongside the low level ones.Â  This is multi-scale evolution in an important sense, but it falls short of my goal for one important reason:</p>
<p><strong>The Model</strong></p>
<p>This model is named &#8220;Turducken&#8221;, after the kitchy practice of stuffing a turkey with a chicken and then jamming the entire thing into a duck and roasting it. It is hoped that the model outlined here will yield a similarly satisfying nesting of organisms, albeit a nesting of a very different kind.</p>
<p><span id="more-778"></span> Turducken is a virtual world populated primarily with &#8220;nodes&#8221; (Figure 1), atomic particles which float around in a soup.  Nodes have no real boundaries or substance, in that two nodes can occupy the same location and can easily pass through one another.</p>
<p align="center"><img src="http://farm1.static.flickr.com/52/425409478_871bc31a80_s.jpg" /><br />
<em>Figure 1: A single node</em></p>
<p>One strategy employed in Turducken to provide an incentive for organisms to exploit niches at multiple scales is to create an information-rich environment which is made up of organisms themselves.  It oes this by embodying properties similar to one of the simplest-possible information environments that has been proven to support evolutionary activity: John Holland&#8217;s &#8220;classifier system&#8221;. (FIXME: Citation)</p>
<p>In a typical classifier system, information comes from the outside in the form of character strings representing sensory input.  These strings are then &#8220;broadcast&#8221; to a set of classifiers, which have two parts: a pattern that may or may not match some sensory input, and an actuator that emits some output signal or broadcasts another message back to the classifier set.</p>
<p>For example, a light detector might generate a string: 11111 that represents a bright light.  A classifier with the pattern 1???? would match that string, and emit an output signal for the organism to close its eyes.  Another classifier that matches strings that look like 1?1?1 might broadcast another message &#8220;10001&#8243; back to the classifier set, which would, also activate the first classifier, causing the  eye close actuator to be activated again.</p>
<p>Turducken creates a similar situation, with some small but important modifications.  First, messages come not from the outside world, but from the nodes themselves.  This allows life to truly provide a foundation for life, and ensure that nodes responding to messages from other life forms intrinsic to the world are selected for, instead of nodes that respond well to some extrinsic input.  The simplest form of broadcasting is simply for a node to emit a string  (Figure 2) that reaches all nodes in its local area, with a probability inversely proportional to distance.</p>
<p align="center"><a href="http://flickr.com/photos/erikpukinskis/"><img src="http://farm1.static.flickr.com/68/425409480_b3fecda012_m.jpg" /></a><br />
<em> Figure 2: Message source</em></p>
<p>These simple nodes then provide a backdrop for bootstrapping more complex behaviors.  Nodes with movement classifiers (Figure 3) listen for messages of a certain form, and then move in response to matches.  A node could have several classifiers all pertaining to different directions of movement (up, down, left right).</p>
<p align="center"><a href="http://flickr.com/photos/erikpukinskis/425399348/"><img src="http://farm1.static.flickr.com/151/425399348_9e38ade611_m.jpg" /></a><br />
<em> Figure 3: Message-driven movement rule</em></p>
<p>Classifier systems can yield complicated structures of dependency, with chains of classifiers feeding into each other, but in order to have tightly-coupled classifiers, each classifier needs to encode information about the other classifiers to which it is coupled.  This makes it harder to have tight-coupling across scales, because both the large and small scale must be &#8220;aware&#8221; of each other.</p>
<p>This is why Turducken includes a concept of space, motion and several other constraints that are hard-coded outside of the classifiers.  These constraints create an environment in which classifiers can be coupled, even in exclusively ways, without having to encode this coupling in their input/output patterns.  As described, nodes have position and motion, but a third property of these classifier &#8220;bodies&#8221; is bonds. (Figure 4)</p>
<p align="center"><img src="http://farm1.static.flickr.com/176/425409441_509c265228_t.jpg" /><br />
<em> Figure 4: Three bonded nodes</em></p>
<p>Nodes can bond with other nodes by using the BOND actuator.  This actuator essentially &#8220;offers&#8221; a bond conditionally on matching a certain message pattern.  So a node which offers a ???? bond will match any other bond-offering node, whereas a node offering a 1011 bond will only match generalizations of that string.</p>
<p>The bonding process is shown in Figure 5.  Any two nodes in close proximity with matching bonds offered automatically bond together.  Both nodes can then  break the bond with a corresponding BREAK actuator.</p>
<p align="center"><a href="http://flickr.com/photos/erikpukinskis/425399158/"><img src="http://farm1.static.flickr.com/187/425399158_2f474c1120.jpg" /></a><br />
<em> Figure 5: The mechanism for node bonding (steps 1-4) and bond breaking (step 5).</em></p>
<p align="left">Once nodes have been bonded together, they can move as a group with a &#8220;rubber-band&#8221; effect.  One node can move, and the others will be dragged behind it.  (Figure 6)  In addition, bonded nodes can send private messages to one another via a MESSAGE actuator. (Figure 7)</p>
<p align="center"><em><img src="http://farm1.static.flickr.com/174/425399356_c32e29d6e0.jpg?v=0" onload="show_notes_initially();" class="reflect" height="149" width="500" /><br />
Figure 6: Movement of bonded nodes.</em></p>
<p align="center">&nbsp;</p>
<p align="center"><em><img src="http://farm1.static.flickr.com/185/425399334_fe4adb9322_m.jpg" /><br />
Figure 7: Private communication between bonded nodes.</em></p>
<p align="left">In addition, nodes can attach a second MESSAGE or BROADCAST actuator to any other actuator.  This allows nodes to, say, bond and then notify another node that it bonded.  One of the benefits of this particular setup is that it provides the basis for intrinsic self-replication and fitness evaluation.  With typical classifier systems, replication and fitness are handled extrinsicly by functions crafted by the developer.</p>
<p align="left">Why is this important?  Because intrinsic fitness and replication are an absolute requirement for organisms to emerge into fitness and replication niches created by other populations of organisms, and this is a key requirement for multi-scale organisms.  In the real world, a cell&#8217;s fitness is determined by the structure of the organism, and an organism&#8217;s fitness is determined by the structure of the cell, both of which are constantly evolving.  Intrinsic fitness and replication give us a fighting chance at replicating this phenomena.</p>
<p align="left">Unfortunately, intrinsic replication is difficult to create and difficult to sustain.  John Von Neumann (FIXME: citation needed) was the first to create an artificial self-replicating structure.  In a similar vain, I set out to concoct a self-replicating structure from the building blocks of Turducken.</p>
<p>There are many ways to self-replicate, and parasites often exploit highly creative reproductive  niches, but a good starting point for self-replication is to break the process down into three tasks: describing the activity of building an organism, describing the mechanism by which a blueprint is decoded into that activity, and describing the mechanism by which the blueprint gets copied.</p>
<p>Let&#8217;s start by examining a mechanism by which structures in Turducken might be built.  To do this, we assume temporarily that we already have a nettwork of nodes (represented by the + node) which can carry out a sequence of actions.  Figure 8 details the steps that would be required to build the simplest multi-node structure.</p>
<p align="center"><em><a href="http://flickr.com/photos/erikpukinskis/425399212/"><img src="http://farm1.static.flickr.com/166/425399212_29370d9b58.jpg?v=0" onload="show_notes_initially();" class="reflect" height="485" width="500" /></a><br />
Figure 8: Structure building with a &#8220;god&#8221; node (the +). </em></p>
<p align="left">The only new actuator used here is the COPY</p>
<p align="left">The next step is to describe how the behavior of the + node might arise from</p>
]]></content:encoded>
			<wfw:commentRss>http://snowedin.net/blog/2007/03/18/turducken/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>The future of GNOME</title>
		<link>http://snowedin.net/blog/2007/03/18/the-future-of-gnome/</link>
		<comments>http://snowedin.net/blog/2007/03/18/the-future-of-gnome/#comments</comments>
		<pubDate>Sun, 18 Mar 2007 09:01:08 +0000</pubDate>
		<dc:creator>erik</dc:creator>
				<category><![CDATA[computing]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[geekery]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[pi]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://snowedin.net/blog/index.php/2007/03/18/the-future-of-gnome/</guid>
		<description><![CDATA[Here are a few thoughts on where I think the free software desktop needs to go.  Apologies to the non-geeks reading this.  I&#8217;d love to write this up for a broader audience, but I don&#8217;t have time right now and I just wanted to get the ideas on paper.
GNOME, and most of the [...]]]></description>
			<content:encoded><![CDATA[<p>Here are a few thoughts on where I think the free software desktop needs to go.  Apologies to the non-geeks reading this.  I&#8217;d love to write this up for a broader audience, but I don&#8217;t have time right now and I just wanted to get the ideas on paper.</p>
<p>GNOME, and most of the Free Software world is still very focused on offline computing.  Everything&#8217;s an application that gets downloaded and run on our computers.  But web-based software is taking over the world, for a handful of very good reasons:</p>
<p>1) It&#8217;s trivial to install<br />
2) Someone else maintains it for the users (Google is responsible for keeping Google.com working, not me)<br />
3) Your data is on a server somewhere, which means it&#8217;s safer and easier to access from multiple locations<br />
4) It&#8217;s a lot easier to make software collaborative when it&#8217;s on a server somewhere</p>
<p>So instead of assuming that Free Software is on the desktop and that the web is just something we want to support, let&#8217;s start thinking of this a little differently.  Let&#8217;s start thinking that <em>all software</em> is going to the web, and Free Software needs to adapt so that people will still have the Freedom that Free Software is all about when they ditch their old desktop software for their much more attractive web-based software.</p>
<p>This new way of thinking leads to two big ideas:</p>
<p>1) We need Free as in Freedom web infrastructure.  That means organizations providing hosting and online software management in a way that users are guaranteed the freedom to run, change, and redistribute the software, and have complete control over their data and privacy.</p>
<p>2) The Free Desktop needs to move away from being an all-purpose desktop, and towards becoming a modern web bootstrapping environment.  Instead of providing an interface between a user and their data, it needs to become a cradle for web use and a channel between the data locked in a user&#8217;s hardware and their web apps.</p>
<p>That means GNOME should be competing with Firefox.  GNOME and Epiphany should become one, and the world of GNOME apps should be thinned and stripped down into browser components:</p>
<ul>
<li>EOG should become an interface for getting photos off your camera and onto <a href="http://flickr.com">flickr</a></li>
<li>We need a simple video importer to feed into something like <a href="http://www.jumpcut.com/">JumpCut</a>.</li>
<li>We need to pull web apps out into the GNOME interface.  Gmail needs to be a 1st class citizen on the gnome destkop.</li>
<li>We should provide hooks for web sites to integrate tightly with the desktop experience.  So, instead of Tomboy, we&#8217;d have an applet that pulled a tomboy menu off the web, and opened chrome-less browser windows with Tomboy web pages.</li>
</ul>
<p>This approach ignores a lot of stuff you can&#8217;t do well on the web yet: listening to music, watching movies, graphic design, heck&#8230; any computer-intensive profession.  But the web is catching up.  There&#8217;s no doubt in my mind that within a few years there will be music-listening web sites that give iTunes a run for it&#8217;s money.  But for the time being we&#8217;ll still need downloadable applications to do that stuff.</p>
<p>There are a few other developments I think GNOME needs to get on.  Search needs to be FRONT AND CENTER.  Beagle/whatever needs to be the centerpiece of the interface.  Undo/redo/revision control are basically the same as they were in 1970.  We need a modern undo/redo architecture.  But the web is the 900 lb gorilla in the room, and the desktop that adapts to it first will be the one leading the way into the future.</p>
]]></content:encoded>
			<wfw:commentRss>http://snowedin.net/blog/2007/03/18/the-future-of-gnome/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
