INFO-LINK



Web Development

XML and Pig Poop:<BR>Agribusiness Online


February 2000: Features: XML and Pig Poop: Agribusiness Online

A homegrown engine for assessing the environmental and community impact of large livestock operations tests the promise of XML and distributed objects.

I’ll say it up front: I love my job. I’m one of two software engineers supporting a small team of scientists doing community outreach and research on agriculture and environmental issues. Working with the Agricultural Systems and Informatics Group (ASIG) is kind of like working for a start-up, except that our group is swaddled in a big research organization: the University of Wisconsin-Madison Department of Soil Science. And nobody second-guesses our technical decisions. Bliss!

Our outreach mission mainly involves decision support for growers and their communities. In some cases, we deliver raw information. For example, we publish daily maps derived from NASA satellite data which show sunlight intensity across the country. Other products run simulation models to forecast things like frost formation in cranberry bogs, or the likelihood of "late blight" in potatoes, and recommend how to get good yield with minimal environmental impact. In the past, we’ve used a variety of technologies: DOS and Windows applications written in Pascal or Paradox, automated e-mail, faxes and even a text-to-speech phone-response system (to reach the real low-tech diehards). Most of our work today, however, is delivered over the World Wide Web. The overhead of producing, delivering and maintaining custom applications devours resources far out of proportion to the results. With the World Wide Web, we have most of the same graphical and user-interface power available, but we can release as often as we like, and we never have to produce CD-ROMs. Also, our models primarily use data stored on our own servers, so it makes sense to run them locally and just put the user interface on the user’s machine.

Here’s the story of one of those projects. It’s got distributed objects. It’s got XML. It’s got design patterns. Plus, it’s got kilotons of pig poop. What more could you want?

Caution: Big Hogs Upwind

Bear with me for a little background.

In the past, university agricultural research primarily concerned technology and economics as seen from the grower’s standpoint. At ASIG, we’re trying to broaden that mission toward providing easily-accessible information to all stakeholders.

The past 10 years have seen a remarkable trend toward farm consolidation, especially livestock operations. When they get really big (I’m thinking 1,000 hogs, here), we call it a concentrated livestock operation or CLO. In Wisconsin, a new CLO usually means a political controversy. Often those for and against paint in broad strokes:

"Jobs for everybody!" the promoters crow.

"The stench will peel the paint off my house–not in my backyard, buddy."

Our purpose isn’t to wade into that fight. These are difficult socioeconomic trade-offs that the community has to resolve. On the other hand, at least some of the issues are amenable to scientific analysis. We aim to give growers, interested residents and scientists access to those numbers. Then we might see less heat and more light, and the debate has a hope of moving on to the hard questions.

Initially proposed in January 1998 and currently in alpha test, CELLO (Communities, Ecosystems and Large Livestock Operations) is designed to estimate a CLO’s net change in nitrogen and phosphorus (important determinants of ground- and surface-water quality), economic impact, infrastructure impact and odor prediction.

To get started, we needed to chat with Bill the Science Guy. Also known as the Big Dog, Dr. William Bland, associate professor of soil science, is our boss. Over the past five years or so, his interests have evolved from biophysical modeling to addressing societal questions about soil and land use with those models. (I poke some fun at him in this article, but Bill really does get it. He jumped on Java when it was brand new, then was smart enough to drop it until the language stabilized.) A series of talks with him yielded some critical requirements. CELLO must:

  • Be accessible by anyone with a web browser: homemakers concerned about water quality, growers proposing a CLO or zoning board members looking at the impact on the local road network.

  • Support varying levels of user interest, from a quick peek at the bottom line to a detailed analysis, with optional scenarios to explore. (What if farmers use less fertilizer, replacing it with manure from the CLO? What economic impacts will be seen from various salary structures for CLO employees?)

  • Be sufficiently simple to use so that no external documentation or support would be required.

  • Require no downloads or installation.

  • Analyze each CLO proposal in a "notebook," with a separate area detailing the calculations, assumptions and raw data common to all notebooks.

  • Allow new notebooks to be produced quickly as new CLOs are proposed, with minimal programming.

In addition, CELLO had to fit within our budget for tools and hardware (minimal) and for programmer time (part-time for two people). And the faster we could get something up, the more useful it would be. Finally, we hoped to develop technology that we could easily reuse in future projects.

