<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Reading trendlog data]]></title><description><![CDATA[<p dir="auto">Firstly, great job with the library!</p>
<p dir="auto">I have managed to figure out how to send a ReadRangeRequest to get trendlog logbuffer data from a trendlog (, however I'm stuck trying to figure out how to handle the response.</p>
<p dir="auto">Can anyone help me or point me in the right direction?  I know I need to handle a ComplexACK somehow, I just can't seem to be able to figure out where orhow to do it in BACnet4J</p>
]]></description><link>https://forum.mango-os.com/topic/655/reading-trendlog-data</link><generator>RSS for Node</generator><lastBuildDate>Tue, 12 May 2026 15:10:08 GMT</lastBuildDate><atom:link href="https://forum.mango-os.com/topic/655.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 22 Nov 2010 22:47:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Reading trendlog data on Wed, 19 Feb 2014 18:47:52 GMT]]></title><description><![CDATA[<p dir="auto">HI can any one please help me on this ....</p>
<p dir="auto">package com.lnt.TestApp;</p>
<p dir="auto">import java.util.ArrayList;<br />
import java.util.Iterator;<br />
import java.util.List;</p>
<p dir="auto">import com.serotonin.bacnet4j.LocalDevice;<br />
import com.serotonin.bacnet4j.RemoteDevice;<br />
import com.serotonin.bacnet4j.enums.MaxApduLength;<br />
import com.serotonin.bacnet4j.exception.BACnetException;<br />
import com.serotonin.bacnet4j.npdu.ip.IpNetwork;<br />
import com.serotonin.bacnet4j.service.acknowledgement.AcknowledgementService;<br />
import com.serotonin.bacnet4j.service.acknowledgement.ReadPropertyAck;<br />
import com.serotonin.bacnet4j.service.acknowledgement.ReadRangeAck;<br />
import com.serotonin.bacnet4j.service.confirmed.ConfirmedRequestService;<br />
import com.serotonin.bacnet4j.service.confirmed.ReadPropertyRequest;<br />
import com.serotonin.bacnet4j.service.confirmed.ReadRangeRequest;<br />
import com.serotonin.bacnet4j.service.confirmed.ReadRangeRequest.BySequenceNumber;<br />
import com.serotonin.bacnet4j.service.unconfirmed.WhoIsRequest;<br />
import com.serotonin.bacnet4j.transport.Transport;<br />
import com.serotonin.bacnet4j.type.Encodable;<br />
import com.serotonin.bacnet4j.type.constructed.Address;<br />
import com.serotonin.bacnet4j.type.constructed.LogRecord;<br />
import com.serotonin.bacnet4j.type.constructed.SequenceOf;<br />
import com.serotonin.bacnet4j.type.enumerated.ObjectType;<br />
import com.serotonin.bacnet4j.type.enumerated.PropertyIdentifier;<br />
import com.serotonin.bacnet4j.type.enumerated.Segmentation;<br />
import com.serotonin.bacnet4j.type.primitive.ObjectIdentifier;<br />
import com.serotonin.bacnet4j.type.primitive.OctetString;<br />
import com.serotonin.bacnet4j.type.primitive.SignedInteger;<br />
import com.serotonin.bacnet4j.type.primitive.UnsignedInteger;<br />
import com.serotonin.bacnet4j.util.PropertyReferences;<br />
import com.serotonin.bacnet4j.util.PropertyValues;<br />
import com.serotonin.bacnet4j.util.RequestUtils;</p>
<p dir="auto">public class Test {<br />
static LocalDevice lDevice;<br />
static Address addr = new Address(0, "172.28.14.100");</p>
<pre><code>public Test() {
}

public static void main(String args[]) {
	initializeDevice();
}

public static void initializeDevice() {
	try {
		System.out.println("Initializing...");
		IpNetwork ipNetwork = new IpNetwork("172.28.14.255", 47808,
				"172.28.14.63");
		Transport transport = new Transport(ipNetwork);
		lDevice = new LocalDevice(9899, transport);
		lDevice.initialize();
		lDevice.getEventHandler().addListener(new Listener());
		lDevice.sendGlobalBroadcast(new WhoIsRequest());
		Thread.sleep(500);

		getObjectList(lDevice, "172.28.14.100", 47808, 0);
	} catch (Exception e) {
		System.out.println("Error : " + e.getMessage());
	} finally {
		closeDevice();
	}
}

public static AcknowledgementService send(LocalDevice d,
		ConfirmedRequestService s) throws Exception {
	// Address a = new Address(InetAddrCache.get("localhost", 0xbac1));
	return d.send(addr, null, MaxApduLength.UP_TO_1476,
			Segmentation.segmentedBoth, s);
}

public static void closeDevice() {
	try {
		lDevice.terminate();
	} catch (Exception e) {
		System.out.println(e.getMessage());
	}
}

private static void getObjectList(LocalDevice localDevice, String ip,
		int port, int deviceId) {
	RemoteDevice fileDev = null;
	ObjectIdentifier file = null;
	ReadPropertyRequest readPropertyRequest;
	ReadPropertyAck reaPropertyAck;
	UnsignedInteger referenceIndex = null;
	SignedInteger signedInteger = null;
	Address address[] = lDevice.getAllLocalAddresses();
	OctetString octetString = new OctetString("172.28.14.63", 47808);
	RemoteDevice dev3400 = null;
	
	//try {
		//dev3400 = lDevice.findRemoteDevice(address[0], octetString, 0);
	  dev3400 = lDevice.getRemoteDevice(address[0]);
	//} catch (BACnetException e1) {
		// TODO Auto-generated catch block
	//	e1.printStackTrace();
	//}

	
	for (RemoteDevice d : localDevice.getRemoteDevices()) {
		// ObjectIdentifier oid = d.getObjectIdentifier();

		RemoteDevice rd = new RemoteDevice(123,	localDevice.getAllLocalAddresses()[0], octetString);

		@SuppressWarnings("unchecked")
		List&lt;ObjectIdentifier&gt; oids;
		try {
			oids = ((SequenceOf&lt;ObjectIdentifier&gt;) RequestUtils	.sendReadPropertyAllowNull(localDevice, d,	d.getObjectIdentifier(),
							PropertyIdentifier.objectList)).getValues();

			for (ObjectIdentifier oid : oids) {
				readPropertyRequest = new ReadPropertyRequest(oid, PropertyIdentifier.objectName);
				reaPropertyAck = (ReadPropertyAck) localDevice.send(d,readPropertyRequest);
				System.out.println("Value: " + reaPropertyAck.getValue());

				
				if (oid.getObjectType().equals(ObjectType.trendLog)) {

					readPropertyRequest = new ReadPropertyRequest(oid,	PropertyIdentifier.objectName);
					reaPropertyAck = (ReadPropertyAck) localDevice.send(d,	readPropertyRequest);

					System.out.println("ObjectName: "+ reaPropertyAck.getValue());

					readPropertyRequest = new ReadPropertyRequest(oid,PropertyIdentifier.bufferSize);
					reaPropertyAck = (ReadPropertyAck) localDevice.send(d,readPropertyRequest);
					System.out.println("BufferSize: "+ reaPropertyAck.getValue());

					readPropertyRequest = new ReadPropertyRequest(oid,	PropertyIdentifier.totalRecordCount);
					reaPropertyAck = (ReadPropertyAck) localDevice.send(d, readPropertyRequest);
					System.out.println("totalRecordCount: "	+ reaPropertyAck.getValue());
					// Encodable totalRecordCount =	// reaPropertyAck.getValue();

					readPropertyRequest = new ReadPropertyRequest(oid, PropertyIdentifier.recordCount);
					reaPropertyAck = (ReadPropertyAck) localDevice.send(d, readPropertyRequest);
					System.out.println("RecordCount: "+ reaPropertyAck.getValue());
					// Encodable recordCount = reaPropertyAck.getValue();

					readPropertyRequest = new ReadPropertyRequest(oid, PropertyIdentifier.eventState);
					reaPropertyAck = (ReadPropertyAck) localDevice.send(d, readPropertyRequest);
					System.out.println("eventState: " + reaPropertyAck.getValue());

					readPropertyRequest = new ReadPropertyRequest(oid,PropertyIdentifier.totalRecordCount);
					reaPropertyAck = (ReadPropertyAck) lDevice.send(d,readPropertyRequest);
					System.out.println("TotalRecordCount: "+ reaPropertyAck.getValue());
					UnsignedInteger totalRecordCount = (UnsignedInteger) reaPropertyAck.getValue();

					readPropertyRequest = new ReadPropertyRequest(oid, PropertyIdentifier.recordCount);
					reaPropertyAck = (ReadPropertyAck) lDevice.send(d, readPropertyRequest);
					System.out.println("RecordCount: "+ reaPropertyAck.getValue());
					UnsignedInteger recordCount = (UnsignedInteger) reaPropertyAck.getValue();
					signedInteger = new SignedInteger(recordCount.bigIntegerValue());

					referenceIndex = new UnsignedInteger(totalRecordCount.longValue() - signedInteger.longValue() - 1);
					
					ReadRangeRequest rrr = new ReadRangeRequest(new ObjectIdentifier(ObjectType.trendLogMultiple, 11),
							PropertyIdentifier.logBuffer, null,	new BySequenceNumber(referenceIndex,signedInteger));
					//lDevice.send(d, rrr);
					ReadRangeAck rra = (ReadRangeAck)lDevice.send(d, rrr);  

					System.out.println(rra.getItemCount());   
				    System.out.println(rra.getFirstSequenceNumber());   
		            System.out.println(rra.getItemData());   
		            Iterator&lt;?&gt; it = (Iterator&lt;?&gt;)rra.getItemData().iterator();   
		            while (it.hasNext())   
					{   
			                Encodable e = (Encodable)it.next();   
			                if (e instanceof LogRecord)   
			                {   
			                    LogRecord lr = (LogRecord)e;   
			                    //System.out.println(lr.getBaseType());   
			                    System.out.println(lr.getChoiceType());   
			                }   
			        }  
				}
			
			}
		} catch (BACnetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
</code></pre>
<p dir="auto">}<br />
I am able to read bacnet objets, but i want to read trendlog contentes in my code  when the flo comes ReadRangeRequest and ReadRangeAc am getting bacnet timeout exception can u  please see the code and guid me on this...</p>
]]></description><link>https://forum.mango-os.com/post/8364</link><guid isPermaLink="true">https://forum.mango-os.com/post/8364</guid><dc:creator><![CDATA[manjunathm]]></dc:creator><pubDate>Wed, 19 Feb 2014 18:47:52 GMT</pubDate></item><item><title><![CDATA[Reply to Reading trendlog data on Fri, 26 Nov 2010 02:57:52 GMT]]></title><description><![CDATA[<p dir="auto">Awesome stuff Matt.  Cheers  :D</p>
]]></description><link>https://forum.mango-os.com/post/5019</link><guid isPermaLink="true">https://forum.mango-os.com/post/5019</guid><dc:creator><![CDATA[joolz]]></dc:creator><pubDate>Fri, 26 Nov 2010 02:57:52 GMT</pubDate></item><item><title><![CDATA[Reply to Reading trendlog data on Fri, 26 Nov 2010 01:49:46 GMT]]></title><description><![CDATA[<blockquote>
<p dir="auto">Since the exception occurs in BACnet4J, I suspect it is probably a bug.</p>
</blockquote>
<p dir="auto">Not impossible, but in this case i don't think so. This line:</p>
<pre><code>System.out.println(lr.getBaseType());

