<?xml version="1.0"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>The concurrency.cc Blog</title>
    <link>http://concurrency.cc/</link>
    <atom:link href="http://concurrency.cc/rss.xml" rel="self" type="application/rss+xml" />
    <description>Parallel Programming for Tiny Computers</description>
    <language>en-us</language>
    <pubDate>Mon, 29 Apr 2013 18:50:15 -0700</pubDate>
    <lastBuildDate>Mon, 29 Apr 2013 18:50:15 -0700</lastBuildDate>

    
    <item>
      <title>Semester Coming to an End</title>
      <link>http://concurrency.cc/2012/11/28/berea-semester-closing.html</link>
      <pubDate>Wed, 28 Nov 2012 00:00:00 -0800</pubDate>
      <author>Chad Peruggia, Renaldo Pierre-Louis</author>
      <guid>http://concurrency.cc/2012/11/28/berea-semester-closing</guid>
      <description>&lt;h2 id='concluding_the_semester'&gt;Concluding the Semester&lt;/h2&gt;

&lt;p&gt;This semester has been full of headaches and annoyances, but after much head banging and hard work we were able to accomplish minor goals. Although we didn&amp;#8217;t accomplish everything we had wanted to, we feel that the progress we made was significant for the time we had. We took pre exsisting python code, rewrote it into ruby follwing OOD, organized it, heavily commented it, as well as fixed the fishtailing issue that taking place with the old code.&lt;/p&gt;

&lt;p&gt;With the progress we made obtaining level flight without the dolphin kicks that were previously present, the next step of GPS waypoints is obtainable and the code can be transfered safely to occam-pi and placed on a physical device. We feel that these are the next logical steps for the project.&lt;/p&gt;

&lt;h2 id='goals'&gt;Goals&lt;/h2&gt;

&lt;p&gt;We have a week left of class, and we would like to try and tie in our heading into our pitch so it can turn as well as change altitude at the same time. If we can accomplish this, the plane will behave as a &amp;#8220;real&amp;#8221; plane flies. We are unsure if we can accomplish these goals with such a short period of time, but its worth a try.&lt;/p&gt;

&lt;h2 id='did_you_know'&gt;Did You know?&lt;/h2&gt;

&lt;p&gt;There is now a robot, called the HyTAQ hybrid that can travel by air and land! Its pretty cool.&lt;/p&gt;

&lt;p&gt;Please look here to see the video and article.&lt;/p&gt;

&lt;p&gt;http://www.engadget.com/2012/11/28/hytaq-hybrid-quadrotor-robot-travels-by-air-and-land/&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Success ? Maybe so! </title>
      <link>http://concurrency.cc/2012/11/19/berea-success-maybe.html</link>
      <pubDate>Mon, 19 Nov 2012 00:00:00 -0800</pubDate>
      <author>Chad Peruggia , Renaldo Pierre-Louis</author>
      <guid>http://concurrency.cc/2012/11/19/berea-success-maybe</guid>
      <description>&lt;h2 id='updates'&gt;Updates&lt;/h2&gt;

&lt;p&gt;So after our meeting with Dr. Jadud, we found that we needed to incorporate a rate of climb to control our pitch. Today we started on trying to implement this, and we feel that we have succeeded! Our plane is able to obtain our desired alititude (+-25 ft). This is a major breakthrough for us because we haven&amp;#8217;t been able to obtain such success yet. We were able to test decreasing and increasing altitude and all worked as desired. Although it does go down a bit fast, it doesn&amp;#8217;t fall out of control, and everything went well.&lt;/p&gt;

&lt;h2 id='whats_next'&gt;Whats next?&lt;/h2&gt;

&lt;p&gt;Our next goal is to fine tune our controls a bit more, and then try to implement GPS. Although we only have 2 weeks of class left we are setting high goals to motivate ourselves, I mean who else would go to class till midnight on their own?&lt;/p&gt;

&lt;h2 id='did_you_know'&gt;Did You know?&lt;/h2&gt;

&lt;p&gt;Thanksgiving fact! Why is it always on the last Thursday of November?&lt;/p&gt;

&lt;p&gt;Abraham Lincoln issued a &amp;#8216;Thanksgiving Proclamation&amp;#8217; on third October 1863 and officially set aside the last Thursday of November as the national day for Thanksgiving.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Analyzing the ArduPilot</title>
      <link>http://concurrency.cc/2012/11/12/berea-ArduPilot-Analysis.html</link>
      <pubDate>Mon, 12 Nov 2012 00:00:00 -0800</pubDate>
      <author>Renaldo Pierre- Louis , Chad Peruggia</author>
      <guid>http://concurrency.cc/2012/11/12/berea-ArduPilot-Analysis</guid>
      <description>&lt;h2 id='update'&gt;Update&lt;/h2&gt;

&lt;p&gt;We have decided to go through our code and compare it to one that is known to work, the ArduPilot. Since we have known issues with our pitch controller, we decided to look there. At first we were confused, as this is a rather large program with many files, and we had to figure out where variables were coming from and where they were being set. We had to understand the parameters of the functions before we can figure out how the functions work.&lt;/p&gt;

&lt;p&gt;About an hour later, we feel like we have a good understanding of how they work and where we went wrong.&lt;/p&gt;

&lt;h3 id='our_errors'&gt;Our Errors&lt;/h3&gt;

&lt;p&gt;Currently our Pitch PID is not using the constraints to properly set which is what is causing our plane to stall when changing altitudes. We have come to the realization that our PID is returning the value that is similar to the contrain value mentioned in the psudocode above. If we send the values that we are currenlty obtaining to a PID, we might be able to achive our desired outcome.&lt;/p&gt;

&lt;p&gt;The biggest difference between our approach and the approach of the Ardui Piolot is the use of a timing method. We need to figure out how to implement this into our Ruby scripts.&lt;/p&gt;

&lt;p&gt;Once we cal the Pitch PID and the throttle PID, we can send these commands to the plane and it should fly as desired&amp;#8230;. hopefully.&lt;/p&gt;

&lt;h2 id='did_you_know'&gt;Did You Know&lt;/h2&gt;

&lt;p&gt;That we didn&amp;#8217;t physically meet for class today? But we used teamViewer to have a video meeting and shared our desktop!! HOW AWESOME!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Rewrite Completed (Sort of)</title>
      <link>http://concurrency.cc/2012/10/31/berea-rewrite-complete.html</link>
      <pubDate>Wed, 31 Oct 2012 00:00:00 -0700</pubDate>
      <author>Renaldo Pierre- Louis , Chad Peruggia</author>
      <guid>http://concurrency.cc/2012/10/31/berea-rewrite-complete</guid>
      <description>&lt;h2 id='updates'&gt;Updates&lt;/h2&gt;

&lt;p&gt;We have finished our rewrite of the old python control to our ruby class model. Everything seems to work, but there is something wrong with our Pitch controller. We can&amp;#8217;t seem to figure it out. Our plane flies and doesn&amp;#8217;t crash, but it doesn&amp;#8217;t change altitude as we desire. The plane cannot descend, it simply falls when we try to do this, but when it needs to go back up, it works as desired. We have a bug in our algorithm, and we need to fix it.&lt;/p&gt;

&lt;h3 id='small_victory'&gt;SMALL VICTORY!&lt;/h3&gt;

&lt;p&gt;Although it might not seem like much, this was a pretty large step forward for us, and we are proud of our progress so far. We wish we could&amp;#8217;ve gotten more done at this point, but we are moving at a good pace, and hopefully we can start to get our GPS working before Thanksgiving break.&lt;/p&gt;

&lt;h2 id='did_you_know'&gt;Did You Know?&lt;/h2&gt;

&lt;p&gt;That the pitch levels are reverse of what you would think? A positive pitch means the plane is going down, and a negative pitch means the plane will ascend.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Python to Ruby Continued</title>
      <link>http://concurrency.cc/2012/10/29/berea-python-to-ruby.html</link>
      <pubDate>Mon, 29 Oct 2012 00:00:00 -0700</pubDate>
      <author>Renaldo Pierre-Louis, Chad Peruggia</author>
      <guid>http://concurrency.cc/2012/10/29/berea-python-to-ruby</guid>
      <description>&lt;h2 id='current_progress'&gt;Current Progress&lt;/h2&gt;

&lt;p&gt;We have continued our desire to rewrite past code from python to ruby, and we have the PID fully rewritten, as well as a class written for the controls of the plane. We did make slight changes to the structure of the code, as well as a plan to fix the elevation change.&lt;/p&gt;

&lt;h3 id='new_elevation_controller'&gt;New Elevation Controller&lt;/h3&gt;

&lt;p&gt;We are planning to change the elevation of the plane by using a proportional control method. The method itself will take the current altitude from the desired altitude, and we convert it to a number that we can use to adjust the pitch. We refer to this value as the desired pitch. We have a max pitch to prevent the plane from going out of control, and this value is used in the pitch PID.&lt;/p&gt;

&lt;p&gt;We feel that this will give the plane a more realistic and faster accent / decent to desired altitudes.&lt;/p&gt;

&lt;h2 id='complications'&gt;Complications&lt;/h2&gt;

&lt;p&gt;We ran into a small error when converting the Python to Ruby due to syntax differences. We were missing and end statement, and we couldn&amp;#8217;t figure out why. This was causing errors with our class functions when we tried to call them , since the methods were being created in an If / Else statement. Once we found this error, which took forever, it was smooth sailing to get the code to run.&lt;/p&gt;

&lt;h2 id='whats_next'&gt;Whats Next&lt;/h2&gt;

&lt;p&gt;In order to finish in time, we figured we need to meet more during the semester since we need access to the simulator. We are discussing these plans, and something will be worked out soon.&lt;/p&gt;

