SlideShare a Scribd company logo
1 of 125
Download to read offline
How to build desktop apps that
  help your web app succeed

         Matthew Ogle (matt@last.fm)
         FOWA Dublin, 6 March 2009
Wait, desktop?
Wait, desktop?
Web 2.0 has (arguably) eroded the
importance of desktop apps
Wait, desktop?
Web 2.0 has (arguably) eroded the
importance of desktop apps

How many of you use Gmail as a primary
email client?
Desktop, really?
Desktop, really?
It’s a good, familiar pitch. Web apps…
Desktop, really?
It’s a good, familiar pitch. Web apps…
  are cross-platform
Desktop, really?
It’s a good, familiar pitch. Web apps…
  are cross-platform
  no install process
Desktop, really?
It’s a good, familiar pitch. Web apps…
  are cross-platform
  no install process
  available anywhere
Desktop, really?
It’s a good, familiar pitch. Web apps…
  are cross-platform
  no install process
  available anywhere
  taste like cloud
Yes, desktop.
Yes, desktop.
It’s 2009, no desktop is an island
Yes, desktop.
It’s 2009, no desktop is an island
At Last.fm, our desktop strategy was key
to our crazy growth
Yes, desktop.
It’s 2009, no desktop is an island
At Last.fm, our desktop strategy was key
to our crazy growth
Along the way, discovered some useful
models for desktop-web interaction
Yes, desktop.
It’s 2009, no desktop is an island
At Last.fm, our desktop strategy was key
to our crazy growth
Along the way, discovered some useful
models for desktop-web interaction
Hints that desktop might be even more
important in future
In the beginning…
In the beginning…
Last.fm began in 2002 as two separate projects
In the beginning…
Last.fm began in 2002 as two separate projects

            : personal online radio that learns
what you like and gets better over time
In the beginning…
Last.fm began in 2002 as two separate projects

            : personal online radio that learns
what you like and gets better over time




                       Fig. 1-a
In the beginning…
Last.fm began in 2002 as two separate projects

            : personal online radio that learns
what you like and gets better over time




                       Fig. 1-a
In the beginning…
Last.fm began in 2002 as two separate projects

            : personal online radio that learns
what you like and gets better over time



   ඃ

                       Fig. 1-a
In the beginning…
Last.fm began in 2002 as two separate projects

            : personal online radio that learns
what you like and gets better over time



   ඃ

                       Fig. 1-a
In the beginning…
Last.fm began in 2002 as two separate projects

            : personal online radio that learns
what you like and gets better over time



   ඃ

                       Fig. 1-a
In the beginning…
In the beginning…
                     : desktop media player plugins
that track (“scrobble”) what you listen to, build up
detailed personal music profile
In the beginning…
                     : desktop media player plugins
that track (“scrobble”) what you listen to, build up
detailed personal music profile




                       Fig. 1-b
In the beginning…
                     : desktop media player plugins
that track (“scrobble”) what you listen to, build up
detailed personal music profile




                       Fig. 1-b
In the beginning…
                     : desktop media player plugins
that track (“scrobble”) what you listen to, build up
detailed personal music profile




                       Fig. 1-b
In the beginning…
                     : desktop media player plugins
that track (“scrobble”) what you listen to, build up
detailed personal music profile



                                           om nom nom




                       Fig. 1-b
Last.fm in 2003
Audioscrobbler in 2003
Last.fm
Last.fm
Combining the two = ideal feedback loop for
crowdsourced music recommendation
Last.fm
Combining the two = ideal feedback loop for
crowdsourced music recommendation

Last.fm and Audioscrobbler gradually merged
over 2004–2006
Last.fm
Combining the two = ideal feedback loop for
crowdsourced music recommendation

Last.fm and Audioscrobbler gradually merged
over 2004–2006

Online radio and music recommendation have
become primary user-facing services of Last.fm
Last.fm
Combining the two = ideal feedback loop for
crowdsourced music recommendation

Last.fm and Audioscrobbler gradually merged
over 2004–2006

Online radio and music recommendation have
become primary user-facing services of Last.fm

