SlideShare une entreprise Scribd logo
1  sur  78
Télécharger pour lire hors ligne
Jonathan Trevor
jtrevor@yahoo-inc.com
Apt near Park


How do you find an apartment near a park?
Apt near Park

• Craigslist apartment listings
 • For each apartment:
   • Click on map link
   • Check distance to a park on the map
• Tedious
Apt near Park
• Data is available
 • Craigslist apartment RSS feed
 • Yahoo! Local API to find Parks
• Can do it in about 50 lines of Perl code
  #!/usr/bin/perl -w
  use strict;
  use LWP::Simple;
  use XML::Simple;
  ...
Apt near Park
• Basically combine feeds + web services
• Yet another custom mashup
 • HousingMaps, ChicagoCrime, ...


• Would be nice if there was an easier way...
Pipes
  grep -iv yahoo.com squid.log |
  sort | uniq -c | sort -n >
  top_sources.txt


• Unix Pipes for the Web
• Build useful applications from simple
  primitives
Pipes
• A free service that lets you remix and
  create data mashups using a visual editor
• No need to host, we do it for you
                   Craigslist




                 Yahoo! Local
Pipes
• A free service that lets you remix and
  create data mashups using a visual editor
• No need to host, we do it for you
                   Craigslist




                 Yahoo! Local
Pipes
• A free service that lets you remix and
  create data mashups using a visual editor
• No need to host, we do it for you
                   Craigslist




                 Yahoo! Local
Demo




Apartment near Something
Piecing things together
      in the cloud
Any Input
Craigslist

 Yahoo!

 Google

  Ebay


Your data
  here!
Any Output
Any Output
Any Output
Any Output
Any Output
Any Output
Any Output
Any Output
Any Output
Any Output
Any Output

             RSS Readers

               Badges

               HTML

              Your app
                here!
Any Process
                    Yahoo! Local
Fetch




        Your Web Service
             Here!




             Sort
Openness
Craigslist
                                                RSS Readers
 Yahoo!      Fetch
                                 Yahoo! Local


                                                  Badges
 Google
                     Your Web Service
                          Here!                   HTML
  Ebay

                        Sort                     Your app
Your data                                          here!
  here!
Examples
Hot Deals Search




•   searches across many different deal hunting sites on the internet
    looking for the best prices.You can search for particular items or
    just let the pipe find the best of what's available
Fantasy Sports search




•   get the edge on your friends with a single RSS feed based on
    searching 70 sites for fantasy sports blog articles
Geoannotated Reuters News




 •   takes an RSS feed from the Reuters news service, and quot;geocodesquot;
     each item - making it possible to show where that news item is
     happening on a map of the world.
Who’s Viewed My
LinkedIn Profile
Kiva Loans by Location




•   gets a list of the micro-loans people have been making through
    the Kiva site, and shows the amazing variety of people and places
    that these loan are helping out.
Yahoo! Buzz Image
     Search
Craigslist house lookup
with static Yahoo map
Yahoo Finance Stock
Quote Watch List Feed
Contact's Favorite's
Yahoo Unanswered
         Questions




•   finds those questions in the Y! answers site that don't
    currently have an answer - so you can show how smart you
    are and answer those tricky questions.
Babbler by Max Case




• Translates IM messages in Second Life
LastTube




• uses content from Last.fm and YouTube.You can
  watch Youtube’s content based on your Recently
  Listened Tracks scrobbled to Last.fm.
Advantages to developers
     (why use an online service to do this?)

 • Leveraging large infrastructure
  • Faster access to network resources
  • Faster access to network services
 • System-wide knowledge
 • Leverage inter-organizational agreements
 • Easy to “string” together with other services
 • Easy to use (REST-style URLs)
Network services
• On Y! network services (fast)
 • Geocoding, Local, Search ...
 • Shortcuts, Term Extraction, Translation
 • developer.yahoo.com
• Off Y!
 • Google, AWS, Dapper etc
Run / Get the data
• Each Pipe gets its own “hosted” page




• Use the REST-style URLs to get the data
Run / Get the data
• Each Pipe gets its own “hosted” page




