Sunday, November 20, 2011

Wave sick?

What with HPTS, JUDCon, JAX, QCon, JavaOne and various business meetings, I've been doing a lot of traveling recently. Time spent on a plane usually means my mind wanders a bit, covering various topics some of them unrelated. One of the things I got thinking about though, was definitely influenced by a series of talks I've been giving for a while, including at my JBossWorld keynote: the history of distributed systems.

I covered it at Santosh's retirement event too, but from a very personal perspective, i.e., how Arjuna related to it, and relate it did, often in a big way. So this got me to thinking about the various technology waves I've lived through and helped influence in one way or another. And it was quite "chilling" for me to realise how much I'd forgotten about what's happened over the past third of a century or more! (And that made me feel old too!)

I often take for granted that I lived through the start of the PC era: there were no PCs when I first started to code. In fact I'd been developing applications on a range of devices before IBM came out with the first PC or before Microsoft came with the first version of Word. I moved through the era of the BBC, ZX80, Commodores, Ataris, etc. into the first Sun machines, Apples, PCs, laptops, desktops, PDAs, smartphones, pads and much much more. A huge change in the way we interact with computers and importantly the data they maintain. Many different paradigm shifts!

Looking at the middleware shifts that accompanied some of these hardware changes and in fact were often driven by them, I've ridden a number of equally important waves. RPC, distributed objects, bespoke enterprise middleware architectures and implementations, standards based, a number of times there have been explosions of languages including functional and object-oriented, Java, open source, Web Services, REST, mobile, ubiquitous computing, and of course fault tolerance running throughout with transactions and replication. And I'm probably forgetting other things in between these waves.

It's been a bumpy ride at times. The move from CORBA to J2EE wasn't necessarily as good as is could have been. Web Services were often vilified far more than made sense if you were objective. But overall I've enjoyed the ride so far, more or less. And now with Cloud, mobile and beyond it's looking like the next decade will be at least as interesting as the last three. I'm looking forward to playing my part in it!

Thursday, November 03, 2011

The future PC

I've been thinking a lot about what personal compute devices might look like in the future given the amount of time I've been looking at how things have evolved over the past 30 years. Not so much about what a mainframe or workstation computer might look like (assuming they even exist!) but what replaces your laptop, pad, phone etc. Now of course much of what I will suggest is influenced by how I would do it if I could. However, there's also a smattering of technical advancements in there for good measure.

So my biggest bugbear with my current situation is that I have a laptop (two if I include my personal machine), an iPad and a smartphone (two if I include the one I use for international travel). Each of them holds some subset of my data, with only one (laptop) holding it all. Plus some of that data is held in the cloud so I can share it with people or between devices. This is manageable at the moment, but it's frustrating when I need something on my iPad that's on my laptop or something on my phone that's on the iPad (you get the picture).

What I want is the same information available on all of these devices. In fact, what I want is one device that does it all. I rarely use my phone and pad concurrently, or my pad and laptop. There are exceptions of course, but bear with me. (I may be unique in this and some people might want multiple concurrent devices. But that's still possible in this environment.) What would typically satisfy me would be a way to modify the form factor of my device dynamically over time. Taking a touchscreen smartphone through a pad and then to a laptop with large screen, keyboard and trackpad. At each stage I'd like the best performance, graphically and compute, and the most amount of storage.

Is this possible? Well if you look at how hardware had evolved over the past decades it's not that far off. ARM dominates the smartphone arena and although Intel/AMD will eventually find a way into the market my money is on AMD to get to the laptop and workstation performance before they get to the low power consumption sector in any significant manner. So AMD powered laptops that perform equally with their Intel/AMD cousins aren't far off.

What about main memory? Well you only have to look at how things have evolved recently from 512meg through to 8gig and beyond. It's going to be possible to have 8gig smartphones and tablets soon. And SSDs are getting cheaper and cheaper by the month. Capacity-wise it may take them longer to get to the sizes of spinning disks, but once most laptop manufacturers include SSDs by default, the cost per Gig will plummet as their physical sizes continues to do so too. Putting multiple instances in the same device will be possible to fill the size gap too.

Now you could assume that what I'm outlining is a portable disk drive, but it really isn't. I'm assuming it has storage, of course, but I'm also assuming it has a CPU and probably a GPU. Think plug computer, but much smaller and with much more power: certainly the processing power to rival a laptop and probably the graphical power too. I say 'probably' only because I can see situations where the GPU could be part of the form factor you plug the device in to so that you can do work, e.g., the phone housing or the keyboard/screen.

Ok so there we are: my ideal device is the size of a gum packet (much smaller and you'll lose it) and can be plugged into a range of different deployment chassis. Now all I have to do is wait!