Right so I thought it was about time to give a bit of an update on what I have been working on so far for my GSoC project. I have done some really interesting stuff with a lot of ground yet to cover so I'll try to keep it brief ( and I hope to update you all more frequently ).
If you have a look at my last post you can see the big goals that I have created for myself, which is a definite positive as I believe you can never aim high enough! The first of these goals is what i called the Annotation Rendering Framework, which has proved to be a challenge. The Idea of the rendering framework was to provide similar functionality to the QGraphicsView, QGraphicsScene and QGraphicsItem classes in the Qt Gui Module. And believe me, thats a hard act to follow! The main feature from the Qt classes that I wanted to recreate is the ability to "Click and Drag" items around the interface of marble, which is made difficult by the fact that marble is not a 2D surface and hit tests get a little bit more complicated.
Thankfully I have the opportunity to stand on the shoulders of giants to get all of this working. The Marble developers have implemented a lot of the necessary functionality to get my stuff off the ground an its my job to extend this and integrate it all in a useful way. So without further ado I have a small video to present you with showing a little bit of my work.
The next step is to get nice little pop-up showing the details of each annotation, be it text, video or audio. This hopefully shouldn't take very long as I have already done a few experiments to do with Geo-Located QWidgets so watch this space!
Saturday, June 20, 2009
Update and Exciting Features
Posted by real_ate at 5:28 AM 4 comments
Labels: gsoc, KDE, marble, open source, Qt
Wednesday, April 22, 2009
Accepted Google Summer of Code Proposal
To follow the trend of my organisation's GSoC mailing list I have decided to make my proposal public, this should help everyone see what tasty treats might be coming in the near future and it is also to allow people to give me some feedback on the ideas.
The post will be , for the most part, word for word the same as the the application. The only bits that will be missing are the contact details or boring information.
Title:
OSM Annotation for Marble Desktop Globe with an Optimised interface for smaller screens
Student:
Andrew Manson
Abstract:
This project will allow for the annotation of raw GPS data for use in the the mapping process of Open Street Map (OSM). GPS will be annotated with Geo-Location aware text notes, voice recordings, images and videos while tracing new GPS routes. You will also be able to annotate existing OSM data to verify its accuracy. The project will be aimed at a small, light device with GPS capabilities that can run the Marble Desktop Globe such as the EEEPC and the interface will be optimised for this.
Content:
During the course of my studies I have been very interested in Geographical Information Systems and have chosen to do as many projects as possible in this area. This is why I was drawn towards the Marble project and I was very fortunate to be given the opportunity to work with the Marble team in the 2007 Google Summer of Code where I implemented the current GPS functionality that can be seen in Marble today. Since then I have been pretty quiet on the development front, because of my college commitments, but have always remained interested in returning to the Marble project to improve the work that I have done in the past and to implement new features.
This project idea was part of the proposed project list last year and since then it has evolved somewhat and I have even tried out some of the techniques that are necessary to implement it as a part of my Final Year Project in University, which I hope to be able to integrate with Marble sometime in the future.
The overall goal of this project is to give Open Street Map contributors an integrated, useful and intuitive platform to collect new raw GPS data while interactively annotating the collected data with Geo-location aware notes ( text, audio and video ) that will be helpful to identify the data while uploading it to the Open Street Map server. During this process we should be able to display the latest Open Street Map data to the user so that they may verify its accuracy. This data can either be streamed live over the internet, if a connection is available, or if not then sections of the data could be downloaded to the local machine.
Although my main goal is to provide this annotation tool there will be a few essential features that must be added to Marble before the tool can be integrated. These will be further discussed in the Implementation section below.
Implementation Details:
The most notable new feature that I would need to add to Marble would be the ability to interact with data that is currently being displayed to the Marble Widget. To clarify exactly what I mean by "interact":
- The ability to add an information object to the map at a certain Geo-location.
- The ability to click and drag the item to a different Geo-location within the view.
Currently this behaviour is not available to Marble and once it is implemented it will allow for a more in-depth user experience, offering the potential to edit all data items directly within Marble.
I have been discussing the implementation of the of this functionality with some of the Marble developers and was considering creating a custom QGraphicsView overlay system for the Marble Display Widget. This approach however will not be included in my work for Google Summer of Code because it would be completely experimental and would mean that my work would not be directly applicable to the current SVN trunk. Instead I will integrate the system into the current rendering pipeline and try and keep the API for this section as close to the QGraphicsView API so that future integration with this part of the framework will be an easy process.
Another notable feature that will be required for this project is the ability to load and render raw Open Street Map data to the Marble widget so that it can be updated and used as a reference while the user is mapping. Although there is already an OSM view in Marble the implementation I require would be quite different from the current solution. Currently the view is created by downloading flat OSM tiles that have been prepared for Marble, Although they can be used as a visual aid to the user while mapping, they do not contain all of the information that is available on the OSM servers. Once the data is loaded some additional features may be added to the project such as making the system aware when you have ventured into an area that has not yet been mapped or adding simple routing algorithms to Marble using the loaded OSM data. These extra features will be listed in the "If time permits" section at the bottom of the Timeline below.
The other necessary features shouldn't be too difficult to implement considering the implementation of Qt, for instance: rendering text boxes to the map or having small images visible on the map. The difficulty here will be the seamless integration that I am aiming for in the capturing of images, videos, audio and the taking of text notes. Text notes will be easy enough to accomplish as I will be developing specifically for an EEEPC but the integration between Marble and cameras or microphones will be more difficult. Here is a simple image that I hope describes what I want to accomplish from this project:

Although the example annotations in the above picture are unremarkable I'm sure you can understand from my descriptions that getting to this stage will be a great success.
The following is just an itemised list of what I intend to do and is meant as a reference.
Annotation Rendering Framework
- Be able to add a text, audio or video item to the display
- Have the annotations linked to a GeoData location aware data structure
- Allow for annotations to be moved, i.e. interactively alter their Geolocation.
Live Annotation Interface
- Make use of the live GPS tracking that is available in marble
- Be able to "drop" an annotation (picture, text ) at a current location
- Have Geolocation aware Audio and Video
- Make the annotation item aware of the GPS track that represents where it was recorded.
- Move the annotation item along its GPS track during playback
Open Street Map Integration
- Download OSM data live from their servers
- Download OSM information to a local cache for use when offline
- Allow users to choose what sections of the map to download
- Be able to update local cache with newest information from the OSM servers
Interface Intergration
- Small Screen Optimisations
- Integrate the Recording devices and commands into the Marble Widget
-If time permits-
- automatic annotation i.e. adding "Current position not currently on OSM" when in unmapped area
- moving "camera" along the GPS track to replay where you traveled.
- sync moving camera to moving Video/Audio annotation item.
Tentative Timeline:
For the most part of the project I will be adopting a spiral development model where I will work on each of the separate parts of this project at the same time, adding a few features at a time. This will make it easier for me to show my supervisor what progress I have made and also allow me to get some feedback from the Open Street Map community ( and of course the Marble community ) at regular intervals throughout the project.
The only full features that will need to be completed first are the ones listed under the heading "Annotation Rendering Framework" as listed above. This is the only essential prerequisite for my project. This section should take me less than a week to implement and after that the main development model can get underway.
By the mid-term evaluation I would like to have:
- Live annotation, giving the user the ability to add an annotation to their current location with a single click.
- Preliminary implementation of the Open Street Map display so that users can see without any trouble where still needs to be mapped.
- Preliminary integration of the Recording devices into the Interface, i.e. having the ability to seamlessly record even if we cannot display currently connected devices.
- Small Screen Interface patches. This work will be ongoing.
About Me (let us know who you are!):
I'm a final year student of Computer Science in Trinity College Dubin. Since this is my last year of a 4 year degree I've had the opportunity to gain a lot of experience in developing applications and systems to a high standard. When it comes to developing systems as part of a group I consider myself to be a Plant, that is, a person who brings discussion and innovative ideas to a project and tries to think outside the box. This, along with my general aptitude for coding, has allowed me to become the project leader for most of the group projects that i have participated in. Although i feel comfortable and at ease while working as part of a team, I have also excelled in my individual projects, even as early as first year where I won the award for Best Programmer in my class.
In the past year i have developed an interest in Embedded Systems and electronics, giving me another outlet for my inventions and for me to develop some more of my interesting ideas.
If I were to be accepted to the programme, the first thing that I would do would be to register for the Akademy conference, I really enjoyed it two years ago and found it to be very informative, so much so that I am extremely eager to go back. Google Summer of Code is sufficiently flexible to allow me to go for the entirety of the conference, and naturally GSoC and Akademy would be mutually beneficial.
Posted by real_ate at 5:48 AM 0 comments
Labels: gsoc, KDE, marble, open source, Qt
Tuesday, April 14, 2009
KDE 4.3 Release Schedule
After Finding out there was no central ICal for The KDE Release Schedule I decided to make my own and share it with the world, this is Open Source after all ;) if you want to follow this calendar yourself in you usual PIM suite then use this link.
Posted by real_ate at 7:05 PM 0 comments
Labels: KDE, open source
Friday, March 20, 2009
Returning to the nest
You will probably notice that the last post that I've actually put on this blog was 2 years ago, 2 long and glorious years that have been a great chance to improve my experience and expertise with software and coding. I'm still in college at the moment but I reckoned that it was about time i returned to the project that started my life as an open source contributor, Marble.
Marble is a nice 3D(ish) globe program that is part of the KDE project. It is mostly built on Qt so it is easily portable to any platform. What i set out yesterday to do was the relatively simple task, or so i thought, of understanding the XML parsing system of marble with the intention to implement a simple test implementation of a Open Street Map parser. When i started yesterday i was full of vigor and looking forward to the challenge, but by the end of the day i was sent home with my tail between my legs.
So you might be wondering what can scare a young programmer so much... Its all just a matter of understanding. The little bit of programming that i have done for marble 2 years ago consisted of a simple (naive) XML parser that read in GPX information and rendered it to the screen, but since then the XML story of marble has become a lot crazier. Not long after my time in marble a unknown programmer ( unknown to me, please post their name in the comments if you know ) came on board with a solution, and because of his work on the Webkit engine you can bet that he knows what he was talking about. The problem with his solution was simple, it was "Right".
Yes that's right, you heard me! I'm complaining that a solution is right and i have good reason! My goal yesterday was to understand the XML implementation in marble, i understood the concept in about 5 mins but the implementation was littered with so many "Best Practices" and "Time saving Tips" that i challenge anyone who hasn't spent some time doing production level XML parsing to try and understand it and implement a parser in less than a week! This kind of a system is so intimidating to any programmer that would consider having a pet project using Marble's Parser would be instantly scared off. I'm not saying that we should sacrifice all performance for "Ease of use" but i really believe in a balance, one that will be inviting to new programmers but still encourage them to learn some of the "Best" ways of doing something.
I'm not going to get into the details of what i really didn't like about the parser but i will list a few points.
- Macros! god i hate macros, and i would put that down to being thought in my first year of programming "Don't ever use Macros, they are Evil". I wouldn't necessarily say that they are evil but using them to save time really feels like a bad idea to me, a more structured architectural model may result in less use of macros? who knows!
- Element dictionary! Ok this sounds like a good idea in theory, and i can see where this can be a very good idea in practice too, but i really don't think that a standard parser that uses an element dictionary is the "Best" way to account for the many varying formats that could represent data that a marble module or plug-in might be interested in.
- Parser only able to return GeoData! one problem with using this approach with OSM is the xml tags do not completely enclose the relevant data in their children or parents. To actually implement an OSM parser you would need to modify the parser itself, which doesn't really make it a generic "One size fits all" parser.
I have proposed a solution for a middle ground to the head developer already, we have discussed it at length and i will be doing an experimental solution based on what we discussed to see what it's performance is like.
I might be convinced, at some later stage, that the parser model in marble is in fact the best solution for Everything! but just not right now!
Till next time,
Over and out
Posted by real_ate at 10:34 AM 0 comments
Labels: KDE, marble, open source, Qt
Wednesday, June 13, 2007
Update 1
Hi to anyone listening,
Wow this has been a crazy few days! I've just finished college (with more stuff to finish off) for the summer and have jumped head first into the project. As usual i have come up with this crazy idea of dealing with the base/generic case first and then building from there (what can i say, its what i do!). so right now I'm investigating the wonderful marble code to find anything that could be deemed as a layer (in the rendering sense) and extracting all of that in a frame work for all layers, present and future! The reason for this in my mind is to keep track of memory management and what not in a base class so that coders of new layers can keep upstairs at the high level coding ;)
so right now I'm off to find all that i can that would apply to the generic base classes. after i do about 1/2 hours of work on that today I'll move onto some information gathering, as in how to get my gps info from my gpx/device into the virtual world. that is my plan for today, oh and to contact the kde-edu mailing list, and so help me I'll be putting my all into it! this stuff is great craic! (and for all you non Irish, that just means fun )
Slan leat (goodbye)
Andrew
Posted by real_ate at 10:38 AM 0 comments
Labels: gsoc
Wednesday, April 18, 2007
Next up!
ok, now that everything in the start has calmed down i am seeing some sort of a direction in my madness emerging. i have contacted my mentor and will be making note of all the things that he had told me to get started on and hopefully start to put time to explore into my schedual. it will be happening soon but i'd like to be able to put it in tomorrow!
another thing that i have been trying to get used to is the communication within my organisation. its hard to follow what exactly it is that i have to follow, find out where (or when) there is going to be a crutial communication and try and be there when it hits. of course its a learning curve, just have to find out what sheet to learn it from!
project wise, i've so far just started laying out my lists. not very big i hear you say? if you knew me you'd see just how big of an effect a list can have in my daily comings and goings.
so, thats it for now. just a story of exploring, making time and generating the list that will guide me and my project to salvation!
over and out...
Posted by real_ate at 2:05 PM 0 comments
Labels: gsoc
Friday, April 13, 2007
Google Sumer of code
Well if it isn't the best place to start my blog. I as of yet have kept as far away as i can from the idea of bloging because i just don't have time!! but i've just been accepted to google summer of code and i think its time to make a blog. its not gonna be of my personal life journey but instead i'll try and keep it updated on my academic journey instead. watch this space
Posted by real_ate at 5:21 AM 0 comments
Labels: open source