• Use the REST-style URLs to get the data
Edit REST-style queries
http://pipes.yahoo.com/pipes/pipe.run?
_id=1mrlkB232xGjJDdwXqIxGw
&_render=json
&location=palo+alto%2C+ca
&mindist=2
&what=parks
&_callback=foofunction
        The ID of the Pipe
Edit REST-style queries
http://pipes.yahoo.com/pipes/pipe.run?
_id=1mrlkB232xGjJDdwXqIxGw
&_render=json
&location=palo+alto%2C+ca
&mindist=2
&what=parks
&_callback=foofunction

     The format of the output
      (rss, json, kml, ical, csv)
Edit REST-style queries
http://pipes.yahoo.com/pipes/pipe.run?
_id=1mrlkB232xGjJDdwXqIxGw
&_render=json
&location=palo+alto%2C+ca
&mindist=2
&what=parks
&_callback=foofunction


   The per Pipe user customizable
            parameters
Edit REST-style queries
http://pipes.yahoo.com/pipes/pipe.run?
_id=1mrlkB232xGjJDdwXqIxGw
&_render=json
&location=palo+alto%2C+ca
&mindist=2
&what=parks
&_callback=foofunction



Optional JSON callback function
Disadvantages
     (Why not to use an online service?)



• Away from data
 • personal (desktop)
 • organizational (intranet)
• Security and trust
Design and
Implementation
Target Users

• The top 10% of the web 2.0 pyramid
 • Coders, re-mixers, bloggers
• Assume prior knowledge
 • Concepts... loops, data types
• End-users benefit indirectly
Architecture
Your client   Your application         Browser   Editor




                        Web Site/API



               Engine               Database



                          Sources
Editor

• Edits Pipe definitions
• Heavy lifting performed by Engine
• Rivals a desktop experience
 • Almost everything is now possible in a
    browser
Editor Design

• Instant “ON”, no plugins
 • “download this” gets in the way
• Data flow applications are well suited to
  visual programming
• Learn and propagate by “View Source” and
  “Clone”
Engine
• Executes Pipes
• Pipes are defined by a simple definition
  format
• Parallelizes as much of the execution as
  possible
• Not limited to RSS, supports many
  common web addressable formats
  • but...
Web addressable data
• is very malformed
• can be slow
• needs considerate access
• can be untrustworthy
• can be inaccessible from “here” (behind
  firewall etc)
Data in the Engine
• is “cleaned” (and repaired) into UTF-8
• is cached for
 • performance
 • playing well with others
 • several HTTP proxy layers
    • serve stale and force caching
• is “sanitized”
A year in the wild
(20+ releases, 250k+ Pipes later)
What’s popular
What’s popular
What’s popular
What’s popular
Typical Pipes/mashups

• Four types of mashup
 • Feed aggregation with filtering
 • Two-source mashups
 • Data transformation and geocoding
 • Complex mashups using REST APIs
• Geocoding remains a “mashup” favorite
Reasons for adoption
• Lower barrier to use
 • Graphical editor made it quick to write
    Pipes, attracted non-developers
 • “View Source” for learning/tweaking
• Wide array of data input formats and data
  output formats enabled Pipes to become a
  useful “component” in a larger ecology
• Web 2.0 responsiveness to community
Inaccessible data
• Lots of requests for more rich and personal
  data
 • Text documents, word documents, mail,
    Excel spreadsheets
• Workarounds (to some) emerged
 • Online spreadsheets, calendars (gcal) with
    private RSS feeds and so on
Power...

• We started by only supporting RSS
 • high-level building blocks and operations
 • good for common tasks and novice users
• We listened to our user’s desires
...vs Complexity
• Added sources for parsing JSON, XML,
  CSV, ICAL ...
• Added modules that could do more and
  be combined in many ways
• At the cost of simplicity
 • Harder to explain, use, compose
 • Stretching the capabilities of a visual
    development environment
Unexpected breadth

• Experts who want to exploit the service
• Non-programers with much simpler needs
• In Pipes
 • Its easy to make useful data in the cloud
 • Its not easy enough to use it after
    • Users like things in one place