This led us to some process and design criteria right off the bat:

  • A spiral development model would let us try risky technologies early and give us a constantly improving prototype for soliciting feedback.

  • We would use open-source or public-domain tools wherever possible.

  • We would deliver via the Web, using HTML and Java 1.1 for our user interface.

One Applet To Rule Them All

At first blush, getting to a prototype sounded easy. In August 1998, we selected the nitrogen/phosphorus model as our first target. "That model’s trivial," said Bill. "You just take the nitrogen imported and subtract the nitrogen exported."

Paul Kaarakka, the other software engineer on the project, comes to programming via zoology and biomedical engineering. He specializes in model implementation. He started turning Bill’s equations into Java classes. I opened JBuilder, flung down some tabbed dialogs and tacked on some code. Within a day I had an applet to show. Bill made approving noises.

But he wanted to "own" and edit the supporting text. In fact, he wanted rather a lot of text, with tables, formatting, graphics and embedded links. That sounded like a job for HTML, not Java.

Then I tested the nascent applet on Internet Explorer. "What’s this ‘ClassNotFoundException?’ Aaaarghh!" I screamed. I had been seduced by all the nifty user-interface widgets in Swing. But the browsers didn’t include it, and if I did (via an "archive" parameter in the applet), the download time became staggering. There had to be a better way.

Bucket O’ Applets

Okay, so the models had to live on the server. And I was still twitching and muttering from trying to force Java to do HTML’s job. So how about combining HTML with a gang of applets? We’d run the models and make the results available over the net ... somehow. Each browser applet would be just smart enough to (somehow) get a single number off the server and display it.

Bill could use HTML formatting and its easy-to-use tools, and just throw in a little black-box applet wherever he wanted a model-result number. The numbers would "automagically" update (somehow) whenever new ones were available. We could use the same technique (somehow) to send user input back to the server.

Of course, we’d need to turn "somehow" into a real protocol.

I went for some walks (it’s a lovely campus). I talked to myself a lot. I riffled through books (especially the classic Design Patterns: Elements of Reusable Object-Oriented Software, Gamma et. al., Addison-Wesley, 1995), and saw that the Observer pattern fit like a glove. Each applet could register its interest in a particular number (a topic) with a registry on the server (a whiteboard). Whenever a recalculation occurred, the applet would get the latest number. Conversely, when the user supplied some input (for example, changing the CLO’s pig population with a slider applet), the model on the server would get notified, recalculate and send out the new numbers. (See "RemoteObserver–the Whiteboard" below for more details on the pattern and our implementation.)

So we had to implement the Observer pattern over a remote communication channel. And the server would have to maintain state for simultaneous users, and ensure that only "their" numbers propagated to their applets.

The first problem was relatively simple. I spelunked the Java Development kit source code for the Observer classes, and shamelessly lifted the good ideas for a Remote Method Invocation-based RemoteObserver package. Next, I wrote RemoteTopicApplet (the display mechanism) and RemoteControl (an abstract user interface control class for information going the other way).

I didn’t know it at the time, but this infrastructure–a central whiteboard and its observers–would turn out to be a key to the project’s success. Its simple semantics kept Observers and Observables loosely coupled, enabling us to rip out and replace entire subsystems without disturbing anything else. From this point on, Paul could work on implementing the model mathematics, while I polished the plumbing.

The other problem (keeping track of session state) was a little trickier. How could the applets discover what session they belonged to? Every solution we proposed foundered on the same rock: we couldn’t cram the whole website onto a single page, but only applets on the same page can talk to each other. To get something running, I settled on an ugly hack: using a Perl CGI script to filter the HTML pages into temporary directory, customizing each applet tag with session-specific parameters as we went. By using relative URLs for interpage references, we could contain a user session within the prefiltered pages.

It wasn’t pretty, but it all worked. The applets woke up, looked around and started snagging their numbers from the server. Hurray! Bill gave demos. We got kudos (and, more importantly, feedback). The project lived, and Paul and I saw the sun, for a change.

But there were some nagging little problems, which on further reflection turned out to be showstoppers. For one thing, I had seriously offended the gods of software simplicity. By now our prototype of a "trivial" model involved a web server calling a Perl script which connected to a Java object (which instantiated some session-specific model objects), then filtered Java applet tags in HTML, RMI running one way, sockets over there ... I’ll spare you the rest of the details. But when I explained them to Paul, there was a long silence. "It’s very clever," he said, "but it’s got to go."

