Saturday, July 31, 2010

Scooterputer, an Open Source Scooter Dashboard

Open Source is awesome. 1 day after the announcement of the LCDash GT, and how it helps people hack car engines with MegaSquirt, comes a project from Kurt about a 100% Open Source Hardware-based computer that lets you see sensor read-outs, and realtime information connected to a scooter, which naturally make someone a better driver!




It's called the "Scooterputer" ... and it uses parts from Adafruit, Liquidware, and Sparkfun, and all the source code is open source (I uploaded it to the Open Source app store site).







Kurt used the antipasto arduino ide, which brought a tear to my eye, thinking that all those hours slaving away with Chris getting that to work was time well spent :-)



This is a custom, homebrew shield Kurt made to house and connect up all the sensors:

Kurt has a ridiculously well written tutorial on how he built everything up on his site over here...
and Make blog even picked it up, and there's a funny conversation about it over at the Arduino forums.

Friday, July 30, 2010

Introducing the LCDash GT: Hacking Your Engine with Open Source Hardware

Just in time for the Maker Faire Detroit, Justin, Jake and I have been working on the brand new LCDash Operating System, and hardware upgrade. This is the brand new LCDash GT. The GT edition has more memory, a faster processor, lighter-weight bootloader, a much more streamlined circuit design than the original LCDash. This means it's much more DIY-friendly, and hackable.

It's also the first time that a 100% Open Source engine controller and engine readout system has been available for people that are familiar with the OpenPort Cable, MegaSquirt EFI, or OBD2/OBDII Elm Protocol:



Each of those protocols allow you to read the output of the engine parameters, and even set them on the fly if you're using MegaSquirt. This means being able to change the fuel-oxygen-throttle mixture and fuel ratio, for either higher performance (more gas), or better gas mileage (less gas) at a given RPM of the engine.

A quick word of warning: OBDII hacking and EFI programming is a jedi art, for black-belt car guys, but there's actually a really lively, active community of hackers who have spent a bunch of time hacking their own engines using the MegaSquirt. And Justin and Chris are two such guys :-) It's amazing how much power you can pull off the line in a Mitsubishi that's been rigged up to a MegaSquirt...



Anyway, without further ado, here's an updated video that Justin made:



Here are two videos of the base LCDash in action, from timbo and MegaScott:










And here's a video that Mike made of the original (running a slower version of the OS, and green PCB representing the older schematic) connected to the MegaSquirt:




If you haven't heard of the MegaSquirt hardware project yet, it's a pretty popular platform for hacking the OBDII interface to the engine. OBDII is a protocol used by many manufacturers as an interface between the EFI and the main computer which distributes and runs the spark plugs, timing, and engine electronics based on a variety of sensor inputs (like O2, RPM, gas pedal depression, and sometimes even car angle, altitude, knock sensor, crank position, turbo boost, current speed, etc.). It's a pretty ambitious project, and can be a challenge to hack at times, having to constantly go back and forth between a PC, and the MegaSquirt, and reprogramming the Arduino. The LCDash GT presents a touch-screen interface that makes it really easy to see what the MegaSquirt is doing, and adjust ratios on the fly (e.g. at an autotuner, or dyno station).

For instance, here's a video by Danny showing the MegaSquirt hooked up to a laptop, the same way it would be hooked up to the LCDash:




The MegaSquirt basically let's you do crazy things (that are of obvious questionable benefit, but definitely cool) to a car's engine, like make it have sputtering launch control:








Here's a link to the MSruns forum of people that have hacked their cars using the MegaSquirt, for instance...
Justin just loaded the LCDash up on the shop, and it's available as a kit, or as a fully assembled version at the Liquidware Shop.

Wednesday, July 28, 2010

I'm headed to Maker Faire Detroit!

This coming Saturday and Sunday are going to be pretty action packed for me... I'm driving from Boston to Detroit with Mike to go to Maker Faire. Talk about a long drive, but we're going to celebrate in style by listening to the new Eminem CD. Normally I wouldn't listen to his music, but I figured I'd try to get in the mood, so why not?


