Nestoria new design

lokku
Nestoria New Design
Savio Dimatteo
Perl Developer,
Lokku Ltd.

Commercial Computing Lecture Series
Birmingham University
5 December 2013
Who am I?
● Savio Dimatteo
● Perl Developer at Nestoria property search engine
● working on a LAMP stack since 2 years

[ “P” = “Perl” ]

● maintenance/frontend/backend projects
● currently working on: “Nestoria New Design”
Lokku

● dev team: 6 people
● product team: 2 people
● commercial team: 8 people
Nestoria
● property search engine
● 8 countries, 6 languages
● 1.3 million search requests per day
● 10 million properties indexed every day
Nestoria
Nestoria Internally
Nestoria Internally
Nestoria Externally
Nestoria Externally
Nestoria Externally
Nestoria Externally
Nestoria Stack
● HTML::Mason
● jQuery/jQueryUI
● XHTML Strict
● Apache, mod_perl
● MySQL
Nestoria Over Time
Nestoria Over Time
Legible Listings Layout
Legible Listings Layout
● ~200KB more CSS
● + ~6% daily clicks than in previous design
● exception: India
○ older devices
■ lower resolutions
■ slower connections
Nestoria New Design
Nestoria New Design
Setting and Resources
● ~4 months time
Nestoria New Design
Challenges
Challenge #1
Getting the Design Right
New Design Specs
What you get:
○ spacing
○ fonts
○ colors
○ sizes
● Looks good!
New Design Specs
What you get:
○ spacing
○ fonts
○ colors
○ sizes
● Looks good! BUT
Improvement via user tests
Improvement via user tests
Smaller Graphical Tweaks
Logic not yet implemented
Exact dimensions
“Australian” Prices?
● Offers Above $545,000
● $439,950-$469,950
● POA
● Supurb Value offers above $1.49M
“Australian” Prices?
Implementing “impossible” specs
1. stick to the spec as much as possible
2. follow the principles the spec is based on
3. be inventive
4. talk to people
Implementing “impossible” specs
1. stick to the spec as much as possible
2. follow the principles the spec is based on
3. be inventive
4. talk to people
Australian prices!
Australian Prices!
● no collision
● leave as is
Australian Prices!
● collision

● detect collision (Javascript)
if ($titleLink.position().left + $titleLink.width() >= $titleAside.position().left) {

}
Australian Prices!
● detect collision (Javascript)
if ($titleLink.position().left + $titleLink.width() >= $titleAside.position().left) {
…

$listingContainer.addClass(‘nst-collision-detected’);

…

}
● Add ‘nst-collision-detected’ CSS rule to fix the issue
Challenge #2
Building UI components
New Sliders
New Sliders
● disabled (any price allowed)
New Sliders
● left-bounded range
New Sliders
● bounded range
New Sliders
● single value
New Sliders - click
New Sliders - click
New Sliders - click and drag
New Sliders - touch
New Sliders - touch and drag
How would you do create a slider like that?
jQueryUI
“ jQuery UI is a curated set of user interface interactions,
effects, widgets, and themes built on top of the jQuery
JavaScript Library. ”
jQueryUI - sliders
jQueryUI - sliders
jQueryUI - sliders
Can’t click!
jQueryUI - sliders
Can’t click!

Can’t touch!
jQueryUI - touch support
● jQuery UI Touch Punch
“ jQuery UI Touch Punch is a small hack that enables the
use of touch events on sites using the jQuery UI user
interface library. ”
● Can’t touch sliders on Silk Browser (Kindle Fire HD).
Why building our own sliders?
● complex yet specific user interactions
● it’s tempting to hack into jQuery UI sliders to add touch
support (forbidden!)
● would need to include jQuery UI (23KB, minified)
● we already plan to increase complexity of slider UI!
jquery.nstSlider.js - usage

<div class="nst-slider-outer" data-step="20" data-min="20” data-max="220">
<div class="nst-slider-inner">
<div class="nst-slider-grip-left"></div>
<div class="nst-slider-grip-right"></div>
</div>
</div>
jquery.nstSlider.js - usage

$('.nst-slider-outer').nstSlider({
'valueChangedCallback' : function(min, max) {
$('.nst-slider-min').text(min);
$('.nst-slider-max').text(max);
}
});
jquery.nstSlider.js - Idea
left
grip
right
grip

