<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[LiveCloud Forums - Code Samples]]></title>
		<link>https://forums.livecloud.io/</link>
		<description><![CDATA[LiveCloud Forums - https://forums.livecloud.io]]></description>
		<pubDate>Fri, 08 May 2026 13:43:53 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Methods for integrating cdbUsers table with stored user content]]></title>
			<link>https://forums.livecloud.io/showthread.php?tid=501</link>
			<pubDate>Wed, 27 Oct 2021 23:05:56 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forums.livecloud.io/member.php?action=profile&uid=22">mark_talluto</a>]]></dc:creator>
			<guid isPermaLink="false">https://forums.livecloud.io/showthread.php?tid=501</guid>
			<description><![CDATA[<span style="color: #0e101a;" class="mycode_color">Once in a while, we will provide support via email. I want to share that experience with everyone with the hope that <span style="color: #0e101a;" class="mycode_color">others </span>will benefit. When this happens, We'll leave out the person's name.</span><br />
<br />
<span style="color: #0e101a;" class="mycode_color">On to the question:</span><br />
<span style="color: #0e101a;" class="mycode_color">I've never really done nosql, was always able to query specific records against a user_id.</span><br />
<span style="color: #0e101a;" class="mycode_color">I want a quick way to save and query all of a user's records in this nosql way.</span><br />
<br />
<span style="color: #0e101a;" class="mycode_color">Do you see any limits or problems with creating a table for each user? and place all their data there?</span><br />
<br />
<span style="color: #0e101a;" class="mycode_color">I know for low numbers of user's thats not a big deal.</span><br />
<span style="color: #0e101a;" class="mycode_color">How about 10,000 tables?</span><br />
<br />
<br />
<span style="color: #0e101a;" class="mycode_color">The response:</span><br />
<span style="color: #0e101a;" class="mycode_color">There is always more than one way to model your data.</span><br />
<br />
<span style="color: #0e101a;" class="mycode_color">Method 1</span><br />
<span style="color: #0e101a;" class="mycode_color">You could use your cdbRecordID (primary key) for each user in the cdbUsers table as a linking key (foreign key) to records in another table.</span><br />
<br />
<span style="color: #0e101a;" class="mycode_color">cdbUsers table</span><br />
<span style="color: #0e101a;" class="mycode_color">Record 1: [a2ad3bc9-8ef8-4c36-9c4d-00d109600cd9] [Marco] [Polo]</span><br />
<br />
<br />
<span style="color: #0e101a;" class="mycode_color">someDataTable that contains data for all of your users</span><br />
<span style="color: #0e101a;" class="mycode_color">Record 34545 [0a43839f-ad5c-4089-a864-c6bfa10942be] [a2ad3bc9-8ef8-4c36-9c4d-00d109600cd9] [import] [data] [in] [these] [columns]</span><br />
<br />
<br />
<span style="color: #0e101a;" class="mycode_color">TableID:fbb12a0d-8189-4fb4-a906-12166445f54b</span><br />
<span style="color: #0e101a;" class="mycode_color">0a43839f-ad5c-4089-a864-c6bfa10942be</span><br />
<br />
<br />
<span style="color: #0e101a;" class="mycode_color">//Untested come code that should work:</span><br />
<span style="color: #0e101a;" class="mycode_color">//GET THE RECORD ID OF A PARTICULAR USER</span><br />
<span style="color: #0e101a;" class="mycode_color">local tOutputA, tRecordID</span><br />
<span style="color: #0e101a;" class="mycode_color">put cdb_query("email","=","<a href="mailto:marco@polo.com" class="mycode_email"><span style="color: #4a6ee0;" class="mycode_color">marco@polo.com</span></a>","cdbUsers","cloud","recordData") into tOutputA</span><br />
<span style="color: #0e101a;" class="mycode_color">put tOutputA["cdb"]["cdbRecordID"] into tRecordID</span><br />
<br />
<br />
<span style="color: #0e101a;" class="mycode_color">//USE THE cdbRecordID FROM THE FIRST QUERY TO FIND ALL RELATED DATA TO THIS USER</span><br />
<span style="color: #0e101a;" class="mycode_color">local tOutputA</span><br />
<span style="color: #0e101a;" class="mycode_color">put cdb_query("userForeignKey","=",tRecordID,"someDataTable","cloud","recordData") into tOutputA</span><br />
<br />
<span style="color: #0e101a;" class="mycode_color">//tOutputA will contain an array that for every record in the 'someDataTable' table that is related to your user. </span><br />
<span style="color: #0e101a;" class="mycode_color">//For this to work, every commit to this table needs you to include the foreign key value in each record for every user.</span><br />
<span style="color: #0e101a;" class="mycode_color">//Since the user is probably authenticated, you can get this value one time during their session and use it everywhere you need.</span><br />
<br />
<br />
<span style="color: #0e101a;" class="mycode_color">Method 2</span><br />
<span style="color: #0e101a;" class="mycode_color">You can store the tableID in the cdbUsers table as a foreign key.</span><br />
<span style="color: #0e101a;" class="mycode_color">The optimization is that you can read on a single table and know that all the data is related to that particular user. You will not need to query a table to find related data. </span><br />
<br />
<span style="color: #0e101a;" class="mycode_color">I am in favor of this model. The only negative is that a user can not create a table programmatically. It is something we intend to resolve. You could pre-create tables with a developer-signed app programmatically. If you get serious with this method, we can look at a longer-term solution to make this happen. </span><br />
<br />
<span style="color: #0e101a;" class="mycode_color">You can connect as many tables as you like to a particular user. Just create the foreign key columns in the cdbUsers table to track the tableIDs.</span><br />
<br />
<br />
<span style="color: #0e101a;" class="mycode_color">Limitations</span><br />
<span style="color: #0e101a;" class="mycode_color">The free account “Mist” and entry level account “Rain" are running on a shared cloud cluster. They are great for developing concepts and low-data consumption apps. They will not work out for you if you plan to have 10k or more users. </span><br />
<br />
<span style="color: #0e101a;" class="mycode_color">You will want to build a “Storm” account to customize the cluster just for your app. If you have 10k paying customers, our Storm plans are cheap. </span>]]></description>
			<content:encoded><![CDATA[<span style="color: #0e101a;" class="mycode_color">Once in a while, we will provide support via email. I want to share that experience with everyone with the hope that <span style="color: #0e101a;" class="mycode_color">others </span>will benefit. When this happens, We'll leave out the person's name.</span><br />
<br />
<span style="color: #0e101a;" class="mycode_color">On to the question:</span><br />
<span style="color: #0e101a;" class="mycode_color">I've never really done nosql, was always able to query specific records against a user_id.</span><br />
<span style="color: #0e101a;" class="mycode_color">I want a quick way to save and query all of a user's records in this nosql way.</span><br />
<br />
<span style="color: #0e101a;" class="mycode_color">Do you see any limits or problems with creating a table for each user? and place all their data there?</span><br />
<br />
<span style="color: #0e101a;" class="mycode_color">I know for low numbers of user's thats not a big deal.</span><br />
<span style="color: #0e101a;" class="mycode_color">How about 10,000 tables?</span><br />
<br />
<br />
<span style="color: #0e101a;" class="mycode_color">The response:</span><br />
<span style="color: #0e101a;" class="mycode_color">There is always more than one way to model your data.</span><br />
<br />
<span style="color: #0e101a;" class="mycode_color">Method 1</span><br />
<span style="color: #0e101a;" class="mycode_color">You could use your cdbRecordID (primary key) for each user in the cdbUsers table as a linking key (foreign key) to records in another table.</span><br />
<br />
<span style="color: #0e101a;" class="mycode_color">cdbUsers table</span><br />
<span style="color: #0e101a;" class="mycode_color">Record 1: [a2ad3bc9-8ef8-4c36-9c4d-00d109600cd9] [Marco] [Polo]</span><br />
<br />
<br />
<span style="color: #0e101a;" class="mycode_color">someDataTable that contains data for all of your users</span><br />
<span style="color: #0e101a;" class="mycode_color">Record 34545 [0a43839f-ad5c-4089-a864-c6bfa10942be] [a2ad3bc9-8ef8-4c36-9c4d-00d109600cd9] [import] [data] [in] [these] [columns]</span><br />
<br />
<br />
<span style="color: #0e101a;" class="mycode_color">TableID:fbb12a0d-8189-4fb4-a906-12166445f54b</span><br />
<span style="color: #0e101a;" class="mycode_color">0a43839f-ad5c-4089-a864-c6bfa10942be</span><br />
<br />
<br />
<span style="color: #0e101a;" class="mycode_color">//Untested come code that should work:</span><br />
<span style="color: #0e101a;" class="mycode_color">//GET THE RECORD ID OF A PARTICULAR USER</span><br />
<span style="color: #0e101a;" class="mycode_color">local tOutputA, tRecordID</span><br />
<span style="color: #0e101a;" class="mycode_color">put cdb_query("email","=","<a href="mailto:marco@polo.com" class="mycode_email"><span style="color: #4a6ee0;" class="mycode_color">marco@polo.com</span></a>","cdbUsers","cloud","recordData") into tOutputA</span><br />
<span style="color: #0e101a;" class="mycode_color">put tOutputA["cdb"]["cdbRecordID"] into tRecordID</span><br />
<br />
<br />
<span style="color: #0e101a;" class="mycode_color">//USE THE cdbRecordID FROM THE FIRST QUERY TO FIND ALL RELATED DATA TO THIS USER</span><br />
<span style="color: #0e101a;" class="mycode_color">local tOutputA</span><br />
<span style="color: #0e101a;" class="mycode_color">put cdb_query("userForeignKey","=",tRecordID,"someDataTable","cloud","recordData") into tOutputA</span><br />
<br />
<span style="color: #0e101a;" class="mycode_color">//tOutputA will contain an array that for every record in the 'someDataTable' table that is related to your user. </span><br />
<span style="color: #0e101a;" class="mycode_color">//For this to work, every commit to this table needs you to include the foreign key value in each record for every user.</span><br />
<span style="color: #0e101a;" class="mycode_color">//Since the user is probably authenticated, you can get this value one time during their session and use it everywhere you need.</span><br />
<br />
<br />
<span style="color: #0e101a;" class="mycode_color">Method 2</span><br />
<span style="color: #0e101a;" class="mycode_color">You can store the tableID in the cdbUsers table as a foreign key.</span><br />
<span style="color: #0e101a;" class="mycode_color">The optimization is that you can read on a single table and know that all the data is related to that particular user. You will not need to query a table to find related data. </span><br />
<br />
<span style="color: #0e101a;" class="mycode_color">I am in favor of this model. The only negative is that a user can not create a table programmatically. It is something we intend to resolve. You could pre-create tables with a developer-signed app programmatically. If you get serious with this method, we can look at a longer-term solution to make this happen. </span><br />
<br />
<span style="color: #0e101a;" class="mycode_color">You can connect as many tables as you like to a particular user. Just create the foreign key columns in the cdbUsers table to track the tableIDs.</span><br />
<br />
<br />
<span style="color: #0e101a;" class="mycode_color">Limitations</span><br />
<span style="color: #0e101a;" class="mycode_color">The free account “Mist” and entry level account “Rain" are running on a shared cloud cluster. They are great for developing concepts and low-data consumption apps. They will not work out for you if you plan to have 10k or more users. </span><br />
<br />
<span style="color: #0e101a;" class="mycode_color">You will want to build a “Storm” account to customize the cluster just for your app. If you have 10k paying customers, our Storm plans are cheap. </span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[cdb_update changed/new data - best practices]]></title>
			<link>https://forums.livecloud.io/showthread.php?tid=437</link>
			<pubDate>Tue, 09 Jun 2020 19:55:02 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forums.livecloud.io/member.php?action=profile&uid=22">mark_talluto</a>]]></dc:creator>
			<guid isPermaLink="false">https://forums.livecloud.io/showthread.php?tid=437</guid>
			<description><![CDATA[One of our beloved LiveCloud developers asked a great question about cdb_update. He wanted to know how to efficiently update only data that has changed. Below is a copy of the email response. Please let us know if you have any questions about this solution.<br />
<br />
Suppose the following array (record):<br />
<br />
tInputA =<br />
[“firstName”]<br />
[“lastName”]<br />
[“age”]<br />
[“phone”]<br />
<br />
Existing record id "435756d6-0576-4a86-8d01-7557168f6528" contains:<br />
<br />
firstName: Tom<br />
lastName: Perkins<br />
age: 78<br />
Phone: 123-456-7890<br />
<br />
If you pass an array like: <br />
tInputA =<br />
[“firstName”][“Tom”]<br />
[“lastName”][“Perkins”]<br />
[“age”][“78”]<br />
[“phone”][“555-888-9999”]<br />
<br />
This will push an update to all the keys in this array even though some of the data may not have changed.<br />
<br />
If you pass an array like:<br />
tInputA =<br />
[“phone”][“555-888-9999”]<br />
<br />
You are only touching the “phone” key. The other data will stay as it is. The cloud call will be smaller and more efficient (...marginally). The question is how do you know that the phone data has has been updated?<br />
<br />
It sounds like you are looking to come up with a method to pass as little data as possible (optimization) by determining what has changed.<br />
This can be an important optimization if your array contains many keys. Or, it you may have heavy data in some of the keys. LiveCloud is not able to determine what is new for you without making a round trip to the cloud and compare. Solving this in your app is best.<br />
<br />
People solve this problem in different ways.<br />
<br />
Method #1: Develop a flag system to track which fields have been touched by your app<br />
Method #2: Use the set operations in LiveCode to compare the original array with the final version and see if changes have been made<br />
Method #3: Send the full array up using cdb_update and let LiveCloud push both new and old data into place<br />
Method #4: Pick up the changes in a field and call cdb_update as each field is updated with: closeField<br />
<br />
I am going to supply you the code to do Method #2 as it is not always apparent how to do this. <br />
Drop this code into a single button. Put breakpoints into the code so you can walk through it. Once you get the hang of it, you can use this API in your own code.<br />
<br />
<br />
—COPY ALL THE CODE BELOW TO A SINGLE BUTTON IN LIVECODE<br />
//&gt;GLOBALS<br />
global gArrayA1, gArrayA2<br />
<br />
<br />
on mouseUp<br />
     local tInputA, tRecordID<br />
     <br />
     --BUILD THE TWO ARRAYS TO COMPARE<br />
     buildArray1<br />
     buildArray2<br />
     <br />
     --CALL CUSTOM API TO COMPARE THE TWO ARRAYS<br />
     put compareTwoArrays(gArrayA1,gArrayA2) into tInputA<br />
     <br />
     --WE NEED TO CONVERT THIS ARRAY<br />
     --THE KEY AND VALUE NEED TO BE IN THE RIGHT PLACE<br />
     combine tInputA with lf and empty<br />
     split tInputA with lf and comma<br />
<br />
     --RECORD TO BE UPDATED<br />
     put "435756d6-0576-4a86-8d01-7557168f6528" into tRecordID<br />
     <br />
     --DO CLOUD UPDATE<br />
     cdb_update tInputA,"myTableName", tRecordID<br />
end mouseUp<br />
<br />
<br />
function compareTwoArrays pArray1, pArray2<br />
     local tArrayA3<br />
     <br />
     /* BREAKPOINT THROUGH THIS TO SEE WHAT IS HAPPENING STEP BY STEP */<br />
     <br />
     --TURN ARRAYS INTO A STRING<br />
     --WE ARE TAKING THE ELEMENT AND ITS VALUE AND SMASHING THEM TOGETHER<br />
     --gArrayA1 WOULD BE YOUR CURRENT CLOUD OR LOCAL RECORD<br />
     --gArrayA2 WOULD BE THE ARRAY CAPTURED FROM YOUR APP THAT MAY HAVE NEW OR UPDATED DATA<br />
     combine pArray1 with lf and comma<br />
     combine pArray2 with lf and comma<br />
     <br />
     --TURN STRING BACK INTO AN ARRAY<br />
     --WE WANT THE COMBINED KEY AND VALUE TO BE THE NEW ELEMENT<br />
     --THIS WILL MAKE IT EASY TO COMPARE THE TWO ARRAYS<br />
     --IT IS INTENDED THAT THE VALUE WILL BE EMPTY<br />
     split pArray1 with lf and empty<br />
     split pArray2 with lf and empty<br />
     <br />
     --WE DO A SET OPERATION TO FIND WHICH DATA IS NEW<br />
     --DIFFERENCE IS ONLY LOOKING AT THE ELEMENT, NOT THE VALUE OF THE KEY WHEN DOING ITS OPERATION<br />
     --WHATEVER IS LEFT IN THE tArrayA3 ARRAY IS NEW<br />
     difference pArray2 with pArray1 into tArrayA3<br />
     <br />
     return tArrayA3<br />
end compareTwoArrays<br />
<br />
<br />
on buildArray1<br />
     /* CHANGE THIS ARRAY TO MATCH YOUR TABLE */<br />
     put "Tom" into gArrayA1["firstName"]<br />
     put "Perkins" into gArrayA1["lastName"]<br />
     put "78" into gArrayA1["age"]<br />
     put "123-456-7890" into gArrayA1["phone"]<br />
end buildArray1<br />
<br />
<br />
on buildArray2<br />
     /* CHANGE THIS ARRAY TO MATCH YOUR TABLE */<br />
     put "555-888-0000" into gArrayA2["phone"]<br />
end buildArray2]]></description>
			<content:encoded><![CDATA[One of our beloved LiveCloud developers asked a great question about cdb_update. He wanted to know how to efficiently update only data that has changed. Below is a copy of the email response. Please let us know if you have any questions about this solution.<br />
<br />
Suppose the following array (record):<br />
<br />
tInputA =<br />
[“firstName”]<br />
[“lastName”]<br />
[“age”]<br />
[“phone”]<br />
<br />
Existing record id "435756d6-0576-4a86-8d01-7557168f6528" contains:<br />
<br />
firstName: Tom<br />
lastName: Perkins<br />
age: 78<br />
Phone: 123-456-7890<br />
<br />
If you pass an array like: <br />
tInputA =<br />
[“firstName”][“Tom”]<br />
[“lastName”][“Perkins”]<br />
[“age”][“78”]<br />
[“phone”][“555-888-9999”]<br />
<br />
This will push an update to all the keys in this array even though some of the data may not have changed.<br />
<br />
If you pass an array like:<br />
tInputA =<br />
[“phone”][“555-888-9999”]<br />
<br />
You are only touching the “phone” key. The other data will stay as it is. The cloud call will be smaller and more efficient (...marginally). The question is how do you know that the phone data has has been updated?<br />
<br />
It sounds like you are looking to come up with a method to pass as little data as possible (optimization) by determining what has changed.<br />
This can be an important optimization if your array contains many keys. Or, it you may have heavy data in some of the keys. LiveCloud is not able to determine what is new for you without making a round trip to the cloud and compare. Solving this in your app is best.<br />
<br />
People solve this problem in different ways.<br />
<br />
Method #1: Develop a flag system to track which fields have been touched by your app<br />
Method #2: Use the set operations in LiveCode to compare the original array with the final version and see if changes have been made<br />
Method #3: Send the full array up using cdb_update and let LiveCloud push both new and old data into place<br />
Method #4: Pick up the changes in a field and call cdb_update as each field is updated with: closeField<br />
<br />
I am going to supply you the code to do Method #2 as it is not always apparent how to do this. <br />
Drop this code into a single button. Put breakpoints into the code so you can walk through it. Once you get the hang of it, you can use this API in your own code.<br />
<br />
<br />
—COPY ALL THE CODE BELOW TO A SINGLE BUTTON IN LIVECODE<br />
//&gt;GLOBALS<br />
global gArrayA1, gArrayA2<br />
<br />
<br />
on mouseUp<br />
     local tInputA, tRecordID<br />
     <br />
     --BUILD THE TWO ARRAYS TO COMPARE<br />
     buildArray1<br />
     buildArray2<br />
     <br />
     --CALL CUSTOM API TO COMPARE THE TWO ARRAYS<br />
     put compareTwoArrays(gArrayA1,gArrayA2) into tInputA<br />
     <br />
     --WE NEED TO CONVERT THIS ARRAY<br />
     --THE KEY AND VALUE NEED TO BE IN THE RIGHT PLACE<br />
     combine tInputA with lf and empty<br />
     split tInputA with lf and comma<br />
<br />
     --RECORD TO BE UPDATED<br />
     put "435756d6-0576-4a86-8d01-7557168f6528" into tRecordID<br />
     <br />
     --DO CLOUD UPDATE<br />
     cdb_update tInputA,"myTableName", tRecordID<br />
end mouseUp<br />
<br />
<br />
function compareTwoArrays pArray1, pArray2<br />
     local tArrayA3<br />
     <br />
     /* BREAKPOINT THROUGH THIS TO SEE WHAT IS HAPPENING STEP BY STEP */<br />
     <br />
     --TURN ARRAYS INTO A STRING<br />
     --WE ARE TAKING THE ELEMENT AND ITS VALUE AND SMASHING THEM TOGETHER<br />
     --gArrayA1 WOULD BE YOUR CURRENT CLOUD OR LOCAL RECORD<br />
     --gArrayA2 WOULD BE THE ARRAY CAPTURED FROM YOUR APP THAT MAY HAVE NEW OR UPDATED DATA<br />
     combine pArray1 with lf and comma<br />
     combine pArray2 with lf and comma<br />
     <br />
     --TURN STRING BACK INTO AN ARRAY<br />
     --WE WANT THE COMBINED KEY AND VALUE TO BE THE NEW ELEMENT<br />
     --THIS WILL MAKE IT EASY TO COMPARE THE TWO ARRAYS<br />
     --IT IS INTENDED THAT THE VALUE WILL BE EMPTY<br />
     split pArray1 with lf and empty<br />
     split pArray2 with lf and empty<br />
     <br />
     --WE DO A SET OPERATION TO FIND WHICH DATA IS NEW<br />
     --DIFFERENCE IS ONLY LOOKING AT THE ELEMENT, NOT THE VALUE OF THE KEY WHEN DOING ITS OPERATION<br />
     --WHATEVER IS LEFT IN THE tArrayA3 ARRAY IS NEW<br />
     difference pArray2 with pArray1 into tArrayA3<br />
     <br />
     return tArrayA3<br />
end compareTwoArrays<br />
<br />
<br />
on buildArray1<br />
     /* CHANGE THIS ARRAY TO MATCH YOUR TABLE */<br />
     put "Tom" into gArrayA1["firstName"]<br />
     put "Perkins" into gArrayA1["lastName"]<br />
     put "78" into gArrayA1["age"]<br />
     put "123-456-7890" into gArrayA1["phone"]<br />
end buildArray1<br />
<br />
<br />
on buildArray2<br />
     /* CHANGE THIS ARRAY TO MATCH YOUR TABLE */<br />
     put "555-888-0000" into gArrayA2["phone"]<br />
end buildArray2]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Blobs and Datagrids]]></title>
			<link>https://forums.livecloud.io/showthread.php?tid=407</link>
			<pubDate>Sun, 12 Apr 2020 12:52:40 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forums.livecloud.io/member.php?action=profile&uid=62">sid</a>]]></dc:creator>
			<guid isPermaLink="false">https://forums.livecloud.io/showthread.php?tid=407</guid>
			<description><![CDATA[Hi Guys<br />
<br />
I have a few questions on BLOBS and datagrids and will appreciate some sample code here.<br />
<br />
I have managed to create a form with a datagrid on it , and a image object that retrieves the images from the cloud when a user hilites a line on the grid. This is designed as a cloudcall and not a local call , so its a tad slow.<br />
<br />
here is a vid on how this works :<a href="https://www.loom.com/share/d609c74551df48309f51723192353039" target="_blank" rel="noopener" class="mycode_url"> https://www.loom.com/share/d609c74551df48309f51723192353039</a><br />
<br />
here is the code:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>local  tBlobGridRef, tPathToBlob, theLine, theSelectedID, tPHtender<br />
<br />
getProp uSelectedPicID<br />
   <br />
   put the dgHilitedLines of me into theLine<br />
   return GetDataOfLine(theLine,"blobReference")<br />
   <br />
end uSelectedPicID<br />
<br />
<br />
on selectionChanged pHilitedIndex, pPrevHilitedIndex<br />
   <br />
   show widget "PHSpinner"<br />
   put empty into tBlobGridRef<br />
   put empty into tPathToBlob<br />
   <br />
   put the uSelectedPicID of group "Tenders" into theSelectedID<br />
   put cdb_readBlob(theSelectedID,"cloud") into tPathToBlob<br />
   set the filename of image "tenderPicViewer" to tPathToBlob<br />
   //set the text of image "tenderPicViewer" to tPathToBlob<br />
   put the text of image "PHTender" into tPHtender<br />
   if tPathToBlob is empty then set the text of image "tenderPicViewer" to tPHtender <br />
   hide widget "PHSpinner"<br />
   <br />
end selectionChanged<br />
  </code></div></div><br />
Here is  question 1. Its a cloud call but the path to the image ends up being a local path? Its pretty slow ,( perhaps because I'm living in a rural farm town) Does the system download the image if its a cloud based call or just look in the local Blobs table if it exists?<br />
<br />
so I tried to resize all images to under 10kb and that helped a lot. Much faster, so I tried to put the text of the image into a table key, (not a BLOB table) figuring I can just store the text into the key and then that should speed it up more if its just a 100x80 pixel .png thumbnail. LCM did not seem to allow this? can we actually do that? Or will it totally mess up the performance?<br />
<br />
Question 3 , Is it possible to put a thumbnail of a BLOB into a DataGrid? and if so, is it possible to only load the images that will be visible to the user (IE. only when the lines are visible on his screen. Will appreciate some help with this.<br />
I am designing a system with at least 70000 product items and God help a tablet trying to load ...lets say 30000 thumbnails if a query is run. It will probably die...although it will be interesting to test. So the idea is run a LCM Query and put the results into a DataGrid table with a BLOB in one of the columns.<br />
<br />
Question 4. Is it possible to have more than 1 Blobs table? because I feel that it important could separate things like documents and High Res images from thumbnails, because you do not want to sync the High Res Blob table with a thing like a POS system or a tablet.<br />
<br />
Would really appreciate some sample code for question 3<br />
<br />
I have to say that this is the easiest , most productive database design I have ever seen. I'm a total beginner and did not have to learn a single sql query with the code snippet feature . Thanks Livecloud !!!<br />
<br />
Keep safe everyone!<br />
Sid]]></description>
			<content:encoded><![CDATA[Hi Guys<br />
<br />
I have a few questions on BLOBS and datagrids and will appreciate some sample code here.<br />
<br />
I have managed to create a form with a datagrid on it , and a image object that retrieves the images from the cloud when a user hilites a line on the grid. This is designed as a cloudcall and not a local call , so its a tad slow.<br />
<br />
here is a vid on how this works :<a href="https://www.loom.com/share/d609c74551df48309f51723192353039" target="_blank" rel="noopener" class="mycode_url"> https://www.loom.com/share/d609c74551df48309f51723192353039</a><br />
<br />
here is the code:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>local  tBlobGridRef, tPathToBlob, theLine, theSelectedID, tPHtender<br />
<br />
getProp uSelectedPicID<br />
   <br />
   put the dgHilitedLines of me into theLine<br />
   return GetDataOfLine(theLine,"blobReference")<br />
   <br />
end uSelectedPicID<br />
<br />
<br />
on selectionChanged pHilitedIndex, pPrevHilitedIndex<br />
   <br />
   show widget "PHSpinner"<br />
   put empty into tBlobGridRef<br />
   put empty into tPathToBlob<br />
   <br />
   put the uSelectedPicID of group "Tenders" into theSelectedID<br />
   put cdb_readBlob(theSelectedID,"cloud") into tPathToBlob<br />
   set the filename of image "tenderPicViewer" to tPathToBlob<br />
   //set the text of image "tenderPicViewer" to tPathToBlob<br />
   put the text of image "PHTender" into tPHtender<br />
   if tPathToBlob is empty then set the text of image "tenderPicViewer" to tPHtender <br />
   hide widget "PHSpinner"<br />
   <br />
end selectionChanged<br />
  </code></div></div><br />
Here is  question 1. Its a cloud call but the path to the image ends up being a local path? Its pretty slow ,( perhaps because I'm living in a rural farm town) Does the system download the image if its a cloud based call or just look in the local Blobs table if it exists?<br />
<br />
so I tried to resize all images to under 10kb and that helped a lot. Much faster, so I tried to put the text of the image into a table key, (not a BLOB table) figuring I can just store the text into the key and then that should speed it up more if its just a 100x80 pixel .png thumbnail. LCM did not seem to allow this? can we actually do that? Or will it totally mess up the performance?<br />
<br />
Question 3 , Is it possible to put a thumbnail of a BLOB into a DataGrid? and if so, is it possible to only load the images that will be visible to the user (IE. only when the lines are visible on his screen. Will appreciate some help with this.<br />
I am designing a system with at least 70000 product items and God help a tablet trying to load ...lets say 30000 thumbnails if a query is run. It will probably die...although it will be interesting to test. So the idea is run a LCM Query and put the results into a DataGrid table with a BLOB in one of the columns.<br />
<br />
Question 4. Is it possible to have more than 1 Blobs table? because I feel that it important could separate things like documents and High Res images from thumbnails, because you do not want to sync the High Res Blob table with a thing like a POS system or a tablet.<br />
<br />
Would really appreciate some sample code for question 3<br />
<br />
I have to say that this is the easiest , most productive database design I have ever seen. I'm a total beginner and did not have to learn a single sql query with the code snippet feature . Thanks Livecloud !!!<br />
<br />
Keep safe everyone!<br />
Sid]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Blob Viewer Stack to incorporate into projects]]></title>
			<link>https://forums.livecloud.io/showthread.php?tid=399</link>
			<pubDate>Wed, 08 Apr 2020 16:19:44 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forums.livecloud.io/member.php?action=profile&uid=62">sid</a>]]></dc:creator>
			<guid isPermaLink="false">https://forums.livecloud.io/showthread.php?tid=399</guid>
			<description><![CDATA[Hi Guys<br />
<br />
I was wondering if its possible to release a BLOB viewer stack that people can use to incorporate into their projects?<br />
<br />
Very similar to the login stack that you guys provide-, which makes it easy to get the basis of a projects started.<br />
<br />
then all devs have to do is pass a BLOB id in the stack to and you have a Built in BLOB viewer from your own livecloud application.<br />
<br />
you could also put it into the samples stack or the page that you use to export your toolkit. You can also add a button to replace the BLOB<br />
<br />
that would be a great feature<br />
<br />
Sid]]></description>
			<content:encoded><![CDATA[Hi Guys<br />
<br />
I was wondering if its possible to release a BLOB viewer stack that people can use to incorporate into their projects?<br />
<br />
Very similar to the login stack that you guys provide-, which makes it easy to get the basis of a projects started.<br />
<br />
then all devs have to do is pass a BLOB id in the stack to and you have a Built in BLOB viewer from your own livecloud application.<br />
<br />
you could also put it into the samples stack or the page that you use to export your toolkit. You can also add a button to replace the BLOB<br />
<br />
that would be a great feature<br />
<br />
Sid]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Query cloud, modify a single key, update cloud]]></title>
			<link>https://forums.livecloud.io/showthread.php?tid=391</link>
			<pubDate>Wed, 01 Apr 2020 17:49:33 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forums.livecloud.io/member.php?action=profile&uid=22">mark_talluto</a>]]></dc:creator>
			<guid isPermaLink="false">https://forums.livecloud.io/showthread.php?tid=391</guid>
			<description><![CDATA[This code will demonstrate how to query cloud data for a specific key and value. It will then update that value for all the matching records and update the cloud.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>on mouseUp<br />
    local tInputA, tOutputA, tUpdatedLastName, tTableID<br />
   <br />
    put "Franklin" into tUpdatedLastName<br />
    put cdb_tableID("Agents") into tTableID<br />
   <br />
    --QUERY FOR MATCHING DATA<br />
    put cdb_query("lastName","=","Talluto","Agents","cloud","recordList") into tOutputA<br />
   <br />
    --REPEAT THROUGH EACH RECORD AND UPDATE THE 'lastName' VALUE FOR EACH RECORD FROM THE QUERY<br />
    repeat for each line xRecordID in tOutputA<br />
         put tUpdatedLastName into tInputA[tTableID][xRecordID]["lastName"]<br />
    end repeat<br />
   <br />
    --UPDATE DATA IN THE CLOUD<br />
    cdb_batchUpdate tInputA, "cloud"<br />
end mouseUp</code></div></div>]]></description>
			<content:encoded><![CDATA[This code will demonstrate how to query cloud data for a specific key and value. It will then update that value for all the matching records and update the cloud.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>on mouseUp<br />
    local tInputA, tOutputA, tUpdatedLastName, tTableID<br />
   <br />
    put "Franklin" into tUpdatedLastName<br />
    put cdb_tableID("Agents") into tTableID<br />
   <br />
    --QUERY FOR MATCHING DATA<br />
    put cdb_query("lastName","=","Talluto","Agents","cloud","recordList") into tOutputA<br />
   <br />
    --REPEAT THROUGH EACH RECORD AND UPDATE THE 'lastName' VALUE FOR EACH RECORD FROM THE QUERY<br />
    repeat for each line xRecordID in tOutputA<br />
         put tUpdatedLastName into tInputA[tTableID][xRecordID]["lastName"]<br />
    end repeat<br />
   <br />
    --UPDATE DATA IN THE CLOUD<br />
    cdb_batchUpdate tInputA, "cloud"<br />
end mouseUp</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Query Builder and Code Snippet]]></title>
			<link>https://forums.livecloud.io/showthread.php?tid=366</link>
			<pubDate>Mon, 02 Mar 2020 21:08:22 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forums.livecloud.io/member.php?action=profile&uid=33">efrain.c</a>]]></dc:creator>
			<guid isPermaLink="false">https://forums.livecloud.io/showthread.php?tid=366</guid>
			<description><![CDATA[Hi everyone,<br />
<br />
We've received a few questions regarding query. This video shows how you can use the query builder and code snippet to build a query and generate the code needed to perform the query: <a href="https://youtu.be/6g2pFEvdLcc" target="_blank" rel="noopener" class="mycode_url">https://youtu.be/6g2pFEvdLcc</a><br />
<br />
You can then take the code from the code snippet and use the output of the query to generate a list of names as follows:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>local tInputA, tOutputA, tList<br />
<br />
put cdb_query("trip","=","trip1","testTable","cloud","recordData") into tOutputA<br />
<br />
//EACH KEY OF tOutputA CONTAINS THE recordID OF A RECORD THAT MATCHES THE QUERY CRITERIA<br />
//WE REPEAT THROUGH EACH KEY TO ACCESS THE DATA IN EACH RECORD<br />
repeat for each key xRecordID in tOutputA<br />
     //GRAB THE NAME OF THE PERSON IN THIS RECORD TO CREATE A LIST<br />
     put tOutputA[xRecordID]["person"] &amp; lf after tList<br />
end repeat<br />
<br />
//DELETE TRAILING LF<br />
delete char -1 of tList</code></div></div><br />
We hope examples like this with short videos will be helpful. Let us know if there's a topic you would like us to cover.]]></description>
			<content:encoded><![CDATA[Hi everyone,<br />
<br />
We've received a few questions regarding query. This video shows how you can use the query builder and code snippet to build a query and generate the code needed to perform the query: <a href="https://youtu.be/6g2pFEvdLcc" target="_blank" rel="noopener" class="mycode_url">https://youtu.be/6g2pFEvdLcc</a><br />
<br />
You can then take the code from the code snippet and use the output of the query to generate a list of names as follows:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>local tInputA, tOutputA, tList<br />
<br />
put cdb_query("trip","=","trip1","testTable","cloud","recordData") into tOutputA<br />
<br />
//EACH KEY OF tOutputA CONTAINS THE recordID OF A RECORD THAT MATCHES THE QUERY CRITERIA<br />
//WE REPEAT THROUGH EACH KEY TO ACCESS THE DATA IN EACH RECORD<br />
repeat for each key xRecordID in tOutputA<br />
     //GRAB THE NAME OF THE PERSON IN THIS RECORD TO CREATE A LIST<br />
     put tOutputA[xRecordID]["person"] &amp; lf after tList<br />
end repeat<br />
<br />
//DELETE TRAILING LF<br />
delete char -1 of tList</code></div></div><br />
We hope examples like this with short videos will be helpful. Let us know if there's a topic you would like us to cover.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[cdb_batchSync]]></title>
			<link>https://forums.livecloud.io/showthread.php?tid=189</link>
			<pubDate>Fri, 11 Oct 2019 19:50:42 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forums.livecloud.io/member.php?action=profile&uid=22">mark_talluto</a>]]></dc:creator>
			<guid isPermaLink="false">https://forums.livecloud.io/showthread.php?tid=189</guid>
			<description><![CDATA[Here is some sample code on how to use cdb_batchSync<br />
<br />
//THIS API WILL SYNC MULITPLE TABLES AT ONCE<br />
//pInputA: This array contains primary keys of tableID. The secondary keys are <br />
//(cdbRecordID,source,allowDeletes,detectCollisions)<br />
<br />
—REPEAT THROUGH ALL TABLES AND BUILD AND INPUT ARRAY<br />
—THIS EXAMPLE WILL DO FULL TABLE SYNCS<br />
—YOU COULD SWITCH OUT THE ‘*’ FOR LINE DELIM RECORD IDS IF YOU WANT TO DO PARTIAL SYNCS<br />
repeat for each line xTableID in cdb_tableID("*")<br />
  put "*" into tInputA[xTableID]["cdbRecordID"]<br />
  put “cloud" into tInputA[xTableID]["source"]<br />
  put true into tInputA[xTableID]["allowDeletes"]<br />
  put true into tInputA[xTableID]["detectCollisions"]<br />
end repeat<br />
<br />
put cdb_batchSync(tInputA) into tResults<br />
if not cdb_result() then<br />
  put "Error:" &amp;&amp; cdb_result("response")<br />
end if]]></description>
			<content:encoded><![CDATA[Here is some sample code on how to use cdb_batchSync<br />
<br />
//THIS API WILL SYNC MULITPLE TABLES AT ONCE<br />
//pInputA: This array contains primary keys of tableID. The secondary keys are <br />
//(cdbRecordID,source,allowDeletes,detectCollisions)<br />
<br />
—REPEAT THROUGH ALL TABLES AND BUILD AND INPUT ARRAY<br />
—THIS EXAMPLE WILL DO FULL TABLE SYNCS<br />
—YOU COULD SWITCH OUT THE ‘*’ FOR LINE DELIM RECORD IDS IF YOU WANT TO DO PARTIAL SYNCS<br />
repeat for each line xTableID in cdb_tableID("*")<br />
  put "*" into tInputA[xTableID]["cdbRecordID"]<br />
  put “cloud" into tInputA[xTableID]["source"]<br />
  put true into tInputA[xTableID]["allowDeletes"]<br />
  put true into tInputA[xTableID]["detectCollisions"]<br />
end repeat<br />
<br />
put cdb_batchSync(tInputA) into tResults<br />
if not cdb_result() then<br />
  put "Error:" &amp;&amp; cdb_result("response")<br />
end if]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[code to unpack query array to tab-delimited data?]]></title>
			<link>https://forums.livecloud.io/showthread.php?tid=96</link>
			<pubDate>Mon, 19 Aug 2019 19:26:11 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forums.livecloud.io/member.php?action=profile&uid=55">sltfn</a>]]></dc:creator>
			<guid isPermaLink="false">https://forums.livecloud.io/showthread.php?tid=96</guid>
			<description><![CDATA[Hello. I am very new to and still much in the dark about arrays. I am looking for efficient code to unpack the output from a query to lines of tab-delimited data (one record per line). Here is the code I've come up with so far. I'd guess there MUST be a more efficient approach.<br />
<br />
on mouseup<br />
## query constructed above<br />
 put cdb_batchQuery(tInputA,"cloud","logicalAND","recordData") into tOutputA<br />
 put flattenArray( tOutputA) into flattened -- see flattenArray function below<br />
end mouseup<br />
<br />
function flattenArray A , d1, d2, T,  X<br />
   if T is empty then<br />
      if d1 is empty then put cr into d1<br />
      if d2 is empty then put tab into d2<br />
   end if<br />
   if A is not an array then return T  &amp; X &amp; A &amp; d1<br />
   repeat for each key K in A<br />
      put flattenArray( A[K],  d1, d2, T,  X &amp; K &amp; d2 )  into T<br />
   end repeat<br />
end flattenArray<br />
<br />
This yields the queried records in this format (just one record of many shown here).<br />
<br />
[CDB Table ID]    1    [CDB Record ID]    ATTRIBUTES    fopn<br />
[CDB Table ID]    1    [CDB Record ID]    LAST_NAME    Jordan<br />
[CDB Table ID]    1    [CDB Record ID]    STATUS    linnm<br />
[CDB Table ID]    1    [CDB Record ID]    RANK    2<br />
[CDB Table ID]    1    [CDB Record ID]    CITY    San Francisco<br />
[CDB Table ID]    1    [CDB Record ID]    YEAR    2019<br />
[CDB Table ID]    1    [CDB Record ID]    ROLE    5<br />
[CDB Table ID]    1    [CDB Record ID]    NAME    Sam Jordan<br />
[CDB Table ID]    1    [CDB Record ID]    DATE    2019-02-17<br />
[CDB Table ID]    1    [CDB Record ID]    cdb    cdbDateModified    1562677087<br />
[CDB Table ID]    1    [CDB Record ID]    cdb    cdbDateCreated    1562677087<br />
[CDB Table ID]    1    [CDB Record ID]    cdb    cdbRecordID    [CDB Record ID]<br />
[CDB Table ID]    1    [CDB Record ID]    cdb    cdbTableID    [CDB Table ID]<br />
[CDB Table ID]    1    [CDB Record ID]    cdb    cdbRecordVersion    1<br />
[CDB Table ID]    1    [CDB Record ID]    cdb    cdbTableName    stats<br />
[CDB Table ID]    1    [CDB Record ID]    cdb    cdbCloudSyncVersion    1<br />
<br />
I then loop through the lines and remove the first two columns, then I filter out the lines with "cdb" keys not needed in my app as long as I preserve the record ID, and get a list of records like this…<br />
<br />
[CDB Record ID]    ATTRIBUTES    fopn<br />
[CDB Record ID]    LAST_NAME    Jordan<br />
[CDB Record ID]    STATUS    linnm<br />
[CDB Record ID]    RANK    2<br />
[CDB Record ID]    CITY    San Francisco<br />
[CDB Record ID]    YEAR    2019<br />
[CDB Record ID]    ROLE    5<br />
[CDB Record ID]    NAME    Sam Jordan<br />
[CDB Record ID]    DATE    2019-02-17<br />
<br />
Finally, I loop through the lines again and put the data for each record into the tab-delimited format I need, which is something roughly like this…<br />
<br />
fopn    Jordan    linnm    2    San Francisco    2019    Sam Jordan    2019-02-17    [CDB Record ID]<br />
ucpn    Smith    linnm    1    Los Angeles    2019    Susan Smith    2019-06-23    [CDB Record ID]<br />
<br />
efrain.c and mark_talluto's suggestions for batch record creation and updates were VERY helpful. Thank you.<br />
<br />
Does anybody have a simpler solution for this problem? Pretty sure there must be one (many). Thanks in advance.]]></description>
			<content:encoded><![CDATA[Hello. I am very new to and still much in the dark about arrays. I am looking for efficient code to unpack the output from a query to lines of tab-delimited data (one record per line). Here is the code I've come up with so far. I'd guess there MUST be a more efficient approach.<br />
<br />
on mouseup<br />
## query constructed above<br />
 put cdb_batchQuery(tInputA,"cloud","logicalAND","recordData") into tOutputA<br />
 put flattenArray( tOutputA) into flattened -- see flattenArray function below<br />
end mouseup<br />
<br />
function flattenArray A , d1, d2, T,  X<br />
   if T is empty then<br />
      if d1 is empty then put cr into d1<br />
      if d2 is empty then put tab into d2<br />
   end if<br />
   if A is not an array then return T  &amp; X &amp; A &amp; d1<br />
   repeat for each key K in A<br />
      put flattenArray( A[K],  d1, d2, T,  X &amp; K &amp; d2 )  into T<br />
   end repeat<br />
end flattenArray<br />
<br />
This yields the queried records in this format (just one record of many shown here).<br />
<br />
[CDB Table ID]    1    [CDB Record ID]    ATTRIBUTES    fopn<br />
[CDB Table ID]    1    [CDB Record ID]    LAST_NAME    Jordan<br />
[CDB Table ID]    1    [CDB Record ID]    STATUS    linnm<br />
[CDB Table ID]    1    [CDB Record ID]    RANK    2<br />
[CDB Table ID]    1    [CDB Record ID]    CITY    San Francisco<br />
[CDB Table ID]    1    [CDB Record ID]    YEAR    2019<br />
[CDB Table ID]    1    [CDB Record ID]    ROLE    5<br />
[CDB Table ID]    1    [CDB Record ID]    NAME    Sam Jordan<br />
[CDB Table ID]    1    [CDB Record ID]    DATE    2019-02-17<br />
[CDB Table ID]    1    [CDB Record ID]    cdb    cdbDateModified    1562677087<br />
[CDB Table ID]    1    [CDB Record ID]    cdb    cdbDateCreated    1562677087<br />
[CDB Table ID]    1    [CDB Record ID]    cdb    cdbRecordID    [CDB Record ID]<br />
[CDB Table ID]    1    [CDB Record ID]    cdb    cdbTableID    [CDB Table ID]<br />
[CDB Table ID]    1    [CDB Record ID]    cdb    cdbRecordVersion    1<br />
[CDB Table ID]    1    [CDB Record ID]    cdb    cdbTableName    stats<br />
[CDB Table ID]    1    [CDB Record ID]    cdb    cdbCloudSyncVersion    1<br />
<br />
I then loop through the lines and remove the first two columns, then I filter out the lines with "cdb" keys not needed in my app as long as I preserve the record ID, and get a list of records like this…<br />
<br />
[CDB Record ID]    ATTRIBUTES    fopn<br />
[CDB Record ID]    LAST_NAME    Jordan<br />
[CDB Record ID]    STATUS    linnm<br />
[CDB Record ID]    RANK    2<br />
[CDB Record ID]    CITY    San Francisco<br />
[CDB Record ID]    YEAR    2019<br />
[CDB Record ID]    ROLE    5<br />
[CDB Record ID]    NAME    Sam Jordan<br />
[CDB Record ID]    DATE    2019-02-17<br />
<br />
Finally, I loop through the lines again and put the data for each record into the tab-delimited format I need, which is something roughly like this…<br />
<br />
fopn    Jordan    linnm    2    San Francisco    2019    Sam Jordan    2019-02-17    [CDB Record ID]<br />
ucpn    Smith    linnm    1    Los Angeles    2019    Susan Smith    2019-06-23    [CDB Record ID]<br />
<br />
efrain.c and mark_talluto's suggestions for batch record creation and updates were VERY helpful. Thank you.<br />
<br />
Does anybody have a simpler solution for this problem? Pretty sure there must be one (many). Thanks in advance.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[The Code Sample Thread]]></title>
			<link>https://forums.livecloud.io/showthread.php?tid=61</link>
			<pubDate>Fri, 26 Jul 2019 03:35:15 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forums.livecloud.io/member.php?action=profile&uid=40">clarencemartin</a>]]></dc:creator>
			<guid isPermaLink="false">https://forums.livecloud.io/showthread.php?tid=61</guid>
			<description><![CDATA[Thanks, Canela Software for this Thread. I hope that the users of LCM and the forum will find this a useful thread.<br />
I will be posting things that I find and hope to get clarification of the LCM API's.]]></description>
			<content:encoded><![CDATA[Thanks, Canela Software for this Thread. I hope that the users of LCM and the forum will find this a useful thread.<br />
I will be posting things that I find and hope to get clarification of the LCM API's.]]></content:encoded>
		</item>
	</channel>
</rss>