Dear PLT-Schemers,<div><br></div><div>You may have noticed a number of emails from my students at UMass Lowell. &nbsp;I had assigned a final project in our required &quot;Organization of Programming Languages&quot; course which is based on the SICP text. &nbsp;This is the first time that the course included a significant, independent project component, and I did encourage them to ask you for assistance.&nbsp;</div>
<div><br></div><div>I am happy to report that the projects were wildly successful. &nbsp;Students presented today, and some the highlights were:</div><div><br></div><div>* A stock visualization application in which users enter a stock symbol and date range at a web page. &nbsp;This is handed off to a Scheme servlet, which queries a Yahoo! financial service. &nbsp;Then Scheme generates an XML file containing the data, and this is transparently given back to the same web page and displayed as a live graph using Adobe Flex (<a href="http://www.cs.uml.edu/ecg/index.php/OrganizationProgrammingLanguagesFall2008/SchemeStock">http://www.cs.uml.edu/ecg/index.php/OrganizationProgrammingLanguagesFall2008/SchemeStock</a>)</div>
<div><br></div><div>* A Music Discovery web app with a similar architecture. &nbsp;The user enters artist or song search terms into a web form. &nbsp;This is handed off to a Scheme servlet, which searches music service RSS feeds and aggregates the resulting YouTube music videos into a web page presented to the user. The kicker is that the web page includes JavaScript code so that when one video finishes playing, the next one automatically starts, and you can have hours of continuous music from one query (<a href="http://www.cs.uml.edu/ecg/index.php/OrganizationProgrammingLanguagesFall2008/MusicDiscovery">http://www.cs.uml.edu/ecg/index.php/OrganizationProgrammingLanguagesFall2008/MusicDiscovery</a>)</div>
<div><br></div><div>* Scheme integrated into a C++ game engine, in which the front-end GUI is implemented in C++, but the game-character &quot;AI&quot; consists of Scheme procedures. &nbsp;In the student&#39;s live demo, changing a line of code in a resource file that the game auto-loads caused game characters to run different AI and behave differently (<a href="http://www.cs.uml.edu/ecg/index.php/OrganizationProgrammingLanguagesFall2008/Scheme-in-C-Game-Engine">http://www.cs.uml.edu/ecg/index.php/OrganizationProgrammingLanguagesFall2008/Scheme-in-C-Game-Engine</a>)</div>
<div><br></div><div>* A Scheme-based serial line API to the iRobot &quot;Create&quot; robot platform. &nbsp;All of the Create&#39;s motor and sensor APIs were exposed as simple Scheme procedures. &nbsp;(<a href="http://www.cs.uml.edu/ecg/index.php/OrganizationProgrammingLanguagesFall2008/IRobotCreateSchemeAPI">http://www.cs.uml.edu/ecg/index.php/OrganizationProgrammingLanguagesFall2008/IRobotCreateSchemeAPI</a>)</div>
<div><br></div><div>* A set of Scheme procedures for converting image-bitmaps into control commands for a 3D desktop engraver. &nbsp;After engraving the PLT-Scheme lambda logo, the final demo was an etching of the Last Supper in relief. &nbsp;The student who developed this also used higher-order procedures to generate depth-maps on the fly, as you might pass a lambda function to the Henderson painters to color a pixel based on the X,Y coordinate where it is to be drawn. (<a href="http://www.cs.uml.edu/ecg/index.php/OrganizationProgrammingLanguagesFall2008/DesktopReliefEngraving">http://www.cs.uml.edu/ecg/index.php/OrganizationProgrammingLanguagesFall2008/DesktopReliefEngraving</a>)</div>
<div><br></div><div>Overall, I was amazed not only with the creativity of the projects themselves, but the extend to which students integrated key ideas from functional programming into their project implementations. &nbsp;Many students used map and filter process data, and higher-order procedures across their code.</div>
<div><br></div><div>In a conversation with one student afterward, he noted that he had heard people talk about elegant code, but now he understood what that meant. &nbsp;This student had written the Create robot API, and employed a clever way of dealing with two-dozen-odd sensor packets that might come back from the robot. &nbsp;He created a hash map that keyed sensor type to a lambda function for processing the sensor data packet. When he got the raw packet back from the robot, he grabbed the lambda function, applied it to the packet, and voila, the actual sensor reading was produced. &nbsp;It was elegant. &nbsp;</div>
<div><br></div><div>The student also commented, &quot;Now I want to go back over all the code I have written in other languages over the past year and improve it.&quot;</div><div><br></div><div>This remarkable because this was far from the only student who had such an experience. &nbsp;Students really took the task seriously of using the functional approaches in their projects, and they succeeded, many of them brilliantly.</div>
<div><br></div><div>Thanks for your help over the semester and in the last couple of days with my students. &nbsp;I&#39;ll definitely be doing this again in the spring!</div><div><br></div><div>yours,</div><div>Fred Martin</div>
<div><br></div>