<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">

  <title><![CDATA[dmolsen.com]]></title>
  
  <link href="http://dmolsen.com/" />
  <updated>2013-04-18T10:12:33-04:00</updated>
  <id>http://dmolsen.com/</id>
  <author>
    <name><![CDATA[Dave Olsen]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/MobileInHigherEd" /><feedburner:info uri="mobileinhighered" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
    <title type="html"><![CDATA[Slides from my Responsive Web Design Summit talk, 'Measuring Web Performance']]></title>
    <link href="http://feedproxy.google.com/~r/MobileInHigherEd/~3/ql4PRIjgJmk/going-old-school-with-command-line-interfaces" />
    <updated>2013-04-06T10:00:00-04:00</updated>
    <id>http://dmolsen.com/2013/04/06/mobile-performance</id>
    <content type="html">&lt;p&gt;On Tuesday, April 16, 2013, I was lucky enough to give the opening talk on the web performance day of &lt;a href="http://www.rwdsummit.com/"&gt;RWD Summit&lt;/a&gt; presented by &lt;a href="http://environmentsforhumans.com"&gt;Environments for Humans&lt;/a&gt;. This is the short description for the talk:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Today, a web page can be delivered to desktop computers, televisions, or handheld devices like tablets or phones. While a technique like responsive design helps ensure that our web sites look good across that spectrum of devices we may forget that we need to make sure that our web sites also perform well across that same spectrum. More and more of our users are shifting their Internet usage to these more varied platforms and connection speeds with some moving entirely to mobile Internet.&lt;/p&gt;

&lt;p&gt;In this session we’ll look at the tools that can help you understand, measure and improve the web performance of your web sites and applications. The talk will also discuss how new server-side techniques might help us optimize our front-end performance. Finally, since the best way to test is to have devices in your hand, we’ll discuss some tips for getting your hands on them cheaply.&lt;/p&gt;

&lt;p&gt;This presentation builds upon Dave&amp;#8217;s &amp;#8220;Optimization for Mobile&amp;#8221; chapter in Smashing Magazine&amp;#8217;s &amp;#8221;&lt;a href="http://www.the-mobile-book.com/"&gt;The Mobile Book&lt;/a&gt;.&amp;#8221;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;So here is the deck embedded into the post for your convenience:&lt;/p&gt;

&lt;div class="slideshare-container"&gt;
&lt;div class="slideshare-embed"&gt;
&lt;iframe src="http://www.slideshare.net/slideshow/embed_code/18921979?rel=0" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen&gt; &lt;/iframe&gt; &lt;div style="margin-bottom:5px"&gt; &lt;strong&gt; &lt;a href="http://www.slideshare.net/dmolsenwvu/measuring-web-performance-18921979" title="Measuring Web Performance " target="_blank"&gt;Measuring Web Performance &lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href="http://www.slideshare.net/dmolsenwvu" target="_blank"&gt;Dave Olsen&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Questions about the deck? Want me to give this talk at your conference or meet-up? Check out &lt;a href="http://dmolsen.com/contact/"&gt;my contact info&lt;/a&gt; or hit me up at &lt;a href="http://twitter.com/dmolsen"&gt;@dmolsen&lt;/a&gt; on &lt;a href="http://twitter.com"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=ql4PRIjgJmk:S44SMBr9EA0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=ql4PRIjgJmk:S44SMBr9EA0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?i=ql4PRIjgJmk:S44SMBr9EA0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=ql4PRIjgJmk:S44SMBr9EA0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MobileInHigherEd/~4/ql4PRIjgJmk" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://dmolsen.com/2013/04/06/going-old-school-with-command-line-interfaces</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[Going Old School With Command Line Interfaces for Managing Your Web Apps]]></title>
    <link href="http://feedproxy.google.com/~r/MobileInHigherEd/~3/ql4PRIjgJmk/going-old-school-with-command-line-interfaces" />
    <updated>2013-04-06T10:00:00-04:00</updated>
    <id>http://dmolsen.com/2013/04/06/command-line</id>
    <content type="html">&lt;p&gt;My last few projects for &lt;a href="http://www.wvu.edu"&gt;West Virginia University&lt;/a&gt; have been super simple. In order to keep the back-end management of the projects simple as well I&amp;#8217;ve started writing command line interfaces as opposed to web-based ones. My interest in using command line tools is based on the work I did with the &lt;a href="https://github.com/tobie/ua-parser/tree/master/php"&gt;PHP library for ua-parser&lt;/a&gt;. For that project I wanted to give developers a simple way to cron out updates to the &lt;code&gt;regexes.yaml&lt;/code&gt; file. It seemed natural for me to take that experience and use it in my day-to-day work.&lt;/p&gt;

&lt;h2&gt;The Benefits of Moving to the Command Line&lt;/h2&gt;

&lt;p&gt;Moving to command line interfaces for these projects has given me four wins:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A lot less code.&lt;/strong&gt; Authentication code? Gone. Templates? Nuked. SSL-enabled hostnames? Don&amp;#8217;t have to worry about it. All of the cruft that is needed to host a secure admin web interface doesn&amp;#8217;t have to be written. It&amp;#8217;s faster to get up and running as well as faster to modify.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Simpler security.&lt;/strong&gt; The security model now becomes one of access to the server and file.  The important caveat here being that your command line utility should be outside of the document root for your website.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better documentation.&lt;/strong&gt; Because the interface consists of flags (&lt;em&gt;e.g.&lt;/em&gt; &lt;code&gt;-f&lt;/code&gt;) I have to make sure I provide help documentation in case anyone else needs to use them. It also helps me since I forget them after a while too. The makes for a better solution all around.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cron-friendly.&lt;/strong&gt; Because the interfaces are written to be accessed and report to the command line it makes it very easy to cron reports and functionality (&lt;em&gt;e.g. getting an updated file from a remote server each day&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;The Downside to Moving to the Command Line&lt;/h2&gt;

&lt;p&gt;&amp;#8220;&lt;em&gt;But,&lt;/em&gt;&amp;#8221; you might ask, &amp;#8221;&lt;em&gt;don&amp;#8217;t you become a bottleneck for administering these projects?&lt;/em&gt;&amp;#8221; I think the natural assumption is that now I can&amp;#8217;t easily hand off responsibility to anyone else. My experience in the past has been that clients won&amp;#8217;t, for the most part, take responsibility if they can avoid it anyway. Regardless, the people who would need to pick up the project all have access to the servers so no one is actually locked out. Also, with the documentation built-in hopefully it&amp;#8217;s straightforward for them to address any issues.&lt;/p&gt;

&lt;p&gt;That said, if you&amp;#8217;re the one and only one who has access to the server or you keep the tool local then, yes, you will be a bottleneck. Understand if the trade-off is worth it.&lt;/p&gt;

&lt;h2&gt;A Simple Command Line Utility Example Written in PHP&lt;/h2&gt;

&lt;p&gt;The following is a simple example of what a command line tool might look like if it were built with PHP. By the way, this is one place where I think PHP really excels but lots of frameworks come with similar tools. You could also make your command line tool even more interactive (&lt;em&gt;e.g. ask yes/no questions or similar&lt;/em&gt;) but I didn&amp;#8217;t cover that in the example. See the &lt;a href="https://gist.github.com/dmolsen/5326548"&gt;example on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;script src="https://gist.github.com/dmolsen/5326548.js"&gt;&lt;/script&gt;



&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=ql4PRIjgJmk:mMkZVqP_twI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=ql4PRIjgJmk:mMkZVqP_twI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?i=ql4PRIjgJmk:mMkZVqP_twI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=ql4PRIjgJmk:mMkZVqP_twI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MobileInHigherEd/~4/ql4PRIjgJmk" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://dmolsen.com/2013/04/06/going-old-school-with-command-line-interfaces</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[Generating an Access Token for Instagram]]></title>
    <link href="http://feedproxy.google.com/~r/MobileInHigherEd/~3/EmU-4br0YJA/generating-access-tokens-for-instagram" />
    <updated>2013-04-05T10:00:00-04:00</updated>
    <id>http://dmolsen.com/2013/04/05/instagram</id>
    <content type="html">&lt;p&gt;One of the hotter social networks in higher education is &lt;a href="http://instagram.com"&gt;Instagram&lt;/a&gt;. As a developer you might find yourself needing to pull photos into a website using Instagram&amp;#8217;s API like we did when we recently added Instagram photos to our central social networking website, &lt;a href="http://connect.wvu.edu"&gt;Connect with WVU&lt;/a&gt;. As with many APIs Instagram requires authentication to access many of its end-points. This is fine but unfortunately the service makes the assumption that you are going to access the end-points on behalf of a particular user that has had the opportunity to give an application permission to access their information. This isn&amp;#8217;t always the case. Especially when you simply want to access the service to pull your own user&amp;#8217;s information via a small script.&lt;/p&gt;

&lt;h2&gt;Our Set-up&lt;/h2&gt;

&lt;p&gt;In our situation we have a social network data collection service that queries the Instagram API every 10 minutes to get the latest photos that have been posted to our WestVirginiaU account. The info is saved to a SQLite database. When users hit &lt;a href="http://connect.wvu.edu/"&gt;connect.wvu.edu&lt;/a&gt; a request is made to this service to retrieve the latest information (&lt;em&gt;along with Facebook, Twitter, Google+, YouTube and foursquare data&lt;/em&gt;) from the SQLite database.&lt;/p&gt;

&lt;p&gt;The trick is that the service simply needs to make requests as the primary account but has no way to login to authenticate and get an an access token for Instagram. A service like Twitter gets this particular use case correct in that they allow you to generate an access token via their developer admin. Instagram doesn&amp;#8217;t have this feature yet. Hopefully they add it. For now you can do the following.&lt;/p&gt;

&lt;h2&gt;Generating an Access Token for Instagram&lt;/h2&gt;

&lt;p&gt;Generating a token to be used in your application is actually fairly straightforward once you know the magical incantation. Just do the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write down the client ID, client secret, and redirect URI for the client you want to generate an access token for. You can find it on the &amp;#8220;Manage Clients&amp;#8221; panel in the &lt;a href="http://instagram.com/developer/"&gt;Instagram Developer&lt;/a&gt;&amp;#8217;s site.&lt;/li&gt;
&lt;li&gt;Visit the following address replacing the client ID and the redirect URI: &lt;script src="https://gist.github.com/dmolsen/5320629.js"&gt;&lt;/script&gt;&lt;/li&gt;
&lt;li&gt;When prompted choose &amp;#8220;Yes&amp;#8221; to authorize the app&lt;/li&gt;
&lt;li&gt;You&amp;#8217;ll be redirected to the redirect URI you supplied. At the end of the address you&amp;#8217;ll see a request variable called &lt;code&gt;code&lt;/code&gt;. Copy the value.&lt;/li&gt;
&lt;li&gt;Open Terminal (&lt;em&gt;or favorite command line tool&lt;/em&gt;). Copy and paste the following. Replace the appropriate values: &lt;script src="https://gist.github.com/dmolsen/5320637.js"&gt;&lt;/script&gt;&lt;/li&gt;
&lt;li&gt;Copy the access token from the returned JSON object.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;It should also be noted that the generated access token can still expire. It shouldn&amp;#8217;t expire in the near-term but &lt;strong&gt;it&amp;#8217;s not permanent&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=EmU-4br0YJA:9eJp35sPA9Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=EmU-4br0YJA:9eJp35sPA9Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?i=EmU-4br0YJA:9eJp35sPA9Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=EmU-4br0YJA:9eJp35sPA9Q:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MobileInHigherEd/~4/EmU-4br0YJA" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://dmolsen.com/2013/04/05/generating-access-tokens-for-instagram</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[Media Query-less Design, Content-based Breakpoints &amp; Tweakpoints]]></title>
    <link href="http://feedproxy.google.com/~r/MobileInHigherEd/~3/QiG0bjBYUWc/media-query-less-design-content-based-breakpoints-tweakpoints" />
    <updated>2013-03-05T10:00:00-05:00</updated>
    <id>http://dmolsen.com/2013/03/05/lessons-learned-design</id>
    <content type="html">&lt;p&gt;&lt;em&gt;This post is a follow-up to &lt;a href="http://dmolsen.com/2013/02/25/lessons-learned-static-performance-budget-sass-svg/"&gt;Lessons Learned Building the New dmolsen.com: Static, A Performance Budget, Sass &amp;amp; SVG&lt;/a&gt;. The previous post focused on my technical choices in the re-design of dmolsen.com. This post focuses on my design choices.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I had two popular quotes floating around in my head as I moved my design for the new &lt;a href="http://dmolsen.com"&gt;dmolsen.com&lt;/a&gt; from the sketchpad to the browser. The first quote was from Bryan Rieger (&lt;a href="https://twitter.com/bryanrieger"&gt;@bryanrieger&lt;/a&gt;):&lt;/p&gt;

&lt;blockquote class="twitter-tweet"&gt;&lt;p&gt;@&lt;a href="https://twitter.com/zomigi"&gt;zomigi&lt;/a&gt; the first media query is actually the absence of support for media queries.&lt;/p&gt;&amp;mdash; Bryan Rieger (@bryanrieger) &lt;a href="https://twitter.com/bryanrieger/status/142278827773657088"&gt;December 1, 2011&lt;/a&gt;&lt;/blockquote&gt;


&lt;script async src="http://dmolsen.com//platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;


&lt;p&gt;The second quote was from Stephen Hay (&lt;a href="https://twitter.com/stephenhay/"&gt;@stephenhay&lt;/a&gt;) (&lt;em&gt;sorry, I could only find Brad&amp;#8217;s version of the quote&lt;/em&gt;):&lt;/p&gt;

&lt;blockquote class="twitter-tweet"&gt;&lt;p&gt;start with the small screen first, then expand until it looks like shit. TIME FOR A BREAKPOINT! @&lt;a href="https://twitter.com/stephenhay"&gt;stephenhay&lt;/a&gt; &lt;a href="https://twitter.com/search/%23bdconf"&gt;#bdconf&lt;/a&gt;&lt;/p&gt;&amp;mdash; Brad Frost (@brad_frost) &lt;a href="https://twitter.com/brad_frost/status/191977076000161793"&gt;April 16, 2012&lt;/a&gt;&lt;/blockquote&gt;


&lt;script async src="http://dmolsen.com//platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;


&lt;p&gt;These two quotes led to the foundational design concepts that guided the implementation of the new layout. The first concept, &lt;strong&gt;that the site should work without media queries&lt;/strong&gt;, was surprisingly natural to implement. The second concept, &lt;strong&gt;that content alone would determine the layout&amp;#8217;s breakpoints,&lt;/strong&gt; has had a much larger influence on me than I expected. Both with regards to this particular layout as well as in how I think about and approach responsive design in general.&lt;/p&gt;

&lt;h2&gt;Media Query-less Design&lt;/h2&gt;

&lt;p&gt;It&amp;#8217;s become the norm to approach responsive design from a &amp;#8220;mobile layout first&amp;#8221; perspective. Essentially, your base styles should be the mobile ones and then you should work your way &amp;#8220;up&amp;#8221; towards desktop screen sizes via the use of media queries that incorporate &lt;code&gt;min-width&lt;/code&gt; rules.
I would argue that instead we should &lt;strong&gt;be working from the base styles for a design and then only use media queries to tweak those base styles at breakpoints&lt;/strong&gt;. This leads to an easy-to-understand progression of styles that either build on each other or only slightly modify each other. A small, Sass-ified example of this from my new layout:&lt;/p&gt;

&lt;script src="https://gist.github.com/dmolsen/5085356.js"&gt;&lt;/script&gt;


&lt;p&gt;&lt;noscript&gt;This gist is available at: &lt;a href="https://gist.github.com/dmolsen/5085356"&gt;https://gist.github.com/dmolsen/5085356&lt;/a&gt;&lt;/noscript&gt;&lt;/p&gt;

&lt;p&gt;For me this was a much more straightforward way of looking at my layout decisions. It&amp;#8217;s all the same layout regardless of viewport size but their may be some simple and minor variations.&lt;/p&gt;

&lt;p&gt;The other benefit of this style is that &lt;strong&gt;the media query itself becomes a feature test&lt;/strong&gt; by separating those browsers that might understand certain CSS properties versus older browsers that might not. So older IE support was essentially baked in based on approaching the whole layout as &amp;#8220;media query-less&amp;#8221;. IE and similar browsers have a layout that works but we can still use &amp;#8220;cooler&amp;#8221; CSS features without much fuss. Yes, Virginia, this is &lt;a href="http://alistapart.com/article/understandingprogressiveenhancement"&gt;progressive enhancement&lt;/a&gt;. It did highlight one area where &lt;code&gt;min-width&lt;/code&gt; based queries might not be usable though and that&amp;#8217;s &lt;em&gt;navigation&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I made liberal use of &lt;code&gt;nth-child()&lt;/code&gt; in the &lt;a href="https://github.com/dmolsen/dmolsen.com/blob/master/sass/partials/_navigation.scss"&gt;CSS for my navigation&lt;/a&gt; on smaller screen sizes. IE would choke on this so this is one area where I ended up using a media query with &lt;code&gt;max-width&lt;/code&gt;. So in this case the larger screen styles are set to the default and then pared &lt;em&gt;down&lt;/em&gt; based on breakpoint.&lt;/p&gt;

&lt;p&gt;Admittedly, I&amp;#8217;m working with a really simple two-column layout so my CSS should never get all that crazy. Even two-columns can cause their own issues when we decide to set breakpoints based on content though.&lt;/p&gt;

&lt;h2&gt;Content-based Breakpoints&lt;/h2&gt;

&lt;p&gt;For such a simple concept this decision was a surprisingly scary one to me. By their very nature fluid layouts mean that we must give up a certain amount of control but implementing breakpoints based on &lt;em&gt;device width&lt;/em&gt; returns a certain level of comfort or certainty. You can say to yourself:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;I&amp;#8217;m totally not going to use device detection but if I set my breakpoint at 768px my site will look like this on an iPad. No worries.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Trusting that your content will just happen to look acceptable everywhere based on simply flexing a browser window, marking breakpoints, and then using &lt;code&gt;ems&lt;/code&gt; (&lt;em&gt;not even &lt;code&gt;px&lt;/code&gt;&lt;/em&gt;) to describe breakpoints&amp;#8230; I had some trepidation to say the least.&lt;/p&gt;

&lt;p&gt;At the end of the process I found content-based breakpoints to be surprisingly liberating for three reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;One simple rule to decide breakpoints: line length.&lt;/strong&gt; Line length look a little short or long? Breakpoint. Otherwise things are kosher. There&amp;#8217;s even a &lt;a href="http://www.pearsonified.com/typography/"&gt;Golden Ratio Typography Calculator&lt;/a&gt; though I didn&amp;#8217;t use it.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Layout moves away from being fixed and focused at the page level and instead one must think in containers and sub-containers&lt;/strong&gt;. This leads to a lot of minor but important optimizations which seem to be picking up the name &amp;#8220;tweakpoints.&amp;#8221;&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Testing became sort of a joke&lt;/strong&gt; because the final layouts seemed to Just Work&amp;#8482;. Again, the caveats being that this is a simple layout and I had already employed my 50K budget so I didn&amp;#8217;t have to worry that much about performance.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The move from thinking about an overall layout to thinking about containers and sub-containers and their related tweakpoints is one of my more exciting take-aways from this project.&lt;/p&gt;

&lt;h2&gt;Tweakpoints&lt;/h2&gt;

&lt;p&gt;I&amp;#8217;m not the first to hit on this but I&amp;#8217;m glad the issue seems to be picking up ink these last few weeks. It&amp;#8217;s such a natural progression of the process. Mark Boulton (&lt;a href="https://twitter.com/markboulton"&gt;@markboulton&lt;/a&gt;), Ben Callahan (&lt;a href="https://twitter.com/bencallahan"&gt;@bencallahan&lt;/a&gt;), and Jeremy Keith (&lt;a href="https://twitter.com/adactio"&gt;@adactio&lt;/a&gt;) expand on this idea better than I can with &lt;em&gt;&lt;a href="http://www.markboulton.co.uk/journal/theinbetween"&gt;The In-Between&lt;/a&gt;&lt;/em&gt;, &lt;em&gt;&lt;a href="http://seesparkbox.com/foundry/there_is_no_breakpoint"&gt;There is No Breakpoint&lt;/a&gt;&lt;/em&gt;, and &lt;em&gt;&lt;a href="http://adactio.com/journal/6044/"&gt;Tweakpoints&lt;/a&gt;&lt;/em&gt; respectively.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;d like to highlight the primary example in which tweakpoints, or at least what &lt;em&gt;I&amp;#8217;m&lt;/em&gt; thinking of as tweakpoints, are used in this layout. The primary container for the page, &lt;code&gt;#main-container&lt;/code&gt;, has one breakpoint at &lt;code&gt;52.5em&lt;/code&gt;. Below that breakpoint the layout for the container is a single column and above that it&amp;#8217;s two column.&lt;/p&gt;

&lt;p&gt;&lt;img class="alone" src="http://dmolsen.com/wp-content/uploads/2013/container-graphic.png" alt="Showing the container positions" /&gt;&lt;/p&gt;

&lt;p&gt;The decision to break is driven primarily by the line length for the &lt;code&gt;.sidebar&lt;/code&gt; container. Once the length gets too short I drop it below &lt;code&gt;.content&lt;/code&gt;. Within the &lt;code&gt;.sidebar&lt;/code&gt; container though we have another layout decision. Now that the width is set to &lt;code&gt;100%&lt;/code&gt; the line length is too long and the image of the book awkwardly floats in a sea of grey.&lt;/p&gt;

&lt;p&gt;I couldn&amp;#8217;t do a ton about the overall line length but I could address the image. This, to me, is a tweakpoint. I&amp;#8217;m addressing a minor issue with a sub-container and tweaking the layout of content in that container only. In this case, the paragraph containing the book text gets floated left and the book image gets floated right. This only works for so long though. The line length gets too short again for the book text. Once that happens the sub-container is tweaked again and the text is again stacked at &lt;code&gt;31.25em&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img class="alone" src="http://dmolsen.com/wp-content/uploads/2013/sidebar-graphic.png" alt="Comparison of book layout on small and medium viewports" /&gt;&lt;/p&gt;

&lt;h2&gt;Wrapping It Up&lt;/h2&gt;

&lt;p&gt;As I&amp;#8217;ve said a few times, this isn&amp;#8217;t the most complicated layout on the planet but I do think some of the lessons learned here will help me as I tackle more complicated responsive projects. Content-driven layout can be quite the rabbit hole but I think the more you tweak simply based on a squishy browser window the less testing for specific devices you&amp;#8217;ll need. You can feel a little better that your content will go and flow in a predictable and usable fashion.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=QiG0bjBYUWc:caUGrCibbZ8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=QiG0bjBYUWc:caUGrCibbZ8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?i=QiG0bjBYUWc:caUGrCibbZ8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=QiG0bjBYUWc:caUGrCibbZ8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MobileInHigherEd/~4/QiG0bjBYUWc" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://dmolsen.com/2013/03/05/media-query-less-design-content-based-breakpoints-tweakpoints</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[Lessons Learned Building the New dmolsen.com: Static, A Performance Budget, Sass & SVG]]></title>
    <link href="http://feedproxy.google.com/~r/MobileInHigherEd/~3/VKDVLRGvjbI/lessons-learned-static-performance-budget-sass-svg" />
    <updated>2013-02-25T14:10:00-05:00</updated>
    <id>http://dmolsen.com/2013/02/25/lessons-learned-performance-budget-sass-svg</id>
    <content type="html">&lt;p&gt;Building off of my &lt;em&gt;&lt;a href="http://dmolsen.com/2013/02/25/a-re-introduction"&gt;Re-introduction&lt;/a&gt;&lt;/em&gt; post I wanted to share some of the things that I learned as I built the new, responsive edition of &lt;em&gt;dmolsen.com&lt;/em&gt;. I figure that my experience with doing this might provide some insight to other folks looking to integrate new techniques and technology into their own projects. The &lt;a href="https://github.com/dmolsen/dmolsen.com"&gt;source for the site is on GitHub&lt;/a&gt;. All projects start with requirements&amp;#8230;&lt;/p&gt;

&lt;h2&gt;Dropping WordPress &amp;amp; Going Static with Octopress&lt;/h2&gt;

&lt;p&gt;I&amp;#8217;ve been toying with the idea of dropping WordPress for a while. While it was easy to get up and running it never seemed like it was a good fit for me. It has to be updated constantly, the post editor is a serious pain in the ass, and it sucks down RAM. Between not really getting enough traffic to justify my RAM-driven hosting costs and the fact that the post creation process was more of a hinderance than a help I decided to make a big change with this redesign. Out went WordPress and in came old-school static HTML.&lt;/p&gt;

&lt;p&gt;One big plus of using a CMS like WordPress though is having the ability to use templates. To make sure I still had this feature I looked for a good static site generator. It would give me the flat files I wanted but, hopefully, make it easier to maintain my site. I finally settled on &lt;a href="http://octopress.org"&gt;Octopress&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To be clear, Octopress definitely has its own drawbacks. Upgrading &lt;a href="http://www.ruby-lang.org/en/"&gt;Ruby&lt;/a&gt; on my Mac was a serious headache and I&amp;#8217;m not a big fan of &lt;a href="http://liquidmarkup.org"&gt;Liquid-based templates&lt;/a&gt;. That said, I feel like I&amp;#8217;m back in control of every aspect of my site. I was able to quickly stub out my own templates and design. I can now write my posts in &lt;a href="http://daringfireball.net/projects/markdown/basics"&gt;Markdown&lt;/a&gt;, a format I love, and I can write whenever I have the desire too because the files are all local to my computer.&lt;/p&gt;

&lt;h2&gt;The 50K Performance Budget&lt;/h2&gt;

&lt;p&gt;The second major decision was setting my performance budget for the basic template for the site. Both Tim Kadlec (&lt;a href="https://twitter.com/tkadlec"&gt;@timkadlec&lt;/a&gt;) and Clearleft (&lt;a href="https://twitter.com/clearleft"&gt;@clearleft&lt;/a&gt;) have written on this topic recently. See &lt;em&gt;&lt;a href="http://timkadlec.com/2013/01/setting-a-performance-budget/"&gt;Setting a Performance Budget&lt;/a&gt;&lt;/em&gt; and &lt;em&gt;&lt;a href="http://clearleft.com/thinks/responsivedesignonabudget/"&gt;Responsive Design on a Budget&lt;/a&gt;&lt;/em&gt; respectively. This is a technique that our team had used for our 2011 responsive holiday card website (&lt;em&gt;sadly, it&amp;#8217;s is no longer online&lt;/em&gt;). The budget for that had been 100K. For this site I wanted it to be 50K. A very aggressive goal but, hey, why not?&lt;/p&gt;

&lt;p&gt;If you don&amp;#8217;t count web fonts the basic template easily fits within my 50K budget. My CSS, JavaScript, images, and mark-up only add up to 39K. Cut out Google Analytics and &lt;a href="http://get.gaug.es"&gt;Gaug.es&lt;/a&gt; and the page weight drops to 23K. Unfortunately, I&amp;#8217;m a sucker for web fonts. Because of my lack of design skills as well as the large blocks of text that naturally make up a blog I knew type was going to have to be an important visual component of my site.&lt;/p&gt;

&lt;p&gt;I ended up using two fonts, &lt;a href="http://www.google.com/webfonts/specimen/Roboto"&gt;Roboto&lt;/a&gt; and &lt;a href="http://www.google.com/webfonts/specimen/Roboto+Condensed"&gt;Roboto Condensed&lt;/a&gt;, that total 69K. Combining that number with the other assets the total weight for the basic template for my site ends up being around 109K.&lt;/p&gt;

&lt;p&gt;Did I blow my budget by including the fonts? Sure. &lt;strong&gt;But performance optimization is, like many things, a compromise.&lt;/strong&gt; The type face makes a huge difference, I think. The 50K goal was completely arbitrary and aggressive but having a tight ceiling made me think more critically about design and feature choices. In the future my performance budgets will also include things like total number of requests and a max time-to-document-ready threshold.&lt;/p&gt;

&lt;h2&gt;Sass is Snazzy&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://sass-lang.com"&gt;Sass&lt;/a&gt;, a CSS pre-processer, has blown up in our office. Between being baked into our new CMS, a &lt;em&gt;&lt;a href="http://buildresponsively.com"&gt;Build Responsively&lt;/a&gt;&lt;/em&gt; workshop, and the introduction of &lt;a href="http://incident57.com/codekit/"&gt;CodeKit&lt;/a&gt; it seems like everyone here is using it. I hadn&amp;#8217;t had the opportunity to use it but, since it is included as part of Octopress, I figured I&amp;#8217;d give it a whirl. &lt;strong&gt;I love it.&lt;/strong&gt; Here is how it helped me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Being able to have a large number of SCSS files &lt;a href="https://github.com/dmolsen/dmolsen.com/tree/master/sass/partials"&gt;organized by which region of the page the styles affected&lt;/a&gt; that get merged into one file in production made the whole process of remembering where styles were and tweaking them that much faster and easier.&lt;/li&gt;
&lt;li&gt; &lt;a href="http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#variables_"&gt;Variables&lt;/a&gt; meant that I could &lt;a href="https://github.com/dmolsen/dmolsen.com/blob/master/sass/_base.scss"&gt;tweak a breakpoint&lt;/a&gt; and be assured every element affected by the change would be updated.&lt;/li&gt;
&lt;li&gt; &lt;a href="http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#nested_rules"&gt;Nesting&lt;/a&gt; reduced what I had to type and, again, helped me &lt;a href="https://github.com/dmolsen/dmolsen.com/blob/master/sass/partials/_navigation.scss"&gt;organize my styles&lt;/a&gt; better.&lt;/li&gt;
&lt;li&gt; I only used one &lt;a href="http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#mixins"&gt;mixin&lt;/a&gt; in my project but I can see how, for example if you needed to create cross-platform gradients,  it could make your life a whole lot easier.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;My site is simple and I barely scratched the surface of &lt;a href="http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html"&gt;what Sass can do&lt;/a&gt;. And, to be clear, you don&amp;#8217;t have to use Octopress to take advantage of Sass.&lt;/p&gt;

&lt;h2&gt;SVG: A Different Kind of Logo&lt;/h2&gt;

&lt;p&gt;One of the challenges that I set for myself when I started redesigning this site was to try to create a logo that required only CSS. Unfortunately, using CSS to clip text to a circle isn&amp;#8217;t very well-supported across browsers. Once I had settled on the clipped look, though, I really wanted it so I looked at another solution, &lt;a href="http://en.wikipedia.org/wiki/Scalable_Vector_Graphics"&gt;SVG&lt;/a&gt;. Within two hours I went from basically not knowing anything about SVG to the hot logo that you see today. It&amp;#8217;s really just a &lt;a href="https://github.com/dmolsen/dmolsen.com/blob/master/source/images/logo.svg"&gt;simple text file&lt;/a&gt; with a linked web font.&lt;/p&gt;

&lt;p&gt;While straightforward to build I don&amp;#8217;t think I&amp;#8217;ve made the best use of SVG. The web font works on most SVG-supporting browsers but fails, for example, on the default browser on Android 4.2. This results in a shortened logo. Also, by linking to a web font I took what is a nicely performant 0.7K text file and essentially turned it into an 18K text file-web font combo. An image would be way better in this case. That said, I think SVG offers promise as a format. Being high-DPI and responsive-layout friendly are definite plusses. By the way, take a look at &lt;a href="https://github.com/dmolsen/dmolsen.com/blob/master/source/_includes/header.html"&gt;the source for the header&lt;/a&gt; and you can see how I provide a fallback for browsers that don&amp;#8217;t support SVG at all.&lt;/p&gt;

&lt;p&gt;If you&amp;#8217;re interested in learning more about SVG and how you might be able to take advantage of it check out David Bushell&amp;#8217;s (&lt;a href="https://twitter.com/dbushell"&gt;@dbushell&lt;/a&gt;) two SVG articles, &lt;em&gt;&lt;a href="http://dbushell.com/2013/02/04/a-primer-to-front-end-svg-hacking/"&gt;A Primer to Front-end SVG Hacking&lt;/a&gt;&lt;/em&gt; and &lt;em&gt;&lt;a href="http://dbushell.com/2013/02/04/a-primer-to-front-end-svg-hacking/"&gt;Resolution Independence with SVG&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;Other Interesting Bits&lt;/h2&gt;

&lt;p&gt;This post is getting quite long! Some other things that I found useful/interesting as I put together the new version of my site:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;HTML5:&lt;/strong&gt; Rather than use a JavaScript solution for backwards compatibility you might notice that I actually use &lt;code&gt;&amp;lt;divs&amp;gt;&lt;/code&gt; nested within the HTML5 elements. All of my styles hook into these elements. It&amp;#8217;s not the most semantic solution but relying on JavaScript seemed odd to me.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;nth-child():&lt;/strong&gt; This pseudo-selector melted my brain for a little bit (&lt;em&gt;for the son of a math teacher I really suck at math&lt;/em&gt;) but once I got a handle on it was incredible useful. The navigation at small viewports is completely driven by &lt;code&gt;nth-child()&lt;/code&gt;. Chris Coyier (&lt;a href="https://twitter.com/chriscoyier"&gt;@chriscoyier&lt;/a&gt;) has a &lt;a href="http://css-tricks.com/how-nth-child-works/"&gt;great write-up about it&lt;/a&gt; on &lt;em&gt;CSS Tricks&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;:before &amp;amp; :after combined with &amp;#8216;content&amp;#8217;:&lt;/strong&gt; I had no idea the CSS property &lt;code&gt;content&lt;/code&gt; even existed. Again, Chris Coyier with &lt;a href="http://css-tricks.com/css-content/"&gt;a good overview&lt;/a&gt;. The bars in the nav and pips for lists use it. Blockquote also uses &lt;code&gt;content&lt;/code&gt; but it uses the &lt;code&gt;open-quote&lt;/code&gt; value. Note, if you use the &lt;code&gt;open-quote&lt;/code&gt; value make sure &lt;code&gt;blockquote:after&lt;/code&gt; is set to &lt;code&gt;content: no-close-quote&lt;/code&gt; so that other &lt;code&gt;&amp;lt;blockquote&amp;gt;&lt;/code&gt;s get the appropriate type of opening quote.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;HTML5 Canvas:&lt;/strong&gt; One requirement that I gave myself was that the image on the right must randomly change when the site is being viewed in larger viewports. What better way to achieve this than &lt;code&gt;canvas&lt;/code&gt;? After some false starts I ended up using &lt;code&gt;toDataURL()&lt;/code&gt; and &lt;code&gt;background-image&lt;/code&gt; (&lt;em&gt;&lt;a href="https://github.com/dmolsen/dmolsen.com/blob/master/source/_includes/js/canvas_circles.html"&gt;the JavaScript&lt;/a&gt;&lt;/em&gt;). If you look at the source for this page you&amp;#8217;ll see a lot of random gibberish in the &lt;code&gt;#canvas-container&lt;/code&gt; &lt;code&gt;div&lt;/code&gt;. That&amp;#8217;s that image.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;@-ms-viewport:&lt;/strong&gt; Last but not least is the use of the &lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh869615.aspx"&gt;@-ms-viewport&lt;/a&gt; rule for Windows RT. Tim Kadlec recently did a good write-up about issues with IE10 on Windows RT, &lt;em&gt;&lt;a href="http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/"&gt;IE10 Snap Mode and Responsive Design&lt;/a&gt;&lt;/em&gt;. I found it really useful for getting IE10 to properly register the viewport on device rotation.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;Wrapping It Up&lt;/h2&gt;

&lt;p&gt;This article is primarily about the requirements that I set up for myself as I developed the new version of this site as well as some of the technical features I implemented. What&amp;#8217;s missing is anything that is really about responsive design. Their is now a follow-up post, &lt;em&gt;&lt;a href="http://dmolsen.com/2013/03/05/media-query-less-design-content-based-breakpoints-tweakpoints/"&gt;Media Query-less Design, Content-based Breakpoints &amp;amp; Tweakpoints&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=VKDVLRGvjbI:JLHlENBGOnU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=VKDVLRGvjbI:JLHlENBGOnU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?i=VKDVLRGvjbI:JLHlENBGOnU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=VKDVLRGvjbI:JLHlENBGOnU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MobileInHigherEd/~4/VKDVLRGvjbI" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://dmolsen.com/2013/02/25/lessons-learned-static-performance-budget-sass-svg</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[A Re-introduction]]></title>
    <link href="http://feedproxy.google.com/~r/MobileInHigherEd/~3/sYW1bjYJNpI/a-re-introduction" />
    <updated>2013-02-25T14:00:00-05:00</updated>
    <id>http://dmolsen.com/2013/02/25/a-re-introduction</id>
    <content type="html">&lt;p&gt;I haven&amp;#8217;t written anything of any serious consequence for this blog in seven or eight months. Obviously, a lot of my available writing time was spent on my chapter for Smashing Mag&amp;#8217;s &lt;a href="http://the-mobile-book.com"&gt;&lt;em&gt;The Mobile Book&lt;/em&gt;&lt;/a&gt; but I had another reason for the long hiatus. The &lt;em&gt;Mobile in Higher Ed&lt;/em&gt; &amp;#8220;brand&amp;#8221; left me feeling a little hemmed in regarding the topics I could cover. Or, at least, the topics that I originally thought I should cover.&lt;/p&gt;

&lt;p&gt;In early 2012 I started building a lot of tools (see &lt;a href="https://github.com/dmolsen/Detector"&gt;Detector&lt;/a&gt;, &lt;a href="https://github.com/dmolsen/Throttle"&gt;Throttle&lt;/a&gt; &amp;amp; &lt;a href="https://github.com/dmolsen/ua-parser-php"&gt;ua-parser-php&lt;/a&gt;). This blog seemed to simply became a series of posts related to tool updates. Frankly, to me, that was sort of boring and not befitting of the original mission of the blog so I stopped writing them. For example, I never posted about another tool that I developed, &lt;a href="https://github.com/dmolsen/lazyBlock"&gt;lazyBlock&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ultimately, the problem was that I put too much pressure on myself to produce a certain type of content and, when the inspiration never came, I just plain avoided the site and writing. So, in the same way that &lt;a href="http://twitter.com/dmolsen/"&gt;my Twitter account&lt;/a&gt; is &amp;#8220;just me,&amp;#8221; I sort of have to accept that my blog will also be &amp;#8220;just me&amp;#8221; and reflect my interests in the moment.&lt;/p&gt;

&lt;p&gt;The redesign of my blog reflects this change in thinking. Gone are references to &lt;em&gt;Mobile in Higher Ed&lt;/em&gt;. I now feel like I don&amp;#8217;t have to keep every post within those two constraints, Mobile &lt;em&gt;and&lt;/em&gt; Higher Ed, which was part of what was contributing to my writer&amp;#8217;s block. I will have my tool updates, their will be posts about mobile web-related technology and their will be higher ed-related content. It&amp;#8217;s just that now I know I don&amp;#8217;t have to fit all of those things into one post.&lt;/p&gt;

&lt;p&gt;Thank you for sticking with the blog through the lean times. I hope I can reward that loyalty moving forward. If you&amp;#8217;re interested in the behind-the-scenes of the re-making of the blog check out the other new post today, &lt;em&gt;&lt;a href="http://dmolsen.com/2013/02/25/lessons-learned-static-performance-budget-sass-svg"&gt;Lessons Learned Building the New dmolsen.com: Static, A Performance Budget, Sass &amp;amp; SVG&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=sYW1bjYJNpI:F9BCILtVzuo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=sYW1bjYJNpI:F9BCILtVzuo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?i=sYW1bjYJNpI:F9BCILtVzuo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=sYW1bjYJNpI:F9BCILtVzuo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MobileInHigherEd/~4/sYW1bjYJNpI" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://dmolsen.com/2013/02/25/a-re-introduction</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[Talking Mobile Web Performance &#038; RESS in Smashing Magazine&#8217;s &#8220;The Mobile Book&#8221;]]></title>
    <link href="http://feedproxy.google.com/~r/MobileInHigherEd/~3/MTrgZ1Fr_58/talking-mobile-web-performance-ress-in-smashing-magazines-the-mobile-book" />
    <updated>2012-11-08T00:00:00-05:00</updated>
    <id>http://dmolsen.com/2012/11/08/talking-mobile-web-performance-ress-in-smashing-magazines-the-mobile-book</id>
    <content type="html">&lt;p&gt;Later this month or in early December you&amp;#8217;ll be able to read my contribution to Smashing Magazine&amp;#8217;s (&lt;a href="https://twitter.com/smashingmag/"&gt;@smashingmag&lt;/a&gt;) latest printed piece, &amp;#8221;&lt;a href="http://www.the-mobile-book.com"&gt;The Mobile Book&lt;/a&gt;.&amp;#8221; I&amp;#8217;m honored to have been asked to join a fantastic line-up of writers and then given the freedom to write a chapter about a topic that I think is important in this age of the always connected device, web performance. The short description:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Although Responsive design per se has provided a great fundamental concept for designing mobile-optimized websites, the core ideas that make up these concepts pre-date the mobile revolution. In this chapter, Dave Olsen reviews what it takes to optimize mobile experiences in terms of performance. How do we keep responsive websites lightweight? What do we need to know about caching, lazy loading, latency? How can we start using RESS? Device detection or feature detection? Also, how do we develop and test our websites for performance? This chapter answers all these questions and more.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;The contributors to the book are a Who&amp;#8217;s Who list of the leaders in the mobile web space. Smashing Magazine provides a &lt;a href="https://twitter.com/smashingmag/the-mobile-book/"&gt;handy Twitter list of authors&lt;/a&gt; but they are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jeremy Keith (&lt;a href="https://twitter.com/adactio"&gt;@adactio&lt;/a&gt;) with the foreword&lt;/li&gt;
&lt;li&gt;Peter Paul-Koch (&lt;a href="https://twitter.com/ppk"&gt;@ppk&lt;/a&gt;) covering &amp;#8221;&lt;em&gt;What&amp;#8217;s Going on in Mobile?&lt;/em&gt;&amp;#8221;&lt;/li&gt;
&lt;li&gt;Stephanie Rieger (&lt;a href="https://twitter.com/stephanierieger"&gt;@stephanierieger&lt;/a&gt;) covering &amp;#8221;&lt;em&gt;The Future of Mobile&lt;/em&gt;&amp;#8221;&lt;/li&gt;
&lt;li&gt;Trent Walton (&lt;a href="https://twitter.com/TrentWalton"&gt;@TrentWalton&lt;/a&gt;) covering &amp;#8221;&lt;em&gt;Responsive Design Strategies&lt;/em&gt;&amp;#8221;&lt;/li&gt;
&lt;li&gt;Brad Frost (&lt;a href="https://twitter.com/brad_frost"&gt;@brad_frost&lt;/a&gt;) covering &amp;#8221;&lt;em&gt;Responsive Design Patterns&lt;/em&gt;&amp;#8221;&lt;/li&gt;
&lt;li&gt;Dennis Kardys (&lt;a href="https://twitter.com/dkardys"&gt;@dkardys&lt;/a&gt;) covering &amp;#8221;&lt;em&gt;Hands On Design for Mobile (UX Perspective)&lt;/em&gt;&amp;#8221;&lt;/li&gt;
&lt;li&gt;Greg Nudelman (&lt;a href="https://twitter.com/designcaffeine"&gt;@designcaffeine&lt;/a&gt;) &amp;amp; Rian van der Merwe (&lt;a href="https://twitter.com/RianVDM"&gt;@RianVDM&lt;/a&gt;) covering &amp;#8221;&lt;em&gt;Mobile UX Design Patterns&lt;/em&gt;&amp;#8221;&lt;/li&gt;
&lt;li&gt;Josh Clark (&lt;a href="https://twitter.com/globalmoxie"&gt;@globalmoxie&lt;/a&gt;) covering &amp;#8221;&lt;em&gt;Designing With Gestures and Touch&lt;/em&gt;&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt; Smashing Magazine &lt;a href="http://www.smashingmagazine.com/2012/10/16/the-mobile-book-preorder/"&gt;put together some more information&lt;/a&gt; on the book as well as more details on each chapter.&lt;/p&gt;

&lt;p&gt;Many thanks to Vitaly Friedman for giving me the opportunity to contribute to the book. Also, thanks to him and the rest of the gang at Smashing Magazine for their work editing and proofing the chapter as well as gently shepherding me across the finish line. Thanks to Tim Kadlec (&lt;a href="https://twitter.com/tkadlec"&gt;@tkadlec&lt;/a&gt;) for his quality technical edits.&lt;/p&gt;

&lt;p&gt;If you &lt;a href="http://www.the-mobile-book.com"&gt;pre-order the book&lt;/a&gt; you&amp;#8217;ll &lt;strong&gt;save 20% and get the eBook for free&lt;/strong&gt;. Frankly, the book looks gorgeous (&lt;em&gt;thanks to illustrations from Mike Kus (&lt;a href="https://twitter.com/mikekus"&gt;@mikekus&lt;/a&gt;)&lt;/em&gt;) and I know the content will be awesome so &lt;a href="http://www.the-mobile-book.com"&gt;go order it today&lt;/a&gt;.
 &lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=MTrgZ1Fr_58:wMCi__h535w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=MTrgZ1Fr_58:wMCi__h535w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?i=MTrgZ1Fr_58:wMCi__h535w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=MTrgZ1Fr_58:wMCi__h535w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MobileInHigherEd/~4/MTrgZ1Fr_58" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://dmolsen.com/2012/11/08/talking-mobile-web-performance-ress-in-smashing-magazines-the-mobile-book</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[Detector v0.8.5 Released: Now Being Used on www.wvu.edu]]></title>
    <link href="http://feedproxy.google.com/~r/MobileInHigherEd/~3/Set17J8d9QM/detector-v0-8-5-released-now-being-used-on-www-wvu-edu" />
    <updated>2012-08-14T00:00:00-04:00</updated>
    <id>http://dmolsen.com/2012/08/14/detector-v0-8-5-released-now-being-used-on-www-wvu-edu</id>
    <content type="html">&lt;p&gt;With the release of the &lt;a href="http://www.wvu.edu/"&gt;new home page for West Virginia University&lt;/a&gt; Detector is finally being used in production. Unfortunately, there were a few bugs that were uncovered with this move. &lt;a href="http://github.com/dmolsen/Detector/"&gt;v0.8.5&lt;/a&gt; fixes these issues and I now feel comfortable most folks can use &lt;a href="http://github.com/dmolsen/Detector/"&gt;Detector&lt;/a&gt; in their own production environments. The issues fixed include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a very rare bug where the cookie used to set-up a profile wasn&amp;#8217;t properly cleared so a future visit would overwrite the profile with empty data.&lt;/li&gt;
&lt;li&gt;the call to &lt;code&gt;addUAToList()&lt;/code&gt; is now commented out. it became an unnecessary performance bottleneck.&lt;/li&gt;
&lt;li&gt;profiles are now saved in directories that are based on the first two characters of the hash of the user-agent. this way one directory doesn&amp;#8217;t fill up with a ton of files and thereby possibly affecting performance. more on this below.&lt;/li&gt;
&lt;/ul&gt;


&lt;div&gt;
  But it&amp;#8217;s not all bug fixes…
&lt;/div&gt;


&lt;h2&gt;New Feature: Smarter Mustache Templating&lt;/h2&gt;

&lt;p&gt;One feature that I&amp;#8217;m really excited about is the smarter fallbacks when using Detector with my &lt;a href="https://github.com/dmolsen/Detector/tree/master/web/demo/mustache/lib/mustache-php"&gt;fork of mustache-php&lt;/a&gt; (&lt;em&gt;included in the Detector project&lt;/em&gt;). When using Detector and mustache-php to build a &lt;a href="http://www.dmolsen.com/mobile-in-higher-ed/2012/02/21/ress-and-the-evolution-of-responsive-web-design/"&gt;RESS-based&lt;/a&gt; website you can organize your Mustache partials based on &lt;a href="https://github.com/dmolsen/Detector/wiki/Detector-Family-Tutorial"&gt;Detector&amp;#8217;s families feature&lt;/a&gt;. Essentially, Mustache looks for partials based on the browser&amp;#8217;s family first and then fallbacks to a default directory of partials that&amp;#8217;s shared amongst all the families. I&amp;#8217;ve written a &lt;a href="https://github.com/dmolsen/Detector/wiki/Templating-with-Detector-&amp;amp;-Mustache-Tutorial"&gt;tutorial that explains how it all works&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;With &lt;a href="http://github.com/dmolsen/Detector"&gt;v0.8.5&lt;/a&gt; I&amp;#8217;ve added a wrinkle to that default behavior. If you set splitFamily to true in config.ini Mustache will still look for a partial based on the browser&amp;#8217;s family first but then it will attempt to split the family name based on dashes rather than falling back to a default directory. This should give developers more flexibility when setting up families as well as limit duplicated partials. At least it did for us. A good example of how this feature might be useful is for delivering Retina images.&lt;/p&gt;

&lt;p&gt;For the most part, the partials shared between a family set-up to address the layout needs of a Retina-capable mobile browser and the partials for a family set-up to address the layout needs of a modern mobile browser will be the same. Rather than duplicate these partials we can, with this new feature, simply set-up our Retina-quality family so that its name builds off of the latter family name. For example, the family name for the regular modern mobile browser might be ‘mobile-advanced&amp;#8217;. We can then name our Retina-related family ‘mobile-advanced-retina&amp;#8217;. Any partials shared between the two simply need to go in ‘mobile-advanced&amp;#8217; as partial requests that aren&amp;#8217;t found in ‘mobile-advanced-retina&amp;#8217; will fall back to it first.&lt;/p&gt;

&lt;h2&gt;Early Stats&lt;/h2&gt;

&lt;p&gt;I&amp;#8217;ve been very curious how Detector would perform once it was thrown into production. Most importantly, I wanted to know how many profiles it would create once a lot of different browsers could hit it. Performance has been fine. The profile numbers on the other hand have blown me away and they&amp;#8217;re almost entirely driven by IE 7 and 8. Since we launched at midnight on Thursday, August 2nd our home page has had ~72,000 unique visitors and ~238,000 pageviews. This is a slow time of year for us though our traffic should ramp up quickly. Based on those ~72,000 unique visitors &lt;strong&gt;Detector has created 11,002 profiles&lt;/strong&gt;. They take up 45MB of disk space. The kicker really is IE 7 &amp;amp; 8. &lt;strong&gt;Combined, IE 7 &amp;amp; 8 account for 7,952 of the 11,002 profiles (&lt;/strong&gt;72.3%)&lt;strong&gt; &lt;/strong&gt;. I find it incredible that there&amp;#8217;s that much variation in IE user-agent strings. I guess Microsoft allowed anything to be stuck in the UA. For what it&amp;#8217;s worth, &lt;strong&gt;IE 7 &amp;amp; 8 have only provided 25% of the visits during the same time period&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ll be keeping an eye on the disk usage. Maybe I&amp;#8217;ll need to think about a garbage collection routine for old profiles. Otherwise things seem to be working well.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=Set17J8d9QM:UOCqnjYF2qM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=Set17J8d9QM:UOCqnjYF2qM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?i=Set17J8d9QM:UOCqnjYF2qM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=Set17J8d9QM:UOCqnjYF2qM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MobileInHigherEd/~4/Set17J8d9QM" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://dmolsen.com/2012/08/14/detector-v0-8-5-released-now-being-used-on-www-wvu-edu</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[Introducing Throttle: Helping You Test Your Websites at Mobile Network Speeds (aka Slooowwww)]]></title>
    <link href="http://feedproxy.google.com/~r/MobileInHigherEd/~3/quzGvKu725U/introducing-throttle" />
    <updated>2012-07-10T00:00:00-04:00</updated>
    <id>http://dmolsen.com/2012/07/10/introducing-throttle</id>
    <content type="html">&lt;p&gt;As I noted at the end of my last post, &lt;em&gt;&lt;a href="http://www.dmolsen.com/mobile-in-higher-ed/2012/06/26/how-to-build-a-device-lab-part-1/"&gt;How to Build a Device Lab&lt;/a&gt;&lt;/em&gt;, getting devices is only half of the battle when trying to create a robust platform for testing your mobile websites. The other half is finding tools that allow you to test your websites quickly and easily. While reviewing tools the one thing that stuck out to me was that we were running tests from our devices over an, essentially, pristine WiFi connection. In the real world, our users would be stuck on clogged networks with varying levels of quality. Guy Podjarny&amp;#8217;s (&lt;a href="http://twitter.com/guypod"&gt;@guypod&lt;/a&gt;) presentation, &lt;em&gt;&lt;a href="http://www.slideshare.net/guypod/the-mobile-difference-in-numbers"&gt;The Mobile Difference In Numbers&lt;/a&gt;&lt;/em&gt;, does a good job of showing why we need to take network performance into account when designing our mobile websites. Therefore, modifying network speeds would need to play a larger part in our testing scenarios if we really wanted to know how well our mobile designs were working.&lt;/p&gt;

&lt;p&gt;All of the tools that I found related to modifying connection speeds were focused on modifying the requests coming from only one computer. e.g. You&amp;#8217;d have the piece of software installed on your computer and any request you made from that computer would be affected. When testing multiple, black-boxed devices (&lt;em&gt;e.g. an iPhone, a Google Nexus, and a BlackBerry 9800&lt;/em&gt;) this scenario wouldn&amp;#8217;t work. So doing what I do tend to do I built my own solution. Because of  how &lt;a href="https://github.com/marstall/shim/"&gt;shim&lt;/a&gt; and &lt;a href="http://labs.adobe.com/technologies/shadow/"&gt;Adobe Shadow&lt;/a&gt; work I decided to use an extra Mac that we had lying around as a WiFi access point. That way we could still use those tools and I could control the network speeds of the requests coming from our devices. Also, if it was set-up correctly, any of our designers could sit at their desks, testing and modifying their code, and update the network speed &amp;#8220;on the fly.&amp;#8221; So with that…&lt;/p&gt;

&lt;h2&gt;Introducing Throttle&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/dmolsen/Throttle"&gt;Throttle&lt;/a&gt;, &lt;a href="https://github.com/dmolsen/Throttle"&gt;available on GitHub&lt;/a&gt;, is a simple &lt;a href="http://nodejs.org/"&gt;node.js&lt;/a&gt; app that allows you to simulate poor network connections (e.g. like a cellular connection) so you can test how your websites will perform. For example, testing a responsive website on a poor 3G connection without actually having to have a poor 3G connection. To use Throttle simply connect your Mac to ethernet, share that network connection via Airport, turn on Throttle, and any device connected to that WiFi access point will then be throttled to the the network speed you specify via a web-frontend. If you don&amp;#8217;t have node.js on your computer don&amp;#8217;t fret. It&amp;#8217;s very easy to install so you can get Throttle up and running quickly.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s important to note that Throttle was designed to be used in conjunction with a device lab and products like shim or Adobe Shadow where a shared connection is expected. That has definitely influenced its design and test cases.&lt;/p&gt;

&lt;p&gt;Throttle has some very simple features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Web-based app so it can be accessed &amp;amp; updated from any connected device or computer&lt;/li&gt;
&lt;li&gt;Modify download network speeds for connected devices&lt;/li&gt;
&lt;li&gt;Modify upload network speeds for connected devices&lt;/li&gt;
&lt;li&gt;Modify the latency, or delay, in the network connection for connected devices&lt;/li&gt;
&lt;li&gt;Handy presets to quickly switch between network types&lt;/li&gt;
&lt;li&gt;The machine Throttle is installed on still has a full-speed Internet connection&lt;/li&gt;
&lt;li&gt;Works nicely with &lt;a href="http://labs.adobe.com/technologies/shadow/"&gt;Adobe Shadow&lt;/a&gt;. I want it to get it to work with a stock install of &lt;a href="https://github.com/marstall/shim/"&gt;shim&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;div&gt;
  &lt;p&gt;
    &lt;a href="https://github.com/dmolsen/Throttle"&gt;Directions for setting up and using Throttle&lt;/a&gt; are now available on the project&amp;#8217;s GitHub repo. You can &lt;a href="http://dmolsen.com/throttle-screen.png"&gt;check out a screenshot&lt;/a&gt; to &lt;a href="http://dmolsen.com/throttle-screen.png"&gt;see what you&amp;#8217;ll be getting&lt;/a&gt; if you install Throttle. Throttle started out as a hack to &lt;a href="https://github.com/marstall/shim/"&gt;shim&lt;/a&gt; so thanks to that project and the team at Boston Globe for the inspiration. Throttle uses &lt;a href="http://twitter.github.com/bootstrap/"&gt;Twitter Bootstrap&lt;/a&gt; and &lt;a href="http://glyphicons.com/"&gt;Glyphicons&lt;/a&gt; for design elements.
  &lt;/p&gt;
  
  &lt;p&gt;
    If you have any suggestions, criticisms or thoughts on Throttle please feel free to share them in the comments. I&amp;#8217;m hopeful that I can get the current presets updated to appropriately reflect common connection speeds. I&amp;#8217;m definitely open to suggestions for making that part of the system better.
  &lt;/p&gt;
&lt;/div&gt;



&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=quzGvKu725U:rH-Rv-6BJn0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=quzGvKu725U:rH-Rv-6BJn0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?i=quzGvKu725U:rH-Rv-6BJn0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=quzGvKu725U:rH-Rv-6BJn0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MobileInHigherEd/~4/quzGvKu725U" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://dmolsen.com/2012/07/10/introducing-throttle</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[How to Build a Device Lab [Part 1]]]></title>
    <link href="http://feedproxy.google.com/~r/MobileInHigherEd/~3/RZZ-DBUsQqQ/how-to-build-a-device-lab-part-1" />
    <updated>2012-06-26T00:00:00-04:00</updated>
    <id>http://dmolsen.com/2012/06/26/how-to-build-a-device-lab-part-1</id>
    <content type="html">&lt;p&gt;Recently, we were lucky enough to be given the opportunity to build a device lab for our department. Stephanie Rieger (&lt;a href="http://twitter.com/stephanierieger"&gt;@stephanierieger&lt;/a&gt;) &lt;a href="http://stephanierieger.com/on-designing-content-out-a-response-to-zeldman-and-others/"&gt;covers the many reasons&lt;/a&gt; why organizations need to get their hands on &lt;em&gt;real&lt;/em&gt; devices for testing. As mobile becomes an increasingly important outlet for our content it behooves us to make sure that content actually works on them. Over the years we had picked up a few devices but this was a chance to &amp;#8221;&lt;em&gt;do it right&lt;/em&gt;&amp;#8221; and we jumped at it.&lt;/p&gt;

&lt;h2&gt;Deciding Which Devices to Get&lt;/h2&gt;

&lt;p&gt;We took a fairly pragmatic stance when deciding what devices we should get for our device lab. We evaluated devices based on the following criteria:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Rank: &lt;/strong&gt;where was the device ranked in our stats for wvu.edu. this can be found in Google Analytics under the &amp;#8220;Mobile&amp;#8221; category.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OS &amp;amp; OS Version:&lt;/strong&gt; we wanted a good cross-section of OSes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Screen Dimensions:&lt;/strong&gt; again, we wanted a good cross-section of screen dimensions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WiFi-Capable: &lt;/strong&gt;the device &lt;em&gt;had&lt;/em&gt; to be WiFi-capable so we could use the device without a cellphone plan. this was a critical feature of any device we considered.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Availability &amp;amp; Cost: &lt;/strong&gt;and, finally, the device had to be available for purchase and not overly expensive. this ruled out the latest and greatest.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I think we ended up meeting our goals on OS and screen dimensions. Our lab now includes devices running Windows Phone 7, webOS, BlackBerry 5, 6 &amp;amp; 7, Nokia Series 40 as well as various flavors of iOS and Android. If you&amp;#8217;re just starting your device lab I would rank devices as so:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;iPod Touch:&lt;/strong&gt; as long as you aren&amp;#8217;t doing anything with GPS this could be a cost-effective choice for iOS &amp;amp; small screen testing. &lt;del&gt;no retina display though&lt;/del&gt;. &lt;em&gt;it does have a retina display&lt;/em&gt;. if someone knows of a reason why this wouldn&amp;#8217;t work please let me know.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mid-level Android:&lt;/strong&gt; target something like the Samsung Fascinate that can only run 2.x of Android&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;High-end Android:&lt;/strong&gt; an HTC Thunderbolt (&lt;em&gt;maybe not so high-end anymore&lt;/em&gt;) or another device capable of running Android 4.0. make sure to get a different screen pixel width/height than your mid-level device.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;iPad/Android/Kindle Tablet: &lt;/strong&gt;i&amp;#8217;m sort of loathe to add a tablet to the list but it could matter if you&amp;#8217;re into that kind of thing. an iPad will probably be your most expensive device though you can get a refurbished iPad 2 if you don&amp;#8217;t care about retina.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;High-end BlackBerry:&lt;/strong&gt; any BlackBerry that can run 7.0 (&lt;em&gt;e.g. BlackBerry 9900&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Windows Phone 7: &lt;/strong&gt;if only to experience something really different when it comes to a mobile OS. can be older model since none of the current hardware will support the next edition of Windows Phone anyway.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;I think you can fill in as necessary after that based on your audience. Depending on where you are in the world you may want a Symbian-based or Bada-based device. If you know you have a number of important administrators with older BlackBerries pick up a 6.0 device. Android devices offer a lot of options for testing responsive designs with their varied screen widths and heights. Obviously, you might want to pick up an iPhone for testing &lt;del&gt;its Retina Display &lt;/del&gt;(&lt;em&gt;can do this on the iPod Touch&lt;/em&gt;). More is better but you don&amp;#8217;t have to kill yourself getting the perfect combo of devices. Especially if that&amp;#8217;s what&amp;#8217;s keeping you from jumping in.&lt;/p&gt;

&lt;p&gt;And, &lt;strong&gt;remember&lt;/strong&gt;, you can always check out &lt;a href="http://www.mobilexweb.com/emulators"&gt;emulators for any of the devices&lt;/a&gt; you can&amp;#8217;t get your hands on or you can look at web-based device testings services like &lt;a href="http://www.browserstack.com/"&gt;BrowserStack&lt;/a&gt;. Ryan Seddon (&lt;a href="http://twitter.com/ryanseddon"&gt;@ryanseddon&lt;/a&gt;) put together a &lt;a href="http://www.thecssninja.com/mobile/testing-devices"&gt;good post that covers some of the options&lt;/a&gt; in the latter category.&lt;/p&gt;

&lt;h2&gt;Where To Get Devices&lt;/h2&gt;

&lt;p&gt;Once you&amp;#8217;ve decided what type of devices you want then the obvious next step is getting your hands on some. I think their are four ways to go about this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hand-me-downs: &lt;/strong&gt;this is probably the most common method to pick up devices. Someone in your department is due for a refresh on their phone and they give you their old device. Makes the device free to you but takes time to build up a significant library and, if your department is like ours, most folks tend to get the same device so when the refresh happens you&amp;#8217;re stuck with multiples of the same device.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cellphone Store Leftovers:&lt;/strong&gt; you should be able to go into your local cellphone dealers and ask if they have older devices that you can purchase at a discount. This will usually range from 25-50% off. The problem is, if you&amp;#8217;re in a smaller market like us, the leftovers may provide very slim pickings.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;eBay:&lt;/strong&gt; every device you might ever want for your lab is &lt;a href="http://www.ebay.com/sch/Cell-Phones-Smartphones-/9355/i.html"&gt;on eBay&lt;/a&gt;. This could be a good way to get some devices on the cheap.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mobile Karma: &lt;/strong&gt;&lt;a href="http://mobilekarma.com"&gt;Mobile Karma&lt;/a&gt; buys and then re-sells used devices. They don&amp;#8217;t have the widest selection and their list of devices is definitely US-centric but, that said, I think it&amp;#8217;s a more than good enough resource for building a starter device lab. Also, if you see a device one day don&amp;#8217;t expect it to be there the next. All the devices they provide come in very good condition and include chargers and extra batteries. Do compare the prices they show against those you can find on eBay.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Trolling &lt;a href="http://www.ebay.com/sch/Cell-Phones-Smartphones-/9355/i.html"&gt;eBay&lt;/a&gt; and &lt;a href="http://mobilekarma.com"&gt;Mobile Karma&lt;/a&gt; should show that you &lt;strong&gt;don&amp;#8217;t have to break the bank to start building a device lab&lt;/strong&gt;. Especially if you limit yourself to devices 1-3 from my list above. An iPod Touch (&lt;em&gt;refurbished&lt;/em&gt;) from the Apple Store and a Fascinate and Thunderbolt from &lt;a href="http://mobilekarma.com"&gt;Mobile Karma&lt;/a&gt; are, combined, only $438. And there are no contract costs with those Android phones!&lt;/p&gt;

&lt;h2&gt;Dealing with Activation Issues&lt;/h2&gt;

&lt;p&gt;Using your new devices won&amp;#8217;t be as simple as turning them on, connecting to a WiFi network, and firing up the browser. All of them would/should have been reset to their factory defaults meaning you&amp;#8217;re going to have to activate them but without a cellphone plan. Not every device likes this. For example, with the Palm Pre 2 you&amp;#8217;ll have to get it to run in dev mode via &lt;a href="https://developer.palm.com/distribution/viewtopic.php?f=91&amp;amp;t=10495"&gt;entering a code in the emergency number screen&lt;/a&gt;. Other devices will have other ways to skip activation (&lt;em&gt;e.g. using the volume keys&lt;/em&gt;). You&amp;#8217;ll also want to come up with one central account (&lt;em&gt;most likely Gmail-based&lt;/em&gt;) that can be used to create accounts across all of the various app stores.&lt;/p&gt;

&lt;p&gt;Activation issues can be overcome… just don&amp;#8217;t be surprised by this step.&lt;/p&gt;

&lt;p&gt;And, please note, you don&amp;#8217;t have to provide a credit card when creating a centralized iTunes account. You can download free apps without one on record so you can skip that step if that&amp;#8217;s an issue. Then you can use that account for all of your iOS testing devices.&lt;/p&gt;

&lt;h2&gt;Managing Your Devices&lt;/h2&gt;

&lt;p&gt;When I asked on Twitter, &amp;#8221;&lt;em&gt;Got any questions about setting a device lab?&lt;/em&gt;,&amp;#8221; the number one question was related to how to share purchased devices with other departments. To be honest, we haven&amp;#8217;t gotten that far yet. We&amp;#8217;re currently working on how to make sharing within the department easy. After that we can look outwards. I have a feeling we won&amp;#8217;t be loaning out devices. Does that sound mean? Sure. Is it more practical for us? Yes. This doesn&amp;#8217;t mean that folks couldn&amp;#8217;t visit us to test of course. The bonus of that is that they then have some experts to help them troubleshoot any problems.&lt;/p&gt;

&lt;p&gt;Another question was &amp;#8221;&lt;em&gt;When should we retire a particular device?&lt;/em&gt;&amp;#8221; At this point I think their is something to be learned from testing even if it&amp;#8217;s on an older device (&lt;em&gt;e.g. BlackBerry 5.0&lt;/em&gt;). If a design is completely screwed up on an OS like that and your stats show almost no visits from that operating system/browser then it&amp;#8217;s OK to ignore but, otherwise, the more you can cover the better. And, again, their is always something to be learned from older platforms.&lt;/p&gt;

&lt;h2&gt;Other Things to Buy&lt;/h2&gt;

&lt;p&gt;Unfortunately, devices are only part of the cost in setting up a lab. This is especially true if, like us, you want to set-up a &lt;em&gt;mobile&lt;/em&gt; device lab. Where &amp;#8220;mobile&amp;#8221; means allowing the device lab to easily move around to different cubes or offices. You should think about picking up the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Power strips:&lt;/strong&gt; you&amp;#8217;ll need to plug-in the devices somewhere. you don&amp;#8217;t need an outlet for every device but you&amp;#8217;ll most likely need to expand on the outlets you already have.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stands:&lt;/strong&gt; you&amp;#8217;ll want something to place your devices on so they can sit at an angle and be easily viewable by the designer/developer as they&amp;#8217;re testing. testing, courtesy of something like &lt;a href="http://labs.adobe.com/technologies/shadow/"&gt;Adobe Shadow&lt;/a&gt;, can be as simple as &amp;#8221;&lt;em&gt;refresh a desktop browser &amp;amp; all of your mobile devices (based on WebKit) refresh with it automagically.&lt;/em&gt;&amp;#8221; serious.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cart:&lt;/strong&gt; you&amp;#8217;ll need something to put the devices on to move ‘em around.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Source of WiFi:&lt;/strong&gt; can be an access point or, if using &lt;a href="https://github.com/marstall/shim"&gt;SHIM&lt;/a&gt;, you&amp;#8217;ll want an extra computer that maybe has been sitting around collecting dust&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;We&amp;#8217;re still in the process of fleshing this part out so I don&amp;#8217;t have numbers but it shouldn&amp;#8217;t be overwhelming budget-wise.&lt;/p&gt;

&lt;h2&gt;Getting Devices Is Only Half the Battle: Browser Testing&lt;/h2&gt;

&lt;p&gt;Getting devices into the hands of your developers and designers is only the first step in integrating device testing into your website design routine. In order to get folks to buy-in it has to be easy. Very, very easy. This is one of the reasons we want the cart. We hope that, by using the devices in their familiar environments (&lt;em&gt;e.g. their own cubes&lt;/em&gt;), it will encourage them to test more. The other point is that what we&amp;#8217;re really interested in on these devices are the &lt;em&gt;browsers&lt;/em&gt;. In my next article I&amp;#8217;ll talk about what browsers you might want to target and how you can use a combination of &lt;a href="http://labs.adobe.com/technologies/shadow/"&gt;Adobe Shadow&lt;/a&gt;, &lt;a href="https://github.com/marstall/shim"&gt;SHIM&lt;/a&gt;, and ipfw to make it dead-simple for developers to robustly test and tweak their mobile designs in those browsers.&lt;/p&gt;

&lt;p&gt;Have your own tips for setting up a device lab? Any other questions I can answer? Please submit a comment!&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=RZZ-DBUsQqQ:74t6qWXrUls:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=RZZ-DBUsQqQ:74t6qWXrUls:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?i=RZZ-DBUsQqQ:74t6qWXrUls:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=RZZ-DBUsQqQ:74t6qWXrUls:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MobileInHigherEd/~4/RZZ-DBUsQqQ" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://dmolsen.com/2012/06/26/how-to-build-a-device-lab-part-1</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[Help Needed: Reviewing &#038; Updating Detector&#8217;s Feature &#038; Test Suite]]></title>
    <link href="http://feedproxy.google.com/~r/MobileInHigherEd/~3/c7G_8mw09wM/help-needed-reviewing-updating-detectors-feature-test-suite" />
    <updated>2012-06-19T00:00:00-04:00</updated>
    <id>http://dmolsen.com/2012/06/19/help-needed-reviewing-updating-detectors-feature-test-suite</id>
    <content type="html">&lt;p&gt;As I push towards the v1.0 release of &lt;a href="http://detector.dmolsen.com"&gt;Detector&lt;/a&gt; I&amp;#8217;ve decided to focus on refining the list of tests that form the core of Detector&amp;#8217;s &amp;#8221;browser map.&amp;#8221; My original listing of tests was cherry-picked from Modernizr&amp;#8217;s &amp;#8220;build tool.&amp;#8221; While a useful listing it doesn&amp;#8217;t cover every feature that may be of interest to developers. Especially, as I found, those developers primarily interested in mobile.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://docs.google.com/spreadsheet/ccc?key=0AntZUVoCEOyYdFRpUjZOWUZyaWxoSTlLLW1XVHVldHc"&gt;draft listing of Detector&amp;#8217;s v1.0 tests&lt;/a&gt; is &lt;a href="https://docs.google.com/spreadsheet/ccc?key=0AntZUVoCEOyYdFRpUjZOWUZyaWxoSTlLLW1XVHVldHc"&gt;available as a Google Doc&lt;/a&gt;. I wasn&amp;#8217;t sure of the best way to leave feedback so I guess you can either reply to this post or put your comments in the &amp;#8220;User Contributed Notes&amp;#8221; section of each sheet. The primary criteria for a listed test is simply my own interest in that particular feature. The only type of tests that I&amp;#8217;ve ruled out for now are ones that simply test browser performance (&lt;em&gt;e.g. FPS&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;The listing was built using the following resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Modernizr/Modernizr"&gt;Modernizr&amp;#8217;s core tests &amp;amp; extra tests&lt;/a&gt; listed in their repo&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/facebook/coremob-tests/tree/master/tests"&gt;Ringmark&amp;#8217;s core tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://tests.caniuse.com/"&gt;The When I Can I Use tests&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;In locations where I&amp;#8217;ve listed that a test doesn&amp;#8217;t exist (&lt;em&gt;primarily Modernizr&lt;/em&gt;) I simply mean that it&amp;#8217;s not included in the official repo for that library. It could exist elsewhere. Ringmark didn&amp;#8217;t contain every test I expected (&lt;em&gt;e.g. battery&lt;/em&gt;) so maybe I overlooked something there as well. Suffice it to say it&amp;#8217;s been a few late nights.&lt;/p&gt;

&lt;p&gt;I also referred to the following material as reference:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.html5rocks.com/"&gt;HTML5 Rocks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mobilehtml5.org"&gt;Mobile HTML5 Compatibility Sheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://html5test.com/"&gt;The HTML5 Test&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/#auto-toc-8"&gt;WHATWG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.w3.org/TR/"&gt;W3C Standards &amp;amp; Drafts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;To explain the organization of the sheets a little bit… Each sheet is my attempt to organize tests into logical groups. There is overlap. The most important column is B as that determines what&amp;#8217;s happening with a  particular test. The key is included at the bottom of each sheet.&lt;/p&gt;

&lt;p&gt;I would love feedback on the list. Suggestions of tests to include or remove are very much welcome. I know the doc is overwhelming but I wanted to record as much information as I could while doing this process rather than have to look up things later on. I haven&amp;#8217;t looked at performance issues yet, fine-tuned tests, or anything as I&amp;#8217;m simply trying to decide if the features could prove useful to developers and act as a quality snapshot of a UA. All of that will come as I narrow down what will be in the v1.0 test suite.&lt;/p&gt;

&lt;p&gt;Thanks.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=c7G_8mw09wM:D6TN2L1C-hs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=c7G_8mw09wM:D6TN2L1C-hs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?i=c7G_8mw09wM:D6TN2L1C-hs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=c7G_8mw09wM:D6TN2L1C-hs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MobileInHigherEd/~4/c7G_8mw09wM" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://dmolsen.com/2012/06/19/help-needed-reviewing-updating-detectors-feature-test-suite</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[Detector v0.8.0 Released: Modernizr for Your PHP App Now Cleaner, Leaner, &#038; Meaner]]></title>
    <link href="http://feedproxy.google.com/~r/MobileInHigherEd/~3/H7Z28Wv5NS8/detector-v0-8-0-released-modernizr-for-your-php-app-now-cleaner-leaner-meaner" />
    <updated>2012-06-04T00:00:00-04:00</updated>
    <id>http://dmolsen.com/2012/06/04/detector-v0-8-0-released-modernizr-for-your-php-app-now-cleaner-leaner-meaner</id>
    <content type="html">&lt;p&gt;In preparation for some summer projects I cleaned up my PHP &amp;amp; &lt;a href="http://modernizr.com/"&gt;Modernizr-based&lt;/a&gt; browser- and feature-detection library, &lt;a href="https://github.com/dmolsen/Detector"&gt;Detector&lt;/a&gt;. You can get a taste of what it can do by visiting the &lt;a href="http://detector.dmolsen.com/"&gt;feature list page&lt;/a&gt; or checking out &lt;a href="http://detector.dmolsen.com/demo/mustache/"&gt;the RESS template demo&lt;/a&gt;. The code and feature-set are essentially where I want them to be for 1.0. I could stand to add proper unit tests and the like. I&amp;#8217;ll attempt to add them in the near future but my schedule is getting really busy. The highlights for this release include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a better job of handling browsers that don&amp;#8217;t support JavaScript or cookies. This extends to customizable family properties for those same browsers as well as search engine bots. &lt;a href="https://github.com/dmolsen/Detector/wiki/Detector-Family-Tutorial"&gt;Learn more in the docs&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;the ability to change the family property for a browser via a request variable. For responsive designs this could mean &amp;#8220;desktop&amp;#8221; mode. &lt;a href="https://github.com/dmolsen/Detector/wiki/Detector-Family-Tutorial"&gt;Learn more in the docs&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Modernizr-based tests can now be run once per-session for those features that need to be tested on a per browser basis but won&amp;#8217;t change in subsequent requests (&lt;em&gt;e.g. pixel density ratio&lt;/em&gt;). &lt;a href="https://github.com/dmolsen/Detector/wiki/Detector-Test-Tutorial"&gt;Learn more in the docs&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;in general I&amp;#8217;ve tried to DRY up the code &amp;amp; reduce memory footprint&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;On the face of it it doesn&amp;#8217;t seem like a whole lot happened. More changes are listed in the &lt;a href="https://github.com/dmolsen/Detector/blob/master/CHANGELOG"&gt;CHANGELOG&lt;/a&gt;. This release, in my opinion, makes Detector a robust and flexible library that brings PHP developers that much closer to their front-end brethren. Now we can build dynamic, future-friendly applications that can take advantage of browser properties server-side.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=H7Z28Wv5NS8:wDaWdghaIqI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=H7Z28Wv5NS8:wDaWdghaIqI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?i=H7Z28Wv5NS8:wDaWdghaIqI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=H7Z28Wv5NS8:wDaWdghaIqI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MobileInHigherEd/~4/H7Z28Wv5NS8" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://dmolsen.com/2012/06/04/detector-v0-8-0-released-modernizr-for-your-php-app-now-cleaner-leaner-meaner</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[The Cautionary Tale of &#8220;The Expert Has Spoken:&#8221; Jakob Nielsen &#038; the Mobile Site Debate]]></title>
    <link href="http://feedproxy.google.com/~r/MobileInHigherEd/~3/cyQiFQo1cv4/the-cautionary-tale-of-the-expert-has-spoken-jakob-nielsen-the-mobile-site-debate" />
    <updated>2012-05-23T00:00:00-04:00</updated>
    <id>http://dmolsen.com/2012/05/23/the-cautionary-tale-of-the-expert-has-spoken-jakob-nielsen-the-mobile-site-debate</id>
    <content type="html">&lt;p&gt;In higher education we really like &amp;#8220;best practices.&amp;#8221; We like solutions that are proven and that we can easily implement as we dip our toes into new technologies. I&amp;#8217;ve watched this happen with social media and I&amp;#8217;m now experiencing it with mobile. Part of the reason we try to find and follow &amp;#8220;best practices&amp;#8221; is our need to get the most bang for the buck. Another part of it is the fact that many of us wear so many hats that we &lt;em&gt;need&lt;/em&gt; to rely on &amp;#8220;experts.&amp;#8221; Lastly, I think another part of it is that for so long we&amp;#8217;ve seen our industry as behind-the-times that, yet again, we must be behind with this technology and therefore there must be guidelines to follow; things we can follow to &amp;#8220;get it right.&amp;#8221; Here&amp;#8217;s what I&amp;#8217;ve learned about mobile though…&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Everyone, in every industry&lt;/strong&gt; is figuring this out at the same time, it&amp;#8217;s fucking messy, and, for the most part, anyone spouting off about any particular solution as being &amp;#8220;the right way&amp;#8221; is full of it. And the reason they&amp;#8217;re full of it? One size doesn&amp;#8217;t fit all (&lt;em&gt;no matter what it might say on the package&lt;/em&gt;).&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;This is why I get peeved when people we should all hold in high-esteem drop blog posts with overly pithy summaries that actually end-up muddying the waters that much more.&lt;/p&gt;

&lt;p&gt;In early April 2012 usability expert &lt;a href="http://www.useit.com/jakob/"&gt;Jakob Nielsen&lt;/a&gt; turned his attention to mobile and penned a piece entitled, &lt;em&gt;&lt;a href="http://www.useit.com/alertbox/mobile-vs-full-sites.html"&gt;Mobile Site vs Full Site&lt;/a&gt;&lt;/em&gt;. The summary for the article follows:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Good mobile user experience requires a different design than what&amp;#8217;s needed to satisfy desktop users. Two designs, two sites, and cross-linking to make it all work.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;The very first and, to quote him, &amp;#8221;&lt;em&gt;very clear&lt;/em&gt;&amp;#8221; guideline that Jakob lists for mobile-optimized websites is &amp;#8221;&lt;strong&gt;Build a separate mobile-optimized site.&amp;#8221; &lt;/strong&gt;&lt;em&gt;[Jakob&amp;#8217;s emphasis]&lt;/em&gt; Now the article is essentially correct in highlighting that the rules for mobile design can be different than desktop design and that most of today&amp;#8217;s websites don&amp;#8217;t properly address these issues. Josh Clark&amp;#8217;s (&lt;a href="http://twitter.com/globalmoxie"&gt;@globalmoxie&lt;/a&gt;) &lt;a href="http://www.netmagazine.com/opinions/nielsen-wrong-mobile"&gt;rebuttal&lt;/a&gt; is very much worth reading and others &lt;a href="http://www.netmagazine.com/news/designers-respond-nielsen-mobile-121892"&gt;picked apart the salient points&lt;/a&gt; at the time the original article was written so I won&amp;#8217;t re-hash them. The thing that bothered me then, and does again in light of his equally good and bad article &lt;em&gt;&lt;a href="http://www.useit.com/alertbox/repurposing.html"&gt;Repurposing vs. Optimized Design&lt;/a&gt; (another &lt;a href="http://boagworld.com/mobile-web/separate-mobile-site-vs-responsive-design/"&gt;good overview&lt;/a&gt; so I won&amp;#8217;t re-hash it either)&lt;/em&gt;, is the definitive stance regarding an overall solution that Jakob takes when, in fact, he&amp;#8217;s really only suggesting this &amp;#8220;usability tip&amp;#8221; for a particular subset of sites or use cases.&lt;/p&gt;

&lt;p&gt;In a follow-up article on .net magazine, &amp;#8221;&lt;a href="http://www.netmagazine.com/interviews/nielsen-responds-mobile-criticism"&gt;Nielsen Responds to Mobile Criticism&lt;/a&gt;,&amp;#8221; Nielsen offers clarification on this original article and answers the following question that is based on one of the primary arguments used against his original post:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;.net: The strategy of forking content for separate sites has been described as &amp;#8220;a content strategy nightmare&amp;#8221; – it&amp;#8217;s too hard to maintain and will result in inferior experience for users.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;JN: I would assume that most &lt;em&gt;industrial-scale sites&lt;/em&gt; &lt;em&gt;[emphasis mine]&lt;/em&gt; would be generated from a single back-end product database and content management system, with the different designs represented by templates and rules about what information goes into what version.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Later, in answer to the same question, he says:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Many companies and government agencies have products and information that don&amp;#8217;t speak much to the mobile use case, and they can usually get away with having a single website that&amp;#8217;s optimised for desktop use but with some adaptations to make it reasonably accessible on mobile devices.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;So Jakob&amp;#8217;s first, &amp;#8221;&lt;em&gt;very clear&lt;/em&gt;&amp;#8221; guideline is now not so clear. It gets worse:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;.net: Multiple URLs for a single piece of content is often thought of as a bad idea.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;JN:There are at least three different ways of implementing different user interfaces for different devices:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Each version lives at a different URL.&lt;/li&gt;
&lt;li&gt;The same URL serves up different versions, depending on the device used to request the page.&lt;/li&gt;
&lt;li&gt;The same code is transmitted to all devices, and the client side transforms this into the different designs, using responsive design.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;As long as each user sees the appropriate design, the choice between these implementation options should be an engineering decision and not a usability decision.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;.net: Why have you made no mention of using Responsive Design?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;JN: Because I was writing about user experience, &lt;em&gt;not implementation * &lt;/em&gt;[emphasis mine]*. As mentioned above, responsive design is one of the ways to achieve different user interfaces for different devices.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Suggesting &amp;#8221;&lt;em&gt;Build a separate mobile-optimized site,&lt;/em&gt;&amp;#8221; again his very first guideline, &lt;strong&gt;screams&lt;/strong&gt; implementation. So, based on the .net Magazine clarifications, we should revise his original guideline to be &amp;#8221;&lt;em&gt;If you&amp;#8217;re a very large, centralized organization with mobile use cases it behooves you to do… something mobile-friendly&lt;/em&gt;.&amp;#8221;&lt;/p&gt;

&lt;p&gt;And the kicker to all that? If you just read Jakob&amp;#8217;s material and weren&amp;#8217;t hooked into the people who were involved in the backlash you may never have found the clarification. You may have implemented his suggestions as a &amp;#8220;best practice&amp;#8221; (&lt;em&gt;I mean, it&amp;#8217;s Jakob freakin&amp;#8217; Nielsen&lt;/em&gt;), found a vendor, spent some money and… been stuck with a site and a &lt;a href="http://www.dmolsen.com/mobile-in-higher-ed/2011/11/22/mobile-strategy-is-dead-long-live-content-strategy/"&gt;mobile strategy that didn&amp;#8217;t fit your content&lt;/a&gt;, your internal processes, or real use cases as the web on mobile evolves into the &lt;a href="http://www.slideshare.net/yiibu/reset-the-web"&gt;&amp;#8220;just in time&amp;#8221; internet&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Figuring out what mobile will mean to your institution requires time spent thinking critically about goals, technology, and then trying to understand how these new tools can match up to your existing processes and, honestly, the culture you already have at your institution. To succeed with mobile you&amp;#8217;ll have to be willing to be critical, to fail, to reconfigure, to iterate, to learn and to develop your very own &amp;#8220;best practices.&amp;#8221; Unfortunately, there is no such thing as a turn-key solution or list of tips that will help you easily guide your institution into the new age. No matter what Jakob, or I, might say.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I understand that this article can and probably will come across as the pot calling the kettle black. I take &lt;a href="http://www.dmolsen.com/mobile-in-higher-ed/2012/02/21/ress-and-the-evolution-of-responsive-web-design/"&gt;strong stances myself&lt;/a&gt;. I do hope that I appropriately add caveats to what I write but maybe I don&amp;#8217;t. When I talk to people about mobile and they question how we&amp;#8217;ve implemented and learned so much I tell them something my father told me a long time ago about what he told students he was teaching in a brand-new math class, &amp;#8220;I&amp;#8217;m only a chapter ahead of you.&amp;#8221; Seriously, all of this stuff is a moving target.&lt;/em&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=cyQiFQo1cv4:YTOIy6IttJo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=cyQiFQo1cv4:YTOIy6IttJo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?i=cyQiFQo1cv4:YTOIy6IttJo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=cyQiFQo1cv4:YTOIy6IttJo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MobileInHigherEd/~4/cyQiFQo1cv4" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://dmolsen.com/2012/05/23/the-cautionary-tale-of-the-expert-has-spoken-jakob-nielsen-the-mobile-site-debate</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[ua-parser-php v1.4.0 Released: Easier to Cron, Quick &#8220;redirect&#8221; Example, and UA updates]]></title>
    <link href="http://feedproxy.google.com/~r/MobileInHigherEd/~3/7sYH4ycF63E/ua-parser-php-v1-4-0-released-easier-to-cron-quick-redirect-example-and-ua-updates" />
    <updated>2012-05-21T00:00:00-04:00</updated>
    <id>http://dmolsen.com/2012/05/21/ua-parser-php-v1-4-0-released-easier-to-cron-quick-redirect-example-and-ua-updates</id>
    <content type="html">&lt;p&gt;I&amp;#8217;ve pushed out &lt;a href="https://github.com/tobie/ua-parser/tree/master/php"&gt;v1.4.0 of &lt;code&gt;ua-parser-php&lt;/code&gt;&lt;/a&gt;. &lt;code&gt;ua-parser-php&lt;/code&gt; is the PHP library for the &lt;a href="https://github.com/tobie/ua-parser"&gt;official &lt;code&gt;ua-parser&lt;/code&gt; project&lt;/a&gt;. Why use &lt;code&gt;ua-parser&lt;/code&gt;? If you need a simple library to slice &amp;amp; dice user agent strings into understandable components (&lt;em&gt;e.g. browser, OS, device&lt;/em&gt;) then it&amp;#8217;s the project for you. &lt;code&gt;ua-parser-php&lt;/code&gt; goes a step further by also attempting to categorize browsers as mobile, tablet, computer, or spider.&lt;/p&gt;

&lt;h2&gt;Setting Up ua-parser-php With Cron&lt;/h2&gt;

&lt;p&gt;As the &lt;code&gt;ua-parser&lt;/code&gt; team updates the &lt;a href="https://github.com/tobie/ua-parser/blob/master/regexes.yaml"&gt;YAML file and its regular expressions&lt;/a&gt; you will want to update your local copy of &lt;code&gt;regexes.yaml&lt;/code&gt;. The easiest way to do this on a *nix system is to use &lt;a href="http://en.wikipedia.org/wiki/Cron"&gt;&lt;code&gt;cron&lt;/code&gt;&lt;/a&gt;. I&amp;#8217;ve added some simple flags, &lt;code&gt;-silent&lt;/code&gt; and &lt;code&gt;-nobackup&lt;/code&gt;, to make it easier to set-up an intelligent &lt;code&gt;cron&lt;/code&gt; job. &lt;code&gt;-silent&lt;/code&gt; is very important and I highly encourage you to use the flag if you use &lt;code&gt;ua-parser-php&lt;/code&gt; with &lt;code&gt;cron&lt;/code&gt;. By default, &lt;code&gt;ua-parser-php&lt;/code&gt; writes out process updates to the command line as it fetches the &lt;code&gt;regexes.yaml&lt;/code&gt; file. When using &lt;code&gt;cron&lt;/code&gt; this will end up as an email and will either fill the spool on the machine or your inbox.&lt;/p&gt;

&lt;p&gt;So here are some examples of commands you can use with &lt;code&gt;cron&lt;/code&gt;:&lt;/p&gt;

&lt;div class="gist"&gt;
    &lt;script src="https://gist.github.com/dmolsen/2762715.js"&gt;&lt;/script&gt;
&lt;/div&gt;


&lt;h2&gt;Quick &amp;#8220;redirect&amp;#8221; Example&lt;/h2&gt;

&lt;p&gt;Because the PHP version of &lt;code&gt;ua-parser&lt;/code&gt; supports extra browser categorizations like &lt;code&gt;isMobile&lt;/code&gt; you can use &lt;code&gt;ua-parser-php&lt;/code&gt; as the basis for a simple redirect script. The following should show just how easy it can be:&lt;/p&gt;

&lt;div class="gist"&gt;
    &lt;script src="https://gist.github.com/dmolsen/2762726.js"&gt;&lt;/script&gt;
&lt;/div&gt;


&lt;h2&gt;Recent User-Agent Updates&lt;/h2&gt;

&lt;p&gt;Obviously, the big feature of &lt;code&gt;ua-parser&lt;/code&gt; is matching user-agent strings and giving you usable data. The following user-agents have been added and tested:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google Chrome Frame&lt;/li&gt;
&lt;li&gt;Google Earth browser&lt;/li&gt;
&lt;li&gt;Firefox Alpha builds&lt;/li&gt;
&lt;li&gt;Raven for Mac browser (&lt;em&gt;aka Robin&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Sogou Explorer&lt;/li&gt;
&lt;li&gt;Tizen Browser (&lt;em&gt;aka SLP Browser&lt;/em&gt;) from Samsung&lt;/li&gt;
&lt;li&gt;WebKit Nightly builds (&lt;em&gt;though slightly pointless&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;better support for Firefox Mobile&lt;/li&gt;
&lt;li&gt;better support for the Pale Moon browser&lt;/li&gt;
&lt;li&gt;better support for Polaris 8.0&lt;/li&gt;
&lt;li&gt;better support for Epiphany&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Have you &lt;a href="http://uaparser.dmolsen.com/"&gt;tried out &lt;code&gt;ua-parser-php&lt;/code&gt;&lt;/a&gt; and found an incorrect match? Drop a note in the &lt;a href="https://github.com/tobie/ua-parser/issues"&gt;&lt;code&gt;ua-parser&lt;/code&gt; issue list on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Editor&amp;#8217;s note: I have no idea if ‘cron&amp;#8217; can be used as a verb but, hey, what the hell. &lt;/em&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=7sYH4ycF63E:OWE-KONeMM4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=7sYH4ycF63E:OWE-KONeMM4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?i=7sYH4ycF63E:OWE-KONeMM4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=7sYH4ycF63E:OWE-KONeMM4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MobileInHigherEd/~4/7sYH4ycF63E" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://dmolsen.com/2012/05/21/ua-parser-php-v1-4-0-released-easier-to-cron-quick-redirect-example-and-ua-updates</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[RESS: An Evolution of Responsive Web Design]]></title>
    <link href="http://feedproxy.google.com/~r/MobileInHigherEd/~3/1sSJF3HIK_8/ress-an-evolution-of-responsive-web-design" />
    <updated>2012-05-16T00:00:00-04:00</updated>
    <id>http://dmolsen.com/2012/05/16/ress-an-evolution-of-responsive-web-design</id>
    <content type="html">&lt;p&gt;I &lt;a href="http://www.slideshare.net/dmolsenwvu/ress-an-evolution-of-responsive-web-design"&gt;gave a talk&lt;/a&gt; at &lt;a href="http://www.refreshpittsburgh.org/"&gt;RefreshPittsburgh&lt;/a&gt; (&lt;a href="http://twitter.com/refreshpitt"&gt;@refreshpitt&lt;/a&gt;) last night that hopefully served as an introduction to &lt;a href="http://www.dmolsen.com/mobile-in-higher-ed/2012/02/21/ress-and-the-evolution-of-responsive-web-design/"&gt;RESS&lt;/a&gt; and &lt;a href="http://detector.dmolsen.com"&gt;Detector&lt;/a&gt;. I believe RESS  can help developers address some of the realities of deploying Responsive Web Design-based sites so it was awesome to share the concept. I can&amp;#8217;t thank Jason Head (&lt;a href="http://twitter.com/gjhead"&gt;@gjhead&lt;/a&gt;), Val Head (&lt;a href="http://twitter.com/vlh"&gt;@valh&lt;/a&gt;), and Geoff Barnes (&lt;a href="http://twitter.com/texburgher"&gt;@texburgher&lt;/a&gt;) enough for giving me the opportunity to present. It was a really fun time with a good group both during and after the event and I can&amp;#8217;t recommend Refresh Pitt enough. The other talk of the night, given by Patrick Fulton (&lt;a href="http://twitter.com/patrickfulton"&gt;@patrickfulton&lt;/a&gt;), reviewed &lt;a href="http://compass-style.org/"&gt;Compass&lt;/a&gt; and was really informative. If you&amp;#8217;re in Morgantown or Pittsburgh make sure you follow &lt;a href="http://twitter.com/refreshpitt"&gt;@refreshpitt&lt;/a&gt; on Twitter and attend the next event.&lt;/p&gt;

&lt;p&gt;The talk description:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Responsive web design has become an important tool for front-end developers as they develop mobile-optimized solutions for clients. Browser-detection has been an important tool for server-side developers for the same task for much longer. Unfortunately, both techniques have certain limitations. I&amp;#8217;ll show how both front-end and server-side developers can take advantage of the new technique called RESS (&lt;em&gt;Responsive Web Design with Server Side Components&lt;/em&gt;) that aims to be combine the best of both worlds for delivering mobile-optimized content.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Intrigued? Here is the deck:&lt;/p&gt;

&lt;div class="slideshare-container"&gt;
&lt;div class="slideshare-embed"&gt;
&lt;iframe src="http://www.slideshare.net/slideshow/embed_code/12944955?rel=0" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen&gt; &lt;/iframe&gt; &lt;div style="margin-bottom:5px"&gt; &lt;strong&gt; &lt;a href="http://www.slideshare.net/dmolsenwvu/ress-an-evolution-of-responsive-web-design" title="RESS: An Evolution of Responsive Web Design" target="_blank"&gt;RESS: An Evolution of Responsive Web Design&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href="http://www.slideshare.net/dmolsenwvu" target="_blank"&gt;Dave Olsen&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;I love to get feedback so feel free to pop questions or comments below.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=1sSJF3HIK_8:qcVOUUrjhos:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=1sSJF3HIK_8:qcVOUUrjhos:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?i=1sSJF3HIK_8:qcVOUUrjhos:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=1sSJF3HIK_8:qcVOUUrjhos:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MobileInHigherEd/~4/1sSJF3HIK_8" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://dmolsen.com/2012/05/16/ress-an-evolution-of-responsive-web-design</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[I&#8217;ll Be Presenting on RESS at Refresh Pittsburgh Tuesday, May 15th @ 6.30pm]]></title>
    <link href="http://feedproxy.google.com/~r/MobileInHigherEd/~3/qaEiEblO8Vw/ill-be-presenting-on-ress-at-refresh-pittsburgh-tuesday-may-15th-6-30pm" />
    <updated>2012-05-07T00:00:00-04:00</updated>
    <id>http://dmolsen.com/2012/05/07/ill-be-presenting-on-ress-at-refresh-pittsburgh-tuesday-may-15th-6-30pm</id>
    <content type="html">&lt;p&gt;I&amp;#8217;ll be speaking at &lt;a href="http://www.refreshpittsburgh.org/"&gt;Refresh Pittsburgh&lt;/a&gt; (&lt;a href="http://twitter.com/refreshpitt"&gt;@refreshpitt&lt;/a&gt;) next &lt;strong&gt;Tuesday, May 15th at 6.30pm&lt;/strong&gt;. I&amp;#8217;m really excited about this talk since it&amp;#8217;s about a new technology, &lt;strong&gt;Responsive Web Design + Server Side Components (RESS)&lt;/strong&gt;, that I think holds much promise as we learn to deliver complicated responsive designs while standards get firmed up. Here is the talk description:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Responsive web design has become an important tool for front-end developers as they develop mobile-optimized solutions for clients. Browser-detection has been an important tool for server-side developers for the same task for much longer. Unfortunately, both techniques have certain limitations. I&amp;#8217;ll show how both front-end and server-side developers can take advantage of the new technique called RESS (&lt;em&gt;Responsive Web Design with Server Side Components&lt;/em&gt;) that aims to be combine the best of both worlds for delivering mobile-optimized content.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;If the talk sounds interesting here are some useful links to get some more background (&lt;em&gt;though I will obviously cover all this in the talk&lt;/em&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.lukew.com/ff/entry.asp?1392"&gt;RESS: Responsive Design + Server Side Components&lt;/a&gt; by Luke Wroblewski (&lt;a href="http://twitter.com/lukew"&gt;@lukew&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.lukew.com/ff/entry.asp?1509"&gt;Which One: Responsive Design, Device Experiences, or RESS?&lt;/a&gt; by Luke Wroblewski (&lt;a href="http://twitter.com/lukew"&gt;@lukew&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dmolsen.com/mobile-in-higher-ed/2012/02/21/ress-and-the-evolution-of-responsive-web-design/"&gt;RESS, Server-side Feature-detection and the Evolution of Responsive Web Design&lt;/a&gt; by me&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I&amp;#8217;ll also be talking a little bit about my work with &lt;a href="http://detector.dmolsen.com"&gt;Detector&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;By the way, the other talk that night will be given by Patrick Fulton (&lt;a href="http://twitter.com/patrickfulton"&gt;@patrickfulton&lt;/a&gt;) and is on Compass. The description:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;This presentation is an overview of Compass, which is a CSS authoring framework that tackles common stylesheet problems such as grid layouts, handling CSS3 vendor differences, and stylesheet optimization. It does for CSS what jQuery has done for JavaScript: solve real world problems, letting designers and developers create stylesheets more efficiently.&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=qaEiEblO8Vw:4922fE6FRs4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=qaEiEblO8Vw:4922fE6FRs4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?i=qaEiEblO8Vw:4922fE6FRs4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=qaEiEblO8Vw:4922fE6FRs4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MobileInHigherEd/~4/qaEiEblO8Vw" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://dmolsen.com/2012/05/07/ill-be-presenting-on-ress-at-refresh-pittsburgh-tuesday-may-15th-6-30pm</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[ua-parser-php Now A Part of the Official ua-parser GitHub Repository]]></title>
    <link href="http://feedproxy.google.com/~r/MobileInHigherEd/~3/-OGkhMCV8TY/ua-parser-php-now-a-part-of-the-official-ua-parser-github-repository" />
    <updated>2012-05-02T00:00:00-04:00</updated>
    <id>http://dmolsen.com/2012/05/02/ua-parser-php-now-a-part-of-the-official-ua-parser-github-repository</id>
    <content type="html">&lt;p&gt;For fans of user-agent detection I&amp;#8217;m pleased to announce that &lt;a href="https://github.com/dmolsen/ua-parser-php"&gt;ua-parser-php&lt;/a&gt;, my pseudo-port of the original Python-based ua-parser project, has now been rolled into the &lt;a href="https://github.com/tobie/ua-parser"&gt;official ua-parser repository on GitHub&lt;/a&gt;. The &lt;a href="https://github.com/tobie/ua-parser"&gt;official repo&lt;/a&gt; now contains JavaScript, Python, and PHP libraries for all your user-agent detection needs. We now have three folks watching over the official repository and, more importantly, the official YAML file that powers all three libraries. I&amp;#8217;m looking forward to seeing how all three evolve.&lt;/p&gt;

&lt;p&gt;Thanks to Tobie Langel (&lt;a href="http://twitter.com/tobie"&gt;@tobie&lt;/a&gt;) and Lindsey Simon (&lt;a href="http://twitter.com/elsigh"&gt;@elsigh&lt;/a&gt;) for including my library in the official repo and Paul Irish (&lt;a href="http://twitter.com/paul_irish"&gt;@paul_irish&lt;/a&gt;) for getting us all together.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=-OGkhMCV8TY:g5PqvAiK85E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=-OGkhMCV8TY:g5PqvAiK85E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?i=-OGkhMCV8TY:g5PqvAiK85E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=-OGkhMCV8TY:g5PqvAiK85E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MobileInHigherEd/~4/-OGkhMCV8TY" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://dmolsen.com/2012/05/02/ua-parser-php-now-a-part-of-the-official-ua-parser-github-repository</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[Share Your Knowledge: Present at HighEdWeb National or HighEdWeb Arkansas]]></title>
    <link href="http://feedproxy.google.com/~r/MobileInHigherEd/~3/nxByfaBb_wU/share-your-knowledge-present-at-highedweb-national-or-highedweb-arkansas" />
    <updated>2012-04-17T00:00:00-04:00</updated>
    <id>http://dmolsen.com/2012/04/17/share-your-knowledge-present-at-highedweb-national-or-highedweb-arkansas</id>
    <content type="html">&lt;p&gt;Their are two upcoming conferences that are near and dear to me that are currently looking for presentation proposals. Please think about submitting a proposal for one or, better yet, both.&lt;/p&gt;

&lt;h2&gt;HighEdWeb National&lt;/h2&gt;

&lt;p&gt;The first is the &lt;a href="http://2012.highedweb.org/"&gt;national HighEdWeb conference&lt;/a&gt; which is being held in Milwaukee October 7-10. Milwaukee may not sound like the best location to spend a few days in chilly October but that&amp;#8217;s more than made up for by the warm crowd. And it truly is a warm, friendly crowd of people who you can really commiserate with and learn from. It&amp;#8217;s one conference where the connections grow beyond the conference itself. I haven&amp;#8217;t been to national since the move away from Rochester but I&amp;#8217;m hoping to change that this year. The deadline for submission for proposals is April 21st. You can submit ideas for a poster session or a 45 minute talk. Registration is $600 before July 31 but if you get accepted for a talk you save $100. A great deal. Go &lt;a href="http://2012.highedweb.org/proposals/"&gt;submit a proposal now&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;HighEdWeb Arkansas&lt;/h2&gt;

&lt;p&gt;The second is the &lt;a href="http://hewebar.org/"&gt;regional HighEdWeb Arkansas&lt;/a&gt; conference July 26-27. It&amp;#8217;s being held in Little Rock. If you live within driving distance and want a nice, intimate higher ed conference experience then this is the one for you. I presented at another regional last year (&lt;em&gt;HighEdWeb Rochester&lt;/em&gt;) and was impressed with the local connections that people were able to make. I&amp;#8217;m &lt;a href="http://hewebar.org/2012/03/26/bogo/"&gt;running a workshop &lt;/a&gt;at HighEdWeb Arkansas this year and I&amp;#8217;m looking forward to mingling with folks from a different part of the country. The deadline for submission of proposals is April 20th. If you&amp;#8217;ve never spoken before but have something to share or want to roll out new material (&lt;em&gt;which is what I did&lt;/em&gt;) this is a great venue to do it in. Go &lt;a href="http://hewebar.org/present/"&gt;submit a proposal now&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;PS – Another conference I&amp;#8217;m presenting at, the &lt;a href="http://webconference.psu.edu/"&gt;Web Conference at Penn State&lt;/a&gt;, is almost full. Make sure to &lt;a href="http://webconference.psu.edu/register"&gt;register now&lt;/a&gt; if you haven&amp;#8217;t already.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=nxByfaBb_wU:WFU7oFj-UTg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=nxByfaBb_wU:WFU7oFj-UTg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?i=nxByfaBb_wU:WFU7oFj-UTg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=nxByfaBb_wU:WFU7oFj-UTg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MobileInHigherEd/~4/nxByfaBb_wU" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://dmolsen.com/2012/04/17/share-your-knowledge-present-at-highedweb-national-or-highedweb-arkansas</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[New Presentation: The Future-Friendly Campus]]></title>
    <link href="http://feedproxy.google.com/~r/MobileInHigherEd/~3/RbNniiy3Xn8/new-presentation-the-future-friendly-campus" />
    <updated>2012-04-11T00:00:00-04:00</updated>
    <id>http://dmolsen.com/2012/04/11/new-presentation-the-future-friendly-campus</id>
    <content type="html">&lt;p&gt;This morning I had the pleasure of presenting my new talk, &lt;a href="http://speakerdeck.com/u/dmolsen/p/the-future-friendly-campus"&gt;The Future-Friendly Campus&lt;/a&gt;, at the &lt;a href="http://environmentsforhumans.com/2012/doteduguru-summit/"&gt;.eduGuru Summit&lt;/a&gt; (&lt;a href="http://twitter.com/eduguru"&gt;@eduguru&lt;/a&gt;). The basic points of the talk are derived from the &lt;a href="http://futurefriend.ly"&gt;Future-Friendly manifesto&lt;/a&gt; and &lt;a href="http://www.dmolsen.com/mobile-in-higher-ed/2011/11/07/the-future-friendly-campus-a-manifesto/"&gt;my own response to it&lt;/a&gt; last fall. The general idea is that we&amp;#8217;ve reached a point where it&amp;#8217;s going to be difficult to continue to on our current track of developing content silos and new &amp;#8220;solutions&amp;#8221; when our outlets are only going to continue to proliferate. Now is the time to reevaluate and the &lt;a href="http://futurefriend.ly"&gt;Future-Friendly manifesto&lt;/a&gt; provides an interesting idea of how we can move forward. If you have comments or questions please share!&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=RbNniiy3Xn8:w18sj3wjvXU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=RbNniiy3Xn8:w18sj3wjvXU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?i=RbNniiy3Xn8:w18sj3wjvXU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=RbNniiy3Xn8:w18sj3wjvXU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MobileInHigherEd/~4/RbNniiy3Xn8" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://dmolsen.com/2012/04/11/new-presentation-the-future-friendly-campus</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[RESS, Server-Side Feature-Detection and the Evolution of Responsive Web Design]]></title>
    <link href="http://feedproxy.google.com/~r/MobileInHigherEd/~3/RpZwfZZf7Vk/ress-and-the-evolution-of-responsive-web-design" />
    <updated>2012-02-21T00:00:00-05:00</updated>
    <id>http://dmolsen.com/2012/02/21/ress-and-the-evolution-of-responsive-web-design</id>
    <content type="html">&lt;p&gt;In May 2010 Ethan Marcotte (&lt;a href="http://twitter.com/beep"&gt;@beep&lt;/a&gt;) wrote the seminal article, &lt;em&gt;&lt;a href="http://www.alistapart.com/articles/responsive-web-design/"&gt;Responsive Web Design&lt;/a&gt;&lt;/em&gt;. At first I took a dim view of the piece. Most of &lt;a href="http://m.wvu.edu/"&gt;my mobile experience&lt;/a&gt; at the time was in developing mobile-optimized experiences that relied on browser-detection &amp;amp; serving separate templates. Honestly, it worked for me as a, primarily, server-side dev and it worked well. To me, responsive web design seemed like a front-end solution that didn&amp;#8217;t take into account many of the issues facing mobile developers… apart from screen width that is.&lt;/p&gt;

&lt;p&gt;Fast forward a year and a half (&lt;em&gt;and quite a few arguments&lt;/em&gt;)… I&amp;#8217;ve now worked on &lt;a href="http://happyholidays.wvu.edu/"&gt;one responsive project&lt;/a&gt;, I&amp;#8217;ve watched a number of other responsive projects come out of &lt;a href="http://universityrelations.wvu.edu/"&gt;our department&lt;/a&gt;, and I&amp;#8217;ve come to appreciate where and when responsive web design works and works well. On top of that I&amp;#8217;ve learned how helpful front-end projects like &lt;a href="http://modernizr.com/"&gt;Modernizr&lt;/a&gt;, &lt;a href="http://microjs.com/"&gt;MicroJS&lt;/a&gt;, and &lt;a href="http://yepnopejs.com/"&gt;YepNope.js&lt;/a&gt; can be to any developer. That being said, it&amp;#8217;s tough to teach an old dog new tricks and, to me, it still seemed as if their was something not quite right about responsive web design.&lt;/p&gt;

&lt;p&gt;At this point I won&amp;#8217;t rehash the arguments. Yes, dear dead horse, you can have a rest. Instead, I&amp;#8217;ll focus on an article Luke Wroblewski (&lt;a href="http://twitter.com/lukew/" rel="nofollow"&gt;@lukew&lt;/a&gt;) wrote entitled, &lt;em&gt;&lt;a href="http://www.lukew.com/ff/entry.asp?1392" rel="nofollow"&gt;Responsive Design + Server Side Components&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;RESS: Responsive Design + Server Side Components&lt;/h2&gt;

&lt;p&gt;For a while now I&amp;#8217;ve felt like I was somehow out of touch for still preferring browser-detection over responsive design (&lt;em&gt;like I said, I&amp;#8217;m an old dog&lt;/em&gt;). I&amp;#8217;m assuming it&amp;#8217;s because I tend to follow front-end folks on Twitter who are very much on the responsive web design bandwagon. But between &lt;a href="http://www.lukew.com/ff/entry.asp?1392"&gt;Luke&amp;#8217;s article&lt;/a&gt;, &lt;a href="http://yiibu.com/"&gt;Yiibu&amp;#8217;s&lt;/a&gt; talk, &lt;em&gt;&lt;a href="http://www.slideshare.net/yiibu/adaptation-why-responsive-design-actually-begins-on-the-server"&gt;Adaptation&lt;/a&gt;,&lt;/em&gt; as well as their &lt;a href="https://github.com/yiibu/profile"&gt;Profile tool&lt;/a&gt;, and the news that &lt;a href="http://www.circleid.com/posts/20120111_analysis_of_server_side_mobile_web_detection/"&gt;82% of Alexa&amp;#8217;s top 100 properties used server-side detection to modify some amount of their content&lt;/a&gt; I started to feel a little less out of touch.&lt;/p&gt;

&lt;p&gt;The principle concept that I found so intriguing in Luke&amp;#8217;s article, as well as the work done by Yiibu, is that &lt;strong&gt;browser-detection can be used to help inform an overall responsive design as opposed to being the be-all-end-all for templating&lt;/strong&gt;. By this I mean that partial pieces of content can be inserted intelligently and where appropriate (&lt;em&gt;think images&lt;/em&gt;) into a larger layout that&amp;#8217;s given to all browsers and is governed by responsive design principles. Hence the combining of &amp;#8221;&lt;em&gt;responsive design&lt;/em&gt;&amp;#8221; and &amp;#8221;&lt;em&gt;server side components&lt;/em&gt;&amp;#8221; in Luke&amp;#8217;s name for the technique.&lt;/p&gt;

&lt;p&gt;This isn&amp;#8217;t something that I should consider revolutionary. On the face of it&amp;#8217;s sort of &amp;#8221;&lt;em&gt;Duh!&lt;/em&gt;&amp;#8221; but sometimes even the obvious has to be pointed out. It&amp;#8217;s nice to see a bridge of sorts form between these two competing concepts. Their is value on both sides of the fence and they can and should work together. The question is &amp;#8221;&lt;em&gt;How?&lt;/em&gt;&amp;#8221;&lt;/p&gt;

&lt;h2&gt;Implementing a RESS Solution&lt;/h2&gt;

&lt;p&gt;Luke does a good job of &lt;a href="http://www.lukew.com/ff/entry.asp?1392"&gt;taking a reader through a theoretical(?) RESS solution&lt;/a&gt; that is based on his experiences at his start-up, Bagcheck. He shows,  quite clearly, how the server-defined partials fit in nicely with an overall responsive design. One thing that the original RESS example fails to review is &lt;em&gt;how&lt;/em&gt; content is classified for browsers though there is a nod towards user agent detection. I was curious to see how that part of a RESS solution worked so I put together one of my own that used &lt;a href="http://mustache.github.com/"&gt;Mustache&lt;/a&gt; just like in his example and &lt;a href="http://detector.dmolsen.com"&gt;Detector.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://detector.dmolsen.com/demo/mustache/"&gt;My implementation of a RESS solution&lt;/a&gt; is very simple. I didn&amp;#8217;t explore much beyond modifying some markup, adaptive images, and CSS. The first thing that I realized when I started tackling the &amp;#8221;&lt;em&gt;how&lt;/em&gt;&amp;#8221; was that I was going to have to categorize browsers into classes (&lt;em&gt;to be fair, Luke does mention classes&lt;/em&gt;). For the &lt;a href="http://detector.dmolsen.com/demo/mustache/"&gt;purposes of the example&lt;/a&gt; I set the browser classes to be &lt;a href="http://detector.dmolsen.com/demo/mustache/?pid=13ee8513d6fb7f97aef6635309b91f40"&gt;desktop&lt;/a&gt;, &lt;a href="http://detector.dmolsen.com/demo/mustache/?pid=e1bd58cc186d3a2156b6ebddb558fd41"&gt;mobile-advanced&lt;/a&gt;, and &lt;a href="http://detector.dmolsen.com/demo/mustache/?pid=658e6d9b003bb3f3a3d9ae6e5ca1a42a"&gt;mobile-basic&lt;/a&gt;. The desktop class has &amp;#8220;regular-sized&amp;#8221; images, the mobile-advanced class has smaller images as well as some modified CSS, and the mobile-basic class has a very simple layout that utilizes accesskeys.&lt;/p&gt;

&lt;p&gt;If you&amp;#8217;re interested in how I set-up &lt;a href="http://detector.dmolsen.com/demo/mustache/"&gt;the demo&lt;/a&gt; and &lt;a href="https://github.com/dmolsen/Detector/wiki/Templating-with-Detector-&amp;amp;-Mustache-Tutorial"&gt;how it all works&lt;/a&gt; please &lt;a href="https://github.com/dmolsen/Detector/wiki/Templating-with-Detector-&amp;amp;-Mustache-Tutorial"&gt;check out the tutorial&lt;/a&gt; and &lt;a href="https://github.com/dmolsen/Detector/tree/master/web/demo/mustache"&gt;the source&lt;/a&gt;. What I&amp;#8217;d like to talk about now is how I ended up with my classifications and how I think it points to more responsive solutions &lt;em&gt;on the server&lt;/em&gt; and not just in the browser.&lt;/p&gt;

&lt;h2&gt;Taking Feature-Detection Server-Side&lt;/h2&gt;

&lt;p&gt;Developers have been using server-side libraries &amp;amp; services like &lt;a href="http://wurfl.sourceforge.net/"&gt;WURFL&lt;/a&gt;, &lt;a href="http://deviceatlas.com/"&gt;DeviceAtlas&lt;/a&gt;, and &lt;a href="http://51degrees.mobi/"&gt;51Degrees.mobi&lt;/a&gt; to provide mobile device characteristics for ages. In that respect, server-side feature-detection is nothing new. I would propose that we update our terminology a bit though. &amp;#8221;&lt;em&gt;Device detection&lt;/em&gt;&amp;#8221; seems anachronistic and, frankly, misguided to me. Who cares what a device can do if the browser, the bit we as developers actually interact with, can&amp;#8217;t access them?  This is not to suggest that these device databases don&amp;#8217;t contain that kind of information but rather that they include details that, for the most part, might not matter to developers. In order to get more relevant data there is one technique that server-side developers should appropriate from our front-end brethren and it&amp;#8217;s &lt;em&gt;browser&lt;/em&gt; &lt;em&gt;feature-detection&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;In his article, &lt;em&gt;&lt;a href="http://infrequently.org/2011/01/cutting-the-interrogation-short/"&gt;Cutting the Interrogation Short&lt;/a&gt;&lt;/em&gt;, Alex Russell (&lt;a href="http://twitter.com/slightlylate"&gt;@slightlylate&lt;/a&gt;) makes an interesting proposal. He suggests, &amp;#8221;&lt;em&gt;feature tests should only ever be run&lt;/em&gt; &lt;strong&gt;&lt;em&gt;when you don&amp;#8217;t know what UA you&amp;#8217;re running in&lt;/em&gt;&lt;/strong&gt;.&amp;#8221; This is a proposal I wholeheartedly agree with. So where to store the results of these feature tests that you want to run only once per user-agent? Alex suggests a few methods that rely on the front-end detection libraries but I would suggest that the results get stored in a server-side cache (&lt;em&gt;but, hey, I&amp;#8217;m biased&lt;/em&gt;). Feature test results stored on the server, using the user agent as a key, gives server-side code the ability to act on them making the server-side code that much smarter about what should be delivered. If necessary, the server-side code can always pass the list of features for a particular user agent to the browser as a cookie or a JavaScript include. Also, if tests are stored server-side the initial set of tests can be &lt;a href="http://detector.dmolsen.com/demo/modernizr-listing/"&gt;extremely robust&lt;/a&gt;. The developer would capture a lot of details but still have control over what gets delivered to the browser thereby optimizing the experience for their visitors. Hopefully, it could make for a &amp;#8221;&lt;em&gt;best of both worlds&lt;/em&gt;&amp;#8221; scenario.&lt;/p&gt;

&lt;p&gt;And server-side feature-detection is what is being done in my &lt;a href="http://detector.dmolsen.com/demo/mustache/"&gt;RESS demo&lt;/a&gt; and helping me classify browsers… well, sort of. The demo was created to help put my browser- and feature-detection library, &lt;a href="http://detector.dmolsen.com/"&gt;Detector&lt;/a&gt;, through its paces. One of its core features is offering &lt;a href="https://github.com/dmolsen/Detector/wiki/Detector-Family-Tutorial"&gt;browser families&lt;/a&gt; based on definitions that combine information from traditional user agent parsing (&lt;em&gt;via &lt;a href="https://github.com/dmolsen/ua-parser-php"&gt;ua-parser-php&lt;/a&gt;&lt;/em&gt;) and information from &lt;a href="http://modernizr.com"&gt;Modernizr&lt;/a&gt;-based tests (&lt;em&gt;&lt;a href="http://detector.dmolsen.com/demo/modernizr-listing/"&gt;full list&lt;/a&gt;&lt;/em&gt;). The families in the demo are not based purely on browser features as determined feature-detection but that&amp;#8217;s not to say that Detector couldn&amp;#8217;t (&lt;em&gt;and it probably should&lt;/em&gt;) be expanded to include more information on, say, browser-window width (&lt;em&gt;which is currently one of the few things it doesn&amp;#8217;t capture&lt;/em&gt;) and could then rely almost exclusively on feature tests. But there&amp;#8217;s actually one area where these cached feature tests would offer a lot of help…&lt;/p&gt;

&lt;h2&gt;It&amp;#8217;s Not Just About Mobile Versus Desktop&lt;/h2&gt;

&lt;p&gt;RESS, server-side feature-detection, and Detector are &lt;em&gt;not&lt;/em&gt; mobile solutions. Yes, they come from people focused on mobile-related issues but any of these options can be used in helping deliver optimized experiences to &lt;em&gt;any&lt;/em&gt; browser. In the same way that Modernizr helps polyfill for older browsers, server-side feature-detection and RESS can and do offer similar capabilities. I&amp;#8217;d hate to see them get pigeonholed as solutions that are only implemented by mobile developers. I believe that the combination of these techniques can offer a very robust platform for building &lt;a href="http://futurefriend.ly"&gt;future friendly&lt;/a&gt; websites and apps. That said, there is still work to do to make these solutions as robust as possible.&lt;/p&gt;

&lt;h2&gt;RESS Doesn&amp;#8217;t Solve the Dumb Content Problem… Yet&lt;/h2&gt;

&lt;p&gt;In &lt;em&gt;&lt;a href="http://mpulp.mobi/2011/05/next-steps-of-responsive-web-design/"&gt;Next Steps of Responsive Web Design&lt;/a&gt;&lt;/em&gt; Jon Arnes Sæterås (&lt;a href="http://twitter.com/jonarnes"&gt;@jonarnes&lt;/a&gt;) writes, &amp;#8221;&lt;em&gt;It is not only the &lt;strong&gt;design&lt;/strong&gt; of the web site and the &lt;strong&gt;layout&lt;/strong&gt; of content that needs to be adapted of enhanced; the idea of being responsive, adaptive and enhancing, must be implemented in the whole value chain.&lt;/em&gt;&amp;#8221; His value chain contains four parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stupid Editor&lt;/li&gt;
&lt;li&gt;Stupid CMS&lt;/li&gt;
&lt;li&gt;Stupid Web Server&lt;/li&gt;
&lt;li&gt;Device (&lt;em&gt;I&amp;#8217;d suggest browser&lt;/em&gt;) assumed to be intelligent&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;RESS and storing feature-detection results on the server  can go a long way in making the web server smarter and giving us a better idea of just how intelligent that browser is. But even addressing those two things only means that the &lt;em&gt;output&lt;/em&gt; is smarter. Neither solutions address how content enters the system (&lt;em&gt;e.g. the editor&lt;/em&gt;) and how it&amp;#8217;s stored (&lt;em&gt;e.g. the CMS&lt;/em&gt;). For example, in the &lt;a href="http://detector.dmolsen.com/demo/mustache/?pid=e1bd58cc186d3a2156b6ebddb558fd41"&gt;mobile-advanced layout of the demo&lt;/a&gt; on whom or what does it fall to properly crop &amp;amp; size the images?&lt;/p&gt;

&lt;p&gt;In the same way that responsive web design made designers and front-end developers think more about how to be both mobile and &lt;a href="http://futurefriend.ly/"&gt;future friendly&lt;/a&gt; I&amp;#8217;m hopeful that RESS and server-side feature-detection can start a conversation amongst those of us focused on the server end of things (&lt;em&gt;especially content management systems!&lt;/em&gt;) about how we can better deliver content to make those responsive web designs that much better. Can we help responsive web design evolve that much more?&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=RpZwfZZf7Vk:SmWKNb29q-k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=RpZwfZZf7Vk:SmWKNb29q-k:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?i=RpZwfZZf7Vk:SmWKNb29q-k:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MobileInHigherEd?a=RpZwfZZf7Vk:SmWKNb29q-k:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MobileInHigherEd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MobileInHigherEd/~4/RpZwfZZf7Vk" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://dmolsen.com/2012/02/21/ress-and-the-evolution-of-responsive-web-design</feedburner:origLink></entry>
  
</feed>