&lt;p&gt;Our next step in our development plan is to finish getting the ruby working, then we plan to try and implement the GPS, but we are unsure due to time constraints.&lt;/p&gt;

&lt;h2 id='did_you_know'&gt;Did You Know?&lt;/h2&gt;

&lt;p&gt;We don&amp;#8217;t have anything, since we don&amp;#8217;t know anything either to share!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Setting the Pitch</title>
      <link>http://concurrency.cc/2012/10/24/berea-setting-the-pitch.html</link>
      <pubDate>Wed, 24 Oct 2012 00:00:00 -0700</pubDate>
      <author>Chad Peruggia , Renaldo Pierre-Louis</author>
      <guid>http://concurrency.cc/2012/10/24/berea-setting-the-pitch</guid>
      <description>&lt;h2 id='discoveries'&gt;Discoveries&lt;/h2&gt;

&lt;h3 id='previous_pid_issues'&gt;Previous PID Issues&lt;/h3&gt;

&lt;p&gt;So, we previously explained that the current autopilot code would &amp;#8220;fish-tail&amp;#8221; its way up to the desired altitude. Today, we believed that we found out why it was behaving in such ways. Initially, we researched and brainstormed to gain a better understanding how this PID thing really worked. After reading a couple of papers and discussing them, we arrived to the understanding that what we needed to control was the Constant multipliers in the PID controllers.&lt;/p&gt;

&lt;p&gt;Consequently we altered values being passed to the PID class to see the effect it would have on the flight. Miraculously, decreasing the P constant from 0.38 to 0.15 resulted in the plane making a smoother change in altitude (no fish-tailing). Yay!!!&lt;/p&gt;

&lt;p&gt;However, upon further discussion, we came to the conclusion that this was not enough and could be done more efficiently. The plane was taking an eternity to climb the desired altitude since the pitch was only being adjusted by really small values.&lt;/p&gt;

&lt;p&gt;The behavior that we would like is to have a steep ascent or descent that would decrease as we approach the desired value. So, we investigated more.&lt;/p&gt;

&lt;h3 id='pitch_and_altitude'&gt;Pitch and Altitude&lt;/h3&gt;

&lt;p&gt;Since pitch and altitude are directly related, we believe it to be a great idea if the code reflects this. At the moment, it does not.&lt;/p&gt;

&lt;h2 id='plans'&gt;Plans&lt;/h2&gt;

&lt;p&gt;We plan to try and use the pitch to figure out the angle of which the plane is ascending / descending, and compute the change in vertical distance based on the velocity of the plane. We will then be able to adjust the pitch accordingly as time changes to obtain the desired altitude. We feel that if we eliminate the PID in regards to Pitch and altitude, and use simple math, we will have more control over how the plane is reacting to the changes. The black box method here does not seem to be ideal.&lt;/p&gt;

&lt;h2 id='did_you_know'&gt;Did You Know?&lt;/h2&gt;

&lt;p&gt;That in a PID controller, the D, or the derivative responds poorly to noise in the data and can effect the controller greatly. That is why many PID&amp;#8217;s don&amp;#8217;t use the D, they are simply referred to as PI&amp;#8217;s.&lt;/p&gt;

&lt;p&gt;Renaldo likes pizza.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Ruby Rewrite PID</title>
      <link>http://concurrency.cc/2012/10/22/berea-ruby-rewrite-cont.html</link>
      <pubDate>Mon, 22 Oct 2012 00:00:00 -0700</pubDate>
      <author>Renaldo Pierre-Louis, Chad Peruggia</author>
      <guid>http://concurrency.cc/2012/10/22/berea-ruby-rewrite-cont</guid>
      <description>&lt;h2 id='rewriting_is_fun'&gt;Rewriting is FUN!&lt;/h2&gt;

&lt;p&gt;We have continued our progress into rewriting the old python scripts into ruby following our object model. We have started to try and decipher the PID controller and how it is interacting with the data from the simulator, some of it makes sense, parts of it don&amp;#8217;t, mostly what a set_point is. We can&amp;#8217;t seem to figure out what this is, or what its purpose is, or why it is always 0 to start.&lt;/p&gt;

&lt;p&gt;Due to this, we decided to give ourselves homework, yes you read that correct. We are going to do some more research into PID&amp;#8217;s and how they work, then we will attempt to plan out our PID regarding the plane&amp;#8217;s heading. This should give us a head start into our class time on Wednesday.&lt;/p&gt;

&lt;h2 id='challenges'&gt;Challenges&lt;/h2&gt;

&lt;p&gt;As previously stated, we can&amp;#8217;t figure out what the set_point is or its purpose. This is a small challenge, but it is important that we understand all aspects of these controls before we move forward with our plans. Once we grasp PID&amp;#8217;s and how they work, we should make steady progress. We plan to overcome these challenges via homework and personal research.&lt;/p&gt;

&lt;h2 id='did_you_know'&gt;Did You Know?&lt;/h2&gt;

&lt;p&gt;That &lt;em&gt;self&lt;/em&gt; is needed in python and not ruby! This might not seem like much, but saving all that time from that four letter word can add up to minutes!&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Ruby:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='k'&gt;class&lt;/span&gt; &lt;span class='n'&gt;myClass&lt;/span&gt;
    &lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='nf'&gt;myFunc&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nb'&gt;name&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
        &lt;span class='vi'&gt;@name&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nb'&gt;name&lt;/span&gt;
    &lt;span class='k'&gt;end&lt;/span&gt;
&lt;span class='k'&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Python:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='python'&gt;&lt;span class='k'&gt;class&lt;/span&gt; &lt;span class='nc'&gt;myClass&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt;
    &lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='nf'&gt;myFunc&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='bp'&gt;self&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;name&lt;/span&gt;&lt;span class='p'&gt;):&lt;/span&gt;
        &lt;span class='bp'&gt;self&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;name&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;name&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;For more information read &lt;a href='http://stackoverflow.com/questions/2709821/python-self-explained'&gt;here&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Ruby Re-Write</title>
      <link>http://concurrency.cc/2012/10/15/berea-ruby-rewrite.html</link>
      <pubDate>Mon, 15 Oct 2012 00:00:00 -0700</pubDate>
      <author>Chad Peruggia , Renaldo Pierre-Louis</author>
      <guid>http://concurrency.cc/2012/10/15/berea-ruby-rewrite</guid>
      <description>&lt;p&gt;We have decided to re-write the old code regarding auto-pilot in Ruby. Today was our first day actually coding in regards to this project, so it felt nice to see that we are moving forward with our goals. We decided to re-write the old code so we can have a better understanding of how it worked, and then address the issue of the dolphin tailing when changing altitude.&lt;/p&gt;

&lt;h2 id='current_progress'&gt;Current Progress&lt;/h2&gt;

&lt;p&gt;We have written the code so far in OOD, where prior it was done functionally. We feel that this will give us, as well as future extensions of the project a more maintainable code base, which is ideal for research projects.&lt;/p&gt;

&lt;p&gt;We have the Ruby code working with a UDP socket class, then creating a class of ControlPanel, which allows us to separate the data coming out of the simulator into useable member variables which we plan to use later on in development. Even though this is a small step, it is a step in the right direction.&lt;/p&gt;

&lt;h2 id='complications'&gt;Complications&lt;/h2&gt;

&lt;p&gt;We have yet to begin our research into PID&amp;#8217;s as well as the previous algorithm in the autopilot.py. We feel that we will be able to overcome these challenges within a reasonable time frame and hope to fix the dolphin tail issue well before Thanksgiving break.&lt;/p&gt;

&lt;h2 id='did_you_know'&gt;Did You Know?&lt;/h2&gt;

&lt;p&gt;That the UDP set up is very similar in Ruby as well as Python. Also, Ruby did a lot of the work for us when we needed to split the string of data, as well as the accessor functions can be written with little code compared to other, more complex languages. This was a relief.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Workstation, Finally!</title>
      <link>http://concurrency.cc/2012/10/10/workstation.html</link>
      <pubDate>Wed, 10 Oct 2012 00:00:00 -0700</pubDate>
      <author>Renaldo Pierre-Louis , Chad Peruggia</author>
      <guid>http://concurrency.cc/2012/10/10/workstation</guid>
      <description>&lt;p&gt;So, after a slight delay in our class, we have finally been able to get Dr. Jadud to set up the iMac workstation. We couldn&amp;#8217;t be more ecstatic!&lt;/p&gt;

&lt;p&gt;In our class tonight, we sat down with Dr. Jadud to go over some basics regarding UDP port setup as well as running python scripts with the simulator. We found this brief session very helpful.&lt;/p&gt;

&lt;p&gt;Dr. Jadud demonstrated the auto-pilot script which was written by as previous student of his, and we have found an area where we can start improving it. Currently, the auto-pilot&amp;#8217;s flight leveling system behaves in a strange way, where it seems to dolphin tail to maintain a level flight rather then just remain constant. This area is where we plan to make our first improvements on past work, as it will be the gateway, and a necessary fix before we can implement our plans for GPS waypoint navigation.&lt;/p&gt;

&lt;p&gt;We went over some information regarding PID controllers, what they were and how they work. There needs to be further research done regarding the controllers so we can have a better understanding on how they work and how to implement them in our future scripts.&lt;/p&gt;

&lt;p&gt;After further discussion, we are considering working in either Python or Ruby. It will be decided at a later date.&lt;/p&gt;

&lt;h2 id='did_you_know'&gt;Did you know?&lt;/h2&gt;

&lt;p&gt;It takes 341 licks to reach the center of a tootsie pop? AMAZING! I am kidding, that was a little easter egg for our readers.&lt;/p&gt;

