Saturday Jan 24, 2009


Along with several others working on NetBeans, my position has been affected by Sun's layoff. 


If anyone wants to keep in touch, look for me on linkedin


It's been fun working on NetBeans, Java Studio Creator and with the NetBeans community.


Thursday Oct 09, 2008

Don't mess with scientists


http://news.yahoo.com/s/ynews/ynews_pl78

Friday Oct 03, 2008

In these tough economic times, people are willing to do just about anything for a buck ...

http://www.sfgate.com/cgi-bin/article.cgi?f=/n/a/2008/10/02/national/a141240D21.DTL&tsp=1

Friday Sep 07, 2007

Well, it's been awhile.  I've been busy implementing new database features for the Visual Web framework for NetBeans 6.0 .  We're getting close to releasing a Beta.  There might be another Beta release to try to fix some bugs found by Customers.  In this entry (an update to Data sources in Visual Web Pack)I'll discuss the feature to help recover or resolve database connections.   Since database connection references are stored in the userdir, if a project is moved from one system to another or a user deletes their userdir the references are also deleted.  For Visual Web projects that use databases, connections must be available and known to NetBeans.  The feature described below helps a user restore database connection references.

 
Now that integration of database functionality has been more tightly integrated since 5.5, I had to re-do this feature.  There is a little bit of documentation in inline help for 5.5.  Hopefully this entry explains this feature better.

A visualweb project that contains database rowset bindings has an associated datasource for each rowset bundled in the project.
If a project is moved to another machine or the userdir was deleted (drivers and connections are lost) then at design-time, bindings to the
rowsets will fail such that when a visualweb page is opened, a Component Error window opens instead of the expected page design.
Since visualweb requires live connections to the database at design-time, each project data source must have a corresponding connection, this Resolve Broken Data Sources will help the user restore the driver and or connection.

Also, if a project is migrated from Java Studio Creator 2 then
the project datasources are restored within the project (the driver and connection are migrated when migrating the userdir settings from Creator 2)

In Creator 2, users could create data sources using the Data Sources node in the Server Navigator. Also, there was a facility to import/export datasources used by the IDE (by saving datasources used a config file) when migrating projects, whether from release to release or machine to machine.

 
In VWP 5.5, the Server Navigator was removed for the sake of redundancy with the Services window. The Services window is where Application Servers, Database connections and EJB clients are registered.

 
Feature summary

This feature's purpose is to detect when database connections, needed by a visualweb database project, have not been registered in the Services pane and to badge the Data Source References node, add an action to the Data Source References node and add a dialog to help guide a user to register the database connections needed.
Once the connections have been registered, the datasources can be registered in the project and server specific info added to the project (setup folder with connection pool configurations).

This feature will also be used by the  User settings migration feature</a> for 6.0

This feature is similar to the 5.5. There will be a new Services palette, but only database connections will be listed, not data sources. Data sources will have to be resolved project by project, same as 5.5. See <a href="http://www.netbeans.org/kb/55/vwp-migration.html">

Resolving a Data Source </a>Migrating a project can be defined as :

  • opening a Creator 2 or VWP 5.5 project
  • opening a VW 6 project on another computer which doesn't have the equivalent database driver and connections registered

This feature will perform the following:

  1. Listen for all projects opened in the IDE
  2. For each project, check if the project contains any datasources. If the project contains a datasource, retrieve the data sources from the project and check to see if connections for each data source have been registered.
  3. Check for an existing connection. If connection is missing then badge the Data Source Reference(s) node, post an Alert dialog and add a Resolve Data Source(s) action
  4. If a matching connection has been registered and the project's data sources have not been updated then the project's datasources will be automatically updated and a message is printed in the Output window, "Data Sources have been resolved"
  5. If connections and/or driver needed by the project have not been registered, the Project and Data Source References node will be badged and a Resolve Data Source(s) action will be added. Choosing this action will open a Resolve Data Source(s) dialog that lists the missing datasources.  When the user selects the action on the Project node, Resolve Data Source(s) clicks to Resolve then the Add Connection dialog opens where the user can register a driver and connection for the data source

