Free OSGi BOF at DevCon 2012

The programme for the Birds-of-a-Feather (BOF) session at OSGi DevCon 2012 – co-hosted with EclipseCon 2012 – has been announced. I will be speaking about the Java 8 module system, Jigsaw and how they relate to OSGi: what are the differences; the pros and cons of each in different environments; and the potential for them to work together.

There will also be sessions on: OSGi Subsystems; simplifying development with the upcoming OSGi Bundle Repository (OBR) standard; and finally a surprise session from a mystery speaker.

The BOF is free to attend, you don’t need to be registered for OSGi DevCon/EclipseCon. So if you’re in the Washington DC area and interested in learning more about OSGi or meeting several of the top OSGi experts… you know where to go.

  • Print
  • RSS
  • Twitter
  • Facebook
  • LinkedIn
  • DZone
  • del.icio.us
  • Google Bookmarks
  • Yahoo! Bookmarks

OSGi Training in 2012; London, NY, DC and Sydney

I will be running a series of OSGi training courses this year, with the first two being held in London and New York in February. The early bird pricing for London will expire in the next couple of days, so please do hurry to secure your place!

If you’re in North America and can’t make NY in February then there will be another chance to take the training in the Washington DC area (very close to Dulles airport). Then later in the year I will be down in Sydney, Australia.

You might be wondering about the “Masterclass in OSGi” series that I previously ran with Peter Kriens, who recently announced his resignation from the OSGi Alliance. Peter is very busy completing his duties for the Alliance and then will be fully engaged with his next venture, so he has told me that he is not able to participate in the masterclasses for the foreseeable future.

My new course is heavily based on the subjects and discussions that arose from the masterclasses that took place in 2010/11, though it is intended to be more accessible for OSGi beginners. I still believe it’s the absolute best way to quickly achieve a deep understanding and mastery of OSGi and modularity in Java, and I very much look forward to seeing you there.

  • Print
  • RSS
  • Twitter
  • Facebook
  • LinkedIn
  • DZone
  • del.icio.us
  • Google Bookmarks
  • Yahoo! Bookmarks

Why modularity matters more than virtualization.

Ten years ago it all seemed so simple! Increase utilization of existing compute resource by hosting multiple virtual machines per physical platform; so consolidating applications onto fewer physical machines. As the virtual machine ‘shields’ its hosted application from the underlying physical environment, this is achieved without changes to the application.  As applications may now move runtime location without re-configuration; the idea of  virtual machine based ‘Cloud Computing’ was inevitable.

However, there are downsides.

