Wednesday, November 13, 2013

My Raspberry Pi Bramble Goes to College

I am proud to have a son who is a freshman at Bard college and who is taking Operating Systems (Comp Sci 326).  The professor teaches this class using Raspberry Pis, and it is really cool to see what kinds or projects they are doing.  Everyone has to do a class project, and my son has decided to do a parallel merge sort using the Raspberry Pi bramble using some kind of either divide-and-conquer, or master-slave architecture.  He hasn't decided yet how to arrange things.

I think it's more fun to watch him consider all of the pros and cons of different designs than try to sort it out myself.  My original goal for the bramble was to create a parallel environment to perform computations for my neural networks course (Coursera, "Neural Networks for Machine Learning").  However, we did everything in octave in a single Linux image, and it was really fast.  I coudln't figure out a better way to architect the computational environment.  This was my first experience with a numerical methods package, and I was duly humbled as a nube (my expertise is in operating systems and middleware).

My next idea was to simply run the World Community Grid on each node to create an array of individual elements that were admittedly slow, but which might perform respectably in aggregate.  Enter my son, and his idea for parallel merge sorting.  I'm going to get the bramble back at the end of the semester, and we'll play with it then to see what is possible from a WCG standpoint.  If I'm lucky, my son will have other ideas that will take us for another adventure in computing.

Friday, November 8, 2013

Virtual Machines and How I Use Them

Virtual Machines are nothing new.  I provisioned my first KVM on a Linux machine probably 5 or 6 years ago, and it  didn't go very well.  You really had to understand how a collection of different parts fit together, and then have some luck to make it all work at once.  My biggest problem was network settings - nothing ever seemed to work right.

Things really got better a couple of years ago.  I started with VMWare, and was impressed with how well it all worked, but was really disappointed to realize that I couldn't provision my VM on one physical device, and then run it on another unless I bought a license.  I settled on VirtualBox, because I need to run the same VM on either a Linux or a Windows host.  I'm very impressed with how well things work - from sharing drives and clipboards to the ease with which networking and printing is handled.  Just make sure you have your VMs set up to build and use the VirtualBox guest additions.

I now walk my VM on a passport drive between my home and work machines, and things run flawlessly.  My work requires my hard drive to be encrypted, which is a good thing, because in the event that that my drive is lost or stolen, the data on it is safe.  I also get multiple copies of my environment - one on each physical machine, and one on the backup drive.  Having suffered a head crash on my work machine before and dealing with the re-building effort, I sleep well knowing that I have redundant versions of my machine.

In a similar way, I use a VM for all of my MOOCs.  I've built up a set of notes and projects for 3 courses now, and this information is precious to me.  My VM is a container for all of my things, and I don't worry about losing it.

In a few weeks I'm attending a hands-on lab to install and configure an OpenStack environment (http://www.meetup.com/OpenStack-New-York-Meetup/events/144883832/).  This requires two VMs so that we can simulate working in a multi-node environment, all within a single laptop.  So not only are VMs convenient and secure when encrypted, they allow you do do things that just can't practically be done with physical hardware.  VMs have really become an essential part of my computing life, and I can't imagine working without them.


Saturday, October 26, 2013

Hello Again ...

I have to admit that my Raspberry Pi bramble has been gathering some dust lately, primarily because I've been off taking classes again.  I've spent a lot of tie on two very good classes that I would recommend to anyone:
  • CS188.1x - Artificial Intelligence through edX.  The class is taught by Dan Pieter from Stanford.  It's an excellent class.  I enjoyed it a great deal, and learned a lot of things about machine learning that I just didn't pick up from the vision-based classes that I've had before.
  • Coding the Matrix: Linear Algebra Through Computer Science Applications.  This class is taught by Philip Klein at Brown University, and it's offered through Coursera.  It is another fine course.  I took this for two reasons - 1) I never really learned linear algebra the way I needed to as an undergrad, and 2) it was all in Python.  This is my 3rd course now that is Python based, and I can now say that I'm reasonably competent at it as a language.
I've met the minimum requirements in all 3 of my classes so far to get a certificate in each.  It's hard though when things get busy not to abandon a class because there isn't enough time. I've come to the realization that I probably won't do a lot more than meet the minimum requirements in every class I take, even though I would like to spend the time to get high grades in each class.  This doesn't diminish the value I see in taking each class.  All 3 of my classes have been great ways to sharpen my skills for the next steps that I want to take in my career.

Tuesday, January 1, 2013

Orchestrating the Nodes of a Bramble

One of the things I've been avoiding is creating a set of tools to manage the nodes of this bramble, but it's really the best thing to do in the long run.  I just didn't want to get side tracked with a programming task that isn't directly related to getting this bramble to work in a parallel fashion.

Although its mixing metaphors pretty badly, what we need a Maestro - a conductor who can get all of the nodes to do the same thing at the same time, much like an orchestra.  One has to wonder though what an orchestra characterized as a bramble would sound like.

At any rate, I've created a kit of primitive tools that help a lot in getting the final configuration together for each of the nodes in the bramble.  They are basically a set of shell scripts that allow you to distribute work to each node in a SIMD fashion.  This makes doing the same thing in several places at once much easier.

I'm planning to put this toolkit out for everyone to use, but I have to clear it with my employer, who technically owns everything in my head.  Watch this space.