SlideShare uma empresa Scribd logo
1 de 60
Baixar para ler offline
The Contextual Experience
                    of the Mobile Web
                                    Jeff Carouth
                              ZendCon, October 19, 2011




Wednesday, October 19, 2011
Howdy!


                        (Yeah, I’m from Texas.)
                        PHP Developer since 2003
                        Web and mobile developer at Texas
                        A&M University



Wednesday, October 19, 2011
This is not a presentation
                      about development…



Wednesday, October 19, 2011
…nor is it about design…




Wednesday, October 19, 2011
…it’s about the collision of
                the two on the mobile web.



Wednesday, October 19, 2011
The Big Three

                    The context of the mobile web is the
                    specific environment and expectations
                      a user or visitor of your website or
                       application brings when he or she
                     accesses it while mobile or using a
                                mobile device.


Wednesday, October 19, 2011
Environment, expectations, and intent

                              Mobile and mobility

                              Devices and capabilities




Wednesday, October 19, 2011
In my opinion, design plays
                     a major role in mobile
                            success.



Wednesday, October 19, 2011
Wednesday, October 19, 2011
Wednesday, October 19, 2011
The question then becomes
                how can you accommodate
                  both a 27” iMac and an
                          iPhone?


Wednesday, October 19, 2011
Or, more accurately, how
                       can you accommodate
                        browsers of differing
                              widths?


Wednesday, October 19, 2011
Obvious Answer: Layouts




Wednesday, October 19, 2011
Option–redirect




Wednesday, October 19, 2011
User Agent sniffing


                              If UA indicates mobile device
                               redirect to separate mobile site, or
                                provide a link to a separate mobile
                               site



Wednesday, October 19, 2011
function mobile_device_detect(/* bunch of params */) {
      $mobile_browser   = false;
      $user_agent       = $_SERVER['HTTP_USER_AGENT'];
      $accept           = $_SERVER['HTTP_ACCEPT'];

             switch(true){
                 case (preg_match('/ipad/i',$user_agent));
                     $mobile_browser = $ipad;
                     $status = 'Apple iPad';
                     if(substr($ipad,0,4)=='http'){
                         $mobileredirect = $ipad;
                     }
                 break;
             }

             if($mobile_browser==true){
                 header('Location: '.$redirect);
                 exit;
             }
  }                           http://detectmobilebrowsers.mobi
Wednesday, October 19, 2011
Or Show A Link




Wednesday, October 19, 2011
Problems with this method


                              Perhaps your user wants your full site.
                          They’ll likely miss any links
                               and alert boxes are terrible.




Wednesday, October 19, 2011
Option–layout switching




Wednesday, October 19, 2011
function is_mobile() {
      $user_agent = strtolower($_SERVER['HTTP_USER_AGENT']);
      if (in_array(
          substr($user_agent, 0, 4),
          array('ipod','cell',...))) {
        return true;
      }
      if (strpos($_SERVER['HTTP_ACCEPT'], 'wap') != false) {
        return true;
      }
      if (preg_match(
          "/(android|blackberry|ipod|palm|...))/i",
          $user_agent)) {
        return true;
      }
      return false;
    }



Wednesday, October 19, 2011
if (is_mobile()) {
        require_once "mobile-layout.php";
    } else {
        require_once "desktop-layout.php";
    }




Wednesday, October 19, 2011
That’s very basic, and
                               largely unreliable.



Wednesday, October 19, 2011
We can use a device
                        database to improve the
                         accuracy of matches.



Wednesday, October 19, 2011
Choices


                        WURFL (Wireless Universal Resource
                        FiLe)
                              Device Atlas




Wednesday, October 19, 2011
class Bootstrap
        extends Zend_Application_Bootstrap_Abstract
    {
        protected function _mobileLayoutSwitch() {
            $this->bootstrap('useragent');
            $this->bootstrap('layout');
            $uaType = $this->getResource('useragent')
                            ->getDevice()
                            ->getType();
            if ($uaType === 'mobile') {
                $this->getResource('layout')
                    ->setLayout('mobile');
            }
        }
    }




Wednesday, October 19, 2011
protected function _mobileLayoutSwitch() {
        $this->bootstrap('useragent');
        $this->bootstrap('layout');
        $resolution = $this->getResource('useragent')
                        ->getDevice()
                        ->getFeature('resolution_width');
        if ($resolution < 320) {
            $layout = 'poor';
        } elseif ($resoution < 480) {
            $layout = 'medium';
        } else {
            $layout = 'desktop';
        }
        $this->getResource('layout')->setLayout($layout);
    }




Wednesday, October 19, 2011
It works…


                              But we can do better.
                         We can apply the mantra: “branch on
                        features not user agents” to our
                        mobile layouts.



Wednesday, October 19, 2011
The problem with user
                                agents is: they lie.



Wednesday, October 19, 2011
Option–responsive layout




Wednesday, October 19, 2011
So, how many of you
                        remember liquid or fluid
                                layouts?



Wednesday, October 19, 2011
Responsive breakpoints




Wednesday, October 19, 2011
Techniques

                 All in one CSS file
                 Base CSS file and one CSS file for each
                class of device
                       Major breakpoints in <link> media
                      attribute
                        Minor breakpoints in device stylesheet


Wednesday, October 19, 2011
<link rel=stylesheet type=text/css
        href=styles/base.css media="screen,handheld" />

    <link rel=stylesheet type=text/css
        href=styles/mobile.css
        media="only screen and (min-width: 320px)" />

    <link rel=stylesheet type=text/css
        href=styles/desktop.css
        media="only screen and (min-width: 720px)" />



    /****** mobile.css ******/
    @media screen and (min-width: 480px) {
        /* styles for this class of mobile browser */
    }

    @media screen and (min-width: 640px) {
        /* iPad maybe? */
    }
Wednesday, October 19, 2011
Desktop and iPad




Wednesday, October 19, 2011
A couple mobile devices


       iPhone 3GS                           iPhone 4
                                Nexus One




Wednesday, October 19, 2011
That’s great, but we haven’t
                   really solved the device
                          context yet.



Wednesday, October 19, 2011
Problem: limited bandwidth




Wednesday, October 19, 2011
All we adjusted for is width


                         Images are the same size for desktops
                        as they are for mobile
                          This is bad.Very bad.
                              Solution?



Wednesday, October 19, 2011
JavaScript-based image
                                       resize




                                            Credit: http://jedimsieer.deviantart.com/
Wednesday, October 19, 2011
<img src="images/sample-small.jpg?full=images/sample-
    large.jpg" />

    (function(win) {
      /* code */
      var loadLarge = win.screen.availWidth > 480;
      if (!loadLarge) {
        return;
      }
      // more code...
      imgs = document.getElementsByTagName("img");
      for ( var i = 0, il = imgs.length; i < il; i++) {
          src = imgs[i].getAttribute("src");
          fullImgSrc = src.match( /(?|&)full=(.*)&?/ ) && RegExp.$2;
          if( fullImgSrc ) {
              imgs[i].src = fullImgSrc;
          }
      }
      //more code...
    })(this);


                              https://github.com/filamentgroup/Responsive-Images

Wednesday, October 19, 2011
Alternative


                              Do the work on the server.
                         (You know, like in the 1990s when
                        JavaScript was Evil(tm))




Wednesday, October 19, 2011
The Process

                   Device requests page from server.
                  Service asks device for its device profile
                 (cookie?)
                   No profile available, build one from base.
                   Load resources based on profile.
                   Deliver content AND profile to device.

Wednesday, October 19, 2011
I haven’t seen this
                              implemented yet.



Wednesday, October 19, 2011
The mobility context




Wednesday, October 19, 2011
Wednesday, October 19, 2011
The Go To Example


                        Geolocation
                        i.e., driving directions or stores near
                        me




Wednesday, October 19, 2011
Do you trust directions
                           from my site, or from
                              Google Maps?



Wednesday, October 19, 2011
Right. I use Google Maps
                                   too.



Wednesday, October 19, 2011
So let’s use geolocation for
                        something else.



Wednesday, October 19, 2011
Working on a CRM


                              Sales agent travels to Switzerland
                         Give a listing of leads/customers in
                        the area.




Wednesday, October 19, 2011
HTML5 Geolocation API

     if (navigator.geolocation) {
         navigator.geolocation.getCurrentPosition(
             function (position) {
                 callGeonamesWebservice(
                     position.coords.latitude,
                     position.coords.longitude);
             },
             function (error) {
                 //handle error
             }
         );
     }



Wednesday, October 19, 2011
<geonames>
        <code>
            <postalcode>8775</postalcode>
            <name>Luchsingen</name>
            <countryCode>CH</countryCode>
            <lat>46.98017</lat>
            <lng>8.99868</lng>
            <adminCode1/>
            <adminName1/>
            <adminCode2/>
            <adminName2/>
            <adminCode3>1631</adminCode3>
            <adminName3/>
            <distance>2.2072</distance>
        </code>
    </geonames>




Wednesday, October 19, 2011
Fetch Data From Your App




Wednesday, October 19, 2011
function findCustomersByPostalCode(
            $postalCodes,
            $recency) {
        //some SQL
        //where postal_code in $postalCodes
        //and last_contact between $recency and today

               return $customers;
    }




Wednesday, October 19, 2011
That’s just one example.
            Mobility context is absolutely
                application-specific



Wednesday, October 19, 2011
Recap

                         Many options for dealing with device
                        context
                              User Agent sniffing
                               Redirect
                               Layout switch
                              Responsive design

Wednesday, October 19, 2011
Recap (cont.)


                         Users want to complete a task, not
                        always informative in nature.
                         Mobile is quickly shifting from a nice-
                        to-have to a must have component of
                        your projects.



Wednesday, October 19, 2011
What about jQuery Mobile
                    and other mobile
                       frameworks?



Wednesday, October 19, 2011
Thank you!




Wednesday, October 19, 2011
Questions?

                              Contact me
                               jcarouth@gmail.com
                               @jcarouth
                               jcarouth on Freenode
                              Rate at: http://joind.in/3786


Wednesday, October 19, 2011

Mais conteúdo relacionado

Semelhante a The Contextual Experience of the Mobile Web

Boston Globe: Responsive Web Design
Boston Globe: Responsive Web DesignBoston Globe: Responsive Web Design
Boston Globe: Responsive Web Design
The Media Consortium
 
Intro to Web Apps using HTML5 and Javascript
Intro to Web Apps using HTML5 and JavascriptIntro to Web Apps using HTML5 and Javascript
Intro to Web Apps using HTML5 and Javascript
Brian Hogg
 
Social design (Seattle 09-2011)
Social design (Seattle 09-2011)Social design (Seattle 09-2011)
Social design (Seattle 09-2011)
Andrei Zyuzikov
 

Semelhante a The Contextual Experience of the Mobile Web (20)

A Look at the Future of HTML5
A Look at the Future of HTML5A Look at the Future of HTML5
A Look at the Future of HTML5
 
Mobile Accessibility - Accessibility Camp Toronto
Mobile Accessibility - Accessibility Camp TorontoMobile Accessibility - Accessibility Camp Toronto
Mobile Accessibility - Accessibility Camp Toronto
 
ISA11 - Bill Scott - Designing Mice Men
ISA11 - Bill Scott - Designing Mice MenISA11 - Bill Scott - Designing Mice Men
ISA11 - Bill Scott - Designing Mice Men
 
Brian Hogg - Web Apps using HTML5 and JS
Brian Hogg - Web Apps using HTML5 and JSBrian Hogg - Web Apps using HTML5 and JS
Brian Hogg - Web Apps using HTML5 and JS
 
Cross-Platform, Native Mobile Development with a DSL
Cross-Platform, Native Mobile Development with a DSLCross-Platform, Native Mobile Development with a DSL
Cross-Platform, Native Mobile Development with a DSL
 
Boston Globe: Responsive Web Design
Boston Globe: Responsive Web DesignBoston Globe: Responsive Web Design
Boston Globe: Responsive Web Design
 
Developing a Progressive Mobile Strategy (Key Comm Version)
Developing a Progressive Mobile Strategy (Key Comm Version)Developing a Progressive Mobile Strategy (Key Comm Version)
Developing a Progressive Mobile Strategy (Key Comm Version)
 
Intro to Web Apps using HTML5 and Javascript
Intro to Web Apps using HTML5 and JavascriptIntro to Web Apps using HTML5 and Javascript
Intro to Web Apps using HTML5 and Javascript
 
Mobile Web on Drupal!
Mobile Web on Drupal!Mobile Web on Drupal!
Mobile Web on Drupal!
 
Changeyrmarkup
ChangeyrmarkupChangeyrmarkup
Changeyrmarkup
 
has("builds")
has("builds")has("builds")
has("builds")
 
Building Mobile Apps in WordPress - WordCamp Toronto 2011
Building Mobile Apps in WordPress - WordCamp Toronto 2011Building Mobile Apps in WordPress - WordCamp Toronto 2011
Building Mobile Apps in WordPress - WordCamp Toronto 2011
 
Social design (Seattle 09-2011)
Social design (Seattle 09-2011)Social design (Seattle 09-2011)
Social design (Seattle 09-2011)
 
Cours1 design d'interaction_csv
Cours1 design d'interaction_csvCours1 design d'interaction_csv
Cours1 design d'interaction_csv
 
Cours1: design d'interaction
Cours1: design d'interactionCours1: design d'interaction
Cours1: design d'interaction
 
Android Development Slides
Android Development SlidesAndroid Development Slides
Android Development Slides
 
Fall11 Day 9 - Location Based & Mobile Marketing
Fall11 Day 9 - Location Based & Mobile MarketingFall11 Day 9 - Location Based & Mobile Marketing
Fall11 Day 9 - Location Based & Mobile Marketing
 
So, you think you know widgets.
So, you think you know widgets.So, you think you know widgets.
So, you think you know widgets.
 
BlackBerry WebWorks APIs
BlackBerry WebWorks APIsBlackBerry WebWorks APIs
BlackBerry WebWorks APIs
 
We're not designing posters, here!
We're not designing posters, here!We're not designing posters, here!
We're not designing posters, here!
 

Último

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Último (20)

Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 

The Contextual Experience of the Mobile Web

  • 1. The Contextual Experience of the Mobile Web Jeff Carouth ZendCon, October 19, 2011 Wednesday, October 19, 2011
  • 2. Howdy! (Yeah, I’m from Texas.) PHP Developer since 2003 Web and mobile developer at Texas A&M University Wednesday, October 19, 2011
  • 3. This is not a presentation about development… Wednesday, October 19, 2011
  • 4. …nor is it about design… Wednesday, October 19, 2011
  • 5. …it’s about the collision of the two on the mobile web. Wednesday, October 19, 2011
  • 6. The Big Three The context of the mobile web is the specific environment and expectations a user or visitor of your website or application brings when he or she accesses it while mobile or using a mobile device. Wednesday, October 19, 2011
  • 7. Environment, expectations, and intent Mobile and mobility Devices and capabilities Wednesday, October 19, 2011
  • 8. In my opinion, design plays a major role in mobile success. Wednesday, October 19, 2011
  • 11. The question then becomes how can you accommodate both a 27” iMac and an iPhone? Wednesday, October 19, 2011
  • 12. Or, more accurately, how can you accommodate browsers of differing widths? Wednesday, October 19, 2011
  • 15. User Agent sniffing If UA indicates mobile device redirect to separate mobile site, or provide a link to a separate mobile site Wednesday, October 19, 2011
  • 16. function mobile_device_detect(/* bunch of params */) { $mobile_browser = false; $user_agent = $_SERVER['HTTP_USER_AGENT']; $accept = $_SERVER['HTTP_ACCEPT']; switch(true){ case (preg_match('/ipad/i',$user_agent)); $mobile_browser = $ipad; $status = 'Apple iPad'; if(substr($ipad,0,4)=='http'){ $mobileredirect = $ipad; } break; } if($mobile_browser==true){ header('Location: '.$redirect); exit; } } http://detectmobilebrowsers.mobi Wednesday, October 19, 2011
  • 17. Or Show A Link Wednesday, October 19, 2011
  • 18. Problems with this method Perhaps your user wants your full site. They’ll likely miss any links and alert boxes are terrible. Wednesday, October 19, 2011
  • 20. function is_mobile() { $user_agent = strtolower($_SERVER['HTTP_USER_AGENT']); if (in_array( substr($user_agent, 0, 4), array('ipod','cell',...))) { return true; } if (strpos($_SERVER['HTTP_ACCEPT'], 'wap') != false) { return true; } if (preg_match( "/(android|blackberry|ipod|palm|...))/i", $user_agent)) { return true; } return false; } Wednesday, October 19, 2011
  • 21. if (is_mobile()) { require_once "mobile-layout.php"; } else { require_once "desktop-layout.php"; } Wednesday, October 19, 2011
  • 22. That’s very basic, and largely unreliable. Wednesday, October 19, 2011
  • 23. We can use a device database to improve the accuracy of matches. Wednesday, October 19, 2011
  • 24. Choices WURFL (Wireless Universal Resource FiLe) Device Atlas Wednesday, October 19, 2011
  • 25. class Bootstrap extends Zend_Application_Bootstrap_Abstract { protected function _mobileLayoutSwitch() { $this->bootstrap('useragent'); $this->bootstrap('layout'); $uaType = $this->getResource('useragent') ->getDevice() ->getType(); if ($uaType === 'mobile') { $this->getResource('layout') ->setLayout('mobile'); } } } Wednesday, October 19, 2011
  • 26. protected function _mobileLayoutSwitch() { $this->bootstrap('useragent'); $this->bootstrap('layout'); $resolution = $this->getResource('useragent') ->getDevice() ->getFeature('resolution_width'); if ($resolution < 320) { $layout = 'poor'; } elseif ($resoution < 480) { $layout = 'medium'; } else { $layout = 'desktop'; } $this->getResource('layout')->setLayout($layout); } Wednesday, October 19, 2011
  • 27. It works… But we can do better. We can apply the mantra: “branch on features not user agents” to our mobile layouts. Wednesday, October 19, 2011
  • 28. The problem with user agents is: they lie. Wednesday, October 19, 2011
  • 30. So, how many of you remember liquid or fluid layouts? Wednesday, October 19, 2011
  • 32. Techniques All in one CSS file Base CSS file and one CSS file for each class of device Major breakpoints in <link> media attribute Minor breakpoints in device stylesheet Wednesday, October 19, 2011
  • 33. <link rel=stylesheet type=text/css href=styles/base.css media="screen,handheld" /> <link rel=stylesheet type=text/css href=styles/mobile.css media="only screen and (min-width: 320px)" /> <link rel=stylesheet type=text/css href=styles/desktop.css media="only screen and (min-width: 720px)" /> /****** mobile.css ******/ @media screen and (min-width: 480px) { /* styles for this class of mobile browser */ } @media screen and (min-width: 640px) { /* iPad maybe? */ } Wednesday, October 19, 2011
  • 34. Desktop and iPad Wednesday, October 19, 2011
  • 35. A couple mobile devices iPhone 3GS iPhone 4 Nexus One Wednesday, October 19, 2011
  • 36. That’s great, but we haven’t really solved the device context yet. Wednesday, October 19, 2011
  • 38. All we adjusted for is width Images are the same size for desktops as they are for mobile This is bad.Very bad. Solution? Wednesday, October 19, 2011
  • 39. JavaScript-based image resize Credit: http://jedimsieer.deviantart.com/ Wednesday, October 19, 2011
  • 40. <img src="images/sample-small.jpg?full=images/sample- large.jpg" /> (function(win) { /* code */ var loadLarge = win.screen.availWidth > 480; if (!loadLarge) { return; } // more code... imgs = document.getElementsByTagName("img"); for ( var i = 0, il = imgs.length; i < il; i++) { src = imgs[i].getAttribute("src"); fullImgSrc = src.match( /(?|&)full=(.*)&?/ ) && RegExp.$2; if( fullImgSrc ) { imgs[i].src = fullImgSrc; } } //more code... })(this); https://github.com/filamentgroup/Responsive-Images Wednesday, October 19, 2011
  • 41. Alternative Do the work on the server. (You know, like in the 1990s when JavaScript was Evil(tm)) Wednesday, October 19, 2011
  • 42. The Process Device requests page from server. Service asks device for its device profile (cookie?) No profile available, build one from base. Load resources based on profile. Deliver content AND profile to device. Wednesday, October 19, 2011
  • 43. I haven’t seen this implemented yet. Wednesday, October 19, 2011
  • 46. The Go To Example Geolocation i.e., driving directions or stores near me Wednesday, October 19, 2011
  • 47. Do you trust directions from my site, or from Google Maps? Wednesday, October 19, 2011
  • 48. Right. I use Google Maps too. Wednesday, October 19, 2011
  • 49. So let’s use geolocation for something else. Wednesday, October 19, 2011
  • 50. Working on a CRM Sales agent travels to Switzerland Give a listing of leads/customers in the area. Wednesday, October 19, 2011
  • 51. HTML5 Geolocation API if (navigator.geolocation) { navigator.geolocation.getCurrentPosition( function (position) { callGeonamesWebservice( position.coords.latitude, position.coords.longitude); }, function (error) { //handle error } ); } Wednesday, October 19, 2011
  • 52. <geonames> <code> <postalcode>8775</postalcode> <name>Luchsingen</name> <countryCode>CH</countryCode> <lat>46.98017</lat> <lng>8.99868</lng> <adminCode1/> <adminName1/> <adminCode2/> <adminName2/> <adminCode3>1631</adminCode3> <adminName3/> <distance>2.2072</distance> </code> </geonames> Wednesday, October 19, 2011
  • 53. Fetch Data From Your App Wednesday, October 19, 2011
  • 54. function findCustomersByPostalCode( $postalCodes, $recency) { //some SQL //where postal_code in $postalCodes //and last_contact between $recency and today return $customers; } Wednesday, October 19, 2011
  • 55. That’s just one example. Mobility context is absolutely application-specific Wednesday, October 19, 2011
  • 56. Recap Many options for dealing with device context User Agent sniffing Redirect Layout switch Responsive design Wednesday, October 19, 2011
  • 57. Recap (cont.) Users want to complete a task, not always informative in nature. Mobile is quickly shifting from a nice- to-have to a must have component of your projects. Wednesday, October 19, 2011
  • 58. What about jQuery Mobile and other mobile frameworks? Wednesday, October 19, 2011
  • 60. Questions? Contact me jcarouth@gmail.com @jcarouth jcarouth on Freenode Rate at: http://joind.in/3786 Wednesday, October 19, 2011