<?xml version="1.0"?>
<rdf:RDF
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:foaf="http://xmlns.com/foaf/0.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns="http://purl.org/rss/1.0/"
>
<channel rdf:about="http://itp.nyu.edu/blogblender/">
	<title>ITP BlogBlender</title>
	<link>http://itp.nyu.edu/blogblender/</link>
	<description>ITP BlogBlender - http://itp.nyu.edu/blogblender/</description>

	<items>
		<rdf:Seq>
			<rdf:li rdf:resource="http://www.neocyde.net/derive/?p=1161" />
			<rdf:li rdf:resource="http://www.faludi.com/?p=1969" />
			<rdf:li rdf:resource="http://www.neocyde.net/derive/?p=1148" />
			<rdf:li rdf:resource="http://www.neocyde.net/derive/?p=1145" />
			<rdf:li rdf:resource="http://www.neocyde.net/derive/?p=1143" />
			<rdf:li rdf:resource="http://sarahdahnke.com/?p=175" />
			<rdf:li rdf:resource="http://sarahdahnke.com/?p=138" />
			<rdf:li rdf:resource="http://sarahdahnke.com/?p=136" />
			<rdf:li rdf:resource="http://sarahdahnke.com/?p=133" />
			<rdf:li rdf:resource="http://sarahdahnke.com/?p=131" />
			<rdf:li rdf:resource="http://sarahdahnke.com/?p=127" />
			<rdf:li rdf:resource="http://sarahdahnke.com/?p=124" />
			<rdf:li rdf:resource="http://sarahdahnke.com/?p=120" />
			<rdf:li rdf:resource="http://sarahdahnke.com/?p=118" />
			<rdf:li rdf:resource="http://sarahdahnke.com/?p=105" />
			<rdf:li rdf:resource="http://www.faludi.com/?p=1889" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-7442086747912287297.post-6635223123639861126" />
			<rdf:li rdf:resource="http://www.nienlam.com/?p=1593" />
			<rdf:li rdf:resource="http://www.faludi.com/?p=1861" />
			<rdf:li rdf:resource="http://aaronuhrmacher.com/?p=1480" />
			<rdf:li rdf:resource="http://www.neocyde.net/derive/?p=1137" />
			<rdf:li rdf:resource="http://www.neocyde.net/derive/?p=1135" />
			<rdf:li rdf:resource="http://www.neocyde.net/derive/?p=1132" />
			<rdf:li rdf:resource="http://sarahdahnke.com/wordpress/?p=1" />
			<rdf:li rdf:resource="http://www.neocyde.net/derive/?p=1122" />
			<rdf:li rdf:resource="http://www.neocyde.net/derive/?p=1120" />
			<rdf:li rdf:resource="http://www.neocyde.net/derive/?p=1114" />
			<rdf:li rdf:resource="http://www.neocyde.net/derive/?p=1111" />
			<rdf:li rdf:resource="http://www.faludi.com/?p=1839" />
			<rdf:li rdf:resource="http://www.neocyde.net/derive/?p=1108" />
			<rdf:li rdf:resource="http://www.neocyde.net/derive/?p=1102" />
			<rdf:li rdf:resource="http://aaronuhrmacher.com/?p=1472" />
			<rdf:li rdf:resource="http://www.neocyde.net/derive/?p=1099" />
			<rdf:li rdf:resource="http://ganucheau.com/?p=973" />
			<rdf:li rdf:resource="http://www.faludi.com/?p=1809" />
			<rdf:li rdf:resource="http://ganucheau.com/?p=968" />
			<rdf:li rdf:resource="http://aaronuhrmacher.com/?p=1462" />
			<rdf:li rdf:resource="http://aaronuhrmacher.com/?p=1457" />
			<rdf:li rdf:resource="http://aaronuhrmacher.com/?p=1439" />
			<rdf:li rdf:resource="http://ezraezraezra.com/?p=1408" />
			<rdf:li rdf:resource="http://ezraezraezra.com/?p=1403" />
			<rdf:li rdf:resource="http://ezraezraezra.com/?p=1399" />
			<rdf:li rdf:resource="http://ezraezraezra.com/?p=1391" />
			<rdf:li rdf:resource="http://ezraezraezra.com/?p=1367" />
			<rdf:li rdf:resource="http://urbanhonking.com/ideasfordozens/?p=477" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-27952663.post-7222769697791577893" />
			<rdf:li rdf:resource="http://ganucheau.com/?p=954" />
			<rdf:li rdf:resource="http://www.faludi.com/?p=1792" />
			<rdf:li rdf:resource="http://urbanhonking.com/ideasfordozens/?p=474" />
			<rdf:li rdf:resource="http://aaronuhrmacher.com/?p=1405" />
		</rdf:Seq>
	</items>
</channel>

<item rdf:about="http://www.neocyde.net/derive/?p=1161">
	<title>Design Exercise</title>
	<link>http://www.neocyde.net/derive/?p=1161</link>
	<content:encoded>&lt;p&gt;Last week, I began learning WebGL to evaluate its viability as an interface for visualization of our data set.  I tend to like WebGL because it can be wrapped cleanly in javascript, and the implementation is fairly straightforward to walk into other languages, even if they need a syntax rewrite.  WebGL can exist with decent feature parity to presentation on other platforms, like the iPad.  Unfortunately, WebGL is not currently enabled in the standard version of Safari, although it does ship with development version as well as with the standard versions of Chrome and Firefox.&lt;/p&gt;
&lt;p&gt;I found a &lt;a href=&quot;http://stratavizathlon.com/&quot;&gt;visualization contest&lt;/a&gt; put forth by O’Reilly to promote the upcoming Strata conference in New York, and took on the assignment not to win a ticket to the contest but to have a simple challenge to begin piecing together the framework that might wrap our grant data at IMAP.  The data for the visualization contest consists of two excel files: a list of 100 products with nutritional information and a linked table of ingredients ranked by volume for each of the 100 products.  The goal is to create a data explorer that presents the products in useful views.  &lt;/p&gt;
&lt;p&gt;The design exercise has so far helped me to think about what kinds of interface elements I might include in a clean front end.  It will eventually help me connect the code and raw data from Excel to a MongoDB (via C++) to an interface built with Javascript and WebGL (via Ruby on Rails).  Moving through the organization of this data into an explorer deeply informs choices I must make later for IMAP’s constituents.&lt;/p&gt;
&lt;p&gt;In this case, I am working my way from the front end to the back.  The steps to the design exercise are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Wireframe the front end in Illustrator&lt;/li&gt;
&lt;li&gt;Build the front end structure in Javascript and HTML5 using placeholder data&lt;/li&gt;
&lt;li&gt;Add WebGL transitions and animations&lt;/li&gt;
&lt;li&gt;Load the two tables from Excel into Mongo using my C++ converter&lt;/li&gt;
&lt;li&gt;Write queries for the database that return results to the interface&lt;/li&gt;
&lt;li&gt;Link the database to the interface&lt;/li&gt;
&lt;li&gt;Polish the UI&lt;/li&gt;
&lt;li&gt;Package the code&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Below are the wireframes I have created for Step 1:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://neocyde.net/imap/images/strataconf_wireframe.png&quot;&gt;&lt;img src=&quot;http://neocyde.net/imap/images/strataconf_wireframe_small.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://neocyde.net/imap/images/strataconf_wireframe2.png&quot;&gt;&lt;img src=&quot;http://neocyde.net/imap/images/strataconf_wireframe2_small.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2011-09-08T15:36:04+00:00</dc:date>
	<dc:creator>Michael Edgcumbe</dc:creator>
</item>
<item rdf:about="http://www.faludi.com/?p=1969">
	<title>September in New York – Talks &amp; Demos</title>
	<link>http://www.faludi.com/2011/09/06/september-in-new-york-talks-demos/</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://www.faludi.com/wp-content/uploads/2011/09/september_nyc.jpg&quot;&gt;&lt;img src=&quot;http://www.faludi.com/wp-content/uploads/2011/09/september_nyc.jpg&quot; title=&quot;september_nyc&quot; height=&quot;312&quot; width=&quot;320&quot; alt=&quot;&quot; class=&quot;alignnone size-full wp-image-1970&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The next two weeks are going to be lively ones for makers in New York City! Here’s where to find me:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.openhardwaresummit.org/&quot;&gt;Open Hardware Summit&lt;/a&gt;, September 15th — running a breakout session “&lt;a href=&quot;http://www.openhardwaresummit.org/breakouts/&quot;&gt;What Open Hardware Needs from the Cloud&lt;/a&gt;,” a discussion on how Internet services can better serve open hardware projects, with Jordan Husney.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://makerfaire.com/newyork/2011&quot;&gt;Maker Faire New York&lt;/a&gt;, September 17th — giving a talk on the Make Live Stage, “&lt;a href=&quot;http://makerfaire.com/pub/e/7132&quot;&gt;Fun with XBees&lt;/a&gt;” that showcases the creative projects currently enabled by &lt;a href=&quot;http://www.digi.com/xbee&quot;&gt;XBee&lt;/a&gt; radios, along with a tour of the tools that you can use to make your own.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://makerfaire.com/newyork/2011&quot;&gt;Maker Faire&lt;/a&gt;: September 17 &amp;amp; 18th — showing several sensor and actuator projects from my book as well as a cool new way to get your devices onto the Internet in the &lt;a href=&quot;http://www.makershed.com/&quot;&gt;MakerShed&lt;/a&gt; demo area.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://strataconf.com/stratany2011/&quot;&gt;Strata Conference&lt;/a&gt;, September 22nd — demonstrating data sensor networks from the book and new Internet gateway demos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We’re also launching my &lt;a href=&quot;http://www.faludi.com/teaching/sensitivebuildings&quot;&gt;Sensitive Buildings&lt;/a&gt; class at ITP today plus somebody asked me to be in an Ericsson documentary that according the producer, “aims to tell a compelling story about how we are on the brink to a digital revolution.”&lt;/p&gt;
&lt;p&gt;Whew!&lt;/p&gt;</content:encoded>
	<dc:date>2011-09-06T18:53:08+00:00</dc:date>
	<dc:creator>Rob Faludi</dc:creator>
</item>
<item rdf:about="http://www.neocyde.net/derive/?p=1148">
	<title>WebGL Lessons – Color, Animation</title>
	<link>http://www.neocyde.net/derive/?p=1148</link>
	<content:encoded>&lt;p&gt;Color added to the geometry from &lt;a href=&quot;http://learningwebgl.com/blog/?p=134&quot;&gt;lesson 2&lt;/a&gt;.  Code annotated below.&lt;/p&gt;
&lt;div style=&quot;overflow: auto; white-space: nowrap; width: 435px; height: 400px;&quot; class=&quot;codecolorer-container html4strict default&quot;&gt;&lt;div class=&quot;html4strict codecolorer&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/strong.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;strong&lt;/span&gt;&lt;/a&gt;&amp;gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/strong.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;strong&lt;/span&gt;&lt;/a&gt;&amp;gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/html.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;html&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/head.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;head&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/title.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;title&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;Learning WebGL &lt;span style=&quot;color: #ddbb00;&quot;&gt;&amp;amp;mdash;&lt;/span&gt; lesson 1&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/title.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;title&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/meta.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;meta&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #000066;&quot;&gt;http-equiv&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;content-type&quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;text/html; charset=ISO-8859-1&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;text/javascript&quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;src&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;glMatrix-0.9.5.min.js&quot;&lt;/span&gt;&amp;gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #000066;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;shader-fs&quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;x-shader/x-fragment&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
    #ifdef GL_ES&lt;br /&gt;
    precision highp float;&lt;br /&gt;
    #endif&lt;br /&gt;
&lt;br /&gt;
    //varying variable is interpolated by the fragment shader between vertices&lt;br /&gt;
    varying vec4 vColor;&lt;br /&gt;
    &lt;br /&gt;
    void main(void) {&lt;br /&gt;
        gl_FragColor = vColor;&lt;br /&gt;
    }&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #000066;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;shader-vs&quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;x-shader/x-vertex&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
    //passed in from the gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute...)&lt;br /&gt;
    attribute vec3 aVertexPosition;&lt;br /&gt;
    //color attribute is passed in for each vertex and then interpolated by the&lt;br /&gt;
    //fragment shader&lt;br /&gt;
    attribute vec4 aVertexColor;&lt;br /&gt;
&lt;br /&gt;
    //set by setMatrixUniforms()&lt;br /&gt;
    uniform mat4 uMVMatrix;&lt;br /&gt;
    uniform mat4 uPMatrix;&lt;br /&gt;
&lt;br /&gt;
    varying vec4 vColor;&lt;br /&gt;
