First Day
So, today was my first day at OpenLogic. I'm sitting directly across from a colleague I've worked with before, Scott Nicholls… who also started today. Scott and I shared the Situation Room at the last company we worked at.
(The quick explanation for that is that we were traveling on business together, and were flipping through channels on the TV in the hotel room, and one of the major news channels was covering something important that was occurring in the Situation Room. So, obviously, the office we shared had to be given that name.)
This setup has a real Andy Bernard/Jim Halpert feel to it, with Scott constantly annoying me a la Andy annoying Jim.
All that aside, I'm pumped to be working here, and excited to immerse myself. One cool thing that has given me renewed interest with PC's in general is the fact that I have switched from Windows XP to Ubuntu Linux. I made this switch between jobs, and hope to never look back. (I say that, but chances are good that the family desktop pc will remain a Windows XP box. 1 - I don't want to convert MS Money records to GNU Cash and 2 - my wife uses software for her Speech Pathology job with a school that only runs on Windows.) I've sort of backed into this Linux world in an odd way, by getting used to a Unix-style terminal environment by running Cygwin on Windows for several years.
So, I'm basically an odd hybrid. A pure Linux newbie, but can get around the terminal ok. All in all though, I'm very pleased with how easy Ubuntu has been. I installed it on a Dell Latitude D820 laptop, and everything just worked. Beyond installing it, doing simple tasks in GNome has proved to be very intuitive. One quick example of that was when I had the need to access some files on a Windows share today, I immediately thought "uh-oh… this is not gonna work, or at least not be easy". Wrong… all I had to do was Places -> Connect to Server -> Select Windows Share as my Service Type and voila, connected.
To finish, I have to throw something technical up on the post. Now, this won't be that earth shattering to people who are already Linux guru's out there, but it was cool to me, so maybe someone can get some use out of it. From a terminal, try the following:
ls -l | tee ll.out
Basically, this pipes the output of 'ls -l' to both standard out and the file named 'll.out'. It is useful because before I learned this, I only knew how to redirect standard out via '>' or '>>', which made it so you couldn't see it in the terminal, only by looking in the file once the process was done. A good example of where I've found this useful is long-running processes like an ant or maven build, where you'd like to be able to search the output in the file, but also like to watch it scrolling by so you know roughly where you are in the process if your impatient like myself.
New Linux to Compete with Vista?
There will be no Linux Vista by ZDNet's Dana Blankenhorn — Imagine if, in the proprietary era, Microsoft launched a major Windows upgrade while its main rival stood still. That would be advantage Microsoft. Under the present system it may well be advantage Linux.
One of the advantages of open source is that projects release when it is appropriate and not for the sake or releasing or to make more money. The Linux OS is stable and useful, it shouldn't be releasing nearly as often as a project higher up the stack.
Vista's release may prove to be a huge step backwards for Microsoft and hopefully a wakeup call. When people look at Vista they are going to either say "it isn't worth it" or "why should I pay more an upgrade when I can move to Linux?". Either way, I expect it to be a huge problem for Microsoft, especially in the server arena.
An IDE Sell-out
I used to have street cred. I was a hardcore VIM user. When I was still in college and new to Unix I would find some cheezy editor like pico and stick with that for coding. Finally I ended up on an HP-UX box with nothing but vi. When the sys-admin told me it'd take a few weeks for him to get around to installing an editor with training wheels (his version of 'go away kid') I decided to dive into vi.
I found VIM and used it on Windows and Linux for all of my development. It painful at first but after the steep learning curve I was slinging code incredibly fast. I used vim for about the next 6 years doing real world development. I had a tweaked out .vimrc and wrote custom Python scripts to do code generation from database schemas and automate boring tasks. I had it set up to do code completion using ctags. I even wrote an article on using VIM and Java that I still get pings about.
Then I ended up in a shop that required Eclipse. So reluctantly I went over to the dark side. It was painful navigating. Fast forward to OpenLogic where sensibly you can use any IDE whatever you want, as long as the job gets done. I thought I'd give my old VIM love a go.
No dice, I've grown used to the code completion, the version control integration and all the other niceties of a modern IDE. Begrudgingly I decided to go back to Eclipse. Enter the Eclipse VI plug-in. I'm giving it a try and I'm very impressed. It's just the best of both worlds; easy navigation and editing with all the comfort of an IDE.
I guess it's progress. I remember the sun coming up after a night of trying to get my mouse to work, hacking at an XF86Config file on my Slackware Linux 486 laptop. Now there is virtue in things just working. I'm a big Ubuntu fan for that reason. Nothing to prove anymore, it's not about technology it's about getting things done.
The open source community offers to helps hardware companies
The Linux kernel team is offering to write hardware drivers for any hardware company that gives them a spec or at least access to an engineer that can answer questions. This is big news! Kernel drivers have been a hot topic for a long time with issues that range from proprietary drivers (is that legal with a GPL kernel or not?) to just not having a driver that worked. Anyone who's tried to get wireless working on their Linux laptop has probably run into this problem. Often the drivers are written by users who really need the driver because they want to use the device on Linux but they don't have access to the hardware spec.
The Linux kernel team has decided to take matters into their own hands and they've put out an offer to write the kernel driver for any hardware device for any company! All they are asing for is a hardware spec or at the very least access to a hardware engineer. If there are nondisclosure issues, the Linux Foundation has offered to help work them out.
So why haven't hardware companies written Linux kernel drivers already? It's probably a variety of reasons, including, but not limited to:
- not wanting to open source their specification - some even worry that the open source driver will give away their company secrets
- worrying that if they release a proprietary driver they might have to open source it later - if they release a proprietary driver now and those are declared by the courts to be illegal, they'll have to remove it from the market it or open source it and then they are back to the first point
- not having enough resources to get to Linux if it's a lower priority than other operating systems for their target market
So while I don't expect this to create a mad rush of hardware vendors lining up for free kernel development work, I do hope it encourages them to accept this generous offer of free development effort and to expand their markets to Linux!
Building Bots With Kids
One of my posts back in late November was about the Arduino open source microcontroller platform. In that article I mentioned that my 8 year old son, Nakoa, and I were embarking on a little father/son electronics exploration. Not long after I wrote that, he and I went to see the IMAX presentation "Roving Mars" which was a nice documentary on the Mars Rover work at JPL. We started talking robots…not the Jetson's Rosie-the-maid kind that would clean up your room for you, though I'm sure Nakoa wouldn't mind one of those either, but real rovers. We had a compelling need to build something that would move. Stormy recently told me of a friend of hers who did some work with kids and robots and blogged it on radar.oreilly.com. Both that article and mine were influenced by a Salon article "Why Johnny Can't Code." (the lament that no simple BASIC interpreter came built-in to any modern machines.) For whatever reason, the natural response of many of us is to start getting kids connected again through tangible, kinesthetic activities. We believe if we can "make it real" for them, we'll help them touch what we've touched. Developing software, designing anything that doesn't yet exist, is a true mind-body experience. Our particular project was to build a simple rover from scratch. Below is Nakoa with one of the two bots we're making - we've already named them Click and Clack. Since Click comes before Clack, this pic is Nakoa with Click right before we took him for his maiden stroll. (Clack is still on the drawing board but is shaping up like a Caterpillar tractor - likely a snow-cat given the weather we've had this winter. )
Click is a wireless, battery powered, two-wheeled bot with a wheelie-castor. To build Click, we used a lot of different components, but the main ones were:
- Arduino for the microcontroller
- Tamiya dual motor gearbox
- Pololu motor controller
- XBee Pro - (ZigBee) 2.4 GHz wireless comms
The picture below is Click splayed out on the workbench under test, but all working with wireless comm:
The Arduino microcontroller has a TTL level serial port that we use to talk to the motor controller. The motor controller can drive each gearbox motor independently so we can turn the rover in-place. Only the transmit part of the Arduino serial port was used to talk to the motor controller which left the receive port open for us to pipe commands to it over the XBee data radio. To control it we came up with a simple command structure which was something like: [direction][speed] where direction was a numeral:
- 1 - forward (both motors forward)
- 2 - left
- 3 - right
- 4 - backup (both motors backward)
- 5 - stop
The speed was given by a letter between a and g which divvied up the 127 motor speeds we could use into reasonable graduations without being too granular. So, a typical command sequence might be:
- 1f
- 2c
- 5a
To send these commands, we hooked up another XBee data radio to the USB port of a laptop and fired up a raw terminal emulator on that port (at 9600 baud.) In effect, using XBee, we had a very simple, very reliable wireless serial "virtual cable" with which to control Click. Below is Nakoa, the rover driver with the laptop command center:
After having seen the "Roving Mars" flick, he really fancied himself as a JPL rover driver. Towards the end of the project when we had to start bolting it all together, it was clear the Arduino board was going to be too large, but I had the Arduino Mini stamp sized version in the wings for this occasion. So, we tore down the circuits and rewired it with a smaller Arduino chip on a breadboard that could be shared with the motor controller. The Mini and the full-sized Arduino are electrically compatible, as is the firmware. The main difference is the mini is built on an AVR microcontroller that has more memory. Anyway, a few observations around the experience and I'll wrap this up:
- Nakoa and I talked through all the logic and in the process he learned some simple C syntax for if/then statements and loops. Yes, I helped a lot, but I always made sure he thought through it before we took the next step. I would guide him but it was through a socratic, questioning mode.
For example, we had the motor controller connected to the gearbox motors on the bench. We had to implement the turning code. It's not immediately obvious to an 8 year old that in order to turn left, you would have to make the right wheel turn and left wheel stop (or go backwards.) After it dawned on him what would need to happen, we'd code it up together. - This kind of project is probably not for every 8 year old, but it's definitely within the grasp of some as long as there's some close guidance. Kids that young really can learn the logic of programming I have no doubt.
- Nakoa's already chomping at the bit to get me to help him write software that can use cursor keys to send the commands instead of having to type the encoding. He's already on the software rev cycle of constant improvement. That's one of the most addictive things about coding. In many ways, coders are like gamblers. Just one more pull of that one-armed bandit == "Just one more compile and I know it'll work."
- This is a more difficult approach than going the Lego Mindstorms route. The Mindstorms approach is going to provide much the same learning experiences w/r to thinking through navigation and control problems. It's a more packaged, streamlined way to get where we eventually got, that's for sure. Our approach was a lot more like jumping off the cliff and hoping the parachute pops (it should, you just don't know if it will.)
The unpackaged approach will take longer to get something rolling, but it's also a much deeper learning exercise if you have the time. Consequently, there's a lot more to get out of it…. particularly understanding:- mechanics (we built the gearbox and had to sort out some issues with friction and chatter)
- motors (back EMF can kill stuff)
- electronics (don't forget to fry a few things along the way - everyone loves the magic blue smoke)
- batteries (what voltage, regulation, duration?)
- connectors (we found R/C stores a gold mine for the connectors we used.)
All these things are a big part of making it happen. So, also, is getting help from a community. There were guys on the Sparkfun forum who really helped me out when I got into a pickle. We all had a good time working it out online, much of it during the Christmas blizzard.
Along those lines I was surprised at the amount of attention Nakoa was able to devote. That was when things were going good. When things didn't work quite right, well, that's the mind-share challenge.
There was a point early on with the motor controller when every time we'd start to drive the motor, the motor controller would go belly up. After about 20 minutes of watching his dad mumbling over that problem, he declared "Dad, I'm losing focus" which were his code-words for "Dad, you're bum-fuzzled and I'm bored - fix it and ping me when you're done."
Between the IMAX vid and this project he clearly understands that things won't just work the first time. And that's just a huge life lesson when you get right down to it.
Here's the code we wrote to control Click. It compiles and loads through the Arduino IDE. The code reads commands from the XBee data radio through the Arduino receive serial port and sends motor commands to the Pololu motor controller through the Arduino transmit serial port.
Here's the link to the full gallery documenting our rover project to build Click. Maybe later this spring we'll get Clack built and it will be a caterpillar (with snow plow) we can plow our driveway with it while we're inside sipping hot chocolate.
An Ode to Rod
It’s been a rough winter so far here in Colorado. Denver and the surrounding areas along the Front Range usually experience only occasional snowstorms and cold spells separated by mild temperatures and sunny days. Not this year. We’ve had record amounts of snow and days upon days of single-digit temperatures. It was during the worst of this weather that we had to finalize all 2006 business.
Like many of today’s businesses we’re fortunate to have laptops, VPN connections, and all the other trappings necessary for employees to work from a “virtual office” when the roads aren’t passable. We’re also lucky to have dedicated employees who don’t neglect deadlines, drop support issues, or otherwise miss a beat when working from home. Thanks to technology and fantastic people, we were able to successfully close out 2006 despite the fact that our office was closed for three of the final ten business days of the year!
While everyone at OpenLogic did a great job during those hectic wintry days, one person deserves special recognition. Rod Cope, our CTO and founder, was scheduled to fly to San Francisco on December 21—the very day that the first major storm of the year was moving in. Rod miraculously made it to the airport, caught one of the last flights to leave town, arrived at his meetings on time, and then found himself stranded 1,200 miles from home just days before Christmas. With all return flights cancelled, Rod managed to find a rental car and make it home in time to open his stocking.
In recognition of Rod’s special efforts during those hectic days, I presented the following “Ode to Rod” during our recent 2007 kick-off meetings. I hope you’ll enjoy….
T’ was the day of the storm and all around the town
no one was moving he saw with a frown!
He dashed to the airport, seeking the sound
of a flight to the bay, where partners are found!
He taxied and turned to the gates all around
this one will get me the heck out of town!
He spoke and he demo’d and sold with a clatter –
we can deliver, resources don’t matter!
He turned to the prospect and smiled as he said
I’m off to the mountains before the flights are all dead!
At the airport he arrived and met the remark
flights to Denver …. a shot in the dark!
He thought and he wondered, what will I now do
oh Hertz #1 Gold, how I need you!
He grabbed a one-way and exclaimed as he drove out of sight
Denver by Christmas, to heck with the flights!
Open Source Meets Business Congress
I've been at the Open Source Meets Business Congress this week in Nuremberg, Germany. My talk about OpenLogic went very well, especially the Q&A session.
The audience validated my thinking that Europeans, in general, are less interested in indemnification and more interested in our support model and especially our Expert Community concept.
They were very happy to hear that we're involved with many different Open Source communities and contribute bug reports, patches, and even cash donations. They also very much liked the fact that we pay our Expert Community members and therefore give back in an even more direct fashion to the community.
I think what they liked most, however, is that we've always been and continue to be a good Open Source citizen. Our developers contribute to a number of projects, our enterprise customers submit patches (typically through us), and we do our best to make sure all sides come out ahead in every interaction. Of course, the managers in the room also like the fact that they only need to call one number, 888-OpenLogic, to have all of their Open Source support needs handled, however we manage to do it.
It was also a great show for connecting with current and future partners. Lots of Open Source players are here: OpenLogic, Black Duck, Palamida, SpikeSource, JasperSoft, Alfresco, Compiere, Innoopract, etc. It's nice when you can talk to a ton of people in your space without leaving a building.
BTW, I'd never been to Germany before (or even Europe for that matter), but I can honestly say that I really love it. It probably helps that we had a reception in the Kaiserburg, a 13th century castle overlooking Nuremberg. I don't typically have hors d'oeuvres with a hundred or so people in suits while surrounded by suits of armor and halberds, but I could get used to it. The people are amazingly helpful and friendly, even when they don't speak very much English and you only speak about 3 weeks worth of German (mostly from a travel phrasebook). I highly recommend checking it out - it's Sehr Gut!
Apple Newton, remember that?
Right after the Apple Newton came out, I took a job demoing them in stores because I wanted one. Not only did I want an Apple Newton but I really wanted to go to the weekend class where they showed you all the ins and outs. Standing in Best Buys and Circuit City's wasn't the most exciting thing I ever did but I did really like playing with my Apple Newton. (And as an aside, my friend who told me about the gig actually got to demo her Apple Newton to the former President Bush in a Best Buy.)
So imagine my surprise when I discovered that the Apple Newton - and its community! - is alive and well, WIRED Blogs: Cult of Mac. You can buy one on eBay and there's open source software for it as well as mailing lists and hardware vendors. People are even saying they wouldn't give up their Apple Newton for an iPhone, primarily because you can't write applications for the iPhone like you can the Newton.
Crazy, huh? Here I thought the Newton was dead and there's a thriving culture around it. It fits right into what I'm learning reading The Long Tail - things no longer have to be a mass market hit to be successful. The internet has enabled things to be successful even if a very small number of people (relatively speaking) are interested.
Dressing up at work
I've decided to dress a little nicer at work lately.
It wasn't any particular thing that did it, but more like a confluence of events within a few days that pushed me over the edge.
First, I heard or saw something about "Dress for Success", a book that shows and tells you how to dress better to get ahead. Then I listened to Brian Tracy's excellent "Success Mastery Academy" audiobook in which he mentions how important it is to dress for success and recommends the same book. Finally, I got a few compliments at work when I wore a nicer button-down shirt with khakis (instead of my usual jeans and polos). That did it. I decided to take the plunge. It's the beginning of a new year, the company is starting to really take-off, and I wanted to make a subtle statement about how we're changing gears and stepping up in the world.
With new book in hand (Image Matters for Men: How to Dress for Success! - an awesome book with lots of full-color pictures that tells you which colors and styles you should be wearing for your skin color, build, etc.), my wife and I headed off to the mall. Far too much money later, I now have a pretty nice new wardrobe. I've decided to jump straight from jeans and polos to dress slacks and sports coats, reserving dockers for casual Fridays.
I know it's a pretty strange thing to do, especially coming from an extremely casual guy like myself, but I really do like the feeling I get from putting the time and energy into my appearance and looking nice. The psychological impact on me and the sociological impact it's had on others has already made it worthwhile. It's just like Brian Tracy says in the book, make internal improvements to impact the world around you, but the reverse also works.
Mark Cuban wrote about this topic recently in his blog entry, "Why I Don't Wear a Suit and Can't Figure Out Why Anyone Does !". I agree that imposing a stringent dress code on people is generally a bad idea, but in this case, I made the change purely voluntarily. That's really the whole point. If it were forced on me, I'd be far more likely to rebel than to change gracefully. But by simply walking into work one day having already made the change mentally, I've been able to get some significant results in a very short period of time. More on that in the future.
BTW, did I mention I'm also starting to replace my buzz cut with "real" hair?
Common Goals
First, a little background for non-users of open source: Because users have access to the source code (for most projects), when users encounter problems, bugs, or just unexpected behavior, they can inspect the source code to see what's going on under the covers. This visibility is extremely useful for developers to learn new techniques and concepts from other developers, but it also helps to ensure that the code is as good as it can be. When users encounter bugs they are able to modify the source code and fix the problem. Once the fix or enhancement works, they can then submit that back to the project maintainers, and once the new code is incorporated into the project's code base, the code base is stronger for the change. I have officially made my first contribution to an open source project: Groovy. I encountered a bug and after looking at the JIRA issues for Groovy, I decided to fix the code myself since it didn't look like they were going to address the issue anytime soon. As I was looking at the issues, I noticed a request by a user that would affect the code I was going to work on, so I thought I'd address that as well. So, to make a long story short, I fixed the code, made the enhancement, and submitted my changes. After review, the enhancement was incorporated, and the bug I fixed had already gotten done by one of the main Groovy contributors so that portion of my code was not incorporated. Ironic, no? Nevertheless, I contributed, and I'm very happy about the whole process. It was all done via the Internet, looking up the issues in JIRA, submitting the code changes, adding comments and notes about the code, etc. Then I was notified via email that the issue had been closed and the code incorporated into the code base. The technology made the contribution process easy, and rendered my physical location unimportant. I could have been in Tokyo or Kathmandu. It really shows how a diverse community of people all over the world can come together to work on a common goal - useable tools for software development.



