<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3.3" -->
<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/"
	>

<channel>
	<title>Morphtron</title>
	<link>http://www.morphtron.com</link>
	<description>The Dimension of Information</description>
	<pubDate>Mon, 11 Feb 2008 03:43:33 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.3</generator>
	<language>en</language>
			<item>
		<title>Pending Upgrades</title>
		<link>http://www.morphtron.com/2008/02/10/pending-upgrades/</link>
		<comments>http://www.morphtron.com/2008/02/10/pending-upgrades/#comments</comments>
		<pubDate>Mon, 11 Feb 2008 03:43:33 +0000</pubDate>
		<dc:creator>lr</dc:creator>
		
		<category><![CDATA[Implementation]]></category>

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

		<guid isPermaLink="false">http://www.morphtron.com/2008/02/10/pending-upgrades/</guid>
		<description><![CDATA[Morphtron is being used extensively in all my projects and has been undergoing some significant evolution. I expect to post updates this quarter.
]]></description>
			<content:encoded><![CDATA[<p>Morphtron is being used extensively in all my projects and has been undergoing some significant evolution. I expect to post updates this quarter.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.morphtron.com/2008/02/10/pending-upgrades/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Power of the Composite Pattern</title>
		<link>http://www.morphtron.com/2006/07/31/the-power-of-the-composite-pattern/</link>
		<comments>http://www.morphtron.com/2006/07/31/the-power-of-the-composite-pattern/#comments</comments>
		<pubDate>Tue, 01 Aug 2006 05:49:32 +0000</pubDate>
		<dc:creator>lr</dc:creator>
		
		<category><![CDATA[MC2]]></category>

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

		<guid isPermaLink="false">http://www.morphtron.com/2006/07/31/the-power-of-the-composite-pattern/</guid>
		<description><![CDATA[In my first post on MC2, I said Morphtrons have
the ability to act as components and/or containers
But this deserves more attention as the Composite pattern it represents is one of the most important and pervasive patterns in practice because things in the &#8220;real&#8221; world are always contained and often contain other things. Back in the [...]]]></description>
			<content:encoded><![CDATA[<p>In my first post on MC2, I said Morphtrons have</p>
<blockquote><p>the ability to act as components and/or containers</p></blockquote>
<p>But this deserves more attention as the <a href="http://c2.com/cgi-bin/wiki?CompositePattern">Composite pattern</a> it represents is one of the most important and pervasive patterns in practice because things in the &#8220;real&#8221; world are always contained and often contain other things. Back in the mid-1980&#8217;s the integrated software environment, <a href="http://en.wikipedia.org/wiki/Framework_%28office_suite%29">Framework</a>, written by Xerox PARC alum <a href="http://en.wikipedia.org/wiki/Robert_Carr_%28Programmer%29">Robert Carr</a> demonstrated to me that there were significant benefits to  orgainizing everything into a hierarchy of objects. Carr won a <span class="dot" /><span class="Article_Title"><a href="http://www.pcmag.com/article2/0%2C1759%2C1167680%2C00.asp">Profile In Technical Excellence</a> award in 1985 for Framework. </span>One of the benefits of the Framework approach was that there was no notion of &#8220;applications&#8221; and the degree of interoperability was astounding and still some 20 years later unsurpassed in a number of respects. MC2 brings back the kind of easy interoperability seen in Framework but missing in Smalltalk. Sure if you are a knowledgeable Smalltalker, you can integrate any two solutions but each one tends to be a special case. Often you end up having to gain a deep understanding of an object just to do something relatively simple with it. In some cases you end up having to analyze whether to refactor the class or create a subclass. With Morphtron you can take existing objects and use them together quickly and easily. As a simple example take two tools that come with Squeak the MPEG movie player and Sound Recorder. Suppose you want objects that have movie players which have their own sound recorders:</p>
<blockquote><p>myMediaRoom:=Object newNamed: &#8216;myMediaRoom&#8217;.<br />
m_(MPEGMoviePlayerMorph newNamed: &#8216;Movie Player&#8217;) openInWorld.<br />
myMediaRoom addComponent: m.<br />
s:=( RecordingControlsMorph newNamed: &#8216;Sound Recorder&#8217;) openInWorld<br />
m addComponent: s.</p>
<p>m fullName  &#8216;/myMediaRoom/Movie Player&#8217;<br />
s fullName   &#8216;/myMediaRoom/Movie Player/Sound Recorder&#8217;</p></blockquote>
<p>No refactoring, no new subclasses, just the capabilities you wanted to create from two classes you didn&#8217;t author.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.morphtron.com/2006/07/31/the-power-of-the-composite-pattern/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Morphtron Components &#038; Containers(MC2) Example - Smalltalk</title>
		<link>http://www.morphtron.com/2006/07/31/morphtron-components-containersmc2-example-smalltalk/</link>
		<comments>http://www.morphtron.com/2006/07/31/morphtron-components-containersmc2-example-smalltalk/#comments</comments>
		<pubDate>Mon, 31 Jul 2006 07:27:50 +0000</pubDate>
		<dc:creator>lr</dc:creator>
		
		<category><![CDATA[Implementation]]></category>

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

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

		<guid isPermaLink="false">http://www.morphtron.com/2006/07/31/morphtron-components-containersmc2-example-smalltalk/</guid>
		<description><![CDATA[o_Object new.
o getComponents an OrderedCollection()
o getComponentsNamed: &#8216;boo&#8217; an OrderedCollection()
o componentName &#8216;an Object&#8217;
o componentName: &#8216;hello&#8217;
o componentName &#8216;hello&#8217;
oc_Object newNamed: &#8216;world&#8217;.
o addComponent: oc.
o getComponents an OrderedCollection(an Object)
oc container componentName  &#8216;hello&#8217;
oc fullName  &#8216;/hello/world&#8217;
props_Dictionary new.
props at: #mySpecialTrait put: &#8216;is flexibility - hooray Morphtrons!&#8217;
op_Object newNamed: &#8216;h2&#8242; withProperties: props.
op fetchProperty: #mySpecialTrait &#8216;is flexibility - hooray Morphtrons!&#8217;
op_Object newNamed: &#8216;h2&#8242; withProperties: {#mySpecialTrait. [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>o_Object new.<br />
o getComponents an OrderedCollection()<br />
o getComponentsNamed: &#8216;boo&#8217; an OrderedCollection()</p>
<p>o componentName &#8216;an Object&#8217;<br />
o componentName: &#8216;hello&#8217;<br />
o componentName &#8216;hello&#8217;</p>
<p>oc_Object newNamed: &#8216;world&#8217;.<br />
o addComponent: oc.<br />
o getComponents an OrderedCollection(an Object)<br />
oc container componentName  &#8216;hello&#8217;<br />
oc fullName  &#8216;/hello/world&#8217;</p>
<p>props_Dictionary new.<br />
props at: #mySpecialTrait put: &#8216;is flexibility - hooray Morphtrons!&#8217;<br />
op_Object newNamed: &#8216;h2&#8242; withProperties: props.<br />
op fetchProperty: #mySpecialTrait &#8216;is flexibility - hooray Morphtrons!&#8217;</p>
<p>op_Object newNamed: &#8216;h2&#8242; withProperties: {#mySpecialTrait. &#8216;is flexibility - hooray Morphtrons!&#8217;}<br />
op fetchProperty: #mySpecialTrait</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.morphtron.com/2006/07/31/morphtron-components-containersmc2-example-smalltalk/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Morphtron Components &#038; Containers(MC2)</title>
		<link>http://www.morphtron.com/2006/07/31/morphtron-components-containersmc2/</link>
		<comments>http://www.morphtron.com/2006/07/31/morphtron-components-containersmc2/#comments</comments>
		<pubDate>Mon, 31 Jul 2006 07:24:05 +0000</pubDate>
		<dc:creator>lr</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.morphtron.com/2006/07/31/morphtron-components-containersmc2/</guid>
		<description><![CDATA[MC2 gives objects:

the ability to act as components and/or containers
the ability to be referred to by name(both short and full path)
a consistent, robust creation and initialization protocol

]]></description>
			<content:encoded><![CDATA[<p>MC2 gives objects:</p>
<ul>
<li>the ability to act as components and/or containers</li>
<li>the ability to be referred to by name(both short and full path)</li>
<li>a consistent, robust creation and initialization protocol</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.morphtron.com/2006/07/31/morphtron-components-containersmc2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Updated Squeak Image</title>
		<link>http://www.morphtron.com/2006/07/31/updated-squeak-image/</link>
		<comments>http://www.morphtron.com/2006/07/31/updated-squeak-image/#comments</comments>
		<pubDate>Mon, 31 Jul 2006 07:18:24 +0000</pubDate>
		<dc:creator>lr</dc:creator>
		
		<category><![CDATA[Implementation]]></category>

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

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

		<guid isPermaLink="false">http://www.morphtron.com/2006/07/31/updated-squeak-image/</guid>
		<description><![CDATA[The latest version which includes Morphtron Component &#038; Container support is 0.91.7. You can download it in the Squeak directory. Soon updates will be in changeset and/or Monticello packages.
]]></description>
			<content:encoded><![CDATA[<p>The latest version which includes Morphtron Component &#038; Container support is 0.91.7. You can download it in the <a href="http://www.morphtron.com/squeak/">Squeak directory</a>. Soon updates will be in changeset and/or Monticello packages.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.morphtron.com/2006/07/31/updated-squeak-image/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Javascript MOPA Implementations</title>
		<link>http://www.morphtron.com/2006/07/28/javascript-mopa-implementations/</link>
		<comments>http://www.morphtron.com/2006/07/28/javascript-mopa-implementations/#comments</comments>
		<pubDate>Fri, 28 Jul 2006 11:15:16 +0000</pubDate>
		<dc:creator>lr</dc:creator>
		
		<category><![CDATA[Implementation]]></category>

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

		<category><![CDATA[Javascript OSA]]></category>

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

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

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

		<category><![CDATA[Web Crossing]]></category>

		<category><![CDATA[Yahoo Widgets(Konfabulator)]]></category>

		<guid isPermaLink="false">http://www.morphtron.com/2006/07/28/javascript-mopa-implementations/</guid>
		<description><![CDATA[The following two examples use the same Javascript 1.5 based MOPA.js,

Browser based
Yahoo Widget Engine(put the MOPA.js file from above into the .kon file)

so the only differences in them have to do with output. I know that earlier versions of Morphtron ran in Javascript OSA and Web Crossing but I haven&#8217;t tested this particular file with [...]]]></description>
			<content:encoded><![CDATA[<p>The following two examples use the same<a href="http://www.morphtron.com/javascript/"> Javascript 1.5 based MOPA.js</a>,</p>
<ul>
<li><a href="http://www.morphtron.com/javascript/MOPATest.html">Browser based</a></li>
<li>Yahoo Widget Engine(put the MOPA.js file from above into the .kon file)</li>
</ul>
<p>so the only differences in them have to do with output. I know that earlier versions of Morphtron ran in Javascript OSA and Web Crossing but I haven&#8217;t tested this particular file with them - so many platforms, so little time.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.morphtron.com/2006/07/28/javascript-mopa-implementations/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Navigating Distributed Object Spaces</title>
		<link>http://www.morphtron.com/2006/07/27/navigating-distributed-object-spaces/</link>
		<comments>http://www.morphtron.com/2006/07/27/navigating-distributed-object-spaces/#comments</comments>
		<pubDate>Fri, 28 Jul 2006 03:34:19 +0000</pubDate>
		<dc:creator>lr</dc:creator>
		
		<category><![CDATA[Implementation]]></category>

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

		<guid isPermaLink="false">http://www.morphtron.com/2006/07/27/navigating-distributed-object-spaces/</guid>
		<description><![CDATA[Back in 2000, I got a chance to demo an environment based on the Morphtron derived FreeDOM architecture at Squeakend 2000. John McIntosh really captured the key ideas. One was
The thought is that the web will become a distributed object oriented space. Then the question is how to interact with it, and how to navigate [...]]]></description>
			<content:encoded><![CDATA[<p>Back in 2000, I got a chance to demo an environment based on the Morphtron derived FreeDOM architecture at Squeakend 2000. John McIntosh really captured the key ideas. One was</p>
<blockquote><p>The thought is that the web will become a distributed object oriented space. Then the question is how to interact with it, and how to navigate and how it&#8217;s displayed. Squeak gives wonderful control over that, we must exploit that.<br />
<a href="http://minnow.cc.gatech.edu/squeak/1240">Squeakend 2000</a></p></blockquote>
<p>At that time the outliner was often in the spotlight and the code base was not as flexible or modular as it is today. Here&#8217;s a screenshot from that era:</p>
<p><a title="Morphic Joules" class="imagelink" href="http://www.morphtron.com/wp-content/uploads/2006/07/morphicjoules.gif"><img alt="Morphic Joules" id="image10" src="http://www.morphtron.com/wp-content/uploads/2006/07/morphicjoules.gif" /></a></p>
<p>There&#8217;s been a lot of evolution since then - the outliner has taken its place in a larger 3D world but the core concepts have remained the same.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.morphtron.com/2006/07/27/navigating-distributed-object-spaces/feed/</wfw:commentRss>
		</item>
		<item>
		<title>MOPA Example - Smalltalk</title>
		<link>http://www.morphtron.com/2006/07/27/mopa-example-smalltalk/</link>
		<comments>http://www.morphtron.com/2006/07/27/mopa-example-smalltalk/#comments</comments>
		<pubDate>Thu, 27 Jul 2006 16:50:48 +0000</pubDate>
		<dc:creator>lr</dc:creator>
		
		<category><![CDATA[MOPA]]></category>

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

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

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

		<guid isPermaLink="false">http://www.morphtron.com/2006/07/27/mopa-example-smalltalk/</guid>
		<description><![CDATA[This simple example included in the beta image is shown below with comments and  italicized results.
create a new object
o_Object new.  an Object
see if it has a &#8216;hello world&#8217; property
o fetchProperty: &#8216;hello world&#8217;. nil
put something into the hello world property
o putIntoProperty: {&#8217;hello world&#8217;. &#8216;first program&#8217;}
fetch the new property
o fetchProperty: &#8216;hello world&#8217;. &#8216;first program&#8217;
when you [...]]]></description>
			<content:encoded><![CDATA[<p>This simple example included in the beta image is shown below with <strong>comments</strong> and  <em>italicized</em> results.</p>
<p><strong>create a new object</strong><br />
o_Object new.  <em>an Object</em></p>
<p><strong>see if it has a &#8216;hello world&#8217; property</strong><br />
o fetchProperty: &#8216;hello world&#8217;. <em>nil</em><br />
<strong>put something into the hello world property</strong><br />
o putIntoProperty: {&#8217;hello world&#8217;. &#8216;first program&#8217;}</p>
<p><strong>fetch the new property</strong><br />
o fetchProperty: &#8216;hello world&#8217;. <em>&#8216;first program&#8217;</em></p>
<p><em /><strong>when you fetch all of an object&#8217;s properties, you get all the methods and instance variables along with the accessories</strong><br />
o fetchProperties <em>a Dictionary(size 453)<br />
</em></p>
<p><strong>this simple object has only one accessory</strong><br />
o fetchAccessories <em>a Dictionary(&#8217;hello world&#8217;->&#8217;first program&#8217; )</em><br />
o fetchAccessory: &#8216;hello world&#8217; <em>&#8216;first program&#8217;</em></p>
<p>There are methods such as hasProperty and hasAccessory and other variants(hasNativeExecutableProperty) that allow you to determine what the properties an object has are.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.morphtron.com/2006/07/27/mopa-example-smalltalk/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Download The Squeak Implementation!</title>
		<link>http://www.morphtron.com/2006/07/27/download-the-squeak-implementation/</link>
		<comments>http://www.morphtron.com/2006/07/27/download-the-squeak-implementation/#comments</comments>
		<pubDate>Thu, 27 Jul 2006 16:34:58 +0000</pubDate>
		<dc:creator>lr</dc:creator>
		
		<category><![CDATA[Implementation]]></category>

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

		<guid isPermaLink="false">http://www.morphtron.com/2006/07/27/download-the-squeak-implementation/</guid>
		<description><![CDATA[Squeak 3.8 based image and changes files are available in a zip file. I&#8217;m still wrangling about what formats support - there&#8217;s no simple answer right now. It may end up both change sets and Monticello packages in Subversion which will be the common repository for other language implementations.  Spoon can&#8217;t arrive too soon!
]]></description>
			<content:encoded><![CDATA[<p>Squeak 3.8 based image and changes files are <a href="http://www.morphtron.com/squeak/">available in a zip file</a>. I&#8217;m still wrangling about what formats support - there&#8217;s no simple answer right now. It may end up both change sets and Monticello packages in Subversion which will be the common repository for other language implementations.  <a href="http://www.netjam.org/spoon/">Spoon</a> can&#8217;t arrive too soon!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.morphtron.com/2006/07/27/download-the-squeak-implementation/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Implementing The Core MOPA Methods Part 1</title>
		<link>http://www.morphtron.com/2006/07/25/implementing-the-core-mopa-methods-part-1/</link>
		<comments>http://www.morphtron.com/2006/07/25/implementing-the-core-mopa-methods-part-1/#comments</comments>
		<pubDate>Wed, 26 Jul 2006 06:13:45 +0000</pubDate>
		<dc:creator>lr</dc:creator>
		
		<category><![CDATA[Dolphin]]></category>

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

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

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

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

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

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

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

		<category><![CDATA[Yahoo Widgets(Konfabulator)]]></category>

		<guid isPermaLink="false">http://www.morphtron.com/2006/07/25/implementing-the-core-mopa-methods-part-1/</guid>
		<description><![CDATA[A full implementation of Morphtron provides a common, transparent means of providing access to properties by using the native property if it exists. In cases where no native property exists, MOPA methods then use or optionally create an accessory. For example consider this Smalltalk(Squeak and Dolphin) implementation of fetchProperty:
fetchProperty: aSymbol
&#124; property &#124;
property _ self fetchNativeProperty: [...]]]></description>
			<content:encoded><![CDATA[<p>A full implementation of Morphtron provides a common, transparent means of providing access to properties by using the native property if it exists. In cases where no native property exists, MOPA methods then use or optionally create an accessory. For example consider this Smalltalk(Squeak and Dolphin) implementation of fetchProperty:</p>
<blockquote><p><strong>fetchProperty:</strong> aSymbol<br />
| property |<br />
property _ self fetchNativeProperty: aSymbol.<br />
property<br />
ifNotNil: [^ property].<br />
^ self fetchAccessory: aSymbol</p></blockquote>
<p>The details of fetchNativeProperty are left up to the implementor. She can determine what access to native properties will be allowed. The following Smalltalk implementation this:</p>
<blockquote><p><strong>fetchNativeProperty</strong>: aSymbol<br />
| ivarValue |<br />
(self class allInstVarNames includes: aSymbol)<br />
ifTrue: [&#8221;aSymbol is an ivar&#8221;<br />
(self isPrivateInstVar: aSymbol)<br />
ifFalse: [&#8221;aSymbol has not been declared private&#8221;<br />
(self class lookupSelector: aSymbol) isNil<br />
ifTrue: [self allowInstanceVariablePropertiesWithoutAccessors<br />
ifTrue: [ivarValue _ Compiler<br />
evaluate: &#8216;^&#8217; , aSymbol asString<br />
for: self<br />
logged: false]]<br />
ifFalse: [ivarValue _ self perform: aSymbol]]].<br />
^ ivarValue</p></blockquote>
<p>Now for a prototype-based language such as Javascript, things are simplified because all properties are native:</p>
<blockquote><p>function <strong>fetchProperty</strong>(aName) {</p>
<p>/*</p>
<p>Using fetchProperty for accessing properties has a number of different benefits. It is easier for beginner-to-intermediate programmers and allows Morphtron behaviors to be ported between different object environments. It also lets accessories be used transparently as properties. That said, a programmer with sufficient knowledge can still use built-in properties and accessories however she wants. See also fetchAccessory. One interesting use of accessories is for undo.</p>
<p>*/</p>
<p>var theProperty=this[aName];</p>
<p>if(typeof(theProperty)==&#8217;undefined&#8217;) {</p>
<p>theProperty=this.fetchAccessory(aName);</p>
<p>}</p>
<p>return(theProperty);</p>
<p>}</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.morphtron.com/2006/07/25/implementing-the-core-mopa-methods-part-1/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