Once the datasources have been resolved, remove the Resolve Data Source(s) context menu and print a message to the Output window to inform the user that the Data Sources have been resolved

More info
There will be child node under Data Source References, for each data source in the project, (see Travel child node in (figure 1) . The child data source node will not have an action.

Only those data sources which don't have a corresponding Database Connection will be listed in the Resolve Data Source(s) dialog. If a child data source node has a corresponding connection then it won't be badged.

For example, if the project has another data source, named Foo and there is a database connection for Foo in the Services tab then Foo will appear as a child of the Data Source References node, but it won't have a badge (red square in top right corner of the image). Also, Foo will not be listed in the Resolve Data Source(s) dialog.

Use cases

Use Case A. User has a project developed in Java Studio Creator 2 or VWP 5.5 that uses rowsets - pages with components bound to rowsets and wants to import this project in NetBeans 5.5.

Use Case B. User has developed a new Visual Web application that contains a rowsets.  If another user wants to use this project or the developer has removed the userdir then the data sources will not be found

Here's the steps required for both use cases to resolve missing data connections:

  1. Open the project
  2. If the project has data sources for which there is no corresponding database connection in the Runtime window, the Data Source References node icon will be badged (visible after expanding the project node). An alert dialog opens to inform the user that the project has errors and provides instructions on how to resolve the data source problem.


    (Figure 1)

  3. A context menuitem is added to the Project node, Resolve Database Problem. Selecting this context menuitem will open a dialog listing the missing data sources (for which there is no corresponding Database connection)
    Note: Figure 2 shows the action on the Data Source References node, where the action, Resolve Database Problem, is on the Project's node


    (figure 2)


    (figure 3)

  4. To resolve a database connection to another database server, select the datasource in the Resolve Datasource(s) dialog then click the Add Database Connection button and the Add Database Connection dialog will open.

    Figure 4
    (figure 4)

  5. If the driver has not been added then click the dropdown and choose New Driver, otherwise choose the appropriate driver.
  6. Fill in all fields. If any field is entered incorrectly, a connection error dialog will open
    # After clicking OK, a new JDBC Driver node is added to the Runtime|Databases|Drivers node (if it had not been previously registered)and a new connection is added to the Runtime|Databases|Connections node
    # If the page containing the components bound to rowset(s) is open, refreshing the page will restore the connections (or clicking the Continue button in the Component Error window)
  7. For databases used besides Java DB then JDBC drivers the user is required to manually copy the drivers to the Glassfish lib directory in order to execute the application
  8. If Glassfish is the target server, then this feature will add the server specific files to the project, if needed.

    As a result, the project's pages that have components that bind to rowsets will rebind successfully, automagically and the project can be deployed successfully.

    Gotchas

    If a user cleans up the App Server by deleting domain1 or removing connections then by choosing to Resolve Data Sources, the connection resources are added to the project so it can be deployed successfully.

Parameters for connecting to the Travel database

  • User ID = travel
  • Password = travel
  • Database URL = jdbc:derby://localhost:1527/travel 

Wednesday Nov 08, 2006

Lots of changes this year, for me and for Sun tools.
We've release a Technology Preview of the Visual Web Pack that is plugged into NetBeans 5.5

For me, see the before and after pictures, below

1) Sun Java Studio Creator 2 -> NetBeans 5.5 Visual Web Pack TP

2) Quality Assurance Engineer -> Database Engineer on NetBeans 5.5 Visual Web Pack

no more Dashboard from me :-)

Exciting stuff the product change in 1) above, now no more questions ( I hope ) about what's the difference between NetBeans and Creator !
Also no more filing showstopper bugs from me and now I have clearance to enter the Rave room

I'm currently responsible for the Sample Database creation, Data Sources, Importing Creator 2 projects, JPA and sharing responsibilties
for other database features.

Here's the before (QA Engineer) and after (Database Developer) pictures ;-)