Virtual machine image sprawl is now a well know phrase. If the virtual machine image is the unit of deployment; any software upgrade or configuration change, no matter how small, generates a new image. With a typical size of ~1 Gbyte  (see table 2 – http://www.ssrc.ucsc.edu/Papers/ssrctr-10-01.pdf) – this soon adds up! Large virtual environments rapidly consume expensive on-line and off-line data storage resource. This in-turn has driven the use of de-duplication technologies. So increasing storage cost and / or increasing operational complexity.

Once constructed, virtual machine images must be propagated, perhaps many times across the network, to the physical hosts. Also, a small configuration change, which results in a new virtual machine image, which needs to be deployed to many nodes; can generate hundreds of Gbytes of network traffic.

When used as the unit of application deployment; virtualization increases operation complexity, and increases the consumption of expensive physical network and storage resources: both of which are ironically probably more expensive than compute resource which virtualization is attempting to optimize the use of.

We’re not finished!

  • Some categories of application simply cannot be de-coupled from the physical environment. Network latency is NOT zero, network bandwidth is NOT infinite and locality of data DOES matter.
  • Virtualization complicates and obscures runtime dependencies. If a physical node fails, which virtual machines were lost? More importantly, which services were lost, which business applications were operationally impacted? Companies are now building monitoring systems that attempt to unravel these questions: further operational band-aids!
  • Centralized VM management solutions introduce new and operationally significant points of failure.
  • As the operational complexity of virtual environments is higher than their physical predecessors; there is an increased the likelihood of catastrophic cascading failure caused by simple human error.

Feeling comfortable with your virtualization strategy?

 

 

For all these reasons, the idea of re-balancing critical production loads by dynamically migrating virtual machine images, is I suggest a popular Marketing Myth. While many analysts, software vendors, investors and end users continue to see virtualization as the ultimate silver bullet! They are, I believe, deluded.

The move to the ‘virtual enterprise’ has not been without significant cost. The move to the ‘virtual enterprise’ has not addressed fundamental IT issues. Nor will moving to public or private Cloud solutions based on virtualization.

 

 

And so the Story Evolves

Acknowledging these issues, a discernible trend has started in the Cloud Computing community. Increasingly the virtual machine image is rejected as the deployment artifact. Rather:

  • Virtual machines are used to partition physical resource.
  • Software is dynamically installed and configured.
  • In more sophisticated solutions, each resource target has a local agent which can act upon an installation command. This agent is able to:
    • Resolve runtime installation dependencies implied by the install command.
    • Download only the required software artifacts.
    • Install, configure and start required ‘services’.
  • Should subsequent re-configure or update commands be received; the agent will only download the changed software component, and / or re-configure artifacts that are already cached locally.

Sort of makes sense, doesn’t it!?

The Elephant in the Room

Dynamic deployment and configuration of software artifacts certainly makes more sense than pushing around virtual machine images. But have we actually addressed the fundamental issues that organisations face?

Not really.

As I’ve referenced on many occasions; Gartner research indicates that software maintenance dominates IT OPEX (http://www.soasymposium.com/pdf_berlin/Anne_Thomas_Manes_Proving_the.pdf). In comparison hardware costs are only ~10% of this OPEX figure.

 

 

"Our virtual cloud strategy sounds awesome: but what are the business benefits again??"

 

To put this into perspective; a large organisation’s annual IT OPEX may be ~$2 billion. Gartner’s research implies that, of this, $1.6 billion will be concerned with the management and maintenance of legacy applications. Indeed, one organization recently explained that each line of code changed in an application generated a downstream cost of >$1 million!

The issue isn’t resolved by virtualisation, nor Cloud. Indeed, software vendors, IT end users, IT investors and IT industry analysts have spent the last decade trying to optimize an increasingly insignificant part of the OPEX equation; while at the same time ignoring the elephant in the room.

 

 

Modular Systems are Maintainable Systems

If one is to address application maintainability – then modularity is THE fundamental requirement.

Luckily for organizations that are pre-dominantly Java based; help is at hand in the form of OSGi. OSGi specifications and corresponding OSGi implementations provide the industry standards upon which an organisation can being to modularise their portfolio of in-house Java applications; thereby containing the on-going cost of application maintenance. For further detail on the business benefits of OSGi based business systems; see http://www.osgi.org/wiki/uploads/Links/OSGiAndTheEnterpriseBusinessWhitepaper.pdf).

But what are the essential characteristics of a ‘modular Cloud runtime’: characteristics that will ensure a successful OSGi strategy? These may be simply deduced from the following principles:

  • The unit of maintenance and the unit of re-use are the same as the unit of deployment. Hence the unit of deployment should be the ‘bundle’.
  • Modularity reduces application maintenance for developers. However, this must not be at the expense of increasing runtime complexity for operations. The unit of operational management should be the ‘business system’.

Aren’t these requirements inconsistent? No, not if the ‘business system’ is dynamically assembled from the required ‘bundles’ at runtime. Operations: deploy, re-configure, scale and up-date ‘business systems’. The runtime internally maps these activities to the deployment and re-configuration of the required OSGi bundles.

Simple.

In addition to these essential characteristics:

  • We would still like to leverage the resource partitioning capabilities of  virtual machines. But the virtual machine image is no-longer the unit of application deployment. As the runtime dynamically manages the mapping of services to virtual and physical resources; operations need no longer be concerned with this level of detail. From an operational perspective, it is sufficient to know that the ‘business system’ is functional and meeting its SLA.
  • Finally, it takes time to achieve a modular enterprise. It would be great if the runtime supported traditional software artifacts including WAR’s, simply POJO deployments and even non-Java artifacts!

Are there any runtime solutions that have such characteristics? Yes, one: the Paremus Service Fabric. A modular Cloud runtime - designed from the ground-up using OSGi; for OSGi based ‘business systems’. The Service Fabric’s unique adaptive, agile and  self-assembling runtime behaviors minimizes operational management whilst increasing service robustness. To get you started – the Service Fabric also supports non OSGi artefacts.

A final note: even Paremus occasionally bends to IT fashion :-/ Our imminent Service Fabric 1.8 release will support deployment of virtual machine images: though if you are reading this blog hopefully you will not be too interested in using that capability!

  • Print
  • RSS
  • Twitter
  • Facebook
  • LinkedIn
  • DZone
  • del.icio.us
  • Google Bookmarks
  • Yahoo! Bookmarks

OSGi DevCon 2012 – Call For Papers Deadline Approaching

OSGi DevCon 2012 was announced last month and is taking place March 26 to 29 next year.  Its being run in conjunction with EclipseCon again, however in a break from tradition this year, its being held at the Hyatt Regency in Reston, Virginia rather than Silicon Valley.

If you plan on submitting a talk then dont delay as you only have just over a month left. The submission deadline is November 11, 2011.

Dont forget to tag your proposal as “OSGi DevCon” to make sure that it gets reviewed by the OSGi DevCon Program Committee. For full details on how to make a submission please take a look at the conference web site.

This is the biggest OSGi conference of the year with sessions for all levels. If you are using, exploring or just interested in finding out more about OSGi then be sure to put the dates in your diary and make plans to attend. There will be plenty of opportunity to meet with the experts, network with your peers and get the low down on the latest additions to the OSGi specifications.

  • Print
  • RSS
  • Twitter
  • Facebook
  • LinkedIn
  • DZone
  • del.icio.us
  • Google Bookmarks
  • Yahoo! Bookmarks

Eclipse Dock Icons on Mac OS X

If you’re a heavy Eclipse user on Mac OS, you’re probably just as sick as I am of seeing the following in your Dock:

Dock

… and the following in your Application Switcher:

Switcher

How on Earth am I supposed to keep track of all those icons?? Well I just can’t, and I’ve been struggling with this nonsense for years. I’ve tried changing the Dock icon, and the name of the application, but these settings are still shared by all the workspaces that run with that copy of Eclipse.

Enough is enough, I need a per-workspace label for my dock icons, so I created a plug-in that I’m calling the Workspace Badge Plug-in for Mac OS. It looks like this:

Dock

… and this:

Switcher

By default it uses the last segment of your workspace path, but there isn’t much space so that often gets shortened with ellipses. So you can set your own short string in the workspace using a preference page:

Preference Page

The amazing thing is, this is probably the tiniest plug-in I have ever written for Eclipse, and is likely to be one of the most useful! If you want to try it out, install from the following update site URL (Marketplace listing coming soon):

http://macbadge-updates.s3.amazonaws.com/

The plug-in has not been exhaustively tested. It works for me on Eclipse 3.7 Indigo. I have no idea what would happen – and take no responsibility for what might happen – if you try to install it on an OS that is not Mac OS.

  • Print
  • RSS
  • Twitter
  • Facebook
  • LinkedIn
  • DZone
  • del.icio.us
  • Google Bookmarks
  • Yahoo! Bookmarks

Coming In From The Cold – JavaOne

Seems like JavaOne was put firmly back on track this week. Great news after last years apparent discontent of it playing second fiddle to Oracle OpenWorld. Congrats to Oracle for steadying the good ship JavaOne and reigniting all the positive passions of the extensive and vocal Java Community.

OSGi also had more coverage than ever before at a JavaOne, 16 sessions in total, 3 of which were from the OSGi Alliance, and many others on open source projects and user case studies.

Not surprisingly Cloud seems to have been a dominant topic at the conference, with Oracle announcing their Public Cloud, not to mention the controversy and spin around the last minute dumping of, oops sorry apparently it had never been scheduled, Mark Benioff’s presentation.

From a Paremus perspective the conference excited us way more than we could have hoped. Firstly, Jason McGee (IBM Distinguished Engineer, Chief Architect, Websphere XD, Project Zero) endorsed the need for OSGi in the Cloud “for reducing footprint” in his presentation.

Secondly, Cameron Purdy (Oracle VP, Development), as reported by internet.com, described how the Service Fabric deals with provisioning applications:

“……….that application will come with a set of requirements,” Purdy said. “It’s going to show up in the data center, declare the requirements and the container will be responsible for injecting those things into the application.”

So it appears that both IBM and Oracle expect the next generation of Cloud to consist of  the dynamic installation of software components, rather than the pushing out of software images that is offered by Amazon, RackSpace, and most other Cloud Providers today. The Paremus CEO, Richard Nicholson, clearly called this out at the OSGi Community Event in Darmstadt last month.

So its great news that two of the largest software companies on the planet are now seeming to support an approach that Paremus has been pursuing since 2005 with the Service Fabric (we called it a Distributed OSGi Runtime back then!).

It would be fair to say that at times it has certainly felt like, as the picture at the top of this post shows, we have been running on our own in the cold!

We are sure we are not all the way yet, and we will certainly keep on running, but it certainly feels like we are, in the words of Bob Marley….. Coming In From The Cold.

For now, perhaps we can indulge in a few marshmallows toasted on the fire, as a taster for whats to come with the Dawn of Composite Clouds……. oh yum……..sticky, sweet and warm…..

  • Print
  • RSS
  • Twitter
  • Facebook
  • LinkedIn
  • DZone
  • del.icio.us
  • Google Bookmarks
  • Yahoo! Bookmarks

OSGi Community Event 2011 Over for Another Year

What a great couple of days this week at the OSGi Community Event 2011 in Dramstadt.  There were lots of great presentations and plenty of opportunity to network with everyone there. Our hosts, Deutsche Telekom, were great providing great meeting facilities and ensuring we were all fed and watered well.

All of the slides from the presentations at the event are now available from the OSGi Alliance web site. These include the ones from Richard and Neil which can also be found below. The video of the demo from slide 21 of the above slides can be found on YouTube.





 

 

  • Print
  • RSS
  • Twitter
  • Facebook
  • LinkedIn
  • DZone
  • del.icio.us
  • Google Bookmarks
  • Yahoo! Bookmarks

Paremus at OSGi Community Event 2012 next week

Its the OSGi Community Event in Darmstadt, Germany next week at the Deutsche Telekom offices. The theme of the conference is the “Evolution and Success” of OSGi and there is an excellent selection of talks and panel discussions lined up for the two days (Tues 20th and Weds 21st September). There also looks to be plenty of opportunity for networking with community members, not least during the BBQ sponsored by SAP on the first evening.

Richard Nicholson will be busy with both his OSGi Alliance Presidential duties and also his talk on Tuesday “The Dawn of Composite Clouds – Why OSGi is the Most Important Ingredient in the Next Generation of Java Compute Cloud“.

Neil Bartlett is giving a talk on Bndtools, the Eclipse-based development tooling making it easier to work with OSGi, aptly titled ”Easy-peasy OSGi Development with Bndtools” which is on Wednesday.

Neil will also be taking part in the panel discussion “What Are the Major Tasks to Tackle Within the Next Two Years?” along with Alex Blewitt (Bandlem), Anish Karmarkar (Oracle), Christer Larsson (Makewave) and Karl Pauls (Luminis). The panel will be moderated by the OSGi Alliance Technical Director, Peter Kriens.

So if you plan to be there be sure to catch up with Richard, Neil or myself (Mike) either just to say hi or talk about all things OSGi over a Bratwurst or two.

If you havent booked yet then you can still register online or even turn up on the day armed with your credit card!

Hope to see you in Darmstadt next week.

  • Print
  • RSS
  • Twitter
  • Facebook
  • LinkedIn
  • DZone
  • del.icio.us
  • Google Bookmarks
  • Yahoo! Bookmarks

Why OBR?

Pascal Rapicault has written a blog post on his reasons for not choosing OBR as the provisioning technology for Eclipse.

I have absolutely no wish to start a fight, certainly not between myself and Pascal whom I regard as a friend. However it would be remiss not to correct the errors in his post, because that could leave the impression that OBR is an unworkable technology. The fact is that, today, both OBR and p2 are workable technologies for provisioning OSGi applications, but I would argue that OBR is cleaner and more usable, and much easier to integrate. That’s why I am incorporating OBR support into Bndtools at pretty much every level.

The OSGi Bundle Repository draft specification defines a repository index format and a resolver API. It allows us to do the following:

  1. Add a repository index (or multiple indexes) to a resolver.
  2. Specify the starting environment, for example which platform, which Java version, etc.
  3. Add a set of requirements: what we want to get out of the resolver.
  4. The resolver calculates the set of required resources that will satisfy those requirements. It also reports optional resources that may enhance the functionality of the selected set.

To address Pascal’s arguments in turn:

OBR focus was bundle centric. No “group” (aka features), no native files, …

Incorrect. An OBR repository can reference any kind of resource. The dependencies between resources are modelled as abstract “requirements” and “capabilities”. So a group/feature can be modelled as a resource that requires a bunch of other resources using their “name” capability.

Naturally, most extant OBR repositories overwhelmingly contain OSGi bundles, but the same is true of p2.

The repository format was fixed and was XML only, no possibility of extension.

Yes the repository format is XML, but it is quite extensible thanks to the generic requirement/capabilities model.

OBR’s format has the advantage of being a single file, repository.xml, compared to p2’s twin files content.xml and artifacts.xml, and it is more readable than either of them.

Each bundle listed in the repository was referring to the payload (the actual jar for the bundle) using a fix URL rather than abstracting the artifact location in a coordinate — like Maven does with its concept of GAV or like p2 does with “artifact keys” — which makes mirroring just plain painful (I know it is possible to provide URL handlers, but come on…).

Incorrect. OBR repository indexes use URIs, not URLs. It is up to the downloader to resolve those to a physical location, just as p2’s downloader must resolve its abstract “coordinates”. Mirroring is therefore perfectly possible. Indeed there is no functional difference between a URI and a Maven “coordinate”, and Maven coordinates can be trivially encoded as URIs.

The provided API was not allowing for transactional state change (some bundles could be installed, but not all the required ones if the download failed).

OBR does not specify how to download resources, it only calculates which resources are required to satisfy the question we asked of it. Transactional behaviour can be built into the code that we use to download those resources. So while this was missing from OBR when Pascal evaluated it, he could have chosen to implement a transactional downloader on top of OBR rather than redesigning the whole repository and resolver.

Since it is a standards document, OBR avoids mandating implementation details such as how to download resources, because whatever is convenient for Eclipse may be inconvenient or impossible in other environments.

The metadata did not accommodate the expression of what needed to happen to the bundle (e.g. should it be started, set the start level, etc.) and thus even less to other things.

State requirements — e.g. the requirement for the bundle to be in active state — can again be represented in the requirements/capabilities model. However it is admittedly non-obvious how to do this, and the latest (non-released) draft of the specification will make this area clearer.

The resolver always insisted on installing all the fragments available (which in complex repos like Indigo means that installing JDT will bring in parts of WindowBuilder since it has some fragment to JDT UI iirc)

The resolver tells us about available OSGi fragments as optional resources. The UI for a resolver (e.g. Eclipse Update Manager) should present those optional resources to the user and allow some or none of them to be selected.

Platform-specific fragments (e.g. SWT) can use the requirements/capabilities model to ensure they are not selected on an incorrect platform. For example, the Win32 SWT fragment would have a requirement of type platform and filter value (&(os=win32)(ws=win32)(arch=x86)). Before running the resolver we would add a “global” capability for the platform we actually want to resolve on.

Why not p2?

Almost nobody believes that p2 was ready to be released when it actually was released, back in Eclipse 3.4 (Ganymede). As a result, installation of plug-ins in Ganymede, and even in the following release (3.5 Galileo) was so error-prone that most Eclipse users reverted to unzipping files directly into their plugins directories.

P2 finally became sort-of usable in 3.6 (Helios), but it still does not support one of the most important aspects of OSGi resolution: uses constraints. That is, the p2 metadata do not support expression of uses-constraints and the resolver algorithm does not take account of them. As a result it is quite easy to get p2 to resolve a set of bundles but later find that those bundles cannot work in the actual OSGi framework.

Uses constraints are fully supported by OBR. It is still theoretically possible to generate a resolution set that does not resolve in OSGi, but this will always be possible unless we use the actual OSGi resolver itself, and under identical conditions. In practice, I have found OBR always produces high quality resolution sets so long as I feed it an accurate set of initial capabilities — in other words, GIGO.

The repository index generator for OBR is a simple command line tool provided in a single small JAR, which can also be used from ANT and Maven (it is already embedded in the Maven Bundle Plugin). In contrast, the p2 generator tool is an ANT task that only runs embedded inside Eclipse. This necessitates firing up a headless Eclipse application from an enclosing ANT build… and naturally you have to have a full Eclipse installation on your build machine.

Finally, last time I checked, the p2 resolver only ran on Equinox, not on any other OSGi framework.

On the other hand, there are certainly some valuable contributions in p2. The downloading, transactional updates, touchpoints etc would all still be useful in a provisioning system built on top of OBR’s repository and resolver.

The Future

Pascal is right to try to identify missing features in OBR, but I feel that he fell into the trap of mistaking one particular implementation — the Felix OBR bundle as it existed back in 2007/8 — with the abstract features of the specification itself. All of the requirements he states could have been implemented alongside an improved OBR bundle rather than throwing out the baby with the bathwater

However, what’s done is done. I’m glad that Pascal has participated in the effort to update the OBR specification, and I hear from my contacts inside the Alliance that the new specification is close to release. At that point I will incorporate the new OBR into Bndtools, and continue to recommend it to my clients who are seeking an OSGi provisioning story.

  • Print
  • RSS
  • Twitter
  • Facebook
  • LinkedIn
  • DZone
  • del.icio.us
  • Google Bookmarks
  • Yahoo! Bookmarks

Breaking the Karmic Cycle

Paremus News

As you may have guessed from the syndication of Neil Bartlett’s blog; I’m very pleased to announce that Neil has joined Paremus and will be working on a number of interesting OSGi & Service Fabric based projects. Some of this work will appear in our imminent Service Fabric 1.8 release; but more on that in due course. In addition to Service Fabric and Nimble related work; Neil will be spending time advancing the open source BNDTools project and some interesting new capabilities are already in the pipe-line for the next release.

On a different note:  Whether you are a battle-hardened ‘OSGi master’, an enthusiastic ‘OSGi initiate’, or just curious; you’ll be interested in the OSGi Community Event in Darmstadt in September. Paremus will be attending this year: I’ll be presenting on Cloud and OSGi and explaining the importance of modularity and why the current generation of virtual machine based Cloud solutions have got it wrong! Should be fun and controversial – so come and heckle ;)

 

Breaking the Cycle

Whilst writing this post I came to the realisation that I was re-iterating a message I posted in 2008: see Impaled on the Horns of an OPEX Dilemma.

Perhaps,  if repeated frequently enough, the message concerning the fundamental importance of environmental modularity will seed, grow be heard over the general cacophony relating to the latest technology and software  fads.

With that hope –  once more…

As we  head towards the latest global economic downturn we see the all too predictable response from many organisations whose core business functions are heavily dependent upon technology.

The response goes something like this:

  • We have to deal with spiralling OPEX costs; the dominant component of which is ongoing application maintenance.
  • We have to do something now!
  • If we  reduce number of applications; clearly we reduce our maintenance burden!
  • We can also reduce headcount by pairing down local teams and off-shoring support.

These slash and burn programmes are subsequently implemented with varying degrees of success; BUT IN ALL CASES the remaining application portfolio is: just as difficult to manage; just as difficult to bug fix; just as difficult to functionally enhance; as ever. Perhaps more so as during the cost cutting exercise, with each round of redundancies, critical knowledge concerning the environment flows away from the organisation.

Business Agility and Service Availability Suffer

And then we have the economic upturn!

The business demand new functionality – NOW! The IT department cannot adapt or change the existing business systems: they are too monolithic, too high risk and core expertise has been lost. And so new generation of applications are created to meet the new business requirements. Developer and Operations headcount swell. The business systems are ever more complex, less flexible and OPEX is even higher; yet the business don’t care: they are making profit!

That is until the next down-turn.

Repeat this short term cyclic behaviours for ~15 to 20 years and you’ll end up with a fundamentally broken organisation.

Maintainable Systems are Modular Systems

There is a better way!

  • Acceptance: Realise that agile and cost effect environments take time to create; and will require some fundamental changes.
  • Enlightenment: Ignore industry fads (cloud, virtualisation, programming language of the day); maintainability is only achieved through ensuring modularity and agility at each layer of your environment.
  • If your business systems are Java based – then you are in luck. OSGi technology provides – if not the elusive silver bullet – the next best thing; an industry backed standards framework for modularity from which one can begin to realise these objectives.
  • In addition to these industry standards – you are going to need some help – so call us!
  • You need to start sometime; so may as well be today!

It many be unpalatable – but if organisations had implemented a long term modularisation strategy in 2008; those same organisations would be well placed; realising substantive and sustainable OPEX savings today.

Wonder if I’ll be repeating the same message in 2015?

  • Print
  • RSS
  • Twitter
  • Facebook
  • LinkedIn
  • DZone
  • del.icio.us
  • Google Bookmarks
  • Yahoo! Bookmarks