Making it easy to use
• Many Pipes provide data that’s useful while mobile
 • Geosensitive information
 • Time sensitive decisions
• Letting the cloud do the work allows rich thin
  clients (in addition to thick heavy ones)
  • enable novice...expert developers to create
    (simple) mobile applications that give the right
    information at the right time
Doing the mobile mash
Doing the mobile mash
Making it easy to use
                             Com
                               ing
                                   (ver
•   Badges are frequently requested     y)      soo
                                                   n!
    • Despite other solutions
• Initially three variants visualizing common
    types of data in Pipes
    • Geo - map badge
    • Flickr/Images - image badge
    • Aggregators, transformers - list badge
Badges
Badges
Badges
Badges
Conclusion 1/2
• Provides powerful data functions to any client
• Consumes data from many services
• Common data formats means any part of the cloud
  can become the input
 • Dapper, AWS, Google spreadsheets
• ...or take the output
 • 1/3 Google mashups are powered by Pipes
Conclusion 2/2

• (Some) outstanding technical issues
 • Common authentication API
 • Inter-service common rate limiting
    scheme
 • Bridges to local data / dbs
Q&A

Contenu connexe

En vedette

Day 2 2nd_weekcris
Day 2 2nd_weekcrisDay 2 2nd_weekcris
Day 2 2nd_weekcris
cristiarnau
 
ועדת היגוי תשסח
ועדת היגוי תשסחועדת היגוי תשסח
ועדת היגוי תשסח
azan
 
Proxecto de recuperación do río Corgo nos Salgueiriños
Proxecto de recuperación do río Corgo nos SalgueiriñosProxecto de recuperación do río Corgo nos Salgueiriños
Proxecto de recuperación do río Corgo nos Salgueiriños
bng.compostela
 

En vedette (18)

TV lecture: Technology
TV lecture: TechnologyTV lecture: Technology
TV lecture: Technology
 
Media aan de Maas kickoff presentatie
Media aan de Maas kickoff presentatieMedia aan de Maas kickoff presentatie
Media aan de Maas kickoff presentatie
 
Fets amb massapà
Fets amb massapàFets amb massapà
Fets amb massapà
 
MAKE LIFE EASY
MAKE LIFE EASYMAKE LIFE EASY
MAKE LIFE EASY
 
California and Nevada CUL Presentation
California and Nevada CUL PresentationCalifornia and Nevada CUL Presentation
California and Nevada CUL Presentation
 
Day 2 2nd_weekcris
Day 2 2nd_weekcrisDay 2 2nd_weekcris
Day 2 2nd_weekcris
 
Klassika
KlassikaKlassika
Klassika
 
ועדת היגוי תשסח
ועדת היגוי תשסחועדת היגוי תשסח
ועדת היגוי תשסח
 
Pidi Talk
Pidi TalkPidi Talk
Pidi Talk
 
Richtlijnen Schrijven Internetteksten Presentatie1
Richtlijnen Schrijven Internetteksten Presentatie1Richtlijnen Schrijven Internetteksten Presentatie1
Richtlijnen Schrijven Internetteksten Presentatie1
 
El Arte En Las Manos
El Arte En Las ManosEl Arte En Las Manos
El Arte En Las Manos
 
Roma
RomaRoma
Roma
 
NRG Tips - Mac OS & Zebra Printers
NRG Tips - Mac OS & Zebra PrintersNRG Tips - Mac OS & Zebra Printers
NRG Tips - Mac OS & Zebra Printers
 
Simulating Production with Clocker
Simulating Production with ClockerSimulating Production with Clocker
Simulating Production with Clocker
 
SF1 Marketing and Consulting
SF1 Marketing and ConsultingSF1 Marketing and Consulting
SF1 Marketing and Consulting
 
Kwis
KwisKwis
Kwis
 
Proxecto de recuperación do río Corgo nos Salgueiriños
Proxecto de recuperación do río Corgo nos SalgueiriñosProxecto de recuperación do río Corgo nos Salgueiriños
Proxecto de recuperación do río Corgo nos Salgueiriños
 
