For the sixth time, KDE has mentored students as part of the Google Summer of Code program. The students get to take their first steps writing code for a Free Software project with a mentor by their side for a summer. Once again our students have worked on exciting projects that you will be able to see in the next releases - many will even be part of the 4.6 releases. Nearly all of the 50 projects were finished successfully this year. This is the second of two articles about what the GSoC students accomplished.
Diego Casella worked on an authentication mechanism for scripted Plasmoids downloaded and installed with Plasma’s “Download New Widgets” dialog. It consists of a library that handles all the authentication-related functions. Diego remarks: “I also extended the Plasma widget explorer so that it can take advantage of the authentication library and show a rating for each scripted Plasmoid. To close the circle, I've extended the Attica library and KNewStuff in order to allow sending and receiving the PGP signature along with the Plasmoid package. I also improved PlasMate to provide a simple interface for signing the Plasmoid package and uploading it to opendesktop.org."
Thanks to Diana Tiriplica, Kate is now able to recover (most of) what was written after last save in case of a crash or power failure. A swap file is created after the first editing action on a document that was successfully saved. If the user closes the document normally or saves its content, the swap file is deleted, otherwise, if Kate crashes, it remains on the disk. On load, Kate searches for the swap file, and if it exists, the user has three possibilities: recover the lost data, discard the swap file or view differences between the original data and the recovered one. If the user chooses to restore the lost data, the editing actions from the swap file are replayed over the current content of the document. If the swap file is not valid, the recovery is performed with a warning that it might be incomplete. More details and screenshots.
Gabriel Voicu joined digiKam to implement 'Reverse Geocoding and Improved Map Search'. He explains: “The 'Reverse Geocoding' part of the project uses coordinates found inside images to tag those images with a human-readable location (country, state, city...). So, now if you have many images and you want to add location tags to them, it won't take years of tedious work to complete. 'Map search improvement' came about because of the need to draw a rectangle over a map to select images by region. The problem was that no images were displayed on the map, so the user didn't quite know which images will be selected. I've rewritten the whole code using libkmap and now the map displays all images even if nothing is selected.”
Rohan Prabhu worked on scripting support for KWin. He says: "Windows are the primary feature of a graphical shell. They define how the workspace is organized, and hence define how you work. Scripting now allows you to organize and customize the windowing process. You'd like every restored to maximize itself? 4 lines of scripting and you're good to go. Once scripts are written and published, you can fetch any customization you want, configure that script according to your needs and reclaim your desktop.” The images demonstrate KWin scripting (click images to enlarge).
Brian Pritchett worked on data engine caching/storage with the Plasma team. He writes: “During the first half, I got a working implementation that would store data from sources marked by a data engine using KConfig. During the second half, I developed an Akonadi resource and de/serializer. This was used by a plugin I wrote so that Plasma can dynamically load to store all the data. There are still some issues with the plugin, but I want to get them sorted out soon because the KConfig backend isn't holding up to performance tests.”
Henry de Valence wrote a new OpenGL drawing system for KStars that runs up to ten times faster than the existing QPainter-based system. He adds: “Since not everyone has hardware acceleration, we kept the older painting system as an option, and refactored the sky drawing code to abstract away the details about which painting system is being used.”
Gaurav Gupta introduced a bookmark feature to Marble and is continuing to work on polishing the feature. It includes saving, deleting, editing bookmarks, folders and auto suggestion of bookmark names using reverse geocoding. He writes: “It was a great learning experience in working with KDE. The code review on reviewboard.kde.org was the thing I liked the most because it enhances coding skills.”
Oszkar Ambrus worked on a dedicated desktop search GUI framework for Nepomuk. He explains: “I wrote an API for GUI components such as a list widget for Nepomuk Resources with its appropriate model, an editor to handle resources and their important properties using a plugin system, and a flexible widget for editing single Nepomuk properties and other GUI elements. We also implemented a flexible framework for faceted searching using Nepomuk search terms. The search GUI application built upon the API features a query editor, a facet widget and a list widget which provides relevant displaying and editing of resources.
Martin Sandsmark worked on a client-side library for ownCloud. He helped expand the Open Collaboration Service specification to include support for private data, then implemented that part of the spec in the OCS implementation of ownCloud and libattica. He also built an application to demonstrate the API. This library can be used by applications for central storage of user data such as high scores, bookmarks and passwords. He writes: “I also have an almost working patch for Rekonq to synchronize its bookmarks using libattica, which I will clean up and release soonish.”
Wagner Reck describes his work: “In this Google Summer (a cold winter here in Brazil :) ) of Code, I worked in Rocs, making some new features and learning a lot more about KDE’s frameworks. My work was the implementation of an include system to make it easier for users to reuse their existing algorithms, new file formats like GML, Dot and KML, and the coolest: support to new data structures through plugins (kservices)! Now, is possible to write a plugin telling Rocs how B-Trees work and 'voialá', you can show your new search in B-Trees to your fellows. In the next Rocs version, we will need to change its description from Graph Theory to Data Structure theory :) It was wonderful to be part of this whole project, and I'll be working further on Rocs, creating new plugins, example scripts and new features like GHNS integration and multiple opened documents.”
Teo Mrnjavac worked on media transcoding. While the general trend of moving one’s data to the cloud is on the rise, users still have the challenge of managing multiple media formats of music files stored locally, especially when dealing with portable music players. To address this issue, Teo implemented a transcoding feature. The feature allows the user to convert a track into another format using one of several encoders provided by FFmpeg. The interface is a simple dialog, which pops up before a copy operation and offers the choice of doing a straight copy or converting the tracks.
Adam Celarek created a new color picker for Krita. It supports color spaces, different kinds of selectors, shade selectors, a color history, and an algorithm for extracting common colors in an image. Key aspects of the new color picker are that it does not take up too much GUI space and that it is configurable. From Adam: “Thanks to Google and KDE for making this possible :)”
Daniele E. Domenichelli had an ambitious project with “Telepathy Tubes and File Transfer in KDE”. The framework he developed is intended to be used in two different applications:
1. Plasma widgets sharing with contacts using StreamTubes
2. Collaboration in mathematical software using Cantor and Telepathy DBusTubes
He started the GSoC writing a few jobs for SteamTubes, DBusTubes and file transfer channels, including jobs to start a channel and jobs to accept a channel. After writing a few applications of those, he moved to earlier steps in the process chain and wrote additional jobs--request a channel and handle a channel. All those jobs use Nepomuk resources representing the “contact”. He moved on to deal with “text chats” that are handled by empathy or by “telepathy-chat-handler“. He also worked with QtDBus peer-to-peer connections, and other Telepathy-related applications. Daniele started the summer with several lofty goals and achieved many of them. He also discovered a few more things that he intends to keep working on. More from Daniele and screenshots at GSoC Project Summary, Hello Planet, DBus whiteboard demo, Telepathy in various applications: Konqueror, KSnapshot, Cantor
Harshit Jain is an a undergraduate student from Institute of Technology, Banaras Hindu University (IT-BHU), India. He is in his sixth semester of Computer Science and Engineering. Harshit’s GSOC project was to implement 'Time support for Marble'. He accomplished the following:
1. Changed the data source of city placemarks to GeoNames
2. Implemented KML time tags ( begin, end, timeStamp, when, timeSpan )
3. Implemented KML data tags ( extendedData, data, value, displayName )
4. Displayed timezone of city placemarks
5. Implemented central internal clock
6. Implemented DGML time tags and merged monthly themes
More information is available at Harshit Jain’s blog.
Paulo Rômulo writes:
"My GSoC project goal was to enable preliminary UPnP support within KDE. UPnP technology offers pervasive peer-to-peer network connectivity of PCs of all form factors, intelligent appliances, and wireless devices. It is used to provide seamless networking/sharing/services without the need of any configuration. In this first effort, two kinds of UPnP devices are supported, Media Servers (e.g., a computer, laptop or mobile device with some AV content) and Internet Gateway devices (routers, modems). An example of the integration of media servers with the desktop (Dolphin and Device Notifier) can be seen in the screenshot."
From Milian Wolff:
“I spent my three summer months working hard to revive Quanta+ based on KDE Platform 4. Mostly this meant removing old cruft and rebasing existing code against KDevplatform, the base of KDevelop that is supposed to be shared among IDEs. Of course I did not only remove code, I also worked on the XML language plugin, that is now useful for editing XML or HTML. The toughest part was getting multiple languages in a single file supported properly in KDevplatform (e.g., CSS inside HTML). I can now proudly say ‘It works!' Lots more work will be required on Quanta+. I plan to continue to working on that together with my usual involvement with KDevelop. I’m pushing for a first experimental (Platform 4) Quanta+ release at the end of this year!”
Ilie Halip worked on making KDE on Windows easier to debug. When Ilie started, DrKonqi wasn't even compiled on Windows because it didn't run, and KCrash did nothing. Now, DrKonqi is up and running, backtraces work, and the build scripts and the kdewin-installer have been modified to support debug packages! This is a big improvement because developers can now get crash reports, and information to fix bugs. Ilie writes: “It was great working with the KDE people. We are planning to keep in touch. There are so many opportunities for improvements, and I'm thrilled to be a part of it!”
Victor Carbune worked on changing the way KStars stores and manipulates Deep Sky Objects. The main purpose of his project was to migrate the current binary structure to a sqlite3 database. This has several positive consequences for KStars, the most important of which is that KStars can store information from multiple data sources for the same object (supporting multiple designations for an object). The Deep Sky catalogs can be easily extended and completed, and searches can be done much faster. Victor has implemented a class so that developers can easily make use of the new query system that replaces the existing search dialog.
Benjamin Port worked on KPresenter to improve animation framework and create animation effects. Here is a video of some of the effects. You can already load, show and display basic effects such as rotation, scaling, moving. Benjamin is continuing to work on the project until it is complete to his satisfaction.
Martin Klapetek’s GSoC project was non-destructive editing for digiKam. DigiKam has approximately 478,000 lines of code, which makes it difficult to get familiar with the existing codebase and current workflow in such a small amount of time. Martin writes: “But with help from my mentor, Marcel Wiesweg, my two digiKam co-GSoC'ers Aditya Bhatt and Gabriel Voicu and the rest of the development team, I was able to lay down the most needed basics for the non-destructive editing even before the midterm evaluation. The next challenge was making it actually work. And making it work in such way that is pleasant and unobtrusive for the users. I can say that this goal was mostly achieved by the end of this amazing summer. It was a really awesome feeling to get involved in actually helping KDE become even better. And because they say you should stick with the awesome things in your life, therefore my involvement now continues :)”
Oleksiy Protas’ project was to improve the R Backend that has been part of Cantor since its first release, but which had been lacking some usability features. He implemented proper completion for partly entered commands and parameters, similar to that in KDevelop and other modern shells. He added proper syntax highlighting for R in the worksheet, and a prettier way to display tables (using html instead of ascii). In addition to these big features, he added some smaller niceties such as a new plotting dialog and did some overall polishing of already present features to improve the overall experience of using R with Cantor.
Maciej Zarzycki worked on implementing a framework for easy exporting and importing of all your PIM data in Kontact. This will make it easy to exchange data and move Kontact data to a new installation.
VideoLan projects working on KDE's Phonon
We are delighted that the VideoLan Project additionally took on two projects that improve Phonon, KDE's multimedia framework:
Michael Forney extended Phonon to support the playback of raw audio and video formats. This allows software to easily generate or manipulate actual audio or video data and play it from memory with Phonon. For example, this can be used in games where it is sometimes easier to generate a sound on the fly, or in audio editing applications that work with raw audio in memory. Also, this provides a framework for setting options required for the decoding of some media.
Casian Andrei's project "Phonon Capture API" involved implementing support for various capture devices (such as webcams or microphones) in Phonon. Currently, it works with Video4Linux devices for the Phonon VLC backend; ALSA capture should also work, but it is not well tested. Casian explains: "This means that multimedia applications that use Phonon will be able to access capture devices with ease. Eventually, the normal user will be able to use capture devices with KDE applications, but it will take a while until this happens. I plan to continue working on this until it is functional at a large scale."
Another big thank you to the students, mentors, Google and VideoLan for another great Google Summer of Code.