position:absolute;
left: 0px;

inner bar
position:relative;
position:absolute;
right: 0px;
outer bar
(gray bar)
jquery.nstSlider.js - Idea
left
grip

left
right
grip barinnergrip
inner
bar

outer bar
(gray bar)
jquery.nstSlider.js - Idea

<sth>

left
grip

inner bar

right
grip

left: <sth>px;

outer bar
(gray bar)
jquery.nstSlider.js - Idea

<sth>

left
grip

inner bar

<sthElse>

right
grip

left: <sth>px;
width: <sthElse>px;

outer bar
(gray bar)
jquery.nstSlider.js - Moving left handle
left
grip

inner bar

right
grip
jquery.nstSlider.js - Moving left handle
left
grip

inner bar

right
grip
jquery.nstSlider.js - Moving left handle
left
grip
deltaPx

● track deltaPx

inner bar

right
grip
jquery.nstSlider.js - Moving left handle
deltaPx

left
grip

inner bar

● track deltaPx
● add deltaPx to left CSS property of inner bar

right
grip
jquery.nstSlider.js - Moving left handle
deltaPx

left
grip

inner bar

● track deltaPx
● add deltaPx to left CSS property of inner bar

right
grip
jquery.nstSlider.js - Moving left handle
left
grip

inner bar

right
grip

● track deltaPx
● add deltaPx to left CSS property of inner bar
● remove deltaPx from width CSS property of inner bar

- deltaPx
jquery.nstSlider.js - Moving left handle
left

left + width
left
grip

inner bar

right
grip

● track deltaPx
● add deltaPx to left CSS property of inner bar
● remove deltaPx from width CSS property of inner bar
● map left , left + width into [rangeMin, rangeMax]
jquery.nstSlider.js - Moving left handle
left
grip

inner bar

right
grip

● track deltaPx
● add deltaPx to left CSS property of inner bar
● remove deltaPx from width CSS property of inner bar
● map left , left + width into [rangeMin, rangeMax]
→ notify values have changed
jquery.nstSlider.js
● easy to use as others jQuery plugins
● highly cross-browser (IE7+, iPhones, not Windows Phones
though)
● ~6KB minified (Closure compiler)
● easily customisable
● more code to maintain
● fixed size for now
Challenge #3
Javascript Mistakes
Javascript
● more interactive compontents → more Javascript code
● Javascript:
○ Interacting with the DOM
○ Asynchronous event-handling
○ Single threaded
○ Multiple browsers and devices
○ many libraries out there
Scoping
var result = 1;
function oneOrMore(n) {
result = n;
if (n <= 0) {
var result = Math.abs(n);
result = 1 + result;
}
return result;
}
Scoping
var result = 1;

var result = 1;

function oneOrMore(n) {

function oneOrMore(n) {
var result;

result = n;

result = n;

if (n <= 0) {

if (n <= 0) {

var result = Math.abs(n);

result = Math.abs(n);

result = 1 + result;

result = 1 + result;

}

}

return result;
}

return result;
}
How to not iterate through Javascript arrays

Array.prototype.extraFunc = function () { … };

var myArray = [1, 2, 3, 4];
for (var x in myArray) {
console.log(x);
}
How to not iterate through Javascript arrays
1
Array.prototype.extraFunc = function () { … };

var myArray = [1, 2, 3, 4];
for (var x in myArray) {

2
3
4

console.log(x);

extraFunc
}
How to iterate through Javascript arrays

Array.prototype.extraFunc = function () { … };

var myArray = [1, 2, 3, 4];
for (var i=0; i<myArray.length; i++) {
console.log(myArray[i]);
}
How to not iterate through Javascript objects

var myObj = {
‘key1’ : 1,

‘key2’ : 2,

‘key3’ : 3

};

var k;
for (k in myObj) {
console.log(k, myObj[k]);
}
How to iterate through Javascript objects
var myObj = {
‘key1’ : 1, ‘key2’ : 2,
};

‘key3’ : 3

