際際滷

際際滷Share a Scribd company logo
Solving The
                           Brooklyn Problem:
                           Better UX through cheap hacks




                           Kellan Elliott-McCrea, Etsy
                           @kellan




Thursday, April 21, 2011
Thursday, April 21, 2011
Thursday, April 21, 2011
Thursday, April 21, 2011
1. UI/UX can be improved by applying
     ambient location information




Thursday, April 21, 2011
1. UI/UX can be improved by applying
     ambient location information
     2. Its easy.



Thursday, April 21, 2011
The Brooklyn Problem




Thursday, April 21, 2011
The Brooklyn Problem




             Brooklyn, New York Brooklyn, Alabama
Thursday, April 21, 2011
if ($query == Brooklyn) {
             return Brooklyn, NY;
            }




Thursday, April 21, 2011
Thursday, April 21, 2011
Thursday, April 21, 2011
Thursday, April 21, 2011
Thursday, April 21, 2011
Solr 3.10, Maxmind world populations dataset, bash,
                            and an algorithm




Thursday, April 21, 2011
Solr geo-spatial extension 3.10+

      schema.xml:
        <fieldType name="location" class="solr.LatLonType"
        subFieldSuffix="_coordinate"/>

        ....

        <field name="latlong" type="location" indexed="true" stored="true"
        required="true" />




Thursday, April 21, 2011
ALL THE CODE!


              <?php

                   $fh = fopen('worldcitiespop.txt', 'r');
                   $row = fgetcsv($fh); // discard headers
                   for($i=0;$i<100;$i++) {
                       $row = fgetcsv($fh);
                       $json = array('add'=> array('doc' =>
                           array(
                                'terms' => $row[2] . ' ' . $row[0], // city country
                                'population' => $row[4],
                                'latlong' => $row[5] . ',' . $row[6], // "latitude,longitude" gets parsed
                           )));
                           curl_post(json_encode($json));
                       }
                   }

                   function curl_post($json, $url='http://localhost:8983/solr/update/json') {
                       $ch = curl_init();
                       curl_setopt($ch, CURLOPT_HTTPHEADERS, array('Content-Type: application/json'));
                       curl_setopt($ch, CURLOPT_URL, $URL);
                   }
              ?>




Thursday, April 21, 2011
a custom Solr scoring function to re-rank results
                        based on social geo-relevance




