Summer of Code 2013 – Progress Report #2

Things are going pretty well since my first progress report: route synchronization feature is almost complete! Marble users can store their routes on ownCloud easily now. All they have to do is to click to “upload to cloud” button when viewing a route. But first they need to tell Marble which server it will use for synchronization purposes. Users can use Marble’s own configuration dialog to do that:


By the way, adding KWallet support is on my to-do list.

Users can use “cloud routes” dialog to manage their cloud routes.

Cloud Routes Dialog

The first route is a route which is on the cloud and ready to use offline. The second route is already saved to user’s device, but isn’t on the cloud. For example routes which are created when offline will be in that situation. Users can upload those kind of routes manually by clicking to “upload to cloud” button. After I implement bookmark synchronization, I will also enhance route synchronization so Marble will upload those routes when there is a network available. The third route is on the cloud but not saved to the device. Users can download those routes to their device by simply clicking to “load” button. Also, when I enhance route synchronization those routes will be downloaded automatically by Marble. Don’t worry though, I will add an option to settings dialog so users can disable those automatic actions to preserve their precious data plans.

You can test the things I mentioned above yourself (and see how awesome they are :P) by cloning Marble’s master git branch. You can get the 3rd party ownCloud application that you need to install from Andrei Duma’s GitHub repository. We plan to setup a demo server with the Marble ownCloud application later as well.

That’s all for this update. Stay tuned.

Summer of Code 2013 – Progress Report #1

My Google Summer of Code project, “Codename: Marblecloud”, will help Marble users synchronize their routes and bookmarks between their devices using ownCloud. Sounds cool, right? It will also pave the ground to synchronize all user data in the future when it is complete. To accomplish this breathtaking mission, a 3rd party ownCloud application which provides an API needs to be created along with necessary classes and interfaces for Marble. Andrei Duma, another Summer of Code participant, is developing Marble’s ownCloud application while I develop the client side.

You can follow Andrei’s work on GitHub.

We first started implementing route synchronization. It is easier than bookmark sync, because bookmark sync requires merging and conflict handling. So far Marble can upload routes to cloud, display a list of cloud enabled routes and download routes from cloud.

Routing Widget with new buttons
Routing widget with its shiny new cloud related buttons (icons are not final).

You can see Marble’s new cloud buttons residing right next to the save button. The one on the left uploads the route currently displayed to cloud while the other one brings up cloud routes dialog.

Cloud Routes Dialog
A new dialog which displays a list of cloud enabled routes.

This new dialog lets users view routes on their cloud. Users can download the ones they like or uninstall routes from their devices by simply clicking to “remove from cache”. If they want to get rid of the route completely, they must press to “remove from cloud” button after removing the route from cache.

The next step will be implementing an ownCloud account manager. For now Marble communicates with a dummy API but after the creation of account manager, testing will be made with the real API which Andrei develops.

Stay tuned.

Around You

Good news, your favourite virtual globe Marble now is your virtual explorer!

In parallel with the world domination plan, Dennis is porting Marble to Plasma Active and as my Season of KDE project, I am trying to help him as much as I can. To help users to find the places around them, I created Explore activity, an activity that displays popular places on the map and allows you to get additional information about these places. It uses Foursquare’s rich venue data powered by its users. Here is a screencast about it:

You can test it out by downloading and compiling Marble’s git branch sok-2012-plasma-active. Any suggestions? Write a comment below.

Google Code-in, Marble and I

Tomorrow, Google Code-in will end. I spent nearly all of my month by participating to it and it has been one of my great experiences. Thanks to the contest, I’ve learnt a lot of things, met with people from different projects and communities and became a KDE developer.

At the moment, I have completed 21 tasks and 20 of them is Marble’s, my favorite virtual globe. I have created two online service plugins, a map creation wizard and DGML tag writers for it. And in case you wonder, my other task was a Plasma task, I’ve created three activity templates and improved an existing one.

The online service plugins which I have created are earthquake and OpenDesktop community plugins. Earthquake plugin shows recent earthquakes and their magnitudes on the globe. Each magnitude range is shown in different colors.

Earthquake Plugin in Action
Earthquake Plugin in action

And OpenDesktop Community plugin shows OpenDesktop community members’ avatars on the map.

OpenDesktop plugin showing users

The wizard which I mentioned helps users to create new maps easily. It can create three kinds of maps,

  1. Static image map (a bitmap of whole world)
  2. Static URL map (maps like OpenStreetMap and Google Maps)
  3. WMS maps (maps of Web Map Service providers)
Step 1
Step 1: Map provider selection
Wizard Step 2
Step 2: Map provider's details
Step 3
Step 3: Your map's information (name, desc. etc.)

Being part of Marble community was a great adventure for me; getting help from people when I stuck, showing off my work, commiting my code to KDE’s SVN repositories and more.

If you want to get involved and contribute, visit Marble’s webpage. You can get involved with coding, documentation, artwork and promotion of Marble.

Lots of helping hands have contributed to Marble... join us!

Special thanks to Torsten Rahn, Dennis Nienhüser, Thibaut Gridel and Bernhard Beschow I couldn’t do anything without your help.