Before
Before






Thanks to a couple of the Creator Divas, they made a cape and mask, when I used to be Dashboy
Before






After
After



Friday Sep 01, 2006

As recently announced, Sun now allows Customers to rate Sun's products.

Ratings now include Sun Java Studio Creator. If you have some experience with
using Creator, then please write a review :-)

But, before you do, please update Creator with the latest Performance patches.
Just last week a patch was made available which fixes performance issues at
designtime. Notice the first ratings were given prior to the Performance patch.

If you haven't tried Creator, please download, try it out and please let us know what you think by writing a review. Thank you!

Wednesday Jun 07, 2006

Coming soon, expert Trainers, Gail and Paul Anderson will be holding a 3 day training on Sun Java Studio Creator in San Francisco, CA.

During JavaOne I proctored their Portlet and Web Services lab which was the best lab of the five labs I proctored. Gail and Paul are the authors of the Java Studio Creator Field Guide

Wednesday May 10, 2006

New article on Apple Computer's site for Mac OS X users. Using Java Studio Creator on Mac OS X.


Hope it's useful for users new to Creator
Comments welcome

Thursday May 04, 2006

Now available - Java Studio Creator Training

During JavaOne - Java University Monday, May 15

"Developing Rich Web Applications Visually using JavaTM technology

Java Studio Creator training is coming to a city near you! Learn to develop visual web applications and portlets in just three days. You'll use the tool's bundled JavaServer Faces components to build applications that access a database, EJB components, and Web services. The course also covers portlet design, internationalizing and localizing applications, and AJAX technology. In the hands-on lab you'll you'll build a multi-tiered e-commerce application."
Registration and more info


Cost



The cost for this special training is $1699 per student, which includes
the lab exercises and an early copy of the Java
Studio Creator Field Guide
.
There are a limited number of seats at each location, and registrations
are accepted on a first-come-first-served basis.




Friday Apr 14, 2006

Although I wasn't involved in the effort to produce these JSF-ied AJAX components, the least I can do is help get
the word out. Not a large palette, but some useful ones:


  • Progress Bar

  • Map Viewer

  • Select Value Text Field

  • Rich Textarea Editor

  • Buy Now Button

  • Rating component

  • Auto-Complete Text Field

To obtain these components, assuming you have installed Sun Java Studio Creator 2.0, connect to the Update Center by choosing the menu Tools->Update Center.

In the Update Center dialog, you'll see both HotFixes and Samples. If you haven't already, I highly recommend to get the patches first, then download the AJAX samples.


Now the installation isn't seamless for Creator 2.0 (will be improved in the near future)


1) In the Palette window, right click on one of the node labels (e.g. Basic, the topmost node)and choose Manage Component Libraries
2) Click the Import... button located at the bottom left pane.
3) Click the Browse button and in the open file dialog, go up a directory then open nb4.1 and samples and complib. Then select ui.complib and click the Open button.


Back in the Import Component Library dialog, I just chose the default settings and clicked OK.


Automagically, two new nodes are added to the Palette at the bottom "BluePrints AJAX Components" and "Blueprints AJAX Support Beans"


For tutorials and articles, check out Cool Samples page


Feel free to leave comments about the components or post a topic on our Forum.


If you're attending JavaOne, check out the JavaOne labs . I'll be helping out with the AJAX lab


Happy Easter !

Thursday Feb 16, 2006

In previous blog entries, I've briefly discussed a Creator 1.0-built Dashboard architecture and showed some screenshots.

Today, I'll discuss the central point of a Dashboard - how to dynamically populate a Table with relevant data. The features of Creator used to develop such a Dashboard are the Table component, Java ArrayList, POJO (plain old Java object), ObjectArrayDataProvider and CachedRowSetDataProvider and a SessionBean.

First I need to determine the type of data to display. For this example, I want to display Criteria description, status text, status color, and the count (against the Criteria). Each data item will represent a column in a Table. Each column will be represented by a POJO, a Java class with fields and accessors, like a struct in C.