</code></pre>
<p dir="auto">... tells the code to try and cast the datum to a base type. For this record you should call getReal() (funny name for a method, i know) instead. You will know which method to call by first calling getChoiceType() and picking the appropriate datum method based upon that.</p>
<p dir="auto">In any case, because the classes field actually lists Encodable and not BaseType, i've changed the method to be getEncodable instead, which will solve your casting problem should you choose to remain more general. Change has been checked into CVS.</p>
]]></description><link>https://forum.mango-os.com/post/5018</link><guid isPermaLink="true">https://forum.mango-os.com/post/5018</guid><dc:creator><![CDATA[mlohbihler]]></dc:creator><pubDate>Fri, 26 Nov 2010 01:49:46 GMT</pubDate></item><item><title><![CDATA[Reply to Reading trendlog data on Thu, 25 Nov 2010 23:42:42 GMT]]></title><description><![CDATA[<p dir="auto">Thanks Matt, that was the exact info I needed.</p>
<p dir="auto">However, either I'm doing something wrong, or I think I've found a bug.  I attempt to get the BaseType for the log record (which is a Real), and it throws the following Exception:</p>
<pre><code>Exception in thread "main" java.lang.ClassCastException: com.serotonin.bacnet4j.type.primitive.Real cannot be cast to com.serotonin.bacnet4j.type.constructed.BaseType
	at com.serotonin.bacnet4j.type.constructed.LogRecord.getBaseType(LogRecord.java:170)
	at com.serotonin.bacnet4j.test.readTrendlogData.main(readTrendlogData.java:88)
