Monthly Archives: June 2008

Bye Bill. You will be missed

Reading the news I see that today was Bill Gates last day at Microsoft. Apparently, they held a tearful farewell in Redmond for him. And it really does mark a significant moment in the history of our industry and a time to reflect.

If I had a dime for every time I read someone say that Bill Gates crashed their machine or was someone personally affecting their life in some negative way, I’d be as rich as he is (well, maybe not). But as much as you may hate Microsoft and the methods they’ve used to drive their vision, you have to take a good look at what Bill Gates and company have done and how they’ve succeeded.

The biggest thing I learned from watching Microsoft is how important it is that you keep focus on software as a business. You may have the coolest widget or the cleanest framework or the fastest algorithm, but unless you have a business story and good business people around you to help sell it, it won’t matter as much as it could.

And Bill Gates knew that. Surround yourself with good business people and you give yourself a chance. I’ve seen it too many times, great technology that has floundered because the team focused too much on the technology and forget to bring the marketing guys into the team, if they had marketing guys to begin with. And it’s frustrating to see.

So on this day, even though I’m trying to build a C/C++ Development environment with the CDT that can beat Microsoft Visual Studio at it’s own game, I pay tribute to Bill for all he’s accomplished and all he’s taught this industry. He doesn’t hate you, he’s just following his business plan.

CDT 5.0 for Ganymede, Come get Some

CDT 5.0 is out the door and available at your friendly Ganymede update site. I’m sure the Eclipse servers will be busy the next few days. The Eclipse community is vast and they love trying out the shiny new features that we’ve worked hard on all year to make.

I’m especially proud this year with CDT 5.0. With my new job at Wind River working on a p2 based installer, I’ve finally have a real reason to use it to write the JNI code that I need for some of the computation intensive parts of it. BTW, I now have proof that the Java version of an algorithm is much, much more compute intensive than a C version, check out the LZMA SDK from 7-Zip.

I’m really enjoying the experience. When I first imported the LZMA SDK into my C project, the first thing I needed to find out was where the main() function was. Let’s try the Open Element dialog (Shift-Ctrl-T), typed in main, and there it was! A couple of Open Declarations (F3) later, and I was able to find the implementation of the decode function I needed to use. Awesome and I didn’t even notice the Indexer running to find all this stuff. And everything else looked clean and worked well.

So yeah, the JDT guys are probably laughing since they’ve had all that stuff working well for a few years now. JDT has always been our bar (along with VisualStudio which I think we reached a while ago). But watch out. We may just make the CDT so good that people will wonder what the hype about Java was all about 🙂

:-O Nokia buys Symbian to EPL it

Wow. In case you missed it, Nokia bought up the rest of Symbian (it was already a major investor there) and have united with a number of Symbian stakeholders to form the Symbian Foundation to which Nokia will be contributing the Symbian OS. And from there, they will be working to provide an open source, EPL licensed, version of it.

Wow. We have CDT committers from both Nokia and Symbian and they are a great bunch. I still haven’t figured out whether this is a good thing or not, but it certainly stirs up the pot as far as open source mobile platforms go. I think it also helps secure the future of the Symbian OS as a technology. It’s hard to compete against the hype of Google Android and at the very least this will give Symbian some attention.

It’ll also be interesting to see what kind of community evolves for it. They’ve certainly seeded it with companies that have a vested interest in Symbian’s success. That’ll give them a good start. As we all know in Eclipse-land, it’s a lot of work to grow a community. But maybe growth isn’t the prime objective here. We’ll have to wait and see what the pundits say, but going open seems to be the most popular strategy these days to help ensure sure your platform matters. Mind you that may be the Google-envy speaking 😉

Back on Linux

I don’t know why I get the urge to blog about my Linux journey. I’m sure it’s not very interesting. But after a few days of working hard trying to set up ClearCase the way I want it so I can generate p2 repositories from our Wind River product release views, I’ve gotten back to why I was a *nix guy back in the day before Windows became a much better desktop.

I guess when you find a use for cpio, you are clearly destined to be a Linux junky. I’ve also fallen in love with NFS automounting (shh, don’t tell my wife, she’ll find that weird). When I can go ‘cd /net/yow-dschaefe-linux’ and get to my Linux box from anywhere on the WAN, that’s pretty cool, not to mention handy. Doing a ‘cpio > /net/yow-dschaefe-linux’ from a ClearCase view on a Linux machine in California to my box in Ottawa and have fairly decent performance, that’s the greatness of Linux file systems in a nutshell.

And using KVM to set up a virtual machine to run the version of ClearCase I need and from there to NFS mount a directory from my real hard drive and then to do a ClearCase view export back to my real machine so I can run the generator at full speed, it just rocks. It’s not for the meek and it has taken me more time that I wanted to figure it all out, but Google is your friend and now that it’s set up, I’m ready to go.

