<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Parallel Programming for Tiny Computers</title>
 <subtitle>The concurrency.cc Blog</subtitle>
 <link href="http://concurrency.cc/feed/atom" rel="self"/>
 <link href="http://concurrency.cc"/>
 <updated>2010-07-25T05:22:10.817115</updated>
 <generator>Liquorice 0.0.1</generator>

 <entry>
   <title>Ubuntu packages ready for testing</title>
   <link href="http://concurrency.cc/blog/2010/07/17"/>
   <id>http://concurrency.cc/blog/2010/07/17</id>
   
   <updated>2010-07-19T03:24:00</updated>
   <published>2010-07-19T03:24:00</published>
   <author>
     <name>Matt Jadud</name>
   </author>
  <content type='html'>
  &lt;p align=&quot;center&quot;&gt;
&lt;img src=&quot;/images/ubuntu-clear.jpg&quot;/&gt;
&lt;/p&gt;

&lt;p&gt;I can't say that they're perfect, nor can I say that they would make it into the Ubuntu repository. I made these packages, and by &quot;made&quot; I mean &quot;hammered them out of a block of granite until they were so many tiny little shards of granite all over the place.&quot; 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'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&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;p&gt;&lt;code&gt;
    sudo vim /etc/apt/sources.list
&lt;/code&gt;&lt;/p&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;p&gt;&lt;code&gt;
    uname -a
&lt;/code&gt;&lt;/p&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;p&gt;&lt;code&gt;
    sudo apt-get update
&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;code&gt;
    sudo apt-get install occam-pi
&lt;/code&gt;&lt;/p&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't expect that to happen before the new year, so rest easy.&lt;/p&gt;

&lt;h3&gt;Using occam-pi&lt;/h3&gt;

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

&lt;p&gt;&lt;code&gt;
    jedit
&lt;/code&gt;&lt;/p&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't do in the package.)&lt;/p&gt;

&lt;p&gt;At this point, you can start exploring the &lt;a href=&quot;http://concurrency.cc/book&quot;&gt;book&lt;/a&gt;... but, note, it needs some updating. That'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=&quot;http://projects.cs.kent.ac.uk/projects/kroc/trac/browser/kroc/trunk/tvm/arduino/occam/examples/oscon&quot;&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=&quot;http://www.concurrency.cc/docs/mailinglists&quot;&gt;users mailing list&lt;/a&gt;; your feedback is very welcome. &lt;/p&gt;

  </content>
 </entry>
 <entry>
   <title>Driving a servo with Plumbing</title>
   <link href="http://concurrency.cc/blog/2010/07/08"/>
   <id>http://concurrency.cc/blog/2010/07/08</id>
   
   <updated>2010-07-09T03:24:00</updated>
   <published>2010-07-09T03:24:00</published>
   <author>
     <name>Matt Jadud</name>
   </author>
  <content type='html'>
  &lt;p&gt;We have been tearing things apart in the Plumbing libraries over the past two weeks. Specifically, we've been separating out concerns -- we keep asking &quot;is this code &lt;em&gt;architecture&lt;/em&gt; specific, or &lt;em&gt;platform&lt;/em&gt; specific?&quot; This is a hard question, as we'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 &quot;walk away.&quot; 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=&quot;center&quot;&gt;&lt;img src=&quot;/images/servo.jpg&quot;&gt;&lt;br/&gt;&lt;em&gt;A servo, or tiny motor.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Here's some example code Drew committed to the repository to demonstrate usage (and test his implementation a bit).&lt;/p&gt;

&lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;/images/20100707-servo-example.png&quot;/&gt;&lt;br/&gt;&lt;em&gt;Driving a servo.&lt;/em&gt;&lt;/p&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'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;mu;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 with 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's infinite loops in &lt;strong&gt;heartbeat()&lt;/strong&gt; and &lt;strong&gt;servo()&lt;/strong&gt;... you just can'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'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 -- 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'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'll try and get some video up tomorrow. Note, also, that everything described here might change... but it certainly seems like a really nice way to do servo control.&lt;/p&gt;

  </content>
 </entry>
 <entry>
   <title>Omer and Adam talk about the ccc board</title>
   <link href="http://concurrency.cc/blog/2010/07/02"/>
   <id>http://concurrency.cc/blog/2010/07/02</id>
   
   <updated>2010-07-03T03:03:00</updated>
   <published>2010-07-02T13:12:00</published>
   <author>
     <name>Matt Jadud</name>
   </author>
  <content type='html'>
  &lt;p&gt;Omer and Adam spoke at OSHUG, the &lt;a href=&quot;http://oshug.org/event/3&quot;&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=&quot;center&quot;&gt;&lt;object width=&quot;400&quot; height=&quot;225&quot;&gt;&lt;param name=&quot;allowfullscreen&quot; value=&quot;true&quot; /&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; /&gt;&lt;param name=&quot;movie&quot; value=&quot;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&quot; /&gt;&lt;embed src=&quot;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&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowscriptaccess=&quot;always&quot; width=&quot;400&quot; height=&quot;225&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href=&quot;http://vimeo.com/13030643&quot;&gt;Adam Sampson and Omer Kilic talking with Dj Walker-Morgan after #oshug&lt;/a&gt; from &lt;a href=&quot;http://vimeo.com/mattlucht&quot;&gt;Matt Lucht&lt;/a&gt; on &lt;a href=&quot;http://vimeo.com&quot;&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;/p&gt;

