[MUSIC] Hi, welcome back. Starting this module, we already have our images with content, and our displays are starting to get somewhat interesting. And in this module we're going to add geocoding to be able to add address information to our images, so that we can start introducing the concept of distance. At the model layer, we'll have some interesting work to do. We'll start by adding longitude and latitude to our images to support geolocation queries. And we'll bring in the Geokit-Rails gem in order to implement those queries. Finding things, what's the closest, what's within range. And what is the distance of an image from an origin? And then we'll take advantage of the relationship between thing image and image, so that we can apply those same properties to our subjects. And in this module, we'll also have another chance to have a deep dive down into SQL and Query Scopes, and we'll take another look at joins. We'll be leveraging inner joins, outer joins both left outer joins, and right outer joins, as well as custom selects, and full custom queries. When we reach the API layer, we'll add geocoding capabilities. Or we'll go out to our provider, and we'll geocode and address into a location with the position. Or reverse geocode, a position into a location with an address. And we'll use the Google Maps Geocode API in order to do that. And we'll establish a free account. And in order to stable those account thresholds, we'll add a geocode cache on the backend, within our Rails server, using MongoDB. At the functional level within the API, we'll allow our users to add position to image, and to be able to locate subjects. Thing images within a certain criteria. Mainly distance, but type as well. And we'll finish the API topics, adding an HTTP cache. With cache control telling users how long they can keep our answers before they have to come back and re-validate them. And e-tags, knowing when the answer is still current. At the UI layer, we'll be focusing on the geocoding and reverse geocoding aspects of taking addresses and turning them into positions, or positions and turning them into addresses. And we'll create a service that'll interact with the back end, and work with the caching layer, and we'll reuse that service in at least two places. One, we'll allow users to add position to their images. And two, we'll add a component to our Navbar that'll be responsible for taking the user expression of current origin, and storing that in a service that will become the rallying point for various components to begin showing the user a view of what they are currently interested in. So this module is all about establishing location and distances between the images at certain locations. So the user has the ability to determine what is close to them and far, and make choices of what they want to get to. Okay, let's get started.