Banderas
BanderasBanderas
Banderas
 

Plus de deimos

Randy Shoup eBays Architectural Principles
Randy Shoup eBays Architectural PrinciplesRandy Shoup eBays Architectural Principles
Randy Shoup eBays Architectural Principles
deimos
 
Remy Sharp The DOM scripting toolkit jQuery
Remy Sharp The DOM scripting toolkit jQueryRemy Sharp The DOM scripting toolkit jQuery
Remy Sharp The DOM scripting toolkit jQuery
deimos
 
Ola Bini J Ruby Power On The Jvm
Ola Bini J Ruby Power On The JvmOla Bini J Ruby Power On The Jvm
Ola Bini J Ruby Power On The Jvm
deimos
 
Joe Walker Interactivewebsites Cometand Dwr
Joe Walker Interactivewebsites Cometand DwrJoe Walker Interactivewebsites Cometand Dwr
Joe Walker Interactivewebsites Cometand Dwr
deimos
 
Aslak Hellesoy Executable User Stories R Spec Bdd
Aslak Hellesoy Executable User Stories R Spec BddAslak Hellesoy Executable User Stories R Spec Bdd
Aslak Hellesoy Executable User Stories R Spec Bdd
deimos
 
Venkat Subramaniam Building DSLs In Groovy
Venkat Subramaniam Building DSLs In GroovyVenkat Subramaniam Building DSLs In Groovy
Venkat Subramaniam Building DSLs In Groovy
deimos
 
Venkat Subramaniam Blending Java With Dynamic Languages
Venkat Subramaniam Blending Java With Dynamic LanguagesVenkat Subramaniam Blending Java With Dynamic Languages
Venkat Subramaniam Blending Java With Dynamic Languages
deimos
 
Udi Dahan Intentions And Interfaces
Udi Dahan Intentions And InterfacesUdi Dahan Intentions And Interfaces
Udi Dahan Intentions And Interfaces
deimos
 
Tim Mackinnon Agile And Beyond
Tim Mackinnon Agile And BeyondTim Mackinnon Agile And Beyond
Tim Mackinnon Agile And Beyond
deimos
 
Steve Vinoski Rest And Reuse And Serendipity
Steve Vinoski Rest And Reuse And SerendipitySteve Vinoski Rest And Reuse And Serendipity
Steve Vinoski Rest And Reuse And Serendipity
deimos
 
Stefan Tilkov Soa Rest And The Web
Stefan Tilkov Soa Rest And The WebStefan Tilkov Soa Rest And The Web
Stefan Tilkov Soa Rest And The Web
deimos
 
Stefan Tilkov Pragmatic Intro To Rest
Stefan Tilkov Pragmatic Intro To RestStefan Tilkov Pragmatic Intro To Rest
Stefan Tilkov Pragmatic Intro To Rest
deimos
 
Rod Johnson Cathedral
Rod Johnson CathedralRod Johnson Cathedral
Rod Johnson Cathedral
deimos
 
Mike Stolz Dramatic Scalability
Mike Stolz Dramatic ScalabilityMike Stolz Dramatic Scalability
Mike Stolz Dramatic Scalability
deimos
 
Matt Youill Betfair
Matt Youill BetfairMatt Youill Betfair
Matt Youill Betfair
deimos
 
Pete Goodliffe A Tale Of Two Systems
Pete Goodliffe A Tale Of Two SystemsPete Goodliffe A Tale Of Two Systems
Pete Goodliffe A Tale Of Two Systems
deimos
 
Paul Fremantle Restful SOA Registry
Paul Fremantle Restful SOA RegistryPaul Fremantle Restful SOA Registry
Paul Fremantle Restful SOA Registry
deimos
 
Ola Bini Evolving The Java Platform
Ola Bini Evolving The Java PlatformOla Bini Evolving The Java Platform
Ola Bini Evolving The Java Platform
deimos
 
Neal Gafter Java Evolution
Neal Gafter Java EvolutionNeal Gafter Java Evolution
Neal Gafter Java Evolution
deimos
 

Plus de deimos (20)