&lt;p&gt;Setting up a UDP port is similar in almost every language. We saw two examples today and they were almost identical in syntax and complexity. This gives us hope that regardless of what language we decide to use, the complexity will be on par with other languages.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Flight Simulator Setup</title>
      <link>http://concurrency.cc/2012/09/19/berea-flightsimulator-setup.html</link>
      <pubDate>Wed, 19 Sep 2012 00:00:00 -0700</pubDate>
      <author>Chad Peruggia , Renaldo Pierre-Louis</author>
      <guid>http://concurrency.cc/2012/09/19/berea-flightsimulator-setup</guid>
      <description>&lt;p&gt;After our meeting with Dr. Jadud and Dr. Pearce to go over our semester goals, we decided that setting up our simulation environment was the next step required for progress. Dr. Jadud informed us of FlightGear, a sophisticated, professional, open-source flight simulator. So, we decided to give it a try. The plan was to figure out how to fly a plane, and receive flight data via UDP. This did not happen.&lt;/p&gt;

&lt;h2 id='challenges'&gt;Challenges&lt;/h2&gt;

&lt;p&gt;Due to the slow wireless network connection on campus, the downloading and installation took longer than expected. But we overcame this challenge by bringing out the ethernet cable. The program was an easy installation once downloaded. However, running it was a different issue.&lt;/p&gt;

&lt;p&gt;We have two different laptops (4gb of ram, dual core), and one of them could not run it at all (Dell Latitude E5410) - graphics card not powerful enough, the other(Latitude E6400) could barely run it - it would freeze shortly after.&lt;/p&gt;

&lt;p&gt;Still, we managed to get the plan in the air for a few seconds (before crashing or computer being frozen).&lt;/p&gt;

&lt;h2 id='solutions'&gt;Solutions&lt;/h2&gt;

&lt;p&gt;We are planning on getting a Mac workstation, which should be more than enough to run this software and anything else that we will need to run. So, those issues of not having powerful enough hardware will not be repeated. Hopefully, we will have that set up by next week so we can begin learning the simulator and transferring flight data via UDP.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Planning &amp; The Transterpreter</title>
      <link>http://concurrency.cc/2012/09/17/berea-occam-pi-transterpreter-post.html</link>
      <pubDate>Mon, 17 Sep 2012 00:00:00 -0700</pubDate>
      <author>Chad Peruggia , Renaldo Pierre-Louis</author>
      <guid>http://concurrency.cc/2012/09/17/berea-occam-pi-transterpreter-post</guid>
      <description>&lt;p&gt;Today, class did not proceed as planned from last class period. We had planned on working with the Arduinos, unfortunately, some guy name Matt Jadud locked the Arduinos in his office. Consequently, today consisted of redefining the direction we want this course to go in. We have have decided that we should: &lt;ul&gt;
	&lt;li&gt;Have a simulation environment set up that can occam runtime.  We figured this is essential to any future progress so we can test code rather than just throwing it on a plane and praying for the best. &lt;/li&gt;
	&lt;li&gt;Once we get the simulation set up and working, we would like to have a plane to fly, even if it means using the kit so we can see some code in life rather than just a simulation.&lt;/li&gt;
&lt;/ul&gt;&lt;/p&gt;

&lt;p&gt;The remaining time was spent reading about the background of the &lt;a href='http://www.transterpreter.org/publications/pdfs/the-transterpreter-a-transputer-interpreter.pdf'&gt;Tranterpreter&lt;/a&gt; and about its structure and performance. Of course, writing this blog post was also part of the class. :p&lt;/p&gt;

&lt;h2 id='the_transterperter'&gt;The Transterperter&lt;/h2&gt;

&lt;p&gt;From our understanding of the reading, we were able to see that the Transterpeter still has room for improvement in speeds, but it provides a substantial boost in speed (10%) when running PAR. Based on our understanding of what we will be using occam-pi and the Transterperter for, this is essential. Due to us being limited in our hardware, we need to be able to have programs that have small footprints, and yet can be run at high speeds in PAR.&lt;/p&gt;

&lt;h2 id='did_you_know'&gt;Did You Know&lt;/h2&gt;

&lt;p&gt;Using Occam and the Transterpreter is an excellent choice for introductory robotics programming in LEGO MindStorms Kit because:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;It is a better introduction to programming than Robolab&lt;/li&gt;
	&lt;li&gt;The syntax is easy to understand&lt;/li&gt;
	&lt;li&gt;It runs smoothly on the hardware&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    
    <item>
      <title>Occam Pi Basics</title>
      <link>http://concurrency.cc/2012/09/10/berea-occam-pi-post.html</link>
      <pubDate>Mon, 10 Sep 2012 00:00:00 -0700</pubDate>
      <author>Chad Peruggia , Renaldo Pierre-Louis</author>
      <guid>http://concurrency.cc/2012/09/10/berea-occam-pi-post</guid>
      <description>&lt;p&gt;So, today we started with the basics of Occam-pi - the parallel processing language that we will be using to automate our &amp;#8220;Flying Mountaineer.&amp;#8221; We first downloaded the &lt;a href='http://download.transterpreter.org/files/dev/win/zip/Transterpreter-win-dev-20110201.1855.zip'&gt;IDE&lt;/a&gt; and uploaded the &amp;#8220;Transterpreter&amp;#8221; to enables us to run Occam-pi on the Arduino. The Transterpreter actually just provides an illusion of parallel processing, since the Arduino only has a single processor. This illusion is called &amp;#8220;concurrency&amp;#8221; (hint: the name of the blog :D).&lt;/p&gt;

&lt;h2 id='trying_occampi'&gt;Trying Occam-pi&lt;/h2&gt;

&lt;p&gt;We decided to try by making three LEDs blink in parallel (concurrently to be more accurate). This is a trivial task that does not really test our programming skills, but more our abilities in circuitry. It was a nice refresher of how to build parallel and series circuits.&lt;/p&gt;

&lt;p&gt;See this cool video below.&lt;/p&gt;
&lt;p align='center'&gt;&lt;object height='360' width='480'&gt;&lt;param name='movie' value='http://www.youtube.com/v/b7pGnOaTddc?version=3&amp;amp;hl=en_US' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='http://www.youtube.com/v/b7pGnOaTddc?version=3&amp;amp;hl=en_US' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='360' width='480' /&gt;&lt;/object&gt;&lt;/p&gt;
&lt;h2 id='did_you_know'&gt;Did You Know&lt;/h2&gt;

&lt;p&gt;The onboard LED is actually the same as pin 13. We found this out when we were blinking our LED on pin 13, and realized the onboard LED was also blinking, and we were not sure why, since we did not intend for it to. So, if you are wondering why you onboard LED blinks when you did not want it to, this is probably the reason.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Contemplating Flying</title>
      <link>http://concurrency.cc/2012/09/05/berea-introduction-post.html</link>
      <pubDate>Wed, 05 Sep 2012 00:00:00 -0700</pubDate>
      <author>Chad Peruggia , Renaldo Pierre-Louis</author>
      <guid>http://concurrency.cc/2012/09/05/berea-introduction-post</guid>
      <description>&lt;p&gt;So, after being presented with the idea of taking an Advanced Robotics, we decided to accept the challenge and see what innovations we could make to Dr. Jadud&amp;#8217;s and his previous students &amp;#8220;Flying Gator&amp;#8221; project. We are going to be branching off this project and now code naming it the &amp;#8220;Flying Mountaineer&amp;#8221;, how original.&lt;/p&gt;

&lt;p&gt;We have read the paper on the past work, and we have a good understanding of what was done with the project, and where we plan to take it by semesters end.&lt;/p&gt;

&lt;h2 id='past_work'&gt;Past Work&lt;/h2&gt;

&lt;p&gt;Dr.Jadud and his students managed to get a plane in the air, controlling linear flight by reading sensors. The plane was able to maintain flight, which is a huge step in the progress, but what they didn&amp;#8217;t have time to do was enable GPS waypoint navigation and ground radio communication. These are the two features that we plan to concentrate on throughout the semester.&lt;/p&gt;

&lt;p&gt;Reading into the way that they made the plane fly, we learned the about the type of hardware they were using, an ATmega1280, and software written in occam-pi. They used a series of loops rather than the single loop in the open source program ArduPilot control system, which enabled them to have many process running at the same time.&lt;/p&gt;

&lt;p&gt;This method of control allowed them to keep the plane leveled by reading in sensor data at the same controlling motor speed during turns. Sensor data that was important to the flight of the plane was from the Gyroscope as well as the Accelerometer. They combined the data from the two sensors to maintain a level flight. &lt;a href='http://rockalypse.org/blogs/flyinggator'&gt;Past Work&lt;/a&gt;&lt;/p&gt;

&lt;h2 id='first_steps'&gt;First Steps&lt;/h2&gt;

&lt;p&gt;We plan on learning how to interact with the Arduino micro-controller before moving forward with the project. We need to have an understanding of the hardware and its limitations so we can devise a well planned design and approach to planned innovations.&lt;/p&gt;

&lt;h2 id='did_you_know'&gt;Did You Know&lt;/h2&gt;

&lt;p&gt;In our first session of Arduino Learning, we managed to alter the &amp;#8220;Fade&amp;#8221; demo, to include a blink to the LED. Once the light would fade on, we would blink off, blink on, then fade out. Although this is simple, we had trouble figuring out where to place the code as we aren&amp;#8217;t used to programming in a loop type structure that the Arduino uses.&lt;/p&gt;

