Technetra

Archive for April, 2005

Snappier Web Applications with XMLHttpRequest

Wednesday, April 27th, 2005

As web applications take on roles traditionally served by pure desktop applications, creating interactive user interfaces with the “real-time” feel of a customary desktop, is a challenge facing UI developers today. Unlike desktop application interfaces, which are tightly connected to the application, web application interfaces communicate with the user via HTTP, a stateless protocol. Normally, any update to a web application interface, after it has been downloaded to the client, requires a full request-response cycle back to the server. In this article, we will explore a solution to this problem using JavaScript and the XMLHttpRequest object.

XMLHttpRequest is not brand new technology, however, it recently has been revived through excellent implementations like Google Mail and Google Suggest. These new services show us the power of the browser as a cross-platform development environment. Furthermore, the combination of client-side callbacks with DHTML and JavaScript reduces the need for specialized Java Applets and or ActiveX controls.

What is XMLHttpRequest?

The XMLHttpRequest object was first implemented by Microsoft in Internet Explorer 5 for Windows as an ActiveX object. Subsequently, developers on the Mozilla project and Apple’s Safari browser implemented a compatible native object within their respective browsers, starting with Mozilla 1.0 and Safari 1.2.

The XMLHttpRequest object enables JavaScript functions to exchange HTTP transactions with a remote server completely in the background. Besides the visual benefit of not reloading pages between requests, using XMLHttpRequest also results in an overall reduction in bandwidth needed between client and server, as only information being updated is requested from the server.

Several web clients do not provide complete support for XMLHttpRequest. Graphical web clients lacking support include Opera and Internet Explorer on Macintosh. In addition, most terminal-based clients (e.g., lynx, links, w3m) do not support JavaScript at all. Developers targeting their web applications for these clients should provide alternate pages.

An example: ZIP code reverse-lookup

Now let’s create a simple web application using JavaScript and the XMLHttpRequest object to retrieve the name of the post office associated with a zip code. First, the user picks a zip code from a dropdown list (<select> element). Next, we use the XMLHttpRequest object to query a simple PHP script on the server. The PHP script matches the zip code to a post office and returns its name. Finally, we display this name back to the user. All this without any page reloads.

Our web application consists of two files: an HTML page and a dynamic page written as a simple PHP script. These files must be placed under the appropriate document root of your web server. The HTML page consists of a simple HTML form and three JavaScript functions. The PHP script responds to JavaScript requests, initiated by the client’s browser, that have been embedded in the HTML page. The major components of our example are described below.

  • Components of File: xmlhttpdemo.html
    • HTML form — Standard HTML <form> which contains the drop-down list (<select id="zip">) of zip codes.
    • makeHttpObject() — JavaScript function that instantiates the XMLHttpRequest object.
    • getHttpResponse() — JavaScript function that receives the HTTP response from the server-side script. This response contains the results of the zip code reverse-lookup.
    • getPoName(ev) — JavaScript function that sends the HTTP request, containing the selected zip code, to the server-side PHP script. This function is triggered by the onChange event of the zip code (<select id="zip" onChange="getPoName(event)">) list in the HTML form.
  • Components of File: doLookup.php — Server-side PHP script
    • PHP script that executes on the server, and is invoked via the XMLHttpRequest object.
    • The single parameter ‘zip’, provided via the URL query string, specifies the zip code to look up. (doLookup.php?zip=110014)
    • If the zip code is matched successfully, the return value is a string containing the post office name, otherwise an error message is returned.

1. HTML form

The first and easiest part of our web application is the HTML form which presents a drop-down list of zip codes for the user to pick from. We assign the getPoName() function (which we’ll define later) as the onChange event handler of the zip code drop-down list. This function is triggered anytime the user picks a value from the list. The <div id="post_office"> tag below the form is where the name of the post office will be displayed once it is retrieved from the server-side script.

<form id="demo">
  <label for="zip">Select ZIP code:</label>
  <select id="zip" name="zip" size="1" onChange="getPoName(event)">
    <option value="110001">110001</option>
    <option value="110003">110003</option>
    <option value="110005">110005</option>
    <option value="110006">110006</option>
    <option value="110007">110007</option>
    <option value="110008">110008</option>
    <option value="110009">110009</option>
    <option value="110010">110010</option>
    <option value="110011">110011</option>
    <option value="110013">110013</option>
    <option value="110014">110014</option>
    <option value="110015">110015</option>
    <option value="220002">220002</option> <!-- an invalid entry -->
  </select>