var k;
for (k in myObj) {
if (myObj.hasOwnProperty(k)) {
console.log(k, myObj[k]);
}
}
Javascript Code Validation - JSHint
● Java-based tool
● parser-based validation
● easy to configure
● very flexible configuration
○ trailing whitespaces
○ naming conventions
○ undeclared variables
JSHint configuration
{
"curly" : true,
"camelcase": false,

"globals" : {

"eqeqeq" : true,

"Modernizr" : true,

"forin" : true,

"$j" : true,

"unused" : true,

"google" : true,

"es3" : true,

"LokkuMap" : true,

"trailing" : false,

"GoogleLokkuMap" : true,

"devel" : false,

"LeafletLokkuMap" : true,

"undef" : true,

"L": true

"jquery" : true,
"browser" : true,

}
}
Conclusions
● talk to members of your team during your project
● changing a component completely? just build your own!
● Javascript → mistakes!
○ use code quality tools to avoid mistakes
Nestoria new design
Nestoria new design
Conclusions: Nestoria New Design
● New design is now live
○ ~3% more daily clicks (all countries)
○ users feel it’s fast (i.e., more clicks per users)
○ we can improve its speed further
○ works in India too!

● the amount Javascript in our codebase is going to grow
○ old motto: “avoid Javascript as much as possible”
○ new motto: “write better Javascript”
Thank you!
http://www.nestoria.com - find a property
http://www.github.com/lokku - open source code
http://www.lokku.com/jobs - work with us!
1 of 86

Recommended

Automatically Spotting Cross-language Relations by
Automatically Spotting Cross-language RelationsAutomatically Spotting Cross-language Relations
Automatically Spotting Cross-language RelationsFederico Tomassetti
1.1K views20 slides
An introduction to Scala.js by
An introduction to Scala.jsAn introduction to Scala.js
An introduction to Scala.jsKnoldus Inc.
110 views21 slides
Scaling MongoDB; Sharding Into and Beyond the Multi-Terabyte Range by
Scaling MongoDB; Sharding Into and Beyond the Multi-Terabyte RangeScaling MongoDB; Sharding Into and Beyond the Multi-Terabyte Range
Scaling MongoDB; Sharding Into and Beyond the Multi-Terabyte RangeMongoDB
2.4K views23 slides
Scala == Effective Java by
Scala == Effective JavaScala == Effective Java
Scala == Effective JavaScalac
2.3K views31 slides
Esoteric, Obfuscated, Artistic Programming in Ruby by
Esoteric, Obfuscated, Artistic Programming in RubyEsoteric, Obfuscated, Artistic Programming in Ruby
Esoteric, Obfuscated, Artistic Programming in Rubymametter
1.6K views47 slides
Scala 3camp 2011 by
Scala   3camp 2011Scala   3camp 2011
Scala 3camp 2011Scalac
941 views50 slides

More Related Content

What's hot

Autopsy Of A Widget by
Autopsy Of A WidgetAutopsy Of A Widget
Autopsy Of A WidgetFabian Jakobs
5.4K views87 slides
JavaScript 1.5 to 2.0 (TomTom) by
JavaScript 1.5 to 2.0 (TomTom)JavaScript 1.5 to 2.0 (TomTom)
JavaScript 1.5 to 2.0 (TomTom)jeresig
17.7K views53 slides
jQuery (BostonPHP) by
jQuery (BostonPHP)jQuery (BostonPHP)
jQuery (BostonPHP)jeresig
1.7K views34 slides
Pier - no kernel left behind by
Pier - no kernel left behindPier - no kernel left behind
Pier - no kernel left behindNick Ager
921 views33 slides
Running Production MongoDB Lightning Talk by
Running Production MongoDB Lightning TalkRunning Production MongoDB Lightning Talk
Running Production MongoDB Lightning Talkchrisckchang
740 views20 slides
jQuery (MeshU) by
jQuery (MeshU)jQuery (MeshU)
jQuery (MeshU)jeresig
1.4K views35 slides

What's hot(17)