Worse, the server logs showed that every applet instance was being downloaded separately. Fifty numbers on the page? Fifty "gets" of RemoteTopic-Applet.class, thank you. Worse still, if you moved to a new page, the browser cheerfully slew all the applets on the old page, so if you clicked "Back," you got to wait for another 50 gets. (And that subdirectory business … eeww!)

HTML Filtering With Servlets

Well, maybe gangs of applets weren’t such a hot idea. Hey, we’re already filtering the HTML. Why not just stuff the numbers in and shoot the HTML directly to the user’s browser?

The next turn around the spiral used CGI to call a Java application which inserted the numbers. That worked, but it was a resource hog (and ugly besides). We quickly replaced that with a servlet, which was faster for the user and easier on the server. Losing the applets meant losing live-update capability, but clicking the "reload" button was a small price to pay for a much more robust system.

In fact, since servlets have session management built in, we’d found a better way to solve that problem, too. We could ditch the filter-to-a-directory nonsense. Best of all, the servlet could register as an Observer, just like the applets used to, and the rest of the project–including all of Paul’s code–would be completely untouched.

XML to the Rescue

All this time, Paul was churning Bill’s equations into Java. It was just arithmetic, but there were hundreds of numbers, and each had to get into the whiteboard. Paul’s habitually clean Java was getting caked with cruft–fully 30 percent of it was just whiteboard-stuffing overhead. For example, just to publish the number of cows in the study area, we needed:

roi.notifyObservers("SADairyCows",new Float(areaInfo.getValue ("Dairy",dataScale)));

And even a simple calculation was worse. This example just multiplies a couple of numbers:

roi.notifyObservers("SAMilkProduction",new Float(animalData.getValue

("Dairy", "Target")* ((Float)

roi.getUpdate("SADairyCows")).floatValue()));

Clearly, my friend was working way too hard.

Then I started reading about XML. Aha! If I could create a little dialect that knew about topics, the whiteboard and arithmetic, a single general-purpose parser could build models, run calculations, and update the whiteboard. And the dialect would be so simple, even a scientist could use it.

It turned out to be surprisingly easy, since so much of the work is done for you by a good XML parser. I downloaded IBM’s XML4J, hoovered through The XML Companion (Neil Bradley, Addison-Wesley, 1999) and The XML Black Book (Natanya Pitts-Moulis and Cheryl Kirk, The Coriolis PressGroup, 1999), and got to work. Two days later, I showed a toy model to Bill and Paul, and they were off and running.

Which brings the history up to date. Time to dig a little deeper into…

Architectural Details

The Observer pattern involves two partners, Observable and Observer. Observable publishes two methods: addObserver() and removeObserver(). Observer publishes one method: update(). An Observer obtains a reference to an Observable through the RMIRegistry classes, and calls Observable.addObserver(this) to register itself.

When an event of interest occurs, the Observable trundles through its list of Observers, calling each one’s update() method. Since update() takes a Serializable parameter, you can pass almost anything along, just so long as Observers and Observables adhere to the same convention. (At this point, CELLO uses a stone-simple convention: everything’s a Float). Of course, the Observer can do whatever it likes in the update() method–store a result for later, put up a dialog, print the number to a stream, and so on.

We added three twists to the pattern. First, we implemented the pattern over Java RMI (see Figure 1), so that any of the partners could exist in another process or on another machine altogether (such as an applet out in a browser somewhere).

Figure 1. The Observer Pattern

Second, currently, most Observers in CELLO just want to grab a number without waiting for the Observable to cue them, so we broke update() into two phases: notify() and getUpdate(). Design Patterns fans will recognize the "pull" model.

Third, since CELLO publishes hundreds of numbers, making each an Observable would be too hard to manage. Instead, we introduced the notion of topics. A topic is an individual result (say, the total phosphorous production due to pig manure). A collection of related topics is published via a single Observable. When registering itself, the Observer specifies the topic of interest.

As I mentioned above, this pattern was critical to CELLO’s success. By creating a lingua franca for communicating between software modules, we ensured loose coupling between them. Once we had this foundation in place, the architectural upheavals detailed above could go on without obviating existing work.

A Sample CELLO Session

