<snapdata remixID="8996038"><project name="Advanced_2" app="Snap! 5.1, http://snap.berkeley.edu" version="1"><notes></notes><thumbnail>data:image/png;base64,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</thumbnail><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" volume="100" pan="0" lines="round" ternary="true" codify="false" inheritance="false" sublistIDs="false" scheduled="false" id="1"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAOhUlEQVR4Xu3VwQkAAAjEMN1/abewn7jAQRC64wgQIECAAIF3gX1fNEiAAAECBAiMAHsCAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQIHLFxAWmhEwHPAAAAAElFTkSuQmCC</pentrails><costumes><list struct="atomic" id="2"></list></costumes><sounds><list struct="atomic" id="3"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites><sprite name="Sprite" idx="1" x="75" y="0" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="1" color="80,80,80,1" pen="tip" id="8"><costumes><list id="9"><item><costume name="alonzo(2)" center-x="45" center-y="60" image="data:image/png;base64,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" id="10"/></item></list></costumes><sounds><list struct="atomic" id="11"></list></sounds><blocks></blocks><variables></variables><scripts><script x="185" y="84"><block s="receiveGo"></block><block s="gotoXY"><l>0</l><l>0</l></block><block s="doStopThis"><l><option>all</option></l></block></script><script x="717" y="30"><block s="receiveKey"><l><option>space</option></l></block><block s="doSetVar"><l>finchList</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>count</l><l>1</l></block><block s="doRepeat"><l>60</l><script><block s="doAddToList"><custom-block s="Finch Y Acceleration"></custom-block><block var="finchList"/></block><block s="forward"><block s="reportProduct"><block s="reportListItem"><block var="count"/><block var="finchList"/></block><l>50</l></block></block><block s="doChangeVar"><l>count</l><l>1</l></block><block s="doWait"><l>.5</l></block></script></block></script><script x="149.000001" y="371.000001"><block s="doSayFor"><block s="reportListItem"><block var="count"/><block var="finchList"/></block><l>.5</l></block></script></scripts></sprite><watcher scope="Stage" s="getLastAnswer" style="normal" x="0.15625" y="1.7968751562500103" color="4,148,220" hidden="true"/><watcher scope="Sprite" s="getScale" style="normal" x="0.15625" y="2.1250001874999924" color="143,86,227" hidden="true"/><watcher var="practiceList" style="normal" x="68" y="166" color="243,118,29" hidden="true"/><watcher var="finchList" style="normal" x="17" y="22.000001999999995" color="243,118,29" extX="80" extY="70"/><watcher var="count" style="normal" x="372" y="29.00000399999999" color="243,118,29"/></sprites></stage><hidden></hidden><headers></headers><code></code><blocks><block-definition s="Say This %&apos;speech&apos;" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%txt">I am known by many names, but you may call me...Tim.</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>phrase</l></list><l>finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;var report = { message: "SPEAK", val: phrase};&#xD;chrome.runtime.sendMessage(finchAppID, report, function() {});</l></block><list><block var="speech"/></list></block></script></block-definition><block-definition s="Move Finch Left: %&apos;Left&apos; Right: %&apos;Right&apos;" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>left</l><l>right</l></list><l>finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;////////////////////////////////////////////////////////////////////////////////&#xD;// In order to avoid sending more messages than the app can handle, whenever we&#xD;// send a message we also save it in a persistent global variable. When the&#xD;// message is processed in the app, the callback checks if the global variable&#xD;// still matches what it was changed to. If it was, it deletes the global&#xD;// variable. Otherwise the message is resent with new data.&#xD;//&#xD;// When this block is called it checks if the global value has been set. If it&#xD;// has, it sends a message. Otherwise it just updates the value and lets the&#xD;// callback handle it.&#xD;&#xD;&#xD;// We can&apos;t run code beforehand to define values so we must check each block&#xD;// call if they are set.&#xD;if (window.birdbrain === undefined || window.birdbrain.moveSpeed === undefined) {&#xD;    window.birdbrain = window.birdbrain || {};&#xD;    window.birdbrain.moveSpeed = {&#xD;        // By attaching this function to a global variable, it is only&#xD;        // defined once instead of every time this block is called, improving&#xD;        // performance significantly.&#xD;        setMoveSpeed: function (speeds) {&#xD;            function callback() {&#xD;                // This array comparison is by reference instead of value.&#xD;                // This could mean false negatives if it&apos;s set to the same value, but these are uncommon and&#xD;                // the consequences are just a couple more messages sent. I do not think it is worth the&#xD;                // execution time and code complexity to do a proper value comparison.&#xD;                if (window.birdbrain.moveSpeed.speeds === speeds) {&#xD;                    delete window.birdbrain.moveSpeed.speeds;&#xD;                }&#xD;                else {&#xD;                    window.birdbrain.moveSpeed.setMoveSpeed(window.birdbrain.moveSpeed.speeds);&#xD;                }&#xD;            }&#xD;            var report = {&#xD;                message: "M".charCodeAt(0),&#xD;                leftDirection: speeds[0] &lt; 0 ? 1 : 0,&#xD;                leftSpeed: Math.abs(speeds[0]),&#xD;                rightDirection: speeds[1] &lt; 0 ? 1 : 0,&#xD;                rightSpeed: Math.abs(speeds[1]),&#xD;            };&#xD;            console.log(report);&#xD;            chrome.runtime.sendMessage(finchAppID, report, callback);&#xD;        }&#xD;    };&#xD;}&#xD;&#xD;// constrain n to the range [-255..255]&#xD;function constrain(n) {&#xD;    return Math.max(Math.min(n, 255), -255);&#xD;}&#xD;&#xD;var speeds = [constrain(Math.round(left * 2.55)), constrain(Math.round(right * 2.55))];&#xD;&#xD;if (window.birdbrain.moveSpeed.speeds === undefined) {&#xD;  window.birdbrain.moveSpeed.setMoveSpeed(speeds);&#xD;}&#xD;&#xD;window.birdbrain.moveSpeed.speeds = speeds;</l></block><list><block var="Left"/><block var="Right"/></list></block></script></block-definition><block-definition s="Stop Finch" type="command" category="motion"><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="Move Finch Left: %n Right: %n"><l>0</l><l>0</l></custom-block></script></block-definition><block-definition s="Finch LED R: %&apos;red&apos; G: %&apos;green&apos; B: %&apos;blue&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%n">0</input><input type="%n">50</input><input type="%n">0</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>red</l><l>green</l><l>blue</l></list><l>finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;////////////////////////////////////////////////////////////////////////////////&#xD;// In order to avoid sending more messages than the app can handle, whenever we&#xD;// send a message we also save it in a persistent global variable. When the&#xD;// message is processed in the app, the callback checks if the global variable&#xD;// still matches what it was changed to. If it was, it deletes the global&#xD;// variable. Otherwise the message is resent with new data.&#xD;//&#xD;// When this block is called it checks if the global value has been set. If it&#xD;// has, it sends a message. Otherwise it just updates the value and lets the&#xD;// callback handle it.&#xD;&#xD;&#xD;// We can&apos;t run code beforehand to define values so we must check each block&#xD;// call if they are set.&#xD;if (window.birdbrain === undefined || window.birdbrain.LED === undefined) {&#xD;    window.birdbrain = window.birdbrain || {};&#xD;    window.birdbrain.LED = {&#xD;        // By attaching this function to a global variable, it is only&#xD;        // defined once instead of every time this block is called, improving&#xD;        // performance significantly.&#xD;        setLED: function (values) {&#xD;            function callback() {&#xD;                // This array comparison is by reference instead of value.&#xD;                // This could mean false negatives if it&apos;s set to the same value, but these are uncommon and&#xD;                // the consequences are just a couple more messages sent. I do not think it is worth the&#xD;                // execution time and code complexity to do a proper value comparison.&#xD;                if (window.birdbrain.LED.values === values) {&#xD;                    delete window.birdbrain.LED.values;&#xD;                }&#xD;                else {&#xD;                    window.birdbrain.LED.setLED(window.birdbrain.LED.values);&#xD;                }&#xD;            }&#xD;            var report = {  message: "O".charCodeAt(0),&#xD;                            red: values[0],&#xD;                            green: values[1],&#xD;                            blue: values[2]&#xD;                         };&#xD;            console.log(report);&#xD;            chrome.runtime.sendMessage(finchAppID, report, callback);&#xD;        }&#xD;    };&#xD;}&#xD;&#xD;// constrain n to the range [0..255]&#xD;function constrain(n) {&#xD;    return Math.max(Math.min(n, 255), 0);&#xD;}&#xD;&#xD;var values = [constrain(Math.round(red * 2.55)), constrain(Math.round(green * 2.55)), constrain(Math.round(blue * 2.55))];&#xD;&#xD;if (window.birdbrain.LED.values === undefined) {&#xD;  window.birdbrain.LED.setLED(values);&#xD;}&#xD;&#xD;window.birdbrain.LED.values = values;</l></block><list><block var="red"/><block var="green"/><block var="blue"/></list></block></script></block-definition><block-definition s="Finch Buzzer %&apos;frequency&apos; Hz %&apos;duration&apos; ms" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%n">440</input><input type="%n">500</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>freq</l><l>time</l></list><l>finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;////////////////////////////////////////////////////////////////////////////////&#xD;// In order to avoid sending more messages than the app can handle, whenever we&#xD;// send a message we also save it in a persistent global variable. When the&#xD;// message is processed in the app, the callback checks if the global variable&#xD;// still matches what it was changed to. If it was, it deletes the global&#xD;// variable. Otherwise the message is resent with new data.&#xD;//&#xD;// When this block is called it checks if the global value has been set. If it&#xD;// has, it sends a message. Otherwise it just updates the value and lets the&#xD;// callback handle it.&#xD;&#xD;&#xD;// We can&apos;t run code beforehand to define values so we must check each block&#xD;// call if they are set.&#xD;if (window.birdbrain === undefined || window.birdbrain.buzzer === undefined) {&#xD;    window.birdbrain = window.birdbrain || {};&#xD;    window.birdbrain.buzzer = {&#xD;        // By attaching this function to a global variable, it is only&#xD;        // defined once instead of every time this block is called, improving&#xD;        // performance significantly.&#xD;        setBuzzer: function (value) {&#xD;            function callback() {&#xD;                // This object comparison is by reference instead of value.&#xD;                // This could mean false negatives if it&apos;s set to the same value, but these are uncommon and&#xD;                // the consequences are just a couple more messages sent. I do not think it is worth the&#xD;                // execution time and code complexity to do a proper value comparison.&#xD;                if (window.birdbrain.buzzer.value === value) {&#xD;                    delete window.birdbrain.buzzer.value;&#xD;                }&#xD;                else {&#xD;                    window.birdbrain.buzzer.setBuzzer(window.birdbrain.buzzer.value);&#xD;                }&#xD;            }&#xD;            var report = {&#xD;                message: "B".charCodeAt(0),&#xD;                timeHigh: value.time &gt;&gt; 8,  // Since the report must be in bytes&#xD;                timeLow: value.time &amp; 0xFF, // and these values are bigger than a byte&#xD;                freqHigh: value.freq &gt;&gt; 8,  // they are split into two bytes&#xD;                freqLow: value.freq &amp; 0xFF&#xD;            };&#xD;            chrome.runtime.sendMessage(finchAppID, report, callback);&#xD;        }&#xD;    };&#xD;}&#xD;&#xD;// constrain n to the range [0..65535]&#xD;function constrain(n) {&#xD;    return Math.max(Math.min(n, 0xFFFF), 0);&#xD;}&#xD;&#xD;var value = {&#xD;    freq: constrain(Math.round(freq)),&#xD;    time: constrain(Math.round(time))&#xD;};&#xD;&#xD;if (window.birdbrain.buzzer.value === undefined) {&#xD;    window.birdbrain.buzzer.setBuzzer(value);&#xD;}&#xD;&#xD;window.birdbrain.buzzer.value = value;</l></block><list><block var="frequency"/><block var="duration"/></list></block></script></block-definition><block-definition s="Finch Buzz+Wait %&apos;frequency&apos; Hz %&apos;duration&apos; ms" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%n">440</input><input type="%n">500</input></inputs><script><custom-block s="Finch Buzzer %n Hz %n ms"><block var="frequency"/><block var="duration"/></custom-block><block s="doWait"><block s="reportQuotient"><block var="duration"/><l>1000</l></block></block></script></block-definition><block-definition s="Finch Left Light Sensor" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>var sensorvalue = Number.MAX_VALUE;&#xD;&#xD;finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;&#xD;var myself = this;&#xD;&#xD;&#xD;&#xD;function getSensorData(callback) {&#xD;&#xD;    var getValue = function(response) {&#xD;&#xD;        sensorvalue = response.lights[0];&#xD;        callback(sensorvalue);&#xD;&#xD;    };&#xD;&#xD;    console.log("sending message to chrome");&#xD;&#xD;    chrome.runtime.sendMessage(finchAppID, {&#xD;&#xD;        message: "POLL"&#xD;&#xD;    }, getValue);&#xD;&#xD;    console.log("sent message to chrome");&#xD;&#xD;};&#xD;&#xD;&#xD;&#xD;function processValue(sensorvalue) {&#xD;&#xD;    console.log("sensor value has been set: ", sensorvalue);&#xD;&#xD;    myself.finchDummy1 = sensorvalue;&#xD;};&#xD;&#xD;&#xD;getSensorData(processValue);&#xD;</l></block><list></list></block><block s="doWait"><l>0.01</l></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return this.finchDummy1;</l></block><list></list></block></block></script></block-definition><block-definition s="Finch Right Light Sensor" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>var sensorvalue = Number.MAX_VALUE;&#xD;&#xD;finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;&#xD;var myself = this;&#xD;&#xD;&#xD;&#xD;function getSensorData(callback) {&#xD;&#xD;    var getValue = function(response) {&#xD;&#xD;        sensorvalue = response.lights[1];&#xD;        callback(sensorvalue);&#xD;&#xD;    };&#xD;&#xD;&#xD;    console.log("sending message to chrome");&#xD;&#xD;    chrome.runtime.sendMessage(finchAppID, {&#xD;&#xD;        message: "POLL"&#xD;&#xD;    }, getValue);&#xD;&#xD;    console.log("sent message to chrome");&#xD;&#xD;};&#xD;&#xD;&#xD;&#xD;function processValue(sensorvalue) {&#xD;&#xD;    console.log("sensor value has been set: ", sensorvalue);&#xD;&#xD;    myself.finchDummy2 = sensorvalue;&#xD;};&#xD;&#xD;&#xD;getSensorData(processValue);&#xD;</l></block><list></list></block><block s="doWait"><l>0.01</l></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return this.finchDummy2;</l></block><list></list></block></block></script></block-definition><block-definition s="Finch Light Sensors" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><custom-block s="Finch Left Light Sensor"></custom-block><custom-block s="Finch Right Light Sensor"></custom-block></list></block></block></script></block-definition><block-definition s="Finch X Acceleration" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>var sensorvalue = Number.MAX_VALUE;&#xD;&#xD;finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;&#xD;var myself = this;&#xD;&#xD;&#xD;&#xD;function getSensorData(callback) {&#xD;&#xD;    var getValue = function(response) {&#xD;&#xD;        sensorvalue = response.acceleration[0];&#xD;        callback(sensorvalue);&#xD;&#xD;    };&#xD;&#xD;&#xD;    console.log("sending message to chrome");&#xD;&#xD;    chrome.runtime.sendMessage(finchAppID, {&#xD;&#xD;        message: "POLL"&#xD;&#xD;    }, getValue);&#xD;&#xD;    console.log("sent message to chrome");&#xD;&#xD;};&#xD;&#xD;&#xD;&#xD;function processValue(sensorvalue) {&#xD;&#xD;    console.log("sensor value has been set: ", sensorvalue);&#xD;&#xD;    myself.finchDummy3 = sensorvalue;&#xD;};&#xD;&#xD;&#xD;getSensorData(processValue);&#xD;</l></block><list></list></block><block s="doWait"><l>0.01</l></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return this.finchDummy3;</l></block><list></list></block></block></script></block-definition><block-definition s="Finch Y Acceleration" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>var sensorvalue = Number.MAX_VALUE;&#xD;&#xD;finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;&#xD;var myself = this;&#xD;&#xD;&#xD;&#xD;function getSensorData(callback) {&#xD;&#xD;    var getValue = function(response) {&#xD;&#xD;        sensorvalue = response.acceleration[1];&#xD;        callback(sensorvalue);&#xD;&#xD;    };&#xD;&#xD;&#xD;    console.log("sending message to chrome");&#xD;&#xD;    chrome.runtime.sendMessage(finchAppID, {&#xD;&#xD;        message: "POLL"&#xD;&#xD;    }, getValue);&#xD;&#xD;    console.log("sent message to chrome");&#xD;&#xD;};&#xD;&#xD;&#xD;&#xD;function processValue(sensorvalue) {&#xD;&#xD;    console.log("sensor value has been set: ", sensorvalue);&#xD;&#xD;    myself.finchDummy4 = sensorvalue;&#xD;};&#xD;&#xD;&#xD;getSensorData(processValue);&#xD;</l></block><list></list></block><block s="doWait"><l>0.01</l></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return this.finchDummy4;</l></block><list></list></block></block></script></block-definition><block-definition s="Finch Z Acceleration" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>var sensorvalue = Number.MAX_VALUE;&#xD;&#xD;finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;&#xD;var myself = this;&#xD;&#xD;&#xD;&#xD;function getSensorData(callback) {&#xD;&#xD;    var getValue = function(response) {&#xD;&#xD;        sensorvalue = response.acceleration[2];&#xD;        callback(sensorvalue);&#xD;&#xD;    };&#xD;&#xD;&#xD;    console.log("sending message to chrome");&#xD;&#xD;    chrome.runtime.sendMessage(finchAppID, {&#xD;&#xD;        message: "POLL"&#xD;&#xD;    }, getValue);&#xD;&#xD;    console.log("sent message to chrome");&#xD;&#xD;};&#xD;&#xD;&#xD;&#xD;function processValue(sensorvalue) {&#xD;&#xD;    console.log("sensor value has been set: ", sensorvalue);&#xD;&#xD;    myself.finchDummy5 = sensorvalue;&#xD;};&#xD;&#xD;&#xD;getSensorData(processValue);&#xD;</l></block><list></list></block><block s="doWait"><l>0.01</l></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return this.finchDummy5;</l></block><list></list></block></block></script></block-definition><block-definition s="Finch Orientation" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>var acceleration = Array(3);&#xD;&#xD;finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;&#xD;var myself = this;&#xD;&#xD;&#xD;&#xD;function getSensorData(callback) {&#xD;&#xD;    var getValue = function(response) {&#xD;        acceleration = response.acceleration;&#xD;        callback(acceleration);&#xD;    };&#xD;&#xD;    console.log("sending message to chrome");&#xD;&#xD;    chrome.runtime.sendMessage(finchAppID, {&#xD;&#xD;        message: "POLL"&#xD;&#xD;    }, getValue);&#xD;&#xD;    console.log("sent message to chrome");&#xD;&#xD;};&#xD;&#xD;&#xD;&#xD;function processValue(sensorvalue) {&#xD;    var orientation;&#xD;&#xD;        if(acceleration[0] &gt; -0.5 &amp;&amp; acceleration[0] &lt; 0.5 &amp;&amp; acceleration[1] &lt; 0.5 &amp;&amp; acceleration[1] &gt; -0.5 &amp;&amp; acceleration[2] &gt; 0.65 &amp;&amp; acceleration[2] &lt; 1.5)&#xD;&#xD;            orientation =  "level";&#xD;&#xD;        else if(acceleration[0] &gt; -0.5 &amp;&amp; acceleration[0] &lt; 0.5 &amp;&amp; acceleration[1] &lt; 0.5 &amp;&amp; acceleration[1] &gt; -0.5 &amp;&amp; acceleration[2] &gt; -1.5 &amp;&amp; acceleration[2] &lt; -0.65)&#xD;&#xD;            orientation = "upside down";&#xD;&#xD;        else if(acceleration[0] &lt; 1.5 &amp;&amp; acceleration[0] &gt; 0.8 &amp;&amp; acceleration[1] &gt;-0.3 &amp;&amp; acceleration[1] &lt; 0.3 &amp;&amp; acceleration[2] &gt; -0.3 &amp;&amp; acceleration[2] &lt; 0.3)&#xD;&#xD;            orientation = "beak down";&#xD;&#xD;        else if(acceleration[0] &lt; -0.8 &amp;&amp; acceleration[0] &gt; -1.5 &amp;&amp; acceleration[1] &gt;-0.3 &amp;&amp; acceleration[1] &lt; 0.3 &amp;&amp; acceleration[2] &gt; -0.3 &amp;&amp; acceleration[2] &lt; 0.3)&#xD;&#xD;            orientation = "beak up";&#xD;&#xD;        else if(acceleration[0] &gt; -0.5 &amp;&amp; acceleration[0] &lt; 0.5 &amp;&amp; acceleration[1] &gt; 0.7 &amp;&amp; acceleration[1] &lt; 1.5 &amp;&amp; acceleration[2] &gt; -0.5 &amp;&amp; acceleration[2] &lt; 0.5)&#xD;&#xD;            orientation = "left wing down";&#xD;&#xD;        else if(acceleration[0] &gt; -0.5 &amp;&amp; acceleration[0] &lt; 0.5 &amp;&amp; acceleration[1] &gt; -1.5 &amp;&amp; acceleration[1] &lt; -0.7 &amp;&amp; acceleration[2] &gt; -0.5 &amp;&amp; acceleration[2] &lt; 0.5)&#xD;&#xD;            orientation = "right wing down";&#xD;&#xD;        else&#xD;&#xD;            orientation = "in between";&#xD;    console.log("sensor value has been set: ", orientation);&#xD;&#xD;    myself.finchDummy6 = orientation;&#xD;};&#xD;&#xD;&#xD;getSensorData(processValue);&#xD;</l></block><list></list></block><block s="doWait"><l>0.01</l></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return this.finchDummy6;</l></block><list></list></block></block></script></block-definition><block-definition s="Finch Accelerations" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><custom-block s="Finch X Acceleration"></custom-block><custom-block s="Finch Y Acceleration"></custom-block><custom-block s="Finch Z Acceleration"></custom-block></list></block></block></script></block-definition><block-definition s="Finch Left Obstacle" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>var sensorvalue = Number.MAX_VALUE;&#xD;&#xD;finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;&#xD;var myself = this;&#xD;&#xD;&#xD;&#xD;function getSensorData(callback) {&#xD;&#xD;    var getValue = function(response) {&#xD;&#xD;        sensorvalue = response.obstacles[0];&#xD;        callback(sensorvalue);&#xD;&#xD;    };&#xD;&#xD;    console.log("sending message to chrome");&#xD;&#xD;    chrome.runtime.sendMessage(finchAppID, {&#xD;&#xD;        message: "POLL"&#xD;&#xD;    }, getValue);&#xD;&#xD;    console.log("sent message to chrome");&#xD;&#xD;};&#xD;&#xD;&#xD;&#xD;function processValue(sensorvalue) {&#xD;&#xD;    var pred = (sensorvalue !== 0);&#xD;    console.log("sensor value has been set: ", pred);&#xD;&#xD;    myself.finchDummy7 = pred;&#xD;};&#xD;&#xD;&#xD;getSensorData(processValue);&#xD;</l></block><list></list></block><block s="doWait"><l>0.01</l></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return this.finchDummy7;</l></block><list></list></block></block></script></block-definition><block-definition s="Finch Right Obstacle" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>var sensorvalue = Number.MAX_VALUE;&#xD;&#xD;finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;&#xD;var myself = this;&#xD;&#xD;&#xD;&#xD;function getSensorData(callback) {&#xD;&#xD;    var getValue = function(response) {&#xD;&#xD;        sensorvalue = response.obstacles[1];&#xD;        callback(sensorvalue);&#xD;&#xD;    };&#xD;&#xD;    console.log("sending message to chrome");&#xD;&#xD;    chrome.runtime.sendMessage(finchAppID, {&#xD;&#xD;        message: "POLL"&#xD;&#xD;    }, getValue);&#xD;&#xD;    console.log("sent message to chrome");&#xD;&#xD;};&#xD;&#xD;&#xD;&#xD;function processValue(sensorvalue) {&#xD;&#xD;    var pred = (sensorvalue !== 0);&#xD;    console.log("sensor value has been set: ", pred);&#xD;&#xD;    myself.finchDummy8 = pred;&#xD;};&#xD;&#xD;&#xD;getSensorData(processValue);&#xD;</l></block><list></list></block><block s="doWait"><l>0.05</l></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return this.finchDummy8;</l></block><list></list></block></block></script></block-definition><block-definition s="Finch Obstacles" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><custom-block s="Finch Left Obstacle"></custom-block><custom-block s="Finch Right Obstacle"></custom-block></list></block></block></script></block-definition><block-definition s="Finch Temperature Celcius" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>var sensorvalue = Number.MAX_VALUE;&#xD;&#xD;finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;&#xD;var myself = this;&#xD;&#xD;&#xD;&#xD;function getSensorData(callback) {&#xD;&#xD;    var getValue = function(response) {&#xD;&#xD;        sensorvalue = response.temperature;&#xD;        callback(sensorvalue);&#xD;&#xD;    };&#xD;&#xD;    console.log("sending message to chrome");&#xD;&#xD;    chrome.runtime.sendMessage(finchAppID, {&#xD;&#xD;        message: "POLL"&#xD;&#xD;    }, getValue);&#xD;&#xD;    console.log("sent message to chrome");&#xD;&#xD;};&#xD;&#xD;&#xD;&#xD;function processValue(sensorvalue) {&#xD;&#xD;    &#xD;    console.log("sensor value has been set: ", sensorvalue);&#xD;&#xD;    myself.finchDummy9 = sensorvalue;&#xD;};&#xD;&#xD;&#xD;getSensorData(processValue);&#xD;</l></block><list></list></block><block s="doWait"><l>0.01</l></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return this.finchDummy9;</l></block><list></list></block></block></script></block-definition><block-definition s="Finch Temperature Fahrenheit" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportSum"><block s="reportProduct"><l>1.8</l><custom-block s="Finch Temperature Celcius"></custom-block></block><l>32</l></block></block></script></block-definition></blocks><variables><variable name="practiceList"><list struct="atomic" id="381">2,3,4</list></variable><variable name="finchList"><list struct="atomic" id="382">-0.1,0.1,0.6,0.7,0,-0.7,-0.9,-0.8,-0.8,-0.5,0,0.5,0.7,0.8,0.8,0.8,0.2,-0.6,-0.6,-0.1,-0.3,0.2,-0.4,-0.3,-0.6,-0.7,-0.7,-0.7,-0.7,-0.8,-0.7,0,0.8,0.8,1,0.9,1,1.1,0.9,-0.6,-0.7,0.1,0.9,0.9,0.3,-0.1,0,0,0,0,0,-0.1,-0.1,0,0,0,0,0,0,0</list></variable><variable name="count"><l>61</l></variable></variables></project><media name="Advanced_2" app="Snap! 5.1, http://snap.berkeley.edu" version="1"></media></snapdata>