SlideShare une entreprise Scribd logo
1  sur  60
Télécharger pour lire hors ligne
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

Contenu connexe

Similaire à The Contextual Experience of the Mobile Web

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 HTML5Tim Wright
 
Mobile Accessibility - Accessibility Camp Toronto
Mobile Accessibility - Accessibility Camp TorontoMobile Accessibility - Accessibility Camp Toronto
Mobile Accessibility - Accessibility Camp TorontoTed Drake
 
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#DevTO
 
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 DSLPeter Friese
 
Boston Globe: Responsive Web Design
Boston Globe: Responsive Web DesignBoston Globe: Responsive Web Design
Boston Globe: Responsive Web DesignThe Media Consortium
 
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)Dave Olsen
 
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 JavascriptBrian Hogg
 
Mobile Web on Drupal!
Mobile Web on Drupal!Mobile Web on Drupal!
Mobile Web on Drupal!Lyza Gardner
 
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 2011Trevor Mills
 
Social design (Seattle 09-2011)
Social design (Seattle 09-2011)Social design (Seattle 09-2011)
Social design (Seattle 09-2011)Andrei Zyuzikov
 
Android Development Slides
Android Development SlidesAndroid Development Slides
Android Development SlidesVictor Miclovich
 
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 MarketingAndrew Hoffman
 
So, you think you know widgets.
So, you think you know widgets.So, you think you know widgets.
So, you think you know widgets.danielericlee
 
BlackBerry WebWorks APIs
BlackBerry WebWorks APIsBlackBerry WebWorks APIs
BlackBerry WebWorks APIsSencha
 
We're not designing posters, here!
We're not designing posters, here!We're not designing posters, here!
We're not designing posters, here!André Luís
 

Similaire à 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
Cours1: design d'interactionCours1: design d'interaction
Cours1: design d'interaction
 
Cours1 design d'interaction_csv
Cours1 design d'interaction_csvCours1 design d'interaction_csv
Cours1 design d'interaction_csv
 
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!
 

Dernier

Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 

Dernier (20)

Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 

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