```Since the exception occurs in BACnet4J, I suspect it is probably a bug.
</code></pre>
<p dir="auto">package com.serotonin.bacnet4j.test;</p>
<p dir="auto">import java.util.ArrayList;<br />
import java.util.Iterator;</p>
<p dir="auto">import com.serotonin.bacnet4j.LocalDevice;<br />
import com.serotonin.bacnet4j.RemoteDevice;<br />
import com.serotonin.bacnet4j.base.BACnetUtils;<br />
import com.serotonin.bacnet4j.event.DefaultDeviceEventListener;<br />
import com.serotonin.bacnet4j.service.acknowledgement.ReadRangeAck;<br />
import com.serotonin.bacnet4j.service.confirmed.ReadRangeRequest;<br />
import com.serotonin.bacnet4j.service.confirmed.ReadRangeRequest.BySequenceNumber;<br />
import com.serotonin.bacnet4j.type.Encodable;<br />
import com.serotonin.bacnet4j.type.constructed.Address;<br />
import com.serotonin.bacnet4j.type.constructed.LogRecord;<br />
import com.serotonin.bacnet4j.type.enumerated.ObjectType;<br />
import com.serotonin.bacnet4j.type.enumerated.PropertyIdentifier;<br />
import com.serotonin.bacnet4j.type.primitive.ObjectIdentifier;<br />
import com.serotonin.bacnet4j.type.primitive.SignedInteger;<br />
import com.serotonin.bacnet4j.type.primitive.UnsignedInteger;<br />
import com.serotonin.bacnet4j.util.PropertyReferences;<br />
import com.serotonin.bacnet4j.util.PropertyValues;</p>
<p dir="auto">public class readTrendlogData<br />
{<br />
public static void main(String[] args) throws Exception<br />
{<br />
LocalDevice ld = new LocalDevice(1122, "192.168.3.255");<br />
try<br />
{<br />
ld.initialize();<br />
Handler h = new Handler();<br />
ld.getEventHandler().addListener(h);<br />
ld.sendBroadcast(47808, ld.getIAm());</p>
<pre><code>		RemoteDevice dev3400 = null;

		Address address = new Address(null, BACnetUtils.dottedStringToBytes("192.168.3.50"), 0xBAC0);
		dev3400 = ld.findRemoteDevice(address, null, 3400);
		
		ObjectType obj = ObjectType.trendLog;
		int ins = 11;

		ArrayList&lt;PropertyIdentifier&gt;pis = new ArrayList&lt;PropertyIdentifier&gt;();
		pis.add(PropertyIdentifier.totalRecordCount);
		pis.add(PropertyIdentifier.recordCount);
		ObjectIdentifier oid = new ObjectIdentifier(obj, ins);
		PropertyReferences refs = new PropertyReferences();
		for (PropertyIdentifier pi : pis)
		{
			refs.add(oid, pi);
		}
		PropertyValues pvs = ld.readProperties(dev3400, refs);
		UnsignedInteger totalRecordCount = null;
		SignedInteger count = null;
		for (PropertyIdentifier pi : pis)
		{
			if (pi == PropertyIdentifier.totalRecordCount)
			{
				totalRecordCount = (UnsignedInteger) pvs.get(oid, pi);
				System.out.println("Total record count: " + totalRecordCount);
			}
			else if (pi == PropertyIdentifier.recordCount)
			{
				UnsignedInteger ui = (UnsignedInteger) pvs.get(oid, pi);
				count = new SignedInteger(ui.bigIntegerValue());
				System.out.println("Record count: " + count);
			}
			//else
			{
				System.out.println(pi + " - " + pvs.getString(oid, pi));
			}
		}
		
		UnsignedInteger referenceIndex = new UnsignedInteger(totalRecordCount.longValue() - count.longValue() - 1);
		ReadRangeRequest rrr = new ReadRangeRequest(new ObjectIdentifier(obj, ins), PropertyIdentifier.logBuffer, null, new BySequenceNumber(referenceIndex, count));
		ReadRangeAck rra = (ReadRangeAck)ld.send(dev3400, rrr);
		System.out.println(rra.getItemCount());
		System.out.println(rra.getFirstSequenceNumber());
		System.out.println(rra.getItemData());
		Iterator&lt;?&gt; it = (Iterator&lt;?&gt;)rra.getItemData().iterator();
		while (it.hasNext())
		{
			Encodable e = (Encodable)it.next();
			if (e instanceof LogRecord)
			{
				LogRecord lr = (LogRecord)e;
				System.out.println(lr.getBaseType());
				System.out.println(lr.getChoiceType());
			}
		}
		
	}
	finally
	{
		ld.terminate();
	}
}

static class Handler extends DefaultDeviceEventListener
{
	private ArrayList&lt;RemoteDevice&gt; devices;
	public Handler()
	{
		devices = new ArrayList&lt;RemoteDevice&gt;();
	}

	@Override
	public void iAmReceived(RemoteDevice d)
	{
		System.out.println("Heard from " + d.getInstanceNumber());
		devices.add(d);
	}

	/**
	 * @return the devices
	 */
	public ArrayList&lt;RemoteDevice&gt; getDevices()
	{
		return devices;
	}
}
</code></pre>
<p dir="auto">}</p>
<pre><code class="language-This">
I could call getChoiceType() to determine the type of data in the LogRecord and call the correct getXXX() accordingly, but there doesn't seem to be a set of constants (that I could find) defined to allow one to determine the datatype (yes, I could define them in my class, but it would be better to have it in BACnet4J).

However, I think the ideal solution would be to add a function which allows one to call the appropriate getXXX() function in a strongly typed way (perhaps add a getData() function to LogRecord which returns Encodable).</code></pre>
]]></description><link>https://forum.mango-os.com/post/5017</link><guid isPermaLink="true">https://forum.mango-os.com/post/5017</guid><dc:creator><![CDATA[joolz]]></dc:creator><pubDate>Thu, 25 Nov 2010 23:42:42 GMT</pubDate></item><item><title><![CDATA[Reply to Reading trendlog data on Thu, 25 Nov 2010 20:08:17 GMT]]></title><description><![CDATA[<p dir="auto">The simple answer is to cast the result from "ld.send(dev3400, rrr);" to a ReadRangeAck.</p>
]]></description><link>https://forum.mango-os.com/post/5015</link><guid isPermaLink="true">https://forum.mango-os.com/post/5015</guid><dc:creator><![CDATA[mlohbihler]]></dc:creator><pubDate>Thu, 25 Nov 2010 20:08:17 GMT</pubDate></item><item><title><![CDATA[Reply to Reading trendlog data on Wed, 24 Nov 2010 07:03:08 GMT]]></title><description><![CDATA[<p dir="auto">Help would be much appreciated.  I'm not sure how to proceed in BACnet4J after I've sent the ReadRangeRequest.</p>
<pre><code>package com.serotonin.bacnet4j.test;

import java.util.ArrayList;

import com.serotonin.bacnet4j.LocalDevice;
import com.serotonin.bacnet4j.RemoteDevice;
import com.serotonin.bacnet4j.base.BACnetUtils;
import com.serotonin.bacnet4j.event.DefaultDeviceEventListener;
import com.serotonin.bacnet4j.service.confirmed.ReadRangeRequest;
import com.serotonin.bacnet4j.service.confirmed.ReadRangeRequest.BySequenceNumber;
import com.serotonin.bacnet4j.type.constructed.Address;
import com.serotonin.bacnet4j.type.enumerated.ObjectType;
import com.serotonin.bacnet4j.type.enumerated.PropertyIdentifier;
import com.serotonin.bacnet4j.type.primitive.ObjectIdentifier;
import com.serotonin.bacnet4j.type.primitive.SignedInteger;
import com.serotonin.bacnet4j.type.primitive.UnsignedInteger;
import com.serotonin.bacnet4j.util.PropertyReferences;
import com.serotonin.bacnet4j.util.PropertyValues;

public class readTrendlogData
{
	public static void main(String[] args) throws Exception
	{
		LocalDevice ld = new LocalDevice(1122, "192.168.3.255");
		try
		{
			ld.initialize();
			Handler h = new Handler();
			ld.getEventHandler().addListener(h);
			ld.sendBroadcast(47808, ld.getIAm());
			
			RemoteDevice dev3400 = null;

			Address address = new Address(null, BACnetUtils.dottedStringToBytes("192.168.3.50"), 0xBAC0);
			dev3400 = ld.findRemoteDevice(address, null, 3400);
			
			ObjectType obj = ObjectType.trendLog;
			int ins = 0;

			ArrayList&lt;PropertyIdentifier&gt;pis = new ArrayList&lt;PropertyIdentifier&gt;();
			pis.add(PropertyIdentifier.totalRecordCount);
			pis.add(PropertyIdentifier.recordCount);
			ObjectIdentifier oid = new ObjectIdentifier(obj, ins);
			PropertyReferences refs = new PropertyReferences();
			for (PropertyIdentifier pi : pis)
			{
				refs.add(oid, pi);
			}
			PropertyValues pvs = ld.readProperties(dev3400, refs);
			UnsignedInteger totalRecordCount = null;
			SignedInteger count = null;
			for (PropertyIdentifier pi : pis)
			{
				if (pi == PropertyIdentifier.totalRecordCount)
				{
					totalRecordCount = (UnsignedInteger) pvs.get(oid, pi);
					System.out.println("Total record count: " + totalRecordCount);
				}
				else if (pi == PropertyIdentifier.recordCount)
				{
					UnsignedInteger ui = (UnsignedInteger) pvs.get(oid, pi);
					count = new SignedInteger(ui.bigIntegerValue());
					System.out.println("Record count: " + count);
				}
				//else
				{
					System.out.println(pi + " - " + pvs.getString(oid, pi));
				}
			}
			
			UnsignedInteger referenceIndex = new UnsignedInteger(totalRecordCount.longValue() - count.longValue() - 1);
			ReadRangeRequest rrr = new ReadRangeRequest(new ObjectIdentifier(obj, ins), PropertyIdentifier.logBuffer, null, new BySequenceNumber(referenceIndex, count));
			ld.send(dev3400, rrr);
		}
		finally
		{
			ld.terminate();
		}
	}

	static class Handler extends DefaultDeviceEventListener
	{
		private ArrayList&lt;RemoteDevice&gt; devices;
		public Handler()
		{
			devices = new ArrayList&lt;RemoteDevice&gt;();
		}

		@Override
		public void iAmReceived(RemoteDevice d)
		{
			System.out.println("Heard from " + d.getInstanceNumber());
			devices.add(d);
		}

		/**
		 * @return the devices
		 */
		public ArrayList&lt;RemoteDevice&gt; getDevices()
		{
			return devices;
		}
	}
}
</code></pre>
<p dir="auto">Attachment: <a href="http://archive.infiniteautomation.com/forum/posts/downloadAttach/73.page" rel="nofollow ugc">download link</a></p>
]]></description><link>https://forum.mango-os.com/post/5004</link><guid isPermaLink="true">https://forum.mango-os.com/post/5004</guid><dc:creator><![CDATA[joolz]]></dc:creator><pubDate>Wed, 24 Nov 2010 07:03:08 GMT</pubDate></item><item><title><![CDATA[Reply to Reading trendlog data on Wed, 24 Nov 2010 03:24:05 GMT]]></title><description><![CDATA[<p dir="auto">Hi,</p>
<p dir="auto">Let me know if I can help.  I have extensive experience with BACnet.  Please send/post the code that you are trying to use and a Wireshark capture of the traffic on the wire.  <a href="http://www.wireshark.org/" rel="nofollow ugc">http://www.wireshark.org/</a></p>
<p dir="auto">Regards,<br />
Dave</p>
<p dir="auto"><a href="http://www.linkedin.com/in/davidcwilson" rel="nofollow ugc">http://www.linkedin.com/in/davidcwilson</a></p>
]]></description><link>https://forum.mango-os.com/post/5003</link><guid isPermaLink="true">https://forum.mango-os.com/post/5003</guid><dc:creator><![CDATA[davidcwilson]]></dc:creator><pubDate>Wed, 24 Nov 2010 03:24:05 GMT</pubDate></item></channel></rss>