So, yes, I still think Windows is the better desktop, but for file and compute servers, Linux is clearly the champ. But of course, you all know that already 🙂

OSGi for native development?

I hinted at this topic in my last entry and when giving my crazy thought of the day last week. It’s another Friday, but judging from the comments to those blogs and my gut, I’m convinced now that an OSGi implementation for native development isn’t really that crazy.

Everyone has heard of the Microsoft Component Object Model (COM). Even if you don’t chances are you’ve used it. It’s now getting long in the tooth but it was a critical technology that led to the success of the Windows platform starting with Windows 95. It was a great way to build up frameworks with plug-ins and to write components that used the services of other components, e.g. a Visual Basic script that ran inside Excel.

But of course, COM is very specific to the Windows platform mainly because of it’s reliance on the Windows registry which provided the directory to find the COM classes and objects you need. It also had some weird tricks with threading models and some wacky things called thunks to help to help performance when we were running Windows 95 on our old i486 machines.

But it’s been done and there’s lots of things we can learn from that, and from the limitations of some of the others, like CORBA. Using C++ as the core technology is one thing we would need to avoid. Different compilers have different ABIs, like how virtual function tables are laid out. As much as we try to evolve, at the end of the day, C is still the best language for interoperability and almost every language provides a way to call C functions.

There was some discussion in the OSGi community around something called Universal OSGi lead by Peter Kriens who is also involved in Eclipse. If anyone knows the status of that I’d be happy to take a look. It shouldn’t be too difficult to start with the OSGi APIs that make sense and start implementing a framework to support it.

Are you situationally aware?

Part of my trip through geekdom lead me to Microsoft Flight Simulator. I’ve dreamed of becoming a pilot but never had the resources or eyes to do it for real. FS gave me a chance to play and get some sense of what flying is like, mind you without the inner ear working for you, it’s certainly nowhere near the same.

Part of the thrill of FS for us geeks is the ability to add your own plug-ins to implement your own instrument gauges and your own airplanes. The gauge SDK was particularly interesting to me and lead me to ponder whether one could create a reasonable flight navigation system with maps and data, much like is common place with modern GPS systems. I think I had enough info to pull it off, but of course, never got the time to do it.

That investigation did help me cross paths with Garmin. They are the leaders in flight navigation systems for general aviation aircraft. They have some pretty sophisticated software and some pretty solid hardware to make it easy to navigate an aircraft through the airways. And they keep getting better, going from simple textual lcd screens, to two dimensional graphical displays showing maps in 2D. And the displays kept getting bigger and contained more and more information to help a pilot with his situation awareness, a key to survival in the cockpit.

And now, they’ve added 3D display of the terrain and obstacles and other aircraft in your vicinity. Here’s a video of a reporter talking to a Garmin rep. It’s like the world coming full circle. Instead of trying to figure out how to make a video game more real, they’re trying to make reality more like a video game! The reporter asked the right question, aren’t pilots going to be more interested in watching this wicked cool technology than look out the airplane like they’re supposed to? I know I would.

Anyway, I hope this is the leading edge of what we’ll soon see in embedded devices where it makes sense, i.e., more use of 3D graphics. I think it really helps the user experience be more real. We’re seeing it already with Mac and Vista. And with announcements like Nvidia’s Tegra and seeing what the Garmin has done with their system, I can see it useful for devices as well.

BTW, speaking of the FS SDK, when I mentioned OSGi for C++ the other day, that SDK came to mind and is a great example of how to build a simple component model with interfaces for providing services into a common framework. There are certainly other examples and makes me think standardizing on one at least similar to OSGi, might really be a good idea. More on that later…

Crazy thought of the day

It’s Friday. It’s been a pretty busy and long week. Got lots done. Working on lots of Eclipse related projects both internal and external. The Red Wings won the Stanley Cup (although I’m very proud of the Pittsburgh fans for their behavior after their team lost at home, they’re real hockey fans). I bought a new car (a little Mazda 3 Sport, love it! but hate car shopping). So I think I’m allowed to think some crazy thoughts once in a while.

This one sprouts from a couple of different triggers. First, the latest Emacs discussion and how it would be nicer if we could integrate Eclipse better in a command-line environment. Second, comes from my interest in GUIs for embedded systems. Flash is one idea and trying to figure out how you’d hook a C/C++ app on a device to a Flash-based UI. Third comes from a bit of OSGi envy in that it would be a huge help to C/C++ developers if we had a component system like it.

