<?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>Sidelab</title>
	<atom:link href="http://sidelab.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://sidelab.com</link>
	<description></description>
	<lastBuildDate>Wed, 29 Feb 2012 04:37:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>DevCaps: A RESS Experiment</title>
		<link>http://sidelab.com/blog/devcaps-a-ress-experiment/</link>
		<comments>http://sidelab.com/blog/devcaps-a-ress-experiment/#comments</comments>
		<pubDate>Wed, 29 Feb 2012 04:37:10 +0000</pubDate>
		<dc:creator>Damon</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[xpmobi]]></category>

		<guid isPermaLink="false">http://sidelab.com/?p=263</guid>
		<description><![CDATA[Some very clever people in the land of the mobile web have been doing a lot of thinking about how to deal with the sheer number of devices (screen sizes, device capabilities, etc) that we have to deal with these days. One particular post from Luke Wroblewski covers a variety of options that should be [...]]]></description>
			<content:encoded><![CDATA[<p>Some very clever people in the land of the mobile web have been doing a lot of thinking about how to deal with the sheer number of devices (screen sizes, device capabilities, etc) that we have to deal with these days.  One particular post from <a href="http://twitter.com/lukew">Luke Wroblewski</a> covers a variety of options that should be explored before choosing one over another:</p>
<p><a href="http://www.lukew.com/ff/entry.asp?1509">Which One: Responsive Design, Device Experiences, or RESS?</a></p>
<p>Reading this post reminded me of a little experiment I started about 6 months ago to try and implement smarter ways for doing RESS (Responsive Design + Server Side Components) based application development.</p>
<p><span id="more-263"></span>Before you read on, I&#8217;d encourage you read Luke&#8217;s writings on the topic of <a href="http://www.lukew.com/ff/entry.asp?1392">RESS</a>. But if you don&#8217;t want to, then as I understand it basically boils down to combining the proven techniques of responsive design with some device specific rendering done on the server side to account for those &#8220;edge cases&#8221; where responsive design just doesn&#8217;t cut the mustard.</p>
<p>Unfortunately, server detection techniques generally rely on the <strong>broken model of User Agent detection</strong> or sniffing.  Even with large extensive device user agent databases like <a href="http://wurfl.sourceforge.net/">WURFL</a>, I believe it to be a very broken technique.  It&#8217;s something that we have thankfully gotten out of the habit of in client-side code, but in general the User-Agent is one of the only pieces of information available that provides some clue about the client device and browser that is currently accessing the site.</p>
<p><strong>There has to be a better way</strong></p>
<p>There is &#8211; well at least I believe there is.  And it&#8217;s not that complicated either.</p>
<p>Let&#8217;s start by talking about something we are all familiar with &#8211; attempting to access a part of a website that requires you to be logged in:</p>
<p><em>In the case where you are logged in, you will be transmitting a session cookie to the server, it does a few checks and balances on the session and all being well displays you the page you were after.  </p>
<p>In the event that you don&#8217;t have a valid session cookie, the server renders (or redirects you to) a login page and you go through a login process and once successful are returned to the page you originally requested.</em></p>
<p>Now let&#8217;s take that pattern and apply it to a <strong>device capability detection</strong> (or devcaps) scenario:</p>
<p><em>A server receives a request to view a particular web site or web application page.  In this initial request the server looks for a &#8220;DEVCAPS&#8221; cookie that links to a device capability profile that is stored on the server.  </p>
<p>In the event that the server cannot find the cookie, the devcaps middleware is invoked which presents a simple page that runs <a href="http://www.modernizr.com/">Modernizr</a> on the page and then submits the result back to the server.</p>
<p>At this point the server creates a device capabilities profile and provides the client with a cookie that it should use in subsequent requests.</em></p>
<p>I know that the technique is not without it&#8217;s caveats (a reliance on both Javascript and cookies, for example) but I believe it&#8217;s something that is definitely worth exploring further.  Certainly from where I sit, I see the issue of Javascript not being available on devices becoming less of an issue while device capabilities fragmentation will only continue to grow.</p>
<p><strong>More information on DevCaps</strong></p>
<p>As I mentioned at the start of the article, I started a <a href="https://github.com/DamonOehlman/devcaps">Github repository</a> a little while ago to try and collect my thoughts, and also a <a href="https://github.com/DamonOehlman/devcaps-node">reference implementation in node</a> to validate that the process actually works.</p>
<p><strong>Try it out!!</strong></p>
<p>While it&#8217;s not hosted on a bullet-proof server, and it&#8217;s far from a bullet proof implementation, we&#8217;ve stood up a demo page that shows how the technology works and you can try it out on your own device:</p>
<p><a href="http://208.115.207.123/">http://devcaps.sidelab.com</a></p>
<p>If you have any feedback or ideas then feedback would be great, and if you are interested in using the technique to implement your next cross-device application then feel free to <a href="http://sidelab.com/contact/">get in touch</a> and perhaps we can do something together <img src='http://sidelab.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://sidelab.com/blog/devcaps-a-ress-experiment/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CouchDB, Node and the Browser</title>
		<link>http://sidelab.com/blog/couchdb-node-and-the-browser/</link>
		<comments>http://sidelab.com/blog/couchdb-node-and-the-browser/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 07:29:11 +0000</pubDate>
		<dc:creator>Damon</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[couchdb]]></category>
		<category><![CDATA[nodejs]]></category>

		<guid isPermaLink="false">http://sidelab.com/?p=236</guid>
		<description><![CDATA[There are many, many libraries available for working with CouchDB from NodeJS.  My particular favourite is an excellent little library, aptly named nano.  Despite having some great success with nano over the last few months, I&#8217;ve been thinking more and more about the fact that sooner or later I&#8217;m going to want to being using [...]]]></description>
			<content:encoded><![CDATA[<p>There are many, many libraries available for working with <a href="http://couchdb.apache.org/">CouchDB</a> from <a href="http://nodejs.org/">NodeJS</a>.  My particular favourite is an excellent little library, aptly named <a href="https://github.com/dscape/nano">nano</a>.  Despite having some great success with nano over the last few months, I&#8217;ve been thinking more and more about the fact that sooner or later I&#8217;m going to want to being using the same library from the browser as I do in Node.</p>
<p><span id="more-236"></span>A little while ago, I probably would have just put this in the <em>too hard basket</em>, but thanks to some excellent work from <a href="https://github.com/visionmedia">TJ Holowaychuk</a> we have a little XHR library available called <a href="https://github.com/visionmedia/superagent">SuperAgent</a>.  While it&#8217;s still early days for SuperAgent, it does a bang up job of offering both an in-browser replacement to jQuery&#8217;s <code>$.ajax</code> function and also various http client libraries in Node (with <a href="https://github.com/mikeal/request">request</a> being my personal favourite).</p>
<p>With SuperAgent available, it opens up a couple of possibilities for getting a CouchDB client library that works in both the browser and in Node:</p>
<ol>
<li>Fork nano, and replace request with SuperAgent</li>
<li>Build a new experimental CouchDB library</li>
</ol>
<p>Being a sucker for experiments, rightly or wrongly, I went for option 2.  And lo, <a href="http://github.com/sidelab/supercomfy">SuperComfy</a> (early docs <a href="http://supercomfy.rtfd.org/">here</a>) was born.</p>
<p>It is similar in feel to nano, with a few exceptions and additional features:</p>
<ul>
<li>REST methods are as purely mapped as possible.  SuperAgent does a good job of this, and SuperComfy doesn&#8217;t break that good work.  For the most part, this is something nano does as well, with the exception of things like <code>insert</code> instead of <code>put</code>.</li>
<li>Based on the requirements of <a href="/blog/steelmesh-2-0-roadmap/">Steelmesh 2.0</a>, SuperComfy has some pretty nifty functionality that allows you to redirect writes to another database.  Very useful in cases where you have a replicated environment and would like to avoid replication conflicts&#8230;</li>
</ul>
<p>If you are feeling a little wild, feel free to take <a href="https://github.com/sidelab/supercomfy">SuperComfy</a> for a spin, and let us know your thoughts.</p>
]]></content:encoded>
			<wfw:commentRss>http://sidelab.com/blog/couchdb-node-and-the-browser/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Steelmesh 2.0 Roadmap</title>
		<link>http://sidelab.com/blog/steelmesh-2-0-roadmap/</link>
		<comments>http://sidelab.com/blog/steelmesh-2-0-roadmap/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 04:31:49 +0000</pubDate>
		<dc:creator>Damon</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://sidelab.com/?p=189</guid>
		<description><![CDATA[We have been working away on Steelmesh now for 6 months and it has been a really interesting time. There has been a lot learnt about both CouchDB and NodeJS over the time. While we are still working on ironing a few things out for an official 1.0 release (bug fixes, docs, etc), we have [...]]]></description>
			<content:encoded><![CDATA[<p>We have been working away on Steelmesh now for 6 months and it has been a really interesting time.  There has been a lot learnt about both <a href="/supported-software/couchdb/">CouchDB</a> and <a href="/supported-software/nodejs/">NodeJS</a> over the time.  While we are still working on ironing a few things out for an official 1.0 release (bug fixes, docs, etc), we have had some thoughts about where Steelmesh will go in the future.</p>
<p><span id="more-189"></span>In it&#8217;s current form, Steelmesh is designed to take a NodeJS application (with a specific file structure) and replicate that application across a network of machines using CouchDB&#8217;s excellent replication.  This has proven to work exceptionally well and application deployments in a Steelmesh environment are definitely orders of magnitude easier that what you would experience through manually updating multiple servers.  </p>
<p>While I might be wrong, I think using CouchDB for package distribution has greater potential in the long run than the currently very popular method of git based deployment. The current implementation of <a href="http://npmjs.org">NPM</a> is a great example of how CouchDB can be used for application distribution to great effect.</p>
<p>What we want to do for Steelmesh 2.0 is enable application distribution for languages over CouchDB using the same general principles as we did for Node in Steelmesh 1.0.  This is obviously going to be a little bit of work, and we are only in the planning stages now, but it would be great to get feedback and comment around this if you have any ideas.</p>
]]></content:encoded>
			<wfw:commentRss>http://sidelab.com/blog/steelmesh-2-0-roadmap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sidelab Site Relaunch</title>
		<link>http://sidelab.com/blog/sidelab-site-relaunch/</link>
		<comments>http://sidelab.com/blog/sidelab-site-relaunch/#comments</comments>
		<pubDate>Sat, 21 Jan 2012 08:28:24 +0000</pubDate>
		<dc:creator>Damon</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://sidelab.com/?p=31</guid>
		<description><![CDATA[It&#8217;s finally time to give the site a new coat of paint and bring the content up to date. Watch this space over the next few days as we start talking about the interesting things we are doing with technologies like CouchDB and NodeJS to deliver scalable Geospatial solutions.]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s finally time to give the site a new coat of paint and bring the content up to date. Watch this space over the next few days as we start talking about the interesting things we are doing with technologies like <a href="http://couchdb.apache.org/">CouchDB</a> and <a href="http://nodejs.org/">NodeJS</a> to deliver scalable Geospatial solutions.</p>
]]></content:encoded>
			<wfw:commentRss>http://sidelab.com/blog/sidelab-site-relaunch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