But the fuel comes from the desktop –
via scrobbling
Last.fm
Last.fm
What’s in a scrobble?
Last.fm
What’s in a scrobble?


Made from very basic metadata:
user name
track name
artist name
timestamp
Last.fm
Last.fm
The API for sending this data to our servers has
been public since our inception
Last.fm
The API for sending this data to our servers has
been public since our inception

Last.fm only added an official scrobbling app in
mid-2006
Last.fm
The API for sending this data to our servers has
been public since our inception

Last.fm only added an official scrobbling app in
mid-2006

More than 100 media players, devices, and
platforms can scrobble, and we currently handle
up to 800 / second at peak
World o’ scrobbles
World o’ scrobbles
World o’ scrobbles
World o’ scrobbles
World o’ scrobbles
World o’ scrobbles
World o’ scrobbles
World o’ scrobbles




                     Emacs
World o’ scrobbles
World o’ scrobbles
“My name’s Matt and I’ve just listened to
‘Edmonton’ by the Rural Alberta
Advantage”…times 30 billion
World o’ scrobbles
“My name’s Matt and I’ve just listened to
‘Edmonton’ by the Rural Alberta
Advantage”…times 30 billion
(That’s a lot of music taste data)
World o’ scrobbles
“My name’s Matt and I’ve just listened to
‘Edmonton’ by the Rural Alberta
Advantage”…times 30 billion
(That’s a lot of music taste data)
But why all this scrobbling, especially
with desktop barriers-to-entry?
And how did it drive growth?
Scrobbling and growth
Scrobbling and growth
Scrobbling helps the scrobbler first: their
profile pages show off their awesome
music taste in real-time
Scrobbling and growth
Scrobbling helps the scrobbler first: their
profile pages show off their awesome
music taste in real-time
Scrobbling helps the network next: every
time we don’t recognize an artist or track,
we add it to our database
Desktop growth fuel
(among other things, this creates a page for it)
Desktop growth fuel
(among other things, this creates a page for it)
Desktop growth fuel
Desktop growth fuel
Ambient page creation via desktop app
Desktop growth fuel
Ambient page creation via desktop app
Tons of incoming links to personal music
profiles + long tail of pages built by
scrobbles = great free Google juice
Desktop growth fuel
Ambient page creation via desktop app
Tons of incoming links to personal music
profiles + long tail of pages built by
scrobbles = great free Google juice
12 million artist pages
43 million track pages
25+ million unique active users per month
Desktop growth fuel
Desktop growth fuel
Kept desktop app unobtrusive and simple
during successive website updates
Desktop growth fuel
Kept desktop app unobtrusive and simple
during successive website updates
Only a few major additions since 2006
Desktop growth fuel
Kept desktop app unobtrusive and simple
during successive website updates
Only a few major additions since 2006
 iTunes bootstrapping
Desktop growth fuel
Kept desktop app unobtrusive and simple
during successive website updates
Only a few major additions since 2006
 iTunes bootstrapping
 Audio fingerprinting
Enough about music
Enough about music
We’re pretty lucky to be running a music service
Enough about music
We’re pretty lucky to be running a music service

Are the concepts behind scrobbling useful for
anything else?
Scrobbles = attention data
Scrobbles = attention data
 Attention data is a digital record that
 describes the time spent interacting with
 someone or something.
 - Jim Meyer, http://www.usingattention.com/2006/08/19/
 what-is-attention-data/
Scrobbles = attention data
 Attention data is a digital record that
 describes the time spent interacting with
 someone or something.
 - Jim Meyer, http://www.usingattention.com/2006/08/19/
 what-is-attention-data/



 Scrobbling doesn’t ask a user to change or
 develop new behaviours; it asks
 permission to record existing ones
Attention data
Attention data
Tons of these interactions are happening every
minute on the desktop
Attention data
Tons of these interactions are happening every
minute on the desktop

  downloading / browsing photos from a camera
Attention data
Tons of these interactions are happening every
minute on the desktop

  downloading / browsing photos from a camera

  chatting to friends on IM
Attention data
Tons of these interactions are happening every
minute on the desktop

  downloading / browsing photos from a camera

  chatting to friends on IM

  annotating a research paper