So the crazy idea is this. Rewrite Eclipse in C++. Maybe rewrite isn’t the right word since I hear there are people out there who actually like Java ;). But start producing C++ components that look a lot like Eclipse. I’d start with SWT which is a layer over top of some C and C++ code anyway. Shouldn’t be that hard. You could then look at a C++ implementation of OSGi. Bundles would be easy to make, just use DLL/so’s instead of jars (of course, I’m missing the point on other componentization issues that OSGi deals with but I can’t be that far off). Then continue to add things as they make sense or people have a need.

I did a quick search, since I’m pretty sure the C++ SWT idea had been thought of before. I found a company, PureNative Software, that has actually done it. Mind you, they are using their proprietary Java to C++ compiler to do it, and I would think that leaves in a lot of the glue that SWT uses to bridge the Java/C++ world. But they do have a compelling story.

So I’m going to try and contact myself in a parallel universe to start working on it. Or maybe it’ll just remain a dream. But I’ll throw it out there to see whether you think it’s such a crazy idea or not.

Eclipse versus Emacs, a battle unfinished

I was watching a presentation and someone was talking about integrating gdb with Emacs and showed a screenshot of it in action. I was at the back of the room and I had to squint, because when i first saw it, I swore it was Eclipse.

In this day in age of Eclipse having every feature of Emacs, save a good scripting and keystroke record/playback story, why would anyone still be using Emacs?

Well, of course, you’d be foolish to think that everyone using Emacs is just going to drop it and jump on the Eclipse bandwagon. And there are still some major technical hurdles that force you to be sympathetic with them.

And this is the challenge we face, especially in the technical and embedded space where the CDT is most popular. Eclipse is too big, too slow to start, and the UI too complex and unless we start addressing some of this, it’s still going to be a fight to get these users to buy into our story. There is a lot of value to the extensibility and integration story we are selling, but if the barrier to get Joe and Jane developer to even start the thing is too high, it’s no good.

With all the talk about e4 and new architectures for the new world going on, we also really need to take a long look at how we can finally beat Emacs. Yes, I’m CDT Doug, but I still use XEmacs on Windows as my main text editor, even to look at C++ files outside of workspaces. I shouldn’t have to, you’d think…

Can old NeWS be new again?

I’m going to really show my age here. Back when I was doing my Masters degree at the University of Saskatchewan (now there’s a Canadian word that’s hard to say even for Canadians), I was doing graphical representations of software models. Yes, my modeling roots go back 20 years. Essentially, I was trying to come up with a generalized diagramming model that could represent different modeling languages.

When it came time to do the prototype, I had a choice of windowing systems that ran on our Sun and HP boxes we had in the lab. Of course, we had X Windows, X11R2 if I remember correctly which was much better than X10.

We also had this new system from Sun called the Network extensible Window System. It was wacky but very cool and had a wacky and cool acronym, NeWS. Essentially you programmed the window server using PostScript (of all things) that was extended by Sun to handle windowing and input devices and asynchronous communication back to the client. It was quite bizarre to be writing PostScript code to do UI but it was a good way to separate UI from Core with an efficient protocol you got to create yourself to best suite the application.

Unfortunately, the implementation was very slow and awkward and the co-operative multi-tasking made it impossible to debug endless loops (but it did help me learn the Sun equivalent of Ctrl-Alt-Dlt). I eventually picked X Windows and this wacky new language called C++ and the rest is, well, even more history.

What NeWS reminds me of today is this whole concept of Web 2.0, and Flash/Flex in particular. And not because PostScript and ActionScript have the same suffix, but because the architecture is very familiar. And it made me wonder if we could use it in the same way, as a windowing system. I can’t remember how I programmed the C side but if we used a similar API and protocol would it be any good? Now if I can only find some 20 year old documentation to find out.

NVIDIA enters the mobile space

I’m a fan of NVIDIA. I have their graphics cards in my computers at home and one of them has an NVIDIA chipset-based motherboard. I especially like their drivers both for Windows and Linux (yeah, I don’t care if it’s closed, it’s still free). It all leads to a good user experience and a happy customer.

So when they make a big move, I pay attention. And today they announced their Tegra product line. News release is here. And a good analysis from Tom’s Hardware is here.

Now, NVIDIA isn’t creating anything new here. They’re entering a market that’s already dominated by some big players, including Texas Instruments (a CDT contributor), Freescale (another CDT contributor who’s actually a committer), and others. And I’m sure these guys are saying “Big deal”, been there, done that.

But the reason I find it interesting and potentially game changing is the reputation that NVIDIA brings with it as it joins in the fun. NVIDIA is known for cool products that entice excitement, especially with their video card business (just look at the flashy website they have). And I’m sure they’ll bring that with them. Which, at the end of the day, will result in some really cool mobile internet devices, or MIDs as their marketing guys call them, which have some impressive video and gaming applications but with long battery life.

I’m pretty confident the other guys will spruce up their products to match, which in then end means a further invigoration of the mobile computing space. It’s a fun time to be in the embedded software business.