<?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>WonderLabs</title>
	<atom:link href="http://labs.wondergroup.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://labs.wondergroup.com</link>
	<description></description>
	<lastBuildDate>Fri, 20 Nov 2009 19:31:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Changed Files In Subversion Repo</title>
		<link>http://labs.wondergroup.com/quick-tips-and-tricks/changed-files-in-subversion-repo/</link>
		<comments>http://labs.wondergroup.com/quick-tips-and-tricks/changed-files-in-subversion-repo/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 19:30:03 +0000</pubDate>
		<dc:creator>jthomas</dc:creator>
				<category><![CDATA[Quick Tips and Tricks]]></category>

		<guid isPermaLink="false">http://labs.wondergroup.com/?p=194</guid>
		<description><![CDATA[We have a client here who manages there own web server and website deployment, but they rely on us to develop and update their site as needed. For this reason, they prefer to receive updates to their site in patch-like zip files. On our end we mange this project with a combination of Unfuddle, SVN [...]]]></description>
			<content:encoded><![CDATA[<p>We have a client here who manages there own web server and website deployment, but they rely on us to develop and update their site as needed. For this reason, they prefer to receive updates to their site in patch-like zip files. On our end we mange this project with a combination of <a href="http://unfuddle.com/">Unfuddle</a>, <a href="http://subversion.tigris.org/">SVN</a> and a staging server that mimics their server environment. When it comes time to release code it can be a bit confusing for us which files the client will need for a particular update. We rely on SVN to help.</p>
<p>First, we determine at which revision in the repository the updates began. We do this by referencing associated changesets inside Unfuddle (Side note; <a href="http://unfuddle.com/">Unfuddle</a> is a fantastic project management and source control tool that we recommend checking out.) Then, it&#8217;s just a matter of grabbing a diff from this changeset to the HEAD. From the command line, do (Where &#8220;XX&#8221; is, of course, the revision our changes start at. In doubt, we err on the side of more files than necessary.):</p>
<pre>
$> svn diff -r XX:HEAD --summarize>~/Desktop/diff.txt
</pre>
<p>This dumps a summary of the affected files into a text file on the desktop. From there we go down the list and compile our patch for the client. Easy.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.wondergroup.com/quick-tips-and-tricks/changed-files-in-subversion-repo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Actionscript in IE getBytesTotal( ) gotcha</title>
		<link>http://labs.wondergroup.com/languages/actionscript/actionscript-in-ie-getbytestotal-gotcha/</link>
		<comments>http://labs.wondergroup.com/languages/actionscript/actionscript-in-ie-getbytestotal-gotcha/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 18:00:03 +0000</pubDate>
		<dc:creator>jberman</dc:creator>
				<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[IE]]></category>

		<guid isPermaLink="false">http://labs.wondergroup.com/?p=190</guid>
		<description><![CDATA[With a recent update either in IE8 or within the Flash Player, I noticed a lot of our AS2 Flash sites that load external assets were failing; either the asset wouldn&#8217;t load or it wouldn&#8217;t properly report its EVENT_LOADED event. It was happening sporadically, and usually when a lot of external assets were being loaded [...]]]></description>
			<content:encoded><![CDATA[<p>With a recent update either in IE8 or within the Flash Player, I noticed a lot of our AS2 Flash sites that load external assets were failing; either the asset wouldn&#8217;t load or it wouldn&#8217;t properly report its EVENT_LOADED event. It was happening sporadically, and usually when a lot of external assets were being loaded at the same time.</p>
<p>When I looked into this further I found this line of code within the &#8220;run&#8221; function that executes on an interval:</p>
<pre name="code" language="javascript">
if (mc_clip.getBytesTotal( ) < 0)
{
        // failed to load
        bool_isLoaded = false;
        clearInterval( int_interval );
        dispatchEvent( new Event( this, EVENT_FAILED ) );
}
</pre>
<p>To fix it, I simply added a counter. It now checks to see if getBytesTotal( ) returns negative 10 times before finally reporting EVENT_FAILED.</p>
<p>However, in IE, mc_clip.getBytesTotal( ) is returning a negative number - even though the clip exists and is still loading!</p>
<p>Updating this code to include a wait counter to make sure this the number is still negative after 10 tries seems to have fixed it. </p>
<pre name="code" language="javascript">
if (mc_clip.getBytesTotal( ) < 0)
{
    if (int_wait > 10)
    {
        // failed to load
        bool_isLoaded = false;
        clearInterval( int_interval );
        dispatchEvent( new Event( this, EVENT_FAILED ) );
    }
    int_wait++;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://labs.wondergroup.com/languages/actionscript/actionscript-in-ie-getbytestotal-gotcha/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>View Hidden Files On OS X</title>
		<link>http://labs.wondergroup.com/quick-tips-and-tricks/view-hidden-files-on-os-x/</link>
		<comments>http://labs.wondergroup.com/quick-tips-and-tricks/view-hidden-files-on-os-x/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 18:42:54 +0000</pubDate>
		<dc:creator>jthomas</dc:creator>
				<category><![CDATA[Quick Tips and Tricks]]></category>

		<guid isPermaLink="false">http://labs.wondergroup.com/?p=181</guid>
		<description><![CDATA[A quick tip today for those of you looking for a way to easily toggle hidden file visibility on OS X. I found myself toggling this setting frequently via Terminal.app when working with htaccess files, so I ended up putting together a little AppleScript to make life easier.
The script works as a toggle to turn [...]]]></description>
			<content:encoded><![CDATA[<p>A quick tip today for those of you looking for a way to easily toggle hidden file visibility on OS X. I found myself toggling this setting frequently via Terminal.app when working with htaccess files, so I ended up putting together a little AppleScript to make life easier.</p>
<p>The script works as a toggle to turn the setting on or off. So, run it once to show hidden files, then run it a second time to hide them again.</p>
<p>Just paste this into ScriptEditor and you&#8217;re good to go. For added automation &#8220;Save as&#8230;&#8221; as an application and drop it in your Applications folder.</p>
<pre name="code" language="javascript">
try
	set toggle to do shell script "defaults read com.apple.finder AppleShowAllFiles"

	if toggle = "True" then
		do shell script "defaults write com.apple.finder AppleShowAllFiles False"
	else
		do shell script "defaults write com.apple.finder AppleShowAllFiles True"
	end if

	do shell script "killall Finder"
end try
</pre>
<p>Alternatively, you can just <a href="http://labs.wondergroup.com/demos/toggle-hidden/toggle_hidden.zip">download the script here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.wondergroup.com/quick-tips-and-tricks/view-hidden-files-on-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kill GMail text ads without using AdBlock</title>
		<link>http://labs.wondergroup.com/quick-tips-and-tricks/kill-gmail-text-ads-without-using-adblock/</link>
		<comments>http://labs.wondergroup.com/quick-tips-and-tricks/kill-gmail-text-ads-without-using-adblock/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 14:34:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Quick Tips and Tricks]]></category>

		<guid isPermaLink="false">http://labs.wondergroup.com/?p=176</guid>
		<description><![CDATA[According to his personal blog (screenshots included), Joe McKay was able to prevent the appearance of sponsored ads on Gmail by referencing tragic or catastrophic events (words which Google bans from their ads), as well as words from the late, great, George Carlin’s list of seven words you can’t say on TV.
But, if you’re looking [...]]]></description>
			<content:encoded><![CDATA[<p>According to <a href="http://homepage.mac.com/joester5/art/gmail.html" mce_href="http://homepage.mac.com/joester5/art/gmail.html">his personal blog</a> (screenshots included), Joe McKay was able to prevent the appearance of sponsored ads on Gmail by referencing tragic or catastrophic events (words which Google bans from their ads), as well as words from the late, great, George Carlin’s list of seven words you can’t say on TV.</p>
<p>But, if you’re looking to send an email to someone of importance, and you’re not interested in throwing down some dirty words (but murder still passes through your moral filter), then Mr. McKay has come up with the perfect sentence to add onto the end of each email:<br />
“I enjoy the massacre of ads. This sentence will slaughter ads without a messy bloodbath.”</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.wondergroup.com/quick-tips-and-tricks/kill-gmail-text-ads-without-using-adblock/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery Popup Plugin Update</title>
		<link>http://labs.wondergroup.com/frameworks/jquery-popup-plugin-update/</link>
		<comments>http://labs.wondergroup.com/frameworks/jquery-popup-plugin-update/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 14:54:33 +0000</pubDate>
		<dc:creator>jthomas</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://labs.wondergroup.com/?p=170</guid>
		<description><![CDATA[Just a quick note to bring attention to a small update made to the jQuery Popup plugin posted back in June.
The update addresses a small issue when the plugin was targeted to multiple elements or no elements at all. Updating to this version is recommended as it doesn&#8217;t change any features or break any previously [...]]]></description>
			<content:encoded><![CDATA[<p>Just a quick note to bring attention to a small update made to the <a href="http://labs.wondergroup.com/frameworks/jquery-popup-plugin/">jQuery Popup plugin</a> posted back in June.</p>
<p>The update addresses a small issue when the plugin was targeted to multiple elements or no elements at all. Updating to this version is recommended as it doesn&#8217;t change any features or break any previously existing functionality.</p>
<p>Head <a href="http://labs.wondergroup.com/frameworks/jquery-popup-plugin/">over here</a> to read more about the plugin or go straight to the <a href="http://labs.wondergroup.com/demos/popup/index.html">download page</a> to pick it up.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.wondergroup.com/frameworks/jquery-popup-plugin-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Think your code source doesn&#8217;t matter?</title>
		<link>http://labs.wondergroup.com/quick-tips-and-tricks/think-your-code-source-doesnt-matter/</link>
		<comments>http://labs.wondergroup.com/quick-tips-and-tricks/think-your-code-source-doesnt-matter/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 17:15:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Quick Tips and Tricks]]></category>

		<guid isPermaLink="false">http://labs.wondergroup.com/?p=165</guid>
		<description><![CDATA[The Japanese principle of &#8216;form over function&#8217; holds true in the Fujitsu binoculars website.
1. View Source: http://www.fujinonbinos.com/
2. Google Earth screenshots: http://b3ta.com/links/355881
3. ????
4. Profit
blown = mind ? true : false;
]]></description>
			<content:encoded><![CDATA[<p>The Japanese principle of &#8216;form over function&#8217; holds true in the Fujitsu binoculars website.</p>
<p>1. View Source: <a href="http://www.fujinonbinos.com/">http://www.fujinonbinos.com/</a><br />
2. Google Earth screenshots: <a href="http://b3ta.com/links/355881">http://b3ta.com/links/355881</a><br />
3. ????<br />
4. Profit</p>
<p>blown = mind ? true : false;</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.wondergroup.com/quick-tips-and-tricks/think-your-code-source-doesnt-matter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Start and End Date Range Validator in AS3/Flex</title>
		<link>http://labs.wondergroup.com/languages/start-and-end-date-range-validator-in-as3flex/</link>
		<comments>http://labs.wondergroup.com/languages/start-and-end-date-range-validator-in-as3flex/#comments</comments>
		<pubDate>Fri, 17 Jul 2009 20:08:16 +0000</pubDate>
		<dc:creator>rgriffith</dc:creator>
				<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Languages]]></category>

		<guid isPermaLink="false">http://labs.wondergroup.com/?p=149</guid>
		<description><![CDATA[In a flex app I&#8217;m building, I have two dates a user needs to put in for an event. I needed a way to make sure the end date was not before the start date. Now, I know this is pretty common sense for a user to be able to do this but you never [...]]]></description>
			<content:encoded><![CDATA[<p>In a flex app I&#8217;m building, I have two dates a user needs to put in for an event. I needed a way to make sure the end date was not before the start date. Now, I know this is pretty common sense for a user to be able to do this but you never can tell. At any rate, I needed a custom validator for this to take two dates and compare them to make sure that the end date was not before the start date when the validations occurred.</p>
<p>After doing some research on the Google to find ways to get me started, I came up with the following as the fruit of my labor. Please note that the comments give reference to the articles that I utilized in building this validtor.</p>
<pre name="code" language="javascript">
////////////////////////////////////////////////////////////////////////////////
// Based loosley on examples found in the following places:
//
// How to Validate a Date Range in Flex:
// (Basic idea for comparing a given date to a pre-defined range. This object did not meet my needs exactly so I used this as a starting point.)
// http://www.davidortinau.com/blog/how_to_validate_a_date_range_in_flex/
//
//
// How to Compare Two Dates in ActionScript 3:
// (Shows comparing dates as Numbers)
// http://userflex.wordpress.com/2008/09/11/as3-date-compare/
//
// Flex: How do you validate 2 password fields to make sure they match?
// (Shows how to get two fields to validate, makes use of the getValueFromSource() method.)
// http://stackoverflow.com/questions/508696/flex-how-do-you-validate-2-password-fields-to-make-sure-they-match
//
// Actionscript 3 - Fastest way to parse yyyy-mm-dd hh:mm:ss to a Date object?
// (Ran into trouble on getting my dates to parse correctly given the yyyy-mm-dd format, this article pointed to a solution)
// http://stackoverflow.com/questions/3163/actionscript-3-fastest-way-to-parse-yyyy-mm-dd-hhmmss-to-a-date-object
////////////////////////////////////////////////////////////////////////////////
package com.wg.utility
{
	import mx.validators.DateValidator;
	import mx.validators.ValidationResult;

	public class StartEndDateValidation extends DateValidator
	{
		private var _startDateSource:Object;
		private var _startDateProperty:String;

		public function StartEndDateValidation()
		{
			super();
		}

		public function set StartDateSource(value:Object): void
		{
			_startDateSource = value;
		}

		public function set StartDateProperty(value:String):void
		{
			_startDateProperty = value;
		}

		override protected function doValidation(value:Object):Array {
			// Create an array to return validator results
			var validatorResults:Array = new Array(); 

			// Call base doValidation() this assures EndDate (source) is correctly validated as a date.
			validatorResults = super.doValidation(value.enddate);

			// Return if validation has errors.
			if (validatorResults.length > 0) {
				return validatorResults;
			}

			if (String(value).length == 0) {
				return validatorResults;
			}

			// Use castDate to properly cast the date's text property into a Date object.
			var startDate:Date = castDate(value.startdate);
			var endDate:Date = castDate(value.enddate);
			var startDateTimeStamp:Number = startDate.getTime();
			var endDateTimeStamp:Number = endDate.getTime();

			if (endDateTimeStamp < startDateTimeStamp) {
				validatorResults.push(new ValidationResult(true, null, "Invalid Date Range", "End Date is before Start Date"));
				return validatorResults;
			}

			return validatorResults;

		}

		override protected function getValueFromSource():Object
		{
			var value:Object = {};
			value.enddate = super.getValueFromSource();

			if (_startDateSource &#038;&#038; _startDateProperty) {
				value.startdate = _startDateSource[_startDateProperty];

			}
			return value;
		}

		private function castDate(dateString:String):Date {
		    if ( dateString == null )
		        return null;
		    if ( dateString.length != 10 &#038;&#038; dateString.length != 19)
		        return null;

		    dateString = dateString.replace("-", "/");

		    return new Date(Date.parse( dateString ));
		}

	}
}
</pre>
<p>To implement this in my MXML, I needed to put in the following code. In my component declaration, I needed the following namespace so I could reference to it as a validator.</p>
<pre name="code" language="html">

<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initCanvas()"  xmlns:utility="com.wg.utility.*">
...
</mx:Canvas>
</pre>
<p>The fields I wanted to validate are illustrated in the following snippet below:</p>
<pre name="code" language="html">
...
<mx:FormItem id="startItem" required="true" label="Start Date:">
	<mx:DateField id="startDate" text="{appearance.eventstart.toString()}" formatString="YYYY-MM-DD" />
</mx:FormItem>
<mx:FormItem id="endItem" required="true" label="End Date:">
	<mx:DateField id="endDate" text="{appearance.eventend.toString()}" formatString="YYYY-MM-DD" />
</mx:FormItem>
...
</pre>
<p>Make note in the above code that the format string for each field is "YYYY-MM-DD." I did this for ease of entry into my database. However, this tripped me up when trying to get an actual date object parsed in so I could use it for comparison. That is the reason for the function castDate() in the validator.</p>
<p>The validator array grouping I used for the component listed below shows how the validator references both the start date and the end date. The way this validator works is the validation is bound to the endDate field and the startDate is referenced by the attributes "StartDateSource" and "StartDateProperty." In addition, the endDate is also validated as a valid date by the standard DateValidator method. For validating the startDate field, I used a standard DateValidator reference.</p>
<pre name="code" language="html">
<mx:Array id="validators">
    <mx:DateValidator source="{startDate}" property="text" required="true" allowedFormatChars="-" inputFormat="YYYY-MM-DD" />
    <utility:StartEndDateValidation  source="{endDate}" property="text" StartDateProperty="text" StartDateSource="{startDate}" required="true" allowedFormatChars="-" inputFormat="YYYY-MM-DD"/>
</mx:Array>
</pre>
<p>Finally, the validation is executed (normally via a button click) with the following code:</p>
<pre name="code" language="javascript">
	var results:Array = Validator.validateAll(validators);
	// if any of the fields were not valid
	if (results.length > 0) {
		return;
	}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://labs.wondergroup.com/languages/start-and-end-date-range-validator-in-as3flex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Loading &#8220;Spinner&#8221; animations for Flash</title>
		<link>http://labs.wondergroup.com/programs/flash/loading-spinner-animations-for-flash/</link>
		<comments>http://labs.wondergroup.com/programs/flash/loading-spinner-animations-for-flash/#comments</comments>
		<pubDate>Fri, 17 Jul 2009 15:54:59 +0000</pubDate>
		<dc:creator>jberman</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://labs.wondergroup.com/?p=136</guid>
		<description><![CDATA[I’ve been doing a lot of web service calls within Flash lately and couldn’t find a good resource for Ajax-y “spinner” animations with transparent backgrounds to indicate when something is loading, so I made a few of them myself. They are all vector and can overlay on top of any background.
Simply open the FLA, drag [...]]]></description>
			<content:encoded><![CDATA[<p>I’ve been doing a lot of web service calls within Flash lately and couldn’t find a good resource for Ajax-y “spinner” animations with transparent backgrounds to indicate when something is loading, so I made a few of them myself. They are all vector and can overlay on top of any background.</p>
<p>Simply open the FLA, drag the movie clip in, and adjust its tint to change the color. Enjoy!</p>
<table border="0" align="center">
<tr>
<td><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="18" height="18" id="spinner1" align="middle"><param name="allowScriptAccess" value="sameDomain" /><param name="allowFullScreen" value="false" /><param name="movie" value="/demos/flash-spinners/spinner1.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#FFFFFF" /><embed src="/demos/flash-spinners/spinner1.swf" quality="high" bgcolor="#FFFFFF" width="18" height="18" name="spinner1" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /><br />
</object></td>
<td><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="30" height="30" id="spinner2" align="middle"><param name="allowScriptAccess" value="sameDomain" /><param name="allowFullScreen" value="false" /><param name="movie" value="/demos/flash-spinners/spinner2.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#FFFFFF" /><embed src="/demos/flash-spinners/spinner2.swf" quality="high" bgcolor="#FFFFFF" width="30" height="30" name="spinner2" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /><br />
</object></td>
<td><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="36" height="36" id="spinner3" align="middle"><param name="allowScriptAccess" value="sameDomain" /><param name="allowFullScreen" value="false" /><param name="movie" value="/demos/flash-spinners/spinner3.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#FFFFFF" /><embed src="/demos/flash-spinners/spinner3.swf" quality="high" bgcolor="#FFFFFF" width="36" height="36" name="spinner3" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /><br />
</object></td>
<td><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="30" height="30" id="spinner4" align="middle"><param name="allowScriptAccess" value="sameDomain" /><param name="allowFullScreen" value="false" /><param name="movie" value="/demos/flash-spinners/spinner4.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#FFFFFF" /><embed src="/demos/flash-spinners/spinner4.swf" quality="high" bgcolor="#FFFFFF" width="30" height="30" name="spinner4" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /><br />
</object></td>
</tr>
</table>
<p><a href="/demos/flash-spinners/Flash_Loading_Spinners.zip">Download a zip file containing all 4 FLA&#8217;s here!</a></p>
]]></content:encoded>
			<wfw:commentRss>http://labs.wondergroup.com/programs/flash/loading-spinner-animations-for-flash/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>jQuery Mini UI Effects Plugins</title>
		<link>http://labs.wondergroup.com/frameworks/jquery/jquery-mini-ui-effects-plugins/</link>
		<comments>http://labs.wondergroup.com/frameworks/jquery/jquery-mini-ui-effects-plugins/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 15:18:03 +0000</pubDate>
		<dc:creator>jthomas</dc:creator>
				<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://labs.wondergroup.com/?p=130</guid>
		<description><![CDATA[Recently while working on a client project I was met with a situation in which I needed to do some client-side feedback to validation of a couple fields. I wanted something a little more spiced up than your typical turn-the-field-red or put-a-red-asterisk next to it.
The jQuery UI Effects library had just what I was looking [...]]]></description>
			<content:encoded><![CDATA[<p>Recently while working on a client project I was met with a situation in which I needed to do some client-side feedback to validation of a couple fields. I wanted something a little more spiced up than your typical turn-the-field-red or put-a-red-asterisk next to it.</p>
<p>The <a href="http://jqueryui.com/">jQuery UI</a> <a href="http://jqueryui.com/demos/effect/">Effects</a> library had just what I was looking for, with only one problem. In order to use the desired effect I had to include over 100 kb of additional Javascript. My app was already pretty heavy on the client side so I sought a way to achieve the effect with as little cruft as possible.</p>
<p>So, after a little hacking around, I present the &#8220;Mini&#8221; UI Effects plugins. They are a set of plugins that are lightweight and attempt to offer a similar experience to the jQuery UI effects. For now there are just three basic effects, &#8220;Blink&#8221;, &#8220;Wiggle&#8221; and &#8220;Bob.&#8221; They are similar to the jQuery UI &#8220;Pulsate&#8221;, &#8220;Shake&#8221; and &#8220;Bounce&#8221; effects respectively.</p>
<p>Please feel free to <a href="http://labs.wondergroup.com/demos/mini-ui/index.html">download</a> and use them in your own projects both commercial and personal alike. They have been tested to work in IE6+, Safari and Firefox.</p>
<p>Check out a <a href="http://labs.wondergroup.com/demos/mini-ui/index.html">demo and download the jQuery Mini UI plugins here</a>. Let me encourage you to leave feedback in the comments. We&#8217;d love to hear of any experience using them (bugs or otherwise). Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.wondergroup.com/frameworks/jquery/jquery-mini-ui-effects-plugins/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Remove &#8220;index.php&#8221; Portion of URL</title>
		<link>http://labs.wondergroup.com/languages/remove-indexphp-portion-of-url/</link>
		<comments>http://labs.wondergroup.com/languages/remove-indexphp-portion-of-url/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 14:10:35 +0000</pubDate>
		<dc:creator>jthomas</dc:creator>
				<category><![CDATA[Languages]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Quick Tips and Tricks]]></category>

		<guid isPermaLink="false">http://labs.wondergroup.com/?p=119</guid>
		<description><![CDATA[Many PHP frameworks make use of routing through one master file, typically index.php. It is easy enough, however, to write that portion of the URL out, thus achieving a more svelte and sexy address bar in the process. 
To do so just create an .htaccess file in your app&#8217;s root directory (likely next to the [...]]]></description>
			<content:encoded><![CDATA[<p>Many PHP frameworks make use of routing through one master file, typically index.php. It is easy enough, however, to write that portion of the URL out, thus achieving a more svelte and sexy address bar in the process. </p>
<p>To do so just create an .htaccess file in your app&#8217;s root directory (likely next to the index.php in question) if one doesn&#8217;t already exist (OS X folks may have to use Terminal to work with .htaccess as it will be invisible). Then drop these rules into place:</p>
<pre>
&lt;ifmodule mod_rewrite.c&gt;
	Options +FollowSymLinks
	RewriteEngine On
	RewriteBase /

	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteRule ^(.*)$ index.php?/$1 [QSA,L]
&lt;/ifmodule&gt;
&lt;ifmodule !mod_rewrite.c&gt;
	ErrorDocument 404 /index.php
&lt;/ifmodule&gt;
</pre>
<p>Some frameworks require that you configure the base URL of the system, so don&#8217;t forget to do that too or your app will start acting wacky after this is in place.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.wondergroup.com/languages/remove-indexphp-portion-of-url/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

