<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Releasable Revolution &#187; General</title>
	<atom:link href="http://www.bluemangolearning.com/revolution/category/general/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bluemangolearning.com/revolution</link>
	<description>Creating release quality applications with LiveCode</description>
	<lastBuildDate>Tue, 17 May 2011 19:15:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>RunRevLive 09 Resources</title>
		<link>http://www.bluemangolearning.com/revolution/2010/03/runrevlive-09-resources/</link>
		<comments>http://www.bluemangolearning.com/revolution/2010/03/runrevlive-09-resources/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 15:11:30 +0000</pubDate>
		<dc:creator>trevordevore</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.bluemangolearning.com/revolution/?p=668</guid>
		<description><![CDATA[I took down the original page of links to my session materials that  I posted for the RunRevLive 09 conference so I&#8217;m reposting the content here. Behaviors and Custom Controls Behavior Helper Plugin http://www.bluemangolearning.com/download/revolution/tools/BehaviorHelper.rev.zip Custom Control Helper Plugin http://www.bluemangolearning.com/download/revolution/tools/CustomControlHelper.rev.zip Behaviors &#38; Custom Controls Stacks http://www.bluemangolearning.com/download/revolution/tools/behaviors_customcontrols.zip Instructions Showing How To Install a Plugin http://revolution.screenstepslive.com/spaces/revolution/manuals/plugins/lessons/5489-Installing-the-Plugin Password Font [...]]]></description>
			<content:encoded><![CDATA[<p>I took down the original page of links to my session materials that  I posted for the RunRevLive 09 conference so I&#8217;m reposting the content here.</p>
<h2>Behaviors and Custom Controls</h2>
<h3>Behavior Helper Plugin</h3>
<p><a href="http://www.bluemangolearning.com/download/revolution/tools/BehaviorHelper.rev.zip">http://www.bluemangolearning.com/download/revolution/tools/BehaviorHelper.rev.zip</a></p>
<h3>Custom Control Helper Plugin</h3>
<p><a href="http://www.bluemangolearning.com/download/revolution/tools/CustomControlHelper.rev.zip">http://www.bluemangolearning.com/download/revolution/tools/CustomControlHelper.rev.zip</a></p>
<h3>Behaviors &amp; Custom Controls Stacks</h3>
<p><a href="http://www.bluemangolearning.com/download/revolution/tools/behaviors_customcontrols.zip">http://www.bluemangolearning.com/download/revolution/tools/behaviors_customcontrols.zip</a></p>
<h3>Instructions Showing How To Install a Plugin</h3>
<p><a href="http://revolution.screenstepslive.com/spaces/revolution/manuals/plugins/lessons/5489-Installing-the-Plugin">http://revolution.screenstepslive.com/spaces/revolution/manuals/plugins/lessons/5489-Installing-the-Plugin</a></p>
<h3>Password Font</h3>
<p><a href="http://www.bluemangolearning.com/download/revolution/tutorials/passwordentry.zip">http://www.bluemangolearning.com/download/revolution/tutorials/passwordentry.zip</a></p>
<h2>Presenting Data with the Data Grid</h2>
<h3>Data Grid Sample MP3 Library</h3>
<p><a href="http://www.bluemangolearning.com/download/revolution/tools/data_grid_sample_mp3_library.zip">http://www.bluemangolearning.com/download/revolution/tools/data_grid_sample_mp3_library.zip</a></p>
<h3>Creating a Music Library Interface Part I</h3>
<p><a href="http://revolution.screenstepslive.com/spaces/public_staging/manuals/740">http://revolution.screenstepslive.com/spaces/public_staging/manuals/740</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluemangolearning.com/revolution/2010/03/runrevlive-09-resources/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Displaying Placeholder Text In a Field</title>
		<link>http://www.bluemangolearning.com/revolution/2009/08/displaying-placeholder-text-in-a-field/</link>
		<comments>http://www.bluemangolearning.com/revolution/2009/08/displaying-placeholder-text-in-a-field/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 18:13:45 +0000</pubDate>
		<dc:creator>trevordevore</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Unfinished]]></category>

		<guid isPermaLink="false">http://www.bluemangolearning.com/revolution/?p=211</guid>
		<description><![CDATA[Have you ever wanted to display the grey text that describes what a text field does? Placeholder text can be very useful as it provides a visual queue to the user about what the field does while not requiring any extra space in your UI. Using custom properties and behaviors (new in Revolution 3.5) you [...]]]></description>
			<content:encoded><![CDATA[<p>Have you ever wanted to display the grey text that describes what a text field does?</p>
<div id="attachment_212" class="wp-caption alignnone" style="width: 205px"><a href="http://www.bluemangolearning.com/revolution/wp-content/uploads/2009/07/placeholder_text.png"><img class="size-full wp-image-212" title="Placeholder Text Example" src="http://www.bluemangolearning.com/revolution/wp-content/uploads/2009/07/placeholder_text.png" alt="Placeholder Text Example" width="195" height="70" /></a><p class="wp-caption-text">Google search field in Safari</p></div>
<p>Placeholder text can be very useful as it provides a visual queue to the user about what the field does while not requiring any extra space in your UI.</p>
<p>Using custom properties and behaviors (new in Revolution 3.5) you can easily add this feature to fields in your applications. See the lesson <a href="http://revolution.screenstepslive.com/spaces/revolution/buckets/tutorials/lessons/5706-How-To-Create-Field-Placeholder-Text-Using-Behaviors">How To Create Field Placeholder Text Using Behaviors</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluemangolearning.com/revolution/2009/08/displaying-placeholder-text-in-a-field/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Libraries &amp; Error Reporting</title>
		<link>http://www.bluemangolearning.com/revolution/2009/07/libraries-error-reporting/</link>
		<comments>http://www.bluemangolearning.com/revolution/2009/07/libraries-error-reporting/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 12:00:18 +0000</pubDate>
		<dc:creator>trevordevore</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Error Reporting]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[Ready to Publish]]></category>

		<guid isPermaLink="false">http://www.bluemangolearning.com/revolution/?p=223</guid>
		<description><![CDATA[Lately I&#8217;ve been working with a lot of web services in ScreenSteps. ScreenSteps integrates with services like WordPress, TypePad, Confluence, MindTouch and ScreenSteps Live. When I sat down to write libraries for each of these integrations I wrestled with how I wanted to handle error reporting. Each handler that retrieved data from a web service [...]]]></description>
			<content:encoded><![CDATA[<p>Lately I&#8217;ve been working with a lot of web services in ScreenSteps. ScreenSteps integrates with services like WordPress, TypePad, Confluence, MindTouch and ScreenSteps Live. When I sat down to write libraries for each of these integrations I wrestled with how I wanted to handle error reporting. Each handler that retrieved data from a web service would return data that I needed to process. At the same time, I also needed to know if something went wrong while communicating with the web service.</p>
<p>I considered 4 possible approaches.</p>
<p><strong>1) Handlers That Return Valid Data or Errors</strong></p>
<p>If you have ever used one of the Revolution externals such as revDB or revXML then you are familiar with this technique. The handlers in these externals can return valid data or a string that starts with <em>revdberr,</em> or <em>revxmlerr,</em>. This is what a WordPress library handler might look like using this method:</p>
<pre class="source-code">
<span class="entity entity_name entity_name_handler entity_name_handler_rev">put</span><span> wp_getCategories</span><span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_rev">(</span><span>pParamsA</span><span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_rev">)</span><span> </span><span class="keyword keyword_control keyword_control_rev">into</span><span> theData</span>
<span class="keyword keyword_control keyword_control_rev">if</span><span> theData </span><span class="keyword keyword_control keyword_control_rev">begins</span><span> </span><span class="keyword keyword_control keyword_control_rev">with</span><span> </span><span class="string string_quoted string_quoted_double string_quoted_double_transcript">&quot;wperr,&quot;</span><span> then</span>
<span>   </span><span class="comment comment_line comment_line_number-sign comment_line_number-sign_rev">// item 2 to -1 of theData contains an error</span>
<span class="keyword keyword_control keyword_control_rev">else</span>
<span>   </span><span class="comment comment_line comment_line_number-sign comment_line_number-sign_rev">// theData contains valid data</span>
<span class="keyword keyword_control keyword_control_rev">end</span><span> </span><span class="keyword keyword_control keyword_control_rev">if</span>
</pre>
<p><strong>2) Function That Returns Last Error Generated By Library</strong></p>
<p>When working with libraries another option is to have the library log any errors internally and then have a function that returns the last error generated by the library. This is what a WordPress library handler might look like using this method:</p>
<pre class="source-code">
<span class="entity entity_name entity_name_handler entity_name_handler_rev">put</span><span> wp_getCategories</span><span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_rev">(</span><span>pParamsA</span><span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_rev">)</span><span> </span><span class="keyword keyword_control keyword_control_rev">into</span><span> theData</span>
<span class="entity entity_name entity_name_handler entity_name_handler_rev">put</span><span> wp_lastError</span><span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_rev">()</span><span> </span><span class="keyword keyword_control keyword_control_rev">into</span><span> theError</span>
<span class="keyword keyword_control keyword_control_rev">if</span><span> theError </span><span class="keyword keyword_control keyword_control_rev">is</span><span> </span><span class="keyword keyword_control keyword_control_rev">not</span><span> </span><span class="keyword keyword_control keyword_control_rev">empty</span><span> then</span>
<span>   </span><span class="comment comment_line comment_line_number-sign comment_line_number-sign_rev">// Something bad happened</span>
<span class="keyword keyword_control keyword_control_rev">else</span>
<span>   </span><span class="comment comment_line comment_line_number-sign comment_line_number-sign_rev">// Do something with theData</span>
<span class="keyword keyword_control keyword_control_rev">end</span><span> </span><span class="keyword keyword_control keyword_control_rev">if</span>
</pre>
<p><strong>3) Throw Errors</strong><br />
Another option is to throw any errors that occur within one of the library handlers. This requires wrapping any calls to the library handlers in try/catch statements.</p>
<pre class="source-code">
<span class="keyword keyword_control keyword_control_rev">try</span>
<span>   </span><span class="entity entity_name entity_name_handler entity_name_handler_rev">put</span><span> wp_getCategories</span><span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_rev">(</span><span>pParamsA</span><span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_rev">)</span><span> </span><span class="keyword keyword_control keyword_control_rev">into</span><span> theData</span>
<span class="keyword keyword_control keyword_control_rev">catch</span><span> theError</span>
<span class="keyword keyword_control keyword_control_rev">end</span><span> </span><span class="keyword keyword_control keyword_control_rev">try</span>