JavaScript 1.5 to 2.0 (TomTom) by jeresig
JavaScript 1.5 to 2.0 (TomTom)JavaScript 1.5 to 2.0 (TomTom)
JavaScript 1.5 to 2.0 (TomTom)
jeresig17.7K views
jQuery (BostonPHP) by jeresig
jQuery (BostonPHP)jQuery (BostonPHP)
jQuery (BostonPHP)
jeresig1.7K views
Pier - no kernel left behind by Nick Ager
Pier - no kernel left behindPier - no kernel left behind
Pier - no kernel left behind
Nick Ager921 views
Running Production MongoDB Lightning Talk by chrisckchang
Running Production MongoDB Lightning TalkRunning Production MongoDB Lightning Talk
Running Production MongoDB Lightning Talk
chrisckchang740 views
jQuery (MeshU) by jeresig
jQuery (MeshU)jQuery (MeshU)
jQuery (MeshU)
jeresig1.4K views
JQuery: JavaScript Library of the Future by Matthew Taylor
JQuery: JavaScript Library of the FutureJQuery: JavaScript Library of the Future
JQuery: JavaScript Library of the Future
Matthew Taylor9.7K views
Using jQuery to Extend CSS by Chris Coyier
Using jQuery to Extend CSSUsing jQuery to Extend CSS
Using jQuery to Extend CSS
Chris Coyier9.2K views
コードで学ぶドメイン駆動設計入門 by 潤一 加藤
コードで学ぶドメイン駆動設計入門コードで学ぶドメイン駆動設計入門
コードで学ぶドメイン駆動設計入門
潤一 加藤14.5K views
GRONINGEN PHP - MySQL 8.0 , not only good, great by Gabriela Ferrara
GRONINGEN PHP - MySQL 8.0 , not only good, greatGRONINGEN PHP - MySQL 8.0 , not only good, great
GRONINGEN PHP - MySQL 8.0 , not only good, great
Gabriela Ferrara269 views
2013-03-23 - NoSQL Spartakiade by Johannes Hoppe
2013-03-23 - NoSQL Spartakiade2013-03-23 - NoSQL Spartakiade
2013-03-23 - NoSQL Spartakiade
Johannes Hoppe1.8K views
Logging your node.js application by Md. Sohel Rana
Logging your node.js applicationLogging your node.js application
Logging your node.js application
Md. Sohel Rana737 views
Drupal & javascript by Almog Baku
Drupal & javascriptDrupal & javascript
Drupal & javascript
Almog Baku4.8K views
State of jQuery and Drupal by jeresig
State of jQuery and DrupalState of jQuery and Drupal
State of jQuery and Drupal
jeresig1.3K views

Similar to Nestoria new design

Lotusphere 2012 Speedgeeking - jQuery & Domino, a RAD Combination by
Lotusphere 2012 Speedgeeking - jQuery & Domino, a RAD CombinationLotusphere 2012 Speedgeeking - jQuery & Domino, a RAD Combination
Lotusphere 2012 Speedgeeking - jQuery & Domino, a RAD CombinationSean Burgess
4.2K views33 slides
MWLUG 2015 - AD114 Take Your XPages Development to the Next Level by
MWLUG 2015 - AD114 Take Your XPages Development to the Next LevelMWLUG 2015 - AD114 Take Your XPages Development to the Next Level
MWLUG 2015 - AD114 Take Your XPages Development to the Next Levelbalassaitis
2.6K views102 slides
EP2016 - Moving Away From Nodejs To A Pure Python Solution For Assets by
EP2016 - Moving Away From Nodejs To A Pure Python Solution For AssetsEP2016 - Moving Away From Nodejs To A Pure Python Solution For Assets
EP2016 - Moving Away From Nodejs To A Pure Python Solution For AssetsAlessandro Molina
2.4K views24 slides
NinjaScript and Mizugumo 2011-02-05 by
NinjaScript and Mizugumo 2011-02-05NinjaScript and Mizugumo 2011-02-05
NinjaScript and Mizugumo 2011-02-05lrdesign
869 views104 slides
Codeweek 2015 - Reactive Web Applications with Scala and LIFT framework by
Codeweek 2015 - Reactive Web Applications with Scala and LIFT frameworkCodeweek 2015 - Reactive Web Applications with Scala and LIFT framework
Codeweek 2015 - Reactive Web Applications with Scala and LIFT frameworkRiccardo Sirigu
285 views38 slides
Reactive Web Applications with Scala & Liftweb - CodeWeek 2015 by
Reactive Web Applications with Scala & Liftweb - CodeWeek 2015Reactive Web Applications with Scala & Liftweb - CodeWeek 2015
Reactive Web Applications with Scala & Liftweb - CodeWeek 2015Andrea Zaza
456 views38 slides