CELLO is composed of a number of loosely confederated calculation engines called models. Each is responsible for a particular area of interest, such as the nitrogen/phosphorus budget or odors. When a user contacts the web server, requesting any CELLO page, she sets off a cascade of events (see Figure 2):

  • Apache rewrites the innocent-looking URL into a call to a servlet; the disk path to the requested document is passed to the servlet.

  • If necessary, the servlet loads and initializes, creating the singleton ModelManager class and a new user session.

  • The servlet parses through the requested HTML page, looking for topic tags. Each topic tag contains a model ID and a topic ID.

  • The servlet asks ModelManager for a reference to the requested model, which is returned as a RemoteObservable object. If necessary, ModelManager creates an instance of the model and adds it to this user’s session.

  • The servlet calls getUpdate() for the needed topic, and replaces the topic tag with the result.

Figure 2. Sequence Diagram

Certain web pages will have applets embedded in them which connect (also via RemoteObserver) to one of the models. If the user wonks on a control in the applet, an RMI call to update() occurs, and the model performs whatever calculations are necessary. As each topic’s value is calculated, the new value is published to all its Observers; some might be applets in the web pages, and others might be models. Eventually the chain of update() methods ends, the new values are propagated everywhere, and a new cycle can begin.

Modeling in XML

The XML dialect we use is quite simple. A model has a name (which is just for readability) and a whiteboard ID, and can contain topics and links. (Note that models only loosely correspond to whiteboars: a model might put its topics into a single whiteboard, or several. Conversely, a whiteboard could contain topics from several models.) Topics have a name, a whiteboard ID (optional, defaulting to the same as the model’s), and either an arithmetic operator or a constant. Arithmetic-operator topics can contain subtopics (for example, a "plus" topic contains a list of addends). Links have a whiteboard ID and a topic name, and can plug in numbers from elsewhere in the model, or from a different whiteboard altogether.

A simple API for an XML (SAX) parser reads the XML files, constructs trees of Operator objects and registers each with the appropriate whiteboard. If the Operator has any operands, each one registers the parent Operator as an Observer for itself (See Figure 3).

Figure 3. Class Diagram for the Potassium in Pig Feed Model

For example, suppose we’re interested in the phosphorus contained in pig feed. The calculation is simply:

(total phosphorus in feed) = (number of pigs) * (feed/pig) * (phosphorus/ pound of feed).

TotalPInPigFeed is an Observer of NumPigs, PigFeedRequired and PInPigFeed. The latter two are links to topics in another whiteboard. Once the tree has been constructed, it waits for some event to fire the operator. For example, the filter servlet might request the TotalPInPigFeed value from the N-P Budget model. That Operator, in turn, requests the values of each of its operands, multiplies them and returns the result (caching it so that subsequent queries don’t trigger the whole shebang all over again).

But suppose a user is playing "what-if" with the pig feeding model and inputs his own number for phosphorus in pig feed. When the operand’s value changes, it notifies its Observers. Among them is TotalPInPigFeed, which then recalculates again with its operands’ latest values. In turn, TotalPInPigFeed notifies its own Observers, if any, that its value has changed.

In this way, the model can accommodate changes to any value in the tree, without performing unneeded recalculations.

Ideas For The Future

As we progress toward implementing the less "trivial" models of CELLO (economic impact, infrastructure impact, and odor prediction), I’m filing a list of potential improvements. For one thing, I’ve never gotten over the live-update idea. It just bugs me to have to click "Reload" to see recalculated numbers. Someday we might have an applet that can slurp our HTML off the server, inserting up-to-date numbers as it goes and rendering the result. The applet would be a RemoteObserver, of course, so that whenever a number changed, the HTML would be rerendered with the new value. Or perhaps we could use server push to get the same effect.

Also, while our little XML dialect serves our needs, it’s easy to imagine extensions. It wouldn’t be hard to represent a database query in XML, for example; the parser could plug the results right into the model. We could also extend the dialect with arbitrary calculations by using Java’s class-loader facility; an attribute of the XML element would contain the name of the class file to load.

Finally, we added XML support to make CELLO models easier to write. It has occurred to us that we could also run the same XML code through a stylesheet, transforming it into HTML. If we could work that trick, CELLO users could see the actual mathematics in any model, without our having to write and maintain separate documentation. (In fact, the model authors are already clamoring for this, saying that the XML is too hard to read!) The challenge there will be deciding exactly what form the output HTML should take for maximum readability. Ideally, the tree should be rendered as a series of equations.

Another possibility is more radical: provide a mechanism for the user to modify the XML code. We already let them tweak selected numbers–why not the calculations themselves? Perhaps it wouldn’t be a useful feature for CELLO, but we’re already thinking of other projects in which we can reuse CELLO’s technology.

