GNOME 3.10, 3.12 and me
As you probably already know, I've been working on Maps, geolocation and geocoding apart from Boxes in 3.9 development cycle. Although there is still a lot of work to do in all these, I'm really happy with what we achieved in a short amount of time:
- Maps: There was desire and design page for a map application for GNOME but I didn't see any implementation. I looked around and found out that Mattias Bengtsson had already a repository so I helped him start the project. Currently it only allows you to some basic things you expect from a map application, like searching for places and finding your location but for a preview application that was developed in a few months by a few people, its a big achievement that everyone involved should be proud of. We still have plenty to do for 3.12, where its supposed to be a useful and stable application and not just a preview. Unfortunately, I myself won't have a lot of time for Maps in this cycle, so if you are interested in maps (lots of fun guaranteed!) and are looking for a way to contribute to GNOME (or Free Software in general), here is your chance to change the world for better.
Since Maps use the awesome OpenStreetMap project (through libchamplain), another way to contribute is to edit maps directly in OpenStreetMap itself. This is ideal for technology enthusiasts who lack programming skills or interest in it. That is not to say that almost everyone would enjoy this kind of contribution. My good friend, Federico tells me that it could easily become an addiction. OpenStreetMap has several editor clients for different platforms so you can choose the one that suits your needs.
- Geoclue2: So we basically started a re-write of Geoclue some months back. Rationale could be found here. Currently we only have IP-based geolocation and that unfortunately is limited to city-level accuracy at best. While this is not enough for some applications (e.g Maps) its already serves well for some important applications like Clocks and gnome-settings-daemon. So in GNOME 3.10, your local clock is automatically added to Clocks and your system timezone automatically updated (if you choose so) as you travel around with your laptop.
In 3.12, I would like to first address the privacy concerns: Users should be given control over which applications should be allowed to access their location. This will be done through per-user agents running in desktop sessions. I already have implemented the geoclue side of this and have implemented a demo agent but I gotta implement an agent in at least GNOME Shell before Geoclue by default requires all apps to be authorized. KDE (every linux-based OS) folks will also have to implement an agent if they intend to use Geoclue2.
Once privacy in place, I would really want to add more geolocation sources: GPS, 3G and WiFi-based geolocation. The first two, I'm told should be easy to add w/ latest ModemManager.
WiFi-based geolocation will most likely be based on Open WLAN Map project. I have not yet looked at the API their library provides but I'm hoping its not too hard. Implementation difficulty aside, one big issue is that their database is hardly comparable to that of Google, Nokia, Microsoft etc so in most cases (unless you are in Germany) we'll not be able to rely on this source to locate you. That is a pity since this is the only option we have for wifi-geolocation, being open database of this type. On the bright side, they provide easy ways to improve their database using your smartphone. I'm hoping that by making use of this service, we'll further encourage contributions to this database and in a few years, this database will have enough data from many different areas around the globe.
- Geocode-glib: As I said, Maps already allow you to search for different places on the planet. This is done through a process called geocoding. This process translates a string, which could be the place name or part of it, and gives you details about all places that match such a string. The most important part of these details are coordinates. Another small feature you might notice in Maps is the "What's here" item of the context menu, which shows you details about the place where you cursor currently is on the map. This is done through a process called reverse-geocoding. Simply put, given the coordinates of a place, you get details (especially name) about it.
Bastien had been working already on a library for geocoding and reverse-geocoding called geocode-glib. Since I needed this for Maps, I helped clean it up. While doing so I realized that it used Yahoo Places service, which not only is a closed/proprietary service, it doesn't have enough data and most importantly is not designed to be used for geocoding. Turned out that OpenStreetMap folks provide an open service for geocoding, Nominatim I ported geocode-glib to use Nominatim instead of Yahoo Places. Since Nominatim shares the same database with OpenStreetMap, contributing to Nominatim is the same as contributing to OpenStreetMap and vice versa and you use the same clients/tools to do that.
All this would not have been possible without help from our awesome community. Special thanks goes to my Google Summer of Code students, Kalev Lember and Mattias Bengtsson, and my colleague and friend Bastien Nocera. For Maps, I was also very lucky to get help from an awesome new contributor, Jonas Danielsson. Maps wouldn't look any good without his work.