Similar to Nestoria new design(20)

Lotusphere 2012 Speedgeeking - jQuery & Domino, a RAD Combination by Sean Burgess
Lotusphere 2012 Speedgeeking - jQuery & Domino, a RAD CombinationLotusphere 2012 Speedgeeking - jQuery & Domino, a RAD Combination
Lotusphere 2012 Speedgeeking - jQuery & Domino, a RAD Combination
Sean Burgess4.2K views
MWLUG 2015 - AD114 Take Your XPages Development to the Next Level by balassaitis
MWLUG 2015 - AD114 Take Your XPages Development to the Next LevelMWLUG 2015 - AD114 Take Your XPages Development to the Next Level
MWLUG 2015 - AD114 Take Your XPages Development to the Next Level
balassaitis2.6K views
EP2016 - Moving Away From Nodejs To A Pure Python Solution For Assets by Alessandro Molina
EP2016 - Moving Away From Nodejs To A Pure Python Solution For AssetsEP2016 - Moving Away From Nodejs To A Pure Python Solution For Assets
EP2016 - Moving Away From Nodejs To A Pure Python Solution For Assets
Alessandro Molina2.4K views
NinjaScript and Mizugumo 2011-02-05 by lrdesign
NinjaScript and Mizugumo 2011-02-05NinjaScript and Mizugumo 2011-02-05
NinjaScript and Mizugumo 2011-02-05
lrdesign869 views
Codeweek 2015 - Reactive Web Applications with Scala and LIFT framework by Riccardo Sirigu
Codeweek 2015 - Reactive Web Applications with Scala and LIFT frameworkCodeweek 2015 - Reactive Web Applications with Scala and LIFT framework
Codeweek 2015 - Reactive Web Applications with Scala and LIFT framework
Riccardo Sirigu285 views
Reactive Web Applications with Scala & Liftweb - CodeWeek 2015 by Andrea Zaza
Reactive Web Applications with Scala & Liftweb - CodeWeek 2015Reactive Web Applications with Scala & Liftweb - CodeWeek 2015
Reactive Web Applications with Scala & Liftweb - CodeWeek 2015
Andrea Zaza456 views
The Inclusive Web: hands-on with HTML5 and jQuery by colinbdclark
The Inclusive Web: hands-on with HTML5 and jQueryThe Inclusive Web: hands-on with HTML5 and jQuery
The Inclusive Web: hands-on with HTML5 and jQuery
colinbdclark944 views
Building Codealike: a journey into the developers analytics world by Oren Eini
Building Codealike: a journey into the developers analytics worldBuilding Codealike: a journey into the developers analytics world
Building Codealike: a journey into the developers analytics world
Oren Eini634 views
Stack Overflow Austin - jQuery for Developers by Jonathan Sharp
Stack Overflow Austin - jQuery for DevelopersStack Overflow Austin - jQuery for Developers
Stack Overflow Austin - jQuery for Developers
Jonathan Sharp2.9K views
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group) by Doris Chen
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
Doris Chen9.5K views
NinjaScript 2010-10-14 by lrdesign
NinjaScript 2010-10-14NinjaScript 2010-10-14
NinjaScript 2010-10-14
lrdesign602 views
How to make Ajax Libraries work for you by Simon Willison
How to make Ajax Libraries work for youHow to make Ajax Libraries work for you
How to make Ajax Libraries work for you
Simon Willison1.4K views

More from lokku

Geocoding Overview by
Geocoding OverviewGeocoding Overview
Geocoding Overviewlokku
2.5K views36 slides
OpenCage Data and sustainable business models for open data by
OpenCage Data and sustainable business models for open data OpenCage Data and sustainable business models for open data
OpenCage Data and sustainable business models for open data lokku
4K views89 slides
Presenting the OpenCage Geocoder at #londonapi 17 Sept 2014 by
Presenting the OpenCage Geocoder at #londonapi 17 Sept 2014Presenting the OpenCage Geocoder at #londonapi 17 Sept 2014
Presenting the OpenCage Geocoder at #londonapi 17 Sept 2014lokku
2K views31 slides
A living hell - lessons learned in eight years of parsing real estate data by
A living hell - lessons learned in eight years of parsing real estate data  A living hell - lessons learned in eight years of parsing real estate data
A living hell - lessons learned in eight years of parsing real estate data lokku
5.7K views28 slides
Geo-search-location-based-results-for-site-search by
Geo-search-location-based-results-for-site-searchGeo-search-location-based-results-for-site-search
Geo-search-location-based-results-for-site-searchlokku
1.6K views24 slides
Geocoding India - talk delivered on 31 Jan 2014 at the Bangalore goeBLR event by
Geocoding India - talk delivered on 31 Jan 2014 at the Bangalore goeBLR eventGeocoding India - talk delivered on 31 Jan 2014 at the Bangalore goeBLR event
Geocoding India - talk delivered on 31 Jan 2014 at the Bangalore goeBLR eventlokku
7.6K views37 slides