Epilogue

As planned, we turned the model-creation business over to the scientists, where it belonged. I installed a validating XML editor on Bill’s Mac, and spent an hour explaining the syntax. "Here’s where you fill in the arithmetic, see?" He nodded. I rose. "Should be trivial, hey?" I said, and fled.


Around the Web

CoreDet: A Compiler and Runtime System for Deterministic Multithreaded Execution

CoreDet is a fully automatic compiler and runtime system for deterministic execution of arbitrary C/C++ multithreaded programs.

Quick Read

Honeypot Detection in Advanced Botnet Attacks

Honeypots have been successfully deployed in many computer security defense systems.

Quick Read

Swarm: A True Distributed Programming Language

The Swarm prototype is a simple stack-based language, akin to a primitive version of the Java bytecode interpreter.

Quick Read

Key Software Development Trends

Several trends are emerging within the area of software development. Here are some of the most important trends S. Somasegar has been thinking about recently.

Quick Read

Understanding Parallel Performance

Understanding parallel performance. How do you know when good is good enough?

Quick Read

Short and Tweet: Experiments on Recommending Content from Information Streams

The authors used 12 algorithms to study the URL recommendation on Twitter as a means of better directing attention in information streams.

Quick Read





Video

Forty finalists will gather in Washington, D.C. from March 11-16 to compete for $630,000 in awards.; DDJ; Intel; science; Dr. Dobb's talks with Commonsware's Mark Murphy about what's involved in developing software for the Android operating system; Android; apple; DDJ; tablet development; The new method uses analytics technology developed by the Mayo and IBM collaboration, Medical Imaging Informatics Innovation Center, and has proven a 95 percent accuracy rate in detecting aneurysm.; Algorithm; DDJ; diagnostics; ibm; imaging; T-Mobile USA is enabling phone calls to Haiti without charges for international long distance through January 31 and retroactive to the earthquake on January 12; DDJ; mobile; wireless; Al Williams gives you a demor of One-Der: The One Instruction CPU; DDJ; At the 2010 International Consumer Electronics Show, the auto industry's first working smartphone application was unveiled; DDJ; mobile; The Bluetooth Special Interest Group (SIG) has announced the adoption of BLUETOOTH low energy wireless technology.; bluetooth; DDJ; wireless; IBM has unveiled its list of five innovations that have the potential to change how people live, work and play in cities around the world over the next five to ten years; DDJ; ibm; TeliaSonera's LTE mobile broadband commercial network in Stockholm is now the fastest and largest in the world.; broadband; DDJ; ericsson; mobile; Google has introduced, google Goggles, a visual search application on Android devices that allows users to search for objects using images rather than words; Android; DDJ; google; mobile; Visual Search Applications; Dr. Dobb's talks with David Intersimone, Vice President of Developer Relations and Chief Evangelist at Embarcadero Technologies, about RAD Studio 2010, SQL optimization and his reflections on the software industry.; database programming; DDJ; sql; Researchers from Intel Labs have created an experimental, 48-core Intel processor or "single-chip cloud computer."; cloud computing; DDJ; Intel; multicore; parallelism; The Large Hadron Collider will produce roughly 15 million gigabytes of data annually, to be accessed by a distributed computing and data storage infrastructure called the LHC Computing Grid.; CERN; DDJ; grid computing; physics; A mobile handheld device designed to let users can point, shoot and listen to printed text.; DDJ; Intel; mobile; Ericsson has become the first vendor to prove end to end interoperability in TD-LTE, another standard of 4G radio technologies designed to increase the capacity and speed of mobile telephone networks.; DDJ; ericsson; mobile; TD-LTE; According to a recent study, 80 percent of US respondents feel there are unspoken rules about mobile technology usage, and approximately 69 percent agreed that violations of these unspoken mobile manners are unacceptable.; DDJ; Intel; mobile; IBM and Canonical will introduce a software package for netbooks and other thin client devices in Africa. This is the first cloud- and premise-based Linux netbook software package offered by IBM and Canonical.; cloud computing; DDJ; ibm; His unprecedented ability to manipulate individual atoms signaled a quantum leap forward in in nanoscience experimentation and heralded in the age of nanotechnology.; DDJ; ibm; nanotechnology; IBM honored for its invention of the Blue Gene family of supercomputers. Adobe founders also recognized.; adobe; DDJ; ibm; Former U.S. President Bill Clinton addressed thousands of online entrepreneurs from around the world gathered for the third APEC Business Advisory Council SME Summit in Hangzhou, China.; DDJ; e-business; With free cooling for several months a year, Sweden is an ideal location for cost-efficient data centers.; data centers; DDJ; PNC Bank introduces a new mobile App for the iPhone and iPod touch that provides Virtual Wallet customers with a high-def view of their money while on the go.; DDJ; iphone; The Swedish LTE site will be part of a commercial network scheduled to go live in 2010, bringing data rates far above what is possible in today's mobile broadband networks.; DDJ; ericsson; mobile broadband; Nanotechnology advancement could lead to smaller, faster, more energy efficient computer chips.; circuit boards; DDJ; nanotech; semiconductor; Dr Dobbs talks with with Claudia Backus, Senior Director of Ecosystem Programs at Motorola, regarding the company's recently released MotoDEV Studio for their Android-powered phones.; Android; DDJ; mobile; motodev; The Extremadura Regional Government of Spain and IBM have launched an electronic prescription system in 680 pharmacies in western Spain.; DDJ; ibm; Ericsson to Acquire Majority of Nortel's North American Wireless Business; DDJ; ericsson; mobile; telecom; Nintendo's Wii Sports Resort is an immersive, expansive active-play game that includes a dozen resort-themed activities.; DDJ; nintendo; video games; OnStar can remotely send a signal to the electronic system in the subscriber's stolen vehicle and the vehicle will not be able to be re-started.; cellular; DDJ; wireless; In celebration of the historic Apollo Moon landing, Google has released Moon in Google Earth.; DDJ; google; Ericsson has been awarded contracts with the three telecom operators in China to provide fixed broadband access.; broadband; DDJ; mobile; tv; wireless; Dr. Dobb's talks with Adobe's Adam Lehman about the upcoming release of ColdFusion specifically optimized for Flash and Adobe AIR platform delivery.; adobe; ColdFusion; DDJ; eclipse; Companies team to develop computing device and chipset architectures that will combine the performance of powerful computers with high-bandwidth mobile broadband communications and ubiquitous Internet connectivity.; broadband; DDJ; Intel; mobile; nokia; Adobe Systems and HTC recently announced that the new HTC Hero will be the first Android phone to ship with support for Adobe Flash Platform technology.; adobe; Android; cell phones; DDJ; flash; mobile; mobility; 3.2 million Euros awarded across eight prize categorie recognizing world-class scientific research and artistic creation.; DDJ; A parody of Paul Simon's "50 Ways to Leave Your Lover," but for software security nerds.; DDJ; sql; Dr. Dobb's Mike Riley talks with Jim Manias of Advanced Systems Concepts.  In this conversation, Jim discusses the new ActiveBatch 7 and how it can provide significant productivity gains for application developers and business process owners alike.; ActiveBatch; DDJ; Sun cofounder Scott McNealy and Oracle CEO Larry Ellison discussed Java's role in computing. Sun has also released OpenSolaris 2009.06.; DDJ; java; opensolaris; oracle; sun; Spotlight on NATO's centre of excellence on cyber defense in Tallinn, Estonia.; cyber defense; DDJ; nework security; security; Create Data Access Layers in ASP.NET; DDJ; In this demonstration you will learn how to layout a WPF application. We will explore the major layout panels that come with WPF, contrasting them with each other and describing when to use each.; DDJ; web development; windows; wpf; The Intel Foundation has announced the top winners of the Intel International Science and Engineering Fair; DDJ; Intel; News; science; Matt Hester demonstrates Internet Explorer’s 8 new feature Selectors API for utilizing CSS selectors for quick and easy element lookups.; DDJ; IE8; microsoft; windows; The NATO Virtual Silk Highway provides affordable, high-speed Internet access via satellite to the academic communities of the Caucasus and Central Asia.; DDJ; On a Windows Mobile device, applications are typically not closed down, but they stay in the background. Maarten Struys shows you a simple way to preserve battery power inside your own applications.; DDJ; microsoft; power consumption; windows; Windows Mobile Devices; Cadillac is now offering wireless Internet access with its CTS sedan.; DDJ; wireless broadband; By default, Windows Mobile Standard (Smartphone) applications launched from Visual Studio are not accessible on the device/emulator once they are minimized. In this video, Jim Wilson demonstrates two simple techniques to solve the problem.; DDJ; microsoft; smartphone; VIsual Studio; Mike Riley talks with the brass from Everypoint, creators of the NEMO mobile application development platform.; DDJ; Developers; development environments; mobile applications; Symmetric and asymmetric encryption algorithms, the SHA256 hash encryption algorithms, and how to implement in a simple application using Microsoft's Azure Services Platform.; Azure; DDJ; encryption; microsoft; security; windows; T-Mobile has introduced the Sidekick LX, which features enhanced video capability.; DDJ; Mobile Smartphone; Bluetooth 3.0 offers speedier transmission of large amounts of video, music and photos between devices wirelessly.; bluetooth; DDJ; mobile networks; wireless broadband; Cities around the world are battling with stressed transportation networks, so IBM has announced plans for three new smart rail projects in China, Taiwan and The Netherlands.; DDJ; ibm; ILOG; CASMOBOT is a Nintendo Wii remote controlled slope lawn mower.; DDJ; Denmark; nintendo wii; research; robotics; Project ensures documents, images, video and other Internet-based data growing at over 100 terabytes per month will live on for future generations; data storage; DDJ; history; Intenet; research; Sun Microsystems; Dr. Dobb's talks with Dave McAllister, Director of Standards and Open Source for Adobe, about the Open Screen Project.; adobe; DDJ; Open Screen Project; open source; The Facebook Connect SDK provides the code to let third-party developers embed hooks into their applications so users can connect to their Facebook accounts and exchange information using iPhone apps.; apple; cocoa; DDJ; Facebook; iphone; Mars in Google Earth Updated; DDJ; google; google earth; Google mars; red planet; The Sun Cloud is built on the Sun Open Cloud Platform that leverages the best in world-class open source technologies. The Sun Open Cloud Platform brings together Java, MySQL, OpenSolaris and OpenStorage.; cloud computing; DDJ; java; open solaris; sun; DDJ; High School; Intel; science; ILOG Elixir is a suite of professional user interface controls that gives developers a rich collection of innovative and interactive data display components for Adobe Flex and Adobe Air.; adobe; air; DDJ; elixir; flash; flex; ILOG; The inaugural San Diego Science Festival being held this month is touted as one of the largest multicultural, multigenerational, multidisciplinary celebrations of science ever seen on the West Coast; DDJ; lockheed; News; science; IBM has announced Innov8 version 2, a new version of its serious game that helps students and professionals hone their business and technology skills in a compelling, familiar video game format.; DDJ; ibm; serious games; Swiss Automobile Visionary Frank M. Rinderknecht builds a concept car with adaptive energy concept and iPhone controls.; apple; Concept Car; DDJ; iphone; j; siemens; Two-Year Plan to Focus on 32 Nanometer Manufacturing Technology; 32 nanometer technology; chip; cpu; DDJ; gpu; Intel; manufacturing; Nehalem; Westmere; New version features ocean layer, historical imagery, and more.; DDJ; google; Dr. Dobb's talks with Marty Alchin, author of "Pro Django" about his book and the deep internals of the Django framework.; DDJ; Django; A new content-authoring solution for learning professionals; adobe; DDJ; toolkits; web authoring; In a Second Life setting, Danny Coward discusses Java FX with Dr. Dobb's Jon Erickson.; DDJ; java; JavaFX; sun; The Core i7 processor is the first member of a new family of Nehalem processor designs with new technologies that boost performance on demand.; chip; DDJ; Intel; processors; Dan Diephouse, creator of XFire, a high-performance open-source SOAP framework (which became the Apache CXF project), shares the five common mistakes in SOA governance and insight about the Apache CXF and Mule RESTpack development environments.; apache; Apache CXF; DDJ; mule; open source; soa; soap; Xfire; Adrian Kaehler and Gary Bradski discuss the Open Computer Vision Library (sourceforge.net/projects/opencvlibrary/) and their book "Learning OpenCV".; DDJ; Open Computer Vision Library; OpenCV; In the first part of this two-part interview, Stephen Wolfram reflects on the 20-year anniversary of Wolfram Research.; DDJ; Mathematica; Mathematics; science; In the second part of this two-part interview, Stephen Wolfram discusses his book "A New Kind of Science."; DDJ; Mathematica; Mathematics; science; Nick Hodges talks about Delphi 2009, a RAD tool for Windows, and Delphi Prism, a database engine for Windows, Mac OS X, and Linux.; DDJ; delphi; RAD; windows; Dr. Dobb's talks with Tony Lombardo, lead Technical Evangelist at Infragistics, about all new UI tools for Windows and .NET.; .net; DDJ; silverlight; ui; windows; wpf; Dr. Dobb's talks with Eric Schulz about his International Mathematica User's Conference 2008 presentation on the Mathematica Essentials Palette and the future digital educational material; DDJ; Mathematica; Mathematics; Dr. Dobb's talks with ActiveState's Trent Mick about the recently released Komodo IDE 5.0.; DDJ; ide; open source; Dr. Dobb's talks with Continuity Logic's Kris Carlson about "Why We Die: Simulation of the Evolution of Senescence" and why he programs with Mathematica's functional programming language.; DDJ; functional programming; Mathematica; simulation; Ericsson collaborates with Intel; DDJ; ericsson; Intel; Mobile technology; Dr. Dobb's talks with Schoeller Porter about the grid and cloud versions of Mathematica; clouds; DDJ; Grid; Mathematica; Dr Dobb's interviews Yehuda Katz, maintainer of the Merb project, about the advantages this highly optimized Ruby on Rails alternative offers to web application developers.; DDJ; Ruby on Rails; Dr. Dobb's talks with Thomas Roman, Professor of Mathematics at Central Connecticut State University, about "Mathematica Visualization in a Theoretical Physics Problem - Negative Energy in an Unusual Quantum State."; DDJ; Mathematica; physics; quantum; science; The Forbidden City: Beyond Space & Time is a fully immersive, three-dimensional virtual world that recreates a visceral sense of space and time.; Blade Server; China; DDJ; ibm; linux; mac; online; virtual world; windows; Dr. Dobb's interviews open source luminary Miguel de Icaza about his latest milestone of achieving Microsoft .NET 2.0 Framework compatibility with the Mono Project .; DDJ; Dr. Dobb/s interviews Paul Kimmel, author of "LINQ Unleashed for C#", about Microsoft's new query technology that lets developers poll any information from any data source regardless of location or structure. I; C#; DDJ; Dr. Dobb's; LINQ; microsoft; It takes a supercomputer to build a super car. ; DDJ; HPC; simulation; Dr. Dobb's shows how to install and execute cross-platform scripting languages on the Windows Mobile platform. In this installment, Mike Riley examines Perl for Windows Mobile devices.; DDJ; mobile devices; perl; windows; Dr. Dobb's shows how to install and execute cross-platform scripting languages on the Windows Mobile platform. In this installment, Mike Riley examines Python CE which is optimized for Windows Mobile devices.; DDJ; mobile devices; python; windows; Dr. Dobb's shows how to install and execute cross-platform scripting languages on the Windows Mobile platform. In this installment, Mike Riley examines Ruby for Windows Mobile devices.; DDJ; mobile devices; ruby; windows; Young participants at ITU TELECOM ASIA 2008 in Bangkok, Thailand received free laptops as part of ITU’s initiative to promote affordable devices to increase access to information and communication technologies.; communication; DDJ; itu; Currently technical strategist to Microsoft's Chief Software Architect, Rebecca Norlander has had a tremendous impact on Excel, Internet Explorer, Windows XP SP2, and Windows Vista Security. ; DDJ; microsoft; Contributing authors to the book "Beautiful Code" got together at Dr. Dobb's SD West Conference in March, 2008. Part 1 of 3.; DDJ; programming; software development; Contributing authors to the book "Beautiful Code" got together at Dr. Dobb's SD West Conference in March, 2008. Part 2 of 3.; DDJ; programming; software development; Contributing authors to the book "Beautiful Code" got together at Dr. Dobb's SD West Conference in March, 2008. Part 3 of 3.; DDJ; programming; software development; Anders Hejlsberg discusses C#, Turbo Pascal, and what it means to design a programming language. ; C#; DDJ; microsoft; Turbo Pascal; Solar powered laptops given to youths at ITU Asia 2008.; DDJ; News; telecommunications; IBM breakthrough stands to impact future direction of information technology.; DDJ; Mike Riley spoke to ActiveState's Jeff Hobbes about the new features in Tcl Dev Kit and Perl Dev Kit including the code coverage and hot-spot analysis tool and Mac OSX support.; DDJ; Tim O'Reilly addressed the OSCON convention in his Wednesday keynote titled "Degrees of Freedom, Open Source in the Wed 2.0 Era.; DDJ;