&lt;br /&gt;
    void main(void) {&lt;br /&gt;
        gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);&lt;br /&gt;
        vColor = aVertexColor;&lt;br /&gt;
    }&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;text/javascript&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
    //GL Object&lt;br /&gt;
    var gl;&lt;br /&gt;
    function initGL(canvas) {&lt;br /&gt;
        try {&lt;br /&gt;
            //Initiate the webGL context    &lt;br /&gt;
            gl = canvas.getContext(&quot;experimental-webgl&quot;);&lt;br /&gt;
            gl.viewportWidth = canvas.width;&lt;br /&gt;
            gl.viewportHeight = canvas.height;&lt;br /&gt;
        } catch (e) {&lt;br /&gt;
        }&lt;br /&gt;
        if (!gl) {&lt;br /&gt;
            alert(&quot;Could not initialise WebGL, sorry :-(&quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    function getShader(gl, id) {&lt;br /&gt;
        //pass in the script    &lt;br /&gt;
        var shaderScript = document.getElementById(id);&lt;br /&gt;
        if (!shaderScript) {&lt;br /&gt;
            return null;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var str = &quot;&quot;;&lt;br /&gt;
        var k = shaderScript.firstChild;&lt;br /&gt;
        while (k) {&lt;br /&gt;
            if (k.nodeType == 3) {&lt;br /&gt;
                str += k.textContent;&lt;br /&gt;
            }&lt;br /&gt;
            k = k.nextSibling;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        //create the shader object&lt;br /&gt;
        var shader;&lt;br /&gt;
        //assign the shader object&lt;br /&gt;
        if (shaderScript.type == &quot;x-shader/x-fragment&quot;) {&lt;br /&gt;
            shader = gl.createShader(gl.FRAGMENT_SHADER);&lt;br /&gt;
        } else if (shaderScript.type == &quot;x-shader/x-vertex&quot;) {&lt;br /&gt;
            shader = gl.createShader(gl.VERTEX_SHADER);&lt;br /&gt;
        } else {&lt;br /&gt;
            return null;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        //append the source&lt;br /&gt;
        gl.shaderSource(shader, str);&lt;br /&gt;
        //compile the shader&lt;br /&gt;
        gl.compileShader(shader);&lt;br /&gt;
&lt;br /&gt;
        //check for errors&lt;br /&gt;
        if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {&lt;br /&gt;
            alert(gl.getShaderInfoLog(shader));&lt;br /&gt;
            return null;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return shader;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //Create an object to hold the shader program&lt;br /&gt;
    var shaderProgram;&lt;br /&gt;
&lt;br /&gt;
    function initShaders() {&lt;br /&gt;
        //read in, compile, and load the shaders into javascript objects    &lt;br /&gt;
        var fragmentShader = getShader(gl, &quot;shader-fs&quot;);&lt;br /&gt;
        var vertexShader = getShader(gl, &quot;shader-vs&quot;);&lt;br /&gt;
&lt;br /&gt;
        //Put a program object into the javascript shaderProgram container&lt;br /&gt;
        shaderProgram = gl.createProgram();&lt;br /&gt;
&lt;br /&gt;
        //attach the compiled shaders to the shaderProgram&lt;br /&gt;
        gl.attachShader(shaderProgram, vertexShader);&lt;br /&gt;
        gl.attachShader(shaderProgram, fragmentShader);&lt;br /&gt;
&lt;br /&gt;
        //Link the shader program&lt;br /&gt;
        gl.linkProgram(shaderProgram);&lt;br /&gt;
&lt;br /&gt;
        if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {&lt;br /&gt;
            alert(&quot;Could not initialise shaders&quot;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        //designate the shader program to be active&lt;br /&gt;
        gl.useProgram(shaderProgram);&lt;br /&gt;
&lt;br /&gt;
        //setup a pointer to the location of the vertex position vector&lt;br /&gt;
        //declared by the vertex shader&lt;br /&gt;
        shaderProgram.vertexPositionAttribute = gl.getAttribLocation(shaderProgram, &quot;aVertexPosition&quot;);&lt;br /&gt;
        //make the array available&lt;br /&gt;
        gl.enableVertexAttribArray(shaderProgram.vertexPositionAttribute);&lt;br /&gt;
        &lt;br /&gt;
        //gets a reference to the attributes that we want to pass to the vertex shader&lt;br /&gt;
        shaderProgram.vertexColorAttribute = gl.getAttribLocation( shaderProgram, &quot;aVertexColor&quot;);&lt;br /&gt;
        gl.enableVertexAttribArray(shaderProgram.vertexColorAttribute);&lt;br /&gt;
&lt;br /&gt;
        //setup pointers to the uniform variables in the vertex shader&lt;br /&gt;
        shaderProgram.pMatrixUniform = gl.getUniformLocation(shaderProgram, &quot;uPMatrix&quot;);&lt;br /&gt;
        shaderProgram.mvMatrixUniform = gl.getUniformLocation(shaderProgram, &quot;uMVMatrix&quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //Create the model view matrix&lt;br /&gt;
    var mvMatrix = mat4.create();&lt;br /&gt;
&lt;br /&gt;
    //Create the projection matrix&lt;br /&gt;
    var pMatrix = mat4.create();&lt;br /&gt;
&lt;br /&gt;
    //pass in the projection and modelview matrices into the vertex shader as uniforms&lt;br /&gt;
    function setMatrixUniforms() {&lt;br /&gt;
        gl.uniformMatrix4fv(shaderProgram.pMatrixUniform, false, pMatrix);&lt;br /&gt;
        gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, mvMatrix);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    //instantiate objects to hold the buffers for the geometry&lt;br /&gt;
    var triangleVertexPositionBuffer;&lt;br /&gt;
    var triangleVertexColorBuffer;&lt;br /&gt;
    var squareVertexPositionBuffer;&lt;br /&gt;
    var squareVertexColorBuffer;&lt;br /&gt;
&lt;br /&gt;
    //fill in the buffers&lt;br /&gt;
    function initBuffers() {&lt;br /&gt;
        //create the triangle buffer    &lt;br /&gt;
        triangleVertexPositionBuffer = gl.createBuffer();&lt;br /&gt;
        //bind the buffer&lt;br /&gt;
        gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexPositionBuffer);&lt;br /&gt;
        //create the vertices for the geometry&lt;br /&gt;
        var vertices = [&lt;br /&gt;
             0.0,  1.0,  0.0,&lt;br /&gt;
            -1.0, -1.0,  0.0,&lt;br /&gt;
             1.0, -1.0,  0.0&lt;br /&gt;
        ];&lt;br /&gt;
        //put the vertices in the buffer&lt;br /&gt;
        gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);&lt;br /&gt;
        //add an integer to the object to represent the number of dimensions for a vertex&lt;br /&gt;
        triangleVertexPositionBuffer.itemSize = 3;&lt;br /&gt;
        //add an integer to the object to represent the number of vertices&lt;br /&gt;
        triangleVertexPositionBuffer.numItems = 3;&lt;br /&gt;
&lt;br /&gt;
        //put a buffer into the color buffer object&lt;br /&gt;
        triangleVertexColorBuffer = gl.createBuffer();&lt;br /&gt;
        //set the buffer to be ready to accept data&lt;br /&gt;
        gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexColorBuffer);&lt;br /&gt;
        var colors = [&lt;br /&gt;
            1.0, 0.0, 0.0, 1.0,&lt;br /&gt;
            0.0, 1.0, 0.0, 1.0,&lt;br /&gt;
            0.0, 0.0, 1.0, 1.0      &lt;br /&gt;
        ];&lt;br /&gt;
        //put the color matrix into the buffer&lt;br /&gt;
        gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(colors), gl.STATIC_DRAW);&lt;br /&gt;
        //set the number of dimensions for each color (RGBA) - columns&lt;br /&gt;
        triangleVertexColorBuffer.itemSize = 4;&lt;br /&gt;
        //set the number of colors specified by the matrix - rows&lt;br /&gt;
        triangleVertexColorBuffer.numItems = 3;&lt;br /&gt;
        &lt;br /&gt;
        //repeat for the square&lt;br /&gt;
        squareVertexPositionBuffer = gl.createBuffer();&lt;br /&gt;
        gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexPositionBuffer);&lt;br /&gt;
        vertices = [&lt;br /&gt;
             1.0,  1.0,  0.0,&lt;br /&gt;
            -1.0,  1.0,  0.0,&lt;br /&gt;
             1.0, -1.0,  0.0,&lt;br /&gt;
            -1.0, -1.0,  0.0&lt;br /&gt;
        ];&lt;br /&gt;
        gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);&lt;br /&gt;
        squareVertexPositionBuffer.itemSize = 3;&lt;br /&gt;
        squareVertexPositionBuffer.numItems = 4;&lt;br /&gt;
&lt;br /&gt;
        squareVertexColorBuffer = gl.createBuffer();&lt;br /&gt;
        gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexColorBuffer);&lt;br /&gt;
        colors = []&lt;br /&gt;
        for (var i=0; i &lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;; i++&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;            colors &lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt; colors.concat&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0.5&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0.5&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;1.0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;1.0&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.bufferData&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;gl.ARRAY_BUFFER, new Float32Array&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;colors&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;, gl.STATIC_DRAW&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        squareVertexColorBuffer.itemSize &lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        squareVertexColorBuffer.numItems &lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;    &lt;span style=&quot;color: #66cc66;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;    function drawScene&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;set the viewport&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.viewport&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;, gl.viewportWidth, gl.viewportHeight&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #000066;&quot;&gt;clear&lt;/span&gt; the depth and &lt;span style=&quot;color: #000066;&quot;&gt;color&lt;/span&gt; buffers&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.&lt;span style=&quot;color: #000066;&quot;&gt;clear&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;set the perspective using the projection matrix&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        mat4.perspective&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;45&lt;/span&gt;, gl.viewportWidth &lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt; gl.viewportHeight, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0.1&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;100.0&lt;/span&gt;, pMatrix&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;set the identity matrix to the modelview matrix&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        mat4.identity&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;mvMatrix&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;translate the camera&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        mat4.translate&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;mvMatrix, &lt;span style=&quot;color: #66cc66;&quot;&gt;[&lt;/span&gt;-&lt;span style=&quot;color: #cc66cc;&quot;&gt;1.5&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0.0&lt;/span&gt;, -&lt;span style=&quot;color: #cc66cc;&quot;&gt;7.0&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;DRAW THE TRIANGLE&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;bind the triangle buffer&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.bindBuffer&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;gl.ARRAY_BUFFER, triangleVertexPositionBuffer&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;put the values from the triangle buffer into the vertex position attribute variable in the vertex shader&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;TODO:  LOOK THIS FUNCTION UP&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.vertexAttribPointer&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;shaderProgram.vertexPositionAttribute, triangleVertexPositionBuffer.itemSize, gl.FLOAT, false, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;assign the &lt;span style=&quot;color: #000066;&quot;&gt;color&lt;/span&gt; buffer to the vertexColorAttribute reference that&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;points to the shader attribute aVertexColor pointed to in initShaders&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.bindBuffer&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;gl.ARRAY_BUFFER, triangleVertexColorBuffer&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.vertexAttribPointer&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt; shaderProgram.vertexColorAttribute, triangleVertexColorBuffer.itemSize, gl.FLOAT, false, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;send the modelview and projection matrices to the vertex shader &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        setMatrixUniforms&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;draw what was sent to the shaders&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.drawArrays&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;gl.TRIANGLES, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;, triangleVertexPositionBuffer.numItems&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;repeat &lt;span style=&quot;color: #000066;&quot;&gt;for&lt;/span&gt; the square&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        mat4.translate&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;mvMatrix, &lt;span style=&quot;color: #66cc66;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;3.0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0.0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.bindBuffer&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;gl.ARRAY_BUFFER, squareVertexPositionBuffer&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.vertexAttribPointer&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;shaderProgram.vertexPositionAttribute, squareVertexPositionBuffer.itemSize, gl.FLOAT, false, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.bindBuffer&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;gl.ARRAY_BUFFER, squareVertexColorBuffer&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.vertexAttribPointer&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;shaderProgram.vertexColorAttribute, squareVertexColorBuffer.itemSize, gl.FLOAT, false, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        setMatrixUniforms&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.drawArrays&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;gl.TRIANGLE_STRIP, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;, squareVertexPositionBuffer.numItems&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;    &lt;span style=&quot;color: #66cc66;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;    &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;Main function to push through the WebGL &lt;span style=&quot;color: #000066;&quot;&gt;code&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;    function webGLStart&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;Create a canvas &lt;span style=&quot;color: #000066;&quot;&gt;object&lt;/span&gt; from the HTML5 canvas tag in the body  &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        var canvas &lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt; document.getElementById&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;lesson01-canvas&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;Pass the canvas &lt;span style=&quot;color: #000066;&quot;&gt;object&lt;/span&gt; to initialize WebGL&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        initGL&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;canvas&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;Create the shaders&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        initShaders&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;Create the buffers and fill in the geometry&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        initBuffers&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #000066;&quot;&gt;Clear&lt;/span&gt; the &lt;span style=&quot;color: #000066;&quot;&gt;background&lt;/span&gt; to black&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.clearColor&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0.0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0.0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0.0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;1.0&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;Occlude &lt;span style=&quot;color: #000066;&quot;&gt;for&lt;/span&gt; depth&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.enable&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;gl.DEPTH_TEST&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;Draw everything&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        drawScene&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;    &lt;span style=&quot;color: #66cc66;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/head.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;head&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/body.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;body&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #000066;&quot;&gt;onload&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;webGLStart();&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;canvas &lt;span style=&quot;color: #000066;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;lesson01-canvas&quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;border: none;&quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;width&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;500&quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;height&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;500&quot;&lt;/span&gt;&amp;gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;canvas&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/body.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;body&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/html.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;html&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://learningwebgl.com/blog/?p=239&quot;&gt;With animation functions&lt;/a&gt;:&lt;/p&gt;
&lt;div style=&quot;overflow: auto; white-space: nowrap; width: 435px; height: 400px;&quot; class=&quot;codecolorer-container html4strict default&quot;&gt;&lt;div class=&quot;html4strict codecolorer&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/strong.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;strong&lt;/span&gt;&lt;/a&gt;&amp;gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/strong.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;strong&lt;/span&gt;&lt;/a&gt;&amp;gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/html.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;html&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/head.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;head&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/title.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;title&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;Learning WebGL &lt;span style=&quot;color: #ddbb00;&quot;&gt;&amp;amp;mdash;&lt;/span&gt; lesson 1&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/title.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;title&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/meta.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;meta&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #000066;&quot;&gt;http-equiv&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;content-type&quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;text/html; charset=ISO-8859-1&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;text/javascript&quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;src&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;glMatrix-0.9.5.min.js&quot;&lt;/span&gt;&amp;gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;text/javascript&quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;src&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;webgl-utils.js&quot;&lt;/span&gt;&amp;gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #000066;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;shader-fs&quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;x-shader/x-fragment&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
    #ifdef GL_ES&lt;br /&gt;
    precision highp float;&lt;br /&gt;
    #endif&lt;br /&gt;
&lt;br /&gt;
    //varying variable is interpolated by the fragment shader between vertices&lt;br /&gt;
    varying vec4 vColor;&lt;br /&gt;
    &lt;br /&gt;
    void main(void) {&lt;br /&gt;
        gl_FragColor = vColor;&lt;br /&gt;
    }&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #000066;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;shader-vs&quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;x-shader/x-vertex&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
    //passed in from the gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute...)&lt;br /&gt;
    attribute vec3 aVertexPosition;&lt;br /&gt;
    //color attribute is passed in for each vertex and then interpolated by the&lt;br /&gt;
    //fragment shader&lt;br /&gt;
    attribute vec4 aVertexColor;&lt;br /&gt;
&lt;br /&gt;
    //set by setMatrixUniforms()&lt;br /&gt;
    uniform mat4 uMVMatrix;&lt;br /&gt;
    uniform mat4 uPMatrix;&lt;br /&gt;
&lt;br /&gt;
    varying vec4 vColor;&lt;br /&gt;
&lt;br /&gt;
    void main(void) {&lt;br /&gt;
        gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);&lt;br /&gt;
        vColor = aVertexColor;&lt;br /&gt;
    }&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;text/javascript&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
    //GL Object&lt;br /&gt;
    var gl;&lt;br /&gt;
    function initGL(canvas) {&lt;br /&gt;
        try {&lt;br /&gt;
            //Initiate the webGL context    &lt;br /&gt;
            gl = canvas.getContext(&quot;experimental-webgl&quot;);&lt;br /&gt;
            gl.viewportWidth = canvas.width;&lt;br /&gt;
            gl.viewportHeight = canvas.height;&lt;br /&gt;
        } catch (e) {&lt;br /&gt;
        }&lt;br /&gt;
        if (!gl) {&lt;br /&gt;
            alert(&quot;Could not initialise WebGL, sorry :-(&quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    function getShader(gl, id) {&lt;br /&gt;
        //pass in the script    &lt;br /&gt;
        var shaderScript = document.getElementById(id);&lt;br /&gt;
        if (!shaderScript) {&lt;br /&gt;
            return null;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var str = &quot;&quot;;&lt;br /&gt;
        var k = shaderScript.firstChild;&lt;br /&gt;
        while (k) {&lt;br /&gt;
            if (k.nodeType == 3) {&lt;br /&gt;
                str += k.textContent;&lt;br /&gt;
            }&lt;br /&gt;
            k = k.nextSibling;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        //create the shader object&lt;br /&gt;
        var shader;&lt;br /&gt;
        //assign the shader object&lt;br /&gt;
        if (shaderScript.type == &quot;x-shader/x-fragment&quot;) {&lt;br /&gt;
            shader = gl.createShader(gl.FRAGMENT_SHADER);&lt;br /&gt;
        } else if (shaderScript.type == &quot;x-shader/x-vertex&quot;) {&lt;br /&gt;
            shader = gl.createShader(gl.VERTEX_SHADER);&lt;br /&gt;
        } else {&lt;br /&gt;
            return null;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        //append the source&lt;br /&gt;
        gl.shaderSource(shader, str);&lt;br /&gt;
        //compile the shader&lt;br /&gt;
        gl.compileShader(shader);&lt;br /&gt;
&lt;br /&gt;
        //check for errors&lt;br /&gt;
        if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {&lt;br /&gt;
            alert(gl.getShaderInfoLog(shader));&lt;br /&gt;
            return null;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return shader;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //Create an object to hold the shader program&lt;br /&gt;
    var shaderProgram;&lt;br /&gt;
&lt;br /&gt;
    function initShaders() {&lt;br /&gt;
        //read in, compile, and load the shaders into javascript objects    &lt;br /&gt;
        var fragmentShader = getShader(gl, &quot;shader-fs&quot;);&lt;br /&gt;
        var vertexShader = getShader(gl, &quot;shader-vs&quot;);&lt;br /&gt;
&lt;br /&gt;
        //Put a program object into the javascript shaderProgram container&lt;br /&gt;
        shaderProgram = gl.createProgram();&lt;br /&gt;
&lt;br /&gt;
        //attach the compiled shaders to the shaderProgram&lt;br /&gt;
        gl.attachShader(shaderProgram, vertexShader);&lt;br /&gt;
        gl.attachShader(shaderProgram, fragmentShader);&lt;br /&gt;
&lt;br /&gt;
        //Link the shader program&lt;br /&gt;
        gl.linkProgram(shaderProgram);&lt;br /&gt;
&lt;br /&gt;
        if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {&lt;br /&gt;
            alert(&quot;Could not initialise shaders&quot;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        //designate the shader program to be active&lt;br /&gt;
        gl.useProgram(shaderProgram);&lt;br /&gt;
&lt;br /&gt;
        //setup a pointer to the location of the vertex position vector&lt;br /&gt;
        //declared by the vertex shader&lt;br /&gt;
        shaderProgram.vertexPositionAttribute = gl.getAttribLocation(shaderProgram, &quot;aVertexPosition&quot;);&lt;br /&gt;
        //make the array available&lt;br /&gt;
        gl.enableVertexAttribArray(shaderProgram.vertexPositionAttribute);&lt;br /&gt;
        &lt;br /&gt;
        //gets a reference to the attributes that we want to pass to the vertex shader&lt;br /&gt;
        shaderProgram.vertexColorAttribute = gl.getAttribLocation( shaderProgram, &quot;aVertexColor&quot;);&lt;br /&gt;
        gl.enableVertexAttribArray(shaderProgram.vertexColorAttribute);&lt;br /&gt;
&lt;br /&gt;
        //setup pointers to the uniform variables in the vertex shader&lt;br /&gt;
        shaderProgram.pMatrixUniform = gl.getUniformLocation(shaderProgram, &quot;uPMatrix&quot;);&lt;br /&gt;
        shaderProgram.mvMatrixUniform = gl.getUniformLocation(shaderProgram, &quot;uMVMatrix&quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //Create the model view matrix&lt;br /&gt;
    var mvMatrix = mat4.create();&lt;br /&gt;
&lt;br /&gt;
    //Create the model view matrix stack&lt;br /&gt;
    var mvMatrixStack = [];&lt;br /&gt;
&lt;br /&gt;
    //Create the projection matrix&lt;br /&gt;
    var pMatrix = mat4.create();&lt;br /&gt;
&lt;br /&gt;
    //Function puts the current mvMatrix into the array of matrices&lt;br /&gt;
    function mvPushMatrix(){&lt;br /&gt;
        var copy = mat4.create();&lt;br /&gt;
        mat4.set(mvMatrix, copy );&lt;br /&gt;
        mvMatrixStack.push(copy);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //Function pops the last mvMatrix off the array of matrices&lt;br /&gt;
    function mvPopMatrix(){&lt;br /&gt;
        if(mvMatrixStack.length ==0){&lt;br /&gt;
            throw &quot;Invalid popMatrix&quot;;      &lt;br /&gt;
        }&lt;br /&gt;
        mvMatrix = mvMatrixStack.pop();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    //pass in the projection and modelview matrices into the vertex shader as uniforms&lt;br /&gt;
    function setMatrixUniforms() {&lt;br /&gt;
        gl.uniformMatrix4fv(shaderProgram.pMatrixUniform, false, pMatrix);&lt;br /&gt;
        gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, mvMatrix);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //convert degrees to radians&lt;br /&gt;
    function degToRad(degrees){&lt;br /&gt;
        return degrees * Math.PI / 180;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //instantiate objects to hold the buffers for the geometry&lt;br /&gt;
    var triangleVertexPositionBuffer;&lt;br /&gt;
    var triangleVertexColorBuffer;&lt;br /&gt;
    var squareVertexPositionBuffer;&lt;br /&gt;
    var squareVertexColorBuffer;&lt;br /&gt;
&lt;br /&gt;
    //fill in the buffers&lt;br /&gt;
    function initBuffers() {&lt;br /&gt;
        //create the triangle buffer    &lt;br /&gt;
        triangleVertexPositionBuffer = gl.createBuffer();&lt;br /&gt;
        //bind the buffer&lt;br /&gt;
        gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexPositionBuffer);&lt;br /&gt;
        //create the vertices for the geometry&lt;br /&gt;
        var vertices = [&lt;br /&gt;
             0.0,  1.0,  0.0,&lt;br /&gt;
            -1.0, -1.0,  0.0,&lt;br /&gt;
             1.0, -1.0,  0.0&lt;br /&gt;
        ];&lt;br /&gt;
        //put the vertices in the buffer&lt;br /&gt;
        gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);&lt;br /&gt;
        //add an integer to the object to represent the number of dimensions for a vertex&lt;br /&gt;
        triangleVertexPositionBuffer.itemSize = 3;&lt;br /&gt;
        //add an integer to the object to represent the number of vertices&lt;br /&gt;
        triangleVertexPositionBuffer.numItems = 3;&lt;br /&gt;
&lt;br /&gt;
        //put a buffer into the color buffer object&lt;br /&gt;
        triangleVertexColorBuffer = gl.createBuffer();&lt;br /&gt;
        //set the buffer to be ready to accept data&lt;br /&gt;
        gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexColorBuffer);&lt;br /&gt;
        var colors = [&lt;br /&gt;
            1.0, 0.0, 0.0, 1.0,&lt;br /&gt;
            0.0, 1.0, 0.0, 1.0,&lt;br /&gt;
            0.0, 0.0, 1.0, 1.0      &lt;br /&gt;
        ];&lt;br /&gt;
        //put the color matrix into the buffer&lt;br /&gt;
        gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(colors), gl.STATIC_DRAW);&lt;br /&gt;
        //set the number of dimensions for each color (RGBA) - columns&lt;br /&gt;
        triangleVertexColorBuffer.itemSize = 4;&lt;br /&gt;
        //set the number of colors specified by the matrix - rows&lt;br /&gt;
        triangleVertexColorBuffer.numItems = 3;&lt;br /&gt;
        &lt;br /&gt;
        //repeat for the square&lt;br /&gt;
        squareVertexPositionBuffer = gl.createBuffer();&lt;br /&gt;
        gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexPositionBuffer);&lt;br /&gt;
        vertices = [&lt;br /&gt;
             1.0,  1.0,  0.0,&lt;br /&gt;
            -1.0,  1.0,  0.0,&lt;br /&gt;
             1.0, -1.0,  0.0,&lt;br /&gt;
            -1.0, -1.0,  0.0&lt;br /&gt;
        ];&lt;br /&gt;
        gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);&lt;br /&gt;
        squareVertexPositionBuffer.itemSize = 3;&lt;br /&gt;
        squareVertexPositionBuffer.numItems = 4;&lt;br /&gt;
&lt;br /&gt;
        squareVertexColorBuffer = gl.createBuffer();&lt;br /&gt;
        gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexColorBuffer);&lt;br /&gt;
        colors = []&lt;br /&gt;
        for (var i=0; i &lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;; i++&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;            colors &lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt; colors.concat&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0.5&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0.5&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;1.0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;1.0&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.bufferData&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;gl.ARRAY_BUFFER, new Float32Array&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;colors&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;, gl.STATIC_DRAW&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        squareVertexColorBuffer.itemSize &lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        squareVertexColorBuffer.numItems &lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;    &lt;span style=&quot;color: #66cc66;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;    &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;rotation variables&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;    var rTri &lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;    var rSquare &lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;    function drawScene&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;set the viewport&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.viewport&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;, gl.viewportWidth, gl.viewportHeight&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #000066;&quot;&gt;clear&lt;/span&gt; the depth and &lt;span style=&quot;color: #000066;&quot;&gt;color&lt;/span&gt; buffers&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.&lt;span style=&quot;color: #000066;&quot;&gt;clear&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;set the perspective using the projection matrix&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        mat4.perspective&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;45&lt;/span&gt;, gl.viewportWidth &lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt; gl.viewportHeight, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0.1&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;100.0&lt;/span&gt;, pMatrix&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;set the identity matrix to the modelview matrix&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        mat4.identity&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;mvMatrix&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;translate the camera&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        mat4.translate&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;mvMatrix, &lt;span style=&quot;color: #66cc66;&quot;&gt;[&lt;/span&gt;-&lt;span style=&quot;color: #cc66cc;&quot;&gt;1.5&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0.0&lt;/span&gt;, -&lt;span style=&quot;color: #cc66cc;&quot;&gt;7.0&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;rotate the world&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        mvPushMatrix&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        mat4.rotate&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;mvMatrix, degToRad&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;rTri&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;, &lt;span style=&quot;color: #66cc66;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;DRAW THE TRIANGLE&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;bind the triangle buffer&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.bindBuffer&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;gl.ARRAY_BUFFER, triangleVertexPositionBuffer&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;put the values from the triangle buffer into the vertex position attribute variable in the vertex shader&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;TODO:  LOOK THIS FUNCTION UP&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.vertexAttribPointer&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;shaderProgram.vertexPositionAttribute, triangleVertexPositionBuffer.itemSize, gl.FLOAT, false, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;assign the &lt;span style=&quot;color: #000066;&quot;&gt;color&lt;/span&gt; buffer to the vertexColorAttribute reference that&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;points to the shader attribute aVertexColor pointed to in initShaders&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.bindBuffer&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;gl.ARRAY_BUFFER, triangleVertexColorBuffer&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.vertexAttribPointer&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt; shaderProgram.vertexColorAttribute, triangleVertexColorBuffer.itemSize, gl.FLOAT, false, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;send the modelview and projection matrices to the vertex shader &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        setMatrixUniforms&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;draw what was sent to the shaders&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.drawArrays&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;gl.TRIANGLES, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;, triangleVertexPositionBuffer.numItems&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        mvPopMatrix&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;repeat &lt;span style=&quot;color: #000066;&quot;&gt;for&lt;/span&gt; the square&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        mat4.translate&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;mvMatrix, &lt;span style=&quot;color: #66cc66;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;3.0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0.0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        mvPushMatrix&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        mat4.rotate&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;mvMatrix, degToRad&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;rSquare&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;, &lt;span style=&quot;color: #66cc66;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.bindBuffer&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;gl.ARRAY_BUFFER, squareVertexPositionBuffer&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.vertexAttribPointer&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;shaderProgram.vertexPositionAttribute, squareVertexPositionBuffer.itemSize, gl.FLOAT, false, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.bindBuffer&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;gl.ARRAY_BUFFER, squareVertexColorBuffer&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.vertexAttribPointer&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;shaderProgram.vertexColorAttribute, squareVertexColorBuffer.itemSize, gl.FLOAT, false, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        setMatrixUniforms&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.drawArrays&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;gl.TRIANGLE_STRIP, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;, squareVertexPositionBuffer.numItems&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        mvPopMatrix&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;    &lt;span style=&quot;color: #66cc66;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;    var lastTime &lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;    function animate&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        var timeNow &lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt; new Date&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;.getTime&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        if &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;lastTime !&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;            var elapsed &lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt; timeNow - lastTime;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;            rTri +&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;90&lt;/span&gt; * elapsed&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;1000.0&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;            rSquare +&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;75&lt;/span&gt; * elapsed&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;1000.0&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        lastTime &lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt; timeNow;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;    &lt;span style=&quot;color: #66cc66;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;    &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;Move the world forward in time&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;    function tick&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;function from webgl-utils.js which calls a repaint&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;does not repaint all windows with WebGL open, only the current one&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        requestAnimFrame&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;tick&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        drawScene&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        animate&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;    &lt;span style=&quot;color: #66cc66;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;    &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;Main function to push through the WebGL &lt;span style=&quot;color: #000066;&quot;&gt;code&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;    function webGLStart&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;Create a canvas &lt;span style=&quot;color: #000066;&quot;&gt;object&lt;/span&gt; from the HTML5 canvas tag in the body  &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        var canvas &lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt; document.getElementById&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;lesson01-canvas&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;Pass the canvas &lt;span style=&quot;color: #000066;&quot;&gt;object&lt;/span&gt; to initialize WebGL&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        initGL&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;canvas&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;Create the shaders&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        initShaders&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;Create the buffers and fill in the geometry&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        initBuffers&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #000066;&quot;&gt;Clear&lt;/span&gt; the &lt;span style=&quot;color: #000066;&quot;&gt;background&lt;/span&gt; to black&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.clearColor&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0.0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0.0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0.0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;1.0&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #66cc66;&quot;&gt;//&lt;/span&gt;Occlude &lt;span style=&quot;color: #000066;&quot;&gt;for&lt;/span&gt; depth&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        gl.enable&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;gl.DEPTH_TEST&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        tick&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;    &lt;span style=&quot;color: #66cc66;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/head.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;head&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/body.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;body&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #000066;&quot;&gt;onload&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;webGLStart();&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;canvas &lt;span style=&quot;color: #000066;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;lesson01-canvas&quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;border: none;&quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;width&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;500&quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;height&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;500&quot;&lt;/span&gt;&amp;gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;canvas&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/body.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;body&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/html.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;html&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2011-09-02T14:35:13+00:00</dc:date>
	<dc:creator>Michael Edgcumbe</dc:creator>
</item>
<item rdf:about="http://www.neocyde.net/derive/?p=1145">
	<title>WebGL Hello World</title>
	<link>http://www.neocyde.net/derive/?p=1145</link>
	<content:encoded>&lt;p&gt;I spent the day at the office and some time this evening reviewing an excellent &lt;a href=&quot;http://learningwebgl.com/&quot;&gt;tutorial&lt;/a&gt; for setting up a WebGL canvas element in HTML5.  &lt;/p&gt;
&lt;p&gt;It’s my hope that I can use WebGL to do the heavy lifting for visualization in the browser, and easily walk the code back and forth from OpenGL ES used on the iPad.&lt;/p&gt;
&lt;p&gt;I annotated the first lesson’s example as I went through to understand it.&lt;/p&gt;
&lt;div style=&quot;overflow: auto; white-space: nowrap; width: 435px; height: 400px;&quot; class=&quot;codecolorer-container html4strict default&quot;&gt;&lt;div class=&quot;html4strict codecolorer&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/strong.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;strong&lt;/span&gt;&lt;/a&gt;&amp;gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/strong.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;strong&lt;/span&gt;&lt;/a&gt;&amp;gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/html.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;html&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/head.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;head&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/title.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;title&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;Learning WebGL &lt;span style=&quot;color: #ddbb00;&quot;&gt;&amp;amp;mdash;&lt;/span&gt; lesson 1&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/title.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;title&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/meta.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;meta&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #000066;&quot;&gt;http-equiv&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;content-type&quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;text/html; charset=ISO-8859-1&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;text/javascript&quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;src&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;glMatrix-0.9.5.min.js&quot;&lt;/span&gt;&amp;gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #000066;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;shader-fs&quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;x-shader/x-fragment&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
    #ifdef GL_ES&lt;br /&gt;
    precision highp float;&lt;br /&gt;
    #endif&lt;br /&gt;
&lt;br /&gt;
    void main(void) {&lt;br /&gt;
        gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);&lt;br /&gt;
    }&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #000066;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;shader-vs&quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;x-shader/x-vertex&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
    //passed in from the gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute...)&lt;br /&gt;
    attribute vec3 aVertexPosition;&lt;br /&gt;
&lt;br /&gt;
    //set by setMatrixUniforms()&lt;br /&gt;
    uniform mat4 uMVMatrix;&lt;br /&gt;
    uniform mat4 uPMatrix;&lt;br /&gt;
&lt;br /&gt;
    void main(void) {&lt;br /&gt;
        gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);&lt;br /&gt;
    }&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;text/javascript&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
    //GL Object&lt;br /&gt;
    var gl;&lt;br /&gt;
    function initGL(canvas) {&lt;br /&gt;
        try {&lt;br /&gt;
            //Initiate the webGL context    &lt;br /&gt;
            gl = canvas.getContext(&quot;experimental-webgl&quot;);&lt;br /&gt;
            gl.viewportWidth = canvas.width;&lt;br /&gt;
            gl.viewportHeight = canvas.height;&lt;br /&gt;
        } catch (e) {&lt;br /&gt;
        }&lt;br /&gt;
        if (!gl) {&lt;br /&gt;
            alert(&quot;Could not initialise WebGL, sorry :-(&quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    function getShader(gl, id) {&lt;br /&gt;
        //pass in the script    &lt;br /&gt;
        var shaderScript = document.getElementById(id);&lt;br /&gt;
        if (!shaderScript) {&lt;br /&gt;
            return null;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var str = &quot;&quot;;&lt;br /&gt;
        var k = shaderScript.firstChild;&lt;br /&gt;
        while (k) {&lt;br /&gt;
            if (k.nodeType == 3) {&lt;br /&gt;
                str += k.textContent;&lt;br /&gt;
            }&lt;br /&gt;
            k = k.nextSibling;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        //create the shader object&lt;br /&gt;
        var shader;&lt;br /&gt;
        //assign the shader object&lt;br /&gt;
        if (shaderScript.type == &quot;x-shader/x-fragment&quot;) {&lt;br /&gt;
            shader = gl.createShader(gl.FRAGMENT_SHADER);&lt;br /&gt;
        } else if (shaderScript.type == &quot;x-shader/x-vertex&quot;) {&lt;br /&gt;
            shader = gl.createShader(gl.VERTEX_SHADER);&lt;br /&gt;
        } else {&lt;br /&gt;
            return null;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        //append the source&lt;br /&gt;
        gl.shaderSource(shader, str);&lt;br /&gt;
        //compile the shader&lt;br /&gt;
        gl.compileShader(shader);&lt;br /&gt;
&lt;br /&gt;
        //check for errors&lt;br /&gt;
        if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {&lt;br /&gt;
            alert(gl.getShaderInfoLog(shader));&lt;br /&gt;
            return null;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return shader;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //Create an object to hold the shader program&lt;br /&gt;
    var shaderProgram;&lt;br /&gt;
&lt;br /&gt;
    function initShaders() {&lt;br /&gt;
        //read in, compile, and load the shaders into javascript objects    &lt;br /&gt;
        var fragmentShader = getShader(gl, &quot;shader-fs&quot;);&lt;br /&gt;
        var vertexShader = getShader(gl, &quot;shader-vs&quot;);&lt;br /&gt;
&lt;br /&gt;
        //Put a program object into the javascript shaderProgram container&lt;br /&gt;
        shaderProgram = gl.createProgram();&lt;br /&gt;
&lt;br /&gt;
        //attach the compiled shaders to the shaderProgram&lt;br /&gt;
        gl.attachShader(shaderProgram, vertexShader);&lt;br /&gt;
        gl.attachShader(shaderProgram, fragmentShader);&lt;br /&gt;
&lt;br /&gt;
        //Link the shader program&lt;br /&gt;
        gl.linkProgram(shaderProgram);&lt;br /&gt;
&lt;br /&gt;
        if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {&lt;br /&gt;
            alert(&quot;Could not initialise shaders&quot;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        //designate the shader program to be active&lt;br /&gt;
        gl.useProgram(shaderProgram);&lt;br /&gt;
&lt;br /&gt;
        //setup a pointer to the location of the vertex position vector&lt;br /&gt;
        //declared by the vertex shader&lt;br /&gt;
        shaderProgram.vertexPositionAttribute = gl.getAttribLocation(shaderProgram, &quot;aVertexPosition&quot;);&lt;br /&gt;
        //make the array available&lt;br /&gt;
        gl.enableVertexAttribArray(shaderProgram.vertexPositionAttribute);&lt;br /&gt;
&lt;br /&gt;
        //setup pointers to the uniform variables in the vertex shader&lt;br /&gt;
        shaderProgram.pMatrixUniform = gl.getUniformLocation(shaderProgram, &quot;uPMatrix&quot;);&lt;br /&gt;
        shaderProgram.mvMatrixUniform = gl.getUniformLocation(shaderProgram, &quot;uMVMatrix&quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //Create the model view matrix&lt;br /&gt;
    var mvMatrix = mat4.create();&lt;br /&gt;
&lt;br /&gt;
    //Create the projection matrix&lt;br /&gt;
    var pMatrix = mat4.create();&lt;br /&gt;
&lt;br /&gt;
    //pass in the projection and modelview matrices into the vertex shader as uniforms&lt;br /&gt;
    function setMatrixUniforms() {&lt;br /&gt;
        gl.uniformMatrix4fv(shaderProgram.pMatrixUniform, false, pMatrix);&lt;br /&gt;
        gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, mvMatrix);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    //instantiate objects to hold the buffers for the geometry&lt;br /&gt;
    var triangleVertexPositionBuffer;&lt;br /&gt;
    var squareVertexPositionBuffer;&lt;br /&gt;
&lt;br /&gt;
    //fill in the buffers&lt;br /&gt;
    function initBuffers() {&lt;br /&gt;
        //create the triangle buffer    &lt;br /&gt;
        triangleVertexPositionBuffer = gl.createBuffer();&lt;br /&gt;
        //bind the buffer&lt;br /&gt;
        gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexPositionBuffer);&lt;br /&gt;
        //create the vertices for the geometry&lt;br /&gt;
        var vertices = [&lt;br /&gt;
             0.0,  1.0,  0.0,&lt;br /&gt;
            -1.0, -1.0,  0.0,&lt;br /&gt;
             1.0, -1.0,  0.0&lt;br /&gt;
        ];&lt;br /&gt;
        //put the vertices in the buffer&lt;br /&gt;
        gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);&lt;br /&gt;
        //add an integer to the object to represent the number of dimensions for a vertex&lt;br /&gt;
        triangleVertexPositionBuffer.itemSize = 3;&lt;br /&gt;
        //add an integer to the object to represent the number of vertices&lt;br /&gt;
        triangleVertexPositionBuffer.numItems = 3;&lt;br /&gt;
&lt;br /&gt;
        //repeat for the square&lt;br /&gt;
        squareVertexPositionBuffer = gl.createBuffer();&lt;br /&gt;
        gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexPositionBuffer);&lt;br /&gt;
        vertices = [&lt;br /&gt;
             1.0,  1.0,  0.0,&lt;br /&gt;
            -1.0,  1.0,  0.0,&lt;br /&gt;
             1.0, -1.0,  0.0,&lt;br /&gt;
            -1.0, -1.0,  0.0&lt;br /&gt;
        ];&lt;br /&gt;
        gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);&lt;br /&gt;
        squareVertexPositionBuffer.itemSize = 3;&lt;br /&gt;
        squareVertexPositionBuffer.numItems = 4;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    function drawScene() {&lt;br /&gt;
        //set the viewport&lt;br /&gt;
        gl.viewport(0, 0, gl.viewportWidth, gl.viewportHeight);&lt;br /&gt;
        //clear the depth and color buffers&lt;br /&gt;
        gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);&lt;br /&gt;
&lt;br /&gt;
        //set the perspective using the projection matrix&lt;br /&gt;
        mat4.perspective(45, gl.viewportWidth / gl.viewportHeight, 0.1, 100.0, pMatrix);&lt;br /&gt;
&lt;br /&gt;
        //set the identity matrix to the modelview matrix&lt;br /&gt;
        mat4.identity(mvMatrix);&lt;br /&gt;
&lt;br /&gt;
        //translate the camera&lt;br /&gt;
        mat4.translate(mvMatrix, [-1.5, 0.0, -7.0]);&lt;br /&gt;
&lt;br /&gt;
        //DRAW THE TRIANGLE&lt;br /&gt;
        //bind the triangle buffer&lt;br /&gt;
        gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexPositionBuffer);&lt;br /&gt;
&lt;br /&gt;
        //put the values from the triangle buffer into the vertex position attribute variable in the vertex shader&lt;br /&gt;
        //TODO:  LOOK THIS FUNCTION UP&lt;br /&gt;
        gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, triangleVertexPositionBuffer.itemSize, gl.FLOAT, false, 0, 0);&lt;br /&gt;
        //send the modelview and projection matrices to the vertex shader &lt;br /&gt;
        setMatrixUniforms();&lt;br /&gt;
        //draw what was sent to the shaders&lt;br /&gt;
        gl.drawArrays(gl.TRIANGLES, 0, triangleVertexPositionBuffer.numItems);&lt;br /&gt;
&lt;br /&gt;
        //repeat for the square&lt;br /&gt;
        mat4.translate(mvMatrix, [3.0, 0.0, 0.0]);&lt;br /&gt;
        gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexPositionBuffer);&lt;br /&gt;
        gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, squareVertexPositionBuffer.itemSize, gl.FLOAT, false, 0, 0);&lt;br /&gt;
        setMatrixUniforms();&lt;br /&gt;
        gl.drawArrays(gl.TRIANGLE_STRIP, 0, squareVertexPositionBuffer.numItems);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    //Main function to push through the WebGL code&lt;br /&gt;
    function webGLStart() {&lt;br /&gt;
        //Create a canvas object from the HTML5 canvas tag in the body  &lt;br /&gt;
        var canvas = document.getElementById(&quot;lesson01-canvas&quot;);&lt;br /&gt;
        //Pass the canvas object to initialize WebGL&lt;br /&gt;
        initGL(canvas);&lt;br /&gt;
        //Create the shaders&lt;br /&gt;
        initShaders();&lt;br /&gt;
        //Create the buffers and fill in the geometry&lt;br /&gt;
        initBuffers();&lt;br /&gt;
&lt;br /&gt;
        //Clear the background to black&lt;br /&gt;
        gl.clearColor(0.0, 0.0, 0.0, 1.0);&lt;br /&gt;
        //Occlude for depth&lt;br /&gt;
        gl.enable(gl.DEPTH_TEST);&lt;br /&gt;
&lt;br /&gt;
        //Draw everything&lt;br /&gt;
        drawScene();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/head.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;head&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/body.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;body&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #000066;&quot;&gt;onload&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;webGLStart();&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;canvas &lt;span style=&quot;color: #000066;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;lesson01-canvas&quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;border: none;&quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;width&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;500&quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;height&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;500&quot;&lt;/span&gt;&amp;gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;canvas&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/body.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;body&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/html.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;html&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2011-09-02T02:58:52+00:00</dc:date>
	<dc:creator>Michael Edgcumbe</dc:creator>
</item>
<item rdf:about="http://www.neocyde.net/derive/?p=1143">
	<title>Doubling Back</title>
	<link>http://www.neocyde.net/derive/?p=1143</link>
	<content:encoded>&lt;p&gt;Our methodology for coding is to have two separate coders evaluate an organization and discuss as a group the grantees for which they disagree.  The group, led by Sheila, acts as a third coder and tie breaker.&lt;/p&gt;
&lt;p&gt;Recently we added new categories to our definitions and we felt that it was important to make sure we considered the previously coded organizations under the new rubric.  For that reason, we submitted the old coding to another round and found some changes to make in nearly every category.  For example, we separated out the MECO category to see if it was internally consistent, and recategorized organizations for which we determined a primary focus of consulting and marketing as opposed to continuing medical education.  &lt;/p&gt;
&lt;p&gt;We are now printing out the documentation that comes up in research that leads to our decision and putting those face sheets into an archive.  We have also asked the coders to cite the category definition reference when they want to discuss an organization so that we can understand where the boundaries between the current definitions lie and how they should be modified to accommodate new variations.  Our best hope is that we no longer have to add new categories and can resist doubling back on work we have already done.&lt;/p&gt;</content:encoded>
	<dc:date>2011-08-31T19:10:54+00:00</dc:date>
	<dc:creator>Michael Edgcumbe</dc:creator>
</item>
<item rdf:about="http://sarahdahnke.com/?p=175">
	<title>Interview on The Creators Project</title>
	<link>http://sarahdahnke.com/?p=175</link>
	<content:encoded>&lt;p&gt;The Creators Project did an interview with me this week, where I got to talk about nerdy circuit building and rocket boots.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://thecreatorsproject.com/blog/user-preferences-tech-qa-with-sarah-dahnke&quot;&gt;Click here to read more&lt;/a&gt;!&lt;/p&gt;</content:encoded>
	<dc:date>2011-08-26T06:51:22+00:00</dc:date>
	<dc:creator>Sarah Dahnke</dc:creator>
</item>
<item rdf:about="http://sarahdahnke.com/?p=138">
	<title>Duet with Chair #2</title>
	<link>http://sarahdahnke.com/?p=138</link>
	<content:encoded>&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Created while in residence at chaNorth.&lt;/p&gt;
&lt;p&gt;Part of my series of duets with inanimate objects.&lt;/p&gt;</content:encoded>
	<dc:date>2011-08-26T06:24:38+00:00</dc:date>
	<dc:creator>Sarah Dahnke</dc:creator>
</item>
<item rdf:about="http://sarahdahnke.com/?p=136">
	<title>Chairs in Motion</title>
	<link>http://sarahdahnke.com/?p=136</link>
	<content:encoded>&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Created while in residence at chaNorth.&lt;/p&gt;
&lt;p&gt;Part of my series of duets with inanimate objects.&lt;/p&gt;</content:encoded>
	<dc:date>2011-08-26T06:23:49+00:00</dc:date>
	<dc:creator>Sarah Dahnke</dc:creator>
</item>
<item rdf:about="http://sarahdahnke.com/?p=133">
	<title>Duet with Mike</title>
	<link>http://sarahdahnke.com/?p=133</link>
	<content:encoded>&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Created while in residence at chaNorth.&lt;/p&gt;
&lt;p&gt;Part of my series of duets with inanimate objects.&lt;/p&gt;</content:encoded>
	<dc:date>2011-08-26T06:22:43+00:00</dc:date>
	<dc:creator>Sarah Dahnke</dc:creator>
</item>
<item rdf:about="http://sarahdahnke.com/?p=131">
	<title>Duet with Tree</title>
	<link>http://sarahdahnke.com/?p=131</link>
	<content:encoded>&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Created while in residence at chaNorth.&lt;/p&gt;
&lt;p&gt;This is part of my series of duets with inanimate objects.&lt;/p&gt;</content:encoded>
	<dc:date>2011-08-26T06:21:40+00:00</dc:date>
	<dc:creator>Sarah Dahnke</dc:creator>
</item>
<item rdf:about="http://sarahdahnke.com/?p=127">
	<title>Duet with Basket</title>
	<link>http://sarahdahnke.com/?p=127</link>
	<content:encoded>&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Created while in residence at chaNorth.&lt;/p&gt;
&lt;p&gt;This is one piece in a series of experimental duets with inanimate objects.&lt;/p&gt;</content:encoded>
	<dc:date>2011-08-26T06:20:10+00:00</dc:date>
	<dc:creator>Sarah Dahnke</dc:creator>
</item>
<item rdf:about="http://sarahdahnke.com/?p=124">
	<title>Two Trees</title>
	<link>http://sarahdahnke.com/?p=124</link>
	<content:encoded>&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Created while in residence at chaNorth. &lt;/p&gt;
&lt;p&gt;A love story and a performance based around two trees growing a canopy together until death do they part. My intention was to unravel the crocheted binding I created over the course of two days. But after 24 hours of heavy rain, the wool refused to unravel. I wondered, why did I even try?&lt;/p&gt;</content:encoded>
	<dc:date>2011-08-26T06:18:26+00:00</dc:date>
	<dc:creator>Sarah Dahnke</dc:creator>
</item>
<item rdf:about="http://sarahdahnke.com/?p=120">
	<title>Out on the Ledge</title>
	<link>http://sarahdahnke.com/?p=120</link>
	<content:encoded>&lt;p&gt;&lt;/p&gt;
&lt;p&gt;A collaboration with Alex Vessels.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Out on the Ledge&lt;/em&gt; is a site-specific installation for four dancers projected into four windows. It takes the inhabitants of the building and incorporates them into its architecture, exposing four wild characters ready for a dance party.&lt;/p&gt;</content:encoded>
	<dc:date>2011-08-26T06:16:48+00:00</dc:date>
	<dc:creator>Sarah Dahnke</dc:creator>
</item>
<item rdf:about="http://sarahdahnke.com/?p=118">
	<title>check:other</title>
	<link>http://sarahdahnke.com/?p=118</link>
	<content:encoded>&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Showings:&lt;br /&gt;
“One Brave Thing” at The Wild Project (New York), November 2010&lt;br /&gt;
“Going Dutch” at Ruth Page Center for the Arts (Chicago), April 2011&lt;/p&gt;
&lt;p&gt;check:other is a solo performance for video, featuring one woman and her attempt to fit her body through nine frames of varying shapes and sizes.&lt;/p&gt;</content:encoded>
	<dc:date>2011-08-26T06:07:14+00:00</dc:date>
	<dc:creator>Sarah Dahnke</dc:creator>
</item>
<item rdf:about="http://sarahdahnke.com/?p=105">
	<title>This Dance is a Cliché</title>
	<link>http://sarahdahnke.com/?p=105</link>
	<content:encoded>&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://sarahdahnke.com/?attachment_id=106&quot; rel=&quot;attachment wp-att-106&quot;&gt;&lt;img src=&quot;http://sarahdahnke.com/wordpress/wp-content/uploads/2011/08/sitefest.jpg&quot; title=&quot;sitefest&quot; height=&quot;295&quot; width=&quot;439&quot; alt=&quot;&quot; class=&quot;alignleft size-full wp-image-106&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://sarahdahnke.com/?attachment_id=107&quot; rel=&quot;attachment wp-att-107&quot;&gt;&lt;img src=&quot;http://sarahdahnke.com/wordpress/wp-content/uploads/2011/08/sarahdanke_thisdanceisacliche011909_0277-683x600.jpg&quot; title=&quot;sarahdanke_thisdanceisacliche011909_0277&quot; height=&quot;360&quot; width=&quot;410&quot; alt=&quot;&quot; class=&quot;aligncenter size-large wp-image-107&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Debut: Dance Theater Workshop, February 2009&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This Dance is a Cliché&lt;/em&gt; is more than a performance; it’s a state of consciousness.&lt;a href=&quot;http://thisdanceisacliche.com&quot; target=&quot;_blank&quot; title=&quot;This Dance is a Cliché&quot;&gt; TDIAC began as a blog&lt;/a&gt; where I asked the audience to submit their favorite dance clichés. Submissions came from around the world. These submissions have been used to inspired a variety live performances. No two performances of TDIAC are alike.&lt;/p&gt;</content:encoded>
	<dc:date>2011-08-26T06:00:54+00:00</dc:date>
	<dc:creator>Sarah Dahnke</dc:creator>
</item>
<item rdf:about="http://www.faludi.com/?p=1889">
	<title>Light Switch XBee: Example Project</title>
	<link>http://www.faludi.com/2011/08/25/light-switch-xbee-example-project/</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://www.faludi.com/classes/xbee1workshop/Light_Switch_XBee_Example_Project-Series_1.pdf&quot;&gt;&lt;img src=&quot;http://www.faludi.com/wp-content/uploads/2011/08/light-switch-xbee.jpg&quot; title=&quot;light-switch-xbee&quot; height=&quot;300&quot; width=&quot;224&quot; alt=&quot;&quot; class=&quot;alignnone size-full wp-image-1891&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Just finished documenting the latest example project. The Light Switch XBee is a wireless wall switch that can control lamps, fans, motors or your homemade robot using &lt;a href=&quot;http://digi.com&quot;&gt;Dig&lt;/a&gt;i’s &lt;a href=&quot;http://www.digi.com/xbee&quot;&gt;XBee&lt;/a&gt; radio. It’s a model for almost any digital input device you’d like to build. If it goes on and off, you can make it wireless using this example as your guide!&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;http://www.faludi.com/classes/xbee1workshop/Light_Switch_XBee_Example_Project-Series_1.pdf&quot;&gt;full instructions&lt;/a&gt; include parts needed, configuration, soldering instructions and assembly. I’ve also added a Simple XBee Receiver instruction set so you can test your switch, and an explanation of how to modify the more robust Actuator Example from my &lt;a href=&quot;http://www.faludi.com/bwsn&quot;&gt;book&lt;/a&gt; to control A/C mains powered appliances with the wireless Light Switch. Anything can be a switch. Need shoes that turn on your toaster? Or a cat door that plays “The Cat Came Back” each time Fluffy returns from an outing? Get started with the &lt;a href=&quot;http://www.faludi.com/examples/light-switch-xbee-example/&quot;&gt;Light Switch XBee example&lt;/a&gt;!&lt;/p&gt;</content:encoded>
	<dc:date>2011-08-25T14:24:14+00:00</dc:date>
	<dc:creator>Rob Faludi</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-7442086747912287297.post-6635223123639861126">
	<title>Fu, a New York Based Robot Illustrator and Interaction Designer from Taiwan.</title>
	<link>http://blog.robot99.com/2011/08/fu-new-york-based-robot-illustrator-and.html</link>
	<content:encoded>&lt;a href=&quot;http://www.fu-design.com/fu/index_en.html#.TlZIg7N27VQ.blogger&quot;&gt;Fu, a New York Based Robot Illustrator and Interaction Designer from Taiwan.&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/7442086747912287297-6635223123639861126?l=blog.robot99.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2011-08-25T13:05:23+00:00</dc:date>
	<dc:creator>Keng-Fu Chu</dc:creator>
</item>
<item rdf:about="http://www.nienlam.com/?p=1593">
	<title>Commons – iPhone App</title>
	<link>http://www.nienlam.com/2011/08/24/commons-iphone-app/</link>
	<content:encoded>&lt;p&gt;&lt;img src=&quot;http://www.nienlam.com/wp-content/uploads/2011/08/commons-compilation1-795x388.png&quot; title=&quot;commons-compilation&quot; height=&quot;388&quot; width=&quot;795&quot; alt=&quot;&quot; class=&quot;aligncenter size-large wp-image-1608&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Want to improve your city or neighborhood? &lt;/p&gt;
&lt;p&gt;With Commons, you can compete to do good, while helping to make sure that problems in your city get fixed. Report a problem or recommend an improvement in your neighborhood that you think deserves attention and resources, and show your city some lovin’. Vote on the best reports and improvements, and see what’s most popular. Go on short fix-it missions around town to earn bonus points, and unlock City awards to level up through the game. &lt;/p&gt;
&lt;p&gt;In Commons, share the things that you care most about fixing and improving in your neighborhood, and explore the city with your friends. &lt;/p&gt;
&lt;p&gt;Features:&lt;br /&gt;
- Over 70 different City Tasks and Missions (currently designed for gameplay in Lower Manhattan)&lt;br /&gt;
- Report problems in neighborhoods&lt;br /&gt;
- Recommend city improvements&lt;br /&gt;
- Show appreciation for your city’s best features&lt;br /&gt;
- Vote up people’s best ideas&lt;br /&gt;
- Unlock new ranks and earn experience points&lt;br /&gt;
- Earn your city’s most coveted award titles &lt;/p&gt;
&lt;p&gt;***Commons is FREE to play. &lt;/p&gt;
&lt;p&gt;We hope you enjoy Commons. Vote It Up! &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.commonsthegame.com/&quot; target=&quot;_blank&quot; title=&quot;Commons Website&quot;&gt; www.commonsthegame.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Commons is brought to you by: &lt;/p&gt;
&lt;p&gt;Suzanne Kirkpatrick, Creator &amp;amp; Lead Game Designer&lt;br /&gt;
Nien Lam, Developer &amp;amp; Game Designer&lt;br /&gt;
Jamie Lin, Interaction &amp;amp; Game Designer&lt;br /&gt;
&lt;a href=&quot;http://commonsthegame.com/app&quot; target=&quot;_blank&quot;&gt;&lt;br /&gt;
&lt;img src=&quot;http://www.nienlam.com/wp-content/uploads/2011/08/icon-itunes-app-store-400x146.png&quot; alt=&quot;&quot; title=&quot;icon-itunes-app-store&quot; class=&quot;alignnone size-medium wp-image-1616&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;br /&gt;
 &lt;br /&gt;
 &lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;5&quot;&gt;Winner of the real world game for change challenge&lt;/font&gt;&lt;a href=&quot;http://gamesforchange.org/festival2011/&quot; target=&quot;_blank&quot;&gt;&lt;br /&gt;
&lt;img src=&quot;http://www.nienlam.com/wp-content/uploads/2011/08/2728.games-for-change-20111-400x133.jpg&quot; title=&quot;2728.games for change 2011&quot; height=&quot;133&quot; width=&quot;400&quot; alt=&quot;&quot; class=&quot;alignnone size-medium wp-image-1626&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.gamesforchange.org/2011/04/introducing-commons-winner-of-the-real-world-game-for-change-challenge-2011/&quot;&gt;Introducing ‘Commons’, winner of the Real-World Games for Change Challenge 2011&lt;/a&gt;, and the team behind the game.&lt;/p&gt;
&lt;p&gt; &lt;br /&gt;
 &lt;br /&gt;
 &lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;5&quot;&gt;NY Daily News – June 20, 2011 &lt;/font&gt;&lt;br /&gt;
Commons, an iPhone app and urban game in which players suggest ways to improve the city’s outdoor spaces, held its first public event in lower Manhattan Sunday.  To play, users opened the app and selected the first open game “district” on the map – City Hall.  Players then chose from a list of “City Tasks” to complete. For each report, players take a photo of the problem or area where they’d like to see an improvement, then add a description.  Their entry is uploaded to the Commons system with GPS coordinates pulled from the phone. Reports are voted on by other users, so that the best and most interesting suggestions rise to the top and earn more points.&lt;/p&gt;
&lt;p&gt;Interview with &lt;a href=&quot;http://www.nydailynews.com/tech_guide/2011/06/20/2011-06-20_citizens_use_iphone_game_commons_to_help_repair_ny_during_come_out__play_river_t.html&quot; target=&quot;_blank&quot;&gt;NY Daily News&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2011-08-24T14:36:14+00:00</dc:date>
	<dc:creator>Nien Lam</dc:creator>
</item>
<item rdf:about="http://www.faludi.com/?p=1861">
	<title>Horsie Race</title>
	<link>http://www.faludi.com/2011/08/22/horsie-race/</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://www.faludi.com/examples/horsie-race-xbee-example/&quot;&gt;&lt;img src=&quot;http://www.faludi.com/wp-content/uploads/2011/08/horsie-race.jpg&quot; title=&quot;horsie race&quot; height=&quot;386&quot; width=&quot;500&quot; alt=&quot;&quot; class=&quot;alignnone size-full wp-image-1863&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This &lt;a href=&quot;http://www.faludi.com/examples/horsie-race-xbee-example/&quot;&gt;Horsie Race&lt;/a&gt; project, developed for my &lt;a href=&quot;http://www.faludi.com/2011/06/22/exciting-xbee-classes-at-sparkfun/&quot;&gt;recent workshops&lt;/a&gt; in Colorado, creates a carnival midway-style horse race using a wireless audio input with &lt;a href=&quot;http://arduino.cc&quot;&gt;Arduino&lt;/a&gt; and &lt;a href=&quot;http://digi.com/xbee&quot;&gt;XBee&lt;/a&gt; that transmits each player’s yells and cheers to a base station radio. This base station is connected to a computer where the noise advances their horse on the screen using the &lt;a href=&quot;http://processing.org&quot;&gt;Processing&lt;/a&gt; graphical programming environment.&lt;/p&gt;
&lt;p&gt;Yell, cheer, chant or plaintively moan into the microphone on your sensor board to make the horses move. Your yelling will also be picked up somewhat by your neighbor’s microphone. Since you’ve gone wireless, physical strategy is key. The direction you face and whether you hide in the coat closet will influence the speed of your horse.&lt;/p&gt;
&lt;p&gt;First horse across the finish line wins the race! Shower the lucky jockey with champagne, then race again! &lt;a href=&quot;http://www.faludi.com/examples/horsie-race-xbee-example/&quot;&gt;Full instructions, diagrams, schematics and code for this example are freely available on my site&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2011-08-22T13:30:46+00:00</dc:date>
	<dc:creator>Rob Faludi</dc:creator>
</item>
<item rdf:about="http://aaronuhrmacher.com/?p=1480">
	<title>TEDx Talk: Digital Death, Online Afterlife</title>
	<link>http://feedproxy.google.com/~r/aaronuhrmacher/~3/07LX7vl4NK8/</link>
	<content:encoded>Video of my TEDx Talk titled, &quot;Digital Death, Online Afterlife&quot;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/aaronuhrmacher?a=07LX7vl4NK8:8wE9BxBIY2g:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/aaronuhrmacher?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/aaronuhrmacher?a=07LX7vl4NK8:8wE9BxBIY2g:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/aaronuhrmacher?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/aaronuhrmacher/~4/07LX7vl4NK8&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2011-08-22T12:13:05+00:00</dc:date>
	<dc:creator>Aaron Uhrmacher</dc:creator>
</item>
<item rdf:about="http://www.neocyde.net/derive/?p=1137">
	<title>Reading in a Tab Separated Text File Created in Excel into C++</title>
	<link>http://www.neocyde.net/derive/?p=1137</link>
	<content:encoded>&lt;p&gt;There are a number of steps that must be taken to move an excel file into a C++ container (which can then be moved on into a Mongo database).&lt;/p&gt;
&lt;p&gt;- Repair offending unicode&lt;br /&gt;
- Remove offending /n characters (which are contained within the cells, rather than between those – most easily accomplished by copying and pasting as values and then using the CLEAN function to restate the table)&lt;br /&gt;
- Save from Excel as a tab separated, unicode file&lt;br /&gt;
- Open the tab separated file in TextWrangler, remove quotation marks, and re-save with Unix line endings and unicode encoding&lt;/p&gt;
&lt;p&gt;Searching for the “best” method to input a file into a C++ struct brings up many different, subtly varying opinions.  I have written my own routines in the past, but I haven’t been satisfied that they were speed and memory efficient and adaptable to many circumstances.  I spent the day coming up with two objects that could be easily adapted to new files.  I also adapted examples which gave clean, sophisticated code.  Below is a class which loads a file into memory once and then parses it into a container.&lt;/p&gt;
&lt;div style=&quot;overflow: auto; white-space: nowrap; width: 435px; height: 400px;&quot; class=&quot;codecolorer-container cpp default&quot;&gt;&lt;div class=&quot;cpp codecolorer&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;//&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;//  main.cpp&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;//  MongoImport&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;//&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;//  Created by Michael Edgcumbe on 8/19/11.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;//&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;lt;fstream&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;lt;sstream&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;lt;vector&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;lt;string&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#define FILELOCATION &quot;../Master_Grants_081911.txt&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#define INITROWS 10515&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#define CONTAINERCOLUMNS 12&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #0000ff;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;namespace&lt;/span&gt; std&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #0000ff;&quot;&gt;struct&lt;/span&gt; Container&lt;span style=&quot;color: #008000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt;     m_id&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
    string  m_company&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
    string  m_period&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt;     m_year&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
    string  m_requestor&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
    string  m_requestorclean&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
    string  m_corequestor&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
    string  m_dbarequestor&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
    string  m_dbacorequestor&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
    string  m_description&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt;     m_amount&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
    string  m_type&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
    &lt;br /&gt;
    Container &lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt; vector&lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt; elements &lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
        &lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt; elements.&lt;span style=&quot;color: #007788;&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;=&lt;/span&gt; CONTAINERCOLUMNS &lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
            m_id &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;atoi&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt; elements&lt;span style=&quot;color: #008000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #007788;&quot;&gt;c_str&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
            m_company &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; elements&lt;span style=&quot;color: #008000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
            m_period &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; elements&lt;span style=&quot;color: #008000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
            m_year &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;atoi&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt; elements&lt;span style=&quot;color: #008000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #007788;&quot;&gt;c_str&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
            m_requestor &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; elements&lt;span style=&quot;color: #008000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
            m_requestorclean &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; elements&lt;span style=&quot;color: #008000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
            m_corequestor &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; elements&lt;span style=&quot;color: #008000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
            m_dbarequestor &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; elements&lt;span style=&quot;color: #008000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
            m_dbacorequestor &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; elements&lt;span style=&quot;color: #008000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
            m_description &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; elements&lt;span style=&quot;color: #008000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
            m_amount &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;atoi&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt; elements&lt;span style=&quot;color: #008000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #007788;&quot;&gt;c_str&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
        &lt;span style=&quot;color: #008000;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
        &lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt; elements.&lt;span style=&quot;color: #007788;&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;==&lt;/span&gt; CONTAINERCOLUMNS &lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
            m_type &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; elements&lt;span style=&quot;color: #008000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;11&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
        &lt;span style=&quot;color: #008000;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;color: #008000;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #008000;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #0000ff;&quot;&gt;class&lt;/span&gt; Data&lt;span style=&quot;color: #008000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000ff;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;:&lt;/span&gt;&lt;br /&gt;
    vector&lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&lt;/span&gt;Container&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt; m_container&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
    &lt;br /&gt;
    Data&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
        m_container &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;new&lt;/span&gt; vector&lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&lt;/span&gt;Container&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;[&lt;/span&gt;INITROWS&lt;span style=&quot;color: #008000;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;color: #008000;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*Adapted from http://stackoverflow.com/questions/132358/how-to-read-file-content-into-istringstream&lt;br /&gt;
      The purpose of the parse function is to read a file into memory without duplicating the buffer&lt;br /&gt;
      and parse the rows into a dynamically sized vector of the struct defined by the columns in the raw data.&lt;br /&gt;
      &lt;br /&gt;
      The vector is initialized to a known number of rows, if possible, in order to avoid a reallocation when&lt;br /&gt;
      the size exceeds the currently allocated volume ( a process which creates a new vector of size between 1.5 &lt;br /&gt;
      2 times the original and copies all containers from the old location to the new ).&lt;br /&gt;
      &lt;br /&gt;
      Each row from the table is tokenized and passed into the container without an additional copy. &lt;br /&gt;
     */&lt;/span&gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;span style=&quot;color: #0000ff;&quot;&gt;void&lt;/span&gt; parse&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt; ifstream&lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt; _infile &lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
        &lt;span style=&quot;color: #666666;&quot;&gt;//Find the length of the file&lt;/span&gt;&lt;br /&gt;
        _infile&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;seekg&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;0&lt;/span&gt;, ios&lt;span style=&quot;color: #008080;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #007788;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
        streampos length &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; _infile&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;tellg&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
        _infile&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;seekg&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;0&lt;/span&gt;, ios&lt;span style=&quot;color: #008080;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #007788;&quot;&gt;beg&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
        &lt;br /&gt;
        &lt;span style=&quot;color: #666666;&quot;&gt;//Create a vector for the buffer&lt;/span&gt;&lt;br /&gt;
        vector&lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt; buffer&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt; length &lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
        _infile&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;read&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&lt;/span&gt;buffer&lt;span style=&quot;color: #008000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;]&lt;/span&gt;, length&lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
        &lt;br /&gt;
        &lt;span style=&quot;color: #666666;&quot;&gt;//Create a stringstream, read the string buffer, and set the vector as the source&lt;/span&gt;&lt;br /&gt;
        stringstream localStream &lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt; stringstream&lt;span style=&quot;color: #008080;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #007788;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
        localStream.&lt;span style=&quot;color: #007788;&quot;&gt;rdbuf&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;pubsetbuf&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&lt;/span&gt;buffer&lt;span style=&quot;color: #008000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;]&lt;/span&gt;, length &lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
        &lt;br /&gt;
        &lt;span style=&quot;color: #666666;&quot;&gt;//Feed each row into a string and tokenize the string (assumes a tab separated file).&lt;/span&gt;&lt;br /&gt;
        string line&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
        &lt;span style=&quot;color: #0000ff;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt; getline&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt; localStream, line &lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
            stringstream linestream&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt; line &lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
            string token&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
            vector&lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt; elements&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
            &lt;span style=&quot;color: #0000ff;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt; getline&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt; linestream, token, &lt;span style=&quot;color: #FF0000;&quot;&gt;'&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\t&lt;/span&gt;'&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
                elements.&lt;span style=&quot;color: #007788;&quot;&gt;push_back&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt; token &lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
            &lt;span style=&quot;color: #008000;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
            Container container&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt; elements &lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
            m_container&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;push_back&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt; container &lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt; &lt;br /&gt;
        &lt;span style=&quot;color: #008000;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;color: #008000;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #008000;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; main &lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; argc, &lt;span style=&quot;color: #0000ff;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt; argv&lt;span style=&quot;color: #008000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #008000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
    Data data&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
    ifstream &lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt;infile &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;new&lt;/span&gt; ifstream&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt; FILELOCATION &lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt; infile&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;is_open&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
        data.&lt;span style=&quot;color: #007788;&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt; infile &lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
        infile&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;close&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;color: #008000;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;color: #0000ff;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
        &lt;span style=&quot;color: #0000dd;&quot;&gt;cout&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;&quot;Unable to open file.&quot;&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;color: #008000;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    &lt;span style=&quot;color: #0000dd;&quot;&gt;cout&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; data.&lt;span style=&quot;color: #007788;&quot;&gt;m_container&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;size&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
    &lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;//    for( int i = 0; i &amp;lt; data.m_container-&amp;gt;size(); i++ ){&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;//        cout &amp;lt;&amp;lt; (*data.m_container)[i].m_id &amp;lt;&amp;lt; endl;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;//    }&lt;/span&gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;span style=&quot;color: #0000dd;&quot;&gt;cout&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;&quot;COMPLETE&quot;&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;span style=&quot;color: #0000ff;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #008000;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2011-08-19T19:38:18+00:00</dc:date>
	<dc:creator>Michael Edgcumbe</dc:creator>
</item>
<item rdf:about="http://www.neocyde.net/derive/?p=1135">
	<title>Build Schematic</title>
	<link>http://www.neocyde.net/derive/?p=1135</link>
	<content:encoded>&lt;p&gt;I created a build schematic to summarize the containers and languages I’ll need to build to finish the project.  There’s some detail to be filled in later in terms of functions, libraries, and wireframes.  The one I’m least sure about is the Desktop client.  I’m leaning towards having only an iPad client at first because of the nice things that you can do with multitouch.  The Kinect stuff is always just a glimmer.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://neocyde.net/imap/images/schematic.jpg&quot;&gt;&lt;img src=&quot;http://neocyde.net/imap/images/schematic_small.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2011-08-18T15:35:38+00:00</dc:date>
	<dc:creator>Michael Edgcumbe</dc:creator>
</item>
<item rdf:about="http://www.neocyde.net/derive/?p=1132">
	<title>Outline of Steps to Transition from Excel to MongoDB</title>
	<link>http://www.neocyde.net/derive/?p=1132</link>
	<content:encoded>&lt;p&gt;Thinking about what I need to do to move our preliminary data from Excel to MongoDB.  This list will likely grow over time.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Install and compile an unmodified MongoDB client in C++&lt;/li&gt;
&lt;li&gt;Output the Excel file to a tab separated .txt&lt;/li&gt;
&lt;li&gt;Create an ifstream of the file and put it into an object&lt;/li&gt;
&lt;li&gt;Pipe the object array into the MongoD server&lt;/li&gt;
&lt;li&gt;Setup automatic backup of database&lt;/li&gt;
&lt;li&gt;Verify output to JSON as a query and as a file&lt;/li&gt;
&lt;li&gt;Implement basic query and pivot tables through the Terminal&lt;/li&gt;
&lt;li&gt;Integrate into a basic Objective-C front end&lt;/li&gt;
&lt;li&gt;Find a hosting provider that can be handed over to IMAP&lt;/li&gt;
&lt;/ol&gt;</content:encoded>
	<dc:date>2011-08-18T13:42:23+00:00</dc:date>
	<dc:creator>Michael Edgcumbe</dc:creator>
</item>
<item rdf:about="http://sarahdahnke.com/wordpress/?p=1">
	<title>Site Reconstruction</title>
	<link>http://sarahdahnke.com/?p=1</link>
	<content:encoded>&lt;p&gt;This site is undergoing a redesign.&lt;/p&gt;
&lt;p&gt;In the meantime, feel free to browse &lt;a href=&quot;http://vimeo.com/sarahrose&quot;&gt;my projects on Vimeo&lt;/a&gt;, including my new choreography reel:&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2011-08-17T23:09:23+00:00</dc:date>
	<dc:creator>Sarah Dahnke</dc:creator>
</item>
<item rdf:about="http://www.neocyde.net/derive/?p=1122">
	<title>Building MongoDB in C++ in Xcode</title>
	<link>http://www.neocyde.net/derive/?p=1122</link>
	<content:encoded>&lt;p&gt;After getting Boost installed properly, I’m ready to install the MongoDB source and driver.  The source code is located on &lt;a href=&quot;https://github.com/mongodb/mongo&quot;&gt;github&lt;/a&gt;.  Ironically, the scons file in github looks for boost in /opt/local rather than /usr/local.  I’m sure that you can supply the scons with a different header directory, but it’s also looking for a few other utilities, so I am using MacPorts to install a second copy of Boost as well as PCRE++ and Spidermonkey. The &lt;a href=&quot;http://www.mongodb.org/display/DOCS/Building+for+OS+X&quot;&gt;instructions&lt;/a&gt; for building mongo are on the website.  Essentially, ‘sudo port install mongodb’ will get you all the dependencies and put them in the right place.  &lt;/p&gt;
&lt;p&gt;Once the Macports dependencies are installed, you can cd into the github cloned directory and type ‘sudo scons –full install’ to build the libraries.&lt;/p&gt;
&lt;p&gt;Macports seems to change some of the settings for the system, so I pointed to the /opt/local/ version of it in the linker.&lt;/p&gt;
&lt;p&gt;The Xcode project should be set up like so:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;New Xcode Project&lt;/li&gt;
&lt;li&gt;Copy the following code into Main.cpp:&lt;/li&gt;
&lt;div style=&quot;overflow: auto; white-space: nowrap; width: 435px;&quot; class=&quot;codecolorer-container text default&quot;&gt;&lt;div class=&quot;text codecolorer&quot;&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &quot;client/dbclient.h&quot;&lt;br /&gt;
&lt;br /&gt;
using namespace mongo;&lt;br /&gt;
&lt;br /&gt;
void run() {&lt;br /&gt;
  DBClientConnection c;&lt;br /&gt;
  c.connect(&quot;localhost&quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
  try {&lt;br /&gt;
    run();&lt;br /&gt;
    cout &amp;lt;&amp;lt; &quot;connected ok&quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
  } catch( DBException &amp;amp;e ) {&lt;br /&gt;
    cout &amp;lt;&amp;lt; &quot;caught &quot; &amp;lt;&amp;lt; e.what() &amp;lt;&amp;lt; endl;&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;/div&gt;&lt;/div&gt;
&lt;li&gt;Add to the Header Search Paths
&lt;ul&gt;
&lt;li&gt;/&lt;em&gt;path&lt;/em&gt;/&lt;em&gt;to&lt;/em&gt;/mongo source directory&lt;/li&gt;
&lt;li&gt;/usr/local/include&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Add to the Library Search Paths
&lt;ul&gt;
&lt;li&gt;/usr/local/lib&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;&lt;li&gt;Add to the Other Linker Flags
&lt;ul&gt;
&lt;li&gt;-lmongoclient&lt;/li&gt;
&lt;li&gt;-lboost_program_options&lt;/li&gt;
&lt;li&gt;-lboost_filesystem&lt;/li&gt;
&lt;li&gt;-lboost_thread&lt;/li&gt;
&lt;li&gt;-lboost_system&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;Compile&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;</content:encoded>
	<dc:date>2011-08-17T16:50:56+00:00</dc:date>
	<dc:creator>Michael Edgcumbe</dc:creator>
</item>
<item rdf:about="http://www.neocyde.net/derive/?p=1120">
	<title>HPC Notes Day 2 Cont.</title>
	<link>http://www.neocyde.net/derive/?p=1120</link>
	<content:encoded>&lt;p&gt;GPUs – gpus are single instruction, multiple data.  If the data accesses are sparse, how do you vectorize onto SIMD?  &lt;/p&gt;
&lt;p&gt;CUDA is designed for manycore, wide SIMD parallelism, scalability.  Provides thread abstraction to deal with SIMD.  Synchronization and data sharing among small groups of threads.&lt;/p&gt;
&lt;p&gt;Kernels are composed of many threads.  All threads execute the same sequential program.  Threads are grouped into thread blocks.  Threads inside thread blocks can synchronize, communicate.  Not guaranteed to synchronize with other thread blocks.  All have unique IDs to query.  &lt;/p&gt;
&lt;p&gt;CUDA thread – own program counter, variables, processor state, no implication of scheduling.&lt;br /&gt;
CUDA thread block – data parallel task.  all blocks stay at the same entry point, but each can execute any code they want.  thread blocks must be independent tasks.&lt;/p&gt;
&lt;p&gt;Thread parallelism – independent thread of execution&lt;br /&gt;
Data parallelism – access threads in a block, across blocks in a kernel&lt;br /&gt;
Task parallelism – different blocks are independent, independent kernels in separate streams&lt;/p&gt;
&lt;p&gt;Threads within a block synchronize with barriers called syncthreads();&lt;br /&gt;
Thread blocks can coordinate to share a task.  Any possible interleaving of blocks should be valid.  Can run in any order, concurrently or sequentially.  Allows scalability.&lt;/p&gt;
&lt;p&gt;CUDA kernels are always void..  don’t return anything.  Fills up a pointer on a buffer in device memory.  &lt;/p&gt;
&lt;p&gt;Each thread has its own private memory.  Compiler takes care of local memory space for a stack.  Per block shared memory is mapped on chip.  &lt;/p&gt;
&lt;p&gt;cudaMemcpy() moves data from the host memory to the device memory and back.  cudaMalloc allocated memory on the device to memory allocated with malloc.&lt;/p&gt;
&lt;p&gt;variables shared across the block&lt;br /&gt;
__shared__ int *begin, *end;&lt;/p&gt;
&lt;p&gt;scrathpad memory&lt;br /&gt;
per block shared memory is used for communication between threads&lt;/p&gt;
&lt;p&gt;__global__ – function callable from host&lt;br /&gt;
__device__ – function callable on device&lt;br /&gt;
__device__ – variable in device memory&lt;br /&gt;
__shared__ – in per-block shared memory&lt;/p&gt;
&lt;p&gt;cudaGLMapBufferObject() – interoperability with OpenGL&lt;/p&gt;
&lt;p&gt;OPENCL:&lt;br /&gt;
has a rich task parallelism model&lt;br /&gt;
different terminology, similar model to CUDA&lt;br /&gt;
AMD chips / OpenCL, have to parallelize data structures.  CUDA/Nvidia do not.&lt;/p&gt;
&lt;p&gt;Tips for Efficient CUDA Code&lt;br /&gt;
Need abundant, fine grained parallelism to make the NVidia GPU efficient.&lt;br /&gt;
Maximize on-chip work.&lt;br /&gt;
Minimize execution divergence.&lt;br /&gt;
Minimize memory divergence.&lt;br /&gt;
First priority: make things work.&lt;br /&gt;
Second priority: get performance.&lt;br /&gt;
You initiate a grid of thread blocks, hardware has a load balancer that takes threads from launch and schedule them and process until its done.  Peak efficiency requires multiple thread blocks schedules on every SM.  How many thread blocks can be simultaneously scheduled?  Mapping depends on resources that each thread blocks require (register file limiting factor, possibly).  Want to have about 20 registers per thread for Fermi in order to get full occupancy.  &lt;/p&gt;
&lt;p&gt;Can’t have synchronization inside divergent code.  Must terminal logic branches to get them all doing the same thing before you can synchronize.  &lt;/p&gt;
&lt;p&gt;Performance depends on optimize utilizing memory.  How do we tune memory?  Memory is SIMD also.  Sparse access wastes bandwidth.  Unaligned access wastes bandwidth (depends on the cache line width).  Optimal case for ‘coalescing’: dense accesses that are aligned.  That’s what you want your data structure to be like.  &lt;/p&gt;
&lt;p&gt;Structure of Arrays is often higher performance that Array of Structs.  &lt;/p&gt;
&lt;p&gt;CUDA Thrust – C++ libraries inspired by the STL, includes reduce, sort, reduce_by_key, scan..  Includes OpenMP backend for multicore programming.  &lt;/p&gt;</content:encoded>
	<dc:date>2011-08-16T21:29:53+00:00</dc:date>
	<dc:creator>Michael Edgcumbe</dc:creator>
</item>
<item rdf:about="http://www.neocyde.net/derive/?p=1114">
	<title>HPC Notes Day 2 cont</title>
	<link>http://www.neocyde.net/derive/?p=1114</link>
	<content:encoded>&lt;p&gt;MPI.h is a library (message passing interface) which runs on supercomputers (with CUDA, for example).&lt;/p&gt;
&lt;p&gt;MPI_Comm_rand( MPI_COMM_WORLD, &amp;amp;rank) which one am I&lt;br /&gt;
MPI_Comm_size(…) number of processes in the system&lt;/p&gt;
&lt;p&gt;Group and context form a communicator.  default communicator is MPI_COMM_WORLD.  packs up datas a packet to send across the system and then have them taken apart over the system.  loses its type information as it goes over the network.&lt;/p&gt;
&lt;p&gt;Blocking send&lt;br /&gt;
MPI_SEND( start, count, datatype, dest, tag, comm )&lt;br /&gt;
When the function returns from the send operation, we know that we can reuse that buffer without corrupting the message (it has been copied into another place).  We don’t know it has necessarily been received.&lt;/p&gt;
&lt;p&gt;Collective operations:&lt;br /&gt;
get all the processors together than own a piece of an array and perform an operation (reduce to a sum, min, max, prod, etc).  &lt;/p&gt;
&lt;p&gt;Sources of deadlocks:&lt;br /&gt;
send a large message from process 0 to process 1 – if there is insufficient storage at the destination.  0 copy synchronous models (copying directly to the destination with no buffer) can cause this problem.  You have to set the buffer size in order to make sure the application doesn’t deadlock, while balancing it with the memory constraints of the system.&lt;/p&gt;
&lt;p&gt;Non blocking operations:&lt;br /&gt;
MPI_Request&lt;br /&gt;
MPI_Status&lt;br /&gt;
MPI_Isend&lt;br /&gt;
MPI_Irecv&lt;br /&gt;
MPI_Wait&lt;/p&gt;
&lt;p&gt;figuring out whether the messages have gone out to reuse the buffers.  MPI_Wait can be really slow – if things are not load balanced.  &lt;/p&gt;
&lt;p&gt;can wait for a global synchronization with MPI_Barrier&lt;/p&gt;
&lt;p&gt;race conditions can arise from not checking the buffer.  &lt;/p&gt;
&lt;p&gt;MPI doesn’t match gpus, multicore processors, etc very well.  It’s made for a mid-90s architecture.  OpenMP for shared memory.  CUDA for GPUs (or maybe OpenCL).  MPI uses too many copies on many cores and demands a huge memory footprint.  &lt;/p&gt;
&lt;p&gt;PGAS languages give message passing and shared memory in the same implementation. (http://upc.lbl.gov).  Unified Parallel C (UPC).  Parallel extension of ANSI C.  &lt;/p&gt;
&lt;p&gt;Single program multiple data style – fixed number of threads, runs to the end of execution.  any serial c program can be a parallel program (each processor runs its own copy of the program).  Any thread can write to a shared variable – expensive.  UPC has locks, but they are slow.  Shared arrays.&lt;/p&gt;
&lt;p&gt;One sided vs. two sided communication:&lt;br /&gt;
a one sided message you send the address instead of the message id to directly write into memory without getting any information back from the host.  &lt;/p&gt;</content:encoded>
	<dc:date>2011-08-16T19:16:47+00:00</dc:date>
	<dc:creator>Michael Edgcumbe</dc:creator>
</item>
<item rdf:about="http://www.neocyde.net/derive/?p=1111">
	<title>HPC Notes Day 2</title>
	<link>http://www.neocyde.net/derive/?p=1111</link>
	<content:encoded>&lt;p&gt;&lt;strong&gt;Discrete Event Systems&lt;/strong&gt;&lt;br /&gt;
- synchronous, evaluate all transitions at every time stem&lt;br /&gt;
- asynchronous, transitions evaluated only if inputs change based on an event from another part of the system&lt;/p&gt;
&lt;p&gt;Two copies of the grid, old and new, ping pong between&lt;br /&gt;
Domain decomposition – split into a grid, compute locally, barrier(), exchange info with neighbors until done&lt;br /&gt;
Pick shapes to minimize surface to volume area (reduces the number of barrier calculations).&lt;/p&gt;
&lt;p&gt;Graph partitioning – load balance + minimize communication, solved by libraries&lt;/p&gt;
&lt;p&gt;Synchronous simulations may waste time.  Asynchronous – evaluate when an event arrives from another processor.&lt;/p&gt;
&lt;p&gt;Conservative updating – allowed to simulate up to the point where everyone ends up at the same time t, but can get deadlocks.  When everyone gets to time t=0, no one can take a step forward to t+1.  If you’re stuck for a while, if everyone is stuck, detect deadlock, move forward.  But it’s a serial bottleneck, lose parallelism.&lt;/p&gt;
&lt;p&gt;Speculative updating – keep simulating, timestamp, back up if you’re wrong.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Particle Systems&lt;/strong&gt;&lt;br /&gt;
External forces – currents in the environment, easy to //&lt;br /&gt;
Nearby force – interactions between local particles&lt;br /&gt;
Far-field force – everyone depends on everyone else&lt;/p&gt;
&lt;p&gt;- update velocity with acceleration, update position using velocity at each time t, update the time step&lt;br /&gt;
- corresponds to “map reduce” pattern&lt;/p&gt;
&lt;p&gt;Evenly distribute particles on processors&lt;/p&gt;
&lt;p&gt;Parallelism in Nearby Forces:&lt;br /&gt;
Use domain decomposition, assign parts of the grid to each processor.  Communicate particles in boundary zones to the neighbors.  Can use a quad tree or an oct tree to divide the space.&lt;/p&gt;
&lt;p&gt;Far field forces:&lt;br /&gt;
Package up everything a process owns and sends it to the neighbor (On^2).  Approximate by aggregating into centers of gravity.  “Fast-multipole method” (O n log n)&lt;br /&gt;
Particle mesh – move to the nearest mesh point,&lt;br /&gt;
Tree codes: approximate cluster my single metaparticles in the kd-tree.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lumped Systems – Ordinary Differential Equations&lt;/strong&gt;&lt;br /&gt;
System is lumped because we’re computing at the nodes/endpoints, not along the wires.&lt;br /&gt;
Modeled with differential and algebraic equations.&lt;br /&gt;
“Does the earthquake frequency match the resonance frequency of the building?”  Sparse matrix, eigenvalues&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Continuous systems&lt;/strong&gt;&lt;br /&gt;
Elliptic – heat, discretize time and space – gives a sparse system of linear equations&lt;br /&gt;
Hyperbolic&lt;/p&gt;
&lt;p&gt;Find parallelism and locality&lt;br /&gt;
Load Balancing&lt;br /&gt;
Linear algebra&lt;br /&gt;
Fast Particle Methods&lt;/p&gt;
&lt;p&gt;Parabolic&lt;/p&gt;</content:encoded>
	<dc:date>2011-08-16T16:48:05+00:00</dc:date>
	<dc:creator>Michael Edgcumbe</dc:creator>
</item>
<item rdf:about="http://www.faludi.com/?p=1839">
	<title>Collaborative Strategy at Digi International</title>
	<link>http://www.faludi.com/2011/08/16/collaborative-strategy-at-digi-international/</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://digi.com&quot;&gt;&lt;img src=&quot;http://www.faludi.com/wp-content/uploads/2011/08/DIGI-logo.jpg&quot; title=&quot;DIGI logo&quot; height=&quot;227&quot; width=&quot;250&quot; alt=&quot;&quot; class=&quot;alignnone size-full wp-image-1840&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I just started a terrific new job! In July, Digi International invited me to join their R&amp;amp;D team as Collaborative Strategy Leader. My mandate is to forge stronger connections with the maker community, discover outstanding new work, help Digi contribute to those projects and support innovation in general.&lt;/p&gt;
&lt;p&gt;Some of my cool new role will include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;building a thriving developer community&lt;/li&gt;
&lt;li&gt;locating interesting new projects that can benefit from Digi’s support&lt;/li&gt;
&lt;li&gt;helping makers get their devices connected to the cloud&lt;/li&gt;
&lt;li&gt;driving the creation of new examples and kits&lt;/li&gt;
&lt;li&gt;helping developers publish, present, workshop and teach&lt;/li&gt;
&lt;li&gt;speaking at summits, panel discussions or other gatherings&lt;/li&gt;
&lt;li&gt;…and pushing the boundaries with some innovative work of my own&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By creating this position Digi hopes to uncover new markets and design new products that engage inventors. We’ll be looking to shine a light on your extraordinary new creative projects. There’s incredible work coming out of design labs, hacker spaces, basements and garages these days. If you’re doing something excellent with XBee radios, or connected devices of any make (we’re brand agnostic), let us know what you’re doing and how we can help you!&lt;/p&gt;</content:encoded>
	<dc:date>2011-08-16T14:37:43+00:00</dc:date>
	<dc:creator>Rob Faludi</dc:creator>
</item>
<item rdf:about="http://www.neocyde.net/derive/?p=1108">
	<title>Notes on High Performance Computing</title>
	<link>http://www.neocyde.net/derive/?p=1108</link>
	<content:encoded>&lt;p&gt;Long version of the parallel computing course.&lt;br /&gt;
www.cs.berkeley.edu/~demmel/cs267_Spr11&lt;/p&gt;
&lt;p&gt;Python for science – AY250&lt;br /&gt;
Optimization Models in Engineering – EE127&lt;br /&gt;
Software Engineering for SCientific Computing CS194/294&lt;/p&gt;
&lt;p&gt;Parallel is always forced to be at the lowest level all the time.  Cars with multiprocessors.  Manycore chips.&lt;/p&gt;
&lt;p&gt;Amdahl’s law – only speed up by the fraction of what is being sped up.  50% of the code == speedup factor of 2 at most.&lt;/p&gt;
&lt;p&gt;Pipelining parallelism – get all stages going at the same time (doing the laundry: dryer while washer is going on second load).&lt;/p&gt;
&lt;p&gt;Hazards prevent the next instruction from executing during its designated clock cycle.&lt;br /&gt;
- structural, hardware isn’t ready&lt;br /&gt;
- data, data isn’t ready&lt;br /&gt;
- control, need to make a decision, but don’t know what to do&lt;/p&gt;
&lt;p&gt;Software architects get rid of hazards by stalling the process.  Out of order execution for instructions with no dependencies.  Make sure the results appear sequentially.  Branch prediction and value prediction – guesses to lead the process that can be thrown out later.  But can always solve a hazard by waiting..  if you’re not correct guessing, you’re wasting time and power.  Ridiculous power consumption levels off CPU clock times.  Accuracy of guesses decreases with the number of instructions in the pipeline.  Moore’s law holds because of multicore processors.  Parallelism must be taken up in software.  (Uniprocessor parallelism though pipelining has run out of steam because of heat/power).&lt;/p&gt;
&lt;p&gt;Very long instruction word (VLIW) – figured out in the compiler.  Compilers guarantee no data hazards.  Keeps the chip sections idle.&lt;/p&gt;
&lt;p&gt;Vector code: Uses vector registers to move more through.  &lt;/p&gt;
&lt;p&gt;Single instruction, multiple data (SIMD): Image filters.  GPUs have SIMD architecture.  &lt;/p&gt;
&lt;p&gt;PThreads – Threads for Portable Operating System Interface for UNIX (POSIX)&lt;br /&gt;
Thread level parallelism (TLP) – divide app into multiple threads.&lt;/p&gt;
&lt;p&gt;Caches are used to provide spatial and temporal locality for speed.  Can’t ignore the cache when thinking about an algorithm because cache misses bring the cpu to a halt.   Techniques for improving cache performance are blocking and tiling. Or you can deal with the complexity through experiments – variants of the algorithm with different block sizes that figures out the best size for the architecture.  &lt;/p&gt;
&lt;p&gt;Explicitly parallel computer architecture depends on the communication between the processors.  Software architect must manage the communication (rather than letting it be done under the hood in hardware).  What data is private vs. shared?  How is it accessed and communicated?  How is it synchronized?  &lt;/p&gt;
&lt;p&gt;Shared Memory Programming Model.  Threads communicate implicitly by writing and reading shared variables.  Leads to the need for synchronization because you don’t know when something is finished.  Data race occurs when two processors or two threads access the same variable and at least one does a write.  Doesn’t give the right computation.  Make instruction an atomic operation by putting a lock around it.  Locks can lead to deadlocks.&lt;/p&gt;
&lt;p&gt;Barrier synchronization is waiting for everyone to finish before moving on.  Fine grained locking is sometimes faster than barriers.  &lt;/p&gt;
&lt;p&gt;Message passing – no shared pot of memory, every execution unit has its own memory.  Only way to share is to send messages.  De facto standard for parallel processing.  The arrival of a message is a synchronization event.  Overhead of messaging varies based on the support in the architecture.&lt;/p&gt;</content:encoded>
	<dc:date>2011-08-15T19:11:30+00:00</dc:date>
	<dc:creator>Michael Edgcumbe</dc:creator>
</item>
<item rdf:about="http://www.neocyde.net/derive/?p=1102">
	<title>Compiling, Installing, Linking to Boost Binaries</title>
	<link>http://www.neocyde.net/derive/?p=1102</link>
	<content:encoded>&lt;p&gt;Boost is mostly a header-only library, however, MongoDB requires some of the binaries that need to be pre-compiled.  I had a difficult time getting XCode to see the binaries that I had installed, but in the end it was a simple fix.&lt;/p&gt;
&lt;p&gt;Steps to installing, building, and linking Boost 1_47_0 in XCode 4.1 on Mac OS X:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Download and decompress &lt;a href=&quot;http://www.boost.org/users/download/&quot;&gt;Boost&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Open the terminal, type ‘open /usr/local’&lt;/li&gt;
&lt;li&gt;type ‘cd /usr/local/boost*’&lt;/li&gt;
&lt;li&gt;type ‘bootstrap.sh’&lt;/li&gt;
&lt;li&gt;type ‘sudo ./bjam –macosx-version=10.7 –macosx-version-min=10.6 –architecture=x86 –link=static –address-model=32_64 stage’&lt;/li&gt;
&lt;li&gt;type ‘sudo ./bjam install&lt;/li&gt;
&lt;li&gt;Create a new XCode C++ Command Line Tool project&lt;/li&gt;
&lt;li&gt;Change the main.cpp file to include one of the C++ binaries.  I used the &lt;a href=&quot;http://www.boost.org/doc/libs/1_47_0/more/getting_started/unix-variants.html&quot;&gt;example&lt;/a&gt; from the Boost website:&lt;/li&gt;
&lt;div style=&quot;overflow: auto; white-space: nowrap; width: 435px;&quot; class=&quot;codecolorer-container cpp default&quot;&gt;&lt;div class=&quot;cpp codecolorer&quot;&gt;&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;lt;boost/regex.hpp&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;lt;string&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; main&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #008000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
    std&lt;span style=&quot;color: #008080;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #007788;&quot;&gt;string&lt;/span&gt; line&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
    boost&lt;span style=&quot;color: #008080;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #007788;&quot;&gt;regex&lt;/span&gt; pat&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;&quot;^Subject: (Re: |Aw: )*(.*)&quot;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
    &lt;span style=&quot;color: #0000ff;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt;std&lt;span style=&quot;color: #008080;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;cin&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;color: #008000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
        std&lt;span style=&quot;color: #008080;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #007788;&quot;&gt;getline&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt;std&lt;span style=&quot;color: #008080;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;cin&lt;/span&gt;, line&lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
        boost&lt;span style=&quot;color: #008080;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #007788;&quot;&gt;smatch&lt;/span&gt; matches&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
        &lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt;boost&lt;span style=&quot;color: #008080;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #007788;&quot;&gt;regex_match&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;(&lt;/span&gt;line, matches, pat&lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
            std&lt;span style=&quot;color: #008080;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;cout&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; matches&lt;span style=&quot;color: #008000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; std&lt;span style=&quot;color: #008080;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #007788;&quot;&gt;endl&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;color: #008000;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #008000;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;li&gt;Open the Build Settings for the target in the XCode project&lt;/li&gt;
&lt;li&gt;Use the search bar in the build settings to find ‘search’&lt;/li&gt;
&lt;li&gt;Add the following line to &lt;strong&gt;Header Search Paths&lt;/strong&gt;: ‘/usr/local/include’&lt;/li&gt;
&lt;li&gt;Add the following line to &lt;strong&gt;Library Search Paths&lt;/strong&gt;: ‘/usr/local/lib’&lt;/li&gt;
&lt;li&gt;Use the search bar in the build settings to find ‘flags’&lt;/li&gt;
&lt;li&gt;Add the following line to &lt;strong&gt;Other Linker Flags&lt;/strong&gt;: ‘-lboost_regex’&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A brief explanation of things I learned along the way..  Boost uses either b2 or bjam to build the binaries.  bjam takes several flags which determine the output.  The minimum macosx version on 10.7 is 10.6.  The –architecture flag should be set to x86 (ppc compiling is no longer an option, ‘combined’ will not compile correctly, you can compile 32 bit and 64 bit and put them in separate directories if you want to).  The –address-model flag can be set to either 32, 64, or 32_64 depending on which you would like (32bit vs 64bit vs both).  The –threading=multi flag outputs libraries that enable multithreading.  The –with flag selectively builds libraries (I didn’t use it).  &lt;/p&gt;
&lt;p&gt;XCode needs to be pointed to the exact library file, rather than just the library directory.  This can be accomplished by adding a linker flag in the format ‘-lboost_xxx’ where xxx is the name of the library.&lt;/p&gt;
&lt;p&gt;Once XCode sees the library, the ‘Undefined symbols for architecture x86_64:”boost …’ errors should disappear.&lt;/p&gt;</content:encoded>
	<dc:date>2011-08-14T16:33:00+00:00</dc:date>
	<dc:creator>Michael Edgcumbe</dc:creator>
</item>
<item rdf:about="http://aaronuhrmacher.com/?p=1472">
	<title>Play Pop N Scream at Geekdown TONIGHT in NYC</title>
	<link>http://feedproxy.google.com/~r/aaronuhrmacher/~3/Bc8tc0GfNLw/</link>
	<content:encoded>Visit Geekdown 2011 on August 13, 2011 to play Pop N Scream&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/aaronuhrmacher?a=Bc8tc0GfNLw:dckg-sXr0oU:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/aaronuhrmacher?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/aaronuhrmacher?a=Bc8tc0GfNLw:dckg-sXr0oU:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/aaronuhrmacher?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/aaronuhrmacher/~4/Bc8tc0GfNLw&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2011-08-13T14:17:11+00:00</dc:date>
	<dc:creator>Aaron Uhrmacher</dc:creator>
</item>
<item rdf:about="http://www.neocyde.net/derive/?p=1099">
	<title>Installing the MongoDB C++ Source and Boost on a Mac</title>
	<link>http://www.neocyde.net/derive/?p=1099</link>
	<content:encoded>&lt;p&gt;I have had a hard time getting Boost to install the right libraries to compile the example code from the MongoDB site.  &lt;/p&gt;
&lt;p&gt;I think the include line from the &lt;a href=&quot;http://www.mongodb.org/pages/viewpage.action?pageId=133415&quot;&gt;example code&lt;/a&gt;&lt;br /&gt;
#include “client/dbclient.h”&lt;br /&gt;
uses one of the &lt;a href=&quot;http://www.boost.org/doc/libs/1_47_0/more/getting_started/unix-variants.html&quot;&gt;prebuilt libraries&lt;/a&gt; from Boost.  &lt;/p&gt;
&lt;p&gt;My Boost source code has not been compiling using these libraries.  I get an “Undefined symbols for architecture x86_64:” error, with some specific variables listed below.  I think I need Boost to compile for x86_64 because MongoDB is highly recommended to be compiled as 64-bit (although I could be wrong about this, I’m not enough of a computer scientist to know – one of the troubles of being self taught).&lt;/p&gt;
&lt;p&gt;I have tried both installing boost from macports as well as inserting my own installation into /usr/local/ and installing it with bjam and bootstrap.sh.  I have muddled around with setting the architecture= flag in bjam to x86 with the address-model= flag set to either 64 or 32_64.  &lt;/p&gt;
&lt;p&gt;I uninstalled the macports boost because it seemed to be confusing the issue for me.  I followed the boost instructions to compile the libraries into a directory in my Documents folder, but I don’t like this option because it’s specific to my machine.  I have also included the -lboost_system flags etc in the linker instructions, but have since removed them to simplify.&lt;/p&gt;
&lt;p&gt;I think first, I need to forget about MongoDB and get Boost to compile correctly, so I’ve deleted the folders and I’m starting from scratch, again.  More on Monday.&lt;/p&gt;</content:encoded>
	<dc:date>2011-08-12T19:50:32+00:00</dc:date>
	<dc:creator>Michael Edgcumbe</dc:creator>
</item>
<item rdf:about="http://ganucheau.com/?p=973">
	<title>Sept 15th – Night Life</title>
	<link>http://ganucheau.com/sept-15th-night-life</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://www.calacademy.org/events/nightlife/&quot;&gt;&lt;img src=&quot;http://ganucheau.com/wordpress/wp-content/uploads/2011/08/nightlife.jpeg&quot; title=&quot;nightlife&quot; height=&quot;614&quot; width=&quot;383&quot; alt=&quot;&quot; class=&quot;alignnone size-full wp-image-974&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2011-08-09T21:00:21+00:00</dc:date>
	<dc:creator>Matt Ganucheau</dc:creator>
</item>
<item rdf:about="http://www.faludi.com/?p=1809">
	<title>Liking The Guests – at Sketching in Hardware</title>
	<link>http://www.faludi.com/2011/08/08/liking-the-guests-at-sketching-in-hardware/</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://www.slideshare.net/faludi/liking-the-guest&quot;&gt;&lt;img src=&quot;http://www.faludi.com/wp-content/uploads/2011/08/teacup.jpg&quot; title=&quot;teacup&quot; height=&quot;372&quot; width=&quot;500&quot; alt=&quot;&quot; class=&quot;alignnone size-full wp-image-1817&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Just launched a new talk called “&lt;a href=&quot;http://www.slideshare.net/faludi/liking-the-guest&quot;&gt;Liking the Guests&lt;/a&gt;” at &lt;em&gt;Sketching in Hardware 2011&lt;/em&gt; at Philadelphia’s Franklin Institute. “Liking the Guests” tells the story of how holding your users in high esteem creates an unexpected and fundamental principle for good design. The talk has pirates, princesses, apes, and taxidermy, but essentially it’s about why I think we all make things. These ideas are worth sharing so I’ve &lt;a href=&quot;http://www.slideshare.net/faludi/liking-the-guest&quot;&gt;uploaded the talk publicly&lt;/a&gt; so that anyone can take a listen.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://sketching11.com/&quot;&gt;Sketching in Hardware&lt;/a&gt; is an invited gathering attended by a small group of interaction designers, open software developers, device theorists, educators and hackers. We all create, study and use prototype devices for exploring new ideas. Everyone gives a presentation, there’s a mite of drinking and a ton of sharing skills. Well worth the trip. &lt;a href=&quot;http://www.slideshare.net/faludi/liking-the-guest&quot;&gt;Check out my bit…&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2011-08-08T13:47:02+00:00</dc:date>
	<dc:creator>Rob Faludi</dc:creator>
</item>
<item rdf:about="http://ganucheau.com/?p=968">
	<title>Intro to openFrameworks: From Beginning to Launching a Mobile Application</title>
	<link>http://ganucheau.com/introduction-to-openframeworks-from-beginning-to-launching-a-mobile-application</link>
	<content:encoded>&lt;p&gt;&lt;img src=&quot;http://www.gaffta.org/wp/wp-uploads/2011/07/openFrameworks.jpg&quot; title=&quot;OF&quot; height=&quot;240&quot; width=&quot;240&quot; alt=&quot;&quot; class=&quot;alignnone&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is an introduction to using openFrameworks, a cross-platform C++ library for creative coding. In this class, you will be taken from the first steps of installing openFrameworks, all the way to launching an interactive mobile application. Because openFrameworks is a powerful open source tool designed to simplify building creative applications, it has rapidly become one of the tools of choice for a new era of creative designers. This class is for artists, designers and hackers alike, beginners should not be afraid to join.&lt;/p&gt;
&lt;p&gt;- An introduction to Xcode&lt;br /&gt;
- 2D &amp;amp; 3D Graphics&lt;br /&gt;
- Generative sound and sample playback.&lt;br /&gt;
- Generative graphics and video playback.&lt;br /&gt;
- Basic texture mapping.&lt;br /&gt;
- Utilizing sensors&lt;br /&gt;
- Basic Game design.&lt;br /&gt;
- Launching your app on a mobile device.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://openframeworks.cc/&quot;&gt;http://openframeworks.cc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here are some great examples of projects made with OF :&lt;br /&gt;
&lt;a href=&quot;http://www.creativeapplications.net/category/openframeworks/&quot;&gt;http://www.creativeapplications.net/category/openframeworks/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;*Each student will be required to pay $100 registration as a developer to place on their iPhone&lt;br /&gt;
*Xcode is required (&lt;a href=&quot;http://developer.apple.com/xcode/&quot;&gt;http://developer.apple.com/xcode/&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dates: &lt;/strong&gt;Tuesday &amp;amp; Thursday, September 6th, 8th, 13th &amp;amp; 15th&lt;br /&gt;
&lt;strong&gt;Times: &lt;/strong&gt;6pm – 9pm&lt;br /&gt;
&lt;strong&gt;Course Length:&lt;/strong&gt; 12 hours&lt;br /&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; $20/instruction hour, $240 total, $216 for &lt;a href=&quot;http://www.gaffta.org/support/&quot;&gt;GAFFTA Members&lt;/a&gt;&lt;br /&gt;
&lt;strong&gt;Location: &lt;/strong&gt;&lt;a href=&quot;http://www.gaffta.org/2011/07/27/introduction-to-open-frameworks-from-beginning-to-launching-a-mobile-application/&quot;&gt;GAFFTA&lt;/a&gt;, 998 Market Street, San Francisco, CA 94131&lt;/p&gt;</content:encoded>
	<dc:date>2011-08-05T06:01:04+00:00</dc:date>
	<dc:creator>Matt Ganucheau</dc:creator>
</item>
<item rdf:about="http://aaronuhrmacher.com/?p=1462">
	<title>Pop N Scream</title>
	<link>http://feedproxy.google.com/~r/aaronuhrmacher/~3/_UfZaUph_Og/</link>
	<content:encoded>Pop N Scream is a physical carnival like game where two players compete using their mobile phones to keep their respective balloons from getting popped.&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/aaronuhrmacher?a=_UfZaUph_Og:FGWlMVZX8SE:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/aaronuhrmacher?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/aaronuhrmacher?a=_UfZaUph_Og:FGWlMVZX8SE:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/aaronuhrmacher?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/aaronuhrmacher/~4/_UfZaUph_Og&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2011-07-29T16:37:21+00:00</dc:date>
	<dc:creator>Aaron Uhrmacher</dc:creator>
</item>
<item rdf:about="http://aaronuhrmacher.com/?p=1457">
	<title>Telestory Thesis Presentation</title>
	<link>http://feedproxy.google.com/~r/aaronuhrmacher/~3/kcoCyEZndPE/</link>
	<content:encoded>Video documentation of my ITP thesis presentation of Telestory in May, 2011.&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/aaronuhrmacher?a=kcoCyEZndPE:czofkEki9gM:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/aaronuhrmacher?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/aaronuhrmacher?a=kcoCyEZndPE:czofkEki9gM:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/aaronuhrmacher?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/aaronuhrmacher/~4/kcoCyEZndPE&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2011-07-28T17:16:49+00:00</dc:date>
	<dc:creator>Aaron Uhrmacher</dc:creator>
</item>
<item rdf:about="http://aaronuhrmacher.com/?p=1439">
	<title>Gotham Guide Included in MOMA’s “Talk To Me” Exhibit</title>
	<link>http://feedproxy.google.com/~r/aaronuhrmacher/~3/CWeu88TuoU4/</link>
	<content:encoded>I am honored to have Gotham Guide included in the new MoMA exhibition, &quot;Talk to Me&quot;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/aaronuhrmacher?a=CWeu88TuoU4:CHnqjHuxgU4:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/aaronuhrmacher?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/aaronuhrmacher?a=CWeu88TuoU4:CHnqjHuxgU4:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/aaronuhrmacher?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/aaronuhrmacher/~4/CWeu88TuoU4&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2011-07-25T16:16:56+00:00</dc:date>
	<dc:creator>Aaron Uhrmacher</dc:creator>
</item>
<item rdf:about="http://ezraezraezra.com/?p=1408">
	<title>TokShow</title>
	<link>http://ezraezraezra.com/?p=1408</link>
	<content:encoded>&lt;p id=&quot;top&quot;&gt;&lt;br /&gt;&lt;a href=&quot;http://tokshow.opentok.com/artist.html&quot;&gt;&lt;strong&gt;CLICK HERE TO VIEW APP – Artist Portal&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://tokshow.opentok.com/&quot;&gt;&lt;strong&gt;CLICK HERE TO VIEW APP – Viewer Portal&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://tokshow.opentok.com/admin.html&quot;&gt;&lt;strong&gt;CLICK HERE TO VIEW APP – Admin Portal&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Name:&lt;/strong&gt; TokShow&lt;br /&gt;
&lt;strong&gt;Platform:&lt;/strong&gt; Web&lt;br /&gt;
&lt;strong&gt;Author:&lt;/strong&gt; Ezra Velazquez&lt;br /&gt;
&lt;strong&gt;Released:&lt;/strong&gt; July 2011&lt;br /&gt;
&lt;strong&gt;Technology:&lt;/strong&gt; AJAX, CSS, CSS3, HTML, JavaScript, jQuery, JSON, MySQL, OpenTok API, PHP&lt;br /&gt;
&lt;strong&gt;Version:&lt;/strong&gt; 1.0&lt;br /&gt;
&lt;strong&gt;Source Code:&lt;/strong&gt; Available on &lt;a href=&quot;https://github.com/ezraezraezra/TokShow&quot;&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;About TokTube:&lt;/strong&gt; Showcase App developed for tech startup &lt;a href=&quot;http://www.tokbox.com&quot;&gt;&lt;strong&gt;TokBox&lt;/strong&gt;&lt;/a&gt; under the position of technical product development intern.&lt;br /&gt;&lt;br /&gt;
Talk show format web application with host view, user view, and moderator view. Up to five people are queued by the moderator, who can decide whether to allow user to broadcast his/her signal.&lt;br /&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2011-07-24T19:20:22+00:00</dc:date>
	<dc:creator>Ezra Velazquez</dc:creator>
</item>
<item rdf:about="http://ezraezraezra.com/?p=1403">
	<title>LoopTube</title>
	<link>http://ezraezraezra.com/?p=1403</link>
	<content:encoded>&lt;p id=&quot;top&quot;&gt;&lt;br /&gt;&lt;a href=&quot;http://ezraezraezra.com/?feed=rss2&quot;&gt;&lt;strong&gt;CLICK HERE TO VIEW APP – Artist Portal&lt;/strong&gt;&lt;/a&gt;***PRIVATE VIEWING/ACCESS ON  7/26***&lt;br /&gt;
&lt;a href=&quot;http://looptube.opentok.com&quot;&gt;&lt;strong&gt;CLICK HERE TO VIEW APP – Viewer Portal&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Name:&lt;/strong&gt; LoopTube&lt;br /&gt;
&lt;strong&gt;Platform:&lt;/strong&gt; Web&lt;br /&gt;
&lt;strong&gt;Author:&lt;/strong&gt; Ezra Velazquez&lt;br /&gt;
&lt;strong&gt;Released:&lt;/strong&gt; July 2011&lt;br /&gt;
&lt;strong&gt;Technology:&lt;/strong&gt; AJAX, CSS, CSS3, HTML, JavaScript, jQuery, JSON, MySQL, Node.js, OpenTok API, PHP, YouTube API&lt;br /&gt;
&lt;strong&gt;Version:&lt;/strong&gt; 0.5&lt;br /&gt;
&lt;strong&gt;Source Code:&lt;/strong&gt; Available on &lt;a href=&quot;https://github.com/ezraezraezra/LoopTube&quot;&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;About LoopTube:&lt;/strong&gt; Showcase App developed for tech startup &lt;a href=&quot;http://www.tokbox.com&quot;&gt;&lt;strong&gt;TokBox&lt;/strong&gt;&lt;/a&gt; under the position of technical product development intern.&lt;br /&gt;&lt;br /&gt;
Social e-gather where selected YouTube videos are played in sync for all viewers until artist turns camera on.&lt;br /&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2011-07-24T19:11:23+00:00</dc:date>
	<dc:creator>Ezra Velazquez</dc:creator>
</item>
<item rdf:about="http://ezraezraezra.com/?p=1399">
	<title>ConsulTok</title>
	<link>http://ezraezraezra.com/?p=1399</link>
	<content:encoded>&lt;p id=&quot;top&quot;&gt;&lt;br /&gt;&lt;a href=&quot;http://consultok.opentok.com&quot;&gt;&lt;strong&gt;CLICK HERE TO VIEW APP&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Name:&lt;/strong&gt; ConsulTok&lt;br /&gt;
&lt;strong&gt;Platform:&lt;/strong&gt; Web&lt;br /&gt;
&lt;strong&gt;Author:&lt;/strong&gt; Ezra Velazquez&lt;br /&gt;
&lt;strong&gt;Released:&lt;/strong&gt; August 2011&lt;br /&gt;
&lt;strong&gt;Technology:&lt;/strong&gt; AJAX, CSS, CSS3, HTML, JavaScript, JSON,  jQuery, jQueryUI, Node.js, OpenTok API, ShopSense API, Socket.io&lt;br /&gt;
&lt;strong&gt;Version:&lt;/strong&gt; 1.0&lt;br /&gt;
&lt;strong&gt;Source Code:&lt;/strong&gt; Available on &lt;a href=&quot;https://github.com/ezraezraezra/ConsulTok&quot;&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;About ConsulTok:&lt;/strong&gt; Showcase App developed for tech startup &lt;a href=&quot;http://www.tokbox.com&quot;&gt;&lt;strong&gt;TokBox&lt;/strong&gt;&lt;/a&gt; under the position of technical product development intern.&lt;br /&gt;&lt;br /&gt;
E-commerce social shopping web application featuring the OpenTok &amp;amp; ShopSense APIs&lt;br /&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2011-07-24T18:58:40+00:00</dc:date>
	<dc:creator>Ezra Velazquez</dc:creator>
</item>
<item rdf:about="http://ezraezraezra.com/?p=1391">
	<title>Lollapaloobox</title>
	<link>http://ezraezraezra.com/?p=1391</link>
	<content:encoded>&lt;p id=&quot;top&quot;&gt;&lt;br /&gt;&lt;a href=&quot;http://lolla.opentok.com&quot;&gt;&lt;strong&gt;CLICK HERE TO VIEW APP&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Name:&lt;/strong&gt; Lollapaloobox&lt;br /&gt;
&lt;strong&gt;Platform:&lt;/strong&gt; Web&lt;br /&gt;
&lt;strong&gt;Author:&lt;/strong&gt; Ezra Velazquez&lt;br /&gt;
&lt;strong&gt;Released:&lt;/strong&gt; June 2011&lt;br /&gt;
&lt;strong&gt;Technology:&lt;/strong&gt; AJAX, CSS, CSS3, HackLolla API, HTML, JavaScript, jQuery, JSON, OpenTok API&lt;br /&gt;
&lt;strong&gt;Version:&lt;/strong&gt; 1.0&lt;br /&gt;
&lt;strong&gt;Video:&lt;/strong&gt; On &lt;strong&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=idowjyBh744&quot;&gt;YouTube!&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;About Lollapaloobox:&lt;/strong&gt; Showcase App developed for tech startup &lt;a href=&quot;http://www.tokbox.com&quot;&gt;&lt;strong&gt;TokBox&lt;/strong&gt;&lt;/a&gt; under the position of technical product development intern.&lt;br /&gt;&lt;br /&gt;
Submission to www.hacklolla.com using the Lollapalooza and OpenTok APIs.&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Blog Posts:&lt;/strong&gt; &lt;a href=&quot;http://www.tokbox.com/developersblog/contests/opentok-apps-lollapaloobox/&quot;&gt;Blog post written specifically for Lollapaloobox.&lt;/a&gt;&lt;/p&gt;

&lt;a href=&quot;http://ezraezraezra.com/?attachment_id=1392&quot; title=&quot;lolla&quot;&gt;&lt;img src=&quot;http://ezraezraezra.com/itp/wp-content/uploads/2011/07/lolla-150x150.jpg&quot; title=&quot;lolla&quot; height=&quot;150&quot; width=&quot;150&quot; alt=&quot;lolla&quot; class=&quot;attachment-thumbnail&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://ezraezraezra.com/?attachment_id=1393&quot; title=&quot;lolla3&quot;&gt;&lt;img src=&quot;http://ezraezraezra.com/itp/wp-content/uploads/2011/07/lolla3-150x150.jpg&quot; title=&quot;lolla3&quot; height=&quot;150&quot; width=&quot;150&quot; alt=&quot;lolla3&quot; class=&quot;attachment-thumbnail&quot; /&gt;&lt;/a&gt;</content:encoded>
	<dc:date>2011-07-24T01:14:46+00:00</dc:date>
	<dc:creator>Ezra Velazquez</dc:creator>
</item>
<item rdf:about="http://ezraezraezra.com/?p=1367">
	<title>ArchiveTok</title>
	<link>http://ezraezraezra.com/?p=1367</link>
	<content:encoded>&lt;p id=&quot;top&quot;&gt;&lt;br /&gt;&lt;a href=&quot;http://archive.opentok.com&quot;&gt;&lt;strong&gt;CLICK HERE TO VIEW APP&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Name:&lt;/strong&gt; ArchiveTok&lt;br /&gt;
&lt;strong&gt;Platform:&lt;/strong&gt; Web&lt;br /&gt;
&lt;strong&gt;Author:&lt;/strong&gt; Ezra Velazquez&lt;br /&gt;
&lt;strong&gt;Released:&lt;/strong&gt; July 2011&lt;br /&gt;
&lt;strong&gt;Technology:&lt;/strong&gt; AJAX, CSS, CSS3, HTML, JavaScript, jQuery, OpenTok Archiving API&lt;br /&gt;
&lt;strong&gt;Version:&lt;/strong&gt; 0.5&lt;br /&gt;
&lt;strong&gt;Source Code:&lt;/strong&gt; Available on &lt;a href=&quot;https://github.com/ezraezraezra/ArchiveTok&quot;&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;About ArchiveTok:&lt;/strong&gt; Showcase App developed for tech startup &lt;a href=&quot;http://www.tokbox.com&quot;&gt;&lt;strong&gt;TokBox&lt;/strong&gt;&lt;/a&gt; under the position of technical product development intern.&lt;br /&gt;&lt;br /&gt;
Analogy to explain &amp;amp; demonstrate the OpenTok Archiving API&lt;/p&gt;</content:encoded>
	<dc:date>2011-07-24T00:41:13+00:00</dc:date>
	<dc:creator>Ezra Velazquez</dc:creator>
</item>
<item rdf:about="http://urbanhonking.com/ideasfordozens/?p=477">
	<title>Back to Work No Matter What: 10 Things I’ve Learned While Writing a Technical Book for O’Reilly</title>
	<link>http://urbanhonking.com/ideasfordozens/2011/07/17/back-to-work-no-matter-what-10-things-ive-learned-about-writing/</link>
	<content:encoded>&lt;p&gt;
  I’m rapidly approaching the midway point in writing &lt;a href=&quot;http://urbanhonking.com/ideasfordozens/2011/05/31/making-things-see-a-book-for-oreilly-about-the-kinect/&quot;&gt;my book&lt;/a&gt;. Writing a book is hard. I love to write and am excited about the topic. Some days I wake excited and can barely wait to get to work. I reach my target word count without feeling the effort. But other days it’s a battle to even get started and every paragraph requires a conscious act of will to not stop and check twitter or go for a walk outside. And either way when the day is done the next one still starts from zero with 1500 words to write and none written.
  &lt;/p&gt;
&lt;p&gt;
   Somewhere in the last month I hit a stride that has given me the beginnings of a sense confidence that I will be able to finish on time and with a text that I am proud of. I’m currently preparing for the digital Early Release of the book which should happen by the end of the month, which is a big landmark that I find both exciting and terrifying. I thought I’d mark the occasion by writing down a little bit of what I’ve learned about the process of writing.
  &lt;/p&gt;
&lt;p&gt;
  I make no claim that these ten tips will apply to anyone else, but identifying them and trying to stick by them has helped me. And obviously my tips here are somewhat tied in with writing the kind of technical book that I’m working on and would be much less relevant for a novel or other more creative project.
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Write everyday. It gets easier and it makes the spreadsheet happy. (I’ve been using a spreadsheet to track my progress and project my completion date based on work done so far.)&lt;/li&gt;
&lt;li&gt;Everyday starts as pulling teeth and then goes downhill after 500 words or so. Each 500 words is easier than the last.&lt;/li&gt;
&lt;li&gt;Outlining is easier than writing, if you’re stuck outline what comes next.&lt;/li&gt;
&lt;li&gt;Writing code is easier than outlining. if you don’t know the structure, write the code.&lt;/li&gt;
&lt;li&gt;Making illustrations is easier than writing code. If you don’t know what code to write make illustrations or screen caps from existing code.&lt;/li&gt;
&lt;li&gt;Don’t start from a dead stop. read, edit, and refine the previous few paragraphs to get a running start.&lt;/li&gt;
&lt;li&gt;If you’re writing sucky sentences, keep going, you can fix them later. Also they’ll get better as you warm up.&lt;/li&gt;
&lt;li&gt;When in doubt make sentences shorter. they will be easier to write and read.&lt;/li&gt;
&lt;li&gt;Reading good writers makes me write better. This includes writers in radically different genres from my own (&lt;a href=&quot;http://www.amazon.com/Consider-Lobster-David-Foster-Wallace/dp/0316156116&quot;&gt;DFW&lt;/a&gt;) and similar ones (&lt;a href=&quot;http://www.kickstarter.com/projects/shiffman/the-nature-of-code-book-project&quot;&gt;Shiffman&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Give yourself regular positive feedback. I count words as I go to see how much I’ve accomplished.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
  A note of thanks: throughout this process I’ve found the &lt;a href=&quot;http://5by5.tv/b2w&quot;&gt;Back to Work podcast&lt;/a&gt; with Merlin Mann and Dan Benjamin to be…I want to say “inspiring”, but that’s exactly the wrong word. What I’ve found useful about the show is how it knocks down the process of working towards your goals from the pedestal of inspiration to the ground level of actually working every day, going from having dreams of writing a book to being a guy who types in a text file five hours a day no matter what. I especially recommend Episode 21: &lt;a href=&quot;http://5by5.tv/b2w/21&quot;&gt;Assistant to the Regional Monkey&lt;/a&gt;. and the recent Episode 23: &lt;a href=&quot;http://5by5.tv/b2w/23&quot;&gt;Failure is ALWAYS an Option&lt;/a&gt;. The first of those does a great job talking about how every day you have to start from scratch, forgiving yourself when you miss a day and not getting too full of yourself when you have a solid week of productivity. The second one speaks eloquently of the dangers of taking on a big project (like writing a book) as a “side project”. Dan and Merlin talked about the danger of not fully committing to a project like this. For my part I found these two topics to be closely related. I’ve found that a big part of being fully committed to the project is to forgive myself for failures — days I don’t write at all, days I don’t write as much as I want, sections of the book I don’t write as well as I know I could. The commitment has to be a commitment to keep going despite these failures along the way.
&lt;/p&gt;
&lt;p&gt;
  And I’m sure I’ll have plenty more of those failures in the second half of writing this book. But I will write it regardless.&lt;/p&gt;</content:encoded>
	<dc:date>2011-07-17T20:05:00+00:00</dc:date>
	<dc:creator>Greg Borenstein</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-27952663.post-7222769697791577893">
	<title>When We Were Kids</title>
	<link>http://brushsong.blogspot.com/2011/07/when-we-were-kids.html</link>
	<content:encoded>&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;a style=&quot;margin-left: 1em; margin-right: 1em;&quot; href=&quot;http://1amsf.com/wp-content/uploads/2009/07/when_we_were_kids_flyer_front.jpg&quot;&gt;&lt;img src=&quot;http://1amsf.com/wp-content/uploads/2009/07/when_we_were_kids_flyer_front.jpg&quot; height=&quot;320&quot; border=&quot;0&quot; width=&quot;217&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;color: #28898a; font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif; font-size: 11px;&quot; class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;br style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: #28898a; font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif; font-size: 11px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;&quot; /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif; font-size: 11px;&quot; class=&quot;Apple-style-span&quot;&gt;I'm delighted to run back to my brushes and pencils after working with technology so much in the last two years. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif;&quot; class=&quot;Apple-style-span&quot;&gt;&lt;span style=&quot;font-size: 11px;&quot; class=&quot;Apple-style-span&quot;&gt;My good friend James Garcia has put together a wonderful show dubbed &quot;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif; font-size: 11px;&quot; class=&quot;Apple-style-span&quot;&gt;When We Were Kids&quot;, featuring &lt;/span&gt;&lt;span style=&quot;font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif; font-size: 11px;&quot; class=&quot;Apple-style-span&quot;&gt;Christopher De Leon, James and myself.&lt;/span&gt;&lt;span style=&quot;font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif; font-size: 11px;&quot; class=&quot;Apple-style-span&quot;&gt; Its opening at 1AM Gallery in San Francisco this Friday, &lt;/span&gt;&lt;span style=&quot;font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif; font-size: 11px;&quot; class=&quot;Apple-style-span&quot;&gt;July 15 and runs 'til August 14.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif; font-size: 11px;&quot; class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif; font-size: 11px;&quot; class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;a style=&quot;margin-left: 1em; margin-right: 1em;&quot; href=&quot;http://3.bp.blogspot.com/-O3tpvdMHcMI/ThsahQB8xqI/AAAAAAAAAmE/8b-dXtoVx2w/s1600/Minette_HulahoopGirlsm.jpg&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/-O3tpvdMHcMI/ThsahQB8xqI/AAAAAAAAAmE/8b-dXtoVx2w/s320/Minette_HulahoopGirlsm.jpg&quot; height=&quot;320&quot; border=&quot;0&quot; width=&quot;232&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;span style=&quot;font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif;&quot; class=&quot;Apple-style-span&quot;&gt;&lt;span style=&quot;font-size: 11px;&quot; class=&quot;Apple-style-span&quot;&gt;&lt;span style=&quot;color: #28898a;&quot; class=&quot;Apple-style-span&quot;&gt;&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: #28898a; font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif; font-size: 11px; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;&quot; class=&quot;bold&quot;&gt;Hulahoop Girl&lt;/span&gt; (2011)&lt;br style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: #28898a; font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif; font-size: 11px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;&quot; /&gt;ink and pencil, 9 in x 12 in&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif; font-size: 11px;&quot; class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif; font-size: 11px;&quot; class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;a style=&quot;margin-left: 1em; margin-right: 1em;&quot; href=&quot;http://1.bp.blogspot.com/-Oorosv92N-c/ThsbMmgn_CI/AAAAAAAAAmI/Fo69rDyHvhs/s1600/Minette_SampaguitaKidsm.jpg&quot;&gt;&lt;img src=&quot;http://1.bp.blogspot.com/-Oorosv92N-c/ThsbMmgn_CI/AAAAAAAAAmI/Fo69rDyHvhs/s320/Minette_SampaguitaKidsm.jpg&quot; height=&quot;320&quot; border=&quot;0&quot; width=&quot;232&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;span style=&quot;color: #28898a; font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif; font-size: 11px;&quot; class=&quot;Apple-style-span&quot;&gt;&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: #28898a; font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif; font-size: 11px; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;&quot; class=&quot;bold&quot;&gt;Sampaguita Kid&lt;/span&gt; (2011)&lt;br style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; color: #28898a; font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif; font-size: 11px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;&quot; /&gt;ink and pencil, 9 in x 12 in&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif; font-size: 11px;&quot; class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/27952663-7222769697791577893?l=brushsong.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2011-07-11T15:49:09+00:00</dc:date>
	<dc:creator>Minette Mangahas</dc:creator>
</item>
<item rdf:about="http://ganucheau.com/?p=954">
	<title>The Art of The Mixtape</title>
	<link>http://ganucheau.com/the-art-of-the-mixtape</link>
	<content:encoded>&lt;p&gt;&lt;img src=&quot;http://ganucheau.com/wordpress/wp-content/uploads/2011/07/cassettep1.jpeg&quot; title=&quot;cassettep&quot; height=&quot;270&quot; width=&quot;400&quot; alt=&quot;&quot; class=&quot;alignnone size-full wp-image-956&quot; /&gt;&lt;br /&gt;
The Art of The Mixtape&lt;br /&gt;
Thursday, July 21. 7pm-10pm.&lt;br /&gt;
Langton Labs North: 9 Langton St, SF CA.&lt;/p&gt;
&lt;p&gt;There’s no doubting it: a good mixtape can lead to baby making.  A mix with a good arc of pace and narrative can have profound effects on people. They signify much more than music recommendations but also the amount of time focused on the recipient. Through the evolution of media formats and software recommendations services, this art has become watered down but it does still exist.&lt;/p&gt;
&lt;p&gt;In this class, Matt Ganucheau will show you how to use Ableton Live to lead you through all aspects to create a quality modern mixtape, from inspiration, narrative, technical execution and even presentation.  No prior Ableton skills are required.&lt;/p&gt;
&lt;p&gt;$10 suggested donation.&lt;/p&gt;
&lt;p&gt;RSVP on Facebook, if that’s how you roll: &lt;a href=&quot;https://www.facebook.com/event.php?eid=202459919805093&quot;&gt;https://www.facebook.com/event.php?eid=202459919805093&lt;/a&gt;&lt;br /&gt;
Langton Labs events: &lt;a href=&quot;http://events.langtonlabs.org/&quot;&gt;http://events.langtonlabs.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;langton labs is:&lt;br /&gt;
agil alex amy anselm ben dave galit hanna jane kate katy lev lou matt&lt;br /&gt;
matty megan michael mick mike peretz sam todd trevor tristan&lt;/p&gt;</content:encoded>
	<dc:date>2011-07-08T17:25:34+00:00</dc:date>
	<dc:creator>Matt Ganucheau</dc:creator>
</item>
<item rdf:about="http://www.faludi.com/?p=1792">
	<title>Botanicalls in MoMA Exhibition</title>
	<link>http://www.faludi.com/2011/07/07/botanicalls-in-moma-exhibition/</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://www.moma.org/visit/calendar/exhibitions/1080&quot;&gt;&lt;img src=&quot;http://www.faludi.com/wp-content/uploads/2011/07/moma_sign.jpg&quot; title=&quot;moma_sign&quot; height=&quot;300&quot; width=&quot;460&quot; alt=&quot;&quot; class=&quot;alignnone size-full wp-image-1793&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We’re tremendously excited that the &lt;a href=&quot;http://botanicalls.com&quot;&gt;Botanicalls&lt;/a&gt; project will be featured in &lt;a href=&quot;http://www.moma.org/visit/calendar/exhibitions/1080&quot;&gt;MoMA’s upcoming “Talk to Me” Exhibition&lt;/a&gt; that opens July 24th in New York on the third floor of the Museum of Modern Art, continuing through November 7th, 2011. Here’s the official description:&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;&lt;em&gt;Talk to Me explores the communication between people and things. The exhibition focuses on objects that involve a direct interaction, such as interfaces, information systems, visualization design, and communication devices, and on projects that establish an emotional, sensual, or intellectual connection with their users. Examples range from a few iconic products of the late 1960s to several projects currently in development—including computer and machine interfaces, websites, video games, devices and tools, furniture and physical products, and extending to installations and whole environments. &lt;/em&gt;&lt;/p&gt;
&lt;div&gt;Botanicalls is a system that allows thirsty plants to reach out for human help. It has certainly come a long way from its noble beginnings at &lt;a href=&quot;http://itp.nyu.edu/&quot;&gt;ITP&lt;/a&gt;, via many intriguing &lt;a href=&quot;http://www.botanicalls.com/classic/&quot;&gt;incarnations&lt;/a&gt; and &lt;a href=&quot;http://www.botanicalls.com/kits/&quot;&gt;kits&lt;/a&gt;, including the &lt;a href=&quot;http://www.sparkfun.com/products/10334&quot;&gt;current one&lt;/a&gt;. There’s lots of other terrific projects in this &lt;a href=&quot;http://wp.moma.org/talk_to_me/&quot;&gt;exhibit&lt;/a&gt;, so if you’re thinking of being in New York City this year, plan a visit and &lt;a href=&quot;http://www.moma.org/visit/calendar/exhibitions/1080&quot;&gt;check us out at MoMA&lt;/a&gt;!&lt;/div&gt;</content:encoded>
	<dc:date>2011-07-07T14:35:12+00:00</dc:date>
	<dc:creator>Rob Faludi</dc:creator>
</item>
<item rdf:about="http://urbanhonking.com/ideasfordozens/?p=474">
	<title>Physical GIF Launches on Kickstarter</title>
	<link>http://urbanhonking.com/ideasfordozens/2011/07/05/physical-gif-launches-on-kickstarter/</link>
	<content:encoded>&lt;p&gt;
  I’m proud to announce the launch of &lt;a href=&quot;http://www.kickstarter.com/projects/gregab/physical-gif&quot;&gt;Physical GIF on Kickstarter&lt;/a&gt;. Physical GIF is a collaboration with &lt;a href=&quot;http://39forks.com&quot;&gt;Scott Wayne Indiana&lt;/a&gt; to turn animated GIFs into table top toys. We use a laser cutter and a strobe light to produce a kind of zoetrope from each animated GIF so you can watch it on your coffee table. Here’s our Kickstarter video which explains the whole process and shows you what they look like in action:
&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
For our Kickstarter campaign we have four main pledge levels. At $50 you get a Physical GIF along with everything you need to play it at home: the strobe, the plastic GIF disc and frames, and the hardware. You can choose from three designs that scott created, BMX Biker:
&lt;/p&gt;
&lt;p&gt;
  &lt;img src=&quot;http://itp.nyu.edu/~gab305/physicalgif.com/images/bmx.gif&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;Elephant-Rabbit Costume Party:&lt;/p&gt;
&lt;p&gt;
  &lt;img src=&quot;http://bootloaderblog.com/images/ElephantRabbit4KICKstarter.gif&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
  and New York Fourth of July:
&lt;/p&gt;
&lt;p&gt;
  &lt;img src=&quot;http://bootloaderblog.com/images/FireWorksSkylineFAST.gif&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
  For a $100 pledge, we’ll send you a kit with all three of these Physical GIFs.
&lt;/p&gt;
&lt;p&gt;
  We’ve also recruited four amazing animated GIF artists to design special limited edition Physical GIFs: &lt;a href=&quot;http://ryder-ripps.com/&quot;&gt;Ryder Ripps&lt;/a&gt;, &lt;a href=&quot;http://nullsleep.com&quot;&gt;Nullsleep, &lt;/a&gt;&lt;a href=&quot;http://saraludy.com&quot;&gt;Sara Ludy&lt;/a&gt;, and &lt;a href=&quot;http://www.sterlingcrispin.com/&quot;&gt;Sterling Crispin&lt;/a&gt;. More info about these artists &lt;a href=&quot;http://www.kickstarter.com/projects/gregab/physical-gif&quot;&gt;on our project page&lt;/a&gt; At $250, you can reserve one of the Physical GIFs from any of these artists. We’re going to be working with them to explore materials and techniques for turning their designs into Physical GIFs. We’re hoping that they explore some of the limitations and possibilities of this new medium. Each of the Physical GIFs they produce will come in a limited numbered edition with documentation from the artist.
&lt;/p&gt;
&lt;p&gt;
  And at the top pledge level, we’ll work with you directly to manufacture your own custom Physical GIF from your design. We’ve only made five of this reward available because we want to be able to spend as much time as it takes working with you to turn your animated GIF ideas into physical reality.
&lt;/p&gt;
&lt;p&gt;
  We’re incredibly excited about this project and can’t wait to see how people react to it. Head over to Kickstarter right now to give us some help: &lt;a href=&quot;http://kck.st/iWPm2w&quot;&gt;Physical GIF on Kickstarter&lt;/a&gt;. Thanks!&lt;/p&gt;</content:encoded>
	<dc:date>2011-07-05T13:45:59+00:00</dc:date>
	<dc:creator>Greg Borenstein</dc:creator>
</item>
<item rdf:about="http://aaronuhrmacher.com/?p=1405">
	<title>Bernie Mac: Christmas Special</title>
	<link>http://feedproxy.google.com/~r/aaronuhrmacher/~3/5Uj3LSsYbN0/</link>
	<content:encoded>Here's a spec script I wrote based on the characters from FOX's &quot;The Bernie Mac Show&quot;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/aaronuhrmacher?a=5Uj3LSsYbN0:_26yad-QV14:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/aaronuhrmacher?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/aaronuhrmacher?a=5Uj3LSsYbN0:_26yad-QV14:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/aaronuhrmacher?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/aaronuhrmacher/~4/5Uj3LSsYbN0&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2011-07-03T19:13:52+00:00</dc:date>
	<dc:creator>Aaron Uhrmacher</dc:creator>
</item>

</rdf:RDF>