&lt;p&gt;I'm very jealous. You see, I'm in Meadville, Pennsylvania. This is a very nice town, but it isn't London. Having lived in Canterbury for five years, I kinda miss my friends overseas, and I do miss a &lt;a href=&quot;http://www.camra.org.uk/&quot;&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=&quot;http://twitter.com/concurrencycc&quot;&gt;http://twitter.com/concurrencycc&lt;/a&gt;); we'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 ... one or two more goodies may make it in before &quot;release.&quot; I have crude Debian (.deb) and Fedora (.rpm) packages rolling, so if you're brave, and want to give things a go, send me a note. (It stuffs a few things in /opt, so it doesn't really require &lt;em&gt;that&lt;/em&gt; much bravery.) We don't have our Windows installer done yet, but that's still on target for late July. (A lot of this is motivated right now by a &lt;a href=&quot;http://rockalypse.org/blogs/flyinggator&quot;&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...&lt;/p&gt;

  </content>
 </entry>
 <entry>
   <title>Slashdot!</title>
   <link href="http://concurrency.cc/blog/2010/06/16"/>
   <id>http://concurrency.cc/blog/2010/06/16</id>
   
   <updated>2010-06-17T03:03:00</updated>
   <published>2010-06-17T03:03:00</published>
   <author>
     <name>Matt Jadud</name>
   </author>
  <content type='html'>
  &lt;p&gt;We got &lt;a href=&quot;http://developers.slashdot.org/story/10/06/16/1635208/Parallel-Programming-For-the-Arduino&quot;&gt; picked up by Slashdot today&lt;/a&gt;. Wootness. &lt;/p&gt;

&lt;p&gt;We're currently in a fast-and-furious &lt;a href=&quot;http://www.oscon.com/oscon2010/public/schedule/detail/13829/?cmp=il-ans-conf-oscon10-jadud&quot;&gt;hack mode leading up to OSCON&lt;/a&gt;. If you're interested in trying out our tools, you can &lt;a href=&quot;http://concurrency.cc/book&quot;&gt;grab our book&lt;/a&gt; and download a &lt;a href=&quot;http://www.concurrency.cc/download&quot;&gt;Mac version of our development environment&lt;/a&gt; (friendly-friendly), &lt;a href=&quot;http://projects.cs.kent.ac.uk/projects/kroc/trac/wiki/Installation&quot;&gt;build from source under Linux&lt;/a&gt;, or (if you want to live dangerously), &lt;a href=&quot;http://www.concurrency.cc/docs/mailinglists&quot;&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=&quot;http://twitter.com/concurrencycc&quot;&gt;Twitter stream&lt;/a&gt;, you'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're always happy to support new people exploring new languages; please feel free to join our mailing lists and ask questions. We're here to help!&lt;/p&gt;

  </content>
 </entry>
 <entry>
   <title>Web updates, c.cc hardware, and the Cardboarduino!</title>
   <link href="http://concurrency.cc/blog/2010/04/24"/>
   <id>http://concurrency.cc/blog/2010/04/24</id>
   
   <updated>2010-04-24T16:38:00</updated>
   <published>2010-04-24T16:38:00</published>
   <author>
     <name>Matt Jadud</name>
   </author>
  <content type='html'>
  &lt;p&gt;First, we're slowly working towards making the site easier to navigate. Our main page now prominently features &quot;Downloads&quot; and &quot;Community,&quot; which should improve things.&lt;/p&gt;

&lt;p&gt;Second, we're still working on completing builds for all platforms -- several of us are college faculty, and we're pretty slammed this time of year. We'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=&quot;/hardware/ccc&quot;&gt;hardware front&lt;/a&gt;, but I can'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...&lt;/p&gt;

&lt;p align=&quot;center&quot;&gt;
&lt;img src=&quot;/images/cardboarduino-top.png&quot;/&gt;
&lt;/p&gt;

&lt;p&gt;On the hardware front, though, I can safely say that the &lt;a href=&quot;/hardware/cardboarduino&quot;&gt;Cardboarduino&lt;/a&gt; was a complete success. Student after student have been finishing their board, plugging in their Atmega328p, and things &lt;b&gt;Just Work&lt;/b&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's point of view, that's wonderful. &lt;/p&gt;

&lt;p&gt;I'll post pictures once I have them... and, in case you were wondering: yes, the Cardboarduino is programmed using the Plumbing libraries.&lt;/p&gt;

  </content>
 </entry>
 <entry>
   <title>No Google Summer of Code</title>
   <link href="http://concurrency.cc/blog/2010/03/18"/>
   <id>http://concurrency.cc/blog/2010/03/18</id>
   
   <updated>2010-03-18T20:31:00</updated>
   <published>2010-03-18T20:31:00</published>
   <author>
     <name>Christian Jacobsen</name>
   </author>
  <content type='html'>
  &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're not going to get any Google Summer of Code interns this year,
that should not stop anyone from &lt;a href=&quot;/download&quot;&gt;downloading&lt;/a&gt; the software, joining
the &lt;a href=&quot;/docs/mailinglists&quot;&gt;mailing lists&lt;/a&gt;, and doing awesome stuff. &lt;/p&gt;

&lt;p&gt;Congrats to &lt;a href=&quot;http://socghop.appspot.com/gsoc/program/accepted_orgs/google/gsoc2010&quot;&gt;all the organisations that did get
accepted&lt;/a&gt;.&lt;/p&gt;

  </content>
 </entry>
 <entry>
   <title>Mailing list and archives fixed</title>
   <link href="http://concurrency.cc/blog/2010/03/17"/>
   <id>http://concurrency.cc/blog/2010/03/17</id>
   
   <updated>2010-03-18T19:31:00</updated>
   <published>2010-03-17T19:15:00</published>
   <author>
     <name>Matt Jadud</name>
   </author>
  <content type='html'>
  &lt;p&gt;For a long time, there weren't many &quot;new&quot; 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'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=&quot;&amp;#x6d;&amp;#97;&amp;#105;&amp;#x6c;&amp;#x74;&amp;#111;&amp;#x3a;&amp;#x75;s&amp;#101;&amp;#114;&amp;#x73;&amp;#64;&amp;#99;&amp;#111;&amp;#x6e;&amp;#x63;&amp;#117;&amp;#114;&amp;#114;&amp;#101;&amp;#110;&amp;#99;&amp;#x79;&amp;#46;&amp;#x63;&amp;#99;&quot;&gt;&amp;#x75;s&amp;#101;&amp;#114;&amp;#x73;&amp;#64;&amp;#99;&amp;#111;&amp;#x6e;&amp;#x63;&amp;#117;&amp;#114;&amp;#114;&amp;#101;&amp;#110;&amp;#99;&amp;#x79;&amp;#46;&amp;#x63;&amp;#99;&lt;/a&gt; (&lt;a href=&quot;http://unhosting.org/mailman/listinfo/users&quot;&gt;list homepage&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=&quot;&amp;#109;&amp;#x61;&amp;#x69;l&amp;#x74;o&amp;#x3a;&amp;#x64;&amp;#101;&amp;#x76;&amp;#x65;&amp;#x6c;&amp;#111;&amp;#112;&amp;#101;&amp;#114;&amp;#x73;&amp;#64;&amp;#99;&amp;#111;&amp;#x6e;&amp;#x63;&amp;#x75;&amp;#x72;&amp;#114;&amp;#101;&amp;#x6e;&amp;#x63;&amp;#121;.&amp;#x63;&amp;#x63;&quot;&gt;&amp;#x64;&amp;#101;&amp;#x76;&amp;#x65;&amp;#x6c;&amp;#111;&amp;#112;&amp;#101;&amp;#114;&amp;#x73;&amp;#64;&amp;#99;&amp;#111;&amp;#x6e;&amp;#x63;&amp;#x75;&amp;#x72;&amp;#114;&amp;#101;&amp;#x6e;&amp;#x63;&amp;#121;.&amp;#x63;&amp;#x63;&lt;/a&gt; (&lt;a href=&quot;http://unhosting.org/mailman/listinfo/developers&quot;&gt;list homepage&lt;/a&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Please join in the fun. I'll try and get another post up over break about things that are going on with the team. (Also, we'll know whether we're a GSoC participant!)&lt;/p&gt;

  </content>
 </entry>
 <entry>
   <title>Google Summer of Code</title>
   <link href="http://concurrency.cc/blog/2010/03/13"/>
   <id>http://concurrency.cc/blog/2010/03/13</id>
   
   <updated>2010-03-13T08:59:00</updated>
   <published>2010-03-13T08:59:00</published>
   <author>
     <name>Christian Jacobsen</name>
   </author>
  <content type='html'>
  &lt;p&gt;Yesterday we submitted an application for the 2010 &lt;a href=&quot;http://code.google.com/soc/&quot;&gt;Google Summer of
Code&lt;/a&gt;. You can find our
&lt;a href=&quot;/gsoc/2010/application&quot;&gt;application&lt;/a&gt; and &lt;a href=&quot;/gsoc/2010/ideas&quot;&gt;ideas&lt;/a&gt; right on
this site. We won'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'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
drop a note to &lt;a href=&quot;&amp;#x6d;&amp;#x61;i&amp;#x6c;&amp;#116;&amp;#x6f;&amp;#58;&amp;#x64;&amp;#x65;&amp;#x76;&amp;#x65;&amp;#108;&amp;#x6f;&amp;#112;&amp;#x65;&amp;#114;&amp;#115;&amp;#64;&amp;#x63;&amp;#111;&amp;#x6e;&amp;#x63;&amp;#x75;&amp;#114;&amp;#114;&amp;#x65;&amp;#x6e;&amp;#99;&amp;#x79;&amp;#x2e;c&amp;#99;&quot;&gt;&amp;#x64;&amp;#x65;&amp;#x76;&amp;#x65;&amp;#108;&amp;#x6f;&amp;#112;&amp;#x65;&amp;#114;&amp;#115;&amp;#64;&amp;#x63;&amp;#111;&amp;#x6e;&amp;#x63;&amp;#x75;&amp;#114;&amp;#114;&amp;#x65;&amp;#x6e;&amp;#99;&amp;#x79;&amp;#x2e;c&amp;#99;&lt;/a&gt; (&lt;a href=&quot;http://unhosting.org/mailman/listinfo/developers&quot;&gt;list
homepage&lt;/a&gt;).&lt;/p&gt;

  </content>
 </entry>
 <entry>
   <title>Around the WWW</title>
   <link href="http://concurrency.cc/blog/2010/03/07"/>
   <id>http://concurrency.cc/blog/2010/03/07</id>
   
   <updated>2010-03-07T14:20:00</updated>
   <published>2010-03-07T14:20:00</published>
   <author>
     <name>Matt Jadud</name>
   </author>
  <content type='html'>
  &lt;p&gt;This is the first of a series of posts where we point to things we'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've received several times and seen in a number of places, Windows is coming.&lt;/p&gt;