</form>
<div id="post_office">
  <span></span>
</div>

2. JavaScript function to create XMLHttpRequest object

As I mentioned earlier the XMLHttpRequest object was created by Microsoft and then later implemented in Mozilla and Safari. Therefore each environment instantiates this object differently, as seen in the makeHttpObject() function. Internet Explorer uses an ActiveX object,var httpObj = new ActiveXObject("Microsoft.XMLHTTP"); whereas both Mozilla and Safari use a native object, var httpObj = new XMLHttpRequest();

Due to these differences it is best to write a function that hides the specific kind of object that must be instantiated. Within the function, makeHttpObject(), the correct object can be created by checking for Microsoft’s JScript version level and then checking which object (ActiveX or native) can be instantiated.

<script language="javascript" type="text/javascript">
function makeHttpObject() {
    var xmlHttpObj;

    // branch for Activex version (Microsoft IE)
    /*@cc_on
    @if (@_jscript_version >= 5)
    try {
        xmlHttpObj = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            xmlHttpObj = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {
            xmlHttpObj = false;
        }
    }
    @else
         xmlHttpObj = false;
    @end @*/
    // branch for native XMLHttpRequest object (Mozilla & Safari)
    if (!xmlHttpObj && typeof XMLHttpRequest != 'undefined') {
        try {
            xmlHttpObj = new XMLHttpRequest();
        } catch (e) {
            xmlHttpObj = false;
        }
    }
    return xmlHttpObj;
}

var httpObj = makeHttpObject(); // create the HTTP Object
</script>

3. JavaScript function to handle HTTP response

Next, we define the function getHttpResponse(), which will handle the HTTP response from the server. We assign this function as the onreadystatechange event handler of the XMLHttpRequest object. When called, it examines two properties of the XMLHttpRequest object. First, we check the readyState property. Numeric codes (0=uninitialized, 1=loading, 2=loaded, 3=interactive, 4=complete) represent the status of the object. If the value is ‘4‘, we can proceed further. Next, we check if the status property. This is the numeric HTTP status code returned by the server. If the value is ‘200‘, which represents ‘OK‘, our request was successful. Now we can access the actual response via the responseText property of the XMLHttpRequest object, and insert this value between the <div id="post_office"></div> tags using the Document Object Model (DOM). If you know that the response will be XML, use the responseXML property instead. It represents the XML response as a document node object, which you can parse using the DOM.

<script language="javascript" type="text/javascript">
function getHttpResponse() {
    if (httpObj.readyState == 4) {
        if (httpObj.status == 200) {
            content = httpObj.responseText;
            div = document.getElementById("post_office");
            div.innerHTML = "";
            // insert HTML content into "post_office" <div>
            div.innerHTML = content;
        } else {
            alert("There was a problem with the response" + httpObj.statusText);
        }
    }
}
</script>

4. JavaScript function to handle HTTP request

Now we define the onChange event handler function for the zip code drop-down list and the URL of the server-side PHP script. In order to comply with the standard JavaScript security model, we need to be careful when defining the server-side script URL, as the domain must be the same as the one that serves up the HTML page containing the XMLHttpRequest object script. Unfortunately, this means client-side scripts cannot fetch information from other sources. Everything must come from the same domain.

Inside the getPoName() function, we assign the onreadystatechange event handler (getHttpResponse), that we mentioned before, and submit the GET request for our zip code lookup. The open() method requires two parameters. The first parameter (method) specifies the HTTP method we wish to use for the request. For this parameter, use ‘GET‘ for requests that retrieve data, and use ‘POST‘ for requests that send data. The second parameter (URL) specifies a complete or relative URL for the connection. The third, optional but important, parameter (asyncFlag) specifies whether the request should be handled asynchronously. By default, processing occurs asynchronously, right after the send() method is invoked, without waiting for a response. If set to false, processing waits for a response from the server, which may cause your script to hang if a network or server problem occurs. In general, it is best to handle requests asynchronously and handle responses based on the onreadystatechange event of the request object.

