|
SYS-CON.TV Webcasts
Comments
Did you read today's front page stories & breaking news?
SYS-CON.TV
|
Top Links You Must Click On
General Java Personal Java and Inferno for Today's Consumer Devices
Personal Java and Inferno for Today's Consumer Devices
By: Steven Frank
Mar. 1, 1998 12:00 AM
Personal Java PersonalJava is designed to be highly scalable and configurable while requiring minimal system resources - a key factor in embedded software applications. It is targeted at developers writing applications for consumers who may not be computer-savvy. PersonalJava supports robust user interfaces and the downloading and execution of applets. These applications, like the JavaCard, are upward-compatible and will run on "enterprise" Java platforms.
Inferno To some they are "gadgets." To others they are "gizmos." To many, gadgets and gizmos are nothing more than big-boys' expensive toys. Nevertheless, "toys" not unlike Dick Tracy's Wrist Communicator, or James Bond's combination cellular phone/fingerprint analyzer/car remote control/security scanner, are no longer only in Hollywood prop rooms or sci-fi writers' imaginations. Yes, we are beginning to see an emergence of a wide range of gadgets and gizmos, personal consumer devices or information appliances as they are often called. Today's personal consumer devices, with the declining cost of electronic components and stiff competition in the marketplace, promise to be in the realm of affordability to the masses. Compared to the cost of desktop computers, some consumer devices are very inexpensive. We're talking about hand-held personal digital assistants, set-top boxes, game consoles and smart phones. Some manufacturers have already introduced products or prototypes of these devices with street prices in the range of a few hundred dollars. Consumer devices introduce a new computing model with the potential for being distinctly different from the traditional desktop computing model that we've grown accustomed to. This new computer model presents many new opportunities and challenges for today's application developers. The target devices for our applications have many special requirements. For example, their screens, or displays, can be nothing more than a small LCD panel capable of displaying only a few lines of text. Or they can be as big as your TV set. Or somewhere in between. What about the user interface? Does the device have a mouse? A touch-screen? An IR remote? A keyboard? What about the application environment? The development tools? The operating system? These are just simple examples of what an application developer must take into consideration when designing and developing an application for consumer devices. A combination of two of the most important technologies introduced in the past few years helps you, the application developer, address these challenges as real opportunities.
Introduction to PersonalJava and Inferno "PersonalJava" is a Java API and Java Application Environment for networked applications running on personal consumer devices.[1] PersonalJava enables these devices to run Java programs, giving developers a direct link to providing applications for these devices. The innovators at Lucent Technologies' Bell Labs - the same Labs that created Unix, C and C++ - are also providing technology for enabling distributed, network applications to run across multiple platforms and networks. Inferno is a small network operating system "intended to be used in a variety of network environments; for example those supporting advanced telephones, hand-held devices, TV set-top boxes attached to cable systems and inexpensive networked computers."[2] Inferno enables these devices to use resources scattered across any network, giving application developers the ability to create distributed applications. The combination of these technologies gives application developers the necessary tools for designing, developing and deploying sophisticated, intelligent, usable real-world consumer devices.
The PersonalJava JAE
PersonalJava is designed to benefit application developers in the following ways:
The Inferno Network Operating System Inferno is a complete, full-service operating system that includes a real-time kernel, a concurrent programming language (Limbo), a virtual machine (Dis) and a communication protocol (Styx). It provides many important features expected in an operating system designed for applications running on a wide range of consumer devices. Inferno includes built-in security, network independence, multithreading and multi-processor support, heap and stack management, interpreted and JIT (just-in-time) compilation, graphics libraries and support for IR input devices.
Inferno's definitive strength lies in its portability and versatility across several dimensions:
The purpose of most Inferno applications is to present information or media to the user; thus, applications must locate the information sources in the network and construct a local representation of them. Inferno is designed to isolate the mess of network hardware and protocols from the application programmer. Inferno's design has three principles: Many service providers are looking aggressively to expand their reaches by providing a vast array of services and media. This includes the giant industries of telecom, Internet and cable providers. In this arena, however, there are diverse network hardware and protocols, including POTS, ISDN, ASDL, ATM, broadcast TV, cable TV, digital TV, satellite, the Internet, etc. The destination of the media and services that must traverse this mlange of acronyms is the variety of consumer devices we have been talking about. In less than a year since its first commercial release, Inferno has garnered partnerships with a large number of OEMs and ISVs. These partners are using Inferno in a variety of consumer devices, including smart phones, set-top boxes, game consoles and mobile devices, as well as a number of other non-consumer devices such as network elements and servers.
The Vices of Consumer Devices
Where's the Memory?
You Call That a Screen?
No Mouse? No Keyboard? What Do I Do?
The PersonalJava and Inferno
Solution
Lean and Mean This does not take into account the operating system or other system requirements. The Inferno operating system is very small and itself requires less than 1MB. So, in practice, it seems that 4MB of total memory is the lowest possible and 6 to 8MB would be recommended for most applications.Although recently we have seen a dramatic drop in the price of the memory typically used in consumer devices, the fact remains that the less memory that is required, the cheaper the device can be manufactured. This is especially evident when you consider that some of these devices will be manufactured in relatively large quantities. For example, if a manufacturer can shave $20 off the cost to make a single set-top box by limiting the amount of memory, that translates into $20,000,000 savings in the production of 1,000,000 units. They must walk a fine line when determining how much memory a device needs to be useful verses the cost of production. Granted, most of us don't care much about the manufacturing costs of millions of units. What we do care about is the hardware specs of the device that we want to run our application on. It may mean that we have to approach writing our applications very differently if the device has 1MB versus 4MB of memory. Inferno, in particular its virtual machine (named Dis), was designed with the flexibility of providing a multi-language programming environment. Applications written in Inferno's native programming language, Limbo, can run simultaneously with PersonalJava applications. One of Limbo's many features is portability[4]. Limbo programs, like Java programs, are compiled to a hardware-independent binary image (bytecode) for execution in Inferno's virtual machine. Like Java, Limbo can be interpreted or compiled on the fly for portable execution, use garbage collection for memory management and support the Unicode character set. For Limbo, though, concurrency and inter-task communication are intrinsic components to the language and virtual machine. Limbo is a procedural language that uses the concept of "modules" with separate interfaces and implementations. A typical Limbo application is composed of a set of dynamically interacting modules. The flexibility of the module model contributes to the compactness, efficiency and adaptability of Limbo applications.
Size Doesn't Matter PersonalJava addresses this issue by modifying some of the API packages, in particular java.awt. For example, the Component.setCursor() method may ignore the specified cursor since some platforms may not support cursors and others may limit the types of cursors displayed for usability reasons. It may not make sense on some devices to have a general-purpose window manager that allows a user to manipulate overlapping windows, such as resize and move. PersonalJava implementations might not support the creation of a Frame or Window beyond the "root" window. Additionally, PersonalJava provides a special API for performing double buffering (for platforms that support it) to make painting and updating graphics appear smoother. There are ways to accomplish this by explicitly creating an off-screen image, drawing into it and then using the drawImage method to display it. However, since this can take large amounts of memory, it may not work on devices with limited memory. (Since this can have benefits beyond just consumer devices, it is likely that it will be included in a future version of the JDK.) PersonalJava provides a new method, isDoubleBuffered, for class Component: public boolean isDoubleBuffered(); A return value of true indicates all drawing performed by the paint and update methods are double buffered. Through Inferno's namespace, where all application resources are represented as a hierarchical file system, even devices such as the display device (console) can be imported and exported across the network. They can be dynamically loaded and unloaded, depending on the application's needs. "Look, Ma! No Mouse!" For the last 30 years or so, a computer has been synonymous with a keyboard of some type. However, many of today's consumer devices don't have a keyboard or if they do, it's some convoluted mixture of shift/control keys. In conjunction with traditional GUIs, some kind of pointing device is generally required, whether it's a mouse, trackball or pen. Yet it isn't too likely that we'll see a mouse port for a cellular phone. In mouseless environments, the users typically can navigate from one on-screen component to another using keys or buttons on the device. For example, after navigating to an on-screen button component, the user might press the Go key on a remote control to indicate that the on-screen button is to be "pressed." PersonalJava provides additional APIs for specifying ways of interfacing with components in a mouseless environment The API includes four interfaces in the java.awt package that allow developers to make it easier to adapt to mouseless environments:
public interface NoInputPreferred {} Inferno enables an application to dynamically load the support modules for the input device in use. For example, when an application is running on a set-top box that uses a remote control, it can load the IR interface module; when it is running on a desktop or a system that uses a keyboard for input, it can load a keyboard IR simulation module.
Summary
Resources Reader Feedback: Page 1 of 1
Enterprise Open Source Magazine Latest Stories . . .
Subscribe to the World's Most Powerful Newsletters
Subscribe to Our Rss Feeds & Get Your SYS-CON News Live!
|
SYS-CON Featured Whitepapers
Most Read This Week |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||