Maker Faire Detroit 2010 is taking place this Saturday from 9:30 am to 8:00 pm, and Sunday from 9:30 am to 5:00 pm, at the Henry Ford museum. This is cool on a number a levels, I think. Firstly, Henry Ford is to the Detroit auto crowd, as Eli Whitney was to the Northeast: an inventor who kick-started an entire industrial revolution.


That's inspirational to me... and Mike too, he's been talking about how badly he's wanted to go to the Ford museum ever since he was a kid. He and I are both pretty big into cars (if you've ever visited the Liquidware lab, you know that this is true!).


Anyway, here are some of the promotional pictures... please let me know if you want me to bring any special projects along with me to show you...






If you already emailed me, I'm looking forward to seeing you... and if you want to carpool, just let me know...

Tuesday, July 27, 2010

The Death & Rebirth of an American Geek Calculator

The year: 1995. I’m in middle school. I have two calculators, TI-82’s to be precise. Why 2? Because on math tests and quizzes, I found that using Solve() was so slow that I’d start one on a problem, and then use the other while the first got the answer. Calculator-based multitasking in its truest form. The more calculators you had, the nerdier you were. Alpha-nerd, and nerd-cred if you will. It wasn’t just me, I was passing on a long generation of calculator-based nerd credibility:

Something has gone horribly wrong. Fast-forward to the epilogue future-present. The world according to my middle school dreams was supposed to be filled with calculators, and super-man-geeks and “not-men” (aka !men, or "women") were supposed to be walking around, carrying calculators, wearing super calculator watches.

Bling. Bling.

I used to have a tactical vest that I'd wear while programming in high school. Except instead of guns and ammo, my weapons were Sine, Cosine, and Arctangent. Full, semi-automatic Cot()-.45 degree Artangent, nevermind you. I used to use the vest to hold my TI and HP calculators. I dreamed of the day when I'd carry around a brushed titanium briefcase filled with top-secret, uber-hacker calculators for cracking crypto hash algorithms.

But alas, that future never came to be...

In the past few days of revelry while I’ve used my R-based scientific calculator, I’ve come to realize something. This is the first time in years that I’ve actually carried around a calculator again. It got me thinking… and I started to look around as I walked through Boston. No one carries calculators any more!

The calculator, as it turns out, is a casualty of convergence. In other words, the calculator got “OJ Simpsoned” … if it doesn’t fit (in your assortment of devices), you must acquit (and stick it in a box of old gadgets).



The next generation calculator device, and the calc-based society of the future I always dreamed about, never came about. This is why I think that never happened: at the low end, calculators have been absorbed into handheld phones. Blackberry, iPhone, Android devices all have apps that replicate the features of calculators, so why carry around a calculator anymore? At the high end, calculators didn’t have enough RAM or dataspace memory to prove themselves useful or capable as data analysis needs grew. Furthermore calculators were quite a pain to transfer data on and off of, so people just used computers with Excel, Matlab, Mathematica and R. The calculator just got squeezed out.



I collect calculators like some guys collect vinyl records and model trains. It’s a hobby, and it used to be an obsession. But ever since I went on my first date, it’s kinda gone away, sadly. Well, the girlfriend part wasn’t sad, but the diminished level of calculator collecting was.

It is very telling when you find a hobby of yours starts to pop up in museums and historical archives. That means you’re old:


It's even worse when there's a history paper written about it:


But something has changed, and I’m determined to figure out what happened. Since Koen helped me get R running on the BeagleBoard, I’ve been carrying my newfangled scientific programming open source calculator around with me, proudly, and finding reasons to pull it out and get R running. It’s wonderful, inspiring, and totally contagiously nerding out anyone who asks me about it, sort of like a virus spreading and zombifying people in an underground lab ... like these guys did:


I think calculators need to be re-invented, and I think I’ve stumbled on at least part of the equation. The Beagleboard / BeagleTouch – based R calculator is much more than “just a calculator”. It’s a hacker / calculator nerd’s (me) dream come true. It provides exactly what I need: a way to compute randomly sampled arrays, parallel compute transposed lists on the fly.
Instead of calculating the tip at the end of a meal, I can use this thing to calculate tips for the entire freakin’ restaurant!