<script language="javascript" type="text/javascript">
var url = "doLookup.php?zip="; // URL for server-side PHP script
function getPoName(ev) {
    ev = (ev) ? ev : ((window.event) ? window.event : null);
    if (ev) {
        var el = (ev.target) ? ev.target : ((ev.srcElement) ? ev.srcElement : null);
        if (el) {
            if (el.selectedIndex > 0) {
                httpObj.open("GET", url + el.options[el.selectedIndex].value, true);
                httpObj.onreadystatechange = getHttpResponse;
                httpObj.send(null);
            }
        }
    }
}
</script>

5. JavaScript function to handle HTTP

Finally, we create the PHP file doLookup.php which maps the zip code received in the URL query string to a post office name using a hash table. If the zip code is found, a string value containing the post office name is returned. Otherwise a simple error message is returned.

<?php
// doLookup.php: maps ZIP code in $_GET['zip'] to name of post office
$post_offices = array('110001'=>'New Delhi G.P.O',
                      '110003'=>'Lodhi Road G.P.O',
                      '110005'=>'Karol Bagh',
                      '110006'=>'Delhi G.P.O',
                      '110007'=>'Malkaganj',
                      '110008'=>'Paschim Nagar',
                      '110009'=>'Guru Tejh Bahadur Nagar',
                      '110010'=>'Delhi Cantt.',
                      '110011'=>'D.H.Q',
                      '110013'=>'Sarojini Nagar G.P.O',
                      '110014'=>'Jangpura',
                      '110015'=>'Ramesh Nagar G.P.O');

