<?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>Gregs Ramblings</title>
	<atom:link href="http://gregsramblings.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://gregsramblings.com</link>
	<description>Adobe, Technology, Photography, Aviation and other Ramblings</description>
	<lastBuildDate>Mon, 06 May 2013 23:17:31 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Find UI/UX Designers on Behance</title>
		<link>http://gregsramblings.com/2013/04/21/find-uiux-designers-on-behance/</link>
		<comments>http://gregsramblings.com/2013/04/21/find-uiux-designers-on-behance/#comments</comments>
		<pubDate>Mon, 22 Apr 2013 03:24:47 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[Adobe Creative Cloud]]></category>
		<category><![CDATA[Behance]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[behance]]></category>
		<category><![CDATA[designers]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://gregsramblings.com/?p=3826</guid>
		<description><![CDATA[Behance is described on http://www.behance.net/about as &#8220;The leading online platform to showcase &#38; discover creative work. The creative world updates their work in one place to broadcast it widely and efficiently. Companies explore the work and access talent on a global scale.&#8220;. Of course, you&#8217;ll find amazing work in graphic design, architecture, photography, illustration, etc., but what [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://behance.net" target="_blank">Behance</a> is described on <a href="http://www.behance.net/about" target="_blank">http://www.behance.net/about</a> as &#8220;<em>The leading online platform to showcase &amp; discover creative work. The creative world updates their work in one place to broadcast it widely and efficiently. Companies explore the work and access talent on a global scale.</em>&#8220;.</p>
<p>Of course, you&#8217;ll find amazing work in graphic design, architecture, photography, illustration, etc., but what you may not know is that Behance is a great place to find really good UI/UX designers too.</p>
<p>Check out some of the portfolios in the UI/UX category &#8211; <a href="http://www.behance.net/search?field=132" target="_blank">http://www.behance.net/search?field=132</a> &#8211;</p>
<p><a href="http://www.behance.net/search?field=132"><img class="alignnone size-full wp-image-3830" alt="UI/UX Designers on Behance" src="http://gregsramblings.com/wp-content/uploads/2013/04/Online-Portfolios-on-Behance2.jpg" width="700" height="2699" /></a></p>
<p>&nbsp;</p>
<p>The community of Behance users is huge and growing.  Check out these stats &#8211; <a href="http://www.behance.net/facts" target="_blank">http://www.behance.net/facts</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gregsramblings.com/2013/04/21/find-uiux-designers-on-behance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fantastic Sneak peek at Photoshop Camera Shake Reduction</title>
		<link>http://gregsramblings.com/2013/04/18/sneak-peek-at-photoshop-camera-shake-reduction/</link>
		<comments>http://gregsramblings.com/2013/04/18/sneak-peek-at-photoshop-camera-shake-reduction/#comments</comments>
		<pubDate>Thu, 18 Apr 2013 04:46:10 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[Adobe MAX 2013]]></category>
		<category><![CDATA[Adobe Photoshop]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Adobe MAX]]></category>
		<category><![CDATA[camera shake reduciton]]></category>
		<category><![CDATA[deblur]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[MAX]]></category>
		<category><![CDATA[photoshop]]></category>

		<guid isPermaLink="false">http://gregsramblings.com/?p=3814</guid>
		<description><![CDATA[Watch the following video now. It&#8217;s only 45 seconds long. Yes, it&#8217;s real and it&#8217;s killer. You&#8217;re coming to Adobe MAX to see more exciting developments, right? This MAX is a MUST. Use discount code MXSM13 to save $300.]]></description>
				<content:encoded><![CDATA[<p>Watch the following video now.  It&#8217;s only 45 seconds long.  Yes, it&#8217;s real and it&#8217;s killer.  You&#8217;re coming to <a href="http://max.adobe.com/" target="_blank">Adobe MAX</a> to see more exciting developments, right?  This MAX is a MUST.  Use discount code <strong><a href="https://www.adobe-max.com/portal/newreg.ww?scid=social7049754" target="_blank">MXSM13</a></strong> to save $300.</p>
<p><iframe width="853" height="480" src="http://www.youtube.com/embed/stUD-DRhTZg?rel=0&#038;vq=hd720" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://gregsramblings.com/2013/04/18/sneak-peek-at-photoshop-camera-shake-reduction/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adobe Marketing Cloud Videos approaching 2 million views</title>
		<link>http://gregsramblings.com/2013/04/16/adobe-marketing-cloud-videos-approaching-2-million-views/</link>
		<comments>http://gregsramblings.com/2013/04/16/adobe-marketing-cloud-videos-approaching-2-million-views/#comments</comments>
		<pubDate>Tue, 16 Apr 2013 20:44:56 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[Adobe Marketing Cloud]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[adobe marketing cloud]]></category>
		<category><![CDATA[marketing cloud]]></category>
		<category><![CDATA[marketing myths]]></category>
		<category><![CDATA[myths]]></category>

		<guid isPermaLink="false">http://gregsramblings.com/?p=3801</guid>
		<description><![CDATA[One of the best enterprise marketing campaigns I&#8217;ve ever seen. Funny AND True! Learn more about the Adobe Marketing Cloud. More videos on this and other topics can be found on Adobe&#8217;s YouTube channel.]]></description>
				<content:encoded><![CDATA[<p>One of the best enterprise marketing campaigns I&#8217;ve ever seen. Funny AND True!  <a href="http://www.adobe.com/solutions/digital-marketing.html" target="_blank">Learn more about the Adobe Marketing Cloud</a>.  More videos on this and other topics can be found on <a href="http://www.youtube.com/user/AdobeSystems" target="_blank">Adobe&#8217;s YouTube channel</a>.</p>
<p><iframe src="http://www.youtube.com/embed/sF51ChhNaSc?rel=0" height="480" width="853" allowfullscreen="" frameborder="0"></iframe></p>
<p><iframe src="http://www.youtube.com/embed/YsIVvXfyCrk?rel=0" height="480" width="853" allowfullscreen="" frameborder="0"></iframe></p>
<p><iframe src="http://www.youtube.com/embed/gjsT-z16vR0?rel=0" height="480" width="853" allowfullscreen="" frameborder="0"></iframe></p>
<p><iframe src="http://www.youtube.com/embed/2IWtsH48JRA?rel=0" height="480" width="853" allowfullscreen="" frameborder="0"></iframe></p>
<p><iframe src="http://www.youtube.com/embed/LFvpzK8_PDE?rel=0" height="480" width="853" allowfullscreen="" frameborder="0"></iframe></p>
<p><iframe src="http://www.youtube.com/embed/CwMYpH_oA-g?rel=0" height="480" width="853" allowfullscreen="" frameborder="0"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://gregsramblings.com/2013/04/16/adobe-marketing-cloud-videos-approaching-2-million-views/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sony NEX-6 Review &#8211; my entry into mirrorless</title>
		<link>http://gregsramblings.com/2013/04/16/sony-nex-6-review/</link>
		<comments>http://gregsramblings.com/2013/04/16/sony-nex-6-review/#comments</comments>
		<pubDate>Tue, 16 Apr 2013 19:20:14 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[Photography]]></category>
		<category><![CDATA[Review]]></category>
		<category><![CDATA[mirrorless]]></category>
		<category><![CDATA[nex-6]]></category>
		<category><![CDATA[nex6]]></category>
		<category><![CDATA[Nikon]]></category>
		<category><![CDATA[sony]]></category>

		<guid isPermaLink="false">http://gregsramblings.com/?p=3750</guid>
		<description><![CDATA[I&#8217;ve been an active photographer for over 25 years both as a hobby and for hire.  During the past 9 years, I&#8217;ve had a very active aerial photography business, Tiger Aerial Photography.  I&#8217;ve always owned two types of cameras &#8212; SLRs (recently the Nikon D70, D200, and D300) and compacts (recently the Panasonic DMC-LX3 and [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve been an active photographer for over 25 years both as a hobby and for hire.  During the past 9 years, I&#8217;ve had a very active aerial photography business, <a href="http://tigeraerial.com" target="_blank">Tiger Aerial Photography</a>.  I&#8217;ve always owned two types of cameras &#8212; SLRs (recently the Nikon <a href="http://gregsramblings.com/2009/01/18/nikon-d70-rediscovering-my-first-digital-slr/" target="_blank">D70</a>, <a href="http://www.dpreview.com/reviews/nikond200" target="_blank">D200</a>, and <a href="http://www.dpreview.com/reviews/nikond300" target="_blank">D300</a>) and compacts (recently the Panasonic <a href="http://www.dpreview.com/reviews/panasonicdmclx3" target="_blank">DMC-LX3</a> and <a href="http://www.dpreview.com/reviews/q42010highendcompactgroup/" target="_blank">DMC-LX5</a>).  Both my Nikon D300 and Panasonic DMC-LX5 were starting to feel a little aged, so I&#8217;ve been looking to upgrade.  I&#8217;ve had my eye on the Nikon <a href="http://www.dpreview.com/reviews/nikon-d800-d800e" target="_blank">D800</a> and the Panasonic <a href="http://www.dpreview.com/reviews/panasonic-lumix-dmc-lx7/" target="_blank">DMC-LX7</a> as natural upgrades to both cameras.  I&#8217;ve also been occasionally looking at several mirrorless models from Nikon, Panasonic and others, but the features and reviews were always lacking.  I had concluded that the benefits of interchangeable lenses didn&#8217;t out weigh the lack of features and performance.<br />
<img class="alignright size-full wp-image-3772" alt="Sony NEX-6" src="http://gregsramblings.com/wp-content/uploads/2013/04/nex6-feature.png" width="250" height="176" /><br />
The <a href="http://www.dpreview.com/reviews/sony-alpha-nex-6" target="_blank">Sony NEX-6</a> is game changing for me.  There are many good reviews of this camera (see links below) so I&#8217;m not going to waste your time by simply replicating their long list of features.  I&#8217;ll just focus on the aspects that are important to me.</p>
<p>Here are the key features that sold me on the NEX-6:</p>
<ul>
<li><span style="line-height: 13px;">It supports RAW and RAW+JPG (and allows me to switch back and forth with one button).  If I&#8217;m doing snapshots, I&#8217;ll shoot JPG.  However, if I need maximum dynamic range and quality, I&#8217;ll shoot RAW and use Adobe Lightroom and Adobe Camera Raw to perfect the images.  Every camera I&#8217;ve owned in the last 10 years has had this capability.</span></li>
<li>Like most modern compact cameras, the NEX-6 has sophisticated auto features but it also has aperture priority, shutter priority, and full manual.</li>
<li>Instant response when pressing the shutter button.</li>
<li>The interface doesn&#8217;t require me to go into the menus to make common setting changes (a show stopper for me with many cameras).  It has a simple mode-dial, and two dials I can turn with my thumb to change shutter speed and aperture.  Changing ISO is also very convenient.  There are also programmable buttons that allow me to put other setting changes a button press away.</li>
<li>Fantastic low-light performance.  ISO 3200 on this camera is better than ISO 800 on my D300!  This is like a free lens upgrade in many ways!  The max ISO is 25,600 and it&#8217;s actually somewhat usable!</li>
<li>Really good 16MP resolution using a APS-C (23.5 x 15.6 mm) sensor.  That&#8217;s about the same size sensor as my D300 and a lot bigger than the Panasonic DMC-LX3/5/7 and most other smaller cameras.</li>
<li>Wi-Fi support &#8211; I can transfer images from the camera to my iPhone or iPad (or Android device) with no Wi-Fi network nearby.  The camera basically becomes a Wi-Fi hotspot that your mobile device can connect to, and with the help of a mobile app, download the images from the camera.  The camera also has the ability to push images to a computer if there is an available Wi-Fi network.  DPReview covers this in great detail <a href="http://www.dpreview.com/reviews/sony-alpha-nex-6/10" target="_blank">here</a>.  I honestly wasn&#8217;t looking for this feature, but I have to admit, it&#8217;s very useful.  NOTE: The NEX-7 doesn&#8217;t have this feature.</li>
<li>1080/60p HD movies &#8211; and they look fantastic.  Surprisingly, you can change the camera settings during the recording of the video.  I&#8217;ll post some samples later.  There are several good ones on YouTube already.</li>
</ul>
<p>The camera also has a ton of  bells and whistles that didn&#8217;t really play into my decision, but I do enjoy them &#8212; Auto HDR, Sweep Panorama (both horizontal and vertical sweeps), apps, and hand-held anti motion blur.</p>
<p>There were four unexpected features in the NEX-6 that surprised me:</p>
<ol>
<li><span style="line-height: 13px;"><strong>Focus Peaking</strong> &#8211; The NEX-6 offers focus peaking which highlights the in-focus details of the image in yellow (or red or white &#8211; it&#8217;s customizable).  Sam Mallery has a great article that demonstrates this <a href="http://www.bhphotovideo.com/indepth/sony/news/new-sony-nex-6-compact-interchangeable-lens-digital-camera" target="_blank">here</a>.</span></li>
<li><strong>AEL Toggle</strong> &#8211; There is a AEL button on the back of the camera that works as you would expect &#8211; when you hold down the button, it locks the exposure until you let it go.  However, I discovered in the menus that you can turn this button into a toggle.  When set to toggle, you point the camera and press the AEL button and it will lock the exposure until you press it again.</li>
<li><strong>Customizable Settings</strong> &#8211; the NEX-6 allows you to customize several buttons on the camera.  I think Mike Hendron covers this really well <a href="http://sonyalphalab.com/2012/12/essential-settings-for-the-nex-6-make-it-work-the-way-you-do/" target="_blank">here</a> (along with details on his own customizations)</li>
<li><strong>Apps</strong> &#8211; I honesty snickered at the idea of &#8220;camera apps&#8221; when I first noticed this feature, but then I discovered that there are indeed some really cool apps for this camera.  An app basically adds new functionality to the camera.  You can see the entire list of available apps at <a href="https://www.playmemoriescameraapps.com" target="_blank">https://www.playmemoriescameraapps.com</a>.  Be sure to check out the <a href="https://www.playmemoriescameraapps.com/portal/usbdetail.php?eid=IS9104-NPIA09014_00-000003" target="_blank">Time-lapse app</a>!  Note: The NEX-7 doesn&#8217;t support apps.</li>
</ol>
<p><strong>Why not the <a href="http://www.dpreview.com/reviews/sonynex7" target="_blank">NEX-7</a>?</strong>  I looked at the NEX-7 because it offers even higher resolution (24MP), but it&#8217;s lacking Wi-Fi capabilities and app support.  The NEX-6 also has higher ISO available.  There is a good comparison <a href="http://snapsort.com/compare/Sony-Alpha-NEX-6-vs-Sony-NEX-7" target="_blank">SnapSort</a>.</p>
<p>Another pleasant surprise is that Adobe Lightroom already has a lens profile for the 16-50mm lens that came with the camera:</p>
<div id="attachment_3782" class="wp-caption aligncenter" style="width: 256px"><a href="http://www.adobe.com/products/photoshop-lightroom.html"><img class="size-full wp-image-3782 " alt="lightroom-dialog-sony-nex6" src="http://gregsramblings.com/wp-content/uploads/2013/04/lightroom-dialog-sony-nex6.jpg" width="246" height="271" /></a><p class="wp-caption-text">Lightrooom 4 Lens Correction Dialog</p></div>
<h3>Disappointments:</h3>
<p>I love this camera, but there are a few disappointments:</p>
<ul>
<li><span style="line-height: 13px;">Auto-focus sometimes gets confused in low light and takes a second or two to lock-in.  Maybe I&#8217;m spoiled by the near-instant focusing of my D300, but I wish the NEX-6 was a little better.  It&#8217;s still better than most compact cameras, but not up to high-end SLR-levels just yet.</span></li>
<li>The battery life is a little disappointing.  It&#8217;s not terrible, but it&#8217;s not as good as my D300 or my DMC-LX5.</li>
<li>My D300 and DMC-LX5 each have a feature that allows me to specify the lowest acceptable shutter speed when the camera is set to full auto exposure.  I&#8217;m actually decent at shooting hand-held at 1/15th of a second with the 16-50mm lens, but the camera assumes that I need some ISO boost when the shutter goes below 1/60th of a second.  It&#8217;s not a big deal since I can quickly switch to manual mode but I&#8217;m hoping that a future firmware update will add this level of customization like many of my other cameras.</li>
<li>I find it almost impossible to stop a video recording without shaking the camera forcing me to cut out the final second of the video post-shoot.  It&#8217;s not a big deal, but I think the button should be a little easier to press.</li>
</ul>
<p>Despite these disappointments, I am very happy with the camera.  I&#8217;ll definitely take it on my next <a href="http://tigeraerial.com" target="_blank">Aerial Photography assignment</a>, but my D300 will be nearby just in case!  There&#8217;s a huge difference between taking a few photos around the house and shooting from 1500 feet while moving at 120MPH!  I suspect the NEX-6 will work out.</p>
<h3>Other Reviews and Info</h3>
<ul>
<li><a href="http://www.dpreview.com/reviews/sony-alpha-nex-6" target="_blank">DPReview.com&#8217;s review of the NEX-6</a></li>
<li><a href="http://www.docs.sony.com/release/NEX6_brochure.pdf" target="_blank">Sony NEX-6 Brochure (PDF)</a></li>
<li><a href="http://store.sony.com/webapp/wcs/stores/servlet/CategoryDisplay?storeId=10151&amp;langId=-1&amp;catalogId=10551&amp;Ntx&amp;N=4294938986&amp;Nao&amp;No&amp;rpp=60&amp;Ns=Prod.isNewProduct%7C1&amp;Nf&amp;minPrice&amp;maxPrice&amp;navigation&amp;categoryId=8198552921644718503" target="_blank">List of all Sony brand e-mount lenses (all work NEX-6)</a></li>
<li><a href="http://www.dpreview.com/forums/1042" target="_blank">DPReview.com&#8217;s Sony NEX forum</a></li>
<li><a href="http://www.cameralabs.com/reviews/Sony_Alpha_NEX_6/" target="_blank">Camera Labs Review</a></li>
<li><a href="http://store.sony.com/webapp/wcs/stores/servlet/CategoryDisplay?catalogId=10551&amp;storeId=10151&amp;langId=-1&amp;categoryId=8198552921644884016" target="_blank">Sony&#8217;s home page for the NEX-6</a></li>
<li><a href="http://sonyalphalab.com/2012/12/essential-settings-for-the-nex-6-make-it-work-the-way-you-do/" target="_blank">Great article on customizing the NEX-6</a></li>
<li><a href="http://snapsort.com/compare/Nikon-1-V2-vs-Sony-Alpha-NEX-6" target="_blank">Comparison of the NEX-6 with the Nikon 1 V2</a> (if you are a Nikon fan like me, this might hurt a bit)</li>
<li><a href="https://www.facebook.com/Nex6TipsAndTricks" target="_blank">NEX-6 Tips and Tricks page on Facebook</a> (my own creation so go LIKE it!)</li>
<li><a href="http://www.amazon.com/gp/product/B0096W1OKS/ref=as_li_qf_sp_asin_tl?ie=UTF8&amp;camp=1789&amp;creative=9325&amp;creativeASIN=B0096W1OKS&amp;linkCode=as2&amp;tag=gregsramb-20" target="_blank">Amazon.com&#8217;s page for the NEX-6</a></li>
<li><a href="http://snapsort.com/explore/best-mirrorless/24-months-recent" target="_blank">Other recent mirrorless camera options</a></li>
</ul>
<h3>Comparing it to other Sony NEX models (<a href="snapsort.com" target="_blank">snapsort.com</a>)</h3>
<ul>
<li><a href="http://snapsort.com/compare/Sony-Alpha-NEX-6-vs-Sony-NEX-5N" target="_blank"><span style="line-height: 13px;">NEX-6 vs NEX-5N</span></a></li>
<li><a href="http://snapsort.com/compare/Sony-Alpha-NEX-6-vs-Sony-NEX-5R" target="_blank">NEX-6 vs NEX-5R</a></li>
<li><a href="http://snapsort.com/compare/Sony-Alpha-NEX-6-vs-Sony-NEX-7" target="_blank">NEX-6 vs NEX-7</a></li>
<li><a href="http://snapsort.com/compare/Sony-Alpha-NEX-6-vs-Sony-NEX-7n" target="_blank">NEX-6 vs NEX-7N</a></li>
<li><a href="http://snapsort.com/compare/Sony-Alpha-NEX-6-vs-Sony_Alpha_NEX-3" target="_blank">NEX-6 vs NEX-3</a></li>
<li><a href="http://snapsort.com/compare/Sony-Alpha-NEX-6-vs-Sony-NEX-C3" target="_blank">NEX-6 vs C3</a></li>
</ul>
<h3>Using my Nikon Lenses (lens adapter)</h3>
<p>I have several Nikon/Nikkor lenses, including a <a href="http://www.dpreview.com/lensreviews/nikon_50_1p4_n15" target="_blank">50mm f1.4</a>, <a href="http://www.dpreview.com/lensreviews/tamron_18-270_3p5-6p3_vc_n15" target="_blank">Tamron 18-270mm</a> and various others.  After some research, I found that there are several choices of adpaters that allow you to use your Nikon lenses on the NEX-6.  I purchased <a href="http://www.amazon.com/gp/product/B003Y2YE3A/ref=as_li_qf_sp_asin_tl?ie=UTF8&amp;camp=1789&amp;creative=9325&amp;creativeASIN=B003Y2YE3A&amp;linkCode=as2&amp;tag=gregsramb-20" target="_blank">this one</a> and so far, it seems to work really well.  I&#8217;ll do a separate blog post on the specifics soon.  There is a catch to this type of adapter however &#8212; you have to manually focus and manually control the aperture, but that&#8217;s no big deal, especially with the NEX-6&#8242;s focus peaking feature.</p>
<h3>Summary</h3>
<p>This camera could easily become my walk-around camera and also my pro camera for many types of assignments.  It&#8217;s awesome to have a camera with this many features fit into my computer bag.  I&#8217;m still in the honeymoon phase, so I&#8217;ll let you know how I feel about it in a few weeks. <img src='http://gregsramblings.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h3>Sample Photos</h3>
<p>I have only had the camera for 4 days, so I haven&#8217;t had a lot of time to experiment but I do have a handful of shots to give you an idea.  If you click on any of the following photos, you will go to a larger version where you can view the original image and see the camera EXIF data.  I&#8217;ll do a followup blog post after the honeymoon period and will include many more pictures and some videos.  In the meantime, the reviews above have tons of sample images.  You can find good NEX-6 video samples on YouTube.</p>
<div class="wp-caption alignnone" style="width: 610px"><a href="http://gallery.tigeraerial.com/Pets/Wilson-Dog-Pack-2013-04/28927828_TJdvrJ#!i=2458592108&amp;k=6FQG5xT&amp;lb=1&amp;s=X3"><img class=" " alt="" src="http://gallery.tigeraerial.com/photos/i-6FQG5xT/0/M/i-6FQG5xT-M.jpg" width="600" height="399" /></a><p class="wp-caption-text">55-200mm lens, manual exposure, ISO 400, 1/125th at f7.1</p></div>
<div class="wp-caption alignnone" style="width: 610px"><a href="http://gallery.tigeraerial.com/Pets/Wilson-Dog-Pack-2013-04/28927828_TJdvrJ#!i=2458591963&amp;k=vffmBQ4&amp;lb=1&amp;s=X3"><img class=" " alt="" src="http://gallery.tigeraerial.com/photos/i-vffmBQ4/0/M/i-vffmBQ4-M.jpg" width="600" height="399" /></a><p class="wp-caption-text">55-200mm lens, manual exposure, ISO 400, 1/160th at f7.1</p></div>
<div class="wp-caption alignnone" style="width: 610px"><a href="http://gallery.tigeraerial.com/Pets/Wilson-Dog-Pack-2013-04/28927828_TJdvrJ#!i=2459861084&amp;k=WtJfCxS&amp;lb=1&amp;s=X3"><img alt="" src="http://gallery.tigeraerial.com/photos/i-WtJfCxS/0/M/i-WtJfCxS-M.jpg" width="600" height="399" /></a><p class="wp-caption-text">Full auto &#8211; untouched</p></div>
<div class="wp-caption alignnone" style="width: 610px"><a href="http://gallery.tigeraerial.com/Photography/SonyNEX6/Sony-NEX-6-Samples/28952189_44QS8C#!i=2461203918&amp;k=sXP67Vc&amp;lb=1&amp;s=X3"><img alt="" src="http://gallery.tigeraerial.com/photos/i-sXP67Vc/0/M/i-sXP67Vc-M.jpg" width="600" height="399" /></a><p class="wp-caption-text">Manual focus, Nikon mount Tamron 18-270mm lens with adapter</p></div>
<div class="wp-caption alignnone" style="width: 610px"><a href="http://gallery.tigeraerial.com/Pets/Wilson-Dog-Pack-2013-04/28927828_TJdvrJ#!i=2459696863&amp;k=V6jj2Bb&amp;lb=1&amp;s=X3"><img class=" " alt="" src="http://gallery.tigeraerial.com/photos/i-V6jj2Bb/0/M/i-V6jj2Bb-M.jpg" width="600" height="399" /></a><p class="wp-caption-text">ISO 3200! Click to see a larger version and original image.</p></div>
]]></content:encoded>
			<wfw:commentRss>http://gregsramblings.com/2013/04/16/sony-nex-6-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Keeping up with the Adobe Creative Cloud Evangelists</title>
		<link>http://gregsramblings.com/2013/04/02/keeping-up-with-the-adobe-creative-cloud-evangelists/</link>
		<comments>http://gregsramblings.com/2013/04/02/keeping-up-with-the-adobe-creative-cloud-evangelists/#comments</comments>
		<pubDate>Tue, 02 Apr 2013 16:17:50 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[Adobe Creative Cloud]]></category>
		<category><![CDATA[Adobe MAX 2013]]></category>
		<category><![CDATA[Adobe MAX]]></category>
		<category><![CDATA[creative cloud]]></category>
		<category><![CDATA[MAX]]></category>
		<category><![CDATA[superblog]]></category>

		<guid isPermaLink="false">http://gregsramblings.com/?p=3743</guid>
		<description><![CDATA[As we approach Adobe MAX, it can become challenging to keep up with all of the Adobe news!  A couple of years ago, our team created something to help &#8212; http://adobeevangelists.com (or RSS version) and now, we&#8217;ve improved it. This blog is an aggregation of all of our blogs in chronological order.  When you click an [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://adobeevangelists.com" target="_blank"><img class="alignright size-medium wp-image-3744" alt="adobeevangelistsblog-lg" src="http://gregsramblings.com/wp-content/uploads/2013/04/adobeevangelistsblog-lg-300x191.jpg" width="300" height="191" /></a>As we approach <a href="http://max.adobe.com" target="_blank">Adobe MAX</a>, it can become challenging to keep up with all of the Adobe news!  A couple of years ago, our team created something to help &#8212; <a href="http://adobeevangelists.com" target="_blank">http://adobeevangelists.com</a> (or <a href="http://adobeevangelists.com/feed" target="_blank">RSS version</a>) and now, we&#8217;ve improved it.</p>
<p>This blog is an aggregation of all of our blogs in chronological order.  When you click an individual article, you will go to the original source article  on the author&#8217;s blog.</p>
<p>You&#8217;ll also notice a combined Twitter feed that is from this <a href="https://twitter.com/gregsramblings/ccevangelists" target="_blank">Twitter list</a> (<a href="https://twitter.com/gregsramblings/ccevangelists/members" target="_blank">member list</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://gregsramblings.com/2013/04/02/keeping-up-with-the-adobe-creative-cloud-evangelists/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Creative Cloud Customer Video</title>
		<link>http://gregsramblings.com/2013/04/01/creative-cloud-customer-video/</link>
		<comments>http://gregsramblings.com/2013/04/01/creative-cloud-customer-video/#comments</comments>
		<pubDate>Mon, 01 Apr 2013 16:38:02 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[Adobe Creative Cloud]]></category>
		<category><![CDATA[cc]]></category>
		<category><![CDATA[creative cloud]]></category>
		<category><![CDATA[customer]]></category>

		<guid isPermaLink="false">http://gregsramblings.com/?p=3734</guid>
		<description><![CDATA[Recently, we added this video to the Adobe Creative Cloud Home Page but I thought it was worth republishing here. Yes, it&#8217;s a polished, Adobe-created video, but it matches what I&#8217;m hearing from similar customers as they learn about Creative Cloud and start using it. I&#8217;ll be posting some of my own customer videos and [...]]]></description>
				<content:encoded><![CDATA[<p>Recently, we added this video to the <a href="http://www.adobe.com/products/creativecloud.html" target="_blank">Adobe Creative Cloud Home Page</a> but I thought it was worth republishing here. Yes, it&#8217;s a polished, Adobe-created video, but it matches what I&#8217;m hearing from similar customers as they learn about Creative Cloud and start using it. I&#8217;ll be posting some of my own customer videos and interviews shortly that will have less polish but will drill down on some specific features in Creative Cloud and how those features are used in the &#8220;real world&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregsramblings.com/2013/04/01/creative-cloud-customer-video/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iOS Safari Web Apps Templates and HowTos</title>
		<link>http://gregsramblings.com/2012/08/14/web-apps-ios-safari-templates-and-howtos/</link>
		<comments>http://gregsramblings.com/2012/08/14/web-apps-ios-safari-templates-and-howtos/#comments</comments>
		<pubDate>Tue, 14 Aug 2012 13:25:17 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[iOS/iPhone/iPad]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PhoneGap]]></category>
		<category><![CDATA[apple-mobile-web-app-capable]]></category>
		<category><![CDATA[apple-touch-icon]]></category>
		<category><![CDATA[apple-touch-startup-image]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[ios safari]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[web app]]></category>
		<category><![CDATA[webapp]]></category>

		<guid isPermaLink="false">http://gregsramblings.com/?p=3645</guid>
		<description><![CDATA[An iOS web application uses HTML/CSS/JS to deliver a iOS experience that looks and behaves like a native iOS application. If done correctly, the user can&#8217;t tell that it&#8217;s not a &#8220;normal&#8221; app. Although the capabilities are limited, it can be a great solution for many apps where going through the normal iOS app store [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://gregsramblings.com/wp-content/uploads/2012/08/iphonewebapp.png"><img class="alignright size-medium wp-image-3647" title="iphonewebapp" src="http://gregsramblings.com/wp-content/uploads/2012/08/iphonewebapp-159x300.png" alt="" width="159" height="300" /></a>An iOS web application uses HTML/CSS/JS to deliver a iOS experience that looks and behaves like a native iOS application. If done correctly, the user can&#8217;t tell that it&#8217;s not a &#8220;normal&#8221; app. Although the capabilities are limited, it can be a great solution for many apps where going through the normal iOS app store is overkill or not practical.</p>
<p>Creating iOS web apps can be very error prone. The size requirements for icons and splash screens are odd and there are a few things that are non-obvious (e.g. the iPad landscape splash image is actually a portrait-shaped image but has its contents rotated; Retina displays reserve 40 pixels for the status bar while non-retina reserve 20 pixels, etc.). Also, if you screw something up, you get no errors. It just simply doesn&#8217;t work leaving you to guess/hack.</p>
<p>What started as a 15 minute attempt to get icons and splash screens working for my web app resulted in a couple of hours of what felt like pure hacking. Many of the online resources (including Apple&#8217;s!) were out of date and didn&#8217;t include information on handling iPad retina icons/images. I decided to share my results to hopefully spare others from the frustrating experience.</p>
<p>I created templates that show the proper use of <em>apple-mobile-web-app-capable</em>, <em>apple-touch-icon</em>, <em>apple-touch-startup-image</em> and how to use them with everything from an iPhone 3Gs, iPhone 4/4s, iPad 1, iPad 2, iPad Retina, etc.</p>
<p>You can find everything you need including working samples at <a href="https://github.com/gwilson/iOSWebAppTemplates" target="_blank">https://github.com/gwilson/iOSWebAppTemplates</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gregsramblings.com/2012/08/14/web-apps-ios-safari-templates-and-howtos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bricking a Mars probe &#8211; before Curiosity&#8230;</title>
		<link>http://gregsramblings.com/2012/08/11/bricking-mars-probe-viking-curiosity/</link>
		<comments>http://gregsramblings.com/2012/08/11/bricking-mars-probe-viking-curiosity/#comments</comments>
		<pubDate>Sat, 11 Aug 2012 22:50:43 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[Space Stuff]]></category>
		<category><![CDATA[curiosity]]></category>
		<category><![CDATA[galileo]]></category>
		<category><![CDATA[mars]]></category>
		<category><![CDATA[nasa]]></category>
		<category><![CDATA[phobos]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[viking]]></category>

		<guid isPermaLink="false">http://gregsramblings.com/?p=3616</guid>
		<description><![CDATA[Like many of you, I&#8217;ve been watching every broadcast, picture, tweet, etc. of the Mars Curiosity mission.  It&#8217;s one of the most exciting things that NASA has done in years and I&#8217;ve loved every second of it.   I&#8217;ve always been a space program fanatic.  When I was a kid, I knew more details about [...]]]></description>
				<content:encoded><![CDATA[<p>Like many of you, I&#8217;ve been watching every broadcast, picture, tweet, etc. of the <a href="http://mars.jpl.nasa.gov/msl/" target="_blank">Mars Curiosity mission</a>.  It&#8217;s one of the most exciting things that NASA has done in years and I&#8217;ve loved every second of it.   I&#8217;ve always been a space program fanatic.  When I was a kid, I knew more details about the Mercury, Gemini and Saturn programs than any other kid or teacher in school (which made me a huge chick magnet of course).</p>
<p>The Curiosity program got me thinking back about the Mars Viking program.  In 1976, NASA landed two probes on Mars that sent back the first pictures from the surface of the planet in history.  This was the first time a human-created device had landed on the planet, so there were a ton of unknowns.  I was very young, but I remember waiting for those first pictures from Mars, anxious to find out if the little green men would be friendly.</p>
<p>Here&#8217;s the first panorama ever sent from Mars (shot by Viking 1 lander &#8211; click it to go to the source and high-res versions):</p>
<p style="text-align: center;"><a href="http://en.wikipedia.org/wiki/File:Mars_Viking_12a002.png"><img class="aligncenter" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/10/Mars_Viking_12a002.png/800px-Mars_Viking_12a002.png" alt="" width="800" height="164" /></a></p>
<p><a href="http://gregsramblings.com/wp-content/uploads/2012/08/viking1.png"><img class="alignright size-thumbnail wp-image-3620" title="viking1" src="http://gregsramblings.com/wp-content/uploads/2012/08/viking1-150x150.png" alt="" width="150" height="150" /></a>This morning, I was reading about the Viking missions and stumbled on a little known, yet fascinating fact about the Viking 1 lander.  On November 11, 1982, an over-the-air software update was broadcast to the Viking 1 lander to correct a battery charging issue.  The update had an error in it and accidentally overwrote the wrong bits resulting in a bricked lander.  Basically, they accidentally overwrote the memory reserved for the antenna pointing code which immediately terminated all communications.  The mission had already been a huge success, so it wasn&#8217;t a huge deal in the grand scheme of things, but I bet those responsible for the error had a big &#8220;oh crap!, we just killed the probe!&#8221; moment.   I&#8217;d love to meet these guys.  I bet it&#8217;s a great story.  I imagine a few NASA engineers in a conference room going through a list of memory addresses that were part of the update, trying to figure out why they didn&#8217;t get any acknowledgement from the probe, and then finding the mistake and looking at each other in shocked disbelief and fear.</p>
<p>I can remember working from home on a production system and accidentally typing in the wrong iptables command resulting in the instant inability to connect to the server.  At least I was able to drive 30 minutes to the data center and connect a console to the server and undo my mistake!</p>
<p><a href="http://en.wikipedia.org/wiki/Phobos_program"><img class="alignright size-thumbnail wp-image-3624" title="Phobos_Marte" src="http://gregsramblings.com/wp-content/uploads/2012/08/Phobos_Marte-150x150.jpg" alt="" width="150" height="150" /></a></p>
<h3>Russian oops Phobos 1</h3>
<p>I also learned that a similar mistake happened with the <a href="http://en.wikipedia.org/wiki/Phobos_program" target="_blank">Russian Phobos 1 orbital mars mission</a>.  From <a href="http://en.wikipedia.org/wiki/Phobos_program" target="_blank">http://en.wikipedia.org/wiki/Phobos_program</a> &#8211;</p>
<p><strong>&#8220;<em>Phobos 1</em></strong><em> operated nominally until an expected communications session on September 2, 1988 failed to occur. The failure of controllers to regain contact with the spacecraft was traced to an error in the software uploaded on August 29/August 30, which had deactivated the attitude thrusters. By losing its lock on the Sun, the spacecraft could no longer properly orient its solar arrays, thus depleting its batteries.</em></p>
<p><em>Software instructions to turn off the probe&#8217;s attitude control, normally a fatal operation, were part of a routine used when testing the spacecraft on the ground. Normally this routine would be removed before launch. However, the software was coded in PROMs, and so removing the test code would have required removing and replacing the entire computer. Because of time pressure from the impending launch, engineers decided to leave the command sequence in, though it should never be used. However, a single-character error in constructing an upload sequence resulted in the command executing, with subsequent loss of the spacecraft.</em>&#8221;</p>
<p><a href="http://solarsystem.nasa.gov/galileo/"><img class="alignright size-full wp-image-3622" title="overview-galileojupiter" src="http://gregsramblings.com/wp-content/uploads/2012/08/overview-galileojupiter.png" alt="" width="222" height="201" /></a></p>
<h3>Software Heroes &#8211; Galileo</h3>
<p>I also stumbled on a fascinating story about the <a href="http://solarsystem.nasa.gov/galileo/" target="_blank">NASA Galileo</a> Jupiter probe launched in 1989. During it&#8217;s long trip to Jupiter, the high-gain antenna failed to open, even after many genius attempts at spinning the probe to free it (among other wild tactics).  This meant that NASA was stuck using the low-gain antenna.  The difference in bandwidth was dramatic &#8212; 10bps vs 134kbps (10,000 times slower)!  While the crippled probe was hurtling on the way to Jupiter, software engineers had to do some serious software rewriting to try and salvage as much of the mission as possible.  They rewrote the encoding/decoding software to get better compression and optimized the image compression algorithms among many other improvements.  Then they had to push these updates to the probe.  Can you imagine the stress?  Amazing stuff.  More details at <a href="http://www.nasa.gov/offices/oce/appel/ask/issues/42/42s_galileo_rocky_road_jupiter.html" target="_blank">http://www.nasa.gov/offices/oce/appel/ask/issues/42/42s_galileo_rocky_road_jupiter.html</a> and at <a href="http://www.lpi.usra.edu/publications/newsletters/lpib/lpib76/gal76.html" target="_blank">http://www.lpi.usra.edu/publications/newsletters/lpib/lpib76/gal76.html</a>.</p>
<p>Software developers that write code for spacecraft are my heroes.  They work under incredible stress and have to cope with extremely low bandwidth, very limited resources, a non-touchable, non-upgradable hardware platform and they typically are writing very low-level code.  There are engineers still occasionally sending updates to the <a href="http://voyager.jpl.nasa.gov/science/index.html" target="_blank">Voyager probes</a> launched in the &#8217;70s!  They communicate at 160bps and it takes 16 hours for any instructions to be received.  I get impatient when a <em>git pull</em> takes more than 5 seconds!</p>
<p>The trials and tribulations of ones and zeros!</p>
<p><strong>UPDATE:</strong> I was reminded by a friend of yet another mission where engineers saved the day, and this one was fairly recent (2004) &#8212; The Huygens Titan probe.  Read all about it at <a href="http://www.thespacereview.com/article/306/1" target="_blank">http://www.thespacereview.com/article/306/1</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gregsramblings.com/2012/08/11/bricking-mars-probe-viking-curiosity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Improving geolocation getCurrentPosition() with getAccurateCurrentPosition()</title>
		<link>http://gregsramblings.com/2012/06/30/improving-geolocation-getcurrentposition-with-getaccuratecurrentposition/</link>
		<comments>http://gregsramblings.com/2012/06/30/improving-geolocation-getcurrentposition-with-getaccuratecurrentposition/#comments</comments>
		<pubDate>Sat, 30 Jun 2012 17:52:43 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[iOS/iPhone/iPad]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PhoneGap]]></category>
		<category><![CDATA[geolocation]]></category>
		<category><![CDATA[getcurrentposition]]></category>
		<category><![CDATA[gps]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[navigator.geolocation]]></category>
		<category><![CDATA[phonegap]]></category>
		<category><![CDATA[watchPosition]]></category>

		<guid isPermaLink="false">http://gregsramblings.com/?p=3600</guid>
		<description><![CDATA[getAccurateCurrentPosition() is a simple enhancement to navigator.geolocation that provides a more accurate and predictable result.  It is intended for any geolocation-enabled web browser. This is also usable in PhoneGap applications since PhoneGap uses the underlying HTML geolocation APIs already. I have tested this on desktop Chrome, Safari, Firefox and on iOS and Android devices. I have [...]]]></description>
				<content:encoded><![CDATA[<p><a href="https://github.com/gwilson/getAccurateCurrentPosition" target="_blank"><strong>getAccurateCurrentPosition()</strong></a> is a simple enhancement to <a href="http://dev.w3.org/geo/api/spec-source.html" target="_blank">navigator.geolocation</a> that provides a more accurate and predictable result.  It is intended for any geolocation-enabled web browser. This is also usable in PhoneGap applications since PhoneGap uses the underlying HTML geolocation APIs already. I have tested this on desktop Chrome, Safari, Firefox and on iOS and Android devices. I have not tested on IE9+ or Opera or Windows devices.</p>
<p>See the code, docs, and sample usage at <a href="https://github.com/gwilson/getAccurateCurrentPosition" target="_blank">https://github.com/gwilson/getAccurateCurrentPosition</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gregsramblings.com/2012/06/30/improving-geolocation-getcurrentposition-with-getaccuratecurrentposition/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Understanding Twitter @replies</title>
		<link>http://gregsramblings.com/2012/06/05/understanding-twitter-replies/</link>
		<comments>http://gregsramblings.com/2012/06/05/understanding-twitter-replies/#comments</comments>
		<pubDate>Tue, 05 Jun 2012 05:51:16 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[@replies]]></category>
		<category><![CDATA[@reply]]></category>
		<category><![CDATA[followers]]></category>
		<category><![CDATA[tweets]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[twitter replies]]></category>

		<guid isPermaLink="false">http://gregsramblings.com/?p=3560</guid>
		<description><![CDATA[Today, I did a random poll of a few co-workers and friends about Twitter replies. I asked the following question: &#8220;If I send the following tweet, who will see it in their timeline?&#8221; @myfriend Hello Almost every friend I asked had the same answer, &#8220;All of your followers&#8221;. That&#8217;s actually incorrect. Only users that follow [...]]]></description>
				<content:encoded><![CDATA[<p>Today, I did a random poll of a few co-workers and friends about Twitter replies.  I asked the following question: &#8220;If I send the following tweet, who will see it in their timeline?&#8221;</p>
<p><strong>@myfriend Hello</strong></p>
<p>Almost every friend I asked had the same answer, &#8220;All of your followers&#8221;.  That&#8217;s actually incorrect.  Only users that follow both of us see the tweet.  This is documented in the <a target="_blank" href="https://support.twitter.com/groups/31-twitter-basics/topics/109-tweets-messages/articles/14023-what-are-replies-and-mentions">Twitter help pages (under &#8220;Things to Note&#8221;)</a>. </p>
<p>To clarify, this only happens when the tweet starts with a &#8220;@&#8221;, which indicates that the tweet is a reply and replies get special treatment. </p>
<p>Recently, someone tweeted to promote a recent blog post of mine, but they wrote it this way:</p>
<p><strong>@gregsramblings just blogged about &#8230;..</strong></p>
<p>Unfortunately, their 10k+ followers didn&#8217;t see it.  Only users that follow both of us saw it, which is a <em>much</em> smaller number, so I decided to create a little illustration of this Twitter oddity below.</p>
<p>Notice the common workaround of prepending a dot to the tweet as shown in the 4th tweet below.  There is nothing special about the &#8220;.&#8221; character.  It could have been any other valid character.  If you want all of your followers to see the tweet, don&#8217;t start it with a &#8220;@&#8221;.  Notice the 2nd tweet below.  </p>
<p>It&#8217;s important to note that the filtering of replies is a feature of twitter, not a shortcoming.  Most replies should have limited visibility because you are typically involved in an exchange of tweets with another individual. However, it&#8217;s important to understand the difference between a reply and a normal tweet.</p>
<hr/>
<h4>Hover or tap one of the tweets below to see which followers will see it in their Twitter timeline.</h4>
<p><script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script><br />
<script type="text/javascript">
	jQuery(function ($) {
		var images = [
			'/wp-content/uploads/2012/06/venn-circle1.jpg',
			'/wp-content/uploads/2012/06/venn-intersect1.jpg',
			'/wp-content/uploads/2012/06/venn-intersect2.jpg'
		];
		$(images).each(function() {
	//		var image = $('<img />').attr('src', this);
		});
		$("#t1").hover(function() 	{ $("#venn").attr("src","/wp-content/uploads/2012/06/venn-circle1.jpg"); })
		$("#t2").hover(function() 	{ $("#venn").attr("src","/wp-content/uploads/2012/06/venn-intersect1.jpg"); })
		$("#t3").hover(function() 	{ $("#venn").attr("src","/wp-content/uploads/2012/06/venn-intersect2.jpg"); })
		$("#t4").hover(function() 	{ $("#venn").attr("src","/wp-content/uploads/2012/06/venn-circle1.jpg"); })
		$("#t5").hover(function() 	{ $("#venn").attr("src","/wp-content/uploads/2012/06/venn-intersect1.jpg"); })
		$("#t6").hover(function() 	{ $("#venn").attr("src","/wp-content/uploads/2012/06/venn-circle1.jpg"); })
		$("#t1").click(function() 	{ $("#venn").attr("src","/wp-content/uploads/2012/06/venn-circle1.jpg"); })
		$("#t2").click(function() 	{ $("#venn").attr("src","/wp-content/uploads/2012/06/venn-intersect1.jpg"); })
		$("#t3").click(function() 	{ $("#venn").attr("src","/wp-content/uploads/2012/06/venn-intersect2.jpg"); })
		$("#t4").click(function() 	{ $("#venn").attr("src","/wp-content/uploads/2012/06/venn-circle1.jpg"); })
		$("#t5").click(function() 	{ $("#venn").attr("src","/wp-content/uploads/2012/06/venn-intersect1.jpg"); })
		$("#t6").click(function() 	{ $("#venn").attr("src","/wp-content/uploads/2012/06/venn-circle1.jpg"); })
	});
</script></p>
<style type="text/css">
	img.tweet {
		border: 2px solid white;
	}
	img.tweet:hover {
		border: 2px solid blue;
	}
	img.tweet:active {
		border: 2px solid red;
	}
</style>
<p><img id="venn" alt="venn diagram" align="right" width="525" src="/wp-content/uploads/2012/06/venn-empty.jpg"><br />
<img id="t1" class="tweet" alt="tweet1" src="/wp-content/uploads/2012/06/tweet1.png"><br />
<img id="t2" class="tweet" alt="tweet2" src="/wp-content/uploads/2012/06/tweet2.png"><br />
<img id="t3" class="tweet" alt="tweet3" src="/wp-content/uploads/2012/06/tweet3.png"><br />
<img id="t4" class="tweet" alt="tweet4" src="/wp-content/uploads/2012/06/tweet4.png"><br />
<img id="t5" class="tweet" alt="tweet5" src="/wp-content/uploads/2012/06/tweet5.png"><br />
<img id="t6" class="tweet" alt="tweet6" src="/wp-content/uploads/2012/06/tweet6.png"></p>
]]></content:encoded>
			<wfw:commentRss>http://gregsramblings.com/2012/06/05/understanding-twitter-replies/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>HTML5 Application Cache How To</title>
		<link>http://gregsramblings.com/2012/05/28/html5-application-cache-how-to/</link>
		<comments>http://gregsramblings.com/2012/05/28/html5-application-cache-how-to/#comments</comments>
		<pubDate>Mon, 28 May 2012 21:10:20 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[iOS/iPhone/iPad]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[app cache]]></category>
		<category><![CDATA[appcache]]></category>
		<category><![CDATA[apple-mobile-web-app-capable]]></category>
		<category><![CDATA[apple-touch-icon]]></category>
		<category><![CDATA[application cache]]></category>
		<category><![CDATA[applicationCache]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[cache manifest]]></category>
		<category><![CDATA[caching]]></category>
		<category><![CDATA[home screen]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[ios web app]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[offline app]]></category>
		<category><![CDATA[offline cache]]></category>
		<category><![CDATA[web app]]></category>

		<guid isPermaLink="false">http://gregsramblings.com/?p=3472</guid>
		<description><![CDATA[There are a lot of great blog posts, articles, and videos about HTML5 Application Cache, but because it&#8217;s fairly new and the spec is still evolving, it&#8217;s hard to get your head around all of the intricate details. What is it? The Application Cache is a new HTML5 capability that is different from the normal [...]]]></description>
				<content:encoded><![CDATA[<p>There are a lot of great blog posts, articles, and videos about HTML5 Application Cache, but because it&#8217;s fairly new and the spec is still evolving, it&#8217;s hard to get your head around all of the intricate details.</p>
<h3>What is it?</h3>
<p><a href="http://gregsramblings.com/wp-content/uploads/2012/05/200px-HTML5-logo.svg_1.png"><img class="alignright size-full wp-image-3510" title="200px-HTML5-logo.svg" src="http://gregsramblings.com/wp-content/uploads/2012/05/200px-HTML5-logo.svg_1.png" alt="" width="152" height="200" /></a>The Application Cache is a new HTML5 capability that is different from the normal browser cache that we&#8217;ve had for years.  The normal browser cache maintains copies of recent files that you have accessed and keeps copies of those files on your computer so that when you need the same file again, it won&#8217;t have to re-download it.  Other than some simple browser settings to control the overall cache size and a few meta tags to turn it on and off, you really don&#8217;t have any useful control over how it&#8217;s used.</p>
<p>The application cache is a web-application-specific cache, the content and behavior of which is controlled by the application itself.  The application cache is persistent and provides full off-line capabilities. It is currently supported in Chrome (v4.0+), Safari (v4.0+), Firefox (v3.5+), and Opera (v10.6+). It&#8217;s not currently supported in any shipping version of Internet Explorer, but it is coming in <a href="http://msdn.microsoft.com/en-us/library/ie/hh673546(v=vs.85).aspx#Application_Cache_API_AppCache" target="_blank">IE10</a>.</p>
<h3>Try it now with an offline-enabled website:</h3>
<p>Go to <a href="http://phraffle.com" target="_blank">http://phraffle.com</a> using Chrome, Firefox, Safari or Opera.  You&#8217;ll see a simple one-page site that I created that people use to raffle off giveaways at speaking events.  Nothing special, right?  Now disconnect from the Internet and go to the site again using the same browser.  It still works in your browser as if you were still connected!  Your browser now has a copy of the website cached in the application cache and it will remain cached there until the user removes it.</p>
<h3>Looking under the hood from Chrome browser:</h3>
<p>If you are using Chrome, you can check out what was downloaded at <strong>chrome://appcache-internals/</strong>:</p>
<p style="text-align: center;"><img class="size-full wp-image-3500 aligncenter" style="border: 1px solid black;" title="appcache-internals" src="http://gregsramblings.com/wp-content/uploads/2012/05/appcache-internals.jpg" alt="" width="400" height="363" /></p>
<p>You can also see the files being downloaded from Chrome&#8217;s JavaScript console:</p>
<p style="text-align: center;"><img class="size-full wp-image-3521 aligncenter" title="javascript-console" src="http://gregsramblings.com/wp-content/uploads/2012/05/javascript-console.jpg" alt="" width="686" height="320" /></p>
<p>The console after hitting the same site for a second time:</p>
<p style="text-align: center;"><img class="size-full wp-image-3523 aligncenter" title="javascript-console2" src="http://gregsramblings.com/wp-content/uploads/2012/05/javascript-console2.jpg" alt="" width="686" height="69" /></p>
<p>More information about cache-related events is below.</p>
<h3>Try an offline-enabled HTML5 Web app on an iPhone or iPad:</h3>
<p>If you have an iPhone, iPad or iPod Touch, go to http://phraffle.com using Safari.  Tap on the share icon and select &#8220;Add to Home Screen&#8221; (you will see a popup pointing to the share button shortly after the page loads thanks to a cool JavaScript lib at <a href="http://cubiq.org/add-to-home-screen" target="_blank">http://cubiq.org/add-to-home-screen</a>).</p>
<p>You&#8217;ll now see what looks like a regular app on your home screen with my custom icon.  Now, tap the icon to run the app from your home screen (with or without Internet).  Notice that the app is running full-screen with no Safari browser controls.  This is an iOS HTML5 web app.</p>
<p style="text-align: center;"><a href="http://gregsramblings.com/wp-content/uploads/2012/05/html5webapp.png"><img class="size-full wp-image-3476 aligncenter" title="html5webapp" src="http://gregsramblings.com/wp-content/uploads/2012/05/html5webapp.png" alt="" width="300" height="204" /></a></p>
<p style="text-align: left;">I&#8217;ll show you how to set this up later in this article.</p>
<h3>Setting up application caching:</h3>
<p>Here are the exact steps I used to set up the above example:</p>
<ul>
<li>I modified the &lt;html&gt; tag to reference my soon-to-be-created HTML manifest  &#8211; <strong>&lt;html manifest=&#8221;phraffle.appcache&#8221;&gt;  </strong> This should be added to each HTML file that will be cached so that the user&#8217;s browser will be instructed to cache the files regardless of which HTML file was used as an entry point to your site.</li>
<li>I then created my cache manifest file called <strong>phraffle.appcache</strong> in the web root folder.  This file contains a list of files required to run my site offline.  You can view mine <a href="http://phraffle.com/phraffle.appcache" target="_blank">here</a>. Notice that it contains all of my HTML, JavaScript, CSS and image assets.  The manifest file name can be named anything, but <em>.appcache</em>  seems to be an established convention.
<pre class="brush: xml; title: ; notranslate">
CACHE MANIFEST

# Version 1.5

NETWORK:
*

CACHE:
index.html
jquery-1.7.2.min.js
jquery.backgroundPosition.js
jquery.spritely.js
raffle.js
images/reel_blur_numbers.png
images/reel_blur.png
images/reel_dash.png
images/reel_normal_numbers.png
images/reel_normal.png
images/reel_normal.psd
images/reel_x.png
</pre>
</li>
</ul>
<ul>
<li>My web server has no idea what a <strong>.appcache</strong> file is so, by default, it will serve it up as a regular text file.  In order for app caching to work properly, the cache manifest file needs the MIME type set to <strong>text/cache-manifest</strong>.  I&#8217;m using Apache web server, so I simply created a <strong>.htaccess</strong> in my web root folder that has the following line: <strong>AddType text/cache-manifest .appcache </strong>  If you are using IIS or another web server, you&#8217;ll need to do a quick web search to determine how to associate the mime type &#8220;text/cache-manifest&#8221; to your .appcache file extension.</li>
<li>That&#8217;s all that is needed to cache the files.  It works offline in any compatible browser, including mobile Safari, Android browser, desktop Chrome, Safari, Firefox, and Opera.</li>
</ul>
<h3>Breaking down the manifest file:</h3>
<ul>
<ul>
<li>The first line is &#8220;<strong>CACHE MANIFEST</strong>&#8221; (without quotes) and is required.</li>
<li>Comments start with &#8220;#&#8221;</li>
<li>The <strong>CACHE:</strong> section contains a list of files to be cached.  Wildcards are not allowed here.  You must list each file that needs to be cached.  In my file, it wasn&#8217;t necessary to add the &#8220;index.html&#8221; line to the list of cached files since every file containing &lt;html manifest=&#8221;&#8230;&#8221;&gt; is automatically cached, but it&#8217;s still good practice to include it.</li>
<li>The <strong>NETWORK:</strong> section contains a list of online resources that are used by your app.  This is the most misunderstood part of the manifest file.  Cached apps do not have access to network resources unless those resources are listed in the NETWORK section of the cache manifest.  Wildcards are allowed here (thankfully!).  In my file above, I simply used &#8220;*&#8221; which basically means &#8220;you can access anything you want&#8221;.  (You may be wondering what network resources my silly apps needs&#8230; I&#8217;m using <a href="http://typekit.com" target="_blank">TypeKit</a> and <a href="http://analytics.google.com" target="_blank">Google Analytics</a>, both of which require Internet access).</li>
<ul>
<li>If I omitted the NETWORK section of my manifest file, my app would still work, but the fancy TypeKit font I used would not be loaded so the boring backup font of Arial would be used, and Google Analytics would not record the page hit.  Even if the user is online, access attempts to any network resource would be ignored as if the app were permanently offline.</li>
<li>If a filename is listed in the NETWORK section (e.g. login.php), the current site URL will be prepended.  So listing &#8220;login.php&#8221; in the NETWORK section is equivalent to listing &#8220;http://mysite.com/login.php&#8221;.  In this case, the login.php file will not be cached and any accesses to the http://mysite.com/login.php will be from the website itself, not the cache.</li>
<li>You can see the specific rules on how the NETWORK section is handled in the actual <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/offline.html#manifests" target="_blank">spec</a> (see bullet 30.)</li>
<li>I recommend starting with a simple &#8220;*&#8221; when you first start playing around with this stuff.  You can always change it to be more specific after you get everything working.</li>
</ul>
<li>The <strong>FALLBACK:</strong>section specifies fallback pages if an online resource is inaccessible.  I did not need this feature in my app, but below is an example of what a FALLBACK section would look like.  The first URI is the resource, the second is the fallback. Both URIs must be relative and from the same origin as the manifest file. Wildcards may be used.
<pre class="brush: jscript; title: ; notranslate">
FALLBACK:
*.html /offline.html
*.jpg /images/missing.jpg
</pre>
</li>
</ul>
</ul>
<div></div>
<h3>iOS &#8211; Making the web app run full-screen without Safari controls:</h3>
<ul>
<li>After the above changes, I can use mobile Safari on my iPhone and iPad to access the page.  After accessing it once, it&#8217;s saved for offline use.  I wanted it to be more app-like, so I added the following meta tag to the  index.html:
<pre class="brush: xml; title: ; notranslate">
&lt;meta name=&quot;apple-mobile-web-app-capable&quot; content=&quot;yes&quot;/&gt;
</pre>
<p>This will make the cached app run in full-screen mode so the user doesn&#8217;t see the Safari controls.</li>
</ul>
<h3>iOS &#8211; Adding custom icons and a startup image:</h3>
<ul>
<li>By default, iOS will use a screenshot as the app icon.  I wanted something a little nicer.</li>
<li>I created the 3 required icon sizes (57&#215;57, 72&#215;72 and 114&#215;114) and added the following 3 lines to my index.html&#8217;s HEAD section:
<pre class="brush: xml; title: ; notranslate">
&lt;link rel=&quot;apple-touch-icon&quot; href=&quot;icon57.png&quot; /&gt;
&lt;link rel=&quot;apple-touch-icon&quot; sizes=&quot;72x72&quot; href=&quot;icon72.png&quot; /&gt;
&lt;link rel=&quot;apple-touch-icon&quot; sizes=&quot;114x114&quot; href=&quot;icon144.png&quot; /&gt;
</pre>
</li>
</ul>
<ul>
<li>You&#8217;ll notice that the images I used are square with no rounded corners (e.g. <a href="http://phraffle.com/icon144.png" target="_blank">http://phraffle.com/icon144.png</a>).  The rounded corners, drop shadow, and reflection are added by the device automatically.  You can avoid these &#8220;enhancements&#8221; by adding &#8220;-precomposed&#8221; to the filename (e.g. icon72-precomposed.png).</li>
<li>It&#8217;s also possible to add a startup image for a web app. I didn&#8217;t do this on mine, but if you want to try it, here&#8217;s all you need in your html:
<pre class="brush: xml; title: ; notranslate">
&lt;link rel=&quot;apple-touch-startup-image&quot; href=&quot;startup.png&quot;&gt;
</pre>
</li>
</ul>
<p>Last year, the <a href="http://www.cultofmac.com/99210/ft-snubs-ios-store-with-slick-newspaper-webapp/" target="_blank">Financial Times rolled out their new iPad webapp</a> using this same technique to avoid the Apple app-store rules (specifically, Apple&#8217;s requirement to take 30% of any in-app purchase).  Obviously this isn&#8217;t a perfect solution for many apps, but it&#8217;s a good option to have in some cases.</p>
<p>By the way, if you would like to build more sophisticated apps using HTML/CSS/JS, and take advantage of native APIs and true app-packaging, check out <a href="http://gregsramblings.com/2011/10/06/what-is-phonegap/" target="_blank">PhoneGap</a>.</p>
<h3>IMPORTANT &#8212; Updating your app (updating the user&#8217;s cached files):</h3>
<ul>
<ul>
<li>If you make any changes to your HTML, CSS, or other cached assets,  you will need to modify the cache manifest file so that users with previously cached versions of the files receive fresh ones.   <strong>The contents of the manifest file must change for it to be re-processed on the client side</strong> (simply updating the timestamp of the file isn&#8217;t enough).  You&#8217;ll notice that in my phraffle.appcache file, I have a simple comment with an arbitrary version number.  I simply increment the number each time I modify any files in the cache list to force previously cached files to be refreshed.</li>
<li>It&#8217;s not currently possible to update a single file in the cache list.  It&#8217;s all or nothing.  When the browser sees a newly modified cache manifest file, it will re-download all files in the CACHE section again.  This is obviously a bit of a shortcoming.  Hopefully we&#8217;ll see this addressed in the future.</li>
<li>If <em>any</em> of the files listed in the manifest are not accessible, the caching will abort.  The JavaScript console in Chrome will show the file caching activity, so you will quickly see any 404 or similar errors.</li>
<li>I highly recommend validating your cache manifest using the following site &#8211; <a href="http://manifest-validator.com/" target="_blank">http://manifest-validator.com/</a></li>
<li><strong>Double-reload needed</strong> &#8212; when you access phraffle.com, your browser always checks the manifest file to see if it&#8217;s been updated (you will see this happen in the JavaScript console).  If the manifest was updated, the browser will download all of the files in the cached file list, BUT, the original content will have already loaded at this point (remember that it&#8217;s already cached, so it loads super fast!).  This means that you will not see the new content until you hit refresh <em>again</em>.  This is a bit of a pain at times!  There is a workaround that you can implement using the following JavaScript code:
<pre class="brush: jscript; title: ; notranslate">
if (window.applicationCache) {
    applicationCache.addEventListener('updateready', function() {
        if (confirm('An update is available. Reload now?')) {
            window.location.reload();
        }
    });
}
</pre>
</li>
</ul>
</ul>
<h3>JavaScript Application Cache APIs:</h3>
<p>There is an AppCache API that provides several hooks into the caching.  Everything is defined in the <strong>applicationCache</strong> object.  The two main methods are <strong>updateCache()</strong> and <strong>swapCache()</strong>.  In addition, there are several cache events that you can listen for:</p>
<ul>
<li><strong>checking</strong> - Fired once when the app reads the manifest file to see if it has changed.</li>
<li><strong>noupdate </strong>- The manifest file has not changed.</li>
<li><strong>downloading </strong>- Files are being downloaded</li>
<li><strong>progress </strong>- Fired once per each file downloaded. If you have 15 files, you&#8217;ll see 15 progress events. Unfortunately, the event itself doesn&#8217;t contain information about which file just completed, so it&#8217;s fairly limited in its current form.</li>
<li><strong>cached</strong> - Files have finished downloading.</li>
<li><strong>updateready </strong>- A new copy of the cache is ready to be swapped in.</li>
<li><strong>obsolete </strong>- The manifest file is code 404 or code 410; the application cache for the site has been deleted.</li>
<li><strong>error </strong>- An error occurred when loading the manifest, its parent page, or a listed resource, or the manifest file changed while the update was running. The cache update has been aborted.</li>
</ul>
<p>If you want to see these fire, you can use the following code:</p>
<pre class="brush: jscript; title: ; notranslate">
function logEvent(event) {
  console.log(event.type);
}

window.applicationCache.addEventListener('checking',logEvent,false);
window.applicationCache.addEventListener('noupdate',logEvent,false);
window.applicationCache.addEventListener('downloading',logEvent,false);
window.applicationCache.addEventListener('progress',logEvent,false);
window.applicationCache.addEventListener('cached',logEvent,false);
window.applicationCache.addEventListener('updateready',logEvent,false);
window.applicationCache.addEventListener('obsolete',logEvent,false);
window.applicationCache.addEventListener('error',logEvent,false);
</pre>
<p>Although it&#8217;s not part of the applicationCache object, you might want to know how to programmatically check if the user is online or offline.  This is done by simply checking <a href="http://html5demos.com/nav-online" target="_blank">navigator.onLine</a> (boolean).</p>
<h3>Using Google Analytics, Typekit and other services with Application Caching</h3>
<p>When I first offline-enabled phraffle.com, I didn&#8217;t have the NETWORK section in my cache manifest.  All of the files were still cached, but to my surprise, my Typekit <a target="_blank" href="https://typekit.com/fonts/bello-pro">&#8220;bello-pro&#8221;</a> font wasn&#8217;t displaying and I was suddenly not recording hits on Google Analytics, <em>even when I was online</em>.</p>
<p>Typekit, Google Analytics and many other services obviously require internet access, but my lack of a NETWORK section in my cache manifest meant that all external URLs were inaccessible.  Once I added the NETWORK section, everything worked normally again (when I was online of course).</p>
<h3>Other fun facts, quirks, and ramblings:</h3>
<div>
<ul>
<li>I was unable to find any definitive information about the size limitations of the app cache.   I did some testing with Chrome (v19), and it seems to be capped at around 50MB.  When I tried a file over 50MB, it gave a simple error in the JavaScript console with no meaningful description. I&#8217;ve read that Firefox allows over 500MB, but I haven&#8217;t confirmed this.</li>
<li><a href="https://twitter.com/#!/tobie" target="_blank">Tobie Langel</a>, one of the software engineers at Facebook, recently wrote a <a href="http://www.w3.org/community/fixing-appcache/2012/01/18/appcache_use_cases/" target="_blank">blog post</a> where he lists several enhancements that Facebook would like to see as the spec moves forward.  I think he covers it quite well!</li>
<li>Do NOT add the actual cache manifest file to the list of files to cache in the manifest.  Weird, endless-loop, recursive stuff will occur.</li>
<li>From my extensive browsing on stackoverflow, I can tell you one of the most common mistakes to getting this working correctly is forgetting to change the MIME type for the cache manifest file itself or forgetting to put the colon on &#8220;CACHE:&#8221;.</li>
<li>Weird iOS full-screen bugs &#8212; There are some weird cache issues with full-screen, run-from-home-screen iOS web apps.  At first I thought I was going nuts, because I would clear Safari&#8217;s cache, yet I would still see old content until I re-ran the app a few times.  I found many reports of others seeing the same thing.  My advice is to add something to your page so you can confirm that the content did indeed refresh.  It seems to be fine now that I have my config finalized, but it can really make development a challenge when you suddenly can&#8217;t clear the cache.</li>
<li>From iOS devices, you can see a list of websites that have saved data using app cache by going to SETTINGS, GENERAL, SAFARI, ADVANCED, WEBSITE DATA.  This screen allows you to selectively delete the data on a site-by-site basis.  You can also clear the entire Safari cache on the main advanced screen.   Clearing Safari&#8217;s cache also clears all app cache files for all sites.</li>
<li><strong>Android</strong> &#8212; Application caching is supported on Android, but I couldn&#8217;t find a way to run it full-screen without any browser controls.  Let me know if you know how to do this.  I suspect that you&#8217;ll need to make a full app out of it (using PhoneGap of course!).</li>
</ul>
</div>
<h3>Resources I used:</h3>
<p>Here are the resources I found while researching this today:</p>
<ul>
<li><a href="http://www.html5rocks.com/en/tutorials/appcache/beginner/" target="_blank">A Beginner&#8217;s Guide to using the Application Cache</a> - HTML5Rocks.com tutorial</li>
<li><a href="http://blogs.adobe.com/cantrell/archives/2011/11/building-an-offline-mobile-web-application.html" target="_blank">Building and Offline Mobile Web Application by Christian Cantrell</a></li>
<li><a href="http://fortuito.us/diveintohtml5/offline.html" target="_blank">Offline Web Application &#8211; Dive info HTML5 Take this Offline</a></li>
<li><a href="http://appcachefacts.info/" target="_blank">Appcache Facts</a> - Good reference for the cache manifest file contents.  This page claims that Firefox doesn&#8217;t allow a simple &#8220;*&#8221; in the FALLBACK section, but my current version seems to work fine, so I suspect that it needs a minor edit.</li>
<li><a href="http://developer.apple.com/library/safari/#documentation/appleapplications/reference/SafariWebContent/Client-SideStorage/Client-SideStorage.html" target="_blank">Storing Data on the Client</a> (Apple)</li>
<li><a href="https://developer.apple.com/library/ios/#documentation/AppleApplications/Reference/SafariWebContent/ConfiguringWebApplications/ConfiguringWebApplications.html" target="_blank">Configuring Web Applications</a> (Apple &#8211; covers the Apple-specific meta tags, icons, splash screens, and more.</li>
<li><a href="http://blogs.adobe.com/cantrell/archives/2011/11/building-an-offline-mobile-web-application.html" target="_blank">Building an Offline Mobile Web Application</a></li>
<li><a href="https://developer.apple.com/library/ios/#documentation/AppleApplications/Reference/SafariWebContent/UsingtheViewport/UsingtheViewport.html" target="_blank">Configuring the Viewport</a> (Apple &#8211; important information on controlling the viewport)</li>
<li><a href="http://www.alistapart.com/articles/application-cache-is-a-douchebag/" target="_blank">Application Cache is a Douchebag</a> &#8211; a colorful rant about some of the limitations of app caching.</li>
<li><a href="http://developer.apple.com/library/safari/#documentation/DataManagement/Reference/DOMApplicationCacheClassReference/DOMApplicationCache/DOMApplicationCache.html" target="_blank">DOMApplicationCache Class Reference</a> (Apple)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://gregsramblings.com/2012/05/28/html5-application-cache-how-to/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Preventing vertical scrolling bounce of websites on iOS using JavaScript</title>
		<link>http://gregsramblings.com/2012/05/23/preventing-vertical-scrolling-bounce-using-javascript-on-ios-devices/</link>
		<comments>http://gregsramblings.com/2012/05/23/preventing-vertical-scrolling-bounce-using-javascript-on-ios-devices/#comments</comments>
		<pubDate>Wed, 23 May 2012 04:46:00 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[iOS/iPhone/iPad]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[LottaTweets]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[lottatweets]]></category>
		<category><![CDATA[precent scrolling]]></category>
		<category><![CDATA[precentdefault]]></category>
		<category><![CDATA[scrolling]]></category>
		<category><![CDATA[touchmove]]></category>
		<category><![CDATA[touchstart]]></category>

		<guid isPermaLink="false">http://gregsramblings.com/?p=3452</guid>
		<description><![CDATA[I recently created a web site for reading Twitter called http://lottatweets.com.   As mentioned in an earlier blog post, the site uses CSS3 columns and scrolls horizontally.  If you use your iPad and access any websites, you&#8217;ll notice that if you pull down on the content, you can drag the top of the page down [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://lottatweets.com"><img class="alignright size-full wp-image-3459" title="LottaTweets Scrolling" src="http://gregsramblings.com/wp-content/uploads/2012/05/ipad-hand.png" alt="" width="400" height="288" /></a>I recently created a web site for reading Twitter called <a href="http://lottatweets.com" target="_blank">http://lottatweets.com</a>.   As mentioned in an <a href="http://gregsramblings.com/2012/05/20/lottatweets-com-web-app-for-speed-reading-tweets/" target="_blank">earlier blog post</a>, the site uses CSS3 columns and scrolls horizontally.  If you use your iPad and access any websites, you&#8217;ll notice that if you pull down on the content, you can drag the top of the page down an inch and then it will bounce back.  This is fine for websites, but for my site, the partial-vertical scrolling with bounce is annoying because the site has no content above or below what you see on the screen.</p>
<p>I did some research and found a few ways to disable scrolling altogether by intercepting the <strong>touchstart</strong> and/or <strong>touchmove</strong> events and calling <strong>preventDefault()</strong> on the event.   After some experimentation and studying the <a href="http://developer.apple.com/library/ios/#DOCUMENTATION/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html" target="_blank">touch events documentation</a>, I found a near-perfect solution.</p>
<p>In simple terms, when your finger touches the screen, it fires the <strong>touchstart</strong> event.  I then capture the X/Y coordinates. As soon as your finger moves across the screen, it fires the <strong>touchmove</strong> event where I capture the new X/Y coordinates. I then check to see which way you are trying to move the page by comparing the movement along the X and Y axis.  If it&#8217;s vertical (change in Y &gt; change in X), I call preventDefault(), which prevents the scroll.</p>
<p>Here&#8217;s the code:</p>
<pre class="brush: jscript; title: ; notranslate">
var xStart, yStart = 0;

document.addEventListener('touchstart',function(e) {
    xStart = e.touches[0].screenX;
    yStart = e.touches[0].screenY;
});

document.addEventListener('touchmove',function(e) {
	var xMovement = Math.abs(e.touches[0].screenX - xStart);
	var yMovement = Math.abs(e.touches[0].screenY - yStart);
    if((yMovement * 3) &gt; xMovement) {
		e.preventDefault();
    }
});
</pre>
<p>Tweaks &#8212; I found that simply checking for change in Y &gt; change in X wasn&#8217;t enough because I could drag diagonally at a near-45 degree angle and it would still tug my title bar down.  I wanted it to be more of a 20 degree check, so I added a multiplier of 3 on the y-axis movement (I don&#8217;t remember enough trig to know that 3  was the right multiplier to use &#8212; it was a bit of trial and error).</p>
<p>The results are good.  Grab your iPad and go to <a href="http://lottatweets.com" target="_blank">http://lottatweets.com</a>, login, and once the tweets are displayed, try to scroll vertically.  The title bar and footer are locked in place nicely.  If you try hard enough, you can find an angle that will allow you to drag diagonally, but it&#8217;s good enough!</p>
<p><strong><span style="color: #ff0000;">NOTE</span></strong>:  If you&#8217;re building an app with PhoneGap, there is a better solution that I <a href="http://gregsramblings.com/2012/05/14/phonegap-howto-prevent-bounce-uiwebviewbounce/" target="_blank">blogged about earlier</a>.  The above solution is for web apps accessed via iOS Safari.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregsramblings.com/2012/05/23/preventing-vertical-scrolling-bounce-using-javascript-on-ios-devices/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>LottaTweets.com &#8211; web app for speed reading tweets</title>
		<link>http://gregsramblings.com/2012/05/20/lottatweets-com-web-app-for-speed-reading-tweets/</link>
		<comments>http://gregsramblings.com/2012/05/20/lottatweets-com-web-app-for-speed-reading-tweets/#comments</comments>
		<pubDate>Sun, 20 May 2012 20:55:16 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[LottaTweets]]></category>
		<category><![CDATA[Typekit]]></category>
		<category><![CDATA[css columns]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[fatc]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[lottatweets]]></category>
		<category><![CDATA[multi-column]]></category>
		<category><![CDATA[oniapollo]]></category>
		<category><![CDATA[stratifiedjs]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://gregsramblings.com/?p=3428</guid>
		<description><![CDATA[As a developer evangelist for Adobe, I use Twitter often to keep up with the latest trends, announcements, and more.  I&#8217;ve often been frustrated that the Twitter website and twitter apps all use one column that takes advantage of only about 1/9th of my large monitor.  I&#8217;ve been looking for a good project to beef [...]]]></description>
				<content:encoded><![CDATA[<p>As a developer evangelist for Adobe, I use Twitter often to keep up with the latest trends, announcements, and more.  I&#8217;ve often been frustrated that the Twitter website and twitter apps all use one column that takes advantage of only about 1/9th of my large monitor.  I&#8217;ve been looking for a good project to beef up my jQuery skills, and decided to see if I could build something to meet my own requirements for a tweet rapid-reader.</p>
<p><strong><span style="color: #ff0000;">UPDATE April 5, 2013 &#8212; Twitter killed the Twitter Anywhere API so the app is broke.  I&#8217;ll try to refactor it soon to use the newer APIs.</span></strong></p>
<h3>What is it?</h3>
<p><a href="http://lottatweets.com">LottaTweets</a> is a web-based tool that fills your screen with tweets in a multi-column, newspaper-style layout allowing super fast reading.  In addition to being able to quickly scan tweets, there are a few neat features:</p>
<ul>
<li><strong>Color coded retweet rate</strong> &#8212; Tweets are color-coded based on the number of re-tweets per minute.  It&#8217;s a quick way to visually identify tweets that others have found important enough to share.  There is also a button that will toggle filtering based on the retweet rate.  I originally was only using the re-tweet count, but I realized that it&#8217;s not a good measure since older tweets will always have more retweets than new tweets.  The re-tweet rate seems to work well.</li>
<li><strong>Noise factor</strong> &#8212; Each tweet shows the noise factor of the tweeter.  The theory is that if you have tweeted 2000 times but only have 50 followers, you are &#8220;noisy&#8221;.  The noise factor is computed by <strong>number_of_tweets / number_of_followers</strong>.  There is also a button that will toggle filtering based on noise factor.</li>
<li><strong>Infinite horizontal scrolling</strong> &#8212; you can keep scrolling right and it continues to load more tweets for you to read.</li>
<li><strong>Auto-refresh</strong> &#8212; if you check the box for auto-refresh, it will prepend any new tweets every 60 seconds.</li>
<li><strong>It&#8217;s read-only</strong> &#8211;  I configured my Twitter API endpoint to be read-only, so you don&#8217;t have to worry about the app tweeting anything on your behalf.  Each tweet has a link (timestamp) to the tweet on Twitter.com so you can reply, retweet, etc.  Each thumbnail image is a link to that user&#8217;s Twitter page.</li>
</ul>
<div><a href="http://lottatweets.com"><img class="aligncenter size-full wp-image-3450" title="LottaTweets Twitter Tweet Viewer" alt="" src="http://gregsramblings.com/wp-content/uploads/2012/05/lottatweets-map.png" width="887" height="439" /></a></div>
<h3>Technical Details and the Development Experience:</h3>
<ul>
<li>Lotta tweets is a pure JavaScript app with no server infrastructure other than a web server and <a href="https://dev.twitter.com/docs/anywhere/welcome" target="_blank">Twitter&#8217;s Anywhere APIs</a>.</li>
<li>The layout is using <a href="http://www.w3schools.com/css3/css3_multiple_columns.asp" target="_blank">CSS3 columns</a> and works great with latest versions of Chrome, Firefox, and Safari.  It&#8217;s about 90% functional with Opera (there are some re-layout issues when filters are applied).  CSS3 columns are not supported by IE6/7/8/9, but should be available in IE10.  In order to support IE 6/7/8/9, I would need to use another means of multi-column formatting such as the <a href="http://plugins.jquery.com/project/Columnizer" target="_blank">jQuery columnizer plugin</a>.  For now, I&#8217;m leaving it as-is.</li>
<li>I had a great head start on this project from <a href="https://twitter.com/#!/tomg" target="_blank">Tom Germeau&#8217;s</a> <a href="http://fatc.onilabs.com/" target="_blank">Fork-a-Twitter-Client (FATC) project</a>.  This provided the basic Twitter API interactions and saved me some hours of hacking.  The project uses a <a href="http://onilabs.com/stratifiedjs" target="_blank">StratifiedJS</a> implementation called <a href="http://onilabs.com/apollo" target="_blank">OniApollo</a>.  This was the first time I&#8217;ve seen StratifiedJS.  It&#8217;s a clever way to simplify complicated asynchronous applications.</li>
<li>I found a few browser bugs (no web dev project would be complete without finding new browser bugs!):
<ul>
<li>Safari &#8212; I originally set each tweet div with <strong>overflow:hidden</strong> in case the tweet wrapped beyond the confines of the div.  This worked fine on Chrome, but on Safari, everything in columns two through <em>n</em> was hidden!  There were a lot of blank boxes with hidden text.  Only column one was correctly displayed.  I abandoned overflow:hidden for now since it&#8217;s very rarely needed.</li>
<li>Firefox &#8212; Firefox doesn&#8217;t use up all of the vertical space when laying out the divs.  I always had a blank space that was a few pixels taller than what is required to hold another row.  I believe that this is a layout issue because it only happens with Firefox.  As a workaround, if the user is using Firefox, I manually increase the height of the wrapper div to trick Firefox into thinking another row will fit.</li>
<li>Opera &#8212; when you resize the screen, or apply a filter, Opera doesn&#8217;t handle the re-layout correctly and things get a bit scrambled.</li>
</ul>
</li>
<li>Mobile &#8212; The site runs great on desktop Chrome, Safari, Firefox and Opera.  It runs OK in Safari on iPad, but the scrolling is a bit un-refined and slow.  I&#8217;ll work on this soon.  I haven&#8217;t tested yet on an Android tablet.  iPhone and other mobile phones are really too small for this type of layout.</li>
<li>The font in the top bar is <a href="https://typekit.com/fonts/felt-tip-roman" target="_blank">Felt Tip Roman</a>, a font available on <a href="http://typekit.com" target="_blank">TypeKit.com</a>, a fantastic service that I&#8217;ve only used once before on <a href="http://phraffle.com" target="_blank">Phraffle.com</a>.</li>
<li>I use <a href="http://modernizr.com/" target="_blank">Modernizr</a> to check if the user&#8217;s browser supports CSS3 columns.  A simple alert() is displayed if not.</li>
<li>The Twitter Anywhere API uses OAuth to authenticate the user, but the cookie it drops is a session-only cookie, so you will have to re-connect each time you access the page after closing the browser.  The subsequent connects should only require a simple confirmation click and not your email/password.  If the site gets decent traction, I&#8217;ll look into using the &#8220;Sign into Twitter&#8221; APIs, which will give me more control over it.</li>
<li>Yes, I know, I need a designer! (don&#8217;t we all?!)</li>
<li>There is currently a bug &#8211; if you turn on a filter and it results in zero tweets, it will crash.  The workaround is to follow more people! <img src='http://gregsramblings.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
<li>The code is a bit messy and still fairly hack-ish, but it&#8217;s fairly easy to understand.  View the source, and let me know if you have any suggestions.</li>
</ul>
<p>Any suggestions on features?</p>
<p>Any suggestions on code/architecture?</p>
]]></content:encoded>
			<wfw:commentRss>http://gregsramblings.com/2012/05/20/lottatweets-com-web-app-for-speed-reading-tweets/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>How to prevent bounce of PhoneGap app container in iOS apps &#8211; UIWebViewBounce</title>
		<link>http://gregsramblings.com/2012/05/14/phonegap-howto-prevent-bounce-uiwebviewbounce/</link>
		<comments>http://gregsramblings.com/2012/05/14/phonegap-howto-prevent-bounce-uiwebviewbounce/#comments</comments>
		<pubDate>Tue, 15 May 2012 03:05:27 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[iOS/iPhone/iPad]]></category>
		<category><![CDATA[PhoneGap]]></category>
		<category><![CDATA[bounce]]></category>
		<category><![CDATA[phonegap]]></category>
		<category><![CDATA[phonegap tips]]></category>
		<category><![CDATA[UIWebViewBounce]]></category>

		<guid isPermaLink="false">http://gregsramblings.com/?p=3411</guid>
		<description><![CDATA[I&#8217;ve noticed that a lot of apps built with PhoneGap have a weird behavior on iPhone and iPad &#8212; You can tug at the main app and move it around slightly and let it bounce back into place.  It&#8217;s as if the PhoneGap container is connected to the device with springs!  I quickly found several [...]]]></description>
				<content:encoded><![CDATA[<p><img class="size-full wp-image-3419 alignright" title="PhoneGap Tips" src="http://gregsramblings.com/wp-content/uploads/2012/05/phonegaptips.png" alt="" width="278" height="200" />I&#8217;ve noticed that a lot of apps built with <a href="http://phonegap.com" target="_blank">PhoneGap</a> have a weird behavior on iPhone and iPad &#8212; You can tug at the main app and move it around slightly and let it bounce back into place.  It&#8217;s as if the PhoneGap container is connected to the device with springs!  I quickly found several solutions to the problem, some of which require either catching the JavaScript touchStart event at the top-level, or modifying the PhoneGap code.</p>
<p>However, I also discovered that starting with PhoneGap 1.5 (<a href="http://phonegap.com/2012/03/06/phonegap-1-5-released/" target="_blank">release notes</a>), a new key was added to the <strong>PhoneGap.plist</strong> (now <strong>Cordova.plist</strong>) called <strong>UIWebViewBounce</strong>.  It&#8217;s set to YES by default (I have no idea why).  If you set it to NO, your app will be anchored in with nails and the bounce removed.</p>
<p>This is also now configurable with <a href="http://build.phonegap.com" target="_blank">PhoneGap Build</a> by setting <strong>webviewbounce</strong> to <strong>false</strong> in your <strong>config.xml</strong> (documented <a href="https://build.phonegap.com/docs/config-xml" target="_blank">here</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://gregsramblings.com/2012/05/14/phonegap-howto-prevent-bounce-uiwebviewbounce/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>An interesting way to handle event giveaways &#8211; Phraffle.com</title>
		<link>http://gregsramblings.com/2012/05/13/an-interesting-way-to-handle-event-giveaways-phraffle-com/</link>
		<comments>http://gregsramblings.com/2012/05/13/an-interesting-way-to-handle-event-giveaways-phraffle-com/#comments</comments>
		<pubDate>Sun, 13 May 2012 18:11:50 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Typekit]]></category>
		<category><![CDATA[giveaway]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[phraffle]]></category>
		<category><![CDATA[raffle]]></category>
		<category><![CDATA[random number generator]]></category>
		<category><![CDATA[spritely]]></category>
		<category><![CDATA[typekit]]></category>

		<guid isPermaLink="false">http://gregsramblings.com/?p=3401</guid>
		<description><![CDATA[As developer evangelists, we often do giveaways of Creative Suite and other goodies at meetups, user group meetings, and other events.  Sometimes we use physical raffle tickets handed out at the door.  Other times there is a quiz to determine the winner, but recently while at a meeting of the Atlanta Web Design Group, I [...]]]></description>
				<content:encoded><![CDATA[<p>As developer evangelists, we often do giveaways of Creative Suite and other goodies at meetups, user group meetings, and other events.  Sometimes we use physical raffle tickets handed out at the door.  Other times there is a quiz to determine the winner, but recently while at a meeting of the <a href="http://www.awdg.org/" target="_blank">Atlanta Web Design Group</a>, I saw their organizer, <a href="https://twitter.com/#!/jc/" target="_blank">J. Cornelius</a>, do something interesting.  He called out some random numbers and had people raise their hand if their phone number contained that number.  He then quickly narrowed it down to a winner.</p>
<p>Last week, I tried a variation of this at a <a href="http://www.meetup.com/BarCampTampaBay/events/60875062/?a=socialmedia" target="_blank">Tampa meetup</a> with an audience of about 100 people and it worked really well.  Late  Friday night, I created <a href="http://phraffle.com" target="_blank">Phraffle</a> (phone + raffle = Phraffle!) &#8212; <a href="http://phraffle.com" target="_blank">http://phraffle.com</a>.  It&#8217;s obviously a very simple and somewhat silly app, but it was fun to build.  It was also my first use of <a href="https://typekit.com/" target="_blank">TypeKit</a> (font used in the logo).  The spinning effect is based on a blog post I found by <a href="http://odhyan.com/blog/2011/05/slot-machine-in-javascript/" target="_blank">Saurabh Odhyan</a>.  He basically pans an image across a div using <a href="http://www.spritely.net/" target="_blank">JQuery.spritely</a>.  Once the speed increases, the image is switched to a blurred version.   I loved the effect so I took his example and made some modifications until I had the right look and feel.</p>
<p>Let me know if you have any ideas on how to improve this or if you have seen other interesting ways of handling raffles.  I might create a tiny app for phones/tablets for off-line use-cases.  It all depends on how bored I get next weekend. <img src='http://gregsramblings.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p style="text-align: center;"><a href="http://phraffle.com"><img class="aligncenter size-medium wp-image-3402" title="phraffle-screenshot" src="http://gregsramblings.com/wp-content/uploads/2012/05/phraffle-screenshot-300x193.png" alt="" width="300" height="193" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://gregsramblings.com/2012/05/13/an-interesting-way-to-handle-event-giveaways-phraffle-com/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Central Florida Events: Building real apps with HTML/JavaScript and PhoneGap</title>
		<link>http://gregsramblings.com/2012/05/02/central-florida-events-building-real-apps-with-htmljavascript-and-phonegap/</link>
		<comments>http://gregsramblings.com/2012/05/02/central-florida-events-building-real-apps-with-htmljavascript-and-phonegap/#comments</comments>
		<pubDate>Thu, 03 May 2012 02:08:22 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[iOS/iPhone/iPad]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PhoneGap]]></category>
		<category><![CDATA[backbone.js]]></category>
		<category><![CDATA[florida]]></category>
		<category><![CDATA[fsfpug]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[orlando]]></category>
		<category><![CDATA[phonegap]]></category>
		<category><![CDATA[Tampa]]></category>
		<category><![CDATA[twitter boostrap]]></category>
		<category><![CDATA[web standards]]></category>

		<guid isPermaLink="false">http://gregsramblings.com/?p=3381</guid>
		<description><![CDATA[If you live anywhere near Tampa or Orlando and have an interest in building mobile apps using web standards, you need to come to one of the following two local events: Tampa &#8212;  5/9/2012 6:00PM please RSVP on the site &#8211; if it&#8217;s full, try again later in the day Orlando &#8212;  5/8/2012 6:00PM EDT [...]]]></description>
				<content:encoded><![CDATA[<p>If you live anywhere near Tampa or Orlando and have an interest in building mobile apps using web standards, you need to come to one of the following two local events:</p>
<ul>
<li><a href="http://www.meetup.com/BarCampTampaBay/events/60875062/?a=socialmedia" target="_blank">Tampa</a> &#8212;  5/9/2012 6:00PM please RSVP on the site &#8211; if it&#8217;s full, try again later in the day</li>
<li><a href="http://fullsail.groups.adobe.com/index.cfm?event=post.display&amp;postid=42197" target="_blank">Orlando</a> &#8212;  5/8/2012 6:00PM EDT at Full Sail University &#8211; DONE &#8211; Had a packed room and over 35 online!</li>
</ul>
<p>Even if you have looked at PhoneGap already, we&#8217;re going much deeper than an introduction.  We&#8217;re going to show how to build production-quality, high-performing apps using HTML and JavaScript.  This goes well beyond the typical demos.  Micro-frameworks such as backbone.js, twitter boostrap and more will be used.</p>
<p>The folks at Full Sail University put together a poster for the Orlando event (see below).  Now I feel like we need some sort of cool music playing when we enter the room! <img src='http://gregsramblings.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p style="text-align: center;"><a href="http://fullsail.groups.adobe.com/index.cfm?event=post.display&amp;postid=42197"><img class="aligncenter size-full wp-image-3383" style="border-image: initial; border-width: 3px; border-color: black; border-style: solid;" title="poster500" src="http://gregsramblings.com/wp-content/uploads/2012/05/poster500.jpg" alt="" width="500" height="773" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://gregsramblings.com/2012/05/02/central-florida-events-building-real-apps-with-htmljavascript-and-phonegap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Amazon EC2 &#8211; a real-world case study of moving from a data center to the cloud</title>
		<link>http://gregsramblings.com/2012/05/02/amazon-ec2-a-real-world-case-study-of-moving-from-data-center-to-the-cloud-chessjam/</link>
		<comments>http://gregsramblings.com/2012/05/02/amazon-ec2-a-real-world-case-study-of-moving-from-data-center-to-the-cloud-chessjam/#comments</comments>
		<pubDate>Wed, 02 May 2012 14:21:40 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[Amazon AWS]]></category>
		<category><![CDATA[Amazon EC2]]></category>
		<category><![CDATA[ChessJam]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[amazon ec2]]></category>
		<category><![CDATA[amazon web services]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[ec2]]></category>
		<category><![CDATA[online chess]]></category>

		<guid isPermaLink="false">http://gregsramblings.com/?p=3354</guid>
		<description><![CDATA[Two years ago, I blogged about ChessJam, a chess application that I helped develop where people from all over the world play live chess with each other.  Since launching ChessJam, it&#8217;s been up and running 24/7 with very little downtime and has experienced some good growth. To give you a sense of the activity levels, [...]]]></description>
				<content:encoded><![CDATA[<p>Two years ago, I <a href="http://gregsramblings.com/2009/11/09/the-making-of-chessjam-flexair-coldfusion-livecycle-ds-fun-project/" target="_blank">blogged</a> about <a href="http://chessjam.com" target="_blank">ChessJam</a>, a chess application that I helped develop where people from all over the world play live chess with each other.  Since launching ChessJam, it&#8217;s been up and running 24/7 with very little downtime and has experienced some good growth.</p>
<p style="text-align: center;"><a href="http://chessjam.com"><img class="aligncenter size-full wp-image-3351" title="chessjamcollage" src="http://gregsramblings.com/wp-content/uploads/2012/05/chessjamcollage.png" alt="" width="784" height="162" /></a></p>
<p>To give you a sense of the activity levels, here are a few ChessJam stats:</p>
<ul>
<li>At any time, day or night, there is an average of 100 users logged in playing chess.  We&#8217;ve seen it as high as 180 concurrent on weekends.</li>
<li>Our average load is about 2 or 3 chess moves per second.</li>
<li>During the month of March, 2012, more than 4,500 users played 128,920 games (5.8 million moves in one month)</li>
</ul>
<p>Not bad for no marketing budget I think.  It&#8217;s not a huge amount of activity compared to a lot of applications, but the performance demands are very high. Serious chess players don&#8217;t tolerate delays in response time, so we have to make sure we have plenty of CPU and bandwidth to spare.</p>
<h4>Hosting history:</h4>
<p><strong>Late 2009/Early 2010 &#8212; development and early production &#8211; hosting from my home office</strong></p>
<p>During development and the first few months of production, ChessJam was hosted from a computer in my home office.  The cost was around $70/month for FiOS fixed IP address plus whatever power my server was drawing. This was fine until the Florida summer storms took out my power twice in a single month. That&#8217;s when we realized the difference between a real data center and my personal data center! It was also a bit stressful when I traveled because it left my wife in charge of late-night server repairs.</p>
<p><strong>Late 2010 &#8212; moved to rack mounted servers in a real data center</strong></p>
<p><strong></strong>We acquired two used (circa 2008) rack-mounted IBM servers and rented some rack space at a local data center.  Reliable power and Internet were no longer a problem, but the hardware was ours to manage and eventually repair.  It was better, but it wasn&#8217;t a great situation. Once we settled in, our cost was around $190/month (rack space rental and bandwidth).</p>
<p>Why didn&#8217;t we move to Amazon EC2 instead of the data center?  We did consider moving from my home office to Amazon EC2 instead of the data center, but at the time, Amazon didn&#8217;t have an instance type that suited us.  The small instance type was affordable, but it only offers 1.7GB of memory, which just won&#8217;t cut it for our server app (we tried). The next step up was the large instance type with 7.5GB of memory, but it was too expensive and overkill.</p>
<p>Two months ago, Amazon filled the huge gap between the small and large instance type by <a href="http://aws.typepad.com/aws/2012/03/ec2-updates-new-instance-64-bit-bit-ubiquity-ssh-client.html" target="_blank">announcing the new &#8220;medium&#8221; instance type</a>. It provides 3.75GB of memory as well as a decent amount of CPU for a good price&#8230; so we decided it was time to make the move.</p>
<h4>Our EC2 configuration:</h4>
<ul>
<li>Medium EBS instance running <a href="http://alestic.com/" target="_blank">Ubuntu Linux</a>.  EBS is &#8220;Elastic Block Store&#8221;, which basically means that the storage is persistent.  If you haven&#8217;t looked at EC2 in the past two years, you might not know that persistent storage on server instances is an now an option.  With EBS storage, you can shut down your server and all of the data is saved (just like a physical server).</li>
<li>200GB EBS disk volume &#8211; for our MySQL database and fast growing log files.</li>
</ul>
<h4>AWS and bill anxiety</h4>
<p><a href="http://gregsramblings.com/wp-content/uploads/2012/05/anxiety.jpg"><img class="alignright size-medium wp-image-3363" title="anxiety" src="http://gregsramblings.com/wp-content/uploads/2012/05/anxiety-200x300.jpg" alt="" width="200" height="300" /></a>Most people exploring Amazon EC2 ask the same question I asked… &#8220;What is this really going to cost me?&#8221;. When you dig into how EC2 is priced, you&#8217;ll find that there are multiple variables, which creates a bit of uncertainty. Basically, it boils down to the server instance type, the disk space used, and the amount of data moved in and out of the instance. There are other small charges for number of I/Os and any unused IP addresses, but these are typically only a few cents and don&#8217;t have much impact on the final bill (based on my experience).</p>
<ul>
<li><strong>The server instance</strong> &#8212; this one is easy and predictable. Amazon charges by the hour. For example, our medium instance is $0.16 per hour. You could fire up a medium server instance and spend a full 8 hour work day playing with it and only pay about $1.30. Not bad! Our app runs 24/7 so 24 hours per day * 30 days = 720 hours per month. So, our monthly cost can be calculated with $0.16 * 720 = <strong>$115/month</strong>.  (later in this article, I explain how reserved instances work and how they can lower this price by nearly half)</li>
<li><strong>Disk volume</strong> &#8211; this one is also easy and predictable as well. It cost $0.10 per GB per month. We have a 200GB volume, so that&#8217;s 200*$0.10 = <strong>$20/month</strong>.</li>
<li><strong>Disk I/Os</strong> &#8212; The EC2 pricing page also shows a $0.10 charge per million I/Os. We do about 300,000 I/Os per day (based on my last bill) so that comes to about 9 million I/Os per month resulting in less than <strong>$1/month</strong>&#8230; so we&#8217;ll just call that a rounding error.</li>
<li><strong>Data transfer charges</strong> &#8212; this is the part that scared us. Amazon charges $0.12 per GB of data transferred out of our EC2 instance. They do not charge for inbound traffic. This method of charging for data is very different than how our data center charges us. The data center uses &#8220;95th percentile peak billing&#8221; which means we are charged based on the average rate that we move data, not the volume of data moved. I&#8217;ll spare you the details, but it doesn&#8217;t translate to Amazon&#8217;s model. However, our data center provider does have a report that shows the total amount of data transferred each month and we used that number to estimate. Now that we&#8217;ve been up and running a few days, I know that we transfer about 250MB of data every hour or 6GB of data per day. So, 6GB * 30 days * $0.12 = <strong>$21/month</strong>.</li>
</ul>
<p><strong>Summary:</strong> $115.20/month for our server instance, $20/month for our disk volume and $21/month for data transfer which comes to about <strong>$156.20/month</strong>. That&#8217;s already about $30 less than we were paying the data center.  That price is already lower than what we were paying&#8230; but with reserved instances, we can lower it considerably.</p>
<h4>Saving money with reserved instances</h4>
<p><a href="http://gregsramblings.com/wp-content/uploads/2012/05/savings1.jpg"><img class="alignright size-full wp-image-3367" title="savings" src="http://gregsramblings.com/wp-content/uploads/2012/05/savings1.jpg" alt="" width="120" height="78" /></a>A lot of companies use Amazon EC2 in a much more &#8220;elastic&#8221; fashion than ChessJam does.  They set up load balancers and auto-scaling to dynamically increase and decrease instances based on the load. However, our app is not nearly that sophisticated (although eventually our usage may justify re-architecting our back end!).  Our app uses a consistent amount of EC2 resources.  Thankfully, Amazon offers special pricing for this type of use-case called <em><strong>reserved instances</strong></em>. Reserved Instances give you the option to make a one-time payment for each instance you want to reserve and in turn, receive a significant discount on the hourly charge for that instance. Basically, Amazon is rewarding you for being predictable. There are three different options, light utilization, medium utilization, and heavy utilization. Our server is up and running 24/7, so our best deal is the heavy utilization model.</p>
<p>I reserved a medium instance for one year by paying an upfront fee of $390. Now, instead of paying $0.16 per hour, we pay $0.032 per hour (just over 3 cents!).  Some simple math shows the savings:</p>
<ul>
<li>With a normal &#8220;demand instance&#8221;, we paid $0.16 per hour * 24 hours per day * 365 days per year resulting in a <strong>yearly cost of $1,401.60</strong> (plus disk, I/O, transfer)</li>
<li>With the reserved instance, we paid $390 up front and then $0.032 per hour * 24 hours per day * 365 days per year resulting in a <strong>yearly cost of $670.32</strong> (plus disk, I/O, transfer)</li>
</ul>
<h4>Bottom line cost including disk, data, etc.</h4>
<ul>
<li>We paid around <strong>$2,280</strong> a year to the data center.</li>
<li>We now pay <strong>$1,160</strong> a year to Amazon EC2 &#8211; saving us over $1,000 per year (not counting any hardware costs we could have incurred).</li>
</ul>
<p>There are two smaller instance types &#8211; micro and small.  You might can get by far cheaper for your app/site.  With reserved instance pricing, you can get a micro instance for about $100 per year!  I currently host 6 low-use websites on a single micro instance (local bagel store, my aerial photo site, etc.).</p>
<p><strong>TIP:</strong> If you plan to use Amazon&#8217;s micro instances, you should be aware of how they throttle CPU.  It&#8217;s unique to the micro instance type.  <a href="http://gregsramblings.com/2011/02/07/amazon-ec2-micro-instance-cpu-steal/" target="_blank">I blogged about this months ago</a>.</p>
<p><strong>TIP:</strong> Amazon&#8217;s billing data is updated several times per day, so you can quickly determine what your run-rate is for everything. I was able to project our monthly cost after 24 hours of activity.</p>
<h4>We didn&#8217;t move to EC2 just to save money</h4>
<p><img class="alignright size-full wp-image-3353" title="serverrepair200" src="http://gregsramblings.com/wp-content/uploads/2012/05/serverrepair200.jpg" alt="" width="200" height="300" />Yes, we&#8217;re saving some money &#8211; that&#8217;s awesome, but to be honest, it&#8217;s not the reason we moved.   The real reason we wanted to move to a cloud solution like EC2 is for peace of mind and to prevent us from dealing with a hardware failures.  We had a backup server in the data center, but if there was a failure in the primary server, it would likely result in a 30 minute drive to the data center and a few hours in a cold room moving hard drives from server to server and hoping it all goes well.  It was a precarious situation!  Now, if there is a hardware failure (rare, but they happen on EC2), I simply launch a new instance with a few clicks of the mouse, mount our disk volume to it, tweak a few things, and get us back online.  All of this while watching Big Bang Theory in my PJs!</p>
<p>I know that a few of you IT-minded folks are seeing some holes in my final architecture, and yes, you&#8217;re correct. The above scheme doesn&#8217;t address a disk volume crash. Disk volume crashes are very rare on EC2, but I do plan to make a few more enhancements to the architecture. I could start up a new instance and use it as a slave server to replicate data from the primary server&#8217;s database (MySQL).  I could start this backup instance in a completely different zone, which basically means that it&#8217;s in a different physical facility.  This would allow us to quickly recover if Amazon has a massive failure like the one a year ago that brought down several popular sites for a few hours. However, I might go the cheap route and create a 2nd disk volume and use a file system that allows me to mirror the database between the two disk volumes. I think this will be adequate until someone buys us for a $1 billion. <img src='http://gregsramblings.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Another option to mention is <a href="http://aws.amazon.com/rds/" target="_blank">Amazon RDS</a> (MySQL in the cloud). If we used RDS for our database, it would give us more redundancy and scalability, but for now, we&#8217;re going to avoid that cost and stay on the single instance until we grow more.</p>
<h4>It may not be for all applications</h4>
<p>Our experience with EC2 was very positive, especially with this application.  However, it&#8217;s not perfect for all applications.  The server is still &#8220;virtual&#8221; so the performance is not perfectly<br />
consistent.  Things like disk I/O speed, network bandwidth, etc., is what it is.  You can&#8217;t tell Amazon that you need a SSD for your swap drive and 10,000RPM drives for your databases. In other words, you don&#8217;t have as many ways to tweak performance as you do by managing your own real hardware.  However, if your app runs well on EC2, why bother with that stuff?!  I personally feel that I&#8217;ve served my time in computer rooms during my career. <img src='http://gregsramblings.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h4>The rest of the Amazon Web Services world</h4>
<p>Everything we&#8217;ve talked about in this article has been specific to the low-end instance types of Amazon EC2.  There are many other instance types and other related features including load balancers, auto-scaling, monitoring, automatic alerts, etc.  Also, EC2 is only one of many services offered by Amazon.  Check them all out at <a href="http://aws.amazon.com/" target="_blank">http://aws.amazon.com/</a>.</p>
<h4><a href="http://aws.amazon.com"><img class="aligncenter size-full wp-image-3369" title="awslogo" src="http://gregsramblings.com/wp-content/uploads/2012/05/awslogo1.png" alt="" width="162" height="64" /></a></h4>
<h4>Check it out for free</h4>
<p>Amazon recently started offering a &#8220;<a href="http://aws.amazon.com/free/" target="_blank">free tier</a>&#8221; for EC2 newbies. You basically get a year free of a micro instance along with some disk space and bandwidth. See <a href="http://aws.amazon.com/free/" target="_blank">http://aws.amazon.com/free</a> for more details. Remember &#8211; you can resize instances anytime. It&#8217;s very common to use a micro instance during development, and then upgrade as needed when you go live.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregsramblings.com/2012/05/02/amazon-ec2-a-real-world-case-study-of-moving-from-data-center-to-the-cloud-chessjam/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>JavaScript Developer Magazine &#8211; Appliness May Issue now Available</title>
		<link>http://gregsramblings.com/2012/04/30/javascript-developer-magazine-may-2012-appliness/</link>
		<comments>http://gregsramblings.com/2012/04/30/javascript-developer-magazine-may-2012-appliness/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 18:57:00 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[iOS/iPhone/iPad]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PhoneGap]]></category>
		<category><![CDATA[WebKit]]></category>
		<category><![CDATA[app-ui]]></category>
		<category><![CDATA[appliness]]></category>
		<category><![CDATA[backbone.js]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[DPS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[javascript magazine]]></category>
		<category><![CDATA[magazine]]></category>
		<category><![CDATA[twitter boostrap]]></category>

		<guid isPermaLink="false">http://gregsramblings.com/?p=3336</guid>
		<description><![CDATA[The May 2012 issue of Appliness is now available for your iPad and Android tablet.  This issue has over 100 pages of content including tons of code samples and interactive demos.  If you are a JavaScript developer, this is something you should subscribe to.  It&#8217;s free. May 2012 table of contents: CSS Regions and CSS [...]]]></description>
				<content:encoded><![CDATA[<p>The May 2012 issue of <a href="http://appliness.com" target="_blank">Appliness</a> is now available for your iPad and Android tablet.  This issue has over 100 pages of content including tons of code samples and interactive demos.  If you are a JavaScript developer, this is something you should subscribe to.  It&#8217;s free.</p>
<p><strong>May 2012 table of contents:</strong></p>
<ul>
<li>CSS Regions and CSS Exclusions, by Deepa Subramaniam</li>
<li>Drag and drop with jQuery UI on mobile devices, by Michaël Chaize</li>
<li>JavaScript Object Creation, by Keith Peters</li>
<li>Using Backbone with jQuery Mobile, by Christophe Coenraets</li>
<li>Crafting native looking iOS apps with HTML, by Christophe Coenraets</li>
<li>Demo of Handlebars, by Raymond Camden</li>
<li>Real-time data exchange in HTML5, by Ryan Stewart</li>
<li>Swipe to delete items, by Michaël Chaize</li>
<li>App-UI, a library by Andrew Trice</li>
<li>HTML5 Multimedia components, by Ian Devlin</li>
<li>Interview of Pamela Fox</li>
<li>Colour Match, Cutest Paw, Bit Timer: showcase</li>
<li>Which Element ? Pull quotes, comments</li>
<li>PhoneGap and the File API</li>
<li>WTFJS: False advertising</li>
<li>Generate color palettes from HTML5 video</li>
<li>CSS variables draft</li>
<li>News</li>
</ul>
<p>More information at <a href="http://appliness.com/download-the-second-issue/" target="_blank">http://appliness.com/download-the-second-issue/</a></p>
<p><img class="alignnone size-full wp-image-3345" title="JavaScript Developer Magazine Appliness" src="http://gregsramblings.com/wp-content/uploads/2012/04/collage700.png" alt="" width="700" height="643" /></p>
]]></content:encoded>
			<wfw:commentRss>http://gregsramblings.com/2012/04/30/javascript-developer-magazine-may-2012-appliness/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WANTED &#8211; Rock star C++ programmers to work on WebKit</title>
		<link>http://gregsramblings.com/2012/04/17/wanted-rock-star-c-programmers-to-work-on-webkit/</link>
		<comments>http://gregsramblings.com/2012/04/17/wanted-rock-star-c-programmers-to-work-on-webkit/#comments</comments>
		<pubDate>Wed, 18 Apr 2012 03:00:56 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[Job Postings]]></category>
		<category><![CDATA[WebKit]]></category>
		<category><![CDATA[adobe jobs]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[hiring]]></category>
		<category><![CDATA[job]]></category>
		<category><![CDATA[jobs]]></category>
		<category><![CDATA[webkit]]></category>

		<guid isPermaLink="false">http://gregsramblings.com/?p=3327</guid>
		<description><![CDATA[Did you know that Adobe is ramping up engineering efforts to build new features for WebKit?  This is not a fork of WebKit for an upcoming product.  This is WebKit trunk code commits!  The WebKit Engineering team in San Francisco contributes features, bug fixes, and engineering system improvements to WebKit.  They work on the WebKit [...]]]></description>
				<content:encoded><![CDATA[<p>Did you know that Adobe is ramping up engineering efforts to build new features for WebKit?  This is not a fork of WebKit for an upcoming product.  This is WebKit trunk code commits!  The WebKit Engineering team in San Francisco contributes features, bug fixes, and engineering system improvements to WebKit.  They work on the WebKit trunk, according to the processes of the WebKit development community.  You can get a taste of what the team has been working on by looking at <a href="http://blogs.adobe.com/webplatform/" target="_blank">http://blogs.adobe.com/webplatform/</a>.</p>
<p>If you are a C++ programmer with a desire to work on a highly visible team that is having a huge impact on the future of the web, it&#8217;s time to apply!  You can go to <a href="http://adobe.com/jobs" target="_blank">http://adobe.com/jobs</a> and search for the keyword &#8220;<strong>WebKit</strong>&#8221; to find the current open positions.  You can also email WebKitJobs at adobe dot com to apply.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregsramblings.com/2012/04/17/wanted-rock-star-c-programmers-to-work-on-webkit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Appliness &#8211; New digital magazine for JavaScript app developers!</title>
		<link>http://gregsramblings.com/2012/03/28/appliness-javascript-magazine/</link>
		<comments>http://gregsramblings.com/2012/03/28/appliness-javascript-magazine/#comments</comments>
		<pubDate>Wed, 28 Mar 2012 13:24:31 +0000</pubDate>
		<dc:creator>Greg Wilson</dc:creator>
				<category><![CDATA[Adobe Digital Publishing Suite]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[iOS/iPhone/iPad]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[adobe digital publishing suite]]></category>
		<category><![CDATA[Adobe DPS]]></category>
		<category><![CDATA[appliness]]></category>
		<category><![CDATA[DPS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[web standards]]></category>

		<guid isPermaLink="false">http://gregsramblings.com/?p=3309</guid>
		<description><![CDATA[Today, the Adobe evangelists team has launched a new digital magazine called Appliness. If you have an iPad or Android tablet, you can grab a free copy now! The Kindle Fire version will be available any day (we&#8217;re waiting on Amazon to approve &#8211; their backlog is 2 weeks!). This will be a monthly magazine [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://gregsramblings.com/wp-content/uploads/2012/03/appliness1.png"><img class="alignleft size-full wp-image-3310" title="appliness1" src="http://gregsramblings.com/wp-content/uploads/2012/03/appliness1.png" alt="" width="184" height="239" /></a>Today, the Adobe evangelists team has launched a new digital magazine called Appliness.  If you have an iPad or Android tablet, you can grab a free copy now!  The Kindle Fire version will be available any day (we&#8217;re waiting on Amazon to approve &#8211; their backlog is 2 weeks!).</p>
<p>This will be a monthly magazine with articles about writing applications using web standards. Some of the articles have interactive content and video.</p>
<p>All of this was done using Adobe Digital Publishing Suite (the same technology used for popular magazines such as Wired, National Geographic, and many more).</p>
<p>Michael Chaize was the driving force behind this and has a <a href="http://www.riagora.com/2012/03/appliness-digital-magazine/" target="_blank">blog post</a> with more details.  <a href="https://twitter.com/#!/mailevalentine" target="_blank">Maile Valentine</a> also played a huge role in the creation of Appliness &#8211; THANK YOU BOTH!</p>
]]></content:encoded>
			<wfw:commentRss>http://gregsramblings.com/2012/03/28/appliness-javascript-magazine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