&lt;p&gt;Here is a code snippet of how we got it to work.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='c'&gt;&lt;span class='cm'&gt;/*&lt;/span&gt;
&lt;span class='cm'&gt;Fade&lt;/span&gt;

&lt;span class='cm'&gt; This example shows how to fade an LED on pin 9&lt;/span&gt;
&lt;span class='cm'&gt;using the analogWrite() function.&lt;/span&gt;

&lt;span class='cm'&gt; This example code is in the public domain.&lt;/span&gt;
&lt;span class='cm'&gt;*/&lt;/span&gt;

&lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;led&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='mi'&gt;9&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;           &lt;span class='c1'&gt;// the pin that the LED is attached to&lt;/span&gt;
&lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;brightness&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;    &lt;span class='c1'&gt;// how bright the LED is&lt;/span&gt;
&lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;fadeAmount&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='mi'&gt;5&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;    &lt;span class='c1'&gt;// how many points to fade the LED by&lt;/span&gt;

&lt;span class='c1'&gt;// the setup routine runs once when you press reset:&lt;/span&gt;
&lt;span class='kt'&gt;void&lt;/span&gt; &lt;span class='nf'&gt;setup&lt;/span&gt;&lt;span class='p'&gt;()&lt;/span&gt;  &lt;span class='p'&gt;{&lt;/span&gt; 
  &lt;span class='c1'&gt;// declare pin 9 to be an output:&lt;/span&gt;
  &lt;span class='n'&gt;pinMode&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;led&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;OUTPUT&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt; 

&lt;span class='c1'&gt;// the loop routine runs over and over again forever:&lt;/span&gt;
&lt;span class='kt'&gt;void&lt;/span&gt; &lt;span class='nf'&gt;loop&lt;/span&gt;&lt;span class='p'&gt;()&lt;/span&gt;  &lt;span class='p'&gt;{&lt;/span&gt; 
  &lt;span class='c1'&gt;// set the brightness of pin 9:&lt;/span&gt;
  &lt;span class='n'&gt;analogWrite&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;led&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;brightness&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;    

  &lt;span class='c1'&gt;// change the brightness for next time through the loop:&lt;/span&gt;
  &lt;span class='n'&gt;brightness&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;brightness&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='n'&gt;fadeAmount&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
  
  &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;brightness&lt;/span&gt; &lt;span class='o'&gt;==&lt;/span&gt; &lt;span class='mi'&gt;255&lt;/span&gt;&lt;span class='p'&gt;){&lt;/span&gt;
    &lt;span class='n'&gt;analogWrite&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;led&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;LOW&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
    &lt;span class='n'&gt;delay&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;500&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
    &lt;span class='n'&gt;analogWrite&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;led&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;HIGH&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
  &lt;span class='p'&gt;}&lt;/span&gt;
  
  &lt;span class='c1'&gt;// reverse the direction of the fading at the ends of the fade: &lt;/span&gt;
  &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;brightness&lt;/span&gt; &lt;span class='o'&gt;==&lt;/span&gt; &lt;span class='mi'&gt;0&lt;/span&gt; &lt;span class='o'&gt;||&lt;/span&gt; &lt;span class='n'&gt;brightness&lt;/span&gt; &lt;span class='o'&gt;==&lt;/span&gt; &lt;span class='mi'&gt;255&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
    &lt;span class='n'&gt;fadeAmount&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='o'&gt;-&lt;/span&gt;&lt;span class='n'&gt;fadeAmount&lt;/span&gt; &lt;span class='p'&gt;;&lt;/span&gt; 
  &lt;span class='p'&gt;}&lt;/span&gt;     
  &lt;span class='c1'&gt;// wait for 30 milliseconds to see the dimming effect    &lt;/span&gt;
  &lt;span class='n'&gt;delay&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;30&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;  
&lt;span class='p'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>CCC Hackathon: occam-pi on the Raspberry Pi</title>
      <link>http://concurrency.cc/2012/06/12/hackathon-occam-pi-raspberry-pi.html</link>
      <pubDate>Tue, 12 Jun 2012 00:00:00 -0700</pubDate>
      <author>Christian Jacobsen, Omer Kilic and Jon Simpson</author>
      <guid>http://concurrency.cc/2012/06/12/hackathon-occam-pi-raspberry-pi</guid>
      <description>&lt;p&gt;So, after a long time with nothing here goes&amp;#8230;&lt;/p&gt;

&lt;p&gt;It seemed inevitable to us after reading about the &lt;a href='http://www.raspberrypi.org/'&gt;Raspberry Pi&lt;/a&gt; that it and occam-pi had to be brought together, and as fate would have it several of us were able to get together in London and hack for a few days on the project in general, and the Raspberry Pi in particular during the Jubilee 4 day weekend.&lt;/p&gt;

&lt;h2 id='website'&gt;Website&lt;/h2&gt;

&lt;p&gt;After a long hiatus in posting to or updating the website, we&amp;#8217;ve finally made the move to &lt;a href='http://pages.github.com/'&gt;Github Pages&lt;/a&gt;. We&amp;#8217;re really excited about this, as it means we&amp;#8217;ll eventually have a single, straightforward way to contribute either code or documentation to the project (more on this below). This also means that the code is open to all &amp;#8211; see the &lt;a href='https://github.com/concurrency/concurrency.github.com'&gt;project page&lt;/a&gt; for the gory details. Stay tuned for more website and documentation updates - pull requests welcome!&lt;/p&gt;

&lt;h2 id='git_repository'&gt;Git Repository&lt;/h2&gt;

&lt;p&gt;Another less glamorous activity which received attention at the hackathon is a move of the KRoC repository to Git to facilitate a move of the project sources to Github. We&amp;#8217;re keen to reduce any barriers to entry for new contributors, and Github has built up a fantastic set of infrastructure and processes to aid projects. Unfortunately, there are some difficulties in conversion particular to the KRoC repositories, which have absorbed a lot of effort so far (gory details follow below).&lt;/p&gt;