In the words of Kirsten Dunst: Bring it on.

Naturally, she was referring to the re-invention and rebirth of the Great American Geek Calculator!


Naturally.

Monday, July 26, 2010

BeagleTouch meets Makerbot

By now, almost everyone's heard of the Makerbot, it's a DIY 3D printing system made by the guys down in NYC (mostly notably, Bre Pettis, who Chris, Matt, and I met down in NYC a little while ago - and who we also met again at the San Mateo Maker Fair):





Anyway, while Koen was hacking away on the solution to getting R up and running on the BeagleBoard, he built a coaster, which happens to hold the BeagleBoard quite nicely, and also looks pretty slick with the BeagleTouch:





So without further ado, here's Koen's picture:



Pretty nifty... although I haven't tried my hand at running a Makerbot myself yet, this is definitely some solid inspiration... Justin has one in the back room, and maybe now it's time to play with it? :-)

Sunday, July 25, 2010

R runs on the Beagleboad & BeagleTouch!

On Wednesday, in the library, Chris and I talked about how impossible it would be to port R to the Beagleboard platform, given all the insane dependencies on obscure libraries, some java based, some fortran based, you name it.

On Thursday, I read Karim's most recent article with Ned Gulley called, "The Determinants of Individual Performance and Collective Value in Private-Collective Software Innovation". Naturally, this wasn't a wiki-like contest, but there sure was plenty of reuse (R is an established platform), code recombination (Chris + Will + Koen + Mine). In this case, however, I suppose you could say the goal was to increase the "free-rider" problem. That, or I just think it's cool to have a portable R-based gadget. :-)

Ps, totally random aside, this graph is awesome, it proves that multiple people working together for a common good get a lot farther than any one person by themselves (obviously this is true, but this is quantitative, numerical evidence):


On Friday, I posted a quick blog article about porting R to the Beagle & Angstrom platform. Chris thought it would be very difficult, I thought it would be impossible, and so I offered $1,000 to anyone that could help.


On Saturday, I got about a dozen emails, and 3 folks who said they were going to try (4 if you include me, since I figured maybe I could do it after all).

On Sunday, I got an email from Koen with the following picture, and code screenshot printout:


Total elapsed time since blog post: less than 36 hours

Naturally, I wanted to make sure I could replicate it myself, and so I was able to run the following commands on the BeagleBoard (with a wifi internet connection up and running):



wget http://www.liquidware.org/r_2.11.1-r0.5_armv7a.ipk

opkg install http://www.angstrom-distribution.org/feeds/2008/ipk/glibc/armv7a/base/tk-dev_8.4.19-r0.1_armv7a.ipk

opkg install http://www.angstrom-distribution.org/feeds/2008/ipk/glibc/armv7a/base/gfortran_4.3.1-r11.1_armv7a.ipk

opkg update

opkg upgrade

reboot

opkg install -force-depends ./r_2.11.1-r0.5_armv7a.ipk

opkg bash



And then I popped it up, and got this:


2shay, Koen :-)