Attention data
Tons of these interactions are happening every
minute on the desktop

  downloading / browsing photos from a camera

  chatting to friends on IM

  annotating a research paper

  watching videos
Attention data
Tons of these interactions are happening every
minute on the desktop

  downloading / browsing photos from a camera

  chatting to friends on IM

  annotating a research paper

  watching videos

  (your desktop interaction here)
Working with attention
Working with attention
Your service should seek to amplify + add value to
attention data
Working with attention
Your service should seek to amplify + add value to
attention data

In doing so, you ideally give it...
Working with attention
Your service should seek to amplify + add value to
attention data

In doing so, you ideally give it...

  more personal value
  (this comes first, don’t neglect it)
Working with attention
Your service should seek to amplify + add value to
attention data

In doing so, you ideally give it...

  more personal value
  (this comes first, don’t neglect it)

  network value
  (this is where your service can really shine)
More desktop principles
More desktop principles
Expose a good API from the start
(good != elaborate)
More desktop principles
Expose a good API from the start
(good != elaborate)

Don’t force users to change habits; use desktop to
give them an on-ramp
More desktop principles
Expose a good API from the start
(good != elaborate)

Don’t force users to change habits; use desktop to
give them an on-ramp

Works for more than just music or attention data
(Tripit/Dopplr itinerary parsing, photo uploaders)
More desktop principles
Expose a good API from the start
(good != elaborate)

Don’t force users to change habits; use desktop to
give them an on-ramp

Works for more than just music or attention data
(Tripit/Dopplr itinerary parsing, photo uploaders)

Desktop + privacy balance = hard but essential
(being open source and offering data export
helps)
So what about...
The Future?
The Future?
Bernal Sphere, 1970s (Apologies to Matt Jones, Dopplr)
The Future?
      Bernal Sphere, 1970s (Apologies to Matt Jones, Dopplr)




                    The thinking here seems to be:
“People like planned garden communities, and space is the future,
     so let’s just put one in space! Yeah! That’s much better!”
Utopian desktop futures
Utopian desktop futures
AIR
Utopian desktop futures
AIR
Prism
Utopian desktop futures
AIR
Prism
Google Gears
Utopian desktop futures
AIR
Prism
Google Gears
Songbird
Utopian desktop futures
AIR
Prism
Google Gears
Songbird
These let us web developers build
desktop apps, potentially for the first
time, ZOMG
Utopian desktop futures
Utopian desktop futures
All these projects are interesting and
exciting and you should look them up
Utopian desktop futures
All these projects are interesting and
exciting and you should look them up
…cause I’m not going to talk about them.
Utopian desktop futures
All these projects are interesting and
exciting and you should look them up
…cause I’m not going to talk about them.
(I’m not yet convinced they significantly
change the web OR the desktop. They just
move it around a bit.)
An alternate vision
    from the Last.fm labs
Turn it inside out
Turn it inside out
Instead of sending local content TO the
web (the on-ramp) or putting the web
inside a desktop experience (Songbird,
AIR)...
Turn it inside out
Instead of sending local content TO the
web (the on-ramp) or putting the web
inside a desktop experience (Songbird,
AIR)...
...why can’t the web make local content
better? And leave it there?
Turn it inside out
Instead of sending local content TO the
web (the on-ramp) or putting the web
inside a desktop experience (Songbird,
AIR)...
...why can’t the web make local content
better? And leave it there?
…using proven desktop conventions and
programming languages?
Introducing Boffin
Introducing Boffin
Last.fm’s crowdsourced music
intelligence meets your local music
collection
Introducing Boffin
Last.fm’s crowdsourced music
intelligence meets your local music
collection
[Demo]
Introducing Boffin
Last.fm’s crowdsourced music
intelligence meets your local music
collection
[Demo]
Download Mac, Windows, or source:
http://is.gd/lDLG
Parting tips
Parting tips
Make it selfish
Parting tips
Make it selfish

Make it open
Parting tips
Make it selfish

Make it open

Amplify user attention
Parting tips
Make it selfish

Make it open

Amplify user attention

Create on-ramps to your web experience
Parting tips
Make it selfish

Make it open

Amplify user attention

Create on-ramps to your web experience

