• Save

Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

Like this? Share it with your network

Share

Droidcon London 2010 - Create Killer Location Apps

  • 2,120 views
Uploaded on

My talk in the API / SDK track at Droidcon London 2010.

My talk in the API / SDK track at Droidcon London 2010.

More in: Technology , Business
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,120
On Slideshare
1,862
From Embeds
258
Number of Embeds
6

Actions

Shares
Downloads
0
Comments
0
Likes
7

Embeds 258

http://blog.cohen-rose.org 156
http://housley.me 74
http://adamcohenrose.blogspot.com 24
http://droidlondon.mpelembe.net 2
http://www.linkedin.com 1
http://www.verious.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • <br />
  • Audience have used location services. How many used Rummble? <br /> Some already building location-centric apps. <br /> Some have apps and trying to work out how to integrate location. <br />
  • Thanks for making first session. <br /> We living in the distant future... (according to Doc Brown) So let&#x2019;s travel back in time to 1995 for some interactive trivia. I hope you&#x2019;re awake! <br />
  • 0.4% of world pop <br />
  • 8.6% world pop <br />
  • 8.6% world pop <br />
  • Making assumption that most people on Twitter or other social networks have FB account. <br /> FB Launched in 2004, so &lt; 3 years to get achieve same growth as internet. <br />
  • Market size Google Maps, Local Search or Check-in service? <br /> Network effect... next slide <br />
  • 1908 Theodore Vail, Bell Telephone annual report. <br /> Network effect much greater now - more connections, accelerated growth... <br /> ...building upon internet and social. <br />
  • Rummble&#x2019;s Q3 revenue.... <br /> 28.8% of world pop <br />
  • Rummble&#x2019;s Q3 revenue.... <br /> 28.8% of world pop <br />
  • Rummble&#x2019;s Q3 revenue.... <br /> 28.8% of world pop <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • Does this fit with your business? <br />
  • Does this fit with your business? <br />
  • Does this fit with your business? <br />
  • Does this fit with your business? <br />
  • Does this fit with your business? <br />
  • Wifi - Works well in built up areas and indoors <br /> Cell ID - Works well, quite accurate with triangulation <br /> GPS - Long fix time, high accuracy, doesn&#x2019;t work well in built-up areas.... <br />
  • Wifi - Works well in built up areas and indoors <br /> Cell ID - Works well, quite accurate with triangulation <br /> GPS - Long fix time, high accuracy, doesn&#x2019;t work well in built-up areas.... <br />
  • <br />
  • What is your tolerance and implications on the UI? <br /> At what point do you reload data? <br /> Wifi - Works well in built up areas and indoors <br /> Cell ID - Works well, quite accurate with triangulation <br /> GPS - Long fix time, high accuracy, doesn&#x2019;t work well in built-up areas.... <br /> Lead on to... but there&#x2019;s one main alternative. <br />
  • What is your tolerance and implications on the UI? <br /> At what point do you reload data? <br /> Wifi - Works well in built up areas and indoors <br /> Cell ID - Works well, quite accurate with triangulation <br /> GPS - Long fix time, high accuracy, doesn&#x2019;t work well in built-up areas.... <br /> Lead on to... but there&#x2019;s one main alternative. <br />
  • What is your tolerance and implications on the UI? <br /> At what point do you reload data? <br /> Wifi - Works well in built up areas and indoors <br /> Cell ID - Works well, quite accurate with triangulation <br /> GPS - Long fix time, high accuracy, doesn&#x2019;t work well in built-up areas.... <br /> Lead on to... but there&#x2019;s one main alternative. <br />
  • What is your tolerance and implications on the UI? <br /> At what point do you reload data? <br /> Wifi - Works well in built up areas and indoors <br /> Cell ID - Works well, quite accurate with triangulation <br /> GPS - Long fix time, high accuracy, doesn&#x2019;t work well in built-up areas.... <br /> Lead on to... but there&#x2019;s one main alternative. <br />
  • What is your tolerance and implications on the UI? <br /> At what point do you reload data? <br /> Wifi - Works well in built up areas and indoors <br /> Cell ID - Works well, quite accurate with triangulation <br /> GPS - Long fix time, high accuracy, doesn&#x2019;t work well in built-up areas.... <br /> Lead on to... but there&#x2019;s one main alternative. <br />
  • What is your tolerance and implications on the UI? <br /> At what point do you reload data? <br /> Wifi - Works well in built up areas and indoors <br /> Cell ID - Works well, quite accurate with triangulation <br /> GPS - Long fix time, high accuracy, doesn&#x2019;t work well in built-up areas.... <br /> Lead on to... but there&#x2019;s one main alternative. <br />
  • What is your tolerance and implications on the UI? <br /> At what point do you reload data? <br /> Wifi - Works well in built up areas and indoors <br /> Cell ID - Works well, quite accurate with triangulation <br /> GPS - Long fix time, high accuracy, doesn&#x2019;t work well in built-up areas.... <br /> Lead on to... but there&#x2019;s one main alternative. <br />
  • <br />
  • Crowd sourced historical population density API. <br /> Samsung - Android market rules.. ? check it out first <br />
  • Crowd sourced historical population density API. <br /> Samsung - Android market rules.. ? check it out first <br />
  • Crowd sourced historical population density API. <br /> Samsung - Android market rules.. ? check it out first <br />
  • Crowd sourced historical population density API. <br /> Samsung - Android market rules.. ? check it out first <br />
  • The Geolocation object is used by scripts to programmatically determine the location information associated with the hosting device. The location information is acquired by applying a user-agent specific algorithm, creating a Position object, and populating that object with appropriate data accordingly. <br /> <br /> Objects implementing the Navigator interface (e.g. the window.navigator object) must also implement the NavigatorGeolocation interface [NAVIGATOR]. An instance ofNavigatorGeolocation would be then obtained by using binding-specific casting methods on an instance of Navigator. <br /> <br /> <br /> 4.1 Privacy considerations for implementors of the Geolocation API <br /> User agents must not send location information to Web sites without the express permission of the user. User agents must acquire permission through a user interface, unless they have prearranged trust relationships with users, as described below. The user interface must include the URI of the document origin [DOCUMENTORIGIN]. Those permissions that are acquired through the user interface and that are preserved beyond the current browsing session (i.e. beyond the time when the browsing context[BROWSINGCONTEXT] is navigated to another URL) must be revocable and user agents must respect revoked permissions. <br />
  • The Geolocation object is used by scripts to programmatically determine the location information associated with the hosting device. The location information is acquired by applying a user-agent specific algorithm, creating a Position object, and populating that object with appropriate data accordingly. <br /> <br /> Objects implementing the Navigator interface (e.g. the window.navigator object) must also implement the NavigatorGeolocation interface [NAVIGATOR]. An instance ofNavigatorGeolocation would be then obtained by using binding-specific casting methods on an instance of Navigator. <br /> <br /> <br /> 4.1 Privacy considerations for implementors of the Geolocation API <br /> User agents must not send location information to Web sites without the express permission of the user. User agents must acquire permission through a user interface, unless they have prearranged trust relationships with users, as described below. The user interface must include the URI of the document origin [DOCUMENTORIGIN]. Those permissions that are acquired through the user interface and that are preserved beyond the current browsing session (i.e. beyond the time when the browsing context[BROWSINGCONTEXT] is navigated to another URL) must be revocable and user agents must respect revoked permissions. <br />
  • The Geolocation object is used by scripts to programmatically determine the location information associated with the hosting device. The location information is acquired by applying a user-agent specific algorithm, creating a Position object, and populating that object with appropriate data accordingly. <br /> <br /> Objects implementing the Navigator interface (e.g. the window.navigator object) must also implement the NavigatorGeolocation interface [NAVIGATOR]. An instance ofNavigatorGeolocation would be then obtained by using binding-specific casting methods on an instance of Navigator. <br /> <br /> <br /> 4.1 Privacy considerations for implementors of the Geolocation API <br /> User agents must not send location information to Web sites without the express permission of the user. User agents must acquire permission through a user interface, unless they have prearranged trust relationships with users, as described below. The user interface must include the URI of the document origin [DOCUMENTORIGIN]. Those permissions that are acquired through the user interface and that are preserved beyond the current browsing session (i.e. beyond the time when the browsing context[BROWSINGCONTEXT] is navigated to another URL) must be revocable and user agents must respect revoked permissions. <br />
  • The Geolocation object is used by scripts to programmatically determine the location information associated with the hosting device. The location information is acquired by applying a user-agent specific algorithm, creating a Position object, and populating that object with appropriate data accordingly. <br /> <br /> Objects implementing the Navigator interface (e.g. the window.navigator object) must also implement the NavigatorGeolocation interface [NAVIGATOR]. An instance ofNavigatorGeolocation would be then obtained by using binding-specific casting methods on an instance of Navigator. <br /> <br /> <br /> 4.1 Privacy considerations for implementors of the Geolocation API <br /> User agents must not send location information to Web sites without the express permission of the user. User agents must acquire permission through a user interface, unless they have prearranged trust relationships with users, as described below. The user interface must include the URI of the document origin [DOCUMENTORIGIN]. Those permissions that are acquired through the user interface and that are preserved beyond the current browsing session (i.e. beyond the time when the browsing context[BROWSINGCONTEXT] is navigated to another URL) must be revocable and user agents must respect revoked permissions. <br />
  • The Geolocation object is used by scripts to programmatically determine the location information associated with the hosting device. The location information is acquired by applying a user-agent specific algorithm, creating a Position object, and populating that object with appropriate data accordingly. <br /> <br /> Objects implementing the Navigator interface (e.g. the window.navigator object) must also implement the NavigatorGeolocation interface [NAVIGATOR]. An instance ofNavigatorGeolocation would be then obtained by using binding-specific casting methods on an instance of Navigator. <br /> <br /> <br /> 4.1 Privacy considerations for implementors of the Geolocation API <br /> User agents must not send location information to Web sites without the express permission of the user. User agents must acquire permission through a user interface, unless they have prearranged trust relationships with users, as described below. The user interface must include the URI of the document origin [DOCUMENTORIGIN]. Those permissions that are acquired through the user interface and that are preserved beyond the current browsing session (i.e. beyond the time when the browsing context[BROWSINGCONTEXT] is navigated to another URL) must be revocable and user agents must respect revoked permissions. <br />
  • 1 = UTC(universal time, coordinated) of position fix <br /> 2 = Data status (A=good, V=navigation receiver warning) <br /> 3 = Current Latitude <br /> 4 = North/South in Latitude Hemisphere <br /> 5 = Current Longitude <br /> 6 = East/West in Longitude Hemisphere <br /> 7 = Speed over ground in knots <br /> 8 = (Direction of travel N:0&#xB0;, E:90&#xB0;, S:180&#xB0;, W:270&#xB0;) <br /> 9 = UT DateStamp <br /> 10 = Magnetic variation degrees (Easterly var. subtracts from true course) <br /> 11 = East/West <br /> 12 = Checksum <br />
  • 1 = UTC(universal time, coordinated) of position fix <br /> 2 = Data status (A=good, V=navigation receiver warning) <br /> 3 = Current Latitude <br /> 4 = North/South in Latitude Hemisphere <br /> 5 = Current Longitude <br /> 6 = East/West in Longitude Hemisphere <br /> 7 = Speed over ground in knots <br /> 8 = (Direction of travel N:0&#xB0;, E:90&#xB0;, S:180&#xB0;, W:270&#xB0;) <br /> 9 = UT DateStamp <br /> 10 = Magnetic variation degrees (Easterly var. subtracts from true course) <br /> 11 = East/West <br /> 12 = Checksum <br />
  • 1 = UTC(universal time, coordinated) of position fix <br /> 2 = Data status (A=good, V=navigation receiver warning) <br /> 3 = Current Latitude <br /> 4 = North/South in Latitude Hemisphere <br /> 5 = Current Longitude <br /> 6 = East/West in Longitude Hemisphere <br /> 7 = Speed over ground in knots <br /> 8 = (Direction of travel N:0&#xB0;, E:90&#xB0;, S:180&#xB0;, W:270&#xB0;) <br /> 9 = UT DateStamp <br /> 10 = Magnetic variation degrees (Easterly var. subtracts from true course) <br /> 11 = East/West <br /> 12 = Checksum <br />
  • 1 = UTC(universal time, coordinated) of position fix <br /> 2 = Data status (A=good, V=navigation receiver warning) <br /> 3 = Current Latitude <br /> 4 = North/South in Latitude Hemisphere <br /> 5 = Current Longitude <br /> 6 = East/West in Longitude Hemisphere <br /> 7 = Speed over ground in knots <br /> 8 = (Direction of travel N:0&#xB0;, E:90&#xB0;, S:180&#xB0;, W:270&#xB0;) <br /> 9 = UT DateStamp <br /> 10 = Magnetic variation degrees (Easterly var. subtracts from true course) <br /> 11 = East/West <br /> 12 = Checksum <br />
  • 1 = UTC(universal time, coordinated) of position fix <br /> 2 = Data status (A=good, V=navigation receiver warning) <br /> 3 = Current Latitude <br /> 4 = North/South in Latitude Hemisphere <br /> 5 = Current Longitude <br /> 6 = East/West in Longitude Hemisphere <br /> 7 = Speed over ground in knots <br /> 8 = (Direction of travel N:0&#xB0;, E:90&#xB0;, S:180&#xB0;, W:270&#xB0;) <br /> 9 = UT DateStamp <br /> 10 = Magnetic variation degrees (Easterly var. subtracts from true course) <br /> 11 = East/West <br /> 12 = Checksum <br />
  • 1 = UTC(universal time, coordinated) of position fix <br /> 2 = Data status (A=good, V=navigation receiver warning) <br /> 3 = Current Latitude <br /> 4 = North/South in Latitude Hemisphere <br /> 5 = Current Longitude <br /> 6 = East/West in Longitude Hemisphere <br /> 7 = Speed over ground in knots <br /> 8 = (Direction of travel N:0&#xB0;, E:90&#xB0;, S:180&#xB0;, W:270&#xB0;) <br /> 9 = UT DateStamp <br /> 10 = Magnetic variation degrees (Easterly var. subtracts from true course) <br /> 11 = East/West <br /> 12 = Checksum <br />
  • So you&#x2019;ve established the user location? What next? <br />
  • Context - time, historical activity (user and everyone), social connections, etc.. <br />
  • Context - time, historical activity (user and everyone), social connections, etc.. <br />
  • Context - time, historical activity (user and everyone), social connections, etc.. <br />
  • Context - time, historical activity (user and everyone), social connections, etc.. <br />
  • Context - time, historical activity (user and everyone), social connections, etc.. <br />
  • Context - time, historical activity (user and everyone), social connections, etc.. <br />
  • Context - time, historical activity (user and everyone), social connections, etc.. <br />
  • Cold start problem not having <br /> Commercial license expensive - especially when location isn&#x2019;t core and you want to scale globally. <br /> We&#x2019;ve looked at available OS solutions (note examples) and the quality is bad. <br /> Scraping can be more expensive and time consuming. Can run into legal issues. Quality? <br /> Unified open location DB <br />
  • Cold start problem not having <br /> Commercial license expensive - especially when location isn&#x2019;t core and you want to scale globally. <br /> We&#x2019;ve looked at available OS solutions (note examples) and the quality is bad. <br /> Scraping can be more expensive and time consuming. Can run into legal issues. Quality? <br /> Unified open location DB <br />
  • Cold start problem not having <br /> Commercial license expensive - especially when location isn&#x2019;t core and you want to scale globally. <br /> We&#x2019;ve looked at available OS solutions (note examples) and the quality is bad. <br /> Scraping can be more expensive and time consuming. Can run into legal issues. Quality? <br /> Unified open location DB <br />
  • Cold start problem not having <br /> Commercial license expensive - especially when location isn&#x2019;t core and you want to scale globally. <br /> We&#x2019;ve looked at available OS solutions (note examples) and the quality is bad. <br /> Scraping can be more expensive and time consuming. Can run into legal issues. Quality? <br /> Unified open location DB <br />
  • Cold start problem not having <br /> Commercial license expensive - especially when location isn&#x2019;t core and you want to scale globally. <br /> We&#x2019;ve looked at available OS solutions (note examples) and the quality is bad. <br /> Scraping can be more expensive and time consuming. Can run into legal issues. Quality? <br /> Unified open location DB <br />
  • Cold start problem not having <br /> Commercial license expensive - especially when location isn&#x2019;t core and you want to scale globally. <br /> We&#x2019;ve looked at available OS solutions (note examples) and the quality is bad. <br /> Scraping can be more expensive and time consuming. Can run into legal issues. Quality? <br /> Unified open location DB <br />
  • Used to create boundaries, also contains some POI data.... <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • Levels the playing field as far as check-ins are concerned... <br /> Can&#x2019;t input lat,long yet... <br />
  • Index, interpret and consume location <br /> Cloud infrastructure <br />
  • Data Marketplace <br /> Spotrank <br />
  • <br />
  • <br />
  • <br />
  • Quality of response fine for most apps, but will vary between services. <br /> Geocode on the client side where possible - i.e. use the Javascript SDK. <br /> List <br /> <br />
  • Used to cost a fortune. People usually want to know how to find a place, but best to export leave this to Google Maps... Can get Bing tiles??? <br />
  • <br />
  • Group notificationsSimple to customise / turn off via app <br />
  • <br />
  • <br />
  • <br />
  • To summarise <br />
  • Are you average? Do you always like what everyone else likes? In many cases a rating derived from &#x201C;an average&#x201D; becomes meaningless. <br />
  • To solve the problem, we had to come up with a new way to filter the noise & deliver relevant content. This was the birth of our algorithm. <br />
  • To solve the problem, we had to come up with a new way to filter the noise & deliver relevant content. This was the birth of our algorithm. <br />
  • To solve the problem, we had to come up with a new way to filter the noise & deliver relevant content. This was the birth of our algorithm. <br />
  • To solve the problem, we had to come up with a new way to filter the noise & deliver relevant content. This was the birth of our algorithm. <br />
  • To solve the problem, we had to come up with a new way to filter the noise & deliver relevant content. This was the birth of our algorithm. <br />
  • To solve the problem, we had to come up with a new way to filter the noise & deliver relevant content. This was the birth of our algorithm. <br />
  • To solve the problem, we had to come up with a new way to filter the noise & deliver relevant content. This was the birth of our algorithm. <br />
  • To solve the problem, we had to come up with a new way to filter the noise & deliver relevant content. This was the birth of our algorithm. <br />
  • To solve the problem, we had to come up with a new way to filter the noise & deliver relevant content. This was the birth of our algorithm. <br />
  • This was the birth of our algorithm. <br />
  • Then we had to build it.... <br /> Simple explanation follows. <br /> <br />
  • Then we had to build it.... <br /> Simple explanation follows. <br /> <br />
  • Then we had to build it.... <br /> Simple explanation follows. <br /> <br />
  • Then we had to build it.... <br /> Simple explanation follows. <br /> <br />
  • Then we had to build it.... <br /> Simple explanation follows. <br /> <br />
  • Then we had to build it.... <br /> Simple explanation follows. <br /> <br />
  • Then we had to build it.... <br /> Simple explanation follows. <br /> <br />
  • Then we had to build it.... <br /> Simple explanation follows. <br /> <br />
  • Then we had to build it.... <br /> Simple explanation follows. <br /> <br />
  • Then we had to build it.... <br /> Simple explanation follows. <br /> <br />
  • Then we had to build it.... <br /> Simple explanation follows. <br /> <br />
  • Then we had to build it.... <br /> Simple explanation follows. <br /> <br />
  • Then we had to build it.... <br /> Simple explanation follows. <br /> <br />
  • Then we had to build it.... <br /> Simple explanation follows. <br /> <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • Greater reach, more content <br />
  • Greater reach, more content <br />
  • Greater reach, more content <br />
  • Greater reach, more content <br />
  • <br />
  • 450 average tweets a day from NYC alone, which comment on a venue, bar or restaurant. We&#x2019;re currently processing &#xBD; million tweets a day, from just 4 cities &#x2013; San Francisco, Austin, New York, and London <br />
  • Commercial rationale? <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • ...so come &#x201C;swing&#x201D; with us and not sound *too* strange. <br />
  • ...so come &#x201C;swing&#x201D; with us and not sound *too* strange. <br />
  • ...so come &#x201C;swing&#x201D; with us and not sound *too* strange. <br />
  • ...so come &#x201C;swing&#x201D; with us and not sound *too* strange. <br />
  • ...so come &#x201C;swing&#x201D; with us and not sound *too* strange. <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • Long tail graph &#x2013; easy example; blue i regular bookshops, red is amazon. <br />
  • <br />

Transcript

  • 1. Create Killer Location Apps Alex Housley /ahousley @DroidconUK 2010
  • 2. Assumptions
  • 3. Internet December 1995?
  • 4. Internet December 1995? 16 Million
  • 5. Internet
  • 6. Internet August 2001?
  • 7. Internet August 2001? 513 Million
  • 8. Social
  • 9. Location
  • 10. http://en.wikipedia.org/wiki/Network_effect
  • 11. Internet Today...
  • 12. Internet Today... 1.97 Billion
  • 13. Internet Today...
  • 14. Internet Today...
  • 15. Misconceptions
  • 16. Misconceptions • Location is mature
  • 17. Misconceptions • Location is mature • Location is a feature
  • 18. Misconceptions • Location is mature • Location is a feature • Friend finders
  • 19. Misconceptions • Location is mature • Location is a feature • Friend finders • Starbucks voucher holy grail
  • 20. Misconceptions • Location is mature • Location is a feature • Friend finders • Starbucks voucher holy grail • There will be one big winner
  • 21. Utility vs Game
  • 22. Utility vs Game • User motivations and emotions?
  • 23. Utility vs Game • User motivations and emotions? • Be careful “bolting” game onto a utility
  • 24. Utility vs Game • User motivations and emotions? • Be careful “bolting” game onto a utility • Reward important behaviour
  • 25. Utility vs Game • User motivations and emotions? • Be careful “bolting” game onto a utility • Reward important behaviour • Where there’s a number, there a game...
  • 26. Utility vs Game • User motivations and emotions? • Be careful “bolting” game onto a utility • Reward important behaviour • Where there’s a number, there a game... • Consider UI implications
  • 27. Determine Location
  • 28. Android SDK
  • 29. Android SDK • Package - android.location
  • 30. Android SDK • Package - android.location • Last known location
  • 31. Android SDK • Package - android.location • Last known location • Set LocationListener (optionally per LocationProvider - GPS, Cell ID, WiFi)
  • 32. Android SDK • Package - android.location • Last known location • Set LocationListener (optionally per LocationProvider - GPS, Cell ID, WiFi) • Interval (ms)
  • 33. Android SDK • Package - android.location • Last known location • Set LocationListener (optionally per LocationProvider - GPS, Cell ID, WiFi) • Interval (ms) • Distance (m)
  • 34. Android SDK • Package - android.location • Last known location • Set LocationListener (optionally per LocationProvider - GPS, Cell ID, WiFi) • Interval (ms) • Distance (m) • Accuracy
  • 35. Android SDK • Package - android.location • Last known location • Set LocationListener (optionally per LocationProvider - GPS, Cell ID, WiFi) • Interval (ms) • Distance (m) • Accuracy • Lookup time
  • 36. Skyhook
  • 37. Skyhook • Commercial location SDK
  • 38. Skyhook • Commercial location SDK • Some patented A-GPS / location provider balancing
  • 39. Skyhook • Commercial location SDK • Some patented A-GPS / location provider balancing • Apple’s default location provider until iOS4
  • 40. Skyhook • Commercial location SDK • Some patented A-GPS / location provider balancing • Apple’s default location provider until iOS4 • SpotRank
  • 41. W3C Geolocation API http://www.w3.org/TR/geolocation-API/ http://techxplorer.com/2010/03/15/geolocation-using-the-browser-in-the-android-os-part-1/
  • 42. W3C Geolocation API • Standards based http://www.w3.org/TR/geolocation-API/ http://techxplorer.com/2010/03/15/geolocation-using-the-browser-in-the-android-os-part-1/
  • 43. W3C Geolocation API • Standards based • Agnostic to underlying location source http://www.w3.org/TR/geolocation-API/ http://techxplorer.com/2010/03/15/geolocation-using-the-browser-in-the-android-os-part-1/
  • 44. W3C Geolocation API • Standards based • Agnostic to underlying location source • Retrieve one-shot, interval or cached location http://www.w3.org/TR/geolocation-API/ http://techxplorer.com/2010/03/15/geolocation-using-the-browser-in-the-android-os-part-1/
  • 45. W3C Geolocation API • Standards based • Agnostic to underlying location source • Retrieve one-shot, interval or cached location • User agent may not send location without express permission of the user http://www.w3.org/TR/geolocation-API/ http://techxplorer.com/2010/03/15/geolocation-using-the-browser-in-the-android-os-part-1/
  • 46. W3C Geolocation API http://www.w3.org/TR/geolocation-API/ http://techxplorer.com/2010/03/15/geolocation-using-the-browser-in-the-android-os-part-1/
  • 47. W3C Geolocation API $(document).ready(function()
{ 

//
Try
W3C
Geolocation 

if(navigator.geolocation)
{ 



navigator.geolocation.getCurrentPosition(function(position)
{ 





//
success 





windows.alert(position.coords.latitude
+
','
+
position.coords.longitude); 



},
function(position_error)
{ 





//
failure 




windows.alert('An
error
occured
while
determining
your
location:'
+
 position_error.message); 



},
{ 





//
options 





enableHighAccuracy:
true 



}); 

}
else
{ 



windows.alert('The
W3C
Geolocation
API
isn't
availble.'); 

} }); http://www.w3.org/TR/geolocation-API/ http://techxplorer.com/2010/03/15/geolocation-using-the-browser-in-the-android-os-part-1/
  • 48. Mock Location Provider
  • 49. Mock Location Provider • Text file containing GPS locations
  • 50. Mock Location Provider • Text file containing GPS locations • Use during implementation & testing
  • 51. Mock Location Provider • Text file containing GPS locations • Use during implementation & testing • /data/misc/location/<provider_name>
  • 52. Mock Location Provider • Text file containing GPS locations • Use during implementation & testing • /data/misc/location/<provider_name> • Check out "/data/app/misc/location/gps/ nmea" via DDMS-View:
  • 53. Mock Location Provider • Text file containing GPS locations • Use during implementation & testing • /data/misc/location/<provider_name> • Check out "/data/app/misc/location/gps/ nmea" via DDMS-View:
  • 54. Mock Location Provider • Text file containing GPS locations • Use during implementation & testing • /data/misc/location/<provider_name> • Check out "/data/app/misc/location/gps/ nmea" via DDMS-View: $GPRMC,.......
 $GPRMC,003347.000,A,3725.3433,N,12205.7920,W,0.08,149.46,061007,,,D*70
 $GPRMC,003348.000,A,3725.3433,N,12205.7921,W,0.05,142.51,061007,,,D*7E
 $GPRMC,003349.000,A,3725.3432,N,12205.7921,W,0.08,159.56,061007,,,D*7E
 $GPRMC,003350.000,A,3725.3432,N,12205.7921,W,0.06,151.59,061007,,,D*7F
 $GPRMC,003351.000,A,3725.3432,N,12205.7921,W,0.20,120.57,061007,,,D*72
 $GPRMC,.......
  • 55. Do something with the coordinates....
  • 56. Make Location Useful *with permission
  • 57. Make Location Useful • Location is a single component of context *with permission
  • 58. Make Location Useful • Location is a single component of context • Geocode all user generated content* *with permission
  • 59. Make Location Useful • Location is a single component of context • Geocode all user generated content* • Personalise (nearby != relevant) *with permission
  • 60. Make Location Useful • Location is a single component of context • Geocode all user generated content* • Personalise (nearby != relevant) • Activity *with permission
  • 61. Make Location Useful • Location is a single component of context • Geocode all user generated content* • Personalise (nearby != relevant) • Activity • People *with permission
  • 62. Make Location Useful • Location is a single component of context • Geocode all user generated content* • Personalise (nearby != relevant) • Activity • People • Places *with permission
  • 63. Make Location Useful • Location is a single component of context • Geocode all user generated content* • Personalise (nearby != relevant) • Activity • People • Places • Virtual “Things” *with permission
  • 64. Local Data
  • 65. Local Data • Crowd-source
  • 66. Local Data • Crowd-source • Commercial Licence - (UK/US example)
  • 67. Local Data • Crowd-source • Commercial Licence - (UK/US example) • Open Source
  • 68. Local Data • Crowd-source • Commercial Licence - (UK/US example) • Open Source • Scrape it...
  • 69. Local Data • Crowd-source • Commercial Licence - (UK/US example) • Open Source • Scrape it... • APIs
  • 70. Local Data • Crowd-source • Commercial Licence - (UK/US example) • Open Source • Scrape it... • APIs • Future?
  • 71. Geonames
  • 72. GeoPlanet
  • 73. Flickr
  • 74. Twitter
  • 75. Google Places
  • 76. Facebook Places
  • 77. SimpleGeo
  • 78. Spotrank
  • 79. Data.gov.uk
  • 80. Geocoding • Geocoder class in android.location Manifest: <uses-permission android:name="android.permission.INTERNET" /> • getFromLocation longitude, int maxResults) (double latitude, double • getFromLocationName double (String locationName, int maxResults, lowerLeftLatitude, double lowerLeftLongitude, double upperRightLatitude, double upperRightLongitude) • getFromLocationName (String locationName, int maxResults)
  • 81. Mapping
  • 82. Notifications Google • NotificationManager (Froyo) • Polling client or server • Icon, flashing LED, backlight, sound, vibration
  • 83. Notifications Xtify • 3rd party API • Background service • Compatible 1.x upwards • Commercial • Geo-fencing
  • 84. Measurement • Assign key local metrics and goals • Track and measure activity by location • Spot local trends • AB Testing per locale • Flurry, Distimo, Google Analytics, Activity Logs
  • 85. Rummble API
  • 86. In a real world situation users want results in just a few seconds…
  • 87. ...and suffer the stupidity of crowds
  • 88. Whiteboard, Cambridge, 2006 Quantify Trust
  • 89. Whiteboard, Cambridge, 2006 Filter Noise
  • 90. Whiteboard, Cambridge, 2006 Relevant Content
  • 91. Aggregated or averaged ratings
  • 92. Aggregated or averaged ratings Golbeck trust
  • 93. Aggregated or averaged ratings Golbeck trust Advogatos trust
  • 94. Aggregated or averaged ratings Golbeck trust Advogatos trust Eigentrust…
  • 95. Aggregated or averaged ratings Golbeck trust Advogatos trust Eigentrust… ...are all ways to create ratings.
  • 96. Aggregated or averaged ratings Golbeck trust Advogatos trust Eigentrust… ...are all ways to create ratings. None do what we wanted.
  • 97. Whiteboard, Cambridge, 2006 Subjective Logic
  • 98. Whiteboard, Cambridge, 2006 Subjective Logic
  • 99. Combined with...
  • 100. Combined with... belief, disbelief,
  • 101. Combined with... belief, disbelief, uncertainty,
  • 102. Combined with... belief, disbelief, uncertainty, bijective mapping,
  • 103. Combined with... belief, disbelief, uncertainty, bijective mapping, discounting,
  • 104. Combined with... belief, disbelief, uncertainty, bijective mapping, discounting, consensus,
  • 105. Combined with... belief, disbelief, uncertainty, bijective mapping, discounting, consensus, updating & scalability,
  • 106. Combined with... belief, disbelief, uncertainty, bijective mapping, discounting, consensus, updating & scalability,
  • 107. Combined with... belief, disbelief, uncertainty, bijective mapping, discounting, consensus, updating & scalability,
  • 108. Combined with... belief, disbelief, uncertainty, bijective mapping, discounting, consensus, updating & scalability,
  • 109. Combined with... belief, disbelief, uncertainty, bijective mapping, discounting, consensus, updating & scalability,
  • 110. Combined with... belief, disbelief, uncertainty, bijective mapping, discounting, consensus, updating & scalability, ...this makes up our algorithm.
  • 111. Rummble infers trust from personal taste 12
  • 112. Similar ratings = Trust (e.g. for tourist sites) 13
  • 113. Diverged ratings = lack of Trust 14
  • 114. You get trusted content from strangers and friends within your trust network 16
  • 115. You get trusted content from strangers and friends within your trust network 16
  • 116. The barrier to entry of replicating your entire social graph, is removed 17
  • 117. Tremors 500,000 tweets a day 90% accuracy
  • 118. Tremors 500,000 tweets a day 90% accuracy New York
  • 119. Rummble API
  • 120. Rummble API • People, places, reviews, check-ins
  • 121. Rummble API • People, places, reviews, check-ins • Tremors - tweets matched to places
  • 122. Rummble API • People, places, reviews, check-ins • Tremors - tweets matched to places • Long Tail
  • 123. Rummble API • People, places, reviews, check-ins • Tremors - tweets matched to places • Long Tail • Offers
  • 124. Rummble API
  • 125. Rummble API • OAuth
  • 126. Rummble API • OAuth • JSON / XML
  • 127. Rummble API • OAuth • JSON / XML • Read and write
  • 128. Rummble API • OAuth • JSON / XML • Read and write • Flexible license
  • 129. Rummble API • OAuth • JSON / XML • Read and write • Flexible license • Open door policy
  • 130. Rummble API
  • 131. Droidcon Hack! Rummble by @AkshayDashrath
  • 132. Thanks! • http://dev.rummble.com • alex.housley@rummble.com • @ahousley • Join us for #beer on the top floor!