public void start(String iniFileName) {
		measurementNumber=0;
		ini = new IniFile(iniFileName);



		if (stdOut) System.out.println("java.library.path: " + System.getProperty("java.library.path"));

		/* memcache */
		if ( false == ini.hasSubject("MEMCACHE") || ! ini.isTrue("MEMCACHE", "enabled") ) {
			System.err.println("# No memcache subject. Memcache interface disabled.");
			memcache=null;
		} else {
			String memcacheHost = ini.getValueSafe("MEMCACHE","host","localhost");
			int memcachePort = Integer.valueOf(ini.getValueSafe("MEMCACHE","port","11211"));

			try {
				memcache=new MemcachedClient(new InetSocketAddress(memcacheHost,memcachePort));
				/* clear memcache ... let's hope there isn't anything we care about on there */
				memcache.flush();
				
				ini.setMemcache(memcache,0);
			} catch ( IOException e ) {
				memcache=null;
			}
		}

		queryInterval=Integer.valueOf(ini.getValueSafe("GENERAL","interval","10000"));
		if ( queryInterval < 1000 )
			queryInterval=10000;

		serialPrefix=Integer.valueOf(ini.getValueSafe("GENERAL","serialPrefix","90"));
		serialNumber=Integer.valueOf(ini.getValueSafe("GENERAL","serialNumber","1111"));
		if (stdErr) System.err.println("# Serial Prefix: " + serialPrefix + " Serial Number: " + serialNumber);







		loadWorldDataConfig();
		loadProcessConfig(queryInterval);

		loadStreamsConfig();

		openWorldDatas();
		openProcesses();
		openStreams();




		/* start our master timer */
		heart = new javax.swing.Timer(queryInterval, new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				streamStartQuery();
			}
		});

		/* should we start at the top of the second? */
		heart.start();

		/* Wait for a key press */
		try {
			System.in.read();
			if (stdErr) System.err.println("# shutting down in 2 seconds ...");

			heart.stop();
			Thread.sleep(2000);
		} catch (Exception e) {
			e.printStackTrace();
		}

		heart.stop();

		closeProcesses();
		closeStreams();
		closeWorldDatas();
	}