Be wary of uptopian futures that involve platform
lock-in
Parting tips
Make it selfish

Make it open

Amplify user attention

Create on-ramps to your web experience

Be wary of uptopian futures that involve platform
lock-in

Befriend local desktop developers, trade notes,
learn from each other
Parting tips
Make it selfish

Make it open

Amplify user attention

Create on-ramps to your web experience

Be wary of uptopian futures that involve platform
lock-in

Befriend local desktop developers, trade notes,
learn from each other

Use your web smarts to make the desktop
exciting again
Any questions?

      See you online:
www.last.fm/user/flaneur
www.twitter.com/flaneur
 irc.audioscrobbler.com
      matt@last.fm

More Related Content

Viewers also liked

Viewers also liked (6)

Segunda tarea dr. ernesto vizcaino
Segunda tarea  dr. ernesto vizcainoSegunda tarea  dr. ernesto vizcaino
Segunda tarea dr. ernesto vizcaino
 
Coincidencias de Juárez
Coincidencias de JuárezCoincidencias de Juárez
Coincidencias de Juárez
 
Informe TNS: Influencia internet en decisiones compra mar10
Informe TNS: Influencia internet en decisiones compra mar10Informe TNS: Influencia internet en decisiones compra mar10
Informe TNS: Influencia internet en decisiones compra mar10
 
Experiential entertainment making a sense event - Derek Woodgate
Experiential entertainment making a sense event - Derek WoodgateExperiential entertainment making a sense event - Derek Woodgate
Experiential entertainment making a sense event - Derek Woodgate
 
Curso emprendimiento
Curso emprendimientoCurso emprendimiento
Curso emprendimiento
 
Capitulo1 luis
Capitulo1 luisCapitulo1 luis
Capitulo1 luis
 

Similar to How to build desktop apps that help your web app succeed

Big Data At Spotify
Big Data At SpotifyBig Data At Spotify
Big Data At Spotify
Adam Kawa
 
#SMBeats Presentation
#SMBeats Presentation#SMBeats Presentation
#SMBeats Presentation
Alicia Aiello
 
English: Web 2.0's Universal Language
English: Web 2.0's Universal LanguageEnglish: Web 2.0's Universal Language
English: Web 2.0's Universal Language
Smokler
 
Music discovery on the net
Music discovery on the netMusic discovery on the net
Music discovery on the net
guestbf080
 
Nick Pavey_Resume
Nick Pavey_ResumeNick Pavey_Resume
Nick Pavey_Resume
Nick Pavey
 
Question 4 evaluation
Question 4   evaluationQuestion 4   evaluation
Question 4 evaluation
Dannnnz
 

Similar to How to build desktop apps that help your web app succeed (20)

Last.fm - Lessons from building the World's largest social music platform
Last.fm - Lessons from building the World's largest social music platform Last.fm - Lessons from building the World's largest social music platform
Last.fm - Lessons from building the World's largest social music platform
 
All Hail the Committee! Typo 2016 Talk Berlin
All Hail the Committee! Typo 2016 Talk BerlinAll Hail the Committee! Typo 2016 Talk Berlin
All Hail the Committee! Typo 2016 Talk Berlin
 
Big Data At Spotify
Big Data At SpotifyBig Data At Spotify
Big Data At Spotify
 
Create a Romantic Audio for Valentine's Day
Create a Romantic Audio for Valentine's DayCreate a Romantic Audio for Valentine's Day
Create a Romantic Audio for Valentine's Day
 
Last.fm API workshop - Stockholm
Last.fm API workshop - StockholmLast.fm API workshop - Stockholm
Last.fm API workshop - Stockholm
 
Week 2
Week 2Week 2
Week 2
 
Composing and creating with apps
Composing and creating with appsComposing and creating with apps
Composing and creating with apps
 
Podcast & Screencasting On Rails
Podcast & Screencasting On RailsPodcast & Screencasting On Rails
Podcast & Screencasting On Rails
 
Windows 11 pro 2019
Windows 11 pro 2019 Windows 11 pro 2019
Windows 11 pro 2019
 