More from lokku(20)

Geocoding Overview by lokku
Geocoding OverviewGeocoding Overview
Geocoding Overview
lokku2.5K views
OpenCage Data and sustainable business models for open data by lokku
OpenCage Data and sustainable business models for open data OpenCage Data and sustainable business models for open data
OpenCage Data and sustainable business models for open data
lokku4K views
Presenting the OpenCage Geocoder at #londonapi 17 Sept 2014 by lokku
Presenting the OpenCage Geocoder at #londonapi 17 Sept 2014Presenting the OpenCage Geocoder at #londonapi 17 Sept 2014
Presenting the OpenCage Geocoder at #londonapi 17 Sept 2014
lokku2K views
A living hell - lessons learned in eight years of parsing real estate data by lokku
A living hell - lessons learned in eight years of parsing real estate data  A living hell - lessons learned in eight years of parsing real estate data
A living hell - lessons learned in eight years of parsing real estate data
lokku5.7K views
Geo-search-location-based-results-for-site-search by lokku
Geo-search-location-based-results-for-site-searchGeo-search-location-based-results-for-site-search
Geo-search-location-based-results-for-site-search
lokku1.6K views
Geocoding India - talk delivered on 31 Jan 2014 at the Bangalore goeBLR event by lokku
Geocoding India - talk delivered on 31 Jan 2014 at the Bangalore goeBLR eventGeocoding India - talk delivered on 31 Jan 2014 at the Bangalore goeBLR event
Geocoding India - talk delivered on 31 Jan 2014 at the Bangalore goeBLR event
lokku7.6K views
CSS::SpriteMaker in action! by lokku
CSS::SpriteMaker in action!CSS::SpriteMaker in action!
CSS::SpriteMaker in action!
lokku1.1K views
Reducing the technical hurdle - why we started OpenCage Data by lokku
Reducing the technical hurdle - why we started OpenCage DataReducing the technical hurdle - why we started OpenCage Data
Reducing the technical hurdle - why we started OpenCage Data
lokku1K views
Css sprite_maker-1 by lokku
Css  sprite_maker-1Css  sprite_maker-1
Css sprite_maker-1
lokku1.9K views
Nestoria case study - The effective use of geo-data for search marketing by lokku
Nestoria case study - The effective use of geo-data for search marketingNestoria case study - The effective use of geo-data for search marketing
Nestoria case study - The effective use of geo-data for search marketing
lokku1.5K views
The Nestoria GeoChallenge by lokku
The Nestoria GeoChallengeThe Nestoria GeoChallenge
The Nestoria GeoChallenge
lokku4.5K views
Geo-Data for Search Marketing SEM & SEO by lokku
Geo-Data for Search Marketing SEM & SEOGeo-Data for Search Marketing SEM & SEO
Geo-Data for Search Marketing SEM & SEO
lokku847 views
Making using OSM data simpler - OpenCage Data by lokku
Making using OSM data simpler - OpenCage Data Making using OSM data simpler - OpenCage Data
Making using OSM data simpler - OpenCage Data
lokku1.4K views
What’s next in mapping for portals? ppw2012 by lokku
What’s next in mapping for portals? ppw2012What’s next in mapping for portals? ppw2012
What’s next in mapping for portals? ppw2012
lokku1.3K views
How Nestoria switched to OpenStreetMap maps by lokku
How Nestoria switched to OpenStreetMap mapsHow Nestoria switched to OpenStreetMap maps
How Nestoria switched to OpenStreetMap maps
lokku941 views
Remote Geocoding by lokku
Remote GeocodingRemote Geocoding
Remote Geocoding
lokku1K views
Lessons learned in doing lots with few people by lokku
Lessons learned in  doing lots with few peopleLessons learned in  doing lots with few people
Lessons learned in doing lots with few people
lokku3.1K views
Mapstraction by lokku
MapstractionMapstraction
Mapstraction
lokku665 views
Bar Camp London 7 by lokku
Bar Camp London 7Bar Camp London 7
Bar Camp London 7
lokku442 views
The path ahead for property portals by lokku
The path ahead for property portalsThe path ahead for property portals
The path ahead for property portals
lokku1.2K views