To start, create a new Java Class Library project. In Creator, choose File->New Project | General | Java Class Library. Name the project as QualityDashboardData. Next, from the Project Window, create a new Package by selecting "Source Packages" right-click and choose New Package and assign a name. If you so desire, you can create a extended package by separating each package with a '.' (dot) Next, still in the Projects window, expand the new package, and create a new File/Folder then select "Java Classes" - Java Class and give the new Java class a name, say CriteriaBean.

To use the CriteriaBean POJO, create a new Web Application (or Portlet) project. Next, import the Java Class Library. From the Projects window, expand the Web Application project one level, select Library References, right-click and choose Add Project. Navigate to the Java Class Library project path then add.

In your Web Application, again use the Project window, expand Source Packages then select Page1.java, right-click and choose Add Property. Name the property, qcdata and the type of the property will be an array of type CriteriaBean .

Message Bundles
To make modifcation of criteria easier, put the criteria data in property files. To create a new property file, in the same folder as Page1.java, right click on the package and create a new File/Folder | Java Classes - Property file.

Add some properties and value (note, the best way to edit a properties file is to choose the Open menuitem, not Edit):


criteria0=P1/S1-P2/S2 bugs addressed (incl P3/S2s)
criteria1=All Regressions addressed
criteria2=Customer reported bug count
num_criteria=3

If needed, create other property files for additional data , such as to hold SQL queries.

Next, in Page1.java, you'll need to load a properties file:
props.load(getClass().getResourceAsStream("/qualitycriteriadashboardweb/criteria.properties"));


To use the CriteriaBean POJO, you'll need to set the size of the array and instantiate each element. The reason for using an array is that an ObjectArrayDataProvider supports arrays. Each instantiation of an element of the array creates a row, just like a database row. DataProviders treat any data the same,whether the data comes from a JDBC rowset, Enterprise JavaBean or Web Service. Check out the Javadoc for DataProvider.


// ( number of quality criteria ) to track
this.qcdata = new CriteriaBean[cpm.getNumCriteria()];
for (int i =0; i< qcdata.length; i++) {
this.qcdata[i] = new CriteriaBean();
}

Notice the size of the POJO is obtained from the property file above.
Also, you will see a red squiggly line where CriteriaBean is used. To resolve this, right-click on the Page in the Java view and choose Fix Imports.

Next, since there are multiple rows, depending on the number of criteria. Notice in the property file above, the criteria are indexed. The number of criteria must match up for any other data. If you have property files for SQL queries then the number of SQL queries must be the same as the number of criteria. To hold data for multiple rows, hold data per column using ArrayLists.

