I was trying to produce a Marble DMG for Mac OSX since February and as all of you know that OSX has its own banana skins to slip you off, especially when you have upgraded to OSX Mountain Lion ( the decision which I am already regretting ). But, finally I have succeeded in producing a Marble DMG.
Henceforth, I would be privileged if all the KDE developers and users who use OSX gave a try to this DMG on their Macs. Here’s the link to the DMG - https://dl.dropbox.com/u/50262219/Marble-1.5.0.dmg . Also, it would be very helpful if you give me your feedback via the Comments, be it criticism or suggestion, so that I can improve upon my work.
Thank You :)
GCI t-shirt and certificate!
Finally, my efforts have bore fruits! Google has announced the 20 grand prize winners of Google Code-in 2012 via their Open Source Blog and I am one of the 20 lucky students. I have been named as one for my work with KDE. I look forward to meeting the Google engineers soon.
Ahoy! GooglePlex – here I come :)
How long had I been waiting for this to commence - every month, every week, every day passed so painfully slowly - it seemed like eternity. I sometimes felt like a little kid imagining weird things - imagining being in some limbo land where the clock just wouldn’t tick any further.
And finally it happened on the 26th of November, 2012. The Google Code-in ‘rocket’ had launched from the lands of the ‘Google empire’ to many thousand homes where young developers were ready to explore the world of Open Source in the next 50 days of their life. I am one of those students. I’m not exaggerating - seriously. I’m just giving voice to the feelings of hundreds of teenagers who participated in Google Code-in 2012.
After contributing to KDE in GCI ‘11, I was determined that this year I would be doing the same. Thankfully I got this opportunity and I grabbed it with both hands!
I was able to do 71 tasks for KDE and acquired a lot of knowledge while doing each one of them. And by knowledge I don’t mean merely programming skills but I got to learn things which, in my consideration, are much more important than this. I learnt to keep my cool in the most trying circumstances. I learnt to give a 100% in all my endeavours. I learnt never to lose hope. I learnt that friendship and humanity transcends all boundaries. I learnt that this is just the beginning ………… there’s so much more to learn!
It was during GCI when I got my KDE developer account, on the 6th of January. And I am just so excited about this. I am now a part of this community.
So much remains unsaid ….. but every thought can’t be put down via pen and paper - okay fine, it should be keyboard and blogpost ;). But I feel I have been able to convey how profoundly I feel connected to the K Desktop Environment.
I have not yet thanked my mentors and I wanted to do it in a special way. So, here it goes …
The ‘perfectionist’ - Dennis Nienhueser
The ‘guiding light’ - Torsten Rahn
The ‘helping hand’ - Rene Kuttner
The web ‘spider’ - Ingo Malchow
The KDE Edu ‘pair’ - Marco Calignano, Aleix Pol
The ‘super woman’ - Lydia Pintscher
The Affectionate mentor - Anne Marie-Mahfouf
The ‘anagram’ genius - Laszlo Papp
The ‘flask’ of knowledge - Jan Kundrat
The ‘visual’ mentor - Thorsten Zacchman
The ‘code-checker’ - Kevin Krammer
I would also like to thank Carl Symons for being my mentor in a task although we didn’t get an opportunity to interact but I look forward to do so in the future.
Apart from my mentors, I would also like to thank:
1. Ben Cooksley, for approving my developer account application
2. Jonathan Riddell, for adding my blog to Planet KDE
3. Teo Mrnjavac, for always being there with me and helping me out with my petty problems
4. Google Inc. for giving us a global platform to enhance our skills
Last, but by no means the least, a BIG thank you to my family for being like the life-giving oxygen - inconspicuous yet omni present.
KDE and the K Desktop Environment are registered trademarks of KDE e.V.
All the images are the sole property of their respective holders.
Marble has undergone many improvements during Google Code-in 2012. These range from extended KML support to plugin improvements. Following are the new features implemented in Marble :
Sun Control Dialog:
Marble shows the subsolar point on the globe which changes according to the time of the day. It is indicated by an icon. Previously the “Sun Control” dialog had only one option to “Show the Zenith”. This worked quite well but what happened was that with one checkbox, two operations were being handled, namely - showing the icon at the subsolar point and locking the view to the subsolar point. So, we decided to split them into their respective options. We now have a “Sun Control” dialog which looks like this:
This enables the user to either have the icon displayed or the view to be locked at the subsolar point or both. In the above case, where both the checkboxes are checked, Marble looks like:
The idea of showing the subsolar point in Marble is inspired from the original globes.
Marble has the Photo Plugin which, when enabled, shows images on the globe according to its geographical coordinates. The plugin uses the Flickr API to do this. We have added a new configuration dialog for the plugin which has the option to select/deselect the licenses for the images. So now images are displayed only if their corresponding licenses have been selected. The configuration dialog has one more option - Number of Items to be displayed. This option sets the maximum number of items ( here, images ) that will be displayed at a time.
The photo plugin has been migrated to the usage of the web popup which has been recently introduced to Marble.
At Marble, we respect the license of a person and/or organisation(s). Hence, we implemented this new feature which shows the license and the licensee of the current map theme since Marble uses a variety of sources for its map themes.
The user can click on the “Full License” option to see the full license. “Show Details” opens a new dialog with all the details associated with the current map theme and its license holder.
“Copy Map” copies the screenshot of the globe to the clipboard. However some map themes require attribution. So after choosing “Copy Map” we tell the user that the map needs proper attribution if used elsewhere and offer to automatically include the attribution.
The same happens if the user prints maps that are provided under licenses that require attribution (like OpenStreetMap).
Kinetic Earth Rotation:
Marble’s globe’s kinetic spinning option was previously enabled for default and the user had no option to disable it. So, we extended the main configuration dialog with this option and now the user can switch on/off the kinetic spinning of the globe.
These new features might seem very subtle changes in the wide Marble framework but together they go a long way - adding some ‘shining stars’ :) .
Hello, I am Mohammed Nafees. I have been introduced to the KDE development platform during Google Code-in 2012 and as I become one of the many KDE developers, here is my first blogpost on the new Navigation FloatItem that I have implemented.
The former look of the Navigation Float Item
I re-designed the Navigation Float Item of Marble in a series of GCI tasks which ended today. We now have a modern-looking navigation float item which works miraculously.
The first thing to implement was the arrow disc. I made a new class - ArrowDiscWidget - for it which inherits QWidget. The float item paints different pixmaps for different events - namely, enterEvent, leaveEvent, mousePressEvent and mouseReleaseEvent. The idea behind these events is that there are separate pixmaps which get painted when the mouse is hovered over the arrow disc, when the mouse is pressed and the normal state with no event being trigerred, that is, the default look. Implementing this arrow disc was one of the most challenging parts. There is one image and there are four different actions to be handled, that is, the four directions. So, the first part was to divide the image into four equal quadrants. For this, Dennis, my mentor, advised that we use Polar Coordinates. This worked quite well where we determined the correct arrow ( direction ) with the angle where the mouse is currently pointed to. We also excluded a small circle from the center so that when the mouse is hovered over the center of the arrow disc, no repaint gets trigerred.
(Left) The default look of the Navigation Float Item.
(Right) The current position button replaces the home button when required.
Next part to implement were the zoom buttons. So, I created a new class - NavigationButton - which inherits QAbstractButton. The pixmap handling for these buttons are just the same as that of the arrow disc widget. Next came the home button which is another NavigationButton.
The slider was yet another tricky part and I needed a lot of help from my mentors - Dennis and Torsten. For the slider, I made a new class - NavigationSlider - which inherits QAbstractSlider. The range of the slider is always the same as that of the current map’s zoom range and this is what is the tricky part. The original height of the slider is 160px and we have to convert the zoom range ( usually between 900-2100 ) to fit into this range. Dennis provided this calculation which worked wonders:
qreal const fraction = ( value() - minimum() ) / qreal( maximum() - minimum() );
int const y = ( height() - handleImageHeight ) * ( 1 - fraction );
where ‘value()’ is the current value of the slider, ‘maximum()’ and ‘minimum()’ are extreme values that can be set or to be more precise, the range of the slider. ‘height()’ is the height of the float item( 160px ) and handleImageHeight is the height of the handle image( 32px ).’y’ is where the slider’s handle is placed on the slider. And similar to this we had a formula for the conversion of the current position of the handle to the normalized slider range or zoom level. And with this the slider was complete. But there was still something missing. Thanks to Torsten, he made a new backdrop for the float item which made the navigation float item complete.
I recently extended the home button. The user can now switch between the home button - which when clicked, navigates the user to his saved home location - and the current position button - which when clicked, navigates the user to the current GPS position of his selected track. This change of buttons is handled by the float item’s context menu.
The current position button navigates the user to the current GPS position
The whole “Marble” experience was very enriching. I would like to thank all my mentors at Marble - Dennis, Torsten and Rene - for giving me just the right inputs and criticizing my work whenever the need arose.
The current look of the Navigation Float Item
Working for KDE during GCI ‘11 and GCI ‘12 has been a major milestone in my life. And now this connection has become even stronger as I step into the KDE world as a young developer who wants to contribute every bit of his creativity to this exceptionally unique community.
Hello! I am Mohammed Nafees - a 9th grader who hails from India. I’m a tech enthusiast and I am very passionate about programming. I have been working on projects based on Qt and C++.
My participation in Google Code-in 2011 had set the ball rolling - as it was then that I had been introduced to the K Desktop Environment, better known as KDE. Something which I feel is worth mentioning at this point is the fact that KDE has myriad sets of projects aimed at people from all stages of life.
After the completion of Google Code-in 2011, I was positive that Google Code-in 2012 will bring in a whole new host of KDE tasks and I wasn’t proven wrong. The greatest quality of the KDE tasks is that they require us to rack our brains and I feel that this helps us, participants, to learn new things and to extend the boundaries of our creativity. Last year, I was working on custom and historical map themes for Marble. This year, I’m focusing more on the coding tasks. Till date, I have done tasks for Marble, Kanagram and Pairs.
My first task was to implement the random color mode property of KML in Marble. It was fun. Other Marble tasks closed by me include - implementing the ScreenOverlay KML tag handler and renderer & modifying the Atmosphere and Measure plugins.
Pairs, which is a relatively new project, had very interesting tasks. I have implemented the Get Hot New Stuff upload feature in the Pairs Editor to enable the users to upload their Pairs theme to a public server, and have added “What’s This” and Tooltip strings to the same.
Kanagram had a task to add a timer to the game to make it more challenging - and I must tell you that it was equally “challenging” to implement it. Nevertheless, I successfully completed the task along with the acquisition of immense knowledge. It was during this task that I first used the QTimer and QTime classes.
Working for KDE has been a great experience. Each task is unique in its own way. The infective enthusiasm and zeal of the mentors & the refreshing and gripping tasks - KDE is all this and much more!