occam-pi is not the newest language on the block, but it is part of a small family of languages that are inherently parallel. Erlang, Google's Go, and XC by XMOS are three of the few languages that were designed from the ground up for expressing code that is intended to run in parallel. (And yes, there are others. But they're not common. Well, there's CUDA... but, perhaps we need a special topics course on concurrent and parallel programming.)
We're using occam-pi because the language is:
- Small. It has very little syntax, and a small grammar.
- Parallel. It has the keyword PAR, which makes things run in "at the same time."
- Free and open. The tools are all freely available, and open.
- Portable. It runs on everything clusters and servers to embedded systems like your Arduino.
- I'm rather familiar with it.
Introducing concurrency.cc
You may find (some) resources at concurrency.cc of use. I say "may" and "some" because I tend to be responsible for updating the site, and I think it's a bit stale right now.
HOWEVER, you should join the user's mailing list. Why? Because when you have questions about occam-pi, I'm going to ask that you ask those questions there. As developers exploring the use of occam-pi on the Arduino, you're going to be asking questions that may benefit other members of the community. Or, other members of the community may be able to answer your questions. Therefore, it is up to you to ask those questions in a forum where your answers will not only benefit you, but others as well.
Resources: Books
In some ways, there are a wealth of resources for you to use. In other ways, you're going to wish you had better documentation. Because you're working with a free and open project, I want to encourage you to either (1) document and report things that you wish were better, or (2) contribute fixes/documentation/solutions back to the project. That's how real open source software works, folks.
There are a number of books. These are out of print, and scans of them are made available to you here:
- A Tutorial Introduction to Concurrent Programming in Occam by Dick Pountain and David May.
- Programming in occam2 by Alan Burns.
- Introduction to the Programming Language Occam by Daniel Hyde.
- An Introduction to occam2 Programming by Bowler, Kenway, Pawley, and Roweth.
- Introduction to occam2 on the Transputer by Brookes and Stewart.
None of these books have anything to do with programming in occam-pi on the Arduino. However, the subset of occam-pi that we are using is, for all intents and purposes, occam2. Therefore, these books are (in general) very relevant. Pountain's book is, by far, my favorite.
Resources: WWW
There are fewer resources on the WWW than I would like, but you may find them useful just the same.
- The occamdoc for the Arduino modules may be very useful. (See note, below...)
- On occam-pi.org we have some links to a variety of learning resources.
- The occam-pi reference guide is a good quick reference.
- The occam 2.1 reference is a longer document, but covers details of the language that you may be curious about.
- Plumbing for the Arduino may be of use.
This last link (Plumbing for the Arduino) will help introduce you to programming in occam on the Arduino, but it won't take you very far.
I've started a "cookbook"-style resource, which I've brilliantly titled A Plumbing Cookbook for the Arduino. I will be updating it as you ask questions, so check back here for the most recent version.
Note that this book is an open project; you can contribute to it, too.
Also, we can modify/improve the Plumbing module as a result of your use. That is, I have commit rights on the repository, and I write a lot of the documentation... so, if you think we can improve the Plumbing module, by all means... make suggestions on the users list, and we can discuss them and (most likely) put your suggestions into practice.
NOTE TO ME: To build the occamdocs, first run:
avr-occamdoc -d docs/ include/*.module
then
scp -r docs/* rockalypse@rockalypse.org:~/rockalypse.org/courses/cs220f11/resources/occamdoc/
from the arduino directory.
What Next?
Well, that's tough to say. You each have individual projects, and you need to dive into those. I'll be posting some evaluation criteria Real Soon Now, because you need to know what I expect in terms of excellence. (In truth, I'd like us to discuss that a little bit... I think you should be part of the discussion regarding setting that bar.)
So, for now: dive in! I've provided you with quite a few resources, and you should be able to get started from here.
