<?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>Floyd Price</title>
	<atom:link href="http://www.floydprice.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.floydprice.com</link>
	<description>Art is never finished, only abandoned. — Leonard da Vinci</description>
	<lastBuildDate>Wed, 14 Dec 2011 15:01:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>iOS Find the current first responder</title>
		<link>http://www.floydprice.com/2011/12/ios-find-the-current-responder/</link>
		<comments>http://www.floydprice.com/2011/12/ios-find-the-current-responder/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 14:57:48 +0000</pubDate>
		<dc:creator>Floyd Price</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.floydprice.com/?p=425</guid>
		<description><![CDATA[Quite often you need to know which control is currently the first responder, for ages i have been rolling the same solution over and over again and I thought it about time that i shared it. Its basically a category on UIView so you can call: &#91;self.view findFirstResponder&#93;; Imagine you wanted to make sure the [...]]]></description>
			<content:encoded><![CDATA[<p>Quite often you need to know which control is currently the first responder, for ages i have been rolling the same solution over and over again and I thought it about time that i shared it.</p>
<p>Its basically a category on UIView so you can call:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">&#91;</span>self.view findFirstResponder<span style="color: #002200;">&#93;</span>;</pre></div></div>

<p>Imagine you wanted to make sure the keyboard (or any other editor view) was closed you could:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;">UIView <span style="color: #002200;">*</span>firstResponder <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>self.view findFirstResponder<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#91;</span>firstResponder resignFirstResponder<span style="color: #002200;">&#93;</span>;</pre></div></div>

<p>The code is stupid simple:</p>
<p><strong>UIView+AblebotsAdditions.h</strong></p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import </span>
&nbsp;
<span style="color: #a61390;">@interface</span> UIView <span style="color: #002200;">&#40;</span>Ablebots<span style="color: #002200;">&#41;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>UIView <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>findFirstResponder;
&nbsp;
<span style="color: #a61390;">@end</span></pre></div></div>

<p><strong>UIView+AblebotsAdditions.m</strong></p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &quot;UIView+AblebotsAdditions.h&quot;</span>
<span style="color: #a61390;">@implementation</span> UIView <span style="color: #002200;">&#40;</span>Ablebots<span style="color: #002200;">&#41;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>UIView <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>findFirstResponder
<span style="color: #002200;">&#123;</span>
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>self.isFirstResponder<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
        <span style="color: #a61390;">return</span> self;
    <span style="color: #002200;">&#125;</span>
    <span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span>UIView <span style="color: #002200;">*</span>subView <span style="color: #a61390;">in</span> self.subviews<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
        <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span>subView isFirstResponder<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#123;</span>
            <span style="color: #a61390;">return</span> subView;
        <span style="color: #002200;">&#125;</span>
        <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span>subView findFirstResponder<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#123;</span>
            <span style="color: #a61390;">return</span> <span style="color: #002200;">&#91;</span>subView findFirstResponder<span style="color: #002200;">&#93;</span>;
        <span style="color: #002200;">&#125;</span>
    <span style="color: #002200;">&#125;</span>
    <span style="color: #a61390;">return</span> <span style="color: #a61390;">nil</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #a61390;">@end</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.floydprice.com/2011/12/ios-find-the-current-responder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.GitIgnore for xCode 4 projects.</title>
		<link>http://www.floydprice.com/2011/12/gitignore-for-xcode-4-projects/</link>
		<comments>http://www.floydprice.com/2011/12/gitignore-for-xcode-4-projects/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 12:55:43 +0000</pubDate>
		<dc:creator>Floyd Price</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.floydprice.com/?p=418</guid>
		<description><![CDATA[xCode git support is great, but if your working in a team or on multiple machines you will want to ignore any user/machine specific files. In my .gitinore I have: .DS_Store *.swp *~.nib build/ *.pbxuser *.perspective *.perspectivev3 xcuserdata/ Seems to work pretty well.]]></description>
			<content:encoded><![CDATA[<p>xCode git support is great, but if your working in a team or on multiple machines you will want to ignore any user/machine specific files.</p>
<p>In my .gitinore I have:</p>

<div class="wp_syntax"><div class="code"><pre class="git" style="font-family:monospace;">.DS_Store
*.swp
*~.nib
build/
*.pbxuser
*.perspective
*.perspectivev3
xcuserdata/</pre></div></div>

<p>Seems to work pretty well.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.floydprice.com/2011/12/gitignore-for-xcode-4-projects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Collabable OSX Notifications</title>
		<link>http://www.floydprice.com/2011/12/390/</link>
		<comments>http://www.floydprice.com/2011/12/390/#comments</comments>
		<pubDate>Thu, 08 Dec 2011 12:46:33 +0000</pubDate>
		<dc:creator>Floyd Price</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.floydprice.com/?p=390</guid>
		<description><![CDATA[This is a small OSX application I wrote for Collabable.com]]></description>
			<content:encoded><![CDATA[<p>This is a small OSX application I wrote for <a href="http://www.collabable.com">Collabable.com</a><br />
<iframe src="http://www.youtube.com/embed/G2esBZ-0tFQ?rel=0&amp;hd=1" frameborder="0" width="573" height="321"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.floydprice.com/2011/12/390/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding Growl support to your OSX application</title>
		<link>http://www.floydprice.com/2011/12/adding-growl-support-to-your-osx-application/</link>
		<comments>http://www.floydprice.com/2011/12/adding-growl-support-to-your-osx-application/#comments</comments>
		<pubDate>Thu, 08 Dec 2011 11:01:32 +0000</pubDate>
		<dc:creator>Floyd Price</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.floydprice.com/?p=318</guid>
		<description><![CDATA[I recently built a small OSX utility that sits in the menu bar and polls your Collabable account for new discussions, one of the final feature i needed to implement was Growl support. The brief was simple enough, two type of growl notification were required, a simple digest of all discussions when you first logged [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.floydprice.com/?attachment_id=314" rel="Collabable OSX Notifications"><img class="size-medium wp-image-314 alignright" style="margin: 10px;" title="CollabableOSXWidget" src="http://www.floydprice.com/wp-content/uploads/2011/11/CollabableOSXWidget-300x293.png" alt="" height="180" /></a>I recently built a small OSX utility that sits in the menu bar and polls your Collabable account for new discussions, one of the final feature i needed to implement was Growl support.</p>
<p>The brief was simple enough, two type of growl notification were required, a simple digest of all discussions when you first logged in and then a specific &#8220;New Discussion&#8221; notification when a new discussion came in.</p>
<h2></h2>
<p><span id="more-318"></span></p>
<h2>Adding the Growl SDK to your project</h2>
<p>The growl SDK is a simple Cocoa framework that you can drop in to your xCode project, download the SDK from http://growl.info/downloads (its at the bottom of the page).</p>
<p>Once downloaded locate and unzip, the unzipped folder will contain a number of things but we are looking for the Growl.framework folder:</p>
<p><a href="http://www.floydprice.com/2011/12/adding-growl-support-to-your-osx-application/growl-sdk-2/" rel="attachment wp-att-328"><img class="size-full wp-image-328 alignnone" title="Growl SDK" src="http://www.floydprice.com/wp-content/uploads/2011/12/Growl-SDK1.png" alt="" width="574" /></a></p>
<p>Simply drag this folder in to your Frameworks group in your xCode project:</p>
<p><a href="http://www.floydprice.com/2011/12/adding-growl-support-to-your-osx-application/screen-shot-2011-12-08-at-10-10-23/" rel="attachment wp-att-337"><img class="size-full wp-image-337 alignnone" title="frameworks" src="http://www.floydprice.com/wp-content/uploads/2011/12/Screen-shot-2011-12-08-at-10.10.23.png" alt="" width="290" height="89" /></a></p>
<p>xCode will ask you how you want to copy the framework in, check the copy to destination box so the framework is saved in to your project folder.</p>
<p>You now need to configure xCode to link the Growl framework in to your project and copy the relevent files in to the application bundle, open up the build phase section and make sure that the &#8220;Link Binary With Libraries&#8221; includes the Growl.framework, xCode should have done this bit for you when you dragged the framework in, but its worth checking just in case, if its not there click the &#8220;+&#8221; and select it from the list.</p>
<p>Next we want to tell xCode to copy the framework into our bundle, to do this you need to locate the &#8220;Copy Files&#8221; section in the Build Phases section, if you don&#8217;t yet have a &#8220;Copy Files&#8221; section simply click the &#8220;Add Build Phase&#8221; button (bottom right) and select &#8220;Add Copy Files&#8221;. Once you have located the &#8220;Copy Files&#8221; section change the destination to &#8220;Frameworks&#8221; and drag in your Growl.framework:</p>
<p><a href="http://www.floydprice.com/2011/12/adding-growl-support-to-your-osx-application/screen-shot-2011-12-08-at-10-13-06/" rel="attachment wp-att-338"><img class="size-full wp-image-338 alignnone" title="Screen shot 2011-12-08 at 10.13.06" src="http://www.floydprice.com/wp-content/uploads/2011/12/Screen-shot-2011-12-08-at-10.13.06.png" alt="" width="562" height="441" /></a></p>
<p>Hit cmd-B to build your project and thats Growl ready to use in your application.</p>
<h2>Using the Growl SDK in your application</h2>
<p>The basics of using growl are as simple as, impementing a protocol in your app delegate and telling growl to display something, its really that easy, so lets set up our app delegate.</p>
<p>open up your AppDelegate.h (mine is called ABAppDelegate.h, your might have another name), add an import to the growl header file and implement the GrowlApplicationBridgeDelegate on your app delegate class:</p>
<p><a href="http://www.floydprice.com/2011/12/adding-growl-support-to-your-osx-application/screen-shot-2011-12-08-at-10-21-02/" rel="attachment wp-att-353"><img class="alignnone size-full wp-image-353" title="Screen shot 2011-12-08 at 10.21.02" src="http://www.floydprice.com/wp-content/uploads/2011/12/Screen-shot-2011-12-08-at-10.21.02.png" alt="" width="574" height="131" /></a></p>
<p>Open up your AppDelegate.m file and implement the following method (<a title="Growl Docs" href="http://growl.info/documentation/developer/implementing-growl.php" target="_blank">see the Growl Docs for more info</a>):</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#pragma mark - Growl 1.3.1 SDK -</span>
&nbsp;
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSDictionary</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>registrationDictionaryForGrowl<span style="color: #002200;">&#123;</span>
    <span style="color: #400080;">NSArray</span> <span style="color: #002200;">*</span>notifications;
    notifications <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #400080;">NSArray</span> arrayWithObjects<span style="color: #002200;">:</span> C_COLLABABLE_GROWL_NOTIFICATION, C_COLLABABLE_GROWL_NOTIFICATION_DIGEST, <span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #400080;">NSDictionary</span> <span style="color: #002200;">*</span>dict;
&nbsp;
    dict <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #400080;">NSDictionary</span> dictionaryWithObjectsAndKeys<span style="color: #002200;">:</span>
            notifications, GROWL_NOTIFICATIONS_ALL,
            notifications, GROWL_NOTIFICATIONS_DEFAULT, <span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #a61390;">return</span> <span style="color: #002200;">&#40;</span>dict<span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>registrationDictionaryForGrowl is the only <strong>Required</strong> method in the GrowlApplicationBridgeDelegate protocol and its simply a way of telling growl about the types of notifications your going to be sending. I&#8217;m using two constants because i want to use them later when i finally dispatch a notification.</p>
<p>Next up we need to tell Growl that we are going to be its delegate by sending a message to setGrowlDelegate:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>applicationDidFinishLaunching<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSNotification</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>aNotification
<span style="color: #002200;">&#123;</span>
    <span style="color: #002200;">&#91;</span>GrowlApplicationBridge setGrowlDelegate<span style="color: #002200;">:</span>self<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>Thats all the Growl plumbing done, your now free to stat sending notifications.</p>
<p>&nbsp;</p>
<h2>Dispatching a Growl Notification</h2>
<p>Once you app delegate is set up to act as the Delegate for Growl by implementing the GrowlApplicationBridgeDelegate you can dispact notifications from anywhere in your application, for this project I have a separate controller that receives messages whenever a new discussion comes in, however you can dispatch the notifications from any class that suites your needs.</p>
<p>To send a growl notification you simply need to call :</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">+</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> notifyWithTitle<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>title
			      description<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>description
		         notificationName<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>notifName
				 iconData<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSData</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>iconData
				 priority<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">signed</span> <span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span>priority
				 isSticky<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">BOOL</span><span style="color: #002200;">&#41;</span>isSticky
			     clickContext<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>clickContext;</pre></div></div>

<p>For my project I had the following in my DisucssionController:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"> <span style="color: #002200;">&#91;</span>GrowlApplicationBridge notifyWithTitle<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Collabable&quot;</span>
                                        description<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSString</span> stringWithFormat<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%d Discussions, %d Unread&quot;</span>, data.count, unreadCount<span style="color: #002200;">&#93;</span>
                                   notificationName<span style="color: #002200;">:</span>C_COLLABABLE_GROWL_NOTIFICATION_DIGEST
                                           iconData<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSImage</span> imageNamed<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;CollabableGrowl.png&quot;</span><span style="color: #002200;">&#93;</span> TIFFRepresentation<span style="color: #002200;">&#93;</span>
                                           priority<span style="color: #002200;">:</span><span style="color: #2400d9;">0</span>
                                           isSticky<span style="color: #002200;">:</span><span style="color: #a61390;">NO</span>
                                       clickContext<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;DIGEST&quot;</span><span style="color: #002200;">&#93;</span>;</pre></div></div>

<p>Most of that message is obvious however you will notice that i have supplied an image to iconData, this can me nil which will tell growl to use your application icon, however i felt that the growl icon needed a but more work to make it pleasing on the eye in the context of a growl notification, so i specified my own Growl specific image. I also pass an NSString in to clickContext of @&#8221;Digest&#8221; this is my payload that when clicked will get passed in to the click handler if you choose to implement one, again you can send nil to this if you not implementing the Click handler.</p>
<p>And thats it, sending that message to the GrowlApplicationBridge will dispatch a notification:</p>
<p><a href="http://www.floydprice.com/2011/12/adding-growl-support-to-your-osx-application/screen-shot-2011-12-08-at-10-52-37-2/" rel="attachment wp-att-382"><img class="alignnone size-full wp-image-382" title="Screen shot 2011-12-08 at 10.52.37" src="http://www.floydprice.com/wp-content/uploads/2011/12/Screen-shot-2011-12-08-at-10.52.371.png" alt="" width="574" /></a></p>
<p>&nbsp;</p>
<h2>Handling Clicks</h2>
<p>The final piece of the puzzle is handling what happens when your user clicks on the notification, again this is super simple and is done back in your AppDelegate by implementing the following method from the GrowlApplicationBridgeDelegate protocol:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> growlNotificationWasClicked<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>clickContext;</pre></div></div>

<p>My implementation is like this:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>growlNotificationWasClicked<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>clickContext<span style="color: #002200;">&#123;</span>
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>clickContext isEqualToString<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;DIGEST&quot;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span><span style="color: #002200;">&#123;</span>
        self.popoutViewcontroller.popupVisible <span style="color: #002200;">=</span> <span style="color: #a61390;">true</span>;
    <span style="color: #002200;">&#125;</span><span style="color: #a61390;">else</span><span style="color: #002200;">&#123;</span>
        <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSNotificationCenter</span> defaultCenter<span style="color: #002200;">&#93;</span> postNotificationName<span style="color: #002200;">:</span>COLLAB_SHOULD_OPEN_URL object<span style="color: #002200;">:</span> self userInfo<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSDictionary</span> dictionaryWithObject<span style="color: #002200;">:</span>clickContext forKey<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;discussionId&quot;</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#125;</span>
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>I&#8217;m basically using the clickContext to determine which type of notification was clicked (remember my brief was for two types of notification) and acting accordingly, if its a Digest I open up the Collabable popout window otherwise i know its a discussion so i send a notification that my app will collect and process.</p>
<p>Thats it we have implemented Growl notifications in to our OSX application, and it was seriously east, in fact this blog article took longer to write than the actual implementation&#8230; Enjoy <img src='http://www.floydprice.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.floydprice.com/2011/12/adding-growl-support-to-your-osx-application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Choosing the right Business Partner</title>
		<link>http://www.floydprice.com/2011/11/blog-post-about-choosing-the-right-business-partner/</link>
		<comments>http://www.floydprice.com/2011/11/blog-post-about-choosing-the-right-business-partner/#comments</comments>
		<pubDate>Tue, 22 Nov 2011 11:03:17 +0000</pubDate>
		<dc:creator>Floyd Price</dc:creator>
				<category><![CDATA[Business]]></category>

		<guid isPermaLink="false">http://www.floydprice.com/?p=304</guid>
		<description><![CDATA[I while back i wrote this post on the ablebots.com blog, its a pretty interesting piece even if i do say so myself, and as time has past since i wrote the post, the message has matured like a good wine. I really encourage you take a moment to read: http://www.ablebots.com/2011/04/24/choosing-a-business-partner/]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" title="Choosing a business Partner" src="http://www.ablebots.com/wp-content/uploads/2011/04/lineup-ablebots-business-partner.jpg" alt="" width="200" /></p>
<p>I while back i wrote <a title="Choose a Business Partner" href="http://www.ablebots.com/2011/04/24/choosing-a-business-partner/">this post</a> on the ablebots.com blog, its a pretty interesting piece even if i do say so myself, and as time has past since i wrote the post, the message has matured like a good wine.</p>
<div class="clear"></div>
<p>
I really encourage you take a moment to read:<br />
<a href="http://www.ablebots.com/2011/04/24/choosing-a-business-partner/">http://www.ablebots.com/2011/04/24/choosing-a-business-partner/</a>
</p<</p>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.floydprice.com/2011/11/blog-post-about-choosing-the-right-business-partner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2 new websites released this week!</title>
		<link>http://www.floydprice.com/2011/10/2-new-websites-released-this-week/</link>
		<comments>http://www.floydprice.com/2011/10/2-new-websites-released-this-week/#comments</comments>
		<pubDate>Fri, 14 Oct 2011 11:35:06 +0000</pubDate>
		<dc:creator>Floyd Price</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.floydprice.com/?p=238</guid>
		<description><![CDATA[The company I work for (Ablebots LLC) have released 2 new website this week, pretty exciting times! Check out: CodeSpaces.com  Ablebots.com Love It! &#160;]]></description>
			<content:encoded><![CDATA[<p>The company I work for (<a title="AbleBots LLC" href="http://www.ablebots.com">Ablebots LLC</a>) have released 2 new website this week, pretty exciting times!</p>
<p>Check out:</p>
<p><a title="Code Spaces" href="http://www.codespaces.com">CodeSpaces.com </a></p>
<p><a title="Ablebots LLC" href="http://www.ablebots.com">Ablebots.com</a></p>
<p>Love It!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.floydprice.com/2011/10/2-new-websites-released-this-week/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Great Customer Service</title>
		<link>http://www.floydprice.com/2011/01/great-customer-service/</link>
		<comments>http://www.floydprice.com/2011/01/great-customer-service/#comments</comments>
		<pubDate>Wed, 19 Jan 2011 14:20:58 +0000</pubDate>
		<dc:creator>Floyd Price</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.floydprice.com/2011/01/great-customer-service/</guid>
		<description><![CDATA[@spreedly 01/18/2011 Outage Details: http://bit.ly/hyNBsa Favorited by @floydyboy on Tuesday 18 January 2011 Published via TweetPress]]></description>
			<content:encoded><![CDATA[<div style="position: relative; margin: 16px; padding: 0pt; max-width: 500px;"><img src="http://a1.twimg.com/profile_images/220561190/twitter-spreedly2_normal.png" alt="Twitter profile image for spreedly" style="float: left; margin-top: 6px;">
<div style="padding: 0pt 8px; margin: 0pt 0pt 0pt 52px; clear: none;"><strong>@spreedly</strong> 01/18/2011 Outage Details: <a href="http://bit.ly/hyNBsa">http://bit.ly/hyNBsa</a>
<div style="color: rgb(136, 136, 136); margin: 2px 0pt 0pt; padding: 0pt; font-size: 83%;"><a href="http://twitter.com/#%21/spreedly/status/27446792870174720">Favorited</a> by <a href="http://twitter.com/#%21/floydyboy">@floydyboy</a> on Tuesday 18 January 2011</div>
</div>
<div style="clear: both;"></div>
</div>
<p style="font-size: 70%; margin: 0.5em 0pt 0pt; font-style: italic;">Published via <a href="http://tp.arctus.co.uk">TweetPress</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.floydprice.com/2011/01/great-customer-service/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding touch support to jQueryUI</title>
		<link>http://www.floydprice.com/2010/09/adding-touch-support-to-jqueryui/</link>
		<comments>http://www.floydprice.com/2010/09/adding-touch-support-to-jqueryui/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 15:04:04 +0000</pubDate>
		<dc:creator>Floyd Price</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[jqueryUI]]></category>
		<category><![CDATA[touch]]></category>

		<guid isPermaLink="false">http://www.floydprice.com/?p=235</guid>
		<description><![CDATA[I needed a quick and dirty way of getting the jQueryUI Slider component to work with the touch events on the iPhone and iPad (iOS) so after a little thinking I started writing a few lines of jQuery that would listed to the touch events and pass them on to the relevant jQuery core classes [...]]]></description>
			<content:encoded><![CDATA[<p>I needed a quick and dirty way of getting the jQueryUI Slider component to work with the touch events on the iPhone and iPad (iOS) so after a little thinking I started writing a few lines of jQuery that would listed to the touch events and pass them on to the relevant jQuery core classes so that any components based on jQuery would get the events for Free.</p>
<p> </p>
<p>About 10 minutes in it occured to me that this must have been done before and while i like hacking with touch events, I did a quick Google and found the exact script i was about to write.</p>
<p>If your looking to add  touch support to jQueryUI components look no further than <a href="http://code.google.com/p/jquery-ui-for-ipad-and-iphone/">this Google Code projec</a>t</p>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.floydprice.com/2010/09/adding-touch-support-to-jqueryui/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPad Multi-Touch &#8211; in Javascript.</title>
		<link>http://www.floydprice.com/2010/09/ipad-multi-touch-in-javascript/</link>
		<comments>http://www.floydprice.com/2010/09/ipad-multi-touch-in-javascript/#comments</comments>
		<pubDate>Sun, 05 Sep 2010 12:24:42 +0000</pubDate>
		<dc:creator>Floyd Price</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[IPhone]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[interesting]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[multitouch]]></category>
		<category><![CDATA[pointless]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://www.floydprice.com/?p=228</guid>
		<description><![CDATA[I recently came across a nice article/experiment from Matt Gemmell (﻿@mattgemmell) where he decided to test how many simultaneous touches the iPad Multi Touch display would register, it turns out its 11 and he put together a pretty impressive demo app to prove it (see the Screen Shot). At first sight you would think its a [...]]]></description>
			<content:encoded><![CDATA[<p><img style="float: right;" src="http://mattgemmell.com/images/ipad_touches_small.jpg" border="0" alt="ipad_touches_small.jpg" width="200" /></p>
<p>I recently came across a nice <a href="http://mattgemmell.com/2010/05/09/ipad-multi-touch">article/experiment</a> from <a href="http://mattgemmell.com">Matt Gemmell</a> (﻿@mattgemmell) where he decided to test how many simultaneous touches the iPad Multi Touch display would register, it turns out its 11 and he put together a pretty impressive demo app to prove it (see the Screen Shot).</p>
<p>At first sight you would think its a pretty complex application to achieve this, i mean all the multi touch stuff and the animation seems quite complex, however anybody who knows the iOS SDK will tell you that this stuff is trivial at best, and while Matt has done a great job of pulling it all together its far from complex.</p>
<h2>The SDK that wasn&#8217;t mean&#8217;t to be</h2>
<p>This application got me thinking about the iOS SDK and the fact that Apple originally didn&#8217;t want us writing native applications and in fact they wanted us to write Browser based applications in Javascript, HTML5 and CSS3.</p>
<p>Now its pretty clear to me that the native apps we see (in abundance) on the app store like Angry Birds, Twitterific, Pulse, Things, Pages, etc&#8230; <em>could</em> be written using JS, HTML5 and CSS3 but they would most ﻿definitely be poorer for it, come on, the runtime performance, the slick User Experience, simply can&#8217;t be replecated to the same level with an app running inside a Browser! (let the flame war begin)</p>
<p>So on that note i decided to replicate Matt&#8217;s Multi Touch application in Javascript, HTML5 and CSS3, so with a little digging around in Apples documentation I found all the Javascript events that expose touches (touchstart, touchend and touchmove) and began hacking!</p>
<p>Now let me say right now that this is one hours worth of hacking and the end goal was to build an application that was comparable to Matt&#8217;s, I suspect some of the code could be optimised, in fact I really hope that is the case when it comes to the Canvas drawing methods (but that is another story for another post).</p>
<p><img style="float: right;" src="http://www.floydprice.com/wp-content/uploads/2010/09/multitouchtest.png" border="0" alt="multitouchtest.png" width="200" height="150" />Now for some reason I fully expected the JS version to respond to less touches than the native version but in fact its 11 just like Matt&#8217;s Version, I also expected the animation to be less &#8220;smooth&#8221; and jerky when I was moving my fingers around, and I was spot on. The iPad benefits from multithreading and a graphics rendering pipeline, where the Browser that my app is running in does not so any processing I do to draw, calculate or respond to touch events all happens in the same thread as well as the browsers rendering code, this in a nut shell is the reason why these apps will not compete with Naive apps, I may in the near future re visit this topic and look at using <a href="http://www.whatwg.org/specs/web-workers/current-work/">HTML5 Web-Workers</a> which in theory would give me the ability to run background threads, but i suspect that even that wouldn&#8217;t help too much for applications that are so closely coupled to the rendering engine.</p>
<p>Anyway, <a href="http://www.floydprice.com/wp-content/uploads/2010/09/multiTouch.htm">here is the application I wrote</a> (visit it on an iOS device) it works almost exactly like the Original albeit its not as smooth. The source code is all inline (for your convenience) so feel free to take a look (lift, steal, optimise, laugh at, etc&#8230;) and let me know what you think.</p>
<h2>My Conclusion</h2>
<p>The iPad really is a &#8220;Magical&#8221; device, and with Great tools like <a href="http://www.sencha.com/products/touch/">Sencha Touch</a> web developers are better placed than ever before when it comes to building native-ish applications, but I really believe that these apps will be the poorer relations to their native cousins. So keep learning Obj-C folks!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.floydprice.com/2010/09/ipad-multi-touch-in-javascript/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Rails can&#8217;t scale!</title>
		<link>http://www.floydprice.com/2010/06/rails-cant-scale/</link>
		<comments>http://www.floydprice.com/2010/06/rails-cant-scale/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 05:25:32 +0000</pubDate>
		<dc:creator>Floyd Price</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Consulting]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.floydprice.com/?p=217</guid>
		<description><![CDATA[I&#8217;m not sure who coined the phrase &#8220;Rails can&#8217;t scale&#8221;? but its on of those things that amazingly keeps coming up, particularly when you talk to people in the corporate world who for some reason have it as the stock answer to any rails related discussions. Anyway this is my Open Source answer to that statement, [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m not sure who coined the phrase &#8220;Rails can&#8217;t scale&#8221;? but its on of those things that amazingly keeps coming up, particularly when you talk to people in the corporate world who for some reason have it as the stock answer to any rails related discussions.</p>
<p>Anyway this is my Open Source answer to that statement, so please if anybody asks you &#8220;can rails scale&#8221; or makes the statement &#8220;Rails can&#8217;t scale!&#8221; please feel free to use this answer&#8230;</p>
<blockquote>
<p>Applications built in rails are actually as capable of scaling as apps built in any other language (or on top of any other framework), in fact rails out-of-the-box is good enough for 99.9% of the applications you will ever write, and that tiny amount of apps that will have problems would have the same problems in ANY other language or framework. The benefits of Rails as a framework and Ruby as a language (Like Productivity, Maintainability, Developer Engagement, Mapping to an Agile Process) should in every case be considered over any notion of scaling issues. In fact if your app doesn&#8217;t have 8 million concurrent users right now, don&#8217;t worry about scaling at all, your wasting time that could be better spent getting 8 million users.</p>
</blockquote>
<p>Now this answer doesn&#8217;t touch the real issue with this question but in my experience it is good enough to satisfy the type of people who ask this question.</p>
<p>The only exception where i wouldn&#8217;t use this answer is if the question (or statement) comes from a &#8220;Technical Architect&#8221; in a large corperate who is paid 6 figures a year to keep a development team of 100+ moving forward, if he says &#8220;Rails can&#8217;t scale&#8221; Punch him between the fucking eyes, because he should know better.</p>
<p>The truth, is of course that, anybody who says this knows f-all about software architecture and in fact shouldn&#8217;t be in a position where they have an audience to spout their nonsense.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.floydprice.com/2010/06/rails-cant-scale/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

