public String  InternalDoDataGathering(String assignment) {

	// only collect data for JSim
	if (!this.getTitle().startsWith("JSim")) return null;

	/* doesn't help?
	// determine if we have a network connection without having to wait for a timeout
	boolean connected = false;
	try {
	    Enumeration<NetworkInterface> eni = NetworkInterface.getNetworkInterfaces();
	    if (eni != null) {
		network_test:
		while (eni.hasMoreElements()) {
		    Enumeration<InetAddress> eia = eni.nextElement().getInetAddresses();
		    while (eia.hasMoreElements()) {
			InetAddress ia = eia.nextElement();
			if (!ia.isAnyLocalAddress() && !ia.isLoopbackAddress() && !ia.isSiteLocalAddress()) {
			    if (!ia.getHostName().equals(ia.getHostAddress())) {
				connected = true;
				break network_test; 
			    }
			}
		    }
		}
	    }
	} catch (SocketException e) {
	}
	System.out.println("connected="+connected);
	if (!connected) return null;   // no tickee, no laundry...
	*/

	// use CRC calculated from user name as the unique user id
	CRC32 hash = new CRC32();
	hash.update(System.getProperty("user.name","???").getBytes());
	String uid = java.lang.Long.toHexString(hash.getValue());

	if (assignment == null) assignment = "unknown";

	// POST the results back to the server
	try {
	    URL url = new URL("http://cjt.csail.mit.edu/6.004/data/capture.cgi");

	    URLConnection conn = url.openConnection();
	    conn.setDoOutput(true);
	    conn.setDoInput(true);
	    POSTStream o = new POSTStream(conn.getOutputStream());

	    // username, password, sender, collaboration
	    o.writeTag("uid");
	    o.write(uid);
	    o.writeTag("assignment");
	    o.write(assignment);

	    // capture buffer contents
	    o.writeTag("buffers");
	    int nviews = tabPane.getTabCount();
	    for (int i = 0; i < nviews; i += 1) {
		EditBuffer n = (EditBuffer)tabPane.getComponentAt(i);
		String name = n.TabName();
		boolean capture = true;

		// weed out course-supplied design files
		if (ignore != null)
		    for (int j = 0; j < ignore.length; j += 1)
			if (name.equals(ignore[j])) {
			    capture = false;
			    break;
			}
		
		if (capture) n.CaptureAnon(o);
	    }

	    o.close();

	    // Retrieve POST results
	    StringBuffer results = new StringBuffer();
	    InputStream istream = conn.getInputStream();
	    int ch;
	    while ((ch = istream.read()) != -1) results.append((char)ch);
	    istream.close();

	    return results.toString();
	}
	catch (Exception e) {
	    return null;
	}
    }