<span class="keyword keyword_control keyword_control_rev">if</span><span> theError </span><span class="keyword keyword_control keyword_control_rev">is</span><span> </span><span class="keyword keyword_control keyword_control_rev">not</span><span> </span><span class="keyword keyword_control keyword_control_rev">empty</span><span> then</span>
<span>   </span><span class="comment comment_line comment_line_number-sign comment_line_number-sign_rev">// Something bad happened</span>
<span class="keyword keyword_control keyword_control_rev">else</span>
<span>   </span><span class="comment comment_line comment_line_number-sign comment_line_number-sign_rev">// theData contains valid data</span>
<span class="keyword keyword_control keyword_control_rev">end</span><span> </span><span class="keyword keyword_control keyword_control_rev">if</span>
</pre>
<p><strong>4) Place Errors in <em>the result</em> and Return Data In <em>it</em></strong></p>
<p>This is the approach that the Revolution engine uses in many cases. For example, if you use the <em>post</em> command any errors are reported in <em>the result</em> and the data returned from the web server is placed in the <em>it</em> variable. Likewise, this is how a command like <em>decrypt</em> behaves. This is what a WordPress library handler might look like using this method:</p>
<pre class="source-code">
<span>wp_getCategories pParamsA</span>
<span class="entity entity_name entity_name_handler entity_name_handler_rev">put</span><span> </span><span class="keyword keyword_control keyword_control_rev">the</span><span> </span><span class="entity entity_name entity_name_handler entity_name_handler_rev">result</span><span> </span><span class="keyword keyword_control keyword_control_rev">into</span><span> theError</span>

