<?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>Dave Rupert &#187; Archives</title>
	<atom:link href="http://daverupert.com/archives/feed/" rel="self" type="application/rss+xml" />
	<link>http://daverupert.com</link>
	<description>I&#039;m the lead developer at Paravel. This blog mostly deals with web development.</description>
	<lastBuildDate>Mon, 28 Nov 2011 14:32:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Responsive Image Hierarchy</title>
		<link>http://daverupert.com/2011/11/responsive-image-hierarchy/</link>
		<comments>http://daverupert.com/2011/11/responsive-image-hierarchy/#comments</comments>
		<pubDate>Fri, 18 Nov 2011 20:28:44 +0000</pubDate>
		<dc:creator>davatron5000</dc:creator>
				<category><![CDATA[Articles]]></category>

		<guid isPermaLink="false">http://daverupert.com/?p=802</guid>
		<description><![CDATA[In a single column "mobile view", taller images appear more important than wider&#160;images.]]></description>
			<content:encoded><![CDATA[<p>Recently while working on a responsive web design at <a href="http://paravelinc.com">Paravel</a>, we came across an unexpected maxim regarding image aspect ratios and their visual hierarchy.</p>
<pre><code>Image Height == Image Importance
</code></pre>
<p>Our design employed a ~3:1 hero image with three ~4:3 thumbs below it. At full width it posessed the proper hierarchy: <code>Biggest == Most Important</code>. However, when resized and folded into a single column, the 3:1 image appears to be about &half; the height of the 4:3 images below it.</p>
<p>Narrow your browser width to see the visual hierarchy breakdown:</p>
<p><iframe src="http://jsbin.com/eferih/14" width="100%" style="background: white"></iframe></p>
<p><a href="http://jsbin.com/eferih/14">View &#8220;BEFORE&#8221; on JSBin</a></p>
<p>Pretty unacceptable to lose hierarchy on such a major feature of the site &#8211; especially when e-commerce and products are involved. We had to come up with a solution.</p>
<h3>Uncle Dave&#8217;s Squeeze n&#8217; Crop Method</h3>
<p>We wanted stop the image from scaling once it reached a certain height. Here&#8217;s what we did:</p>
<pre><code>&lt;div class="banner-item"&gt;
&lt;!-- Using a 2:1 image because the cat picture is better :) --&gt;
    &lt;img src="http://placekitten.com/1200/600" /&gt;
&lt;/div&gt;
</code></pre>
<p>First wrap the image in a DIV, this will act as an image-mask of sorts. Then apply some <code>min-height</code> + <del><code>max-height</code></del><ins><code>height</code></ins> + <code>overflow: hidden</code> magic to lock the image and hide the overflow:</p>
<pre><code>.banner-item {
  overflow: hidden;
  min-height: 300px; /* 300px is arbitrary. */
}
.banner-item img {
  width: 100%;
}

/* 600px is about the width "locked in" at */
@media screen and (max-width: 700px) {
  .banner-item img {
    width: auto;
    max-width: none;
    height: 300px;
  }
}
</code></pre>
<p>The image hugs the left of the wrapper. Auto-cropping is never perfect, but if you want to adjust the focal point of the image, you can do that with <code>position:relative</code>:</p>
<pre><code>/* OPTIONAL: Use to shift left as necessary */
@media screen and (max-width: 480px) {
  .banner-item img {
   position: relative;
   left: -40%
  }
}
</code></pre>
<h3>Results</h3>
<p><iframe src="http://jsbin.com/eferih/15" width="100%" style="background: white"></iframe></p>
<p><a href="http://jsbin.com/eferih/15">View &#8220;AFTER&#8221; on JSBin</a></p>
<p>There&#8217;s a lot of playing around with what &#8220;feels good&#8221;. Adjust the breakpoint of your media query to where it feels like your image locks-in to the desired height. There might be some &#8220;Math&#8221; [/quotehands] based off of a conch shell that can help you with this, but I just <a href="http://www.colbertnation.com/the-colbert-report-videos/24039/october-17-2005/the-word---truthiness">go with my gut</a>.</p>
<p>Good luck and let us know if you use this technique and/or can make it better.</p>
]]></content:encoded>
			<wfw:commentRss>http://daverupert.com/2011/11/responsive-image-hierarchy/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Responsive Video Embeds with FitVids</title>
		<link>http://daverupert.com/2011/09/responsive-video-embeds-with-fitvids/</link>
		<comments>http://daverupert.com/2011/09/responsive-video-embeds-with-fitvids/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 16:00:09 +0000</pubDate>
		<dc:creator>davatron5000</dc:creator>
				<category><![CDATA[Articles]]></category>

		<guid isPermaLink="false">http://daverupert.com/?p=794</guid>
		<description><![CDATA[Continuing in my series of micro-jQuery plugins I'm pleased to announce FitVids, a Paravel + Chris Coyier venture]]></description>
			<content:encoded><![CDATA[<p>Last week, <a href="http://trentwalton.com">Trent Walton</a> tweeted about the frustration of getting standard video players to work in a responsive design:</p>
<div id="bbpBox_108986192002953217" class="bbpBox" style="padding:20px; margin:5px 0; background-color:#e6e6e6; background-image:url(http://a3.twimg.com/profile_background_images/230317815/the-dude.png); background-repeat:no-repeat">
<div style="background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;"><span style="width:100%; font-size:18px; line-height:22px;">I’d pay well for a video service that made embedding fluid/responsive videos the right way easy. It’s way more difficult that you’d think.</span>
<div class="bbp-actions" style="font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;"><img align="middle" src="http://daverupert.com/wp-content/plugins/twitter-blackbird-pie//images/bird.png"><a title="tweeted on August 31, 2011 12:35 pm" href="http://twitter.com/#!/TrentWalton/status/108986192002953217" target="_blank">August 31, 2011 12:35 pm</a> via <a href="http://itunes.apple.com/us/app/twitter/id409789998?mt=12" rel="nofollow" target="blank">Twitter for Mac</a><a href="https://twitter.com/intent/tweet?in_reply_to=108986192002953217" class="bbp-action bbp-reply-action" title="Reply"><span><em style="margin-left: 1em;"></em><strong>Reply</strong></span></a><a href="https://twitter.com/intent/retweet?tweet_id=108986192002953217" class="bbp-action bbp-retweet-action" title="Retweet"><span><em style="margin-left: 1em;"></em><strong>Retweet</strong></span></a><a href="https://twitter.com/intent/favorite?tweet_id=108986192002953217" class="bbp-action bbp-favorite-action" title="Favorite"><span><em style="margin-left: 1em;"></em><strong>Favorite</strong></span></a></div>
<div style="float:left; padding:0; margin:0"><a href="http://twitter.com/intent/user?screen_name=TrentWalton"><img style="width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0" src="http://a2.twimg.com/profile_images/1180283376/tw_normal.jpg"></a></div>
<div style="float:left; padding:0; margin:0"><a style="font-weight:bold" href="http://twitter.com/intent/user?screen_name=TrentWalton">@TrentWalton</a>
<div style="margin:0; padding-top:2px">Trent Walton</div>
</div>
<div style="clear:both"></div>
</div>
</div>
<p></p>
<p>Trent is right. It&#8217;s deceptively difficult to make videos fluid and responsive. I almost lost all my hair getting it to work on <a href="http://dolectures.co.uk">Do Lectures</a>. On one hand, the HTML5 <code>video</code> element is super easy to make responsive: <code>video { max-width: 100%; height: auto; }</code>. On the other hand, if you want to do something basic like embed a video from YouTube or Vimeo (that has a flash fallback) you can set the <code>width: 100%;</code> but the height stays the same breaking the aspect ratio… until now.</p>
<p>After some interstate brainstorming and coding with <a href="http://chriscoyier.net">Chris Coyier</a>, we came up with a solution. Mr. Walton, we&#8217;re here for our check.</p>
<h3>Introducing FitVids</h3>
<p><a href="http://fitvidsjs.com">FitVids</a> is a lightweight, easy-to-use jQuery plugin for fluid width video embeds. It currently supports the major video vendors: YouTube, Vimeo, Blip.tv, and a couple outliers.</p>
<p><iframe src="http://player.vimeo.com/video/28523422?title=0&amp;byline=0&amp;portrait=0" width="720" height="405" frameborder="0"></iframe></p>
<h3>How it works</h3>
<p>The plugin is based on <a href="http://css-tricks.com/NetMag/FluidWidthVideo/Article-FluidWidthVideo.php">Chris&#8217; pre-exising work on fluid videos</a> and <a href="http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/">the Intrinsic Ratio method suggested by Thierry Koblentz (ALA #284)</a>. With these gems of knowledge combined with my ability to only make tiny jQuery plugins, getting your videos do aspect ratio-based resizing is now as easy as targeting your .container, .post, etc. with FitVids.</p>
<pre><code>$("#thing-with-videos").fitVids();
</code></pre>
<p>It&#8217;s that easy! Best part, there&#8217;s very little Javascript happening. After the initial setup, it&#8217;s all percentage based resizing with just CSS.</p>
<p>You can <a href="https://github.com/davatron5000/FitVids.js/">fork it on Github</a> to dig in deeper into how it works. We&#8217;d love your feedback.</p>
<p>FitVids happily joins the Paravel family of easy-to-use tools for radical web: <a href="http://letteringjs.com">Lettering.js</a> and <a href="http://fittextjs.com">FitText</a>. If you use FitVids or any of these plugins on a something, let us know! We love to seeing this stuff in action.</p>
<h3>Updates: Plugins and Modules</h3>
<p>Absolutely amazed that people are taking this and running with it. Thanks, y&#8217;all.</p>
<ul>
<li><a href="http://wordpress.org/extend/plugins/fitvids-for-wordpress/">FitVids WordPress Plugin</a> by <a href="http://kevindees.cc/">Kevin Dees</a></li>
<li><a href="http://drupal.org/project/fitvids">FitVids Drupal Module</a> by <a href="http://www.sharpshooter.org/">Derek Ahmedzai</a></li>
</ul>
<p>Also, we&#8217;ve made some updates to FitVids and you can add your own custom video vendors and test out other players. If this interests you, <a href="https://github.com/davatron5000/FitVids.js/blob/master/README.md">read more here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://daverupert.com/2011/09/responsive-video-embeds-with-fitvids/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
		</item>
		<item>
		<title>Tiny Apps on Tiny Devices</title>
		<link>http://daverupert.com/2011/08/tiny-apps-on-tiny-devices/</link>
		<comments>http://daverupert.com/2011/08/tiny-apps-on-tiny-devices/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 19:03:04 +0000</pubDate>
		<dc:creator>davatron5000</dc:creator>
				<category><![CDATA[Articles]]></category>

		<guid isPermaLink="false">http://daverupert.com/?p=791</guid>
		<description><![CDATA[As if 10K Apart wasn't already challenging enough, this year submissions have to be responsive.]]></description>
			<content:encoded><![CDATA[<p>In association with <a href="http://visitmix.com">MIX Online</a> and <a href="http://aneventapart.com">An Event Apart</a>, Paravel is proud to take part in the launch of <a href="http://10k.aneventapart.com">The 2011 10K Apart: Responsive Edition</a>. It went fast but we had fun handling the <a href="http://blog.reaganray.com/post/8441225480/10kapart">the design process</a> and frontend buildout of this year&#8217;s contest site.</p>
<h3>The Buildout</h3>
<p><a href="http://10k.aneventapart.com/"><img src="http://daverupert.com/wp-content/uploads/2011/08/10k.jpg" alt="Insipre the Web with just 10K" style="max-width:100%;"/></a></p>
<p>The site itself is a simple 3 column responsive gallery with a few special ingredients:</p>
<ul>
<li><a href="https://github.com/davatron5000/Foldy960">Foldy960</a>, our homegrown not-a-framework, for the responsive base of the site. It&#8217;s lightweight and great for customization.</li>
<li><a href="http://fittextjs.com">FitText</a> for some subtle title resizing.</li>
<li><a href="http://marktyrrell.com/labs/blueberry/">Blueberry</a>, a responsive image slider. I was sad my trusty <a href="http://jquery.malsup.com/cycle/">jQuery.cycle</a> doesn&#8217;t work on fluid images, but I&#8217;m glad I found Blueberry. Highly Recommend++!!</li>
</ul>
<p>For the homepage feature we settled on a sliding background image that correlates your browser&#8217;s window width, even though we weren&#8217;t sure it was possible. After building a quick prototype to test that <a href="http://daverupert.com/2011/07/interaction/">interaction</a>, it was easier than we thought. Then it was simply a matter of applying the final copy, textures, and images.</p>
<p>As we were wrapping up, MIX&#8217;s <a href="http://rainypixels.com/">Nishant Kothary</a> asked us if we&#8217;d be interested in making a sample app for launch day&#8230;</p>
<h3>Introducing Colorrrs</h3>
<p><a href="http://10k.aneventapart.com/Uploads/501/"><img src="http://daverupert.com/wp-content/uploads/2011/08/colorrrs.jpg" alt="Colorrrs" style="max-width:100%;"/></a></p>
<p><a href="http://10k.aneventapart.com/Uploads/501/">Colorrrs</a> is 7,085 bytes (zipped) of random inspiration. We decided to isolate Dribbble&#8217;s awesome <a href="http://dribbble.com/colors/">Browse By Color</a> feature, make it ajaxy, and add a &#8220;Random&#8221; button for funsies. The heart of the app is a simple <a href="http://developer.yahoo.com/yql/">YQL</a> query to get data from Dribbble, then some jQuery to stitch it all together.</p>
<p>I&#8217;m finding Colorrrs to be a great way to explore Dribbble. I&#8217;ve been exposed to some sweet shots way outside the range of my daily browsing habits &#8211; and I enjoy that.</p>
<p>Coming up with a sample app for launch day and subjecting myself to the 10K limit was as fun as it was challenging. You have to think and choose your codes carefully. Now, knowing firsthand what goes into making such a tiny app, I&#8217;m even more excited to see what the world comes up with. Good luck, everyone!</p>
<h4>Further Reading</h4>
<ul>
<li>MIX Online announcing <a href="http://visitmix.com/writings/10k-apart-the-responsive-edition">10K Apart &#8211; Responsive Edition</a></li>
<li>Reagan Ray on <a href="http://blog.reaganray.com/post/8441225480/10kapart">Designing the 2011 10K Apart Contest</a></li>
<li>Trent Walton on <a href="http://trentwalton.com/2011/08/03/10k-apart-the-responsive-edition">10K Apart: The Responsive Edition</a></li>
<li>Nishant Kothary on <a href="http://rainypixels.com/writings/journal/back-to-the-future-of-wireframes">Back to the Future of Wireframes</a> </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://daverupert.com/2011/08/tiny-apps-on-tiny-devices/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Interaction</title>
		<link>http://daverupert.com/2011/07/interaction/</link>
		<comments>http://daverupert.com/2011/07/interaction/#comments</comments>
		<pubDate>Tue, 12 Jul 2011 12:53:05 +0000</pubDate>
		<dc:creator>davatron5000</dc:creator>
				<category><![CDATA[Articles]]></category>

		<guid isPermaLink="false">http://daverupert.com/?p=784</guid>
		<description><![CDATA[New technologies are being added to the browser faster than we can blog about them.]]></description>
			<content:encoded><![CDATA[<p>We now have CSS3 transforms, transitions, animations, media queries, HTML5 audio &amp; video, Canvas, inline SVG, and even WebGL for full 3D rendering. Infinite possibilities and combinations that keep me up at night.</p>
<h3>Better Browsers, Better Devices, New Interactions</h3>
<aside><a href="http://www.abookapart.com/products/responsive-web-design"><img src="http://daverupert.com/wp-content/uploads/2011/07/RWD.png" alt="Responsive Web Design"/></a><a href="http://www.abookapart.com/products/responsive-web-design">Responsive Web Design</a> by <a href="http://unstoppablerobotninja.com/">Ethan Marcotte</a> has spurred my thinking about interaction design. Fluid grids and media queries force us to consider content first and the interaction it will have with users&#8217; devices.</aside>
<p>Browser improvements aren&#8217;t just limited to graphics and animations. We can now tap into the hardware capabilities of various devices: geolocation, orientation<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>, notifications, multitouch, etc. These capabilities create brand new avenues of physical interaction we&#8217;ve never had access to before.</p>
<p>How can we use these new features for more meaningful interactions? How can we use them responsibly? Here are a few rules I live by:</p>
<ul>
<li>Don&#8217;t repeat the sins of Flash.</li>
<li>Don&#8217;t make users wait.</li>
<li>Make it non-essential.</li>
<li>Make it delightful.</li>
</ul>
<p>Stick to these rules and you&#8217;ll be able to surprise users with simple, joyful interactions (and should keep the luddites at bay).</p>
<h3>The tools for the job.</h3>
<p>Interaction Design is still tough. Aside from sliding around paper cutouts on a flat surface, I haven&#8217;t come across a tool greater than HTML for mocking up interaction<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup>.</p>
<p>I&#8217;m not naive enough to say, &#8220;Thou Shalt Only Design in Browser.&#8221; Though, in the near future I&#8217;m sure we&#8217;ll all spend more and more time mocking up working interaction prototypes in browser. We&#8217;ll all need <a href="http://lab.simurai.com">HTML/CSS labs</a> to test clicks, fonts, swipes, flips, orientations, squeeziness™, and more on multiple devices.</p>
<p>We&#8217;re in hyper-futuristic times if you consider the browsers and devices we use each day. It&#8217;s a new frontier and there&#8217;s never been a bigger space for exploration. Go forth and make awesome.</p>
<div class="footnotes">
<hr />
<ol>
<li id="fn:1">
If you have a Mac Laptop, iPad2 or iPhone4 &#8211; load this page up and give the header a twist.&#160;<a href="#fnref:1" rev="footnote">&#8617;</a>
</li>
<li id="fn:2">
Friends on Twitter have suggested the following for IxD mockups: Keynote, <a href="http://balsamiq.com/">Balsalmiq</a>, <a href="http://invisionapp.com/">InVision</a>, Fireworks, and Omnigraffle.&#160;<a href="#fnref:2" rev="footnote">&#8617;</a>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://daverupert.com/2011/07/interaction/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Two-Tone Borders with CSS3</title>
		<link>http://daverupert.com/2011/06/two-tone-borders-with-css3/</link>
		<comments>http://daverupert.com/2011/06/two-tone-borders-with-css3/#comments</comments>
		<pubDate>Tue, 07 Jun 2011 15:14:11 +0000</pubDate>
		<dc:creator>davatron5000</dc:creator>
				<category><![CDATA[Notes]]></category>

		<guid isPermaLink="false">http://daverupert.com/?p=779</guid>
		<description><![CDATA[Harnessing the Power of CSS3 into the Cloud for Real-Time Letterpress Effects.]]></description>
			<content:encoded><![CDATA[<p>We love using texture in our designs at Paravel. When you settle on a good texture, there&#8217;s nothing better than a slighly embossed line to give a letterpress like feel in between sections.</p>
<p><a href="http://daverupert.com/wp-content/uploads/2011/06/doubleborder-sample.png"><img src="http://daverupert.com/wp-content/uploads/2011/06/doubleborder-sample.png" alt="" title="doubleborder-sample" class="alignnone size-full wp-image-780" style="padding: 3px; background:#fff; max-width: 100%; height: auto;" /></a><br />
If you zoom in, you&#8217;ll see the lines are actually two tone: a main color and a highlight color.</p>
<p>Typically, we&#8217;d use a 1x2px image based approach -either background-images on nested DIVs (CSS2) or multiple background-images (CSS3)- to accomplish this effect. Challenging ourselves to <a href="http://daverupert.com/2010/06/web-performant-wordpress/">reduce HTTP Requests</a>, we came up with a simple solution to get the job done.</p>
<pre><code>&lt;style&gt;
    body { background: url(noise.jpg) repeat; }
    #blog {
        border-top: 1px solid #fff;
        box-shadow: 0 -1px 0 #cdd4b4;
        /* you'll need all the vendor prefixes for `box-shadow` */
    }
&lt;/style&gt;
&lt;body&gt;
    &lt;p id="blog"&gt;This is my content&lt;/p&gt;
&lt;/body&gt;
</code></pre>
<p>Bingo Bango! It works, is future proof, and degrades nicely. <a href="/demos/twotone/">View the Demo</a></p>
<p><a href="/demos/twotone/"><img src="http://daverupert.com/wp-content/uploads/2011/06/twotonedemo.png" alt="" title="twotonedemo" class="alignnone size-full wp-image-782" style="background: #fff; padding: 3px; max-width: 100%; height: auto;"></a></p>
<h3>Double-Double Borders</h3>
<p>What if you need two-tone lines on the top and the bottom of a element? That&#8217;s easy as well.</p>
<pre><code>#blog {
    border-top: 1px solid #fff;
    border-bottom: 1px solid #cdd4b4;
    box-shadow: 0 -1px 0 #cdd4b4, 0 1px 0 #fff;
}
</code></pre>
<p><strong>UPDATED:</strong> <a href="http://twitter.com/divya">Divya Manian</a> and <a href="http://twitter.com/mrflix">Felix Niklas</a> were quick to point out a better way for multiple borders using multiple box shadows. Updated code, but <a href="http://jsfiddle.net/nimbu/UcUMS/">view the e-solution here!</a>.</p>
<h3>Bonus Sass Mixin</h3>
<p>If you&#8217;re going to do this a lot, with all the vendor prefixes needed it makes sense to use <a href="http://sass-lang.com">Sass</a>. Here&#8217;s a <em>free</em> Sass mixin to get the job done:</p>
<pre><code>@mixin doubleborder($side, $innerColor, $outerColor) {
    $shadow: "0 0 0";
    border-#{$side}: 1px solid $innerColor;
    @if ($side == "top") { $shadow: 0 -1px 0; }
    @if ($side == "right") { $shadow: 1px 0 0; }
    @if ($side == "bottom") { $shadow: 0 1px 0; }
    @if ($side == "left") { $shadow: -1px 0 0; }
    -webkit-box-shadow: $shadow $outerColor;
    -moz-box-shadow: $shadow $outerColor;
    -o-box-shadow: $shadow $outerColor;
    box-shadow: $shadow $outerColor;
}

#blog {
    @include doubleborder(top, #fff, #cdd4b4);
}
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://daverupert.com/2011/06/two-tone-borders-with-css3/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>AustinJS Lettering.js Presentation</title>
		<link>http://daverupert.com/2011/03/austinjs-lettering-js-presentation/</link>
		<comments>http://daverupert.com/2011/03/austinjs-lettering-js-presentation/#comments</comments>
		<pubDate>Fri, 18 Mar 2011 12:45:32 +0000</pubDate>
		<dc:creator>davatron5000</dc:creator>
				<category><![CDATA[Notes]]></category>

		<guid isPermaLink="false">http://daverupert.com/?p=776</guid>
		<description><![CDATA[I recently spoke at Austin Javascript about Lettering.js. It was videotaped and I have slides.]]></description>
			<content:encoded><![CDATA[<p>I recently had the opportunity to speak at <a href="http://austinjavascript.com">AustinJS</a> about <a href="https://github.com/davatron5000/Lettering.js">Lettering.js</a>, the jQuery plugin I created for <a href="http://lostworldsfairs.com">The Lost World&#8217;s Fairs</a>. The <strong>presentation starts at ~4:23</strong> and is followed by a 10 minute Q&#038;A. My favorite part of the whole talk is when I invent a brand new CSS property called `-webkit-slightly-escalating-text`.</p>
<p><iframe src="http://player.vimeo.com/video/20214958?portrait=0" width="620" height="350" frameborder="0"></iframe></p>
<p>Here are the slides that are available for <a href="http://www.slideshare.net/davatron5000/lettering-js">download on Slideshare</a> (and hopefully soon at Note &#038; Point). Also, don&#8217;t forget to re-look at the ever growing gallery of real-world examples over at <a href="http://LetteringJS.com">LetteringJS.com</a>.</p>
<div class="clearfix">
<div id="__ss_7299011" style="margin-bottom:1em"><object id="__sse7299011" width="620" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=letteringjs-110317152644-phpapp01&#038;stripped_title=lettering-js&#038;userName=davatron5000" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse7299011" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=letteringjs-110317152644-phpapp01&#038;stripped_title=lettering-js&#038;userName=davatron5000" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="620" height="355"></embed></object> </div>
<p>Big thanks to <a href="http://llbbl.com">Logan Lindquist</a> and his side project <a href="http://AustinTechVideos.com">AustinTechVideos.com</a> for recording the talk. If you run a meetup in/around Austin, consider hiring him. I think it&#8217;s an excellent thing to document all the talks around town.
</div>
<h3>Bonus PowerPoint!!</h3>
<p>Because I know you like PowerPoints, here are some <a href="http://www.slideshare.net/davatron5000/webkit-transitions-the-good-the-bad-the-awesome">slides on Webkit Transitions</a> and <a href="http://daverupert.com/demos/">the accompanying demos</a> I did for a talk at <a href="http://refreshaustin.com">Refresh Austin</a> last year. </p>
<div id="__ss_7299209"  style="margin-bottom:1em"><object id="__sse7299209" width="620" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=webkittransitions-110317155144-phpapp01&#038;stripped_title=webkit-transitions-the-good-the-bad-the-awesome&#038;userName=davatron5000" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse7299209" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=webkittransitions-110317155144-phpapp01&#038;stripped_title=webkit-transitions-the-good-the-bad-the-awesome&#038;userName=davatron5000" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="620" height="355"></embed></object>  </div>
<p>Also worth checking out: <a href="http://trentwalton.com">Trent Walton</a> and I co-wrote an article for a Summer 2010 issue of <a href="http://netmag.co.uk">NetMag</a> (Issue 205 &#8211; Out of Print) that features similar, less-copyright-infringing, demos along with a simple walkthrough explanation of CSS transitions and animations.</p>
]]></content:encoded>
			<wfw:commentRss>http://daverupert.com/2011/03/austinjs-lettering-js-presentation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>40 Things I Learned From Side Projects</title>
		<link>http://daverupert.com/2010/12/40-things-i-learned-from-side-projects/</link>
		<comments>http://daverupert.com/2010/12/40-things-i-learned-from-side-projects/#comments</comments>
		<pubDate>Fri, 03 Dec 2010 14:52:41 +0000</pubDate>
		<dc:creator>davatron5000</dc:creator>
				<category><![CDATA[Articles]]></category>

		<guid isPermaLink="false">http://daverupert.com/?p=769</guid>
		<description><![CDATA[As the year ends, I took some time to write down every skill I&#8217;ve learned in 2010 as a direct result of side projects.]]></description>
			<content:encoded><![CDATA[<p>It&rsquo;s been a busy year at Paravel, no doubt. In addition to client work, we at Paravel put a high value on personal side projects, famously <a href="http://themanyfacesof.com">The Many Faces Of</a>, because through goofing off we can stay at the top of our craft.</p>
<p>In order to quantify the benefits side projects, I decided to take note of at least 40 different skills and technologies I&rsquo;ve learned this year <em>solely through side projects</em>. The bulk of my work at Paravel is still in PHP and since clients aren&rsquo;t paying me to be totally confused for hours on end, I had to hone these new skills in my spare time.</p>
<p><img src="http://daverupert.com/wp-content/uploads/2010/12/forty.jpg" alt="TL;DR" title="forty" width="780" height="420" class="aligncenter size-full wp-image-773" /></p>
<section class="section">
<h3>HTML5</h3>
<p>Side projects were a beautiful place to start understanding and using HTML5. It started with babysteps, but HTML5 is now the norm at Paravel. I&#8217;m enjoying getting into the grittier parts of HTML5 and am super-fascinated by things like the Geolocation API.</p>
<p class="note">Skills += New HTML5 Elements, HTML5 Forms, Modernizr, Custom &lt;audio&gt; &#038; &lt;video&gt; controls, Geolocation, Local/Session Storage, ARIA roles</p>
</section>
<section class="section">
<h3>CSS3</h3>
<p>We&rsquo;ve been using CSS3 at Paravel for well over a year, but it wasn&rsquo;t until <a href="http://www.refreshaustin.org/2010/april-meeting-old-school-business-with-new-school-tools-webkits-transition/">I presented at Refresh Austin in April</a> that I really learned CSS3 Transforms, Transitions and Animations. <a href="http://daverupert.com/demos/webkit/">The demos</a> I prepared for the talk are still helpful to me and eventually turned into an article <a href="http://trentwalton.com">Trent Walton</a> and I cowrote for <a href="http://www.netmag.co.uk/">.NET Magazine</a>.</p>
<p class="note">Skills += CSS3 Transforms, CSS3 Transitions, &#038; CSS3 Keyframe Animations</p>
</section>
<section class="section">
<h3>Ruby</h3>
<p>Learning Ruby has been a long time in the making, like since 2006, but I&rsquo;ve finally made the switch from PHP. I&rsquo;m thinking like a Rubyist now and have open side projects in both Rails and Sinatra.</p>
<p><em>Special Thanks:</em><br />
The wonderful <a href="http://austinonrails.org">Austin on Rails</a> community and Socialization Practice afterwards.<br />
<a href="http://cafebedouins.com">The Cafe Bedouins</a> who I can interrupt and say &ldquo;What did I do wrong?&rdquo;<br />
<a href="http://collectiveidea.com/blog/archives/2010/06/12/meet-keith-gaddis/">Keith Gaddis</a> and his Behavior Driven Development (BDD) class.<br />
And <a href="http://mattt.me/">Mattt Thompson</a>, with whom I&#8217;m working on a soon-to-be-released side project [/tease].</p>
<p class="note">Skills += Rails 3, Sinatra, BDD, HAML, SASS / Compass</p>
</section>
<section class="section">
<h3>Web Performance</h3>
<p>An afternoon of recording the <a href="http://atxwebshow.com/2010/01/22/episode-4-googles-make-the-web-faster-with-getify/">ATX Web Show with guest Kyle Simpson</a> turned into a binge night of coding and a now unending obsession. I spend my days counting kilobytes and milliseconds.  I documented these learnings in my <a href="http://daverupert.com/2010/06/web-performant-wordpress/">Web Performant WordPress</a> post, but it all started because of that podcast interview.</p>
<p class="note">Skills += Browser cache, ETags, gzip compression, LABjs, WordPress Caching</p>
</section>
<section class="section">
<h3>Version Control</h3>
<p>Being the lone developer at an small frontend-y design shop, we haven&rsquo;t really needed a version control system, FTP suits our needs pretty well. Sure you can play Git by yourself, but its boring and unfulfilling. Git is really better when at least 2 people are involved. /innuendo</h3>
<p>Thanks to the patience (again) of Mattt-sensei and <a href="https://github.com/davatron5000/Lettering.js/network">the folks contributing to Lettering.JS</a>, I&rsquo;m behind, but getting my source control skills in check.</p>
<p class="note">Skills += Git, Heroku</p>
</section>
<section class="section">
<h3>APIs</h3>
<p>In 2010, I spent some time following and learning a few newer APIs. <a href="http://thedesigncubicle.com">Brian Hoff</a> and I even started <a href="http://rebbbounds.tumblr.com">Rebbbounds</a> to keep track of the cool stuff that&rsquo;s being done with the Dribbble API. And the aforementioned side project with Mattt-sensei is based on one or more of these APIs and will hopefully deploy soon.</p>
<p class="note">Skills += Gowalla API, Dribbble API, Infochimps API</p>
</section>
<section class="section">
<h3>OAuth</h3>
<p>Playing around with the <a href="http://gowalla.com/api">Gowalla API</a>, led directly into using their OAuth service for checkins.  And on another top secret side project, I played around with Twitter and Facebook Auth using the <a href="http://icelab.com.au/articles/welcome-to-the-omnisocial/">Omnisocial gem</a>.  It&rsquo;s tops!</p>
<p class="note">Skills += Gowalla OAuth, Omnisocial Gem</p>
</section>
<section class="section">
<h3>Mobile Web Design/Development</h3>
<p>Starting in March with the annual <a href="http://sxsw.austintownhall.com/m">Austin Town Hall SXSW Free Show Guide</a>, I started shifting a lot of my focus to mobile web development.  Then the iPad came out and I released <a href="http://themanyfacesof.com/games/goonies/">a touch-based mobile web app board game for The Many Faces Of</a>.</p>
<p class="note">Skills += jQTouch, jQueryMobile, Touch Events, Mobile Web Apps</p>
</section>
<section class="section">
<h3>iOS App Development</h3>
<p>Without spilling the beans too much, I&rsquo;m working on an iPhone app that&rsquo;s pretty good, especially with the help of Paravel+Mattt. I&rsquo;m still challenged by Objective-C so it&rsquo;ll be slow goings, but hopefully I&rsquo;ll  be able to focus more time on that in the near, near future.</p>
<p class="note">Skills += iOS, Objective-C, XCode, Interface Builder</p>
</section>
<section class="section">
<h3>Miscellaneous Buzzwords</h3>
<p>One-day tangent projects also allowed me to pick up a few more miscellaneous skills. Most self-impressing, I made a <a href="http://dribbble.com/shots/6578-RuPorter-final-">label for my homebrew</a> and now I can use Illustrator now without feeling like a total dweeb.</p>
<p class="note">Skills += MongoDB, Node.js, Adobe Illustrator, WordPress Custom Post Types, Tumblr Themes</p>
</section>
<section class="section">
<h3>These 40 Things I Learned</h3>
<p>Let me reiterate: <strong>These 40 things are a result of doing side projects</strong>. Naturally, these skills are transferring over to Paravel&#8217;s client work as well. Side projects are adding value to me, the employee, as well as my company. But don&#8217;t take my word for it, just <a href="http://trentwalton.com/2010/10/28/keep-on-learning/">read the words of my own boss and check-writer, Trent Walton</a>:</p>
<blockquote><p>As a boss, I know that learning through experimentation and exploration makes my employees more valuable.  As a worker, I know that if I&rsquo;m going to have a job in this industry next year I&rsquo;d better learn something new.</p></blockquote>
<p>Side projects haven&#8217;t kept us from doing business, they&#8217;ve kept us from doing &#8220;business as usual&#8221;.  They&#8217;ve kept us from growing stale in an ever-changing webscape. Not to mention the intellectual stimulation in regards to learning new things. I&#8217;m not talking about levitating things with my brain, but almost. I&#8217;m more engaged day-to-day in my current job than I have been in any other job I&#8217;ve had in my life.</p>
<p>The Japanese have a word that literally means working yourself to death, &#8220;karoushi&#8221; (過労死). Don&#8217;t do that. Be responsible with your mental health and your relationships. I feel morally obliged to mention this.</p>
<p>In the same serious tone, don&#8217;t underestimate how beneficial side projects are to employees as well as employers.  I&#8217;ve benefitted both professionally and personally by spending time working on stuff (web apps, podcasts, etc) that I enjoy. Keyword: &#8220;enjoy&#8221;.</p>
<p class="note">Lastly, I&#8217;d like to thank my wife for being patient with me when I&#8217;m on the computer because I often lose basic husband skills like being attentive. <3</p>
</section>
]]></content:encoded>
			<wfw:commentRss>http://daverupert.com/2010/12/40-things-i-learned-from-side-projects/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Lettering.JS</title>
		<link>http://daverupert.com/2010/09/lettering-js/</link>
		<comments>http://daverupert.com/2010/09/lettering-js/#comments</comments>
		<pubDate>Tue, 14 Sep 2010 16:17:33 +0000</pubDate>
		<dc:creator>davatron5000</dc:creator>
				<category><![CDATA[Articles]]></category>

		<guid isPermaLink="false">http://daverupert.com/?p=763</guid>
		<description><![CDATA[Web Typography is exploding all over the web. We developed a lightweight, easy to use jQuery plugin for radical Web Typography.]]></description>
			<content:encoded><![CDATA[<p id="update">Oh wow! Lettering.JS now has  it&#8217;s own website with a little mini-gallery.<br/><a href="http://letteringjs.com">Check it out</a> to see how other people are using it.</p>
<p><a href="http://paravelinc.com">Paravel</a> has just wrapped up an exciting <a href="http://dribbble.com/search?q=operation+condor" target="_blank">secret project</a> with three of the web&#8217;s most talented designers: <a href="http://jasonsantamaria.com">Jason Santa Maria</a>, <a href="http://frankchimero.com">Frank Chimero</a>, and <a href="http://weightshift.com">Naz Hamid</a>. These designs are epic, like 18,123px epic. Working with these guys was a complete joy. There were a few fun development challenges and &#8211; as you might expect from these gentlemen &#8211; a lot of fancy typography work in the delivered PSDs.</p>
<p>Before <a href="http://trentwalton.com">Trent</a> and I marked up the designs, we noticed that in many instances we would need to style individual letters. We decided we&#8217;d need a system to keep our markup maintainable. Something agile enough that a text change wouldn&#8217;t ruin us. Our solution was to call upon the power of Javascript to insert some easy to remember <code>span</code> tags.</p>
<h3>Individual Letter Control with Lettering.js</h3>
<p>We developed a really simple, lightweight, easy to use jQuery plugin, we&#8217;re calling it &#8220;Lettering Dot JS&#8221;, and we&#8217;re releasing it today for free over <a href="http://github.com/davatron5000/Lettering.js">on Github</a>. Let me demo it for you: <code>&lt;/stevejobs&gt;</code></p>
<p>We&#8217;ll start with some really basic markup:</p>
<pre><code>&lt;h1 class=&quot;fancy_title&quot;&gt;Some Title&lt;/h1&gt;</code></pre>
<p>After including jQuery, <a href="http://github.com/davatron5000/Lettering.js/downloads">download and include the minified version of Lettering.js</a>, then a script block:</p>
<pre><code>&lt;script src=&quot;path/to/jquery-1.4.2.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;path/to/jquery.lettering.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;
$(document).ready(function() {
&nbsp;&nbsp;$(&quot;.fancy_title&quot;).lettering();
});
&lt;/script&gt;</code></pre>
<p>The resulting code will churn your <code>.fancy_title</code> and output the following:</p>
<pre><code>&lt;h1 class=&quot;fancy_title&quot;&gt;
  &lt;span class=&quot;char1&quot;&gt;S&lt;/span&gt;
  &lt;span class=&quot;char2&quot;&gt;o&lt;/span&gt;
  &lt;span class=&quot;char3&quot;&gt;m&lt;/span&gt;
  &lt;span class=&quot;char4&quot;&gt;e&lt;/span&gt;
  &lt;span class=&quot;char5&quot;&gt;&lt;/span&gt;
  &lt;span class=&quot;char6&quot;&gt;T&lt;/span&gt;
  &lt;span class=&quot;char7&quot;&gt;i&lt;/span&gt;
  &lt;span class=&quot;char8&quot;&gt;t&lt;/span&gt;
  &lt;span class=&quot;char9&quot;&gt;l&lt;/span&gt;
  &lt;span class=&quot;char10&quot;&gt;e&lt;/span&gt;
&lt;/h1&gt;
</code></pre>
<p>Magical. Now the text is easy to manipulate in your CSS using an ordinal <code>.char#</code> pattern.  This plugin assumes basic counting skills, but it&#8217;s a pretty fast and easy way to get control over every letter.</p>
<p>As you can imagine, it would be a pain in the ass to have all those spans littering your markup and a nightmare to maintain. If the client came by the next day and said that the SEO Expert demands that you have to change the title to &#8220;Cool Title&#8221;, it&#8217;d just be a matter of changing the original clean markup to:</p>
<pre><code>&lt;h1 class=&quot;fancy_title&quot;&gt;Cool Title&lt;/h1&gt;</code></pre>
<p>It also plays nicely with CMSs like WordPress or Expression Engine and art direction plugins.</p>
<h3>Wrap Words with Lettering.js</h3>
<p>Once we developed this e-solution and played with it, we found it useful enough to broaden the scope so that we could break apart and wrap words in a sentence in a <code>span</code> tag.</p>
<p>Here&#8217;s an example of the .lettering(&#8216;words&#8217;) method:</p>
<pre><code>&lt;p class=&quot;word_split&quot;&gt;Don&#x27;t break my heart.&lt;/p&gt;

&lt;script&gt;
$(document).ready(function() {
&nbsp;&nbsp;$(".word_split").lettering('words');
});
&lt;/script&gt;</code></pre>
<p>Which will generate:</p>
<pre><code>&lt;p class=&quot;word_split&quot;&gt;
  &lt;span class=&quot;word1&quot;&gt;Don&#x27;t&lt;/span&gt;
  &lt;span class=&quot;word2&quot;&gt;break&lt;/span&gt;
  &lt;span class=&quot;word3&quot;&gt;my&lt;/span&gt;
  &lt;span class=&quot;word4&quot;&gt;heart.&lt;/span&gt;
&lt;/p&gt;
</code></pre>
<p>You can then style each word using the <code>.word#</code> class.</p>
<h3>Wrap Lines with Lettering.js</h3>
<p>Once word wrapping was complete, noticed the need for yet another method, one that would break lines up mid-sentence.  We struggled for a semantic way to do this, but then remembered <code>&lt;br&gt;</code> tag which a semantic way to say &#8220;break this line&#8221;.  Similar to the above examples where lines of text are broken up by either non-breaking spaces or individual letters, the <code>lettering('lines')</code> method will create breakpoints at <code>&lt;br&gt;</code>  tags:</p>
<pre><code>&lt;p class=&quot;line_split&quot;&gt;Are you&lt;br/&gt; ready to&lt;br/&gt; RUMmMmMMBBLE!&lt;/p&gt;

&lt;script&gt;
$(document).ready(function() {
&nbsp;&nbsp;$(".line_split").lettering('lines');
});
&lt;/script&gt;</code></pre>
<p>Resulting code:</p>
<pre><code>&lt;p class=&quot;line_split&quot;&gt;
  &lt;span class=&quot;line1&quot;&gt;Are you&lt;/span&gt;
  &lt;span class=&quot;line2&quot;&gt;ready to&lt;/span&gt;
  &lt;span class=&quot;line3&quot;&gt;RUMmMmMMBBLE!&lt;/span&gt;
&lt;/p&gt;
</code></pre>
<h3>Kern Well</h3>
<p>If you&#8217;re going through the trouble to load a fancy font and that word or phrase is the largest on the site, then it&#8217;s important for it to be kerned well. With Lettering.js, kerning is a breeze. You can simply use <code>$("#id-of-what-i-want-to-kern").lettering();</code> and then on each <code>.char#</code>, you can set relative position or left/right margin. Works like a charm.</p>
<h3>Best Practices</h3>
<p>We&#8217;ve found this to be a pretty quick and elegant solution to create <a href="http://trentwalton.com/css3/type/">typographical CSS3 posters</a>. It&#8217;s also a great solution for really custom type headings, while keeping the text selectable.</p>
<p>Be smart and use sparingly. You&#8217;ll probably break your browser if you try to tried to do wrap every letter on your page in a span tag, so don&#8217;t do that. Look to use this in your Headings, Blockquotes, Asides, etc.</p>
<h4>Non-Javascript Fallback</h4>
<p>As with any kind of Javascript, have a fall back plan in case the user doesn&#8217;t have javascript enabled. The bottom line is up to you, my bottom line would be &#8220;legible and on the screen&#8221;. Also, use <code>lettering.min.js</code>: <a href="http://github.com/davatron5000/Lettering.js/downloads">Download the minified version of Lettering.js here</a>.</p>
<h4>Performance Anti-Pattern</h4>
<p>Web performance patterns advise that you put Javascripts at the bottom of your page before your <code>&lt;/body&gt;</code> tag.  There is an unfortunate side effect where you may experience a <a href="http://paulirish.com/2009/fighting-the-font-face-fout/">FOUT (Flash of Unstyled Text)</a> when you&#8217;re manipulating your text after the DOM has loaded. Unfortunately, we found the best solution to avoid/minimize the FOUT caused by this plugin is to put your scripts (jQuery, Lettering.js) in the document <code>&lt;head&gt;</code>. On the one hand, your page will load slower. On the other hand, a flash/restyling makes your site feel slow. Users might ultimately feel the site is faster if they don&#8217;t see the FOUT.</p>
<h3>Download, Fork, Commit, Please.</h3>
<p>We really want Lettering.js to be a quality helper for web typography. If you have any feedback or suggestions, please leave those over on the Github. We&#8217;re excited about typography on the web and want to help make it print quality.</p>
<p><a class="download" href="http://github.com/davatron5000/Lettering.js/downloads">Download the Plugin here.</a></p>
<p><em>Thanks to <a href="http://paulirish.com">Paul Irish</a> for code review!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://daverupert.com/2010/09/lettering-js/feed/</wfw:commentRss>
		<slash:comments>67</slash:comments>
		</item>
		<item>
		<title>Web Performant WordPress</title>
		<link>http://daverupert.com/2010/06/web-performant-wordpress/</link>
		<comments>http://daverupert.com/2010/06/web-performant-wordpress/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 16:32:24 +0000</pubDate>
		<dc:creator>davatron5000</dc:creator>
				<category><![CDATA[Articles]]></category>

		<guid isPermaLink="false">http://daverupert.com/?p=762</guid>
		<description><![CDATA[or... How I Increased My WordPress Performance and Got My Page Loads to Under 1 Second.]]></description>
			<content:encoded><![CDATA[<div class="section">
<p>In January, I interviewed <a href="http://blog.getify.com">Kyle Simpson</a> on <a href="http://atxwebshow.com/archives/157/episode-4-googles-make-the-web-faster-with-getify">Episode 4 the ATX Web Show</a>. We discussed Web Performance and Google&#8217;s plan to <a href="http://code.google.com/speed/">&#8220;Make the Web Faster&#8221;</a>.  Since then, Google has announced they will start rewarding your site&#8217;s page speed. And in their <a href="http://google.com/webmasters/tools">Webmaster Tools</a> they hint that <strong>the bar is set at ~1.4 seconds</strong>.</p>
<p class="note" id="eightypa">80% of the time users wait for a web page is because of the frontend.</p>
<p>I was sort of thunderstruck with fear. Although we always strive for better, I typically found a 3-5 second page load great and up to 7 seconds acceptable.  After recording the show, I stayed up a few hours that night fiddling with The ATX Web Show and <strong>increased site performance by ~500%</strong><sup><a href="#fn1" class="fn">1</a></sup>.</p>
<p>Since seeing those results, I only think about Web Optimization. I see the web in milliseconds now.  If you&#8217;re like me and never considered optimization a necessity maybe now is the time to re-evaluate that. And don&#8217;t act like this isn&#8217;t your problem because 80% of the time users wait for a webpage is because of the frontend<sup><a href="#fn2" class="fn">2</a></sup>. The goal isn&#8217;t to fit under some imaginary kilobyte threshold, the goal is to make sure that everything is as small as possible. Reduce Filesizes, Reduce Requests, and Enable Caching.</p>
</div>
<h3>5 Steps to a Faster Website</h3>
<p>I documented the steps I took to increase my YSlow and Page Speed grades without getting into costly CDNs and such.  A lot of sites will tell you to just install a cache plugin.  And while you should do that (see Step 5), it&#8217;s important to do that <em>after you&#8217;ve optimized</em> or else you&#8217;re just <strong>polishing a turd</strong>, curing a symptom not the disease, putting lipstick on a pig or whatever analogy you want to use. Very little of this is WordPress specific so even you dweebs on Expression Engine can optimize your sites.</p>
<div class="section paddedbox alt">
<h3>Step 0: Install the Right Tools.</h3>
<ul class="iconized">
<li class="webkit"><a href="http://webkit.org/blog/197/web-inspector-redesign/">Webkit Web Inspector</a><br/>You&#8217;ll need to download <a href="http://google.com/chrome">Chrome</a> or <a href="http://apple.com/safari">Safari</a> and then enable Web Inspector. The Web Inspector&#8217;s Resources Panel has beautiful visualizations of your site&#8217;s page load waterfall and is enjoyable for benchmarking your progress after each step.</li>
<li class="firefox"><a href="http://getfirefox.com">Firefox</a><br/>If you don&#8217;t have this, you might be on the wrong website. You need this to install Firebug.</li>
<li class="firebug"><a href="http://getfirebug.com/">Firebug</a><br/>You should have this already, but you need this to install YSlow and Page Speed.</li>
<li class="yslow"><a href="http://developer.yahoo.com/yslow/">YSlow</a><br/>A Firebug plugin from Yahoo.  It ranks your page speed and gives you a grade on various critera.</li>
<li class="pagespeed"><a href="http://code.google.com/speed/page-speed/">Page Speed</a><br/>A Firebug plugin from Google. Page Speed is very similar to YSlow and will grade your site on various criteria and explain to you how you should improve. It&#8217;s my favorite of the two.</li>
<li class="webmastertools"><a href="http://google.com/webmasters/tools">Webmaster Tools</a><br/>If you have access, register your site with Webmaster Tools.  In the Labs &gt; Site Performance section, it will give a graph of your page load speeds recorded by Google over time.</li>
</ul>
</div>
<h3>Step 1: Minify &amp; Optimize Your CSS</h3>
<p>This is just a 3 step process and it&#8217;s here that I saw the majority of the site&#8217;s weight drop off. There&#8217;s about a 10% chance you&#8217;ll break something here.  If you&#8217;re uncomfortable take it slow, line by line, and refresh a lot.</p>
<h4>Minify CSS</h4>
<p>Open up Page Speed and click &#8220;Analyze Performance&#8221;. Find the section titled &#8220;Minify CSS&#8221;.  You will see download links for optimized versions of every CSS file your page calls.  Replace your bloated CSS with this.</p>
<p class="note">For WordPress, you&#8217;ll have to keep the theme declaration block at the top.</p>
<p>Unfortunately in the case of WordPress, most blogs rely on plugins which load their own assets that are rarely optimized. You may have to overwrite the CSS in some plugins. In a perfect world, WordPress plugins would come with pre-optimized assets.</p>
<p>This is maybe not advisable, but I hack into plugins and comment out the CSS and Javascripts they load.  I&#8217;d rather write my own CSS. Be prepared to do this after every plugin update.</p>
<h4>Learning Point: Don&#8217;t Over Qualify. Use Efficient CSS Selectors.</h4>
<p>I always assumed it was best practice to be explicit when writing CSS, but I was wrong. It&#8217;s called &#8220;Over Qualifying&#8221; and it&#8217;s more work for your browser to sort out. Unique classes and unique elements will win in the speed game.</p>
<pre class="brush: css;"><code>
  #header nav ul li a { ... }
  /* bad. 5 selectors is way too many. */

  ul.commentlist { ... }
  /* bad. too conjoined. */

</code></pre>
<pre class="brush: css;"> <code>
  #header a { ... }
  /* better. more direct. really nice. */

  .commentlist { ... }
  /* better. just the class selector should be specific enough. more agile too.*/

</code></pre>
<p>I covered this briefly, but Chris Coyier of CSS-Tricks has a great write up on  <a href="http://css-tricks.com/efficiently-rendering-css/">Efficiently Rendering CSS</a>.</p>
<div class="section paddedbox alt">
<h3>Post-Minify CSS Results</h3>
<p>I thought I was doing myself a favor making my CSS human readable, but it was adding an extra 180KB.  You can take it a step further and strip out unused classes, but I personally prefer having some generic classes in my stack (like tables).</p>
<table class="results">
<tr>
<td>&nbsp;</td>
<th>Total Size</th>
<th>Load Time</th>
</tr>
<tr>
<th>Pre-Minify</th>
<td>248.96KB</td>
<td>2.57s</td>
</tr>
<tr>
<th>Post-Minify</th>
<td>70.82KB</td>
<td>2.07s</td>
</tr>
</table>
</div>
<h3>Step 2: Smush &#038; Optimize Images</h3>
<p>Your images are too fat. Photoshop&#8217;s &#8220;Save for Web&#8221; is actually pretty good at optimizing, but there&#8217;s room for more. Your images have huge amounts of useless metadata that can be stripped out. This couldn&#8217;t be easier to fix. Here are some tools to smush your images.</p>
<ol class="iconized">
<li class="pagespeed">Page Speed gives you a lossless smushed version of each image that can be optimized! Save As&#8230; and upload.</li>
<li class="yslow">YSlow > Tools > All <a href="http://smush.it">Smush.it</a> &#8211; this will batch shrink the images on the page and maintain folder structure. It&#8217;s unbelievably convenient.</li>
<li class="imageoptim"><a href="http://imageoptim.pornel.net/">ImageOptim</a> is a great offline tool (for Mac) that you can batch run whole directories with. Any image you upload to the internet should go through this before you upload from now on.</li>
</ol>
<p>Sometimes you&#8217;ll see that you&#8217;re only saving 400B and you may think &#8220;What&#8217;s the point?&#8221; Pay attention to percentages. If an image can be 9% smaller, that means your users will get that image ~9% faster! Math.</p>
<p class="note warning">Be sure you make backups before you replace images or smush whole directories, just in case.</p>
<p class="note caution">If you use Adobe RGB color profiles for your images, some optimizers strip out the profile leaving you with a desaturated image. The Adobe RGB profile adds ~50KB+ and is intended for print. Use sRGB instead.</p>
<h4>Serve Properly Scaled Images</h4>
<p>This is pretty elementary.  Where you can, serve a 200x200px wide image instead of scaling down a 400x400px wide image to 200x200px. Larger images take longer to download and resizing takes longer to render in browser.</p>
<h4>Specify Image Dimensions</h4>
<p>I had grown accustom being non-committal about image dimensions, but Page Speed recommends that you specify image height and width because it&#8217;s less for the browser to sort out.  It gives you the rendered dimensions and you add that to your <code>&lt;img&gt;</code> tags.  Total time spent completing task: 2 minutes.</p>
<h4>SpriteMe</h4>
<p>Use sprites. Spend some time and figure it out. It can reduce tons on HTTP Requests and make your site even faster. Google performance guru, <a href="http://stevesouders.com/">Steve Souders</a>, created a tool called <a href="http://spriteme.org/">SpriteMe</a> that does this for you.  Install the bookmarklet, and click it on your homepage, then it&#8217;ll do the rest of the work.  It will pack up your sprited images, and give you some CSS to replace in your stylesheet. <strong>Skills Required: Math.</strong></p>
<div class="section paddedbox alt">
<h3>Post-Smush Image Results</h3>
<p>Most of my savings here were due to smushing my images.  You&#8217;ll see a direct correlation. 17% less kilobytes resulted in a 23% speed increase.</p>
<table class="results">
<tr>
<td>&nbsp;</td>
<th>Total Size</th>
<th>Load Time</th>
</tr>
<tr>
<th>Pre-Optimize</th>
<td>70.82KB</td>
<td>2.07s</td>
</tr>
<tr>
<th>Post-Optimize</th>
<td>54.66KB</td>
<td>1.60s</td>
</tr>
</table>
</div>
<h3>Step 3: Minify &#038; Optimize JS</h3>
<p><img src="http://daverupert.com/wp-content/uploads/2010/06/unicorn_3.gif" alt="unicorn_3" width="121" height="148" style="float:right; margin:-20px 0px 0px 10px;"/>Just like CSS, Page Speed gives download links for minified versions of your javascript right there in the window.  Grab the minified versions and drop them in your site. There&#8217;s, again, a 10% chance you&#8217;ll break something, but just take it slow and refresh often. And again, you might have break into plugins and comment out their swill.</p>
<h4>One JS Library to Rule Them All.</h4>
<p>If you&#8217;re loading in jQuery, Mootools, and Prototype, you&#8217;re doing something wrong.  These libraries have a lot of functional overlap so you&#8217;re basically repeating yourself over and over and wasting tons of bandwidth. Have a good hard look at your plugin stack. Find out which plugins are loading what library (use paper if you have to) and try to target a single library (*ahem* jQuery *ahem*).  Search for alternative plugins that use the your library of choice.</p>
<div class="section paddedbox alt">
<h3>Post-Minify JS Results</h3>
<p>Your results will vary. If you eliminated multiple JS libraries, you may see savings in the hundreds of KBs.</p>
<table class="results">
<tr>
<td>&nbsp;</td>
<th>Total Size</th>
<th>Load Time</th>
</tr>
<tr>
<th>Pre-Minify</th>
<td>54.66KB</td>
<td>1.60s</td>
</tr>
<tr>
<th>Post-Minify</th>
<td>39.28KB</td>
<td>1.53s</td>
</tr>
</table>
<p class="note">39KB is what I used to call a small image&#8230; but now, it&#8217;s a full website.</p>
</div>
<h3>Step 4: Enable Browser Cache &#038; GZIP in Apache with .htaccess</h3>
<p>This took me a long time to master. I was ignorant to its proper implementation, I googled around and found a few good resources.<a href="#fn3" class="fn"><sup>3</sup></a> If you&#8217;re on Apache (you probably are), add the following to your <code>.htaccess</code> file after your WordPress rules.  If it&#8217;s all gibberish to you, that&#8217;s fine. Basically it does the following:</p>
<ol>
<li>Detects mod_deflate and GZIPs various mime types.</li>
<li>Detects mod_expires and sets an expiration date for each type of asset.</li>
<li>Detects mod_headers and sets Browser Cache age limits for your assets.</li>
</ol>
<p><script src="http://gist.github.com/427761.js?file=webperformant.htaccess"></script></p>
<p>I&#8217;ve used this on about a dozen sites on a handful of hosts and had no problem.  It will simply ignore what it can&#8217;t support. If you see improvements, <a href="http://gist.github.com/427761">please comment over at GitHub</a>.</p>
<div class="section paddedbox alt">
<h3>Post-GZIP &#038; Browser Cache Results</h3>
<p>The browser is now taking the brunt of the load and storage and you&#8217;ll start feeling the snappiness. The browser isn&#8217;t re-downloading images on subsequent pages, like background images, since they already exist in its cache. You&#8217;ll notice in your Inspector that you&#8217;re page loads have less long lines and more short 0 byte blips because the file is being pulled from your browser cache.</p>
<p class="note caution">I did run into problems where GZIP showed true on <a href="http://www.gidnetwork.com/tools/gzip-test.php">GIDZipTest</a> &#038; <a href="http://www.whatsmyip.org/http_compression/">HTTP Compression Test</a> but false on Page Speed.  Page Speed eventually caught up, but I was unable to get a good metric.</p>
</div>
<h3>Step 5: WordPress Plugins for Performance</h3>
<p>Here are some plugins to install on our final step on the way to Web Performant WordPress. Like I said at the top of the article, <strong>don&#8217;t rely on plugins to fix your sloppy code and your poor craftsmanship</strong>.  Your site needs good bones. And your client deserves at least that.</p>
<h4>WP Minify</h4>
<p><a href="http://omninoggin.com/wordpress-plugins/wp-minify-wordpress-plugin/">WP Minify</a> is a great plugin that will combine and minify all your javascript files or all your CSS files. Basically, everything I told you to do in Steps 1 and 3. If you&#8217;re lazy and skipped that section and just came here, I&#8217;m sad for your clients.</p>
<p>I&#8217;ve found this great for serving minified CSS that I had to keep human readable in the theme.  As far as Javascript goes, it could be my problem but, I&#8217;ve never had a plugin successfully combine scripts and have them all still working in the end.  Try it!  If you&#8217;re able to squeeze all your javascript into one file successfully, I applaud you.</p>
<h4>WP Super Cache</h4>
<p>Now that your site is optimized, you&#8217;ll notice on your page load waterfall one of the longest part of your load is probably the first blue line, your HTML.  This is because your site is taking a huge roundtrip:</p>
<p class="note code">Client Request &rarr; WordPress Server &rarr; Database &rarr;  WordPress Server &rarr; Client</p>
<p>Turning on caching will take out that trip to the database.</p>
<p class="note code">Client Request &rarr; WordPress Server &rarr; Client</p>
<p>FASTER! It actually does quite a bit more but this is the simplified explanation.</p>
<p>I&#8217;ve found <a href="http://ocaoimh.ie/wp-super-cache/">WP Super Cache</a> to be wonderful for this and I highly recommend it.  It&#8217;s a bit of a pain to install as you have to grant temporary permission to some directories to write, add a line to your <code>wp-config.php</code>, and then add some more to your <code>.htaccess</code>.  There&#8217;s a 30% chance you&#8217;ll whitescreen your WordPress install, but just follow the directions and the end result is once you turn it on your visitors will be served HTML in milliseconds.</p>
<div class="section paddedbox alt">
<h3>Final Results</h3>
<p><em>Your results may vary</em>, but I promise you&#8217;ll be on your way to a better web experience for all your users.  It&#8217;s like The Biggest Loser for websites.  What took me 4 hours of googling, writing blog notes and roadblocks, could probably only take you under 1 hour.</p>
<table class="results" cellspacing="0">
<tr>
<td>&nbsp;</td>
<th>Total Size</th>
<th>Load Time</th>
</tr>
<tr>
<th>BEFORE</th>
<td>248.96KB</td>
<td>2.57s</td>
</tr>
<tr>
<th>AFTER</th>
<td>~36KB</td>
<td>796ms</td>
</tr>
</table>
<p class="note section">You are now one hour away from a better website. There&#8217;s no excuse to not be doing this.</p>
</div>
<div id="footnotes" class="small">
<p><a name="fn1" class="fn"><sup>1</sup></a> My stats here are based on the old version of the ATX Web Show. I&#8217;ll be optimizing the new version soon :)</p>
<p><a name="fn2" class="fn"><sup>2</sup></a> From the Yahoo! Developer Network Blog:</p>
<ul style="margin-bottom:0px;">
<li><a href="http://developer.yahoo.net/blog/archives/2007/03/high_performanc.html">http://developer.yahoo.net/blog/archives/2007/03/high_performanc.html</a></li>
</ul>
<p><a name="fn3" class="fn"><sup>3</sup></a> Resources that I found beneficial to my Apache .htaccess research:</p>
<ul>
<li><a href="http://www.thejackol.com/htaccess-cheatsheet/">http://www.thejackol.com/htaccess-cheatsheet/</a></li>
<li><a href="http://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/#per7">http://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/#per7</a></li>
<li><a href="http://www.crucialwebhost.com/blog/htaccess-apache-and-rewrites-oh-my/">http://www.crucialwebhost.com/blog/htaccess-apache-and-rewrites-oh-my/</a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://daverupert.com/2010/06/web-performant-wordpress/feed/</wfw:commentRss>
		<slash:comments>112</slash:comments>
		</item>
		<item>
		<title>Fuck Yeah Mobile Web</title>
		<link>http://daverupert.com/2010/06/fuck-yeah-mobile-web/</link>
		<comments>http://daverupert.com/2010/06/fuck-yeah-mobile-web/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 18:31:04 +0000</pubDate>
		<dc:creator>davatron5000</dc:creator>
				<category><![CDATA[Articles]]></category>

		<guid isPermaLink="false">http://daverupert.com/?p=749</guid>
		<description><![CDATA[The mobile web is a big freaking deal. Here are some current Mobile Web trends as of June 2010.]]></description>
			<content:encoded><![CDATA[<table cellspacing="0" id="statsTable">
<tbody>
<tr class="top">
<td id="num1" class="num">8x</td>
<td class="stat">Mobile internet adoption has outpaced desktop internet adoption by eight times. <sup><a href="http://www.morganstanley.com/institutional/techresearch/internet_ad_trends102009.html" target="_blank">#</a></sup></td>
</tr>
<tr>
<td id="num2" class="num">1.03M</td>
<td class="stat">1.03 million touch screen phones sold per day in 2009. <sup><a href="http://www.mobile-ent.biz/news/37197/376m-touchscreen-phones-shipped-in-2009" target="_blank">#</a></sup>												 </td>
</tr>
<tr>
<td id="num3" class="num">100k</td>
<td class="stat">100,000 Android phones activated per day in May 2010.<sup><a href="http://techcrunch.com/2010/05/20/android-numbers/" target="_blank">#</a></sup>												 </td>
</tr>
<tr>
<td id="num4" class="num">2011</td>
<td class="stat">Smartphone sales will surpass worldwide PC sales by the end of 2011 .<sup><a href="http://www.pcworld.com/article/171380/" target="_blank">#</a></sup>					 </td>
</tr>
<tr>
<td id="num5" class="num">1B</td>
<td class="stat">Heavy mobile data users are projected to triple to one billion by 2013. <sup><a href="http://www.morganstanley.com/institutional/techresearch/internet_ad_trends102009.html" target="_blank">#</a></sup>			 </td>
</tr>
<tr>
<td id="num6" class="num">32B</td>
<td class="stat">Mobile Apps will be a 32 billion dollar industry in 2015. <sup><a href="http://www.readwriteweb.com/archives/mobile_apps_to_hit_32_million_in_five_years.php" target="_blank">#</a></sup></td>
</tr>
</tbody>
</table>
<p id="footnote">Disclaimer: Most of these stats are from Luke Wroblewski <a href="http://www.lukew.com/ff/entry.asp?933" target="_blank">http://www.lukew.com/ff/entry.asp?933</a></p>
<h3>Design &#038; Development on the Mobile Web</h3>
<p>I usually don&rsquo;t usually sit around and ponder &ldquo;The Mobile Web&rdquo;, but about two weeks ago I accidentally inundated myself with multiple talks about it from two separate podcasts.  Because of that, the Mobile Web has a growing market share in my brain space.</p>
<p>First was <a href="http://yayquery.com/">John Resig on yayQuery</a> and second was <a href="http://5by5.tv/bigwebshow/6">Luke Wroblewski on The Big Web Show</a>. I encourage you to tune in and listen to each of these episodes, although each episode leans towards a different end of the Design/Development spectrum they combine to help paint a larger picture of the challenges and limitations of the mobile web.</p>
<p>I should state upfront that I&rsquo;m not going to propose any solutions or announce a new <a href="http://www.youtube.com/watch?v=Z9rD4Paq0zE" target="_blank">biz-dev-mobile-social-strategy</a> on behalf of <a href="http://paravelinc.com">Paravel</a>. If we had it my way, the whole world would convert to Webkit and we&rsquo;d be mostly done with all the cross browser crap, but that&rsquo;s not reality.  I just want to share a mini-roundup of what my mindgrapes are soaking in.</p>
<h3>The Design Point of View</h3>
<p><a href="http://5by5.tv/bigwebshow/6">Episode 6 of The Big Web Show</a> is a must listen.  Luke Wroblewski shares his &ldquo;<a href="http://www.lukew.com/ff/entry.asp?933">Mobile First</a>&rdquo; mantra, which is the idea that if you design for the mobile platform first, you can end up with a superior product.</p>
<p>In terms of design, the mobile web presents us with some challenging limitations:</p>
<h4>Size Matters</h4>
<p><img src="http://daverupert.com/wp-content/uploads/2010/06/mobile-shrink.png" alt="Shrink" class="alignright"/> Designing a website on 1024&#215;768 is completely different than designing on 320&#215;480.  And now with the iPhone 4 in the mix, there&#8217;s a rogue 960&#215;640 resolution floating around&#8230; and that&#8217;s just iPhones.  Devices vary in dimensions and although devices are squeezing more and more pixels in the screen there&#8217;s still limited real estate.</p>
<h4>Touch</h4>
<p><img src="http://daverupert.com/wp-content/uploads/2010/06/mobile-touch.png" alt="Touch" class="alignright"/> Touch brings about a few design challenges. Most importantly is the lack of :hover.  Avoid relying heavily on :hover.  Fat fingers are less accurate than 1px mouse pointers so things that are clickable need to be big, occupying more precious real estate. While touch-interfaces are gaining popularity, the majority of smartphones are non-touch.</p>
<h4>Gestures and Multitouch</h4>
<p><img src="http://daverupert.com/wp-content/uploads/2010/06/mobile-gesture.png" alt="Gestures" class="alignright"/> In terms of interface design, there&#8217;s the added issue of multitouch versus non-multitouch.  Gestures for each touch-enabled platform are different.  On iPhone you tap and squeeze and swipe, on WebOS you fling, on Android you have some menu buttons in the mix. For more information, <a href="http://www.lukew.com/ff/entry.asp?1071">read Luke Wroblewski&rsquo;s report on Multitouch Gestures</a>.</p>
<h4>Limited Bandwidth</h4>
<p><img src="http://daverupert.com/wp-content/uploads/2010/06/mobile-bars.png" alt="Cell Phone Bars" class="alignright"/> If a mobile user waits too long, they will hit the BACK button and you lose them forever. Limited mobile bandwidth sends us back to the days where every kilobyte counts.  Any website, especially a mobile version, needs to be lightweight and heavily optimized.  Be fast by default.</p>
<h4>Limited Battery Life</h4>
<p><img src="http://daverupert.com/wp-content/uploads/2010/06/mobile-battery.png" alt="Battery" class="alignright"/> Almost a development concern, but it should be noted HTTP Requests are the biggest cause for battery drain.  And since caching on mobile is minimal at best, you will likely load assets each page load.  Designs should bear this in mind and be lightweight.</p>
<p>When you design for mobile, you are immediately faced with the challenges of ripping out all the stuff that doesn&rsquo;t matter and forced to provide the most basic actions.  Although a daunting task, there&rsquo;s an optimistic side.  As mentioned in the podcast, the mobile versions of some big websites (<a href="http://www.facebook.com/iphone">Facebook for iPhone</a>, <a href="http://m.flickr.com">Flickr</a>, <a href="http://m.godaddy.com">GoDaddy</a>) are actually better than their giant counterparts because they offer a simplified user experience.  So in someways, it&rsquo;s a designer&rsquo;s dream to be able to put their foot down and say &ldquo;No, I will not make the logo bigger&rdquo; because it can&rsquo;t possibly be done.</p>
<p>There&rsquo;s a financial incentive, too. As shown by the facts at the top of this article, there&rsquo;s an ever increasing demand for mobile-compatible interfaces. This means that you have legitimate reasons to charge for such services. Mobile sites and native mobile apps are fast becoming a separate portal to businesses worldwide. </p>
<p>I am of the optimistic mindset that any good designer likes to design.  And good designers can design well even if given limitations like that of the mobile web.  The mobile web gives designers an exciting new horizon and potentially lucrative field to begin targeting their pixels with.</p>
<h3>The Developer Point of View</h3>
<p><img src="http://daverupert.com/wp-content/uploads/2010/06/mobilebrowsers.png" alt="" title="mobilebrowsers" class="alignright size-full wp-image-756" /></p>
<p>When <a href="http://ejohn.org">John Resig</a>, creator of jQuery, stopped by <a href="http://yayquery.com">the yayQuery podcast</a> I thought it was going to be better than freebasing crushed Fruit Loops.  Although it was a great show, my delight was turned into a the world&rsquo;s saddest sadface as Resig shared the ruthless, cold-hard facts about mobile development. <a href="http://vimeo.com/12166734">You need to watch and listen yourself</a>, and have your own private FML moment.</p>
<p><strong>The Mobile Web IS NOT just the iPhone</strong>. Depending on who you talk to, there are around 15-21 browsers that are in need of active support. In its simplified form there are 8 major browser platforms with each of them having multiple browser versions with differing capabilities, differing Javascript support, and different caching methods or no caching at all. This is so much worse than the IE6 problem, it&rsquo;s like having 15 IEs.</p>
<p>Information about these browsers is difficult to gather.  <a href="http://quirksmode.org">Peter-Paul Koch</a> ran <a href="http://quirksmode.org/m/table.html">some</a> <a href="http://quirksmode.org/m/css.html">comprehensive</a> <a href="http://quirksmode.org/m/w3c_cssom.html">tests</a> on CSS and Javascript support. <a href="http://ejohn.org/blog/how-do-mobile-browsers-behave/">Resig wrote a nice summary of PPK&rsquo;s behavior research over at his blog</a>, this is the best place on the internet to start learning about the various mobile browsers.</p>
<p>It&rsquo;s sobering to know your future enemy: twice as many major browsers, fractured browser share, unknown/poorly documented support, and the list goes on. Not to mention, the most important part of developing for a mobile device is actually holding it in your hands and seeing how it feels, interacts and responds.</p>
<p>There is some hope. There are native application compilers like <a href="http://www.phonegap.com/">PhoneGap</a> and <a href="http://www.appcelerator.com/">Appcelerator Titanium</a> which will take your HTML/CSS/JS and build native apps for most of the major platforms.  I&rsquo;ve heard nothing but good things and much excitement from developers using those platforms.  Also, the yet-to-be-released jQuery Mobile will help solve some of the browser inconsistencies.  So although there&#8217;s a light at the end of the tunnel, it&#8217;s a hard uphill road up ahead.</p>
<h3>Facepalm, Mobile Web.</h3>
<p>Like I said at the top of the article, I wish the whole world was Webkit, it would solve a lot of problems.  I&#8217;d even suggest setting a new standard for the word &#8220;smartphone&#8221; using the 2G iPhone as the base standard since it was the original game changer.  All other phones would be &#8220;dumbphones&#8221;.  But I dream a dream.</p>
<p>As far as the mobile web is concerned here in the now, I unbiasedly do believe that developing towards the Webkit (iOS, Android, and future Blackberry) platform is the safest bet as it&rsquo;s one of the fastest growing markets and possesses the least amount of HTML/CSS support headaches.  It&rsquo;s important to note, however, that webkit browsers are not the dominant browser so be prepared for your mobile site to degrade and still have to function on your boss&rsquo; old Blackberry.</p>
]]></content:encoded>
			<wfw:commentRss>http://daverupert.com/2010/06/fuck-yeah-mobile-web/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic (Feed is rejected)
Page Caching using disk: enhanced
Database Caching using disk: basic
Object Caching 803/887 objects using disk: basic

Served from: daverupert.com @ 2012-02-04 02:57:47 -->
