<?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>Pathfinder Development &#187; Social Applications</title>
	<atom:link href="http://www.pathf.com/blogs/category/social-applications/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pathf.com/blogs</link>
	<description>Running commentary about agile development, user experience design and Ajax.</description>
	<lastBuildDate>Tue, 16 Mar 2010 13:42:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Ask the readers: How do you keep DRY when exposing your Rails apps to iGoogle?</title>
		<link>http://www.pathf.com/blogs/2009/01/ask-the-readers-how-do-you-keep-dry-when-exposing-your-rails-apps-to-igoogle/</link>
		<comments>http://www.pathf.com/blogs/2009/01/ask-the-readers-how-do-you-keep-dry-when-exposing-your-rails-apps-to-igoogle/#comments</comments>
		<pubDate>Mon, 12 Jan 2009 19:47:37 +0000</pubDate>
		<dc:creator>Brian Dillard</dc:creator>
				<category><![CDATA[Social Applications]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[iGoogle]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1358</guid>
		<description><![CDATA[My most recent Pathfinder project calls for a pretty typical Ruby on Rails web application with two interesting additional components: a Facebook application and an iGoogle gadget. Though a Rails Facebook plugin was easy to find, Rails development tools for iGoogle weren't as thick on the ground.
First, a bit of background: iGoogle, Google's personalized-homepage service, [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2009/01/ask-the-readers-how-do-you-keep-dry-when-exposing-your-rails-apps-to-igoogle/">Ask the readers: How do you keep DRY when exposing your Rails apps to iGoogle?</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/11/gwt-gadgets-and-opensocial-part-2/' rel='bookmark' title='Permanent Link: GWT, Gadgets and OpenSocial, Part 2'>GWT, Gadgets and OpenSocial, Part 2</a></li><li><a href='http://www.pathf.com/blogs/2007/12/rspec-and-rails/' rel='bookmark' title='Permanent Link: RSpec and Rails Custom Form Builders'>RSpec and Rails Custom Form Builders</a></li><li><a href='http://www.pathf.com/blogs/2008/08/integrating-design-drafts-into-your-rails-app/' rel='bookmark' title='Permanent Link: Integrating Design Drafts Into Your Rails App'>Integrating Design Drafts Into Your Rails App</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>My most recent Pathfinder project calls for a pretty typical Ruby on Rails web application with two interesting additional components: a Facebook application and an iGoogle gadget. Though <a href="http://www.pathf.com/blogs/2008/07/getting-started-with-facebooker/">a Rails Facebook plugin</a> was easy to find, Rails development tools for iGoogle weren't as thick on the ground.</p>
<p>First, a bit of background: iGoogle, Google's personalized-homepage service, offers developers two methods of application development:</p>
<ul>
<li>build a native gadget by wrapping custom HTML, CSS and JavaScript in an XML wrapper.</li>
<li>build a sandboxed gadget by wrapping an externally hosted web application in an iframe.</li>
</ul>
<p>Because of cross-domain security issues, gadgets that require authentication must be built using the iframe sandbox method. As it turns out, this method's a lot easier. Instead of building a whole new interface, you can just tart up your existing app with an iGoogle-optimized user interface. Why replicate your existing view logic with a bunch of iGoogle-specific JavaScript when you can just reskin and call it a day?</p>
<p>As it turns out, though, reskinning a Rails app for iGoogle isn't as simple as it might seem at first glance. I can think of three options. All have drawbacks:</p>
<p><span id="more-1358"></span></p>
<ol>
<li>Serve up your existing application using all the same controllers and actions. Just build a new iGoogle layout that works well within the small viewport of an iframed gadget. Of course, you'll need a mechanism to distinguish between iGoogle requests and normal requests. Your gadget could initially call up a one-off iGoogle controller that sets a session flag (<code>session[:igoogle] => true</code>) so that all subsequent requests get the iGoogle layout. The only problem is that visits to your normal application in the same browser will get polluted by the iGoogle flag. The iGoogle interface that works so well in a tiny iframe renders your main application almost unusable in a full browser window.</li>
<li>Use the same approach as above, but use a URL flag or a URL rewriting scheme to differentiate between iGoogle and normal requests. This keeps your normal application from having its layout accidentally toggled to the iGoogle one. But it's a lot of work. Accepting requests with an iGoogle flag is easy, but it's much harder to make sure that every link or form submittal within your application propagates that flag.</li>
<li>Build out a complete iGoogle controller that replicates every action from your normal application that you wish to expose to the iGoogle gadget. Depending on the number of actions and the complexity of each, this could require a lot of duplicated controller code. Of course, smart use of partials would reduce the amount of view-layer effort. Still, you've now got a ton of essentially identical controller actions that have to be maintained in two places.</li>
</ol>
<p><strong>None of these solutions is ideal, so let's hear from you, readers. How do you build Rails apps that lend themselves to efficient re-use within iGoogle or other sandboxed "gadget" contexts? Let us know in the comments.</strong></p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2009/01/ask-the-readers-how-do-you-keep-dry-when-exposing-your-rails-apps-to-igoogle/">Ask the readers: How do you keep DRY when exposing your Rails apps to iGoogle?</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/11/gwt-gadgets-and-opensocial-part-2/' rel='bookmark' title='Permanent Link: GWT, Gadgets and OpenSocial, Part 2'>GWT, Gadgets and OpenSocial, Part 2</a></li><li><a href='http://www.pathf.com/blogs/2007/12/rspec-and-rails/' rel='bookmark' title='Permanent Link: RSpec and Rails Custom Form Builders'>RSpec and Rails Custom Form Builders</a></li><li><a href='http://www.pathf.com/blogs/2008/08/integrating-design-drafts-into-your-rails-app/' rel='bookmark' title='Permanent Link: Integrating Design Drafts Into Your Rails App'>Integrating Design Drafts Into Your Rails App</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2009/01/ask-the-readers-how-do-you-keep-dry-when-exposing-your-rails-apps-to-igoogle/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Web Video Players &#8211; The Good the Bad and the Ugly</title>
		<link>http://www.pathf.com/blogs/2009/01/web-video-players-the-good-the-bad-and-the-ugly/</link>
		<comments>http://www.pathf.com/blogs/2009/01/web-video-players-the-good-the-bad-and-the-ugly/#comments</comments>
		<pubDate>Thu, 08 Jan 2009 17:40:49 +0000</pubDate>
		<dc:creator>Sholom Sandalow</dc:creator>
				<category><![CDATA[Rich Internet Apps]]></category>
		<category><![CDATA[Social Applications]]></category>
		<category><![CDATA[User Experience Design]]></category>
		<category><![CDATA[uxd]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1350</guid>
		<description><![CDATA[As I'm sure most of you do, I am spending more and more time online watching video.  So I thought I would take some time and rate the various video players I use on a frequent basis.
I'm using a 10 point scale, and I'm rating based on a both functionality and visual look and feel.
ESPN.com [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2009/01/web-video-players-the-good-the-bad-and-the-ugly/">Web Video Players &#8211; The Good the Bad and the Ugly</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2007/12/humor-bubble-vi/' rel='bookmark' title='Permanent Link: Humor: Bubble Video'>Humor: Bubble Video</a></li><li><a href='http://www.pathf.com/blogs/2007/07/youtube-killed/' rel='bookmark' title='Permanent Link: YouTube Killed the Video Star'>YouTube Killed the Video Star</a></li><li><a href='http://www.pathf.com/blogs/2008/07/jquery-plugins-five-tips-for-separating-the-good-from-the-bad-and-the-ugly/' rel='bookmark' title='Permanent Link: jQuery plugins: Five tips for separating the good from the bad and the ugly'>jQuery plugins: Five tips for separating the good from the bad and the ugly</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>As I'm sure most of you do, I am spending more and more time online watching video.  So I thought I would take some time and rate the various video players I use on a frequent basis.<br />
I'm using a 10 point scale, and I'm rating based on a both functionality and visual look and feel.</p>
<p><strong>ESPN.com </strong><em>7 out of 10</em><br />
Fairly simple, two color, semi transparent control bar, appears only when moused over--a design pattern I'm seeing more and more lately.  It's there when you need it, it shows you what you want and it gets out of the way quickly.  It's got a single play/pause button, a timer, a playback countdown, a volume control which displays only on mouseover, reducing clutter, and a menu which when clicked brings up some additional options for embedding sharing and the like.  A nice touch: Mouse over any point on the timer and you get a little tooltip that displays the time at that point.  Another nice touch: the small (no morethan 10 pixels vertical) bar at the bottom which displays how much has already played as a portion of the total.</p>
<p><strong>Youtube</strong> <em>7 out of 10<br />
</em>Gets the job done.  Period.  Simple consistent interface.  Youtube also allows publishers to add annotations and captions to their videos, and naturally allows viewers to turn either on or off, with a simple hover menu at the very right side of the control bar.  Youtube is actually doing some really cool stuff to allow publishers to make their videos more interactive, including adding hyperlinks within a movie.  The evolution of online video will be interesting to watch (and maybe take part in) but that discussion is beyond the scope of this post.</p>
<p><strong>NYtimes.com</strong> <em>6 out of 10</em><br />
Elegant interface, but could be better.  The control bar stays present throughout the video playback, and occupies a significant portion of the total video player.  However its muted style--3 shades of grey--makes it easily ignored when not needed.  The playback control is done superbly.  When moused over, a small draggable button smoothly and elegantly appears, it's affordance as a scroll mechanism to move to any point in the video is crystal clear.  The volume control is nice and large, with the same measure of affordance, however it looks like it was designed separately, as it doesn't conform to the rest<br />
of the control bar's aesthetic.  Also, I may be nit-picky, and I'm sure this won't bother 99% of nytimes.com viewers, but there's a large empty space in between the play button on the left, and the full screen button<br />
on the right, creating an odd asymmetry which, the more I look at it, the more it bothers me.</p>
<p><strong>MTV.com</strong> <em>6 out of 10</em><br />
Nice minimalist design.  Allows you to change the video quality during playback.  Also nice, allows you to choose from 3 sizes; standard, large and full screen.</p>
<p><strong>Viddler.com</strong> <em>6 out of 10</em><br />
Lets the video publisher skin the player interface.  This great tools allows users to comment on and tag the video in the timeline.  The interface is ugly, though, and some of the buttons aren't self explanatory, nor do any of the buttons have tooltips.  At the end of the current video it automatically plays the next video, whereas most other players present a menu of videos to choose from.</p>
<p><strong>MSNBC.com</strong> <em>5 out of 10</em><br />
Slick looking.  I like the fact that the playback bar is given the entire width of the video, allowing the viewer to be more precise in navigating to a specific point in the video.  The other controls are slightly confusing.  It looks like the interface was over designed.</p>
<p><strong>Virb.com</strong> <em>5 out of 10</em></p>
<p><em></em>Beautifully minimalist design.  No full screen mode, but it does have a cool feature that "turns off the lights" on the rest of the page.<br />
<strong>Facebook</strong> <em>5 out of 10<br />
</em>Fairly simple interface.  Standard controls, done adequately.  Its got none of the useful social media features of Youtube. No ability to tag or comment in the timeline.  Pretty basic for such an important part of such an important website.</p>
<p><strong>Metacafe</strong> <em>3 out of 10</em><br />
Poorly designed.  It's distracting when trying to watch video, and ugly to look at when interacting with.  The big blue shiny play and stop buttons look unprofessional, and why is there even a stop button.  The draggable playback scroll mechanism moves from left to right as the video plays, but it could have been made much more subtle.   There's no need to see it unless you want to move navigate the video.  And why does the entire playback bar glow when I mouse over it?  Also not cool is the visually loud menu underneath the control bar.</p>
<p>As with any list, much o this is subjective.  I'm looking forward to hearing your opinions.  Also, there are so many web video players out there, this is just the tip of the iceberg.  Let me know which ones you find especially appealing, or truly horrible.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2009/01/web-video-players-the-good-the-bad-and-the-ugly/">Web Video Players &#8211; The Good the Bad and the Ugly</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2007/12/humor-bubble-vi/' rel='bookmark' title='Permanent Link: Humor: Bubble Video'>Humor: Bubble Video</a></li><li><a href='http://www.pathf.com/blogs/2007/07/youtube-killed/' rel='bookmark' title='Permanent Link: YouTube Killed the Video Star'>YouTube Killed the Video Star</a></li><li><a href='http://www.pathf.com/blogs/2008/07/jquery-plugins-five-tips-for-separating-the-good-from-the-bad-and-the-ugly/' rel='bookmark' title='Permanent Link: jQuery plugins: Five tips for separating the good from the bad and the ugly'>jQuery plugins: Five tips for separating the good from the bad and the ugly</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2009/01/web-video-players-the-good-the-bad-and-the-ugly/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Category and UI changes on Pathfinder blogs</title>
		<link>http://www.pathf.com/blogs/2008/12/category-and-ui-changes-on-pathfinder-blogs/</link>
		<comments>http://www.pathf.com/blogs/2008/12/category-and-ui-changes-on-pathfinder-blogs/#comments</comments>
		<pubDate>Mon, 29 Dec 2008 16:50:45 +0000</pubDate>
		<dc:creator>Brian Dillard</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[Business Rules Engines]]></category>
		<category><![CDATA[Custom Application Development]]></category>
		<category><![CDATA[Disruption]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Flex, Flash and Air]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Pathfinder General]]></category>
		<category><![CDATA[Pathfinder News]]></category>
		<category><![CDATA[Product Strategy]]></category>
		<category><![CDATA[Rich Internet Apps]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Social Applications]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Software Development Best Practices]]></category>
		<category><![CDATA[Technologies and Platforms]]></category>
		<category><![CDATA[User Experience Design]]></category>
		<category><![CDATA[iPhone/Mobile]]></category>
		<category><![CDATA[uxd]]></category>
		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1338</guid>
		<description><![CDATA[If you read one or more of the Pathfinder blogs in our web interface, you may have noticed some tweaks to our navigation and top-level categories. Our goal in making these changes was to help different audiences drill down to the specific content that interests them. Instead of just a few top-level categories, we now [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/12/category-and-ui-changes-on-pathfinder-blogs/">Category and UI changes on Pathfinder blogs</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/05/the-blogs-have-moved/' rel='bookmark' title='Permanent Link: The Blogs Have Moved'>The Blogs Have Moved</a></li><li><a href='http://www.pathf.com/blogs/2008/12/puremvc-spanning-the-platform-spectrum/' rel='bookmark' title='Permanent Link: PureMVC, Spanning the Platform Spectrum?'>PureMVC, Spanning the Platform Spectrum?</a></li><li><a href='http://www.pathf.com/blogs/2009/04/touch-screen-kiosk-in-adobe-air/' rel='bookmark' title='Permanent Link: Touch Screen Kiosk in Adobe Air'>Touch Screen Kiosk in Adobe Air</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>If you read one or more of the Pathfinder blogs in our web interface, you may have noticed some tweaks to our navigation and top-level categories. Our goal in making these changes was to help different audiences drill down to the specific content that interests them. Instead of just a few top-level categories, we now boast around 20, though many posts appear in multiple categories. To subscribe via RSS to any specific category - or to our entire feed - just visit our <a href="http://www.pathf.com/blogs/feeds/">Feeds</a> page.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/12/category-and-ui-changes-on-pathfinder-blogs/">Category and UI changes on Pathfinder blogs</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/05/the-blogs-have-moved/' rel='bookmark' title='Permanent Link: The Blogs Have Moved'>The Blogs Have Moved</a></li><li><a href='http://www.pathf.com/blogs/2008/12/puremvc-spanning-the-platform-spectrum/' rel='bookmark' title='Permanent Link: PureMVC, Spanning the Platform Spectrum?'>PureMVC, Spanning the Platform Spectrum?</a></li><li><a href='http://www.pathf.com/blogs/2009/04/touch-screen-kiosk-in-adobe-air/' rel='bookmark' title='Permanent Link: Touch Screen Kiosk in Adobe Air'>Touch Screen Kiosk in Adobe Air</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/12/category-and-ui-changes-on-pathfinder-blogs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GWT, Gadgets and OpenSocial, Part 2</title>
		<link>http://www.pathf.com/blogs/2008/11/gwt-gadgets-and-opensocial-part-2/</link>
		<comments>http://www.pathf.com/blogs/2008/11/gwt-gadgets-and-opensocial-part-2/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 23:15:03 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Rich Internet Apps]]></category>
		<category><![CDATA[Social Applications]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Google Gadgets]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[iGoogle]]></category>
		<category><![CDATA[OpenSocial]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1262</guid>
		<description><![CDATA[Note: It is assumed that you know your way around GWT and Eclipse for purposes of this tutorial.
While developing OpenSocial applications can be a bit tricky, getting set up to develop can be a real pain in the neck. For this installment of OpenSocial and GWT, I'm going to go through the basics of setting [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/11/gwt-gadgets-and-opensocial-part-2/">GWT, Gadgets and OpenSocial, Part 2</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/10/gwt-gadgets-and-opensocial/' rel='bookmark' title='Permanent Link: GWT, Gadgets and OpenSocial'>GWT, Gadgets and OpenSocial</a></li><li><a href='http://www.pathf.com/blogs/2009/01/ask-the-readers-how-do-you-keep-dry-when-exposing-your-rails-apps-to-igoogle/' rel='bookmark' title='Permanent Link: Ask the readers: How do you keep DRY when exposing your Rails apps to iGoogle?'>Ask the readers: How do you keep DRY when exposing your Rails apps to iGoogle?</a></li><li><a href='http://www.pathf.com/blogs/2008/06/new-gwt-theme-pinky/' rel='bookmark' title='Permanent Link: New GWT Theme: Pinky?'>New GWT Theme: Pinky?</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.pathf.com/blogs/wp-content/uploads/2008/11/hellogadget.png"><img class="alignright size-medium wp-image-1264" style="float:right;padding:10px" title="hellogadget" src="http://www.pathf.com/blogs/wp-content/uploads/2008/11/hellogadget.png" alt="" width="300" height="286" /></a><strong>Note:</strong> It is assumed that you know your way around GWT and Eclipse for purposes of this tutorial.</p>
<p>While developing OpenSocial applications can be a bit tricky, getting set up to develop can be a real pain in the neck. For this installment of OpenSocial and GWT, I'm going to go through the basics of setting up a simple Hello World gadget with iGoogle. We'll get into the details of signing up for other OpenSocial containers, testing, and so on, later. Right now we're just going to do the basics.</p>
<p>So, what do you need to build a Google Gadget with GWT for iGoogle? You need the following:</p>
<ol>
<li> The <a href="http://code.google.com/webtoolkit/" rel="nofollow"  target="_blank">Google Web Toolkit</a></li>
<li>The <a href="http://code.google.com/docreader/#p=gwt-google-apis&amp;s=gwt-google-apis&amp;t=GadgetsGettingStarted" rel="nofollow"  target="_blank">GWT Google Gadget API</a></li>
<li>An account on <a href="http://www.google.com/ig" rel="nofollow"  target="_blank">iGoogle</a></li>
<li>Access to the <a href="http://www.google.com/ig/sandbox" rel="nofollow"  target="_blank">iGoogle sandbox</a></li>
<li>Some public server space so you can serve up your gadget to iGoogle</li>
</ol>
<p><span id="more-1262"></span></p>
<p>Pretty much everything else is self explanatory, but the sandbox can be a little bit confusing. Let's talk a little bit about the iGoogle sandbox. It's an experimental space where you can test things out without polluting your regular iGoogle account. Eventually you'll want several accounts in order to test. But every journey starts with a single step.</p>
<p>First, you need to sign up for iGoogle. I'll assume this isn't your first rodeo and you've done this before. Once you've got your iGoogle access, you'll want to go over to <a href="http://code.google.com/apis/igoogle/docs/gs.html" rel="nofollow"  target="_blank">this page</a> to sign up for the developer sandbox and add the developer tools to your space.</p>
<p>When developing, make sure that there's a message towards the top left of the page that says "Welcome to the iGoogle Developer sandbox." If you don't see that message, you're not in the sandbox. If you have to, navigate to <a href="http://www.google.com/ig/sandbox" rel="nofollow"  target="_blank">http://www.google.com/ig/sandbox</a>. You may have to "sign up" again to drop into the sandbox.</p>
<p>Once there, you can add those developer tools. Just clicking <a href="http://www.google.com/ig/sharetab?atr=Developer%20Tools&amp;n_32=url%3Dhttp://hosting.gmodules.com/ig/gadgets/file/107532026754505494237/updates.xml&amp;n_32=url%3Dhttp://hosting.gmodules.com/ig/gadgets/file/105542374478112771668/sandbox-friends.xml&amp;n_32=url%3Dhttp://hosting.gmodules.com/ig/gadgets/file/107532026754505494237/sandboxProfileEditor.xml&amp;n_32=url%3Ddeveloper.xml" rel="nofollow"  target="_blank">this link</a> will get you started.</p>
<p>The developer widgets are:</p>
<ul>
<li>My Gadgets: let's you set inlining and caching on the Gadgets on your page from a handy interface</li>
<li>Sandbox Profile Editor: let's you modify your profile in the sandbox so you can test a few things out.</li>
<li>Sadbox Friends: lets you view and edit who your friends are. Important for OpenSocial applications.</li>
<li>Updates:shows activities posted to your friends while interacting with the gadget.</li>
</ul>
<p><strong>The Hello World Gadget</strong></p>
<p>In this part we're not doing anything OpenSocial related. We're just setting up a Google Gadget. That's a necessary first step for the OpenSocial stuff.</p>
<p>Let's get started. In my example I'll be working in <code>~/src/HelloGadget</code>. Create a <code>lib</code> directory and put the <code>gwt-gadgets.jar</code> library file from the GWT Gadgets API project in it. Next, we run the GWT <code>projectCreator</code> to create our ant and Eclipse files:</p>
<pre>./projectCreator -ant HelloGadget -eclipse HelloGadget -out ~/src/HelloGadget/ -addToClassPath ~/src/HelloGadget/lib/gwt-gadgets.jar
Created directory /Users/dkappe/src/HelloGadget/src
Created directory /Users/dkappe/src/HelloGadget/test
Created file /Users/dkappe/src/HelloGadget/HelloGadget.ant.xml
Created file /Users/dkappe/src/HelloGadget/.project
Created file /Users/dkappe/src/HelloGadget/.classpath</pre>
<p>Now we create a simple sample application using the <code>applicationCreator</code> tool:</p>
<pre>./applicationCreator -eclipse HelloGadget -out ~/src/HelloGadget/ -addToClassPath ~/src/HelloGadget/lib/gwt-gadgets.jar com.pathf.demo.app.gwt.client.HelloGadget
Created directory /Users/dkappe/src/HelloGadget/src/com/pathf/demo/app/gwt
Created directory /Users/dkappe/src/HelloGadget/src/com/pathf/demo/app/gwt/client
Created directory /Users/dkappe/src/HelloGadget/src/com/pathf/demo/app/gwt/public
Created file /Users/dkappe/src/HelloGadget/src/com/pathf/demo/app/gwt/HelloGadget.gwt.xml
Created file /Users/dkappe/src/HelloGadget/src/com/pathf/demo/app/gwt/public/HelloGadget.html
Created file /Users/dkappe/src/HelloGadget/src/com/pathf/demo/app/gwt/public/HelloGadget.css
Created file /Users/dkappe/src/HelloGadget/src/com/pathf/demo/app/gwt/client/HelloGadget.java
Created file /Users/dkappe/src/HelloGadget/HelloGadget.launch
Created file /Users/dkappe/src/HelloGadget/HelloGadget-shell
Created file /Users/dkappe/src/HelloGadget/HelloGadget-compile</pre>
<p>You now have a nice little application that you can run using the hosted mode script <code>HelloGadget-shell</code> in the <code>src/HelloGadget</code> directory. Congratulations, you have a sample GWT application.</p>
<p>But we want a Google Gadget. In order to make it a gadget, we have to change the code a bit. First, import the project into Eclipse. Then open the <code>HelloGadget.gwt.xml</code> and add the following inherit statement.</p>
<pre class="xml"><span style="color: #009900;"><span style="color: #808080; font-style: italic;">&lt;!-- Other module inherits                                      --&gt;</span></span>
	  <span style="color: #009900;"><span style="color: #808080; font-style: italic;">&lt;!-- Inherit Google Gadgets API --&gt;</span></span></pre>
<p>Now let's open up the <code>HelloGadget.java</code> file. We're going to change it around a bit so it can be a gadget. The critical part of the original looks like this.</p>
<pre class="java5"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HelloGadget <span style="color: #000000; font-weight: bold;">implements</span> EntryPoint <span style="color: #66cc66;">&#123;</span>
&nbsp;
  <span style="color: #808080; font-style: italic;">/**
   * This is the entry point method.
   */</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">void</span> onModuleLoad<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></pre>
<p>We change our class to extend <code>Gadget</code> and change the <code>onModuleLoad</code> method to <code>init</code>.</p>
<pre class="java5">@ModulePrefs<span style="color: #66cc66;">&#40;</span>title = <span style="color: #ff0000;">&quot;HelloGadget&quot;</span>, author = <span style="color: #ff0000;">&quot;Dietrich Kappe&quot;</span>, author_email = <span style="color: #ff0000;">&quot;dkappe@gmail.com&quot;</span>, height = <span style="color: #cc66cc;">300</span>, description = <span style="color: #ff0000;">&quot;A simple gadget.&quot;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HelloGadget <span style="color: #000000; font-weight: bold;">extends</span> Gadget <span style="color: #66cc66;">&#123;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">/**
	 * This is the entry point method.
	 */</span>
	@<a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Override.html" rel="nofollow" ><span style="color: #aaaadd; font-weight: bold;">Override</span></a>
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #993333;">void</span> init<span style="color: #66cc66;">&#40;</span>UserPreferences preferences<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></pre>
<p>You have to also import the following three classes:</p>
<pre class="java5"><span style="color: #000000; font-weight: bold;">import</span> com.<span style="color: #006600;">google</span>.<span style="color: #006600;">gwt</span>.<span style="color: #006600;">gadgets</span>.<span style="color: #006600;">client</span>.<span style="color: #006600;">Gadget</span>;
<span style="color: #000000; font-weight: bold;">import</span> com.<span style="color: #006600;">google</span>.<span style="color: #006600;">gwt</span>.<span style="color: #006600;">gadgets</span>.<span style="color: #006600;">client</span>.<span style="color: #006600;">UserPreferences</span>;
<span style="color: #000000; font-weight: bold;">import</span> com.<span style="color: #006600;">google</span>.<span style="color: #006600;">gwt</span>.<span style="color: #006600;">gadgets</span>.<span style="color: #006600;">client</span>.<span style="color: #006600;">Gadget</span>.<span style="color: #006600;">ModulePrefs</span>;</pre>
<p><strong>Running the Darned Thing</strong></p>
<p>Done! Well, not quite. While changing the <code>EntryPoint</code> to a <code>Gadget</code> was pretty straightforward, we now need a container to run the thing. Mind you, it will still run in it's current form in hosted mode, but all of those things it's expecting from iGoogle are not going to happen. So it's time to inject it into iGoogle.</p>
<p>Go ahead and compile the code using the shell command <code>HelloGadget-compile</code>. The resulting compiled JavaScript and sundries is under the <code>www</code> directory in your projects home. If you take a look, you'll see a new file that you likely haven't seen before, namely <code>com.pathf.demo.app.gwt.client.HelloGadget.gadget.xml</code>. This is the gadget manifest. Essentially, this is what your gadget container needs to load to display the app. Many of the parameters are set by the parameters to the <code>@ModulePrefs</code> annotation.</p>
<p>Bundle this app up and upload it to your publicly available server. In my case, I've uploaded the app <a href="http://www.pathf.com/sites/pfd/test/HelloGadget/com.pathf.demo.app.gwt.client.HelloGadget.gadget.xml" rel="nofollow" >here</a>. This is the link to the XML file. You can now go to the sandbox and, using the My Gadgets gadget, add it to your sandbox.</p>
<p><a href="http://www.pathf.com/blogs/wp-content/uploads/2008/11/mygadgets.png"><img class="alignnone size-medium wp-image-1265" title="mygadgets" src="http://www.pathf.com/blogs/wp-content/uploads/2008/11/mygadgets.png" alt="" width="300" height="230" /></a></p>
<p>You can tweak some of the settings having to do with caching of he Gadget resources with the MyGadgets gadgets, but more on that later. Next time we'll set up our simple Gadget in various other containers and perform something a little bit more useful with it (but only a little).</p>
<p>As always, comments and questions are welcome.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/11/gwt-gadgets-and-opensocial-part-2/">GWT, Gadgets and OpenSocial, Part 2</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/10/gwt-gadgets-and-opensocial/' rel='bookmark' title='Permanent Link: GWT, Gadgets and OpenSocial'>GWT, Gadgets and OpenSocial</a></li><li><a href='http://www.pathf.com/blogs/2009/01/ask-the-readers-how-do-you-keep-dry-when-exposing-your-rails-apps-to-igoogle/' rel='bookmark' title='Permanent Link: Ask the readers: How do you keep DRY when exposing your Rails apps to iGoogle?'>Ask the readers: How do you keep DRY when exposing your Rails apps to iGoogle?</a></li><li><a href='http://www.pathf.com/blogs/2008/06/new-gwt-theme-pinky/' rel='bookmark' title='Permanent Link: New GWT Theme: Pinky?'>New GWT Theme: Pinky?</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/11/gwt-gadgets-and-opensocial-part-2/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>GWT, Gadgets and OpenSocial</title>
		<link>http://www.pathf.com/blogs/2008/10/gwt-gadgets-and-opensocial/</link>
		<comments>http://www.pathf.com/blogs/2008/10/gwt-gadgets-and-opensocial/#comments</comments>
		<pubDate>Mon, 27 Oct 2008 22:26:48 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Custom Application Development]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Rich Internet Apps]]></category>
		<category><![CDATA[Social Applications]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Software Development Best Practices]]></category>
		<category><![CDATA[Google Gadgets]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[OpenSocial]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1219</guid>
		<description><![CDATA[I've been developing with GWT, OpenSocial and Orkut, using the gwt-google-apis project on Google Code (specifically the gadgets subproject). It's a nice enough api that makes it relatively painless to build gadgets in GWT.
This is a bit different from Didier's gOpenSocial library, which was an early success at building OpenSocial gadgets with GWT. But the [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/10/gwt-gadgets-and-opensocial/">GWT, Gadgets and OpenSocial</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/11/gwt-gadgets-and-opensocial-part-2/' rel='bookmark' title='Permanent Link: GWT, Gadgets and OpenSocial, Part 2'>GWT, Gadgets and OpenSocial, Part 2</a></li><li><a href='http://www.pathf.com/blogs/2009/11/gwt-20-rc1-released/' rel='bookmark' title='Permanent Link: GWT 2.0 RC1 Released'>GWT 2.0 RC1 Released</a></li><li><a href='http://www.pathf.com/blogs/2009/02/grails-delegating-to-gorm-persistence-in-java/' rel='bookmark' title='Permanent Link: Grails: Delegating to GORM Persistence in Java'>Grails: Delegating to GORM Persistence in Java</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p><img style="float:right; padding:10px" src="http://www.opensocial.org/_/rsrc/1206063575764/config/app/images/customLogo/customLogo.gif?revision=7" alt="" />I've been developing with GWT, <a href="http://code.google.com/apis/opensocial/" rel="nofollow"  target="_blank">OpenSocial</a> and <a href="http://www.orkut.com/" rel="nofollow"  target="_blank">Orkut</a>, using the <a href="http://code.google.com/p/gwt-google-apis/" rel="nofollow"  target="_blank">gwt-google-apis</a> project on Google Code (specifically the gadgets subproject). It's a nice enough api that makes it relatively painless to build gadgets in GWT.</p>
<p>This is a bit different from <a href="http://code.google.com/p/gopensocial/" rel="nofollow"  target="_blank">Didier's gOpenSocial library</a>, which was an early success at building OpenSocial gadgets with GWT. But the google gadget library isn't really quite ready for OpenSocial. I've skinned my knee here and there, so I thought I'd give others the benefit of my experience.</p>
<p>So, first thing, how the heck do I get GWT to generate the</p>
<p>line into my manifest?</p>
<p><span id="more-1219"></span><br />
Is it a parameter to the <code>@ModulePrefs</code> annotation? No. It's not. The way the GWT gadgets API deals with required features is by defining an interface that the Gadget class then implements.</p>
<pre class="java5"><span style="color: #000000; font-weight: bold;">package</span> com.<span style="color: #006600;">pathf</span>.<span style="color: #006600;">gwt</span>.<span style="color: #006600;">simplegadget</span>.<span style="color: #006600;">client</span>.<span style="color: #006600;">api</span>;
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> com.<span style="color: #006600;">google</span>.<span style="color: #006600;">gwt</span>.<span style="color: #006600;">gadgets</span>.<span style="color: #006600;">client</span>.<span style="color: #006600;">GadgetFeature</span>.<span style="color: #006600;">FeatureName</span>;
&nbsp;
@FeatureName<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;opensocial-0.7&quot;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">interface</span> OpenSocial <span style="color: #66cc66;">&#123;</span>
	<span style="color: #993333;">void</span> initializeFeature<span style="color: #66cc66;">&#40;</span>OpenSocialFeature feature<span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre>
<p>The feature itself extends com.google.gwt.gadgets.client.GadgetFeature and looks like this.</p>
<pre class="java5"><span style="color: #000000; font-weight: bold;">package</span> com.<span style="color: #006600;">pathf</span>.<span style="color: #006600;">gwt</span>.<span style="color: #006600;">simplegadget</span>.<span style="color: #006600;">client</span>.<span style="color: #006600;">api</span>;
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> com.<span style="color: #006600;">google</span>.<span style="color: #006600;">gwt</span>.<span style="color: #006600;">gadgets</span>.<span style="color: #006600;">client</span>.<span style="color: #006600;">GadgetFeature</span>;
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> OpenSocialFeature <span style="color: #000000; font-weight: bold;">implements</span> GadgetFeature <span style="color: #66cc66;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">private</span> OpenSocialFeature<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre>
<p>The class declaration for my simple gadget then looks something like this:</p>
<pre class="java5">@ModulePrefs<span style="color: #66cc66;">&#40;</span>title = <span style="color: #ff0000;">&quot;SimpleGadget&quot;</span>, author = <span style="color: #ff0000;">&quot;Me&quot;</span>, author_email = <span style="color: #ff0000;">&quot;me@gmail.com&quot;</span>, height = <span style="color: #cc66cc;">300</span>, description = <span style="color: #ff0000;">&quot;A simple gadget.&quot;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> SimpleGadget <span style="color: #000000; font-weight: bold;">extends</span> Gadget <span style="color: #000000; font-weight: bold;">implements</span> OpenSocial <span style="color: #66cc66;">&#123;</span></pre>
<p>There are some drawbacks to this particular approach, specifically that the version of OpenSocial is hardcoded into the interface. Future versions of the GWT gadgets API should probably approach this in a different way.</p>
<p>Anyhow, I hope I've saved some folks the trouble of figuring out how to write the OpenSocial requires into the manifest. I'll show how to overcome a few of the other stumbling blocks on the way to building a full featured OpenSocial gadget.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/10/gwt-gadgets-and-opensocial/">GWT, Gadgets and OpenSocial</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/11/gwt-gadgets-and-opensocial-part-2/' rel='bookmark' title='Permanent Link: GWT, Gadgets and OpenSocial, Part 2'>GWT, Gadgets and OpenSocial, Part 2</a></li><li><a href='http://www.pathf.com/blogs/2009/11/gwt-20-rc1-released/' rel='bookmark' title='Permanent Link: GWT 2.0 RC1 Released'>GWT 2.0 RC1 Released</a></li><li><a href='http://www.pathf.com/blogs/2009/02/grails-delegating-to-gorm-persistence-in-java/' rel='bookmark' title='Permanent Link: Grails: Delegating to GORM Persistence in Java'>Grails: Delegating to GORM Persistence in Java</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/10/gwt-gadgets-and-opensocial/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Getting things done with Flock and Meebo</title>
		<link>http://www.pathf.com/blogs/2008/09/getting-things-done-with-flock-and-meebo/</link>
		<comments>http://www.pathf.com/blogs/2008/09/getting-things-done-with-flock-and-meebo/#comments</comments>
		<pubDate>Mon, 08 Sep 2008 20:01:02 +0000</pubDate>
		<dc:creator>Brian Dillard</dc:creator>
				<category><![CDATA[Social Applications]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[User Experience Design]]></category>
		<category><![CDATA[uxd]]></category>
		<category><![CDATA[Adium]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Flock]]></category>
		<category><![CDATA[getting things done]]></category>
		<category><![CDATA[GTD]]></category>
		<category><![CDATA[Meebo]]></category>
		<category><![CDATA[NetNewsWire]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[work life balance]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1138</guid>
		<description><![CDATA[
During a recent GTD weekly review, I suddenly realized how many distractions had worked their way into my daily office routine: personal email, personal instant messaging, entertainment feeds, Facebook. I suspect such time-wasters pose a bigger danger to web developers than to other professionals, if only because the programs they run in are so central [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/09/getting-things-done-with-flock-and-meebo/">Getting things done with Flock and Meebo</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/07/application_wat_1-2/' rel='bookmark' title='Permanent Link: Application Watch &#8211; Kool, a Meebo IM Competitor'>Application Watch &#8211; Kool, a Meebo IM Competitor</a></li><li><a href='http://www.pathf.com/blogs/2008/11/icons-are-evil-so-are-menus-unless-you-do-them-right/' rel='bookmark' title='Permanent Link: Icons are evil; so are menus &#8211; unless you do them right'>Icons are evil; so are menus &#8211; unless you do them right</a></li><li><a href='http://www.pathf.com/blogs/2008/12/category-and-ui-changes-on-pathfinder-blogs/' rel='bookmark' title='Permanent Link: Category and UI changes on Pathfinder blogs'>Category and UI changes on Pathfinder blogs</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.pathf.com/blogs/wp-content/uploads/2008/09/flock-and-meebo.jpg"><img class="right" title="Flock and Meebo" src="http://www.pathf.com/blogs/wp-content/uploads/2008/09/flock-and-meebo.jpg" alt="Screenshot of Flock and Meebo" width="200" height="194" /></a></p>
<p>During a recent <a href="http://en.wikipedia.org/wiki/Getting_Things_Done" rel="nofollow" >GTD</a> weekly review, I suddenly realized how many distractions had worked their way into my daily office routine: personal email, personal instant messaging, entertainment feeds, Facebook. I suspect such time-wasters pose a bigger danger to web developers than to other professionals, if only because the programs they run in are so central to our work. I run <a href="http://www.mozilla.com/en-US/firefox/" rel="nofollow" >Firefox</a> for web development, <a href="http://www.adiumx.com/" rel="nofollow" >Adium</a> for instant messaging, and <a href="http://www.newsgator.com/INDIVIDUALS/NETNEWSWIRE/" rel="nofollow" >NetNewsWire</a> for industry news all day out of necessity. If I allow my personal distractions to jump out at me from those programs, my productivity plummets.</p>
<p>This weekend, I worked hard to de-tangle my professional and personal lives. My tools? <a href="http://flock.com/" rel="nofollow" >Flock</a>, the Mozilla-based "social browser," and <a href="http://www.meebo.com/" rel="nofollow" >Meebo</a>, the browser-based IM aggregation service. My goal was to separate all personal bookmarks and RSS feeds from NetNewsWire and Firefox into Flock, then move all my personal IM accounts from Adium to Meebo. The end result was a self-imposed firewall between productive time and fun time. (Thanks to <a href="http://lifehacker.com/" rel="nofollow" >many a Lifehacker article</a> for the basic idea, if not the implementation.)</p>
<p><span id="more-1138"></span></p>
<h3>Getting started with Flock</h3>
<p><a href="http://en.wikipedia.org/wiki/Flock_(web_browser)" rel="nofollow" >Flock</a> represents a noble attempt to shoehorn social networks and other web utilities into the chassis of a Mozilla-based browser. Sure, many of its features could be achieved in a standard Firefox install. But I didn't want to have to run two copies of Firefox, one for work and one for play, and manage separate user profiles for each. Besides, my goal was to create a hub for my online social activities, so why not use a browser specifically designed for that purpose?</p>
<p>I also could have moved my social stuff to Safari, but that would have required adjusting to the quirks of a browser I'd previously employed only for cross-browser development. <a href="http://flock.com/beta/download/" rel="nofollow" >Flock 2 beta</a> is essentially a tricked-out Firefox 3, so it offers a pretty seamless transition for this Mozilla. It even runs my essential Firefox 3 extensions, such as <a href="http://foxmarks.com/" rel="nofollow" >Foxmarks</a> and <a href="https://addons.mozilla.org/en-US/firefox/addon/1122" rel="nofollow" >Tab Mix Plus</a>. With those in place, Flock looks like a souped-up sedan version of Firefox - slower, sure, but with more bells and whistles and a pretty coat of paint.</p>
<p>One feature that especially interested me was Flock's RSS integration. Sure, Firefox does this, too, but Flock's interface is nicer. You can interact with your feeds in a familiar two-pane interface rather than simply viewing headlines from a Live Bookmark. Flock's UI doesn't yet match the convenience of the keyboard-friendly NetNewsWire, but that's fine. I can live without power-user features when I'm just perusing <a href="http://consumerist.com/" rel="nofollow" >The Consumerist</a> or <a href="http://whedonesque.com/" rel="nofollow" >Whedonesque</a>.</p>
<p>After a few days of using Flock to browse Facebook, scan <a href="http://friendfeed.com/armchairdj" rel="nofollow" >FriendFeed</a>, check Gmail, update <a href="http://twitter.com/armchairdj" rel="nofollow" >Twitter</a> and attend to my online banking, I'm sold. I don't really use the widgets on the My World splash page very much, but the integrated toolbar for interacting with Web 2.0 destinations works seamlessly. It's nice to be able to check for unread mail without firing up the entire Gmail interface. And I'm certain I'll use some of the blogging tools pretty frequently. One downside, though: You can't adjust fonts in the People Sidebar and other Flock-specific XUL widgets. My poor, aching eyes will forgive this misstep for now.</p>
<h3>Getting started with Meebo</h3>
<p>Instant messaging wastes as much time as it saves. Commingling of friends and coworkers on the same buddy list has always been dangerous. But even if you're careful, you'll get bleedthrough. Today's valued colleague often becomes tomorrow's high-maintenance friend once somebody switches jobs. Unless you want to give everybody you've ever known equal power to interrupt your work, you need a strategy for separating IM accounts. Creating a new account each time you start a job isn't enough. Hence my decision to segregate my accounts into two separate programs.</p>
<p>Cross-platform IM clients continue to proliferate, but web-based Meebo offers an interesting take on the concept. With its clean interface, soothing palette and lightning-fast Ajax interface, Meebo applies tried-and-true Web 2.0 design techniques to dowdy old chat. I used to have five IM accounts in my local Adium instance, but now I've moved four of them into Meebo. When I want to chat with friends, I can fire up Flock and open a Meebo tab. But when I need to focus on work, I can just shut it down and leave Adium open for agile team interactions at Pathfinder.</p>
<p>As with Flock, there's nothing about this setup that I couldn't have accomplished without Meebo. I could manually log off my non-business IM accounts whenever I want to focus on work. But I'm sufficiently prone to procrastination that such measures don't work. I need to trick myself psychologically, creating a completely different context for work chat and personal chat. Warm, inviting Meebo generates some much-needed contrast with cold, functional Adium.</p>
<h3>Now the hard part: Sticking to the rules</h3>
<p>Of course, prying apart the personal and the professional does no good if you're constantly firing up your fun apps alongside the work ones. Now that I've segregated all my time-wasting feeds, distracting chatter and enticing games, I've got to stick to the single rule that makes everything work: Only run Flock-plus-Meebo at specific intervals. I'm giving myself 15 minutes during morning coffee, 30 minutes at lunch, and unlimited time once I'm home at night.</p>
<p>It may seem counter-intuitive to get down to work with the help of two applications designed primarily for fun. But the work/play firewall helps me stay disciplined.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/09/getting-things-done-with-flock-and-meebo/">Getting things done with Flock and Meebo</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/07/application_wat_1-2/' rel='bookmark' title='Permanent Link: Application Watch &#8211; Kool, a Meebo IM Competitor'>Application Watch &#8211; Kool, a Meebo IM Competitor</a></li><li><a href='http://www.pathf.com/blogs/2008/11/icons-are-evil-so-are-menus-unless-you-do-them-right/' rel='bookmark' title='Permanent Link: Icons are evil; so are menus &#8211; unless you do them right'>Icons are evil; so are menus &#8211; unless you do them right</a></li><li><a href='http://www.pathf.com/blogs/2008/12/category-and-ui-changes-on-pathfinder-blogs/' rel='bookmark' title='Permanent Link: Category and UI changes on Pathfinder blogs'>Category and UI changes on Pathfinder blogs</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/09/getting-things-done-with-flock-and-meebo/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Big Changes Underway at LinkedIn for Groups</title>
		<link>http://www.pathf.com/blogs/2008/09/big-changes-underway-at-linkedin-for-groups/</link>
		<comments>http://www.pathf.com/blogs/2008/09/big-changes-underway-at-linkedin-for-groups/#comments</comments>
		<pubDate>Thu, 04 Sep 2008 22:42:46 +0000</pubDate>
		<dc:creator>Joe Gillespie</dc:creator>
				<category><![CDATA[Disruption]]></category>
		<category><![CDATA[Product Strategy]]></category>
		<category><![CDATA[Social Applications]]></category>
		<category><![CDATA[Software Development Best Practices]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[Social Networking]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1135</guid>
		<description><![CDATA[LinkedIn has made several significant changes along the way.  The changes that are underway now are in regard to Groups.  In the past, members have been able to join as many groups as they want.  I’ve found it’s a great way to reach out to people and explore areas of common interest, [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/09/big-changes-underway-at-linkedin-for-groups/">Big Changes Underway at LinkedIn for Groups</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/06/chicago-front-end-web-developers-group-forms-on-linkedin/' rel='bookmark' title='Permanent Link: Chicago Front-End Web Developers group forms on LinkedIn'>Chicago Front-End Web Developers group forms on LinkedIn</a></li><li><a href='http://www.pathf.com/blogs/2009/01/chicago-javascript-meetup-group-draws-a-big-audience-with-varied-skill-levels/' rel='bookmark' title='Permanent Link: Chicago JavaScript Meetup Group draws a big audience with varied skill levels'>Chicago JavaScript Meetup Group draws a big audience with varied skill levels</a></li><li><a href='http://www.pathf.com/blogs/2010/03/values-product/' rel='bookmark' title='Permanent Link: Who values your product and do you value them?'>Who values your product and do you value them?</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>LinkedIn has made several significant changes along the way.  The changes that are underway now are in regard to Groups.  In the past, members have been able to join as many groups as they want.  I’ve found it’s a great way to reach out to people and explore areas of common interest, since the group logos generally appear on your profile. If you are logged in, when you view someone else’s profile it shows you the groups you have in common with that person.</p>
<p>The changes underway with groups have some positive and negative attributes. First, as a negative, LinkedIn is imposing a cap of 50 groups that any member can belong to. Changes have already started but effective 9/12/2008 if you haven’t already reduced the number of groups down to 50 LinkedIn will do it for you based on the sequence of when you originally joined various groups.  While 50 may sound like a lot to some people, I was in 1,351 groups and deciding which groups to keep has been difficult, especially since I initiated and sponsored over 10 groups myself.</p>
<p>On the positive side groups will now have the ability within LinkedIn to support discussion groups, blogs. That means for a lot of groups you won’t need a Yahoo Group or something akin to that as a base and although the feature set may be more limited you’ll have tighter integration.  Another negative is that LinkedIn could ultimately control your group since they control membership in LinkedIn.  Stay tuned for updates as to how this is progressing.</p>
<p>If you haven't experienced what's available in terms of groups from LinkedIn, here's a way to check it out.  Groups are free to join and when you perform a LinkedIn search, you can specifically search within specific groups.  Support Chicago’s 2016 Olympic bid by clicking the link below and Joining the Chicago 2016 LinkedIn Supporters Group:<br />
<a href="http://www.linkedin.com/e/gis/54811" rel="nofollow" >http://www.linkedin.com/e/gis/54811</a></p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/09/big-changes-underway-at-linkedin-for-groups/">Big Changes Underway at LinkedIn for Groups</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/06/chicago-front-end-web-developers-group-forms-on-linkedin/' rel='bookmark' title='Permanent Link: Chicago Front-End Web Developers group forms on LinkedIn'>Chicago Front-End Web Developers group forms on LinkedIn</a></li><li><a href='http://www.pathf.com/blogs/2009/01/chicago-javascript-meetup-group-draws-a-big-audience-with-varied-skill-levels/' rel='bookmark' title='Permanent Link: Chicago JavaScript Meetup Group draws a big audience with varied skill levels'>Chicago JavaScript Meetup Group draws a big audience with varied skill levels</a></li><li><a href='http://www.pathf.com/blogs/2010/03/values-product/' rel='bookmark' title='Permanent Link: Who values your product and do you value them?'>Who values your product and do you value them?</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/09/big-changes-underway-at-linkedin-for-groups/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting Started with Facebooker</title>
		<link>http://www.pathf.com/blogs/2008/07/getting-started-with-facebooker/</link>
		<comments>http://www.pathf.com/blogs/2008/07/getting-started-with-facebooker/#comments</comments>
		<pubDate>Wed, 30 Jul 2008 20:53:37 +0000</pubDate>
		<dc:creator>Josh Symonds</dc:creator>
				<category><![CDATA[Custom Application Development]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Social Applications]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Software Development Best Practices]]></category>
		<category><![CDATA[Web Application Development]]></category>
		<category><![CDATA[Facebook]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1065</guid>
		<description><![CDATA[Developing for the Facebook platform can be a big headache, and on Rails your headaches are unfortunately compounded from the get-go. While the otherwise-inferior PHP users get an API library from the Facebook development team (I'm kidding, I love you PHP guys), on Rails we have to deal with gems that aren't even at version [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/07/getting-started-with-facebooker/">Getting Started with Facebooker</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/04/facebook-applic/' rel='bookmark' title='Permanent Link: Facebook Application Logistics for Team Development'>Facebook Application Logistics for Team Development</a></li><li><a href='http://www.pathf.com/blogs/2009/01/getting-started-with-rails-testing-guide-now-available/' rel='bookmark' title='Permanent Link: Getting Started With Rails Testing Guide Now Available'>Getting Started With Rails Testing Guide Now Available</a></li><li><a href='http://www.pathf.com/blogs/2009/08/facebook-connect/' rel='bookmark' title='Permanent Link: Facebook Connect'>Facebook Connect</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Developing for the Facebook platform can be a big headache, and on Rails your headaches are unfortunately compounded from the get-go. While the otherwise-inferior PHP users get an API library from the Facebook development team (I'm kidding, I love you PHP guys), on Rails we have to deal with gems that aren't even at version 1.0 yet. While Facebooker is quite good at this point, its <a href="http://facebooker.rubyforge.org/" rel="nofollow" >documentation</a> covers a rather sparse selection of its impressive feature set, and RFacebook, which is better documented, hasn't been updated in aeons and is way more difficult to use besides. And unfortunately the standard <a href="http://apps.new.facebook.com/facebooker_tutorial/" rel="nofollow" >Facebooker tutorial</a> doesn't include the newest features from the recent Facebook profile overhaul or even all the necessary steps to get a new Rails application running on Facebook. So, enter Josh.</p>
<p>In this blog post I'll tell you the best way to integrate Facebooker into a new Rails project so you can start developing social networking applications quickly and easily, and how to hook them in to Facebook's new profile plan. The goal is that by the end of this post you'll have a totally working Facebooker Rails application and you'll understand how to develop in it at least a little bit.</p>
<p><span id="more-1065"></span></p>
<h3>Getting Started</h3>
<pre class="bash">ails <span style="color: #7a0874; font-weight: bold;">test</span>
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #7a0874; font-weight: bold;">test</span>
<span style="color: #c20cb9; font-weight: bold;">rm</span> public/index.html
script/plugin <span style="color: #c20cb9; font-weight: bold;">install</span> git://github.com/mmangino/facebooker.git</pre>
<p>Now go to <a href="http://www.facebook.com/developers/" rel="nofollow" >the Facebook developer application</a> and add it in.</p>
<p style="margin: 5px 0px 10px 35px;"><a href="http://www.pathf.com/blogs/wp-content/uploads/2008/07/blog1.png"><br />
<img title="Allow Access to the Developer Application" src="http://www.pathf.com/blogs/wp-content/uploads/2008/07/blog1.png" alt="Allow Access to the Developer Application" /><br />
</a></p>
<p>Click on Allow, then on Create a New Application to get the ball rolling. Come up with a good name for your future masterpiece, read and agree to the Facebook TOS, and create your application.</p>
<p>You'll be dropped to your application page which lists your API key and your secret. Let's get those into our application. After you installed the Facebooker plugin, you'll find a new yml file in config called facebooker.yml. Copy and paste the API key and secret into facebooker.yml under the correct fields in the development environment (and also the production environment if this copy of the application will eventually be going live).</p>
<p>Now there are some settings we have to monkey with. Click on Edit Settings and you'll be taken to your application settings page. There are a couple hyper important things to do here.</p>
<p>The first is to fill in the callback URL. This is the real URL of the server that will be hosting your application. For development purposes, this should be a non-standard port on a server that you can open non-standard ports on. We'll change this to a more accessible port once we've finished development.</p>
<p>Secondly, the canvas URL specifies the location people will see in their address bar when they actually access your app. This is the point of access to your application for users -- if they go to the actual URL of your server (like www.test.com), they'll be redirected to this canvas page by Facebooker. So make it something memorable and sensible.</p>
<p style="margin: 5px 0px 10px 40px;"><a href="http://www.pathf.com/blogs/wp-content/uploads/2008/07/blog10.png"><img title="Callback URL and Canvas Path" src="http://www.pathf.com/blogs/wp-content/uploads/2008/07/blog10.png" alt="Callback URL and Canvas Path" /></a></p>
<p>Third, ensure you've selected "yes" for "Can your application be added to Facebook?" Otherwise you're not going to be seeing your application in its full FBML glory anytime soon. When you click "yes" the "Installation Options" area appears. Check "Users" for who can add your Facebook application to your account, and also check the "Development Mode" box so only you can your team can install the app.</p>
<p>Once you've made those changes, save your application, and add in the canvas URL and canvas_page_name to facebooker.yml (in my example, http://www.test.com:8000 and pathfinder_test, respectively). Once you click save you'll be returned to your application settings page.</p>
<p style="margin: 5px 0px 10px 30px;"><a href="http://www.pathf.com/blogs/wp-content/uploads/2008/07/blog4.png"><img title="Application Info" src="http://www.pathf.com/blogs/wp-content/uploads/2008/07/blog4.png" alt="Application Info" /></a></p>
<p>When you're returned to the application's setting page, click on the "View About Page" link. (It's in the lower right of the screen shot right above this). You'll then be looking at the application's about page, which should look a lot like this:</p>
<p style="margin: 5px 0px 10px 30px;"><a href="http://www.pathf.com/blogs/wp-content/uploads/2008/07/blog6.png"><img title="Application Homepage" src="http://www.pathf.com/blogs/wp-content/uploads/2008/07/blog6.png" alt="Application Homepage" /></a></p>
<p>If it does, we're on the right track.</p>
<h3>Digging a Tunnel</h3>
<p>When you're developing Facebook apps, having a remote server to develop on is completely integral. If you're developing in FBML (and in the new version of the Facebook profile system, FBML is practically required), to see the results of your hard work you'll have to actually allow the Facebook servers to interpret your markup. That means they need access to your development machine, or you need a tunnel from your development machine to a remote server that's already accessible from the Internet, or you set up a staging server by following the advice of Noel Rappin's excellent blog post, <a href="http://www.pathf.com/blogs/2008/04/facebook-applic/">Facebook Application Logistics for Team Development</a>.</p>
<p>I recommend the latter route.</p>
<p>But if you don't have the resources to come up with your own staging server, we have to choose either your own computer or a tunnel. Opening up your computer to the Internet is a bad thing; development machines and networks have firewalls for a reason. So select a remote server that you have sudo rights to and let's get started building a tunnel.</p>
<p>Sudo rights are necessary because you'll likely have to edit your remote host's sshd config. (At least, I did.) Append this to the end of sshd_config:</p>
<pre>GatewayPorts clientspecified</pre>
<p>Now return to your handy-dandy facebooker.yml. Under the tunnel section for development, put in the username you have on the remote machine, the machine's URL, the port you can open on the remote machine (under public port), and the server you'll be running on your local machine (3000 is the Rails default).</p>
<p>Starting the tunnel is simple. From the root of your app:</p>
<pre>rake facebooker:tunnel:start</pre>
<p>You'll be asked for your SSH password to the remote server. If the connection is successful you will see nothing on this terminal session. Open up a new terminal and start your local server on your local port.</p>
<p>Navigate to http://apps.new.facebook.com/canvas_path and your server will report this routing error:</p>
<p style="margin: 5px 0px 10px 30px;"><a href="http://www.pathf.com/blogs/wp-content/uploads/2008/07/blog7.png"><img title="It Works! Kind of!" src="http://www.pathf.com/blogs/wp-content/uploads/2008/07/blog7.png" alt="It Works! Kind of!" /></a></p>
<p>Congrats, we're up and running... sort of.</p>
<h3>Getting on the Rails</h3>
<p>We're seeing this error because Facebooker expects a route to be generated with :conditions =&gt; {:canvas =&gt; true} if it's intended for consumption by Facebook. We have no such route and there's nothing in our app at this point anyway. But now that we've finished with the Facebook side of this application, let's work on getting something in Rails that Facebook can understand.</p>
<p>A good place to start is our first scaffold.</p>
<pre>script/generate scaffold airplane model:string pilot:string destination:string arrival:datetime
rake db:migrate</pre>
<p>Unfortunately scaffolding won't do a whole lot to help us right away. We have to modify the Rails-generated files fairly significantly before our Facebook page will work. To start with, open up config/routes.rb. At the top you'll see map.resources :airplanes. Change that to:</p>
<pre class="ruby">map.<span style="color:#9900CC;">resources</span> <span style="color:#ff3333; font-weight:bold;">:airplanes</span>, <span style="color:#ff3333; font-weight:bold;">:conditions</span> =&amp;gt; <span style="color:#006600; font-weight:bold;">&#123;</span>:canvas =&amp;gt; <span style="color:#0000FF; font-weight:bold;">true</span><span style="color:#006600; font-weight:bold;">&#125;</span></pre>
<p>And while we're here go ahead and uncomment map.root and change it to:</p>
<pre class="ruby">map.<span style="color:#9900CC;">root</span> <span style="color:#ff3333; font-weight:bold;">:controller</span> =&amp;gt; <span style="color:#996600;">&quot;airplanes&quot;</span></pre>
<p>Now our controller is connected correctly, but if you try to refresh you'll see we're getting 406 errors: the format that the request is coming in is unacceptable to the webserver. Fixing that is as easy as opening up config/initializers/mime_types.rb. Append this line to it:</p>
<pre class="ruby"><span style="color:#6666ff; font-weight:bold;">Mime::Type</span>.<span style="color:#9900CC;">register_alias</span> <span style="color:#996600;">&quot;text/html&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:fbml</span></pre>
<p>Restart your server after you save.</p>
<p>FBML will now be correctly processed by Rails, but your application still doesn't understand when to call FBML pages. You'll need to go into the airplanes_controller and change every format.html in a respond_to block to format.fbml. For example, after I altered the index action, it looked like this:</p>
<pre class="ruby">app/controllers/airplanes_controller.<span style="color:#9900CC;">rb</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># GET /airplanes</span>
<span style="color:#008000; font-style:italic;"># GET /airplanes.xml</span>
<span style="color:#9966CC; font-weight:bold;">def</span> index
  <span style="color:#0066ff; font-weight:bold;">@airplanes</span> = Airplanes.<span style="color:#9900CC;">find</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:all</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
  respond_to <span style="color:#9966CC; font-weight:bold;">do</span> |format|
    <span style="color:#CC0066; font-weight:bold;">format</span>.<span style="color:#9900CC;">fbml</span> <span style="color:#008000; font-style:italic;"># index.fbml.erb</span>
    <span style="color:#CC0066; font-weight:bold;">format</span>.<span style="color:#9900CC;">xml</span>  <span style="color:#006600; font-weight:bold;">&#123;</span> render &lt;img src=<span style="color:#996600;">'http://www.pathf.com/blogs/wp-includes/images/smilies/icon_mad.gif'</span> alt=<span style="color:#996600;">':x'</span> <span style="color:#9966CC; font-weight:bold;">class</span>=<span style="color:#996600;">'wp-smiley'</span> /&gt; ml =&amp;gt; <span style="color:#0066ff; font-weight:bold;">@airplanes</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre>
<p>After you've finished that, there's another fun task awaiting you. Now our application knows that it's receiving FBML and that it has to call FBML pages when it gets a request formatted in FBML. Unfortunately we have no files that are formatted with FBML: they're all HTML right now. So, open up app/views and change every file there from *.html.erb to *.fbml.erb. Yes, this is kind of painful, but it's over quickly.</p>
<p>When you're done, your views should look like this.</p>
<p style="margin: 5px 0px 10px 120px;"><a href="http://www.pathf.com/blogs/wp-content/uploads/2008/07/blog8.png"><img title="What your airplane views should look like" src="http://www.pathf.com/blogs/wp-content/uploads/2008/07/blog8.png" alt="What your airplane views should look like" /></a></p>
<p>Finally, you need to edit layouts/airplanes.fbml.erb. &lt;body&gt; tags are illegal in FBML and must be removed before Facebook will process our page. For simplicity's sake, I usually remove &lt;html&gt; and &lt;head&gt; as well, since you can't change the head of the page anyway. My layouts/airplanes.fbml.erb ended up looking this simple:</p>
<pre>app/views/layouts/airplanes.fbml.erb

&lt;p style="color: green"&gt;&lt;%= flash[:notice] %&gt;&lt;/p&gt;

&lt;%= yield  %&gt;</pre>
<h3>The Fun Stuff: Getting Information</h3>
<p>Finally! Now that this is all accomplished, if you go to your canvas page in your browser, you should see your local server receive the request and render the airplanes index. You can go through the regular scaffold actions here but it's honestly not very exciting. Didn't I promise some FBML at the beginning? All we've really got here is HTML. Sure, it's cool and all, but can't we do something more with it?</p>
<p>The key to that 'something more' is inserting the following line at the top of airplanes_controller:</p>
<pre>ensure_application_is_installed_by_facebook_user</pre>
<p>This is a standard before filter and it accepts :except and <img src='http://www.pathf.com/blogs/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> nly just like a regular one might. If a user encounters this filter they'll be forced to install your application. Installation empowers an already-existing controller method that I haven't referenced before: facebook_session. facebook_session is the Facebooker object that allows you to make calls to the Facebook API server but it wasn't doing us a whole lot of good before now, since almost no API calls can be made before a user installs an application.</p>
<p>After a user installs your application, this changes dramatically. We can now leverage the power of the Facebook API to pull from and push to the user profile.</p>
<p>A good, straightforward idea at this point is to automatically identify the Facebook user when they visit to your application. Create a user model and make sure it has a uid string field in the migration. Once that's done, let's put in a quick before filter in our airplanes_controller:</p>
<pre class="ruby">app/controllers/airplanes_controller.<span style="color:#9900CC;">rb</span>
&nbsp;
  before_filter <span style="color:#ff3333; font-weight:bold;">:get_user</span>
  ...
&nbsp;
  <span style="color:#9900CC;">private</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> get_user
    <span style="color:#0066ff; font-weight:bold;">@current_user</span> =
      User.<span style="color:#9900CC;">find_or_create_by_uid</span><span style="color:#006600; font-weight:bold;">&#40;</span>facebook_session.<span style="color:#9900CC;">user</span>.<span style="color:#9900CC;">id</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span></pre>
<p>Now you'll automatically load the @current_user every time they return to your Facebook app. You'll probably want to tie most of your application data to this user: their posters, their songs, whatever your Facebook application does, this is the easy way to identify the incoming Facebook user and get their stuff accordingly.</p>
<p>You can call any of a user's profile information from the facebook_session.user object, like facebook_session.user.name, facebook_session.user.books, and so on and so forth. (id obviously returns the Facebook user id for our subject.)</p>
<h3>The Funner (More Fun) Stuff: Setting Information</h3>
<p>Of course, our application can't reasonably be considered cool unless it can put messages all over a user's profile. Facebooker provides an amazing utility to do this that is almost hilariously under-documented: it allows you to set up ActionMailer-style models to deliver information straight to a user's profile!</p>
<p>Before we actually update the user's profile, though, we must have permission to do it. The new Facebook profile system requires you to specifically request permission to add your application to a user's profile; if you send information to their profile before you request information, you'll get a success message but nothing will appear on the user profile. Let's put in a cute little block in the airplane layout to bug a user to add our app to their profile:</p>
<pre>app/views/layouts/airplanes.fbml.erb

&lt;fb:if-section-not-added section="profile"&gt;
  &lt;p&gt;Add Airplanes to your profile to see it listed there.&lt;/p&gt;
  &lt;fb:add-section-button section="profile" /&gt;
&lt;/fb:if-section-not-added&gt;</pre>
<p>Thanks to the magic of FBML the if-section-not-added tags appear only if the section isn't added for the users; the add-section-button presents them with a button to add your application to their profile. Once they've added your application this section will disappear and you'll be able to update their profile as per normal.</p>
<p>To add information to a user's profile, make a new file in the models directory, and name it as if it were an ActionMailer.</p>
<pre class="ruby">app/models/user_mailer.<span style="color:#9900CC;">rb</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> UserMailer &amp;lt; <span style="color:#6666ff; font-weight:bold;">Facebooker::Rails::Publisher</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> profile<span style="color:#006600; font-weight:bold;">&#40;</span>user<span style="color:#006600; font-weight:bold;">&#41;</span>
    send_as <span style="color:#ff3333; font-weight:bold;">:profile</span>
    from user
    recipients user
    fbml = <span style="color:#996600;">&quot;This is some test FBML that will be inserted into a user's profile.&quot;</span>
    profile<span style="color:#006600; font-weight:bold;">&#40;</span>fbml<span style="color:#006600; font-weight:bold;">&#41;</span>
    profile_main<span style="color:#006600; font-weight:bold;">&#40;</span>fbml<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">end</span></pre>
<p>Obviously, the mailer is descending from Facebooker::Rails::Publisher instead of the regular ActionMailer. send_as :profile instructs the Publisher to send this as a profile update, rather than a mini-feed update or other Facebook content type. You can designate the user the profile update is from and the one that it's to: in my application they're both the same, but they might differ for yours. You can render the FBML from a file here too if you want.</p>
<p>Setting profile is the deprecated way of updating a user's profile: profile_main is the way used in the new Facebook styles, but for backwards compatibility include both here.</p>
<p>Now, from your controller, simply include this line in an action to update their profile:</p>
<pre class="ruby">UserMailer.<span style="color:#9900CC;">deliver_profile</span><span style="color:#006600; font-weight:bold;">&#40;</span>facebook_session.<span style="color:#9900CC;">user</span><span style="color:#006600; font-weight:bold;">&#41;</span></pre>
<p>The profile information will be packaged and sent off to the target user and will appear immediately in their profile (provided they've added your app).</p>
<h3>Going Further</h3>
<p>Obviously this is a very broad overview of the power of Facebooker, concentrating more on its installation and setup then how to really leverage its power. If you want to figure out everything it can do, the <a href="http://apps.new.facebook.com/facebooker_tutorial/" rel="nofollow" >Facebooker tutorial on the Facebook</a> is sure to be a great help to you. Otherwise my suggestion to you is to inspect the source of Facebooker to really understand its functionality. As I said at the beginning of the document, it is unfortunately not very well documented at all, but at least if you follow the advice I've posted here you'll have an excellent start for developing your Facebook applications.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/07/getting-started-with-facebooker/">Getting Started with Facebooker</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/04/facebook-applic/' rel='bookmark' title='Permanent Link: Facebook Application Logistics for Team Development'>Facebook Application Logistics for Team Development</a></li><li><a href='http://www.pathf.com/blogs/2009/01/getting-started-with-rails-testing-guide-now-available/' rel='bookmark' title='Permanent Link: Getting Started With Rails Testing Guide Now Available'>Getting Started With Rails Testing Guide Now Available</a></li><li><a href='http://www.pathf.com/blogs/2009/08/facebook-connect/' rel='bookmark' title='Permanent Link: Facebook Connect'>Facebook Connect</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/07/getting-started-with-facebooker/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Google Health and the Changing Landscape of Healthcare Analytics</title>
		<link>http://www.pathf.com/blogs/2008/06/google-health-and-the-changing-landscape-of-healthcare-analytics/</link>
		<comments>http://www.pathf.com/blogs/2008/06/google-health-and-the-changing-landscape-of-healthcare-analytics/#comments</comments>
		<pubDate>Wed, 25 Jun 2008 20:57:28 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Disruption]]></category>
		<category><![CDATA[Product Strategy]]></category>
		<category><![CDATA[Social Applications]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Software Development Best Practices]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Healthcare]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=990</guid>
		<description><![CDATA[Google is at it again. Entire industries have sprung up around their search engine, adwords/adsense universe, and now they are set to do the same thing with healthcare data.
One of the major barriers to entry for companies offering services around processing healthcare data has been access to data. Who has the data? Typically the insurance [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/06/google-health-and-the-changing-landscape-of-healthcare-analytics/">Google Health and the Changing Landscape of Healthcare Analytics</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/12/google-analytics-tracking-component-for-flash-platform/' rel='bookmark' title='Permanent Link: Google Analytics Tracking Component for Flash Platform'>Google Analytics Tracking Component for Flash Platform</a></li><li><a href='http://www.pathf.com/blogs/2006/09/web_serice_and_/' rel='bookmark' title='Permanent Link: Web Serice and Mashup Pros and Cons and the First Google Clone'>Web Serice and Mashup Pros and Cons and the First Google Clone</a></li><li><a href='http://www.pathf.com/blogs/2006/08/google_pitching/' rel='bookmark' title='Permanent Link: Google Pitching Services to Small and Medium Sized Businesses'>Google Pitching Services to Small and Medium Sized Businesses</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.pathf.com/blogs/wp-content/uploads/2008/06/healthrules2.png"><img class="alignnone size-medium wp-image-991" style="float:right;padding:10px" title="healthrules2" src="http://www.pathf.com/blogs/wp-content/uploads/2008/06/healthrules2.png" alt="" width="300" height="257" /></a>Google is at it again. Entire industries have sprung up around their search engine, adwords/adsense universe, and now they are set to do the same thing with healthcare data.</p>
<p>One of the major barriers to entry for companies offering services around processing healthcare data has been access to data. Who has the data? Typically the insurance companies. At least they have it in the kind of quantities that makes doing serious data analysis worthwhile. Managed care organizations are in second place, but from there you get to piddling amounts quickly. As you move from the heavily consolidated payer end of the industry to the heavily fragmented provider end, the comprehensive data view of the patient is balkanized to the point of uselessness.</p>
<p>This data problem even effects the valuation of companies. I've seen healthcare analytics companies that provide services to hospitals and clinics valued at less than $10 million, while another company that provides the exact same services to insurance firms is valued at ten times that price. Here, as in all things, follow the money.<br />
<span id="more-990"></span><br />
There have been public/private efforts to consolidate healthcare data in a central store, such as Regional Health Information Organizations (<a href="http://en.wikipedia.org/wiki/RHIO" rel="nofollow"  target="_blank">RHIO</a>s). The architects of the RHIOs realized that doing a national information organization would be too unwieldy and smack a little bit too much of <a href="http://en.wikipedia.org/wiki/Big_Brother_(1984)" rel="nofollow"  target="_blank">Big Brother</a>, but the regional ones have been bad enough, turning into debating societies between vendors, technocrats, and politicians. This has lead many regional health organizations and hospital networks to start their own pseudo-RHIOs. Still, service vendors would have to strike deals with these local entities to get access to data.</p>
<p><a href="https://www.google.com/health/html/about/" rel="nofollow"  target="_blank">Google Health</a> seeks to level the playing field by providing a data repository for personal health data. Individuals would access a Google Health aware service by granting it access to their data. Provided that enough individuals join and enough provider organizations make it easy to import your data, the battlefield now moves from getting data to getting customers. Bring your data, we'll tell you if your doctor is any good or if that surgery is really necessary. We'll help you find the best Medicare prescription plan based on your actual health data and identify generic alternatives instead of the pricey medication that some former-college-cheerleader-turned-pharma-salesperson pitched your doctor.</p>
<p>Some other nice things about Google Health is that it has support for <a href="http://en.wikipedia.org/wiki/SNOMED" rel="nofollow"  target="_blank">SNOMED</a>. SNOMED is a newer form of encoding clinical data than what is typically used in the US today. There's a whole host of reasons to prefer SNOMED over our current systems (yes, more than one) of encoding today. One example would be that most clinical data that gets collected today is all about getting paid by the insurance companies. What do providers get paid for? Procedures, not diagnoses. Very often in clinical claims data you will run across individuals who have been diagnoses with something like asthma, just so the provider can be paid for treating them. There's no concept like "I am working this individual up on suspicion that they have asthma, but he may not actually have asthma." So the clinical record is littered with expedient diagnoses made just for purposes of getting paid. You can imaging the havoc this plays with doing meaningful data analysis. Anyhow, SNOMED has a richer set of codes that would enable providers to express these sorts of concepts.</p>
<p>Of course Google isn't alone in trying to crack the healthcare data puzzle -- Microsoft is pushing its <a href="http://www.healthvault.com/" rel="nofollow"  target="_blank">HealthVault</a> and WebMD and various health insurers with their own PHR (Personal Health Record) walled gardens may yet open them up to other service providers. Regardless, I think the next 5 years promise to be exciting for those of us that develop healthcare software. Finally, the chance for something besides Ajax and social networking to come out of the <a href="http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html" rel="nofollow"  target="_blank">Web 2.0</a> cauldron.</p>
<p>---</p>
<p>Read more about <a href="http://www.pathf.com/pathfinder-services/health-care-analytics/" rel="nofollow" >Pathfinder's Healthcare Analytics Practince</a></p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/06/google-health-and-the-changing-landscape-of-healthcare-analytics/">Google Health and the Changing Landscape of Healthcare Analytics</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/12/google-analytics-tracking-component-for-flash-platform/' rel='bookmark' title='Permanent Link: Google Analytics Tracking Component for Flash Platform'>Google Analytics Tracking Component for Flash Platform</a></li><li><a href='http://www.pathf.com/blogs/2006/09/web_serice_and_/' rel='bookmark' title='Permanent Link: Web Serice and Mashup Pros and Cons and the First Google Clone'>Web Serice and Mashup Pros and Cons and the First Google Clone</a></li><li><a href='http://www.pathf.com/blogs/2006/08/google_pitching/' rel='bookmark' title='Permanent Link: Google Pitching Services to Small and Medium Sized Businesses'>Google Pitching Services to Small and Medium Sized Businesses</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/06/google-health-and-the-changing-landscape-of-healthcare-analytics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chicago Front-End Web Developers group forms on LinkedIn</title>
		<link>http://www.pathf.com/blogs/2008/06/chicago-front-end-web-developers-group-forms-on-linkedin/</link>
		<comments>http://www.pathf.com/blogs/2008/06/chicago-front-end-web-developers-group-forms-on-linkedin/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 18:46:15 +0000</pubDate>
		<dc:creator>Brian Dillard</dc:creator>
				<category><![CDATA[Rich Internet Apps]]></category>
		<category><![CDATA[Social Applications]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[front end development]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[user interface]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=972</guid>
		<description><![CDATA[
LinkedIn's Groups feature hasn't quite reached maturity yet, but my friend and occasional colleague Zack Frazier hasn't let that get in his way. Zack recently launched the Chicago Front-End Web Developers group as a way to help UI specialists network and connect.
According to their site, the LinkedIn folks are apparently hard at work making Groups [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/06/chicago-front-end-web-developers-group-forms-on-linkedin/">Chicago Front-End Web Developers group forms on LinkedIn</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/09/big-changes-underway-at-linkedin-for-groups/' rel='bookmark' title='Permanent Link: Big Changes Underway at LinkedIn for Groups'>Big Changes Underway at LinkedIn for Groups</a></li><li><a href='http://www.pathf.com/blogs/2009/01/chicago-javascript-meetup-group-draws-a-big-audience-with-varied-skill-levels/' rel='bookmark' title='Permanent Link: Chicago JavaScript Meetup Group draws a big audience with varied skill levels'>Chicago JavaScript Meetup Group draws a big audience with varied skill levels</a></li><li><a href='http://www.pathf.com/blogs/2008/08/working-effectively-as-a-team-of-one-five-tips-for-front-end-developers-on-agile-teams/' rel='bookmark' title='Permanent Link: Working effectively as a team of one: Five tips for front-end developers on Agile teams'>Working effectively as a team of one: Five tips for front-end developers on Agile teams</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.pathf.com/blogs/wp-content/uploads/2008/06/linkedin.gif"><img class="right" src="http://www.pathf.com/blogs/wp-content/uploads/2008/06/linkedin.gif" alt="LinkedIn logo" width="119" height="32" /></a></p>
<p>LinkedIn's Groups feature hasn't quite reached maturity yet, but my friend and occasional colleague Zack Frazier hasn't let that get in his way. Zack recently launched the <a href="http://www.linkedin.com/e/gis/117470/5679B35AD647" rel="nofollow" >Chicago Front-End Web Developers</a> group as a way to help UI specialists network and connect.</p>
<p>According to their site, the LinkedIn folks are apparently hard at work making Groups more useful:</p>
<blockquote><p>The groups directory is not currently open. We are working on creating a searchable directory for all groups. If there are groups you wish to join, you may click on the group logo from the profile of a group member and request to join.</p></blockquote>
<p><a href="http://www.pathf.com/blogs/wp-content/uploads/2008/06/linkedingroups.jpg"><img class="left" src="http://www.pathf.com/blogs/wp-content/uploads/2008/06/linkedingroups.jpg" alt="LinkedIn groups" width="300" height="277" /></a></p>
<p>In the meantime, you can join Chicago Front-End Web Developers using this <a href="http://www.linkedin.com/e/gis/117470/5679B35AD647" rel="nofollow" >direct link</a>. Joining allows you to put your loyalties on display to prospective contacts (see screenshot).</p>
<p>UI folks, stand and be counted!</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/06/chicago-front-end-web-developers-group-forms-on-linkedin/">Chicago Front-End Web Developers group forms on LinkedIn</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/09/big-changes-underway-at-linkedin-for-groups/' rel='bookmark' title='Permanent Link: Big Changes Underway at LinkedIn for Groups'>Big Changes Underway at LinkedIn for Groups</a></li><li><a href='http://www.pathf.com/blogs/2009/01/chicago-javascript-meetup-group-draws-a-big-audience-with-varied-skill-levels/' rel='bookmark' title='Permanent Link: Chicago JavaScript Meetup Group draws a big audience with varied skill levels'>Chicago JavaScript Meetup Group draws a big audience with varied skill levels</a></li><li><a href='http://www.pathf.com/blogs/2008/08/working-effectively-as-a-team-of-one-five-tips-for-front-end-developers-on-agile-teams/' rel='bookmark' title='Permanent Link: Working effectively as a team of one: Five tips for front-end developers on Agile teams'>Working effectively as a team of one: Five tips for front-end developers on Agile teams</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/06/chicago-front-end-web-developers-group-forms-on-linkedin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Facebook apps: Not too late to compete on the user experience front</title>
		<link>http://www.pathf.com/blogs/2008/05/facebook-apps-not-too-late-to-compete-on-the-user-experience-front/</link>
		<comments>http://www.pathf.com/blogs/2008/05/facebook-apps-not-too-late-to-compete-on-the-user-experience-front/#comments</comments>
		<pubDate>Thu, 29 May 2008 21:12:27 +0000</pubDate>
		<dc:creator>Brian Dillard</dc:creator>
				<category><![CDATA[Custom Application Development]]></category>
		<category><![CDATA[Rich Internet Apps]]></category>
		<category><![CDATA[Social Applications]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Software Development Best Practices]]></category>
		<category><![CDATA[User Experience Design]]></category>
		<category><![CDATA[uxd]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Games]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=930</guid>
		<description><![CDATA[Despite the hype, Facebook's a frontier rather than an established metropolis. There's still room to ride into town on a white horse and save the day, earning yourself a healthy reward in the process. Exhibit A? The so-so user interface standards of the social network's most popular applications.

I recently, belatedly started playing Scrabulous with various [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/05/facebook-apps-not-too-late-to-compete-on-the-user-experience-front/">Facebook apps: Not too late to compete on the user experience front</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/08/facebook-connect/' rel='bookmark' title='Permanent Link: Facebook Connect'>Facebook Connect</a></li><li><a href='http://www.pathf.com/blogs/2008/02/ionut-alex-chit/' rel='bookmark' title='Permanent Link: Gmail, agile development and user experience design'>Gmail, agile development and user experience design</a></li><li><a href='http://www.pathf.com/blogs/2009/06/the-importance-of-user-experience-do-you-understand-it-in-your-bones/' rel='bookmark' title='Permanent Link: The Importance of User Experience &#8211; Do You Understand It in Your Bones?'>The Importance of User Experience &#8211; Do You Understand It in Your Bones?</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Despite the hype, <a href="http://www.pathf.com/blogs/tag/facebook/">Facebook</a>'s a frontier rather than an established metropolis. There's still room to ride into town on a white horse and save the day, earning yourself a healthy reward in the process. Exhibit A? The so-so user interface standards of the social network's most popular applications.</p>
<p class="right"><a href="http://www.pathf.com/blogs/wp-content/uploads/2008/05/scrabulous.jpg"><img title="Scrabulous" src="http://www.pathf.com/blogs/wp-content/uploads/2008/05/scrabulous.jpg" alt="Scrabulous" width="300" /></a></p>
<p>I recently, belatedly started playing <a href="http://www.scrabulous.com/" rel="nofollow" >Scrabulous</a> with various friends and I'm shocked at the just-okayness of its <acronym title="user interface">UI</acronym>. The lack of an on-screen legend for the mechanics of the variously shaded bonus squares? Puzzling. The drag-and-drop interface for shuffling tiles around in your tray? Maddeningly persnickety. The mismatch between the word lookup feature, which uses <a href="http://www.thefreedictionary.com" rel="nofollow" >thefreedictionary.com</a>, and the application's own, internal whitelist of valid words? A real bummer.</p>
<p>Scrabulous provides an adequate ripoff of a venerable and justly loved board game. But the rough edges of its user experience suggest that Facebook still has plenty of room for folks who know how to polish a UI till it gleams. Sure, first-to-market advantage gets magnified on social networks. But as these new application platforms mature, I'm convinced user experience design can provide a compelling means of product differentiation.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/05/facebook-apps-not-too-late-to-compete-on-the-user-experience-front/">Facebook apps: Not too late to compete on the user experience front</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/08/facebook-connect/' rel='bookmark' title='Permanent Link: Facebook Connect'>Facebook Connect</a></li><li><a href='http://www.pathf.com/blogs/2008/02/ionut-alex-chit/' rel='bookmark' title='Permanent Link: Gmail, agile development and user experience design'>Gmail, agile development and user experience design</a></li><li><a href='http://www.pathf.com/blogs/2009/06/the-importance-of-user-experience-do-you-understand-it-in-your-bones/' rel='bookmark' title='Permanent Link: The Importance of User Experience &#8211; Do You Understand It in Your Bones?'>The Importance of User Experience &#8211; Do You Understand It in Your Bones?</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/05/facebook-apps-not-too-late-to-compete-on-the-user-experience-front/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Web 2.0 Expo keynotes</title>
		<link>http://www.pathf.com/blogs/2008/04/web-20-expo-key/</link>
		<comments>http://www.pathf.com/blogs/2008/04/web-20-expo-key/#comments</comments>
		<pubDate>Mon, 28 Apr 2008 21:53:40 +0000</pubDate>
		<dc:creator>Brian Dillard</dc:creator>
				<category><![CDATA[Rich Internet Apps]]></category>
		<category><![CDATA[Social Applications]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Software Development Best Practices]]></category>
		<category><![CDATA[iPhone/Mobile]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=15</guid>
		<description><![CDATA[I spent a lot of time at Web 2.0 Expo session-hopping - and a lot more time hanging in the speaker's lounge fine-tuning my own talk. That's the curse of going on the last day. You can't fully enjoy the...
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/04/web-20-expo-key/">Web 2.0 Expo keynotes</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/04/photo-james-dun/' rel='bookmark' title='Permanent Link: My Web 2.0 Expo slides now available online'>My Web 2.0 Expo slides now available online</a></li><li><a href='http://www.pathf.com/blogs/2008/04/my-talk-at-web/' rel='bookmark' title='Permanent Link: My talk at Web 2.0 Expo this Friday'>My talk at Web 2.0 Expo this Friday</a></li><li><a href='http://www.pathf.com/blogs/2009/04/which-mobile-platform-should-you-target-other-points-of-view/' rel='bookmark' title='Permanent Link: Which Mobile Platform Should You Target &#8211; Other Points of View'>Which Mobile Platform Should You Target &#8211; Other Points of View</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p><img class="left" src="http://blogs.pathf.com/photos/uncategorized/2008/04/28/the_future_of_the_internet_and_how_.jpg" border="0" alt="The Future of the Internet and How to Stop It" /> I spent a lot of time at Web 2.0 Expo session-hopping - and a lot more time hanging in the speaker's lounge fine-tuning my own talk. That's the curse of going on the last day. You can't fully enjoy the rest of the conference. That said, I had pretty strong reactions to some of the keynotes. The big platform announcements from Microsoft (<a href="http://dev.live.com/blogs/devlive/archive/2008/04/22/279.aspx" rel="nofollow" >Live Mesh)</a> and Yahoo (<a href="http://developer.yahoo.com/searchmonkey/preview.html" rel="nofollow" >SearchMonkey</a> plus), were OK, but I was most struck by author Jonathan Zittrain and Mozilla exec Mitchell Baker.</p>
<p><span id="more-15"></span></p>
<h2>Mitchell Baker on the future of the mobile web</h2>
<p>In a keynote titled "Opening the Mobile Web," Mozilla Foundation CEO Mitchell Baker argued that there should only be one web: Developers should be able to focus on building great web experiences, while only end users should have to worry about what which device they happen to be using. Data should be 100% portable. Search results collected on a desktop at home should be accessible from a smart device when that same user is on the road. What the end user can get to and do shouldn't be dependent on the type of device they have or the location they're in at any given time. That hasn't been the case so far in the mobile space; right now, device and service limitations cut off huge chunks of functionality for users on the go. Ultimately, however, there's no such thing as the mobile web. There are only mobile users who want access to everything no matter where they are.</p>
<p>Baker also made a strong case that the mobile space offers an opportunity for innovation; without 35 years of desktop GUI convention and 15 years of web-based expectations to bog them down, mobile user-agents are free to evolve in interesting directions. Mobile payment systems suggest that people want to do all sorts of unexpected things with their internet devices; browsing is an outdated metaphor. We should use the mobile web as an opportunity to abandon the mental constraints of the desktop and the browser. (This point echoed Mosaic/Netscape veteran Marc Andreesen's keyonte, in which he expressed surprise that the browser had lasted this long as a standalone application.) According to Baker, the problems with today's mobile browser are all engineering problems, which our industry is good at fixing. But we must also expand our creative vision of what the mobile experience can become.</p>
<p>Up to this point, I was totally down with Baker's analysis. But when she used that analysis as a springboard for Mozilla cheerleading, she sort of lost me. She highlighted some of Mozilla's ongoing mobile experiments - such as <a href="http://wiki.mozilla.org/Mobile/FennecVision" rel="nofollow" >Fennic</a> - and suggested that they would play the same function in the mobile web that Firefox has played in the open web/Web 2.0. But she didn't provide much supporting data as to why and how.</p>
<p>I'm about the biggest Firefox cheerleader there is, but to date, Mozilla has played almost no role in the mobile space. Competitors Opera and Safari actually have a foothold on today's devices. Mozilla has a lot of catching up to do if it wants to be a player. I kept expecting a concrete product or distribution announcement to support Baker's claim that Mozilla would lead us to a better mobile future. In the end though, she had nothing but vague promises and specious logic. It's a shame that somebody with so many smart things to say had to undercut them with meaningless PR.</p>
<h2>Jonathan Zittrain on the lure of the walled garden</h2>
<p>Jonathan Zittrain proved more persuasive in his examination of the "gated communities" that are starting to undermine the open web. An Oxford and Harvard law professor and author of <a href="http://cyber.law.harvard.edu/events/berkmanat10/2008/04/zittraincambridge" rel="nofollow" >"The Future of the Internet - And How to Stop It,"</a> Zittrain didn't bother to hawk his book explicitly. Instead, he condensed its ideas into a 10-minute video lecture about the dangerous allure of the programming model used by systems such as the iPhone. It's tempting for both users and developers to adopt closed systems in which a central gatekeeper handles security and decides which applications are allowed to be run. The stability and predictability of such a platform make it seem far less scary than a completely open model. But there are hidden costs.</p>
<p>The "winner take all" network effect makes data portability a huge issue. If Facebook becomes "tomorrow's Friendster" - i.e., a must-miss destination - then what happens to all the information "mouse droppings" you've accumulated there? What happens when platform developers reserve the right to toss your application on the scrap heap after you've invested enormous assets into building and marketing it? And how might the power you cede to these platforms make it easier for government to step all over your civil rights? If your personal data happens to live in the Google cloud, does that mean you should be entitled to less protection?</p>
<p>Zittrain wasn't all doom and gloom. He didn't offer specific solutions to all of the problems he identified, but he did suggest that we should put pressure on platform developers to architect their walled gardens in ways that protect application developers and end users. If all of your personal data migrates to the servers of a few companies, government gets a free pass - a single point of access to snoop on you. It's up to platform developers, then, to "tie [their] hands to the mast" - to architect in a way that protects privacy and portability.</p>
<p>Venturing into historical analogy, Zittrain described the Constitution as "U.S.A. 2.0." In the early days of the country, if you didn't like somebody, you could just "move west." But as time went on, we needed an operating system for government, and that's what the Constitution became: a big shell game in which power was spread out among many entities. Many lessons from that era resonate today as we build powerful social communities and knowledge-sharing endeavors. "Whom do we trust ultimately to clean it up," Zittrain asked of malware, spam, wiki vandalism and other open-web dangers. His answer? Ad hoc community networks in which we add more elements of citizenship to the net. Instead of writing a check to Norton Antivirus to protect us - "the Pinkerton model" - or turning to the government, we should share responsibility among the citizens of the web. "If your ethos is just to call an 800 number to get help, then we deserve the future we're going to get."</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/04/web-20-expo-key/">Web 2.0 Expo keynotes</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/04/photo-james-dun/' rel='bookmark' title='Permanent Link: My Web 2.0 Expo slides now available online'>My Web 2.0 Expo slides now available online</a></li><li><a href='http://www.pathf.com/blogs/2008/04/my-talk-at-web/' rel='bookmark' title='Permanent Link: My talk at Web 2.0 Expo this Friday'>My talk at Web 2.0 Expo this Friday</a></li><li><a href='http://www.pathf.com/blogs/2009/04/which-mobile-platform-should-you-target-other-points-of-view/' rel='bookmark' title='Permanent Link: Which Mobile Platform Should You Target &#8211; Other Points of View'>Which Mobile Platform Should You Target &#8211; Other Points of View</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/04/web-20-expo-key/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>&#8220;Crowds can be wise, but they can also be destructive&#8221; &#8211; Annalee Newitz on social media censorship at Web 2.0 Expo</title>
		<link>http://www.pathf.com/blogs/2008/04/crowds-can-be-w/</link>
		<comments>http://www.pathf.com/blogs/2008/04/crowds-can-be-w/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 00:29:27 +0000</pubDate>
		<dc:creator>Brian Dillard</dc:creator>
				<category><![CDATA[Social Applications]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Social Networking]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=17</guid>
		<description><![CDATA[Given my previously professed obsession with sci-fi blog io9, I had to check out the Web 2.0 Expo session hosted by its editrix, Annalee Newitz. User Generated Censorship tackled the ways in which community policing and content flagging can damage...
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/04/crowds-can-be-w/">&#8220;Crowds can be wise, but they can also be destructive&#8221; &#8211; Annalee Newitz on social media censorship at Web 2.0 Expo</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2007/02/social_networks/' rel='bookmark' title='Permanent Link: The Expert List &#8211; An Idea to Improve Online Social Bookmarking'>The Expert List &#8211; An Idea to Improve Online Social Bookmarking</a></li><li><a href='http://www.pathf.com/blogs/2007/01/web_20_communis/' rel='bookmark' title='Permanent Link: Web 2.0, Communism, Pet Rocks and the Wisdom of Crowds'>Web 2.0, Communism, Pet Rocks and the Wisdom of Crowds</a></li><li><a href='http://www.pathf.com/blogs/2008/04/web-20-expo-key/' rel='bookmark' title='Permanent Link: Web 2.0 Expo keynotes'>Web 2.0 Expo keynotes</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Given my <a href="http://blogs.pathf.com/agileajax/2008/04/jquery-fade-in.html" rel="nofollow" >previously professed obsession</a> with sci-fi blog <a href="http://www.io9.com" rel="nofollow" >io9</a>, I had to check out the <a href="http://en.oreilly.com/webexsf2008/public/content/home" rel="nofollow" >Web 2.0 Expo</a> session hosted by its editrix, <a href="http://www.techsploitation.com/" rel="nofollow" >Annalee Newitz</a>. <a href="http://en.oreilly.com/webexsf2008/public/schedule/detail/2375" rel="nofollow" >User Generated Censorship</a> tackled the ways in which community policing and content flagging can damage the value of social networks.</p>
<p>Using case studies from <a href="https://www.blogger.com/" rel="nofollow" >Blogger</a>, <a href="http://flickr.com/search/?q=kate+bush" rel="nofollow" >Flickr</a>, <a href="http://youtube.com/results?search_query=kate+bush&amp;search_type=" rel="nofollow" >YouTube</a>, <a href="http://digg.com/" rel="nofollow" >Digg</a> and <a href="http://en.wikipedia.org/wiki/Kate_Bush" rel="nofollow" >Wikipedia</a>, Newitz explored the various ways in which user-generated content can be flagged by community members and summarily banished to the void. She harshed on services - Blogger, Flickr, Digg - with poor transparency into their processes and insufficient recourse for those flagged. She also showed the love to services - Wikipedia, YouTube - with more complex, detailed and "byzantine" rules for flagging content.</p>
<p>Her logic? Such complex rules force would-be community censors to get specific about why they're flagging particular items. Wikipedia, for instance, offers seven different directives for its content. To flag content for removal, users must cite the specific directives that have been violated. Lots of discussion ensues.</p>
<p><a href="http://blogs.pathf.com/photos/uncategorized/2008/04/24/annalee_newitz_2.jpg" rel="nofollow" ><img class="image-full" title="Annalee_newitz_2" src="http://blogs.pathf.com/photos/uncategorized/2008/04/24/annalee_newitz_2.jpg" border="0" alt="Annalee_newitz_2" /></a></p>
<p><span id="more-17"></span></p>
<p>Newitz's advice for those creating social platforms and user-generated content networks? Offer users clear content guidelines and an easy way for them to filter the content they don't want to see. Offer authors transparent and fast methods of redress when they feel they've been unfairly flagged.</p>
<p>Her closing remark: "We need to protect against the mania of crowds" as well as celebrating their wisdom.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/04/crowds-can-be-w/">&#8220;Crowds can be wise, but they can also be destructive&#8221; &#8211; Annalee Newitz on social media censorship at Web 2.0 Expo</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2007/02/social_networks/' rel='bookmark' title='Permanent Link: The Expert List &#8211; An Idea to Improve Online Social Bookmarking'>The Expert List &#8211; An Idea to Improve Online Social Bookmarking</a></li><li><a href='http://www.pathf.com/blogs/2007/01/web_20_communis/' rel='bookmark' title='Permanent Link: Web 2.0, Communism, Pet Rocks and the Wisdom of Crowds'>Web 2.0, Communism, Pet Rocks and the Wisdom of Crowds</a></li><li><a href='http://www.pathf.com/blogs/2008/04/web-20-expo-key/' rel='bookmark' title='Permanent Link: Web 2.0 Expo keynotes'>Web 2.0 Expo keynotes</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/04/crowds-can-be-w/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Facebook Application Logistics for Team Development</title>
		<link>http://www.pathf.com/blogs/2008/04/facebook-applic/</link>
		<comments>http://www.pathf.com/blogs/2008/04/facebook-applic/#comments</comments>
		<pubDate>Mon, 21 Apr 2008 16:56:45 +0000</pubDate>
		<dc:creator>Noel Rappin</dc:creator>
				<category><![CDATA[Rich Internet Apps]]></category>
		<category><![CDATA[Social Applications]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=22</guid>
		<description><![CDATA[Facebook is a unique platform for application development -- Facebook applications have a powerful API, a large user base, and low barrier to entry. With the Rails Facebooker plugin, a Rails programmer can treat the Facebook user data as an...
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/04/facebook-applic/">Facebook Application Logistics for Team Development</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/02/ideal-team-size/' rel='bookmark' title='Permanent Link: Ideal team size for your next Facebook project'>Ideal team size for your next Facebook project</a></li><li><a href='http://www.pathf.com/blogs/2008/07/getting-started-with-facebooker/' rel='bookmark' title='Permanent Link: Getting Started with Facebooker'>Getting Started with Facebooker</a></li><li><a href='http://www.pathf.com/blogs/2008/01/20-useful-faceb/' rel='bookmark' title='Permanent Link: 20 useful Facebook/FBJS developer resources'>20 useful Facebook/FBJS developer resources</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p><img src="http://blogs.pathf.com/agileajax//facehome.jpg" border="0" alt="facehome.jpg" width="250" height="74" align="right" /></p>
<p>Facebook is a unique platform for application development -- Facebook applications have a powerful API, a large user base, and low barrier to entry. With the Rails Facebooker plugin, a Rails programmer can treat the Facebook user data as an extension of existing Rails session features. It's all very nice, and I'm not going to talk about any of that this time around.</p>
<p>I'm going to talk about the logistics of doing Facebook apps. When a user sends a request to a Facebook app, Facebook intercepts it and forwards the request to the third-party app server, along with some specific Facebook data, like the ID of the user making the request. Applications have to be registered with Facebook, and have a unique URL prefix at apps.facebook.com. You also provide the URL for your third-party server.</p>
<p>This sets up some challenges for a development team. First off, your application probably relies on Facebook services, meaning it can only be fully tested from within Facebook.  This implies that the external Facebook server needs to be connected to your development server. Since many Rails developers run off their own development machine behind a firewall, this is potentially awkward. Similarly, the fact that the Facebook application has a single URL mapping makes it difficult for multiple developers to work on the same application without tripping over each others' work.</p>
<p>How can a development team make this work?</p>
<p><span id="more-22"></span></p>
<p>The Facebooker plugin offers a service to create an SSH port tunnel from the open URL and port you designate on your development laptop. This works, although depending on your network setup, you may have some firewall hoops to jump through. Furthermore, your IT or networking department may have qualms about letting a tunnel from Facebook through to your developer subnet.</p>
<p>So, the question becomes how to put the developers work on some kind of staging server without putting too much friction in the system from the developer's perspective. I'm not sure that we've completely licked the problem, but the solution we're starting with seems reasonable.</p>
<p>What we've done is set up a staging server with a series of open ports. Each developer works on the program locally, and we've set up a fast mini-deploy from the developer's machine to the staging server for testing.</p>
<p>Each developer sets up a public-key SSH connection with the staging machine and signs up for a specific port. Within Facebook, each developer sets up a scratch application for use on whatever project they happen to be working on and points that application at the staging machine and that developer's port.</p>
<p>Moving files back and forth between the developer and staging severs is managed by a series of Rake tasks. Each developer sets up a <code>staging.yml</code> file in their config directory:</p>
<pre>remote_username: nrappin
remote_host: x.x.x.x
remote_directory: staging_app
remote_port: xxxx</pre>
<p>The main rake task is a simple rsync call to the staging server based on the parameters in the YAML file:</p>
<pre>require 'yaml'

namespace :remote do

def ssh_host
"#{@remote_username}@#{@remote_host}"
end

task :config do
staging_yaml = File.dirname(__FILE__) + '/../../../../config/pathf_staging.yml'
config = YAML.load_file(staging_yaml)
@remote_username = config['remote_username']
@remote_host = config['remote_host']
@remote_directory = config['remote_directory']
@remote_port = config['remote_port']
end

task :rsync =&gt; :config do
sh "rsync -az . #{ssh_host}:#{@remote_directory}"
end
end</pre>
<p>With that in place, the command <code>rake remote:rsync</code> will transfer the entire app to the staging server.</p>
<p>All kinds of single commands can be run remotely -- this batch opens an SSH shell, runs database migrations, and then mongrel starting, stopping and restarting.</p>
<pre>task :ssh =&gt; :config do
sh "ssh #{ssh_host}"
end

task :db_migrate =&gt; :config do
sh "ssh #{ssh_host} 'cd #{@remote_directory}; rake db:migrate'"
end

task :mongrel_start =&gt; :config do
sh "ssh #{ssh_host} 'cd #{@remote_directory}; mongrel_rails start -d -p #{@remote_port} -e staging'"
end

task :mongrel_stop =&gt; :config do
sh "ssh #{ssh_host} 'cd #{@remote_directory}; mongrel_rails stop'"
end

task :mongrel_restart =&gt; :config do
sh "ssh #{ssh_host} 'cd #{@remote_directory}; mongrel_rails restart'"
end</pre>
<p>Rake lets you combine these into some useful combinations</p>
<pre>task :deploy =&gt; [:rsync, :mongrel_restart]
task :start =&gt; [:rsync, :mongrel_start]</pre>
<p>That's a reasonably easy deploy to the staging server (which doesn't stop me from forgetting to do it now and then). You can make it even easier by binding it to a key command in your text editor, or if you are feeling really ambitions you can bind it to fire anytime a file in your application is saved (the way autotest works).</p>
<p>This setup lets each developer work in their own sandbox with only a minimal amount of deployment overhead. When the time comes to go to production, the application is registered for real with Facebook, and gets its final API key and URL information.</p>
<hr />If you liked this, you might also enjoy my book <a href="http://www.amazon.com/gp/product/047022388X?ie=UTF8&amp;tag=10prinhell-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=047022388X" rel="nofollow" ><em>Professional Ruby on Rails</em></a>.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/04/facebook-applic/">Facebook Application Logistics for Team Development</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/02/ideal-team-size/' rel='bookmark' title='Permanent Link: Ideal team size for your next Facebook project'>Ideal team size for your next Facebook project</a></li><li><a href='http://www.pathf.com/blogs/2008/07/getting-started-with-facebooker/' rel='bookmark' title='Permanent Link: Getting Started with Facebooker'>Getting Started with Facebooker</a></li><li><a href='http://www.pathf.com/blogs/2008/01/20-useful-faceb/' rel='bookmark' title='Permanent Link: 20 useful Facebook/FBJS developer resources'>20 useful Facebook/FBJS developer resources</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/04/facebook-applic/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Songbird 0.5 gets its first release candidate</title>
		<link>http://www.pathf.com/blogs/2008/03/songbird-05-get/</link>
		<comments>http://www.pathf.com/blogs/2008/03/songbird-05-get/#comments</comments>
		<pubDate>Wed, 12 Mar 2008 19:55:00 +0000</pubDate>
		<dc:creator>Brian Dillard</dc:creator>
				<category><![CDATA[Rich Internet Apps]]></category>
		<category><![CDATA[Social Applications]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[Songbird]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=56</guid>
		<description><![CDATA[The first release candidate for Songbird 0.5 is now available for download. Songbird, as you may remember is the open-source, Mozilla-based media player/web browser we've been enthused about for the past several months. There are lots of bug-fixes and API...
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/03/songbird-05-get/">Songbird 0.5 gets its first release candidate</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/06/songbird-06rc2-finally-editable-metadata/' rel='bookmark' title='Permanent Link: Songbird 0.6rc2: Finally, editable metadata!'>Songbird 0.6rc2: Finally, editable metadata!</a></li><li><a href='http://www.pathf.com/blogs/2007/12/coming-soon-son/' rel='bookmark' title='Permanent Link: Coming soon: Songbird 0.4'>Coming soon: Songbird 0.4</a></li><li><a href='http://www.pathf.com/blogs/2007/11/songbird-03-why/' rel='bookmark' title='Permanent Link: Songbird 0.3: Why aren&#8217;t Ajax folks more geeked about &#8220;the Firefox of media players&#8221;?'>Songbird 0.3: Why aren&#8217;t Ajax folks more geeked about &#8220;the Firefox of media players&#8221;?</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blogs.pathf.com/photos/uncategorized/2008/03/12/songbirdzeropointfive_2.jpg" rel="nofollow" ><img class="right" src="http://blogs.pathf.com/agileajax/images/2008/03/12/songbirdzeropointfive_2.jpg" border="0" alt="Songbird 0.5" width="225" /></a></p>
<p>The first release candidate for Songbird 0.5 is now available for download. Songbird, as you may remember is the open-source, Mozilla-based media player/web browser <a href="http://blogs.pathf.com/agileajax/songbird/index.html" rel="nofollow" >we've been enthused about for the past several months</a>. There are lots of bug-fixes and API changes this time around, but the big news from a UI standpoint is the debut of "Media Pages," which are extensions that rewire the main music-browsing interface using HTML or XUL.</p>
<p>As the Songbird website puts it:</p>
<blockquote><p>As of this writing, Songbird ships with two default views: a simple traditional playlist view, and a second playlist view incorporating three filter panes across the top for choosing a subset of your music.  Views can be extended via extensions that implement Media Pages.  Developers can easily create new views as HTML pages or XUL pages which provide custom visual interfaces to Songbird libraries, and playlists.</p></blockquote>
<p>Developers looking to play with Songbird 0.5rc1 will find the following resources useful:</p>
<ul>
<li><a href="http://blog.songbirdnest.com/2008/03/11/songbird-05rc1-is-available-for-testing/" rel="nofollow" >Announcement</a></li>
<li><a href="http://www.songbirdnest.com/release-notes/0.5/RC1" rel="nofollow" >Release Note</a></li>
<li><a href="http://songbirdnest.com/developer/add-on-api/media-page" rel="nofollow" >Tutorial: Getting started with Media Pages</a></li>
</ul>
<p>The Songbird team is targeting a final release of 0.5 later this month.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/03/songbird-05-get/">Songbird 0.5 gets its first release candidate</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/06/songbird-06rc2-finally-editable-metadata/' rel='bookmark' title='Permanent Link: Songbird 0.6rc2: Finally, editable metadata!'>Songbird 0.6rc2: Finally, editable metadata!</a></li><li><a href='http://www.pathf.com/blogs/2007/12/coming-soon-son/' rel='bookmark' title='Permanent Link: Coming soon: Songbird 0.4'>Coming soon: Songbird 0.4</a></li><li><a href='http://www.pathf.com/blogs/2007/11/songbird-03-why/' rel='bookmark' title='Permanent Link: Songbird 0.3: Why aren&#8217;t Ajax folks more geeked about &#8220;the Firefox of media players&#8221;?'>Songbird 0.3: Why aren&#8217;t Ajax folks more geeked about &#8220;the Firefox of media players&#8221;?</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/03/songbird-05-get/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ideal team size for your next Facebook project</title>
		<link>http://www.pathf.com/blogs/2008/02/ideal-team-size/</link>
		<comments>http://www.pathf.com/blogs/2008/02/ideal-team-size/#comments</comments>
		<pubDate>Mon, 11 Feb 2008 05:36:12 +0000</pubDate>
		<dc:creator>Ivan Moscoso</dc:creator>
				<category><![CDATA[Social Applications]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Software Development Best Practices]]></category>
		<category><![CDATA[Agile Development]]></category>
		<category><![CDATA[Facebook]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=88</guid>
		<description><![CDATA[I recently worked on a Facebook application for one of our clients. This turned out to be our first collective experience building for Facebook, and it involved a mixture of re-using existing web services and building new ones for use...
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/02/ideal-team-size/">Ideal team size for your next Facebook project</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/04/facebook-applic/' rel='bookmark' title='Permanent Link: Facebook Application Logistics for Team Development'>Facebook Application Logistics for Team Development</a></li><li><a href='http://www.pathf.com/blogs/2008/01/20-useful-faceb/' rel='bookmark' title='Permanent Link: 20 useful Facebook/FBJS developer resources'>20 useful Facebook/FBJS developer resources</a></li><li><a href='http://www.pathf.com/blogs/2009/09/team-hump-daily-scrums/' rel='bookmark' title='Permanent Link: Getting a team over the fear of daily scrums'>Getting a team over the fear of daily scrums</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>I recently worked on a Facebook application for <a href="http://www.pathf.com/caseStudiesFacebook.html" rel="nofollow" >one of our clients</a>.  This turned out to be our first collective experience building for Facebook, and it involved a mixture of re-using existing web services and building new ones for use by the same infrastructure.  All in all, a challenging thing to build and deliver given a relatively short deadline.</p>
<p>While there were many architectural considerations at hand, one of the interesting aspects of the project for me dealt with how we structured our team and went about tackling the problem.  As a result, I have a bit of advice on team size for those of you considering similar projects with an existing team at your company.  But first, a little history...</p>
<p><span id="more-88"></span></p>
<p>The only thing that was clear to all of us before the project kicked off was this: <em>that the scope of the project was anything but clear</em>.<br />
While we had worked on some preliminary analysis and modeling of the<br />
problem domain (i.e. the 'what'), building services for use by Facebook<br />
as well as the existing infrastructure required addressing a few<br />
technical issues (i.e. the 'how').  By the time we were given the green<br />
light to start work on the Facebook component, we scoped out enough<br />
work for a team of only four developers-- a much smaller team than some<br />
had guessed at earlier.</p>
<p>I think everyone in the team (both Pathfinder employees such as<br />
myself, as well as the in-house developers) would agree that the small<br />
team size ultimately worked to our advantage.  Much of our initial work<br />
involved investigation, weighing our options based on what we<br />
discovered, and evolving the architecture accordingly -- activities<br />
which require too much internal coordination in larger or more<br />
distributed teams.</p>
<p>So how did it work?  We had morning standup meetings (the occasional<br />
afternoon standup on particularly busy days when issues came up).  We<br />
were sure to talk through any changes in design or direction.  We<br />
documented things on the wiki that made sense to document, etc...</p>
<p>You might be wondering by this point what team size has to do with<br />
Facebook per se (after all, 'Facebook' appears in the title of this<br />
post).  And there lies the lesson in it: developing a Facebook<br />
application for an existing infrastructure is less about understanding<br />
Facebook than it is about managing technical risk-- particularly when<br />
it comes to the question of scalability.</p>
<p>"<em>How scalable does it need to be?</em>" is not just a question<br />
posed on the last slide of a PowerPoint presentation while you are<br />
waiting for the lights to turn back on in a room full of your peers.<br />
When the size of your user base is unclear (as it often is with sites<br />
like Facebook), <em>scalability is the <span style="text-decoration: underline;">essential</span> question</em>.<br />
That said, the question is almost rhetorical when the work involves<br />
integrating disparate systems.  And it is a question that I'll tackle<br />
in future posts, but I mention it here because I believe it is the kind<br />
of question that a small team, working on-site and iteratively is<br />
best-suited to answer.  And it is rhetorical in nature because the<br />
"answer" to the question is never really "the answer", but rather a<br />
series of approximations to "an answer".  And this is not a number in<br />
some guy's head or a series of lines on a chart somewhere-- it is a<br />
combination of design + testing + profiling, backed up by a certain<br />
amount of contingency planning along the way.</p>
<p>This contingency planning aspect involves making parts of the system<br />
malleable enough as-you-go so as to allow quick changes in response to<br />
issues that arise (or are <em>likely</em> to arise).  And this planning<br />
can not be done up-front.  It requires a bit of creative thinking along<br />
the way, and occurs primarily <em>through the development process itself</em>.<br />
Your team starts to see how the parts of the system scale in proportion<br />
to best-case, worst-case, and likely-case scenarios, and you make a few<br />
educated guesses.  But more to the point of team size, you need to<br />
communicate all of these thoughts and ideas effectively across the<br />
team, distill them and plan those contingencies accordingly for the<br />
life of the project.  Everyone needs to understand these issues and<br />
feel comfortable explaining them to each other.</p>
<p>To an experienced team this all comes as second nature no matter the<br />
size, but when starting out on a new project, small teams tend to get<br />
better at it faster. Throw in an unfamiliar API and a short deadline,<br />
and prepare for the realization that <em>less</em> is sometimes <em>more</em>.</p>
<p>So what's the answer?  Is it four? Is it eight?  Is it ten?  Well,<br />
the answer depends largely on your development team, how much<br />
integration work you require, where you need to budget, etc..  And only<br />
after painstaking analysis and hours of meetings will you arrive at the<br />
right answer for you*.</p>
<p>*<span style="font-size: 0.6em;"><em>(and, oh, that answer?  It's 'four').</em></span></p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder Development - creating innovative software that builds business value. </a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/02/ideal-team-size/">Ideal team size for your next Facebook project</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/04/facebook-applic/' rel='bookmark' title='Permanent Link: Facebook Application Logistics for Team Development'>Facebook Application Logistics for Team Development</a></li><li><a href='http://www.pathf.com/blogs/2008/01/20-useful-faceb/' rel='bookmark' title='Permanent Link: 20 useful Facebook/FBJS developer resources'>20 useful Facebook/FBJS developer resources</a></li><li><a href='http://www.pathf.com/blogs/2009/09/team-hump-daily-scrums/' rel='bookmark' title='Permanent Link: Getting a team over the fear of daily scrums'>Getting a team over the fear of daily scrums</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/02/ideal-team-size/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 1.890 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2010-03-20 09:55:51 -->