Basically, retrieve the values from the property files and store in the corresponding ArrayList. For example, for SQL queries which return a count, store the count in an ArrayList named count.
Speaking of SQL queries, here is how to retrieve a count from a query using a CachedRowSetDataProvider. Create a new page, named criteria.jsp and add a Table component and drop a database table rowset onto the page (don't drop the rowset directly on the table). Instead use the Table layout customizer to bind the Table component to the CachedRowSetDataProvider

try {
change_requestsRowSet.setDataSourceName("java:comp/env/jdbc/bt2");
change_requestsRowSet.setCommand(query);
change_requestsRowSet.setTableName("CHANGE_REQUESTS");
change_requestsDataProvider.setCachedRowSet((javax.sql.rowset.CachedRowSet)getValue("#{SessionBean1.change_requestsRowSet}"));
change_requestsDataProvider.refresh();
change_requestsDataProvider.cursorFirst();
count = (new Integer(((BigDecimal)change_requestsDataProvider.getValue("qcount")).toString())).intValue();
change_requestsRowSet.release();
change_requestsRowSet.close();
} catch (Exception ex) {
log("Error Description", ex);
}

Notice the setCommand statement. The query is generated dynamically based on the criteria item. The criteria item is obtained by using request parameters. The parameter passed to a page is the value of the corresponding criteria (no Priority 1 defects). This means the query has contraints on priority 1 defects and possibly other constraints. I'll explain more about how to setup the url with a request parameter a little later.

Here's how to get the request parameter.


HttpServletRequest request = (HttpServletRequest)getExternalContext().getRequest();
Integer item = new Integer(request.getParameter("criteria_item").substring(0));

Next to populate the ObjectArrayDataProvider, first populate the CriteriaBean array instances in Page1:


for (int i =0; i< qcdata.length; i++) {
qcdata[i].setCriteria_values((String)pm.getCriteria_values().get(i));
qcdata[i].setStatus((String)pm.getStatus_values().get(i));
qcdata[i].setStatusColor((String)pm.getStatusColor().get(i));
qcdata[i].setCount((Integer)pm.getCounts().get(i));
qcdata[i].setIndex(new Integer(i));

}

Notice the status value, well there are some conditions I set to determine the resulting color. Constraints may have differing status, such as Red/Green or Yellow/Green. Red indicates the criteria is not met and must be resolved. Yellow, indicates that criteria is not met, but may be acceptable at a particular stage of a release. An example of a yellow colored criteria is the evaluation of lower priority bugs.

Also, notice the status color. Actually, this field holds the url value of an image, where there are red, yellow and green ball images used. For the count the value is an Integer, however, this value is assigned to the value of a hyperlink component. The hyperlink component is used to navigate to a details page which shows the nitty gritty details of defects' status.

The final step is to bind the ObjectArrayDataProvider's array property to the CriteriaBean array instance. To do this switch to the Page1 design view and select the ObjectArrayDataProvider in the Outline, then in the Property sheet, there is an array property and a dropdown to select the value. Bind the array property to qcdata.

Also, for the Table, change the component type for the status color to be an Image and change the component type of count to be a hyperlink. Next, select the Table, right-click and bind the Table to the ObjectArrayDataProvider. The columns should automagically become defined. Next, select the hyperlink representing count and set the url property to http://myserver:28080/mydashboard/faces/criteria.jsp?criteria_item=#{currentRow.value['index']}

Notice the '?' This is the final piece for completing the setup of the request parameter. The page criteria.jsp just contains a table, setup for the request parameter and binding to a query, which is defined in a properties file.

Here's some jsp source showing the component bindings to the Bean properties (I removed the Table's Javascript to make it easier to read):


Running Creator 2.0 Dashboard
(Click image for full size)



Here's the final result, at runtime:

Running Creator 2.0 Dashboard

Running Creator 2.0 Dashboard

I tried to be fairly complete and concise. If there's questions, please post comments. I hope to write a technical article to explain Dashboard development, fully.

Glad to be back! I spent a few days in Capitola and Santa Cruz CA with my dog while my wife
was out of town. I found a great deal at a Best Western in Capitola - less than $100.00 including
my dog! Yes, they allow pets. Nice clean, motel and close to beaches.


First stop was Moran State Park Beach. A quaint beach, just a beach, nice place for a picnic.
The second beach was Twin Lakes Park / Harbor Beach. A couple of restaurants, but still has a local
flair, not too touristy. Pretty large beach, with a small harbor and a lighthouse.


Highly recommend if you're visiting the San Francisco Bay Area.



Twin Lakes Park, Santa Cruz
Twin Lakes Park, Santa Cruz



Twin Lakes Park
Twin Lakes Park, Santa Cruz



Jessie in Harbor Beach
My dog, Jessie at Harbor Beach



Harbor Beach scene
Harbor Beach scene



Harbor Beach 2


Harbor Beach lighthouse

Sunday Nov 20, 2005

"Free" Product Defect Dashboard


Some call it a bug, metrics or quality dashboard or just plain quality report. It's immeasurably valuable for keeping the product cycle in check. When running on the company intranet, an entire product team can view and track product quality, such as the number of defects currently open, find and fix rates, the list of defects to fix by engineer, list of fixed defects to evaluate, ...


