! FLASH ! Stretch goal: Raspberry Pi Connel ... see Update 4
! FLASH 2 ! Real-time programming ... see Update 6
Would you believe that half of the art of computing has been neglected since around 1990? And it's the half that is best for
- robotics and control
- anything involving space, time, or parallel programming!
It's the wide (exposed, raw) model, as opposed to the deep (abstract, hidden) model, and it's in danger of becoming a lost art. I've been carrying its banner for 25 years, since the glory days of occam and the Transputer, and I want to leave a legacy of this clean, simple computing that adjusts to new problems without a complexity explosion.
Deep Computing (the modern standard) focuses on namespaces and abstract algorithms, hiding the "plumbing" as much as possible. Wide Computing is a contrarian model that focuses on data flow, timing and physical realities, exposing the "plumbing" that connects independent working parts. (This is why I refer to a crawl space.) If you have ever noticed that getting things to talk reliably is the major hassle in a working program, then Wide Computing can be your friend.
Here's the challenge. The computing monoculture tells us, "The more abstraction, the better." That means things nested within things within things, and on the outside, dominating everything, a rectangle on the screen: Graphical User Interface. My data and my task have to fit. The "plumbing" is nearly impossible to reach.
Suppose I want to do some temperature and humidity sensors, or some space-probe radio reception, or drive a little tracking actuator? Right away: what app can I use? And what OS will it require? And what programming language? On what CPU? And can it accept my data or link up to my output? And if I get all that working, let one little thing change and it goes off the rails...
Wouldn't it be great if we could just take up the data as a simple list, and send out the commands as simple timed numbers, and get each part working, and have them all talk to each other with ease and never need any attention? Well, it's easier than you think. My product Connel (pronounced kuh-NELL), based on decades of experience, will get you there in little baby steps.
What is Wide Computing?
The basic idea of Wide Computing is to get control over the way two pieces of software or hardware communicate, putting that on the outside. Once you can do that, you can replace the software or hardware on either side, and the system will continue to work as long as it continues to speak the same protocol. This model underlies a lot of very successful, long-lived systems like the X Window System or the Internet. Wide Computing can be done simply and methodically, and Connel makes it easily accessible to the average programmer.
Everyone can write what they are comfortable with, chatting with real data from the beginning, instead of waiting till the whole program interface is ready. You can even swap hardware for software or vice versa (this is called "hardware-software equivalence"), or insert a spy between pieces, or replace one with a simple test module. Different people can write different pieces using different languages in different OSs. Connel was started as a professional tool to make it possible for an embedded Windows program and several embedded Linux programs to be coded the same way and talk at will.
Path to rocket science
Bundled with Connel is my book, which is a great learning tool for Wide Computing. It explains the theory in terms anyone can understand (remember, we are escaping from abstraction!). And it shows all the critical, practical tools that make Wide Computing possible on all standard CPUs and embedded processors in bare-bones languages like C. These are like "gatekeepers" that set you free to make code incredibly responsive and flexible. Everybody who does real projects is forced in the end, in a piecemeal fashion, to learn these.
Wide Computing gives you their big picture, which will allow your work to branch out without major rewrites or exponential difficulty curves. To apply this big picture to any size project, the book will teach a pseudocode technique that is a variant of occam, the native language of the classic INMOS Transputer.
In fact, Wide Computing techniques flatten out the difficulty curve so that new, unplanned features can be added with only linear difficulty. This flatness is part of the very structure, like new villages in a pioneering territory. Just imagine where that can lead. Outer space, for example. We have many such possibilities in mind (I am not the only project leader), and you can be in on the first steps!
This project would not be where it is without the work of many others. I wish to thank my daughters Elizabeth and Alice and my wife Jeanne for all their help with the video. It could not have happened without them. Also, I thank my son Tom and my colleagues William and Dave Swanson, Rob Fryer and Trey Hunner for advice in development, and especially for the chance to do real robotics and satellite science. I am more of a theoretician, but with these other creative people pitching in, some real and impressive things are getting done.
Risks and challenges
Q: How can you - one developer in only one year - deal with multiple languages and OSs in their fantastic complexity?
A: I hit the high spots, and Wide Computing helps me keep it simple. (1) Connel is written in a plain subset of C (no malloc, no C++ constructs). Most languages can embed this, or something very close to it in syntax. (2) I do Windows and Linux. I will attempt to get Connel working in the Mac, but I can't promise anything, as it depends on what Apple allows in its BSD layer. It works on both virtual and real machines; I am actually running it on a Mac with VMWare. (3) If a piece is in an unfriendly language, then as long as it supports socket communication or something similar on a modern multitasking computer, it can communicate to a small Connel-based piece that deals with all the others. The same works for embedded chips with limited capabilities.
Q: You need an Integrated Development Environment like Arduino or Visual Studio to get anything to work! How else are you going to get your code loaded, running, and talking? If no IDE knows about Connel, doesn't that make it useless?
A: It's my job to step behind such IDEs and find the text files (code and Makefiles) that make them work. Compiling, loading, and running then translate to two or three lines in a script. As for talking, that is a nightmare, but (here is the beauty of Wide Computing) a nightmare that only has to be faced once. I've dealt with Visual Studio, TI Code Composer (for MSP430 embedded chips), serial ports (virtual and real), Bluetooth (ugh!), and many others. I have taken copious notes and they will be provided as part of the reward to all backers of $10 or more.Learn about accountability on Kickstarter
- (40 days)