Recently uploaded

JQUERY.pdf by
JQUERY.pdfJQUERY.pdf
JQUERY.pdfArthyR3
107 views22 slides
ppt_dunarea.pptx by
ppt_dunarea.pptxppt_dunarea.pptx
ppt_dunarea.pptxvvvgeorgevvv
53 views5 slides
MercerJesse3.0.pdf by
MercerJesse3.0.pdfMercerJesse3.0.pdf
MercerJesse3.0.pdfjessemercerail
163 views6 slides
Volf work.pdf by
Volf work.pdfVolf work.pdf
Volf work.pdfMariaKenney3
90 views43 slides
Essay On Econ by
Essay On EconEssay On Econ
Essay On EconAshley Fisher
95 views89 slides
Thanksgiving!.pdf by
Thanksgiving!.pdfThanksgiving!.pdf
Thanksgiving!.pdfEnglishCEIPdeSigeiro
568 views17 slides

Recently uploaded(20)

JQUERY.pdf by ArthyR3
JQUERY.pdfJQUERY.pdf
JQUERY.pdf
ArthyR3107 views
Guidelines & Identification of Early Sepsis DR. NN CHAVAN 02122023.pptx by Niranjan Chavan
Guidelines & Identification of Early Sepsis DR. NN CHAVAN 02122023.pptxGuidelines & Identification of Early Sepsis DR. NN CHAVAN 02122023.pptx
Guidelines & Identification of Early Sepsis DR. NN CHAVAN 02122023.pptx
Niranjan Chavan42 views
11.30.23A Poverty and Inequality in America.pptx by mary850239
11.30.23A Poverty and Inequality in America.pptx11.30.23A Poverty and Inequality in America.pptx
11.30.23A Poverty and Inequality in America.pptx
mary850239181 views
Interaction of microorganisms with vascular plants.pptx by MicrobiologyMicro
Interaction of microorganisms with vascular plants.pptxInteraction of microorganisms with vascular plants.pptx
Interaction of microorganisms with vascular plants.pptx
Creative Restart 2023: Christophe Wechsler - From the Inside Out: Cultivating... by Taste
Creative Restart 2023: Christophe Wechsler - From the Inside Out: Cultivating...Creative Restart 2023: Christophe Wechsler - From the Inside Out: Cultivating...
Creative Restart 2023: Christophe Wechsler - From the Inside Out: Cultivating...
Taste38 views
Career Building in AI - Technologies, Trends and Opportunities by WebStackAcademy
Career Building in AI - Technologies, Trends and OpportunitiesCareer Building in AI - Technologies, Trends and Opportunities
Career Building in AI - Technologies, Trends and Opportunities
WebStackAcademy47 views
UNIT NO 13 ORGANISMS AND POPULATION.pptx by Madhuri Bhande
UNIT NO 13 ORGANISMS AND POPULATION.pptxUNIT NO 13 ORGANISMS AND POPULATION.pptx
UNIT NO 13 ORGANISMS AND POPULATION.pptx
Madhuri Bhande43 views
Ask The Expert! Nonprofit Website Tools, Tips, and Technology.pdf by TechSoup
 Ask The Expert! Nonprofit Website Tools, Tips, and Technology.pdf Ask The Expert! Nonprofit Website Tools, Tips, and Technology.pdf
Ask The Expert! Nonprofit Website Tools, Tips, and Technology.pdf
TechSoup 62 views
JRN 362 - Lecture Twenty-Two by Rich Hanley
JRN 362 - Lecture Twenty-TwoJRN 362 - Lecture Twenty-Two
JRN 362 - Lecture Twenty-Two
Rich Hanley39 views

Nestoria new design