<span class="keyword keyword_control keyword_control_rev">if</span><span> theError </span><span class="keyword keyword_control keyword_control_rev">is</span><span> </span><span class="keyword keyword_control keyword_control_rev">empty</span><span> then</span>
<span>   </span><span class="comment comment_line comment_line_number-sign comment_line_number-sign_rev">// 'it' contains data returned from the server</span>
<span class="keyword keyword_control keyword_control_rev">else</span>
<span>   </span><span class="comment comment_line comment_line_number-sign comment_line_number-sign_rev">// Something bad happened</span>
<span class="keyword keyword_control keyword_control_rev">end</span><span> </span><span class="keyword keyword_control keyword_control_rev">if</span>
</pre>
<p>I&#8217;ve never liked option (1) as I don&#8217;t think that mixing error reporting and results is a good idea. What if the actual value started with your error string? Likely? No. Possible? Yes.</p>
<p>Option (2) would probably work fine as I don&#8217;t think you would get invalid results if you had multiple calls to the library going on with send in time calls (I could be wrong but I didn&#8217;t go with this approach so I didn&#8217;t test it). I just don&#8217;t care for that sort of API.</p>
<p>Option (3) requires too many lines of extra code for my taste and it doesn&#8217;t seem appropriate to throw an error if communication with the web server fails for some reason. Throwing errors should be reserved for circumstances where the developer has passed in bad data that he should have cleansed ahead of time.</p>
<p>That left me with option (4) and this is the option I ended up using. The reason I like option (4) is that this is how the engine behaves in a number of places. Errors and data are clearly separated and I like using a &#8220;native&#8221; approach as calls to my library handlers will read the same as calls to engine handlers.</p>
<p>There was only one problem left. How could I set the <em>it</em> variable in a command? Revolution only supports setting <em>the result</em> from a command. It turns out that you can set variables in calling handlers by using <em>the debugContext</em> so I whipped up a little handler called <em>SetValueOfItInCaller</em> that did just what I needed. Take a look at the <a href="http://revolution.screenstepslive.com/spaces/revolution/buckets/tutorials/lessons/923-Write-A-Command-That-Sets-the-result-And-it-">Write a Command That Sets &#8216;the result&#8217; And &#8216;it&#8217; </a>lesson to see the solution.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluemangolearning.com/revolution/2009/07/libraries-error-reporting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Loading Stack Files Into Memory</title>
		<link>http://www.bluemangolearning.com/revolution/2009/07/loading-stack-files-into-memory/</link>
		<comments>http://www.bluemangolearning.com/revolution/2009/07/loading-stack-files-into-memory/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 12:20:03 +0000</pubDate>
		<dc:creator>trevordevore</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.bluemangolearning.com/revolution/?p=208</guid>
		<description><![CDATA[In my applications I like to verify that all stack files exist on disk when the application launches. If any of the required stack files are missing then I alert the user and quit the application. Most developers are familiar with using go [invisible] stack &#34;/path/to/stack&#34; to load a stack file into memory. But &#8216;go [...]]]></description>
			<content:encoded><![CDATA[<p>In my applications I like to verify that all stack files exist on disk when the application launches. If any of the required stack files are missing then I alert the user and quit the application.</p>
<p>Most developers are familiar with using</p>
<pre class="source-code">
<span class="entity entity_name entity_name_handler entity_name_handler_rev">go</span><span> </span><span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_rev">[</span><span class="support support_command support_command_rev">invisible</span><span class="keyword keyword_operator keyword_operator_symbolic keyword_operator_symbolic_rev">]</span><span> </span><span class="keyword keyword_control keyword_control_rev">stack</span><span> </span><span class="string string_quoted string_quoted_double string_quoted_double_transcript">&quot;/path/to/stack&quot;</span>
</pre>
<p>to load a stack file into memory. But &#8216;go stack&#8217; actually opens the stack on screen and triggers the [pre]openStack and [pre]openCard messages. You don&#8217;t want either to happen if you are just validating stack file existence and loading into memory.  Although you can hide the stack and lock messages there is a way that requires less lines of code.</p>
<p>The best way to verify that a stack file exists on disk and load it into memory without triggering any messages or showing it on screen is to do this:</p>
<pre class="source-code"><span class="entity entity_name entity_name_handler entity_name_handler_rev">put</span><span> </span><span class="keyword keyword_control keyword_control_rev">there</span><span> </span><span class="keyword keyword_control keyword_control_rev">is</span><span> </span><span class="keyword keyword_control keyword_control_rev">a</span><span> </span><span class="keyword keyword_control keyword_control_rev">stack</span><span> </span><span class="string string_quoted string_quoted_double string_quoted_double_transcript">"/path/to/stack"</span><span> </span><span class="keyword keyword_control keyword_control_rev">into</span><span> theStackFileIsLoaded</span></pre>
<p>By checking for the existence of the stack file on disk, Revolution will load the stack into memory. if <em>theStackFileIsLoaded</em> = false then you know the stack file doesn&#8217;t exist.</p>
<p>On a somewhat related note check out the <a href="http://revolution.screenstepslive.com/spaces/revolution/buckets/tutorials/lessons/1562-Knowing-Which-Stacks-Are-In-Memory">Knowing Which Stacks Are In Memory</a> lesson. It has a function that lists all stacks that are currently loaded in memory.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluemangolearning.com/revolution/2009/07/loading-stack-files-into-memory/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Data Grid Webinar</title>
		<link>http://www.bluemangolearning.com/revolution/2009/04/data-grid-webinar/</link>
		<comments>http://www.bluemangolearning.com/revolution/2009/04/data-grid-webinar/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 18:06:50 +0000</pubDate>
		<dc:creator>trevordevore</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.bluemangolearning.com/revolution/blog/?p=90</guid>
		<description><![CDATA[A few weeks ago Kevin Miller, Bill Marriott (both of Runtime Revolution) and I put on a webinar that introduced the new Data Grid in Revolution 3.5. The data grid was originally developed for ScreenSteps so that we could provide our customers with a much more responsive UI when working with large libraries and lessons. [...]]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago Kevin Miller, Bill Marriott (both of <a href="http://www.runrev.com">Runtime Revolution</a>) and I put on a webinar that introduced the new <a href="http://www.runrev.com/whats-new/overview/overview/">Data Grid</a> in Revolution 3.5. The data grid was originally developed for ScreenSteps so that we could provide our customers with a much more responsive UI when working with large libraries and lessons. We were thrilled when Revolution decided to integrate it into their core product.</p>
<p>Given the extremely positive response by attendees, Greg and I thought people might be interested in seeing how ScreenSteps 2.5 uses data grids throughout the application. So we&#8217;ve added a new webinar to our <a href="http://www.bluemangolearning.com/webinars/">webinars page</a> entitled <strong>Using Data Grids in Revolution 3.5</strong>. In the webinar we will show you:</p>
<ul>
<li>The various UI elements created using the data grid.</li>
<li>The techniques used to create some of the visuals.</li>
<li>The techniques used to hook the data grids up to data from SQLite, stacks, folder contents and the web.</li>
</ul>
<p>We also plan on providing ample time to answer questions people might have. So join us on Thursday April 30th if you want to improve your data grid chops.</p>
<p><a href="https://www2.gotomeeting.com/register/565295594">Sign up for webinar</a></p>
<p>Update: The webinar video has been posted in <a href="http://www.bluemangolearning.com/webinars/archives/revolution.html">our archive</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluemangolearning.com/revolution/2009/04/data-grid-webinar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.248 seconds -->

