Skip to content

Instantly share code, notes, and snippets.

@kenwebb
Created March 11, 2012 14:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kenwebb/2016722 to your computer and use it in GitHub Desktop.
Save kenwebb/2016722 to your computer and use it in GitHub Desktop.
How the First Plant Came to Be
<?xml version="1.0" encoding="UTF-8"?>
<!--Xholon Workbook http://www.primordion.com/Xholon/wb/ (C) Ken Webb Mon Mar 12 2012 16:08:20 GMT-0400 (EDT)-->
<XholonWorkbook>
<Notes><![CDATA[
Xholon
------
Title: How the First Plant Came to Be
Description: A genetic analysis reveals the ancient, complex--and symbiotic--roots of photosynthesis in plants
Url: http://www.scientificamerican.com/article.cfm?id=how-first-plant-evolved
InternalName:
YoutubeId:
Keywords:
My Notes
--------
The Scientific American (SA) article contains terms that readers may not be familiar with. This workbook organizes these into an inheritance hierarchy (types of things), and a containment hierarchy.
The simulation transforms an alga and cyanobacterium, into a photosynthesizer. The composite structure hierarchy is changed.
Alternatively, or in addition, the SVG could be animated.
The Scientific American article uses the term "Photosynthesizer" to mean both today's photosynthesizing plants (eukaryotes), and cyanobacteria (prokaryotes).
For more information about "the theory that all modern plant cells derived from such a symbiotic union", see::
http://en.wikipedia.org/wiki/Endosymbiotic_theory
]]></Notes>
<script implName="lang:python:inline:"><![CDATA[
#print "height = 12.34 m"
]]></script>
<script implName="lang:javascript:inline:"><![CDATA[
//print("height = 56.78 meters\n");
]]></script>
<_-.XholonClass>
<!-- Types of things. For example, a glaucophyte is a type of alga. -->
<!-- domain objects -->
<PhysicalSystem/>
<Photosynthesizer>
<Alga> <!-- "the original host" -->
<Glaucophyte/> <!-- Cyanophora paradoxa -->
</Alga>
<CyanoBacterium> <!-- "the formerly free-ranging photosynthesizer" -->
<Chloroplast/> <!-- "domesticated cyanobacteria", plastid -->
</CyanoBacterium>
<Plant/> <!-- evolved from an alga -->
</Photosynthesizer>
<BacterialParasite>
<Legionella/> <!-- a modern example -->
</BacterialParasite>
<!-- "other bacteria" -->
<Earth/> <!-- the 3rd planet from the Sun -->
<Water/>
<Genome/>
<Gene/>
</_-.XholonClass>
<xholonClassDetails>
<Alga></Alga>
</xholonClassDetails>
<PhysicalSystem>
<Water roleName="before">
<Alga/> <!-- without a photosynthesizer -->
<CyanoBacterium/>
<BacterialParasite/>
</Water>
<Water roleName="after">
<Glaucophyte>
<CyanoBacterium/> <!-- "internal solar power plant" -->
<BacterialParasite/>
</Glaucophyte>
</Water>
<!-- today, after eons of evolution -->
<Earth roleName="today">
<Plant>
<Chloroplast/>
<!--<Genome/>-->
</Plant>
</Earth>
</PhysicalSystem>
<Blockbehavior implName="lang:python:inline:"><![CDATA[
# This works if pasted in as a last child of Block.
#height.incVal(0.02)
#print("Python wants something to do. Height:" + str(height))
]]></Blockbehavior>
<Blockbehavior implName="lang:javascript:inline:"><![CDATA[
// This works if pasted in as a last child of Block.
//height.incVal(0.02);
//print("JavaScript wants something to do. Height:" + height + "\n");
]]></Blockbehavior>
<Globalbehavior implName="lang:webEditionjs:inline:"><![CDATA[
// To transform the 'before' configuration into the 'after',
// copy the following JavaScript/jQuery code to the runtime console, and press Submit.
var before = $("div.Water[rolename='before']"),
alga = before.children('div.Alga'),
cb = before.children('div.CyanoBacterium'),
bp = before.children('div.BacterialParasite');
alga.attr('class', alga.attr('class').replace(/Alga/,"Glaucophyte")).text("Glaucophyte");
alga.append(cb.remove());
alga.append(bp.remove());
]]></Globalbehavior>
<Blockbehavior implName="lang:bsh:inline:"><![CDATA[
// This works if pasted in as a last child of Block.
//height.incVal(0.02);
//System.out.print("Java/Beanshell wants something to do. Height:" + height + "\n");
]]></Blockbehavior>
<Blockbehavior implName="lang:jruby:inline:"><![CDATA[
#require 'java'
# This works if pasted in as a last child of Block.
#$height.incVal(0.02)
#puts "Ruby wants something to do. Height: #{$height}"
]]></Blockbehavior>
<Blockbehavior implName="lang:groovy:inline:"><![CDATA[
// This works if pasted in as a last child of Block.
//height.incVal(0.02);
//System.out.print("Groovy wants something to do. Height:" + height + "\n");
]]></Blockbehavior>
<SvgClient><Attribute_String roleName="svgUri"><![CDATA[data:image/svg+xml,
<svg width="100" height="50" xmlns="http://www.w3.org/2000/svg">
<g>
<title>Glaucophyte</title>
<rect id="PhysicalSystem/Water/Glaucophyte" fill="#98FB98" height="50" width="50" rx="20" ry="20" x="29" y="0"/>
<g id="svg_2">
<title>CyanoBacterium</title>
<ellipse fill="#007f00" stroke="#007f00" stroke-width="5" cx="53.5" cy="15.5" id="svg_1" rx="14.52392" ry="6.31828" transform="rotate(-15, 53.5, 15.5)"/>
</g>
<g id="svg_4">
<title>BacterialParasite</title>
<path fill="none" stroke="#00007f" stroke-width="3" id="svg_3" d="m41,41c0,-1 2.48626,-2.82375 3,-5c0.22975,-0.97325 0.29289,-1.29289 1,-2c0.70711,-0.70711 2.29289,-0.70711 3,0c0.70711,0.70711 1.29289,0.29289 2,1c0.70711,0.70711 -0.70711,2.29289 0,3c0.70711,0.70711 1.07612,1.61731 2,2c1.30656,0.5412 1.29289,2.29289 2,3c0.70711,0.70711 2,0 3,0c1,0 2.29289,0.70711 3,0c0.70711,-0.70711 1.29289,-1.29289 2,-2c0.70711,-0.70711 2.45881,-0.69344 3,-2c0.38268,-0.92387 0.29289,-1.29289 1,-2c0.70711,-0.70711 0,-2 0,-3c0,-1 0,-2 -1,-2c-1,0 -1.29289,-0.29289 -2,-1c-0.70711,-0.70711 -2,0 -2,1l-1,0"/>
</g>
</g>
</svg>
]]></Attribute_String><Attribute_String roleName="setup">${MODELNAME_DEFAULT},${SVGURI_DEFAULT}</Attribute_String></SvgClient>
</XholonWorkbook>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment