SlideShare a Scribd company logo
1 of 32
Download to read offline
Fluid Layout Techniques
           for Widgets


            Daniel Herzog,Vodafone
@danfooo
           Vodafone Internet Services
Vodafone offices,
                           Düsseldorf




              13th floor




Daniel Herzog,Vodafone
Off topic:Vodafone Widgets




         Daniel Herzog,Vodafone
Off topic:Vodafone Widgets

• There‘s the store
• There are lots of competitions
• Developer community at
  betavine.net/widgetzone
• And jil.org

                 Daniel Herzog,Vodafone
The web & resolutions

• Rather easy topic.
• Available space is a de-facto standard.
• ~960 (960 Grid System 960.gs)


               Daniel Herzog,Vodafone
The web & resolutions


• If you do care, you‘ll resize your window
  around to try.




              Daniel Herzog,Vodafone
The web & resolutions



• But that‘s not what I mean by resolution.



             Daniel Herzog,Vodafone
What I mean by resolution

          • Run a number of resolutions
          • Mostly what the user found
              comfortable.
          • 1024 x 768 Pixel
          • 800 x 600 Pixel
          • whatever else.
        Daniel Herzog,Vodafone
What I mean by resolution

                     • Runs 1680 x 1050 Pixel
                     • full stop.




        Daniel Herzog,Vodafone
What I mean by resolution



                     • Runs 800 x 480 Pixel
                     • full stop.


        Daniel Herzog,Vodafone
What I mean by resolution

3.5 inch                                    7 inch




  • Actually these two both run 800 x 480 Pixel
                Daniel Herzog,Vodafone
The mobile web & resolutions

• Why isn‘t that a problem?
• Mobile browsers mostly zoom.
• Which is want you‘ll want.

• Different game for app-type of things though

                Daniel Herzog,Vodafone
Example: S60 3rd edition developed widget




              Daniel Herzog,Vodafone
Put on S60 5th edition




Before




            Daniel Herzog,Vodafone
Put on S60 5th edition




After




           Daniel Herzog,Vodafone
How not to do it.


if (window.innerWidth*window.innerHeight > 150000)
   …




                  Daniel Herzog,Vodafone
Solutions in detail
   How to do it.

Fonts | Images | UI-Elements




       Daniel Herzog,Vodafone
Solutions in detail
      Fonts | Images | UI-Elements

• Use media queries to switch to high dpi
  mode.




             Daniel Herzog,Vodafone
Media Queries?

• w3.org/TR/css3-mediaqueries/
• Detection for things like
           width
                              color-index
          height
                             monochrome
        orientation
                               resolution
          aspect-
                                  scan
           ratio
                                  grid
           color



               Daniel Herzog,Vodafone
Media Queries?

a {
  color: #000;
  text-decoration: none;
}

@media all and (-o-touch) {
  a {padding: 1em}
}




      Daniel Herzog,Vodafone
Solutions in detail
      Fonts | Images | UI-Elements

• Use media queries to switch to high dpi
  mode.
     @media all and (min-resolution: 200dpi)
     {
       body {font-size: 22px}
     }

     .myDiv {margin: 1em;}




              Daniel Herzog,Vodafone
Solutions in detail
     Fonts | Images | UI-Elements


Only use them at their native resolution.
  Maybe provide alternative versions.
 When you don‘t know your images:


            img {
              max-width: 95%;
            }




            Daniel Herzog,Vodafone
Solutions in detail
   Fonts | Images | UI-Elements




    Rules for images mostly apply
Very important to keep big enough.
 If possible: Stay scalable with SVG.




          Daniel Herzog,Vodafone
SVG?


Made for scaling.

W3C standard for years and years.
Complex and powerful.
Widely available in most browsers today.
Just not on IE and IE based stuff.
That is to change in 2009!



                    Daniel Herzog,Vodafone
SVG in your widget


        <object type="image/svg+xml" data="busy.svg">
HTML      <img src="the-fallback-busy.gif" />
        </object>


        object {
CSS       width: 20%;
        }



 Pixel-perfect rendering of that vector, size that fits.


                    Daniel Herzog,Vodafone
Even more resolutions

• Portrait and landscape mode.
• Docked mode. In portrait and landscape!


             Daniel Herzog,Vodafone
One more: Resize the window.


function myResize() {
  if (widget.widgetMode === "application")
    window.resizeTo(screen.availWidth, screen.availHeight);
}

// Do initially!
myResize();

// And when the orientation changes
widget.addEventListener("resolution",myResize,false);




                    Daniel Herzog,Vodafone
Futures
• I believe we‘re in trouble
• Widget Runtimes need to run real dpi/ppi
  values
• Browsers can‘t, and that might be okay
• But it would be a nice extra there too, also
  to have the two compatible.


              Daniel Herzog,Vodafone
One more to confuse you:




Zooming Widgets.



       Daniel Herzog,Vodafone
Ask & Discuss.


       credits for all the nice pictures coming soon.



               Daniel Herzog,Vodafone
@danfooo
             Vodafone Internet Services
Resources
 betavine.net/widgetzone
 jil.org
 dev.opera.com
 developer.mozilla.org
 quirksmode.org/m/widgets.html
 widget.vodafone.com/dev/


               Daniel Herzog,Vodafone
@danfooo
              Vodafone Internet Services
Picture credits
 Pictures found on flickr, done by users
 markfftang
 Xiaolin Li
 farmerfranco
 Josh Bancroft



                  Daniel Herzog,Vodafone
@danfooo
                 Vodafone Internet Services

More Related Content

Viewers also liked

Futureofthequalitymanagementprinciples 1
Futureofthequalitymanagementprinciples 1Futureofthequalitymanagementprinciples 1
Futureofthequalitymanagementprinciples 1
Paul Robere
 
Product list of fancy ladies bags
Product list of fancy ladies bagsProduct list of fancy ladies bags
Product list of fancy ladies bags
Arijit Chatterjee
 
Mapa Visual Web 2.0
Mapa Visual Web 2.0Mapa Visual Web 2.0
Mapa Visual Web 2.0
MarcusC
 
Analisis de imagen; McDonals
Analisis de imagen; McDonalsAnalisis de imagen; McDonals
Analisis de imagen; McDonals
Paola Mendoza
 
Stroke Victim
Stroke VictimStroke Victim
Stroke Victim
odorox
 
Manual alarma or bi-t6-userman-spn
Manual alarma or bi-t6-userman-spnManual alarma or bi-t6-userman-spn
Manual alarma or bi-t6-userman-spn
marlenebelgica2012
 

Viewers also liked (20)

Tics
TicsTics
Tics
 
Futureofthequalitymanagementprinciples 1
Futureofthequalitymanagementprinciples 1Futureofthequalitymanagementprinciples 1
Futureofthequalitymanagementprinciples 1
 
Les friches culturelles d’hier à aujourd’hui : entre fabriques d’art et démar...
Les friches culturelles d’hier à aujourd’hui : entre fabriques d’art et démar...Les friches culturelles d’hier à aujourd’hui : entre fabriques d’art et démar...
Les friches culturelles d’hier à aujourd’hui : entre fabriques d’art et démar...
 
Guía de matrícula 2011 2012 Universidad de Burgos
Guía de matrícula 2011 2012 Universidad de BurgosGuía de matrícula 2011 2012 Universidad de Burgos
Guía de matrícula 2011 2012 Universidad de Burgos
 
ANTIUROLITHIATIC ACTIVITY OF ACTIVITY OF TECOMA STANS LEAF EXTRACT *1Anil kum...
ANTIUROLITHIATIC ACTIVITY OF ACTIVITY OF TECOMA STANS LEAF EXTRACT *1Anil kum...ANTIUROLITHIATIC ACTIVITY OF ACTIVITY OF TECOMA STANS LEAF EXTRACT *1Anil kum...
ANTIUROLITHIATIC ACTIVITY OF ACTIVITY OF TECOMA STANS LEAF EXTRACT *1Anil kum...
 
IBM Lotus Mobile Strategy
IBM Lotus Mobile StrategyIBM Lotus Mobile Strategy
IBM Lotus Mobile Strategy
 
Product list of fancy ladies bags
Product list of fancy ladies bagsProduct list of fancy ladies bags
Product list of fancy ladies bags
 
Mapa Visual Web 2.0
Mapa Visual Web 2.0Mapa Visual Web 2.0
Mapa Visual Web 2.0
 
Analisis de imagen; McDonals
Analisis de imagen; McDonalsAnalisis de imagen; McDonals
Analisis de imagen; McDonals
 
Stroke Victim
Stroke VictimStroke Victim
Stroke Victim
 
Fraudes en la red
Fraudes en la redFraudes en la red
Fraudes en la red
 
Punteros y elementos dinámicos en c++
Punteros y elementos dinámicos en c++Punteros y elementos dinámicos en c++
Punteros y elementos dinámicos en c++
 
Presentación precios trabajo-final-6-a-mkt
Presentación precios trabajo-final-6-a-mktPresentación precios trabajo-final-6-a-mkt
Presentación precios trabajo-final-6-a-mkt
 
Towards User-defined Cross-Device Interaction
Towards User-defined Cross-Device InteractionTowards User-defined Cross-Device Interaction
Towards User-defined Cross-Device Interaction
 
Manual alarma or bi-t6-userman-spn
Manual alarma or bi-t6-userman-spnManual alarma or bi-t6-userman-spn
Manual alarma or bi-t6-userman-spn
 
A crise demográfica en galicia
A crise demográfica en galiciaA crise demográfica en galicia
A crise demográfica en galicia
 
Social Networking Project - MLF Presentation
Social Networking Project - MLF PresentationSocial Networking Project - MLF Presentation
Social Networking Project - MLF Presentation
 
SGM Glesmann Bio2
SGM Glesmann Bio2SGM Glesmann Bio2
SGM Glesmann Bio2
 
Presentación Equipo Ciclista Cartucho.es 2016
Presentación Equipo Ciclista Cartucho.es 2016Presentación Equipo Ciclista Cartucho.es 2016
Presentación Equipo Ciclista Cartucho.es 2016
 
IB
IBIB
IB
 

Similar to Fluid Layouting Techniques - Over The Air 2009

Widget Development And SDK
Widget Development And SDKWidget Development And SDK
Widget Development And SDK
Daniel Herzog
 
Using the Presentation API and external screens on Android
Using the Presentation API and external screens on AndroidUsing the Presentation API and external screens on Android
Using the Presentation API and external screens on Android
Xavier Hallade
 
East of Toronto .NET Usergroup - Put the 5 in HTML
East of Toronto .NET Usergroup - Put the 5 in HTMLEast of Toronto .NET Usergroup - Put the 5 in HTML
East of Toronto .NET Usergroup - Put the 5 in HTML
Frédéric Harper
 
WordCamp Thessaloniki2011 The NextWeb
WordCamp Thessaloniki2011 The NextWebWordCamp Thessaloniki2011 The NextWeb
WordCamp Thessaloniki2011 The NextWeb
George Kanellopoulos
 
Social storage drive s talesapp_20120711
Social storage drive s talesapp_20120711Social storage drive s talesapp_20120711
Social storage drive s talesapp_20120711
Will Kim
 

Similar to Fluid Layouting Techniques - Over The Air 2009 (20)

Widget Development And SDK
Widget Development And SDKWidget Development And SDK
Widget Development And SDK
 
Supporting multi screen in android
Supporting multi screen in androidSupporting multi screen in android
Supporting multi screen in android
 
Supporting multi screen in android cn
Supporting multi screen in android cnSupporting multi screen in android cn
Supporting multi screen in android cn
 
Android在多屏幕、多设备上的适配 | 布丁 任斐
Android在多屏幕、多设备上的适配 | 布丁 任斐Android在多屏幕、多设备上的适配 | 布丁 任斐
Android在多屏幕、多设备上的适配 | 布丁 任斐
 
GAN
GANGAN
GAN
 
Dreamweaver CS6, jQuery, PhoneGap, mobile design
Dreamweaver CS6, jQuery, PhoneGap, mobile designDreamweaver CS6, jQuery, PhoneGap, mobile design
Dreamweaver CS6, jQuery, PhoneGap, mobile design
 
Html5 more than just html5 v final
Html5  more than just html5 v finalHtml5  more than just html5 v final
Html5 more than just html5 v final
 
Site Studio Fundamentals Supplemental Slides
Site Studio Fundamentals Supplemental SlidesSite Studio Fundamentals Supplemental Slides
Site Studio Fundamentals Supplemental Slides
 
Using the Presentation API and external screens on Android
Using the Presentation API and external screens on AndroidUsing the Presentation API and external screens on Android
Using the Presentation API and external screens on Android
 
WePresent WiPG 1000 & 1500
WePresent WiPG 1000 & 1500WePresent WiPG 1000 & 1500
WePresent WiPG 1000 & 1500
 
Designing for mobile
Designing for mobileDesigning for mobile
Designing for mobile
 
East of Toronto .NET Usergroup - Put the 5 in HTML
East of Toronto .NET Usergroup - Put the 5 in HTMLEast of Toronto .NET Usergroup - Put the 5 in HTML
East of Toronto .NET Usergroup - Put the 5 in HTML
 
Social storage drive s talesapp 2012
Social storage drive s talesapp 2012Social storage drive s talesapp 2012
Social storage drive s talesapp 2012
 
HTC Developer - 2012
HTC Developer - 2012HTC Developer - 2012
HTC Developer - 2012
 
WiPG WePresent Gateway
WiPG WePresent GatewayWiPG WePresent Gateway
WiPG WePresent Gateway
 
Multi Channel Publishing
Multi Channel PublishingMulti Channel Publishing
Multi Channel Publishing
 
WordCamp Thessaloniki2011 The NextWeb
WordCamp Thessaloniki2011 The NextWebWordCamp Thessaloniki2011 The NextWeb
WordCamp Thessaloniki2011 The NextWeb
 
Producing Effective Screencasts
Producing Effective ScreencastsProducing Effective Screencasts
Producing Effective Screencasts
 
Three things you probably don’t know about hd voice
Three things you probably don’t know about hd voiceThree things you probably don’t know about hd voice
Three things you probably don’t know about hd voice
 
Social storage drive s talesapp_20120711
Social storage drive s talesapp_20120711Social storage drive s talesapp_20120711
Social storage drive s talesapp_20120711
 

Recently uploaded

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Recently uploaded (20)

TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
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
 
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
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - 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
 
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
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
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
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
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
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
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...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 