How to Create Funny Audio Story
How to Create Funny Audio StoryHow to Create Funny Audio Story
How to Create Funny Audio Story
 
Podcasting101
Podcasting101Podcasting101
Podcasting101
 
#SMBeats Presentation
#SMBeats Presentation#SMBeats Presentation
#SMBeats Presentation
 
DM - Still Using Your iPod for Music
DM - Still Using Your iPod for MusicDM - Still Using Your iPod for Music
DM - Still Using Your iPod for Music
 
Intro to Podcasting
Intro to PodcastingIntro to Podcasting
Intro to Podcasting
 
Cloud
Cloud Cloud
Cloud
 
English: Web 2.0's Universal Language
English: Web 2.0's Universal LanguageEnglish: Web 2.0's Universal Language
English: Web 2.0's Universal Language
 
Music discovery on the net
Music discovery on the netMusic discovery on the net
Music discovery on the net
 
Nick Pavey_Resume
Nick Pavey_ResumeNick Pavey_Resume
Nick Pavey_Resume
 
Question 4 evaluation
Question 4   evaluationQuestion 4   evaluation
Question 4 evaluation
 
The Next-Gen Dynamic Sound System of Killzone Shadow Fall
The Next-Gen Dynamic Sound System of Killzone Shadow FallThe Next-Gen Dynamic Sound System of Killzone Shadow Fall
The Next-Gen Dynamic Sound System of Killzone Shadow Fall
 

Recently uploaded

Asli Kala jadu, Black magic specialist in Pakistan Or Kala jadu expert in Egy...
Asli Kala jadu, Black magic specialist in Pakistan Or Kala jadu expert in Egy...Asli Kala jadu, Black magic specialist in Pakistan Or Kala jadu expert in Egy...
Asli Kala jadu, Black magic specialist in Pakistan Or Kala jadu expert in Egy...
baharayali
 
🔝|97111༒99012🔝 Call Girls In {Delhi} Cr Park ₹5.5k Cash Payment With Room De...
🔝|97111༒99012🔝 Call Girls In  {Delhi} Cr Park ₹5.5k Cash Payment With Room De...🔝|97111༒99012🔝 Call Girls In  {Delhi} Cr Park ₹5.5k Cash Payment With Room De...
🔝|97111༒99012🔝 Call Girls In {Delhi} Cr Park ₹5.5k Cash Payment With Room De...
Diya Sharma
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 

Recently uploaded (20)

08448380779 Call Girls In Karol Bagh Women Seeking Men
08448380779 Call Girls In Karol Bagh Women Seeking Men08448380779 Call Girls In Karol Bagh Women Seeking Men
08448380779 Call Girls In Karol Bagh Women Seeking Men
 
08448380779 Call Girls In International Airport Women Seeking Men
08448380779 Call Girls In International Airport Women Seeking Men08448380779 Call Girls In International Airport Women Seeking Men
08448380779 Call Girls In International Airport Women Seeking Men
 
Personal Brand Exploration - By Bradley Dennis
Personal Brand Exploration - By Bradley DennisPersonal Brand Exploration - By Bradley Dennis
Personal Brand Exploration - By Bradley Dennis
 
Unveiling the Mystery of Main Bazar Chart
Unveiling the Mystery of Main Bazar ChartUnveiling the Mystery of Main Bazar Chart
Unveiling the Mystery of Main Bazar Chart
 
Spain Vs Italy 20 players confirmed for Spain's Euro 2024 squad, and three po...
Spain Vs Italy 20 players confirmed for Spain's Euro 2024 squad, and three po...Spain Vs Italy 20 players confirmed for Spain's Euro 2024 squad, and three po...
Spain Vs Italy 20 players confirmed for Spain's Euro 2024 squad, and three po...
 
Sports Writing (Rules,Tips, Examples, etc)
Sports Writing (Rules,Tips, Examples, etc)Sports Writing (Rules,Tips, Examples, etc)
Sports Writing (Rules,Tips, Examples, etc)
 
08448380779 Call Girls In Lajpat Nagar Women Seeking Men
08448380779 Call Girls In Lajpat Nagar Women Seeking Men08448380779 Call Girls In Lajpat Nagar Women Seeking Men
08448380779 Call Girls In Lajpat Nagar Women Seeking Men
 