&lt;h3&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=&quot;http://robomo.com/Forum/viewtopic.php?f=3&amp;amp;p=10389&quot;&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'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 &quot;ask&quot; 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=&quot;center&quot;&gt;
&lt;img src=&quot;/images/lavalamp-process-network.png&quot;/&gt;
&lt;/p&gt;

&lt;p&gt;We call this a &quot;dataflow&quot; 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 &quot;flowing&quot; from one process to the next. I'll break things down fully here:&lt;/p&gt;

&lt;p align=&quot;center&quot;&gt;
&lt;img src=&quot;/images/lavalamp-dataflow.png&quot;/&gt;
&lt;/p&gt;

&lt;h4&gt;Step 1&lt;/h4&gt;

&lt;p&gt;The fader process gets done bringing it'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;mdash;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&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&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&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&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=&quot;http://projects.cs.kent.ac.uk/projects/kroc/trac/browser/kroc/trunk/tvm/arduino/occam/lavalamp3.occ&quot;&gt;see it in our repository&lt;/a&gt;. I'll eventually write this up as a sequence of short chapters in the &lt;a href=&quot;http://concurrency.cc/book&quot;&gt;book&lt;/a&gt;, but I simply haven'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&gt;Plumbing is for concurrency&lt;/h3&gt;