UPDATE: I just Googled around, and there was apparently also another possible solution, cooked up by HNS, although technically not doable with Angstrom (which is critical given some of the drivers and whatnot I've patched into my version of Angstrom), it gets R up and running with Debian:

---Copied from the mailing list---

Does this qualify as well?

Install Debian Lenny, u-boot and a kernel on a SD card from

http://download.goldelico.com/ombeagle/20100715-lenny/

boot and login. Make sure the host works as a internet router.

Linux bb-debian 2.6.32 #48 PREEMPT Tue Jun 8 14:21:52 CEST 2010 armv7l

The programs included with the Debian GNU/Linux system are free
software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Jul 23 12:48:05 2010 from 192.168.0.200
bb-debian:~# apt-get install r-base
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
libgfortran3 libpaper-utils libpaper1 r-base-core r-cran-boot r-cran-
cluster r-cran-codetools r-cran-foreign r-cran-kernsmooth r-cran-
lattice r-cran-mgcv r-cran-nlme r-cran-rpart r-cran-survival r-cran-vr
r-recommended tk8.4
unzip zip
Suggested packages:
ess r-doc-info r-doc-pdf r-doc-html r-mathlib
Recommended packages:
r-base-html r-base-latex r-base-dev
The following NEW packages will be installed:
libgfortran3 libpaper-utils libpaper1 r-base r-base-core r-cran-boot
r-cran-cluster r-cran-codetools r-cran-foreign r-cran-kernsmooth r-
cran-lattice r-cran-mgcv r-cran-nlme r-cran-rpart r-cran-survival r-
cran-vr r-recommended
tk8.4 unzip zip
0 upgraded, 20 newly installed, 0 to remove and 1 not upgraded.
Need to get 18.2MB of archives.
After this operation, 64.3MB of additional disk space will be used.
Do you want to continue [Y/n]? y
Get:1 http://ftp.de.debian.org stable/main libgfortran3 4.3.2-1.1 [211kB]
Get:2 http://ftp.de.debian.org stable/main libpaper1 1.1.23+nmu1 [21.9kB]
Get:3 http://ftp.de.debian.org stable/main libpaper-utils 1.1.23+nmu1 [18.3kB]
Get:4 http://ftp.de.debian.org stable/main zip 2.32-1 [110kB]
Get:5 http://ftp.de.debian.org stable/main unzip 5.52-12 [163kB]
Get:6 http://ftp.de.debian.org stable/main tk8.4 8.4.19-2 [1022kB]
Get:7 http://ftp.de.debian.org stable/main r-base-core 2.7.1-1+lenny1 [11.0MB]
Get:8 http://ftp.de.debian.org stable/main r-cran-boot 1.2.33-1 [458kB]
Get:9 http://ftp.de.debian.org stable/main r-cran-cluster 1.11.11-1 [343kB]
Get:10 http://ftp.de.debian.org stable/main r-cran-foreign 0.8.27-1 [154kB]
Get:11 http://ftp.de.debian.org stable/main r-cran-vr 7.2.42-1 [971kB]
Get:12 http://ftp.de.debian.org stable/main r-cran-kernsmooth 2.22.22-1 [51.7kB]
Get:13 http://ftp.de.debian.org stable/main r-cran-lattice 0.17-10-1 [598kB]
Get:14 http://ftp.de.debian.org stable/main r-cran-mgcv 1.4-1-1 [658kB]
Get:15 http://ftp.de.debian.org stable/main r-cran-nlme 3.1.89-1 [1346kB]
Get:16 http://ftp.de.debian.org stable/main r-cran-survival 2.34-1-1 [833kB]
Get:17 http://ftp.de.debian.org stable/main r-cran-rpart 3.1.41-1 [160kB]
Get:18 http://ftp.de.debian.org stable/main r-cran-codetools 0.2-1-1 [39.8kB]
Get:19 http://ftp.de.debian.org stable/main r-recommended 2.7.1-1+lenny1 [2208B]
Get:20 http://ftp.de.debian.org stable/main r-base 2.7.1-1+lenny1[29.7kB]

Fetched 18.2MB in 21s (842kB/ s)

debconf: delaying package configuration, since apt-utils is not installed
Selecting previously deselected package libgfortran3.
(Reading database ... 25829 files and directories currently installed.)
Unpacking libgfortran3 (from .../libgfortran3_4.3.2-1.1_armel.deb) ... Selecting previously deselected package libpaper1.
Unpacking libpaper1 (from .../libpaper1_1.1.23+nmu1_armel.deb) ... Selecting previously deselected package libpaper-utils.
Unpacking libpaper-utils (from .../libpaper- utils_1.1.23+nmu1_armel.deb) ...
Selecting previously deselected package zip.
Unpacking zip (from .../archives/zip_2.32-1_armel.deb) ...
Selecting previously deselected package unzip.
Unpacking unzip (from .../unzip_5.52-12_armel.deb) ...
Selecting previously deselected package tk8.4.
Unpacking tk8.4 (from .../tk8.4_8.4.19-2_armel.deb) ...
Selecting previously deselected package r-base-core.
Unpacking r-base-core (from .../r-base-
core_2.7.1-1+lenny1_armel.deb) ...
Selecting previously deselected package r-cran-boot.
Unpacking r-cran-boot (from .../r-cran-boot_1.2.33-1_all.deb) ...
Selecting previously deselected package r-cran-cluster.
Unpacking r-cran-cluster (from .../r-cran-
cluster_1.11.11-1_armel.deb) ...
Selecting previously deselected package r-cran-foreign.
Unpacking r-cran-foreign (from .../r-cran-
foreign_0.8.27-1_armel.deb) ...
Selecting previously deselected package r-cran-vr.
Unpacking r-cran-vr (from .../r-cran-vr_7.2.42-1_armel.deb) ...
Selecting previously deselected package r-cran-kernsmooth.
Unpacking r-cran-kernsmooth (from .../r-cran-
kernsmooth_2.22.22-1_armel.deb) ...
Selecting previously deselected package r-cran-lattice.
Unpacking r-cran-lattice (from .../r-cran-
lattice_0.17-10-1_armel.deb) ...
Selecting previously deselected package r-cran-mgcv.
Unpacking r-cran-mgcv (from .../r-cran-mgcv_1.4-1-1_armel.deb) ...
Selecting previously deselected package r-cran-nlme.
Unpacking r-cran-nlme (from .../r-cran-nlme_3.1.89-1_armel.deb) ...
Selecting previously deselected package r-cran-survival.
Unpacking r-cran-survival (from .../r-cran-
survival_2.34-1-1_armel.deb) ...
Selecting previously deselected package r-cran-rpart.
Unpacking r-cran-rpart (from .../r-cran-rpart_3.1.41-1_armel.deb) ...
Selecting previously deselected package r-cran-codetools.
Unpacking r-cran-codetools (from .../r-cran-
codetools_0.2-1-1_all.deb) ...
Selecting previously deselected package r-recommended.
Unpacking r-recommended (from .../r-
recommended_2.7.1-1+lenny1_all.deb) ...
Selecting previously deselected package r-base.
Unpacking r-base (from .../r-base_2.7.1-1+lenny1_all.deb) ...
Setting up libgfortran3 (4.3.2-1.1) ...
Setting up libpaper1 (1.1.23+nmu1) ...

Creating config file /etc/papersize with new version
Setting up libpaper-utils (1.1.23+nmu1) ...
Setting up zip (2.32-1) ...
Setting up unzip (5.52-12) ...
Setting up tk8.4 (8.4.19-2) ...
Setting up r-base-core (2.7.1-1+lenny1) ...
Setting R_PAPERSIZE_USER default to 'a4'

Creating config file /etc/R/Renviron with new version
Setting up r-cran-boot (1.2.33-1) ...
Setting up r-cran-cluster (1.11.11-1) ...
Setting up r-cran-foreign (0.8.27-1) ...
Setting up r-cran-vr (7.2.42-1) ...
Setting up r-cran-kernsmooth (2.22.22-1) ...
Setting up r-cran-lattice (0.17-10-1) ...
Setting up r-cran-mgcv (1.4-1-1) ...
Setting up r-cran-nlme (3.1.89-1) ...
Setting up r-cran-survival (2.34-1-1) ...
Setting up r-cran-rpart (3.1.41-1) ...
Setting up r-cran-codetools (0.2-1-1) ...
Setting up r-recommended (2.7.1-1+lenny1) ...
Setting up r-base (2.7.1-1+lenny1) ...
bb-debian:~# R

R version 2.7.1 (2008-06-23)
Copyright (C) 2008 The R Foundation for Statistical Computing
ISBN 3-900051-07-0

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> x <- c(10.4, 5.6, 3.1, 6.4, 21.7)
> y <- c(x, 0, x)
> 1/x

[1] 0.09615385 0.17857143 0.32258065 0.15625000 0.04608295
> q()

Save workspace image? [y/n/c]: n
bb-debian:~# uname -a
Linux bb-debian 2.6.32 #48 PREEMPT Tue Jun 8 14:21:52 CEST 2010 armv7l
GNU/Linux
bb-debian:~# cat /proc/cpu
cat: /proc/cpu: Is a directory
bb-debian:~# cat /proc/cpuinfo
Processor : ARMv7 Processor rev 3 (v7l)
BogoMIPS : 696.20
Features : swp half thumb fastmult vfp edsp thumbee neon vfpv3
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x1
CPU part : 0xc08
CPU revision : 3

Hardware : OMAP3 Beagle Board
Revision : 0020
Serial : 0000000000000000
bb-debian:~#

How to make a Linux Beagleboard Gadget Wifi-enabled

It's been a busy past few weeks, but thanks to Chris and Will, the Beagle Gadget using the BeagleBoard and the BeagleTouch, can now use Wifi - and it's seriously fast! This means that this is the first official Beagleboard-based wireless handheld Linux device... that's a lot of buzzy words, ha.


Here's a video of the Beagle Gadget communicating over wireless... and... browsing the web using ... drum roll ... Firefox. That's crazy. I remember the days when I was lucky to get a serial communication link going on my PalmOS Treo handheld, let alone wifi. But suffice to say, here it is, actually working:

Here's how I was able to do it:

Step 1: Format the SD card
I followed the instructions here, and made a formatted BeagleBoard SD card with the updated OS that include the kernel module to get WIFI working.
For the more hackerishly inclined, here's a direct link to the kernel image and to the rootfs image.
For reference, these links are also at the bottom of the BeagleBoard page :
Step 2: Attach the USB ethernet module
I used this USB Wifi module, so at least if you have this one, you're guaranteed to work...
I took it out of the case by cracking it open with a screw driver - not because it added anything, but just because it looks a lot cooler that way.
I plugged it into the small USB hub, but only because I also wanted to plug in a USB mouse and mini keyboard. Otherwise there wasn't really any particularly good reason to use the USB hub - I could have plugged the USB wifi module directly into the Beagle Board.

Step 3: Configure the wifi settings
There are also some more detailed instructions on the wiki for this next step...
Once it was plugged in, and Linux was booted up, I edited the file at /etc/wpa_supplicant/wpa-supplicant.conf. This file contains the parameters for the wifi adapter module, and mine looks something like this:
ap_scan=1
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="<your ssid here>"
scan_ssid=0
proto=WPA
key_mgmt=WPA-PSK
psk="<your password here>"
pairwise=TKIP
group=TKIP
}