&lt;p&gt;The KRoC Subversion repository started out containing sub-projects for each of the individual components (such as occ21, ilibr, etc; &lt;a href='http://projects.cs.kent.ac.uk/projects/kroc/trac/browser?rev=248'&gt;as can be seen in early revisions of the repository&lt;/a&gt;), and at some point in the history these were (almost) all moved in under one project (&lt;a href='http://projects.cs.kent.ac.uk/projects/kroc/trac/browser'&gt;as can be seen in the current trunk&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;A simple svn2git import fails to keep the history before the different sub-projects were consolidated into the &lt;em&gt;kroc&lt;/em&gt; project. There are some recipes for importing complex repositories available (&lt;a href='http://simeonpilgrim.com/blog/2009/11/17/complex-svn-repository-conversion-to-git/'&gt;Simeon Pilgrim&lt;/a&gt; and &lt;a href='http://blogs.perl.org/users/graham_knop/2010/10/converting-complex-svn-repositories-to-git.html'&gt;Graham Knop&lt;/a&gt; have both written some lengthy blog posts on the subject) but it looks like it could be a pretty time consuming activity to ensure that the full history of the KRoC repository is available. Once we figure out whether it is worth trying to keep the full history or leave the sub-projects history out (and refer to the original Subversion repository) then the repository will appear on Github as one of the &lt;a href='https://github.com/concurrency/'&gt;Concurrency organisation&amp;#8217;s&lt;/a&gt; repositories and will be available for general cloning.&lt;/p&gt;

&lt;h2 id='raspberry_pi'&gt;Raspberry Pi&lt;/h2&gt;

&lt;p&gt;The Raspberry Pi is a Linux computer (just a very small one) so compiling the tools was a reasonably straightforward task. We left it compiling for some time while we sampled a few different beers and when we got back we had a full toolchain built and ready for use. Unlike some platforms (like Arduino), our port to the Raspberry Pi is &amp;#8216;self-hosted&amp;#8217;, in other words, we can compile and run occam-pi code on the Raspberry Pi directly (in fact, this has been our preferred way of working with it so far, over SSH)&lt;/p&gt;

&lt;p&gt;Being an embedded platform, interfacing with hardware peripherals on the board is quite important. There are abstractions we can use, such as the &lt;a href='http://en.wikipedia.org/wiki/General_Purpose_Input/Output'&gt;GPIO&lt;/a&gt; modules contained in the kernel (that we use for the current version of the digital.module) but having a unified way of setting up/using these peripherals seems like a better way in the long run so we will look into ways we can remove some of these abstractions and do things directly from within the occam-pi modules. This is very much a work in progress though, so keep an eye out for latest updates.&lt;/p&gt;

&lt;p&gt;Here are some obligatory concurrent blinkenlights for your viewing pleasure:&lt;/p&gt;
&lt;iframe mozallowfullscreen='true' src='http://player.vimeo.com/video/43507006?color=c40e11' webkitAllowFullScreen='true' allowFullScreen='true' frameborder='0' height='281' width='500'&gt;&lt;p&gt;&lt;a href='http://vimeo.com/43507006'&gt;occam-pi Blinkenlights on the Raspberry Pi&lt;/a&gt; from &lt;a href='http://vimeo.com/panicator'&gt;clj&lt;/a&gt; on &lt;a href='http://vimeo.com'&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;
&lt;/iframe&gt;
&lt;p&gt;We don&amp;#8217;t actually have stuff where they should be with the impending repository move on the horizon so drop an email to our &lt;a href='http://concurrency.cc/docs/mailinglists'&gt;developers&amp;#8217; list&lt;/a&gt; if you&amp;#8217;d like to learn more.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s something of a tradition to run a simple occam-pi program called &lt;code&gt;commstime.occ&lt;/code&gt; on any new port, which does nothing particularly useful other than calculate context switch times. For posterity, we&amp;#8217;ll report those numbers here:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Sequential delta? yes
Last value received = 1000015
Time = 10686591 microsecs
Time per loop = 10686 nanosecs
Context switch = 2671 nanosecs&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In conclusion the hackathon has been a great success &amp;#8211; much (awesome) beer drunk, port completed, website ported and blinkenlights err&amp;#8230; blinked. If you&amp;#8217;re interested in getting involved at the (inevitable) next one, or with the project in general the best place to start is sending a mail to &lt;a href='http://concurrency.cc/docs/mailinglists'&gt;developers list&lt;/a&gt; and introducing yourself.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Arduino Uno Support!!!</title>
      <link>http://concurrency.cc/2010/11/04/arduino-uno-support.html</link>
      <pubDate>Thu, 04 Nov 2010 00:00:00 -0700</pubDate>
      <author>Christian Jacobsen</author>
      <guid>http://concurrency.cc/2010/11/04/arduino-uno-support</guid>
      <description>&lt;p&gt;After having had an &lt;a href='http://arduino.cc/en/Main/ArduinoBoardUno'&gt;Arduino Uno&lt;/a&gt; sitting on my desk happily accepting programs from my development build of the Transterpreter, I thought it was finally time to get the binaries with Arduino Uno released into the wild.&lt;/p&gt;
&lt;div align='center' style='background-color:#cfcfcf;padding-top:10px;padding-bottom:1px;margin-bottom:20px;border: 1px #afafaf solid;'&gt;
&lt;iframe src='http://player.vimeo.com/video/16502929' frameborder='0' height='338' width='601'&gt;
&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href='http://vimeo.com/16502929'&gt;Knight Rider on the Arduino Uno - concurrency.cc&lt;/a&gt; from &lt;a href='http://vimeo.com/user2164314'&gt;clj&lt;/a&gt; on &lt;a href='http://vimeo.com'&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Quick demo showing a concurrent program running on the Arduino Uno doin&amp;#8217; Knight Rider like awesomeness&amp;#8230;&lt;/p&gt;

&lt;p&gt;The reason that getting the binaries out took so long is that various other bits have gotten in the way. Changes were required to be able to build 32 bit versions of the tools on Snow Leopard; the website has moved to a new host; the Sparkle feed infrastructure (for the Mac) has been updated to include a changelog; and building software on Windows is just never fun.&lt;/p&gt;

&lt;p&gt;But now the Arduino Uno support is finally here. Mac OS X and Windows versions should update themselves, otherwise you can download the packages from the &lt;a href='/download.html'&gt;download page&lt;/a&gt;. The Ubuntu packages have not yet been updated, but this should happen at some point in the future (pester Matt about this). Any problems with the packages should be reported on one of the &lt;a href='/docs/mailinglists.html'&gt;mailing lists&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Arduino Uno support is available starting with these versions of the Transterpreter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Mac OS X 20101103.1423 (dev)&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Windows 20101104.0001 (dev)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Ubuntu packages ready for testing</title>
      <link>http://concurrency.cc/2010/07/18/ubuntu-packages-ready-for-testing.html</link>
      <pubDate>Sun, 18 Jul 2010 00:00:00 -0700</pubDate>
      <author>Matt Jadud</author>
      <guid>http://concurrency.cc/2010/07/18/ubuntu-packages-ready-for-testing</guid>
      <description>&lt;p align='center'&gt;
&lt;img src='/images/ubuntu-clear.jpg' /&gt;
&lt;/p&gt;
&lt;p&gt;I can&amp;#8217;t say that they&amp;#8217;re perfect, nor can I say that they would make it into the Ubuntu repository. I made these packages, and by &amp;#8220;made&amp;#8221; I mean &amp;#8220;hammered them out of a block of granite until they were so many tiny little shards of granite all over the place.&amp;#8221; They are not art, they are not to be admired.&lt;/p&gt;

&lt;p&gt;But, they do seem to work on the one virtual machine that I have tested them on over and over. And, so far, I haven&amp;#8217;t removed anything from my system or left it in an inoperable state. &lt;em&gt;Yet&lt;/em&gt;.&lt;/p&gt;

&lt;h3 id='to_use_this_thing_of_beauty'&gt;To use this thing of beauty&lt;/h3&gt;

&lt;p&gt;Under Ubuntu, you should be able to install our package and have all requirements automatically installed. Java, some tools for Arduino programming, and a number of other packages end up being installed. To get started, you need to add our dev repository to your apt sources:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;sudo vim /etc/apt/sources.list&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;(Feel free to use your editor of choice.) Next, you need to add our repository. This depends on your version of Ubuntu; you can find out what to use by running the following:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;uname -a&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
	&lt;li&gt; &lt;strike&gt;Lucid Lynx (10.04), amd64&lt;/strike&gt; &lt;br /&gt;
		&lt;strike&gt;This is a 64-bit version of the most recent Ubuntu. Add this line:&lt;/strike&gt;&lt;p /&gt;
		&lt;code&gt;
			&lt;strike&gt;deb http://download.transterpreter.org/files/dev/ubuntu/lucid/amd64 binary/&lt;/strike&gt;
		&lt;/code&gt; 
		&lt;p /&gt;
		&lt;em&gt;64-bit packages will be updated after OSCON.&lt;/em&gt;
	&lt;/li&gt;	

	&lt;li&gt; &lt;strong&gt;Lucid Lynx (10.04), i386/686&lt;/strong&gt; &lt;br /&gt;
		This is a 32-bit version of the most recent Ubuntu. Add this line:&lt;p /&gt;
		&lt;code&gt;
			deb http://download.transterpreter.org/files/dev/ubuntu/lucid/i386 binary/
		&lt;/code&gt; 
	&lt;/li&gt;
	&lt;li&gt; &lt;strong&gt;Jaunty Jackalope (9.04), i386/686&lt;/strong&gt;&lt;br /&gt;
		This is a 32-bit version of the last version of Ubuntu. Add this line:&lt;p /&gt;
		&lt;code&gt;
			deb http://download.transterpreter.org/files/dev/ubuntu/jaunty/i386 binary/
		&lt;/code&gt; 
	&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After you add that to your sources.list, you should be able to run:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;sudo apt-get update&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can install our meta-package, which will pull in several more:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;sudo apt-get install occam-pi&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This pulls in packages for a native version of occam-pi, a version running on our virtual machine (called the Transterpreter), a version for the Arduino, and a plug-in for jEdit that we call occPlug. they are all prefixed with the name &lt;em&gt;occam-pi&lt;/em&gt;, so they are easy to find if you want to get rid of them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: We will, someday, be updating these packages, or even (hopefully) getting source packages into the Ubuntu repositories. When that happens, the repository you just added will need to be removed. But, we don&amp;#8217;t expect that to happen before the new year, so rest easy.&lt;/p&gt;

&lt;h3 id='using_occampi'&gt;Using occam-pi&lt;/h3&gt;

&lt;p&gt;On the command-line, type:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;jedit&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now, go to the &lt;strong&gt;Plugins&lt;/strong&gt; menu, find &lt;em&gt;occPlug&lt;/em&gt;, and say &lt;strong&gt;Start occPlug&lt;/strong&gt;. After it opens up, close jEdit.&lt;/p&gt;

&lt;p&gt;After you have started the occPlug, and closed jEdit, go ahead and open it again and continue. (The first time you run the occPlug, it does some configuration that we shouldn&amp;#8217;t do in the package.)&lt;/p&gt;

&lt;p&gt;At this point, you can start exploring the &lt;a href='http://concurrency.cc/book'&gt;book&lt;/a&gt;&amp;#8230; but, note, it needs some updating. That&amp;#8217;s next on the list as we finish getting ready for OSCON. In the meantime, you can look at the examples in our &lt;a href='http://projects.cs.kent.ac.uk/projects/kroc/trac/browser/kroc/trunk/tvm/arduino/occam/examples/oscon'&gt;OSCON examples directory&lt;/a&gt;, which all work against the newest versions of Plumbing.&lt;/p&gt;

&lt;p&gt;Let us know how you get on on the &lt;a href='http://www.concurrency.cc/docs/mailinglists'&gt;users mailing list&lt;/a&gt;; your feedback is very welcome.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Driving a servo with Plumbing</title>
      <link>http://concurrency.cc/2010/07/08/driving-a-servo-with-plumbing.html</link>
      <pubDate>Thu, 08 Jul 2010 00:00:00 -0700</pubDate>
      <author>Matt Jadud</author>
      <guid>http://concurrency.cc/2010/07/08/driving-a-servo-with-plumbing</guid>
      <description>&lt;p&gt;We have been tearing things apart in the Plumbing libraries over the past two weeks. Specifically, we&amp;#8217;ve been separating out concerns &amp;#8211; we keep asking &amp;#8220;is this code &lt;em&gt;architecture&lt;/em&gt; specific, or &lt;em&gt;platform&lt;/em&gt; specific?&amp;#8221; This is a hard question, as we&amp;#8217;re trying to cleanly support multiple platforms (Arduino, Arduino Mega, Seeeduino Mega, and the ArduPilot Mega) while also supporting multiple architectures (The ATmega328 and ATmega1280).&lt;/p&gt;

&lt;p&gt;Drew and Radu recently worked out servo control via PWM. This lets us set up servos, set their position, and then &amp;#8220;walk away.&amp;#8221; While it limits the number of servos we can control on a given platform, it does mean that we get robust control of the servo without a lot of work on our part.&lt;/p&gt;
&lt;p align='center'&gt;&lt;img src='/images/servo.jpg' /&gt;&lt;br /&gt;&lt;em&gt;A servo, or tiny motor.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s some example code Drew committed to the repository to demonstrate usage (and test his implementation a bit).&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;PROC main()
  CHAN SERVO s:
  SEQ
    digital.mode (9, OUTPUT)
    PAR
      heartbeat ()
      servo (9, s?)
      SEQ
        s ! min ; 650
        s ! max ; 2350
        s ! div ; 4
        s ! pos ; 0
        s ! start
        delay (2000)
        WHILE TRUE
          SEQ
            SEQ i = 0 FOR 4
              SEQ
                s ! pos ; i
                delay (1000)
            SEQ i = 0 FOR 4 STEP -1
              SEQ
                s ! pos ; i
                delay (1000)
:&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In parallel, Drew is executing three processes. First is the &lt;strong&gt;hearbeat()&lt;/strong&gt; process. This blinks the Arduino&amp;#8217;s LED on and off, letting us know nothing has crashed. (All robots should have a heartbeat.) The second process running is the &lt;strong&gt;servo&lt;/strong&gt; process, which takes two parameters: a pin and a channel. Drew has declared the channel &lt;strong&gt;s&lt;/strong&gt; as being of type &lt;strong&gt;SERVO&lt;/strong&gt;, which we defined as a &lt;em&gt;command channel&lt;/em&gt; to carry messages and data to the servo process.&lt;/p&gt;

&lt;p&gt;Then, the third process is written in-line as a sequence of steps (&lt;strong&gt;SEQ&lt;/strong&gt;) followed by an infinite loop (&lt;strong&gt;WHILE TRUE&lt;/strong&gt;). He starts by sending a sequence of four command messages to the &lt;strong&gt;servo&lt;/strong&gt; process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;s ! min ; 650&lt;/code&gt;&lt;br /&gt;This sends the &lt;strong&gt;min&lt;/strong&gt; command with the additional value of &lt;strong&gt;650&lt;/strong&gt; to the &lt;strong&gt;servo&lt;/strong&gt; process. This means that the minimum pulse width for driving the servo should be 650 &amp;#956;sec.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;code&gt;s ! max ; 2350&lt;/code&gt;&lt;br /&gt;This says to set the max pulse width to 2350.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;code&gt;s ! div ; 4&lt;/code&gt;&lt;br /&gt;This says that we want four evenly-spaced divisions in the range (from &lt;strong&gt;min&lt;/strong&gt; to &lt;strong&gt;max&lt;/strong&gt;) that we just defined.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;code&gt;s ! pos ; 0&lt;/code&gt;&lt;br /&gt;This sets the servo position to 0.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;code&gt;s ! start&lt;/code&gt;&lt;br /&gt;This actually turns on the servo.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This process then delays for two seconds, and falls into an infinite loop. (There&amp;#8217;s infinite loops in &lt;strong&gt;heartbeat()&lt;/strong&gt; and &lt;strong&gt;servo()&lt;/strong&gt;&amp;#8230; you just can&amp;#8217;t see them.) In this loop, Drew goes from position 0 to 4, and then back down. All he does is send the position number to the servo over the channel &lt;strong&gt;s&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;What&amp;#8217;s nice about this is that we can later &lt;strong&gt;stop&lt;/strong&gt; the servo, update the values for the minimum and maximum, change the number of divisions (the &lt;strong&gt;servo&lt;/strong&gt; process defaults to 180 divisions &amp;#8211; in fact, all of the values have sensible defaults), and send a &lt;strong&gt;start&lt;/strong&gt; message again.&lt;/p&gt;

&lt;p&gt;Perhaps this looks complicated. Personally, I think it&amp;#8217;s a very powerful interface to servo control, and because we encapsulated servo control in a parallel-safe process, we can easily control multiple servos at the same time, doing some cool synchronous (or asynchronous) things with our tiny little motors of goodness.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ll try and get some video up tomorrow. Note, also, that everything described here might change&amp;#8230; but it certainly seems like a really nice way to do servo control.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Omer and Adam talk about the ccc board</title>
      <link>http://concurrency.cc/2010/07/02/omer-adam-ccc-board.html</link>
      <pubDate>Fri, 02 Jul 2010 00:00:00 -0700</pubDate>
      <author>Matt Jadud</author>
      <guid>http://concurrency.cc/2010/07/02/omer-adam-ccc-board</guid>
      <description>&lt;p&gt;Omer and Adam spoke at OSHUG, the &lt;a href='http://oshug.org/event/3'&gt;Open Source Hardware Group&lt;/a&gt;, in London this week. Check them out talking with DJ Walker-Morgan about the concurrency.cc board.&lt;/p&gt;
&lt;p align='center'&gt;&lt;object height='225' width='400'&gt;&lt;param name='allowfullscreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;param name='movie' value='http://vimeo.com/moogaloop.swf?clip_id=13030643&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1' /&gt;&lt;embed src='http://vimeo.com/moogaloop.swf?clip_id=13030643&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='225' width='400' /&gt;&lt;/object&gt;&lt;p&gt;&lt;a href='http://vimeo.com/13030643'&gt;Adam Sampson and Omer Kilic talking with Dj Walker-Morgan after #oshug&lt;/a&gt; from &lt;a href='http://vimeo.com/mattlucht'&gt;Matt Lucht&lt;/a&gt; on &lt;a href='http://vimeo.com'&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m very jealous. You see, I&amp;#8217;m in Meadville, Pennsylvania. This is a very nice town, but it isn&amp;#8217;t London. Having lived in Canterbury for five years, I kinda miss my friends overseas, and I do miss a &lt;a href='http://www.camra.org.uk/'&gt;decent pub with good ale&lt;/a&gt;. &lt;em&gt;Sigh&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Keep an eye on the blog and our Twitter stream (&lt;a href='http://twitter.com/concurrencycc'&gt;http://twitter.com/concurrencycc&lt;/a&gt;); we&amp;#8217;re gearing up for OSCON, and have been making some big changes. In terms of platforms, we have support for the Arduino Mega (yay!), the ArduPilot Mega (yay!), and 8MHz variants of the Arduino (untested! yay!). In terms of libraries, we have servo control sketched in, a nascent implementation of TWI (or I&lt;sup&gt;2&lt;/sup&gt;C), and &amp;#8230; one or two more goodies may make it in before &amp;#8220;release.&amp;#8221; I have crude Debian (.deb) and Fedora (.rpm) packages rolling, so if you&amp;#8217;re brave, and want to give things a go, send me a note. (It stuffs a few things in /opt, so it doesn&amp;#8217;t really require &lt;em&gt;that&lt;/em&gt; much bravery.) We don&amp;#8217;t have our Windows installer done yet, but that&amp;#8217;s still on target for late July. (A lot of this is motivated right now by a &lt;a href='http://rockalypse.org/blogs/flyinggator'&gt;student-run UAV project&lt;/a&gt;, hence the ArduPilot Mega.)&lt;/p&gt;

&lt;p&gt;Awesome-awesome. I love the smell of software projects coming together&amp;#8230;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Slashdot!</title>
      <link>http://concurrency.cc/2010/06/16/slashdot.html</link>
      <pubDate>Wed, 16 Jun 2010 00:00:00 -0700</pubDate>
      <author>Matt Jadud</author>
      <guid>http://concurrency.cc/2010/06/16/slashdot</guid>
      <description>&lt;p&gt;We got &lt;a href='http://developers.slashdot.org/story/10/06/16/1635208/Parallel-Programming-For-the-Arduino'&gt; picked up by Slashdot today&lt;/a&gt;. Wootness.&lt;/p&gt;

&lt;p&gt;We&amp;#8217;re currently in a fast-and-furious &lt;a href='http://www.oscon.com/oscon2010/public/schedule/detail/13829/?cmp=il-ans-conf-oscon10-jadud'&gt;hack mode leading up to OSCON&lt;/a&gt;. If you&amp;#8217;re interested in trying out our tools, you can &lt;a href='http://concurrency.cc/book'&gt;grab our book&lt;/a&gt; and download a &lt;a href='http://www.concurrency.cc/download'&gt;Mac version of our development environment&lt;/a&gt; (friendly-friendly), &lt;a href='http://projects.cs.kent.ac.uk/projects/kroc/trac/wiki/Installation'&gt;build from source under Linux&lt;/a&gt;, or (if you want to live dangerously), &lt;a href='/docs/mailinglists.html'&gt;join our users list&lt;/a&gt;, introduce yourself, and ask nicely if you can try (the currently very ghetto) Debian binary package.&lt;/p&gt;

&lt;p&gt;If you keep your eyes on this blog or our &lt;a href='http://twitter.com/concurrencycc'&gt;Twitter stream&lt;/a&gt;, you&amp;#8217;ll hear when our Windows installer is ready, and when packaging is nice and clean for both Ubuntu/Debian and Fedora.&lt;/p&gt;

&lt;p&gt;We&amp;#8217;re always happy to support new people exploring new languages; please feel free to join our mailing lists and ask questions. We&amp;#8217;re here to help!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Web updates, c.cc hardware, and the Cardboarduino!</title>
      <link>http://concurrency.cc/2010/04/24/web-updates-hardware-cardboarduino.html</link>
      <pubDate>Sat, 24 Apr 2010 00:00:00 -0700</pubDate>
      <author>Matt Jadud</author>
      <guid>http://concurrency.cc/2010/04/24/web-updates-hardware-cardboarduino</guid>
      <description>&lt;p&gt;First, we&amp;#8217;re slowly working towards making the site easier to navigate. Our main page now prominently features &amp;#8220;Downloads&amp;#8221; and &amp;#8220;Community,&amp;#8221; which should improve things.&lt;/p&gt;

&lt;p&gt;Second, we&amp;#8217;re still working on completing builds for all platforms &amp;#8211; several of us are college faculty, and we&amp;#8217;re pretty slammed this time of year. We&amp;#8217;ll get there, though, since we want everything nice and pretty for OSCON in July.&lt;/p&gt;

&lt;p&gt;Third, we have some nice progress on the &lt;a href='/hardware/ccc.html'&gt;hardware front&lt;/a&gt;, but I can&amp;#8217;t speak at length about it. I will say that I need to get an order for bits and bobs on the way so that I can build some of our test boards, and once that is done we can start considering some large orders. Mostly, I want to survive the semester&amp;#8230;&lt;/p&gt;
&lt;p align='center'&gt;
&lt;img src='/images/cardboarduino-top.png' /&gt;
&lt;/p&gt;
&lt;p&gt;On the hardware front, though, I can safely say that the &lt;a href='/hardware/cardboarduino.html'&gt;Cardboarduino&lt;/a&gt; was a complete success. Student after student have been finishing their board, plugging in their Atmega328p, and things &lt;em&gt;Just Work&lt;/em&gt;. The students working with them had little to know prior experience with electronics, and we have seen success after success roll in. From the professor&amp;#8217;s point of view, that&amp;#8217;s wonderful.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ll post pictures once I have them&amp;#8230; and, in case you were wondering: yes, the Cardboarduino is programmed using the Plumbing libraries.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>No Google Summer of Code</title>
      <link>http://concurrency.cc/2010/03/18/no-google-summer-of-code.html</link>
      <pubDate>Thu, 18 Mar 2010 00:00:00 -0700</pubDate>
      <author>Christian Jacobsen</author>
      <guid>http://concurrency.cc/2010/03/18/no-google-summer-of-code</guid>
      <description>&lt;p&gt;No Google Summer of Code interns for concurrency.cc this year, but that did not come as a great surprise. This years application was in large motivated by us having talked about submitting to GSoC for a few years, but never actually doing it. We have never really had enough time to do the application and we have not seen ourselves as an organisation with the right profile to get accepted. However, without submitting an application there is no chance of getting accepted and this year we decided to &lt;em&gt;just do it&lt;/em&gt;. We did, did not get accepted, and now have some time to reflect on what would make us more attractive as a mentoring organisation for GSoC in the future. Building a bigger and more active community is probably a good start in this respect.&lt;/p&gt;

&lt;p&gt;So, while we&amp;#8217;re not going to get any Google Summer of Code interns this year, that should not stop anyone from &lt;a href='/download.html'&gt;downloading&lt;/a&gt; the software, joining the &lt;a href='/docs/mailinglists.html'&gt;mailing lists&lt;/a&gt;, and doing awesome stuff.&lt;/p&gt;

&lt;p&gt;Congrats to &lt;a href='http://socghop.appspot.com/gsoc/program/accepted_orgs/google/gsoc2010'&gt;all the organisations that did get accepted&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Mailing list and archives fixed</title>
      <link>http://concurrency.cc/2010/03/18/mailing-list-and-archives-fixed.html</link>
      <pubDate>Thu, 18 Mar 2010 00:00:00 -0700</pubDate>
      <author>Matt Jadud</author>
      <guid>http://concurrency.cc/2010/03/18/mailing-list-and-archives-fixed</guid>
      <description>&lt;p&gt;For a long time, there weren&amp;#8217;t many &amp;#8220;new&amp;#8221; people working with our tools. Therefore, our lists lived behind an https:// address with a self-signed certificate. This caused problems for many people. If nothing else, it threw big scary warnings claiming &lt;strong&gt;Bad Things&lt;/strong&gt; were about to happen.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve moved things around. Our lists are now completely open.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Our list for &lt;strong&gt;users&lt;/strong&gt; of process-oriented programming (things like Plumbing, or JCSP, etc.) is &lt;a href='mailto:users@concurrency.cc'&gt;&amp;#117;&amp;#115;&amp;#101;&amp;#114;&amp;#115;&amp;#064;&amp;#099;&amp;#111;&amp;#110;&amp;#099;&amp;#117;&amp;#114;&amp;#114;&amp;#101;&amp;#110;&amp;#099;&amp;#121;&amp;#046;&amp;#099;&amp;#099;&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Our list for &lt;strong&gt;developers&lt;/strong&gt; working on these kinds of tools (contributing to Plumbing, etc.) is &lt;a href='mailto:developers@concurrency.cc'&gt;&amp;#100;&amp;#101;&amp;#118;&amp;#101;&amp;#108;&amp;#111;&amp;#112;&amp;#101;&amp;#114;&amp;#115;&amp;#064;&amp;#099;&amp;#111;&amp;#110;&amp;#099;&amp;#117;&amp;#114;&amp;#114;&amp;#101;&amp;#110;&amp;#099;&amp;#121;&amp;#046;&amp;#099;&amp;#099;&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can join either list from our &lt;a href='/docs/mailinglists.html'&gt;mailing lists&lt;/a&gt; page. Please join in the fun. I&amp;#8217;ll try and get another post up over break about things that are going on with the team. (Also, we&amp;#8217;ll know whether we&amp;#8217;re a GSoC participant!)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Google Summer of Code</title>
      <link>http://concurrency.cc/2010/03/13/google-summer-of-code.html</link>
      <pubDate>Sat, 13 Mar 2010 00:00:00 -0800</pubDate>
      <author>Christian Jacobsen</author>
      <guid>http://concurrency.cc/2010/03/13/google-summer-of-code</guid>
      <description>&lt;p&gt;Yesterday we submitted an application for the 2010 &lt;a href='http://code.google.com/soc/'&gt;Google Summer of Code&lt;/a&gt;. You can find our &lt;a href='/gsoc/2010/application.html'&gt;application&lt;/a&gt; and &lt;a href='/gsoc/2010/ideas.html'&gt;ideas&lt;/a&gt; right on this site. We won&amp;#8217;t know if we have been accepted as an institution until the 18th of March, but if you are interested in doing a Google Summer of Code project with us it is probably worth contacting us about it now. Even if we don&amp;#8217;t get accepted as a mentoring institution, we would of course still be more than happy for anyone to come and join the project and do cool stuff!&lt;/p&gt;

&lt;p&gt;If you want to get in touch with us about Google Summer of Code and projects, &lt;a href='/docs/mailinglists.html'&gt;join the developers list&lt;/a&gt; and drop us a note.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Around the WWW</title>
      <link>http://concurrency.cc/2010/03/07/around-the-www.html</link>
      <pubDate>Sun, 07 Mar 2010 00:00:00 -0800</pubDate>
      <author>Matt Jadud</author>
      <guid>http://concurrency.cc/2010/03/07/around-the-www</guid>
      <description>&lt;p&gt;This is the first of a series of posts where we point to things we&amp;#8217;ve found on the WWW, and do our best to address some questions/share some thoughts about our tools.&lt;/p&gt;

&lt;p&gt;To answer the question that we&amp;#8217;ve received several times and seen in a number of places, Windows is coming.&lt;/p&gt;

&lt;h3 id='the_st_louis_area_robotics_group'&gt;The St. Louis Area Robotics Group&lt;/h3&gt;

&lt;p&gt;A few weeks back, a thread was started on the &lt;a href='http://robomo.com/Forum/viewtopic.php?f=3&amp;amp;p=10389'&gt;St. Louis Area Robotics Group forums&lt;/a&gt; regarding our libraries and the Arduino/robotics.&lt;/p&gt;

&lt;p&gt;The original poster (&lt;strong&gt;gifted&lt;/strong&gt;) pointed out that while the native Arduino programming environment provides threading via protothreads, it doesn&amp;#8217;t necessarily make it easier to handle multiple events taking place simultaneously. This past week, I had students working on a challenge involving three LEDs fading in and out on three PWM channels; as each finished its fade cycle, it would &amp;#8220;ask&amp;#8221; for a new reading from an ADC channel. I encourage students working with dataflow languages like occam to first draw a picture of their program:&lt;/p&gt;
&lt;p align='center'&gt;
&lt;img src='/images/lavalamp-process-network.png' /&gt;
&lt;/p&gt;
&lt;p&gt;We call this a &amp;#8220;dataflow&amp;#8221; language because the entire basis for programming in occam is one where we are communicating data from one parallel process to another. Hence, it is useful to think of values &amp;#8220;flowing&amp;#8221; from one process to the next. I&amp;#8217;ll break things down fully here:&lt;/p&gt;
&lt;p align='center'&gt;
&lt;img src='/images/lavalamp-dataflow.png' /&gt;
&lt;/p&gt;
&lt;h4 id='step_1'&gt;Step 1&lt;/h4&gt;

&lt;p&gt;The fader process gets done bringing it&amp;#8217;s specific LED (in this case, the LED on pin 11) to full brightness and back. At this point, it wants a new reading from the ADC to determine how fast or slow it should fade. So, &lt;code&gt;fader&lt;/code&gt; signals the &lt;code&gt;switch&lt;/code&gt; process that a new reading is desired. (So you know, the &lt;code&gt;fader&lt;/code&gt; process does not know who is listening&amp;#8212;it just knows that it wants a new reading, so it sends out a &lt;code&gt;SIGNAL&lt;/code&gt;.)&lt;/p&gt;

&lt;h4 id='step_2'&gt;Step 2&lt;/h4&gt;

&lt;p&gt;The &lt;code&gt;switch&lt;/code&gt; process grabs the &lt;code&gt;SIGNAL&lt;/code&gt; and then signals the &lt;code&gt;adc&lt;/code&gt; process that a new reading is desired. From the point of view of &lt;code&gt;adc&lt;/code&gt;, it has been sitting quietly doing nothing, simply waiting for someone to ask for some data.&lt;/p&gt;

&lt;h4 id='step_3'&gt;Step 3&lt;/h4&gt;

&lt;p&gt;The &lt;code&gt;adc&lt;/code&gt; takes a reading from pin 0.&lt;/p&gt;

&lt;h4 id='step_4'&gt;Step 4&lt;/h4&gt;

&lt;p&gt;The &lt;code&gt;adc&lt;/code&gt; process communicates its reading down the &lt;code&gt;adcResp&lt;/code&gt; channel, and proceeds to begin waiting again.&lt;/p&gt;

&lt;h4 id='step_5'&gt;Step 5&lt;/h4&gt;

&lt;p&gt;The &lt;code&gt;switch&lt;/code&gt; process takes the value it received from &lt;code&gt;adc&lt;/code&gt; (it was waiting), and sends that on to the &lt;code&gt;fader&lt;/code&gt; process (who is also waiting).&lt;/p&gt;

&lt;p&gt;There is a 1:1 correspondence between this diagram and the code we write. If you want to see an implementation of this tri-LED fader, you can &lt;a href='http://projects.cs.kent.ac.uk/projects/kroc/trac/browser/kroc/trunk/tvm/arduino/occam/lavalamp3.occ?rev=6380'&gt;see it in our repository&lt;/a&gt;. I&amp;#8217;ll eventually write this up as a sequence of short chapters in the &lt;a href='http://concurrency.cc/book'&gt;book&lt;/a&gt;, but I simply haven&amp;#8217;t had time yet. (And, actually, that code needs some comments. I use replicated syntaxes to keep it short, but those should probably be explained.)&lt;/p&gt;

&lt;h3 id='plumbing_is_for_concurrency'&gt;Plumbing is for concurrency&lt;/h3&gt;

&lt;p&gt;So, yes&amp;#8230; we think this is good for robotics, because a lot of robotic control is about reading from and reacting to sensors. We &lt;code&gt;&amp;lt;3&lt;/code&gt; the Arduino because it is a low-cost microcontroller that lots of people use for exactly these kinds of applications&amp;#8212;but we think it&amp;#8217;s too difficult to manage this kind of complexity in C, especially for programmers just starting point.&lt;/p&gt;

&lt;p&gt;And, for &lt;strong&gt;tmaiden&lt;/strong&gt; on the St. Louis robotics forums: we use the word &lt;em&gt;parallelism&lt;/em&gt; to denote when things happen &amp;#8220;at the same time,&amp;#8221; and use the word &amp;#8220;concurrency&amp;#8221; to mean &amp;#8220;the appearance of simultaneity.&amp;#8221; I don&amp;#8217;t know if others make this distinction, but we do&amp;#8230; because when we use our tools on multicore devices, we get &lt;em&gt;parallelism&lt;/em&gt;. When the Arduino goes multicore, our domain will be technically incorrect, and we&amp;#8217;ll have to go get &lt;code&gt;parallelism.cc&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;And those &lt;code&gt;.cc&lt;/code&gt; domains are expensive.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Did I write that?</title>
      <link>http://concurrency.cc/2010/02/14/did-i-write-that.html</link>
      <pubDate>Sun, 14 Feb 2010 00:00:00 -0800</pubDate>
      <author>Matt Jadud</author>
      <guid>http://concurrency.cc/2010/02/14/did-i-write-that</guid>
      <description>&lt;p&gt;&lt;a href='http://maradydd.livejournal.com/'&gt;Meredeth Patterson&lt;/a&gt; (maradydd)&lt;sup id='fnref:1'&gt;&lt;a href='#fn:1' rel='footnote'&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;a href='http://maradydd.livejournal.com/499104.html'&gt;commented on the preface&lt;/a&gt; to &amp;#8220;Plumbing for the Arduino&amp;#8221;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is how you write an introduction that makes people care about what your project does. This is how you take a specialty solution, heretofore useful to and understandable by only people who already understood process algebra and the pi-calculus, and present it as another tool for people&amp;#8217;s toolboxes right alongside hammers and screwdrivers. If you want to drive a nail, get a hammer; if you want to do parallel tasks in real-time, get occam-&amp;#960;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The hard thing about giving your work away is not knowing whether it has value. I know there are bugs in the book (&lt;a href='http://www.zorofeigl.nl/index.html'&gt;Zoro Feigl&lt;/a&gt; already found one&amp;#8230;), and I know it can be improved. That&amp;#8217;s the nice thing about getting it out there for people to use&amp;#8212;they can push back, and we can improve our software and our text.&lt;/p&gt;

&lt;p&gt;And that really makes me feel good.&lt;/p&gt;

&lt;p&gt;There&amp;#8217;s a few other people who found our project in the past week or so and started exploring it. I&amp;#8217;ll point to those over the next couple of days. The early adopters&amp;#8212;people exploring something new&amp;#8212;really are exciting to work with. You can see learning taking place as well as more work piling up, because you now know you&amp;#8217;ve got more things to improve and more documentation to write. (I happen to think that&amp;#8217;s a good thing.)&lt;/p&gt;
&lt;div class='footnotes'&gt;&lt;hr /&gt;&lt;ol&gt;&lt;li id='fn:1'&gt;
&lt;p&gt;You have to pronounce &amp;#8220;maradydd&amp;#8221; in the Welsh.&lt;/p&gt;
&lt;a href='#fnref:1' rev='footnote'&gt;&amp;#8617;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Mailing lists and updates</title>
      <link>http://concurrency.cc/2010/02/12/mailing-lists-and-updates.html</link>
      <pubDate>Fri, 12 Feb 2010 00:00:00 -0800</pubDate>
      <author>Matt Jadud</author>
      <guid>http://concurrency.cc/2010/02/12/mailing-lists-and-updates</guid>
      <description>&lt;p&gt;&lt;em&gt;Tap tap&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I have no idea if this blog is read by anyone, but hopefully you put our RSS feed in your reader if you were interested in news and updates.&lt;/p&gt;

&lt;h3 id='twitter'&gt;Twitter&lt;/h3&gt;

&lt;p&gt;We created a dedicated Twitter feed for the site. You can follow &lt;a href='http://twitter.com/concurrencycc'&gt;concurrencycc&lt;/a&gt; for updates. For example, when the book updates, or the blog, we&amp;#8217;ll write a short note. All signal, no noise. I hope. I&amp;#8217;m not a Twitter expert.&lt;/p&gt;

&lt;h3 id='mailing_lists'&gt;Mailing Lists&lt;/h3&gt;

&lt;p&gt;We have two new mailing lists:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;users@concurrency.cc&lt;/li&gt;

&lt;li&gt;developers@concurrency.cc&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can join either or both of these lists using the details on our &lt;a href='/docs/mailinglists.html'&gt;mailing lists&lt;/a&gt; page. (Or, if you want, drop matt at concurrency dot cc an email.)&lt;/p&gt;

&lt;p&gt;These are not strictly limited to people exploring occam on the Arduino. Our long-term goal is that people exploring process-oriented programming find a home for their projects under this domain. If you start exploring Plumbing and have questions, that is a &lt;em&gt;great&lt;/em&gt; place to ask. Everyone involved in the creation of Plumbing (and, for that matter, everyone working on occam-&amp;#960;) can be found there.&lt;/p&gt;

&lt;p&gt;If you&amp;#8217;re interested in contributing to the Plumbing libraries (or, the virtual machine underneath it), or you want to help bring occam to another hardware platform, join developers@concurrency.cc. That is the space where we discuss the tools that make things like Plumbing possible. Again, we&amp;#8217;re all there.&lt;/p&gt;

&lt;h3 id='book_updated'&gt;Book Updated&lt;/h3&gt;

&lt;p&gt;Two (three?) new chapters appeared last weekend. Also, &lt;a href='http://www.zorofeigl.nl/'&gt;Zoro&lt;/a&gt; (who seems to do some very cool art) dropped an important note to bookbugs.&lt;/p&gt;

&lt;p&gt;Every program you write for the Arduino that uses Plumbing needs to start with this line:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#INCLUDE &amp;quot;plumbing.module&amp;quot;	&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This line of code brings in all of the support you need to program the Arduino in occam. Our intention is that the tools you use for programming the Arduino will ultimately insert that line automatically. (Or, perhaps we&amp;#8217;ll change our minds about that.) Either way, I&amp;#8217;ve updated the first chapter so that it is included there. I am not going to update all of the code examples in the book at this time, simply because that will 1. take longer and 2. upset my pagination. Also, the group needs to discuss (on developers) whether we&amp;#8217;re going to make that line go away or not.&lt;/p&gt;

&lt;h3 id='summary'&gt;Summary&lt;/h3&gt;

&lt;p&gt;We have a new Twitter feed, new mailing lists, and updates to the book (now on revision 2010-02-12). Enjoy!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>The website goes live</title>
      <link>http://concurrency.cc/2010/01/31/website-goes-live.html</link>
      <pubDate>Sun, 31 Jan 2010 00:00:00 -0800</pubDate>
      <author>Matt Jadud</author>
      <guid>http://concurrency.cc/2010/01/31/website-goes-live</guid>
      <description>&lt;p&gt;While we&amp;#8217;ve had &lt;a href='/'&gt;concurrency.cc&lt;/a&gt; for a while, we haven&amp;#8217;t actually loaded content into the site.&lt;/p&gt;

&lt;p&gt;Now, we have links to the &lt;a href='/book/'&gt;book&lt;/a&gt; we&amp;#8217;ve started, &lt;a href='/hardware/'&gt;hardware&lt;/a&gt; developed by members of the group, a &lt;a href='/blog/'&gt;blog&lt;/a&gt; (including &lt;a href='/feed/atom.xml'&gt;Atom&lt;/a&gt; and &lt;a href='/feed/rss.xml'&gt;RSS&lt;/a&gt; feeds), and&amp;#8230; who knows what else!&lt;/p&gt;</description>
    </item>
    

  </channel> 
</rss>