Creator is perfect for developing Quality Dashboards. For one, Creator is now free (please ignore the morbid looking header image). In this entry, I'll show how easy it is to produce a Dashboard using Creator 2 EA2. I'm presuming that the implementor has SQL access to the bug database. Creator supports the major databases, Oracle, Microsoft SQL Server, DB2, Sybase
and even MySQL using the MySQL JDBC 3.1 driver.

Predefined list of supported databases



Adding the MySQL driver


If you're proficient in SQL, write an SQL query. You can write and test a query using Creator.







In the Servers pane...
Add a datasource for your database. Select the datasource, expand to select the table to execute a queries against, right-click and choose View Data Here you can execute your query. The query can be pasted here with Ctrl-V


Once the query is returning the desired results, create a new Web Application. From the Palette window, drop a Basic Table onto the Designer white grid area.


Then expand your Datasource to find your table (or view)
Next, drag and drop the table onto the Designer (not the Table component). Next, in the Outline window, find the SessionBean1 node and select the rowset just added.
As the rowset is selected, the Properties window will show the rowset's properties. See the "command" property. Copy/Paste the query written above as the command property's value

Rowset Command


Next, select the Table component, right-click and choose Table Layout. Here you can bind the Table component to the database table (through the
CachedRowSetDataProvider)



Table (component) customizer


A CachedRowSetDataProvider, which represents the database table binds to the Table. The Table component's columns will get filled in with the identical name as the names of your
database table's columns.


If a binding error occurs, you may see the Component Error page. Then you should go back and test your query using View Data as mentioned above.


If all's well, click the Green arrow at the top.
Now this deploys to your local Sun Java Application Server.
To make your dashboard accessible by others, install Creator on a remote server. Then you can add this remote server to Creator through the Server window.


If there's an error, check the local Deployment Server's log file - there's a context menu in the Servers window for the local Deployment Server.

In the Add Remote Server dialog, I suggest to choose the "Data Sources Automatically Configured by JSCreator"
A driveradapter.jar file will be created and you'll have to copy this to the lib folder under
the Sun Java Application Server installation and restart Sun Java Application Server.



Adding a remote server



Next look in Projects and right-click on Project name and choose Deploy to Remote Server. Now you'll have the application running on http://remote_server:28080/qualitydashboard


Something like this (confidential stuff smudged)
Sample Dashboard
For Creator releases, I have one dashboard setup just the same way. The Personal edition is not a production server and there might be 10 users accessing simultaneously, but this App Server stands up.


If a dashboard requires multiple "reports" contained in Table components so multiple queries are executed then it will take awhile for the page to load. To get around this I use an open source test library called HttpUnit. The idea is to produce an html file which is produced only when needed, every couple of minutes or so, depending on how long it takes to execute a query. Basically your server requires a JDK installation, then write a simple HttpUnit program. Here's one below:




import com.meterware.httpunit.*;
import java.util.*;
import java.io.*;

public class QDBMain {

public static void main(String argv[]) {
String url = "http://server:28080/qualitydashboard";
String result = "";
WebRequest req = null;
WebResponse resp = null;
TableCell statusCell = null;
WebTable statusTable;
WebConversation wc = null;
Enumeration keys = null;
String pageContents;

try {

wc = new WebConversation();
req = new GetMethodWebRequest(url);
resp = wc.getResponse( req );
pageContents = resp.getText();

} catch (Exception e) {
pageContents = "Dashboard is down";
System.out.println("Site is down: " + e);

}

}

}



Next, assuming your server is running Linux or Solaris or other, write a shell script and create a cron job:


#/bin/bash
cd /usr/local/bin/dashboards/scripts/
CLASSPATH=.:/home/jbaker1/classes/httpunit/httpunit-1.6/lib/httpunit.jar:/home/jbaker1/classes/httpunit/httpunit-1.6/jars/Tidy.jar:/home/jbaker1/classes/httpunit/httpunit-1.6/jars/js.jar
export CLASSPATH
java QDBMain > QDBMain.html