Step 4: Turn on wifi

This is the easiest step of all... simply issue this command:

$ ifup wlan0

And then issue this command:

$ ping www.liquidware.com
or
$ ping www.apple.com

Viola!

PS. If you're super lazy, I've put all the parts together in a big kit here and here.

And here's another video showing off Firefox actually browsing on the Beagleboard Linux Gadget:

Saturday, July 24, 2010

Open Source Hardware Summit: OSHW Definition & License

Like so many things in the Open Source World, concepts are defined by the community, the group, and the practitioners of a concept.

Open Source Hardware is an ideal, that many people have come to shape and grow.

Just recently, there's been a huge amount of energy put into building a common set of terms about what "Open Source Hardware" is, so that a license can be built. There have been fits and starts over the years, and even a recent attempt to try to find a way for the Free Software Foundation, and the Creative Commons to extend their licenses to include hardware... but they were ultimately unsuccessful.

Part of the reason they weren't successful, is because there's something kind of ironic with the idea of creating a license, which is usually meant to protect *against* something, for a set of schematic files which you're intentionally *giving away*.

But!

The first step, of course, is to at least agree about what Open Source Hardware actually is, because it's not that straight forward. So on September 23rd, later this year, a bunch of guys I know from Boston are going to head down to NYC to attend:

The Open Source Hardware Summit
World Fair Grounds
47-01 111th Street
Queens, NY 11368

And there, we'll beat up the emerging definition, which is listed here at FreedomDefined.org.



September 23rd... if you want to car pool with me down to NYC, just let me know, Justin and I will be there...

Friday, July 23, 2010

Help port R to the BeagleBoard / Angstrom for $1,000

Ok... I've been fooling around with the BeagleBoard for some time now, and I have a couple observations to make. First of all, it's crazy powerful. You can do a lot more than you'd expect, since the processor is so fast. I mean, seriously, it's faster than most Android handsets out there. So every app that could run on an Android phone can run on the BeagleBoard (in theory).

The BeagleBoard has full Linux programming libraries, Makefile, gcc, perl, you name it, built in, and that makes programming a cinch in most cases. However.... some of my favorite applications on Linux are a little harder than others to port to the BeagleBoard. Including R, for instance. R is a statistical programming package that a lot of people use in the government and military and NSA to do advanced signal and data processing. I've been learning it in my spare time, and I think it would be really cool to have a portable version of it on a handheld.

I tried to get it running on my BeagleBoard, but alas, I'm not much of a software guy (I'm much more hardware). I failed to get past some of the java lib dependencies, and don't know how to install those on Angstrom without totally recompiling everything. I was over at MIT this past week, just reading in the QA stacks library (I sneak in from time to time and just camp out there for hours with Chris), and we started talking about how whether it was doable. Chris bet me $500 that I could do it. Then I joked, well I'll bet $500 that I can't.