Fluid Layouting Techniques - Over The Air 2009

  • 1. Fluid Layout Techniques for Widgets Daniel Herzog,Vodafone @danfooo Vodafone Internet Services
  • 2. Vodafone offices, Düsseldorf 13th floor Daniel Herzog,Vodafone
  • 3. Off topic:Vodafone Widgets Daniel Herzog,Vodafone
  • 4. Off topic:Vodafone Widgets • There‘s the store • There are lots of competitions • Developer community at betavine.net/widgetzone • And jil.org Daniel Herzog,Vodafone
  • 5. The web & resolutions • Rather easy topic. • Available space is a de-facto standard. • ~960 (960 Grid System 960.gs) Daniel Herzog,Vodafone
  • 6. The web & resolutions • If you do care, you‘ll resize your window around to try. Daniel Herzog,Vodafone
  • 7. The web & resolutions • But that‘s not what I mean by resolution. Daniel Herzog,Vodafone
  • 8. What I mean by resolution • Run a number of resolutions • Mostly what the user found comfortable. • 1024 x 768 Pixel • 800 x 600 Pixel • whatever else. Daniel Herzog,Vodafone
  • 9. What I mean by resolution • Runs 1680 x 1050 Pixel • full stop. Daniel Herzog,Vodafone
  • 10. What I mean by resolution • Runs 800 x 480 Pixel • full stop. Daniel Herzog,Vodafone
  • 11. What I mean by resolution 3.5 inch 7 inch • Actually these two both run 800 x 480 Pixel Daniel Herzog,Vodafone
  • 12. The mobile web & resolutions • Why isn‘t that a problem? • Mobile browsers mostly zoom. • Which is want you‘ll want. • Different game for app-type of things though Daniel Herzog,Vodafone
  • 13. Example: S60 3rd edition developed widget Daniel Herzog,Vodafone
  • 14. Put on S60 5th edition Before Daniel Herzog,Vodafone
  • 15. Put on S60 5th edition After Daniel Herzog,Vodafone
  • 16. How not to do it. if (window.innerWidth*window.innerHeight > 150000) … Daniel Herzog,Vodafone
  • 17. Solutions in detail How to do it. Fonts | Images | UI-Elements Daniel Herzog,Vodafone
  • 18. Solutions in detail Fonts | Images | UI-Elements • Use media queries to switch to high dpi mode. Daniel Herzog,Vodafone
  • 19. Media Queries? • w3.org/TR/css3-mediaqueries/ • Detection for things like width color-index height monochrome orientation resolution aspect- scan ratio grid color Daniel Herzog,Vodafone
  • 20. Media Queries? a { color: #000; text-decoration: none; } @media all and (-o-touch) { a {padding: 1em} } Daniel Herzog,Vodafone
  • 21. Solutions in detail Fonts | Images | UI-Elements • Use media queries to switch to high dpi mode. @media all and (min-resolution: 200dpi) { body {font-size: 22px} } .myDiv {margin: 1em;} Daniel Herzog,Vodafone
  • 22. Solutions in detail Fonts | Images | UI-Elements Only use them at their native resolution. Maybe provide alternative versions. When you don‘t know your images: img { max-width: 95%; } Daniel Herzog,Vodafone
  • 23. Solutions in detail Fonts | Images | UI-Elements Rules for images mostly apply Very important to keep big enough. If possible: Stay scalable with SVG. Daniel Herzog,Vodafone
  • 24. SVG? Made for scaling. W3C standard for years and years. Complex and powerful. Widely available in most browsers today. Just not on IE and IE based stuff. That is to change in 2009! Daniel Herzog,Vodafone
  • 25. SVG in your widget <object type="image/svg+xml" data="busy.svg"> HTML <img src="the-fallback-busy.gif" /> </object> object { CSS width: 20%; } Pixel-perfect rendering of that vector, size that fits. Daniel Herzog,Vodafone
  • 26. Even more resolutions • Portrait and landscape mode. • Docked mode. In portrait and landscape! Daniel Herzog,Vodafone
  • 27. One more: Resize the window. function myResize() { if (widget.widgetMode === "application") window.resizeTo(screen.availWidth, screen.availHeight); } // Do initially! myResize(); // And when the orientation changes widget.addEventListener("resolution",myResize,false); Daniel Herzog,Vodafone
  • 28. Futures • I believe we‘re in trouble • Widget Runtimes need to run real dpi/ppi values • Browsers can‘t, and that might be okay • But it would be a nice extra there too, also to have the two compatible. Daniel Herzog,Vodafone
  • 29. One more to confuse you: Zooming Widgets. Daniel Herzog,Vodafone
  • 30. Ask & Discuss. credits for all the nice pictures coming soon. Daniel Herzog,Vodafone @danfooo Vodafone Internet Services
  • 31. Resources betavine.net/widgetzone jil.org dev.opera.com developer.mozilla.org quirksmode.org/m/widgets.html widget.vodafone.com/dev/ Daniel Herzog,Vodafone @danfooo Vodafone Internet Services
  • 32. Picture credits Pictures found on flickr, done by users markfftang Xiaolin Li farmerfranco Josh Bancroft Daniel Herzog,Vodafone @danfooo Vodafone Internet Services