Ramban Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts In...
Ramban  Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts In...Ramban  Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts In...
Ramban Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts In...
 
Asli Kala jadu, Black magic specialist in Pakistan Or Kala jadu expert in Egy...
Asli Kala jadu, Black magic specialist in Pakistan Or Kala jadu expert in Egy...Asli Kala jadu, Black magic specialist in Pakistan Or Kala jadu expert in Egy...
Asli Kala jadu, Black magic specialist in Pakistan Or Kala jadu expert in Egy...
 
Hire 💕 8617697112 Kasauli Call Girls Service Call Girls Agency
Hire 💕 8617697112 Kasauli Call Girls Service Call Girls AgencyHire 💕 8617697112 Kasauli Call Girls Service Call Girls Agency
Hire 💕 8617697112 Kasauli Call Girls Service Call Girls Agency
 
Who Is Emmanuel Katto Uganda? His Career, personal life etc.
Who Is Emmanuel Katto Uganda? His Career, personal life etc.Who Is Emmanuel Katto Uganda? His Career, personal life etc.
Who Is Emmanuel Katto Uganda? His Career, personal life etc.
 
Technical Data | Sig Sauer Easy6 BDX 1-6x24 | Optics Trade
Technical Data | Sig Sauer Easy6 BDX 1-6x24 | Optics TradeTechnical Data | Sig Sauer Easy6 BDX 1-6x24 | Optics Trade
Technical Data | Sig Sauer Easy6 BDX 1-6x24 | Optics Trade
 
TAM Sports_IPL 17 Till Match 37_Celebrity Endorsement _Report.pdf
TAM Sports_IPL 17 Till Match 37_Celebrity Endorsement _Report.pdfTAM Sports_IPL 17 Till Match 37_Celebrity Endorsement _Report.pdf
TAM Sports_IPL 17 Till Match 37_Celebrity Endorsement _Report.pdf
 
ALL NFL NETWORK CONTACTS- April 29, 2024
ALL NFL NETWORK CONTACTS- April 29, 2024ALL NFL NETWORK CONTACTS- April 29, 2024
ALL NFL NETWORK CONTACTS- April 29, 2024
 
Croatia vs Italy Euro Cup 2024 Three pitfalls for Spalletti’s Italy in Group ...
Croatia vs Italy Euro Cup 2024 Three pitfalls for Spalletti’s Italy in Group ...Croatia vs Italy Euro Cup 2024 Three pitfalls for Spalletti’s Italy in Group ...
Croatia vs Italy Euro Cup 2024 Three pitfalls for Spalletti’s Italy in Group ...
 
WhatsApp Chat: 📞 8617697112 Birbhum Call Girl available for hotel room package
WhatsApp Chat: 📞 8617697112 Birbhum  Call Girl available for hotel room packageWhatsApp Chat: 📞 8617697112 Birbhum  Call Girl available for hotel room package
WhatsApp Chat: 📞 8617697112 Birbhum Call Girl available for hotel room package
 
🔝|97111༒99012🔝 Call Girls In {Delhi} Cr Park ₹5.5k Cash Payment With Room De...
🔝|97111༒99012🔝 Call Girls In  {Delhi} Cr Park ₹5.5k Cash Payment With Room De...🔝|97111༒99012🔝 Call Girls In  {Delhi} Cr Park ₹5.5k Cash Payment With Room De...
🔝|97111༒99012🔝 Call Girls In {Delhi} Cr Park ₹5.5k Cash Payment With Room De...
 
08448380779 Call Girls In IIT Women Seeking Men
08448380779 Call Girls In IIT Women Seeking Men08448380779 Call Girls In IIT Women Seeking Men
08448380779 Call Girls In IIT Women Seeking Men
 
UEFA Euro 2024 Squad Check-in Who is Most Favorite.docx
UEFA Euro 2024 Squad Check-in Who is Most Favorite.docxUEFA Euro 2024 Squad Check-in Who is Most Favorite.docx
UEFA Euro 2024 Squad Check-in Who is Most Favorite.docx
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 

How to build desktop apps that help your web app succeed