# Only copy the resulting html file if expected html was produced
UP=$(grep Thresher QDBMain.html)
if [[ -n $UP ]]; then
cp QDBMain.html uptime
cp QDBMain.html /home/jbaker1/public_html/qcdb_fcs
fi




Next, create a cron job to execute this shell script as frequently as needed.


Now users only depend on the company web server. If you're using Linux, Soloris or other flavor of *NIX, The html file can be created in public_html of your user directory. Now there's no load on your Creator-installed Sun Java Application Server, PE.


If you'd like to learn more about HttpUnit, see http://httpunit.org. Also, I've written an article posted on the NetBeans site.

Sunday Sep 25, 2005

Sun really belongs at PDC and other Microsoft conferences as many visitors to the Sun PDC booth inquired about Sun's hardware and software offerings.
I hope Sun will attend future PDC conferences and have more applicable, eye-opening demos. I hope to attend again, the PDC-perks were the icing on the cake
While demoing, I found out there's a lot to learn and will take on the leads obtained at the conference. Thanks Microsoft!
Sun booth at PDC 2005

Also, cool to see a PDC network running using Sun servers.
Sun rack at PDC 2005

PDC perks

Friday Sep 16, 2005

Apparently, the only hotel with a vacancy this week wasn't in the PDC bus loop. Good thing Winston rented a car and let me use it. His hotel was just a mile away which was really convenient as my Sun booth duty at PDC was in the morning. We underestimated the response to Sun PDC t-shirt and discovered that we were out. All day 2, attendees stopped by our booth just for a shirt ! It wasn't nearly as crazy as Tues night and to my surprise we were getting questions about Interoperability with .NET . It was vaguely understood that Sun provides Web Services support, but there was some leeriness since large amounts of data travelling across the wire is slow.

Some interesting folks stopped by today. One problem to solve, which became a common theme - disparate systems, was to replace an OS/2 com library with a Java library which also talks to an ATM, DB2 and .NET. Another guy was a PhD student at Cambridge studying robotics, who is also doing his internship at Microsoft. He was really anxious to get a Sun PDC shirt and probably got the last one. He couldn't wait to wear his new Sun PDC shirt to class.

Another guy, who may have been from Finland was such a character, high pitched, non-irritating whining, smiling wearing a baseball cap. He was a Java guy happy with the open sharing at Sun vs. his experience in using other products.

Another was bewildered that Sun doesn't have a laptop yet. Actually we do now, and I found the Ultra 3 page on sun.com and he was nearly ecstatic.

Practically all others who stopped by were interested in Sun's interoperability story and how Java works with .NET. I briefly introduced the Web Services Enhancement specification , jointly worked on by Sun and Microsoft. Still, many weren't convinced that this is all they need, J2EE/JAX-RPC, because they found that Web Services are slow.

So, as a extreme newbie to Interoperability, I went to Microsoft to ask some questions. I received a good overview of Indigo, but no .NET/Java interop via binary XML . So, the Indigo guy introduced me to a Product Manager at Microsoft. We chatted and exchanged business cards. He agreed to send me some information and also mentioned a company doing some Java interoperability, Intrinsyc.

Also, my booth buddies introduced me to Fast Infoset which is a specification for binary XML. This spec isn't well know, apparently since IBM, HP and Google haven't yet contributed. The PM indicated that Microsoft probably wouldn't be interested until these companies expressed interest in contributing.

After booth duty, I attended the Microsoft party at Universal Studios, which was pretty cool. Believe it or not, I had never seen a 3D movie and last night saw 2. I highly recommend seeing the Governator, uh, Terminator. Make sure to ride the Harley just outside the show. That was awesome, well not quite, it's just a prop, can't start and won't go very far. What was awesome was when suddenly a couple of guys suddenly shouted, "Hey, you're from Sun" and wanted to have their photo taken with us. And when we took the escalator, PDCers were taking our photo (really paid off to wear shirts with Sun logos) I felt like an instant celebrity!