if (isset($post_offices[$_GET['zip']])
    echo "Post office: ", $post_offices[$_GET['zip']];
else
    echo "Sorry, invalid zip code.";
?>
Zip code lookup (lookup results shown in green)

Zip code lookup (lookup results shown in green)

Running the example

Launching our web application in the browser (http://url_of_your_web_server/xmlhttpdemo.html) should show something like the Figure A below. Once a zip code is selected from the drop-down list, you should see something like Figure B. Try selecting the last item (220002) from the zip code list, an error message should appear instead of the post office name.

Conclusion

We have seen that using the XMLHttpRequest object to retrieve information from remote sources is pretty straight forward. In appropriate Web applications, the XMLHttpRequest model can dramatically reduce delays associated with the traditional request/response cycle of full page-based transactions. Although the example I used was quite simple, I hope it encourages you to think about more innovative ways to utilize XMLHttpRequest in your next project.

Tamil Language Open Source Tools & Apps released in Chennai

Friday, April 15th, 2005

On the auspicious occasion of the Tamil New Year, MCIT showed off its latest efforts to help close India’s digital divide. The packed release event was hosted by Minister for Communications and Information Technology, Mr. Dayanidhi Maran. Other dignitaries included Mr. Brijesh Kumar, IT Secretary, MCIT, Chief Guest Dr. Kalaignar M. Karunanidhi, Prof. N. Balakrishnan, IISc Bangalore, Mr. S Ramakrishnan, Director General, C-DAC, Robert Adkins, Co-Founder, Technetra, N. Ram Editor-in-Charge, The Hindu and others.

A complete bundle of open source computer software was released in the Tamil language. Hundreds of computer fonts and tools in Tamil were given away amid great fanfare and political and media excitement.

These Tamil-localized tools and applications are designed to spread the benefits of information technology and to empower a broader infrastructure for automation, communications, and education in India. The Tamil software release is part of the Indian Language Technologies Launch Program.

Mr. S Ramakrishnan, Director General of the Centre for Development of Advanced Computing (C-DAC), presented the details of the software: True Type fonts, Unicode compliant Open Type fonts, a FireFox browser, Bharateeya OpenOffice.org, an e-mail processor, a Java-based editor with spell checker, and an optical character recognition tool. The fonts and many of the tools represented newly liberated software comprising years of research and development from C-DAC, India’s leading government language lab. Many of the tools and applications are cross-platform and can be run on either Microsoft Windows or on Linux.

The Tamil open source software is being distributed on a compact disc and is also available on-line from website www.ildc.in. To spread the buzz, MCIT plans to distribute three million copies of the CD free of cost through libraries and schools.

This event represented the first official release of tools and applications in a much larger campaign to provide localized computer software for all 22 of India’s official languages. The next release will be targeted for Hindi speaking users.

At the same event, Microsoft announced a Tamil version of their proprietary Office 2003 which will be priced at a discount of 30% off the English edition. But, to the Penguin at least, a 30% discount still seemed a lot more expensive than free.

Related Links

Hot Air in Hannover

Thursday, April 14th, 2005

March 2005, Hannover, Germany, CeBIT

Dedication to OSS at CeBIT was an affirmation of Linux and Open Source but at the same time the world’s largest IT fair was a missed opportunity.

It should have been a paradigm shift. Government, industry and community working in concert. Not all the government, not all the industry and not all the community, of course. But enough to reach a certain critical mass.

The potential was there to clinch the growing spirit of collaboration among parties who are often disorganized or are even adversaries.

A week of OSS at CeBIT promised progress towards the high goal of collaboration among Germany’s various OSS players. In Hall 6, the Linux Park drew crowds of delegates and customers from among the 500,000 visitors to the trade fair. In Hall 9, the German Ministry set up a pavilion for OSS. There they announced the second edition of their provocative OSS Migration Guide and introduced a new competence center for OSS. The usual OSS vendors were all there too.

Patronage for OSS by the German Federal Ministry of the Interior was palpable. Their support is both practical and a matter of policy. Choice, security, open standards, development of local competence and control, increased morale of IT staff, stability, independence, cost-savings, fostering competition, stimulation of the market and innovation. These are the motivations expressed by the mandarins of the German Ministry. Interestingly, shortly after CeBIT, distribution of the Ministry’s Migration Guide was suddenly discontinued because reportedly one of the contributors to the document was irritated. Their guide is glowingly supportive of open source as well as explicitly critical of Microsoft’s disregard for data format standards though Microsoft was one of the contributors to the report. Fortunately, the report is expected to be republished soon with no major changes. Nonetheless, it’s ability to irritate is a tribute to the power of the document and its impact on the German IT ecosystem.

The OSS community also showed up at Hannover big time. Klaus Knopper, in association with LinuxTag, introduced Knoppix 3.8 and precipitated a near riot of excitement at the Linux Park.

Missing in Action

But where was the innovation and sense of excitement from the commercial corner? For most vendors, it seemed disappointedly like business as usual. Sure, Novell announced its upcoming SUSE Linux 9.3, targeting both newbies and advanced users. And Red Hat, IBM, CA, all just showed off their standard Linux fare.

In Germany, there are many activists dedicated to changing the rules of IT engagement, especially as information technology attempts to meet the needs of the local industry and infrastructure. But, here at CeBIT, as at many commercial venues, the missing-in-action were unfortunately the predominantly conservative commercial interests. Even Germany’s traditional commercial OSS leader, SUSE, has been disparaged because it is now in the estate of the American company Novell. Some note that certain government organizations are jumping ship to embrace a “more open” Debian since SUSE no longer has the advantage of being a native progeny. Other commercial players, like IBM, are potent forces for OSS, but often prefer to work behind the scenes.

These days, as conferences and expos all across the world fully commercialize, they seem to be merging into a homogeneous blur. Jon “Maddog” Hall has been bottled and shipped to all ports of call. It’s the kind of globalization and commercialization from which OSS cannot escape.

In the end, we have to wonder where’s the original excitement? Where’s the Penguin? Is it only an empty gas-filled balloon?

What Should Have Been

What was needed in Hannover was for all the players, commercial and non-commercial, to have tried their best to seize the day. Still at the beginning of a revolution, commercial interests must realize they can truly grow the OSS pie for wider and deeper business opportunities. Government, as in the case of the German Federal Ministry, is often ready to jump on board and to help with both policy and practice. The OSS community, of course, is always eager to push and pull. Progress can only be made by everyone pitching in. It’s the difference between a Penguin full of hot air and a living, vital Linux.

Interview: Scott Handy, VP, Worldwide Linux Strategy, IBM

Tuesday, April 12th, 2005

As a key executive in Big Blue’s Linux business, Scott Handy, Vice President of Worldwide Linux Strategy at IBM, has been working to convince the world that open source is a viable market reality where open technologies like Linux and Apache are already doing a great business. Scott has played a pioneering role in establishing the market for IBM’s products on Linux. These include DB2, WebSphere, Lotus and Tivoli. Scott’s latest mantra is taking IBM’s open source initiative to emerging countries like Brazil, Russia, India, China, South Korea (the so-called BRICK countries). Each country has a specific agenda, but the primary model is economic development through the collaboration of different stakeholders like the government and academics. Recent step in this effort include the investments by IBM to help fund a Linux technology center in Brazil as well as to set up an Open Source Software Resource Center (OSSRC) in India.

Recently, we caught up with Scott when he visited India. The following is an excerpt of the discussion Scott had with the editor of LFY, Alolita Sharma and Robert Adkins of Technetra. Scott shared details about IBM’s goals and his insights about a collaborative economic development model for India and South Asia.

Q: How do you find India as market place for open source?

SH: We came to South Asia with a very specific model that is built around economic development, especially here in India. You may think the country has only users of open source technology and very few developers. But I see the whole thing very differently. I see India as a country, where big players such as government and academics are using open source as a model for economic growth which is the fundamental for building a country’s infrastructure and that perfectly matches our objectives.

Q: What purpose would such a strategy serve?

SH: It would help pull in finances and other resources, which can back activities such as market research and educational ventures, and facilitate documentation of technical resources for solving a wide range of issues. There are a number of problems that are inhibiting the whole economic pie from getting bigger. And these problems are common to all the players. We are looking for partners who can come up with some ideas and would join this initiative for a common cause. This initiative would not be owned by any specific vendor. In fact it can’t be just one vendor, it has to be the government and customers, amongst others. It has to be the whole pool of the Linux community. We did talk to some of the groups that we hope will join in; so far everybody would like to join.

Q: Why have you chosen this collaborative economic development model for India?

SH: What I find here is what I find in most places. There is a very strong desire to push the open agenda for varied reasons. In India, I think the reason is economic development. There can be no better platform to build a program for economic development than Linux and open standards for several good reasons. One is that the operating system is growing four times faster than the overall world IT market. So, why not choose a platform that has a significantly higher growth rate? In fact Linux, over here, is growing seven times faster than the overall infrastructure market worldwide. So this phenomenal growth certainly works, especially when you are trying to attract other companies to do business here or implement additional business. Our emphasis in India concentrates on the government and the academics — both of whom are involved in economic development. For instance, if we do a technical project around Linux with university students, in time they will graduate and become part of the labor force, and there will be more companies who will try to extract this growth. So there will be economic development as well. And I think just about everything in India has a touch of community approach. This is why I am going to collaborate on a set of issues that are common to all. The aim really is to form a kind of collaborative communication and have people participate in it. We want to show how the power of open source can be used for developmental purposes as well as for business.

Q: What factors did you consider when looking for a market in South Asia?

SH: While considering different parameters for a viable market, we looked at the relevant population, which is considerably high in this region; the GDP growth, which is again pretty high over here. We also considered a bunch of other statistics in each country and the fundamental differences between them. For instance, in China, while you have pretty strong endorsement of the Linux/open source movement by the government, you also have an extremely high piracy rate. This region also has a very strong penetration of Microsoft Windows — that’s the most pressing challenge. There is a more visible tension between the use of proprietary and open source software in this region. So we are coming up with a relatively balanced strategy and have come up with solutions supporting all kinds of environments. This specially takes care of the government sector where the need of computing varies from project to project.

Q: Can you share with us your current activities in China?

SH: The government is very interested in moving onto e-Governance and considers Linux and open source as the best facilitator for this. So we have several interesting things going on. We are involved in some central government projects and government backed educational projects. We are also working with the Government of Shanghai to implement Linux. So, it is a situation where we have a lot of government support and collaboration.

Q: Is there any difference between India and China with regard to endorsement of open standards for government backed projects?

SH: In my view, I see them as more similar than different. In fact in both the cases, the endorsement of open source is mainly because it is the most cost effective and flexible solution. In fact that is a worldwide phenomenon. I feel, there is equal enthusiasm in India for the right technology.

Q: Most of the customers who have used Windows are reluctant to shift into any other platform. What is your take on this?

SH: I view this differently, where the main issue is related to a user being vocal. There are many customers who are installing and preferring Linux, but they will not come out and say we endorse Linux over other operating systems because such a statement is not really needed by the particular project. We are not looking for stakeholders who would say “I declare A better then B”. We are seeking balanced customers in sectors such areas as education and government, amongst others. We want to deploy Linux for incremental opportunities.

Q: What is the IBM Linux strategy for 2005-2006?

SH: The Linux market is so large that the strategy here is quite complex. First and foremost, we would look at Linux as a general infrastructure platform, because it has a tremendous growth rate. In the near future we will be looking at three segments.

First is the consolidation of our sever market which has grown phenomenally into a number as big as $US 1.15 billion with a 20% to 30% growth rate. We have with us some of the high-end players like SAP who support Linux and open source software very strongly. They have 3,800 production installations on Linux. Now this is very strong number. They are showing they can generate significant revenue through Linux. We will further strengthen our relationship with the IBM business partners. As of today we have around 6,300 partners worldwide. They are using and deploying Linux in different segments, much beyond just general infrastructure.

We also see significant growth in, not only the Linux on Intel, but also in Linux on power technology. This is another indicator that Linux is way beyond the general infrastructure. Over 50% of the clustering technology solutions are going with Linux. Just to give you an example, we also have a power-based Linux blade.

Our final and major focus will be those emerging countries where Linux is more than just an operating system. It is a foundation for economic development. This will be done through an open collaborative effort where we get the government, academics and the open source community as a whole to participate for a common cause.

Eclipse Goes Big

Wednesday, April 6th, 2005

Eclipse has become one of the top open source projects in the world. In November 2001, banking on its success with Apache, IBM decided to further invest in Linux and donated $40 million of code to create this project. This open source project was intended to “eclipse” Microsoft’s VisualStudio. Today, Eclipse has not only eclipsed but passed many other commercial products with flying colors. It has created big opportunities in an emerging market for the developer community, services companies and user organizations.

“Eclipse has brought together IT competitors into a partnership ecosystem that’s a win-win for everyone.”

Using a collaboration project model and providing support with money and people to bring together competitors into a partnership ecosystem, IBM along with 9 initial members (Borland, WebGain, Red Hat, SUSE and others) decided to work as a consortium to drive marketing while allowing the open source community to control development. This was an revolutionary move for a company like IBM. As Slashdot put it, “Suddenly, IBM is cool.”

The Eclipse Foundation was formalized in 2004. It was further strengthened when BEA, CA, and Sybase recently joined as Strategic Developers and Board Members of the Eclipse Foundation –- “standing on the shoulders of giants” in the form of HP, IBM, Intel, MontaVista, QNX, SAP, Serena, TogetherSoft — to lead various Eclipse projects and support 8 community developers each.

Eclipse supports a substantial range of the software development lifecycle –- modeling, coding, testing, benchmarking for client applications and embedded applications. It runs on Linux, other Unix flavors, and Windows. As an IDE, it provides cross-platform, interoperable integration tools and frameworks to support programming languages like Java, C/C++, Python, PHP, Perl, and modeling languages like UML, and more.

EclipseCon and ESC

Two recent events in the Valley have highlighted the momentum of Eclipse. The first event, EclipseCon, the annual developer conference for Eclipse, was held in early March 2005 in Burlingame. It brought together top Eclipse developers, organizations and vendors to discuss key issues facing the community and future developments. The conference reinforced the energy of the Eclipse community in the keynote by Lee Nackman, CTO, IBM Rational who explained the project’s history, open license, model of innovative meritocracy and trail blazing success.

At the same time, the Embedded Systems Conference (ESC) 2005, held right after EclipseCon, in San Francisco demonstrated the reach of Eclipse. Engineers, technical professionals, vendors, evaluators and customers witnessed the latest and greatest in embedded hardware, software platforms and tools. Every vendor showing Linux was using the Eclipse IDE to demonstrate development and debugging tools for embedded applications. The open nature of Eclipse represents practically a paradigm shift for traditional embedded vendors who have adopted this powerful platform to integrate their toolkits, development and debugging environments. At the show, several vendors announced Eclipse-based open source tools for embedded application developers allowing development, compilation and debugging of code for proprietary environments (such as VxWorks) as well as open source environments (such as Linux).

Why does this matter?

Whoever wins the hearts and minds of the developers wins the market in the long run. It’s the network of ISVs that builds value into the applications everyone uses. While Eclipse is not an end-user application, it provides a star cross-platform environment to the developers that build end-user applications and that do end-user integration. And everyone gains something. IBM gains by seeding a new development environment, creating competition and growing the market for products and advanced services. The community gains by having a hit OSS development platform, ISVs gain new markets for products. Users gain by getting best-of-breed, cross-platform, open solutions within a healthy, vibrant IT ecosystem. A win-win for all!

© 2000-2009 Technetra. All rights reserved. Contact | Terms of Use

WordPress