<?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:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>And I thank God for...</title>
	<atom:link href="http://mtfulmer.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://mtfulmer.wordpress.com</link>
	<description>Matthew Fulmer's Personal Journal</description>
	<pubDate>Tue, 08 Jul 2008 23:09:55 +0000</pubDate>
	<generator>http://wordpress.org/?v=MU</generator>
	<language>en</language>
			<item>
		<title>Three ways to Parallelize a Raytracer</title>
		<link>http://mtfulmer.wordpress.com/2008/07/08/three-ways-to-parallelize-a-raytracer/</link>
		<comments>http://mtfulmer.wordpress.com/2008/07/08/three-ways-to-parallelize-a-raytracer/#comments</comments>
		<pubDate>Tue, 08 Jul 2008 23:08:20 +0000</pubDate>
		<dc:creator>Matthew Fulmer</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://mtfulmer.wordpress.com/?p=21</guid>
		<description><![CDATA[Now, back to my original question: I&#8217;ve done a bit of reading on how to parallelize raytracing, especially given the memory constraints of the cell. There are three approaches I&#8217;ve discovered so far:

 Distribute the rays: Each node runs a full raytracer on the full scene, and processes a subset of the rays from start [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Now, back to my original question: I&#8217;ve done a bit of reading on how to parallelize raytracing, especially given the memory constraints of the cell. There are three approaches I&#8217;ve discovered so far:</p>
<ol>
<li> Distribute the rays: Each node runs a full raytracer on the full scene, and processes a subset of the rays from start to finish
<li> Distribute the processing: One node handles ray creation, another ray intersection, another shading, another shadows.  Every node needs access to different aspects of the entire scene.
<li> Distribute the scene: Each node handles every ray segment that intersects it&#8217;s slice of the scene.
</ol>
<p>For my purposes, I&#8217;m interested in two things:</p>
<ol>
<li> How well this will work on the Cell processor, where each node has only 256K of memory, and
<li> How well the approach maps to the <a href="http://mtfulmer.wordpress.com/2008/03/21/e-concurency-model/"> E Concurrency model </a>, which I also call the vat model, below.
</ol>
<h2> Distribute the Rays </h2>
<p>The first approach is unquestionably the best when the entire scene fits into local memory of each node, as it is pretty easy on network bandwidth. Using this approach, once the scene is availible to all nodes, the raytracing problem is embarassingly parallel: every ray shooting out of the camera can be processed with zero communication among the nodes. However, if the scene does not fit in memory, the node will have to fetch parts of it and cache them locally.</p>
<h2> Distribute the Computation </h2>
<p>The second approach is closest to what the Cell was meant to do: act as a stream processor. However, this does not scale up to any number of nodes, nor does it scale down; it requires each node to be developed as part of a stream. This is rather network-intensive; most rays will make at least one pass through every node.</p>
<h2> Distribute the Scene </h2>
<p>The third is the closest to how vats natively operate. Scenes are usually stored in a tree structure, with the root pointing to a number of children. In this scheme, Many of the child pointers in the tree would be local pointers, but some would be far refs; entire subtrees of the scene graph would be seperated from the root and reside in a seperate vat. This would be very easy to program for. </p>
<p>A raytracer would be started on the vat with the root node of the scene, and as the program progressed, it would send remote messages to the parts of the scene stored in other vats, distributing the computation as a side-effect of sending regular, asynchronous messages to various parts of the scene. This is network intensive; every ray passes through several slices of the scene, and it is also unfair; slices with a light will have to process nearly every ray, while slices in the corner may get only a handful of rays.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mtfulmer.wordpress.com/21/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mtfulmer.wordpress.com/21/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mtfulmer.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mtfulmer.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mtfulmer.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mtfulmer.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mtfulmer.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mtfulmer.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mtfulmer.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mtfulmer.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mtfulmer.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mtfulmer.wordpress.com/21/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mtfulmer.wordpress.com&blog=661952&post=21&subd=mtfulmer&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mtfulmer.wordpress.com/2008/07/08/three-ways-to-parallelize-a-raytracer/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/tapple-128.jpg" medium="image">
			<media:title type="html">tapple</media:title>
		</media:content>
	</item>
		<item>
		<title>E Concurrency model</title>
		<link>http://mtfulmer.wordpress.com/2008/03/21/e-concurency-model/</link>
		<comments>http://mtfulmer.wordpress.com/2008/03/21/e-concurency-model/#comments</comments>
		<pubDate>Fri, 21 Mar 2008 00:35:47 +0000</pubDate>
		<dc:creator>Matthew Fulmer</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://mtfulmer.wordpress.com/?p=19</guid>
		<description><![CDATA[The E Language has an interesting and very nice concurrency model. It is related to the Croquet/Tweak messaging model. This is an outline of it. I also made an animated demo of how promises work
Objects

 Everything is an OBJECT.
 Every object is associated with exactly one MAILBOX

There are two ways to initiate an action:

 CALL [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>The <a href="http://erights.org">E Language</a> has an interesting and very nice concurrency model. It is related to <a href="http://tweakproject.org/TECHNOLOGY/Whitepapers/">the Croquet/Tweak messaging model</a>. This is an outline of it. I also made an animated demo of <a href="http://scratch.mit.edu/projects/tapple/124314">how promises work</a><span id="more-19"></span></p>
<p>Objects</p>
<ul>
<li> Everything is an OBJECT.</li>
<li> Every object is associated with exactly one MAILBOX</li>
</ul>
<p>There are two ways to initiate an action:</p>
<ul>
<li> CALL a METHOD of an object (synchronous, immediate)</li>
<li> SEND a MESSAGE to an object (asynchronous, eventual)</li>
</ul>
<p>Calling a method:</p>
<ul>
<li> Pauses the currently executing method</li>
<li>Runs the called method until it completes</li>
<li> Returns the computation result to the calling method</li>
<li> Resumes executing the calling method</li>
</ul>
<p>Sending a message:</p>
<ul>
<li> Creates a message object</li>
<li> Places the message the receiver object&#8217;s mailbox</li>
<li> Returns a PROMISE to the sending method</li>
</ul>
<p>A message knows about:</p>
<ul>
<li> The promise created when the message was sent</li>
<li> The object that will receive the message (the receiver)</li>
<li> The method to call</li>
<li> The arguments to the method</li>
</ul>
<p>Promises</p>
<ul>
<li> A promise has a private mailbox</li>
<li> Messages sent to a promise will merely be stuffed in its private mailbox</li>
<li> A promise will turn into the return value of its associated message when it completes (the promise RESOLVES)</li>
<li> A promise will put the messages in it&#8217;s private mailbox on the public mailbox when it resolves</li>
</ul>
<p>A thread executes the following loop until terminated:</p>
<ul>
<li> take the earliest message from an object&#8217;s mailbox</li>
<li> call the method named in the message</li>
<li> when the method finishes, resolve its promise with the method&#8217;s return value</li>
</ul>
<p>A method CANNOT wait for a promise to resolve, or for any other event. It may only place messages in a promise&#8217;s mailbox, to be run after the promise resolves. Thus, waiting is impossible, and, therefore, deadlock is impossible.</p>
<p>A thread, the group of objects associated with that thread, and the mailbox associated with those objects, is collectively called a VAT (called &#8220;Islands&#8221; in Tweak). Vats are the basic unit of concurrency in E. The number of active vats is the upper bound on the number of methods that are executing at once.</p>
<p>A vat is:</p>
<ul>
<li> A thread</li>
<li> A mailbox</li>
<li> A group of objects</li>
</ul>
<p>All objects belong to exactly one vat</p>
<ul>
<li> a message sent to an object is enqueued in the object&#8217;s vat&#8217;s mailbox (unless the receiver is a promise)</li>
<li> a method called on an object is executed in the context of the object&#8217;s vat&#8217;s thread</li>
<li> an object can call methods of another object only if the callee object and the calling object are in the same vat (and therefore the methods execute in the same thread)</li>
<li> an object can send a message to any object it knows about, no matter if it is in the local vat, in another vat, or is a promise</li>
</ul>
<p>A vat&#8217;s thread is only ever processing one message at any time, and it runs to completion. And since an object may only be in one vat, it&#8217;s state is only ever being touched by at most one thread. Hence, memory contention is not present, and locking is not necessary. Locking is impossible anyway, as waiting is impossible.</p>
<p>Keywords:</p>
<ul>
<li> Object: An entity with state and behavior</li>
<li> Method: A unit of behavior defined on an object</li>
<li> Call: To execute a method in the current thread synchronously</li>
<li> Message: A request to execute a method at some point in the future</li>
<li> Mailbox: A queue for messages that have not yet been serviced</li>
<li> Send: To place a message in an object&#8217;s mailbox</li>
<li> Vat: A set of objects all sharing one thread and mailbox</li>
<li> Promise: A handle for an object that has not been computed yet, since it is the result of a message that has not yet been serviced</li>
<li> Resolve: To turn a promise into the object it was standing-in for. This happens when the message associated with the promise completes</li>
</ul>
<p>This model is somewhat simplified. It does not address:</p>
<ul>
<li> Exception handling</li>
<li> Broken promises</li>
<li> Pass-by-copy objects</li>
<li>Global message ordering</li>
</ul>
<p>For more information, see <a href="http://wiki.erights.org/wiki/Walnut/Distributed_Computing">chapter 3 of the Walnut book</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mtfulmer.wordpress.com/19/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mtfulmer.wordpress.com/19/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mtfulmer.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mtfulmer.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mtfulmer.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mtfulmer.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mtfulmer.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mtfulmer.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mtfulmer.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mtfulmer.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mtfulmer.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mtfulmer.wordpress.com/19/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mtfulmer.wordpress.com&blog=661952&post=19&subd=mtfulmer&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mtfulmer.wordpress.com/2008/03/21/e-concurency-model/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/tapple-128.jpg" medium="image">
			<media:title type="html">tapple</media:title>
		</media:content>
	</item>
		<item>
		<title>DeltaStreams 0.1.1 in the works</title>
		<link>http://mtfulmer.wordpress.com/2007/11/29/deltastreams-011-in-the-works/</link>
		<comments>http://mtfulmer.wordpress.com/2007/11/29/deltastreams-011-in-the-works/#comments</comments>
		<pubDate>Thu, 29 Nov 2007 19:08:57 +0000</pubDate>
		<dc:creator>Matthew Fulmer</dc:creator>
		
		<category><![CDATA[Delta Streams]]></category>

		<guid isPermaLink="false">http://mtfulmer.wordpress.com/2007/11/29/deltastreams-011-in-the-works/</guid>
		<description><![CDATA[I don&#8217;t update my blog nearly enough. I released DeltaStreams (with Goran&#8217;s approval), nearly a month ago (announcement). Since then, I&#8217;ve been working on a few improvements in my (currently copious) spare time. I&#8217;ve eliminated (I believe) the dependence on ToolBuilder and PlusTools, which should allow a Universe release and a 3.8 release. I also [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I don&#8217;t update my blog nearly enough. I released <a href="http://wiki.squeak.org/squeak/DeltaStreams">DeltaStreams</a> (with Goran&#8217;s approval), nearly a month ago (<a href="http://lists.squeakfoundation.org/pipermail/squeak-dev/2007-November/122460.html">announcement</a>). Since then, I&#8217;ve been working on a few improvements in my (currently copious) spare time. I&#8217;ve eliminated (I believe) the dependence on ToolBuilder and PlusTools, which should allow a Universe release and a 3.8 release. I also fixed a number of bugs, increasing the number of passing unit tests from 87 to 107 (out of 131). The release process for 0.1 was done manually, and it was a pain, and will only get worse as the number of supported Squeak versions and the number of release avenues increases. So, the last step of 0.1.1 will be an automated build and release script, which will (hopefully) let me build the .sar release files and upload them to squeakmap and universes with a single command.</p>
<p>It may be the start of a build system (like the <a href="http://wiki.squeak.org/squeak/Sake">Sake</a> idea), or just a DSL for publishing packages (akin to <a href="http://wiki.squeak.org/squeak/Installer">Installer</a>); I don&#8217;t know.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mtfulmer.wordpress.com/18/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mtfulmer.wordpress.com/18/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mtfulmer.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mtfulmer.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mtfulmer.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mtfulmer.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mtfulmer.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mtfulmer.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mtfulmer.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mtfulmer.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mtfulmer.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mtfulmer.wordpress.com/18/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mtfulmer.wordpress.com&blog=661952&post=18&subd=mtfulmer&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mtfulmer.wordpress.com/2007/11/29/deltastreams-011-in-the-works/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/tapple-128.jpg" medium="image">
			<media:title type="html">tapple</media:title>
		</media:content>
	</item>
		<item>
		<title>A New Squeak Development Example For Squeak 3.9</title>
		<link>http://mtfulmer.wordpress.com/2007/07/04/a-new-squeak-development-example-for-squeak-39/</link>
		<comments>http://mtfulmer.wordpress.com/2007/07/04/a-new-squeak-development-example-for-squeak-39/#comments</comments>
		<pubDate>Wed, 04 Jul 2007 02:23:03 +0000</pubDate>
		<dc:creator>Matthew Fulmer</dc:creator>
		
		<category><![CDATA[Squeak]]></category>

		<category><![CDATA[Squeak Doc]]></category>

		<guid isPermaLink="false">http://mtfulmer.wordpress.com/2007/07/04/a-new-squeak-development-example-for-squeak-39/</guid>
		<description><![CDATA[Stephan Wessels just finished an excellent tutorial for Squeak Smalltalk. Covers everything from installing squeak to building a fun game with Morphic. It focuses on test driven development throughout the entire process. It also shows how to use Monticello to manage code.
A great accomplishment. Thank you, Steve
       ]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://www.preeminent.org/steve/">Stephan Wessels</a> just finished an excellent <a href="http://squeak.preeminent.org/blog/C597890805/E20070630234239/index.html">tutorial </a>for Squeak Smalltalk. Covers everything from installing squeak to building a fun game with Morphic. It focuses on test driven development throughout the entire process. It also shows how to use Monticello to manage code.</p>
<p>A great accomplishment. Thank you, Steve</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mtfulmer.wordpress.com/17/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mtfulmer.wordpress.com/17/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mtfulmer.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mtfulmer.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mtfulmer.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mtfulmer.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mtfulmer.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mtfulmer.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mtfulmer.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mtfulmer.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mtfulmer.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mtfulmer.wordpress.com/17/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mtfulmer.wordpress.com&blog=661952&post=17&subd=mtfulmer&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mtfulmer.wordpress.com/2007/07/04/a-new-squeak-development-example-for-squeak-39/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/tapple-128.jpg" medium="image">
			<media:title type="html">tapple</media:title>
		</media:content>
	</item>
		<item>
		<title>Smalltalk debugger realization</title>
		<link>http://mtfulmer.wordpress.com/2007/06/08/smalltalk-debugger-realization/</link>
		<comments>http://mtfulmer.wordpress.com/2007/06/08/smalltalk-debugger-realization/#comments</comments>
		<pubDate>Fri, 08 Jun 2007 06:29:03 +0000</pubDate>
		<dc:creator>Matthew Fulmer</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://mtfulmer.wordpress.com/2007/06/08/smalltalk-debugger-realization/</guid>
		<description><![CDATA[As I was working on adding email notification to SqueakSource commits, I had the debugger open to a method with two very interesting objects. I wanted to send a few test messages involving those objects to see what kind of information I could coax out of them. But I couldn&#8217;t think of a way to [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>As I was working on adding email notification to SqueakSource commits, I had the debugger open to a method with two very interesting objects. I wanted to send a few test messages involving those objects to see what kind of information I could coax out of them. But I couldn&#8217;t think of a way to have them both open in a workspace or inspector at the same time! How could I test them out?</p>
<p>Then it hit me. You can edit the method here in the debugger, test them out however I want, then save the messages I want into this method, and erase the ones I don&#8217;t. It is more than what I wanted, and I had to press zero buttons. I like interfaces like that</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mtfulmer.wordpress.com/14/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mtfulmer.wordpress.com/14/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mtfulmer.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mtfulmer.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mtfulmer.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mtfulmer.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mtfulmer.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mtfulmer.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mtfulmer.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mtfulmer.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mtfulmer.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mtfulmer.wordpress.com/14/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mtfulmer.wordpress.com&blog=661952&post=14&subd=mtfulmer&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mtfulmer.wordpress.com/2007/06/08/smalltalk-debugger-realization/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/tapple-128.jpg" medium="image">
			<media:title type="html">tapple</media:title>
		</media:content>
	</item>
		<item>
		<title>Updating ThingLab</title>
		<link>http://mtfulmer.wordpress.com/2007/03/08/updating-thinglab/</link>
		<comments>http://mtfulmer.wordpress.com/2007/03/08/updating-thinglab/#comments</comments>
		<pubDate>Thu, 08 Mar 2007 01:44:06 +0000</pubDate>
		<dc:creator>Matthew Fulmer</dc:creator>
		
		<category><![CDATA[ThingLab]]></category>

		<guid isPermaLink="false">http://mtfulmer.wordpress.com/2007/03/08/updating-thinglab/</guid>
		<description><![CDATA[I have decided to update ThingLab so that it runs on Squeak 3.8. I am doing this partly to prepare for Peek, my Google Summer of Code proposal, and partly because ThingLab is one of the coolest projects I have ever seen and actually exists. So far, I have it partially running under MVC in [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I have decided to update <a href="http://wiki.squeak.org/squeak/607">ThingLab</a> so that it runs on Squeak 3.8. I am doing this partly to prepare for <a href="http://wiki.squeak.org/squeak/5771">Peek</a>, my Google Summer of Code proposal, and partly because ThingLab is one of the coolest projects I have ever seen and actually exists. So far, I have it partially running under MVC in Squeak 3.8. I will get it fully working under MVC before I even attempt to get it running under Morphic, probably via the Omni framework. A lot of it works already, but the nice features, like constraint merging and deletion, tend to bring up the emergency evaluator at odd times.</p>
<p>I am also running it under Squeak 2.3, which was the target of the partial update done by  <a href="http://wiki.squeak.org/squeak/615" class="internal" title="last edited 2462 days ago by suprimo-193.ping.de.">Reinier van Loon</a> in 1998. It works a bit better under Squeak 2.3, but constraint deletion brings up the emergency evaluator even there.</p>
<p>I will port the code to Monticello soon. Check back at <a href="http://www.squeaksource.com/ThingLab" title="static listing url">http://www.squeaksource.com/ThingLab</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mtfulmer.wordpress.com/13/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mtfulmer.wordpress.com/13/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mtfulmer.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mtfulmer.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mtfulmer.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mtfulmer.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mtfulmer.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mtfulmer.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mtfulmer.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mtfulmer.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mtfulmer.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mtfulmer.wordpress.com/13/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mtfulmer.wordpress.com&blog=661952&post=13&subd=mtfulmer&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mtfulmer.wordpress.com/2007/03/08/updating-thinglab/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/tapple-128.jpg" medium="image">
			<media:title type="html">tapple</media:title>
		</media:content>
	</item>
		<item>
		<title>How not to port software, part 2</title>
		<link>http://mtfulmer.wordpress.com/2007/02/23/how-not-to-port-software-part-2/</link>
		<comments>http://mtfulmer.wordpress.com/2007/02/23/how-not-to-port-software-part-2/#comments</comments>
		<pubDate>Fri, 23 Feb 2007 03:23:24 +0000</pubDate>
		<dc:creator>Matthew Fulmer</dc:creator>
		
		<category><![CDATA[AME Education]]></category>

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

		<guid isPermaLink="false">http://mtfulmer.wordpress.com/2007/02/23/how-not-to-port-software-part-2/</guid>
		<description><![CDATA[In my previous post, I told about my experience trying to port a
windows-only C++ program first to the cross-platform glib toolkit, then
to the Squeak environment. I gave up because I thought it would take too
long, and because I was not willing to ask for help using Smallapack, a
Squeak/VisualWorks matrix library. Now I have finished the [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>In my <a href="http://mtfulmer.wordpress.com/2007/02/07/how-not-to-port-software/">previous post</a>, I told about my experience trying to port a<br />
windows-only C++ program first to the cross-platform glib toolkit, then<br />
to the Squeak environment. I gave up because I thought it would take too<br />
long, and because I was not willing to ask for help using Smallapack, a<br />
Squeak/VisualWorks matrix library. Now I have finished the short project<br />
assigned to me and can look at what happened in retrospect.</p>
<p>The code was even harder to work with than I had imagined it to be. In<br />
spite of being written in C++, the program has no modularity whatsoever,<br />
since all the work is done in a single instance of a single class, and a<br />
mighty fat class it is. The class contains three separate, but heavily<br />
related, algorithms to analyze a stream of data using overlapping window<br />
analysis. So, from the very beginning, there is extreme code<br />
duplication, with up to four functions with nearly the same role; only 3<br />
of the functions were actually shared by all three algorithms.</p>
<p>But what of it? This code is a maintenance nightmare, but will it be<br />
maintained? No! So no maintenance means no nightmare. Harvey, my<br />
adviser, said that he had the same problem I had when he first started<br />
making disposable systems: He had to learn how to write bad code.</p>
<p>So what did I do? I just erased the functions that did something they<br />
did not need to do and made them do what I wanted them to do. Sure; I<br />
accidentally deleted a bit of key functionality, but I could just look at<br />
an old version of the code in subversion to put it back in, and then I<br />
had it: an ugly working program, built from another working program;<br />
neither worse than the other. Each separate functional unit is a<br />
separate program in a separate subversion branch; never to be merged<br />
with the trunk. Again; a maintenance nightmare, but no maintenance<br />
means it is all good.</p>
<p>So is my experience applicable in the real world where code lives on?<br />
I hope not. My code has no future. If it did, a refactoring would be<br />
necessary.</p>
<p>So I wonder, is this more of a problem with early-bound, bottom-up<br />
systems like C++ than it is late-bound, top-down systems like smalltalk?<br />
I don&#8217;t know. I started the port with the goal of portability and<br />
maintainability in mind, and chose smalltalk because I wanted to see if<br />
it really was easier to use. So was it?</p>
<p>Refactoring was very easy in Squeak, thanks to the refactoring browser.<br />
However, one problem I found was I could not find a way to limit the<br />
scope of a method rename to just my own classes. I managed to trash the<br />
image twice by renaming a message globally.</p>
<p>Backtracking in Smalltalk was easier than in Subversion, thanks to the<br />
ability to view all changes to each method rather than a coarse<br />
commits. However, I did have a little trouble importing changes after a<br />
crash; the change viewer seemed to file in a range of changes in a<br />
non-temporal order, then abort because it tried to define a method on a<br />
non-existent class. That is probably easy to fix.</p>
<p>The smalltalk debugger actually works. The MSVC debugger just crashed. I<br />
had to resort to printf&#8217;s and debugging macros. C++ got totally owned in<br />
this respect.</p>
<p>Squeak does not have a stable matrix library. I sincerely wish I had<br />
been able to Smallapack; the only thing that stopped me was the<br />
deadline pressure. It was not the deadline itself, but the pressure of<br />
&#8220;just get it working, now&#8221; that prevented me from debugging the very<br />
nice Smallapack library. Without that, Smallapack would be slightly more<br />
stable, and Squeak a pre-alpha dataflow framework.</p>
<p>So, what have I learned? The best way to make a deadline is to cheat.<br />
Therefore, I am going to do whatever it takes to make my next project be<br />
free of milestone deadlines, where functionality always trumps code<br />
sharing. This project is open-source in spirit, especially within our<br />
research department, but the focus on the present seems to prevent<br />
the code from having a future, other than as mutant forms of itself.<br />
Luckily, my internship at Intel seems, at least right now, to be free of<br />
milestone deadlines. I have created milestones to track my progress, but<br />
not for scheduling purposes.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mtfulmer.wordpress.com/12/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mtfulmer.wordpress.com/12/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mtfulmer.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mtfulmer.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mtfulmer.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mtfulmer.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mtfulmer.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mtfulmer.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mtfulmer.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mtfulmer.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mtfulmer.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mtfulmer.wordpress.com/12/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mtfulmer.wordpress.com&blog=661952&post=12&subd=mtfulmer&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mtfulmer.wordpress.com/2007/02/23/how-not-to-port-software-part-2/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/tapple-128.jpg" medium="image">
			<media:title type="html">tapple</media:title>
		</media:content>
	</item>
		<item>
		<title>How not to port software</title>
		<link>http://mtfulmer.wordpress.com/2007/02/07/how-not-to-port-software/</link>
		<comments>http://mtfulmer.wordpress.com/2007/02/07/how-not-to-port-software/#comments</comments>
		<pubDate>Wed, 07 Feb 2007 18:08:33 +0000</pubDate>
		<dc:creator>Matthew Fulmer</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://mtfulmer.wordpress.com/2007/02/07/how-not-to-port-software/</guid>
		<description><![CDATA[Three weeks ago, I received an assignment from my research adviser to
add a new, simple motion model to our path tracing program. Quite a
simple assignment. However, I do not like the code base for several
reasons:

 It only works under Visual Studio on Windows
 It is monolithic
 It is not modular

So I thought, why not get [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Three weeks ago, I received an assignment from my research adviser to<br />
add a new, simple motion model to our path tracing program. Quite a<br />
simple assignment. However, I do not like the code base for several<br />
reasons:</p>
<ol>
<li> It only works under Visual Studio on Windows</li>
<li> It is monolithic</li>
<li> It is not modular</li>
</ol>
<p>So I thought, why not get around to cleaning up this code? I&#8217;ve been<br />
wanting to do it all of last semester. First order of business is to get<br />
it to work under Linux, as I didn&#8217;t have easy access to Windows or<br />
Visual Studio at home. So I figured out how to use Autoconf and<br />
Automake, and had the program building under Cygwin (but not linking) by<br />
the end of the day. I then went home, thinking I could get the rest done<br />
at home on Linux.</p>
<p>So I started examining what was preventing the program from running<br />
anywhere. I found three things:</p>
<ol>
<li> A windows-only C++ threading package</li>
<li> A windows/Mac only UDP Multicast client and server</li>
<li> A possibly non-portable Mersenne Twister RNG</li>
</ol>
<p>Being the over-confident programmer that I was, I figured I could solve<br />
all these problems by refactoring to use glibmm, which had portable<br />
implementations of all these things.</p>
<p>At the thought of refactoring, I had a bright idea: This would be so<br />
much easier in Squeak Smalltalk! Why don&#8217;t I translate the program into<br />
Squeak, then I could do the refactoring really fast! Also, I could do<br />
the required visualizations in eToys and Morphic rather than learn how<br />
to program in Max/MSP. So I started systematically translating the<br />
relevant parts of the C++ code into Smalltalk.</p>
<p>By this time, I was about a week into the assignment. I had read enough<br />
of the code to be able to decipher what was going on. Since I had this<br />
understanding, why not make a simple, extensible framework that does the<br />
same thing! So I installed the Smallapack matrix library for Squeak.<br />
Then I set about creating the framework that does what the C++ code did<br />
as a bunch of nested loops.</p>
<p>Two weeks go by, and I finally have a framework to send in data, process<br />
it using the Matrix library, and draws a simple visualization. So I try<br />
running it. Everything breaks. It seems that Smallapack for Squeak is<br />
still in an early version, and diagonal matrices are unusably broken. So<br />
I fixed that, and I find that I still have many of the calculations<br />
wrong, and matrix inversion does not quite work in Smallapack. I did a<br />
bit of Smallapack debugging, but by this time, I am tired of fixing<br />
code, and just want to get it working. But also by this time, I have<br />
spent so much time on this project that I have a few pending assignments<br />
I need to work on.</p>
<p>About this time, Intel gave me a new Windows laptop. Well, that kind of<br />
invalidated the entire reason I had been porting this software in the<br />
first place. So I stopped working on this software for a week and worked<br />
on the other projects I had to do.</p>
<p>That is what I have been up to for the past four weeks. I have the new<br />
motion models in the Squeak version, but that version is broken, and<br />
does not yet integrate into the rest of Smallab, although that would be<br />
pretty easy to add.</p>
<p>So what do I have to show? I have a little bit of broken code with a<br />
fraction of the functionality I started with. Sure, it is cleaner and<br />
a bit easier to work with, but I don&#8217;t see an easy way to get it<br />
functional without debugging Smallapack.</p>
<p>I now see that I went about the problem completely wrong:</p>
<ul>
<li> I tried to refactor before I even solved the problem</li>
<li> I tried to change the build system while refactoring</li>
<li> I tried to change the platform out from under the system while<br />
refactoring</li>
<li> I tried to translate the program just to make the refactoring I hadn&#8217;t<br />
even started yet easier</li>
<li> I tried to rewrite the program on an unstable platform,<br />
with no commitment to fix the platform</li>
<li> I tried to fix the program with no way to run it or test it until the<br />
very end.</li>
</ul>
<p>This was my biggest mistake.What I should have done is to suck in my arrogance, stay at the lab, and<br />
use Visual Studio to add the new model to the C++ code base. I probably<br />
would then have had a bit of time to go about refactoring the code in a<br />
more leisurely manner. That would have prevented me from trying to do<br />
the entire jump from Windows to glib or Squeak in one step. If I wanted<br />
to port it to Squeak, I should have made the C++ code into a Squeak<br />
plug-in, and wrote some tests for it. Then I should have translated it<br />
method by method, refactoring as I translate, and keep running the<br />
tests.</p>
<p>Finally, I would like to apologize to my adviser: Harvey, I am sorry I<br />
spent my time taking the long path. I know that you value my time and I<br />
see now that all we need is something that works, so that should be<br />
given top priority. Again, I apologize for not following your advice, I<br />
will most definitely have the new model and visualization working by<br />
next Wednesday.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mtfulmer.wordpress.com/11/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mtfulmer.wordpress.com/11/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mtfulmer.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mtfulmer.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mtfulmer.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mtfulmer.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mtfulmer.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mtfulmer.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mtfulmer.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mtfulmer.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mtfulmer.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mtfulmer.wordpress.com/11/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mtfulmer.wordpress.com&blog=661952&post=11&subd=mtfulmer&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mtfulmer.wordpress.com/2007/02/07/how-not-to-port-software/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/tapple-128.jpg" medium="image">
			<media:title type="html">tapple</media:title>
		</media:content>
	</item>
		<item>
		<title>Should I work on proprietary software?</title>
		<link>http://mtfulmer.wordpress.com/2007/01/17/should-i-work-on-proprietary-software/</link>
		<comments>http://mtfulmer.wordpress.com/2007/01/17/should-i-work-on-proprietary-software/#comments</comments>
		<pubDate>Wed, 17 Jan 2007 20:40:40 +0000</pubDate>
		<dc:creator>Matthew Fulmer</dc:creator>
		
		<category><![CDATA[intel]]></category>

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

		<guid isPermaLink="false">http://mtfulmer.wordpress.com/2007/01/17/should-i-work-on-proprietary-software/</guid>
		<description><![CDATA[Yesterday was my first day on the internship at Intel. It was a lot of fun, and the cafeteria is amazing. But I found out what I had been dreading to hear: I am to develop proprietary software for Intel to use in-house.
I was considering dropping the internship for that reason, but I talked to [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Yesterday was my first day on the internship at Intel. It was a lot of fun, and the cafeteria is amazing. But I found out what I had been dreading to hear: I am to develop proprietary software for Intel to use in-house.</p>
<p>I was considering dropping the internship for that reason, but I talked to my father about it first. We talked about the values of free software (for the first time), and I decided that the cost of developing the proprietary software in-house is not very high, as opposed to distributed proprietary software, and that I will only work on proprietary software if it is not distributed.</p>
<p>Here is how I weighed the cost:</p>
<p>Proprietary software costs everyone who uses it a certain amount of freedom. It costs everyone who does not use it the ability to use it, which is not too bad. The software I will be making is a Python program to string together and record the results of proprietary Intel testing and measuring equipment, and so has very little use outside of Intel. That is why I say that denying everyone outside of Intel the right to use it is not too bad: they will not want or use it anyway.</p>
<p>Now consider the cost to the user: the freedom to share it. First, all users are being paid by Intel,  and second, nobody wants it anyway. Thus the users are compensated, and the non-users have a negligible interest in the software, so I think it is OK to work on this proprietary program.  None of this would be true if the program was distributed; thus I will never work on distributed proprietary software.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mtfulmer.wordpress.com/10/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mtfulmer.wordpress.com/10/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mtfulmer.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mtfulmer.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mtfulmer.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mtfulmer.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mtfulmer.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mtfulmer.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mtfulmer.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mtfulmer.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mtfulmer.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mtfulmer.wordpress.com/10/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mtfulmer.wordpress.com&blog=661952&post=10&subd=mtfulmer&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mtfulmer.wordpress.com/2007/01/17/should-i-work-on-proprietary-software/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/tapple-128.jpg" medium="image">
			<media:title type="html">tapple</media:title>
		</media:content>
	</item>
		<item>
		<title>New Mexico Christian Children&#8217;s Home</title>
		<link>http://mtfulmer.wordpress.com/2007/01/15/new-mexico-christian-childrens-home/</link>
		<comments>http://mtfulmer.wordpress.com/2007/01/15/new-mexico-christian-childrens-home/#comments</comments>
		<pubDate>Mon, 15 Jan 2007 08:29:11 +0000</pubDate>
		<dc:creator>Matthew Fulmer</dc:creator>
		
		<category><![CDATA[Church]]></category>

		<guid isPermaLink="false">http://mtfulmer.wordpress.com/2007/01/15/new-mexico-christian-childrens-home/</guid>
		<description><![CDATA[At church tonight, there was a presentation regarding the New Mexico Christian Children&#8217;s Home. My church has donated food, laundry detergent, and money to that place for as long as I have been there, but this was the first time I ever saw anything about it. I am very impressed; it is definitely a place [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>At church tonight, there was a presentation regarding the New Mexico Christian Children&#8217;s Home. My church has donated food, laundry detergent, and money to that place for as long as I have been there, but this was the first time I ever saw anything about it. I am very impressed; it is definitely a place worth investing in. They raise about 50 kids at a time, and train them all to be excellent people.</p>
<p>The families have times for Bible Study, times for homework, and times for play. The children are taught economics through assigned chores, and raising crops and animals. Each year, they attend the local fair, and they present and auction the animals, and sell the vegetables.  It seemed to be very effective.</p>
<p>I think I believe that a farm is the only place to raise children, and I got a confirming glimpse of that during this presentation. When I become a parent, I will need to keep in mind three things:</p>
<p>- Always set a Godly example for the others. The best way to know how to be Godly is to see others do it.</p>
<p>- Teach the value of work, time, and money. Do not waste much of them, because they are quite valuable, especially work and time.</p>
<p>- Put the children in a community of parents and peers. The more friends anyone has, the better.  I think the same could be said of parents. The more adults a child knows and trusts, the more wisdom and knowledge they can gain.</p>
<p>And I should definitely put this place in my will.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mtfulmer.wordpress.com/9/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mtfulmer.wordpress.com/9/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mtfulmer.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mtfulmer.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mtfulmer.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mtfulmer.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mtfulmer.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mtfulmer.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mtfulmer.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mtfulmer.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mtfulmer.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mtfulmer.wordpress.com/9/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mtfulmer.wordpress.com&blog=661952&post=9&subd=mtfulmer&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mtfulmer.wordpress.com/2007/01/15/new-mexico-christian-childrens-home/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/tapple-128.jpg" medium="image">
			<media:title type="html">tapple</media:title>
		</media:content>
	</item>
	</channel>
</rss>