<?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>Ajaxian &#187; Offline</title>
	<atom:link href="http://ajaxian.com/by/topic/offline/feed" rel="self" type="application/rss+xml" />
	<link>http://ajaxian.com</link>
	<description>Cleaning up the web with Ajax</description>
	<lastBuildDate>Tue, 22 May 2012 21:45:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
    	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Offline: What does it mean and why should I care?</title>
		<link>http://ajaxian.com/archives/offline-what-does-it-mean-and-why-should-i-care</link>
		<comments>http://ajaxian.com/archives/offline-what-does-it-mean-and-why-should-i-care#comments</comments>
		<pubDate>Wed, 08 Sep 2010 10:30:35 +0000</pubDate>
		<dc:creator>Brad Neuberg</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Offline]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=10172</guid>
		<description><![CDATA[[CC-A by Anomalous4] Michael Mahemoff has posted an extremely in-depth tutorial on HTML5Rocks on the subject of offline web apps: Introduction: The Meaning of &#8220;Offline&#8221; Application Cache and Offline Storage Older Offline Storage Techniques Cookies Plugin Based Storage Browser-specific features Offline Storage in the Era of HTML5 Web Storage Web SQL Database IndexedDB File API <a href="http://ajaxian.com/archives/offline-what-does-it-mean-and-why-should-i-care">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://ajaxian.com/wp-content/images/1906020060_048248487e.jpg"><img class="aligncenter size-full wp-image-10173" title="1906020060_048248487e" src="http://ajaxian.com/wp-content/images/1906020060_048248487e.jpg" alt="" width="350" height="263" /></a></p>
<p style="text-align: center;">[<a href="http://www.flickr.com/photos/31333486@N00/1906020060/">CC-A by Anomalous4</a>]</p>
<p><a href="http://mahemoff.com/">Michael Mahemoff</a> has <a href="http://www.html5rocks.com/tutorials/offline/whats-offline/">posted an extremely in-depth tutorial</a> on <a href="http://www.html5rocks.com">HTML5Rocks</a> on the subject of offline web apps:</p>
<ul>
<li><a href="http://www.html5rocks.com/tutorials/offline/whats-offline/#introduction">Introduction: The Meaning of &#8220;Offline&#8221;</a></li>
<li><a href="http://www.html5rocks.com/tutorials/offline/whats-offline/#toc-application-cache">Application Cache and Offline Storage</a></li>
<li><a href="http://www.html5rocks.com/tutorials/offline/whats-offline/#toc-older-storage">Older Offline Storage Techniques</a>
<ul>
<li><a href="http://www.html5rocks.com/tutorials/offline/whats-offline/#toc-cookies">Cookies</a></li>
<li><a href="http://www.html5rocks.com/tutorials/offline/whats-offline/#toc-plugin-based-storage">Plugin Based Storage</a></li>
<li><a href="http://www.html5rocks.com/tutorials/offline/whats-offline#toc-browser-specific-features">Browser-specific features</a></li>
</ul>
</li>
<li><a href="http://www.html5rocks.com/tutorials/offline/whats-offline#toc-html5-offline-storage">Offline Storage in the Era of HTML5</a>
<ul>
<li><a href="http://www.html5rocks.com/tutorials/offline/whats-offline#toc-web-storage">Web Storage</a></li>
<li><a href="http://www.html5rocks.com/tutorials/offline/whats-offline#toc-web-sql-database">Web SQL Database</a></li>
<li><a href="http://www.html5rocks.com/tutorials/offline/whats-offline#toc-indexedDB">IndexedDB</a></li>
<li><a href="http://www.html5rocks.com/tutorials/offline/whats-offline#toc-fileAPI">File API</a></li>
</ul>
</li>
<li><a href="http://www.html5rocks.com/tutorials/offline/whats-offline#toc-offline-technologies">How to Use the Offline Technologies</a>
<ul>
<li><a href="http://www.html5rocks.com/tutorials/offline/whats-offline#toc-miscdata">Storing miscellaneous data</a></li>
<li><a href="http://www.html5rocks.com/tutorials/offline/whats-offline#toc-binary-data">Storing binary data</a></li>
<li><a href="http://www.html5rocks.com/tutorials/offline/whats-offline#toc-ui-smoothly">Ensuring the Application Runs Smoothly</a></li>
<li><a href="http://www.html5rocks.com/tutorials/offline/whats-offline#toc-simultaneous">Handling simultaneous data opertations</a></li>
<li><a href="http://www.html5rocks.com/tutorials/offline/whats-offline#toc-largdata">Storing large amounts of data</a></li>
<li><a href="http://www.html5rocks.com/tutorials/offline/whats-offline#toc-detect-offline">Detecting if you&#8217;re online</a></li>
<li><a href="http://www.html5rocks.com/tutorials/offline/whats-offline#toc-structure">Structuring file data</a></li>
<li><a href="http://www.html5rocks.com/tutorials/offline/whats-offline#toc-compatibility">Ensuring cross-browser compatibility</a></li>
<li><a href="http://www.html5rocks.com/tutorials/offline/whats-offline#toc-lost-data">Protecting against lost data</a></li>
<li><a href="http://www.html5rocks.com/tutorials/offline/whats-offline#toc-secure-offline-data">Securing offline data</a></li>
</ul>
</li>
<li><a href="http://www.html5rocks.com/tutorials/offline/whats-offline#toc-summary">Summary</a></li>
<li><a href="http://www.html5rocks.com/tutorials/offline/whats-offline#toc-further">Further Reading</a></li>
</ul>
<p>(BTW, don&#8217;t hate me &#8216;cuse of the LOLCat pic &#8212; you know you secretly like it)</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/offline-what-does-it-mean-and-why-should-i-care/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Gmail Offline is here (or coming soon for you!)</title>
		<link>http://ajaxian.com/archives/gmail-offline-is-here-or-coming-soon-for-you</link>
		<comments>http://ajaxian.com/archives/gmail-offline-is-here-or-coming-soon-for-you#comments</comments>
		<pubDate>Wed, 28 Jan 2009 00:48:29 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Gears]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Offline]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=5806</guid>
		<description><![CDATA[Gmail Offline has been an incredibly long wished for product feature and now it is coming (takes time to push it out to people and it will appear in Settings &#8211; Labs). This is a big deal. It uses Gears of course, and many people are always saying &#8220;it&#8217;s about bloody time.&#8221; This is easy <a href="http://ajaxian.com/archives/gmail-offline-is-here-or-coming-soon-for-you">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Gmail Offline has been an incredibly long wished for product feature and now it is coming (takes time to push it out to people and it will appear in Settings &#8211; Labs).</p>
<p>This is a big deal. It uses Gears of course, and many people are always saying &#8220;it&#8217;s about bloody time.&#8221;</p>
<p>This is easy to say from the comfort of the arm chair at home. In reality, an architectural change like this is huge. Moving to a sync model that works reliably is tough in the best of times, and when you try to do it to a product that is popular, it gets that much harder to do right.</p>
<p>I got to use this when I was working at Google and saw numerous ups and downs (one version works well, then it gets buggy, then it gets better, etc). It was fantastic to be able to use it on the plane (or would have been if I wasn&#8217;t scared that someone would look over my shoulder). It resets expectations. You get used to opening up the browser when you KNOW you are offline. Having this in a product that you use as much as email will change user behaviour and will lead us down the path of more easily being able to do browser like things when connectivity is rough. Hell, knowing that WiFi jumping up and down won&#8217;t affect me is a big deal.</p>
<p>Congrats to Andy Palay and the team. I hope that we get to see an interview him as he discusses the architecture and the various tweaks to that architecture as they nailed this all down. We have much that we can learn from the process.</p>
<p>If you don&#8217;t have it in your &#8220;Labs&#8221; settings (I don&#8217;t right now, and the witing game is annoying I know!) check out the high level video:</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/cOAZaIaeIrI&#038;rel=0&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=en&#038;feature=player_embedded&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/cOAZaIaeIrI&#038;rel=0&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=en&#038;feature=player_embedded&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/gmail-offline-is-here-or-coming-soon-for-you/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>OfflineRest: One pattern for offline architecture</title>
		<link>http://ajaxian.com/archives/offlinerest</link>
		<comments>http://ajaxian.com/archives/offlinerest#comments</comments>
		<pubDate>Wed, 24 Sep 2008 11:19:15 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Offline]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=4581</guid>
		<description><![CDATA[Kris Zyp has created OfflineRest, a new module in Dojo 1.2 that allows for a simple offline pattern to building your application. Dojo 1.2’s new dojox.rpc.OfflineRest module automates the local storage of data and synchronization by leveraging the Dojo Data and REST abstractions. The OfflineRest module augments the JsonRest service in Dojo such that requests <a href="http://ajaxian.com/archives/offlinerest">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.sitepen.com/blog/wp-content/uploads/2008/09/offlinerest.png" border="0" style="float: right; padding: 8px;" /></p>
<p>Kris Zyp has created <a href="http://www.sitepen.com/blog/2008/09/23/effortless-offline-with-offlinerest/">OfflineRest</a>, a new module in Dojo 1.2 that allows for a simple offline pattern to building your application.</p>
<blockquote><p>
Dojo 1.2’s new dojox.rpc.OfflineRest module automates the local storage of data and synchronization by leveraging the Dojo Data and REST abstractions. The OfflineRest module augments the JsonRest service in Dojo such that requests are cached in local storage for offline access, and modification requests (put, post, and delete) modify the cache and are recorded for delivery to the server; immediately if online, otherwise when connectivity is restored. Furthermore, JsonRest is the core engine used by <a href="http://www.sitepen.com/blog/2008/06/13/restful-json-dojo-data/">JsonRestStore</a>.  Consequently, you can simply use the standard Dojo Data API with the JsonRestStore and effortlessly add offline capability with no modifications to your data interaction code. The underlying Rest service automates the handling of caching, storing data locally, and syncing changes. In addition the new OfflineRest module has no dependency on plugins, but rather progressively utilizes offline features that are available, while still operating properly on legacy browsers without offline support.
</p></blockquote>
<p>He has a <a href="http://persevere.sitepen.com/examples/trails.html">demo that involves a CRUD system for hiking trails</a> which interestingly asked me for Gears permission, even though it appears that OfflineRest doesn't abstract on top of both Gears and the emerging storage standard, which is something I would like to see, to extend the reach.</p>
<div class="igBar"><a href="javascript:showCodeTxt('javascript-2');">PLAIN TEXT</a></div>
<div class="syntax_hilite"><span style="color:#000000; font-weight:bold;">JAVASCRIPT:</span>
<div id="javascript-2">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">dojo.<span style="color: #006600;">require</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"dojox.rpc.OfflineRest"</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">dojo.<span style="color: #006600;">require</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #3366CC;">"dojox.data.JsonRestStore"</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// create a store</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">trailStore = <span style="color: #003366; font-weight: bold;">new</span> dojox.<span style="color: #006600;">data</span>.<span style="color: #006600;">JsonRestStore</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span>url:<span style="color: #3366CC;">"/Trail"</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">dojox.<span style="color: #006600;">rpc</span>.<span style="color: #006600;">OfflineRest</span>.<span style="color: #006600;">addStore</span><span style="color:#006600; font-weight:bold;">&#40;</span>trailStore,<span style="color: #3366CC;">""</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// data</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> <span style="color: #000066; font-weight: bold;">item</span> = trailStore.<span style="color: #006600;">newItem</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">trailStore.<span style="color: #006600;">setValue</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #000066; font-weight: bold;">item</span>,<span style="color: #3366CC;">"foo"</span>,<span style="color: #3366CC;">"bar"</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// manually observing download changes to force updates</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">dojo.<span style="color: #006600;">connect</span><span style="color:#006600; font-weight:bold;">&#40;</span>dojox.<span style="color: #006600;">rpc</span>.<span style="color: #006600;">OfflineRest</span>, <span style="color: #3366CC;">"downloadChanges"</span>, <span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; .. <span style="color: #006600;">download</span> changes or refresh the page ..</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="color:#000000; font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/offlinerest/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Zoho Writer Offline with Editing</title>
		<link>http://ajaxian.com/archives/zoho-writer-offline-with-editing</link>
		<comments>http://ajaxian.com/archives/zoho-writer-offline-with-editing#comments</comments>
		<pubDate>Mon, 26 Nov 2007 13:00:17 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Gears]]></category>
		<category><![CDATA[Offline]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=3040</guid>
		<description><![CDATA[Zoho Writer was quick to release offline support using Gears, which allows you to carry read-only views of your data around when you were offline. This was just the first step in their offline support, and now they have announced the next step. This new version allows you to edit on the road with a <a href="http://ajaxian.com/archives/zoho-writer-offline-with-editing">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Zoho Writer was quick to release <a href="http://ajaxian.com/archives/zoho-writer-goes-offline-with-gears">offline support using Gears</a>, which allows you to carry read-only views of your data around when you were offline.</p>
<p>This was just the first step in their offline support, and now they have announced the next step. This new version <a href="http://zoho.com/zohowriter-zoho/zohowriter-zoho.html">allows you to edit on the road</a> with a synchronization system that keeps you sane:</p>
<p><a href="http://zoho.com/zohowriter-zoho/zohowriter-zoho.html"><img src="http://ajaxian.com/wp-content/images/zohosync.png" alt="Zoho Writer Offline Editing" border="0" width="673" height="321"/></a> </p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/zoho-writer-offline-with-editing/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Wikipedia Offline with GearsMonkey</title>
		<link>http://ajaxian.com/archives/wikipedia-offline-with-gearsmonkey</link>
		<comments>http://ajaxian.com/archives/wikipedia-offline-with-gearsmonkey#comments</comments>
		<pubDate>Wed, 21 Nov 2007 14:24:53 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Gears]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Offline]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=3033</guid>
		<description><![CDATA[Working on the Gears team we also run across applications that we would love to take offline. A lot of these applications aren't Google's so we thought it would be nice to be able to take third party apps offline. This also makes sense since Aaron Boodman (Mr. Greasemonkey) is co-tech lead on Gears itself! <a href="http://ajaxian.com/archives/wikipedia-offline-with-gearsmonkey">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/support/bin/answer.py?answer=81101&#038;topic=11982"><img src="http://www.google.com/help/hc/images/wiki_offline_greasemonkey_trans.png" style="padding: 5px; float: right; border: 0" /></a></p>
<p>Working on the Gears team we also run across applications that we would love to take offline. A lot of these applications aren't Google's so we thought it would be nice to be able to take third party apps offline. This also makes sense since Aaron Boodman (Mr. Greasemonkey) is co-tech lead on Gears itself!</p>
<p>Ben Lisbakken has written up <a href="http://code.google.com/support/bin/answer.py?answer=81101&#038;topic=11982">his work taking Gears and Greasemonkey to make this happen</a>. He details the real example of taking Wikipedia offline which has once piece of narly code to do with iframe injection to be able to store data on third party sites (e.g. media site vs. wikipedia main site):</p>
<blockquote>
<ol>
<li>Initialize Gears on page
<ul>
<li>Check if site has been allowed, if not, trigger allow dialog</li>
</ul>
</li>
<li>Insert iFrame</li>
<li>Initialize Gears on iFrame
<ul>
<li>Check if site has been allowed, if not, trigger allow dialog</li>
</ul>
</li>
<li>If Gears is initialized on both, insert Cache Page link (unless page is cached)</li>
<li> When user clicks Cache Page:
<ul>
<li> Capture the HTML and CSS of the Main Page</li>
<li> Store the URLs of all links to HTML, CSS, and media files in the Gears database (so we can remove them from the ResourceStore later, if needed)</li>
<li> Create an iFrame whose src is in the domain of upload.wikimedia.org. Pass all media file URLs to the iFrame in the src URL after the hash, e.g. src="http://upload.wikimedia.org/#thisimgloc.jpg||anotherimgloc.jpg||lastimgloc.jpg"</li>
<li> Initialize Gears in iFrame</li>
<li> Capture all URLs from the iFrame's href hash.</li>
</ul>
</li>
<li>When user clicks [x] to remove an article from cache:
<ul>
<li>Grab all URLs from the Gears database that correspond to that article</li>
<li>Remove all URLs from the ResourceStore of the Main Page that contain the string "en.wikipedia.org"</li>
<li>Remove all URLs from the Gears database that correspond to that article</li>
<li>Create an iFrame whose src is in the domain of upload.wikimedia.org. Pass all media file URLs to the iFrame in the src URL after the hash, e.g. src="http://upload.wikimedia.org/#thisimgloc.jpg||anotherimgloc.jpg||lastimgloc.jpg||remove||"</li>
<li>Initialize Gears in iFrame</li>
<li>Remove all URLs from the ResourceStore that are listed in the iFrame's href hash.</li>
</ul>
</li>
</ol>
</blockquote>
<p>Here's the script in action as I save pages away. This is just the beginning. Ideally we would have the code automatically save content that you have been too, and do smart spidering to get more on the subject too. We will also work on making GearsMonkey scripts even easier to write.</p>
<p><object type="application/x-shockwave-flash" width="400" height="241" data="http://www.vimeo.com/moogaloop.swf?clip_id=395115&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=01AAEA"><param name="quality" value="best" /><param name="allowfullscreen" value="true" /><param name="scale" value="showAll" /><param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id=395115&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=01AAEA" /></object></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/wikipedia-offline-with-gearsmonkey/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Mindmeister: Take your mind map offline</title>
		<link>http://ajaxian.com/archives/mindmeister-take-your-mind-map-offline</link>
		<comments>http://ajaxian.com/archives/mindmeister-take-your-mind-map-offline#comments</comments>
		<pubDate>Wed, 07 Nov 2007 17:52:42 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Gears]]></category>
		<category><![CDATA[Offline]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/archives/mindmeister-take-your-mind-map-offline</guid>
		<description><![CDATA[Mindmeister has taken their mind map tool and now allow you to map offline. The tool itself is a nice Ruby on Rails application (includes pink fade effects! yellow is so 2006) that gives you a visual canvas to play with your mind. Their approach to offline is similar to Google Reader in that the <a href="http://ajaxian.com/archives/mindmeister-take-your-mind-map-offline">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.mindmeister.com/images/email/mm_offline.jpg" border="0"/></p>
<p>Mindmeister has taken their mind map tool and now <a href="http://blog.mindmeister.com/2007/11/05/introducing-mindmeister-offline/">allow you to map offline</a>.</p>
<p>The tool itself is a nice Ruby on Rails application (includes pink fade effects! yellow is so 2006) that gives you a visual canvas to play with your mind.</p>
<p><a href="http://mindmeister.com/"><img src="http://ajaxian.com/wp-content/images/mindmeistertool.jpg" alt="Mindmeister Tool" border="0" width="540" height="303"/></a></p>
<p>Their approach to offline is similar to Google Reader in that the user has to say "hey, take me offline". The interface to that is a nice little slider widget. At the point your maps are sync'd down to the local store.</p>
<p><a href="http://mindmeister.com/"><img src="http://ajaxian.com/wp-content/images/mindmeistersync.jpg" alt="Mindmeister Sync" border="0" width="540" height="235"/></a></p>
<p>I would love to see it auto sync, and I noticed a couple of issues when I actually went offline but didn't tell the tool first (would be nice to have the tool grok that) but the mind map tool in general is a nice app to use. It feels like Geni.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/mindmeister-take-your-mind-map-offline/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>WebRunner Style Customizations</title>
		<link>http://ajaxian.com/archives/webrunner-style-customizations</link>
		<comments>http://ajaxian.com/archives/webrunner-style-customizations#comments</comments>
		<pubDate>Thu, 25 Oct 2007 14:19:47 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Offline]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=2938</guid>
		<description><![CDATA[The WebRunner team has added the ability to add style to your application. Mark Fingle said it well: One new feature we added to WebRunner is web application styling or theming. You can drop a â€œwebapp.cssâ€ file in the bundle and it will be applied to the hosted web application. You can also use platform-specific <a href="http://ajaxian.com/archives/webrunner-style-customizations">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>The WebRunner team has added the ability to <a href="http://starkravingfinkle.org/blog/2007/10/webrunner-app-styling/">add style to your application</a>. Mark Fingle said it well:</p>
<blockquote><p>
One new feature we added to <a href="http://wiki.mozilla.org/WebRunner">WebRunner</a> is web application styling or theming. You can drop a â€œwebapp.cssâ€ file in the <a href="http://wiki.mozilla.org/WebRunner:Bundle">bundle</a> and it will be applied to the hosted web application. You can also use platform-specific folders in the bundle to apply specific CSS based on the current platform (Windows, Mac or Linux). Weâ€™ll put more details up on the wiki when the feature is released. In the meantime, here is a screenshot of Google Reader hosted in WebRunner, running on Mac, using <a href="http://www.hicksdesign.co.uk/journal/greader-13-straight-outta-beta-release">Jon Hicksâ€™</a> excellent CSS theme.
</p></blockquote>
<p><img src="http://starkravingfinkle.org/blog/wp-content/uploads/2007/10/greader-mac-small.png" border="0" /></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/webrunner-style-customizations/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Craigslist Tibco GI Remix</title>
		<link>http://ajaxian.com/archives/craigslist-tibco-gi-remix</link>
		<comments>http://ajaxian.com/archives/craigslist-tibco-gi-remix#comments</comments>
		<pubDate>Thu, 04 Oct 2007 09:02:04 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Mapping]]></category>
		<category><![CDATA[Offline]]></category>
		<category><![CDATA[TIBCO]]></category>

		<guid isPermaLink="false">http://ajaxian.com/archives/craigslist-tibco-gi-remix</guid>
		<description><![CDATA[Luke Birdeau has remixed Craigslist to produce a desktop-esque Ajax application view on the data that adds features such as being able to save your favorites, add notes to them, and even use the app offline (e.g. take your laptop on the road to go see the stuff for sale of meet that blind date). <a href="http://ajaxian.com/archives/craigslist-tibco-gi-remix">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Luke Birdeau has <a href="http://www.remixedby.us/craigslist">remixed Craigslist to produce a desktop-esque Ajax application</a> view on the data that adds features such as being able to save your favorites, add notes to them, and even use the app offline (e.g. take your laptop on the road to go see the stuff for sale of meet that blind date).  The app combines aspects of 3 libraries â€“ TIBCO GI 3.5 for the interface, plus Dojo (for offline) and Google Maps.  </p>
<p>To get started you first pick a locale, then a category, then do a search.  You can also add multiple regions and categories too.</p>
<p>Here is a quick demonstration of the app in action:</p>
<p><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/rmfaZc-RerQ"></param><embed src="http://www.youtube.com/v/rmfaZc-RerQ" type="application/x-shockwave-flash" width="425" height="350"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/craigslist-tibco-gi-remix/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>eBay Desktop moves to public beta</title>
		<link>http://ajaxian.com/archives/ebay-desktop-comes-out-of-beta</link>
		<comments>http://ajaxian.com/archives/ebay-desktop-comes-out-of-beta#comments</comments>
		<pubDate>Wed, 03 Oct 2007 15:05:25 +0000</pubDate>
		<dc:creator>Rey Bango</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Offline]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=2849</guid>
		<description><![CDATA[eBay's San Dimas project has finally moved to public beta. The application, developed using Adobe's AIR runtime, provides the ability to manage your eBay experience via a well-designed desktop interface: The product has also graduated to public beta, thanks in no small part to the enthusiasm and support of all of you. Whether or not <a href="http://ajaxian.com/archives/ebay-desktop-comes-out-of-beta">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>eBay's San Dimas project has finally moved to public beta. The application, developed using <a href="http://labs.adobe.com/technologies/air/">Adobe's AIR runtime</a>, provides the ability to manage your eBay experience via a well-designed desktop interface:</p>
<blockquote><p>The product has also graduated to public beta, thanks in no small part to the enthusiasm and support of all of you. Whether or not you installed San Dimas, you can now download eBay Desktop, for free, from <a href="http://desktop.ebay.com">http://desktop.ebay.com</a></p>
<p><a href="http://desktop.ebay.com">eBay Desktop</a> works with eBay US, and in the coming weeks and months we will be extending support to other countries. You can continue to use San Dimas to shop on any eBay site in the meantime. The response to San Dimas worldwide was incredible, and we are committed to bringing this desktop eBay experience to everyone.
</p></blockquote>
<p><a href="http://desktop.ebay.com"><img src="http://ajaxian.com/wp-content/images/rb_ebaydesktop.gif" alt="" border="0" width="550" height="397"/></a></p>
<p>The application team made substantial changes for this release to ensure a more personalized feel. Changes included:</p>
<ul>
<li>Revamping the home screen to dedicate more area to highlighting your eBay activity -- your watch list, bidding list, recent items, recent categories, and favorite searches. </li>
<li>A new browse feature</li>
<li>Favorite search feeds allow you to automatically pull down items that match a favorite search</li>
<li>Ability to run in the background even when the application itself is closed, so that you can get reminders or outbid alerts at any time. </li>
<li>Performance improvements</li>
<li>Numerous bug fixes</li>
</ul>
<p>eBay Desktop is a free download and all  you need to use it is a valid eBay account. You can download eBay Desktop from <a href="http://desktop.ebay.com">http://desktop.ebay.com</a> </p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/ebay-desktop-comes-out-of-beta/feed</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Vortex: A new offline abstraction on top of Google Gears</title>
		<link>http://ajaxian.com/archives/vortex-a-new-offline-abstraction-on-top-of-google-gears</link>
		<comments>http://ajaxian.com/archives/vortex-a-new-offline-abstraction-on-top-of-google-gears#comments</comments>
		<pubDate>Thu, 27 Sep 2007 17:06:43 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Gears]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[Offline]]></category>

		<guid isPermaLink="false">http://ajaxian.com/archives/vortex-a-new-offline-abstraction-on-top-of-google-gears</guid>
		<description><![CDATA[Brian Dunnington liked what he saw with the Dojo Offline Toolkit, and wanted to abstract it out so you could use functionality with any JavaScript library. He ended up with a new library called Vortex, a 10k JavaScript file that features: Ability to automatically detect referenced resources such as images, scripts, and stylesheets (including nested <a href="http://ajaxian.com/archives/vortex-a-new-offline-abstraction-on-top-of-google-gears">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Brian Dunnington liked what he saw with the Dojo Offline Toolkit, and wanted to abstract it out so you could use functionality with any JavaScript library.</p>
<p>He ended up with a new library called <a href="http://geekycodestuff.blogspot.com/2007/09/vortexoffline-demo-app.html">Vortex</a>, a 10k JavaScript file that features:</p>
<ul>
<li>Ability to automatically detect referenced resources such as images, scripts, and stylesheets (including nested @imported stylesheets)</li>
<li>Automatic detection of network state with corresponding UI/feature changes (also implements .isOnline() and .isOffline() methods)</li>
<li>Auto syncing of events. it essentially records any user-defined actions and automatically plays them back when the network comes back online</li>
<li>A generic storage provider to quickly and easily save javascript objects (JSON-encoded)</li>
<li>Graceful fallback if no offline support is available (google gears not installed or not allowed to run)</li>
<li>Library-independent (does not require dojo, prototype, Ext, YUI, etc) and cross-browser compatible</li>
</ul>
<p>He has a simple <a href="http://www.elementcodeproject.com/offline/">RSS demo</a> that shows the library at work.</p>
<p>I took it for a spin and went online and offline to see how it automatically detects. Also in the video below I take a peek at the code and we see what the definition of "online" means (able to XHR a particular file).</p>
<p><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/ozxvBRhOcNo"></param> <embed src="http://www.youtube.com/v/ozxvBRhOcNo" type="application/x-shockwave-flash" width="425" height="350"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/vortex-a-new-offline-abstraction-on-top-of-google-gears/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>WebRunner 0.7 Released</title>
		<link>http://ajaxian.com/archives/webrunner-07-released</link>
		<comments>http://ajaxian.com/archives/webrunner-07-released#comments</comments>
		<pubDate>Thu, 27 Sep 2007 12:00:24 +0000</pubDate>
		<dc:creator>Rey Bango</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Offline]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=2823</guid>
		<description><![CDATA[Adobe's AIR runtime gets a lot of press for bringing web apps to the desktop but Mark Finkle's WebRunner is looking to be an alternative force in this space. WebRunner is a simple XULRunner based browser that hosts web applications without the normal web browser user interface. WebRunner 0.7 was just released with improved configuration <a href="http://ajaxian.com/archives/webrunner-07-released">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Adobe's AIR runtime gets a lot of press for bringing web apps to the desktop but <a href="http://wiki.mozilla.org/WebRunner">Mark Finkle's WebRunner</a> is looking to be an alternative force in this space.  </p>
<blockquote><p>WebRunner is a simple XULRunner based browser that hosts web applications without the normal web browser user interface.</p></blockquote>
<p><a href="http://starkravingfinkle.org/blog/2007/09/webrunner-07-new-and-improved/">WebRunner 0.7 was just released</a> with improved configuration capabilities and file system organization. New webapp bundles have also been added for Facebook and Twitter to compliment the existing profiles for:</p>
<ul>
<li>Gmail</li>
<li>Goggle Calendar</li>
<li>Google Docs</li>
<li>Google Groups</li>
<li>Google Analytics</li>
</ul>
<p>WebRunner and the webapp bundles are available for <a href="http://wiki.mozilla.org/WebRunner#Installs">Windows, Linux and Mac</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/webrunner-07-released/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Making offline web applications even simpler: </title>
		<link>http://ajaxian.com/archives/making-offline-web-applications-even-simpler</link>
		<comments>http://ajaxian.com/archives/making-offline-web-applications-even-simpler#comments</comments>
		<pubDate>Tue, 11 Sep 2007 14:41:34 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Offline]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=2765</guid>
		<description><![CDATA[Ian Hickson has been doing a great job defining how web pages can declare themselves as applications, and can thus work offline. He has seen that there is a common case, which is "When you build a true web application, many people do so via the single page model". If you take this assumption, wouldn't <a href="http://ajaxian.com/archives/making-offline-web-applications-even-simpler">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Ian Hickson has been doing a <a href="http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2007-September/012462.html">great job defining how web pages can declare themselves as applications</a>, and can thus work offline.</p>
<p>He has seen that there is a common case, which is "When you build a true web application, many people do so via the single page model". If you take this assumption, wouldn't it be nice to tag the top page as an application, and have the browser subsystem take care of caching files and using them correctly when offline.  His assumption is based on the logic that: "If you have complicated server logic you use a multiple page application, which isn't going to do much in an offline mode anyway, as it has complicated server logic!".</p>
<p>Some people do not subscribe to this view, and think that there is a lot of multiple page applications that can be made to be web enabled, and so his latest thoughts take that into consideration.</p>
<p>The idea is that you can then &lt;html application="manifest-of-urls.txt"&gt; and use a different path. He starts with:</p>
<blockquote><p>
Ok, new proposal:</p>
<p>There's a concept of an application cache. An application cache is a group<br />
of resources, the group being identified by a URI (which typically happens<br />
to resolve to a manifest). Resources in a cache are either top-level or<br />
not; top-level resources are those that are HTML or XML and when parsed<br />
with scripting disabled have <html application="..."> with the value of<br />
the attribute pointing to the same URI as identifies the cache.</p>
<p>When you visit a page you first check to see if you have that page in a<br />
cache as a known top-level page.</p>
<p>If you do, skip the next two paragraphs; the 'new cache' flag is set to<br />
false.</p>
<p>.... and the logic keeps going ....<br />
</html></p></blockquote>
<p>Seeing simpler and simpler offline support is great.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/making-offline-web-applications-even-simpler/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Sybase Shows Auto Change Tracking and Syncing with Google Gears and iAnywhere</title>
		<link>http://ajaxian.com/archives/sybase-shows-auto-change-tracking-and-syncing-with-google-gears-and-ianywhere</link>
		<comments>http://ajaxian.com/archives/sybase-shows-auto-change-tracking-and-syncing-with-google-gears-and-ianywhere#comments</comments>
		<pubDate>Tue, 11 Sep 2007 12:38:50 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Gears]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Offline]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=2764</guid>
		<description><![CDATA[Eric Farrar of Sybase iAnywhere has been developing a prototype that allows direct database-to-database synchronization of a Gears application to Oracle, SQL Server, DB2 and Sybase databases. We asked Eric about his work and he told us: At Sybase iAnywhere we provide a data sync infrastructure for mobile and remote apps. The Background Sync architecture <a href="http://ajaxian.com/archives/sybase-shows-auto-change-tracking-and-syncing-with-google-gears-and-ianywhere">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Eric Farrar of Sybase iAnywhere has been developing a prototype that allows direct database-to-database synchronization of a Gears application to Oracle, SQL Server, DB2 and Sybase databases. We asked Eric about his work and he told us:</p>
<blockquote><p>
At Sybase iAnywhere we provide a data sync infrastructure for mobile and remote apps. The Background Sync architecture mentioned on <a href="http://code.google.com/apis/gears/architecture.html">the Gears site</a> is a lot like mobile application architectures we see all the time. As a result, it seems as though the same mobile sync technology can be used to solve the offline sync problem for Google Gears.</p>
<p>This prototype uses a local lightweight database (based on the iAnywhere UltraLite database) with built-in synchronization<br />
capabilities, meaning:</p>
<ul>
<li>Built in change tracking, so that changes (including deletes and updates) can be sent to the server,</li>
<li>Built in state tracking, so that the local database knows when synchronizations succeed and can take appropriate clean-up operations automatically,</li>
<li>Built in synchronization over TCP/IP or HTTP.</li>
<li>Optional encryption of the data store and of the sync stream</li>
<li>Somewhat stricter data management model than SQLite.</li>
</ul>
<p>The other piece is the sync server that manages synchronization to Oracle, SQL Server, IBM DB2 and Sybase databases. The sync technology is fully transactional, meaning data does not get partially changed at either end.  It also has automatic mechanisms to detect conflicts and hooks that allow users to programmatically handle the conflicts using SQL, .NET, or Java.</p>
<p>As far as scalability, these technologies are currently being used in projects that involve nearly half a million mobile devices.
</p></blockquote>
<p>Eric also recorded some videos show this all in action:</p>
<p><a href="http://www.youtube.com/watch?v=knFOtKKzMwk">Google Gears Prototype with Auto Change Tracking and Syncing</a> (3 min 13 sec)</p>
<p><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/knFOtKKzMwk"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/knFOtKKzMwk" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></p>
<p><a href="http://www.youtube.com/watch?v=sZbHfNVSsLE">Prototype of Google Gears Database Syncing with Oracle</a> (3 min 16 sec):</p>
<p><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/sZbHfNVSsLE"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/sZbHfNVSsLE" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/sybase-shows-auto-change-tracking-and-syncing-with-google-gears-and-ianywhere/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Gears Case Study: What we learned from Remember The Milk</title>
		<link>http://ajaxian.com/archives/gears-case-study-what-we-learned-from-remember-the-milk</link>
		<comments>http://ajaxian.com/archives/gears-case-study-what-we-learned-from-remember-the-milk#comments</comments>
		<pubDate>Wed, 05 Sep 2007 14:15:46 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Gears]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Offline]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=2745</guid>
		<description><![CDATA[As I posted on the Google Gears Blog: Omar Kilani of Remember The Milk took the time to write up his teams experience in Taking web applications offline with Google Gears. The article moves past an introduction to delve into the design decisions around an offline-capable architecture, and user messaging and presentation of state. We <a href="http://ajaxian.com/archives/gears-case-study-what-we-learned-from-remember-the-milk">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>As I <a href="http://gearsblog.blogspot.com/2007/09/gears-case-study-what-we-learned-from.html">posted</a> on the Google Gears Blog:</p>
<p>Omar Kilani of <a href="http://www.rememberthemilk.com/">Remember The Milk</a> took the time to write up his teams experience in <a href="http://code.google.com/support/bin/answer.py?answer=73848&#038;topic=12141">Taking web applications offline with Google Gears</a>.</p>
<p>The article moves past an introduction to delve into the design decisions around an offline-capable architecture, and user messaging and presentation of state. We learn why Omar decided to go with the explicit offline mode, and then the five steps to offline conversion:</p>
<ul>
<li>Ensuring resources are available offline</li>
<li>Decoupling the application from the network</li>
<li>Persisting data on the client</li>
<li>Re-creating application state from persisted data</li>
<li>Developing a synchronization strategy.</li>
<p>There is a lot to learn here.</p>
<p>From their architecture considerations:</p>
<blockquote><p>
RTM was designed as a client-side application from inception. The server-side portion of RTM is mainly used as a "dumb" data store, and the application periodically synchronizes with the server. In this case, using Gears to provide offline access was a natural fit, and was relatively quick to implement as we had some prior experience with data synchronization protocols.</p>
<p>There were some features of the online experience that could not be carried over to the offline mode. One of these was the Google Maps integration, in which users can geolocate their tasks and quickly visualize where their tasks are occurring in the real world. As Google Maps requires access to Google servers to fetch map tiles and data, and such a data set is quite large and thus hard to cache, this functionality is disabled once the user enters offline mode.</p>
<p>The undo feature of RTM is also unavailable in the offline version as this is a complex server-side operation (due to the multi-user nature of RTM and the ability to share tasks and lists). Instead, the user is presented with a dialog box asking for confirmation if they execute a destructive action such as delete. Undo functionality in offline mode is on the RTM roadmap, however.
</p></blockquote>
<p>To the decisions they made on showing the user information on whether they are online or offline:</p>
<p><img src="http://www.google.com/help/hc/images/gears.sync.png" /></p>
<blockquote><p>
A fundamental design decision is whether to implement offline support as "modal" or "modeless." Choosing which style to implement will, in most cases, be dictated by the type of data the application works with and how much of that data will be available offline. One style is not necessarily superior to the other, and, for example, it's much easier to implement a modeless style for tasks (in RTM) than it is for feed items (in Google Reader) based on the size of data items and the total data set alone.
</p></blockquote>
<p>Finally, we learn some tips and caveats from the RTM Gears implementation, including dealing with the LocalServer, the different types of offline, defensive coding, debugging, and coding with upgrades in mind.</p>
<p>Omar Kilani wraps it up in his conclusion:</p>
<blockquote><p>
By now, you should be itching to add offline support to your web application (we hope!). If you should take anything away from this article, it's that taking your application offline isn't as hard or complex as it may first seem, and that Gears is a joy to work with (and it'll become even easier and more fun as the project matures and is used by more applications).</p>
<p>As for us at RTM, we couldn't be happier with Gears. The speed at which we were able to provide offline functionality (four days from reading the documentation to a launchable implementation) is a testament to the quality, ease of use, and production-readiness of Gears. Many thanks to the Google Gears engineers for their foresight and for making this an open source project to which members of the Internet community can contribute.
</p></blockquote>
<p>Thanks to the Remember The Milk team for taking their application offline in record speed, and for taking the time to share their experience.</ul>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/gears-case-study-what-we-learned-from-remember-the-milk/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Dojo Offline: 0.9 and Gears</title>
		<link>http://ajaxian.com/archives/dojo-offline-09-and-gears</link>
		<comments>http://ajaxian.com/archives/dojo-offline-09-and-gears#comments</comments>
		<pubDate>Fri, 06 Jul 2007 15:55:32 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Gears]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Offline]]></category>

		<guid isPermaLink="false">http://ajaxian.com/archives/dojo-offline-09-and-gears</guid>
		<description><![CDATA[Brad Neuberg and SitePen have released a new beta of Dojo Offline. This release includes a full port to Google Gears, a port from Dojo 0.4 to 0.9, and more. Features An offline widget that you can easily embed in your web page with just a few lines of code, automatically providing the user with <a href="http://ajaxian.com/archives/dojo-offline-09-and-gears">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Brad Neuberg and SitePen have released a new beta of Dojo Offline. This release includes a full port to Google Gears, a port from Dojo 0.4 to 0.9, and more.</p>
<p><b>Features</b></p>
<p><a href="http://docs.google.com/View?docid=dhkhksk4_8gdp9gr#widget">An offline widget</a> that you can easily embed in your web page with just a few lines of code, automatically providing the user with network feedback, sync messages, offline instructions, and more.</p>
<p><a href="http://docs.google.com/View?docid=dhkhksk4_8gdp9gr#sync">A sync framework</a> to help you store actions done while offline and sync them with a server once back on the network.</p>
<p><a href="http://docs.google.com/View?docid=dhkhksk4_8gdp9gr#network_status">Automatic network and application-availability detection</a> to determine when your application is on- or off-line so that you<br />
can take appropriate action.</p>
<p>A <a href="http://docs.google.com/View?docid=dhkhksk4_8gdp9gr#slurp">slurp() method</a> that automatically scans the page and figures out all the resources that you need offline, including images, stylesheets, scripts, etc.; this is much easier than having to manually maintain which resources should be available offline, especially during development.</p>
<p><a href="http://docs.google.com/View?docid=dhkhksk4_8gdp9gr#dojo_storage">Dojo Storage</a>, an easy to use hashtable abstraction for storing offline data for when you don't need the heaviness of Google Gear's SQL abstraction; under the covers Dojo Storage saves its data into Google Gears.</p>
<p><a href="http://docs.google.com/View?docid=dhkhksk4_8gdp9gr#dojo_sql">Dojo SQL</a>, an easy to use SQL layer that executes SQL statements and returns them as ordinary JavaScript objects.</p>
<p><a href="http://docs.google.com/View?docid=dhkhksk4_8gdp9gr#crypto">New ENCRYPT() and DECRYPT() SQL keywords</a> that you can mix in when using Dojo SQL, to get transparent cryptography for columns of data. Cryptography is done on a Google Worker Pool thread, so that the browser UI is responsive.</p>
<p>Integration with the rest of Dojo, such as the Dojo Event system.</p>
<p><b>To get started</b> </p>
<p>Visit the <a href="http://dojotoolkit.org/offline">Dojo Offline home page</a>; read the new tutorial titled <a href="http://docs.google.com/View?docid=dhkhksk4_8gdp9gr">"Creating Offline Web Applications With Dojo Offline"</a>; <a href="http://download.dojotoolkit.org/experimental/offline/offline_sdk_0.9.zip">download<br />
the new Dojo Offline 0.9 beta SDK</a>; and <a href="http://docs.google.com/View?docid=dhkhksk4_8gdp9gr#demos">play with the demos</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/dojo-offline-09-and-gears/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Writing a desktop application with Ext, AIR, Aptana, and Red Bull</title>
		<link>http://ajaxian.com/archives/writing-a-desktop-application-with-ext-air-aptana-and-red-bull</link>
		<comments>http://ajaxian.com/archives/writing-a-desktop-application-with-ext-air-aptana-and-red-bull#comments</comments>
		<pubDate>Mon, 02 Jul 2007 11:56:56 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Aptana]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Gears]]></category>
		<category><![CDATA[Offline]]></category>
		<category><![CDATA[Sencha]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=2536</guid>
		<description><![CDATA[Jack Slocum has kicked off his new Ext JS blog with an entry on his experience writing an application with Ext JS, AIR, Aptana, and lots of Red Bull. As part of the experience Jack has created Ext.air.MainWindow which makes your AIR window look like a Ext.Window. Jack actually created two versions, the online one <a href="http://ajaxian.com/archives/writing-a-desktop-application-with-ext-air-aptana-and-red-bull">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>Jack Slocum has kicked off his new Ext JS blog with an <a href="http://extjs.com/blog/2007/06/29/building-a-desktop-application-with-ext-air-aptana-and-red-bull/">entry on his experience writing an application with Ext JS, AIR, Aptana, and lots of Red Bull</a>.</p>
<p>As part of the experience Jack has created <code>Ext.air.MainWindow</code> which makes your AIR window look like a Ext.Window.</p>
<p>Jack actually created two versions, the online one actually uses Google Gears, and he abstracted the database access via <code>Ext.data.SqlDB</code>.</p>
<p><a href="http://extjs.com/blog/2007/06/29/building-a-desktop-application-with-ext-air-aptana-and-red-bull"/><img src="http://extjs.com/playpen/screenshots/air/tasks.gif" border="0"/></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/writing-a-desktop-application-with-ext-air-aptana-and-red-bull/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Adobe AIR: Fresh name for Apollo</title>
		<link>http://ajaxian.com/archives/adobe-air-fresh-name-for-apollo</link>
		<comments>http://ajaxian.com/archives/adobe-air-fresh-name-for-apollo#comments</comments>
		<pubDate>Mon, 11 Jun 2007 05:33:38 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Offline]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=2475</guid>
		<description><![CDATA[I personally like Apollo, and it had already built recognition, but it is now called Adobe Air. What is new in the Air beta? New features in the Adobe AIR beta include an embedded local database, PDF support, enhanced capabilities for JavaScript developers, and deeper integration with Adobe Flex. The new beta version of Adobe <a href="http://ajaxian.com/archives/adobe-air-fresh-name-for-apollo">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>I personally like Apollo, and it had already built recognition, but it is <a href="http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&#038;newsId=20070610005052&#038;newsLang=en">now called Adobe Air</a>.</p>
<p>What is new in the Air beta?</p>
<blockquote><p>
New features in the Adobe AIR beta include an embedded local database, PDF support, enhanced capabilities for JavaScript developers, and deeper integration with Adobe Flex.</p>
<p>The new beta version of Adobe AIR allows developers to incorporate PDF by leveraging Adobe ReaderÂ® 8.1 functionality. Users will be able to view and interact with PDF documents within Adobe AIR applications similarly to how they interact with a PDF in the browser today. New capabilities such as support for transparent HTML windows, drag and drop support, and complete access to Adobe AIR and Flash APIs allow Ajax developers to create truly engaging desktop applications. Developers building Adobe AIR applications can use the Ajax frameworks of their choice, and the latest version of WebKit incorporated into Adobe AIR beta provides more components than were previously available in Apollo alpha. The embedded, cross-platform, open source SQLite local database was one of the most requested features from the Apollo alpha release. It requires no extra setup while providing large data capacity and full text search, enabling Web developers who traditionally rely on a database for storage to easily build desktop applications without changing existing techniques. Additionally, a tool is now available on Adobe Labs for DreamweaverÂ® CS3 that enables Dreamweaver projects to be delivered as Adobe AIR applications.
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/adobe-air-fresh-name-for-apollo/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Remember The Milk Offline</title>
		<link>http://ajaxian.com/archives/remember-the-milk-offline</link>
		<comments>http://ajaxian.com/archives/remember-the-milk-offline#comments</comments>
		<pubDate>Sat, 09 Jun 2007 17:38:26 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Gears]]></category>
		<category><![CDATA[Offline]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://ajaxian.com/archives/remember-the-milk-offline</guid>
		<description><![CDATA[Remember The Milk is one of the early Web 2.0 entrants that keeps innovating. I think that they were probably the first popular-non-google web applicationto go offline with Gears. They decided to take an approach similar to Google Reader's offline model: What can I do offline? Just about everything that's possible online with Remember The <a href="http://ajaxian.com/archives/remember-the-milk-offline">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.rememberthemilk.com/">Remember The Milk</a> is one of the early Web 2.0 entrants that keeps innovating. I think that they were probably the first popular-non-google web application<a href="http://www.rememberthemilk.com/services/googlegears/">to go offline with Gears</a>.</p>
<p>They decided to take an approach similar to Google Reader's offline model:</p>
<blockquote><p>
<b>What can I do offline?</b></p>
<p>Just about everything that's possible online with Remember The Milk now works offline too -- not only can you access your lists, but you can add new tasks and notes, edit existing tasks (complete, postpone, prioritise, tag, and change due dates to your heart's content), use your own personal tasks search engine, create new Smart Lists, and more.
</p></blockquote>
<p>We asked Omar Kilani of the team a couple of questions about the offline release / experience:</p>
<p><b>Why did you take the step of asking the user to go offline (as reader does) versus just taking the todo list data offline in the background?</b></p>
<p>The app state is always in sync, and everything is updated in the<br />
background (data is stored as in-memory JS objects, and sqlite is used<br />
as a backing store in a write-through fashion). So you can pull the<br />
plug, lose your Internet connection, etc, and the app will notice and<br />
switch you to offline mode.</p>
<p>Right now, we take a sort of hybrid modal/modeless approach --<br />
regardless of whether the app syncs in the background, we also thought<br />
it was important to allow the user to control the mode they're in and<br />
request a "sync".</p>
<p>I think an analogy to this is the 'Get Mail' button in email clients --<br />
most mail clients check for new mail in the background, and if you're<br />
using IMAP, you get notified immediately of new mail, but there's some<br />
security in seeing that button there, and knowing you can press it. :)</p>
<p>I think we need to improve the UI aspects of this, and we're going to<br />
look into doing that very soon. :)</p>
<p><b>How was the experience using Gears for offline?</b></p>
<p>Gears is awesome, and I believe it is the future of offline web<br />
applications. :)</p>
<p>I personally feel it gives you all the right building blocks to do<br />
whatever needs to be done to take an app offline.</p>
<p><b>What would you like to see the framework give you?</b></p>
<ol>
<li>Progress indication from LocalServer! (This would be very helpful in<br />
communicating with the user for the situation described above with<br />
initial manifest download</li>
<li>A more stable WorkerPool. (It's currently pretty easy to cause a<br />
browser crash with it.</li>
<li>Off the top of my head, how about bundle support in LocalServer?<br />
Perhaps it can go download a Zip/JAR with all your files in it, and have<br />
the manifest entries point into that. That would be pretty sweet.</li>
<p><a href="http://www.rememberthemilk.com/services/googlegears/"><img src="http://bp3.blogger.com/_fNklLQXNzR8/RmWV5rsSlXI/AAAAAAAAAHY/adHx5Iro2qQ/s400/rememberthemilkgears.jpg" /></a></ol>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/remember-the-milk-offline/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Dojo Offline Toolkit Beta Released</title>
		<link>http://ajaxian.com/archives/dojo-offline-toolkit-beta-released</link>
		<comments>http://ajaxian.com/archives/dojo-offline-toolkit-beta-released#comments</comments>
		<pubDate>Mon, 23 Apr 2007 15:11:01 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[Offline]]></category>

		<guid isPermaLink="false">http://ajaxian.com/archives/dojo-offline-toolkit-beta-released</guid>
		<description><![CDATA[Brad Neuberg and the SitePen team has been working tirelessly to get this beta out of the door. Now we have the Dojo Offline Toolkit in beta, released to the world: Dojo Offline is a free, open source toolkit that makes it easy for web applications to work offline. It consists of two pieces: a <a href="http://ajaxian.com/archives/dojo-offline-toolkit-beta-released">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://dojotoolkit.org/files/dot_logo.gif" border="0" style="float: right; padding: 5px" /></p>
<p>Brad Neuberg and the SitePen team has been working tirelessly to <a href="http://codinginparadise.org/weblog/2007/04/dojo-offline-beta-released-toolkit-for.html">get this beta</a> out of the door. Now we have the <a href="http://dojotoolkit.org/offline">Dojo Offline Toolkit</a> in beta, released to the world:</p>
<blockquote><p>
Dojo Offline is a free, open source toolkit that makes it easy for web applications to work offline. It consists of two pieces: a JavaScript library bundled with your web page and a small (~300K) cross-platform, cross-browser download that helps to cache your web application's user-interface for use offline.
</p></blockquote>
<p>You can try out the <a href="http://codinginparadise.org/editor">Moxie demo</a>, view source on the <a href="http://codinginparadise.org/projects/dojo_offline/working/demos/offline/helloworld/helloworld.html">Hello World example</a>, or go ahead and <a href="http://download.dojotoolkit.org/experimental/offline/dot_sdk_0.4.2_2.zip">download the SDK</a>.</p>
<p>Building offline apps isn't simple. It isn't a case of magically waving a "make my app work offline" wand. Developers need to re-think their architecture most of the time, and think about what it means to be offline. What can work. What can't. How do I sync when I go back online. All tough questions for many applications. DOT gives us a nice playground to try out some of these ideas.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/dojo-offline-toolkit-beta-released/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>The Offline Battle: You aren&#8217;t on a plane</title>
		<link>http://ajaxian.com/archives/the-offline-battle-you-arent-on-a-plane</link>
		<comments>http://ajaxian.com/archives/the-offline-battle-you-arent-on-a-plane#comments</comments>
		<pubDate>Wed, 04 Apr 2007 13:15:07 +0000</pubDate>
		<dc:creator>Dion Almaer</dc:creator>
				<category><![CDATA[Chat]]></category>
		<category><![CDATA[Editorial]]></category>
		<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Offline]]></category>
		<category><![CDATA[Screencast]]></category>

		<guid isPermaLink="false">http://ajaxian.com/?p=2283</guid>
		<description><![CDATA[The arguments around offline have been brewing for some time. DHH came out with typical flare on why offline doesn't matter as you are either online all the time, or if you aren't, you don't mind it. I hope that offline matters less and less over time, but for me connectivity can be very spotty <a href="http://ajaxian.com/archives/the-offline-battle-you-arent-on-a-plane">Read the rest...</a>]]></description>
			<content:encoded><![CDATA[<p>The arguments around offline have been brewing for some time. DHH came out with typical flare on why <a href="http://www.37signals.com/svn/posts/347-youre-not-on-a-fucking-plane-and-if-you-are-it-doesnt-matter">offline doesn't matter</a> as you are either online all the time, or if you aren't, you don't mind it.</p>
<p>I hope that offline matters less and less over time, but for me connectivity can be very spotty indeed. It isn't just when you are on a plane. EVDO and friends often suck. Wireless often sucks. Hell, if they can't fix it so my calls don't drop all the time then how can I expect decent net access from anywhere?  And all of this is from someone living in the bay area, let alone Lonely, Wyoming, or somewhere in the third world (yes they have internet too!)</p>
<p>The folks at Cerulean Studios (makers of Trillian IM) <a href="http://blog.ceruleanstudios.com/?p=101">have blogged about their offline IM client</a> that is Flash based, but can jump offline.</p>
<blockquote><p>
The current focus of the technology is to rip application-quality web software *out* of the browser and *on* to the desktop. It is (currently) technically impossible (for security reasons, at the very least) to magically invoke a real application on your desktop without a download of any sorts; the current demo youâ€™re watching is using a small Firefox plugin to do its dirty work. The actual IM product is still the same web-based Flash that youâ€™re invoking from your web browser. In a way, you can just think of this as a mini web browser (very mini :) ).
</p></blockquote>
<p><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/BOKQF864DS4"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/BOKQF864DS4" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxian.com/archives/the-offline-battle-you-arent-on-a-plane/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