$500 + $500 = $1,000

I would pay $1,000 in real dollars (not gift certificates and useless things like that, I mean actual cash) to the first person who can demonstrate it running, and provide links to either a tar, or zip, or image, so I can get it up and running on my own too. The solution has to be open source, and publicly shareable.


Personally, I think it's impossible. That's why I'm saying $1,000 and not like $200 or something like that. But even I'm somewhat realistic, so here's a list of "anti-conditions":

  • R has a lot of built in libraries that do graphing, visuals, etc. it doesn't need to do any of that stuff
  • Command line only is fine, no need for to port the GUI, I don't even know if that's possible
  • Obviously it should run whatever can be run within the memory limits of the BeagleBoard in RAM, and that will probably mean some of the base packages won't auto-load
  • It should at least have a basic R command line, and be able to instantiate arrays and user defined functions, etc.

I don't really want to call this a "contest" because it's not, it's just a $1,000 check that I'll write if someone can help me port R to the BeagleBoard... if it's even possible.

Thursday, July 22, 2010

Why industrial control and machinery needs open source

I was going to write up a blog about how to use the Beagle Board gadget with the new wifi module that will, chris, and I have gotten up and running. But then I started browsing around the web for open source industrial design projects (aka ISC's) to demonstrate on it, and ran into something quite interesting...

Dun dun dun....

So just to get this straight... I'm looking for open source industrial design control systems, and within minutes, I find an article that is the perfect example of why industrial control systems need more open source? Yup.

What is Stuxnet?

It's a pretty ridiculous virus that someone wrote to infect engineering systems and control systems designed by Siemens. This is no joke, and I'm not trying to be coy, but every once in a while, I can appreciate well written code. stuxnet finds a way to bootstrap into the auto-read-from-USB code of Siemens' engineering terminals, and then spreads. Brilliant!

Here's a little chart from technet that shows how quickly stuxnet spread:


There's one problem, though...

Anyone who ever programmed an open source project would have known that this is a ridiculous thing to do. I mean, you can't seriously expect to just run the contents of an inserted USB drive - you have to at least do some kind of checks on it.

Alas, Siemens' SCADA, or "supervisory control and data acquisition" is still under threat, and so I figured I'd so some research on what SCADA does.

Here's my best attempt, after wading through a bunch of marketing hoopla:

It's a visualization system. Like this:

Connected to a bunch of pressure sensors that measure water pressure. Like these:


With an occasional GPS sensor thrown in the mix. Like this:



Ummm.... ok. I can make one of those Open Source pretty easily... in fact, here's a writeup of connecting the BeagleBoard to a GPS visualization system.

http://gpspp.sakura.ne.jp/rtklib/rtklib_beagleboard.htm

And here are some of the cool interfaces you can run in the Linux environment using that tool:

It's not quite there, but over the next couple weeks, I'm going to try my best to recreate a fully Open Source pressure and gps monitoring visualization system :-)

That's not vulnerable to USB host snooping attacks... ha!