&lt;p&gt;So, yes... 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;mdash;but we think it'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 &quot;at the same time,&quot; and use the word &quot;concurrency&quot; to mean &quot;the appearance of simultaneity.&quot; I don't know if others make this distinction, but we do... 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'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;

  </content>
 </entry>
 <entry>
   <title>Did I write that?</title>
   <link href="http://concurrency.cc/blog/2010/02/14"/>
   <id>http://concurrency.cc/blog/2010/02/14</id>
   
   <updated>2010-02-14T13:58:00</updated>
   <published>2010-02-14T13:58:00</published>
   <author>
     <name>Matt Jadud</name>
   </author>
  <content type='html'>
  &lt;p&gt;&lt;a href=&quot;http://maradydd.livejournal.com/&quot;&gt;Meredeth Patterson&lt;/a&gt; (maradydd)&lt;sup class=&quot;footnote-ref&quot; id=&quot;fnref-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;a href=&quot;http://maradydd.livejournal.com/499104.html&quot;&gt;commented on the preface&lt;/a&gt; to &quot;Plumbing for the Arduino&quot;:&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'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;pi;.&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=&quot;http://www.zorofeigl.nl/index.html&quot;&gt;Zoro Feigl&lt;/a&gt; already found one...), and I know it can be improved. That's the nice thing about getting it out there for people to use&amp;mdash;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's a few other people who found our project in the past week or so and started exploring it. I'll point to those over the next couple of days. The early adopters&amp;mdash;people exploring something new&amp;mdash;really are exciting to work with. You can see learning taking place as well as more work piling up, because you now know you've got more things to improve and more documentation to write. (I happen to think that's a good thing.)&lt;/p&gt;

&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr /&gt;
&lt;ol&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;You have to pronounce &quot;maradydd&quot; in the Welsh.&amp;nbsp;&lt;a href=&quot;#fnref-1&quot; class=&quot;footnoteBackLink&quot; title=&quot;Jump back to footnote 1 in the text.&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

  </content>
 </entry>
 <entry>
   <title>Mailing lists and updates</title>
   <link href="http://concurrency.cc/blog/2010/02/12"/>
   <id>http://concurrency.cc/blog/2010/02/12</id>
   
   <updated>2010-02-12T17:57:00</updated>
   <published>2010-02-12T17:57:00</published>
   <author>
     <name>Matt Jadud</name>
   </author>
  <content type='html'>
  &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&gt;Twitter&lt;/h3&gt;

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

&lt;h3&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;a href=&quot;http://unhosting.org/mailman/listinfo/users&quot;&gt;list homepage&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;developers@concurrency.cc (&lt;a href=&quot;http://unhosting.org/mailman/listinfo/developers&quot;&gt;list homepage&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can join either or both of these lists by visiting their Mailman subscription pages. (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;pi;) can be found there.&lt;/p&gt;

&lt;p&gt;If you'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're all there.                         &lt;/p&gt;

&lt;h3&gt;Book Updated&lt;/h3&gt;

&lt;p&gt;Two (three?) new chapters appeared last weekend. Also, &lt;a href=&quot;http://www.zorofeigl.nl/&quot;&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 &quot;plumbing.module&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'll change our minds about that.) Either way, I'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're going to make that line go away or not.&lt;/p&gt;

&lt;h3&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;

  </content>
 </entry>
 <entry>
   <title>The website goes live</title>
   <link href="http://concurrency.cc/blog/2010/01/31"/>
   <id>http://concurrency.cc/blog/2010/01/31</id>
   
   <updated>2010-01-31T03:27:00</updated>
   <published>2010-01-31T03:08:00</published>
   <author>
     <name>Matt Jadud</name>
   </author>
  <content type='html'>
  &lt;p&gt;While we've had &lt;a href=&quot;/&quot;&gt;concurrency.cc&lt;/a&gt; for a while, we haven't actually loaded content into the site.&lt;/p&gt;

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

  </content>
 </entry>
 
</feed>