Thursday, April 21, 2011
div(geodist(),sqrt(sum(population,1))




Thursday, April 21, 2011
http://localhost:8393/solr/
               placesuggest/select?
               q=b*&sfield=latlong&pt=37.7749295
               ,-122.4194155&sort=div(geodist
               (),sqrt(sum(population,1)))%20asc




Thursday, April 21, 2011
OM
           G
             CO
               NT
          http://localhost:8393/solr/
                  EX
                     TS
          placesuggest/select?
                   GE EN
          q=b*&sfield=latlong&pt=37.7749295
                      OC SIT
                        O D IV
          ,-122.4194155&sort=div(geodist
                           IN E PE
          (),sqrt(sum(population,1)))%20asc
                             G!     RS
                               !!!!   ON
                                        AL
                                          IZ
                                             ED


Thursday, April 21, 2011
Done!


Thursday, April 21, 2011
the tear down

   * Solr 3.10+ working geo-spatial extensions
   * 2.6 million points == 380Mb index
   * the data sucks, and it doesnt matter (much)
   * a few days of work, 85% increase in data
   quality.




Thursday, April 21, 2011
.Wanjialing, China




Thursday, April 21, 2011
Brooklyn NY, population: 0




Thursday, April 21, 2011
So why arent people doing this?




Thursday, April 21, 2011
Thursday, April 21, 2011
Thursday, April 21, 2011
Thursday, April 21, 2011
Solr 3.10, Maxmind world populations dataset, bash,
                            and an algorithm




Thursday, April 21, 2011
Thank you!

                           http://www.etsy.com/listing/59401151/vintage-coffee-bean-bag-chairs
                           http://www.鍖ickr.com/photos/darn/141009324/
                           http://www.鍖ickr.com/photos/21953562@N07/5539813593/
                           http://www.maxmind.com/app/worldcities
                           http://www.lucidimagination.com/blog/2010/07/20/update-spatial-search-in-
                           apache-lucene-and-solr/
                           http://www.etsy.com/listing/66013923/triceratops-forged-copper-mask
Thursday, April 21, 2011

More Related Content

Solving the "Brooklyn Problem"

  • 1. Solving The Brooklyn Problem: Better UX through cheap hacks Kellan Elliott-McCrea, Etsy @kellan Thursday, April 21, 2011
  • 5. 1. UI/UX can be improved by applying ambient location information Thursday, April 21, 2011
  • 6. 1. UI/UX can be improved by applying ambient location information 2. Its easy. Thursday, April 21, 2011
  • 8. The Brooklyn Problem Brooklyn, New York Brooklyn, Alabama Thursday, April 21, 2011
  • 9. if ($query == Brooklyn) { return Brooklyn, NY; } Thursday, April 21, 2011
  • 14. Solr 3.10, Maxmind world populations dataset, bash, and an algorithm Thursday, April 21, 2011
  • 15. Solr geo-spatial extension 3.10+ schema.xml: <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/> .... <field name="latlong" type="location" indexed="true" stored="true" required="true" /> Thursday, April 21, 2011
  • 16. ALL THE CODE! <?php $fh = fopen('worldcitiespop.txt', 'r'); $row = fgetcsv($fh); // discard headers for($i=0;$i<100;$i++) { $row = fgetcsv($fh); $json = array('add'=> array('doc' => array( 'terms' => $row[2] . ' ' . $row[0], // city country 'population' => $row[4], 'latlong' => $row[5] . ',' . $row[6], // "latitude,longitude" gets parsed ))); curl_post(json_encode($json)); } } function curl_post($json, $url='http://localhost:8983/solr/update/json') { $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADERS, array('Content-Type: application/json')); curl_setopt($ch, CURLOPT_URL, $URL); } ?> Thursday, April 21, 2011
  • 17. a custom Solr scoring function to re-rank results based on social geo-relevance Thursday, April 21, 2011
  • 19. http://localhost:8393/solr/ placesuggest/select? q=b*&sfield=latlong&pt=37.7749295 ,-122.4194155&sort=div(geodist (),sqrt(sum(population,1)))%20asc Thursday, April 21, 2011
  • 20. OM G CO NT http://localhost:8393/solr/ EX TS placesuggest/select? GE EN q=b*&sfield=latlong&pt=37.7749295 OC SIT O D IV ,-122.4194155&sort=div(geodist IN E PE (),sqrt(sum(population,1)))%20asc G! RS !!!! ON AL IZ ED Thursday, April 21, 2011
  • 22. the tear down * Solr 3.10+ working geo-spatial extensions * 2.6 million points == 380Mb index * the data sucks, and it doesnt matter (much) * a few days of work, 85% increase in data quality. Thursday, April 21, 2011
  • 24. Brooklyn NY, population: 0 Thursday, April 21, 2011
  • 25. So why arent people doing this? Thursday, April 21, 2011
  • 29. Solr 3.10, Maxmind world populations dataset, bash, and an algorithm Thursday, April 21, 2011
  • 30. Thank you! http://www.etsy.com/listing/59401151/vintage-coffee-bean-bag-chairs http://www.鍖ickr.com/photos/darn/141009324/ http://www.鍖ickr.com/photos/21953562@N07/5539813593/ http://www.maxmind.com/app/worldcities http://www.lucidimagination.com/blog/2010/07/20/update-spatial-search-in- apache-lucene-and-solr/ http://www.etsy.com/listing/66013923/triceratops-forged-copper-mask Thursday, April 21, 2011