In an industry awash in cutesy metaphors, it's no surprise when another one pops up and grabs the popular imagination of creative business and IT people. Cloud computing is one such metaphor, and it has — pardon the expression — taken the world by storm. But what exactly does it mean?
Clouds, of course, consist of a huge multitude of particles of water vapor numbering in the hundreds of millions. Clouds have no central control and basically go where the wind blows. From this perspective, the Internet's multitude of client and server computers coupled with the many different purposes and controlling entities that drive the progress of it resemble clouds. Couple this with the wireless-data revolution that the cell-phone companies have brought us, and it does indeed seem like we're all awash in an invisible "cloud" of computing power.
Since the dawn of electronic computers, there has been a clear division of labor between the four main functional parts of a computer:
- Input/output (I/O) devices that provide the human-computer interface
- Central processing unit
- Volatile random access memory (RAM)
- Nonvolatile memory
The first three parts put the "computing" in computers. It is in the fourth part, where the valuable data assets are typically stored, that has changed most radically with the advent of cloud computing. Valuable data assets reside in nonvolatile memory so they are protected against the loss of electrical power — regardless of whether the loss is deliberate. Typically, nonvolatile memory devices are hard disks, but they can also be solid-state devices like secure digital (SD) cards and even magnetic tape devices (all but obsolete now). But such storage devices have their limitations.
Time marches on, technology has progressed, and along came computer networks, on which an organization's valuable data assets can be centralized in a computer shared by multiple terminals and backed up regularly as a necessary base IT function. This model (known as the mainframe model) offered many advantages — one being that it lightened the load each terminal location had. Small offices with little more than a tiny terminal (keyboard, mouse, display, and PC) could access gigabytes of company data and the processing power of large mainframes without cluttering up the place — so long as they were tethered by wires.
The next big paradigm shift came along with the network of networks we affectionately know of as the Internet, where absolutely gargantuan computer systems (local networks) can service huge populations of tiny terminals anywhere in the world a satellite dish can be raised. The wireless remote nature of this configuration came to be known of as the cloud.
Then along come personal digital assistants (PDAs), mobile phones, and smart phones, where the miniaturization of computers has progressed to the handheld form factor we know and love so well. Suddenly, smart terminals are in the hands of countless millions of productive people, producing and consuming information at prodigious rates.
In the mid- to late 1990s, e-mail and the World Wide Web were the most popular applications to dominate the cloud. Most people interacted with the cloud using a Web browser and understood the Internet to be a relatively simple application. With the advent of commercial successes like Yahoo! and Google, terabyte servers and network connections have replaced local hard disks as the preferred nonvolatile storage devices. Just as many forward-thinking visionaries predicted, the cloud has become a modern utility like water, phones, and electricity. Using the mobile-telephone digital network as a primary Internet Service Provider (ISP), the cloud grew to use millions of tiny handheld devices as the main tool for displaying the data residing on those servers.
Just as clouds move about and are altered by the winds of change, so have the paradigms under which these devices operate — the terminals have become smaller, more powerful, and far more portable, while the servers have likewise become more powerful and better capable of servicing users' data needs through the virtualization of software and the metering of its usage.
Companies no longer need to maintain large and costly server "farms" round the clock when there is another less-expensive alternative: contracting out those services through vendors like Google, Amazon, and IBM®. Through virtualization, applications that formerly ran in custom environments can be duplicated, or "imaged," to run in the cloud on the vendor servers. And with the proper metering of those services, the company will not need to pay peak prices for those times when its services are being minimally used.
As hardware technology marched on, so did software, and we have seen the creation of new applications. For example, location-based services that map out businesses close to where the cell tower or built-in global positioning system (GPS) determined you are. New markets cropped up for downloading and testing useful programs and data files, such as the Android Market and the Amazon MP3 Market for purchasing and downloading music. No doubt, we'll see further advances in these unique new applications of cloud computing — for example, companies could sort out and select regional contact information, then automatically transfer today's list of cold calls to the regional salesperson's Android-based mobile phone while he sleeps.
Cloud computing, where portable devices complement powerful servers, requires an operating system that maximizes what the server architects and programmers can do on a small client machine. Android is such an operating system.
First and foremost, Android is a software stack for mobile devices. This means that high on the list of priorities is the preservation of battery power and the efficient management of limited memory resources. There are five distinct layers to the Android system stack:
- The Acorn RISC Machine (ARM) Linux core forms the solid base upon which all the other layers stand. Linux is a proven technology that is highly reliable, and the ARM processor family is known for high performance on very low power requirements.
- The libraries provide the reusable and sharable low-level code for basic functions such as codecs — software for coding and decoding digital sound and video — functions for the presentation of rich graphics on a small displays, secure shell support for encrypted TCP/IP traffic into the cloud, as well as component support for Web browsing (WebKit), SQL database functionality (SQLite), and standard C library functionality you would expect in a Linux system.
- The Dalvik run-time byte-code interpreter, which strongly resembles the Java™ language byte-code interpreter, adds a few distinct features that uniquely define the security and power-preserving model of Android. Every application currently running, for example, has its own user ID and its own copy of the interpreter running to strictly separate processes for security and reliability.
- The Android application framework enables you to use and replace components as you see fit. These high-level Java classes are tightly integrated components that define the Android API.
- The Android core applications include the WebKit browser, Google calendar, Gmail, Maps application, SMS messenger, and a standard e-mail client, among others. Android applications are written in the Java programming language, and you can download many more from the Android market on the fly.
Each Android application can be further subdivided into distinct functional units:
- Security model
Activities are the components of an Android application that extend the
Activity base class and define an interface consisting
of a View that responds to Events. If an application consists of
three windows (for example, a login window, a text-viewing window,
and a file-viewing window), each is typically represented by a different
Android maintains a history stack for every application run from the home page, and you can click the Back button to scroll back through this history of activities.
Intents, like activities, are a special class of application code that describe and define what an application wants done. Intents add a layer of indirection that enables sophisticated component reuse and substitution. For example, an application may present a button labeled Clients that, when clicked, displays a list of contacts that are your clients. And here's where the indirection comes in: You need not use the default viewer for those contacts; instead, you can substitute a different viewer.
For some applications, this can be a very powerful application-integration function. Perhaps a topographical map is better for a particular display than the default map view.
Classes such as a
BroadcastReceiver define code that
will execute when external events trigger them. Events like a timer going off
or the phone ringing can be monitored in such a way. Typically, code like this
doesn't display a window, but can use the
class to alert the user that something needs attention.
A service is an application that runs at a low level and without a display or UI. It is usually an application that is expected to run for a long time in the background. A perfect example of this is a media-player program playing a play list of songs. Although a media-playing application will present a UI allowing users to define their play lists, the program hands off control to the service to actually play the songs in the given play list.
The security model of Android only allows programs to have their own data. If programmers want to share data among several diverse programs, they can define content providers for this purpose.
android.provider defines classes and
interfaces that allow applications to read many built-in Android databases.
Information such as contacts, photos, and songs are easily shared among
applications with these interfaces.
The power of open source should never be underestimated, just as the power of a free and creative people shouldn't. Unfettered by proprietary APIs and company interests that often impede the progress of software engineering, the Android platform has a large and very active developer community whose combined talents truly make the sum greater than the parts. Want to empower your programming career? Learn to program on the Android platform, and you will someday have millions of mobile phone users in your potential market — some of whom may have a need for your program.
The heart of Android is ARM Linux. That alone should inspire confidence in the ability of this platform's importance to grow quickly. Linux is a fast and secure operating system with many thousands of programmers familiar with it. Many Linux-based systems are known to have an uptime of consecutive years being connected to and servicing requests in the cloud — and that truly defines reliability.
Programmers have several choices when it comes to their Android development environment. They can use Microsoft® Windows® XP or Windows Vista®, Macintosh OS X (V10.4.8 or later, x86 only), or Desktop Linux (Ubuntu preferred). There is a downloadable software development kit SDK for all of these commonly used operating systems.
You can use a GUI IDE like Eclipse or Sun Microsystems' NetBeans, or you can use the proverbial "real programmer" method of the command line and a standard editor. The choice is yours.
The Android community encourages communication and so do the companies behind the creation of Android — Google, HTC, T-Mobile, and other members of the Open Handset Alliance Project. Open truly means keeping lines of communication between people (programmers, users, marketeers, etc.) open, protocols open, and programming APIs open.
Organizations can also put proprietary programs and data on Android, thanks to the kinds of software licenses used. This keeps them from running away from the platform, but also doesn't limit the choices consumers have. It's a win-win combination all around.
The first task for anyone interested in developing for Android is to download and install the Android SDK (see Resources). Now, you're ready to program! There are as many ways to begin programming as there are programmers. Some, myself included, like to study all they can before beginning to code. Others like to jump right in and follow the tutorial examples given by the comprehensive Android documentation. But wherever your inclinations lie, you must eventually code something. To get started, check out Android's twist on the quintessential Hello World program (see Resources for the "Hello Android" sample application).
There are numerous resources in the cloud for Android development, including several wikis and Android community forums, as well as several Android programming blogs. The main company driving the Android phenomenon, Google, is at heart a communications company and so has several helpful forums (known as Google Groups) for communication among developers of different skill sets and talents.
The Android links in the Resources section can't even begin to show how vast the Android universe is. Cloud computing — and Android in particular — is hot, hot, hot.
IBM is working hard to create two large cloud computing centers in Research Triangle Park, N.C., and Tokyo. Access to the services that power your custom cloud computing applications are as simple as visiting the center Web sites and exploring what IBM can do for you (see Resources).
You can write your applications to take advantage of the cloud, where backup and restore facilities are automatic and skilled engineers are available to make your visions a reality. Picture your Android cell phone as merely an extension of IBM's collective computing power. While sitting in a coffee shop sipping your favorite latte, what would you want to see on your handset? Cash-flow diagrams? Portfolio data and graphs to show their growth? Perhaps the latest image data from NASA, run through your custom filtering program on a very high-speed parallel-processing server last night? Maybe the current earthquake data direct from the National Earthquake Information Center, or just plain old who won the NBA championship last night? The data is "out there" and the processing power to make sense of it is, too: All that is needed is for you to make it happen.
Time will tell what innovative new cloud computing applications are created in the coming years with everyone standing on the shoulders of the giants preceding them.
Learn more about Android.
Discover why cloud computing is important, how to get started, and where to learn more about it in the developerWorks Cloud computing space.
Interact with Android developers at Google Groups.
For more information about the potential of cloud computing, check out "Architectural
manifesto: An introduction to the possibilities (and risks) of cloud computing."
For more information about IBM's commitment to cloud computing, see the press
release titled "IBM
Invests Nearly $400 Million on Cloud Computing Centers in U.S. and Japan."
To listen to interesting interviews and discussions for software developers, check out developerWorks podcasts.
Stay current with developerWorks' Technical events and webcasts.
Follow developerWorks on Twitter.
Check out upcoming conferences, trade shows, webcasts, and other Events around the world that are of interest to IBM open source developers.
Visit the developerWorks Open source zone for extensive how-to information, tools, and project updates to help you develop with open source technologies and use them with IBM's products.
Watch and learn about IBM and open source technologies and product functions with the no-cost developerWorks On demand demos.
Get products and technologies
Access IBM middleware products in the Amazon Elastic Compute Cloud (EC2) virtual environment and start developing your applications today.
Download the Android SDK.
Check out the Android sample application.
Innovate your next open source development project with IBM trial software, available for download or on DVD.
Download IBM product evaluation versions, and get your hands on application development tools and middleware products from DB2®, Lotus®, Rational®, Tivoli®, and WebSphere®.
Participate in developerWorks blogs and get involved in the developerWorks community.
Bill Zimmerly is a knowledge engineer, a low-level systems programmer with expertise in various versions of UNIX and Microsoft® Windows®, and a free thinker who worships at the altar of Logic. Bill is also known as an unreasonable person. Unreasonable as in, "Reasonable people adapt themselves to the world. Unreasonable people attempt to adapt the world to themselves. All progress, therefore, depends on unreasonable people" (George Bernard Shaw). Creating new technologies and writing about them are his passions. He resides in rural Hillsboro, Missouri, where the air is fresh, the views are inspiring, and good wineries are all around. There's nothing quite like writing an article on UNIX shell scripting while sipping on a crystal-clear glass of Stone Hill Blush. You can contact him at email@example.com.