I spent a few hours at a local company called 2Bot (http://www.2bot.com/) which makes a 3-D printer that you can attach to your computer via USB port. Yep, I said 3 dimensional: you can feed it an architectural drawing of a building or landscape, and it actually can carve it out of a block of foam. Along with architectural sites and maps, they had carved the head of the Statue of Liberty, people's faces and
You could use it to design a part for manufacturing, produce a 3 dimensional model of a CAT scan that you can actually hold, or conceptual models for evaluation. I wish I had one when I was trying to design my windsurfer tailfin many moons ago.
For years, machine shops have had NC machines (Numerical Control) where a drill press, for example, could be fed a series of coordinates and could automatically drill holes into a board in a predetermined pattern.
The 2bot is a much more advanced NC machine: it can move a cutting head in 3 dimensions to cut material. It has several embedded processors talking over a mini network controlling the positioning motors.
After getting a tour of the factory and learning about how the physical and electronic architecture was designed and manufactured (It uses TMS 320 Digital Signal Processing chips, which I originally used back in the early 80's!), I talked with the software department. The software allows the end user to choose an input, such as a photograph, architectural drawing, or even Google KML. The user can then manipulate the object visually and determine how best to "print" it. The program then sends commands over USB to the 2Bot which then creates the target product.
They were using Visual Studio 2005 and VB.Net and were very pleased with the productivity that .Net brought them.
We discussed several issues about their software design process:
- Use some sort of source control system. If you find that something is broken, it would be nice to be able to figure out when it broke (use prior archived versions of the built code), then track down the change made that day. Even for small shops, it's nice to go back to prior versions to see how something was coded.
- I gave several performance tips, such as turning off the Just My Code and using dynamic breakpoints to see call stacks when your application is slow. Use Task Manager, select columns to see what the process is doing while it's slow. (How does Task Manager determine if an Application is Not Responding?)
- Debugging tips, such as using the Microsoft Public Symbol Server to see what your application process is actually doing.
- We talked about threading and how using a background thread (sample code: Webcrawl a blog to retrieve all entries locally: RSS on steroids) can be helpful for maintaining a responsive User Interface.
- Code documentation with the XML Documentation feature can be very useful. For example, VB Intellisense will show your XML Doc method summaries in dropdowns to help you write code.
- We talked about using native libraries (they use a couple) and how error handling is handled.
- Version control, setup issues, customer support via Remote Assistance,
We each had kids and I mentioned how the Turtle Graphics Logo Program can be fun for teaching kids how to program.
Some of our kids play chess and we talked about using Digital Signal Processing and FFTs, and how they're related: Eliminating Fire Alarm sound at Chess Tournament Awards Ceremony
It's refreshing to see how software development tools can be so helpful in production scenarios. Nowadays, it seems imperative that any modern product has software in it, and the features of the product are mainly driven by its software.