Aspect Orientated Programming in Ruby
Aspect Orientated Programming in RubyAspect Orientated Programming in Ruby
Aspect Orientated Programming in Ruby
 
Randy Shoup eBays Architectural Principles
Randy Shoup eBays Architectural PrinciplesRandy Shoup eBays Architectural Principles
Randy Shoup eBays Architectural Principles
 
Remy Sharp The DOM scripting toolkit jQuery
Remy Sharp The DOM scripting toolkit jQueryRemy Sharp The DOM scripting toolkit jQuery
Remy Sharp The DOM scripting toolkit jQuery
 
Ola Bini J Ruby Power On The Jvm
Ola Bini J Ruby Power On The JvmOla Bini J Ruby Power On The Jvm
Ola Bini J Ruby Power On The Jvm
 
Joe Walker Interactivewebsites Cometand Dwr
Joe Walker Interactivewebsites Cometand DwrJoe Walker Interactivewebsites Cometand Dwr
Joe Walker Interactivewebsites Cometand Dwr
 
Aslak Hellesoy Executable User Stories R Spec Bdd
Aslak Hellesoy Executable User Stories R Spec BddAslak Hellesoy Executable User Stories R Spec Bdd
Aslak Hellesoy Executable User Stories R Spec Bdd
 
Venkat Subramaniam Building DSLs In Groovy
Venkat Subramaniam Building DSLs In GroovyVenkat Subramaniam Building DSLs In Groovy
Venkat Subramaniam Building DSLs In Groovy
 
Venkat Subramaniam Blending Java With Dynamic Languages
Venkat Subramaniam Blending Java With Dynamic LanguagesVenkat Subramaniam Blending Java With Dynamic Languages
Venkat Subramaniam Blending Java With Dynamic Languages
 
Udi Dahan Intentions And Interfaces
Udi Dahan Intentions And InterfacesUdi Dahan Intentions And Interfaces
Udi Dahan Intentions And Interfaces
 
Tim Mackinnon Agile And Beyond
Tim Mackinnon Agile And BeyondTim Mackinnon Agile And Beyond
Tim Mackinnon Agile And Beyond
 
Steve Vinoski Rest And Reuse And Serendipity
Steve Vinoski Rest And Reuse And SerendipitySteve Vinoski Rest And Reuse And Serendipity
Steve Vinoski Rest And Reuse And Serendipity
 
Stefan Tilkov Soa Rest And The Web
Stefan Tilkov Soa Rest And The WebStefan Tilkov Soa Rest And The Web
Stefan Tilkov Soa Rest And The Web
 
Stefan Tilkov Pragmatic Intro To Rest
Stefan Tilkov Pragmatic Intro To RestStefan Tilkov Pragmatic Intro To Rest
Stefan Tilkov Pragmatic Intro To Rest
 
Rod Johnson Cathedral
Rod Johnson CathedralRod Johnson Cathedral
Rod Johnson Cathedral
 
Mike Stolz Dramatic Scalability
Mike Stolz Dramatic ScalabilityMike Stolz Dramatic Scalability
Mike Stolz Dramatic Scalability
 
Matt Youill Betfair
Matt Youill BetfairMatt Youill Betfair
Matt Youill Betfair
 
Pete Goodliffe A Tale Of Two Systems
Pete Goodliffe A Tale Of Two SystemsPete Goodliffe A Tale Of Two Systems
Pete Goodliffe A Tale Of Two Systems
 
Paul Fremantle Restful SOA Registry
Paul Fremantle Restful SOA RegistryPaul Fremantle Restful SOA Registry
Paul Fremantle Restful SOA Registry
 
Ola Bini Evolving The Java Platform
Ola Bini Evolving The Java PlatformOla Bini Evolving The Java Platform
Ola Bini Evolving The Java Platform
 
Neal Gafter Java Evolution
Neal Gafter Java EvolutionNeal Gafter Java Evolution
Neal Gafter Java Evolution
 

Dernier

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Dernier (20)

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
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
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...
 
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
 
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
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
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
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
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
 
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...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
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
 
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
 

Jonathan Trevor Yahoo Pipes